From 9a12bf3c2fec1cc5582bc90a70dd41a7108916af Mon Sep 17 00:00:00 2001 From: yz-yu Date: Sat, 11 May 2024 17:48:00 +0800 Subject: [PATCH] AI plugins (#418) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * init project Match-id-61778b743a9dc8d8df471dcb285fb229931648a6 * fix: fix build error (#1) * fix: fix build error * fix: fix server dependence * fix: add logo and fix readme (#5) * update readme (#6) * fix: add logo and fix readme * fix: update readme * feat: add pnpm to project * fix(bundle): fix env variable can not be bundle (#16) * docs: add pr and bug template (#18) * fix(bindEvents): fix bind Events can not delete (#22) * feat: 修复当画布没有内容时控制台报错 (#26) * fix:按钮组数据编辑后显示出错 (#24) * fix:走马灯属性配置清空标签页后添加标签页显示出错 (#23) * fix:走马灯属性配置清空标签页后添加标签页显示出错 * fix: 优化走马灯删除标签页问题修复方案 * fix(design-core): build error with monaco-editor (#57) * fix(page-lock):页面解锁按钮图标修复 (#43) * fix: 修复无页面时页面内容显示错误问题 (#31) * fix: 修复不切换页面点击页面设置时表单校验错误问题 (#32) * fix(block-list-icon):区块管理面板去掉列表图标 (#33) * fix:区块管理面板去掉列表图标 * fix(block-list-icon):区块管理面板去掉列表图标 * feat(docs): add Milestones (#46) * feat(chore): update package info (#53) * feat(chore): update package info * feat(docs-package): add homepage url * fix(toolbars): disable toolbar btn when page is empty (#70) * fix(toolbars): disable toolbar btn when page is empty * fix(toolbar): disable preview when page is empty * feat(doc): add doc link to readme (#54) * fix(style): adjust style detail (#67) * fix(canvas): change canvas menu item hiding to disabed (#75) * fix(canvas): fix del key error when nothing is selected (#69) * feat(chore): add setup script setup environment before serving (#80) * fix(pluginMaterial): fix block list can't scroll when visible in canvas (#77) * feat: 页面输入输出配置,配置内有内容时,按钮替换为展示部分文案内容。 (#66) * feat: 页面输入输出配置,配置内有内容时,按钮替换为展示部分文案内容。 * feat: 方法名修改更加符合语义 * fix:修复属性面板-插槽开关切换schema不正确 (#85) * fix:时间线步骤条编辑数据,步骤条会消失 (#84) * fix: 时间线步骤条编辑data,时间线会消失 * Revert "fix: 时间线步骤条编辑data,时间线会消失" This reverts commit b24f8ba60d9bdf42ec74cfdedd57a2bfcf7d63ba. * fix:时间线步骤条编辑数据,时间线会消失 * fix(pagePlugin): 删除文件夹添加节流,避免多次出现无法删除弹窗 (#74) * fix(pagePlugin): 删除文件夹添加防抖,避免多次出现无法删除弹窗 * fix(pagePlugin): use throttle by review comment * fix:loading can't be closed when state is saved (#87) * fix:loading can't be closed when state is saved * fix: remove global loading * fix(metaComponent): fix #79 metaListItems dragging not working (#86) * fix(pagePlugin): clear some state when delte current page (#72) * fix(pagePlugin): clear some state when delte current page * fix(pagePlugin): del unnecessary optional chaining operator * fix(chore): add code readablity * fix(chore): optimize code by review comment * fix: 数据源面板中,点击新建字段报错 (#37) * fix:修复组件属性绑定工具类函数,出码预览未定义 (#90) * fix(insert-footer-button):设计器页面设置-输入设置中,保存取消按钮顺序错误,格式化按钮样式错误,应与UI保持一直;大纲书导航中,眼睛图标,建议改为睁开就是可见,闭眼就是不可见;提示框样式修改 (#94) * fix(insert-footer-button): 设计器页面设置-输入设置中,保存取消按钮顺序错误,格式化按钮样式错误,应与UI保持一致; 大纲树导航中,眼睛图标,建议改为睁开就是可见,闭眼就是不可见; 提示框样式修改 * fix(styles-import): 解决tree组件选中样式背景色为黑色的问题 (#102) * feat(builtin): builtinComponent 组件独立包抽离 (#52) * feat(builtin): builtinComponent 组件独立包抽离 * 添加eslint&自动化构建 (#101) * fix:组件属性绑定工具类utils,修改预览出码实现 (#93) * fix: 修复空页面执行右键删除和右键复制时控制台报错的问题 (#103) * fix: 修复空页面执行右键删除和右键复制时控制台报错的问题 * fix: 修复空页面执行右建操作时控制台报错的问题 * refactor: 简化operations空判断代码 * fix: verify operations copy id * fix: verify operations copy id * fix: verify operations copy id * fix: copyNode function verify params * fix: 不可操作的菜单项disabled * fix: 点击disabled菜单项 不关闭菜单 * fix:修复自定义属性新增功能 (#108) * fix:修复自定义属性新增功能 * fix: 修复MetaHtmlText组件控制台警告 * fix:调整透传Attributes警告解决方案 * fix:调整透传Attributes警告解决方案 * fix:调整透传Attributes警告解决方案 * fix(canvasShortCutPanel): add click event to quick insert component in… (#81) * fix(canvasShotCutPanel): add click event to quick insert component in shortcutpanel * fix(canvasShortPanel): add deepclone utils * feat(utils): add deepClone method * feat(unit-test): add unit test for deepclone function * fix: code check (#112) * fix: code check (#117) * fix: 变量修改后保存页面,再次修改变量失败 (#110) * fix:修复国际化参数配置 (#106) * feat(style): stylePanel add style selector, write css to global styles (#41) * feat(style): stylePanel add style selector, write css to global styles * feat(style): classNameSelector support edit and delete * fix(build): fix setting-style plugin build error * fix(chore): fix review comment * fix: 修复DSL出码报错 (#139) * fix(plugin-script): js plugin code format when save (#138) * fix: 手动更新画布key导致表格渲染出错 (#129) * fix(dataSources): 解决collection添加表格时预览报错 #118 (#151) * feat(block2webcomponent): add block2webcomponent package (#146) * feat(block2webcomponent): add block2webcomponent package * fix(build): fix build config uncorrect * fix(build): change cdn link to npmmirror * fix:删除lowcodeWrap多余参数 (#119) * fix(chore): replace unpkg with npmmirror (#149) * fix(chore): replace unpkg with npmmirror * fix(dev): dev environment use node_moduels * fix(chore): sync version * fix(preview): use npmmirror link * fix(preview): devtoolapi use unpkg link * fix(preview): import map add esm cdn * fix(version): fix tiny-vue version * fix(version): fix tiny-vue version * fix(version): fix tiny-vue version * fix(blockBuild): change packageName to block build (#160) * fix: 画布中右键弹框,修复添加父级-弹出框功能 (#60) * fix: 画布中右键弹框,修复添加父级-弹出框功能 * fix: schema缺少children * fix: 按检视意见修改 * fix: 修复画布宽度设置问题 (#128) * fix: 修复画布宽度设置问题 * fix: 修复复制静态文件时接口报错 (#175) * feat:引入第三方组件库element-plus部分组件示例 (#105) * feat: 引入第三方组件库element-plus示例 * fix:修复格式错误 * feat:表格列配置组件 * feat:增加表格列配置组件 * fix:build error * fix:修复scheme2code接口报错 * fix:修改import顺序 * fix: 使用import动态导入有cdn的工具类 (#133) * fix: 使用import动态导入有cdn的工具类 * fix(preview): upgrade vue repl version (#170) * fix(preview): upgrade vue repl version * fix(preview): optimized by review comment * fix:添加style变量赋值 (#154) * fix: 修复unpkg依赖 (#188) * fix: 修复unpkg依赖 * fix:固定opentiny/vue的次版本号 * fix:升级devtools-api版本 * fix:CDN域名提取环境变量 * fix:升级opentiny/vue版本 * fix:修改主题样式文件版本 * fix:修复codeCheck * feat:设计器增加帮助文档说明 (#100) * fix: 修复多个全局变量下载代码出错 (#197) * fix: 修复多个全局变量下载代码出错 * fix: 精简应用发布时commit消息的校验规则 (#205) * feat: 开放区块管理相关功能 (#206) * feat: add materials script (#195) 增加拆分物料与构建物料脚本 * doc:README添加物料同步脚本说明 (#207) * feat(generate-vue): change generate vue code location (#201) * feat(generate-vue): change generate vue code location * fix(generate-vue): fix generate route did not export * feat(docs): 增加跟本地后端直连的方案 (#208) * docs(readme): 增加后端的启动描述 * feat(chore): change dependencies type to workspace:* (#216) * chore: add code review action (#215) * chore(release): publish (#219) * chore(release): publish - @opentiny/tiny-engine-mock@1.0.1 - @opentiny/tiny-engine-block-build@1.0.0 - @opentiny/tiny-engine-builtin-component@1.0.0 - @opentiny/tiny-engine-canvas@1.0.1 - @opentiny/tiny-engine-common@1.0.1 - @opentiny/tiny-engine-controller@1.0.1 - @opentiny/tiny-engine@1.0.0-beta.2 - @opentiny/tiny-engine-http@1.0.1 - @opentiny/tiny-engine-i18n-host@1.0.1 - @opentiny/tiny-engine-plugin-block@1.0.2 - @opentiny/tiny-engine-plugin-bridge@1.0.2 - @opentiny/tiny-engine-plugin-data@1.0.2 - @opentiny/tiny-engine-plugin-datasource@1.0.2 - @opentiny/tiny-engine-plugin-help@1.0.2 - @opentiny/tiny-engine-plugin-i18n@1.0.2 - @opentiny/tiny-engine-plugin-materials@1.0.2 - @opentiny/tiny-engine-plugin-page@1.0.2 - @opentiny/tiny-engine-plugin-robot@1.0.2 - @opentiny/tiny-engine-plugin-schema@1.0.2 - @opentiny/tiny-engine-plugin-script@1.0.2 - @opentiny/tiny-engine-plugin-tree@1.0.2 - @opentiny/tiny-engine-plugin-tutorial@1.0.2 - @opentiny/tiny-engine-setting-design@1.0.2 - @opentiny/tiny-engine-setting-events@1.0.2 - @opentiny/tiny-engine-setting-props@1.0.2 - @opentiny/tiny-engine-setting-styles@1.0.2 - @opentiny/tiny-engine-svgs@1.0.2 - @opentiny/tiny-engine-theme-dark@1.0.2 - @opentiny/tiny-engine-theme-light@1.0.3 - @opentiny/tiny-engine-toolbar-breadcrumb@1.0.2 - @opentiny/tiny-engine-toolbar-clean@1.0.2 - @opentiny/tiny-engine-toolbar-collaboration@1.0.2 - @opentiny/tiny-engine-toolbar-fullscreen@1.0.2 - @opentiny/tiny-engine-toolbar-generate-vue@1.0.2 - @opentiny/tiny-engine-toolbar-lang@1.0.2 - @opentiny/tiny-engine-toolbar-layout@1.0.2 - @opentiny/tiny-engine-toolbar-checkinout@1.0.2 - @opentiny/tiny-engine-toolbar-logo@1.0.2 - @opentiny/tiny-engine-toolbar-logout@1.0.2 - @opentiny/tiny-engine-toolbar-media@1.0.2 - @opentiny/tiny-engine-toolbar-preview@1.0.2 - @opentiny/tiny-engine-toolbar-redoundo@1.0.2 - @opentiny/tiny-engine-toolbar-refresh@1.0.2 - @opentiny/tiny-engine-toolbar-save@1.0.2 - @opentiny/tiny-engine-toolbar-setting@1.0.2 - @opentiny/tiny-engine-utils@1.0.2 - @opentiny/tiny-engine-dsl-vue@1.0.2 - @opentiny/tiny-engine-webcomponent-core@1.0.2 * chore(release): publish - @opentiny/tiny-engine-mock@1.0.2 - @opentiny/tiny-engine-block-build@1.0.1 - @opentiny/tiny-engine-builtin-component@1.0.0 - @opentiny/tiny-engine-canvas@1.0.2 - @opentiny/tiny-engine-common@1.0.1 - @opentiny/tiny-engine-controller@1.0.2 - @opentiny/tiny-engine@1.0.0-beta.3 - @opentiny/tiny-engine-http@1.0.1 - @opentiny/tiny-engine-i18n-host@1.0.2 - @opentiny/tiny-engine-plugin-block@1.0.2 - @opentiny/tiny-engine-plugin-bridge@1.0.2 - @opentiny/tiny-engine-plugin-data@1.0.2 - @opentiny/tiny-engine-plugin-datasource@1.0.2 - @opentiny/tiny-engine-plugin-help@1.0.2 - @opentiny/tiny-engine-plugin-i18n@1.0.2 - @opentiny/tiny-engine-plugin-materials@1.0.2 - @opentiny/tiny-engine-plugin-page@1.0.2 - @opentiny/tiny-engine-plugin-robot@1.0.2 - @opentiny/tiny-engine-plugin-schema@1.0.2 - @opentiny/tiny-engine-plugin-script@1.0.2 - @opentiny/tiny-engine-plugin-tree@1.0.2 - @opentiny/tiny-engine-plugin-tutorial@1.0.2 - @opentiny/tiny-engine-setting-design@1.0.2 - @opentiny/tiny-engine-setting-events@1.0.2 - @opentiny/tiny-engine-setting-props@1.0.2 - @opentiny/tiny-engine-setting-styles@1.0.2 - @opentiny/tiny-engine-svgs@1.0.3 - @opentiny/tiny-engine-theme-dark@1.0.3 - @opentiny/tiny-engine-theme-light@1.0.4 - @opentiny/tiny-engine-toolbar-breadcrumb@1.0.2 - @opentiny/tiny-engine-toolbar-clean@1.0.2 - @opentiny/tiny-engine-toolbar-collaboration@1.0.2 - @opentiny/tiny-engine-toolbar-fullscreen@1.0.2 - @opentiny/tiny-engine-toolbar-generate-vue@1.0.2 - @opentiny/tiny-engine-toolbar-lang@1.0.3 - @opentiny/tiny-engine-toolbar-layout@1.0.3 - @opentiny/tiny-engine-toolbar-checkinout@1.0.2 - @opentiny/tiny-engine-toolbar-logo@1.0.2 - @opentiny/tiny-engine-toolbar-logout@1.0.3 - @opentiny/tiny-engine-toolbar-media@1.0.2 - @opentiny/tiny-engine-toolbar-preview@1.0.2 - @opentiny/tiny-engine-toolbar-redoundo@1.0.2 - @opentiny/tiny-engine-toolbar-refresh@1.0.2 - @opentiny/tiny-engine-toolbar-save@1.0.2 - @opentiny/tiny-engine-toolbar-setting@1.0.2 - @opentiny/tiny-engine-utils@1.0.3 - @opentiny/tiny-engine-dsl-vue@1.0.2 - @opentiny/tiny-engine-webcomponent-core@1.0.3 * fix: 修复数据源mock数据不一致 (#211) * fix: 修复数据源mock数据不一致 * fix:修复构建物料资产包重复组件 * fix:修改css文件cdn域名 (#228) * fix:修改css文件cdn地址 * fix default img can't change width and height (#189) * fix:插件面板固定后画布未自适应 (#234) * fix: 修复数据源mock数据不一致 * fix:插件面板固定后画布未自适应 * fix:插件面板固定后画布未自适应 * fix:修复eslint报错 * [plugin-data] Fix state use jsfunction issue (#237) * feat(monaco-editor-completion): 隔离不同代码编辑器自动补全的注册,变量声明增加自动补全去掉js函数和state变量的自动补全提示 * feat(state): 状态管理使用JS表达式创建变量的时候提示不可使用其他变量以及JS函数 * fix:materials sql (#231) * fix: 修复数据源mock数据不一致 * fix:新增组件写入sql数据问题 * fix:修复资源管理工具类型切换 (#239) * fix:修复资源管理工具类型切换 * fix: 左右两侧面板宽度固定为280px (#230) * fix(styles-spacing): 增大物料设置内外边距时点击区域 #134 (#184) * fix(styles-spacing): 增大物料设置内外边距时点击区域 #134 * fix:预览引入builtin组件依赖,built组件样式文件注入js (#251) * add config (#262) * add config * update config * fix: 修复由于物料边框引起的左侧面板样式问题 (#247) * fix: 设计器构建后使用vue runtime prod build(本地开发保持development, preview预览保持development) (#254) * fix(canvas-renderer): 修复 isNative component 判断失效的 bug (#241) * feat: js panel add jsx support (#253) * feat: JS面板支持JSX语法 * fix: 画布解析JS表达式时支持JSX语法 * fix: 修复画布解析JSX表达式时会返回undefined * feat: 添加Tree和Tooltip的自定义渲染函数属性 * fix: 修改变量名 * fix(toolbar-save): 修复保存时红色 icon 相对位置丢失的 bug (#250) * feat(setting-stylePanel): 样式面板编辑全局样式新UI与交互 (#238) * feat(setting-stylePanel): 样式面板编辑全局样式新UI与交互 * feat(setting-stylePanel): 样式面板编辑全局样式新UI与交互 * feat(setting-stylePanel): 样式面板编辑全局样式新UI与交互-细节优化 * feat(setting-stylePanel): 样式面板编辑全局样式新UI与交互-细节优化 * fix(settingPanel-style): 样式面板新交互细节调整 * fix(setting-stylePanel): 修复样式选择器颜色不对的 bug * fix(setting-stylePanel): 样式选择器间距调整 * fix(setting-stylePanel): 调整样式选择器距离顶部距离与下拉列表滚动条颜色 * feat(setting-style): add help link button * fix(setting-style): delete empty row by code review * fix(material-panel-svg): 修复物料左侧插件面板里图标旋转的问题 (#280) * docs(readme): 增加后端的启动描述 * docs(readme): 增加后端的启动描述 * docs(readme): 增加后端的启动描述 * docs(readme): 增加后端的启动描述 * docs(readme): 更新图片地址 * docs(readme): 更新图片地址 * fix(material-panel-svg): 修复物料左侧插件面板里图标旋转的问题 * fix:组件sql语句字段校验、提示优化 (#275) * fix:修复新增组件sql语句字段校验 * fix:优化脚本提示 * fix:函数名优化 * fix:修复更新的sql问题 * fix:TinyTabItem、TinyBreadcrumbItem组件配置有误 (#272) * fix:TinyTabItem、TinyBreadcrumbItem组件配置有误 * fix:修复tiny-vue组件导出名称有误 * fix: 修复robot plugin不存在时发生的白屏错误 (#271) * fix: 修复robot plugin不存在时发生的白屏错误 * styled: 修改代码风格 * fix: 修改监视意见 * fix: 修复画布选中框的显示层级不正确的问题 (#246) * fix: 修复画布选中框的显示层级不正确的问题 * fix: 修正错误注释 * fix: 选中节点后支持横向滚动到节点 * fix: 根据垂直滚动条调整工具操作条位置 * fix: 删除冗余代码 * fix: 代码优化 * fix: 修改变量名称 * fix: 调整函数顺序,消除eslint错误 * feat: 移除前端解锁前判断权限的逻辑,适配后台解锁接口 (#276) * 修复画布没有根元素,与vue出码、预览不一致 (#259) * feat: 页面输入输出配置,配置内有内容时,按钮替换为展示部分文案内容。 * feat: 方法名修改更加符合语义 * fix: 1. 给画布添加根元素(与出码、预览保持一致)。2. 选中画布相当于选中根节点,右侧面板会出现可以添加属性的节点。3. 可以支持给根节点添加类名,id、ref,并修改样式。 4. 支持给根元素添加事件,循环等 * fix: 意见修复 * fix: 修复较低的分辨率下画布初始缩放不正确的问题 (#274) * fix(common): fix lifecycle unmount completionProvider null state caught error (#281) * fix: 修改远程字段发送请求无效 (#278) * fix:修复修改远程字段发送请求无效 * fix:修复请求参数处理函数未生效 * fix:修复数据源表单校验提前退出 * fix:修改提示语 * fix:按review添加注释 * Fix mockServer block group deleted bug (#279) * fix:修复第三方组件无法渲染 (#288) * fix:修复第三方组件无法渲染 * fix:区分环境加载prod * fix(chore): sync vue version (#285) * fix(chore): sync vue version * fix(chore): sync vue-i18n version * fix(chore): change vue and vue-i18n to peerdependencies * fix(chore): update block build dependencies * fix(chore): change vue-generator dependencies to update * fix(upload-button)修复下载按钮弹出没有遮罩 (#300) * fix: 修复新建区块的表单确定时未校验的问题 (#302) * fix: 修复代码编辑器全屏时的样式问题 (#303) * fix: 修复属性面板中设置空字符串的问题 (#307) * fix(setting-stylePanel): 只允许有一个 id,样式选择器只能添加一个 id (#295) * fix(plugin-page): setting home should not close settingPanel (#308) * feat(setting-advanced): addcustomEvent popover change to dialog (#297) * feat(setting-advanced): addcustomEvent popover change to dialog * fix(setting-advanced): add custom event align left with modal title * fix(style): delete selected symbol on select component (#306) * fix(style): delete selected symbol on select component * fix(style): delete space after delete selectedSymbol * fix(http): 优化 http 接口报错 ui, 接口详情不展示在 title (#293) * fix: 修复preview生产打包的时候repl引入的monaco-editor里的worker跨域报错 (#245) * fix: 修复preview生产打包的时候repl引入的monaco-editor里的worker跨域报错 * feat(design-core/preview): 预览增加调试按钮来打开vue-repl编辑模式,并实现编辑器懒加载 * fix(design-core/preview): 修复repl-patch引入脚本路径模块化不支持importScripts问题 * fix: 数据源远程字段表单验证样式修改 (#309) * fix: 数据源远程字段表单验证样式修改 * fix:资源管理工具类型文字字色与设计稿不一致 (#319) * fix:资源管理工具类型文字字色与设计稿不一致 * fix:调整资源工具类型字体 * bundle.json and tiny-vue.css is 404 in prod mode (#315) * chore(release): publish (#320) - @opentiny/tiny-engine-mock: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-block-build: 1.0.1 => 1.0.2 - @opentiny/tiny-engine-builtin-component: 1.0.0 => 1.0.1 - @opentiny/tiny-engine-canvas: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-common: 1.0.1 => 1.0.2 - @opentiny/tiny-engine-controller: 1.0.2 => 1.0.3 - @opentiny/tiny-engine: 1.0.0-beta.3 => 1.0.0-beta.4 - @opentiny/tiny-engine-http: 1.0.1 => 1.0.2 - @opentiny/tiny-engine-i18n-host: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-block: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-bridge: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-data: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-datasource: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-help: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-i18n: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-materials: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-page: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-robot: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-schema: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-script: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-tree: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-plugin-tutorial: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-setting-design: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-setting-events: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-setting-props: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-setting-styles: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-svgs: 1.0.3 => 1.0.4 - @opentiny/tiny-engine-theme-dark: 1.0.3 => 1.0.4 - @opentiny/tiny-engine-theme-light: 1.0.4 => 1.0.5 - @opentiny/tiny-engine-toolbar-breadcrumb: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-clean: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-collaboration: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-fullscreen: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-generate-vue: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-lang: 1.0.3 => 1.0.4 - @opentiny/tiny-engine-toolbar-layout: 1.0.3 => 1.0.4 - @opentiny/tiny-engine-toolbar-checkinout: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-logo: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-logout: 1.0.3 => 1.0.4 - @opentiny/tiny-engine-toolbar-media: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-preview: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-redoundo: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-refresh: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-save: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-toolbar-setting: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-utils: 1.0.3 => 1.0.4 - @opentiny/tiny-engine-dsl-vue: 1.0.2 => 1.0.3 - @opentiny/tiny-engine-webcomponent-core: 1.0.3 => 1.0.4 * refactor: 解决子包循环依赖问题 (#313) * refactor: move common/js to controller/js * refactor: replace common/js * refactor: replace ../js * refactor: update package.json * refactor: resolve canvas rely on common * refactor: remove controller deps in http * refactor: add canvas renderer state * refactor: remove useless file ext * refactor: modify controller deps path * refactor: fix eslint * refactor: resolve http env * fix: switch page error (#331) * fix: drag block into canvas error (#336) * fix: canvas api error (#338) * fix(datasource): data type icon invisible #312 (#332) * fix(datasource): data type icon invisible * fix(common): #325 reduce unnecessary network requests. * style(datasource): remove unnecessary comment --------- Co-authored-by: zeyong.cai * fix(build): 修复构建设计器产物 ref 值未转化的 bug (#347) * fix(preview): fix preview vue-repl unsupport jsx bug (#343) * docs: add project name to issue template (#335) * feat: 状态管理代码编辑UI优化 (#318) * feat: 状态管理代码编辑UI优化 * fix(material): elTable formatter should be function type (#355) * fix(readme-build): 添加Readme中构建产物所在文件夹信息 (#367) * fix(scrollbar): fix robot plugin scrollbar hide almost all scrollbar bug (#340) * fix(scrollbar): fix robot plugin scrollbar hide almost all scrollbar bug * fix(scrollbar): change by review comment * fix(theme-scrollbar): change by review comment * fix(theme-base): apply default scrollbar style to body * children * docs: 文件名称CHANGELOG拼写错误,修改文件名称 (#389) * fix(errorMonitor): add config for errormonitor (#381) * fix(controller-environment): preserve import.meta.env variable when build controller lib (#380) * fix(settings): fix text wrap of bind condition (#391) Fixes #370 * feat:增加物料:TinyDatePicker和TinyNumeric (#399) * 增加物料:TinyDatePicker和TinyNumeric * 修改disabled使用MetaSwitch * Fix:编辑器设置dark主题后预览页header文字颜色不正确 (#403) * fix:编辑器设置dark主题后预览页header文字颜色不正确 * fix:调整主题 * port 000037 engine-ai-plugins * setup live component * improve live component * add component mode to AI plugin * update design doc --------- Co-authored-by: OpenTiny Co-authored-by: ajaxzheng <894103554@qq.com> Co-authored-by: chilingling <26962197+chilingling@users.noreply.github.com> Co-authored-by: wenmine Co-authored-by: lhuans <145339349+lhuans@users.noreply.github.com> Co-authored-by: yaoyun8 <142570291+yaoyun8@users.noreply.github.com> Co-authored-by: Hexqi Co-authored-by: tianxin <146069396+ianxinnew@users.noreply.github.com> Co-authored-by: gargameljyh <58694428+gargameljyh@users.noreply.github.com> Co-authored-by: lichunn <46984087+lichunn@users.noreply.github.com> Co-authored-by: Xppp0217 <82315158+Xppp0217@users.noreply.github.com> Co-authored-by: lizhijie429 <632163606@qq.com> Co-authored-by: Gene Co-authored-by: rhlin Co-authored-by: Lu17301156525 <128358973+Lu17301156525@users.noreply.github.com> Co-authored-by: rhlin Co-authored-by: GaoNeng <31283122+GaoNeng-wWw@users.noreply.github.com> Co-authored-by: abin Co-authored-by: zeyong tsai Co-authored-by: zeyong.cai Co-authored-by: Kagol Co-authored-by: yuhki <128052955+yuhkikele@users.noreply.github.com> Co-authored-by: Xie Jay Co-authored-by: fox ouyang --- .build_config/build.sh | 14 + .cid/lowcode-design-core.yml | 23 + .codecheck/check.yml | 11 + .env.local | 5 + .eslintignore | 9 + .eslintrc.js | 31 + .github/ISSUE_TEMPLATE/bug-report.yml | 81 + .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature-request.yml | 31 + .github/PULL_REQUEST_TEMPLATE.md | 52 + .../PULL_REQUEST_TEMPLATE.zh-CN.md | 52 + .github/release.yml | 26 + .github/workflows/ai-code-review.yml | 23 + .github/workflows/issue-translator.yml | 18 + .github/workflows/push-check.yml | 36 + .gitignore | 28 + .husky/pre-commit | 6 + .npmignore | 23 + .prettierignore | 3 + .prettierrc | 5 + CHANGELOG.md | 17 + CONTRIBUTING.md | 80 + CONTRIBUTING.zh-CN.md | 79 + LICENSE | 22 + README.md | 108 +- README.zh-CN.md | 108 + jsconfig.json | 73 + lerna.json | 15 + lint-staged.config.js | 4 + logo.svg | 44 + mockServer/.babelrc | 21 + mockServer/.editorconfig | 9 + mockServer/.eslintignore | 3 + mockServer/.eslintrc.js | 36 + mockServer/.gitignore | 9 + mockServer/.jsbeautifyrc | 11 + mockServer/assets/css/0.1.20/index.css | 24981 +++++++++++++ ...55f57e0a38d45ced54e1b2b566cb29_308x180.jpg | Bin 0 -> 20842 bytes .../0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png | Bin 0 -> 5775 bytes mockServer/assets/images/120.jpg | Bin 0 -> 1283 bytes .../24b520f0-dd5d-11ec-9e28-e51c91ead705.png | Bin 0 -> 5993 bytes ...f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg | Bin 0 -> 5135 bytes ...7366463067fa2f1a59d7db4ac55885_308x100.jpg | Bin 0 -> 6889 bytes ...7aad0c570f653f0a95b48b898c7b4b_308x180.jpg | Bin 0 -> 31242 bytes .../bbb35cd0-db30-11ec-a1c4-7b3b3de0a1d8.png | Bin 0 -> 1922 bytes ...f27d446aef8318e4b4989f1f816b1e_220x220.png | Bin 0 -> 5775 bytes ...50dc319828b039af713c643aad02bd_222x134.png | Bin 0 -> 992 bytes mockServer/assets/images/logo.png | Bin 0 -> 12996 bytes mockServer/assets/js/1005web-components.es.js | 95 + .../assets/js/1005web-components.umd.js | 137 + mockServer/assets/js/1505web-components.es.js | 81 + .../assets/js/1505web-components.umd.js | 60 + mockServer/assets/js/989web-components.es.js | 246 + mockServer/assets/js/989web-components.umd.js | 283 + mockServer/assets/js/998web-components.es.js | 664 + mockServer/assets/js/998web-components.umd.js | 718 + mockServer/assets/json/bundle.json | 10471 ++++++ mockServer/assets/uploads/.gitkeep | 1 + mockServer/build/dev-server.js | 14 + mockServer/config/config.js | 16 + mockServer/gulpfile.js | 109 + mockServer/logs/out.log | 1 + mockServer/package.json | 69 + mockServer/pm2.js | 31 + mockServer/src/app.js | 61 + mockServer/src/database/blockCategories.db | 3 + mockServer/src/database/blockGroups.db | 3 + mockServer/src/database/blocks.db | 4 + .../src/database/defaultData/default.db | 4 + mockServer/src/database/pages.db | 4 + mockServer/src/middleware/ErrorRoutesCatch.js | 22 + .../mock/get/app-center/apps/detail/918.json | 78 + .../get/app-center/apps/extension/delete.json | 20 + .../get/app-center/apps/extension/list.json | 127 + .../src/mock/get/app-center/i18n/entries.json | 33 + .../src/mock/get/app-center/source_tpl.json | 1 + .../mock/get/app-center/sources/list/918.json | 671 + .../get/app-center/v1/apps/schema/918.json | 2096 ++ .../src/mock/get/platform-center/courses.json | 148 + .../src/mock/get/platform-center/user/me.json | 57 + .../app-center/apps/extension/create.json | 1 + .../app-center/apps/extension/update.json | 1 + .../mock/post/app-center/apps/update/918.json | 1 + .../app-center/i18n/entries/bulk/delete.json | 1 + .../post/app-center/i18n/entries/update.json | 1 + .../mock/post/app-center/sources/create.json | 1 + .../mock/post/app-center/sources/delete.json | 1 + .../mock/post/app-center/sources/update.json | 69 + mockServer/src/routes/error-routes.js | 24 + mockServer/src/routes/main-routes.js | 227 + mockServer/src/services/.gitkeep | 1 + mockServer/src/services/app.js | 73 + mockServer/src/services/appinfo.json | 29712 ++++++++++++++++ mockServer/src/services/block.js | 93 + mockServer/src/services/blockCategory.js | 76 + mockServer/src/services/blockGroup.js | 75 + mockServer/src/services/blocks.json | 436 + mockServer/src/services/mockService.js | 37 + mockServer/src/services/pageSchema.js | 178 + mockServer/src/services/pages.js | 102 + mockServer/src/services/schema2code.js | 113 + mockServer/src/services/source.js | 21 + mockServer/src/services/sources.json | 669 + mockServer/src/services/utils.js | 43 + mockServer/src/tool/Common.js | 75 + mockServer/test/app.test.js | 19 + package.json | 74 + .../blockToWebComponentTemplate/README.md | 12 + .../blockToWebComponentTemplate/package.json | 47 + .../src/BlockFileName.vue | 46 + .../blockToWebComponentTemplate/src/lib.js | 20 + .../vite.config.js | 66 + packages/builtinComponent/README.md | 9 + packages/builtinComponent/index.js | 4 + packages/builtinComponent/package.json | 31 + .../src/components/CanvasCol.vue | 76 + .../src/components/CanvasRow.vue | 54 + .../src/components/CanvasRowColContainer.vue | 29 + .../builtinComponent/src/components/helper.js | 46 + .../builtinComponent/src/meta/CanvasCol.json | 196 + .../builtinComponent/src/meta/CanvasRow.json | 142 + .../src/meta/CanvasRowColContainer.json | 96 + packages/builtinComponent/src/meta/index.js | 18 + packages/builtinComponent/vite.config.js | 33 + packages/canvas/.eslintrc.js | 42 + packages/canvas/.gitignore | 24 + packages/canvas/README.md | 7 + packages/canvas/canvas.html | 212 + packages/canvas/index.html | 13 + packages/canvas/package.json | 53 + packages/canvas/public/favicon.ico | Bin 0 -> 4286 bytes packages/canvas/src/Design.vue | 53 + packages/canvas/src/assets/logo.png | Bin 0 -> 6849 bytes packages/canvas/src/canvas.js | 34 + .../src/components/builtin/CanvasBox.vue | 22 + .../src/components/builtin/CanvasCol.vue | 89 + .../components/builtin/CanvasCollection.js | 278 + .../components/builtin/CanvasCollection.vue | 106 + .../src/components/builtin/CanvasIcon.vue | 30 + .../src/components/builtin/CanvasImg.vue | 18 + .../components/builtin/CanvasPlaceholder.vue | 26 + .../src/components/builtin/CanvasRow.vue | 67 + .../builtin/CanvasRowColContainer.vue | 42 + .../src/components/builtin/CanvasSlot.vue | 22 + .../src/components/builtin/CanvasText.vue | 18 + .../src/components/builtin/builtin.json | 595 + .../canvas/src/components/builtin/helper.js | 46 + .../canvas/src/components/builtin/index.js | 21 + .../canvas/src/components/common/index.js | 158 + .../src/components/container/CanvasAction.vue | 700 + .../components/container/CanvasContainer.vue | 272 + .../components/container/CanvasDivider.vue | 246 + .../components/container/CanvasDragItem.vue | 51 + .../src/components/container/CanvasFooter.vue | 86 + .../src/components/container/CanvasMenu.vue | 283 + .../src/components/container/CanvasResize.vue | 203 + .../container/CanvasResizeBorder.vue | 219 + .../src/components/container/container.js | 854 + .../src/components/container/keyboard.js | 147 + .../components/container/shortCutPopover.vue | 178 + .../src/components/render/CanvasEmpty.vue | 14 + .../src/components/render/RenderMain.js | 442 + .../canvas/src/components/render/context.js | 53 + .../canvas/src/components/render/render.js | 722 + .../canvas/src/components/render/runner.js | 142 + packages/canvas/src/i18n.js | 21 + packages/canvas/src/i18n/en.json | 5 + packages/canvas/src/i18n/zh.json | 5 + packages/canvas/src/index.js | 102 + packages/canvas/src/locale.js | 19 + packages/canvas/src/lowcode.js | 104 + packages/canvas/src/main.js | 17 + packages/canvas/test/form.json | 690 + packages/canvas/test/group.json | 99 + packages/canvas/test/jsslot.json | 427 + packages/canvas/vite.config.js | 73 + packages/common/component/BindI18n.vue | 226 + .../common/component/BlockDeployDialog.vue | 260 + .../common/component/BlockDescription.vue | 49 + .../common/component/BlockHistoryList.vue | 95 + .../common/component/BlockHistoryTemplate.vue | 79 + packages/common/component/BlockLinkEvent.vue | 226 + packages/common/component/BlockLinkField.vue | 192 + packages/common/component/ButtonGroup.vue | 19 + packages/common/component/CloseIcon.vue | 50 + packages/common/component/ConfigCollapse.vue | 57 + packages/common/component/ConfigGroup.vue | 59 + packages/common/component/ConfigItem.vue | 696 + packages/common/component/ConfigRender.vue | 101 + packages/common/component/EmptyTip.vue | 60 + packages/common/component/LifeCycles.vue | 359 + packages/common/component/LinkButton.vue | 41 + packages/common/component/MaskModal.vue | 41 + packages/common/component/MetaArrayItem.vue | 198 + packages/common/component/MetaBindI18n.vue | 131 + .../common/component/MetaBindVariable.vue | 714 + packages/common/component/MetaButtonGroup.vue | 88 + packages/common/component/MetaCascader.vue | 93 + packages/common/component/MetaCheckBox.vue | 28 + .../common/component/MetaCheckboxGroup.vue | 67 + packages/common/component/MetaChildItem.vue | 82 + packages/common/component/MetaCodeEditor.vue | 371 + .../common/component/MetaCodeEditorList.vue | 305 + packages/common/component/MetaCollection.vue | 94 + packages/common/component/MetaColor.vue | 80 + packages/common/component/MetaContainer.vue | 102 + packages/common/component/MetaDatePicker.vue | 45 + packages/common/component/MetaDescription.vue | 133 + packages/common/component/MetaForm.vue | 82 + packages/common/component/MetaGroupItem.vue | 54 + .../common/component/MetaHtmlAttributes.vue | 239 + packages/common/component/MetaHtmlText.vue | 110 + packages/common/component/MetaInput.vue | 72 + packages/common/component/MetaIpSection.vue | 168 + packages/common/component/MetaJsSlot.vue | 267 + packages/common/component/MetaLayoutGrid.vue | 336 + packages/common/component/MetaList.vue | 36 + packages/common/component/MetaListActions.vue | 50 + packages/common/component/MetaListItem.vue | 321 + packages/common/component/MetaListItems.vue | 191 + packages/common/component/MetaListTitle.vue | 14 + packages/common/component/MetaModal.vue | 85 + packages/common/component/MetaModalItem.vue | 175 + packages/common/component/MetaNumber.md | 41 + packages/common/component/MetaNumber.vue | 211 + packages/common/component/MetaPopover.vue | 43 + packages/common/component/MetaRadio.vue | 109 + packages/common/component/MetaRadioGroup.vue | 78 + .../common/component/MetaRelatedColumns.vue | 79 + .../common/component/MetaRelatedEditor.vue | 139 + packages/common/component/MetaSelect.vue | 122 + packages/common/component/MetaSelectIcon.vue | 176 + packages/common/component/MetaSlider.vue | 162 + packages/common/component/MetaSlot.vue | 205 + packages/common/component/MetaSwitch.vue | 38 + .../common/component/MetaTableColumns.vue | 33 + packages/common/component/MonacoEditor.vue | 176 + .../common/component/MultiTypeSelector.vue | 152 + packages/common/component/Pane.vue | 61 + packages/common/component/PluginBlockList.vue | 735 + packages/common/component/PluginPanel.vue | 102 + packages/common/component/PluginSetting.vue | 192 + packages/common/component/ProgressBar.vue | 35 + packages/common/component/PublicIcon.vue | 30 + packages/common/component/SaveNewBlock.vue | 133 + packages/common/component/SplitPanes.vue | 686 + packages/common/component/SvgButton.vue | 68 + packages/common/component/VideoGuide.vue | 64 + packages/common/component/VueMonaco.vue | 196 + packages/common/i18n/en-us.json | 45 + packages/common/i18n/zh-cn.json | 45 + packages/common/index.js | 210 + packages/common/package.json | 50 + packages/common/vite.config.js | 49 + packages/controller/adapter.js | 61 + packages/controller/js/app.js | 22 + packages/controller/js/ast.js | 153 + packages/controller/js/canvas.js | 40 + packages/controller/js/completion.js | 206 + packages/controller/js/constants.js | 78 + packages/controller/js/css.js | 52 + packages/controller/js/environments.js | 28 + packages/controller/js/http.js | 70 + packages/controller/js/i18n.js | 45 + packages/controller/js/linter.js | 58 + packages/controller/js/monitor.js | 115 + packages/controller/js/preview.js | 57 + packages/controller/js/verification.js | 43 + packages/controller/js/vscodeGenerateFile.js | 115 + packages/controller/package.json | 58 + packages/controller/src/example.js | 98 + packages/controller/src/globalConfig.js | 19 + packages/controller/src/index.js | 59 + packages/controller/src/useApp.js | 73 + packages/controller/src/useBlock.js | 766 + packages/controller/src/useBreadcrumb.js | 39 + packages/controller/src/useCanvas.js | 162 + packages/controller/src/useData.js | 20 + packages/controller/src/useDataSource.js | 120 + packages/controller/src/useEditorInfo.js | 71 + packages/controller/src/useHelp.js | 35 + packages/controller/src/useHistory.js | 123 + packages/controller/src/useLayout.js | 135 + packages/controller/src/useMessage.js | 138 + packages/controller/src/useModal.jsx | 76 + packages/controller/src/useNotify.jsx | 25 + packages/controller/src/usePage.js | 147 + packages/controller/src/useProperties.js | 234 + packages/controller/src/useProperty.js | 95 + packages/controller/src/useResource.js | 477 + packages/controller/src/useSaveLocal.js | 85 + packages/controller/src/useTranslate.js | 255 + packages/controller/utils.js | 133 + packages/controller/vite.config.js | 50 + packages/design-core/.env.alpha | 10 + packages/design-core/.env.development | 6 + packages/design-core/.env.prod | 5 + packages/design-core/.npmignore | 8 + packages/design-core/assets/AI.png | Bin 0 -> 121432 bytes .../design-core/assets/accessdeclined.svg | 22 + packages/design-core/assets/accordion.svg | 3 + packages/design-core/assets/achart.svg | 17 + .../design-core/assets/add-collection.svg | 13 + packages/design-core/assets/add-folder.svg | 12 + packages/design-core/assets/add-group.svg | 13 + packages/design-core/assets/add-page-new.svg | 13 + packages/design-core/assets/add-page.svg | 9 + packages/design-core/assets/add-utils.svg | 12 + packages/design-core/assets/add.svg | 11 + packages/design-core/assets/alert.svg | 3 + .../assets/align-content-center.svg | 4 + .../design-core/assets/align-content-end.svg | 4 + .../assets/align-content-space-around.svg | 4 + .../assets/align-content-space-between.svg | 4 + .../assets/align-content-start.svg | 4 + .../assets/align-content-stretch.svg | 4 + .../assets/align-items-baseline.svg | 4 + .../design-core/assets/align-items-center.svg | 4 + .../design-core/assets/align-items-end.svg | 4 + .../design-core/assets/align-items-start.svg | 4 + .../assets/align-items-stretch.svg | 4 + .../design-core/assets/background-color.svg | 1 + .../design-core/assets/background-image.svg | 1 + packages/design-core/assets/bar.svg | 15 + packages/design-core/assets/basic-search.svg | 8 + packages/design-core/assets/bdlayout.svg | 12 + .../design-core/assets/beingmaintained.svg | 23 + packages/design-core/assets/bem.svg | 13 + packages/design-core/assets/beta.svg | 30 + packages/design-core/assets/bind-variable.svg | 19 + .../design-core/assets/block-default-img.svg | 2 + packages/design-core/assets/block-manage.svg | 1 + packages/design-core/assets/border-all.svg | 13 + packages/design-core/assets/border-bottom.svg | 14 + packages/design-core/assets/border-left.svg | 14 + .../assets/border-radius-bottomleft.svg | 19 + .../assets/border-radius-bottomright.svg | 19 + .../assets/border-radius-multiple.svg | 16 + .../assets/border-radius-single.svg | 16 + .../assets/border-radius-topleft.svg | 19 + .../assets/border-radius-topright.svg | 19 + packages/design-core/assets/border-right.svg | 14 + .../assets/border-style-dashed.svg | 13 + .../assets/border-style-dotted.svg | 13 + .../design-core/assets/border-style-solid.svg | 13 + packages/design-core/assets/border-top.svg | 14 + packages/design-core/assets/box.svg | 10 + packages/design-core/assets/breadcrumb.svg | 14 + packages/design-core/assets/bridge.svg | 6 + packages/design-core/assets/button.svg | 25 + packages/design-core/assets/buttons.svg | 28 + .../design-core/assets/cancel-full-screen.svg | 32 + packages/design-core/assets/canvas-fit.svg | 25 + packages/design-core/assets/carousel.svg | 15 + packages/design-core/assets/carouselitem.svg | 1 + packages/design-core/assets/chat-maximize.svg | 18 + packages/design-core/assets/chat-message.svg | 10 + .../design-core/assets/chat-microphone.svg | 13 + packages/design-core/assets/chat-minimize.svg | 13 + packages/design-core/assets/checkbox.svg | 13 + packages/design-core/assets/checkboxgroup.svg | 10 + packages/design-core/assets/checkboxs.svg | 33 + packages/design-core/assets/checkin.svg | 4 + packages/design-core/assets/checkout.svg | 4 + packages/design-core/assets/clear.svg | 13 + packages/design-core/assets/clock-small.svg | 1 + .../design-core/assets/clock-wise-counter.svg | 1 + packages/design-core/assets/clock-wise.svg | 1 + packages/design-core/assets/close.svg | 10 + .../design-core/assets/closest-corner.svg | 1 + packages/design-core/assets/closest-side.svg | 1 + packages/design-core/assets/cloud-shell.svg | 6 + packages/design-core/assets/cn.svg | 26 + packages/design-core/assets/col.svg | 13 + packages/design-core/assets/collapse.svg | 19 + packages/design-core/assets/collection.svg | 11 + packages/design-core/assets/copy-outline.svg | 6 + packages/design-core/assets/copy.svg | 8 + packages/design-core/assets/cross.svg | 10 + packages/design-core/assets/cursor-alias.svg | 3 + packages/design-core/assets/cursor-auto.svg | 3 + packages/design-core/assets/cursor-cell.svg | 3 + .../design-core/assets/cursor-col-resize.svg | 3 + .../assets/cursor-context-menu.svg | 3 + packages/design-core/assets/cursor-copy.svg | 3 + .../design-core/assets/cursor-crosshair.svg | 3 + .../design-core/assets/cursor-e-resize.svg | 3 + .../design-core/assets/cursor-ew-resize.svg | 3 + packages/design-core/assets/cursor-grab.svg | 3 + .../design-core/assets/cursor-grabbing.svg | 3 + packages/design-core/assets/cursor-help.svg | 3 + packages/design-core/assets/cursor-move.svg | 3 + .../design-core/assets/cursor-n-resize.svg | 3 + .../design-core/assets/cursor-ne-resize.svg | 3 + .../design-core/assets/cursor-nesw-resize.svg | 3 + packages/design-core/assets/cursor-none.svg | 3 + .../design-core/assets/cursor-not-allowed.svg | 3 + .../design-core/assets/cursor-ns-resize.svg | 3 + .../design-core/assets/cursor-nw-resize.svg | 3 + .../design-core/assets/cursor-nwse-resize.svg | 3 + .../design-core/assets/cursor-pointer.svg | 3 + .../design-core/assets/cursor-progress.svg | 13 + .../design-core/assets/cursor-row-resize.svg | 3 + .../design-core/assets/cursor-s-resize.svg | 3 + .../design-core/assets/cursor-se-resize.svg | 3 + .../design-core/assets/cursor-sw-resize.svg | 3 + packages/design-core/assets/cursor-text.svg | 3 + .../assets/cursor-vertical-text.svg | 3 + .../design-core/assets/cursor-w-resize.svg | 3 + packages/design-core/assets/cursor-wait.svg | 12 + .../design-core/assets/cursor-zoom-in.svg | 3 + .../design-core/assets/cursor-zoom-out.svg | 3 + packages/design-core/assets/data.svg | 15 + packages/design-core/assets/datepick.svg | 17 + packages/design-core/assets/daterange.svg | 3 + packages/design-core/assets/delete.svg | 11 + packages/design-core/assets/descend.svg | 8 + packages/design-core/assets/desktop-large.svg | 19 + packages/design-core/assets/dialogbox.svg | 18 + packages/design-core/assets/display-block.svg | 14 + packages/design-core/assets/display-flex.svg | 14 + packages/design-core/assets/display-grid.svg | 18 + .../assets/display-inline-block.svg | 14 + .../design-core/assets/display-inline.svg | 18 + packages/design-core/assets/dragger.svg | 3 + packages/design-core/assets/dropdown.svg | 6 + packages/design-core/assets/edit.svg | 11 + packages/design-core/assets/ellipsis.svg | 20 + packages/design-core/assets/empty-action.svg | 15 + packages/design-core/assets/empty-data.svg | 19 + packages/design-core/assets/empty.svg | 27 + packages/design-core/assets/en.svg | 29 + packages/design-core/assets/error.svg | 4 + packages/design-core/assets/events.svg | 26 + packages/design-core/assets/expand.svg | 17 + packages/design-core/assets/eye-invisible.svg | 19 + packages/design-core/assets/eye.svg | 19 + .../design-core/assets/farthest-corner.svg | 1 + packages/design-core/assets/farthest-side.svg | 1 + packages/design-core/assets/fixed.svg | 7 + .../assets/flex-alignbaselinerow.svg | 3 + .../assets/flex-aligncenterrow.svg | 3 + .../assets/flex-alignflex-endrow.svg | 3 + .../assets/flex-alignflex-startrow.svg | 3 + .../assets/flex-alignstretchrow.svg | 3 + .../assets/flex-directioncolumn-reverse.svg | 3 + .../assets/flex-directioncolumn.svg | 3 + .../assets/flex-directionrow-reverse.svg | 3 + .../design-core/assets/flex-directionrow.svg | 3 + .../assets/flex-justifycenterrow.svg | 3 + .../assets/flex-justifyflex-endrow.svg | 3 + .../assets/flex-justifyflex-startrow.svg | 3 + .../assets/flex-justifyspace-aroundrow.svg | 3 + .../assets/flex-justifyspace-betweenrow.svg | 3 + packages/design-core/assets/flow-add.svg | 6 + .../design-core/assets/flow-align-bottom.svg | 9 + .../design-core/assets/flow-align-left.svg | 9 + .../design-core/assets/flow-align-level.svg | 10 + packages/design-core/assets/flow-align-rf.svg | 27 + .../design-core/assets/flow-align-right.svg | 10 + .../design-core/assets/flow-align-top.svg | 8 + .../assets/flow-align-vertical.svg | 9 + .../design-core/assets/flow-box-select-rf.svg | 21 + .../design-core/assets/flow-box-select.svg | 41 + .../design-core/assets/flow-checkmark.svg | 1 + packages/design-core/assets/flow-clear.svg | 16 + packages/design-core/assets/flow-cross.svg | 3 + packages/design-core/assets/flow-delete.svg | 6 + packages/design-core/assets/flow-download.svg | 9 + packages/design-core/assets/flow-edit.svg | 11 + packages/design-core/assets/flow-empty.svg | 26 + packages/design-core/assets/flow-failure.svg | 10 + .../design-core/assets/flow-file-download.svg | 8 + .../assets/flow-fullscreen-icon.svg | 3 + packages/design-core/assets/flow-guide.svg | 6 + .../design-core/assets/flow-help-center.svg | 22 + packages/design-core/assets/flow-location.svg | 21 + .../assets/flow-minscreen-icon.svg | 17 + .../design-core/assets/flow-navigation.svg | 8 + .../design-core/assets/flow-params-rf.svg | 9 + packages/design-core/assets/flow-params.svg | 49 + packages/design-core/assets/flow-prompt.svg | 6 + packages/design-core/assets/flow-redo.svg | 15 + packages/design-core/assets/flow-reduce.svg | 6 + packages/design-core/assets/flow-refresh.svg | 12 + .../design-core/assets/flow-requirestar.svg | 14 + packages/design-core/assets/flow-select.svg | 18 + .../design-core/assets/flow-set-bottom.svg | 27 + packages/design-core/assets/flow-set-top.svg | 27 + packages/design-core/assets/flow-success.svg | 6 + packages/design-core/assets/flow-undo.svg | 16 + packages/design-core/assets/flow-view-rf.svg | 13 + packages/design-core/assets/flow-view.svg | 12 + packages/design-core/assets/flow-zoom-in.svg | 12 + packages/design-core/assets/flow-zoom-out.svg | 12 + packages/design-core/assets/fold-outline.svg | 6 + packages/design-core/assets/folder-wold.svg | 6 + packages/design-core/assets/folder.svg | 6 + .../design-core/assets/font-style-italic.svg | 14 + .../design-core/assets/font-style-none.svg | 18 + packages/design-core/assets/form.svg | 17 + packages/design-core/assets/formfield.svg | 15 + packages/design-core/assets/formitem.svg | 2 + packages/design-core/assets/frozenpage.svg | 23 + packages/design-core/assets/full-screen.svg | 30 + packages/design-core/assets/generate-code.svg | 17 + .../design-core/assets/grid-column-flex.svg | 5 + packages/design-core/assets/grid-row-auto.svg | 6 + packages/design-core/assets/grid.svg | 17 + packages/design-core/assets/h1.svg | 3 + packages/design-core/assets/h16.svg | 12 + packages/design-core/assets/h2.svg | 3 + packages/design-core/assets/h3.svg | 3 + packages/design-core/assets/h4.svg | 3 + packages/design-core/assets/h5.svg | 3 + packages/design-core/assets/h6.svg | 3 + packages/design-core/assets/help-center.svg | 10 + packages/design-core/assets/help.svg | 3 + packages/design-core/assets/histogram.svg | 15 + packages/design-core/assets/home-outline.svg | 11 + packages/design-core/assets/home.svg | 11 + packages/design-core/assets/hr.svg | 8 + packages/design-core/assets/icon.svg | 17 + packages/design-core/assets/image.svg | 13 + packages/design-core/assets/input.svg | 12 + .../assets/internationalization.svg | 13 + packages/design-core/assets/js.svg | 13 + packages/design-core/assets/json.svg | 3 + .../assets/justify-content-center.svg | 4 + .../assets/justify-content-end.svg | 4 + .../assets/justify-content-space-around.svg | 3 + .../assets/justify-content-space-between.svg | 3 + .../assets/justify-content-start.svg | 4 + .../assets/justify-content-stretch.svg | 4 + .../assets/justify-items-baseline.svg | 4 + .../assets/justify-items-center.svg | 4 + .../design-core/assets/justify-items-end.svg | 4 + .../assets/justify-items-start.svg | 4 + .../assets/justify-items-stretch.svg | 4 + packages/design-core/assets/language.svg | 12 + .../design-core/assets/laptop-cut-corner.svg | 17 + packages/design-core/assets/line.svg | 13 + .../design-core/assets/linear-gradient.svg | 1 + packages/design-core/assets/link.svg | 16 + packages/design-core/assets/list.svg | 6 + packages/design-core/assets/loading.svg | 7 + packages/design-core/assets/location.svg | 9 + .../design-core/assets/locked-outline.svg | 6 + packages/design-core/assets/locked.svg | 10 + packages/design-core/assets/logout.svg | 8 + packages/design-core/assets/margin.svg | 9 + packages/design-core/assets/materials.svg | 3 + packages/design-core/assets/menu.svg | 13 + .../design-core/assets/mobile-landscape.svg | 24 + .../design-core/assets/mobile-portrai.svg | 15 + packages/design-core/assets/new-page.svg | 13 + packages/design-core/assets/news.svg | 6 + .../design-core/assets/nonsupportregion.svg | 20 + packages/design-core/assets/notify-alarm.svg | 11 + .../design-core/assets/notify-failure.svg | 11 + packages/design-core/assets/notify-prompt.svg | 11 + .../design-core/assets/notify-success.svg | 11 + packages/design-core/assets/numeric.svg | 1 + .../design-core/assets/overflow-scroll.svg | 31 + packages/design-core/assets/padding.svg | 9 + packages/design-core/assets/page-schema.svg | 11 + packages/design-core/assets/page.svg | 13 + packages/design-core/assets/pager.svg | 21 + packages/design-core/assets/paragraph.svg | 13 + packages/design-core/assets/pencil-thick.svg | 3 + packages/design-core/assets/pie.svg | 12 + packages/design-core/assets/plugin-help.svg | 1 + .../design-core/assets/plugin-icon-data.svg | 15 + .../design-core/assets/plugin-icon-js.svg | 16 + .../assets/plugin-icon-language.svg | 20 + .../assets/plugin-icon-materials.svg | 16 + .../assets/plugin-icon-page-schema.svg | 14 + .../design-core/assets/plugin-icon-page.svg | 15 + .../assets/plugin-icon-plugin-help.svg | 16 + .../design-core/assets/plugin-icon-robot.svg | 13 + .../assets/plugin-icon-sresources.svg | 13 + .../design-core/assets/plugin-icon-symbol.svg | 13 + .../design-core/assets/plugin-icon-tree.svg | 12 + .../assets/plugin-icon-tutorial.svg | 14 + .../design-core/assets/plugin-icon-var.svg | 25 + packages/design-core/assets/plus-circle.svg | 6 + packages/design-core/assets/plus.svg | 6 + packages/design-core/assets/popeditor.svg | 15 + packages/design-core/assets/popover.svg | 18 + packages/design-core/assets/position-all.svg | 3 + .../assets/position-bottom-left.svg | 3 + .../assets/position-bottom-right.svg | 3 + .../design-core/assets/position-bottom.svg | 3 + packages/design-core/assets/position-left.svg | 3 + .../design-core/assets/position-right.svg | 3 + .../design-core/assets/position-top-left.svg | 3 + .../design-core/assets/position-top-right.svg | 3 + packages/design-core/assets/position-top.svg | 3 + packages/design-core/assets/preview.svg | 12 + packages/design-core/assets/prompt.svg | 6 + packages/design-core/assets/radar.svg | 12 + .../design-core/assets/radial-gradient.svg | 1 + packages/design-core/assets/radio.svg | 16 + packages/design-core/assets/realtime-flow.svg | 6 + packages/design-core/assets/redo.svg | 12 + packages/design-core/assets/refresh.svg | 13 + packages/design-core/assets/report.svg | 6 + packages/design-core/assets/resources.svg | 24 + packages/design-core/assets/return.svg | 9 + packages/design-core/assets/rf-alarm.svg | 11 + .../assets/rf-resources/flowchart-ecs.svg | 8 + .../assets/rf-resources/flowchart-evs.svg | 8 + .../assets/rf-resources/flowchart-rds.svg | 3 + .../assets/rf-resources/flowchart-vpc.svg | 3 + packages/design-core/assets/ring.svg | 14 + packages/design-core/assets/row.svg | 13 + packages/design-core/assets/save.svg | 12 + packages/design-core/assets/search.svg | 13 + packages/design-core/assets/select.svg | 12 + .../design-core/assets/setting-outline.svg | 9 + packages/design-core/assets/setting.svg | 13 + packages/design-core/assets/slot.svg | 19 + packages/design-core/assets/small-list.svg | 15 + packages/design-core/assets/stars.svg | 3 + packages/design-core/assets/start.svg | 6 + .../assets/style-setting-background-image.svg | 1 + packages/design-core/assets/swiper.svg | 3 + packages/design-core/assets/switch.svg | 12 + packages/design-core/assets/symbol.svg | 15 + packages/design-core/assets/table.svg | 14 + packages/design-core/assets/tablefilter.svg | 3 + .../design-core/assets/tablet-portrait.svg | 18 + packages/design-core/assets/tabs.svg | 14 + packages/design-core/assets/tag.svg | 3 + packages/design-core/assets/target.svg | 3 + .../design-core/assets/text-align-center.svg | 18 + .../design-core/assets/text-align-justify.svg | 18 + .../design-core/assets/text-align-left.svg | 18 + .../design-core/assets/text-align-right.svg | 18 + .../design-core/assets/text-copy-page.svg | 10 + .../assets/text-decoration-overline.svg | 14 + .../assets/text-decoration-strike.svg | 19 + .../assets/text-decoration-underline.svg | 14 + .../design-core/assets/text-direction-ltr.svg | 25 + .../design-core/assets/text-direction-rtl.svg | 25 + .../design-core/assets/text-page-common.svg | 9 + .../assets/text-page-folder-closed.svg | 10 + .../design-core/assets/text-page-folder.svg | 12 + .../design-core/assets/text-page-home.svg | 7 + .../design-core/assets/text-page-link.svg | 10 + .../design-core/assets/text-page-revert.svg | 9 + .../design-core/assets/text-page-review.svg | 20 + .../design-core/assets/text-source-delete.svg | 13 + .../assets/text-source-list-add.svg | 13 + .../assets/text-source-list-close.svg | 12 + .../assets/text-source-list-ref.svg | 13 + .../assets/text-source-setting.svg | 10 + .../design-core/assets/text-source-string.svg | 11 + .../assets/text-transform-capitalize.svg | 24 + .../assets/text-transform-lowercase.svg | 18 + .../assets/text-transform-sentence.svg | 18 + packages/design-core/assets/text.svg | 9 + packages/design-core/assets/tile-x.svg | 1 + packages/design-core/assets/tile-xy.svg | 1 + packages/design-core/assets/tile-y.svg | 1 + packages/design-core/assets/timeline.svg | 12 + packages/design-core/assets/tiny-logo.svg | 25 + packages/design-core/assets/tooltip.svg | 15 + .../assets/transform-origin-bottom-left.svg | 3 + .../assets/transform-origin-bottom-right.svg | 3 + .../assets/transform-origin-bottom.svg | 3 + .../assets/transform-origin-center.svg | 3 + .../assets/transform-origin-left.svg | 3 + .../assets/transform-origin-point.svg | 3 + .../assets/transform-origin-right.svg | 3 + .../assets/transform-origin-top-left.svg | 3 + .../assets/transform-origin-top-right.svg | 3 + .../assets/transform-origin-top.svg | 3 + packages/design-core/assets/trash.svg | 3 + packages/design-core/assets/tree-shape.svg | 5 + packages/design-core/assets/tree.svg | 11 + packages/design-core/assets/tutorial.svg | 13 + packages/design-core/assets/undo.svg | 11 + .../design-core/assets/unfold-outline.svg | 6 + packages/design-core/assets/unlocked.svg | 10 + packages/design-core/assets/user-locked.svg | 14 + packages/design-core/assets/var.svg | 20 + packages/design-core/assets/video.svg | 21 + packages/design-core/assets/warning.svg | 11 + packages/design-core/assets/wizard.svg | 11 + packages/design-core/canvas.html | 302 + packages/design-core/config/addons.js | 73 + packages/design-core/config/lowcode.config.js | 97 + packages/design-core/index.html | 131 + packages/design-core/package.json | 133 + packages/design-core/preview.html | 17 + packages/design-core/previewApp.html | 13 + packages/design-core/public/favicon.ico | Bin 0 -> 4286 bytes .../i18n-template-for-batch-import.zip | Bin 0 -> 455 bytes packages/design-core/public/img/bgcModal.png | Bin 0 -> 1094 bytes .../design-core/public/img/defaultAvator.png | Bin 0 -> 171603 bytes packages/design-core/public/img/divider.png | Bin 0 -> 721 bytes .../design-core/public/img/dividerActive.png | Bin 0 -> 770 bytes packages/design-core/public/img/rocket.jpg | Bin 0 -> 182047 bytes packages/design-core/public/img/webNova.jpg | Bin 0 -> 499979 bytes packages/design-core/public/mock/bundle.json | 14290 ++++++++ .../public/monaco-linter/eslint.worker.js | 57 + packages/design-core/public/tiny-vue.css | 63 + packages/design-core/scripts/externalDeps.js | 60 + packages/design-core/setting.html | 14 + packages/design-core/src/App.vue | 163 + packages/design-core/src/DesignCanvas.vue | 192 + packages/design-core/src/DesignPlugins.vue | 359 + packages/design-core/src/DesignSettings.vue | 106 + packages/design-core/src/DesignToolbars.vue | 163 + packages/design-core/src/canvas.js | 3 + packages/design-core/src/main.js | 43 + packages/design-core/src/preview/src/App.vue | 41 + .../design-core/src/preview/src/Toolbar.vue | 93 + .../src/preview/src/constant/index.js | 23 + packages/design-core/src/preview/src/main.js | 22 + .../src/preview/src/preview/Preview.vue | 204 + .../src/preview/src/preview/debugSwitch.js | 10 + .../src/preview/src/preview/generate.js | 161 + .../src/preview/src/preview/http.js | 52 + .../src/preview/src/preview/importMap.js | 51 + .../src/preview/src/preview/srcFiles.js | 43 + .../src/preview/src/preview/srcFiles/App.vue | 69 + .../preview/src/preview/srcFiles/Login.vue | 33 + .../src/preview/src/preview/srcFiles/Main.vue | 3 + .../src/preview/src/preview/srcFiles/app.js | 20 + .../preview/src/preview/srcFiles/bridge.js | 13 + .../src/preview/srcFiles/constant/index.js | 22 + .../src/preview/srcFiles/dataSource.js | 16 + .../src/preview/srcFiles/dataSourceMap.js | 35 + .../src/preview/srcFiles/injectGlobal.js | 17 + .../preview/src/preview/srcFiles/locales.js | 16 + .../preview/src/preview/srcFiles/lowcode.js | 92 + .../preview/src/preview/srcFiles/stores.js | 13 + .../src/preview/srcFiles/storesHelper.js | 29 + .../src/preview/src/preview/srcFiles/utils.js | 14 + .../design-core/src/preview/src/previewApp.js | 17 + .../src/preview/src/previewApp.vue | 175 + packages/design-core/vite.config.js | 292 + packages/http/package.json | 41 + packages/http/src/Login.vue | 83 + packages/http/src/axios.js | 151 + packages/http/src/config.js | 29 + packages/http/src/index.js | 155 + packages/http/src/mock.js | 939 + packages/http/vite.config.js | 38 + packages/i18n/README.md | 2 + packages/i18n/index.html | 13 + packages/i18n/package.json | 50 + packages/i18n/src/App.vue | 44 + packages/i18n/src/I18nHost.vue | 45 + packages/i18n/src/i18n.js | 28 + packages/i18n/src/lib.js | 25 + packages/i18n/src/main.js | 21 + packages/i18n/src/test/TestVueInject.vue | 20 + packages/i18n/src/test/TestVueUse.vue | 17 + packages/i18n/src/test/TestWebcomponent.vue | 20 + packages/i18n/vite.config.js | 52 + packages/live-component/components.json | 16 + packages/live-component/jsconfig.json | 8 + packages/live-component/package.json | 40 + packages/live-component/src/CanvasLive.vue | 58 + .../src/components/ui/accordion/Accordion.vue | 24 + .../ui/accordion/AccordionContent.vue | 28 + .../components/ui/accordion/AccordionItem.vue | 27 + .../ui/accordion/AccordionTrigger.vue | 37 + .../src/components/ui/accordion/index.js | 4 + .../src/components/ui/avatar/Avatar.vue | 17 + .../components/ui/avatar/AvatarFallback.vue | 15 + .../src/components/ui/avatar/AvatarImage.vue | 13 + .../src/components/ui/avatar/index.js | 22 + .../src/components/ui/badge/Badge.vue | 15 + .../src/components/ui/badge/index.js | 23 + .../src/components/ui/button/Button.vue | 19 + .../src/components/ui/button/index.js | 34 + .../src/components/ui/input/Input.vue | 29 + .../src/components/ui/input/index.js | 1 + .../components/ui/scroll-area/ScrollArea.vue | 31 + .../components/ui/scroll-area/ScrollBar.vue | 35 + .../src/components/ui/scroll-area/index.js | 2 + .../src/components/ui/select/Select.vue | 25 + .../components/ui/select/SelectContent.vue | 68 + .../src/components/ui/select/SelectGroup.vue | 23 + .../src/components/ui/select/SelectItem.vue | 45 + .../components/ui/select/SelectItemText.vue | 15 + .../src/components/ui/select/SelectLabel.vue | 18 + .../ui/select/SelectScrollDownButton.vue | 31 + .../ui/select/SelectScrollUpButton.vue | 31 + .../components/ui/select/SelectSeparator.vue | 21 + .../components/ui/select/SelectTrigger.vue | 38 + .../src/components/ui/select/SelectValue.vue | 16 + .../src/components/ui/select/index.js | 11 + packages/live-component/src/index.css | 3 + packages/live-component/src/index.js | 4 + packages/live-component/src/lib/utils.js | 6 + packages/live-component/tailwind.config.js | 39 + packages/live-component/vite.config.js | 41 + packages/plugins/ai/README.md | 97 + packages/plugins/ai/components.json | 17 + packages/plugins/ai/index.html | 15 + packages/plugins/ai/package.json | 62 + packages/plugins/ai/postcss.config.js | 6 + .../plugins/ai/public/component-editor.svg | 87 + packages/plugins/ai/public/page-creator.svg | 31 + packages/plugins/ai/scripts/bundle.json | 13415 +++++++ .../plugins/ai/scripts/generate-prompt.js | 77 + .../plugins/ai/scripts/schema.system.base.md | 31 + .../components/business/ApiConfigSteps.tsx | 94 + .../ai/src/components/ui/aspect-ratio.tsx | 5 + .../plugins/ai/src/components/ui/button.tsx | 56 + .../plugins/ai/src/components/ui/card.tsx | 79 + .../plugins/ai/src/components/ui/dialog.tsx | 120 + .../plugins/ai/src/components/ui/input.tsx | 25 + .../plugins/ai/src/components/ui/label.tsx | 24 + .../ai/src/components/ui/radio-group.tsx | 42 + .../ai/src/components/ui/scroll-area.tsx | 46 + .../plugins/ai/src/components/ui/switch.tsx | 27 + .../plugins/ai/src/components/ui/textarea.tsx | 24 + packages/plugins/ai/src/index.css | 76 + packages/plugins/ai/src/lib.ts | 26 + packages/plugins/ai/src/lib/utils.ts | 6 + packages/plugins/ai/src/main.tsx | 13 + packages/plugins/ai/src/plugins/ai-form.tsx | 419 + .../component-editor/ComponentEditor.tsx | 230 + .../component-editor/ComponentEditor.vue | 13 + .../component-editor/edit-component-form.tsx | 651 + .../plugins/ai/src/plugins/custom-element.tsx | 28 + packages/plugins/ai/src/plugins/fetch-llm.ts | 56 + .../src/plugins/page-creator/PageCreator.tsx | 137 + .../src/plugins/page-creator/PageCreator.vue | 13 + packages/plugins/ai/src/plugins/shared-api.ts | 29 + .../ai/src/prompts/component.system.md | 89 + .../ai/src/prompts/live-component.system.md | 133 + .../plugins/ai/src/prompts/schema.system.md | 559 + packages/plugins/ai/src/shims-vue.d.ts | 1 + packages/plugins/ai/src/vite-env.d.ts | 1 + packages/plugins/ai/tailwind.config.js | 77 + packages/plugins/ai/tsconfig.json | 30 + packages/plugins/ai/tsconfig.node.json | 11 + packages/plugins/ai/vite.config.ts | 33 + packages/plugins/block/index.js | 22 + packages/plugins/block/mock/test.js | 0 packages/plugins/block/package.json | 46 + packages/plugins/block/src/BlockConfig.vue | 337 + packages/plugins/block/src/BlockEvent.vue | 56 + packages/plugins/block/src/BlockEventForm.vue | 94 + packages/plugins/block/src/BlockEventList.vue | 80 + .../plugins/block/src/BlockGroupArrange.vue | 72 + packages/plugins/block/src/BlockGuide.vue | 52 + packages/plugins/block/src/BlockProperty.vue | 38 + .../plugins/block/src/BlockPropertyForm.vue | 313 + .../plugins/block/src/BlockPropertyList.vue | 100 + packages/plugins/block/src/BlockSetting.vue | 365 + packages/plugins/block/src/CategoryEdit.vue | 141 + packages/plugins/block/src/Main.vue | 538 + .../plugins/block/src/js/blockPropertyForm.js | 314 + .../plugins/block/src/js/blockSetting.jsx | 871 + packages/plugins/block/src/js/http.js | 67 + packages/plugins/block/test/test.js | 0 packages/plugins/block/vite.config.js | 37 + packages/plugins/bridge/assets/test.png | 0 packages/plugins/bridge/index.js | 21 + packages/plugins/bridge/mock/test.js | 0 packages/plugins/bridge/package.json | 42 + packages/plugins/bridge/src/BridgeManage.vue | 166 + packages/plugins/bridge/src/BridgeSetting.vue | 393 + packages/plugins/bridge/src/Main.vue | 111 + packages/plugins/bridge/src/http.js | 39 + packages/plugins/bridge/src/js/resource.js | 237 + packages/plugins/bridge/test/test.js | 0 packages/plugins/bridge/vite.config.js | 37 + packages/plugins/data/assets/test.png | 0 packages/plugins/data/index.js | 21 + packages/plugins/data/mock/test.js | 0 packages/plugins/data/package.json | 44 + packages/plugins/data/src/CreateRemoteAPI.vue | 327 + .../plugins/data/src/CreateRemoteFunction.vue | 81 + packages/plugins/data/src/CreateStore.vue | 273 + packages/plugins/data/src/CreateVariable.vue | 496 + packages/plugins/data/src/DataSourceList.vue | 216 + .../plugins/data/src/DataSourceRightPanel.vue | 133 + packages/plugins/data/src/EditorI18nTool.vue | 143 + packages/plugins/data/src/Main.vue | 490 + packages/plugins/data/src/js/common.js | 48 + packages/plugins/data/src/js/constants.js | 22 + packages/plugins/data/src/js/http.js | 20 + packages/plugins/data/test/test.js | 0 packages/plugins/data/vite.config.js | 37 + packages/plugins/datasource/index.js | 24 + packages/plugins/datasource/package.json | 48 + .../datasource/src/DataSourceField.vue | 214 + .../datasource/src/DataSourceFieldCheck.vue | 69 + .../src/DataSourceFieldCheckMultipleLine.vue | 38 + .../src/DataSourceFieldCheckRanger.vue | 68 + .../datasource/src/DataSourceFieldForm.vue | 200 + .../datasource/src/DataSourceFieldList.vue | 149 + .../datasource/src/DataSourceFieldType.vue | 128 + .../plugins/datasource/src/DataSourceForm.vue | 277 + .../src/DataSourceGlobalDataHandler.vue | 118 + .../plugins/datasource/src/DataSourceList.vue | 161 + .../plugins/datasource/src/DataSourceName.vue | 89 + .../datasource/src/DataSourceRecordForm.vue | 266 + .../datasource/src/DataSourceRecordList.vue | 760 + .../datasource/src/DataSourceRecordUpload.vue | 191 + .../src/DataSourceRemoteAutoload.vue | 64 + .../src/DataSourceRemoteDataAdapter.vue | 115 + .../src/DataSourceRemoteDataResult.vue | 120 + .../datasource/src/DataSourceRemoteForm.vue | 174 + .../src/DataSourceRemoteMapping.vue | 153 + .../datasource/src/DataSourceRemotePanel.vue | 294 + .../src/DataSourceRemoteParameter.vue | 53 + .../datasource/src/DataSourceTemplate.vue | 121 + .../plugins/datasource/src/DataSourceType.vue | 118 + packages/plugins/datasource/src/Main.vue | 163 + .../datasource/src/RemoteDataAdapterForm.vue | 83 + packages/plugins/datasource/src/config.js | 50 + .../plugins/datasource/src/js/datasource.js | 162 + packages/plugins/datasource/src/js/http.js | 51 + packages/plugins/datasource/vite.config.js | 37 + packages/plugins/help/assets/test.png | 0 packages/plugins/help/index.js | 20 + packages/plugins/help/mock/test.js | 0 packages/plugins/help/package.json | 40 + packages/plugins/help/src/HelpIcon.vue | 382 + packages/plugins/help/test/test.js | 0 packages/plugins/help/vite.config.js | 37 + packages/plugins/i18n/assets/test.png | 0 packages/plugins/i18n/index.js | 21 + packages/plugins/i18n/mock/test.js | 0 packages/plugins/i18n/package.json | 43 + packages/plugins/i18n/src/Main.vue | 648 + packages/plugins/i18n/test/test.js | 0 packages/plugins/i18n/vite.config.js | 37 + packages/plugins/materials/assets/test.png | 0 packages/plugins/materials/index.js | 24 + packages/plugins/materials/mock/test.js | 0 packages/plugins/materials/package.json | 41 + packages/plugins/materials/src/Main.vue | 116 + .../materials/src/block/BlockDetail.vue | 203 + .../materials/src/block/BlockGroup.vue | 528 + .../materials/src/block/BlockGroupArrange.vue | 95 + .../materials/src/block/BlockGroupFilters.vue | 113 + .../materials/src/block/BlockGroupPanel.vue | 246 + .../materials/src/block/BlockGroupSort.vue | 92 + .../src/block/BlockGroupTransfer.vue | 181 + .../src/block/BlockGroupTransferPanel.vue | 76 + .../plugins/materials/src/block/BlockList.vue | 204 + .../src/block/BlockVersionSelect.vue | 153 + packages/plugins/materials/src/block/Main.vue | 157 + packages/plugins/materials/src/block/http.js | 136 + .../materials/src/block/js/usePanel.js | 63 + .../plugins/materials/src/component/Main.vue | 188 + packages/plugins/materials/test/test.js | 0 packages/plugins/materials/vite.config.js | 37 + packages/plugins/page/assets/test.png | 0 packages/plugins/page/index.js | 22 + packages/plugins/page/mock/test.js | 0 packages/plugins/page/package.json | 42 + packages/plugins/page/src/Main.vue | 169 + .../plugins/page/src/PageFolderSetting.vue | 214 + packages/plugins/page/src/PageGeneral.vue | 305 + packages/plugins/page/src/PageHistory.vue | 78 + packages/plugins/page/src/PageHome.vue | 144 + packages/plugins/page/src/PageInputOutput.vue | 155 + packages/plugins/page/src/PageSetting.vue | 426 + packages/plugins/page/src/PageTree.vue | 503 + packages/plugins/page/src/http.js | 57 + packages/plugins/page/test/test.js | 0 packages/plugins/page/vite.config.js | 37 + packages/plugins/robot/assets/AI.png | Bin 0 -> 121432 bytes packages/plugins/robot/assets/test.png | 0 packages/plugins/robot/index.js | 21 + packages/plugins/robot/mock/test.js | 0 packages/plugins/robot/package.json | 42 + packages/plugins/robot/src/Main.vue | 514 + packages/plugins/robot/src/js/robotSetting.js | 74 + packages/plugins/robot/test/test.js | 0 packages/plugins/robot/vite.config.js | 37 + packages/plugins/schema/assets/test.png | 0 packages/plugins/schema/index.js | 21 + packages/plugins/schema/mock/test.js | 0 packages/plugins/schema/package.json | 41 + packages/plugins/schema/src/Main.vue | 230 + packages/plugins/schema/test/test.js | 0 packages/plugins/schema/vite.config.js | 37 + packages/plugins/script/assets/test.png | 0 packages/plugins/script/index.js | 23 + packages/plugins/script/mock/test.js | 0 packages/plugins/script/package.json | 42 + packages/plugins/script/src/Main.vue | 184 + packages/plugins/script/src/js/method.js | 213 + packages/plugins/script/test/test.js | 0 packages/plugins/script/vite.config.js | 37 + packages/plugins/tree/assets/test.png | 0 packages/plugins/tree/index.js | 21 + packages/plugins/tree/mock/test.js | 0 packages/plugins/tree/package.json | 43 + packages/plugins/tree/src/Main.vue | 370 + packages/plugins/tree/test/test.js | 0 packages/plugins/tree/vite.config.js | 37 + packages/plugins/tutorial/assets/test.png | 0 packages/plugins/tutorial/index.js | 22 + packages/plugins/tutorial/mock/test.js | 0 packages/plugins/tutorial/package.json | 41 + packages/plugins/tutorial/src/Main.vue | 185 + .../tutorial/src/TutorialVideoPanel.vue | 118 + packages/plugins/tutorial/src/js/http.js | 20 + packages/plugins/tutorial/test/test.js | 0 packages/plugins/tutorial/vite.config.js | 37 + packages/settings/design/package.json | 40 + packages/settings/design/src/App.vue | 240 + .../src/assets/materials/ng-bundle.json | 3036 ++ .../materials/ng-components/accordion.json | 98 + .../assets/materials/ng-components/alert.json | 96 + .../materials/ng-components/button.json | 138 + .../materials/ng-components/checkbox.json | 155 + .../materials/ng-components/container.json | 108 + .../assets/materials/ng-components/date.json | 187 + .../materials/ng-components/daterange.json | 172 + .../assets/materials/ng-components/form.json | 111 + .../materials/ng-components/formfield.json | 259 + .../materials/ng-components/halfmodal.json | 112 + .../assets/materials/ng-components/image.json | 111 + .../assets/materials/ng-components/index.js | 22 + .../assets/materials/ng-components/input.json | 98 + .../assets/materials/ng-components/radio.json | 102 + .../materials/ng-components/select.json | 126 + .../materials/ng-components/swiper.json | 141 + .../materials/ng-components/switch.json | 130 + .../assets/materials/ng-components/tab.json | 104 + .../assets/materials/ng-components/table.json | 390 + .../materials/ng-components/tablefilter.json | 263 + .../assets/materials/ng-components/tag.json | 130 + .../src/components/ArrayConfigItemForm.vue | 212 + .../design/src/components/ComponentList.vue | 44 + .../design/src/components/PropertyCanvas.vue | 316 + .../design/src/components/PropertyList.vue | 122 + .../design/src/components/SettingPanel.vue | 391 + .../design/src/components/SourceEditor.vue | 70 + .../design/src/components/widgets/index.js | 27 + .../settings/design/src/convertToSchema.js | 103 + packages/settings/design/src/lib.js | 15 + packages/settings/design/src/main.js | 23 + .../design/src/ng-properties/accordion.json | 26 + .../design/src/ng-properties/alert.json | 26 + .../design/src/ng-properties/button.json | 37 + .../design/src/ng-properties/checkbox.json | 38 + .../design/src/ng-properties/container.json | 26 + .../design/src/ng-properties/date.json | 40 + .../design/src/ng-properties/daterange.json | 45 + .../design/src/ng-properties/form.json | 24 + .../design/src/ng-properties/formfield.json | 87 + .../design/src/ng-properties/halfmodal.json | 25 + .../design/src/ng-properties/image.json | 24 + .../design/src/ng-properties/index.js | 22 + .../design/src/ng-properties/input.json | 26 + .../design/src/ng-properties/radio.json | 55 + .../design/src/ng-properties/select.json | 54 + .../design/src/ng-properties/swiper.json | 39 + .../design/src/ng-properties/switch.json | 28 + .../design/src/ng-properties/tab.json | 32 + .../design/src/ng-properties/table.json | 153 + .../design/src/ng-properties/tablefilter.json | 109 + .../design/src/ng-properties/tag.json | 28 + .../settings/design/src/properties/alert.json | 68 + .../design/src/properties/amount.json | 85 + .../settings/design/src/properties/area.json | 55 + .../design/src/properties/autocomplete.json | 117 + .../settings/design/src/properties/badge.json | 52 + .../src/properties/breadcrumb-item.json | 21 + .../design/src/properties/breadcrumb.json | 20 + .../design/src/properties/bulletin-board.json | 102 + .../design/src/properties/button-group.json | 62 + .../design/src/properties/button.json | 77 + .../design/src/properties/calendar.json | 69 + .../design/src/properties/carousel-item.json | 21 + .../design/src/properties/carousel.json | 69 + .../design/src/properties/cascader-panel.json | 121 + .../design/src/properties/cascader-props.json | 59 + .../design/src/properties/cascader.json | 173 + .../design/src/properties/chart-data.json | 22 + .../design/src/properties/chart-pie.json | 395 + .../settings/design/src/properties/chart.json | 90 + .../src/properties/checkbox-button.json | 55 + .../design/src/properties/checkbox-group.json | 84 + .../design/src/properties/checkbox.json | 68 + .../settings/design/src/properties/col.json | 79 + .../design/src/properties/collapse-item.json | 28 + .../design/src/properties/collapse.json | 20 + .../design/src/properties/company.json | 44 + .../design/src/properties/container.json | 45 + .../design/src/properties/country.json | 39 + .../src/properties/credit-card-form.json | 46 + .../settings/design/src/properties/crop.json | 140 + .../design/src/properties/currency.json | 45 + .../properties/date-picker-date-format.json | 6 + .../src/properties/date-picker-options.json | 18 + .../src/properties/date-picker-shortcuts.json | 12 + .../design/src/properties/date-picker.json | 169 + .../settings/design/src/properties/dept.json | 28 + .../design/src/properties/detail-page.json | 52 + .../design/src/properties/dialog-box.json | 109 + .../design/src/properties/drop-roles.json | 49 + .../design/src/properties/drop-times.json | 44 + .../settings/design/src/properties/edoc.json | 75 + .../design/src/properties/espace.json | 31 + .../design/src/properties/fall-menu.json | 66 + .../design/src/properties/file-upload.json | 215 + .../design/src/properties/floatbar.json | 11 + .../design/src/properties/flow-chart.json | 70 + .../design/src/properties/form-item.json | 57 + .../settings/design/src/properties/form.json | 81 + .../settings/design/src/properties/gantt.json | 51 + .../design/src/properties/grid-column.json | 229 + .../design/src/properties/grid-toolbar.json | 79 + .../settings/design/src/properties/grid.json | 750 + .../design/src/properties/hrapprover.json | 26 + .../settings/design/src/properties/image.json | 52 + .../settings/design/src/properties/index.js | 22 + .../settings/design/src/properties/input.json | 192 + .../design/src/properties/ip-address.json | 44 + .../design/src/properties/layout.json | 23 + .../design/src/properties/link-menu.json | 56 + .../settings/design/src/properties/link.json | 47 + .../design/src/properties/loading.json | 47 + .../design/src/properties/locales.json | 22 + .../design/src/properties/logon-user.json | 6 + .../design/src/properties/logout.json | 12 + .../design/src/properties/menu-bar.json | 6 + .../design/src/properties/milestone.json | 101 + .../settings/design/src/properties/modal.json | 143 + .../design/src/properties/nav-menu.json | 32 + .../design/src/properties/numeric.json | 87 + .../design/src/properties/option-group.json | 21 + .../design/src/properties/option.json | 36 + .../settings/design/src/properties/pager.json | 86 + .../settings/design/src/properties/panel.json | 58 + .../design/src/properties/pop-upload.json | 86 + .../design/src/properties/popeditor.json | 147 + .../design/src/properties/popover.json | 129 + .../design/src/properties/progress.json | 59 + .../design/src/properties/radio-button.json | 26 + .../design/src/properties/radio-group.json | 48 + .../settings/design/src/properties/radio.json | 48 + .../settings/design/src/properties/rate.json | 112 + .../design/src/properties/rich-text.json | 47 + .../settings/design/src/properties/roles.json | 6 + .../settings/design/src/properties/row.json | 47 + .../design/src/properties/scroll-text.json | 33 + .../design/src/properties/search.json | 45 + .../design/src/properties/select.json | 205 + .../design/src/properties/slide-bar.json | 35 + .../design/src/properties/slider.json | 62 + .../settings/design/src/properties/split.json | 49 + .../settings/design/src/properties/steps.json | 39 + .../design/src/properties/svg-icon.json | 28 + .../design/src/properties/switch.json | 45 + .../settings/design/src/properties/tabs.json | 75 + .../settings/design/src/properties/tag.json | 51 + .../design/src/properties/text-popup.json | 34 + .../design/src/properties/time-line.json | 67 + .../src/properties/time-picker-options.json | 17 + .../design/src/properties/time-picker.json | 112 + .../src/properties/time-select-options.json | 32 + .../design/src/properties/time-select.json | 102 + .../design/src/properties/toggle-menu.json | 82 + .../design/src/properties/tooltip.json | 131 + .../design/src/properties/transfer.json | 184 + .../design/src/properties/tree-menu.json | 106 + .../settings/design/src/properties/tree.json | 141 + .../design/src/properties/user-account.json | 26 + .../design/src/properties/user-contact.json | 45 + .../design/src/properties/user-head.json | 59 + .../design/src/properties/user-link.json | 47 + .../settings/design/src/properties/user.json | 113 + .../design/src/properties/wizard.json | 43 + .../design/src/schema/carousel-item.json | 32 + .../settings/design/src/schema/carousel.json | 146 + .../settings/design/src/schemas/button.json | 299 + .../settings/design/src/schemas/checkbox.json | 205 + .../design/src/schemas/checkboxbutton.json | 137 + .../design/src/schemas/checkboxgroup.json | 147 + .../settings/design/src/schemas/collapse.json | 100 + .../design/src/schemas/collapseitem.json | 101 + .../design/src/schemas/dialogbox.json | 193 + .../settings/design/src/schemas/floatbar.json | 20 + .../settings/design/src/schemas/form.json | 325 + .../settings/design/src/schemas/formitem.json | 93 + .../settings/design/src/schemas/grid.json | 692 + .../design/src/schemas/gridcolumn.json | 266 + packages/settings/design/src/schemas/index.js | 22 + .../settings/design/src/schemas/input.json | 305 + .../settings/design/src/schemas/pager.json | 205 + .../design/src/schemas/popeditor.json | 312 + .../settings/design/src/schemas/popover.json | 205 + .../settings/design/src/schemas/radio.json | 184 + .../settings/design/src/schemas/search.json | 228 + .../settings/design/src/schemas/select.json | 331 + .../settings/design/src/schemas/switch.json | 148 + .../settings/design/src/schemas/tabitem.json | 77 + .../settings/design/src/schemas/tabs.json | 272 + .../design/src/schemas/time-line.json | 134 + .../settings/design/src/schemas/tooltip.json | 127 + .../settings/design/src/schemas/tree.json | 275 + packages/settings/design/src/store/index.js | 276 + packages/settings/design/vite.config.js | 37 + packages/settings/events/index.js | 22 + packages/settings/events/package.json | 42 + packages/settings/events/src/Main.vue | 19 + .../settings/events/src/commonjs/events.js | 193 + .../events/src/components/AddEventsDialog.vue | 129 + .../events/src/components/AdvanceConfig.vue | 260 + .../events/src/components/BindEvents.vue | 373 + .../src/components/BindEventsDialog.vue | 501 + packages/settings/events/vite.config.js | 37 + packages/settings/props/index.js | 26 + packages/settings/props/package.json | 42 + packages/settings/props/src/Main.vue | 48 + .../settings/props/src/components/Empty.vue | 44 + .../props/src/components/groups/LifeCycle.vue | 305 + .../src/components/groups/TableColumn.vue | 211 + .../src/components/groups/TablePager.vue | 79 + .../settings/props/src/components/index.js | 31 + .../src/components/inputs/BindFunction.vue | 95 + .../src/components/inputs/CheckValue.vue | 44 + .../src/components/inputs/CodeEditor.vue | 165 + .../components/inputs/DraggableOptions.vue | 222 + .../src/components/inputs/NumericSelect.vue | 131 + .../src/components/inputs/SelectOption.vue | 52 + .../src/components/inputs/SwitchValue.vue | 53 + .../src/components/modal/ModalContent.vue | 131 + packages/settings/props/vite.config.js | 37 + packages/settings/styles/assets/test.png | 0 packages/settings/styles/index.js | 22 + packages/settings/styles/mock/test.js | 0 packages/settings/styles/package.json | 45 + packages/settings/styles/src/Main.vue | 247 + .../components/background/BackgroundGroup.vue | 551 + .../background/BackgroundImageGradient.vue | 171 + .../background/BackgroundImageSetting.vue | 256 + .../components/background/ColorOverlay.vue | 35 + .../components/background/ImageSetting.vue | 350 + .../components/background/LinearGradient.vue | 197 + .../components/background/PositionOrigin.vue | 247 + .../components/background/RadialGradient.vue | 222 + .../src/components/border/BorderGroup.vue | 795 + .../components/classNamesContainer/index.vue | 680 + .../src/components/effects/EffectGroup.vue | 577 + .../settings/styles/src/components/index.js | 28 + .../src/components/inputs/ImageSelect.vue | 78 + .../src/components/inputs/InputSelect.vue | 185 + .../src/components/inputs/ModalMask.vue | 81 + .../src/components/inputs/NumericSelect.vue | 121 + .../src/components/inputs/ResetButton.vue | 39 + .../styles/src/components/layout/FlexBox.vue | 251 + .../styles/src/components/layout/GridBox.vue | 561 + .../src/components/layout/LayoutGroup.vue | 194 + .../src/components/position/PositionGroup.vue | 621 + .../src/components/shadow/BoxShadowGroup.vue | 70 + .../styles/src/components/size/SizeGroup.vue | 577 + .../src/components/spacing/SpacingGroup.vue | 614 + .../src/components/spacing/SpacingSetting.vue | 237 + .../components/typography/TypographyGroup.vue | 593 + .../components/typography/TypographyMore.vue | 238 + packages/settings/styles/src/js/cssConvert.js | 36 + packages/settings/styles/src/js/cssType.js | 52 + packages/settings/styles/src/js/parser.js | 274 + .../settings/styles/src/js/styleProperty.js | 272 + packages/settings/styles/src/js/useEditor.js | 81 + packages/settings/styles/src/js/useEvent.js | 17 + packages/settings/styles/src/js/useLayout.js | 25 + packages/settings/styles/src/js/useStyle.js | 399 + packages/settings/styles/test/test.js | 0 packages/settings/styles/vite.config.js | 37 + packages/svgs/index.js | 17 + packages/svgs/mock/test.js | 0 packages/svgs/package.json | 38 + packages/svgs/src/Main.vue | 48 + packages/svgs/test/test.js | 0 packages/svgs/vite.config.js | 37 + packages/theme/common/base.less | 130 + packages/theme/common/global.less | 1956 + packages/theme/dark/base.less | 273 + packages/theme/dark/block.less | 57 + packages/theme/dark/bridge.less | 11 + packages/theme/dark/button.less | 34 + packages/theme/dark/canvas.less | 27 + packages/theme/dark/datasource.less | 44 + packages/theme/dark/events.less | 36 + packages/theme/dark/gpt-dialog.less | 51 + packages/theme/dark/help.less | 15 + packages/theme/dark/i18n.less | 8 + packages/theme/dark/index.less | 37 + packages/theme/dark/life-cycles.less | 7 + packages/theme/dark/materials.less | 30 + packages/theme/dark/metaComponent.less | 65 + packages/theme/dark/package.json | 29 + packages/theme/dark/pageManage.less | 29 + packages/theme/dark/plugin-js.less | 7 + packages/theme/dark/radio.less | 19 + packages/theme/dark/setting-style.less | 8 + packages/theme/dark/settings.less | 46 + packages/theme/dark/tiny-checkbox.less | 27 + packages/theme/dark/tiny-collapse.less | 7 + packages/theme/dark/tiny-dialog-box.less | 7 + packages/theme/dark/tiny-grid.less | 24 + packages/theme/dark/tiny-input.less | 25 + packages/theme/dark/tiny-modal.less | 10 + packages/theme/dark/tiny-notify.less | 5 + packages/theme/dark/tiny-numeric.less | 11 + packages/theme/dark/tiny-search.less | 23 + packages/theme/dark/tiny-switch.less | 5 + packages/theme/dark/tiny-tabs.less | 5 + packages/theme/dark/toolbar.less | 14 + packages/theme/dark/tree.less | 7 + packages/theme/dark/tutorial.less | 5 + packages/theme/dark/variable.less | 451 + packages/theme/dark/vite.config.js | 27 + packages/theme/light/base.less | 273 + packages/theme/light/block.less | 54 + packages/theme/light/bridge.less | 11 + packages/theme/light/button.less | 36 + packages/theme/light/canvas.less | 25 + packages/theme/light/datasource.less | 44 + packages/theme/light/events.less | 38 + packages/theme/light/gpt-dialog.less | 51 + packages/theme/light/help.less | 15 + packages/theme/light/i18n.less | 8 + packages/theme/light/index.less | 35 + packages/theme/light/life-cycles.less | 7 + packages/theme/light/materials.less | 30 + packages/theme/light/metaComponent.less | 65 + packages/theme/light/package.json | 29 + packages/theme/light/pageManage.less | 26 + packages/theme/light/plugin-js.less | 7 + packages/theme/light/radio.less | 6 + packages/theme/light/setting-style.less | 8 + packages/theme/light/settings.less | 46 + packages/theme/light/tiny-collapse.less | 7 + packages/theme/light/tiny-dialog-box.less | 7 + packages/theme/light/tiny-grid.less | 24 + packages/theme/light/tiny-input.less | 24 + packages/theme/light/tiny-modal.less | 5 + packages/theme/light/tiny-notify.less | 5 + packages/theme/light/tiny-numeric.less | 4 + packages/theme/light/tiny-search.less | 14 + packages/theme/light/tiny-switch.less | 5 + packages/theme/light/toolbar.less | 14 + packages/theme/light/tree.less | 7 + packages/theme/light/tutorial.less | 5 + packages/theme/light/variable.less | 421 + packages/theme/light/vite.config.js | 27 + packages/toolbars/breadcrumb/assets/test.png | 0 packages/toolbars/breadcrumb/index.js | 21 + packages/toolbars/breadcrumb/mock/test.js | 0 packages/toolbars/breadcrumb/package.json | 39 + packages/toolbars/breadcrumb/src/Main.vue | 113 + packages/toolbars/breadcrumb/test/test.js | 0 packages/toolbars/breadcrumb/vite.config.js | 37 + packages/toolbars/clean/assets/test.png | 0 packages/toolbars/clean/index.js | 21 + packages/toolbars/clean/mock/test.js | 0 packages/toolbars/clean/package.json | 39 + packages/toolbars/clean/src/Main.vue | 82 + packages/toolbars/clean/test/test.js | 0 packages/toolbars/clean/vite.config.js | 34 + .../toolbars/collaboration/assets/test.png | 0 packages/toolbars/collaboration/index.js | 21 + packages/toolbars/collaboration/mock/test.js | 0 packages/toolbars/collaboration/package.json | 38 + packages/toolbars/collaboration/src/Main.vue | 153 + packages/toolbars/collaboration/test/test.js | 0 .../toolbars/collaboration/vite.config.js | 37 + packages/toolbars/fullscreen/assets/test.png | 0 packages/toolbars/fullscreen/index.js | 21 + packages/toolbars/fullscreen/mock/test.js | 0 packages/toolbars/fullscreen/package.json | 38 + packages/toolbars/fullscreen/src/Main.vue | 52 + packages/toolbars/fullscreen/test/test.js | 0 packages/toolbars/fullscreen/vite.config.js | 34 + packages/toolbars/generate-vue/index.js | 21 + packages/toolbars/generate-vue/package.json | 42 + .../generate-vue/src/FileSelector.vue | 231 + packages/toolbars/generate-vue/src/Main.vue | 187 + .../toolbars/generate-vue/src/generateCode.js | 391 + packages/toolbars/generate-vue/src/http.js | 39 + packages/toolbars/generate-vue/vite.config.js | 34 + packages/toolbars/lang/assets/test.png | 0 packages/toolbars/lang/index.js | 21 + packages/toolbars/lang/mock/test.js | 0 packages/toolbars/lang/package.json | 39 + packages/toolbars/lang/src/Main.vue | 81 + packages/toolbars/lang/test/test.js | 0 packages/toolbars/lang/vite.config.js | 37 + packages/toolbars/layout/assets/test.png | 0 packages/toolbars/layout/index.js | 21 + packages/toolbars/layout/mock/test.js | 0 packages/toolbars/layout/package.json | 37 + packages/toolbars/layout/src/Main.vue | 49 + packages/toolbars/layout/test/test.js | 0 packages/toolbars/layout/vite.config.js | 34 + packages/toolbars/lock/assets/test.png | 0 packages/toolbars/lock/index.js | 22 + packages/toolbars/lock/mock/test.js | 0 packages/toolbars/lock/package.json | 40 + packages/toolbars/lock/src/Main.vue | 140 + packages/toolbars/lock/src/http.js | 18 + packages/toolbars/lock/test/test.js | 0 packages/toolbars/lock/vite.config.js | 35 + packages/toolbars/logo/assets/test.png | 0 packages/toolbars/logo/index.js | 21 + packages/toolbars/logo/mock/test.js | 0 packages/toolbars/logo/package.json | 40 + packages/toolbars/logo/src/AppList.vue | 34 + packages/toolbars/logo/src/Main.vue | 461 + packages/toolbars/logo/test/test.js | 0 packages/toolbars/logo/vite.config.js | 37 + packages/toolbars/logout/assets/test.png | 0 packages/toolbars/logout/index.js | 21 + packages/toolbars/logout/mock/test.js | 0 packages/toolbars/logout/package.json | 37 + packages/toolbars/logout/src/Main.vue | 28 + packages/toolbars/logout/src/js/http.js | 18 + packages/toolbars/logout/test/test.js | 0 packages/toolbars/logout/vite.config.js | 37 + packages/toolbars/media/assets/test.png | 0 packages/toolbars/media/index.js | 21 + packages/toolbars/media/mock/test.js | 0 packages/toolbars/media/package.json | 40 + packages/toolbars/media/src/Main.vue | 480 + packages/toolbars/media/test/test.js | 0 packages/toolbars/media/vite.config.js | 37 + packages/toolbars/preview/assets/test.png | 0 packages/toolbars/preview/index.js | 21 + packages/toolbars/preview/mock/test.js | 0 packages/toolbars/preview/package.json | 40 + packages/toolbars/preview/src/Main.vue | 73 + packages/toolbars/preview/test/test.js | 0 packages/toolbars/preview/vite.config.js | 34 + packages/toolbars/redoundo/assets/test.png | 0 packages/toolbars/redoundo/index.js | 21 + packages/toolbars/redoundo/mock/test.js | 0 packages/toolbars/redoundo/package.json | 38 + packages/toolbars/redoundo/src/Main.vue | 88 + packages/toolbars/redoundo/test/test.js | 0 packages/toolbars/redoundo/vite.config.js | 37 + packages/toolbars/refresh/index.js | 21 + packages/toolbars/refresh/package.json | 39 + packages/toolbars/refresh/src/Main.vue | 85 + packages/toolbars/refresh/vite.config.js | 34 + packages/toolbars/save/assets/test.png | 0 packages/toolbars/save/index.js | 22 + packages/toolbars/save/mock/test.js | 0 packages/toolbars/save/package.json | 41 + packages/toolbars/save/src/Main.vue | 167 + packages/toolbars/save/src/js/index.js | 133 + packages/toolbars/save/test/test.js | 0 packages/toolbars/save/vite.config.js | 37 + packages/toolbars/setting/index.js | 21 + packages/toolbars/setting/package.json | 39 + packages/toolbars/setting/src/Main.vue | 103 + packages/toolbars/setting/vite.config.js | 34 + packages/utils/package.json | 39 + packages/utils/src/constants/index.js | 161 + packages/utils/src/fs/index.js | 181 + packages/utils/src/index.js | 15 + packages/utils/src/utils/index.js | 327 + packages/utils/test/deepClone.test.js | 151 + packages/utils/vite.config.js | 32 + packages/vue-generator/.eslintrc.cjs | 18 + packages/vue-generator/.gitignore | 1 + packages/vue-generator/jsconfig.json | 12 + packages/vue-generator/package.json | 45 + packages/vue-generator/src/constant/index.js | 2246 ++ packages/vue-generator/src/generator/index.js | 15 + packages/vue-generator/src/generator/page.js | 523 + packages/vue-generator/src/index.js | 15 + packages/vue-generator/src/parser/jsx-slot.js | 118 + .../vue-generator/src/parser/state-type.js | 82 + packages/vue-generator/src/parser/state.js | 39 + .../vue-generator/src/pre-processor/index.js | 94 + packages/vue-generator/src/utils/index.js | 163 + .../src/utils/vue-sfc-validator.js | 155 + .../case1_normal/input/blocks.schema.json | 212 + .../case1_normal/input/components-map.json | 28 + .../full/case1_normal/input/page.schema.json | 715 + .../output/components/ImageTitle.vue | 73 + .../case1_normal/output/views/FormTable.vue | 472 + .../input/blocks.schema.json | 155 + .../input/components-map.json | 10 + .../input/page.schema.json | 46 + .../output/components/PropAccessor.vue | 54 + .../output/views/UsePropAccessor.vue | 34 + .../input/blocks.schema.json | 163 + .../input/components-map.json | 10 + .../input/page.schema.json | 48 + .../output/components/StateAccessor.vue | 50 + .../output/views/UseStateAccessor.vue | 35 + .../input/blocks.schema.json | 1 + .../input/components-map.json | 1 + .../input/page.schema.json | 161 + .../output/BuiltInComponent.vue | 46 + .../test/testcases/full/index.config.js | 46 + .../test/testcases/full/index.js | 86 + .../vue-generator/test/utils/logger/index.js | 21 + packages/vue-generator/vite.config.js | 25 + packages/webcomponent/README.md | 2 + packages/webcomponent/package.json | 49 + .../webcomponent/src/defineCustomElement.js | 277 + packages/webcomponent/src/lib.js | 15 + packages/webcomponent/vite.config.js | 45 + patches/@vue__repl@2.9.0.patch | 50 + pnpm-workspace.yaml | 3 + scripts/buildComponentSchemas.js | 38 + scripts/buildMaterials.mjs | 202 + scripts/connection.mjs | 437 + scripts/copyToVscode.js | 50 + scripts/logger.mjs | 43 + scripts/setup.js | 9 + scripts/splitMaterials.mjs | 60 + 1525 files changed, 216048 insertions(+), 1 deletion(-) create mode 100644 .build_config/build.sh create mode 100644 .cid/lowcode-design-core.yml create mode 100644 .codecheck/check.yml create mode 100644 .env.local create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature-request.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md create mode 100644 .github/release.yml create mode 100644 .github/workflows/ai-code-review.yml create mode 100644 .github/workflows/issue-translator.yml create mode 100644 .github/workflows/push-check.yml create mode 100644 .gitignore create mode 100644 .husky/pre-commit create mode 100644 .npmignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTING.zh-CN.md create mode 100644 LICENSE create mode 100644 README.zh-CN.md create mode 100644 jsconfig.json create mode 100644 lerna.json create mode 100644 lint-staged.config.js create mode 100644 logo.svg create mode 100644 mockServer/.babelrc create mode 100644 mockServer/.editorconfig create mode 100644 mockServer/.eslintignore create mode 100644 mockServer/.eslintrc.js create mode 100644 mockServer/.gitignore create mode 100644 mockServer/.jsbeautifyrc create mode 100644 mockServer/assets/css/0.1.20/index.css create mode 100644 mockServer/assets/images/0055f57e0a38d45ced54e1b2b566cb29_308x180.jpg create mode 100644 mockServer/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png create mode 100644 mockServer/assets/images/120.jpg create mode 100644 mockServer/assets/images/24b520f0-dd5d-11ec-9e28-e51c91ead705.png create mode 100644 mockServer/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg create mode 100644 mockServer/assets/images/627366463067fa2f1a59d7db4ac55885_308x100.jpg create mode 100644 mockServer/assets/images/777aad0c570f653f0a95b48b898c7b4b_308x180.jpg create mode 100644 mockServer/assets/images/bbb35cd0-db30-11ec-a1c4-7b3b3de0a1d8.png create mode 100644 mockServer/assets/images/e4f27d446aef8318e4b4989f1f816b1e_220x220.png create mode 100644 mockServer/assets/images/f750dc319828b039af713c643aad02bd_222x134.png create mode 100644 mockServer/assets/images/logo.png create mode 100644 mockServer/assets/js/1005web-components.es.js create mode 100644 mockServer/assets/js/1005web-components.umd.js create mode 100644 mockServer/assets/js/1505web-components.es.js create mode 100644 mockServer/assets/js/1505web-components.umd.js create mode 100644 mockServer/assets/js/989web-components.es.js create mode 100644 mockServer/assets/js/989web-components.umd.js create mode 100644 mockServer/assets/js/998web-components.es.js create mode 100644 mockServer/assets/js/998web-components.umd.js create mode 100644 mockServer/assets/json/bundle.json create mode 100644 mockServer/assets/uploads/.gitkeep create mode 100644 mockServer/build/dev-server.js create mode 100644 mockServer/config/config.js create mode 100644 mockServer/gulpfile.js create mode 100644 mockServer/logs/out.log create mode 100644 mockServer/package.json create mode 100644 mockServer/pm2.js create mode 100644 mockServer/src/app.js create mode 100644 mockServer/src/database/blockCategories.db create mode 100644 mockServer/src/database/blockGroups.db create mode 100644 mockServer/src/database/blocks.db create mode 100644 mockServer/src/database/defaultData/default.db create mode 100644 mockServer/src/database/pages.db create mode 100644 mockServer/src/middleware/ErrorRoutesCatch.js create mode 100644 mockServer/src/mock/get/app-center/apps/detail/918.json create mode 100644 mockServer/src/mock/get/app-center/apps/extension/delete.json create mode 100644 mockServer/src/mock/get/app-center/apps/extension/list.json create mode 100644 mockServer/src/mock/get/app-center/i18n/entries.json create mode 100644 mockServer/src/mock/get/app-center/source_tpl.json create mode 100644 mockServer/src/mock/get/app-center/sources/list/918.json create mode 100644 mockServer/src/mock/get/app-center/v1/apps/schema/918.json create mode 100644 mockServer/src/mock/get/platform-center/courses.json create mode 100644 mockServer/src/mock/get/platform-center/user/me.json create mode 100644 mockServer/src/mock/post/app-center/apps/extension/create.json create mode 100644 mockServer/src/mock/post/app-center/apps/extension/update.json create mode 100644 mockServer/src/mock/post/app-center/apps/update/918.json create mode 100644 mockServer/src/mock/post/app-center/i18n/entries/bulk/delete.json create mode 100644 mockServer/src/mock/post/app-center/i18n/entries/update.json create mode 100644 mockServer/src/mock/post/app-center/sources/create.json create mode 100644 mockServer/src/mock/post/app-center/sources/delete.json create mode 100644 mockServer/src/mock/post/app-center/sources/update.json create mode 100644 mockServer/src/routes/error-routes.js create mode 100644 mockServer/src/routes/main-routes.js create mode 100644 mockServer/src/services/.gitkeep create mode 100644 mockServer/src/services/app.js create mode 100644 mockServer/src/services/appinfo.json create mode 100644 mockServer/src/services/block.js create mode 100644 mockServer/src/services/blockCategory.js create mode 100644 mockServer/src/services/blockGroup.js create mode 100644 mockServer/src/services/blocks.json create mode 100644 mockServer/src/services/mockService.js create mode 100644 mockServer/src/services/pageSchema.js create mode 100644 mockServer/src/services/pages.js create mode 100644 mockServer/src/services/schema2code.js create mode 100644 mockServer/src/services/source.js create mode 100644 mockServer/src/services/sources.json create mode 100644 mockServer/src/services/utils.js create mode 100644 mockServer/src/tool/Common.js create mode 100644 mockServer/test/app.test.js create mode 100644 package.json create mode 100644 packages/blockToWebComponentTemplate/README.md create mode 100644 packages/blockToWebComponentTemplate/package.json create mode 100644 packages/blockToWebComponentTemplate/src/BlockFileName.vue create mode 100644 packages/blockToWebComponentTemplate/src/lib.js create mode 100644 packages/blockToWebComponentTemplate/vite.config.js create mode 100644 packages/builtinComponent/README.md create mode 100644 packages/builtinComponent/index.js create mode 100644 packages/builtinComponent/package.json create mode 100644 packages/builtinComponent/src/components/CanvasCol.vue create mode 100644 packages/builtinComponent/src/components/CanvasRow.vue create mode 100644 packages/builtinComponent/src/components/CanvasRowColContainer.vue create mode 100644 packages/builtinComponent/src/components/helper.js create mode 100644 packages/builtinComponent/src/meta/CanvasCol.json create mode 100644 packages/builtinComponent/src/meta/CanvasRow.json create mode 100644 packages/builtinComponent/src/meta/CanvasRowColContainer.json create mode 100644 packages/builtinComponent/src/meta/index.js create mode 100644 packages/builtinComponent/vite.config.js create mode 100644 packages/canvas/.eslintrc.js create mode 100644 packages/canvas/.gitignore create mode 100644 packages/canvas/README.md create mode 100644 packages/canvas/canvas.html create mode 100644 packages/canvas/index.html create mode 100644 packages/canvas/package.json create mode 100644 packages/canvas/public/favicon.ico create mode 100644 packages/canvas/src/Design.vue create mode 100644 packages/canvas/src/assets/logo.png create mode 100644 packages/canvas/src/canvas.js create mode 100644 packages/canvas/src/components/builtin/CanvasBox.vue create mode 100644 packages/canvas/src/components/builtin/CanvasCol.vue create mode 100644 packages/canvas/src/components/builtin/CanvasCollection.js create mode 100644 packages/canvas/src/components/builtin/CanvasCollection.vue create mode 100644 packages/canvas/src/components/builtin/CanvasIcon.vue create mode 100644 packages/canvas/src/components/builtin/CanvasImg.vue create mode 100644 packages/canvas/src/components/builtin/CanvasPlaceholder.vue create mode 100644 packages/canvas/src/components/builtin/CanvasRow.vue create mode 100644 packages/canvas/src/components/builtin/CanvasRowColContainer.vue create mode 100644 packages/canvas/src/components/builtin/CanvasSlot.vue create mode 100644 packages/canvas/src/components/builtin/CanvasText.vue create mode 100644 packages/canvas/src/components/builtin/builtin.json create mode 100644 packages/canvas/src/components/builtin/helper.js create mode 100644 packages/canvas/src/components/builtin/index.js create mode 100644 packages/canvas/src/components/common/index.js create mode 100644 packages/canvas/src/components/container/CanvasAction.vue create mode 100644 packages/canvas/src/components/container/CanvasContainer.vue create mode 100644 packages/canvas/src/components/container/CanvasDivider.vue create mode 100644 packages/canvas/src/components/container/CanvasDragItem.vue create mode 100644 packages/canvas/src/components/container/CanvasFooter.vue create mode 100644 packages/canvas/src/components/container/CanvasMenu.vue create mode 100644 packages/canvas/src/components/container/CanvasResize.vue create mode 100644 packages/canvas/src/components/container/CanvasResizeBorder.vue create mode 100644 packages/canvas/src/components/container/container.js create mode 100644 packages/canvas/src/components/container/keyboard.js create mode 100644 packages/canvas/src/components/container/shortCutPopover.vue create mode 100644 packages/canvas/src/components/render/CanvasEmpty.vue create mode 100644 packages/canvas/src/components/render/RenderMain.js create mode 100644 packages/canvas/src/components/render/context.js create mode 100644 packages/canvas/src/components/render/render.js create mode 100644 packages/canvas/src/components/render/runner.js create mode 100644 packages/canvas/src/i18n.js create mode 100644 packages/canvas/src/i18n/en.json create mode 100644 packages/canvas/src/i18n/zh.json create mode 100644 packages/canvas/src/index.js create mode 100644 packages/canvas/src/locale.js create mode 100644 packages/canvas/src/lowcode.js create mode 100644 packages/canvas/src/main.js create mode 100644 packages/canvas/test/form.json create mode 100644 packages/canvas/test/group.json create mode 100644 packages/canvas/test/jsslot.json create mode 100644 packages/canvas/vite.config.js create mode 100644 packages/common/component/BindI18n.vue create mode 100644 packages/common/component/BlockDeployDialog.vue create mode 100644 packages/common/component/BlockDescription.vue create mode 100644 packages/common/component/BlockHistoryList.vue create mode 100644 packages/common/component/BlockHistoryTemplate.vue create mode 100644 packages/common/component/BlockLinkEvent.vue create mode 100644 packages/common/component/BlockLinkField.vue create mode 100644 packages/common/component/ButtonGroup.vue create mode 100644 packages/common/component/CloseIcon.vue create mode 100644 packages/common/component/ConfigCollapse.vue create mode 100644 packages/common/component/ConfigGroup.vue create mode 100644 packages/common/component/ConfigItem.vue create mode 100644 packages/common/component/ConfigRender.vue create mode 100644 packages/common/component/EmptyTip.vue create mode 100644 packages/common/component/LifeCycles.vue create mode 100644 packages/common/component/LinkButton.vue create mode 100644 packages/common/component/MaskModal.vue create mode 100644 packages/common/component/MetaArrayItem.vue create mode 100644 packages/common/component/MetaBindI18n.vue create mode 100644 packages/common/component/MetaBindVariable.vue create mode 100644 packages/common/component/MetaButtonGroup.vue create mode 100644 packages/common/component/MetaCascader.vue create mode 100644 packages/common/component/MetaCheckBox.vue create mode 100644 packages/common/component/MetaCheckboxGroup.vue create mode 100644 packages/common/component/MetaChildItem.vue create mode 100644 packages/common/component/MetaCodeEditor.vue create mode 100644 packages/common/component/MetaCodeEditorList.vue create mode 100644 packages/common/component/MetaCollection.vue create mode 100644 packages/common/component/MetaColor.vue create mode 100644 packages/common/component/MetaContainer.vue create mode 100644 packages/common/component/MetaDatePicker.vue create mode 100644 packages/common/component/MetaDescription.vue create mode 100644 packages/common/component/MetaForm.vue create mode 100644 packages/common/component/MetaGroupItem.vue create mode 100644 packages/common/component/MetaHtmlAttributes.vue create mode 100644 packages/common/component/MetaHtmlText.vue create mode 100644 packages/common/component/MetaInput.vue create mode 100644 packages/common/component/MetaIpSection.vue create mode 100644 packages/common/component/MetaJsSlot.vue create mode 100644 packages/common/component/MetaLayoutGrid.vue create mode 100644 packages/common/component/MetaList.vue create mode 100644 packages/common/component/MetaListActions.vue create mode 100644 packages/common/component/MetaListItem.vue create mode 100644 packages/common/component/MetaListItems.vue create mode 100644 packages/common/component/MetaListTitle.vue create mode 100644 packages/common/component/MetaModal.vue create mode 100644 packages/common/component/MetaModalItem.vue create mode 100644 packages/common/component/MetaNumber.md create mode 100644 packages/common/component/MetaNumber.vue create mode 100644 packages/common/component/MetaPopover.vue create mode 100644 packages/common/component/MetaRadio.vue create mode 100644 packages/common/component/MetaRadioGroup.vue create mode 100644 packages/common/component/MetaRelatedColumns.vue create mode 100644 packages/common/component/MetaRelatedEditor.vue create mode 100644 packages/common/component/MetaSelect.vue create mode 100644 packages/common/component/MetaSelectIcon.vue create mode 100644 packages/common/component/MetaSlider.vue create mode 100644 packages/common/component/MetaSlot.vue create mode 100644 packages/common/component/MetaSwitch.vue create mode 100644 packages/common/component/MetaTableColumns.vue create mode 100644 packages/common/component/MonacoEditor.vue create mode 100644 packages/common/component/MultiTypeSelector.vue create mode 100644 packages/common/component/Pane.vue create mode 100644 packages/common/component/PluginBlockList.vue create mode 100644 packages/common/component/PluginPanel.vue create mode 100644 packages/common/component/PluginSetting.vue create mode 100644 packages/common/component/ProgressBar.vue create mode 100644 packages/common/component/PublicIcon.vue create mode 100644 packages/common/component/SaveNewBlock.vue create mode 100644 packages/common/component/SplitPanes.vue create mode 100644 packages/common/component/SvgButton.vue create mode 100644 packages/common/component/VideoGuide.vue create mode 100644 packages/common/component/VueMonaco.vue create mode 100644 packages/common/i18n/en-us.json create mode 100644 packages/common/i18n/zh-cn.json create mode 100644 packages/common/index.js create mode 100644 packages/common/package.json create mode 100644 packages/common/vite.config.js create mode 100644 packages/controller/adapter.js create mode 100644 packages/controller/js/app.js create mode 100644 packages/controller/js/ast.js create mode 100644 packages/controller/js/canvas.js create mode 100644 packages/controller/js/completion.js create mode 100644 packages/controller/js/constants.js create mode 100644 packages/controller/js/css.js create mode 100644 packages/controller/js/environments.js create mode 100644 packages/controller/js/http.js create mode 100644 packages/controller/js/i18n.js create mode 100644 packages/controller/js/linter.js create mode 100644 packages/controller/js/monitor.js create mode 100644 packages/controller/js/preview.js create mode 100644 packages/controller/js/verification.js create mode 100644 packages/controller/js/vscodeGenerateFile.js create mode 100644 packages/controller/package.json create mode 100644 packages/controller/src/example.js create mode 100644 packages/controller/src/globalConfig.js create mode 100644 packages/controller/src/index.js create mode 100644 packages/controller/src/useApp.js create mode 100644 packages/controller/src/useBlock.js create mode 100644 packages/controller/src/useBreadcrumb.js create mode 100644 packages/controller/src/useCanvas.js create mode 100644 packages/controller/src/useData.js create mode 100644 packages/controller/src/useDataSource.js create mode 100644 packages/controller/src/useEditorInfo.js create mode 100644 packages/controller/src/useHelp.js create mode 100644 packages/controller/src/useHistory.js create mode 100644 packages/controller/src/useLayout.js create mode 100644 packages/controller/src/useMessage.js create mode 100644 packages/controller/src/useModal.jsx create mode 100644 packages/controller/src/useNotify.jsx create mode 100644 packages/controller/src/usePage.js create mode 100644 packages/controller/src/useProperties.js create mode 100644 packages/controller/src/useProperty.js create mode 100644 packages/controller/src/useResource.js create mode 100644 packages/controller/src/useSaveLocal.js create mode 100644 packages/controller/src/useTranslate.js create mode 100644 packages/controller/utils.js create mode 100644 packages/controller/vite.config.js create mode 100644 packages/design-core/.env.alpha create mode 100644 packages/design-core/.env.development create mode 100644 packages/design-core/.env.prod create mode 100644 packages/design-core/.npmignore create mode 100644 packages/design-core/assets/AI.png create mode 100644 packages/design-core/assets/accessdeclined.svg create mode 100644 packages/design-core/assets/accordion.svg create mode 100644 packages/design-core/assets/achart.svg create mode 100644 packages/design-core/assets/add-collection.svg create mode 100644 packages/design-core/assets/add-folder.svg create mode 100644 packages/design-core/assets/add-group.svg create mode 100644 packages/design-core/assets/add-page-new.svg create mode 100644 packages/design-core/assets/add-page.svg create mode 100644 packages/design-core/assets/add-utils.svg create mode 100644 packages/design-core/assets/add.svg create mode 100644 packages/design-core/assets/alert.svg create mode 100644 packages/design-core/assets/align-content-center.svg create mode 100644 packages/design-core/assets/align-content-end.svg create mode 100644 packages/design-core/assets/align-content-space-around.svg create mode 100644 packages/design-core/assets/align-content-space-between.svg create mode 100644 packages/design-core/assets/align-content-start.svg create mode 100644 packages/design-core/assets/align-content-stretch.svg create mode 100644 packages/design-core/assets/align-items-baseline.svg create mode 100644 packages/design-core/assets/align-items-center.svg create mode 100644 packages/design-core/assets/align-items-end.svg create mode 100644 packages/design-core/assets/align-items-start.svg create mode 100644 packages/design-core/assets/align-items-stretch.svg create mode 100644 packages/design-core/assets/background-color.svg create mode 100644 packages/design-core/assets/background-image.svg create mode 100644 packages/design-core/assets/bar.svg create mode 100644 packages/design-core/assets/basic-search.svg create mode 100644 packages/design-core/assets/bdlayout.svg create mode 100644 packages/design-core/assets/beingmaintained.svg create mode 100644 packages/design-core/assets/bem.svg create mode 100644 packages/design-core/assets/beta.svg create mode 100644 packages/design-core/assets/bind-variable.svg create mode 100644 packages/design-core/assets/block-default-img.svg create mode 100644 packages/design-core/assets/block-manage.svg create mode 100644 packages/design-core/assets/border-all.svg create mode 100644 packages/design-core/assets/border-bottom.svg create mode 100644 packages/design-core/assets/border-left.svg create mode 100644 packages/design-core/assets/border-radius-bottomleft.svg create mode 100644 packages/design-core/assets/border-radius-bottomright.svg create mode 100644 packages/design-core/assets/border-radius-multiple.svg create mode 100644 packages/design-core/assets/border-radius-single.svg create mode 100644 packages/design-core/assets/border-radius-topleft.svg create mode 100644 packages/design-core/assets/border-radius-topright.svg create mode 100644 packages/design-core/assets/border-right.svg create mode 100644 packages/design-core/assets/border-style-dashed.svg create mode 100644 packages/design-core/assets/border-style-dotted.svg create mode 100644 packages/design-core/assets/border-style-solid.svg create mode 100644 packages/design-core/assets/border-top.svg create mode 100644 packages/design-core/assets/box.svg create mode 100644 packages/design-core/assets/breadcrumb.svg create mode 100644 packages/design-core/assets/bridge.svg create mode 100644 packages/design-core/assets/button.svg create mode 100644 packages/design-core/assets/buttons.svg create mode 100644 packages/design-core/assets/cancel-full-screen.svg create mode 100644 packages/design-core/assets/canvas-fit.svg create mode 100644 packages/design-core/assets/carousel.svg create mode 100644 packages/design-core/assets/carouselitem.svg create mode 100644 packages/design-core/assets/chat-maximize.svg create mode 100644 packages/design-core/assets/chat-message.svg create mode 100644 packages/design-core/assets/chat-microphone.svg create mode 100644 packages/design-core/assets/chat-minimize.svg create mode 100644 packages/design-core/assets/checkbox.svg create mode 100644 packages/design-core/assets/checkboxgroup.svg create mode 100644 packages/design-core/assets/checkboxs.svg create mode 100644 packages/design-core/assets/checkin.svg create mode 100644 packages/design-core/assets/checkout.svg create mode 100644 packages/design-core/assets/clear.svg create mode 100644 packages/design-core/assets/clock-small.svg create mode 100644 packages/design-core/assets/clock-wise-counter.svg create mode 100644 packages/design-core/assets/clock-wise.svg create mode 100644 packages/design-core/assets/close.svg create mode 100644 packages/design-core/assets/closest-corner.svg create mode 100644 packages/design-core/assets/closest-side.svg create mode 100644 packages/design-core/assets/cloud-shell.svg create mode 100644 packages/design-core/assets/cn.svg create mode 100644 packages/design-core/assets/col.svg create mode 100644 packages/design-core/assets/collapse.svg create mode 100644 packages/design-core/assets/collection.svg create mode 100644 packages/design-core/assets/copy-outline.svg create mode 100644 packages/design-core/assets/copy.svg create mode 100644 packages/design-core/assets/cross.svg create mode 100644 packages/design-core/assets/cursor-alias.svg create mode 100644 packages/design-core/assets/cursor-auto.svg create mode 100644 packages/design-core/assets/cursor-cell.svg create mode 100644 packages/design-core/assets/cursor-col-resize.svg create mode 100644 packages/design-core/assets/cursor-context-menu.svg create mode 100644 packages/design-core/assets/cursor-copy.svg create mode 100644 packages/design-core/assets/cursor-crosshair.svg create mode 100644 packages/design-core/assets/cursor-e-resize.svg create mode 100644 packages/design-core/assets/cursor-ew-resize.svg create mode 100644 packages/design-core/assets/cursor-grab.svg create mode 100644 packages/design-core/assets/cursor-grabbing.svg create mode 100644 packages/design-core/assets/cursor-help.svg create mode 100644 packages/design-core/assets/cursor-move.svg create mode 100644 packages/design-core/assets/cursor-n-resize.svg create mode 100644 packages/design-core/assets/cursor-ne-resize.svg create mode 100644 packages/design-core/assets/cursor-nesw-resize.svg create mode 100644 packages/design-core/assets/cursor-none.svg create mode 100644 packages/design-core/assets/cursor-not-allowed.svg create mode 100644 packages/design-core/assets/cursor-ns-resize.svg create mode 100644 packages/design-core/assets/cursor-nw-resize.svg create mode 100644 packages/design-core/assets/cursor-nwse-resize.svg create mode 100644 packages/design-core/assets/cursor-pointer.svg create mode 100644 packages/design-core/assets/cursor-progress.svg create mode 100644 packages/design-core/assets/cursor-row-resize.svg create mode 100644 packages/design-core/assets/cursor-s-resize.svg create mode 100644 packages/design-core/assets/cursor-se-resize.svg create mode 100644 packages/design-core/assets/cursor-sw-resize.svg create mode 100644 packages/design-core/assets/cursor-text.svg create mode 100644 packages/design-core/assets/cursor-vertical-text.svg create mode 100644 packages/design-core/assets/cursor-w-resize.svg create mode 100644 packages/design-core/assets/cursor-wait.svg create mode 100644 packages/design-core/assets/cursor-zoom-in.svg create mode 100644 packages/design-core/assets/cursor-zoom-out.svg create mode 100644 packages/design-core/assets/data.svg create mode 100644 packages/design-core/assets/datepick.svg create mode 100644 packages/design-core/assets/daterange.svg create mode 100644 packages/design-core/assets/delete.svg create mode 100644 packages/design-core/assets/descend.svg create mode 100644 packages/design-core/assets/desktop-large.svg create mode 100644 packages/design-core/assets/dialogbox.svg create mode 100644 packages/design-core/assets/display-block.svg create mode 100644 packages/design-core/assets/display-flex.svg create mode 100644 packages/design-core/assets/display-grid.svg create mode 100644 packages/design-core/assets/display-inline-block.svg create mode 100644 packages/design-core/assets/display-inline.svg create mode 100644 packages/design-core/assets/dragger.svg create mode 100644 packages/design-core/assets/dropdown.svg create mode 100644 packages/design-core/assets/edit.svg create mode 100644 packages/design-core/assets/ellipsis.svg create mode 100644 packages/design-core/assets/empty-action.svg create mode 100644 packages/design-core/assets/empty-data.svg create mode 100644 packages/design-core/assets/empty.svg create mode 100644 packages/design-core/assets/en.svg create mode 100644 packages/design-core/assets/error.svg create mode 100644 packages/design-core/assets/events.svg create mode 100644 packages/design-core/assets/expand.svg create mode 100644 packages/design-core/assets/eye-invisible.svg create mode 100644 packages/design-core/assets/eye.svg create mode 100644 packages/design-core/assets/farthest-corner.svg create mode 100644 packages/design-core/assets/farthest-side.svg create mode 100644 packages/design-core/assets/fixed.svg create mode 100644 packages/design-core/assets/flex-alignbaselinerow.svg create mode 100644 packages/design-core/assets/flex-aligncenterrow.svg create mode 100644 packages/design-core/assets/flex-alignflex-endrow.svg create mode 100644 packages/design-core/assets/flex-alignflex-startrow.svg create mode 100644 packages/design-core/assets/flex-alignstretchrow.svg create mode 100644 packages/design-core/assets/flex-directioncolumn-reverse.svg create mode 100644 packages/design-core/assets/flex-directioncolumn.svg create mode 100644 packages/design-core/assets/flex-directionrow-reverse.svg create mode 100644 packages/design-core/assets/flex-directionrow.svg create mode 100644 packages/design-core/assets/flex-justifycenterrow.svg create mode 100644 packages/design-core/assets/flex-justifyflex-endrow.svg create mode 100644 packages/design-core/assets/flex-justifyflex-startrow.svg create mode 100644 packages/design-core/assets/flex-justifyspace-aroundrow.svg create mode 100644 packages/design-core/assets/flex-justifyspace-betweenrow.svg create mode 100644 packages/design-core/assets/flow-add.svg create mode 100644 packages/design-core/assets/flow-align-bottom.svg create mode 100644 packages/design-core/assets/flow-align-left.svg create mode 100644 packages/design-core/assets/flow-align-level.svg create mode 100644 packages/design-core/assets/flow-align-rf.svg create mode 100644 packages/design-core/assets/flow-align-right.svg create mode 100644 packages/design-core/assets/flow-align-top.svg create mode 100644 packages/design-core/assets/flow-align-vertical.svg create mode 100644 packages/design-core/assets/flow-box-select-rf.svg create mode 100644 packages/design-core/assets/flow-box-select.svg create mode 100644 packages/design-core/assets/flow-checkmark.svg create mode 100644 packages/design-core/assets/flow-clear.svg create mode 100644 packages/design-core/assets/flow-cross.svg create mode 100644 packages/design-core/assets/flow-delete.svg create mode 100644 packages/design-core/assets/flow-download.svg create mode 100644 packages/design-core/assets/flow-edit.svg create mode 100644 packages/design-core/assets/flow-empty.svg create mode 100644 packages/design-core/assets/flow-failure.svg create mode 100644 packages/design-core/assets/flow-file-download.svg create mode 100644 packages/design-core/assets/flow-fullscreen-icon.svg create mode 100644 packages/design-core/assets/flow-guide.svg create mode 100644 packages/design-core/assets/flow-help-center.svg create mode 100644 packages/design-core/assets/flow-location.svg create mode 100644 packages/design-core/assets/flow-minscreen-icon.svg create mode 100644 packages/design-core/assets/flow-navigation.svg create mode 100644 packages/design-core/assets/flow-params-rf.svg create mode 100644 packages/design-core/assets/flow-params.svg create mode 100644 packages/design-core/assets/flow-prompt.svg create mode 100644 packages/design-core/assets/flow-redo.svg create mode 100644 packages/design-core/assets/flow-reduce.svg create mode 100644 packages/design-core/assets/flow-refresh.svg create mode 100644 packages/design-core/assets/flow-requirestar.svg create mode 100644 packages/design-core/assets/flow-select.svg create mode 100644 packages/design-core/assets/flow-set-bottom.svg create mode 100644 packages/design-core/assets/flow-set-top.svg create mode 100644 packages/design-core/assets/flow-success.svg create mode 100644 packages/design-core/assets/flow-undo.svg create mode 100644 packages/design-core/assets/flow-view-rf.svg create mode 100644 packages/design-core/assets/flow-view.svg create mode 100644 packages/design-core/assets/flow-zoom-in.svg create mode 100644 packages/design-core/assets/flow-zoom-out.svg create mode 100644 packages/design-core/assets/fold-outline.svg create mode 100644 packages/design-core/assets/folder-wold.svg create mode 100644 packages/design-core/assets/folder.svg create mode 100644 packages/design-core/assets/font-style-italic.svg create mode 100644 packages/design-core/assets/font-style-none.svg create mode 100644 packages/design-core/assets/form.svg create mode 100644 packages/design-core/assets/formfield.svg create mode 100644 packages/design-core/assets/formitem.svg create mode 100644 packages/design-core/assets/frozenpage.svg create mode 100644 packages/design-core/assets/full-screen.svg create mode 100644 packages/design-core/assets/generate-code.svg create mode 100644 packages/design-core/assets/grid-column-flex.svg create mode 100644 packages/design-core/assets/grid-row-auto.svg create mode 100644 packages/design-core/assets/grid.svg create mode 100644 packages/design-core/assets/h1.svg create mode 100644 packages/design-core/assets/h16.svg create mode 100644 packages/design-core/assets/h2.svg create mode 100644 packages/design-core/assets/h3.svg create mode 100644 packages/design-core/assets/h4.svg create mode 100644 packages/design-core/assets/h5.svg create mode 100644 packages/design-core/assets/h6.svg create mode 100644 packages/design-core/assets/help-center.svg create mode 100644 packages/design-core/assets/help.svg create mode 100644 packages/design-core/assets/histogram.svg create mode 100644 packages/design-core/assets/home-outline.svg create mode 100644 packages/design-core/assets/home.svg create mode 100644 packages/design-core/assets/hr.svg create mode 100644 packages/design-core/assets/icon.svg create mode 100644 packages/design-core/assets/image.svg create mode 100644 packages/design-core/assets/input.svg create mode 100644 packages/design-core/assets/internationalization.svg create mode 100644 packages/design-core/assets/js.svg create mode 100644 packages/design-core/assets/json.svg create mode 100644 packages/design-core/assets/justify-content-center.svg create mode 100644 packages/design-core/assets/justify-content-end.svg create mode 100644 packages/design-core/assets/justify-content-space-around.svg create mode 100644 packages/design-core/assets/justify-content-space-between.svg create mode 100644 packages/design-core/assets/justify-content-start.svg create mode 100644 packages/design-core/assets/justify-content-stretch.svg create mode 100644 packages/design-core/assets/justify-items-baseline.svg create mode 100644 packages/design-core/assets/justify-items-center.svg create mode 100644 packages/design-core/assets/justify-items-end.svg create mode 100644 packages/design-core/assets/justify-items-start.svg create mode 100644 packages/design-core/assets/justify-items-stretch.svg create mode 100644 packages/design-core/assets/language.svg create mode 100644 packages/design-core/assets/laptop-cut-corner.svg create mode 100644 packages/design-core/assets/line.svg create mode 100644 packages/design-core/assets/linear-gradient.svg create mode 100644 packages/design-core/assets/link.svg create mode 100644 packages/design-core/assets/list.svg create mode 100644 packages/design-core/assets/loading.svg create mode 100644 packages/design-core/assets/location.svg create mode 100644 packages/design-core/assets/locked-outline.svg create mode 100644 packages/design-core/assets/locked.svg create mode 100644 packages/design-core/assets/logout.svg create mode 100644 packages/design-core/assets/margin.svg create mode 100644 packages/design-core/assets/materials.svg create mode 100644 packages/design-core/assets/menu.svg create mode 100644 packages/design-core/assets/mobile-landscape.svg create mode 100644 packages/design-core/assets/mobile-portrai.svg create mode 100644 packages/design-core/assets/new-page.svg create mode 100644 packages/design-core/assets/news.svg create mode 100644 packages/design-core/assets/nonsupportregion.svg create mode 100644 packages/design-core/assets/notify-alarm.svg create mode 100644 packages/design-core/assets/notify-failure.svg create mode 100644 packages/design-core/assets/notify-prompt.svg create mode 100644 packages/design-core/assets/notify-success.svg create mode 100644 packages/design-core/assets/numeric.svg create mode 100644 packages/design-core/assets/overflow-scroll.svg create mode 100644 packages/design-core/assets/padding.svg create mode 100644 packages/design-core/assets/page-schema.svg create mode 100644 packages/design-core/assets/page.svg create mode 100644 packages/design-core/assets/pager.svg create mode 100644 packages/design-core/assets/paragraph.svg create mode 100644 packages/design-core/assets/pencil-thick.svg create mode 100644 packages/design-core/assets/pie.svg create mode 100644 packages/design-core/assets/plugin-help.svg create mode 100644 packages/design-core/assets/plugin-icon-data.svg create mode 100644 packages/design-core/assets/plugin-icon-js.svg create mode 100644 packages/design-core/assets/plugin-icon-language.svg create mode 100644 packages/design-core/assets/plugin-icon-materials.svg create mode 100644 packages/design-core/assets/plugin-icon-page-schema.svg create mode 100644 packages/design-core/assets/plugin-icon-page.svg create mode 100644 packages/design-core/assets/plugin-icon-plugin-help.svg create mode 100644 packages/design-core/assets/plugin-icon-robot.svg create mode 100644 packages/design-core/assets/plugin-icon-sresources.svg create mode 100644 packages/design-core/assets/plugin-icon-symbol.svg create mode 100644 packages/design-core/assets/plugin-icon-tree.svg create mode 100644 packages/design-core/assets/plugin-icon-tutorial.svg create mode 100644 packages/design-core/assets/plugin-icon-var.svg create mode 100644 packages/design-core/assets/plus-circle.svg create mode 100644 packages/design-core/assets/plus.svg create mode 100644 packages/design-core/assets/popeditor.svg create mode 100644 packages/design-core/assets/popover.svg create mode 100644 packages/design-core/assets/position-all.svg create mode 100644 packages/design-core/assets/position-bottom-left.svg create mode 100644 packages/design-core/assets/position-bottom-right.svg create mode 100644 packages/design-core/assets/position-bottom.svg create mode 100644 packages/design-core/assets/position-left.svg create mode 100644 packages/design-core/assets/position-right.svg create mode 100644 packages/design-core/assets/position-top-left.svg create mode 100644 packages/design-core/assets/position-top-right.svg create mode 100644 packages/design-core/assets/position-top.svg create mode 100644 packages/design-core/assets/preview.svg create mode 100644 packages/design-core/assets/prompt.svg create mode 100644 packages/design-core/assets/radar.svg create mode 100644 packages/design-core/assets/radial-gradient.svg create mode 100644 packages/design-core/assets/radio.svg create mode 100644 packages/design-core/assets/realtime-flow.svg create mode 100644 packages/design-core/assets/redo.svg create mode 100644 packages/design-core/assets/refresh.svg create mode 100644 packages/design-core/assets/report.svg create mode 100644 packages/design-core/assets/resources.svg create mode 100644 packages/design-core/assets/return.svg create mode 100644 packages/design-core/assets/rf-alarm.svg create mode 100644 packages/design-core/assets/rf-resources/flowchart-ecs.svg create mode 100644 packages/design-core/assets/rf-resources/flowchart-evs.svg create mode 100644 packages/design-core/assets/rf-resources/flowchart-rds.svg create mode 100644 packages/design-core/assets/rf-resources/flowchart-vpc.svg create mode 100644 packages/design-core/assets/ring.svg create mode 100644 packages/design-core/assets/row.svg create mode 100644 packages/design-core/assets/save.svg create mode 100644 packages/design-core/assets/search.svg create mode 100644 packages/design-core/assets/select.svg create mode 100644 packages/design-core/assets/setting-outline.svg create mode 100644 packages/design-core/assets/setting.svg create mode 100644 packages/design-core/assets/slot.svg create mode 100644 packages/design-core/assets/small-list.svg create mode 100644 packages/design-core/assets/stars.svg create mode 100644 packages/design-core/assets/start.svg create mode 100644 packages/design-core/assets/style-setting-background-image.svg create mode 100644 packages/design-core/assets/swiper.svg create mode 100644 packages/design-core/assets/switch.svg create mode 100644 packages/design-core/assets/symbol.svg create mode 100644 packages/design-core/assets/table.svg create mode 100644 packages/design-core/assets/tablefilter.svg create mode 100644 packages/design-core/assets/tablet-portrait.svg create mode 100644 packages/design-core/assets/tabs.svg create mode 100644 packages/design-core/assets/tag.svg create mode 100644 packages/design-core/assets/target.svg create mode 100644 packages/design-core/assets/text-align-center.svg create mode 100644 packages/design-core/assets/text-align-justify.svg create mode 100644 packages/design-core/assets/text-align-left.svg create mode 100644 packages/design-core/assets/text-align-right.svg create mode 100644 packages/design-core/assets/text-copy-page.svg create mode 100644 packages/design-core/assets/text-decoration-overline.svg create mode 100644 packages/design-core/assets/text-decoration-strike.svg create mode 100644 packages/design-core/assets/text-decoration-underline.svg create mode 100644 packages/design-core/assets/text-direction-ltr.svg create mode 100644 packages/design-core/assets/text-direction-rtl.svg create mode 100644 packages/design-core/assets/text-page-common.svg create mode 100644 packages/design-core/assets/text-page-folder-closed.svg create mode 100644 packages/design-core/assets/text-page-folder.svg create mode 100644 packages/design-core/assets/text-page-home.svg create mode 100644 packages/design-core/assets/text-page-link.svg create mode 100644 packages/design-core/assets/text-page-revert.svg create mode 100644 packages/design-core/assets/text-page-review.svg create mode 100644 packages/design-core/assets/text-source-delete.svg create mode 100644 packages/design-core/assets/text-source-list-add.svg create mode 100644 packages/design-core/assets/text-source-list-close.svg create mode 100644 packages/design-core/assets/text-source-list-ref.svg create mode 100644 packages/design-core/assets/text-source-setting.svg create mode 100644 packages/design-core/assets/text-source-string.svg create mode 100644 packages/design-core/assets/text-transform-capitalize.svg create mode 100644 packages/design-core/assets/text-transform-lowercase.svg create mode 100644 packages/design-core/assets/text-transform-sentence.svg create mode 100644 packages/design-core/assets/text.svg create mode 100644 packages/design-core/assets/tile-x.svg create mode 100644 packages/design-core/assets/tile-xy.svg create mode 100644 packages/design-core/assets/tile-y.svg create mode 100644 packages/design-core/assets/timeline.svg create mode 100644 packages/design-core/assets/tiny-logo.svg create mode 100644 packages/design-core/assets/tooltip.svg create mode 100644 packages/design-core/assets/transform-origin-bottom-left.svg create mode 100644 packages/design-core/assets/transform-origin-bottom-right.svg create mode 100644 packages/design-core/assets/transform-origin-bottom.svg create mode 100644 packages/design-core/assets/transform-origin-center.svg create mode 100644 packages/design-core/assets/transform-origin-left.svg create mode 100644 packages/design-core/assets/transform-origin-point.svg create mode 100644 packages/design-core/assets/transform-origin-right.svg create mode 100644 packages/design-core/assets/transform-origin-top-left.svg create mode 100644 packages/design-core/assets/transform-origin-top-right.svg create mode 100644 packages/design-core/assets/transform-origin-top.svg create mode 100644 packages/design-core/assets/trash.svg create mode 100644 packages/design-core/assets/tree-shape.svg create mode 100644 packages/design-core/assets/tree.svg create mode 100644 packages/design-core/assets/tutorial.svg create mode 100644 packages/design-core/assets/undo.svg create mode 100644 packages/design-core/assets/unfold-outline.svg create mode 100644 packages/design-core/assets/unlocked.svg create mode 100644 packages/design-core/assets/user-locked.svg create mode 100644 packages/design-core/assets/var.svg create mode 100644 packages/design-core/assets/video.svg create mode 100644 packages/design-core/assets/warning.svg create mode 100644 packages/design-core/assets/wizard.svg create mode 100644 packages/design-core/canvas.html create mode 100644 packages/design-core/config/addons.js create mode 100644 packages/design-core/config/lowcode.config.js create mode 100644 packages/design-core/index.html create mode 100644 packages/design-core/package.json create mode 100644 packages/design-core/preview.html create mode 100644 packages/design-core/previewApp.html create mode 100644 packages/design-core/public/favicon.ico create mode 100644 packages/design-core/public/i18n-mock/i18n-template-for-batch-import.zip create mode 100644 packages/design-core/public/img/bgcModal.png create mode 100644 packages/design-core/public/img/defaultAvator.png create mode 100644 packages/design-core/public/img/divider.png create mode 100644 packages/design-core/public/img/dividerActive.png create mode 100644 packages/design-core/public/img/rocket.jpg create mode 100644 packages/design-core/public/img/webNova.jpg create mode 100644 packages/design-core/public/mock/bundle.json create mode 100644 packages/design-core/public/monaco-linter/eslint.worker.js create mode 100644 packages/design-core/public/tiny-vue.css create mode 100644 packages/design-core/scripts/externalDeps.js create mode 100644 packages/design-core/setting.html create mode 100644 packages/design-core/src/App.vue create mode 100644 packages/design-core/src/DesignCanvas.vue create mode 100644 packages/design-core/src/DesignPlugins.vue create mode 100644 packages/design-core/src/DesignSettings.vue create mode 100644 packages/design-core/src/DesignToolbars.vue create mode 100644 packages/design-core/src/canvas.js create mode 100644 packages/design-core/src/main.js create mode 100644 packages/design-core/src/preview/src/App.vue create mode 100644 packages/design-core/src/preview/src/Toolbar.vue create mode 100644 packages/design-core/src/preview/src/constant/index.js create mode 100644 packages/design-core/src/preview/src/main.js create mode 100644 packages/design-core/src/preview/src/preview/Preview.vue create mode 100644 packages/design-core/src/preview/src/preview/debugSwitch.js create mode 100644 packages/design-core/src/preview/src/preview/generate.js create mode 100644 packages/design-core/src/preview/src/preview/http.js create mode 100644 packages/design-core/src/preview/src/preview/importMap.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/App.vue create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/Login.vue create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/Main.vue create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/app.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/bridge.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/constant/index.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/dataSource.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/injectGlobal.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/locales.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/lowcode.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/stores.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/storesHelper.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/utils.js create mode 100644 packages/design-core/src/preview/src/previewApp.js create mode 100644 packages/design-core/src/preview/src/previewApp.vue create mode 100644 packages/design-core/vite.config.js create mode 100644 packages/http/package.json create mode 100644 packages/http/src/Login.vue create mode 100644 packages/http/src/axios.js create mode 100644 packages/http/src/config.js create mode 100644 packages/http/src/index.js create mode 100644 packages/http/src/mock.js create mode 100644 packages/http/vite.config.js create mode 100644 packages/i18n/README.md create mode 100644 packages/i18n/index.html create mode 100644 packages/i18n/package.json create mode 100644 packages/i18n/src/App.vue create mode 100644 packages/i18n/src/I18nHost.vue create mode 100644 packages/i18n/src/i18n.js create mode 100644 packages/i18n/src/lib.js create mode 100644 packages/i18n/src/main.js create mode 100644 packages/i18n/src/test/TestVueInject.vue create mode 100644 packages/i18n/src/test/TestVueUse.vue create mode 100644 packages/i18n/src/test/TestWebcomponent.vue create mode 100644 packages/i18n/vite.config.js create mode 100644 packages/live-component/components.json create mode 100644 packages/live-component/jsconfig.json create mode 100644 packages/live-component/package.json create mode 100644 packages/live-component/src/CanvasLive.vue create mode 100644 packages/live-component/src/components/ui/accordion/Accordion.vue create mode 100644 packages/live-component/src/components/ui/accordion/AccordionContent.vue create mode 100644 packages/live-component/src/components/ui/accordion/AccordionItem.vue create mode 100644 packages/live-component/src/components/ui/accordion/AccordionTrigger.vue create mode 100644 packages/live-component/src/components/ui/accordion/index.js create mode 100644 packages/live-component/src/components/ui/avatar/Avatar.vue create mode 100644 packages/live-component/src/components/ui/avatar/AvatarFallback.vue create mode 100644 packages/live-component/src/components/ui/avatar/AvatarImage.vue create mode 100644 packages/live-component/src/components/ui/avatar/index.js create mode 100644 packages/live-component/src/components/ui/badge/Badge.vue create mode 100644 packages/live-component/src/components/ui/badge/index.js create mode 100644 packages/live-component/src/components/ui/button/Button.vue create mode 100644 packages/live-component/src/components/ui/button/index.js create mode 100644 packages/live-component/src/components/ui/input/Input.vue create mode 100644 packages/live-component/src/components/ui/input/index.js create mode 100644 packages/live-component/src/components/ui/scroll-area/ScrollArea.vue create mode 100644 packages/live-component/src/components/ui/scroll-area/ScrollBar.vue create mode 100644 packages/live-component/src/components/ui/scroll-area/index.js create mode 100644 packages/live-component/src/components/ui/select/Select.vue create mode 100644 packages/live-component/src/components/ui/select/SelectContent.vue create mode 100644 packages/live-component/src/components/ui/select/SelectGroup.vue create mode 100644 packages/live-component/src/components/ui/select/SelectItem.vue create mode 100644 packages/live-component/src/components/ui/select/SelectItemText.vue create mode 100644 packages/live-component/src/components/ui/select/SelectLabel.vue create mode 100644 packages/live-component/src/components/ui/select/SelectScrollDownButton.vue create mode 100644 packages/live-component/src/components/ui/select/SelectScrollUpButton.vue create mode 100644 packages/live-component/src/components/ui/select/SelectSeparator.vue create mode 100644 packages/live-component/src/components/ui/select/SelectTrigger.vue create mode 100644 packages/live-component/src/components/ui/select/SelectValue.vue create mode 100644 packages/live-component/src/components/ui/select/index.js create mode 100644 packages/live-component/src/index.css create mode 100644 packages/live-component/src/index.js create mode 100644 packages/live-component/src/lib/utils.js create mode 100644 packages/live-component/tailwind.config.js create mode 100644 packages/live-component/vite.config.js create mode 100644 packages/plugins/ai/README.md create mode 100644 packages/plugins/ai/components.json create mode 100644 packages/plugins/ai/index.html create mode 100644 packages/plugins/ai/package.json create mode 100644 packages/plugins/ai/postcss.config.js create mode 100644 packages/plugins/ai/public/component-editor.svg create mode 100644 packages/plugins/ai/public/page-creator.svg create mode 100644 packages/plugins/ai/scripts/bundle.json create mode 100644 packages/plugins/ai/scripts/generate-prompt.js create mode 100644 packages/plugins/ai/scripts/schema.system.base.md create mode 100644 packages/plugins/ai/src/components/business/ApiConfigSteps.tsx create mode 100644 packages/plugins/ai/src/components/ui/aspect-ratio.tsx create mode 100644 packages/plugins/ai/src/components/ui/button.tsx create mode 100644 packages/plugins/ai/src/components/ui/card.tsx create mode 100644 packages/plugins/ai/src/components/ui/dialog.tsx create mode 100644 packages/plugins/ai/src/components/ui/input.tsx create mode 100644 packages/plugins/ai/src/components/ui/label.tsx create mode 100644 packages/plugins/ai/src/components/ui/radio-group.tsx create mode 100644 packages/plugins/ai/src/components/ui/scroll-area.tsx create mode 100644 packages/plugins/ai/src/components/ui/switch.tsx create mode 100644 packages/plugins/ai/src/components/ui/textarea.tsx create mode 100644 packages/plugins/ai/src/index.css create mode 100644 packages/plugins/ai/src/lib.ts create mode 100644 packages/plugins/ai/src/lib/utils.ts create mode 100644 packages/plugins/ai/src/main.tsx create mode 100644 packages/plugins/ai/src/plugins/ai-form.tsx create mode 100644 packages/plugins/ai/src/plugins/component-editor/ComponentEditor.tsx create mode 100644 packages/plugins/ai/src/plugins/component-editor/ComponentEditor.vue create mode 100644 packages/plugins/ai/src/plugins/component-editor/edit-component-form.tsx create mode 100644 packages/plugins/ai/src/plugins/custom-element.tsx create mode 100644 packages/plugins/ai/src/plugins/fetch-llm.ts create mode 100644 packages/plugins/ai/src/plugins/page-creator/PageCreator.tsx create mode 100644 packages/plugins/ai/src/plugins/page-creator/PageCreator.vue create mode 100644 packages/plugins/ai/src/plugins/shared-api.ts create mode 100644 packages/plugins/ai/src/prompts/component.system.md create mode 100644 packages/plugins/ai/src/prompts/live-component.system.md create mode 100644 packages/plugins/ai/src/prompts/schema.system.md create mode 100644 packages/plugins/ai/src/shims-vue.d.ts create mode 100644 packages/plugins/ai/src/vite-env.d.ts create mode 100644 packages/plugins/ai/tailwind.config.js create mode 100644 packages/plugins/ai/tsconfig.json create mode 100644 packages/plugins/ai/tsconfig.node.json create mode 100644 packages/plugins/ai/vite.config.ts create mode 100644 packages/plugins/block/index.js create mode 100644 packages/plugins/block/mock/test.js create mode 100644 packages/plugins/block/package.json create mode 100644 packages/plugins/block/src/BlockConfig.vue create mode 100644 packages/plugins/block/src/BlockEvent.vue create mode 100644 packages/plugins/block/src/BlockEventForm.vue create mode 100644 packages/plugins/block/src/BlockEventList.vue create mode 100644 packages/plugins/block/src/BlockGroupArrange.vue create mode 100644 packages/plugins/block/src/BlockGuide.vue create mode 100644 packages/plugins/block/src/BlockProperty.vue create mode 100644 packages/plugins/block/src/BlockPropertyForm.vue create mode 100644 packages/plugins/block/src/BlockPropertyList.vue create mode 100644 packages/plugins/block/src/BlockSetting.vue create mode 100644 packages/plugins/block/src/CategoryEdit.vue create mode 100644 packages/plugins/block/src/Main.vue create mode 100644 packages/plugins/block/src/js/blockPropertyForm.js create mode 100644 packages/plugins/block/src/js/blockSetting.jsx create mode 100644 packages/plugins/block/src/js/http.js create mode 100644 packages/plugins/block/test/test.js create mode 100644 packages/plugins/block/vite.config.js create mode 100644 packages/plugins/bridge/assets/test.png create mode 100644 packages/plugins/bridge/index.js create mode 100644 packages/plugins/bridge/mock/test.js create mode 100644 packages/plugins/bridge/package.json create mode 100644 packages/plugins/bridge/src/BridgeManage.vue create mode 100644 packages/plugins/bridge/src/BridgeSetting.vue create mode 100644 packages/plugins/bridge/src/Main.vue create mode 100644 packages/plugins/bridge/src/http.js create mode 100644 packages/plugins/bridge/src/js/resource.js create mode 100644 packages/plugins/bridge/test/test.js create mode 100644 packages/plugins/bridge/vite.config.js create mode 100644 packages/plugins/data/assets/test.png create mode 100644 packages/plugins/data/index.js create mode 100644 packages/plugins/data/mock/test.js create mode 100644 packages/plugins/data/package.json create mode 100644 packages/plugins/data/src/CreateRemoteAPI.vue create mode 100644 packages/plugins/data/src/CreateRemoteFunction.vue create mode 100644 packages/plugins/data/src/CreateStore.vue create mode 100644 packages/plugins/data/src/CreateVariable.vue create mode 100644 packages/plugins/data/src/DataSourceList.vue create mode 100644 packages/plugins/data/src/DataSourceRightPanel.vue create mode 100644 packages/plugins/data/src/EditorI18nTool.vue create mode 100644 packages/plugins/data/src/Main.vue create mode 100644 packages/plugins/data/src/js/common.js create mode 100644 packages/plugins/data/src/js/constants.js create mode 100644 packages/plugins/data/src/js/http.js create mode 100644 packages/plugins/data/test/test.js create mode 100644 packages/plugins/data/vite.config.js create mode 100644 packages/plugins/datasource/index.js create mode 100644 packages/plugins/datasource/package.json create mode 100644 packages/plugins/datasource/src/DataSourceField.vue create mode 100644 packages/plugins/datasource/src/DataSourceFieldCheck.vue create mode 100644 packages/plugins/datasource/src/DataSourceFieldCheckMultipleLine.vue create mode 100644 packages/plugins/datasource/src/DataSourceFieldCheckRanger.vue create mode 100644 packages/plugins/datasource/src/DataSourceFieldForm.vue create mode 100644 packages/plugins/datasource/src/DataSourceFieldList.vue create mode 100644 packages/plugins/datasource/src/DataSourceFieldType.vue create mode 100644 packages/plugins/datasource/src/DataSourceForm.vue create mode 100644 packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue create mode 100644 packages/plugins/datasource/src/DataSourceList.vue create mode 100644 packages/plugins/datasource/src/DataSourceName.vue create mode 100644 packages/plugins/datasource/src/DataSourceRecordForm.vue create mode 100644 packages/plugins/datasource/src/DataSourceRecordList.vue create mode 100644 packages/plugins/datasource/src/DataSourceRecordUpload.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemoteAutoload.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemoteDataAdapter.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemoteDataResult.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemoteForm.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemoteMapping.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemotePanel.vue create mode 100644 packages/plugins/datasource/src/DataSourceRemoteParameter.vue create mode 100644 packages/plugins/datasource/src/DataSourceTemplate.vue create mode 100644 packages/plugins/datasource/src/DataSourceType.vue create mode 100644 packages/plugins/datasource/src/Main.vue create mode 100644 packages/plugins/datasource/src/RemoteDataAdapterForm.vue create mode 100644 packages/plugins/datasource/src/config.js create mode 100644 packages/plugins/datasource/src/js/datasource.js create mode 100644 packages/plugins/datasource/src/js/http.js create mode 100644 packages/plugins/datasource/vite.config.js create mode 100644 packages/plugins/help/assets/test.png create mode 100644 packages/plugins/help/index.js create mode 100644 packages/plugins/help/mock/test.js create mode 100644 packages/plugins/help/package.json create mode 100644 packages/plugins/help/src/HelpIcon.vue create mode 100644 packages/plugins/help/test/test.js create mode 100644 packages/plugins/help/vite.config.js create mode 100644 packages/plugins/i18n/assets/test.png create mode 100644 packages/plugins/i18n/index.js create mode 100644 packages/plugins/i18n/mock/test.js create mode 100644 packages/plugins/i18n/package.json create mode 100644 packages/plugins/i18n/src/Main.vue create mode 100644 packages/plugins/i18n/test/test.js create mode 100644 packages/plugins/i18n/vite.config.js create mode 100644 packages/plugins/materials/assets/test.png create mode 100644 packages/plugins/materials/index.js create mode 100644 packages/plugins/materials/mock/test.js create mode 100644 packages/plugins/materials/package.json create mode 100644 packages/plugins/materials/src/Main.vue create mode 100644 packages/plugins/materials/src/block/BlockDetail.vue create mode 100644 packages/plugins/materials/src/block/BlockGroup.vue create mode 100644 packages/plugins/materials/src/block/BlockGroupArrange.vue create mode 100644 packages/plugins/materials/src/block/BlockGroupFilters.vue create mode 100644 packages/plugins/materials/src/block/BlockGroupPanel.vue create mode 100644 packages/plugins/materials/src/block/BlockGroupSort.vue create mode 100644 packages/plugins/materials/src/block/BlockGroupTransfer.vue create mode 100644 packages/plugins/materials/src/block/BlockGroupTransferPanel.vue create mode 100644 packages/plugins/materials/src/block/BlockList.vue create mode 100644 packages/plugins/materials/src/block/BlockVersionSelect.vue create mode 100644 packages/plugins/materials/src/block/Main.vue create mode 100644 packages/plugins/materials/src/block/http.js create mode 100644 packages/plugins/materials/src/block/js/usePanel.js create mode 100644 packages/plugins/materials/src/component/Main.vue create mode 100644 packages/plugins/materials/test/test.js create mode 100644 packages/plugins/materials/vite.config.js create mode 100644 packages/plugins/page/assets/test.png create mode 100644 packages/plugins/page/index.js create mode 100644 packages/plugins/page/mock/test.js create mode 100644 packages/plugins/page/package.json create mode 100644 packages/plugins/page/src/Main.vue create mode 100644 packages/plugins/page/src/PageFolderSetting.vue create mode 100644 packages/plugins/page/src/PageGeneral.vue create mode 100644 packages/plugins/page/src/PageHistory.vue create mode 100644 packages/plugins/page/src/PageHome.vue create mode 100644 packages/plugins/page/src/PageInputOutput.vue create mode 100644 packages/plugins/page/src/PageSetting.vue create mode 100644 packages/plugins/page/src/PageTree.vue create mode 100644 packages/plugins/page/src/http.js create mode 100644 packages/plugins/page/test/test.js create mode 100644 packages/plugins/page/vite.config.js create mode 100644 packages/plugins/robot/assets/AI.png create mode 100644 packages/plugins/robot/assets/test.png create mode 100644 packages/plugins/robot/index.js create mode 100644 packages/plugins/robot/mock/test.js create mode 100644 packages/plugins/robot/package.json create mode 100644 packages/plugins/robot/src/Main.vue create mode 100644 packages/plugins/robot/src/js/robotSetting.js create mode 100644 packages/plugins/robot/test/test.js create mode 100644 packages/plugins/robot/vite.config.js create mode 100644 packages/plugins/schema/assets/test.png create mode 100644 packages/plugins/schema/index.js create mode 100644 packages/plugins/schema/mock/test.js create mode 100644 packages/plugins/schema/package.json create mode 100644 packages/plugins/schema/src/Main.vue create mode 100644 packages/plugins/schema/test/test.js create mode 100644 packages/plugins/schema/vite.config.js create mode 100644 packages/plugins/script/assets/test.png create mode 100644 packages/plugins/script/index.js create mode 100644 packages/plugins/script/mock/test.js create mode 100644 packages/plugins/script/package.json create mode 100644 packages/plugins/script/src/Main.vue create mode 100644 packages/plugins/script/src/js/method.js create mode 100644 packages/plugins/script/test/test.js create mode 100644 packages/plugins/script/vite.config.js create mode 100644 packages/plugins/tree/assets/test.png create mode 100644 packages/plugins/tree/index.js create mode 100644 packages/plugins/tree/mock/test.js create mode 100644 packages/plugins/tree/package.json create mode 100644 packages/plugins/tree/src/Main.vue create mode 100644 packages/plugins/tree/test/test.js create mode 100644 packages/plugins/tree/vite.config.js create mode 100644 packages/plugins/tutorial/assets/test.png create mode 100644 packages/plugins/tutorial/index.js create mode 100644 packages/plugins/tutorial/mock/test.js create mode 100644 packages/plugins/tutorial/package.json create mode 100644 packages/plugins/tutorial/src/Main.vue create mode 100644 packages/plugins/tutorial/src/TutorialVideoPanel.vue create mode 100644 packages/plugins/tutorial/src/js/http.js create mode 100644 packages/plugins/tutorial/test/test.js create mode 100644 packages/plugins/tutorial/vite.config.js create mode 100644 packages/settings/design/package.json create mode 100644 packages/settings/design/src/App.vue create mode 100644 packages/settings/design/src/assets/materials/ng-bundle.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/accordion.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/alert.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/button.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/checkbox.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/container.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/date.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/daterange.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/form.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/formfield.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/halfmodal.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/image.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/index.js create mode 100644 packages/settings/design/src/assets/materials/ng-components/input.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/radio.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/select.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/swiper.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/switch.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/tab.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/table.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/tablefilter.json create mode 100644 packages/settings/design/src/assets/materials/ng-components/tag.json create mode 100644 packages/settings/design/src/components/ArrayConfigItemForm.vue create mode 100644 packages/settings/design/src/components/ComponentList.vue create mode 100644 packages/settings/design/src/components/PropertyCanvas.vue create mode 100644 packages/settings/design/src/components/PropertyList.vue create mode 100644 packages/settings/design/src/components/SettingPanel.vue create mode 100644 packages/settings/design/src/components/SourceEditor.vue create mode 100644 packages/settings/design/src/components/widgets/index.js create mode 100644 packages/settings/design/src/convertToSchema.js create mode 100644 packages/settings/design/src/lib.js create mode 100644 packages/settings/design/src/main.js create mode 100644 packages/settings/design/src/ng-properties/accordion.json create mode 100644 packages/settings/design/src/ng-properties/alert.json create mode 100644 packages/settings/design/src/ng-properties/button.json create mode 100644 packages/settings/design/src/ng-properties/checkbox.json create mode 100644 packages/settings/design/src/ng-properties/container.json create mode 100644 packages/settings/design/src/ng-properties/date.json create mode 100644 packages/settings/design/src/ng-properties/daterange.json create mode 100644 packages/settings/design/src/ng-properties/form.json create mode 100644 packages/settings/design/src/ng-properties/formfield.json create mode 100644 packages/settings/design/src/ng-properties/halfmodal.json create mode 100644 packages/settings/design/src/ng-properties/image.json create mode 100644 packages/settings/design/src/ng-properties/index.js create mode 100644 packages/settings/design/src/ng-properties/input.json create mode 100644 packages/settings/design/src/ng-properties/radio.json create mode 100644 packages/settings/design/src/ng-properties/select.json create mode 100644 packages/settings/design/src/ng-properties/swiper.json create mode 100644 packages/settings/design/src/ng-properties/switch.json create mode 100644 packages/settings/design/src/ng-properties/tab.json create mode 100644 packages/settings/design/src/ng-properties/table.json create mode 100644 packages/settings/design/src/ng-properties/tablefilter.json create mode 100644 packages/settings/design/src/ng-properties/tag.json create mode 100644 packages/settings/design/src/properties/alert.json create mode 100644 packages/settings/design/src/properties/amount.json create mode 100644 packages/settings/design/src/properties/area.json create mode 100644 packages/settings/design/src/properties/autocomplete.json create mode 100644 packages/settings/design/src/properties/badge.json create mode 100644 packages/settings/design/src/properties/breadcrumb-item.json create mode 100644 packages/settings/design/src/properties/breadcrumb.json create mode 100644 packages/settings/design/src/properties/bulletin-board.json create mode 100644 packages/settings/design/src/properties/button-group.json create mode 100644 packages/settings/design/src/properties/button.json create mode 100644 packages/settings/design/src/properties/calendar.json create mode 100644 packages/settings/design/src/properties/carousel-item.json create mode 100644 packages/settings/design/src/properties/carousel.json create mode 100644 packages/settings/design/src/properties/cascader-panel.json create mode 100644 packages/settings/design/src/properties/cascader-props.json create mode 100644 packages/settings/design/src/properties/cascader.json create mode 100644 packages/settings/design/src/properties/chart-data.json create mode 100644 packages/settings/design/src/properties/chart-pie.json create mode 100644 packages/settings/design/src/properties/chart.json create mode 100644 packages/settings/design/src/properties/checkbox-button.json create mode 100644 packages/settings/design/src/properties/checkbox-group.json create mode 100644 packages/settings/design/src/properties/checkbox.json create mode 100644 packages/settings/design/src/properties/col.json create mode 100644 packages/settings/design/src/properties/collapse-item.json create mode 100644 packages/settings/design/src/properties/collapse.json create mode 100644 packages/settings/design/src/properties/company.json create mode 100644 packages/settings/design/src/properties/container.json create mode 100644 packages/settings/design/src/properties/country.json create mode 100644 packages/settings/design/src/properties/credit-card-form.json create mode 100644 packages/settings/design/src/properties/crop.json create mode 100644 packages/settings/design/src/properties/currency.json create mode 100644 packages/settings/design/src/properties/date-picker-date-format.json create mode 100644 packages/settings/design/src/properties/date-picker-options.json create mode 100644 packages/settings/design/src/properties/date-picker-shortcuts.json create mode 100644 packages/settings/design/src/properties/date-picker.json create mode 100644 packages/settings/design/src/properties/dept.json create mode 100644 packages/settings/design/src/properties/detail-page.json create mode 100644 packages/settings/design/src/properties/dialog-box.json create mode 100644 packages/settings/design/src/properties/drop-roles.json create mode 100644 packages/settings/design/src/properties/drop-times.json create mode 100644 packages/settings/design/src/properties/edoc.json create mode 100644 packages/settings/design/src/properties/espace.json create mode 100644 packages/settings/design/src/properties/fall-menu.json create mode 100644 packages/settings/design/src/properties/file-upload.json create mode 100644 packages/settings/design/src/properties/floatbar.json create mode 100644 packages/settings/design/src/properties/flow-chart.json create mode 100644 packages/settings/design/src/properties/form-item.json create mode 100644 packages/settings/design/src/properties/form.json create mode 100644 packages/settings/design/src/properties/gantt.json create mode 100644 packages/settings/design/src/properties/grid-column.json create mode 100644 packages/settings/design/src/properties/grid-toolbar.json create mode 100644 packages/settings/design/src/properties/grid.json create mode 100644 packages/settings/design/src/properties/hrapprover.json create mode 100644 packages/settings/design/src/properties/image.json create mode 100644 packages/settings/design/src/properties/index.js create mode 100644 packages/settings/design/src/properties/input.json create mode 100644 packages/settings/design/src/properties/ip-address.json create mode 100644 packages/settings/design/src/properties/layout.json create mode 100644 packages/settings/design/src/properties/link-menu.json create mode 100644 packages/settings/design/src/properties/link.json create mode 100644 packages/settings/design/src/properties/loading.json create mode 100644 packages/settings/design/src/properties/locales.json create mode 100644 packages/settings/design/src/properties/logon-user.json create mode 100644 packages/settings/design/src/properties/logout.json create mode 100644 packages/settings/design/src/properties/menu-bar.json create mode 100644 packages/settings/design/src/properties/milestone.json create mode 100644 packages/settings/design/src/properties/modal.json create mode 100644 packages/settings/design/src/properties/nav-menu.json create mode 100644 packages/settings/design/src/properties/numeric.json create mode 100644 packages/settings/design/src/properties/option-group.json create mode 100644 packages/settings/design/src/properties/option.json create mode 100644 packages/settings/design/src/properties/pager.json create mode 100644 packages/settings/design/src/properties/panel.json create mode 100644 packages/settings/design/src/properties/pop-upload.json create mode 100644 packages/settings/design/src/properties/popeditor.json create mode 100644 packages/settings/design/src/properties/popover.json create mode 100644 packages/settings/design/src/properties/progress.json create mode 100644 packages/settings/design/src/properties/radio-button.json create mode 100644 packages/settings/design/src/properties/radio-group.json create mode 100644 packages/settings/design/src/properties/radio.json create mode 100644 packages/settings/design/src/properties/rate.json create mode 100644 packages/settings/design/src/properties/rich-text.json create mode 100644 packages/settings/design/src/properties/roles.json create mode 100644 packages/settings/design/src/properties/row.json create mode 100644 packages/settings/design/src/properties/scroll-text.json create mode 100644 packages/settings/design/src/properties/search.json create mode 100644 packages/settings/design/src/properties/select.json create mode 100644 packages/settings/design/src/properties/slide-bar.json create mode 100644 packages/settings/design/src/properties/slider.json create mode 100644 packages/settings/design/src/properties/split.json create mode 100644 packages/settings/design/src/properties/steps.json create mode 100644 packages/settings/design/src/properties/svg-icon.json create mode 100644 packages/settings/design/src/properties/switch.json create mode 100644 packages/settings/design/src/properties/tabs.json create mode 100644 packages/settings/design/src/properties/tag.json create mode 100644 packages/settings/design/src/properties/text-popup.json create mode 100644 packages/settings/design/src/properties/time-line.json create mode 100644 packages/settings/design/src/properties/time-picker-options.json create mode 100644 packages/settings/design/src/properties/time-picker.json create mode 100644 packages/settings/design/src/properties/time-select-options.json create mode 100644 packages/settings/design/src/properties/time-select.json create mode 100644 packages/settings/design/src/properties/toggle-menu.json create mode 100644 packages/settings/design/src/properties/tooltip.json create mode 100644 packages/settings/design/src/properties/transfer.json create mode 100644 packages/settings/design/src/properties/tree-menu.json create mode 100644 packages/settings/design/src/properties/tree.json create mode 100644 packages/settings/design/src/properties/user-account.json create mode 100644 packages/settings/design/src/properties/user-contact.json create mode 100644 packages/settings/design/src/properties/user-head.json create mode 100644 packages/settings/design/src/properties/user-link.json create mode 100644 packages/settings/design/src/properties/user.json create mode 100644 packages/settings/design/src/properties/wizard.json create mode 100644 packages/settings/design/src/schema/carousel-item.json create mode 100644 packages/settings/design/src/schema/carousel.json create mode 100644 packages/settings/design/src/schemas/button.json create mode 100644 packages/settings/design/src/schemas/checkbox.json create mode 100644 packages/settings/design/src/schemas/checkboxbutton.json create mode 100644 packages/settings/design/src/schemas/checkboxgroup.json create mode 100644 packages/settings/design/src/schemas/collapse.json create mode 100644 packages/settings/design/src/schemas/collapseitem.json create mode 100644 packages/settings/design/src/schemas/dialogbox.json create mode 100644 packages/settings/design/src/schemas/floatbar.json create mode 100644 packages/settings/design/src/schemas/form.json create mode 100644 packages/settings/design/src/schemas/formitem.json create mode 100644 packages/settings/design/src/schemas/grid.json create mode 100644 packages/settings/design/src/schemas/gridcolumn.json create mode 100644 packages/settings/design/src/schemas/index.js create mode 100644 packages/settings/design/src/schemas/input.json create mode 100644 packages/settings/design/src/schemas/pager.json create mode 100644 packages/settings/design/src/schemas/popeditor.json create mode 100644 packages/settings/design/src/schemas/popover.json create mode 100644 packages/settings/design/src/schemas/radio.json create mode 100644 packages/settings/design/src/schemas/search.json create mode 100644 packages/settings/design/src/schemas/select.json create mode 100644 packages/settings/design/src/schemas/switch.json create mode 100644 packages/settings/design/src/schemas/tabitem.json create mode 100644 packages/settings/design/src/schemas/tabs.json create mode 100644 packages/settings/design/src/schemas/time-line.json create mode 100644 packages/settings/design/src/schemas/tooltip.json create mode 100644 packages/settings/design/src/schemas/tree.json create mode 100644 packages/settings/design/src/store/index.js create mode 100644 packages/settings/design/vite.config.js create mode 100644 packages/settings/events/index.js create mode 100644 packages/settings/events/package.json create mode 100644 packages/settings/events/src/Main.vue create mode 100644 packages/settings/events/src/commonjs/events.js create mode 100644 packages/settings/events/src/components/AddEventsDialog.vue create mode 100644 packages/settings/events/src/components/AdvanceConfig.vue create mode 100644 packages/settings/events/src/components/BindEvents.vue create mode 100644 packages/settings/events/src/components/BindEventsDialog.vue create mode 100644 packages/settings/events/vite.config.js create mode 100644 packages/settings/props/index.js create mode 100644 packages/settings/props/package.json create mode 100644 packages/settings/props/src/Main.vue create mode 100644 packages/settings/props/src/components/Empty.vue create mode 100644 packages/settings/props/src/components/groups/LifeCycle.vue create mode 100644 packages/settings/props/src/components/groups/TableColumn.vue create mode 100644 packages/settings/props/src/components/groups/TablePager.vue create mode 100644 packages/settings/props/src/components/index.js create mode 100644 packages/settings/props/src/components/inputs/BindFunction.vue create mode 100644 packages/settings/props/src/components/inputs/CheckValue.vue create mode 100644 packages/settings/props/src/components/inputs/CodeEditor.vue create mode 100644 packages/settings/props/src/components/inputs/DraggableOptions.vue create mode 100644 packages/settings/props/src/components/inputs/NumericSelect.vue create mode 100644 packages/settings/props/src/components/inputs/SelectOption.vue create mode 100644 packages/settings/props/src/components/inputs/SwitchValue.vue create mode 100644 packages/settings/props/src/components/modal/ModalContent.vue create mode 100644 packages/settings/props/vite.config.js create mode 100644 packages/settings/styles/assets/test.png create mode 100644 packages/settings/styles/index.js create mode 100644 packages/settings/styles/mock/test.js create mode 100644 packages/settings/styles/package.json create mode 100644 packages/settings/styles/src/Main.vue create mode 100644 packages/settings/styles/src/components/background/BackgroundGroup.vue create mode 100644 packages/settings/styles/src/components/background/BackgroundImageGradient.vue create mode 100644 packages/settings/styles/src/components/background/BackgroundImageSetting.vue create mode 100644 packages/settings/styles/src/components/background/ColorOverlay.vue create mode 100644 packages/settings/styles/src/components/background/ImageSetting.vue create mode 100644 packages/settings/styles/src/components/background/LinearGradient.vue create mode 100644 packages/settings/styles/src/components/background/PositionOrigin.vue create mode 100644 packages/settings/styles/src/components/background/RadialGradient.vue create mode 100644 packages/settings/styles/src/components/border/BorderGroup.vue create mode 100644 packages/settings/styles/src/components/classNamesContainer/index.vue create mode 100644 packages/settings/styles/src/components/effects/EffectGroup.vue create mode 100644 packages/settings/styles/src/components/index.js create mode 100644 packages/settings/styles/src/components/inputs/ImageSelect.vue create mode 100644 packages/settings/styles/src/components/inputs/InputSelect.vue create mode 100644 packages/settings/styles/src/components/inputs/ModalMask.vue create mode 100644 packages/settings/styles/src/components/inputs/NumericSelect.vue create mode 100644 packages/settings/styles/src/components/inputs/ResetButton.vue create mode 100644 packages/settings/styles/src/components/layout/FlexBox.vue create mode 100644 packages/settings/styles/src/components/layout/GridBox.vue create mode 100644 packages/settings/styles/src/components/layout/LayoutGroup.vue create mode 100644 packages/settings/styles/src/components/position/PositionGroup.vue create mode 100644 packages/settings/styles/src/components/shadow/BoxShadowGroup.vue create mode 100644 packages/settings/styles/src/components/size/SizeGroup.vue create mode 100644 packages/settings/styles/src/components/spacing/SpacingGroup.vue create mode 100644 packages/settings/styles/src/components/spacing/SpacingSetting.vue create mode 100644 packages/settings/styles/src/components/typography/TypographyGroup.vue create mode 100644 packages/settings/styles/src/components/typography/TypographyMore.vue create mode 100644 packages/settings/styles/src/js/cssConvert.js create mode 100644 packages/settings/styles/src/js/cssType.js create mode 100644 packages/settings/styles/src/js/parser.js create mode 100644 packages/settings/styles/src/js/styleProperty.js create mode 100644 packages/settings/styles/src/js/useEditor.js create mode 100644 packages/settings/styles/src/js/useEvent.js create mode 100644 packages/settings/styles/src/js/useLayout.js create mode 100644 packages/settings/styles/src/js/useStyle.js create mode 100644 packages/settings/styles/test/test.js create mode 100644 packages/settings/styles/vite.config.js create mode 100644 packages/svgs/index.js create mode 100644 packages/svgs/mock/test.js create mode 100644 packages/svgs/package.json create mode 100644 packages/svgs/src/Main.vue create mode 100644 packages/svgs/test/test.js create mode 100644 packages/svgs/vite.config.js create mode 100644 packages/theme/common/base.less create mode 100644 packages/theme/common/global.less create mode 100644 packages/theme/dark/base.less create mode 100644 packages/theme/dark/block.less create mode 100644 packages/theme/dark/bridge.less create mode 100644 packages/theme/dark/button.less create mode 100644 packages/theme/dark/canvas.less create mode 100644 packages/theme/dark/datasource.less create mode 100644 packages/theme/dark/events.less create mode 100644 packages/theme/dark/gpt-dialog.less create mode 100644 packages/theme/dark/help.less create mode 100644 packages/theme/dark/i18n.less create mode 100644 packages/theme/dark/index.less create mode 100644 packages/theme/dark/life-cycles.less create mode 100644 packages/theme/dark/materials.less create mode 100644 packages/theme/dark/metaComponent.less create mode 100644 packages/theme/dark/package.json create mode 100644 packages/theme/dark/pageManage.less create mode 100644 packages/theme/dark/plugin-js.less create mode 100644 packages/theme/dark/radio.less create mode 100644 packages/theme/dark/setting-style.less create mode 100644 packages/theme/dark/settings.less create mode 100644 packages/theme/dark/tiny-checkbox.less create mode 100644 packages/theme/dark/tiny-collapse.less create mode 100644 packages/theme/dark/tiny-dialog-box.less create mode 100644 packages/theme/dark/tiny-grid.less create mode 100644 packages/theme/dark/tiny-input.less create mode 100644 packages/theme/dark/tiny-modal.less create mode 100644 packages/theme/dark/tiny-notify.less create mode 100644 packages/theme/dark/tiny-numeric.less create mode 100644 packages/theme/dark/tiny-search.less create mode 100644 packages/theme/dark/tiny-switch.less create mode 100644 packages/theme/dark/tiny-tabs.less create mode 100644 packages/theme/dark/toolbar.less create mode 100644 packages/theme/dark/tree.less create mode 100644 packages/theme/dark/tutorial.less create mode 100644 packages/theme/dark/variable.less create mode 100644 packages/theme/dark/vite.config.js create mode 100644 packages/theme/light/base.less create mode 100644 packages/theme/light/block.less create mode 100644 packages/theme/light/bridge.less create mode 100644 packages/theme/light/button.less create mode 100644 packages/theme/light/canvas.less create mode 100644 packages/theme/light/datasource.less create mode 100644 packages/theme/light/events.less create mode 100644 packages/theme/light/gpt-dialog.less create mode 100644 packages/theme/light/help.less create mode 100644 packages/theme/light/i18n.less create mode 100644 packages/theme/light/index.less create mode 100644 packages/theme/light/life-cycles.less create mode 100644 packages/theme/light/materials.less create mode 100644 packages/theme/light/metaComponent.less create mode 100644 packages/theme/light/package.json create mode 100644 packages/theme/light/pageManage.less create mode 100644 packages/theme/light/plugin-js.less create mode 100644 packages/theme/light/radio.less create mode 100644 packages/theme/light/setting-style.less create mode 100644 packages/theme/light/settings.less create mode 100644 packages/theme/light/tiny-collapse.less create mode 100644 packages/theme/light/tiny-dialog-box.less create mode 100644 packages/theme/light/tiny-grid.less create mode 100644 packages/theme/light/tiny-input.less create mode 100644 packages/theme/light/tiny-modal.less create mode 100644 packages/theme/light/tiny-notify.less create mode 100644 packages/theme/light/tiny-numeric.less create mode 100644 packages/theme/light/tiny-search.less create mode 100644 packages/theme/light/tiny-switch.less create mode 100644 packages/theme/light/toolbar.less create mode 100644 packages/theme/light/tree.less create mode 100644 packages/theme/light/tutorial.less create mode 100644 packages/theme/light/variable.less create mode 100644 packages/theme/light/vite.config.js create mode 100644 packages/toolbars/breadcrumb/assets/test.png create mode 100644 packages/toolbars/breadcrumb/index.js create mode 100644 packages/toolbars/breadcrumb/mock/test.js create mode 100644 packages/toolbars/breadcrumb/package.json create mode 100644 packages/toolbars/breadcrumb/src/Main.vue create mode 100644 packages/toolbars/breadcrumb/test/test.js create mode 100644 packages/toolbars/breadcrumb/vite.config.js create mode 100644 packages/toolbars/clean/assets/test.png create mode 100644 packages/toolbars/clean/index.js create mode 100644 packages/toolbars/clean/mock/test.js create mode 100644 packages/toolbars/clean/package.json create mode 100644 packages/toolbars/clean/src/Main.vue create mode 100644 packages/toolbars/clean/test/test.js create mode 100644 packages/toolbars/clean/vite.config.js create mode 100644 packages/toolbars/collaboration/assets/test.png create mode 100644 packages/toolbars/collaboration/index.js create mode 100644 packages/toolbars/collaboration/mock/test.js create mode 100644 packages/toolbars/collaboration/package.json create mode 100644 packages/toolbars/collaboration/src/Main.vue create mode 100644 packages/toolbars/collaboration/test/test.js create mode 100644 packages/toolbars/collaboration/vite.config.js create mode 100644 packages/toolbars/fullscreen/assets/test.png create mode 100644 packages/toolbars/fullscreen/index.js create mode 100644 packages/toolbars/fullscreen/mock/test.js create mode 100644 packages/toolbars/fullscreen/package.json create mode 100644 packages/toolbars/fullscreen/src/Main.vue create mode 100644 packages/toolbars/fullscreen/test/test.js create mode 100644 packages/toolbars/fullscreen/vite.config.js create mode 100644 packages/toolbars/generate-vue/index.js create mode 100644 packages/toolbars/generate-vue/package.json create mode 100644 packages/toolbars/generate-vue/src/FileSelector.vue create mode 100644 packages/toolbars/generate-vue/src/Main.vue create mode 100644 packages/toolbars/generate-vue/src/generateCode.js create mode 100644 packages/toolbars/generate-vue/src/http.js create mode 100644 packages/toolbars/generate-vue/vite.config.js create mode 100644 packages/toolbars/lang/assets/test.png create mode 100644 packages/toolbars/lang/index.js create mode 100644 packages/toolbars/lang/mock/test.js create mode 100644 packages/toolbars/lang/package.json create mode 100644 packages/toolbars/lang/src/Main.vue create mode 100644 packages/toolbars/lang/test/test.js create mode 100644 packages/toolbars/lang/vite.config.js create mode 100644 packages/toolbars/layout/assets/test.png create mode 100644 packages/toolbars/layout/index.js create mode 100644 packages/toolbars/layout/mock/test.js create mode 100644 packages/toolbars/layout/package.json create mode 100644 packages/toolbars/layout/src/Main.vue create mode 100644 packages/toolbars/layout/test/test.js create mode 100644 packages/toolbars/layout/vite.config.js create mode 100644 packages/toolbars/lock/assets/test.png create mode 100644 packages/toolbars/lock/index.js create mode 100644 packages/toolbars/lock/mock/test.js create mode 100644 packages/toolbars/lock/package.json create mode 100644 packages/toolbars/lock/src/Main.vue create mode 100644 packages/toolbars/lock/src/http.js create mode 100644 packages/toolbars/lock/test/test.js create mode 100644 packages/toolbars/lock/vite.config.js create mode 100644 packages/toolbars/logo/assets/test.png create mode 100644 packages/toolbars/logo/index.js create mode 100644 packages/toolbars/logo/mock/test.js create mode 100644 packages/toolbars/logo/package.json create mode 100644 packages/toolbars/logo/src/AppList.vue create mode 100644 packages/toolbars/logo/src/Main.vue create mode 100644 packages/toolbars/logo/test/test.js create mode 100644 packages/toolbars/logo/vite.config.js create mode 100644 packages/toolbars/logout/assets/test.png create mode 100644 packages/toolbars/logout/index.js create mode 100644 packages/toolbars/logout/mock/test.js create mode 100644 packages/toolbars/logout/package.json create mode 100644 packages/toolbars/logout/src/Main.vue create mode 100644 packages/toolbars/logout/src/js/http.js create mode 100644 packages/toolbars/logout/test/test.js create mode 100644 packages/toolbars/logout/vite.config.js create mode 100644 packages/toolbars/media/assets/test.png create mode 100644 packages/toolbars/media/index.js create mode 100644 packages/toolbars/media/mock/test.js create mode 100644 packages/toolbars/media/package.json create mode 100644 packages/toolbars/media/src/Main.vue create mode 100644 packages/toolbars/media/test/test.js create mode 100644 packages/toolbars/media/vite.config.js create mode 100644 packages/toolbars/preview/assets/test.png create mode 100644 packages/toolbars/preview/index.js create mode 100644 packages/toolbars/preview/mock/test.js create mode 100644 packages/toolbars/preview/package.json create mode 100644 packages/toolbars/preview/src/Main.vue create mode 100644 packages/toolbars/preview/test/test.js create mode 100644 packages/toolbars/preview/vite.config.js create mode 100644 packages/toolbars/redoundo/assets/test.png create mode 100644 packages/toolbars/redoundo/index.js create mode 100644 packages/toolbars/redoundo/mock/test.js create mode 100644 packages/toolbars/redoundo/package.json create mode 100644 packages/toolbars/redoundo/src/Main.vue create mode 100644 packages/toolbars/redoundo/test/test.js create mode 100644 packages/toolbars/redoundo/vite.config.js create mode 100644 packages/toolbars/refresh/index.js create mode 100644 packages/toolbars/refresh/package.json create mode 100644 packages/toolbars/refresh/src/Main.vue create mode 100644 packages/toolbars/refresh/vite.config.js create mode 100644 packages/toolbars/save/assets/test.png create mode 100644 packages/toolbars/save/index.js create mode 100644 packages/toolbars/save/mock/test.js create mode 100644 packages/toolbars/save/package.json create mode 100644 packages/toolbars/save/src/Main.vue create mode 100644 packages/toolbars/save/src/js/index.js create mode 100644 packages/toolbars/save/test/test.js create mode 100644 packages/toolbars/save/vite.config.js create mode 100644 packages/toolbars/setting/index.js create mode 100644 packages/toolbars/setting/package.json create mode 100644 packages/toolbars/setting/src/Main.vue create mode 100644 packages/toolbars/setting/vite.config.js create mode 100644 packages/utils/package.json create mode 100644 packages/utils/src/constants/index.js create mode 100644 packages/utils/src/fs/index.js create mode 100644 packages/utils/src/index.js create mode 100644 packages/utils/src/utils/index.js create mode 100644 packages/utils/test/deepClone.test.js create mode 100644 packages/utils/vite.config.js create mode 100644 packages/vue-generator/.eslintrc.cjs create mode 100644 packages/vue-generator/.gitignore create mode 100644 packages/vue-generator/jsconfig.json create mode 100644 packages/vue-generator/package.json create mode 100644 packages/vue-generator/src/constant/index.js create mode 100644 packages/vue-generator/src/generator/index.js create mode 100644 packages/vue-generator/src/generator/page.js create mode 100644 packages/vue-generator/src/index.js create mode 100644 packages/vue-generator/src/parser/jsx-slot.js create mode 100644 packages/vue-generator/src/parser/state-type.js create mode 100644 packages/vue-generator/src/parser/state.js create mode 100644 packages/vue-generator/src/pre-processor/index.js create mode 100644 packages/vue-generator/src/utils/index.js create mode 100644 packages/vue-generator/src/utils/vue-sfc-validator.js create mode 100644 packages/vue-generator/test/testcases/full/case1_normal/input/blocks.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case1_normal/input/components-map.json create mode 100644 packages/vue-generator/test/testcases/full/case1_normal/input/page.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case1_normal/output/components/ImageTitle.vue create mode 100644 packages/vue-generator/test/testcases/full/case1_normal/output/views/FormTable.vue create mode 100644 packages/vue-generator/test/testcases/full/case2_prop-accessor/input/blocks.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case2_prop-accessor/input/components-map.json create mode 100644 packages/vue-generator/test/testcases/full/case2_prop-accessor/input/page.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case2_prop-accessor/output/components/PropAccessor.vue create mode 100644 packages/vue-generator/test/testcases/full/case2_prop-accessor/output/views/UsePropAccessor.vue create mode 100644 packages/vue-generator/test/testcases/full/case3_state-accessor/input/blocks.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case3_state-accessor/input/components-map.json create mode 100644 packages/vue-generator/test/testcases/full/case3_state-accessor/input/page.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case3_state-accessor/output/components/StateAccessor.vue create mode 100644 packages/vue-generator/test/testcases/full/case3_state-accessor/output/views/UseStateAccessor.vue create mode 100644 packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/blocks.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/components-map.json create mode 100644 packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/page.schema.json create mode 100644 packages/vue-generator/test/testcases/full/case4_canvasrow-component/output/BuiltInComponent.vue create mode 100644 packages/vue-generator/test/testcases/full/index.config.js create mode 100644 packages/vue-generator/test/testcases/full/index.js create mode 100644 packages/vue-generator/test/utils/logger/index.js create mode 100644 packages/vue-generator/vite.config.js create mode 100644 packages/webcomponent/README.md create mode 100644 packages/webcomponent/package.json create mode 100644 packages/webcomponent/src/defineCustomElement.js create mode 100644 packages/webcomponent/src/lib.js create mode 100644 packages/webcomponent/vite.config.js create mode 100644 patches/@vue__repl@2.9.0.patch create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/buildComponentSchemas.js create mode 100644 scripts/buildMaterials.mjs create mode 100644 scripts/connection.mjs create mode 100644 scripts/copyToVscode.js create mode 100644 scripts/logger.mjs create mode 100644 scripts/setup.js create mode 100644 scripts/splitMaterials.mjs diff --git a/.build_config/build.sh b/.build_config/build.sh new file mode 100644 index 000000000..836100dea --- /dev/null +++ b/.build_config/build.sh @@ -0,0 +1,14 @@ +if [ ! $version ]; +then npm version 0.1.0-`date "+%Y%m%d%H%M%S"`; +else npm version $version; +fi + +npm install + +if [ $? -ne 0 ] +then + echo "[ERROR] build falid!" + exit 1 +fi +echo '[INFO] build completed' + diff --git a/.cid/lowcode-design-core.yml b/.cid/lowcode-design-core.yml new file mode 100644 index 000000000..de9333bcb --- /dev/null +++ b/.cid/lowcode-design-core.yml @@ -0,0 +1,23 @@ +version: 1.0 +name: tiny-engine +language: nodejs + +# 构建工具 +dependencies: + base: + nodejs: best + +# 构建机器 +machine: + standard: + euler: + - default + +# 构建脚本 +scripts: + - sh ./.build_config/build.sh + +# 构建产物 +artifacts: + npm_deploy: + - config_path: ./package.json diff --git a/.codecheck/check.yml b/.codecheck/check.yml new file mode 100644 index 000000000..7ecb34223 --- /dev/null +++ b/.codecheck/check.yml @@ -0,0 +1,11 @@ +version: 2.0 + +steps: + pre_codecheck: + - checkout + +tool_params: + secsolar: + source_dir: ./ + cmetrics: + exclude: vite.config.js|package.json|index.js|mockServer/assets diff --git a/.env.local b/.env.local new file mode 100644 index 000000000..a361a78c8 --- /dev/null +++ b/.env.local @@ -0,0 +1,5 @@ +SQL_HOST=localhost +SQL_PORT=3306 +SQL_USER=root +SQL_PASSWORD=admin +SQL_DATABASE=tiny_engine \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..997d732c1 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,9 @@ +.vscode +dist +public +package-lock.json +**/node_modules/** +tmp +temp +mockServer +packages/vue-generator/**/output/** diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..9d1f4572d --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,31 @@ +module.exports = { + env: { + browser: true, + es2015: true, + worker: true, + node: true, + jest: true + }, + extends: ['eslint:recommended', 'plugin:vue/vue3-essential'], + parser: 'vue-eslint-parser', + parserOptions: { + parser: '@babel/eslint-parser', + ecmaVersion: 'latest', + sourceType: 'module', + requireConfigFile: false, + babelOptions: { + parserOpts: { + plugins: ['jsx'] + } + } + }, + plugins: ['vue'], + rules: { + 'no-console': 'error', + 'no-debugger': 'error', + 'space-before-function-paren': 'off', + 'vue/multi-word-component-names': 'off', + 'no-use-before-define': 'error', + 'no-unused-vars': ['error', { ignoreRestSiblings: true, varsIgnorePattern: '^_', argsIgnorePattern: '^_' }] + } +} diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 000000000..b2afa9009 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,81 @@ +name: '🐛 Bug report' +description: Create a report to help us improve Tiny Engine +title: '🐛 [Bug]: ' +labels: ['🐛 bug'] +body: + - type: markdown + attributes: + value: | + Please fill out the following carefully in order to better fix the problem. + - type: input + id: Environment + attributes: + label: Environment + description: | + **Depending on your browser and operating system, websites may behave differently from one environment to another. Make sure your developers know your technical environment.** + placeholder: Please browser information. + validations: + required: true + - type: input + id: node-version + attributes: + label: Version + description: | + ### **Check if the issue is reproducible with the latest stable version.** + You can use the command `node -v` to view it + placeholder: latest + validations: + required: true + - type: input + id: tiny-vue-version + attributes: + label: Version + description: | + ### **Check if the issue is reproducible with the latest stable version.** + You can use the command `npm ls @opentiny/vue` to view it + placeholder: latest + validations: + required: true + - type: textarea + id: minimal-repo + attributes: + label: Link to minimal reproduction + description: | + **Provide a streamlined CodePen / CodeSandbox or GitHub repository link as much as possible. Please don't fill in a link randomly, it will only close your issue directly.** + placeholder: Please Input + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: Step to reproduce + description: | + **After the replay is turned on, what actions do we need to perform to make the bug appear? Simple and clear steps can help us locate the problem more quickly. Please clearly describe the steps of reproducing the issue. Issues without clear reproducing steps will not be repaired. If the issue marked with 'need reproduction' does not provide relevant steps within 7 days, it will be closed directly.** + placeholder: Please Input + validations: + required: true + - type: textarea + id: expected + attributes: + label: What is expected + placeholder: Please Input + - type: textarea + id: actually + attributes: + label: What is actually happening + placeholder: Please Input + - type: input + id: project-name + attributes: + label: What is your project name + description: We also welcome you to fill in more detailed project information in the following issue [#334](https://github.com/opentiny/tiny-engine/issues/334). + placeholder: Please Input + validations: + required: true + - type: textarea + id: additional-comments + attributes: + label: Any additional comments (optional) + description: | + **Some background / context of how you ran into this bug.** + placeholder: Please Input diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..157e35cd3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: Questions or need help + url: https://github.com/opentiny/tiny-engine/discussions + about: Add this WeChat(opentiny-official), we will invite you to the WeChat discussion group later. diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 000000000..d864f3dee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,31 @@ +name: ✨ Feature Request +description: Propose new features to @opentiny/tiny-engine to improve it. +title: '✨ [Feature]: ' +labels: ['✨ feature'] +body: + - type: textarea + id: feature-solve + attributes: + label: What problem does this feature solve + description: | + Explain your use case, context, and rationale behind this feature request. More importantly, what is the end user experience you are trying to build that led to the need for this feature? + placeholder: Please Input + validations: + required: true + - type: textarea + id: feature-api + attributes: + label: What does the proposed API look like + description: | + Describe how you propose to solve the problem and provide code samples of how the API would work once implemented. Note that you can use Markdown to format your code blocks. + placeholder: Please Input + validations: + required: true + - type: input + id: project-name + attributes: + label: What is your project name + description: We also welcome you to fill in more detailed project information in the following issue [#334](https://github.com/opentiny/tiny-engine/issues/334). + placeholder: Please Input + validations: + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..f4e2f220c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,52 @@ +English | [简体中文](https://github.com/opentiny/tiny-engine/blob/develop/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md) + +# PR + +## PR Checklist + +Please check if your PR fulfills the following requirements: + +- [ ] The commit message follows our [Commit Message Guidelines](https://github.com/opentiny/tiny-engine/blob/develop/CONTRIBUTING.md) +- [ ] Tests for the changes have been added (for bug fixes / features) +- [ ] Docs have been added / updated (for bug fixes / features) +- [ ] Built its own designer, fully self-validated + +## PR Type + +What kind of change does this PR introduce? + + + +- [ ] Bugfix +- [ ] Feature +- [ ] Code style update (formatting, local variables) +- [ ] Refactoring (no functional changes, no api changes) +- [ ] Build related changes +- [ ] CI related changes +- [ ] Documentation content changes +- [ ] Other... Please describe: + +## Background and solution + + +### What is the current behavior? + + + +Issue Number: N/A + +### What is the new behavior? + + +## Does this PR introduce a breaking change? + +- [ ] Yes +- [ ] No + + + +## Other information diff --git a/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md b/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md new file mode 100644 index 000000000..6ceff4df4 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md @@ -0,0 +1,52 @@ +[English](https://github.com/opentiny/tiny-engine/blob/develop/.github/PULL_REQUEST_TEMPLATE.md) | 简体中文 + +# PR + +## PR Checklist + +请检查您的 PR 是否满足以下要求: + +- [ ] commit message遵循我们的[提交贡献指南](https://github.com/opentiny/tiny-engine/blob/develop/CONTRIBUTING.md) +- [ ] 添加了更改内容的测试用例(用于bugfix/功能) +- [ ] 文档已添加/更新(用于bugfix/功能) +- [ ] 是否构建了自己的设计器,经过了充分的自验证 + +## PR 类型 + +这个PR的类型是? + +- [ ] 日常 bug 修复 +- [ ] 新特性支持 +- [ ] 代码风格优化 +- [ ] 重构 +- [ ] 构建优化 +- [ ] 测试用例 +- [ ] 文档更新 +- [ ] 分支合并 +- [ ] 其他改动(请补充) + + +## 需求背景和解决方案 + + + + +Issue Number: N/A + +### 修改前 + + +### 修改后 + +## 此PR是否含有 breaking change? + +- [ ] 是 +- [ ] 否 + + + +## Other information diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000..274543b22 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,26 @@ +changelog: + exclude: + labels: + - ignore-for-release + authors: + - allcontributors[bot] + categories: + - title: Breaking Changes 🛠 + labels: + - Semver-Major + - breaking-change + - title: Exciting New Features 🎉 + labels: + - Semver-Minor + - feature + - enhancement + - title: Bug Fixes 🐛 + labels: + - Semver-Patch + - bug + - title: Other Changes + labels: + - documentation + - refactoring + - unit-test + - ci diff --git a/.github/workflows/ai-code-review.yml b/.github/workflows/ai-code-review.yml new file mode 100644 index 000000000..29777ff3f --- /dev/null +++ b/.github/workflows/ai-code-review.yml @@ -0,0 +1,23 @@ +name: AI Code Review + +permissions: + contents: read + pull-requests: write + +on: + pull_request: + types: [opened, reopened, synchronize] + +jobs: + review: + runs-on: ubuntu-latest + steps: + - uses: anc95/ChatGPT-CodeReview@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + LANGUAGE: Chinese + OPENAI_API_ENDPOINT: https://api.openai.com/v1 + MODEL: gpt-3.5-turbo + MAX_TOKENS: 4096 + MAX_PATCH_LENGTH: 10000 diff --git a/.github/workflows/issue-translator.yml b/.github/workflows/issue-translator.yml new file mode 100644 index 000000000..8b3397bf7 --- /dev/null +++ b/.github/workflows/issue-translator.yml @@ -0,0 +1,18 @@ +name: 'issue-translator' +on: + issue_comment: + types: [created] + issues: + types: [opened] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: usthe/issues-translate-action@v2.7 + with: + IS_MODIFY_TITLE: false + # 非必须,决定是否需要修改issue标题内容 + # 若是true,则机器人账户@Issues-translate-bot必须拥有修改此仓库issue权限。可以通过邀请@Issues-translate-bot加入仓库协作者实现。 + CUSTOM_BOT_NOTE: Bot detected the issue body's language is not English, translate it automatically. + # 非必须,自定义机器人翻译的前缀开始内容。 diff --git a/.github/workflows/push-check.yml b/.github/workflows/push-check.yml new file mode 100644 index 000000000..7f0d4ed41 --- /dev/null +++ b/.github/workflows/push-check.yml @@ -0,0 +1,36 @@ +name: Push And Create PR Check + +on: + push: + branches: [] + pull_request: + branches: [develop,main] + +jobs: + push-check: + runs-on: ubuntu-latest # windows-latest || macos-latest + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 16 + + - name: Install pnpm + run: npm i -g pnpm + + - name: Install dependencies + run: pnpm i + + - name: Get changed files + id: get_changed_files + uses: tj-actions/changed-files@v40 + with: + files: | + **.js + **.vue + **.jsx + - name: Run ESLint + run: npx eslint ${{steps.get_changed_files.outputs.all_changed_files}} + - name: Run Build + run: pnpm run build:plugin && pnpm run build:alpha diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..3e3d94e59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +.DS_Store +node_modules +dist/ +package-lock.json +yarn.lock +pnpm-lock.yaml +lerna-debug.log + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +tmp +temp diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..9179da3dd --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,6 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +# npm run lint +npx lint-staged -q + diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000..06d519d56 --- /dev/null +++ b/.npmignore @@ -0,0 +1,23 @@ +.build_config +.cid +.codecheck +.husky +.vscode +# 只忽略根目录的 dist 文件夹 +/dist +test +node_modules +.editorconfig +.eslintignore +.eslintrc.js +.prettierignore +.prettierrc +jsconfig.json +package-lock.json + +# 忽略可能存在的其它编辑器文件夹 +.idea + +/packages/design-core/public/mock/* +**/**/tmp +**/**/temp \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..2f118daef --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +dist +package-lock.json +**/node_modules/** \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..d2baaec51 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +semi: false +singleQuote: true +printWidth: 120 +trailingComma: 'none' +endOfLine: 'auto' \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..3f29a6979 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# 更新日志 + +## v1.0.0-alpha.0 + +`2023/09/25` + +### 📢 破坏性变更 + +无 + +### ✨ 新特性 + +- 首个版本提交 + +### 🐞 缺陷修复 + +无 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..3070a8cce --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,80 @@ +# Contributing + +We are glad that you are willing to contribute to the TinyEngine open source project. There are many forms of contribution. You can choose one or more of them based on your strengths and interests: + +- Report [new defect](https://github.com/opentiny/tiny-engine/issues/new?template=bug-report.yml). +- Provide more detailed information for the [existing defects](https://github.com/opentiny/tiny-engine/labels/bug), such as supplementary screenshots, more detailed reproduction steps, minimum reproducible demo links, etc. +- Submit Pull requests to fix typos in the document or make the document clearer and better. +- Add the official assistant WeChat `opentiny-official` and join the technical exchange group to participate in the discussion. + +When you personally use the TinyEngine component library and participate in many of the above contributions, as you become familiar with TinyEngine , you can try to do something more challenging, such as: + +- Fix the defect. You can start with [Good-first issue](https://github.com/opentiny/tiny-engine/labels/good%20first%20issue). +- Implementation of new features +- Complete unit tests. +- Translate documents +- Participate in code review. + +## Bug Reports + +If you encounter problems in the process of using TinyEngine components, you are welcome to submit Issue to us. Before submitting Issue, please read the relevant [official documentation](https://opentiny.design/tiny-engine) carefully to confirm whether this is a defect or an unimplemented function. + +If it is a defect, select [Bug report](https://github.com/opentiny/tiny-engine/issues/new?template=bug-report.yml) template when creating a new Issue. The title follows the format of `[toolkitName/pluginName/EngineCore] defect description`. For example: `[tiny-engine-toolbar-refresh] The refresh function cannot be used`. + +Issue that reports defects mainly needs to fill in the following information: + +- Version numbers of `tiny-engine` and `node`. +- The performance of the defect can be illustrated by screenshot, and if there is an error, the error message can be posted. +- Defect reproduction step, preferably with a minimum reproducible demo link. + +If it is a new feature, select [Feature request](https://github.com/opentiny/tiny-engine/issues/new?template=feature-request.yml) template. The title follows the format of `[toolkitName/pluginName/EngineCore] new feature description`. For example: `[tiny-engine-theme] New Blue Theme`. + +The following information is required for the Issue of the new feature: + +- What problems does this feature mainly solve for users? +- What is the api of this feature? + +## Pull Requests + +Before submitting pull request, please make sure that your submission is in line with the overall plan of TinyEngine. Generally, issues that marked as [bug](https://github.com/opentiny/tiny-engine/labels/bug) are encouraged to submit pull requests. If you are not sure, you can create a [Discussion](https://github.com/opentiny/tiny-engine/discussions) for discussion. + +Local startup steps: + +- Click the Fork button in the upper right corner of the [TinyEngine](https://github.com/opentiny/tiny-engine) code repository to fork the upstream warehouse to the personal warehouse. +- Clone personal warehouse to local +- Run `npm install` under the TinyEngine root directory to install node dependencies. +- Run `npm install` under the TinyEngine mockServer to install node dependencies +- Run `npm run serve` under the TinyEngine root directory, and then `run npm run dev` in the mockServer directory to start local development. + +```shell +# username indicates the user name. Replace it before running the command. +git clone git@github.com:username/tiny-engine.git +cd tiny-engine +git remote add upstream git@github.com:opentiny/tiny-engine.git +pnpm i + +# Start the project. +$ pnpm dev + +``` + +To submit a PR: + +- Create a new branch `git checkout -b username/feature1`. The name of the branch should be `username/feat-xxx` / `username/fix-xxx`. +- Local coding. +- Submit according to [Commit Message Format](https://www.conventionalcommits.org/zh-hans/v1.0.0/) specification. PR that do not conform to the submission specification will not be merged. +- Submit to remote repository: `git push origin branchName`. +- (Optional) Synchronize upstream repository dev branch latest code: `git pull upstream develop`. +- Open the [Pull requests](https://github.com/opentiny/tiny-engine/pulls) link of the TinyEngine code repository and click the New pull request button to submit the PR. +- Project Committer conducts Code Review and makes comments. +- The PR author adjusts the code according to the opinion. Please note that when a branch initiates PR, the subsequent commit will be synchronized automatically, and there is no need to resubmit the PR. +- Project administrator merges PR. + +The contribution process is over, thank you for your contribution! + +## Join the open source community + +If you are interested in our open source projects, please join our open source community in the following ways. + +- Add the official assistant WeChat: opentiny-official, join our technical exchange group +- Join the mailing list: opentiny@googlegroups.com diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md new file mode 100644 index 000000000..6729ec585 --- /dev/null +++ b/CONTRIBUTING.zh-CN.md @@ -0,0 +1,79 @@ +# 贡献指南 + +很高兴你有意愿参与 TinyEngine 开源项目的贡献,参与贡献的形式有很多种,你可以根据自己的特长和兴趣选择其中的一个或多个: + +- 报告[新缺陷](https://github.com/opentiny/tiny-engine/issues/new?template=bug-report.yml) +- 为[已有缺陷](https://github.com/opentiny/tiny-engine/labels/bug)提供更详细的信息,比如补充截图、提供更详细的复现步骤、提供最小可复现 demo 链接等 +- 提交 Pull requests 修复文档中的错别字或让文档更清晰和完善 +- 添加官方小助手微信 opentiny-official,加入技术交流群参与讨论 + +当你亲自使用 TinyEngine 组件库,并参与多次以上形式的贡献,对 TinyEngine 逐渐熟悉之后,可以尝试做一些更有挑战的事情,比如: + +- 修复缺陷,可以先从 [Good-first issue](https://github.com/opentiny/tiny-engine/labels/good%20first%20issue) 开始 +- 实现新特性 +- 完善单元测试 +- 翻译文档 +- 参与代码检视 + +## 提交 Issue + +如果你在使用 TinyEngine 组件过程中遇到问题,欢迎给我们提交 Issue,提交 Issue 之前,请先仔细阅读相关的[官方文档](https://opentiny.design/tiny-engine),确认这是一个缺陷还是尚未实现的功能。 + +如果是一个缺陷,创建新 Issue 时选择 [Bug report](https://github.com/opentiny/tiny-engine/issues/new?template=bug-report.yml) 模板,标题遵循 `[toolkitName/pluginName/EngineCore]缺陷简述` 的格式,比如:`[tiny-engine-toolbar-refresh] 刷新功能无法使用`。 + +报告缺陷的 Issue 主要需要填写以下信息: + +- tiny-engine 和 node 的版本号 +- 缺陷的表现,可截图辅助说明,如果有报错可贴上报错信息 +- 缺陷的复现步骤,最好能提供一个最小可复现 demo 链接 + +如果是一个新特性,则选择 [Feature request](https://github.com/opentiny/tiny-engine/issues/new?template=feature-request.yml) 模板,标题遵循 `[toolkitName/pluginName/EngineCore]新特性简述` 的格式,比如:`[tiny-engine-theme] 新增蓝色主题`。 + +新特性的 Issue 主要需要填写以下信息: + +- 该特性主要解决用户的什么问题 +- 该特性的 api 是什么样的 + +## 提交 PR + +提交 PR 之前,请先确保你提交的内容是符合 TinyEngine 整体规划的,一般已经标记为 [bug](https://github.com/opentiny/tiny-engine/labels/bug) 的 Issue 是鼓励提交 PR 的,如果你不是很确定,可以创建一个 [Discussion](https://github.com/opentiny/tiny-engine/discussions) 进行讨论。 + +本地启动步骤: + +- 点击 [TinyEngine](https://github.com/opentiny/tiny-engine) 代码仓库右上角的 Fork 按钮,将上游仓库 Fork 到个人仓库 +- Clone 个人仓库到本地 +- 在 TinyEngine 根目录下运行 `pnpm i`, 安装依赖 +- 在 TinyEngine 根目录下运行 `pnpm dev`,启动本地开发 + +```shell +# username 为用户名,执行前请替换 +git clone git@github.com:username/tiny-engine.git +cd tiny-engine +git remote add upstream git@github.com:opentiny/tiny-engine.git +pnpm i + +# 启动项目 +$ pnpm dev + +``` + +提交 PR 的步骤: + +- 创建新分支 `git checkout -b username/feature1`,分支名字建议为 `username/feat-xxx` / `username/fix-xxx` +- 本地编码 +- 遵循 Commit Message Format 规范进行提交,不符合提交规范的 PR 将不会被合并 +- 提交到远程仓库:git push origin branchName +- (可选)同步上游仓库 develop 分支最新代码:git pull upstream develop +- 打开 TinyEngine 代码仓库的 [Pull requests](https://github.com/opentiny/tiny-engine/pulls) 链接,点击 New pull request 按钮提交 PR +- 项目 Committer 进行 Code Review,并提出意见 +- PR 作者根据意见调整代码,请注意一个分支发起了 PR 后,后续的 commit 会自动同步,无需重新提交 PR +- 项目管理员合并 PR + +贡献流程结束,感谢你的贡献! + +## 加入开源社区 + +如果你对我们的开源项目感兴趣,欢迎通过以下方式加入我们的开源社区。 + +- 添加官方小助手微信:opentiny-official,加入我们的技术交流群 +- 加入邮件列表:opentiny@googlegroups.com \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..91221a793 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2023 - present TinyEngine Authors. +Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 19869b476..57af470d1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,108 @@ -# lowcode-design-core +

+ + OpenTiny Logo + +

+

TinyEngine enables developers to customize low-code platforms, build low-bit platforms online in real time, and support secondary development or integration of low-bit platform capabilities.

+ +English | [简体中文](README.zh-CN.md) + +🌈 Features: + +- Cross-end cross-frame front-end components +- Supports online real-time construction, secondary development, or being integrated. +- Directly generate deployable source code without engine support. +- Allows access to third-party components and customized extension plug-ins. +- Supports high-code and low-code, and hybrid development and deployment of applications. +- The platform accesses AI big model capabilities to help developers build applications. + +## Documentation + +- intro:https://opentiny.design/tiny-engine#/home +- tutorial:https://opentiny.design/tiny-engine#/help-center/course/engine +- playground:https://opentiny.design/tiny-engine#/tiny-engine-editor + +## Development + +### Dependencies required for installation + +```sh +$ pnpm install +``` + +### Local development: Start the local mock server and use the mock data of the local mock server. + +```sh +$ pnpm dev +``` + +## Local development, directly connected to the local tiny-engine-webservice server + +1. Start tiny-engine-data-center + +2. Start tiny-engine-webservice + +3. Modify the origin value in `vite.config.js` in the `packages/design-core/` directory of the tiny-engine project to be the address port of your local webService project (the webService port defaults to 7011), such as: + +Modify port + + +### Materials Synchronization [Solution](https://opentiny.design/tiny-engine#/help-center/course/engine/56) + +```sh +$ pnpm splitMaterials +``` + +```sh +$ pnpm buildMaterials +``` + +Open a browser: `http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4MjvqoVj8OVsc` +`url search` Parameters: + +- `type=app` Application type +- `id=xxx` Application ID +- `tenant=xxx` Organization ID +- `pageid=xxx` Page ID + +## Build + +```sh +# Build all plug-ins first +pnpm build:plugin + +# Build Designer +pnpm build:alpha or build:prod + +``` +The folder where the product is located after building +``` + tiny-engine/packages/design-core/dist/ +``` + +## Milestones + +```mermaid +gantt +dateFormat YYYY-MM-DD +axisFormat %Y-%m-%d + + 1.0.0-beta.x version :active,2023-09-25, 2024-03-31 + 1.0.0-rc version : 2024-04-01, 2024-06-30 + 1.0.0 version : 2024-07-01, 2024-07-31 + +``` + +## 🤝 Participation and Contribution + +If you are interested in our open source project, please join us! 🎉 + +Please read the [Contribution Guide](CONTRIBUTING.md) before participating in the contribution. + +- Add official assistant WeChat opentiny-official and join the technical exchange group +- Join the mailing list opentiny@googlegroups.com + +## License + +[MIT](LICENSE) diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 000000000..747f286c8 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,108 @@ +

+ + OpenTiny Logo + +

+ +

TinyEngine低代码引擎使能开发者定制低代码平台,支持在线实时构建低码平台,支持二次开发或集成低码平台能力

+ +[English](README.md) | 简体中文 + +🌈 特性: + +- 跨端跨框架前端组件 +- 支持在线实时构建、支持二次开发或被集成 +- 直接生成可部署的源码,运行时无需引擎支撑 +- 允许接入第三方组件、允许定制扩展插件 +- 支持高代码与低代码,混合开发部署应用 +- 平台接入 AI 大模型能力,辅助开发者构建应用 + +## 文档 + +- 介绍:https://opentiny.design/tiny-engine#/home +- 使用文档:https://opentiny.design/tiny-engine#/help-center/course/engine +- 演示应用:https://opentiny.design/tiny-engine#/tiny-engine-editor + +## 开发 + +### 安装所需的依赖 + +```sh +$ pnpm install +``` + +### 本地开发,启动本地 mock 服务器,使用本地 mock 服务器的 mock 数据 + +```sh +$ pnpm dev +``` + +### 本地开发,直连本地的tiny-engine-webservice服务端 + +1. 启动 tiny-engine-data-center + +2. 启动 tiny-engine-webservice + +3. 修改 tiny-engine 项目 `packages/design-core/` 目录下 `vite.config.js` 中origin的值为自己本地webService项目的地址端口(webService端口默认为7011),如: + +修改端口 + + +### 物料同步[方案](https://opentiny.design/tiny-engine#/help-center/course/engine/56) + +```sh +$ pnpm splitMaterials +``` + +```sh +$ pnpm buildMaterials +``` + +浏览器打开:`http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4MjvqoVj8OVsc` +`url search`参数: + +- `type=app` 应用类型 +- `id=xxx` 应用 ID +- `tenant=xxx` 组织 ID +- `pageid=xxx` 页面 ID + +## 构建 + +```sh +# 先构建所有插件 +pnpm run build:plugin + +# 构建设计器 +pnpm run build:alpha 或 build:prod + +``` +构建后产物所在文件夹 +``` + tiny-engine/packages/design-core/dist/ +``` + +## 里程碑 + +```mermaid +gantt +dateFormat YYYY-MM-DD +axisFormat %Y-%m-%d + + 1.0.0-beta.x version :active,2023-09-25, 2024-03-31 + 1.0.0-rc version : 2024-04-01, 2024-06-30 + 1.0.0 version : 2024-07-01, 2024-07-31 + +``` + +## 🤝 参与贡献 + +如果你对我们的开源项目感兴趣,欢迎加入我们!🎉 + +参与贡献之前请先阅读[贡献指南](CONTRIBUTING.zh-CN.md)。 + +- 添加官方小助手微信 opentiny-official,加入技术交流群 +- 加入邮件列表 opentiny@googlegroups.com + +## 开源协议 + +[MIT](LICENSE) diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 000000000..c366326a1 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,73 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "jsx": "react", + "paths": { + "@/*": ["packages/*"], + "@opentiny/tiny-engine-canvas": ["packages/canvas/src/index.js"], + "@opentiny/tiny-engine-controller": ["packages/controller/src/index"], + "@opentiny/tiny-engine-plugin-materials": ["packages/plugins/materials/index"], + "@opentiny/tiny-engine-plugin-data": ["packages/plugins/data/index"], + "@opentiny/tiny-engine-plugin-script": ["packages/plugins/script/index"], + "@opentiny/tiny-engine-plugin-tree": ["packages/plugins/tree/index"], + "@opentiny/tiny-engine-plugin-help": ["packages/plugins/help/index"], + "@opentiny/tiny-engine-plugin-schema": ["packages/plugins/schema/index"], + "@opentiny/tiny-engine-plugin-page": ["packages/plugins/page/index"], + "@opentiny/tiny-engine-plugin-i18n": ["packages/plugins/i18n/index"], + "@opentiny/tiny-engine-plugin-bridge": ["packages/plugins/bridge/index"], + "@opentiny/tiny-engine-setting-events": ["packages/settings/events/index"], + "@opentiny/tiny-engine-setting-props": ["packages/settings/props/index"], + "@opentiny/tiny-engine-common": ["packages/common/index"], + "@opentiny/tiny-engine-setting-styles": ["packages/settings/styles/index"], + "@opentiny/tiny-engine-toolbar-breadcrumb": ["packages/toolbars/breadcrumb/index"], + "@opentiny/tiny-engine-toolbar-fullscreen": ["packages/toolbars/fullscreen/index"], + "@opentiny/tiny-engine-toolbar-lang": ["packages/toolbars/lang/index"], + "@opentiny/tiny-engine-toolbar-layout": ["packages/toolbars/layout/index"], + "@opentiny/tiny-engine-toolbar-checkinout": ["packages/toolbars/lock/index"], + "@opentiny/tiny-engine-toolbar-logo": ["packages/toolbars/logo/index"], + "@opentiny/tiny-engine-toolbar-media": ["packages/toolbars/media/index"], + "@opentiny/tiny-engine-toolbar-preview": ["packages/toolbars/preview/index"], + "@opentiny/tiny-engine-toolbar-generate-vue": ["packages/toolbars/generate-vue/index"], + "@opentiny/tiny-engine-toolbar-clean": ["packages/toolbars/clean/index"], + "@opentiny/tiny-engine-toolbar-save": ["packages/toolbars/save/index"], + "tiny-engine-canvas": ["packages/canvas/index"], + "@opentiny/tiny-engine-theme-dark": ["packages/theme/dark/index.less"], + "@opentiny/tiny-engine-theme-light": ["packages/theme/light/index.less"], + "@opentiny/tiny-engine-svgs": ["packages/svgs/index"], + "@opentiny/tiny-engine-http": ["packages/http/index"], + "@opentiny/tiny-engine-controller/*": ["packages/controller/src/*"], + "@opentiny/tiny-engine-plugin-materials/*": ["packages/plugins/materials/*"], + "@opentiny/tiny-engine-plugin-data/*": ["packages/plugins/data/*"], + "@opentiny/tiny-engine-plugin-script/*": ["packages/plugins/script/*"], + "@opentiny/tiny-engine-plugin-tree/*": ["packages/plugins/tree/*"], + "@opentiny/tiny-engine-plugin-help/*": ["packages/plugins/help/*"], + "@opentiny/tiny-engine-plugin-schema/*": ["packages/plugins/schema/*"], + "@opentiny/tiny-engine-plugin-page/*": ["packages/plugins/page/*"], + "@opentiny/tiny-engine-plugin-i18n/*": ["packages/plugins/i18n/*"], + "@opentiny/tiny-engine-plugin-bridge/*": ["packages/plugins/bridge/*"], + "@opentiny/tiny-engine-setting-events/*": ["packages/settings/events/*"], + "@opentiny/tiny-engine-setting-props/*": ["packages/settings/props/*"], + "@opentiny/tiny-engine-common/*": ["packages/common/*"], + "@opentiny/tiny-engine-setting-styles/*": ["packages/settings/styles/*"], + "@opentiny/tiny-engine-toolbar-breadcrumb/*": ["packages/toolbars/breadcrumb/*"], + "@opentiny/tiny-engine-toolbar-fullscreen/*": ["packages/toolbars/fullscreen/*"], + "@opentiny/tiny-engine-toolbar-lang/*": ["packages/toolbars/lang/*"], + "@opentiny/tiny-engine-toolbar-layout/*": ["packages/toolbars/layout/*"], + "@opentiny/tiny-engine-toolbar-checkinout/*": ["packages/toolbars/lock/*"], + "@opentiny/tiny-engine-toolbar-logo/*": ["packages/toolbars/logo/*"], + "@opentiny/tiny-engine-toolbar-media/*": ["packages/toolbars/media/*"], + "@opentiny/tiny-engine-toolbar-preview/*": ["packages/toolbars/preview/*"], + "@opentiny/tiny-engine-toolbar-clean/*": ["packages/toolbars/clean/*"], + "@opentiny/tiny-engine-toolbar-save/*": ["packages/toolbars/save/*"], + "@opentiny/tiny-engine-theme-dark/*": ["packages/theme/dark/*"], + "@opentiny/tiny-engine-theme-light/*": ["packages/theme/light/*"], + "@opentiny/tiny-engine-svgs/*": ["packages/svgs/*"], + "@opentiny/tiny-engine-http/*": ["packages/http/*"], + "@opentiny/tiny-engine-utils": ["packages/utils/src/index.js"], + "@opentiny/tiny-engine-webcomponent-core": ["packages/webcomponent/src/lib"], + "@opentiny/tiny-engine-i18n-host": ["packages/i18n/src/lib"] + } + }, + "include": ["packages/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..74c0687b9 --- /dev/null +++ b/lerna.json @@ -0,0 +1,15 @@ +{ + "command": { + "version": { + "message": "chore(release): publish" + } + }, + "useNx": false, + "version": "independent", + "npmClient": "pnpm", + "publish": { + "npmClient": "pnpm" + }, + "ignoreChanges": ["**/*.md", "**/test/**", ".npmrc"], + "granularPathspec": false +} diff --git a/lint-staged.config.js b/lint-staged.config.js new file mode 100644 index 000000000..d673344c2 --- /dev/null +++ b/lint-staged.config.js @@ -0,0 +1,4 @@ +module.exports = { + './packages/**/**.{js,vue,jsx}': 'eslint', + './packages/**/**.{vue,js,ts,html,json,less}': 'prettier --write' +} diff --git a/logo.svg b/logo.svg new file mode 100644 index 000000000..59d1b063b --- /dev/null +++ b/logo.svg @@ -0,0 +1,44 @@ + + + logo-top + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenTiny + + + + + + + + + + + + + \ No newline at end of file diff --git a/mockServer/.babelrc b/mockServer/.babelrc new file mode 100644 index 000000000..f9f35a2e6 --- /dev/null +++ b/mockServer/.babelrc @@ -0,0 +1,21 @@ +{ + "presets": [ + ["@babel/preset-env", { + "targets": { + "node": "current" + } + }] + ], + "env": { + "test": { + "presets": [ + ["@babel/preset-env", { + "targets": { + "node": "current" + } + }] + ] + } + }, + "plugins": ["@babel/plugin-transform-runtime"] +} \ No newline at end of file diff --git a/mockServer/.editorconfig b/mockServer/.editorconfig new file mode 100644 index 000000000..9d08a1a82 --- /dev/null +++ b/mockServer/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/mockServer/.eslintignore b/mockServer/.eslintignore new file mode 100644 index 000000000..e59172bdf --- /dev/null +++ b/mockServer/.eslintignore @@ -0,0 +1,3 @@ +build/*.js +assets/*.js +test/**/*.js \ No newline at end of file diff --git a/mockServer/.eslintrc.js b/mockServer/.eslintrc.js new file mode 100644 index 000000000..997ea0e78 --- /dev/null +++ b/mockServer/.eslintrc.js @@ -0,0 +1,36 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + ecmaVersion: 2017, //指定ECMAScript支持的版本,6为ES6,这里为了兼容async和await,设置为2017 + sourceType: 'module' + }, + extends: 'standard', + plugins: ['html', 'promise'], + env: { + node: true + }, + rules: { + // allow console + 'no-console': 0, + // allow paren-less arrow functions + 'arrow-parens': 0, + // allow async-await + 'generator-star-spacing': 0, + // allow debugger during development + 'no-debugger': 0, + camelcase: 'off' + } +} diff --git a/mockServer/.gitignore b/mockServer/.gitignore new file mode 100644 index 000000000..89e660912 --- /dev/null +++ b/mockServer/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log +test/unit/coverage +test/e2e/reports +selenium-debug.log +.idea/ +package-lock.json \ No newline at end of file diff --git a/mockServer/.jsbeautifyrc b/mockServer/.jsbeautifyrc new file mode 100644 index 000000000..f4b0e8c71 --- /dev/null +++ b/mockServer/.jsbeautifyrc @@ -0,0 +1,11 @@ +{ + "indent_size": 2, + "indent_char": " ", + "other": " ", + "indent_level": 0, + "indent_with_tabs": false, + "preserve_newlines": true, + "max_preserve_newlines": 2, + "jslint_happy": true, + "indent_handlebars": true +} diff --git a/mockServer/assets/css/0.1.20/index.css b/mockServer/assets/css/0.1.20/index.css new file mode 100644 index 000000000..9a0397a1b --- /dev/null +++ b/mockServer/assets/css/0.1.20/index.css @@ -0,0 +1,24981 @@ +[class*='tiny-'] { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +[class*='tiny-'] :after, +[class*='tiny-'] :before { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +[class*='tiny-'] a { + cursor: pointer; + background-image: none; + text-decoration: none; + outline: 0; +} +[class*='tiny-'] a:active, +[class*='tiny-'] a:focus, +[class*='tiny-'] a:hover { + outline: 0; + text-decoration: none; +} +[class*='tiny-'] dd, +[class*='tiny-'] dl, +[class*='tiny-'] dt, +[class*='tiny-'] li, +[class*='tiny-'] ol, +[class*='tiny-'] td, +[class*='tiny-'] th, +[class*='tiny-'] ul { + margin: 0; + padding: 0; +} +[class*='tiny-'] ol, +[class*='tiny-'] ul { + list-style: none; +} +[class*='tiny-'] audio, +[class*='tiny-'] canvas, +[class*='tiny-'] video { + display: inline-block; +} +[class*='tiny-'] audio:not([controls]) { + display: none; + height: 0; +} +[class*='tiny-'] mark { + background: #ff0; + color: #000; +} +[class*='tiny-'] pre { + white-space: pre-wrap; +} +[class*='tiny-'] sub, +[class*='tiny-'] sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +[class*='tiny-'] sup { + top: -0.5em; +} +[class*='tiny-'] sub { + bottom: -0.25em; +} +[class*='tiny-'] fieldset { + border: 1px solid silver; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +[class*='tiny-'] legend { + border: 0; + padding: 0; +} +[class*='tiny-'] input::-ms-clear, +[class*='tiny-'] input::-ms-reveal { + display: none; +} +[class*='tiny-'] button::-moz-focus-inner, +[class*='tiny-'] input::-moz-focus-inner { + border: 0; + padding: 0; +} +[class*='tiny-'] textarea { + overflow: auto; + vertical-align: top; +} +[class*='tiny-'] table { + border-collapse: collapse; + border-spacing: 0; +} +[class*='tiny-'] .tiny-hide { + display: none; +} +[class*='tiny-'] .popper__arrow, +[class*='tiny-'] .popper__arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +@media (min-width: 768px) { + [class*='tiny-'] ::-webkit-scrollbar { + width: 4px; + height: 4px; + } + [class*='tiny-'] ::-webkit-scrollbar-track-piece { + background: #fafafa; + } + [class*='tiny-'] ::-webkit-scrollbar-thumb { + background: #bfbfbf; + border-radius: 6px; + } + [class*='tiny-'] ::-webkit-scrollbar-thumb:hover { + background: #999; + } + [class*='tiny-'] ::-webkit-scrollbar-thumb:active { + background: #999; + } + [class*='tiny-'] .tiny-scrollbar::-webkit-scrollbar { + width: 8px; + height: 8px; + } + [class*='tiny-'] .tiny-scrollbar::-webkit-scrollbar-track-piece { + background: 0 0; + border: 0; + } + [class*='tiny-'] .tiny-scrollbar::-webkit-scrollbar-thumb { + background: #bfbfbf; + border-radius: 4px; + } + [class*='tiny-'] .tiny-scrollbar::-webkit-scrollbar-thumb:hover { + background: #999; + } + [class*='tiny-'] .tiny-scrollbar::-webkit-scrollbar-thumb:active { + background: #999; + } + [class*='tiny-'] .tiny-min-scrollbar::-webkit-scrollbar { + width: 4px; + height: 4px; + } + [class*='tiny-'] .tiny-min-scrollbar::-webkit-scrollbar-track-piece { + background: 0 0; + border: 0; + } + [class*='tiny-'] .tiny-min-scrollbar::-webkit-scrollbar-thumb { + background: #bfbfbf; + border-radius: 2px; + } + [class*='tiny-'] .tiny-min-scrollbar::-webkit-scrollbar-thumb:hover { + background: #999; + } + [class*='tiny-'] .tiny-min-scrollbar::-webkit-scrollbar-thumb:active { + background: #999; + } +} +:root { + --ti-base-color-white: #fff; + --ti-base-color-brand-6: #5e7ce0; + --ti-base-color-brand-8: #344899; + --ti-base-color-brand-7: #526ecc; + --ti-base-color-brand-5: #7693f5; + --ti-base-color-brand-4: #96adfa; + --ti-base-color-brand-3: #beccfa; + --ti-base-color-brand-2: #e9edfa; + --ti-base-color-brand-1: #f2f5fc; + --ti-base-color-common-9: #181818; + --ti-base-color-common-8: #282b33; + --ti-base-color-common-7: #252b3a; + --ti-base-color-common-6: #464c59; + --ti-base-color-common-5: #575d6c; + --ti-base-color-common-4: #5c6173; + --ti-base-color-common-3: #8a8e99; + --ti-base-color-common-2: #adb0b8; + --ti-base-color-common-1: #dfe1e6; + --ti-base-color-bg-9: #b12220; + --ti-base-color-bg-8: #c7000b; + --ti-base-color-bg-7: #d64a52; + --ti-base-color-bg-6: #eef0f5; + --ti-base-color-bg-5: #f5f5f6; + --ti-base-color-bg-4: #fafafa; + --ti-base-color-bg-3: #ffffff; + --ti-base-color-bg-2: #ffffff; + --ti-base-color-bg-1: #ffffff; + --ti-base-color-error-4: #de504e; + --ti-base-color-error-3: #f66f6a; + --ti-base-color-error-2: #ffbcba; + --ti-base-color-error-1: #ffeeed; + --ti-base-color-success-4: #3ac295; + --ti-base-color-success-3: #50d4ab; + --ti-base-color-success-2: #acf2dc; + --ti-base-color-success-1: #edfff9; + --ti-base-color-warn-5: #e37d29; + --ti-base-color-warn-4: #fa9841; + --ti-base-color-warn-3: #fac20a; + --ti-base-color-warn-2: #ffd0a6; + --ti-base-color-warn-1: #fff3e8; + --ti-base-color-prompt-4: var(--ti-base-color-brand-7); + --ti-base-color-prompt-3: var(--ti-base-color-brand-6); + --ti-base-color-prompt-2: var(--ti-base-color-brand-3); + --ti-base-color-prompt-1: #ebf6ff; + --ti-base-color-prompt-icon-from: #7769e8; + --ti-base-color-prompt-icon-to: #58bbff; + --ti-base-color-icon-info: #6cbfff; + --ti-base-color-data-3: #a6dd82; + --ti-base-color-data-4: #f3689a; + --ti-base-color-data-5: #a97af8; + --ti-base-color-transparent: transparent; + --ti-common-color-success: var(--ti-base-color-success-3); + --ti-common-color-text-success: var(--ti-base-color-success-4); + --ti-common-color-success-bg: var(--ti-base-color-success-1); + --ti-common-color-success-border: var(--ti-base-color-success-2); + --ti-common-color-error: var(--ti-base-color-error-3); + --ti-common-color-error-text: var(--ti-base-color-error-4); + --ti-common-color-error-bg: var(--ti-base-color-error-1); + --ti-common-color-error-border: var(--ti-base-color-error-3); + --ti-common-color-error-border-secondary: var(--ti-base-color-error-2); + --ti-common-color-info: var(--ti-base-color-info-normal); + --ti-common-color-info-text: var(--ti-base-color-common-7); + --ti-common-color-info-bg: rgba(51, 51, 51, 0.06); + --ti-common-color-info-border: #d3d4d6; + --ti-common-color-warn: var(--ti-base-color-warn-4); + --ti-common-color-warn-text: var(--ti-base-color-warn-5); + --ti-common-color-warn-bg: var(--ti-base-color-warn-1); + --ti-common-color-warn-border: var(--ti-base-color-warn-2); + --ti-common-color-warn-secondary: var(--ti-base-color-warn-3); + --ti-common-color-prompt: var(--ti-base-color-prompt-3); + --ti-common-color-prompt-text: var(--ti-base-color-prompt-4); + --ti-common-color-prompt-bg: var(--ti-base-color-prompt-1); + --ti-common-color-prompt-border: var(--ti-base-color-prompt-2); + --ti-common-color-prompt-icon-from: var(--ti-base-color-prompt-icon-from); + --ti-common-color-prompt-icon-to: var(--ti-base-color-prompt-icon-to); + --ti-common-color-text-primary: var(--ti-base-color-common-7); + --ti-common-color-text-secondary: var(--ti-base-color-common-5); + --ti-common-color-text-weaken: var(--ti-base-color-common-3); + --ti-common-color-text-disabled: var(--ti-base-color-common-2); + --ti-common-color-text-darkbg: var(--ti-base-color-common-2); + --ti-common-color-text-darkbg-disabled: var(--ti-base-color-common-5); + --ti-common-color-text-link: var(--ti-base-color-brand-7); + --ti-common-color-text-link-hover: var(--ti-base-color-brand-8); + --ti-common-color-text-link-darkbg: var(--ti-base-color-brand-4); + --ti-common-color-text-link-darkbg-hover: var(--ti-base-color-brand-3); + --ti-common-color-text-highlight: var(--ti-base-color-brand-7); + --ti-common-color-text-white: var(--ti-base-color-white); + --ti-common-color-text-gray: var(--ti-base-color-white); + --ti-common-color-text-gray-disabled: var(--ti-base-color-common-4); + --ti-common-color-text-important: var(--ti-base-color-error-4); + --ti-common-color-icon-normal: var(--ti-base-color-common-5); + --ti-common-color-icon-hover: var(--ti-base-color-brand-6); + --ti-common-color-icon-active: var(--ti-base-color-brand-6); + --ti-common-color-icon-disabled: var(--ti-base-color-common-2); + --ti-common-color-icon-white: var(--ti-base-color-white); + --ti-common-color-icon-graybg-normal: var(--ti-base-color-common-2); + --ti-common-color-icon-graybg-hover: var(--ti-base-color-brand-6); + --ti-common-color-icon-graybg-active: var(--ti-base-color-brand-6); + --ti-common-color-icon-graybg-disabled: var(--ti-base-color-common-1); + --ti-common-color-icon-darkbg-normal: var(--ti-base-color-common-2); + --ti-common-color-icon-darkbg-hover: var(--ti-base-color-brand-5); + --ti-common-color-icon-darkbg-active: var(--ti-base-color-brand-5); + --ti-common-color-icon-darkbg-disabled: var(--ti-base-color-common-5); + --ti-common-color-icon-info: var(--ti-base-color-icon-info); + --ti-common-color-line-normal: var(--ti-base-color-common-2); + --ti-common-color-line-hover: var(--ti-base-color-common-5); + --ti-common-color-line-active: var(--ti-base-color-brand-6); + --ti-common-color-line-disabled: var(--ti-base-color-common-1); + --ti-common-color-line-dividing: var(--ti-base-color-common-1); + --ti-common-color-dash-line-normal: var(--ti-base-color-common-5); + --ti-common-color-dash-line-hover: var(--ti-base-color-brand-7); + --ti-common-color-bg-normal: var(--ti-base-color-bg-6); + --ti-common-color-bg-emphasize: var(--ti-base-color-brand-6); + --ti-common-color-bg-disabled: var(--ti-base-color-bg-5); + --ti-common-color-bg-hover: var(--ti-base-color-brand-8); + --ti-common-color-bg-gray: var(--ti-base-color-bg-4); + --ti-common-color-bg-secondary: var(--ti-base-color-common-2); + --ti-common-bg-primary: var(--ti-base-color-bg-8); + --ti-common-bg-primary-hover: var(--ti-base-color-bg-7); + --ti-common-bg-primary-active: var(--ti-base-color-bg-9); + --ti-common-bg-minor: var(--ti-base-color-bg-2); + --ti-common-bg-minor-hover: var(--ti-base-color-bg-1); + --ti-common-bg-minor-active: var(--ti-base-color-bg-3); + --ti-common-color-bg-white-normal: var(--ti-base-color-white); + --ti-common-color-bg-white-emphasize: var(--ti-base-color-brand-1); + --ti-common-color-bg-light-normal: var(--ti-base-color-brand-2); + --ti-common-color-bg-light-emphasize: var(--ti-base-color-brand-3); + --ti-common-color-bg-dark-normal: var(--ti-base-color-common-6); + --ti-common-color-bg-dark-emphasize: var(--ti-base-color-common-4); + --ti-common-color-bg-dark-active: var(--ti-common-color-bg-normal); + --ti-common-color-bg-dark-deep: var(--ti-base-color-common-6); + --ti-common-color-bg-dark-disabled: var(--ti-base-color-common-1); + --ti-common-color-bg-navigation: var(--ti-base-color-common-8); + --ti-common-color-bg-dark-select: var(--ti-base-color-common-9); + --ti-common-color-data-1: var(--ti-base-color-success-3); + --ti-common-color-data-2: var(--ti-base-color-icon-info); + --ti-common-color-data-3: var(--ti-base-color-data-3); + --ti-common-color-data-4: var(--ti-base-color-data-4); + --ti-common-color-data-5: var(--ti-base-color-data-5); + --ti-common-color-data-6: var(--ti-base-color-warn-3); + --ti-common-color-data-7: var(--ti-base-color-warn-4); + --ti-common-color-data-8: var(--ti-base-color-error-3); + --ti-common-color-transparent: var(--ti-base-color-transparent); + --ti-common-border-radius-normal: 2px; + --ti-common-border-radius-0: 0px; + --ti-common-border-radius-1: 4px; + --ti-common-border-radius-2: 8px; + --ti-common-border-radius-3: 50%; + --ti-common-font-size-base: 12px; + --ti-common-font-size-1: 14px; + --ti-common-font-size-2: 16px; + --ti-common-font-size-3: 18px; + --ti-common-font-size-4: 20px; + --ti-common-font-size-5: 24px; + --ti-common-font-size-6: 32px; + --ti-common-font-size-7: 36px; + --ti-common-line-height-number: 1.5; + --ti-common-space-base: 4px; + --ti-common-space-2x: calc(var(--ti-common-space-base) * 2); + --ti-common-space-3x: calc(var(--ti-common-space-base) * 3); + --ti-common-space-4x: calc(var(--ti-common-space-base) * 4); + --ti-common-space-5x: calc(var(--ti-common-space-base) * 5); + --ti-common-space-6x: calc(var(--ti-common-space-base) * 6); + --ti-common-space-8x: calc(var(--ti-common-space-base) * 8); + --ti-common-space-10x: calc(var(--ti-common-space-base) * 10); + --ti-common-space-0: 0px; + --ti-common-space-1: 1px; + --ti-common-space-6: 6px; + --ti-common-space-10: 10px; + --ti-common-shadow-1-up: 0 -1px 4px 0 rgba(0, 0, 0, 0.1); + --ti-common-shadow-1-down: 0 1px 4px 0 rgba(0, 0, 0, 0.1); + --ti-common-shadow-1-left: -1px 0px 4px 0 rgba(0, 0, 0, 0.1); + --ti-common-shadow-1-right: 1px 0px 4px 0 rgba(0, 0, 0, 0.1); + --ti-common-shadow-2-up: 0 -2px 8px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-2-down: 0 2px 8px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-2-left: -2px 0 8px 0 rgba(238, 10, 10, 0.2); + --ti-common-shadow-2-right: 2px 0 8px 0 rgba(252, 5, 5, 0.2); + --ti-common-shadow-3-up: 0 -4px 16px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-3-down: 0 4px 16px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-3-left: -4px 0 16px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-3-right: 4px 0 16px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-4-up: 0 -8px 40px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-4-down: 0 8px 40px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-4-left: -8px 0 40px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-4-right: 8px 0 40px 0 rgba(0, 0, 0, 0.2); + --ti-common-shadow-error: 0 1px 3px 0 rgba(199, 54, 54, 0.25); + --ti-common-shadow-warn: 0 1px 3px 0 rgba(204, 100, 20, 0.25); + --ti-common-shadow-prompt: 0 1px 3px 0 rgba(70, 94, 184, 0.25); + --ti-common-shadow-success: 0 1px 3px 0 rgba(39, 176, 128, 0.25); + --ti-common-font-family: 'Helvetica', 'Arial', 'PingFangSC-Regular', 'Hiragino Sans GB', 'Microsoft YaHei', + '寰蒋闆呴粦', 'Microsoft JhengHei'; + --ti-common-font-weight-1: 100; + --ti-common-font-weight-2: 200; + --ti-common-font-weight-3: 300; + --ti-common-font-weight-4: normal; + --ti-common-font-weight-5: 500; + --ti-common-font-weight-6: 600; + --ti-common-font-weight-7: bold; + --ti-common-font-weight-8: 800; + --ti-common-font-weight-9: 900; + --ti-common-border-weight-normal: 1px; + --ti-common-border-weight-1: 2px; + --ti-common-border-weight-2: 3px; + --ti-common-border-style-dashed: dashed; + --ti-common-border-style-dotted: dotted; + --ti-common-border-style-solid: solid; + --ti-common-size-base: 4px; + --ti-common-size-2x: calc(var(--ti-common-size-base) * 2); + --ti-common-size-3x: calc(var(--ti-common-size-base) * 3); + --ti-common-size-4x: calc(var(--ti-common-size-base) * 4); + --ti-common-size-5x: calc(var(--ti-common-size-base) * 5); + --ti-common-size-6x: calc(var(--ti-common-size-base) * 6); + --ti-common-size-7x: calc(var(--ti-common-size-base) * 7); + --ti-common-size-8x: calc(var(--ti-common-size-base) * 8); + --ti-common-size-9x: calc(var(--ti-common-size-base) * 9); + --ti-common-size-10x: calc(var(--ti-common-size-base) * 10); + --ti-common-size-11x: calc(var(--ti-common-size-base) * 11); + --ti-common-size-12x: calc(var(--ti-common-size-base) * 12); + --ti-common-size-13x: calc(var(--ti-common-size-base) * 13); + --ti-common-size-14x: calc(var(--ti-common-size-base) * 14); + --ti-common-size-15x: calc(var(--ti-common-size-base) * 15); + --ti-common-size-16x: calc(var(--ti-common-size-base) * 16); + --ti-common-size-17x: calc(var(--ti-common-size-base) * 17); + --ti-common-size-18x: calc(var(--ti-common-size-base) * 18); + --ti-common-size-19x: calc(var(--ti-common-size-base) * 19); + --ti-common-size-20x: calc(var(--ti-common-size-base) * 20); + --ti-common-size-21x: calc(var(--ti-common-size-base) * 21); + --ti-common-size-22x: calc(var(--ti-common-size-base) * 22); + --ti-common-size-23x: calc(var(--ti-common-size-base) * 23); + --ti-common-size-24x: calc(var(--ti-common-size-base) * 24); + --ti-common-size-25x: calc(var(--ti-common-size-base) * 25); + --ti-common-size-26x: calc(var(--ti-common-size-base) * 26); + --ti-common-size-27x: calc(var(--ti-common-size-base) * 27); + --ti-common-size-28x: calc(var(--ti-common-size-base) * 28); + --ti-common-size-29x: calc(var(--ti-common-size-base) * 29); + --ti-common-size-30x: calc(var(--ti-common-size-base) * 30); + --ti-common-size-31x: calc(var(--ti-common-size-base) * 31); + --ti-common-size-32x: calc(var(--ti-common-size-base) * 32); + --ti-common-size-33x: calc(var(--ti-common-size-base) * 33); + --ti-common-size-34x: calc(var(--ti-common-size-base) * 34); + --ti-common-size-35x: calc(var(--ti-common-size-base) * 35); + --ti-common-size-36x: calc(var(--ti-common-size-base) * 36); + --ti-common-size-37x: calc(var(--ti-common-size-base) * 37); + --ti-common-size-38x: calc(var(--ti-common-size-base) * 38); + --ti-common-size-39x: calc(var(--ti-common-size-base) * 39); + --ti-common-size-40x: calc(var(--ti-common-size-base) * 40); + --ti-common-size-41x: calc(var(--ti-common-size-base) * 41); + --ti-common-size-42x: calc(var(--ti-common-size-base) * 42); + --ti-common-size-43x: calc(var(--ti-common-size-base) * 43); + --ti-common-size-44x: calc(var(--ti-common-size-base) * 44); + --ti-common-size-45x: calc(var(--ti-common-size-base) * 45); + --ti-common-size-46x: calc(var(--ti-common-size-base) * 46); + --ti-common-size-47x: calc(var(--ti-common-size-base) * 47); + --ti-common-size-48x: calc(var(--ti-common-size-base) * 48); + --ti-common-size-49x: calc(var(--ti-common-size-base) * 49); + --ti-common-size-50x: calc(var(--ti-common-size-base) * 50); + --ti-common-size-0: 0px; + --ti-common-size-auto: auto; + --ti-base-color-primary-normal: var(--ti-base-color-brand-6); + --ti-base-color-primary-hover: var(--ti-base-color-brand-5); + --ti-base-color-primary-active: var(--ti-base-color-brand-5); + --ti-base-color-primary-disabled: var(--ti-common-color-bg-disabled); + --ti-base-color-primary-disabled-border: var(--ti-common-color-line-disabled); + --ti-base-color-primary-disabled-text: var(--ti-common-color-text-disabled); + --ti-base-color-success-normal: var(--ti-common-color-success); + --ti-base-color-success-hover: var(--ti-common-color-success-border); + --ti-base-color-success-active: var(--ti-common-color-success-border); + --ti-base-color-success-disabled: var(--ti-common-color-bg-disabled); + --ti-base-color-success-disabled-border: var(--ti-common-color-line-disabled); + --ti-base-color-success-disabled-text: var(--ti-common-color-text-disabled); + --ti-base-color-warning-normal: var(--ti-common-color-warn); + --ti-base-color-warning-hover: var(--ti-common-color-warn-secondary); + --ti-base-color-warning-active: var(--ti-common-color-warn-secondary); + --ti-base-color-warning-disabled: var(--ti-common-color-bg-disabled); + --ti-base-color-warning-disabled-border: var(--ti-common-color-line-disabled); + --ti-base-color-warning-disabled-text: var(--ti-common-color-text-disabled); + --ti-base-color-danger-normal: var(--ti-common-bg-primary); + --ti-base-color-danger-hover: var(--ti-common-bg-primary-hover); + --ti-base-color-danger-active: var(--ti-common-bg-primary-active); + --ti-base-color-danger-disabled: var(--ti-common-color-bg-disabled); + --ti-base-color-danger-disabled-border: var(--ti-common-color-line-disabled); + --ti-base-color-danger-disabled-text: var(--ti-common-color-text-disabled); + --ti-base-color-info-normal: var(--ti-base-color-common-7); + --ti-base-color-info-hover: #54657e; + --ti-base-color-info-active: #54657e; + --ti-base-color-info-disabled: var(--ti-common-color-bg-disabled); + --ti-base-color-info-disabled-border: var(--ti-common-color-line-disabled); + --ti-base-color-info-disabled-text: var(--ti-common-color-text-disabled); + --ti-base-color-border: var(--ti-base-color-common-2); + --ti-base-color-border-hover: var(--ti-base-color-common-5); + --ti-base-color-light: #fff; + --ti-base-color-hover-background: var(--ti-base-color-brand-1); + --ti-base-color-selected-background: var(--ti-base-color-brand-6); + --ti-base-color-selected-font-color: var(--ti-base-color-light); + --ti-base-size-height-normal: 30px; + --ti-base-box-shadow: 0 0 4px rgba(0, 0, 0, 0.3); + --ti-base-dropdown-gap: 2px; + --ti-base-color-dark: #000; + --ti-base-color-secondary: #666; + --ti-base-color-placeholder: #999; + --ti-base-color-navigation-background: #2e3243; + --ti-base-radius-large: 3px; + --ti-base-radius-medium: 2px; + --ti-base-radius-small: 1px; + --ti-base-font-size: 12px; + --ti-base-font-size-normal: 1em; + --ti-base-font-size-large: 1.125em; + --ti-base-font-weight-bold: 700; + --ti-base-size-width-large: 130px; + --ti-base-size-width-medium: 120px; + --ti-base-size-width-normal: 80px; + --ti-base-size-width-small: 36px; + --ti-base-size-width-minor: 30px; + --ti-base-size-width-mini: 24px; + --ti-base-size-height-large: 48px; + --ti-base-size-height-medium: 42px; + --ti-base-size-height-small: 28px; + --ti-base-size-height-minor: 30px; + --ti-base-size-height-mini: 24px; +} +:root { + --ti-errortips-box-background: var(--ti-base-color-light); + --ti-errortips-body-color: #5a5e66; + --ti-errortips-body-font-size: var(--ti-common-font-size-1); + --ti-errortips-body-code-font-size: 100px; + --ti-errortips-body-code-color: #9ac7ef; + --ti-errortips-body-content-font-size: var(--ti-common-font-size-2); + --ti-errortips-body-bottom-font-weight: var(--ti-common-font-weight-8); + --ti-errortips-sso-box-background: var(--ti-base-color-light); + --ti-errortips-sso-body-color: #5a5e66; + --ti-errortips-sso-body-font-size: var(--ti-common-font-size-1); + --ti-errortips-not-sso-background: #dcdfe4; + --ti-errortips-not-sso-body-background: #f4f5f9; + --ti-errortips-not-sso-body-border-color: #d4d5d7; + --ti-errortips-not-sso-body-title-border-color: #b6babf; + --ti-errortips-not-sso-body-title-font-size: var(--ti-common-font-size-4); + --ti-errortips-not-sso-body-login-font-size: var(--ti-common-font-size-2); + --ti-errortips-not-sso-body-color: #5a5e66; + --ti-errortips-not-sso-body-input-border-color: var(--ti-base-color-bg-5); + --ti-errortips-not-sso-body-input-border-radius: var(--ti-common-border-radius-normal); + --ti-errortips-not-sso-body-input-placeholder: var(--ti-base-color-placeholder); + --ti-errortips-not-sso-body-input-hover: var(--ti-base-color-placeholder); + --ti-errortips-not-sso-body-input-focus: var(--ti-base-color-border); + --ti-errortips-not-sso-body-input-danger: var(--ti-base-color-bg-8); + --ti-errortips-not-sso-body-button-color: var(--ti-base-color-light); + --ti-errortips-not-sso-body-button-background: var(--ti-base-color-brand-6); + --ti-errortips-not-sso-body-button-border-radius: var(--ti-common-border-radius-normal); + --ti-errortips-not-sso-body-button-hover: var(--ti-base-color-brand-5); + --ti-errortips-not-sso-body-errmessage-color: #f00; +} +.aurora-popup__wrapper { + z-index: 2147483647 !important; + background: rgba(0, 0, 0, 0.5); + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + margin: 0; +} +.aurora-popup__wrapper .aurora-errortips__box { + position: absolute; + width: var(--ti-errortips-width); + min-height: var(--ti-errortips-min-height); + max-height: var(--ti-errortips-max-height); + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + overflow: hidden; + background: var(--ti-errortips-box-background); + border: 1px solid transparent; + -webkit-box-shadow: 2px 2px 2px 0 rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 2px 0 rgba(0, 0, 0, 0.2); + text-align: center; + overflow-y: auto; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body { + height: 100%; + text-align: initial; + padding: 20px; + color: var(--ti-errortips-body-color); + font-size: var(--ti-errortips-body-font-size); + display: table; + margin: auto; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body .errortips { + text-align: center; + display: table-cell; + vertical-align: middle; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body .errortips .error-code { + font-size: var(--ti-errortips-body-code-font-size); + color: var(--ti-errortips-body-code-color); + margin: 0 auto -45px; + text-shadow: 0 2px 0 #fff, -2px 0 0 #fff, 2px 0 0 #fff; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body .errortips .error-img { + width: 260px; + height: 180px; + margin: 0 auto; + background: url(../images/errortips-bg.png) no-repeat; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body .errortips .error-content { + font-size: var(--ti-errortips-body-content-font-size); + margin: 24px 0; + font-weight: 700; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body .errortips .error-bottom a { + font-weight: var(--ti-errortips-body-bottom-font-weight); + cursor: pointer; +} +.aurora-popup__wrapper .aurora-errortips__box .aurora-errortips__body .errortips .error-bottom span { + padding-right: 15px; +} +.aurora-popup__wrapper .aurora-sso__box { + position: absolute; + background: var(--ti-errortips-sso-box-background); + border: 1px solid transparent; + -webkit-box-shadow: 2px 2px 2px 0 rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 2px 0 rgba(0, 0, 0, 0.2); + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.aurora-popup__wrapper .aurora-sso__box .aurora-sso__body { + text-align: initial; + padding: 20px; + color: var(--ti-errortips-sso-body-color); + line-height: 32px; + font-size: var(--ti-errortips-sso-body-font-size); +} +.aurora-popup__wrapper .aurora-sso__box .aurora-sso__body .aurora-sso__body-iframe { + width: 350px; + height: 350px; + overflow: hidden; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .aurora-popup__wrapper .aurora-sso__box .aurora-sso__body .aurora-sso__body-iframe { + height: 460px; + } +} +@supports (-ms-ime-align: auto) { + .aurora-popup__wrapper .aurora-sso__box .aurora-sso__body .aurora-sso__body-iframe { + height: 460px; + } +} +.aurora-popup__wrapper.login-not-sso { + background: var(--ti-errortips-not-sso-background); + background-size: cover; +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box { + width: 100%; + height: 100%; + overflow: hidden; +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body { + width: 650px; + height: 400px; + background: var(--ti-errortips-not-sso-body-background); + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + border: 1px solid var(--ti-errortips-not-sso-body-border-color); + -webkit-box-shadow: 0 2px 4px #989a9e; + box-shadow: 0 2px 4px #989a9e; +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .title { + background: -webkit-gradient(linear, left top, left bottom, from(#ecedf1), to(#dadde2)); + background: linear-gradient(to bottom, #ecedf1, #dadde2); + border-bottom: 1px solid var(--ti-errortips-not-sso-body-title-border-color); + padding: 16px 20px; + font-size: var(--ti-errortips-not-sso-body-title-font-size); +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .tbl-login { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + font-size: var(--ti-errortips-not-sso-body-login-font-size); + margin-top: 28px; +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .tbl-login .form-item { + height: 60px; + line-height: 60px; +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .tbl-login .form-item td.label { + width: 30%; + text-align: right; + color: var(--ti-errortips-not-sso-body-color); +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .tbl-login .form-item td.cell { + width: 70%; + text-align: left; + padding-left: 12px; +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .tbl-login .form-item td.cell input { + border: 1px solid var(--ti-errortips-not-sso-body-input-border-color); + border-radius: var(--ti-errortips-not-sso-body-input-border-radius); + outline: 0; + width: 75%; + height: 40px; + line-height: 40px; + padding: 0 8px; + background: 0 0; + color: var(--ti-errortips-not-sso-body-color); +} +.aurora-popup__wrapper.login-not-sso + .aurora-not-sso__box + .aurora-not-sso__body + .tbl-login + .form-item + td.cell + input::-webkit-input-placeholder { + color: var(--ti-errortips-not-sso-body-input-placeholder); +} +.aurora-popup__wrapper.login-not-sso + .aurora-not-sso__box + .aurora-not-sso__body + .tbl-login + .form-item + td.cell + input:hover { + border-color: var(--ti-errortips-not-sso-body-input-placeholder); +} +.aurora-popup__wrapper.login-not-sso + .aurora-not-sso__box + .aurora-not-sso__body + .tbl-login + .form-item + td.cell + input:focus::-webkit-input-placeholder { + color: var(--ti-errortips-not-sso-body-input-focus); +} +.aurora-popup__wrapper.login-not-sso + .aurora-not-sso__box + .aurora-not-sso__body + .tbl-login + .form-item + td.cell + input.text-danger { + border-color: var(--ti-errortips-not-sso-body-input-danger); +} +.aurora-popup__wrapper.login-not-sso .aurora-not-sso__box .aurora-not-sso__body .tbl-login .form-item td.cell button { + width: 75%; + height: 40px; + line-height: 40px; + padding: 0 24px; + text-align: center; + color: var(--ti-errortips-not-sso-body-button-color); + background-color: var(--ti-errortips-not-sso-body-button-background); + border: none; + border-radius: var(--ti-errortips-not-sso-body-button-border-radius); + -webkit-transition: 0.3s; + transition: 0.3s; + outline: 0; +} +.aurora-popup__wrapper.login-not-sso + .aurora-not-sso__box + .aurora-not-sso__body + .tbl-login + .form-item + td.cell + button:hover { + background-color: var(--ti-errortips-not-sso-body-button-hover); +} +.aurora-popup__wrapper.login-not-sso + .aurora-not-sso__box + .aurora-not-sso__body + .tbl-login + .form-item + td.cell + .errmessage { + color: var(--ti-errortips-not-sso-body-errmessage-color); + line-height: 20px; +} +.tiny-svg { + width: 1em; + height: 1em; + vertical-align: middle; + overflow: hidden; + display: inline-block; +} +.tiny-transition-alert-fade-enter, +.tiny-transition-alert-fade-enter-from, +.tiny-transition-alert-fade-leave-active { + opacity: 0; +} +.tiny-transition-alert-fade-leave-active { + -webkit-transition: opacity 0.3s ease-in; + transition: opacity 0.3s ease-in; +} +.tiny-alert { + --ti-alert-description-font-size: var(--ti-common-font-size-base); + --ti-alert-close-font-size: var(--ti-common-font-size-base); + --ti-alert-radius: var(--ti-common-border-radius-normal); + --ti-alert-title-color: var(--ti-base-color-info-normal); + --ti-alert-nomal-content-line-height: var(--ti-common-line-height-number); + --ti-alert-description-color: var(--ti-base-color-info-normal); + --ti-alert-opration-color: var(--ti-base-color-brand-7); + --ti-alert-warning-border-color: var(--ti-common-color-warn-border); + --ti-alert-warning-icon-color: var(--ti-common-color-warn); + --ti-alert-warning-link-color: var(--ti-common-color-warn-text); + --ti-alert-warning-bg-color: var(--ti-common-color-warn-bg); + --ti-alert-error-border-color: var(--ti-common-color-error-border-secondary); + --ti-alert-error-icon-color: var(--ti-common-color-error); + --ti-alert-error-link-color: var(--ti-common-color-error-text); + --ti-alert-error-bg-color: var(--ti-common-color-error-bg); + --ti-alert-success-border-color: var(--ti-common-color-success-border); + --ti-alert-success-icon-color: var(--ti-common-color-success); + --ti-alert-success-link-color: var(--ti-common-color-text-success); + --ti-alert-success-bg-color: var(--ti-common-color-success-bg); + --ti-alert-info-border-color: var(--ti-common-color-prompt-border); + --ti-alert-info-icon-color: var(--ti-common-color-prompt); + --ti-alert-info-link-color: var(--ti-common-color-prompt-text); + --ti-alert-info-bg-color: var(--ti-common-color-prompt-bg); + position: relative; + border: 1px solid; + border-radius: var(--ti-alert-radius); +} +.tiny-alert.tiny-alert--normal { + padding: 11px 16px; + margin: 8px 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-alert.tiny-alert--normal .tiny-alert__content { + padding: 0 8px; + display: table-cell; + line-height: var(--ti-alert-nomal-content-line-height); + max-width: calc(100% - 30px); +} +.tiny-alert.tiny-alert--large { + padding: 18px 24px 14px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-alert.tiny-alert--large .tiny-alert__content { + padding-left: 16px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.tiny-alert.tiny-alert--large .tiny-alert__description { + margin-bottom: 6px; + margin-top: 12px; + line-height: 1; +} +.tiny-alert.tiny-alert--large .tiny-alert__description.is-hide { + margin: 0; +} +.tiny-alert.tiny-alert--large .tiny-alert__icon { + font-size: 24px; + vertical-align: top; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.tiny-alert.tiny-alert--large .tiny-alert__icon.tiny-alert__close { + font-size: 12px; +} +.tiny-alert.tiny-alert--large .tiny-alert__close { + top: 12px; + right: 12px; + -webkit-transform: none; + transform: none; +} +.tiny-alert.tiny-alert--success { + background: var(--ti-alert-success-bg-color); + border-color: var(--ti-alert-success-border-color); + color: var(--ti-alert-title-color); +} +.tiny-alert.tiny-alert--success hr { + border-top-color: var(--ti-alert-success-link-color); +} +.tiny-alert.tiny-alert--success .alert-link { + color: var(--ti-alert-success-link-color); +} +.tiny-alert.tiny-alert--success .tiny-alert__icon { + fill: var(--ti-alert-success-icon-color); +} +.tiny-alert.tiny-alert--info { + background: var(--ti-alert-info-bg-color); + border-color: var(--ti-alert-info-border-color); + color: var(--ti-alert-title-color); +} +.tiny-alert.tiny-alert--info hr { + border-top-color: var(--ti-alert-info-link-color); +} +.tiny-alert.tiny-alert--info .alert-link { + color: var(--ti-alert-info-link-color); +} +.tiny-alert.tiny-alert--info .tiny-alert__icon { + fill: var(--ti-alert-info-icon-color); +} +.tiny-alert.tiny-alert--warning { + background: var(--ti-alert-warning-bg-color); + border-color: var(--ti-alert-warning-border-color); + color: var(--ti-alert-title-color); +} +.tiny-alert.tiny-alert--warning hr { + border-top-color: var(--ti-alert-warning-link-color); +} +.tiny-alert.tiny-alert--warning .alert-link { + color: var(--ti-alert-warning-link-color); +} +.tiny-alert.tiny-alert--warning .tiny-alert__icon { + fill: var(--ti-alert-warning-icon-color); +} +.tiny-alert.tiny-alert--error { + background: var(--ti-alert-error-bg-color); + border-color: var(--ti-alert-error-border-color); + color: var(--ti-alert-title-color); +} +.tiny-alert.tiny-alert--error hr { + border-top-color: var(--ti-alert-error-link-color); +} +.tiny-alert.tiny-alert--error .alert-link { + color: var(--ti-alert-error-link-color); +} +.tiny-alert.tiny-alert--error .tiny-alert__icon { + fill: var(--ti-alert-error-icon-color); +} +.tiny-alert__icon { + font-size: 16px; +} +.tiny-alert.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; +} +.tiny-alert .is-custom { + position: absolute; + top: 50%; + right: 12px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; +} +.tiny-alert .tiny-alert__close { + font-size: var(--ti-alert-close-font-size); + position: absolute; + top: 50%; + right: 12px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; +} +.tiny-alert .tiny-alert__content .tiny-alert__opration { + font-size: 12px; + color: var(--ti-alert-opration-color); + line-height: 1; +} +.tiny-alert .tiny-alert__content .tiny-alert__opration a { + font-size: 12px; + color: var(--ti-alert-opration-color); +} +.tiny-alert .tiny-alert__content .tiny-alert__opration a:not(:last-child) { + margin-right: 16px; +} +.tiny-alert .tiny-alert__title { + font-size: 16px; + color: var(--ti-alert-title-color); + font-weight: 700; +} +.tiny-alert .tiny-alert__description { + font-size: var(--ti-alert-description-font-size); + color: var(--ti-alert-description-color); +} +.tiny-alert p { + display: inline-block; + line-height: 16px; + padding-left: 8px; +} +.tiny-amount { + --ti-amount-icon-color: var(--ti-base-color-brand-6); + --ti-amount-icon-font-size: var(--ti-common-font-size-1); + width: 270px; +} +.tiny-amount .tiny-amount-input-icon .tiny-svg { + fill: var(--ti-amount-icon-color); + font-size: var(--ti-amount-icon-font-size); +} +.tiny-amount-popper { + width: 270px; +} +.tiny-amount-popper .popover-con .module:not(:last-child) { + margin-bottom: 12px; +} +.tiny-amount-popper .popover-con .module { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-amount-popper .popover-con .module .popover-left { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + margin-right: 8px; + width: 30%; + text-align: right; +} +.tiny-amount-popper + .popover-con + .module + .popover-right:not(.tiny-input-prefix):not(.tiny-input-suffiX) + .tiny-input__inner { + padding: 0 8px; +} +.tiny-amount-popper .popover-con .module .popover-right.tiny-input { + display: inline-block; +} +.tiny-amount .tiny-input { + outline: 0; +} +.tiny-amount span.tiny-popover__reference { + width: 100%; +} +.tiny-area .tiny-select { + width: 270px; + margin-right: 10px; +} +.tiny-autocomplete { + --ti-autocomplete-suggestion-border-radius: var(--ti-common-border-radius-normal); + --ti-autocomplete-suggestion-border-color: var(--ti-base-color-white); + --ti-autocomplete-suggestion-bgcolor: var(--ti-base-color-light); + --ti-autocomplete-li-color: var(--ti-base-color-info-normal); + --ti-autocomplete-li-font-size: var(--ti-common-font-size-base); + --ti-autocomplete-li-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-autocomplete-li-select-bgcolor: var(--ti-base-color-selected-background); + --ti-autocomplete-li-selected-font-color: var(--ti-base-color-selected-font-color); + --ti-autocomplete-li-divider-border-color: var(--ti-base-color-dark); + --ti-autocomplete-li-height: 30px; + --ti-autocomplete-loading-color: var(--ti-base-color-placeholder); + position: relative; + display: inline-block; +} +.tiny-autocomplete-suggestion { + border: 1px solid var(--ti-autocomplete-suggestion-border-color); + border-radius: var(--ti-autocomplete-suggestion-border-radius); + background-color: var(--ti-autocomplete-suggestion-bgcolor); + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: var(--ti-base-box-shadow); + box-shadow: var(--ti-base-box-shadow); +} +.tiny-autocomplete-suggestion__wrap { + max-height: 280px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-autocomplete-suggestion__wrap { + margin-bottom: -17px !important; + padding-bottom: 6px; + } +} +.tiny-autocomplete-suggestion__list { + margin: 0; + padding: 0; +} +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item { + padding: 0 8px; + margin: 0; + line-height: var(--ti-autocomplete-li-height); + color: var(--ti-autocomplete-li-color); + font-size: var(--ti-autocomplete-li-font-size); + list-style: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; +} +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item.highlighted, +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item:hover { + background-color: var(--ti-autocomplete-li-hover-bgcolor); +} +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item.divider { + margin-top: 6px; + border-top: 1px solid var(--ti-autocomplete-li-divider-border-color); +} +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item.divider:last-child { + margin-bottom: -6px; +} +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item:only-of-type, +.tiny-autocomplete-suggestion .tiny-autocomplete-suggestion__list-item:only-of-type:hover { + background-color: var(--ti-autocomplete-li-select-bgcolor); + color: var(--ti-autocomplete-li-selected-font-color); +} +.tiny-autocomplete-suggestion.is-loading .tiny-autocomplete-suggestion__list-loading { + text-align: center; + height: 100px; + line-height: 100px; + font-size: var(--ti-common-font-size-4); + color: var(--ti-autocomplete-loading-color); +} +.tiny-autocomplete-suggestion.is-loading .tiny-autocomplete-suggestion__list-loading::after { + display: inline-block; + content: ''; + height: 100%; + vertical-align: middle; +} +.tiny-autocomplete-suggestion.is-loading .tiny-autocomplete-suggestion__list-loading:hover { + background-color: #fff; +} +.tiny-autocomplete-suggestion.is-loading .tiny-icon-loading { + vertical-align: middle; +} +.tiny-autocomplete-suggestion.tiny-popper[x-placement^='bottom'] { + margin-top: var(--ti-base-dropdown-gap); +} +.tiny-badge { + --ti-badge-size: var(--ti-common-size-5x); + --ti-badge-font-size: 12px; + --ti-badge-font-weight: var(--ti-common-font-weight-7); + --ti-badge-border-raidus: 12px; + --ti-badge-color: var(--ti-base-color-light); + --ti-badge-bgcolor: var(--ti-base-color-error-3); + --ti-badge-link-hover-color: var(--ti-base-color-light); + --ti-badge-active-color: var(--ti-base-color-brand-6); + --ti-badge-active-bgcolor: var(--ti-base-color-light); + --ti-badge-primary-bgcolor: var(--ti-base-color-brand-6); + --ti-badge-success-bgcolor: var(--ti-base-color-success-normal); + --ti-badge-warning-bgcolor: var(--ti-base-color-warning-normal); + --ti-badge-danger-bgcolor: var(--ti-base-color-error-3); + --ti-badge-info-bgcolor: var(--ti-base-color-info-normal); + display: inline-block; + min-width: var(--ti-badge-size); + height: var(--ti-badge-size); + line-height: var(--ti-badge-size); + border-radius: var(--ti-badge-border-raidus); + padding: 0 4px; + font-size: var(--ti-badge-font-size); + font-weight: var(--ti-badge-font-weight); + color: var(--ti-badge-color); + background-color: var(--ti-badge-bgcolor); + vertical-align: baseline; + white-space: nowrap; + text-align: center; +} +.tiny-badge.tiny-badge--max { + padding: 0 6px; + border-radius: 10px; +} +.tiny-badge.tiny-badge--default { + width: 6px; + height: 6px; + min-width: auto; + background-color: var(--ti-badge-bgcolor); + display: inline-block; + vertical-align: top; + padding: 0; + border-radius: 50%; +} +.tiny-badge.tiny-badge--primary { + background-color: var(--ti-badge-primary-bgcolor); +} +.tiny-badge.tiny-badge--success { + background-color: var(--ti-badge-success-bgcolor); +} +.tiny-badge.tiny-badge--warning { + background-color: var(--ti-badge-warning-bgcolor); +} +.tiny-badge.tiny-badge--danger { + background-color: var(--ti-badge-danger-bgcolor); +} +.tiny-badge.tiny-badge--info { + background-color: var(--ti-badge-info-bgcolor); +} +.tiny-badge:empty { + display: none; +} +.btn .tiny-badge { + position: relative; + top: -1px; +} +.tiny-badge a, +.tiny-badge a:hover { + color: var(--ti-badge-color); + text-decoration: none; +} +a.badge:focus, +a.badge:hover { + color: var(--ti-badge-link-hover-color); + text-decoration: none; + cursor: pointer; +} +.nav-pills > .active > a > .badge, +a.list-group-item.active > .badge { + color: var(--ti-badge-active-color); + background-color: var(--ti-badge-active-bgcolor); +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.tiny-breadcrumb { + --ti-breadcrumb-font-size: var(--ti-common-font-size-base); + --ti-breadcrumb-text-line-height: 1em; + --ti-breadcrumb-text-color: var(--ti-base-color-info-normal); + --ti-breadcrumb-separator-color: var(--ti-base-color-placeholder); + --ti-breadcrumb-text-hover-color: var(--ti-base-color-brand-6); + --ti-breadcrumb-text-font-weight: var(--ti-common-font-weight-7); + font-size: var(--ti-breadcrumb-font-size); + line-height: var(--ti-breadcrumb-text-line-height); +} +.tiny-breadcrumb:after, +.tiny-breadcrumb:before { + content: ''; + display: table; +} +.tiny-breadcrumb:after { + clear: both; +} +.tiny-breadcrumb .tiny-breadcrumb__item { + cursor: pointer; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-breadcrumb .tiny-breadcrumb__item:last-child .tiny-breadcrumb__inner { + font-weight: var(--ti-breadcrumb-text-font-weight); +} +.tiny-breadcrumb .tiny-breadcrumb__item:last-child .tiny-breadcrumb__inner a { + cursor: text; +} +.tiny-breadcrumb .tiny-breadcrumb__item:last-child .tiny-breadcrumb__separator, +.tiny-breadcrumb .tiny-breadcrumb__item:last-child .tiny-breadcrumb__separator-cls { + display: none; +} +.tiny-breadcrumb .tiny-breadcrumb__inner { + vertical-align: middle; +} +.tiny-breadcrumb .tiny-breadcrumb__inner, +.tiny-breadcrumb .tiny-breadcrumb__inner a { + color: var(--ti-breadcrumb-text-color); +} +.tiny-breadcrumb .tiny-breadcrumb__inner:hover { + color: var(--ti-breadcrumb-text-hover-color); +} +.tiny-breadcrumb .tiny-breadcrumb__separator { + font-family: '\5B8B\4F53', sans-serif; + color: var(--ti-breadcrumb-separator-color); + padding: 0 4px; + vertical-align: middle; +} +.tiny-breadcrumb .tiny-breadcrumb__separator-cls { + font-size: var(--ti-breadcrumb-font-size); + fill: var(--ti-breadcrumb-separator-color); + margin: 0 4px; + vertical-align: middle; +} +.tiny-breadcrumb .tiny-breadcrumb__inner a:hover, +.tiny-breadcrumb .tiny-breadcrumb__item:last-child:hover { + color: var(--ti-breadcrumb-text-hover-color); + text-decoration: none; +} +.tiny-bulletin-board { + --ti-bulletin-board-title-font-size: var(--ti-common-font-size-3); + --ti-bulletin-board-title-font-weight: var(--ti-common-font-weight-7); + --ti-bulletin-board-title-color: var(--ti-base-color-info-normal); + --ti-bulletin-board-item-title-color: var(--ti-base-color-dark); + --ti-bulletin-board-item-date-color: var(--ti-base-color-placeholder); + --ti-bulletin-board-item-date-font-size: var(--ti-common-font-size-base); + --ti-bulletin-board-new-background: var(--ti-base-color-error-3); + --ti-bulletin-board-new-color: var(--ti-base-color-light); + --ti-bulletin-board-new-border-radius: var(--ti-common-border-radius-normal); + --ti-bulletin-board-more-color: var(--ti-base-color-brand-6); + --ti-bulletin-board-more-hover-color: var(--ti-base-color-brand-5); + --ti-bulletin-board-more-font-size: var(--ti-common-font-size-base); + --ti-bulletin-board-more-icon-font-size: var(--ti-common-font-size-1); + --ti-bulletin-board-tabs-item-color: var(--ti-base-color-info-normal); + --ti-bulletin-board-tabs-item-hover-color: var(--ti-base-color-brand-6); + --ti-bulletin-board-tabs-item-disabled-color: var(--ti-base-color-placeholder); + --ti-bulletin-board-tabs-header-border-color: var(--ti-base-color-border); +} +.tiny-bulletin-board__item { + margin-bottom: 12px; +} +.tiny-bulletin-board__item .tiny-bulletin-board__textTitle { + display: block; + color: var(--ti-bulletin-board-item-title-color); + margin-bottom: 2px; + font-size: var(--ti-common-font-size-base); + white-space: normal; + font-family: Helvetica, Arial, 'microsoft yahei'; + line-height: initial; +} +.tiny-bulletin-board__item .tiny-bulletin-board__textTitle, +.tiny-bulletin-board__item .tiny-bulletin-board__textTitle:hover { + text-decoration: none; +} +.tiny-bulletin-board__item .tiny-bulletin-board__textDate { + color: var(--ti-bulletin-board-item-date-color); + font-size: var(--ti-bulletin-board-item-date-font-size); +} +.tiny-bulletin-board__title { + font-size: var(--ti-bulletin-board-title-font-size); + padding: 12px 0 8px 24px; + color: var(--ti-bulletin-board-title-color); + font-weight: var(--ti-bulletin-board-title-font-weight); +} +.tiny-bulletin-board__more { + text-align: right; +} +.tiny-bulletin-board__more .tiny-bulletin-board__more-link { + color: var(--ti-bulletin-board-more-color); + font-size: var(--ti-bulletin-board-more-font-size); + line-height: normal; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-bulletin-board__more .tiny-bulletin-board__more-link .tiny-svg { + fill: var(--ti-bulletin-board-more-color); + font-size: var(--ti-bulletin-board-more-icon-font-size); + margin-left: 4px; +} +.tiny-bulletin-board__more .tiny-bulletin-board__more-link:hover { + text-decoration: none; +} +.tiny-bulletin-board__more .tiny-bulletin-board__more-link:hover .tiny-svg { + fill: var(--ti-bulletin-board-more-hover-color); +} +.tiny-bulletin-board__new { + background-color: var(--ti-bulletin-board-new-background); + color: var(--ti-bulletin-board-new-color); + border-radius: var(--ti-bulletin-board-new-border-radius); + min-width: 30px; + min-height: 16px; + line-height: 16px; + font-size: var(--ti-common-font-size-base); + display: inline-block; + font-family: '瀹嬩綋', cursive, Helvetica, Arial, 'microsoft yahei'; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs--left, +.tiny-bulletin-board .tiny-tabs .tiny-tabs--right, +.tiny-bulletin-board .tiny-tabs .tiny-tabs__content, +.tiny-bulletin-board .tiny-tabs .tiny-tabs__nav-scroll, +.tiny-bulletin-board .tiny-tabs .tiny-tabs__nav-wrap { + overflow: hidden; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__header .tiny-tabs__nav-wrap { + margin-bottom: -1px; + position: relative; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__header .tiny-tabs__nav-wrap:after { + content: ''; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: var(--ti-tabs-border-color); + z-index: 1; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__header .tiny-tabs__nav-wrap.is-scrollable { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__header .tiny-tabs__nav { + top: 1px; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__nav { + white-space: nowrap; + position: relative; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + float: left; + z-index: 2; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item { + line-height: 36px; + height: 36px; + padding: 0 24px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + list-style: none; + font-size: var(--ti-common-font-size-1); + font-weight: 500; + color: var(--ti-bulletin-board-tabs-item-color); + position: relative; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item:active, +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item:focus { + outline: 0; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item:hover { + color: var(--ti-bulletin-board-tabs-item-hover-color); + cursor: pointer; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item.is-active { + color: var(--ti-bulletin-board-tabs-item-hover-color); +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item.is-disabled { + color: var(--ti-bulletin-board-tabs-item-disabled-color); + cursor: default; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item.is-closable > div { + display: inline-block; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item.is-closable .icon-close { + display: initial; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item .icon-close { + border-radius: 50%; + text-align: center; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin-left: 5px; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item .icon-close:before { + -webkit-transform: scale(0.9); + transform: scale(0.9); + display: inline-block; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item .icon-close:hover { + background-color: #b4bccc; + color: #fff; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__item::before { + bottom: 0; + top: auto !important; + left: auto !important; +} +.tiny-bulletin-board .tiny-tabs .tiny-tabs__content { + padding: 12px 24px 24px; +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card .tiny-tabs__header .tiny-tabs__nav { + border: none; +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card .tiny-tabs__header .tiny-tabs__item { + border-left: none; +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card > .tiny-tabs__header { + border-bottom: 1px solid var(--ti-bulletin-board-tabs-header-border-color); +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item { + border-bottom: 1px solid transparent; + -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item:first-child { + border-left: none; +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item.is-active { + border-bottom-color: #fff; +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item.is-active.is-closable { + padding-left: 24px; + padding-right: 24px; +} +.tiny-bulletin-board .tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item.is-active:before { + position: absolute; + content: ''; + width: 100%; + height: 3px; + background: var(--ti-bulletin-board-tabs-item-hover-color); + margin-left: -24px; +} +.tiny-button { + --ti-button-radius: var(--ti-common-border-radius-normal); + --ti-button-font-size: var(--ti-common-font-size-base); + --ti-button-plain-disabled-font-color: var(--ti-base-color-common-2); + --ti-button-size-normal-min-width: var(--ti-base-size-width-normal); + --ti-button-size-normal-max-width: var(--ti-base-size-width-medium); + --ti-button-size-normal-height: var(--ti-common-size-7x); + --ti-button-size-normal-padding: var(--ti-common-space-2x); + --ti-button-size-large-min-width: var(--ti-base-size-width-normal); + --ti-button-size-large-max-width: var(--ti-base-size-width-large); + --ti-button-size-large-height: var(--ti-base-size-height-large); + --ti-button-size-large-font-size: var(--ti-common-font-size-2); + --ti-button-size-large-padding: var(--ti-common-space-14); + --ti-button-size-medium-min-width: var(--ti-base-size-width-normal); + --ti-button-size-medium-max-width: var(--ti-base-size-width-large); + --ti-button-size-medium-height: var(--ti-base-size-height-medium); + --ti-button-size-medium-font-size: var(--ti-common-font-size-1); + --ti-button-size-medium-padding: var(--ti-common-space-3x); + --ti-button-size-small-min-width: var(--ti-base-size-width-normal); + --ti-button-size-small-max-width: var(--ti-base-size-width-medium); + --ti-button-size-small-height: var(--ti-base-size-height-small); + --ti-button-size-small-font-size: var(--ti-common-font-size-1); + --ti-button-size-small-padding: var(--ti-common-space-10); + --ti-button-size-mini-min-width: var(--ti-base-size-width-normal); + --ti-button-size-mini-max-width: var(--ti-base-size-width-medium); + --ti-button-size-mini-height: var(--ti-base-size-height-mini); + --ti-button-size-mini-font-size: var(--ti-common-font-size-base); + --ti-button-size-mini-padding: var(--ti-common-space-2x); + --ti-button-normal-color: var(--ti-base-color-common-7); + --ti-button-normal-border-color: var(--ti-base-color-border); + --ti-button-normal-background-color: var(--ti-base-color-light); + --ti-button-normal-hover-color: var(--ti-base-color-brand-6); + --ti-button-normal-hover-border-color: var(--ti-base-color-brand-6); + --ti-button-normal-hover-background-color: var(--ti-base-color-light); + --ti-button-normal-active-color: var(--ti-base-color-brand-6); + --ti-button-normal-active-border-color: var(--ti-base-color-brand-6); + --ti-button-normal-active-background-color: var(--ti-base-color-hover-background); + --ti-button-normal-disabled-color: var(--ti-common-color-text-disabled); + --ti-button-normal-disabled-border-color: var(--ti-common-color-line-disabled); + --ti-button-normal-disabled-background-color: var(--ti-common-color-bg-disabled); + --ti-button-text-color: var(--ti-base-color-brand-6); + --ti-button-text-hover-color: var(--ti-base-color-brand-5); + --ti-button-text-active-color: var(--ti-base-color-primary-active); + --ti-button-text-disabled-color: var(--ti-base-color-placeholder); + --ti-button-primary-normal-color: var(--ti-base-color-primary-normal); + --ti-button-primary-hover-color: var(--ti-base-color-primary-hover); + --ti-button-primary-active-color: var(--ti-base-color-primary-active); + --ti-button-primary-disabled-bgcolor: var(--ti-base-color-primary-disabled); + --ti-button-primary-color: var(--ti-base-color-light); + --ti-button-primary-disabled-color: var(--ti-common-color-text-disabled); + --ti-button-primary-disabled-border-color: var(--ti-base-color-primary-disabled-border); + --ti-button-primary-plain-bgcolor: rgba(24, 144, 255, 0.06); + --ti-button-primary-plain-disabled-bgcolor: rgba(191, 191, 191, 0.1); + --ti-button-success-normal-color: var(--ti-base-color-success-normal); + --ti-button-success-hover-color: var(--ti-base-color-success-hover); + --ti-button-success-active-color: var(--ti-base-color-success-active); + --ti-button-success-disabled-bgcolor: var(--ti-base-color-success-disabled); + --ti-button-success-color: var(--ti-base-color-light); + --ti-button-success-disabled-color: var(--ti-common-color-text-disabled); + --ti-button-success-disabled-border-color: var(--ti-base-color-success-disabled-border); + --ti-button-success-plain-bgcolor: rgba(82, 196, 26, 0.06); + --ti-button-success-plain-disabled-bgcolor: rgba(166, 195, 185, 0.1); + --ti-button-warning-normal-color: var(--ti-base-color-warning-normal); + --ti-button-warning-hover-color: var(--ti-base-color-warning-hover); + --ti-button-warning-active-color: var(--ti-base-color-warning-active); + --ti-button-warning-disabled-bgcolor: var(--ti-base-color-warning-disabled); + --ti-button-warning-color: var(--ti-base-color-light); + --ti-button-warning-disabled-color: var(--ti-common-color-text-disabled); + --ti-button-warning-disabled-border-color: var(--ti-base-color-warning-disabled-border); + --ti-button-warning-plain-bgcolor: rgba(250, 173, 20, 0.06); + --ti-button-warning-plain-disabled-bgcolor: rgba(211, 198, 162, 0.1); + --ti-button-danger-normal-color: var(--ti-base-color-danger-normal); + --ti-button-danger-hover-color: var(--ti-base-color-danger-hover); + --ti-button-danger-active-color: var(--ti-base-color-danger-active); + --ti-button-danger-disabled-bgcolor: var(--ti-base-color-danger-disabled); + --ti-button-danger-color: var(--ti-base-color-light); + --ti-button-danger-disabled-color: var(--ti-common-color-text-disabled); + --ti-button-danger-disabled-border-color: var(--ti-base-color-danger-disabled-border); + --ti-button-danger-plain-bgcolor: rgba(245, 34, 45, 0.06); + --ti-button-danger-plain-disabled-bgcolor: rgba(216, 186, 181, 0.1); + --ti-button-info-normal-color: var(--ti-base-color-info-normal); + --ti-button-info-hover-color: var(--ti-base-color-info-hover); + --ti-button-info-active-color: var(--ti-base-color-info-active); + --ti-button-info-disabled-bgcolor: var(--ti-base-color-info-disabled); + --ti-button-info-color: var(--ti-base-color-light); + --ti-button-info-disabled-color: var(--ti-common-color-text-disabled); + --ti-button-info-disabled-border-color: var(--ti-base-color-info-disabled-border); + --ti-button-info-plain-bgcolor: rgba(51, 51, 51, 0.06); + --ti-button-info-plain-disabled-bgcolor: rgba(191, 191, 191, 0.1); + --ti-button-padding: 0 var(--ti-common-space-5x); + display: inline-block; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: var(--ti-button-size-normal-height); + line-height: calc(var(--ti-button-size-normal-height) - 2px); + color: var(--ti-button-normal-color); + fill: var(--ti-button-normal-color); + font-size: var(--ti-button-font-size); + white-space: nowrap; + text-overflow: ellipsis; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border-width: 1px; + border-style: solid; + border-color: var(--ti-button-normal-border-color); + -o-border-image: initial; + border-image: initial; + border-radius: var(--ti-button-radius); + background: var(--ti-button-normal-background-color); + padding: var(--ti-button-padding); + overflow: hidden; + -webkit-transition: border 0.3s ease 0s, color 0.3s ease 0s, background 0.3s ease 0s; + transition: border 0.3s ease 0s, color 0.3s ease 0s, background 0.3s ease 0s; + outline: 0; +} +.tiny-button .tiny-svg { + vertical-align: text-top; +} +.tiny-button > img { + margin-right: 4px; + vertical-align: middle; +} +.tiny-button::-moz-focus-inner { + border: 0; +} +.tiny-button:focus, +.tiny-button:hover { + color: var(--ti-button-normal-hover-color); + fill: var(--ti-button-normal-hover-color); + border-color: var(--ti-button-normal-hover-border-color); + background-color: var(--ti-button-normal-hover-background-color); +} +.tiny-button.is-active, +.tiny-button.is-plain:active, +.tiny-button:active { + color: var(--ti-button-normal-active-color); + fill: var(--ti-button-normal-active-color); + border-color: var(--ti-button-normal-active-border-color); + background-color: var(--ti-button-normal-active-background-color); +} +.tiny-button.is-disabled, +.tiny-button.is-disabled:focus, +.tiny-button.is-disabled:hover { + cursor: not-allowed; + color: var(--ti-button-normal-disabled-color); + fill: var(--ti-button-normal-disabled-color); + border-color: var(--ti-button-normal-disabled-border-color); + background-color: var(--ti-button-normal-disabled-background-color); +} +.tiny-button.is-plain:focus, +.tiny-button.is-plain:hover { + color: var(--ti-button-normal-hover-color); + fill: var(--ti-button-normal-hover-color); + border-color: var(--ti-button-normal-hover-border-color); + background-color: var(--ti-button-normal-hover-background-color); +} +.tiny-button.is-disabled.is-plain, +.tiny-button.is-disabled.is-plain:focus, +.tiny-button.is-disabled.is-plain:hover { + color: var(--ti-button-normal-disabled-color); + fill: var(--ti-button-normal-disabled-color); + border-color: var(--ti-button-normal-disabled-border-color); + background-color: var(--ti-button-normal-disabled-background-color); +} +.tiny-button + .tiny-button { + margin-left: 8px; +} +.tiny-button.is-loading { + position: relative; + pointer-events: none; + overflow: initial; +} +.tiny-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); +} +.tiny-button.is-loading .tiny-svg { + fill: var(--ti-button-info-color); +} +.tiny-button.is-loading.tiny-button--default .tiny-svg { + fill: var(--ti-button-normal-color); +} +.tiny-button.is-round { + border-radius: calc(var(--ti-button-size-normal-height, 30px) / 2); +} +.tiny-button.is-icon { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-button:not(.is-circle) .tiny-svg.is-text { + margin-right: 8px; +} +.tiny-button:not(.is-circle).is-loading .tiny-svg { + margin-right: 4px; + margin-top: 2px; +} +.tiny-button.is-circle { + border-radius: 50%; + min-width: var(--ti-button-size-normal-height); + min-height: var(--ti-button-size-normal-height); + line-height: 1; + padding: var(--ti-button-size-normal-padding); +} +.tiny-button.is-circle.tiny-button--large { + min-width: var(--ti-button-size-large-height); + min-height: var(--ti-button-size-large-height); + height: auto; + line-height: 1; + padding: var(--ti-button-size-large-padding); +} +.tiny-button.is-circle.tiny-button--medium { + min-width: var(--ti-button-size-medium-height); + min-height: var(--ti-button-size-medium-height); + height: auto; + line-height: 1; + padding: var(--ti-button-size-medium-padding); +} +.tiny-button.is-circle.tiny-button--small { + min-width: var(--ti-button-size-small-height); + min-height: var(--ti-button-size-small-height); + height: auto; + line-height: 1; + padding: var(--ti-button-size-small-padding); +} +.tiny-button.is-circle.tiny-button--mini { + min-width: var(--ti-button-size-mini-height); + min-height: var(--ti-button-size-mini-height); + height: auto; + line-height: 1; + padding: var(--ti-button-size-mini-padding); +} +.tiny-button.tiny-button--primary { + color: var(--ti-button-primary-color); + fill: var(--ti-button-primary-color); + border-color: var(--ti-button-primary-normal-color); + background-color: var(--ti-button-primary-normal-color); +} +.tiny-button.tiny-button--primary:hover { + color: var(--ti-button-primary-color); + fill: var(--ti-button-primary-color); + border-color: var(--ti-button-primary-hover-color); + background-color: var(--ti-button-primary-hover-color); +} +.tiny-button.tiny-button--primary.is-active, +.tiny-button.tiny-button--primary:active, +.tiny-button.tiny-button--primary:focus { + color: var(--ti-button-primary-color); + fill: var(--ti-button-primary-color); + border-color: var(--ti-button-primary-active-color); + background-color: var(--ti-button-primary-active-color); + outline: 0; +} +.tiny-button.tiny-button--primary.is-disabled, +.tiny-button.tiny-button--primary.is-disabled:active, +.tiny-button.tiny-button--primary.is-disabled:focus, +.tiny-button.tiny-button--primary.is-disabled:hover { + color: var(--ti-button-primary-disabled-color); + fill: var(--ti-button-primary-disabled-color); + border-color: var(--ti-button-primary-disabled-border-color); + background-color: var(--ti-button-primary-disabled-bgcolor); +} +.tiny-button.tiny-button--primary.is-plain { + color: var(--ti-button-primary-normal-color); + fill: var(--ti-button-primary-normal-color); + border-color: var(--ti-button-primary-normal-color); + background-color: var(--ti-button-primary-plain-bgcolor); +} +.tiny-button.tiny-button--primary.is-plain:hover { + color: var(--ti-button-primary-color); + fill: var(--ti-button-primary-color); + border-color: var(--ti-button-primary-normal-color); + background-color: var(--ti-button-primary-normal-color); +} +.tiny-button.tiny-button--primary.is-plain.is-active, +.tiny-button.tiny-button--primary.is-plain:active, +.tiny-button.tiny-button--primary.is-plain:focus { + color: var(--ti-button-primary-color); + fill: var(--ti-button-primary-color); + border-color: var(--ti-button-primary-active-color); + background-color: var(--ti-button-primary-active-color); + outline: 0; +} +.tiny-button.tiny-button--primary.is-plain.is-disabled, +.tiny-button.tiny-button--primary.is-plain.is-disabled:active, +.tiny-button.tiny-button--primary.is-plain.is-disabled:focus, +.tiny-button.tiny-button--primary.is-plain.is-disabled:hover { + color: var(--ti-button-plain-disabled-font-color); + fill: var(--ti-button-primary-disabled-bgcolor); + border-color: var(--ti-button-primary-disabled-bgcolor); + background-color: var(--ti-button-primary-plain-disabled-bgcolor); +} +.tiny-button.tiny-button--success { + color: var(--ti-button-success-color); + fill: var(--ti-button-success-color); + border-color: var(--ti-button-success-normal-color); + background-color: var(--ti-button-success-normal-color); +} +.tiny-button.tiny-button--success:hover { + color: var(--ti-button-success-color); + fill: var(--ti-button-success-color); + border-color: var(--ti-button-success-hover-color); + background-color: var(--ti-button-success-hover-color); +} +.tiny-button.tiny-button--success.is-active, +.tiny-button.tiny-button--success:active, +.tiny-button.tiny-button--success:focus { + color: var(--ti-button-success-color); + fill: var(--ti-button-success-color); + border-color: var(--ti-button-success-active-color); + background-color: var(--ti-button-success-active-color); + outline: 0; +} +.tiny-button.tiny-button--success.is-disabled, +.tiny-button.tiny-button--success.is-disabled:active, +.tiny-button.tiny-button--success.is-disabled:focus, +.tiny-button.tiny-button--success.is-disabled:hover { + color: var(--ti-button-success-disabled-color); + fill: var(--ti-button-success-disabled-color); + border-color: var(--ti-button-success-disabled-border-color); + background-color: var(--ti-button-success-disabled-bgcolor); +} +.tiny-button.tiny-button--success.is-plain { + color: var(--ti-button-success-normal-color); + fill: var(--ti-button-success-normal-color); + border-color: var(--ti-button-success-normal-color); + background-color: var(--ti-button-success-plain-bgcolor); +} +.tiny-button.tiny-button--success.is-plain:hover { + color: var(--ti-button-success-color); + fill: var(--ti-button-success-color); + border-color: var(--ti-button-success-normal-color); + background-color: var(--ti-button-success-normal-color); +} +.tiny-button.tiny-button--success.is-plain.is-active, +.tiny-button.tiny-button--success.is-plain:active, +.tiny-button.tiny-button--success.is-plain:focus { + color: var(--ti-button-success-color); + fill: var(--ti-button-success-color); + border-color: var(--ti-button-success-active-color); + background-color: var(--ti-button-success-active-color); + outline: 0; +} +.tiny-button.tiny-button--success.is-plain.is-disabled, +.tiny-button.tiny-button--success.is-plain.is-disabled:active, +.tiny-button.tiny-button--success.is-plain.is-disabled:focus, +.tiny-button.tiny-button--success.is-plain.is-disabled:hover { + color: var(--ti-button-plain-disabled-font-color); + fill: var(--ti-button-success-disabled-bgcolor); + border-color: var(--ti-button-success-disabled-bgcolor); + background-color: var(--ti-button-success-plain-disabled-bgcolor); +} +.tiny-button.tiny-button--warning { + color: var(--ti-button-warning-color); + fill: var(--ti-button-warning-color); + border-color: var(--ti-button-warning-normal-color); + background-color: var(--ti-button-warning-normal-color); +} +.tiny-button.tiny-button--warning:hover { + color: var(--ti-button-warning-color); + fill: var(--ti-button-warning-color); + border-color: var(--ti-button-warning-hover-color); + background-color: var(--ti-button-warning-hover-color); +} +.tiny-button.tiny-button--warning.is-active, +.tiny-button.tiny-button--warning:active, +.tiny-button.tiny-button--warning:focus { + color: var(--ti-button-warning-color); + fill: var(--ti-button-warning-color); + border-color: var(--ti-button-warning-active-color); + background-color: var(--ti-button-warning-active-color); + outline: 0; +} +.tiny-button.tiny-button--warning.is-disabled, +.tiny-button.tiny-button--warning.is-disabled:active, +.tiny-button.tiny-button--warning.is-disabled:focus, +.tiny-button.tiny-button--warning.is-disabled:hover { + color: var(--ti-button-warning-disabled-color); + fill: var(--ti-button-warning-disabled-color); + border-color: var(--ti-button-warning-disabled-border-color); + background-color: var(--ti-button-warning-disabled-bgcolor); +} +.tiny-button.tiny-button--warning.is-plain { + color: var(--ti-button-warning-normal-color); + fill: var(--ti-button-warning-normal-color); + border-color: var(--ti-button-warning-normal-color); + background-color: var(--ti-button-warning-plain-bgcolor); +} +.tiny-button.tiny-button--warning.is-plain:hover { + color: var(--ti-button-warning-color); + fill: var(--ti-button-warning-color); + border-color: var(--ti-button-warning-normal-color); + background-color: var(--ti-button-warning-normal-color); +} +.tiny-button.tiny-button--warning.is-plain.is-active, +.tiny-button.tiny-button--warning.is-plain:active, +.tiny-button.tiny-button--warning.is-plain:focus { + color: var(--ti-button-warning-color); + fill: var(--ti-button-warning-color); + border-color: var(--ti-button-warning-active-color); + background-color: var(--ti-button-warning-active-color); + outline: 0; +} +.tiny-button.tiny-button--warning.is-plain.is-disabled, +.tiny-button.tiny-button--warning.is-plain.is-disabled:active, +.tiny-button.tiny-button--warning.is-plain.is-disabled:focus, +.tiny-button.tiny-button--warning.is-plain.is-disabled:hover { + color: var(--ti-button-plain-disabled-font-color); + fill: var(--ti-button-warning-disabled-bgcolor); + border-color: var(--ti-button-warning-disabled-bgcolor); + background-color: var(--ti-button-warning-plain-disabled-bgcolor); +} +.tiny-button.tiny-button--danger { + color: var(--ti-button-danger-color); + fill: var(--ti-button-danger-color); + border-color: var(--ti-button-danger-normal-color); + background-color: var(--ti-button-danger-normal-color); +} +.tiny-button.tiny-button--danger:hover { + color: var(--ti-button-danger-color); + fill: var(--ti-button-danger-color); + border-color: var(--ti-button-danger-hover-color); + background-color: var(--ti-button-danger-hover-color); +} +.tiny-button.tiny-button--danger.is-active, +.tiny-button.tiny-button--danger:active, +.tiny-button.tiny-button--danger:focus { + color: var(--ti-button-danger-color); + fill: var(--ti-button-danger-color); + border-color: var(--ti-button-danger-active-color); + background-color: var(--ti-button-danger-active-color); + outline: 0; +} +.tiny-button.tiny-button--danger.is-disabled, +.tiny-button.tiny-button--danger.is-disabled:active, +.tiny-button.tiny-button--danger.is-disabled:focus, +.tiny-button.tiny-button--danger.is-disabled:hover { + color: var(--ti-button-danger-disabled-color); + fill: var(--ti-button-danger-disabled-color); + border-color: var(--ti-button-danger-disabled-border-color); + background-color: var(--ti-button-danger-disabled-bgcolor); +} +.tiny-button.tiny-button--danger.is-plain { + color: var(--ti-button-danger-normal-color); + fill: var(--ti-button-danger-normal-color); + border-color: var(--ti-button-danger-normal-color); + background-color: var(--ti-button-danger-plain-bgcolor); +} +.tiny-button.tiny-button--danger.is-plain:hover { + color: var(--ti-button-danger-color); + fill: var(--ti-button-danger-color); + border-color: var(--ti-button-danger-normal-color); + background-color: var(--ti-button-danger-normal-color); +} +.tiny-button.tiny-button--danger.is-plain.is-active, +.tiny-button.tiny-button--danger.is-plain:active, +.tiny-button.tiny-button--danger.is-plain:focus { + color: var(--ti-button-danger-color); + fill: var(--ti-button-danger-color); + border-color: var(--ti-button-danger-active-color); + background-color: var(--ti-button-danger-active-color); + outline: 0; +} +.tiny-button.tiny-button--danger.is-plain.is-disabled, +.tiny-button.tiny-button--danger.is-plain.is-disabled:active, +.tiny-button.tiny-button--danger.is-plain.is-disabled:focus, +.tiny-button.tiny-button--danger.is-plain.is-disabled:hover { + color: var(--ti-button-plain-disabled-font-color); + fill: var(--ti-button-danger-disabled-bgcolor); + border-color: var(--ti-button-danger-disabled-bgcolor); + background-color: var(--ti-button-danger-plain-disabled-bgcolor); +} +.tiny-button.tiny-button--info { + color: var(--ti-button-info-color); + fill: var(--ti-button-info-color); + border-color: var(--ti-button-info-normal-color); + background-color: var(--ti-button-info-normal-color); +} +.tiny-button.tiny-button--info:hover { + color: var(--ti-button-info-color); + fill: var(--ti-button-info-color); + border-color: var(--ti-button-info-hover-color); + background-color: var(--ti-button-info-hover-color); +} +.tiny-button.tiny-button--info.is-active, +.tiny-button.tiny-button--info:active, +.tiny-button.tiny-button--info:focus { + color: var(--ti-button-info-color); + fill: var(--ti-button-info-color); + border-color: var(--ti-button-info-active-color); + background-color: var(--ti-button-info-active-color); + outline: 0; +} +.tiny-button.tiny-button--info.is-disabled, +.tiny-button.tiny-button--info.is-disabled:active, +.tiny-button.tiny-button--info.is-disabled:focus, +.tiny-button.tiny-button--info.is-disabled:hover { + color: var(--ti-button-info-disabled-color); + fill: var(--ti-button-info-disabled-color); + border-color: var(--ti-button-info-disabled-border-color); + background-color: var(--ti-button-info-disabled-bgcolor); +} +.tiny-button.tiny-button--info.is-plain { + color: var(--ti-button-info-normal-color); + fill: var(--ti-button-info-normal-color); + border-color: var(--ti-button-info-normal-color); + background-color: var(--ti-button-info-plain-bgcolor); +} +.tiny-button.tiny-button--info.is-plain:hover { + color: var(--ti-button-info-color); + fill: var(--ti-button-info-color); + border-color: var(--ti-button-info-normal-color); + background-color: var(--ti-button-info-normal-color); +} +.tiny-button.tiny-button--info.is-plain.is-active, +.tiny-button.tiny-button--info.is-plain:active, +.tiny-button.tiny-button--info.is-plain:focus { + color: var(--ti-button-info-color); + fill: var(--ti-button-info-color); + border-color: var(--ti-button-info-active-color); + background-color: var(--ti-button-info-active-color); + outline: 0; +} +.tiny-button.tiny-button--info.is-plain.is-disabled, +.tiny-button.tiny-button--info.is-plain.is-disabled:active, +.tiny-button.tiny-button--info.is-plain.is-disabled:focus, +.tiny-button.tiny-button--info.is-plain.is-disabled:hover { + color: var(--ti-button-plain-disabled-font-color); + fill: var(--ti-button-info-disabled-bgcolor); + border-color: var(--ti-button-info-disabled-bgcolor); + background-color: var(--ti-button-info-plain-disabled-bgcolor); +} +.tiny-button.tiny-button--text { + color: var(--ti-button-text-color); + font-size: var(--ti-common-font-size-1); + border-color: transparent; + background-color: transparent; +} +.tiny-button.tiny-button--text:hover { + color: var(--ti-button-text-hover-color); + border-color: transparent; + background-color: transparent; +} +.tiny-button.tiny-button--text.is-active, +.tiny-button.tiny-button--text:active, +.tiny-button.tiny-button--text:focus { + color: var(--ti-button-text-active-color); + border-color: transparent; + background-color: transparent; +} +.tiny-button.tiny-button--text.is-disabled, +.tiny-button.tiny-button--text.is-disabled:active, +.tiny-button.tiny-button--text.is-disabled:focus, +.tiny-button.tiny-button--text.is-disabled:hover { + color: var(--ti-button-text-disabled-color); + border-color: transparent; + background-color: transparent; +} +.tiny-button.tiny-button--large { + height: var(--ti-button-size-large-height); + line-height: var(--ti-button-size-large-height); + font-size: var(--ti-button-size-large-font-size); +} +.tiny-button.tiny-button--large.is-round { + border-radius: calc(var(--ti-button-size-large-height) / 2); +} +.tiny-button.tiny-button--large.is-circle { + border-radius: 50%; +} +.tiny-button.tiny-button--medium { + height: var(--ti-button-size-medium-height); + line-height: var(--ti-button-size-medium-height); + font-size: var(--ti-button-size-medium-font-size); +} +.tiny-button.tiny-button--medium.is-round { + border-radius: calc(var(--ti-button-size-medium-height) / 2); +} +.tiny-button.tiny-button--medium.is-circle { + border-radius: 50%; +} +.tiny-button.tiny-button--small { + height: var(--ti-button-size-small-height); + line-height: var(--ti-button-size-small-height); + font-size: var(--ti-button-size-small-font-size); +} +.tiny-button.tiny-button--small.is-round { + border-radius: calc(var(--ti-button-size-small-height) / 2); +} +.tiny-button.tiny-button--small.is-circle { + border-radius: 50%; +} +.tiny-button.tiny-button--mini { + height: var(--ti-button-size-mini-height); + line-height: var(--ti-button-size-mini-height); + font-size: var(--ti-button-size-mini-font-size); +} +.tiny-button.tiny-button--mini.is-round { + border-radius: calc(var(--ti-button-size-mini-height) / 2); +} +.tiny-button.tiny-button--mini.is-circle { + border-radius: 50%; +} +.tiny-icon-loading { + font-size: var(--ti-common-font-size-1); + line-height: 1; + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; +} +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0); + transform: rotateZ(0); + } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); + } +} +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0); + transform: rotateZ(0); + } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); + } +} +.tiny-button-group { + --ti-button-group-border-color: var(--ti-base-color-border); + --ti-button-group-border-radius: var(--ti-common-border-radius-normal); + --ti-button-group-hover-border-color: var(--ti-base-color-brand-6); + --ti-button-group-info-border-color: rgba(255, 255, 255, 0.5); + --ti-button-group-disabled-color: var(--ti-common-color-bg-disabled); + --ti-button-group-item-background: var(--ti-base-color-light); + --ti-button-group-item-button-color: var(--ti-base-color-info-normal); + --ti-button-group-item-button-width: var(--ti-base-size-width-normal); + --ti-button-group-item-button-height: var(--ti-base-size-height-minor); + --ti-button-group-item-button-font-size: var(--ti-common-font-size-base); + --ti-button-group-item-button-disabled-background: var(--ti-common-color-bg-disabled); + --ti-button-group-item-button-disabled-border-color: var(--ti-base-color-border); + --ti-button-group-item-button-disabled-color: var(--ti-base-color-placeholder); + --ti-button-group-item-button-hover-background: var(--ti-base-color-brand-5); + --ti-button-group-item-button-hover-color: var(--ti-base-color-light); + --ti-button-group-item-button-plain-color: var(--ti-base-color-brand-6); + --ti-button-group-item-button-plain-background: rgba(24, 144, 255, 0.06); + --ti-button-group-item-button-plain-border-color: var(--ti-base-color-brand-6); + --ti-button-group-item-active-background: var(--ti-base-color-brand-6); + --ti-button-group-item-active-color: var(--ti-base-color-light); + display: inline-block; + vertical-align: middle; +} +.tiny-button-group:after, +.tiny-button-group:before { + content: ''; + display: table; +} +.tiny-button-group:after { + clear: both; +} +.tiny-button-group .tiny-group-item { + display: inline-block; + vertical-align: middle; +} +.tiny-button-group .tiny-group-item li { + line-height: 28px; + background: var(--ti-button-group-item-background); + float: left; + position: relative; +} +.tiny-button-group .tiny-group-item li button { + border: 1px solid var(--ti-button-group-border-color); + display: block; + text-align: center; + color: var(--ti-button-group-item-button-color); + background: var(--ti-button-group-item-background); + min-width: var(--ti-button-group-item-button-width); + height: var(--ti-button-group-item-button-height); + padding: 0 8px; + text-decoration: none; + font-size: var(--ti-button-group-item-button-font-size); + outline: 0; + cursor: pointer; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} +.tiny-button-group .tiny-group-item li button.disabled, +.tiny-button-group .tiny-group-item li button[disabled] { + background: var(--ti-button-group-item-button-disabled-background); + border-color: var(--ti-button-group-item-button-disabled-border-color); + cursor: not-allowed; + color: var(--ti-button-group-item-button-disabled-color); +} +.tiny-button-group .tiny-group-item li button.plain, +.tiny-button-group .tiny-group-item li button[plain] { + background: 0 0; +} +.tiny-button-group .tiny-group-item li:hover { + z-index: 1; +} +.tiny-button-group .tiny-group-item li:hover button:not(.disabled) { + background: var(--ti-button-group-item-button-hover-background); + color: var(--ti-button-group-item-button-hover-color); + border-color: var(--ti-button-group-item-button-hover-background); + outline: 0; +} +.tiny-button-group .tiny-group-item li:hover button:not(.disabled).plain, +.tiny-button-group .tiny-group-item li:hover button:not(.disabled)[plain] { + color: var(--ti-button-group-item-button-plain-color); + background-color: var(--ti-button-group-item-button-plain-background); + border-color: var(--ti-button-group-item-button-plain-border-color); +} +.tiny-button-group .tiny-group-item li.active { + z-index: 1; +} +.tiny-button-group .tiny-group-item li.active:hover button:not(.disabled) { + background: var(--ti-button-group-item-button-hover-background); + border-color: var(--ti-button-group-item-button-hover-background); +} +.tiny-button-group .tiny-group-item li.active:hover button:not(.disabled).plain, +.tiny-button-group .tiny-group-item li.active:hover button:not(.disabled)[plain] { + background-color: var(--ti-button-group-item-button-plain-background); +} +.tiny-button-group .tiny-group-item li.active button:not(.disabled) { + background: var(--ti-button-group-item-active-background); + color: var(--ti-button-group-item-active-color); + border-color: var(--ti-button-group-item-active-background); + outline: 0; +} +.tiny-button-group .tiny-group-item li.active button:not(.disabled).plain, +.tiny-button-group .tiny-group-item li.active button:not(.disabled)[plain] { + color: var(--ti-button-group-item-active-background); + background: 0 0; +} +.tiny-button-group .tiny-group-item li:first-child button { + border-radius: var(--ti-common-border-radius-normal) 0 0 var(--ti-common-border-radius-normal); +} +.tiny-button-group .tiny-group-item li:last-child button { + border-radius: 0 var(--ti-common-border-radius-normal) var(--ti-common-border-radius-normal) 0; +} +.tiny-button-group .tiny-group-item li:not(:last-child) { + margin-right: -1px; +} +.tiny-button-group > .tiny-button { + float: left; + position: relative; +} +.tiny-button-group > .tiny-button + .tiny-button { + margin-left: 0; +} +.tiny-button-group > .tiny-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right-color: var(--ti-button-group-info-border-color); +} +.tiny-button-group > .tiny-button:first-child.tiny-button--default { + border-right-color: var(--ti-button-group-border-color); +} +.tiny-button-group > .tiny-button:first-child.tiny-button--default:active, +.tiny-button-group > .tiny-button:first-child.tiny-button--default:focus, +.tiny-button-group > .tiny-button:first-child.tiny-button--default:hover { + border-right-color: var(--ti-button-group-hover-border-color); + z-index: 1; +} +.tiny-button-group > .tiny-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: var(--ti-button-group-info-border-color); +} +.tiny-button-group > .tiny-button:last-child.tiny-button--default { + border-left-color: var(--ti-button-group-border-color); +} +.tiny-button-group > .tiny-button:last-child.tiny-button--default:active, +.tiny-button-group > .tiny-button:last-child.tiny-button--default:focus, +.tiny-button-group > .tiny-button:last-child.tiny-button--default:hover { + border-left-color: var(--ti-button-group-hover-border-color); + z-index: 1; +} +.tiny-button-group > .tiny-button:first-child:last-child { + border-radius: var(--ti-button-group-border-radius); +} +.tiny-button-group > .tiny-button:first-child:last-child.is-round { + border-radius: calc(var(--ti-button-size-normal-height, 30px) / 2); +} +.tiny-button-group > .tiny-button:first-child:last-child.is-circle { + border-radius: 50%; +} +.tiny-button-group > .tiny-button:not(:first-child):not(:last-child) { + border-radius: 0; + border-left-color: var(--ti-button-group-info-border-color); + border-right-color: var(--ti-button-group-info-border-color); +} +.tiny-button-group > .tiny-button:not(:first-child):not(:last-child).tiny-button--default { + border-left-color: var(--ti-button-group-border-color); + border-right-color: var(--ti-button-group-border-color); +} +.tiny-button-group > .tiny-button:not(:first-child):not(:last-child).tiny-button--default:active, +.tiny-button-group > .tiny-button:not(:first-child):not(:last-child).tiny-button--default:focus, +.tiny-button-group > .tiny-button:not(:first-child):not(:last-child).tiny-button--default:hover { + border-left-color: var(--ti-button-group-hover-border-color); + border-right-color: var(--ti-button-group-hover-border-color); + z-index: 1; +} +.tiny-button-group > .tiny-button:not(:last-child) { + margin-right: -1px; +} +.tiny-button-group > .tiny-button > .tiny-dropdown > .tiny-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: var(--ti-button-group-info-border-color); +} +.tiny-transition-zoom-in-top-enter-active, +.tiny-transition-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; +} +.tiny-transition-zoom-in-top-enter, +.tiny-transition-zoom-in-top-enter-from, +.tiny-transition-zoom-in-top-leave-to { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); + -webkit-transform-origin: center top; + transform-origin: center top; +} +.tiny-calendar { + --ti-calendar-bgcolor: var(--ti-base-color-light); + --ti-calendar-list-item-selected-font-color: var(--ti-base-color-light); + --ti-calendar-hover-color: var(--ti-base-color-brand-5); + --ti-calendar-border-color: var(--ti-base-color-border); + --ti-calendar-color-primary: var(--ti-base-color-brand-6); + --ti-calendar-background-color-primary: rgba(24, 144, 255, 0.1); + --ti-calendar-color-success: var(--ti-base-color-success-normal); + --ti-calendar-color-warning: var(--ti-base-color-warning-normal); + --ti-calendar-color-danger: var(--ti-base-color-bg-8); + --ti-calendar-color-info: var(--ti-base-color-info-normal); + --ti-calendar-tool-width: var(--ti-base-size-width-normal); + --ti-calendar-content-heard-font-size: var(--ti-common-font-size-1); + --ti-calendar-selected-border-radius: var(--ti-base-radius-large); + --ti-calendar-input-height: var(--ti-base-size-height-minor); + --ti-calendar-input-border-radius: var(--ti-common-border-radius-normal); + --ti-calendar-input-font-size: var(--ti-common-font-size-base); + --ti-calendar-list-item-height: var(--ti-base-size-height-minor); + --ti-calendar-list-item-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-calendar-list-item-selected-bgcolor: var(--ti-base-color-selected-background); + --ti-calendar-disabled-color: var(--ti-common-color-text-disabled); + --ti-calendar-disabled-info-color: var(--ti-base-color-bg-5); + --ti-calendar-disabled-success-color: var(--ti-base-color-bg-5); + --ti-calendar-disabled-warning-color: var(--ti-base-color-bg-5); + --ti-calendar-disabled-error-color: var(--ti-base-color-bg-5); + background: var(--ti-calendar-bgcolor); + overflow: hidden; + margin: 10px; +} +.tiny-calendar.is-popover.tiny-popover.tiny-popper { + padding: 0; + margin: 2px 0 0; +} +.tiny-calendar .tiny-calendar__header { + overflow: hidden; + margin-bottom: 12px; +} +.tiny-calendar .tiny-calendar__selected { + border: 1px solid var(--ti-calendar-color-primary); + background: var(--ti-calendar-background-color-primary); + padding: 8px; + color: var(--ti-calendar-color-info); + line-height: 140%; + border-radius: var(--ti-calendar-selected-border-radius); + margin-bottom: 8px; +} +.tiny-calendar .tiny-calendar__tool { + list-style: none; + overflow: hidden; + float: right; + margin-bottom: 8px; +} +.tiny-calendar .tiny-calendar__tool > li { + float: left; + margin-right: 8px; +} +.tiny-calendar .tiny-calendar__tool > li > span { + display: inline-block; +} +.tiny-calendar .tiny-calendar__tool > li:last-child { + margin-left: 16px; + margin-right: 0; +} +.tiny-calendar .tiny-calendar__input { + width: var(--ti-calendar-tool-width); + position: relative; + outline: 0; +} +.tiny-calendar .tiny-calendar__input > input { + width: 100%; + height: var(--ti-calendar-input-height); + line-height: var(--ti-calendar-input-height); + border: 1px solid var(--ti-calendar-border-color); + color: var(--ti-calendar-color-info); + border-radius: var(--ti-calendar-input-border-radius); + background: var(--ti-calendar-bgcolor); + font-size: var(--ti-calendar-input-font-size); + padding: 0 30px 0 8px; + display: block; + white-space: nowrap; + -webkit-transition: border 0.3s; + transition: border 0.3s; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-calendar .tiny-calendar__input > input.active, +.tiny-calendar .tiny-calendar__input > input:active, +.tiny-calendar .tiny-calendar__input > input:focus, +.tiny-calendar .tiny-calendar__input > input:hover, +.tiny-calendar .tiny-calendar__input > input[active] { + border: 1px solid var(--ti-calendar-color-primary); +} +.tiny-calendar .tiny-calendar__input > input[readonly] { + cursor: not-allowed; +} +.tiny-calendar .tiny-calendar__input-btn { + bottom: 0; + right: 4px; + position: absolute; + top: 0; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + font-size: var(--ti-common-font-size-base); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + cursor: pointer; +} +.tiny-calendar .tiny-calendar__input-btn svg { + fill: var(--ti-calendar-color-primary); +} +.tiny-calendar .tiny-calendar__input-btn svg:hover { + fill: var(--ti-calendar-hover-color); +} +.tiny-calendar .tiny-calendar__tabs { + list-style: none; + overflow: hidden; +} +.tiny-calendar .tiny-calendar__tabs > li { + position: relative; + float: left; + width: calc(var(--ti-calendar-tool-width) / 2); + height: var(--ti-calendar-input-height); + line-height: var(--ti-calendar-input-height); + border: 1px solid var(--ti-calendar-border-color); + text-align: center; + font-size: var(--ti-calendar-input-font-size); + font-weight: 500; + color: var(--ti-calendar-color-info); + cursor: pointer; +} +.tiny-calendar .tiny-calendar__tabs > li:first-child { + border-radius: 3px 0 0 3px; +} +.tiny-calendar .tiny-calendar__tabs > li:last-child { + margin-left: -1px; + border-radius: 0 3px 3px 0; +} +.tiny-calendar .tiny-calendar__tabs > li:hover { + color: var(--ti-calendar-color-primary); +} +.tiny-calendar .tiny-calendar__tabs > .active { + color: var(--ti-calendar-color-primary); + border: 1px solid var(--ti-calendar-color-primary); + z-index: 1; +} +.tiny-calendar .tiny-calendar__main { + width: 100%; + overflow: hidden; +} +.tiny-calendar .tiny-calendar__main table { + width: 100%; +} +.tiny-calendar .tiny-calendar__main table > tr > th { + line-height: 18px; + padding: 0 10px 5px 10px; + font-size: var(--ti-calendar-content-heard-font-size); + text-align: right; + width: 14.28571429%; +} +.tiny-calendar .tiny-calendar__main table > tr > td { + text-align: right; + padding: 0 5px 0 0; +} +.tiny-calendar .tiny-calendar__main.year table > tr > td { + width: 33.33333333%; +} +.tiny-calendar .tiny-calendar__day { + border-top: 3px solid var(--ti-calendar-border-color); + margin: 0 3px 5px 3px; + height: 100px; + padding: 5px; +} +.tiny-calendar .tiny-calendar__day.selected { + background: var(--ti-calendar-background-color-primary); +} +.tiny-calendar .tiny-calendar__day.selected .label { + color: var(--ti-calendar-color-primary); +} +.tiny-calendar .tiny-calendar__day:hover { + background: var(--ti-calendar-background-color-primary); +} +.tiny-calendar .tiny-calendar__day.disable { + color: var(--ti-calendar-disabled-color); +} +.tiny-calendar .tiny-calendar__day.disable .info:before { + background: var(--ti-calendar-disabled-info-color); +} +.tiny-calendar .tiny-calendar__day.disable .success:before { + background: var(--ti-calendar-disabled-success-color); +} +.tiny-calendar .tiny-calendar__day.disable .warning:before { + background: var(--ti-calendar-disabled-warning-color); +} +.tiny-calendar .tiny-calendar__day.disable .error:before { + background: var(--ti-calendar-disabled-error-color); +} +.tiny-calendar .tiny-calendar__day.this-month, +.tiny-calendar .tiny-calendar__day.today { + border-color: var(--ti-calendar-color-primary); +} +.tiny-calendar .tiny-calendar__events { + text-align: left; + height: calc(100% - 18px); + overflow-y: auto; +} +.tiny-calendar .tiny-calendar__events .event { + margin: 5px 10px; + cursor: pointer; +} +.tiny-calendar .tiny-calendar__events .event:before { + content: ''; + width: 6px; + height: 6px; + border-radius: 50%; + display: inline-block; + margin-right: 3px; +} +.tiny-calendar .tiny-calendar__events .info:before { + background: var(--ti-calendar-color-info); +} +.tiny-calendar .tiny-calendar__events .success:before { + background: var(--ti-calendar-color-success); +} +.tiny-calendar .tiny-calendar__events .warning:before { + background: var(--ti-calendar-color-warning); +} +.tiny-calendar .tiny-calendar__events .error:before { + background: var(--ti-calendar-color-danger); +} +.tiny-calendar__tip { + display: block; + min-width: 160px; +} +.tiny-calendar__tip-header { + overflow: hidden; + border-bottom: 1px solid rgba(255, 255, 255, 0.5); + padding: 5px 0; + font-size: var(--ti-calendar-content-heard-font-size); +} +.tiny-calendar__tip-year { + float: left; +} +.tiny-calendar__tip-hours { + float: right; +} +.tiny-calendar__tip-title { + margin: 5px 0; + font-weight: 700; +} +.tiny-calendar .tiny-calendar__selector { + width: var(--ti-calendar-tool-width); + max-height: 300px; + overflow-y: auto; + overflow-x: hidden; +} +.tiny-calendar .tiny-calendar__list-item { + min-height: var(--ti-calendar-list-item-height); + line-height: var(--ti-calendar-list-item-height); + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 8px; + color: var(--ti-calendar-color-info); +} +.tiny-calendar .tiny-calendar__list-item:hover { + cursor: pointer; + background: var(--ti-calendar-list-item-hover-bgcolor); +} +.tiny-calendar .tiny-calendar__list-item.is-selected { + background: var(--ti-calendar-list-item-selected-bgcolor); + color: var(--ti-calendar-list-item-selected-font-color); +} +.tiny-cards { + --ti-card-background: var(--ti-base-color-light); + --ti-card-drop-border-color: var(--ti-base-color-brand-6); + border-radius: 0; + background-color: var(--ti-card-background); + overflow: hidden; + position: relative; + -webkit-box-shadow: none; + box-shadow: none; + border: 0; +} +.tiny-cards .tiny-cards_body { + padding: 12px 24px 24px; +} +.tiny-cards.card-layout { + border: none; + border-radius: 0; + overflow: hidden; + -webkit-box-shadow: none; + box-shadow: none; + position: relative; + -webkit-transition: height 0.2s ease; + transition: height 0.2s ease; +} +.tiny-cards.card-layout .tiny-cards_body { + padding: 0; +} +.tiny-cards.card-layout.drop-active { + border: 1px solid var(--ti-card-drop-border-color); + background-color: var(--ti-card-background); +} +.tiny-card-template { + --ti-card-background: var(--ti-base-color-light); + --ti-card-tool-icon-size: 16px; + --ti-card-tool-icon-color: var(--ti-base-color-brand-6); + --ti-card-tool-icon-hover-color: var(--ti-base-color-brand-5); + --ti-card-tool-icon-active-color: var(--ti-base-color-primary-active); + --ti-card-tool-selector-height: var(--ti-common-size-10x); + --ti-card-tool-selector-color: var(--ti-base-color-info-normal); + --ti-card-tool-selector-hover-color: var(--ti-base-color-brand-6); + --ti-card-tool-selector-hover-background: var(--ti-base-color-selected-background); + --ti-card-tool-selector-active-color: var(--ti-base-color-primary-active); + --ti-card-tool-selector-active-background: var(--ti-base-color-selected-background); + --ti-card-header-height: 46px; + --ti-card-header-border-color: var(--ti-base-color-border); + --ti-card-header-title-font-weight: var(--ti-common-font-weight-7); + --ti-card-header-title-font-size: var(--ti-common-font-size-1); + --ti-card-header-title-color: var(--ti-base-color-info-normal); + border-radius: 0; + background-color: var(--ti-card-background); + overflow: hidden; + position: relative; + -webkit-box-shadow: none; + box-shadow: none; + border: 0; +} +.tiny-card-template .tiny-card-template__header { + padding: 0 24px; + height: var(--ti-card-header-height); + line-height: var(--ti-card-header-height); +} +.tiny-card-template .tiny-card-template__header.is-line { + border-bottom: 1px solid var(--ti-card-header-border-color); +} +.tiny-card-template .tiny-card-template__title { + font-weight: var(--ti-card-header-title-font-weight); + font-size: var(--ti-card-header-title-font-size); + color: #333; + color: var(--ti-card-header-title-color); + float: left; +} +.tiny-card-template .tiny-card-template__tools:after, +.tiny-card-template .tiny-card-template__tools:before { + content: ''; + display: table; +} +.tiny-card-template .tiny-card-template__tools:after { + clear: both; +} +.tiny-card-template .tiny-card-template__tools .tiny-icon { + font-size: var(--ti-card-tool-icon-size); + cursor: pointer; +} +.tiny-card-template .tiny-card-template__list { + overflow: hidden; + float: right; +} +.tiny-card-template .tiny-card-template__list > li { + height: var(--ti-card-header-height); + line-height: var(--ti-card-header-height); + float: left; + font-size: var(--ti-common-font-size-2); + margin: 0 12px 0 0; +} +.tiny-card-template .tiny-card-template__list > li svg { + fill: var(--ti-card-tool-icon-color); + cursor: pointer; +} +.tiny-card-template .tiny-card-template__list > li .tiny-icon { + color: var(--ti-card-tool-icon-color); +} +.tiny-card-template .tiny-card-template__list > li .tiny-icon:hover { + color: var(--ti-card-tool-icon-hover-color); +} +.tiny-card-template .tiny-card-template__list > li .tiny-icon:active { + color: var(--ti-card-tool-icon-active-color); +} +.tiny-card-template .tiny-card-template__list > li:last-child { + margin: 0; +} +.tiny-card-template .tiny-card-template__more { + position: absolute; + top: calc(var(--ti-card-header-height, 45px) - 1 * 1px); + right: 5px; + border: 1px solid var(--ti-card-header-border-color); + border-radius: 2px; + -webkit-box-shadow: var(--ti-base-box-shadow); + box-shadow: var(--ti-base-box-shadow); + background: var(--ti-card-background); + color: #333; + color: var(--ti-card-tool-selector-color); + margin-top: 2px; +} +.tiny-card-template .tiny-card-template__more:before { + content: ''; + position: absolute; + display: block; + top: -5px; + right: 21px; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + border-color: #fff #fff transparent transparent; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-box-shadow: 1px -1px 1px rgba(0, 0, 0, 0.2); + box-shadow: 1px -1px 1px rgba(0, 0, 0, 0.2); +} +.tiny-card-template .tiny-card-template__more > ul > li { + height: var(--ti-card-tool-selector-height); + line-height: var(--ti-card-tool-selector-height); + padding: 0 18px; + color: var(--ti-card-tool-selector-color); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-card-template .tiny-card-template__more > ul > li .tiny-icon { + color: var(--ti-card-tool-icon-color); + margin-right: 10px; +} +.tiny-card-template .tiny-card-template__more > ul > li svg { + font-size: var(--ti-common-font-size-2); +} +.tiny-card-template .tiny-card-template__more > ul > li:hover { + cursor: pointer; + color: var(--ti-card-tool-selector-hover-color); + background: var(--ti-card-tool-selector-hover-background); +} +.tiny-card-template .tiny-card-template__more > ul > li:hover .tiny-icon { + color: var(--ti-card-tool-icon-hover-color); +} +.tiny-card-template .tiny-card-template__more > ul > li:active { + color: var(--ti-card-tool-selector-active-color); + background: var(--ti-card-tool-selector-active-background); +} +.tiny-card-template .tiny-card-template__more > ul > li:active .tiny-icon { + color: var(--ti-card-tool-icon-active-color); +} +.tiny-card-template .tiny-card-template__body { + padding: 12px 24px 24px; +} +.tiny-transition-carousel-arrow-left-enter, +.tiny-transition-carousel-arrow-left-enter-from, +.tiny-transition-carousel-arrow-left-leave-to { + opacity: 0; + left: 0; +} +.tiny-transition-carousel-arrow-left-enter-active { + -webkit-animation: animation-left 0.3s; + animation: animation-left 0.3s; +} +.tiny-transition-carousel-arrow-left-leave-active { + animation: animation-left 0.3s reverse; +} +.tiny-transition-carousel-arrow-right-enter, +.tiny-transition-carousel-arrow-right-enter-from, +.tiny-transition-carousel-arrow-right-leave-to { + opacity: 0; + right: 0; +} +.tiny-transition-carousel-arrow-right-enter-active { + -webkit-animation: animation-right 0.3s; + animation: animation-right 0.3s; +} +.tiny-transition-carousel-arrow-right-leave-active { + animation: animation-right 0.3s reverse; +} +@-webkit-keyframes animation-right { + 0% { + opacity: 0; + right: 0; + } + 100% { + opacity: 1; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 16px; + } +} +@keyframes animation-right { + 0% { + opacity: 0; + right: 0; + } + 100% { + opacity: 1; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 16px; + } +} +@-webkit-keyframes animation-left { + 0% { + opacity: 0; + left: 0; + } + 100% { + opacity: 1; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + left: 16px; + } +} +@keyframes animation-left { + 0% { + opacity: 0; + left: 0; + } + 100% { + opacity: 1; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + left: 16px; + } +} +.tiny-carousel { + --ti-carousel-arrow-height: var(--ti-base-size-height-minor); + --ti-carousel-arrow-width: var(--ti-base-size-width-minor); + --ti-carousel-arrow-font-size: var(--ti-common-font-size-base); + --ti-carousel-arrow-hover-color: rgba(0, 0, 0, 0.6); + --ti-carousel-arrow-background: rgba(0, 0, 0, 0.3); + --ti-carousel-arrow-box-shadow: none; + --ti-carousel-arrow-active-color: var(--ti-base-color-light); + --ti-carousel-indicators-background: rgba(3, 2, 2, 0.3); + --ti-carousel-indicators-radius: 13px; + --ti-carousel-indicators-height: var(--ti-common-size-4x); + --ti-carousel-indicators-radius-background: rgba(0, 0, 0, 0.3); + --ti-carousel-indicator-active-color: var(--ti-base-color-light); + --ti-carousel-indicator-button-width: var(--ti-common-size-2x); + --ti-carousel-indicator-button-height: var(--ti-common-size-2x); + --ti-carousel-indicator-button-color: #bfbfbf; + --ti-carousel-indicator-margin-right: 0; + --ti-carousel-indicator-active-width: var(--ti-common-size-3x); + --ti-carousel-indicator-padding: 0px 2px; + --ti-carousel-indicator-active-transition-property: none; + --ti-carousel-indicator-active-background-color: var(--ti-base-color-transparent); + --ti-carousel-indicator-active-button-width: var(--ti-carousel-indicator-button-width); + --ti-carousel-indicator-active-border-radius: var(--ti-carousel-indicators-radius); + --ti-carousel-indicator-active-transition: none; + --ti-carousel-outside-button-background: var(--ti-base-color-dark); + --ti-carousel-outside-button-active-background: var(--ti-base-color-secondary); + --ti-carousel-labels-button-font-size: var(--ti-common-font-size-base); + --ti-carousel-hover-opacity: 0.6; + overflow: hidden; + position: relative; +} +.tiny-carousel.tiny-carousel--card .tiny-carousel__indicators { + display: none; +} +.tiny-carousel__container { + position: relative; + height: 300px; +} +.tiny-carousel__container .tiny-carousel__arrow { + border: none; + outline: 0; + padding: 0; + margin: 0; + height: var(--ti-carousel-arrow-height); + width: var(--ti-carousel-arrow-width); + cursor: pointer; + -webkit-transition: 0.3s; + transition: 0.3s; + border-radius: 50%; + -webkit-box-shadow: var(--ti-carousel-arrow-box-shadow); + box-shadow: var(--ti-carousel-arrow-box-shadow); + background-color: var(--ti-carousel-arrow-background); + color: var(--ti-carousel-indicator-active-color); + position: absolute; + top: 50%; + z-index: 3; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + text-align: center; + font-size: var(--ti-carousel-arrow-font-size); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-carousel__container .tiny-carousel__arrow .tiny-svg { + fill: var(--ti-carousel-indicator-active-color); +} +.tiny-carousel__container .tiny-carousel__arrow.tiny-carousel__arrow-left { + left: 16px; +} +.tiny-carousel__container .tiny-carousel__arrow.tiny-carousel__arrow-right { + right: 16px; +} +.tiny-carousel__container .tiny-carousel__arrow:hover { + background-color: var(--ti-carousel-arrow-hover-color); +} +.tiny-carousel__container .tiny-carousel__arrow i { + cursor: pointer; +} +.tiny-carousel .tiny-carousel__indicators { + position: absolute; + list-style: none; + bottom: 8px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + margin: 0; + padding: 0 4px; + z-index: 2; + background: var(--ti-carousel-indicators-background); + border-radius: var(--ti-carousel-indicators-radius); + height: var(--ti-carousel-indicators-height); +} +.tiny-carousel .tiny-carousel__indicators .tiny-carousel__indicator { + display: inline-block; + background-color: transparent; + padding: var(--ti-carousel-indicator-padding); + margin-right: var(--ti-carousel-indicator-margin-right); + cursor: pointer; +} +.tiny-carousel .tiny-carousel__indicators .tiny-carousel__indicator:hover button { + opacity: var(--ti-carousel-hover-opacity); +} +.tiny-carousel .tiny-carousel__indicators .tiny-carousel__indicator.is-active { + width: var(--ti-carousel-indicator-active-width); + background-color: var(--ti-carousel-indicator-active-background-color); + border-radius: var(--ti-carousel-indicator-active-border-radius); + -webkit-transition: var(--ti-carousel-indicator-active-transition); + transition: var(--ti-carousel-indicator-active-transition); +} +.tiny-carousel .tiny-carousel__indicators .tiny-carousel__indicator.is-active button { + -webkit-transition-property: var(--ti-carousel-indicator-active-transition-property); + transition-property: var(--ti-carousel-indicator-active-transition-property); + -webkit-transition-timing-function: cubic-bezier(0.16, 0.75, 0.5, 1); + transition-timing-function: cubic-bezier(0.16, 0.75, 0.5, 1); + border-radius: var(--ti-carousel-indicator-active-border-radius); + background-color: var(--ti-carousel-indicator-active-color); + width: var(--ti-carousel-indicator-active-button-width); +} +.tiny-carousel .tiny-carousel__indicators .tiny-carousel__indicator .tiny-carousel__button { + display: block; + width: var(--ti-carousel-indicator-button-width); + height: var(--ti-carousel-indicator-button-height); + background-color: var(--ti-carousel-indicator-button-color); + border: none; + outline: 0; + padding: 0; + margin: 0; + cursor: pointer; + -webkit-transition: 0.3s; + transition: 0.3s; + border-radius: 50%; +} +.tiny-carousel .tiny-carousel__indicators .tiny-carousel__button._radius { + height: 8px; + width: 8px; + border-radius: 50%; + background-color: var(--ti-carousel-indicators-radius-background); +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-outside { + bottom: 26px; + text-align: center; + position: static; + -webkit-transform: none; + transform: none; + margin-top: 16px; + background: 0 0; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-outside button { + background-color: var(--ti-carousel-outside-button-background); +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-outside .tiny-carousel__indicator:hover button { + opacity: 0.6; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-outside .tiny-carousel__indicator.is-active button { + background-color: var(--ti-carousel-outside-button-active-background); +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-labels { + left: 0; + right: 0; + -webkit-transform: none; + transform: none; + text-align: center; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-labels .tiny-carousel__button { + padding: 2px 18px; + font-size: var(--ti-carousel-labels-button-font-size); +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-labels .tiny-carousel__indicator { + padding: 6px 4px; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-title { + left: auto; + right: 12px; + bottom: 3px; + -webkit-transform: none; + transform: none; + background: 0 0; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-vertical { + left: 12px; + right: 0; + bottom: 50%; + width: 16px; + height: 56px; + -webkit-transform: translateY(50%); + transform: translateY(50%); + padding: 2px 4px; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-vertical .tiny-carousel__indicator { + display: block; + margin: 4px 0; + padding: 0; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-vertical .tiny-carousel__indicator:first-child { + padding-left: 0; +} +.tiny-carousel .tiny-carousel__indicators.tiny-carousel__indicators-vertical .tiny-carousel__indicator:last-child { + padding-right: 0; +} +.tiny-carousel .tiny-carousel__indicators:not(.tiny-carousel__indicators-vertical) { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-carousel { + --ti-carousel-item-title-height: var(--ti-base-size-height-small); + --ti-carousel-item-title-color: var(--ti-base-color-light); + --ti-carousel-item-title-background: rgba(0, 0, 0, 0.3); + --ti-carousel-item-title-span-font-size: var(--ti-common-font-size-base); + --ti-carousel-mask-background: var(--ti-base-color-light); +} +.tiny-carousel__item, +.tiny-carousel__mask { + position: absolute; + height: 100%; + top: 0; + left: 0; +} +.tiny-carousel__item { + width: 100%; + display: inline-block; + overflow: hidden; + z-index: 0; +} +.tiny-carousel__item .item-title { + position: absolute; + bottom: 0; + height: var(--ti-carousel-item-title-height); + width: 100%; + line-height: var(--ti-carousel-item-title-height); + color: var(--ti-carousel-item-title-color, #fff); + text-align: left; + background: var(--ti-carousel-item-title-background); +} +.tiny-carousel__item .item-title span { + padding: 0 12px; + font-size: var(--ti-carousel-item-title-span-font-size); + width: 80%; + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.tiny-carousel__item.is-active { + z-index: 2; +} +.tiny-carousel__item.is-animating { + -webkit-transition: -webkit-transform 0.4s ease-in-out; + transition: -webkit-transform 0.4s ease-in-out; + transition: transform 0.4s ease-in-out; + transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out; +} +.tiny-carousel__item--card { + width: 50%; + -webkit-transition: -webkit-transform 0.4s ease-in-out; + transition: -webkit-transform 0.4s ease-in-out; + transition: transform 0.4s ease-in-out; + transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out; +} +.tiny-carousel__item--card.is-in-stage { + cursor: pointer; + z-index: 1; +} +.tiny-carousel__item--card.is-in-stage.is-hover .tiny-carousel__mask, +.tiny-carousel__item--card.is-in-stage:hover .tiny-carousel__mask { + opacity: 0.12; +} +.tiny-carousel__item--card.is-active { + z-index: 2; +} +.tiny-carousel__mask { + width: 100%; + background-color: var(--ti-carousel-mask-background); + opacity: 0.24; + -webkit-transition: 0.2s; + transition: 0.2s; +} +.tiny-cascader { + --ti-cascader-font-size: var(--ti-common-font-size-1); + --ti-cascader-hover-border-color: var(--ti-base-color-common-5); + --ti-cascader-focus-border-color: var(--ti-base-color-brand-6); + --ti-cascader-border-radius: var(--ti-common-border-radius-1); + --ti-cascader-icon-color: #909399; + --ti-cascader-medium-font-size: var(--ti-common-font-size-1); + --ti-cascader-medium-line-height: 36px; + --ti-cascader-small-line-height: 32px; + --ti-cascader-mini-line-height: 28px; + --ti-cascader-small-font-size: 13px; + --ti-cascader-mini-font-size: var(--ti-common-font-size-base, 12px); + --ti-cascader-disabled-color: #c0c4cc; + --ti-cascader-dropdown-background: var(--ti-base-color-light); + --ti-cascader-dropdown-border-color: #e4e7ed; + --ti-cascader-tag-background: #f0f2f5; + --ti-cascader-tag-icon-bgcolor: #c0c4cc; + --ti-cascader-tag-icon-color: var(--ti-base-color-light); + --ti-cascader-tag-icon-hover-bgcolor: #909399; + --ti-cascader-list-color: #606266; + --ti-cascader-item-height: var(--ti-base-size-height-minor); + --ti-cascader-item-hover-background: #f5f7fa; + --ti-cascader-item-checked-color: var(--ti-base-color-brand-5); + --ti-cascader-empty-text-color: #c0c4cc; + --ti-cascader-search-input-color: var(--ti-base-color-info-normal); + --ti-cascader-search-input-placeholder-color: var(--ti-base-color-placeholder); + --ti-cascader-dropdown-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-cascader-width: '100%'; + display: inline-block; + position: relative; + font-size: var(--ti-cascader-font-size); +} +.tiny-cascader:not(.is-disabled):hover .tiny-input__inner { + cursor: pointer; + border-color: var(--ti-cascader-hover-border-color); +} +.tiny-cascader .tiny-input { + cursor: pointer; +} +.tiny-cascader .tiny-input .tiny-input__inner { + text-overflow: ellipsis; +} +.tiny-cascader .tiny-input .tiny-input__inner:focus { + border-color: var(--ti-cascader-focus-border-color); +} +.tiny-cascader .tiny-input.is-focus .tiny-input__inner { + border-color: var(--ti-cascader-focus-border-color); +} +.tiny-cascader .tiny-input .tiny-icon-arrow-down { + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + font-size: var(--ti-cascader-font-size); +} +.tiny-cascader .tiny-input .tiny-icon-arrow-down.is-reverse { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); +} +.tiny-cascader .tiny-input .tiny-icon-circle-close:hover { + color: var(--ti-cascader-icon-color); +} +.tiny-cascader--medium { + font-size: var(--ti-cascader-medium-font-size); + line-height: var(--ti-cascader-medium-line-height); +} +.tiny-cascader--small { + font-size: var(--ti-cascader-small-font-size); + line-height: var(--ti-cascader-small-line-height); +} +.tiny-cascader--mini { + font-size: var(--ti-cascader-mini-font-size); + line-height: var(--ti-cascader-mini-line-height); +} +.tiny-cascader.is-disabled .tiny-cascader__label { + z-index: 2; + color: var(--ti-cascader-disabled-color); +} +.tiny-cascader__dropdown { + --ti-cascader-font-size: var(--ti-common-font-size-1); + --ti-cascader-hover-border-color: var(--ti-base-color-common-5); + --ti-cascader-focus-border-color: var(--ti-base-color-brand-6); + --ti-cascader-border-radius: var(--ti-common-border-radius-1); + --ti-cascader-icon-color: #909399; + --ti-cascader-medium-font-size: var(--ti-common-font-size-1); + --ti-cascader-medium-line-height: 36px; + --ti-cascader-small-line-height: 32px; + --ti-cascader-mini-line-height: 28px; + --ti-cascader-small-font-size: 13px; + --ti-cascader-mini-font-size: var(--ti-common-font-size-base, 12px); + --ti-cascader-disabled-color: #c0c4cc; + --ti-cascader-dropdown-background: var(--ti-base-color-light); + --ti-cascader-dropdown-border-color: #e4e7ed; + --ti-cascader-tag-background: #f0f2f5; + --ti-cascader-tag-icon-bgcolor: #c0c4cc; + --ti-cascader-tag-icon-color: var(--ti-base-color-light); + --ti-cascader-tag-icon-hover-bgcolor: #909399; + --ti-cascader-list-color: #606266; + --ti-cascader-item-height: var(--ti-base-size-height-minor); + --ti-cascader-item-hover-background: #f5f7fa; + --ti-cascader-item-checked-color: var(--ti-base-color-brand-5); + --ti-cascader-empty-text-color: #c0c4cc; + --ti-cascader-search-input-color: var(--ti-base-color-info-normal); + --ti-cascader-search-input-placeholder-color: var(--ti-base-color-placeholder); + --ti-cascader-dropdown-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-cascader-width: '100%'; + margin: 5px 0; + font-size: var(--ti-cascader-font-size); + background: var(--ti-cascader-dropdown-background); + border: 1px solid var(--ti-cascader-dropdown-border-color); + border-radius: var(--ti-cascader-border-radius); + -webkit-box-shadow: var(--ti-cascader-dropdown-box-shadow); + box-shadow: var(--ti-cascader-dropdown-box-shadow); +} +.tiny-cascader__dropdown.is-auto-size { + background: 0 0; + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-cascader__dropdown.is-auto-size .tiny-cascader-panel { + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.tiny-cascader__dropdown.is-auto-size .tiny-cascader-menu { + border: 1px solid #e4e7ed; + background: #fff; +} +.tiny-cascader__dropdown.is-auto-size .tiny-cascader-menu:not(:first-child) { + margin-left: -1px; +} +.tiny-cascader__dropdown.is-auto-size .tiny-cascader-menu .tiny-cascader-menu__wrap { + height: auto; + padding-bottom: 6px; + max-height: 220px; +} +.tiny-cascader__tags { + position: absolute; + left: 0; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + line-height: normal; + text-align: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-cascader__tags .tiny-tag { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 100%; + margin: 2px 0 2px 6px; + text-overflow: ellipsis; + background: var(--ti-cascader-tag-background); +} +.tiny-cascader__tags .tiny-tag:not(.is-hit) { + border-color: transparent; +} +.tiny-cascader__tags .tiny-tag > span { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-cascader__tags .tiny-tag > span { + -ms-flex-preferred-size: auto; + flex-basis: auto; + } +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-cascader__tags .tiny-tag .tiny-tag__close { + -ms-flex-negative: 0; + flex-shrink: 0; + } +} +.tiny-cascader__tags .tiny-tag .tiny-icon-close { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + background-color: var(--ti-cascader-tag-icon-bgcolor); + color: var(--ti-cascader-tag-icon-color); +} +.tiny-cascader__tags .tiny-tag .tiny-icon-close:hover { + background-color: var(--ti-cascader-tag-icon-hover-bgcolor); +} +.tiny-cascader__suggestion-panel { + border-radius: var(--ti-cascader-border-radius); +} +.tiny-cascader__suggestion-list { + max-height: 204px; + margin: 0; + padding: 6px 0; + font-size: var(--ti-cascader-font-size); + color: var(--ti-cascader-list-color); + text-align: center; +} +.tiny-cascader__suggestion-panel .tiny-cascader__suggestion-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: var(--ti-cascader-item-height); + padding: 0 8px; + font-size: var(--ti-common-font-size-base); + color: var(--ti-cascader-search-input-color); + text-align: left; + outline: 0; + cursor: pointer; +} +.tiny-cascader__suggestion-panel .tiny-cascader__suggestion-item:focus, +.tiny-cascader__suggestion-panel .tiny-cascader__suggestion-item:hover { + background: var(--ti-cascader-item-hover-background); +} +.tiny-cascader__suggestion-panel .tiny-cascader__suggestion-item.is-checked { + color: var(--ti-cascader-item-checked-color); + font-weight: 700; +} +.tiny-cascader__suggestion-panel .tiny-cascader__suggestion-item.is-checked .icon-check { + fill: var(--ti-cascader-item-checked-color); +} +.tiny-cascader__suggestion-panel .tiny-cascader__suggestion-item > span { + margin-right: 10px; +} +.tiny-cascader__empty-text { + margin: 10px 0; + color: var(--ti-cascader-empty-text-color); +} +.tiny-cascader__search-input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + height: 24px; + min-width: 60px; + margin-left: 2px; + padding-left: 8px; + color: var(--ti-cascader-search-input-color); + font-size: var(--ti-common-font-size-base); + border: none; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-cascader__search-input::-moz-placeholder { + color: var(--ti-cascader-search-input-placeholder-color); + opacity: 1; +} +.tiny-cascader__search-input:-ms-input-placeholder { + color: var(--ti-cascader-search-input-placeholder-color); +} +.tiny-cascader__search-input::-webkit-input-placeholder { + color: var(--ti-cascader-search-input-placeholder-color); +} +.tiny-cascader__search-input::-ms-input-placeholder { + color: var(--ti-cascader-search-input-placeholder-color); +} +.tiny-cascader__search-input::placeholder { + color: var(--ti-cascader-search-input-placeholder-color); +} +.tiny-cascader-multiple { + width: var(--ti-cascader-width); +} +.tiny-cascader-menu { + --ti-cascader-menu-color: var(--ti-base-color-info-normal); + --ti-cascader-menu-border-color: #e4e7ed; + --ti-cascader-menu-empty-text-color: #c0c4cc; + --ti-cascader-menu-list-padding: 0; + --ti-cascader-menu-width: 180px; + min-width: var(--ti-cascader-menu-width); + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--ti-cascader-menu-color); + border-right: solid 1px var(--ti-cascader-menu-border-color); +} +.tiny-cascader-menu:last-child { + border-right: none; +} +.tiny-cascader-menu:last-child .tiny-cascader-node { + padding-right: 20px; +} +.tiny-cascader-menu .tiny-cascader-menu__wrap { + height: 204px; +} +.tiny-cascader-menu .tiny-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: var(--ti-cascader-menu-list-padding); +} +.tiny-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} +.tiny-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: var(--ti-cascader-menu-empty-text-color); +} +.tiny-cascader-node { + --ti-cascader-node-hover-bgcolor: var(--ti-base-color-brand-1); + --ti-cascader-node-hover-color: var(--ti-base-color-brand-6); + --ti-cascader-node-font-color: var(--ti-base-color-white); + --ti-cascader-node-selectable-hover-bgcolor: var(--ti-base-color-selected-background); + --ti-cascader-node-selectable-font-color: var(--ti-base-color-selected-font-color); + --ti-cascader-node-disabled-color: var(--ti-base-color-placeholder); + --ti-cascader-node-icon-font-size: var(--ti-common-font-size-1); + --ti-cascader-node-icon-color: #bfbfbf; + --ti-cascader-node-prefix-display: 'inline-block'; + --ti-cascader-node-label-padding: 0 10px; +} +.tiny-cascader-node.is-selectable.in-active-path { + color: var(--ti-cascader-node-font-color); +} +.tiny-cascader-node.in-active-path, +.tiny-cascader-node.is-active { + background: var(--ti-cascader-node-selectable-hover-bgcolor); + color: var(--ti-cascader-node-selectable-font-color); +} +.tiny-cascader-node.in-active-path, +.tiny-cascader-node.in-active-path:hover, +.tiny-cascader-node.is-active, +.tiny-cascader-node.is-active:hover { + background: var(--ti-cascader-node-selectable-hover-bgcolor); +} +.tiny-cascader-node:not(.is-disabled):not(.in-active-path):not(.is-active):focus, +.tiny-cascader-node:not(.is-disabled):not(.in-active-path):not(.is-active):hover { + background: var(--ti-cascader-node-hover-bgcolor); + color: var(--ti-cascader-node-hover-color); +} +.tiny-cascader-node:not(.is-disabled) { + cursor: pointer; +} +.tiny-cascader-node.is-disabled { + color: var(--ti-cascader-node-disabled-color); + fill: var(--ti-cascader-node-disabled-color); + background-color: var(--ti-cascader-node-disabled-bgcolor); + cursor: not-allowed; +} +.tiny-cascader-node__postfix, +.tiny-cascader-node__prefix { + font-size: var(--ti-cascader-node-icon-font-size); + fill: var(--ti-cascader-node-icon-color); +} +.tiny-cascader-node__prefix { + position: absolute; + left: 10px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: var(--ti-cascader-node-prefix-display) !important; +} +.tiny-cascader-node__postfix { + position: absolute; + top: 50%; + right: 10px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +.tiny-cascader-node__label { + max-width: 360px; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: var(--ti-cascader-node-label-padding); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-cascader-node__label { + -ms-flex-preferred-size: auto; + flex-basis: auto; + } +} +.tiny-cascader-node > .tiny-radio { + margin-right: var(--ti-common-space-base); +} +.tiny-cascader-node > .tiny-radio .tiny-radio__label { + padding-left: 0; +} +.tiny-cascader-node > .tiny-checkbox { + margin-right: var(--ti-common-space-base); +} +.tiny-cascader-panel { + --ti-cascader-panel-border-radius: var(--ti-common-border-radius-normal); + --ti-cascader-panel-border-color: var(--ti-base-color-border); + --ti-cascader-panel-font-size: var(--ti-common-font-size-base); + --ti-cascader-panel-node-height: var(--ti-base-size-height-minor); + --ti-cascader-panel-node-gap: 0; + --ti-cascader-panel-node-label-padding: 0 30px 0 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: var(--ti-cascader-panel-border-radius); + font-size: var(--ti-cascader-panel-font-size); +} +.tiny-cascader-panel.is-bordered { + border: 1px solid var(--ti-cascader-panel-border-color); + border-radius: var(--ti-cascader-panel-border-radius); +} +.tiny-cascader-panel .tiny-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: var(--ti-cascader-panel-node-label-padding); + height: var(--ti-cascader-panel-node-height); + line-height: var(--ti-cascader-panel-node-height); + outline: 0; + border-radius: var(--ti-common-border-radius-normal); + margin-top: var(--ti-cascader-panel-node-gap); +} +.tiny-chart { + --ti-chart-core-data-empty-color: #888; + --ti-chart-core-data-empty-font-size: var(--ti-common-font-size-1); + --ti-chart-core-data-empty-bgcolor: rgba(255, 255, 255, 0.9); +} +.tiny-chart-data-empty { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-color: var(--ti-chart-core-data-empty-bgcolor); + color: var(--ti-chart-core-data-empty-color); + font-size: var(--ti-chart-core-data-empty-font-size); +} +.tiny-chart-component-loading { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-color: var(--ti-chart-core-data-empty-bgcolor); +} +.tiny-chart-component-loading .circular { + width: 42px; + height: 42px; + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; +} +.tiny-chart-component-loading .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: #20a0ff; + stroke-linecap: round; +} +.tiny-chart-mask-status { + -webkit-filter: blur(1px); + filter: blur(1px); +} +@-webkit-keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; + } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; + } +} +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; + } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; + } +} +.tiny-checkbox { + --ti-checkbox-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-font-size: var(--ti-common-font-size-base); + --ti-checkbox-background-color: var(--ti-base-color-brand-2); + --ti-checkbox-bg-color: var(--ti-base-color-white); + --ti-checkbox-shadow-color: #dfe1e6; + --ti-checkbox-border-radius: var(--ti-common-border-radius-normal); + --ti-checkbox-hover-color: var(--ti-base-color-common-7); + --ti-checkbox-checked-color: var(--ti-base-color-brand-6); + --ti-checkbox-disabled-color: var(--ti-base-color-placeholder); + --ti-checkbox-disabled-bgcolor: var(--ti-base-color-bg-5); + --ti-checkbox-disabled-border-color: var(--ti-base-color-bg-5); + --ti-checkbox-button-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-button-checked-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-inner-border-color: var(--ti-base-color-light); + --ti-checkbox-bg-color-checked: var(--ti-base-color-brand-6); + --ti-checkbox-border-color-checked: var(--ti-base-color-brand-6); + --ti-checkbox-border-color: var(--ti-common-color-line-normal); + --ti-checkbox-border-color-hover: var(--ti-base-color-brand-6); + --ti-checkbox-icon-height: 8px; + --ti-checkbox-icon-width: 4px; + --ti-checkbox-icon-left: 4.5px; + --ti-checkbox-icon-top: 0; + --ti-checkbox-bg-color-disable: var(--ti-base-color-bg-5); + --ti-checkbox-border-color-unchecked-disabled: var(--ti-base-color-common-1); + --ti-checkbox-label-color-disabled: var(--ti-base-color-common-2); + --ti-checkbox-bg-color-hover: var(--ti-base-color-brand-3); + position: relative; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: var(--ti-checkbox-font-color); + font-weight: 500; + font-size: 0; + white-space: nowrap; + margin-right: 30px; + outline: 0; + cursor: pointer; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-checkbox:last-of-type { + margin-right: 0; +} +.tiny-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 2px; + border: 1px solid var(--ti-checkbox-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; +} +.tiny-checkbox.is-bordered + .tiny-checkbox.is-bordered { + margin-left: 10px; +} +.tiny-checkbox.is-bordered.is-checked { + border-color: var(--ti-checkbox-checked-color); +} +.tiny-checkbox.is-bordered.is-disabled { + border-color: var(--ti-checkbox-border-color-unchecked-disabled); + color: var(--ti-checkbox-bg-color-disable); + pointer-events: none; + cursor: not-allowed; +} +.tiny-checkbox.is-bordered.is-disabled .tiny-checkbox__inner, +.tiny-checkbox.is-bordered.is-disabled .tiny-checkbox__inner:hover { + border-color: var(--ti-checkbox-border-color-unchecked-disabled); + cursor: not-allowed; +} +.tiny-checkbox.is-bordered.is-disabled.is-checked { + border-color: var(--ti-checkbox-bg-color-disable); +} +.tiny-checkbox.is-bordered.is-disabled.is-checked .tiny-checkbox__inner, +.tiny-checkbox.is-bordered.is-disabled.is-checked .tiny-checkbox__inner:hover { + background-color: var(--ti-checkbox-bg-color-disable); + border-color: var(--ti-checkbox-bg-color-disable); +} +.tiny-checkbox.is-bordered.is-disabled.is-checked .tiny-checkbox__inner::after, +.tiny-checkbox.is-bordered.is-disabled.is-checked .tiny-checkbox__inner:hover::after { + border-color: var(--ti-checkbox-border-color-unchecked-disabled); +} +.tiny-checkbox.is-bordered.tiny-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--medium .tiny-checkbox__label { + line-height: 17px; + font-size: var(--ti-common-font-size-1); +} +.tiny-checkbox.is-bordered.tiny-checkbox--medium .tiny-checkbox__inner { + height: 14px; + width: 14px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--small .tiny-checkbox__label { + line-height: 15px; + font-size: var(--ti-common-font-size-base); +} +.tiny-checkbox.is-bordered.tiny-checkbox--small .tiny-checkbox__inner { + height: 12px; + width: 12px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--small .tiny-checkbox__inner::after { + height: 6px; + width: 2px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--mini .tiny-checkbox__label { + line-height: 12px; + font-size: var(--ti-common-font-size-base); +} +.tiny-checkbox.is-bordered.tiny-checkbox--mini .tiny-checkbox__inner { + height: 12px; + width: 12px; +} +.tiny-checkbox.is-bordered.tiny-checkbox--mini .tiny-checkbox__inner::after { + height: 6px; + width: 2px; +} +.tiny-checkbox__input { + position: relative; + display: inline-block; + white-space: nowrap; + vertical-align: middle; + outline: 0; + line-height: 1; + cursor: pointer; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-checkbox__input { + display: inline-block; + } +} +@supports (-ms-ime-align: auto) { + .tiny-checkbox__input { + display: inline-block; + } +} +.tiny-checkbox__input .tiny-checkbox__inner svg { + fill: var(--ti-checkbox-border-color); +} +.tiny-checkbox__input .tiny-checkbox__inner:hover svg { + fill: var(--ti-checkbox-hover-color); +} +.tiny-checkbox__input.is-disabled .tiny-checkbox__inner { + background-color: var(--ti-checkbox-bg-color-disable); + border-color: var(--ti-checkbox-border-color-unchecked-disabled); + cursor: not-allowed; +} +.tiny-checkbox__input.is-disabled .tiny-checkbox__inner svg { + fill: var(--ti-checkbox-border-color-unchecked-disabled); +} +.tiny-checkbox__input.is-disabled .tiny-checkbox__inner + .tiny-checkbox__label { + cursor: not-allowed; +} +.tiny-checkbox__input.is-disabled.is-checked .tiny-checkbox__inner, +.tiny-checkbox__input.is-disabled.is-checked .tiny-checkbox__inner:hover { + background-color: var(--ti-checkbox-label-color-disabled); + border-color: var(--ti-checkbox-label-color-disabled); +} +.tiny-checkbox__input.is-disabled.is-checked .tiny-checkbox__inner::after, +.tiny-checkbox__input.is-disabled.is-checked .tiny-checkbox__inner:hover::after { + border-color: var(--ti-checkbox-bg-color-disable); +} +.tiny-checkbox__input.is-disabled.is-indeterminate .tiny-checkbox__inner, +.tiny-checkbox__input.is-disabled.is-indeterminate .tiny-checkbox__inner:hover { + background-color: var(--ti-checkbox-label-color-disabled); + border-color: var(--ti-checkbox-label-color-disabled); +} +.tiny-checkbox__input.is-disabled.is-indeterminate .tiny-checkbox__inner::before, +.tiny-checkbox__input.is-disabled.is-indeterminate .tiny-checkbox__inner:hover::before { + background-color: var(--ti-checkbox-bg-color-disable); + border-color: var(--ti-checkbox-bg-color-disable); +} +.tiny-checkbox__input.is-disabled + span.tiny-checkbox__label { + color: var(--ti-checkbox-label-color-disabled); + cursor: not-allowed; +} +.tiny-checkbox__input.is-checked .tiny-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); +} +.tiny-checkbox__input.is-indeterminate .tiny-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + border-radius: 1px; + background-color: #fff; + height: 6px; + width: 6px; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; +} +.tiny-checkbox__input.is-indeterminate .tiny-checkbox__inner::after { + display: none; +} +.tiny-checkbox__input.is-checked .tiny-checkbox__inner, +.tiny-checkbox__input.is-indeterminate .tiny-checkbox__inner { + background-color: var(--ti-checkbox-bg-color-checked); + border-color: var(--ti-checkbox-border-color-checked); +} +.tiny-checkbox__input.is-checked .tiny-checkbox__inner:hover, +.tiny-checkbox__input.is-indeterminate .tiny-checkbox__inner:hover { + background-color: var(--ti-checkbox-bg-color-checked); + border-color: var(--ti-checkbox-border-color-checked); +} +.tiny-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid var(--ti-checkbox-border-color); + border-radius: var(--ti-common-border-radius-normal); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 16px; + height: 16px; + background-color: var(--ti-checkbox-bg-color); + outline: 0; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), + background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), + background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); +} +.tiny-checkbox__inner:hover { + border-color: var(--ti-checkbox-border-color-hover); +} +.tiny-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ''; + border: 1px solid #fff; + border-width: 0 2px 2px 0; + border-left: 0; + border-top: 0; + height: var(--ti-checkbox-icon-height); + width: var(--ti-checkbox-icon-width); + position: absolute; + left: var(--ti-checkbox-icon-left); + top: var(--ti-checkbox-icon-top); + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + -webkit-transition: -webkit-transform 0.15s ease-in 50ms; + transition: -webkit-transform 0.15s ease-in 50ms; + transition: transform 0.15s ease-in 50ms; + transition: transform 0.15s ease-in 50ms, -webkit-transform 0.15s ease-in 50ms; + -webkit-transform-origin: center; + transform-origin: center; +} +.tiny-checkbox__original { + opacity: 0; + outline: 0; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; +} +.tiny-checkbox__label { + padding-left: 8px; + font-size: var(--ti-checkbox-font-size); +} +.tiny-checkbox-button { + --ti-checkbox-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-font-size: var(--ti-common-font-size-base); + --ti-checkbox-background-color: var(--ti-base-color-brand-2); + --ti-checkbox-bg-color: var(--ti-base-color-white); + --ti-checkbox-shadow-color: #dfe1e6; + --ti-checkbox-border-radius: var(--ti-common-border-radius-normal); + --ti-checkbox-hover-color: var(--ti-base-color-common-7); + --ti-checkbox-checked-color: var(--ti-base-color-brand-6); + --ti-checkbox-disabled-color: var(--ti-base-color-placeholder); + --ti-checkbox-disabled-bgcolor: var(--ti-base-color-bg-5); + --ti-checkbox-disabled-border-color: var(--ti-base-color-bg-5); + --ti-checkbox-button-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-button-checked-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-inner-border-color: var(--ti-base-color-light); + --ti-checkbox-bg-color-checked: var(--ti-base-color-brand-6); + --ti-checkbox-border-color-checked: var(--ti-base-color-brand-6); + --ti-checkbox-border-color: var(--ti-common-color-line-normal); + --ti-checkbox-border-color-hover: var(--ti-base-color-brand-6); + --ti-checkbox-icon-height: 8px; + --ti-checkbox-icon-width: 4px; + --ti-checkbox-icon-left: 4.5px; + --ti-checkbox-icon-top: 0; + --ti-checkbox-bg-color-disable: var(--ti-base-color-bg-5); + --ti-checkbox-border-color-unchecked-disabled: var(--ti-base-color-common-1); + --ti-checkbox-label-color-disabled: var(--ti-base-color-common-2); + --ti-checkbox-bg-color-hover: var(--ti-base-color-brand-3); + position: relative; + display: inline-block; +} +.tiny-checkbox-button:first-child .tiny-checkbox-button__inner { + border-radius: var(--ti-common-border-radius-normal) 0 0 var(--ti-common-border-radius-normal); +} +.tiny-checkbox-button:last-child .tiny-checkbox-button__inner { + border-radius: 0 var(--ti-common-border-radius-normal) var(--ti-common-border-radius-normal) 0; +} +.tiny-checkbox-button.is-checked .tiny-checkbox-button__inner { + color: var(--ti-checkbox-button-checked-font-color); + border-color: var(--ti-checkbox-checked-color); + -webkit-box-shadow: -1px 0 0 0 var(--ti-checkbox-shadow-color); + box-shadow: -1px 0 0 0 var(--ti-checkbox-shadow-color); +} +.tiny-checkbox-button.is-checked:first-child .tiny-checkbox-button__inner { + border-left-color: var(--ti-checkbox-checked-color); + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-checkbox-button.is-disabled .tiny-checkbox-button__inner { + color: var(--ti-checkbox-disabled-color); + cursor: not-allowed; + background-image: none; + background-color: var(--ti-checkbox-disabled-border-color); + border-color: var(--ti-checkbox-border-color); + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-checkbox-button.is-disabled:first-child .tiny-checkbox-button__inner { + border-left-color: var(--ti-checkbox-border-color); +} +.tiny-checkbox-button__inner { + position: relative; + display: inline-block; + white-space: nowrap; + vertical-align: middle; + outline: 0; + line-height: 1; + font-weight: 500; + cursor: pointer; + background: var(--ti-checkbox-background-color); + border-left: 0; + border: 1px solid #e9edfa; + color: var(--ti-checkbox-button-font-color); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0 2px; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + padding: 12px 20px; + font-size: var(--ti-common-font-size-2); + min-width: 80px; + border-radius: 0; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-checkbox-button__inner.is-round { + padding: 12px 20px; +} +.tiny-checkbox-button__inner:hover { + background: var(--ti-checkbox-bg-color-hover); + color: var(--ti-checkbox-hover-color); +} +.tiny-checkbox-button__original { + opacity: 0; + outline: 0; + position: absolute; + margin: 0; + z-index: -1; +} +.tiny-checkbox-button--medium .tiny-checkbox-button__inner { + padding: 10px 20px; + font-size: var(--ti-common-font-size-1); + border-radius: 0; +} +.tiny-checkbox-button--medium .tiny-checkbox-button__inner.is-round { + padding: 10px 20px; +} +.tiny-checkbox-button--small .tiny-checkbox-button__inner { + padding: 8px 15px; + font-size: var(--ti-common-font-size-base); + border-radius: 0; +} +.tiny-checkbox-button--small .tiny-checkbox-button__inner.is-round { + padding: 8px 15px; +} +.tiny-checkbox-button--mini .tiny-checkbox-button__inner { + padding: 5px 15px; + font-size: var(--ti-common-font-size-base); + border-radius: 0; +} +.tiny-checkbox-button--mini .tiny-checkbox-button__inner.is-round { + padding: 5px 15px; +} +.tiny-checkbox-group { + --ti-checkbox-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-font-size: var(--ti-common-font-size-base); + --ti-checkbox-background-color: var(--ti-base-color-brand-2); + --ti-checkbox-bg-color: var(--ti-base-color-white); + --ti-checkbox-shadow-color: #dfe1e6; + --ti-checkbox-border-radius: var(--ti-common-border-radius-normal); + --ti-checkbox-hover-color: var(--ti-base-color-common-7); + --ti-checkbox-checked-color: var(--ti-base-color-brand-6); + --ti-checkbox-disabled-color: var(--ti-base-color-placeholder); + --ti-checkbox-disabled-bgcolor: var(--ti-base-color-bg-5); + --ti-checkbox-disabled-border-color: var(--ti-base-color-bg-5); + --ti-checkbox-button-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-button-checked-font-color: var(--ti-base-color-info-normal); + --ti-checkbox-inner-border-color: var(--ti-base-color-light); + --ti-checkbox-bg-color-checked: var(--ti-base-color-brand-6); + --ti-checkbox-border-color-checked: var(--ti-base-color-brand-6); + --ti-checkbox-border-color: var(--ti-common-color-line-normal); + --ti-checkbox-border-color-hover: var(--ti-base-color-brand-6); + --ti-checkbox-icon-height: 8px; + --ti-checkbox-icon-width: 4px; + --ti-checkbox-icon-left: 4.5px; + --ti-checkbox-icon-top: 0; + --ti-checkbox-bg-color-disable: var(--ti-base-color-bg-5); + --ti-checkbox-border-color-unchecked-disabled: var(--ti-base-color-common-1); + --ti-checkbox-label-color-disabled: var(--ti-base-color-common-2); + --ti-checkbox-bg-color-hover: var(--ti-base-color-brand-3); + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-checkbox-group.is-vertical { + display: inline-block; +} +.tiny-checkbox-group.is-vertical .tiny-checkbox { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-right: 0; +} +.tiny-checkbox-group.is-vertical .tiny-checkbox:not(:last-child) { + margin-bottom: 8px; +} +.tiny-checkbox-group.is-vertical .tiny-checkbox-button { + display: block; +} +.tiny-checkbox-group.is-vertical .tiny-checkbox-button:first-child .tiny-checkbox-button__inner { + border-radius: 2px 2px 0 0; +} +.tiny-checkbox-group.is-vertical .tiny-checkbox-button:last-child .tiny-checkbox-button__inner { + border-radius: 0 0 2px 2px; +} +.tiny-checkbox-group.is-vertical .tiny-checkbox-button.is-checked .tiny-checkbox-button__inner { + -webkit-box-shadow: 0 -1px 0 0 var(--ti-checkbox-shadow-color); + box-shadow: 0 -1px 0 0 var(--ti-checkbox-shadow-color); + border-color: var(--ti-checkbox-checked-color); +} +.tiny-checkbox-group.is-vertical .tiny-checkbox-button.is-checked.is-disabled .tiny-checkbox-button__inner { + -webkit-box-shadow: 0 -1px 0 0 var(--ti-checkbox-border-color); + box-shadow: 0 -1px 0 0 var(--ti-checkbox-border-color); + border-color: var(--ti-checkbox-border-color); + background: var(--ti-checkbox-disabled-bgcolor); +} +.tiny- { + --ti-collapse-border-color: var(--ti-base-color-border); +} +.tiny-fade-in-linear-enter-active, +.tiny-fade-in-linear-leave-active { + -webkit-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} +.tiny-fade-in-linear-enter, +.tiny-fade-in-linear-enter-from, +.tiny-fade-in-linear-leave, +.tiny-fade-in-linear-leave-active, +.tiny-fade-in-linear-leave-from { + opacity: 0; +} +.tiny-fade-in-enter-active, +.tiny-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.tiny-fade-in-enter, +.tiny-fade-in-enter-from, +.tiny-fade-in-leave-active { + opacity: 0; +} +.tiny-zoom-in-center-enter-active, +.tiny-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.tiny-zoom-in-center-enter, +.tiny-zoom-in-center-enter-from, +.tiny-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); +} +.tiny-zoom-in-top-enter-active, +.tiny-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; +} +.tiny-zoom-in-top-enter, +.tiny-zoom-in-top-enter-from, +.tiny-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); +} +.tiny-zoom-in-bottom-enter-active, +.tiny-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} +.tiny-zoom-in-bottom-enter, +.tiny-zoom-in-bottom-leave-active, +.tiny-zoom-in-left-enter-from { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); +} +.tiny-zoom-in-left-enter-active, +.tiny-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; +} +.tiny-zoom-in-left-enter, +.tiny-zoom-in-left-enter-from, +.tiny-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); +} +.tiny-list-enter-active, +.tiny-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; +} +.tiny-list-enter, +.tiny-list-enter-from, +.tiny-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); +} +.tiny-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; +} +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; +} +.fade-in-linear-enter, +.fade-in-linear-enter-from, +.fade-in-linear-leave, +.fade-in-linear-leave-active, +.fade-in-linear-leave-from { + opacity: 0; +} +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} +.tiny-collapse-item { + --ti-collapse-item-color: var(--ti-base-color-info-normal); + --ti-collapse-item-icon-color: var(--ti-common-color-icon-normal); + --ti-collapse-item-bgcolor: var(--ti-base-color-light); + --ti-collapse-item-border-color: var(--ti-base-color-border); + --ti-collapse-item-disabled-color: var(--ti-base-color-placeholder); + --ti-collapse-item-header-font-size: var(--ti-common-font-size-base); + --ti-collapse-item-header-focus-color: var(--ti-base-color-brand-5); + --ti-collapse-item-arrow-font-size: var(--ti-common-font-size-base); + --ti-collapse-item-arrow-hover-color: var(--ti-base-color-info-normal); + --ti-collapse-item-content-font-size: var(--ti-common-font-size-base); + --ti-collapse-item-header-bgcolor: var(--ti-base-color-brand-1); + --ti-collapse-item-space-between: var(--ti-common-space-2x); + --ti-collapse-item-bg-color: var(--ti-common-color-bg-white-normal); + --ti-collapse-item-border: 1px solid var(--ti-common-color-line-dividing); + --ti-collapse-item-border-radius: var(--ti-common-border-radius-normal); + --ti-collapse-item-icon-fs: var(--ti-common-font-size-2); + --ti-collapse-item-header-padding: 0 var(--ti-common-space-4x); + --ti-collapse-item-content-border-top: 1px solid var(--ti-common-color-line-dividing); + margin-top: var(--ti-collapse-item-space-between); + background-color: var(--ti-collapse-item-bg-color); + border: var(--ti-collapse-item-border); + border-radius: var(--ti-collapse-item-border-radius); +} +.tiny-collapse-item:last-child { + margin-bottom: -1px; +} +.tiny-collapse-item.is-disabled .tiny-collapse-item__header { + color: var(--ti-collapse-item-disabled-color); + cursor: not-allowed; +} +.tiny-collapse-item.is-disabled .tiny-collapse-item__arrow { + fill: var(--ti-collapse-item-disabled-color); +} +.tiny-collapse-item__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + line-height: 34px; + background-color: var(--ti-collapse-item-header-bgcolor); + color: var(--ti-collapse-item-color); + font-size: var(--ti-collapse-item-header-font-size); + font-family: Helvetica, Arial, 'microsoft yahei'; + outline: 0; + cursor: pointer; + -webkit-transition: border-bottom-color 0.3s; + transition: border-bottom-color 0.3s; + border-radius: var(--ti-common-border-radius-normal); + padding: var(--ti-collapse-item-header-padding); +} +.tiny-collapse-item__header.focusing:focus:not(:hover) { + color: var(--ti-collapse-item-header-focus-color); +} +.tiny-collapse-item__header.is-active { + border-bottom-color: transparent; +} +.tiny-collapse-item__header svg { + font-size: var(--ti-collapse-item-icon-fs); + fill: var(--ti-collapse-item-icon-color); +} +.tiny-collapse-item__arrow { + font-size: var(--ti-collapse-item-arrow-font-size); + margin-right: 12px; + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.tiny-collapse-item__arrow.is-active { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.tiny-collapse-item__arrow.is-active, +.tiny-collapse-item__arrow:hover { + fill: var(--ti-collapse-item-arrow-hover-color); +} +.tiny-collapse-item__wrap { + will-change: height; + background-color: var(--ti-collapse-item-bgcolor); + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-collapse-item__content { + padding: 12px 16px; + font-size: var(--ti-collapse-item-content-font-size); + color: var(--ti-collapse-item-color); + border-top: var(--ti-collapse-item-content-border-top); + line-height: 1.76923077; +} +.tiny-container .tiny-container__aside, +.tiny-container .tiny-container__footer, +.tiny-container .tiny-container__header, +.tiny-container .tiny-container__main { + position: absolute; + -webkit-box-sizing: border-box; + box-sizing: border-box; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: 0; +} +.tiny-container .tiny-container__main { + overflow-y: auto; +} +.tiny-container .tiny-container__footer { + top: auto; + width: auto; +} +.credit-card-item { + max-width: 430px; + height: 270px; + margin-left: auto; + margin-right: auto; + position: relative; + z-index: 2; + width: 100%; +} +@media screen and (max-width: 480px) { + .credit-card-item { + max-width: 310px; + height: 220px; + width: 90%; + } +} +@media screen and (max-width: 360px) { + .credit-card-item { + height: 180px; + } +} +.credit-card-item.-active .credit-card-item__side.-front { + -webkit-transform: perspective(1000px) rotateY(180deg) rotateX(0) rotateZ(0); + transform: perspective(1000px) rotateY(180deg) rotateX(0) rotateZ(0); +} +.credit-card-item.-active .credit-card-item__side.-back { + -webkit-transform: perspective(1000px) rotateY(0) rotateX(0) rotateZ(0); + transform: perspective(1000px) rotateY(0) rotateX(0) rotateZ(0); +} +.credit-card-item__focus { + position: absolute; + z-index: 3; + border-radius: 5px; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transition: all 0.35s cubic-bezier(0.71, 0.03, 0.56, 0.85); + transition: all 0.35s cubic-bezier(0.71, 0.03, 0.56, 0.85); + opacity: 0; + pointer-events: none; + overflow: hidden; + border: 2px solid rgba(255, 255, 255, 0.65); +} +.credit-card-item__focus:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + background: #08142f; + height: 100%; + border-radius: 5px; + -webkit-filter: blur(25px); + filter: blur(25px); + opacity: 0.5; +} +.credit-card-item__focus.-active { + opacity: 1; +} +.credit-card-item__side { + border-radius: 15px; + overflow: hidden; + -webkit-box-shadow: 0 20px 60px 0 rgba(14, 42, 90, 0.55); + box-shadow: 0 20px 60px 0 rgba(14, 42, 90, 0.55); + -webkit-transform: perspective(2000px) rotateY(0) rotateX(0) rotate(0); + transform: perspective(2000px) rotateY(0) rotateX(0) rotate(0); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transition: all 0.8s cubic-bezier(0.71, 0.03, 0.56, 0.85); + transition: all 0.8s cubic-bezier(0.71, 0.03, 0.56, 0.85); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + height: 100%; +} +.credit-card-item__side.-back { + position: absolute; + top: 0; + left: 0; + width: 100%; + -webkit-transform: perspective(2000px) rotateY(-180deg) rotateX(0) rotate(0); + transform: perspective(2000px) rotateY(-180deg) rotateX(0) rotate(0); + z-index: 2; + padding: 0; + height: 100%; +} +.credit-card-item__side.-back .credit-card-item__cover { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +.credit-card-item__bg { + max-width: 100%; + display: block; + max-height: 100%; + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.credit-card-item__cover { + position: absolute; + height: 100%; + background-color: #1c1d27; + background-image: linear-gradient(147deg, #354fce 0, #0c296b 74%); + left: 0; + top: 0; + width: 100%; + border-radius: 15px; + overflow: hidden; +} +.credit-card-item__cover:after { + content: ''; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: rgba(6, 2, 29, 0.45); +} +.credit-card-item__top { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + margin-bottom: 40px; + padding: 0 10px; +} +@media screen and (max-width: 480px) { + .credit-card-item__top { + margin-bottom: 25px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__top { + margin-bottom: 15px; + } +} +.credit-card-item__chip { + width: 60px; +} +@media screen and (max-width: 480px) { + .credit-card-item__chip { + width: 50px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__chip { + width: 40px; + } +} +.credit-card-item__type { + height: 45px; + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + max-width: 100px; + margin-left: auto; + width: 100%; +} +@media screen and (max-width: 480px) { + .credit-card-item__type { + height: 40px; + max-width: 90px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__type { + height: 30px; + } +} +.credit-card-item__typeImg { + max-width: 100%; + -o-object-fit: contain; + object-fit: contain; + max-height: 100%; + -o-object-position: top right; + object-position: top right; +} +.credit-card-item__info { + color: #fff; + width: 100%; + max-width: calc(100% - 85px); + padding: 10px 15px; + font-weight: 500; + display: block; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-item__info { + padding: 10px; + } +} +.credit-card-item__holder { + opacity: 0.7; + font-size: 13px; + margin-bottom: 6px; +} +@media screen and (max-width: 480px) { + .credit-card-item__holder { + font-size: var(--ti-common-font-size-base); + margin-bottom: 5px; + } +} +.credit-card-item__wrapper { + padding: 25px 15px; + position: relative; + z-index: 4; + height: 100%; + text-shadow: 7px 6px 10px rgba(14, 42, 90, 0.8); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +@media screen and (max-width: 480px) { + .credit-card-item__wrapper { + padding: 20px 10px; + } +} +.credit-card-item__name { + font-size: var(--ti-common-font-size-3); + line-height: 1; + white-space: nowrap; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + text-transform: uppercase; +} +@media screen and (max-width: 480px) { + .credit-card-item__name { + font-size: var(--ti-common-font-size-2); + } +} +.credit-card-item__nameItem { + display: inline-block; + min-width: 8px; + position: relative; +} +.credit-card-item__number { + font-weight: 500; + line-height: 1; + color: #fff; + font-size: 27px; + margin-bottom: 25px; + display: inline-block; + padding: 10px 15px; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-item__number { + font-size: 21px; + margin-bottom: 15px; + padding: 10px 10px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__number { + font-size: 19px; + margin-bottom: 10px; + padding: 10px 10px; + } +} +.credit-card-item__numberItem { + width: 16px; + display: inline-block; +} +.credit-card-item__numberItem.-active { + width: 30px; +} +@media screen and (max-width: 480px) { + .credit-card-item__numberItem { + width: 13px; + } + .credit-card-item__numberItem.-active { + width: 16px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__numberItem { + width: 12px; + } + .credit-card-item__numberItem.-active { + width: 8px; + } +} +.credit-card-item__content { + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.credit-card-item__date { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + font-size: var(--ti-common-font-size-3); + margin-left: auto; + padding: 10px; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + width: 80px; + white-space: nowrap; + -ms-flex-negative: 0; + flex-shrink: 0; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-item__date { + font-size: var(--ti-common-font-size-2); + } +} +.credit-card-item__dateItem { + position: relative; +} +.credit-card-item__dateItem span { + width: 22px; + display: inline-block; +} +.credit-card-item__dateTitle { + opacity: 0.7; + font-size: 13px; + padding-bottom: 6px; + width: 100%; +} +@media screen and (max-width: 480px) { + .credit-card-item__dateTitle { + font-size: var(--ti-common-font-size-base); + padding-bottom: 5px; + } +} +.credit-card-item__band { + background: rgba(0, 0, 19, 0.8); + width: 100%; + height: 50px; + margin-top: 30px; + position: relative; + z-index: 2; +} +@media screen and (max-width: 480px) { + .credit-card-item__band { + margin-top: 20px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__band { + height: 40px; + margin-top: 10px; + } +} +.credit-card-item__cvv { + text-align: right; + position: relative; + z-index: 2; + padding: 15px; +} +.credit-card-item__cvv .credit-card-item__type { + opacity: 0.7; +} +@media screen and (max-width: 360px) { + .credit-card-item__cvv { + padding: 10px 15px; + } +} +.credit-card-item__cvvTitle { + padding-right: 10px; + font-size: 15px; + font-weight: 500; + color: #fff; + margin-bottom: 5px; +} +.credit-card-item__cvvBand { + height: 45px; + background: #fff; + margin-bottom: 30px; + text-align: right; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding-right: 10px; + color: #1a3b5d; + font-size: var(--ti-common-font-size-3); + border-radius: 4px; + -webkit-box-shadow: 0 10px 20px -7px rgba(32, 56, 117, 0.35); + box-shadow: 0 10px 20px -7px rgba(32, 56, 117, 0.35); +} +@media screen and (max-width: 480px) { + .credit-card-item__cvvBand { + height: 40px; + margin-bottom: 20px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__cvvBand { + margin-bottom: 15px; + } +} +.credit-card-form { + max-width: 570px; + margin: auto; + width: 100%; + font-family: arial; +} +@media screen and (max-width: 576px) { + .credit-card-form { + margin: 0 auto; + } +} +.credit-card-form__inner { + background: #fff; + -webkit-box-shadow: 0 30px 60px 0 rgba(90, 116, 148, 0.4); + box-shadow: 0 30px 60px 0 rgba(90, 116, 148, 0.4); + border-radius: 10px; + padding: 35px; + padding-top: 180px; +} +@media screen and (max-width: 480px) { + .credit-card-form__inner { + padding: 25px; + padding-top: 165px; + } +} +@media screen and (max-width: 360px) { + .credit-card-form__inner { + padding: 15px; + padding-top: 165px; + } +} +.credit-card-form__row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +@media screen and (max-width: 480px) { + .credit-card-form__row { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + } +} +.credit-card-form__col { + -webkit-box-flex: 1; + -ms-flex: auto; + flex: auto; + margin-right: 35px; +} +.credit-card-form__col:last-child { + margin-right: 0; +} +@media screen and (max-width: 480px) { + .credit-card-form__col { + margin-right: 0; + -webkit-box-flex: unset; + -ms-flex: unset; + flex: unset; + width: 100%; + margin-bottom: 20px; + } + .credit-card-form__col:last-child { + margin-bottom: 0; + } +} +.credit-card-form__col.-cvv { + max-width: 150px; +} +@media screen and (max-width: 480px) { + .credit-card-form__col.-cvv { + max-width: initial; + } +} +.credit-card-form__group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.credit-card-form__group .credit-card-input__input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + margin-right: 15px; + outline: 0; +} +.credit-card-form__group .credit-card-input__input:last-child { + margin-right: 0; +} +.credit-card-form__group select::-ms-expand { + display: none; +} +.credit-card-form__button { + width: 100%; + height: 55px; + background: #2364d2; + border: none; + border-radius: 5px; + font-size: 22px; + font-weight: 500; + -webkit-box-shadow: 3px 10px 20px 0 rgba(35, 100, 210, 0.3); + box-shadow: 3px 10px 20px 0 rgba(35, 100, 210, 0.3); + color: #fff; + margin-top: 20px; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-form__button { + margin-top: 10px; + } +} +.credit-card-item { + max-width: 430px; + height: 270px; + margin-left: auto; + margin-right: auto; + position: relative; + z-index: 2; + width: 100%; +} +@media screen and (max-width: 480px) { + .credit-card-item { + max-width: 310px; + height: 220px; + width: 90%; + } +} +@media screen and (max-width: 360px) { + .credit-card-item { + height: 180px; + } +} +.credit-card-item.-active .card-item__side.-front { + -webkit-transform: perspective(1000px) rotateY(180deg) rotateX(0) rotateZ(0); + transform: perspective(1000px) rotateY(180deg) rotateX(0) rotateZ(0); +} +.credit-card-item.-active .card-item__side.-back { + -webkit-transform: perspective(1000px) rotateY(0) rotateX(0) rotateZ(0); + transform: perspective(1000px) rotateY(0) rotateX(0) rotateZ(0); +} +.credit-card-item__focus { + position: absolute; + z-index: 3; + border-radius: 5px; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transition: all 0.35s cubic-bezier(0.71, 0.03, 0.56, 0.85); + transition: all 0.35s cubic-bezier(0.71, 0.03, 0.56, 0.85); + opacity: 0; + pointer-events: none; + overflow: hidden; + border: 2px solid rgba(255, 255, 255, 0.65); +} +.credit-card-item__focus:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + background: #08142f; + height: 100%; + border-radius: 5px; + -webkit-filter: blur(25px); + filter: blur(25px); + opacity: 0.5; +} +.credit-card-item__focus.-active { + opacity: 1; +} +.credit-card-item__side { + border-radius: 15px; + overflow: hidden; + -webkit-box-shadow: 0 20px 60px 0 rgba(14, 42, 90, 0.55); + box-shadow: 0 20px 60px 0 rgba(14, 42, 90, 0.55); + -webkit-transform: perspective(2000px) rotateY(0) rotateX(0) rotate(0); + transform: perspective(2000px) rotateY(0) rotateX(0) rotate(0); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transition: all 0.8s cubic-bezier(0.71, 0.03, 0.56, 0.85); + transition: all 0.8s cubic-bezier(0.71, 0.03, 0.56, 0.85); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + height: 100%; +} +.credit-card-item__side.-back { + position: absolute; + top: 0; + left: 0; + width: 100%; + -webkit-transform: perspective(2000px) rotateY(-180deg) rotateX(0) rotate(0); + transform: perspective(2000px) rotateY(-180deg) rotateX(0) rotate(0); + z-index: 2; + padding: 0; + height: 100%; +} +.credit-card-item__side.-back .card-item__cover { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +.credit-card-item__bg { + max-width: 100%; + display: block; + max-height: 100%; + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.credit-card-item__cover { + position: absolute; + height: 100%; + background-color: #1c1d27; + background-image: linear-gradient(147deg, #354fce 0, #0c296b 74%); + left: 0; + top: 0; + width: 100%; + border-radius: 15px; + overflow: hidden; +} +.credit-card-item__cover:after { + content: ''; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: rgba(6, 2, 29, 0.45); +} +.credit-card-item__top { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + margin-bottom: 40px; + padding: 0 10px; +} +@media screen and (max-width: 480px) { + .credit-card-item__top { + margin-bottom: 25px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__top { + margin-bottom: 15px; + } +} +.credit-card-item__chip { + width: 60px; +} +@media screen and (max-width: 480px) { + .credit-card-item__chip { + width: 50px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__chip { + width: 40px; + } +} +.credit-card-item__type { + height: 45px; + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + max-width: 100px; + margin-left: auto; + width: 100%; +} +@media screen and (max-width: 480px) { + .credit-card-item__type { + height: 40px; + max-width: 90px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__type { + height: 30px; + } +} +.credit-card-item__typeImg { + max-width: 100%; + -o-object-fit: contain; + object-fit: contain; + max-height: 100%; + -o-object-position: top right; + object-position: top right; +} +.credit-card-item__info { + color: #fff; + width: 100%; + max-width: calc(100% - 85px); + padding: 10px 15px; + font-weight: 500; + display: block; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-item__info { + padding: 10px; + } +} +.credit-card-item__holder { + opacity: 0.7; + font-size: 13px; + margin-bottom: 6px; +} +@media screen and (max-width: 480px) { + .credit-card-item__holder { + font-size: var(--ti-common-font-size-base); + margin-bottom: 5px; + } +} +.credit-card-item__wrapper { + padding: 25px 15px; + position: relative; + z-index: 4; + height: 100%; + text-shadow: 7px 6px 10px rgba(14, 42, 90, 0.8); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +@media screen and (max-width: 480px) { + .credit-card-item__wrapper { + padding: 20px 10px; + } +} +.credit-card-item__name { + font-size: var(--ti-common-font-size-3); + line-height: 1; + white-space: nowrap; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + text-transform: uppercase; +} +@media screen and (max-width: 480px) { + .credit-card-item__name { + font-size: var(--ti-common-font-size-2); + } +} +.credit-card-item__nameItem { + display: inline-block; + min-width: 8px; + position: relative; +} +.credit-card-item__number { + font-weight: 500; + line-height: 1; + color: #fff; + font-size: 27px; + margin-bottom: 25px; + display: inline-block; + padding: 10px 15px; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-item__number { + font-size: 21px; + margin-bottom: 15px; + padding: 10px 10px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__number { + font-size: 19px; + margin-bottom: 10px; + padding: 10px 10px; + } +} +.credit-card-item__numberItem { + width: 16px; + display: inline-block; +} +.credit-card-item__numberItem.-active { + width: 30px; +} +@media screen and (max-width: 480px) { + .credit-card-item__numberItem { + width: 13px; + } + .credit-card-item__numberItem.-active { + width: 16px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__numberItem { + width: 12px; + } + .credit-card-item__numberItem.-active { + width: 8px; + } +} +.credit-card-item__content { + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.credit-card-item__date { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + font-size: var(--ti-common-font-size-3); + margin-left: auto; + padding: 10px; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + width: 80px; + white-space: nowrap; + -ms-flex-negative: 0; + flex-shrink: 0; + cursor: pointer; +} +@media screen and (max-width: 480px) { + .credit-card-item__date { + font-size: var(--ti-common-font-size-2); + } +} +.credit-card-item__dateItem { + position: relative; +} +.credit-card-item__dateItem span { + width: 22px; + display: inline-block; +} +.credit-card-item__dateTitle { + opacity: 0.7; + font-size: 13px; + padding-bottom: 6px; + width: 100%; +} +@media screen and (max-width: 480px) { + .credit-card-item__dateTitle { + font-size: var(--ti-common-font-size-base); + padding-bottom: 5px; + } +} +.credit-card-item__band { + background: rgba(0, 0, 19, 0.8); + width: 100%; + height: 50px; + margin-top: 30px; + position: relative; + z-index: 2; +} +@media screen and (max-width: 480px) { + .credit-card-item__band { + margin-top: 20px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__band { + height: 40px; + margin-top: 10px; + } +} +.credit-card-item__cvv { + text-align: right; + position: relative; + z-index: 2; + padding: 15px; +} +.credit-card-item__cvv .card-item__type { + opacity: 0.7; +} +@media screen and (max-width: 360px) { + .credit-card-item__cvv { + padding: 10px 15px; + } +} +.credit-card-item__cvvTitle { + padding-right: 10px; + font-size: 15px; + font-weight: 500; + color: #fff; + margin-bottom: 5px; +} +.credit-card-item__cvvBand { + height: 45px; + background: #fff; + margin-bottom: 30px; + text-align: right; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding-right: 10px; + color: #1a3b5d; + font-size: var(--ti-common-font-size-3); + border-radius: 4px; + -webkit-box-shadow: 0 10px 20px -7px rgba(32, 56, 117, 0.35); + box-shadow: 0 10px 20px -7px rgba(32, 56, 117, 0.35); +} +@media screen and (max-width: 480px) { + .credit-card-item__cvvBand { + height: 40px; + margin-bottom: 20px; + } +} +@media screen and (max-width: 360px) { + .credit-card-item__cvvBand { + margin-bottom: 15px; + } +} +.credit-card-list { + margin-bottom: -130px; +} +@media screen and (max-width: 480px) { + .credit-card-list { + margin-bottom: -120px; + } +} +.credit-card-input { + margin-bottom: 20px; + position: relative; +} +.credit-card-input__label { + font-size: var(--ti-common-font-size-1); + margin-bottom: 5px; + font-weight: 500; + color: #1a3b5d; + width: 100%; + display: block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.credit-card-input__input { + width: 100%; + height: 50px; + border-radius: 5px; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid #ced6e0; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + font-size: var(--ti-common-font-size-3); + padding: 5px 15px; + background: 0 0; + color: #1a3b5d; + outline: 0; +} +.credit-card-input__input:focus, +.credit-card-input__input:hover { + border-color: #3d9cff; +} +.credit-card-input__input:focus { + -webkit-box-shadow: 0 10px 20px -13px rgba(32, 56, 117, 0.35); + box-shadow: 0 10px 20px -13px rgba(32, 56, 117, 0.35); +} +.credit-card-input__input.-select { + -webkit-appearance: none; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAeCAYAAABuUU38AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNrM1sEJwkAQBdCsngXPHsQO9O5FS7AAMVYgdqAd2IGCDWgFnryLFQiCZ8EGnJUNimiyM/tnk4HNEAg/8y6ZmMRVqz9eUJvRaSbvutCZ347bXVJy/ZnvTmdJ862Me+hAbZCTs6GHpyUi1tTSvPnqTpoWZPUa7W7ncT3vK4h4zVejy8QzM3WhVUO8ykI6jOxoGA4ig3BLHcNFSCGqGAkig2yqgpEiMsjSfY9LxYQg7L6r0X6wS29YJiYQYecemY+wHrXD1+bklGhpAhBDeu/JfIVGxaAQ9sb8CI+CQSJ+QmJg0Ii/EE2MBiIXooHRQhRCkBhNhBcEhLkwf05ZCG8ICCOpk0MULmvDSY2M8UawIRExLIQIEgHDRoghihgRIgiigBEjgiFATBACAgFgghEwSAAGgoBCBBgYAg5hYKAIFYgHBo6w9RRgAFfy160QuV8NAAAAAElFTkSuQmCC); + background-size: 12px; + background-position: 90% center; + background-repeat: no-repeat; + padding-right: 30px; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + cursor: pointer; +} +.credit-card-input__eye { + position: absolute; + width: 1em; + height: 1em; + font-size: var(--ti-common-font-size-5); + border-radius: 50%; + top: 42px; + right: 10px; + opacity: 0.75; + color: #8c9cae; + cursor: pointer; + padding: 0; + background: 0 0; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + border: 2px solid currentColor; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + outline: 0; +} +.credit-card-input__eye:before { + content: ''; + position: absolute; + background: #fff; + width: 0.35em; + height: 0.35em; + top: 6px; + left: 6px; + z-index: 2; + border-radius: 50%; + -webkit-transform: scale(0.1); + transform: scale(0.1); + opacity: 0; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; +} +.credit-card-input__eye:after { + content: ''; + position: absolute; + top: 3px; + left: 3px; + background: currentColor; + width: 0.6em; + height: 0.6em; + border-radius: 50%; + -webkit-transform: scale(0.1); + transform: scale(0.1); + opacity: 0; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.credit-card-input__eye.-active:not(:disabled), +.credit-card-input__eye:hover:not(:disabled) { + color: #2364d2; + opacity: 1; +} +.credit-card-input__eye.-active::after, +.credit-card-input__eye.-active::before { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; +} +.credit-card-input__eye:disabled { + cursor: not-allowed; + opacity: 0.4; +} +.slide-fade-up-enter-active { + -webkit-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + position: relative; +} +.slide-fade-up-leave-active { + -webkit-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + position: absolute; +} +.slide-fade-up-enter { + opacity: 0; + -webkit-transform: translateY(15px); + transform: translateY(15px); + pointer-events: none; +} +.slide-fade-up-leave-to { + opacity: 0; + -webkit-transform: translateY(-15px); + transform: translateY(-15px); + pointer-events: none; +} +.slide-fade-right-enter-active { + -webkit-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + position: relative; +} +.slide-fade-right-leave-active { + -webkit-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + position: absolute; +} +.slide-fade-right-enter { + opacity: 0; + -webkit-transform: translateX(10px) rotate(45deg); + transform: translateX(10px) rotate(45deg); + pointer-events: none; +} +.slide-fade-right-leave-to { + opacity: 0; + -webkit-transform: translateX(-10px) rotate(45deg); + transform: translateX(-10px) rotate(45deg); + pointer-events: none; +} +.github-btn { + position: absolute; + right: 40px; + bottom: 50px; + text-decoration: none; + padding: 15px 25px; + border-radius: 4px; + -webkit-box-shadow: 0 4px 30px -6px rgba(36, 52, 70, 0.65); + box-shadow: 0 4px 30px -6px rgba(36, 52, 70, 0.65); + background: #24292e; + color: #fff; + font-weight: 700; + letter-spacing: 1px; + font-size: var(--ti-common-font-size-2); + text-align: center; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +@media screen and (min-width: 500px) { + .github-btn:hover { + -webkit-transform: scale(1.1); + transform: scale(1.1); + -webkit-box-shadow: 0 17px 20px -6px rgba(36, 52, 70, 0.36); + box-shadow: 0 17px 20px -6px rgba(36, 52, 70, 0.36); + } +} +@media screen and (max-width: 700px) { + .github-btn { + position: relative; + bottom: auto; + right: auto; + margin-top: 20px; + } + .github-btn:active { + -webkit-transform: scale(1.1); + transform: scale(1.1); + -webkit-box-shadow: 0 17px 20px -6px rgba(36, 52, 70, 0.36); + box-shadow: 0 17px 20px -6px rgba(36, 52, 70, 0.36); + } +} +.tiny-crop { + --ti-crop-drag-box-background: var(--ti-base-color-light); + --ti-crop-modal-background: var(--ti-base-color-dark); + --ti-crop-view-box-outline-color: var(--ti-base-color-brand-6); + --ti-crop-center-background: #eeeeee; + --ti-crop-face-background: var(--ti-base-color-light); + --ti-crop-line-background: var(--ti-base-color-brand-6); + --ti-crop-point-background: var(--ti-base-color-brand-6); + --ti-crop-opration-height: var(--ti-base-size-height-minor); + --ti-crop-opration-background: rgba(55, 55, 55, 0.3); + --ti-crop-opration-span-background: rgba(0, 0, 0, 0.5); + --ti-crop-opration-span-color: var(--ti-base-color-light); + --ti-crop-opration-span-hover-background: rgba(0, 0, 0, 0.8); + --ti-crop-modal-mask-background: rgba(55, 55, 55, 0.5); + --ti-crop-moda-close-background: rgba(0, 0, 0, 0.5); + --ti-crop-moda-close-icon-color: var(--ti-base-color-light); + --ti-crop-nopic-background: rgba(0, 0, 0, 0.3); + --ti-crop-nopic-center-color: rgba(255, 255, 255, 0.6); +} +.tiny-crop .cropper-container { + direction: ltr; + font-size: 0; + line-height: 0; + position: relative; + -ms-touch-action: none; + touch-action: none; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-crop .cropper-container img { + display: block; + height: 100%; + image-orientation: 0deg; + max-height: none !important; + max-width: none !important; + min-height: 0 !important; + min-width: 0 !important; + width: 100%; +} +.tiny-crop .cropper-canvas, +.tiny-crop .cropper-crop-box, +.tiny-crop .cropper-drag-box, +.tiny-crop .cropper-modal, +.tiny-crop .cropper-wrap-box { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tiny-crop .cropper-canvas, +.tiny-crop .cropper-wrap-box { + overflow: hidden; +} +.tiny-crop .cropper-drag-box { + background-color: var(--ti-crop-drag-box-background); + opacity: 0; +} +.tiny-crop .cropper-modal { + background-color: var(--ti-crop-modal-background); + opacity: 0.5; +} +.tiny-crop .cropper-view-box { + display: block; + height: 100%; + outline-color: rgba(51, 153, 255, 0.75); + outline: 1px solid var(--ti-crop-view-box-outline-color); + overflow: hidden; + width: 100%; +} +.tiny-crop .cropper-dashed { + border: 0 dashed #eee; + display: block; + opacity: 0.5; + position: absolute; +} +.tiny-crop .cropper-dashed.dashed-h { + border-bottom-width: 1px; + border-top-width: 1px; + height: 33.33333%; + left: 0; + top: 33.33333%; + width: 100%; +} +.tiny-crop .cropper-dashed.dashed-v { + border-left-width: 1px; + border-right-width: 1px; + height: 100%; + left: 33.33333%; + top: 0; + width: 33.33333%; +} +.tiny-crop .cropper-center { + display: block; + height: 0; + left: 50%; + opacity: 0.75; + position: absolute; + top: 50%; + width: 0; +} +.tiny-crop .cropper-center:after, +.tiny-crop .cropper-center:before { + background-color: var(--ti-crop-center-background); + content: ' '; + display: block; + position: absolute; +} +.tiny-crop .cropper-center:before { + height: 1px; + left: -3px; + top: 0; + width: 7px; +} +.tiny-crop .cropper-center:after { + height: 7px; + left: 0; + top: -3px; + width: 1px; +} +.tiny-crop .cropper-face, +.tiny-crop .cropper-line, +.tiny-crop .cropper-point { + display: block; + height: 100%; + opacity: 0.1; + position: absolute; + width: 100%; +} +.tiny-crop .cropper-face { + background-color: var(--ti-crop-face-background); + left: 0; + top: 0; +} +.tiny-crop .cropper-line { + background-color: var(--ti-crop-line-background); +} +.tiny-crop .cropper-line.line-e { + cursor: ew-resize; + right: -3px; + top: 0; + width: 5px; +} +.tiny-crop .cropper-line.line-n { + cursor: ns-resize; + height: 5px; + left: 0; + top: -3px; +} +.tiny-crop .cropper-line.line-w { + cursor: ew-resize; + left: -3px; + top: 0; + width: 5px; +} +.tiny-crop .cropper-line.line-s { + bottom: -3px; + cursor: ns-resize; + height: 5px; + left: 0; +} +.tiny-crop .cropper-point { + background-color: var(--ti-crop-point-background); + height: 5px; + opacity: 0.75; + width: 5px; +} +.tiny-crop .cropper-point.point-e { + cursor: ew-resize; + margin-top: -3px; + right: -3px; + top: 50%; +} +.tiny-crop .cropper-point.point-n { + cursor: ns-resize; + left: 50%; + margin-left: -3px; + top: -3px; +} +.tiny-crop .cropper-point.point-w { + cursor: ew-resize; + left: -3px; + margin-top: -3px; + top: 50%; +} +.tiny-crop .cropper-point.point-s { + bottom: -3px; + cursor: s-resize; + left: 50%; + margin-left: -3px; +} +.tiny-crop .cropper-point.point-ne { + cursor: nesw-resize; + right: -3px; + top: -3px; +} +.tiny-crop .cropper-point.point-nw { + cursor: nwse-resize; + left: -3px; + top: -3px; +} +.tiny-crop .cropper-point.point-sw { + bottom: -3px; + cursor: nesw-resize; + left: -3px; +} +.tiny-crop .cropper-point.point-se { + bottom: -3px; + cursor: nwse-resize; + height: 20px; + opacity: 1; + right: -3px; + width: 20px; +} +@media (min-width: 768px) { + .tiny-crop .cropper-point.point-se { + height: 15px; + width: 15px; + } +} +@media (min-width: 992px) { + .tiny-crop .cropper-point.point-se { + height: 10px; + width: 10px; + } +} +@media (min-width: 1200px) { + .tiny-crop .cropper-point.point-se { + height: 5px; + opacity: 0.75; + width: 5px; + } +} +.tiny-crop .cropper-point.point-se:before { + background-color: var(--ti-crop-point-background); + bottom: -50%; + content: ' '; + display: block; + height: 200%; + opacity: 0; + position: absolute; + right: -50%; + width: 200%; +} +.tiny-crop .cropper-invisible { + opacity: 0; +} +.tiny-crop .cropper-bg { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC); +} +.tiny-crop .cropper-hide { + display: block; + height: 0; + position: absolute; + width: 0; +} +.tiny-crop .cropper-hidden { + display: none !important; +} +.tiny-crop .cropper-move { + cursor: move; +} +.tiny-crop .cropper-crop { + cursor: crosshair; +} +.tiny-crop .cropper-disabled .cropper-drag-box, +.tiny-crop .cropper-disabled .cropper-face, +.tiny-crop .cropper-disabled .cropper-line, +.tiny-crop .cropper-disabled .cropper-point { + cursor: not-allowed; +} +.tiny-crop .img-container { + margin: auto; + overflow: hidden; +} +.tiny-crop .img-container > img { + max-width: 100%; +} +.tiny-crop .opration { + height: var(--ti-crop-opration-height); + line-height: var(--ti-crop-opration-height); + text-align: center; + background-color: var(--ti-crop-opration-background); + position: relative; +} +.tiny-crop .opration span { + width: 26px; + height: 26px; + margin: 0 2px; + display: inline-block; + color: var(--ti-crop-opration-span-color); + cursor: pointer; + border-radius: 50%; + background-color: var(--ti-crop-opration-span-background); +} +.tiny-crop .opration span:hover { + background-color: var(--ti-crop-opration-span-hover-background); + width: 28px; + height: 28px; +} +.tiny-crop .opration span.tiny-icon::before { + position: relative; +} +.tiny-crop .crop-modal-mask { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: var(--ti-crop-modal-mask-background); + height: 100%; + z-index: 1000; +} +.tiny-crop .crop-modal-warp { + position: fixed; + overflow: auto; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.tiny-crop .crop-modal { + position: relative; + top: 100px; + margin: 0 auto 50px; + background: #fff; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 50%; +} +.tiny-crop .moda-close { + position: absolute; + top: -40px; + right: -40px; + width: 80px; + height: 80px; + cursor: pointer; + border-radius: 50%; + background-color: var(--ti-crop-moda-close-background); +} +.tiny-crop .moda-close .tiny-icon { + top: 45px; + left: 16px; + color: var(--ti-crop-moda-close-icon-color); + z-index: 9999999; +} +.tiny-crop .img-preview-box { + position: fixed; + top: 100px; +} +.tiny-crop .img-preview { + height: 9rem; + width: 16rem; + overflow: hidden; +} +@media (max-width: 768px) { + .tiny-crop .preview-lg { + display: none; + } +} +@media (max-width: 600px) { + .tiny-crop .preview-md { + display: none; + } +} +.tiny-crop .preview-lg { + height: 9rem; + width: 16rem; + margin-top: 4px; +} +.tiny-crop .preview-md { + height: 4.5rem; + width: 8rem; + margin-top: 4px; +} +.tiny-crop .preview-sm { + height: 2.25rem; + width: 4rem; + margin-top: 4px; +} +.tiny-crop .img-preview > img { + max-width: 100%; +} +.tiny-crop .nopic { + height: 200px; + text-align: center; + background: var(--ti-crop-nopic-background); +} +.tiny-crop .nopic-center { + position: relative; + font-size: 50px; + color: var(--ti-crop-nopic-center-color); + cursor: pointer; + top: 50px; +} +.tiny-crop input[type='file'] { + display: none; +} +.tiny-crop { + position: fixed; + height: 100%; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + top: 0; + left: 0; + z-index: 1000; + background: rgba(97, 97, 97, 0.5); +} +.tiny-crop__dialog-content__handle { + width: 652px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 26px; + margin: 10px 0 20px; +} +.tiny-crop__dialog-content__handle__button { + width: 268px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} +.tiny-crop__dialog { + width: 652px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #fff; + z-index: 1001; +} +.tiny-crop__dialog-cropper { + width: 652px; + height: 300px; + overflow: hidden; +} +.tiny-crop__dialog-content { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 10px; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-crop__dialog-content__crop { + width: 314px; + height: 200px; + border: 1px solid #393939; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: gray; + overflow: hidden; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-crop__dialog-content__crop img { + height: 100%; + width: 100%; +} +.tiny-croppreview { + position: fixed; + top: calc(100% - 50% - 150px); + left: calc(100% - 50% + 336px); + height: 300px; + width: 300px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + z-index: 1002; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} +.iconButton { + border-radius: 50%; + background: #616161; + height: 26px; + width: 26px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + cursor: pointer; +} +.iconButton .iconButtonset { + fill: #fff; + height: 12px; + width: 12px; +} +.iconButton:hover { + background: #272727; +} +.croppreview { + height: 100%; + width: 100%; +} +.croppreviewb { + width: 214px; + height: 140px; + overflow: hidden; + background: #fff; +} +.croppreviewm { + width: 114px; + height: 80px; + overflow: hidden; + background: #fff; +} +.croppreviews { + width: 84px; + height: 60px; + overflow: hidden; + background: #fff; +} +.tiny-dept { + --ti-dept-label-font-size: var(--ti-common-font-size-base); + --ti-dept-label-color: var(--ti-base-color-info-normal); + --ti-dept-label-font-weight: var(--ti-common-font-weight-7); + --ti-dept-selected-info-color: var(--ti-base-color-brand-6); + --ti-dept-selected-info-background: #f1f1f1; + --ti-dept-selected-info-border-radius: var(--ti-base-radius-large); +} +.tiny-dept__search { + margin-bottom: 12px; +} +.tiny-dept__label, +.tiny-dept__text { + font-size: var(--ti-dept-label-font-size); + color: var(--ti-dept-label-color); + font-weight: var(--ti-dept-label-font-weight); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-dept__label { + text-align: right; +} +.tiny-dept__label.is-selected { + text-align: left; + margin-bottom: 4px; +} +.tiny-dept__selected-info { + color: var(--ti-dept-selected-info-color); + font-size: var(--ti-dept-label-font-size); + background: var(--ti-dept-selected-info-background); + padding: 5px; + border-radius: var(--ti-dept-selected-info-border-radius); +} +.tiny-dept__item { + margin-bottom: 12px; +} +.tiny-dept__item .tiny-dept__label.tiny-col, +.tiny-dept__search .tiny-dept__label.tiny-col { + line-height: 30px; + padding-left: 0; + padding-right: 8px; +} +.tiny-dept__item .tiny-dept__label.tiny-col + .tiny-col, +.tiny-dept__search .tiny-dept__label.tiny-col + .tiny-col { + padding: 0; +} +.tiny-dept .tiny-input__inner { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-dept .tiny-input__icon { + vertical-align: middle; + fill: var(--ti-dept-selected-info-color); +} +.tiny-grid-modal__box { + --ti-detail-page-color: var(--ti-base-color-info-normal); + --ti-detail-page-font-size: var(--ti-common-font-size-base); + --ti-detail-page-header-font-size: var(--ti-common-font-size-1); + --ti-detail-page-header-border-color: var(--ti-base-color-border); + --ti-detail-page-header-seticon-color: var(--ti-base-color-brand-6); + --ti-detail-page-header-seticon-hover-color: var(--ti-base-color-brand-5); + --ti-detail-page-header-seticon-font-size: var(--ti-common-font-size-2); + --ti-detail-page-content-item-color: var(--ti-base-color-placeholder); + --ti-detail-dialog-header-background: #f1f1f1; + --ti-detail-dialog-content-item-hover-background: var(--ti-base-color-hover-background); + --ti-detail-dialog-active-background: #e9f4fd; +} +.tiny-detail-page { + width: 100%; + height: 700px; + font-size: var(--ti-detail-page-font-size); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-detail-page .tiny-detail-page__header { + width: 100%; + height: 40px; + color: var(--ti-detail-page-color); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-bottom: 1px solid var(--ti-detail-page-header-border-color); + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-detail-page .tiny-detail-page__header span { + font-size: var(--ti-detail-page-header-font-size); + font-weight: 700; +} +.tiny-detail-page .tiny-detail-page__header-icon { + line-height: 1; + cursor: pointer; +} +.tiny-detail-page .tiny-detail-page__header-icon .setIconStyle { + font-size: var(--ti-detail-page-header-seticon-font-size); + fill: var(--ti-detail-page-header-seticon-color); +} +.tiny-detail-page .tiny-detail-page__header-icon .setIconStyle:hover { + fill: var(--ti-detail-page-header-seticon-hover-color); +} +.tiny-detail-page .tiny-detail-page__content { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-detail-page .tiny-detail-page__content-item { + width: 100%; + height: 40px; + line-height: 40px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-detail-page .tiny-detail-page__content-item .tiny-detail-page__content-item-span { + color: var(--ti-detail-page-content-item-color); + margin-right: 2px; +} +.tiny-detail-dialog { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + font-size: 12px; +} +.tiny-detail-dialog .tiny-detail-dialog__header { + width: 100%; + height: 40px; + border-bottom: 1px solid var(--ti-detail-page-header-border-color); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + background: var(--ti-detail-dialog-header-background); + padding-left: 8px; +} +.tiny-detail-dialog .tiny-detail-dialog__header > span { + width: 50%; + font-weight: 700; + border-right: 1px solid var(--ti-detail-page-header-border-color); +} +.tiny-detail-dialog .tiny-detail-dialog__header-check { + width: 130px; +} +.tiny-detail-dialog .tiny-detail-dialog__header-check span { + font-weight: 700; +} +.tiny-detail-dialog .tiny-detail-dialog__content { + width: 100%; + min-height: 225px; + max-height: 400px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + overflow-y: auto; + border-bottom: 1px solid var(--ti-detail-page-header-border-color); +} +.tiny-detail-dialog .tiny-detail-dialog__content-item { + width: 100%; + height: 40px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding-left: 8px; +} +.tiny-detail-dialog .tiny-detail-dialog__content-item:hover { + background: var(--ti-detail-dialog-content-item-hover-background); +} +.tiny-detail-dialog .tiny-detail-dialog__footer { + margin-top: 24px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-detail-dialog .active { + background: var(--ti-detail-dialog-active-background); +} +.tiny-dialog-box { + --ti-dialogbox-background: var(--ti-base-color-light); + --ti-dialogbox-border-radius: var(--ti-common-border-radius-normal); + --ti-dialogbox-head-border-color: var(--ti-base-color-border); + --ti-dialogbox-head-font-color: var(--ti-base-color-placeholder); + --ti-dialogbox-head-padding: 32px 32px 28px; + --ti-dialogbox-head-title-font-size: var(--ti-common-font-size-3); + --ti-dialogbox-head-title-font-weight: var(--ti-common-font-weight-7); + --ti-dialogbox-head-title-color: var(--ti-base-color-info-normal); + --ti-dialogbox-head-font-icon-color: #c4c4c4; + --ti-dialogbox-head-font-icon-size: 14px; + --ti-dialogbox-head-font-icon-hover: var(--ti-base-color-brand-6); + --ti-dialogbox-head-body-color: #5a5e66; + --ti-dialogbox-head-body-font-size: var(--ti-common-font-size-1); + --ti-dialogbox-close-icon-color: var(--ti-base-color-common-5); + --ti-dialogbox-close-icon-color-hover: var(--ti-base-color-brand-6); + --ti-dialogbox-box-body-font-size: var(--ti-common-font-size-base); + --ti-dialogbox-box-body-color: var(--ti-base-color-common-5); + --ti-dialogbox-box-body-padding: 0 32px; + --ti-dialogbox-box-body-margin-bottom: 12px; + --ti-dialogbox-btn-background-color-hover: none; + --ti-dialogbox-box-shadow: var(--ti-common-shadow-4-down); + --ti-dialogbox-btn-position-top: 18px; + position: absolute; + background: var(--ti-dialogbox-background); + border: 1px solid transparent; + border-radius: var(--ti-dialogbox-border-radius); + -webkit-box-shadow: var(--ti-dialogbox-box-shadow); + box-shadow: var(--ti-dialogbox-box-shadow); + overflow: hidden; +} +.tiny-dialog-box__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + margin: 0; +} +.tiny-dialog-box.is-fullscreen { + left: 0; + top: 0; + width: 100vw; + height: 100vh; +} +.tiny-dialog-box.is-center .tiny-dialog-box__footer, +.tiny-dialog-box.is-center .tiny-dialog-box__header { + text-align: center; +} +.tiny-dialog-box .tiny-dialog-box__header { + padding: var(--ti-dialogbox-head-padding); + background: var(--ti-dialogbox-background); + font-weight: var(--ti-dialogbox-head-title-font-weight); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + position: relative; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__title { + font-size: var(--ti-dialogbox-head-title-font-size); + color: var(--ti-dialogbox-head-title-color); + font-weight: var(--ti-dialogbox-head-title-font-weight); + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__headerbtn { + border: none; + background: 0 0; + padding: 0; + line-height: 1; + position: absolute; + top: var(--ti-dialogbox-btn-position-top); + right: 20px; + cursor: pointer; + height: 32px; + width: 32px; +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__headerbtn:hover { + background-color: var(--ti-dialogbox-btn-background-color-hover); + border-radius: 4px; +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__headerbtn + .tiny-dialog-box__headerbtn { + margin-left: 8px; +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__headerbtn:focus { + outline: 0; +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__headerbtn .tiny-dialog-box__close { + fill: var(--ti-dialogbox-close-icon-color); + font-size: var(--ti-dialogbox-head-font-icon-size); +} +.tiny-dialog-box .tiny-dialog-box__header .tiny-dialog-box__headerbtn .tiny-dialog-box__close:hover { + fill: var(--ti-dialogbox-close-icon-color-hover); +} +.tiny-dialog-box .tiny-dialog-box__body { + text-align: left; + padding: var(--ti-dialogbox-box-body-padding); + margin-bottom: var(--ti-dialogbox-box-body-margin-bottom); + color: var(--ti-dialogbox-box-body-color); + font-size: var(--ti-dialogbox-box-body-font-size); + overflow: auto; + max-height: 65vh; +} +.tiny-dialog-box .tiny-dialog-box__body .tiny-upload { + overflow: hidden; +} +.tiny-dialog-box .tiny-dialog-box__body > span { + max-height: 120px; + overflow-y: auto; +} +.tiny-dialog-box .tiny-dialog-box__body .tiny-dept__search { + line-height: 30px; +} +.tiny-dialog-box.is-fullscreen .tiny-dialog-box__body { + max-height: calc(100vh - 94px); +} +.tiny-dialog-box .tiny-dialog-box__footer { + text-align: inherit; + padding: 28px 32px 32px; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-dialog-box .tiny-dialog-box__footer .tiny-toolbar .tiny-button { + margin: 0 4px; +} +.tiny-dialog-box__scroll-lock { + overflow: hidden; +} +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background: #000; +} +.v-modal-enter { + -webkit-animation: v-modal-in 0.2s ease; + animation: v-modal-in 0.2s ease; +} +.v-modal-leave { + -webkit-animation: v-modal-out 0.2s ease forwards; + animation: v-modal-out 0.2s ease forwards; +} +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; + } +} +@keyframes v-modal-in { + 0% { + opacity: 0; + } +} +@-webkit-keyframes v-modal-out { + 100% { + opacity: 0; + } +} +@keyframes v-modal-out { + 100% { + opacity: 0; + } +} +.dialog-slideRight-enter-active { + -webkit-animation: slideRight 0.5s ease-in forwards; + animation: slideRight 0.5s ease-in forwards; +} +.dialog-slideRight-leave-active { + -webkit-animation: slideRightout 0.5s ease-in forwards; + animation: slideRightout 0.5s ease-in forwards; +} +@-webkit-keyframes slideRight { + 0% { + opacity: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + 50% { + opacity: 0.6; + -webkit-transform: translateX(50%); + transform: translateX(50%); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes slideRight { + 0% { + opacity: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + 50% { + opacity: 0.6; + -webkit-transform: translateX(50%); + transform: translateX(50%); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes slideRightout { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + opacity: 0.6; + -webkit-transform: translateX(50%); + transform: translateX(50%); + } + 100% { + opacity: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } +} +@keyframes slideRightout { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + opacity: 0.6; + -webkit-transform: translateX(50%); + transform: translateX(50%); + } + 100% { + opacity: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } +} +.dialog-fade-enter-active { + -webkit-animation: dialog-fade-in 0.3s; + animation: dialog-fade-in 0.3s; +} +.dialog-fade-leave-active { + -webkit-animation: dialog-fade-out 0.3s; + animation: dialog-fade-out 0.3s; +} +@-webkit-keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@-webkit-keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +@keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +@media (max-width: 480px) { + .tiny-dialog-box { + width: 100% !important; + top: 0 !important; + left: 0 !important; + } +} +.tiny-drop-roles .user-icon { + float: right; + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + margin-left: 10px; +} +.tiny-dropdown { + display: inline-block; + position: relative; + font-size: var(--ti-common-font-size-base); +} +.tiny-dropdown .tiny-button-group { + display: block; +} +.tiny-dropdown .tiny-button-group .tiny-button { + float: none; +} +.tiny-dropdown .tiny-dropdown__caret-button { + padding-left: 5px; + padding-right: 5px; + position: relative; + border-left: none; + min-width: 24px; +} +.tiny-dropdown .tiny-dropdown__caret-button:before { + content: ''; + position: absolute; + display: block; + width: 1px; + top: 5px; + bottom: 5px; + left: 0; + background: #fff; +} +.tiny-dropdown .tiny-dropdown__caret-button.tiny-button--default:before { + background: #d9d9d9; +} +.tiny-dropdown .tiny-dropdown__caret-button.tiny-button--default:hover:before { + background-color: #1890ff; +} +.tiny-dropdown .tiny-dropdown__caret-button:hover:not(.is-disabled):before { + top: 0; + bottom: 0; +} +.tiny-dropdown .tiny-dropdown__caret-button svg { + padding-left: 0; + margin: 0 3px; +} +.tiny-dropdown .tiny-dropdown-selfdefine:focus:active, +.tiny-dropdown .tiny-dropdown-selfdefine:focus:not(.focusing) { + outline-width: 0; +} +.tiny-dropdown [disabled] { + cursor: not-allowed; + color: #bbb; +} +.tiny-dropdown-menu__item { + --ti-dropdown-menu-item-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-dropdown-menu-item-hover-color: var(--ti-base-color-brand-6); + --ti-dropdown-menu-item-active-bgcolor: var(--ti-base-color-brand-6); + --ti-dropdown-menu-item-active-color: var(--ti-base-color-white); + --ti-dropdown-menu-item-disabled-color: var(--ti-common-color-text-disabled); + --ti-dropdown-menu-item-color: #333; + --ti-dropdown-menu-item-height: 30px; + --ti-dropdown-menu-item-padding: 0 20px; + --ti-dropdown-menu-item-border-radius: 0; + list-style: none; + line-height: var(--ti-dropdown-menu-item-height); + padding: var(--ti-dropdown-menu-item-padding) !important; + margin: 0; + font-size: var(--ti-common-font-size-base); + color: var(--ti-dropdown-menu-item-color); + cursor: pointer; + outline: 0; +} +.tiny-dropdown-menu__item:focus, +.tiny-dropdown-menu__item:not(.is-disabled):hover { + background-color: var(--ti-dropdown-menu-item-hover-bgcolor); + color: var(--ti-dropdown-menu-item-hover-color); + border-radius: var(--ti-dropdown-menu-item-border-radius); +} +.tiny-dropdown-menu__item:focus svg, +.tiny-dropdown-menu__item:not(.is-disabled):hover svg { + fill: var(--ti-dropdown-menu-item-hover-color); +} +.tiny-dropdown-menu__item:not(.is-disabled):active { + background-color: var(--ti-dropdown-menu-item-active-bgcolor); + color: var(--ti-dropdown-menu-item-active-color); + border-radius: var(--ti-dropdown-menu-item-border-radius); +} +.tiny-dropdown-menu__item:not(.is-disabled):active svg { + fill: var(--ti-dropdown-menu-item-active-color); +} +.tiny-dropdown-menu__item svg { + margin-right: 5px; + margin-top: -2px; +} +.tiny-dropdown-menu__item.is-disabled { + cursor: default; + color: var(--ti-dropdown-menu-item-disabled-color); + pointer-events: none; +} +.tiny-dropdown-menu__item--divided { + position: relative; + margin-top: 6px; + border-top: 1px solid #e4e7ed; +} +.tiny-dropdown-menu__item--divided:before { + content: ''; + height: 6px; + display: block; + margin: 0 -20px; + background-color: #fff; +} +.tiny-dropdown-menu { + --ti-dropdown-menu-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2); + --ti-dropdown-menu-gap: 0; + --ti-dropdown-menu-padding: 4px 0; + position: absolute; + top: 0; + left: 0; + z-index: 10; + padding: var(--ti-dropdown-menu-padding); + background-color: var(--ti-common-color-bg-white-normal); + border-radius: var(--ti-common-border-radius-normal); + -webkit-box-shadow: var(--ti-dropdown-menu-box-shadow); + box-shadow: var(--ti-dropdown-menu-box-shadow); +} +.tiny-dropdown-menu.tiny-popper .popper__arrow, +.tiny-dropdown-menu.tiny-popper .popper__arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tiny-dropdown-menu.tiny-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); +} +.tiny-dropdown-menu.tiny-popper .popper__arrow::after { + content: ' '; + border-width: 6px; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='top'] { + margin-bottom: var(--ti-dropdown-menu-gap); +} +.tiny-dropdown-menu.tiny-popper[x-placement^='top'] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #d9d9d9; + border-bottom-width: 0; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='top'] .popper__arrow:after { + bottom: 1px; + margin-left: -6px; + border-top-color: #fff; + border-bottom-width: 0; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='bottom'] { + margin-top: var(--ti-dropdown-menu-gap); +} +.tiny-dropdown-menu.tiny-popper[x-placement^='bottom'] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #d9d9d9; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='bottom'] .popper__arrow:after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #fff; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='right'] { + margin-left: 12px; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='right'] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #d9d9d9; + border-left-width: 0; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='right'] .popper__arrow:after { + bottom: -6px; + left: 1px; + border-right-color: #fff; + border-left-width: 0; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='left'] { + margin-right: 12px; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='left'] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #d9d9d9; +} +.tiny-dropdown-menu.tiny-popper[x-placement^='left'] .popper__arrow:after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #fff; +} +.tiny-dropdown-menu--medium { + padding: 6px 0; +} +.tiny-dropdown-menu--medium .tiny-dropdown-menu__item { + line-height: 30px; + padding: 0 17px; + font-size: var(--ti-common-font-size-1); +} +.tiny-dropdown-menu--medium .tiny-dropdown-menu__item.tiny-dropdown-menu__item--divided { + margin-top: 6px; +} +.tiny-dropdown-menu--medium .tiny-dropdown-menu__item.tiny-dropdown-menu__item--divided:before { + height: 6px; + margin: 0 -17px; +} +.tiny-dropdown-menu--small { + padding: 6px 0; +} +.tiny-dropdown-menu--small .tiny-dropdown-menu__item { + line-height: 27px; + padding: 0 15px; + font-size: 13px; +} +.tiny-dropdown-menu--small .tiny-dropdown-menu__item.tiny-dropdown-menu__item--divided { + margin-top: 4px; +} +.tiny-dropdown-menu--small .tiny-dropdown-menu__item.tiny-dropdown-menu__item--divided:before { + height: 4px; + margin: 0 -15px; +} +.tiny-dropdown-menu--mini { + padding: 3px 0; +} +.tiny-dropdown-menu--mini .tiny-dropdown-menu__item { + line-height: 24px; + padding: 0 10px; + font-size: var(--ti-common-font-size-base); +} +.tiny-dropdown-menu--mini .tiny-dropdown-menu__item.tiny-dropdown-menu__item--divided { + margin-top: 3px; +} +.tiny-dropdown-menu--mini .tiny-dropdown-menu__item.tiny-dropdown-menu__item--divided:before { + height: 3px; + margin: 0 -10px; +} +.tiny-espace { + --ti-espace-font-size: 26px; + --ti-espace-color: var(--ti-base-color-brand-6); + --ti-espace-hover-color: var(--ti-base-color-brand-5); +} +.tiny-espace .item-call, +.tiny-espace .item-email, +.tiny-espace .item-talk { + margin: 0 8px 0 0; + line-height: 1; +} +.tiny-espace .item-call .tiny-svg, +.tiny-espace .item-email .tiny-svg, +.tiny-espace .item-talk .tiny-svg { + fill: var(--ti-espace-color); + font-size: var(--ti-espace-font-size); +} +.tiny-espace .item-call:hover .tiny-svg, +.tiny-espace .item-email:hover .tiny-svg, +.tiny-espace .item-talk:hover .tiny-svg { + fill: var(--ti-espace-hover-color); +} +.tiny-fall-menu { + --ti-fallmenu-menu-height: var(--ti-base-size-height-large); + --ti-fallmenu-background-normal: var(--ti-base-color-brand-6); + --ti-fallmenu-background-hover: var(--ti-base-color-brand-5); + --ti-fallmenu-icon-font-size: var(--ti-common-font-size-base); + --ti-fallmenu-slot-color: var(--ti-base-color-light); + --ti-fallmenu-title-font-size: var(--ti-common-font-size-2); + --ti-fallmenu-box-title-color: var(--ti-base-color-placeholder); + --ti-fallmenu-box-font-color: var(--ti-base-color-brand-6); + --ti-fallmenu-box-font-size: var(--ti-common-font-size-1); + --ti-fallmenu-box-title-height: var(--ti-base-size-height-small); + --ti-fallmenu-box-content-height: 26px; + --ti-fallmenu-box-hover-color: var(--ti-base-color-primary-active); +} +.tiny-fall-menu .tiny-fall-menu__wrap { + background: var(--ti-fallmenu-background-normal); + padding: 0 24px; +} +.tiny-fall-menu .tiny-fall-menu__nav { + height: var(--ti-fallmenu-menu-height); + margin: 0 auto; + position: relative; +} +.tiny-fall-menu .tiny-fall-menu__subnav { + overflow: hidden; +} +.tiny-fall-menu .tiny-fall-menu__subnav .icon-slot-left, +.tiny-fall-menu .tiny-fall-menu__subnav .icon-slot-right { + color: var(--ti-fallmenu-slot-color); + cursor: pointer; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: var(--ti-fallmenu-icon-font-size); + line-height: 1; +} +.tiny-fall-menu .tiny-fall-menu__subnav .icon-slot-left svg, +.tiny-fall-menu .tiny-fall-menu__subnav .icon-slot-right svg { + fill: #fff; +} +.tiny-fall-menu .tiny-fall-menu__subnav .icon-slot-left { + left: -12px; +} +.tiny-fall-menu .tiny-fall-menu__subnav .icon-slot-right { + right: -12px; +} +.tiny-fall-menu .tiny-fall-menu__list { + position: relative; + min-width: 4000px; + left: 0; + -webkit-transition: left 0.4s; + transition: left 0.4s; +} +.tiny-fall-menu .tiny-fall-menu__list .fall-hide { + opacity: 0; +} +.tiny-fall-menu .tiny-fall-menu__list ul:after, +.tiny-fall-menu .tiny-fall-menu__list ul:before { + content: ''; + display: table; +} +.tiny-fall-menu .tiny-fall-menu__list ul:after { + clear: both; +} +.tiny-fall-menu .tiny-fall-menu__list li { + float: left; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-fall-menu .tiny-fall-menu__list a { + float: left; + display: block; + width: auto; + padding: 0 12px; + height: var(--ti-fallmenu-menu-height); + text-align: center; + text-decoration: none; + font-weight: 400; + line-height: var(--ti-fallmenu-menu-height); + font-size: var(--ti-fallmenu-title-font-size); + color: var(--ti-fallmenu-slot-color); +} +.tiny-fall-menu .tiny-fall-menu__list a.now, +.tiny-fall-menu .tiny-fall-menu__list a:hover { + color: var(--ti-fallmenu-slot-color); + background: var(--ti-fallmenu-background-hover); + text-decoration: none; +} +.tiny-fall-menu .tiny-fall-menu__list a.now:before { + position: absolute; + content: ''; + width: 0; + height: 0; + border-style: solid; + border-width: 0; + border-color: #fff transparent; + top: 34px; + left: 42%; +} +.tiny-fall-menu .tiny-fall-menu__box { + position: absolute; + left: 0; + top: var(--ti-fallmenu-menu-height); + width: 100%; + background: var(--ti-fallmenu-slot-color); + overflow: hidden; + -webkit-transition: opacity 0.4s; + transition: opacity 0.4s; + opacity: 0; +} +.tiny-fall-menu .tiny-fall-menu__box .contbox { + overflow: hidden; +} +.tiny-fall-menu .tiny-fall-menu__box .cont { + min-width: 120px; + padding: 18px 20px; +} +.tiny-fall-menu .tiny-fall-menu__box .sublist li { + float: left; + width: 100%; +} +.tiny-fall-menu .tiny-fall-menu__box .sublist li h3.mcate-item-hd { + font-size: var(--ti-fallmenu-box-font-size); + border-bottom: 0 solid #ccc; + color: var(--ti-fallmenu-box-title-color); + font-weight: 400; + margin: 0; +} +.tiny-fall-menu .tiny-fall-menu__box .sublist li p.mcate-item-bd { + margin-top: 18px; +} +.tiny-fall-menu .tiny-fall-menu__box .sublist li p.mcate-item-bd a { + margin: 8px 0 0 0; + font-size: var(--ti-common-font-size-base); + color: var(--ti-fallmenu-box-font-color); + text-decoration: none; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.tiny-fall-menu .tiny-fall-menu__box .sublist li p.mcate-item-bd a:hover { + color: var(--ti-fallmenu-box-hover-color); +} +.tiny-fall-menu .tiny-fall-menu__box.active, +.tiny-fall-menu .tiny-fall-menu__box:hover { + border-left: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + border-bottom: 1px solid #d9d9d9; + -webkit-box-shadow: 1px 1px 5px 1px #d9d9d9; + box-shadow: 1px 1px 5px 1px #d9d9d9; + opacity: 1; +} +@-webkit-keyframes leftArrow { + 0% { + left: -17px; + } + 50% { + left: -13px; + } + 100% { + left: -17px; + } +} +@keyframes leftArrow { + 0% { + left: -17px; + } + 50% { + left: -13px; + } + 100% { + left: -17px; + } +} +@-webkit-keyframes rightArrow { + 0% { + right: -17px; + } + 50% { + right: -13px; + } + 100% { + right: -17px; + } +} +@keyframes rightArrow { + 0% { + right: -17px; + } + 50% { + right: -13px; + } + 100% { + right: -17px; + } +} +.tiny-upload--thumb__head { + cursor: pointer; + color: #343434; + font-size: var(--ti-common-font-size-1); +} +.tiny-upload--thumb__head .thumb-icon { + margin-right: 8px; + fill: #999; +} +.tiny-upload--thumb__head span { + vertical-align: middle; +} +.tiny-upload--thumb__body .thumb-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-upload--thumb__body .thumb-item:not(:last-child) { + padding-bottom: 8px; +} +.tiny-upload--thumb__body .thumb-item-name { + padding: 4px 8px; + color: #333; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-upload--thumb__body .thumb-success-icon { + fill: #52c41a; +} +.tiny-upload--thumb__body .close-icon, +.tiny-upload--thumb__body .download-icon, +.tiny-upload--thumb__body .refres-icon { + fill: #7c7c7c; + cursor: pointer; +} +.tiny-upload--thumb__body .thumb-icon + .thumb-icon { + margin-left: 8px; +} +.tiny-float-bar { + --ti-floatbar-border-color: var(--ti-base-color-border); + --ti-floatbar-radius: var(--ti-base-radius-small); + --ti-floatbar-font-size: var(--ti-common-font-size-1); + --ti-floatbar-list-background: var(--ti-base-color-light); + --ti-floatbar-list-color: var(--ti-base-color-info-normal); + --ti-floatbar-list-hover-background: rgba(24, 144, 255, 0.06); + --ti-floatbar-list-hover-color: var(--ti-base-color-brand-6); + position: fixed; + top: 50%; + right: 10px; + z-index: 99999; + border: 1px solid var(--ti-floatbar-border-color); + -webkit-box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + border-radius: var(--ti-floatbar-radius); + overflow: hidden; + background: var(--ti-floatbar-list-background); +} +.tiny-float-bar ul li { + display: block; + background: var(--ti-floatbar-list-background); + color: var(--ti-floatbar-list-color); + font-size: var(--ti-floatbar-font-size); + min-width: 80px; + min-height: 40px; + line-height: 40px; + text-align: center; +} +.tiny-float-bar ul li:hover { + background: var(--ti-floatbar-list-hover-background); +} +.tiny-float-bar ul li a { + width: 100%; + height: 100%; + color: var(--ti-floatbar-list-color); + cursor: pointer; + outline: 0; +} +.tiny-float-bar ul li a:focus, +.tiny-float-bar ul li a:hover { + color: var(--ti-floatbar-list-hover-color); + text-decoration: none; +} +.tiny-form { + --ti-form-item-margin-right: 10px; + width: 100%; + overflow: hidden; +} +.tiny-form div { + outline: 0; +} +.tiny-form--inline .tiny-form-item, +.tiny-form--inline .tiny-form-item__content { + display: inline-block; + vertical-align: top; +} +.tiny-form--inline .tiny-form-item { + margin-right: var(--ti-form-item-margin-right); +} +.tiny-form--inline .tiny-form-item__label { + float: none; + display: inline-block; +} +.tiny-form--inline .tiny-form--label-top .tiny-form-item__content { + display: block; +} +.tiny-form--label-left .tiny-form-item__label { + text-align: left; +} +.tiny-form--label-top .tiny-form-item__label { + float: none; + display: inline-block; + text-align: left; + line-height: 1; + padding: 0 0 8px; +} +.tiny-form--label-top .tiny-form-item { + margin-bottom: 16px; +} +.tiny-form--label-top .tiny-form { + margin-bottom: 16px; +} +.tiny-form--inline.tiny-form--label-top .tiny-form-item { + margin-bottom: 16px; + margin-right: 64px; +} +.tiny-form--inline.tiny-form--label-top .tiny-form-item__label { + display: block; + text-align: left; +} +.tiny-form__valid.tiny-tooltip.tiny-tooltip__popper { + padding: 7px 4px; +} +.tiny-form__valid.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='top'] .popper__arrow { + bottom: -4px; +} +.tiny-form__valid.tiny-tooltip.tiny-tooltip__popper[x-placement^='top'] { + margin-bottom: 6px; +} +.tiny-form__valid.tiny-tooltip.tiny-tooltip__popper[x-placement^='bottom'] { + margin-top: 6px; +} +.tiny-form-item { + --ti-form-item-small-line-height: 36px; + --ti-form-item-medium-line-height: 42px; + --ti-form-item-mini-line-height: 24px; + --ti-form-item-label-line-height: var(--ti-base-size-height-minor); + --ti-form-item-label-font-size: var(--ti-common-font-size-1); + --ti-form-item-label-color: var(--ti-base-color-info-normal); + --ti-form-item-error-font-size: var(--ti-common-font-size-base); + --ti-form-item-error-color: var(--ti-base-color-error-3); + --ti-form-item-error-bgcolor: var(--ti-base-color-error-1); + margin-bottom: 12px; +} +.tiny-form-item:after, +.tiny-form-item:before { + content: ''; + display: table; +} +.tiny-form-item:after { + clear: both; +} +.tiny-form-item .tiny-form-item { + margin-bottom: 0; +} +.tiny-form-item.tiny-form-item--mini, +.tiny-form-item.tiny-form-item--small { + margin-bottom: 8px; +} +.tiny-form-item--medium .tiny-form-item__label { + height: var(--ti-form-item-medium-line-height); + line-height: var(--ti-form-item-medium-line-height); +} +.tiny-form-item--small .tiny-form-item__label { + height: var(--ti-form-item-small-line-height); + line-height: var(--ti-form-item-small-line-height); +} +.tiny-form-item--small .tiny-form-item__error { + padding-top: 2px; +} +.tiny-form-item--mini .tiny-form-item__label { + height: var(--ti-form-item-mini-line-height); + line-height: var(--ti-form-item-mini-line-height); +} +.tiny-form-item--medium .tiny-form-item__content .tiny-checkbox, +.tiny-form-item--medium .tiny-form-item__content .tiny-radio { + line-height: 42px; +} +.tiny-form-item--medium .tiny-form-item__content .tiny-input .tiny-input__inner { + height: 42px; + line-height: 42px; +} +.tiny-form-item--small .tiny-form-item__content .tiny-checkbox, +.tiny-form-item--small .tiny-form-item__content .tiny-radio { + line-height: 36px; +} +.tiny-form-item--small .tiny-form-item__content .tiny-input .tiny-input__inner { + height: 36px; + line-height: 36px; +} +.tiny-form-item--mini .tiny-form-item__content .tiny-checkbox, +.tiny-form-item--mini .tiny-form-item__content .tiny-radio { + line-height: 24px; +} +.tiny-form-item--mini .tiny-form-item__content .tiny-input .tiny-input__inner { + height: 24px; + line-height: 24px; +} +.tiny-form-item--mini .tiny-form-item__error { + padding-top: 1px; +} +.tiny-form-item__label-wrap { + float: left; +} +.tiny-form-item__label-wrap .tiny-form-item__label { + display: inline-block; + float: none; +} +.tiny-form-item__label { + text-align: right; + vertical-align: middle; + float: left; + font-size: var(--ti-form-item-label-font-size); + color: var(--ti-form-item-label-color); + height: var(--ti-form-item-label-line-height); + line-height: var(--ti-form-item-label-line-height); + padding-right: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.tiny-form-item__content { + position: relative; + font-size: var(--ti-form-item-label-font-size); +} +.tiny-form-item__content:after, +.tiny-form-item__content:before { + content: ''; + display: table; +} +.tiny-form-item__content:after { + clear: both; +} +.tiny-form-item__content .tiny-input { + display: inline-block; +} +.tiny-form-item__content .tiny-input.tiny-range-editor.tiny-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; +} +.tiny-form-item__content .tiny-input.tiny-input-group { + display: inline-table; +} +.tiny-form-item__content .tiny-input-group { + vertical-align: top; +} +.tiny-form-item__content .tiny-button + .tiny-button { + margin-left: 8px; +} +.tiny-form-item__content .tiny-checkbox, +.tiny-form-item__content .tiny-radio { + line-height: 30px; +} +.tiny-form-item__content .tiny-date-editor--daterange.tiny-input, +.tiny-form-item__content .tiny-date-editor--daterange.tiny-input__inner, +.tiny-form-item__content .tiny-date-editor--timerange.tiny-input, +.tiny-form-item__content .tiny-date-editor--timerange.tiny-input__inner, +.tiny-form-item__content .tiny-numeric { + width: 100%; +} +.tiny-form-item__error { + color: var(--ti-form-item-error-color); + font-size: var(--ti-form-item-error-font-size); + line-height: 1; + padding-top: 4px; + position: absolute; + top: 100%; + left: 0; +} +.tiny-form-item__error--inline { + position: relative; + top: auto; + left: auto; + display: inline-block; + margin-left: 10px; +} +.tiny-form-item.is-required:not(.is-no-asterisk) .tiny-form-item__label-wrap > .tiny-form-item__label:before, +.tiny-form-item.is-required:not(.is-no-asterisk) > .tiny-form-item__label:before { + content: '*'; + color: var(--ti-form-item-error-color); + margin-right: 4px; +} +.tiny-form-item.is-error .tiny-input__inner, +.tiny-form-item.is-error .tiny-input__inner:focus, +.tiny-form-item.is-error .tiny-textarea__inner, +.tiny-form-item.is-error .tiny-textarea__inner:focus { + border-color: var(--ti-form-item-error-color); + background-color: var(--ti-form-item-error-bgcolor); +} +.tiny-form-item.is-error .tiny-input-group__append .tiny-input__inner, +.tiny-form-item.is-error .tiny-input-group__prepend .tiny-input__inner { + border-color: transparent; +} +.tiny-form-item.is-error .tiny-input__validateIcon { + color: var(--ti-form-item-error-color); +} +.tiny-form-item.is-error .tiny-numeric__input-inner, +.tiny-form-item.is-error .tiny-numeric__input-inner:focus { + border-color: #f5222d; +} +.tiny-form-item--feedback .tiny-input__validateIcon { + display: inline-block; +} +.tiny-form-item .tiny-input__validateIcon { + display: none; +} +.tiny-zoom-in-top-enter-active, +.tiny-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; +} +.tiny-zoom-in-top-enter, +.tiny-zoom-in-top-enter-from, +.tiny-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); +} +.tiny-gantt { + width: 100%; + height: 500px; +} +.container { + padding-right: 10px; + margin-right: auto; + padding-left: 10px; + margin-left: auto; +} +.container:after, +.container:before { + content: ''; + display: table; +} +.container:after { + clear: both; +} +@media (min-width: 768px) { + .container { + width: 788px; + } +} +@media (min-width: 992px) { + .container { + width: 1012px; + } +} +@media (min-width: 1200px) { + .container { + width: 1220px; + } +} +@media (min-width: 1920px) { + .container { + width: 1940px; + } +} +.row { + margin-left: -10px; + margin-right: -10px; +} +.row:after, +.row:before { + content: ''; + display: table; +} +.row:after { + clear: both; +} +.row h3 { + margin-left: 10px; +} +.tiny-filter .row { + overflow: hidden; +} +.tiny-filter .row .title { + margin-left: 10px; +} +.col-lg-1, +.col-lg-10, +.col-lg-11, +.col-lg-12, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-md-1, +.col-md-10, +.col-md-11, +.col-md-12, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-sm-1, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-xl-1, +.col-xl-10, +.col-xl-11, +.col-xl-12, +.col-xl-2, +.col-xl-3, +.col-xl-4, +.col-xl-5, +.col-xl-6, +.col-xl-7, +.col-xl-8, +.col-xl-9, +.col-xs-1, +.col-xs-10, +.col-xs-11, +.col-xs-12, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9 { + position: relative; + min-height: 1px; + padding-left: 10px; + padding-right: 10px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.col-xs-1, +.col-xs-10, +.col-xs-11, +.col-xs-12, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: 0; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: 0; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, + .col-sm-10, + .col-sm-11, + .col-sm-12, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: 0; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: 0; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, + .col-md-10, + .col-md-11, + .col-md-12, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: 0; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: 0; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, + .col-lg-10, + .col-lg-11, + .col-lg-12, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: 0; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: 0; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1920px) { + .col-xl-1, + .col-xl-10, + .col-xl-11, + .col-xl-12, + .col-xl-2, + .col-xl-3, + .col-xl-4, + .col-xl-5, + .col-xl-6, + .col-xl-7, + .col-xl-8, + .col-xl-9 { + float: left; + } + .col-xl-12 { + width: 100%; + } + .col-xl-11 { + width: 91.66666667%; + } + .col-xl-10 { + width: 83.33333333%; + } + .col-xl-9 { + width: 75%; + } + .col-xl-8 { + width: 66.66666667%; + } + .col-xl-7 { + width: 58.33333333%; + } + .col-xl-6 { + width: 50%; + } + .col-xl-5 { + width: 41.66666667%; + } + .col-xl-4 { + width: 33.33333333%; + } + .col-xl-3 { + width: 25%; + } + .col-xl-2 { + width: 16.66666667%; + } + .col-xl-1 { + width: 8.33333333%; + } + .col-xl-push-12 { + left: 100%; + } + .col-xl-push-11 { + left: 91.66666667%; + } + .col-xl-push-10 { + left: 83.33333333%; + } + .col-xl-push-9 { + left: 75%; + } + .col-xl-push-8 { + left: 66.66666667%; + } + .col-xl-push-7 { + left: 58.33333333%; + } + .col-xl-push-6 { + left: 50%; + } + .col-xl-push-5 { + left: 41.66666667%; + } + .col-xl-push-4 { + left: 33.33333333%; + } + .col-xl-push-3 { + left: 25%; + } + .col-xl-push-2 { + left: 16.66666667%; + } + .col-xl-push-1 { + left: 8.33333333%; + } + .col-xl-push-0 { + left: 0; + } + .col-xl-pull-12 { + right: 100%; + } + .col-xl-pull-11 { + right: 91.66666667%; + } + .col-xl-pull-10 { + right: 83.33333333%; + } + .col-xl-pull-9 { + right: 75%; + } + .col-xl-pull-8 { + right: 66.66666667%; + } + .col-xl-pull-7 { + right: 58.33333333%; + } + .col-xl-pull-6 { + right: 50%; + } + .col-xl-pull-5 { + right: 41.66666667%; + } + .col-xl-pull-4 { + right: 33.33333333%; + } + .col-xl-pull-3 { + right: 25%; + } + .col-xl-pull-2 { + right: 16.66666667%; + } + .col-xl-pull-1 { + right: 8.33333333%; + } + .col-xl-pull-0 { + right: 0; + } + .col-xl-offset-12 { + margin-left: 100%; + } + .col-xl-offset-11 { + margin-left: 91.66666667%; + } + .col-xl-offset-10 { + margin-left: 83.33333333%; + } + .col-xl-offset-9 { + margin-left: 75%; + } + .col-xl-offset-8 { + margin-left: 66.66666667%; + } + .col-xl-offset-7 { + margin-left: 58.33333333%; + } + .col-xl-offset-6 { + margin-left: 50%; + } + .col-xl-offset-5 { + margin-left: 41.66666667%; + } + .col-xl-offset-4 { + margin-left: 33.33333333%; + } + .col-xl-offset-3 { + margin-left: 25%; + } + .col-xl-offset-2 { + margin-left: 16.66666667%; + } + .col-xl-offset-1 { + margin-left: 8.33333333%; + } + .col-xl-offset-0 { + margin-left: 0; + } +} +[class*='tiny-grid-icon__'] { + display: inline-block; + vertical-align: middle; + position: relative; + direction: ltr; + font-family: var(--ti-grid-font-family); +} +.tiny-grid-icon__zoomin { + width: 0.8em; + height: 0.8em; + margin: 0.1em; + border-width: 0.1em; + border-style: solid; + border-color: inherit; +} +.tiny-grid-icon__zoomout { + width: 1em; + height: 1em; + line-height: 1em; + position: relative; +} +.tiny-grid-icon__zoomout:before { + content: ''; + position: absolute; + right: 0; + width: 0.7em; + border-style: solid; + top: 0; + border-width: 0.1em; + height: 0.7em; + border-color: inherit; +} +.tiny-grid-icon__zoomout:after { + content: ''; + position: absolute; + bottom: 0.1em; + background-color: #fff; + left: 0.1em; + border-style: solid; + width: 0.7em; + border-width: 0.1em; + height: 0.7em; + border-color: inherit; +} +.tiny-grid-icon__menu { + width: 0.22em; + height: 0.22em; + -webkit-box-shadow: 0 -0.4em 0, -0.4em -0.4em 0, 0.4em -0.4em 0, 0 0 0 1em inset, -0.4em 0 0, 0.4em 0 0, 0 0.4em 0, + -0.4em 0.4em 0, 0.4em 0.4em 0; + box-shadow: 0 -0.4em 0, -0.4em -0.4em 0, 0.4em -0.4em 0, 0 0 0 1em inset, -0.4em 0 0, 0.4em 0 0, 0 0.4em 0, + -0.4em 0.4em 0, 0.4em 0.4em 0; + margin: 0.58em; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.tiny-grid-icon__caret-bottom, +.tiny-grid-icon__caret-left, +.tiny-grid-icon__caret-right, +.tiny-grid-icon__caret-top { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__caret-bottom:before, +.tiny-grid-icon__caret-left:before, +.tiny-grid-icon__caret-right:before, +.tiny-grid-icon__caret-top:before { + content: ''; + left: 0; + bottom: 0.25em; + border-right-color: transparent; + position: absolute; + border-width: 0.5em; + border-style: solid; + border-top-color: transparent; + border-bottom-color: inherit; + border-left-color: transparent; + -webkit-transition: border 0.1s ease-in-out; + transition: border 0.1s ease-in-out; +} +.tiny-grid-icon__caret-bottom { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} +.tiny-grid-icon__caret-left { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.tiny-grid-icon__caret-right { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.tiny-grid-icon__arrow-top { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.tiny-grid-icon__arrow-top:before { + content: ''; + position: absolute; + top: 0.38em; + left: 0.12em; + width: 0.5em; + height: 0.5em; + border-width: 0.1em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__arrow-bottom { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(135deg); + transform: rotate(135deg); +} +.tiny-grid-icon__arrow-bottom:before { + content: ''; + position: absolute; + top: 0.38em; + left: 0.12em; + width: 0.5em; + height: 0.5em; + border-width: 0.1em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__arrow-left { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(-135deg); + transform: rotate(-135deg); +} +.tiny-grid-icon__arrow-left:before { + content: ''; + position: absolute; + top: 0.38em; + left: 0.12em; + width: 0.5em; + height: 0.5em; + border-width: 0.1em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__arrow-right { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.tiny-grid-icon__arrow-right:before { + content: ''; + position: absolute; + top: 0.38em; + left: 0.12em; + width: 0.5em; + height: 0.5em; + border-width: 0.1em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__d-arrow-top { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.tiny-grid-icon__d-arrow-top:before { + content: ''; + position: absolute; + top: 0.24em; + left: 0.26em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-right-color: inherit; + border-top-color: inherit; + border-left-color: transparent; + border-bottom-color: transparent; +} +.tiny-grid-icon__d-arrow-top:after { + content: ''; + position: absolute; + top: 0.42em; + left: 0.1em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__d-arrow-bottom { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(135deg); + transform: rotate(135deg); +} +.tiny-grid-icon__d-arrow-bottom:before { + content: ''; + position: absolute; + top: 0.24em; + left: 0.26em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-right-color: inherit; + border-top-color: inherit; + border-left-color: transparent; + border-bottom-color: transparent; +} +.tiny-grid-icon__d-arrow-bottom:after { + content: ''; + position: absolute; + top: 0.42em; + left: 0.1em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__d-arrow-left { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(-135deg); + transform: rotate(-135deg); +} +.tiny-grid-icon__d-arrow-left:before { + content: ''; + position: absolute; + top: 0.24em; + left: 0.26em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-right-color: inherit; + border-top-color: inherit; + border-left-color: transparent; + border-bottom-color: transparent; +} +.tiny-grid-icon__d-arrow-left:after { + content: ''; + position: absolute; + top: 0.42em; + left: 0.1em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__d-arrow-right { + width: 1em; + height: 1em; + line-height: 1em; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.tiny-grid-icon__d-arrow-right:before { + content: ''; + position: absolute; + top: 0.24em; + left: 0.26em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-right-color: inherit; + border-top-color: inherit; + border-left-color: transparent; + border-bottom-color: transparent; +} +.tiny-grid-icon__d-arrow-right:after { + content: ''; + position: absolute; + top: 0.42em; + left: 0.1em; + width: 0.5em; + height: 0.5em; + border-width: 0.08em; + border-style: solid; + border-top-color: inherit; + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: inherit; +} +.tiny-grid-icon__funnel { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__funnel:before { + content: ''; + border-top-color: inherit; + position: absolute; + border-bottom-color: transparent; + top: 0.1em; + border-right-color: transparent; + left: 0; + border-left-color: transparent; + border-width: 0.5em; + border-style: solid; +} +.tiny-grid-icon__funnel:after { + content: ''; + position: absolute; + left: 0.4em; + top: 0.5em; + width: 0; + height: 0.4em; + border-width: 0 0.2em 0 0; + border-style: solid; + border-right-color: inherit; +} +.tiny-grid-icon__edit-outline { + width: 1em; + height: 1em; + line-height: 1em; + border-radius: 0.2em; + border-width: 0.1em; + border-style: solid; + border-color: inherit; +} +.tiny-grid-icon__edit-outline:before { + content: ''; + position: absolute; + top: -0.1em; + right: -0.1em; + width: 0.4em; + height: 0.4em; + background-color: #fff; +} +.tiny-grid-icon__edit-outline:after { + content: ''; + position: absolute; + left: 0.15em; + top: 0.12em; + width: 0.9em; + height: 0; + border-radius: 0.2em; + border-width: 0 0 0.15em 0; + border-style: solid; + border-color: inherit; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.tiny-grid-icon__more { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__more:before { + content: '...'; + position: absolute; + top: 0; + left: 0.1em; + line-height: 0.5em; + font-weight: 700; +} +.tiny-grid-icon__close { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__close:after, +.tiny-grid-icon__close:before { + content: ''; + position: absolute; + left: 0; + top: 0; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-style: solid; + border-width: 0; +} +.tiny-grid-icon__close:before { + width: 1em; + border-bottom-width: 0.1em; + top: 0.45em; +} +.tiny-grid-icon__close:after { + height: 1em; + border-right-width: 0.1em; + left: 0.45em; +} +.tiny-grid-icon__refresh { + width: 1em; + height: 1em; + line-height: 1em; + border-style: solid; + border-width: 0.1em; + border-right-color: transparent !important; + border-radius: 50%; + border-left-color: transparent !important; +} +.tiny-grid-icon__refresh:after { + right: 50%; + bottom: 0; + -webkit-transform: translateX(-50%) rotate(135deg); + transform: translateX(-50%) rotate(135deg); +} +.tiny-grid-icon__refresh:before { + left: 50%; + top: 0; + -webkit-transform: translateX(50%) rotate(-45deg); + transform: translateX(50%) rotate(-45deg); +} +.tiny-grid-icon__refresh:after, +.tiny-grid-icon__refresh:before { + content: ''; + position: absolute; + border-left-color: transparent; + width: 0; + border-right-color: transparent; + height: 0; + border-bottom-color: transparent; + border-width: 0.25em; + border-style: solid; +} +.tiny-grid-icon__refresh.roll { + -webkit-animation: rollCircle 1s infinite linear; + animation: rollCircle 1s infinite linear; +} +.tiny-grid-icon__question { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__question:before { + content: ''; + border-radius: 50%; + border-width: 0.5em; + border-style: solid; + border-color: inherit; + position: absolute; + top: 0; + left: 0; +} +.tiny-grid-icon__question:after { + position: absolute; + color: #fff; + color: var(--ti-grid-light-color, #fff); + font-size: 0.7em; + display: inline-block; + top: 0; + left: 0; + width: inherit; + height: inherit; + text-align: center; + font-weight: 700; + content: '?'; +} +.tiny-grid-icon__info { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__info:before { + content: ''; + border-radius: 50%; + border-width: 0.5em; + border-style: solid; + border-color: inherit; + position: absolute; + top: 0; + left: 0; +} +.tiny-grid-icon__info:after { + position: absolute; + color: #fff; + color: var(--ti-grid-light-color, #fff); + font-size: 0.7em; + display: inline-block; + top: 0; + left: 0; + width: inherit; + height: inherit; + text-align: center; + font-weight: 700; + content: '!'; + -webkit-transform: rotate(180deg) translateY(1px); + transform: rotate(180deg) translateY(1px); +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-grid-icon__info:after { + font-size: var(--ti-common-font-size-1); + } +} +@media screen and (-ms-ime-align: auto) { + .tiny-grid-icon__info:after { + font-size: var(--ti-common-font-size-1); + } +} +.tiny-grid-icon__warning { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__warning:before { + content: ''; + border-radius: 50%; + border-width: 0.5em; + border-style: solid; + border-color: inherit; + position: absolute; + top: 0; + left: 0; +} +.tiny-grid-icon__warning:after { + position: absolute; + color: #fff; + color: var(--ti-grid-light-color, #fff); + font-size: 0.7em; + display: inline-block; + top: 0; + left: 0; + width: inherit; + height: inherit; + text-align: center; + font-weight: 700; + content: '!'; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-grid-icon__warning:after { + font-size: var(--ti-common-font-size-1); + } +} +@media screen and (-ms-ime-align: auto) { + .tiny-grid-icon__warning:after { + font-size: var(--ti-common-font-size-1); + } +} +.tiny-grid-icon__success { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__success:before { + content: ''; + border-radius: 50%; + border-width: 0.5em; + border-style: solid; + border-color: inherit; + position: absolute; + top: 0; + left: 0; +} +.tiny-grid-icon__success:after { + content: ''; + position: absolute; + height: 0.55em; + width: 0.3em; + left: 0.35em; + top: 0.15em; + border-width: 0.1em; + border-style: solid; + border-color: #fff; + border-left: 0; + border-top: 0; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.tiny-grid-icon__error { + width: 1em; + height: 1em; + line-height: 1em; +} +.tiny-grid-icon__error:before { + content: ''; + border-radius: 50%; + border-width: 0.5em; + border-style: solid; + border-color: inherit; + position: absolute; + top: 0; + left: 0; +} +.tiny-grid-icon__error:after { + position: absolute; + color: #fff; + color: var(--ti-grid-light-color, #fff); + font-size: 0.7em; + display: inline-block; + top: 0; + left: 0; + width: inherit; + height: inherit; + text-align: center; + font-weight: 700; + content: '\2716'; +} +@-webkit-keyframes rollCircle { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes rollCircle { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.tiny-grid__animat .tiny-grid-filter__btn:after, +.tiny-grid__animat .tiny-grid-filter__btn:before, +.tiny-grid__animat .tiny-grid-sort__asc-btn:after, +.tiny-grid__animat .tiny-grid-sort__asc-btn:before, +.tiny-grid__animat .tiny-grid-sort__desc-btn:after, +.tiny-grid__animat .tiny-grid-sort__desc-btn:before { + -webkit-transition: border 0.1s ease-in-out; + transition: border 0.1s ease-in-out; +} +.tiny-grid__animat .tiny-grid__expand-icon { + -webkit-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; +} +.tiny-grid__animat .tiny-grid-input__wrapper .tiny-grid-input { + -webkit-transition: border 0.1s ease-in-out; + transition: border 0.1s ease-in-out; +} +.tiny-grid__animat .tiny-grid-tree__node-btn { + -webkit-transition: -webkit-transform 0.1s ease-in-out; + transition: -webkit-transform 0.1s ease-in-out; + transition: transform 0.1s ease-in-out; + transition: transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out; +} +.tiny-grid__animat .tiny-grid-checkbox > input:checked + span, +.tiny-grid__animat .tiny-grid-radio > input:checked + span { + -webkit-transition: background-color 0.1s ease-in-out; + transition: background-color 0.1s ease-in-out; +} +.tiny-grid { + position: relative; + overflow: hidden; + font-size: var(--ti-grid-font-size); + color: var(--ti-grid-font-color); + font-family: var(--ti-grid-font-family); + background-color: var(--ti-grid-light-color); +} +.tiny-grid.show__head .tiny-grid__fixed-left-wrapper .tiny-grid__body-wrapper:before, +.tiny-grid.show__head .tiny-grid__fixed-right-wrapper .tiny-grid__body-wrapper:before { + display: none; +} +.tiny-grid.show__foot.scroll__x .tiny-grid__body-wrapper { + overflow-x: auto; +} +.tiny-grid.show__foot.scroll__y .tiny-grid__body-wrapper.fixed-left__wrapper, +.tiny-grid.show__foot.scroll__y .tiny-grid__body-wrapper.fixed-right__wrapper { + padding-bottom: 12px; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-grid.show__foot.scroll__y .tiny-grid__body-wrapper.fixed-left__wrapper .tiny-grid__body, + .tiny-grid.show__foot.scroll__y .tiny-grid__body-wrapper.fixed-right__wrapper .tiny-grid__body { + padding-bottom: 17px; + } +} +.tiny-grid.column__highlight .tiny-grid-header__column:not(.col__index):hover { + background-color: var(--ti-grid-column-hover-background-color); +} +.tiny-grid.size__medium .tiny-grid-body__column:not(.col__ellipsis), +.tiny-grid.size__medium .tiny-grid-footer__column:not(.col__ellipsis), +.tiny-grid.size__medium .tiny-grid-header__column:not(.col__ellipsis) { + padding: var(--ti-table-td-padding, 2px 8px); +} +.tiny-grid.size__medium .tiny-grid-body__column, +.tiny-grid.size__medium .tiny-grid-footer__column { + height: var(--ti-grid-medium-column-height, 46px); +} +.tiny-grid.size__medium .tiny-grid-loading .tiny-grid__spinner { + width: 50px; + height: 50px; +} +.tiny-grid.size__medium .tiny-grid-default-input, +.tiny-grid.size__medium .tiny-grid-default-select, +.tiny-grid.size__medium .tiny-grid-default-textarea, +.tiny-grid.size__medium .tiny-grid-input__wrapper { + height: var(--ti-grid-medium-column-height, 46px); +} +.tiny-grid.size__medium .tiny-grid-header__column .tiny-grid-resizable { + height: var(--ti-grid-medium-column-height, 46px); +} +.tiny-grid.size__small { + font-size: var(--ti-grid-font-size); +} +.tiny-grid.size__small .tiny-grid-body__column:not(.col__ellipsis), +.tiny-grid.size__small .tiny-grid-footer__column:not(.col__ellipsis), +.tiny-grid.size__small .tiny-grid-header__column:not(.col__ellipsis) { + padding: var(--ti-table-td-padding, 2px 8px); +} +.tiny-grid.size__small .tiny-grid-body__column, +.tiny-grid.size__small .tiny-grid-footer__column { + height: var(--ti-grid-small-column-height, 30px); +} +.tiny-grid.size__small .tiny-grid-loading .tiny-grid__spinner { + width: 44px; + height: 44px; +} +.tiny-grid.size__small .tiny-grid-default-input, +.tiny-grid.size__small .tiny-grid-default-select, +.tiny-grid.size__small .tiny-grid-default-textarea, +.tiny-grid.size__small .tiny-grid-input__wrapper { + height: var(--ti-grid-small-column-height, 30px); +} +.tiny-grid.size__small .tiny-grid-header__column .tiny-grid-resizable { + height: var(--ti-grid-small-column-height, 30px); +} +.tiny-grid.size__mini { + font-size: var(--ti-grid-font-size); +} +.tiny-grid.size__mini .tiny-grid-body__column:not(.col__ellipsis), +.tiny-grid.size__mini .tiny-grid-footer__column:not(.col__ellipsis), +.tiny-grid.size__mini .tiny-grid-header__column:not(.col__ellipsis) { + padding: var(--ti-table-td-padding, 2px 8px); +} +.tiny-grid.size__mini .tiny-grid-body__column, +.tiny-grid.size__mini .tiny-grid-footer__column { + height: var(--ti-grid-mini-column-height, 26px); +} +.tiny-grid.size__mini .tiny-grid-loading .tiny-grid__spinner { + width: 38px; + height: 38px; +} +.tiny-grid.size__mini .tiny-grid-default-input, +.tiny-grid.size__mini .tiny-grid-default-select, +.tiny-grid.size__mini .tiny-grid-default-textarea, +.tiny-grid.size__mini .tiny-grid-input__wrapper { + height: var(--ti-grid-mini-column-height, 26px); +} +.tiny-grid.size__mini .tiny-grid-header__column .tiny-grid-resizable { + height: var(--ti-grid-mini-column-height, 26px); +} +.tiny-grid .fixed__hidden { + visibility: hidden; +} +.tiny-grid table { + border-spacing: 0; + border-collapse: separate; + table-layout: fixed; +} +.tiny-grid.tiny-grid__stripe .tiny-grid-body__row:not(.row__hover):nth-child(2n) { + background-color: var(--ti-grid-row-striped-background-color); +} +.tiny-grid.tiny-grid__stripe .tiny-grid-body__row.row__selected:not(.row__hover):nth-child(2n) { + background-color: rgba(47, 143, 232, 0.1); +} +.tiny-grid.tiny-grid__stripe .tiny-grid-body__row.row__selected:not(.row__hover):nth-child(2n + 1) { + background-color: rgba(47, 143, 232, 0.15); +} +.tiny-grid.tiny-grid__stripe.mark-insert .tiny-grid-body__row.row__new { + background-color: #f2f5fc; +} +.tiny-grid.tiny-grid__border:after, +.tiny-grid.tiny-grid__border:before { + content: ''; + position: absolute; + left: 0; + width: 100%; + height: 0; + z-index: 1; +} +.tiny-grid.tiny-grid__border:before { + top: 0; + border-top: 1px solid var(--ti-grid-border-color); +} +.tiny-grid.tiny-grid__border:after { + bottom: 0; + border-bottom: 1px solid var(--ti-grid-border-color); +} +.tiny-grid.tiny-grid__border .tiny-grid__header { + border: 0; + border-spacing: 0; + border-collapse: separate; +} +.tiny-grid.tiny-grid__border .tiny-grid-body__column, +.tiny-grid.tiny-grid__border .tiny-grid-footer__column, +.tiny-grid.tiny-grid__border .tiny-grid-header__column { + background-image: -webkit-gradient( + linear, + right top, + left top, + from(var(--ti-grid-border-color)), + to(var(--ti-grid-border-color)) + ), + -webkit-gradient(linear, left top, left bottom, from(var(--ti-grid-border-color)), to(var(--ti-grid-border-color))); + background-image: linear-gradient(-90deg, var(--ti-grid-border-color), var(--ti-grid-border-color)), + linear-gradient(-180deg, var(--ti-grid-border-color), var(--ti-grid-border-color)); + background-repeat: no-repeat; + background-size: 1px 100%, 100% 1px; + background-position: 100% 0, 100% 100%; + border: none; +} +.tiny-grid.tiny-grid__border .tiny-grid__fixed-left-wrapper .tiny-grid-body__column { + border-right-color: var(--ti-grid-border-color); +} +.tiny-grid.tiny-grid__border .tiny-grid__body-wrapper, +.tiny-grid.tiny-grid__border .tiny-grid__fixed-left-body-wrapper, +.tiny-grid.tiny-grid__border .tiny-grid__fixed-right-body-wrapper { + border-bottom: none; +} +.tiny-grid.tiny-grid__border .tiny-grid__fixed-left-wrapper::before, +.tiny-grid.tiny-grid__border .tiny-grid__fixed-right-wrapper::before { + border-top-width: 1px; +} +.tiny-grid.tiny-grid__border .tiny-grid__border-line:after, +.tiny-grid.tiny-grid__border .tiny-grid__border-line:before { + content: ''; + position: absolute; + top: 0; + width: 0; + height: 100%; + z-index: 1; +} +.tiny-grid.tiny-grid__border .tiny-grid__border-line:before { + left: 0; + border-left: 1px solid var(--ti-grid-border-color); +} +.tiny-grid.tiny-grid__border .tiny-grid__border-line:after { + right: 0; + border-right: 1px solid var(--ti-grid-border-color); +} +.tiny-grid.tiny-grid__checked { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tiny-grid.tiny-grid__checked .tiny-grid-body__column.col__index, +.tiny-grid.tiny-grid__checked .tiny-grid-header__column.col__index { + text-align: center; + cursor: default; +} +.tiny-grid.tiny-grid__checked .tiny-grid-header__column.col__index .tiny-grid-cell { + visibility: hidden; +} +.tiny-grid.tiny-grid__checked .tiny-grid-body__column.col__index { + background-color: var(--ti-grid-header-background-color); +} +.tiny-grid.tiny-grid__checked .tiny-grid-body__column.col__index.col__index-checked { + background-color: #dcdcdc; +} +.tiny-grid .tiny-grid__footer-wrapper, +.tiny-grid .tiny-grid__header-wrapper { + overflow-x: hidden; + overflow-y: hidden; +} +.tiny-grid .tiny-grid__footer-wrapper { + border: 1px solid var(--ti-grid-border-color); + border-bottom: none; + overflow: hidden !important; +} +.tiny-grid .tiny-grid__footer-wrapper .tiny-grid-footer__row .tiny-grid-cell.cell__summary { + font-weight: 700; + text-align: right; +} +.tiny-grid .tiny-grid__fixed-left-wrapper, +.tiny-grid .tiny-grid__fixed-right-wrapper { + width: 100%; + position: absolute; + top: 0; + z-index: 1; + overflow: hidden; + background-color: var(--ti-grid-light-color); +} +.tiny-grid .tiny-grid__fixed-left-wrapper:before, +.tiny-grid .tiny-grid__fixed-right-wrapper:before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 0; + border-top: 0 solid var(--ti-grid-border-color); + z-index: 1; +} +.tiny-grid .tiny-grid__fixed-left-wrapper .tiny-grid__body-wrapper, +.tiny-grid .tiny-grid__fixed-right-wrapper .tiny-grid__body-wrapper { + overflow-x: hidden; + border-bottom: none; +} +.tiny-grid .tiny-grid__fixed-left-wrapper { + left: 0; + width: 200px; + border-right: 0 solid var(--ti-grid-border-color); +} +.tiny-grid .tiny-grid__fixed-left-wrapper.scrolling__middle { + -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.12); + box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.12); +} +.tiny-grid .tiny-grid__fixed-right-wrapper { + right: 0; +} +.tiny-grid .tiny-grid__fixed-right-wrapper.scrolling__middle { + -webkit-box-shadow: -2px 2px 6px rgba(0, 0, 0, 0.12); + box-shadow: -2px 2px 6px rgba(0, 0, 0, 0.12); +} +.tiny-grid .tiny-grid__body-wrapper, +.tiny-grid .tiny-grid__footer-wrapper, +.tiny-grid .tiny-grid__header-wrapper { + position: relative; +} +.tiny-grid .tiny-grid__body-wrapper.fixed-left__wrapper, +.tiny-grid .tiny-grid__body-wrapper.fixed-right__wrapper, +.tiny-grid .tiny-grid__footer-wrapper.fixed-left__wrapper, +.tiny-grid .tiny-grid__footer-wrapper.fixed-right__wrapper, +.tiny-grid .tiny-grid__header-wrapper.fixed-left__wrapper, +.tiny-grid .tiny-grid__header-wrapper.fixed-right__wrapper { + position: absolute; + top: 0; +} +.tiny-grid .tiny-grid__body-wrapper.fixed-left__wrapper, +.tiny-grid .tiny-grid__footer-wrapper.fixed-left__wrapper, +.tiny-grid .tiny-grid__header-wrapper.fixed-left__wrapper { + left: 0; +} +.tiny-grid .tiny-grid__body-wrapper.fixed-right__wrapper, +.tiny-grid .tiny-grid__footer-wrapper.fixed-right__wrapper, +.tiny-grid .tiny-grid__header-wrapper.fixed-right__wrapper { + right: 0; + overflow-y: auto; +} +.tiny-grid .tiny-grid__header-wrapper.fixed-right__wrapper { + -ms-overflow-style: none; +} +.tiny-grid.tiny-grid-cell__resize * { + cursor: col-resize; +} +.tiny-grid .tiny-grid-body__row { + background-color: var(--ti-grid-row-odd-background-color); +} +.tiny-grid .tiny-grid-body__row.row__hover { + background-color: var(--ti-grid-row-hover-background-color); +} +.tiny-grid .tiny-grid-body__row.row__current { + background-color: var(--ti-grid-row-hover-background-color); +} +.tiny-grid .tiny-grid-body__column, +.tiny-grid .tiny-grid-footer__column, +.tiny-grid .tiny-grid-header__column { + text-align: left; +} +.tiny-grid .tiny-grid-body__column:not(.col__ellipsis), +.tiny-grid .tiny-grid-footer__column:not(.col__ellipsis), +.tiny-grid .tiny-grid-header__column:not(.col__ellipsis) { + padding: var(--ti-table-td-padding, 2px 8px); +} +.tiny-grid .tiny-grid-body__column.col__current, +.tiny-grid .tiny-grid-footer__column.col__current, +.tiny-grid .tiny-grid-header__column.col__current { + background-color: var(--ti-grid-column-current-background-color); +} +.tiny-grid .tiny-grid-body__column.col__center, +.tiny-grid .tiny-grid-footer__column.col__center, +.tiny-grid .tiny-grid-header__column.col__center { + text-align: center; +} +.tiny-grid .tiny-grid-body__column.col__right, +.tiny-grid .tiny-grid-footer__column.col__right, +.tiny-grid .tiny-grid-header__column.col__right { + text-align: right; +} +.tiny-grid .tiny-grid-body__column.col__ellipsis:not(.col__actived) .tiny-grid-cell, +.tiny-grid .tiny-grid-footer__column.col__ellipsis:not(.col__actived) .tiny-grid-cell, +.tiny-grid .tiny-grid-header__column.col__ellipsis:not(.col__actived) .tiny-grid-cell { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding-left: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-grid .tiny-grid-body__column.col__ellipsis:not(.col__actived) .tiny-grid-cell > .tiny-grid-checkbox, +.tiny-grid .tiny-grid-footer__column.col__ellipsis:not(.col__actived) .tiny-grid-cell > .tiny-grid-checkbox, +.tiny-grid .tiny-grid-header__column.col__ellipsis:not(.col__actived) .tiny-grid-cell > .tiny-grid-checkbox { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding-left: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-left: 0; +} +.tiny-grid .tiny-grid-header__column { + height: var(--ti-grid-header-column-height); +} +.tiny-grid .tiny-grid-body__column, +.tiny-grid .tiny-grid-footer__column { + height: var(--ti-grid-default-column-height, 42px); + border-bottom: 1px solid var(--ti-grid-border-color); +} +.tiny-grid .tiny-grid-body__row .tiny-grid-body__column.hideTypeClass .tiny-grid-cell, +.tiny-grid .tiny-grid-header__row .tiny-grid-header__column.hideTypeClass .tiny-grid-cell { + padding: 0; +} +.tiny-grid .tiny-grid-cell { + line-height: 120%; + white-space: normal; + -ms-word-break: break-all; + word-break: break-word; +} +.tiny-grid .tiny-grid-cell .tiny-grid-checkbox { + vertical-align: bottom; +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-boole, +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate { + width: 100%; + position: relative; +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-boole .icon-yes { + fill: var(--ti-grid-success-color); +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-boole .icon-close { + fill: var(--ti-grid-error-color); +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate .tiny-grid__rate-chart { + opacity: 0.6; + background-color: var(--ti-grid-success-color); + height: 30px; + line-height: 30px; +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate .tiny-grid__rate-chart.tiny-grid__chart-completed { + background-color: var(--ti-grid-success-color); +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate .tiny-grid__rate-chart.tiny-grid__chart-danger { + background-color: var(--ti-grid-error-color); +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate .tiny-grid__rate-chart.tiny-grid__chart-warning { + background-color: var(--ti-grid-warning-color); +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate .tiny-grid__rate-chart.tiny-grid__chart-normal { + background-color: var(--ti-grid-primary-color); +} +.tiny-grid .tiny-grid-cell .tiny-grid__data-rate .tiny-grid__rate-text { + position: absolute; + left: 8px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +.tiny-grid .tiny-grid-body__x-space { + width: 100%; + height: 1px; + margin-bottom: -1px; +} +.tiny-grid .tiny-grid-body__y-space { + width: 0; + float: left; +} +.tiny-grid .tiny-grid-sort-wrapper { + position: absolute; + right: 4px; + top: 0; + bottom: 0; + margin: auto; + text-align: center; + width: 20px; + height: 28px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-grid .tiny-grid-sort-wrapper { + top: 4px; + margin: 0; + } +} +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-icon__caret-top:before { + bottom: 0.1em; +} +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__asc-btn, +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__desc-btn { + height: 16px; + line-height: 16px; + display: block; + font-size: var(--ti-grid-header-icon-font-size); + fill: var(--ti-grid-column-icon-border-color); + cursor: pointer; +} +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__asc-btn:hover, +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__desc-btn:hover { + fill: var(--ti-grid-font-color); +} +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__asc-btn.sort__active, +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__desc-btn.sort__active { + fill: var(--ti-grid-primary-color); +} +.tiny-grid .tiny-grid-sort-wrapper .tiny-grid-sort__desc-btn { + margin-top: -2px; +} +.tiny-grid .tiny-grid__resizable-bar { + display: none; + position: absolute; + top: 0; + left: 0; + width: 1px; + height: 100%; + z-index: 4; +} +.tiny-grid .tiny-grid__resizable-bar:before { + content: ''; + display: block; + height: 100%; + background-color: #d9dddf; +} +.tiny-grid .tiny-grid-tree__indent { + display: inline-block; +} +.tiny-grid .tiny-grid-tree-wrapper { + display: inline-block; + vertical-align: bottom; + width: 18px; + cursor: pointer; +} +.tiny-grid .tiny-grid-tree-wrapper.is__active .tiny-grid-tree__node-btn { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} +.tiny-grid .tiny-grid-tree-wrapper .tiny-grid-tree__node-btn { + font-size: var(--ti-grid-font-size); + color: #939599; +} +.tiny-grid .tiny-grid-tree-wrapper .tiny-grid-tree__node-btn:hover { + color: var(--ti-grid-font-color); +} +.tiny-grid .tiny-grid__expanded { + display: inline-block; + text-align: center; + cursor: pointer; +} +.tiny-grid .tiny-grid__expanded .tiny-grid__expand-icon { + display: inline-block; + width: 8px; + height: 8px; + border: 1px solid #666; + vertical-align: middle; + border-width: 1px 1px 0 0; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + background-color: transparent; +} +.tiny-grid .tiny-grid__expanded.expand__active .tiny-grid__expand-icon { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); +} +.tiny-grid .tiny-grid-body__expanded-column { + border-bottom: 1px solid var(--ti-grid-border-color); +} +.tiny-grid .tiny-grid-body__expanded-cell { + padding: 20px; +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column { + height: 43px; + line-height: inherit; +} +.tiny-grid.tiny-grid-editable.size__medium .tiny-grid-body__column { + height: var(--ti-grid-medium-column-height, 46px); +} +.tiny-grid.tiny-grid-editable.size__small .tiny-grid-body__column { + height: var(--ti-grid-small-column-height, 30px); +} +.tiny-grid.tiny-grid-editable.size__mini .tiny-grid-body__column { + height: var(--ti-grid-mini-column-height, 26px); +} +.tiny-grid .tiny-grid-body__column.col__ellipsis, +.tiny-grid .tiny-grid-footer__column.col__ellipsis, +.tiny-grid .tiny-grid-header__column.col__ellipsis { + line-height: inherit; +} +.tiny-grid .tiny-grid-body__column.col__ellipsis .tiny-grid-cell__ellipsis, +.tiny-grid .tiny-grid-body__column.col__ellipsis .tiny-grid-cell__title, +.tiny-grid .tiny-grid-body__column.col__ellipsis .tiny-grid-cell__tooltip, +.tiny-grid .tiny-grid-footer__column.col__ellipsis .tiny-grid-cell__ellipsis, +.tiny-grid .tiny-grid-footer__column.col__ellipsis .tiny-grid-cell__title, +.tiny-grid .tiny-grid-footer__column.col__ellipsis .tiny-grid-cell__tooltip, +.tiny-grid .tiny-grid-header__column.col__ellipsis .tiny-grid-cell__ellipsis, +.tiny-grid .tiny-grid-header__column.col__ellipsis .tiny-grid-cell__title, +.tiny-grid .tiny-grid-header__column.col__ellipsis .tiny-grid-cell__tooltip { + padding: 0 8px; +} +.tiny-grid.size__medium .tiny-grid-body__column.col__ellipsis, +.tiny-grid.size__medium .tiny-grid-footer__column.col__ellipsis, +.tiny-grid.size__medium .tiny-grid-header__column.col__ellipsis { + height: var(--ti-grid-medium-column-height, 46px); +} +.tiny-grid.size__small .tiny-grid-body__column.col__ellipsis, +.tiny-grid.size__small .tiny-grid-footer__column.col__ellipsis, +.tiny-grid.size__small .tiny-grid-header__column.col__ellipsis { + height: var(--ti-grid-small-column-height, 30px); +} +.tiny-grid.size__mini .tiny-grid-body__column.col__ellipsis, +.tiny-grid.size__mini .tiny-grid-footer__column.col__ellipsis, +.tiny-grid.size__mini .tiny-grid-header__column.col__ellipsis { + height: var(--ti-grid-mini-column-height, 26px); +} +.tiny-grid.is__loading .tiny-grid__empty-block { + visibility: hidden; +} +.tiny-grid .tiny-grid__empty-block { + display: none; + opacity: 0; + height: 100%; + min-height: 60px; + padding: 60px 0; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + text-align: center; +} +.tiny-grid .tiny-grid__empty-block.is__visible { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + opacity: 1; +} +.tiny-grid .tiny-grid__empty-block.is__visible.is__center { + opacity: 0; +} +.tiny-grid .empty-center-block { + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; + position: absolute; + width: 100%; + height: calc(100% - 60px); +} +.tiny-grid .empty-center-block .tiny-grid__empty-text { + width: 100%; +} +.tiny-grid .tiny-grid__empty-img { + width: 100%; + height: 100px; + margin: 0; + background: var(--ti-table-nodata-td-bg-img-url) 50% no-repeat; +} +.tiny-grid .tiny-grid__empty-text { + display: block; + margin-top: 8px; + width: 50%; +} +.tiny-grid .tiny-grid-body__column.col__selected:not(.col__checked) { + -webkit-box-shadow: inset 0 0 0 2px var(--ti-grid-primary-color); + box-shadow: inset 0 0 0 2px var(--ti-grid-primary-color); +} +.tiny-grid .tiny-grid-body__column.col__actived, +.tiny-grid .tiny-grid-body__column.col__dirty, +.tiny-grid .tiny-grid-body__column.col__selected { + position: relative; +} +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-grid-cell__valid { + width: 320px; + position: absolute; + bottom: calc(100% + 4px); + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + text-align: center; + pointer-events: none; + z-index: 9; +} +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-grid-cell__valid .tiny-grid-cell__valid-msg { + display: inline-block; + border-radius: 4px; + padding: 8px 12px; + color: var(--ti-grid-light-color); + background-color: var(--ti-grid-error-color); + pointer-events: auto; +} +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-grid-default-input, +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-grid-default-select, +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-grid-default-textarea { + border-color: var(--ti-grid-error-color); +} +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-grid-input__wrapper > .tiny-grid-input { + border-color: var(--ti-grid-error-color); +} +.tiny-grid .tiny-grid-body__column.col__valid-error .tiny-input__inner { + border-color: var(--ti-grid-error-color); +} +.tiny-grid .tiny-grid-body__row:first-child .tiny-grid-cell__valid { + bottom: auto; + top: calc(100% + 4px); +} +.tiny-grid .tiny-grid__body-wrapper.body__wrapper.is__scrollload { + overflow-y: hidden; + position: static; +} +.tiny-grid .is__scrollload .tiny-grid-body__y-space { + position: absolute; + right: 0; + width: 12px; + overflow-y: scroll; +} +.tiny-grid.tiny-grid-editable.tiny-grid-cell__highlight .tiny-grid-body__column.col__actived { + -webkit-box-shadow: inset 0 0 0 2px var(--ti-grid-primary-color); + box-shadow: inset 0 0 0 2px var(--ti-grid-primary-color); +} +.tiny-grid.tiny-grid-editable.tiny-grid-cell__highlight .tiny-grid-body__column.col__actived.col__valid-error { + -webkit-box-shadow: inset 0 0 0 2px var(--ti-grid-error-color); + box-shadow: inset 0 0 0 2px var(--ti-grid-error-color); +} +.tiny-grid.tiny-grid-editable.tiny-grid-cell__highlight + .tiny-grid-body__column.col__actived + .tiny-grid-cell + .tiny-grid-default-input, +.tiny-grid.tiny-grid-editable.tiny-grid-cell__highlight + .tiny-grid-body__column.col__actived + .tiny-grid-cell + .tiny-grid-default-textarea { + border: 0; + padding: 0; +} +.tiny-grid.tiny-grid-editable.tiny-grid-cell__highlight + .tiny-grid-body__column.col__actived + .tiny-grid-cell + .tiny-grid-input__wrapper + .tiny-grid-input, +.tiny-grid.tiny-grid-editable.tiny-grid-cell__highlight + .tiny-grid-body__column.col__actived + .tiny-grid-cell + .tiny-grid-input__wrapper + .tiny-grid-textarea { + border: 0; + padding: 0; +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column { + padding: var(--ti-table-td-padding, 2px 8px); +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column.col__actived { + padding: var(--ti-table-td-padding, 2px 8px); +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column.col__ellipsis { + padding: 0; +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column.col__ellipsis.col__actived { + padding: 0; +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column.col__dirty:before { + content: ''; + top: -5px; + left: -5px; + position: absolute; + border-width: 5px; + border-style: solid; + border-color: transparent var(--ti-grid-error-color) transparent transparent; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.tiny-grid.tiny-grid-editable .tiny-grid-body__column.col__dirty.col__valid-success:before { + border-color: transparent var(--ti-grid-success-color) transparent transparent; +} +.tiny-grid.tiny-grid-editable .tiny-grid__body-wrapper .tiny-grid-editor .tiny-select-dropdown { + left: 0 !important; +} +.tiny-grid.tiny-fullscreen-full { + z-index: 1000; + position: fixed; + overflow: auto; + background: var(--ti-grid-light-color); + width: 100%; + height: 100%; + top: 0; + left: 0; + margin: 0; + padding: 8px; +} +.tiny-grid .tiny-grid-default-input, +.tiny-grid .tiny-grid-default-select, +.tiny-grid .tiny-grid-default-textarea, +.tiny-grid__filter-wrapper .tiny-grid-default-input, +.tiny-grid__filter-wrapper .tiny-grid-default-select, +.tiny-grid__filter-wrapper .tiny-grid-default-textarea { + outline: 0; + padding: 0 8px; + height: 30px; + width: 100%; + color: var(--ti-grid-font-color); + border-radius: 2px; + border: 1px solid var(--ti-grid-border-color); +} +.tiny-grid .tiny-grid-default-input:focus, +.tiny-grid .tiny-grid-default-select:focus, +.tiny-grid .tiny-grid-default-textarea:focus, +.tiny-grid__filter-wrapper .tiny-grid-default-input:focus, +.tiny-grid__filter-wrapper .tiny-grid-default-select:focus, +.tiny-grid__filter-wrapper .tiny-grid-default-textarea:focus { + border: 1px solid var(--ti-grid-primary-color); +} +.tiny-grid .tiny-grid-editor, +.tiny-grid__filter-wrapper .tiny-grid-editor { + width: 100%; + height: 30px; + line-height: 30px; + color: var(--ti-grid-font-color); +} +.tiny-grid .tiny-grid-editor .tiny-input, +.tiny-grid__filter-wrapper .tiny-grid-editor .tiny-input { + width: 100%; +} +.tiny-grid .tiny-grid-editor .tiny-select, +.tiny-grid__filter-wrapper .tiny-grid-editor .tiny-select { + z-index: 1; +} +.tiny-grid .tiny-grid-default-textarea, +.tiny-grid__filter-wrapper .tiny-grid-default-textarea { + resize: none; + vertical-align: middle; +} +.tiny-grid .tiny-grid-input__wrapper, +.tiny-grid__filter-wrapper .tiny-grid-input__wrapper { + width: 100%; + display: block; +} +.tiny-grid .tiny-grid-input__wrapper .tiny-grid-input, +.tiny-grid .tiny-grid-input__wrapper .tiny-grid-textarea, +.tiny-grid__filter-wrapper .tiny-grid-input__wrapper .tiny-grid-input, +.tiny-grid__filter-wrapper .tiny-grid-input__wrapper .tiny-grid-textarea { + padding: 0 2px; +} +.tiny-grid .tiny-grid-input__wrapper .tiny-grid-textarea, +.tiny-grid__filter-wrapper .tiny-grid-input__wrapper .tiny-grid-textarea { + resize: none; +} +.tiny-grid__filter-wrapper .tiny-grid-default-input, +.tiny-grid__filter-wrapper .tiny-grid-default-textarea { + padding: 0 10px; +} +.tiny-grid-hidden-column { + display: none; +} +.tiny-grid .tiny-pager, +.tiny-grid + .tiny-pager { + padding-top: 24px; +} +.tiny-grid .tiny-grid__header th.col__gutter { + width: 0; +} +.tiny-grid .tiny-grid__header .tiny-grid-header__column.col__ellipsis.is__sortable .tiny-grid-cell { + padding-right: 28px; +} +.tiny-grid__header-wrapper { + background-color: var(--ti-grid-header-background-color); +} +.tiny-grid__header-wrapper .tiny-grid__repair { + position: absolute; + left: 0; + bottom: 0; + height: 0; + border-bottom: 1px solid var(--ti-grid-border-color); +} +.tiny-grid-header__column { + position: relative; + font-size: var(--ti-grid-font-size); + color: var(--ti-grid-font-color); +} +.tiny-grid-header__column.is__sortable .tiny-grid-cell { + padding-right: 20px; +} +.tiny-grid-header__column.is__editable .tiny-grid-cell { + padding-left: 20px; +} +.tiny-grid-header__column.col__title-checked { + background-color: #dcdcdc; +} +.tiny-grid-header__column.col__title-checked .tiny-grid-edit-icon.tiny-grid-icon__edit-outline:before { + background-color: #dcdcdc; +} +.tiny-grid-header__column.col__ellipsis .tiny-grid-edit-icon { + position: static; + -webkit-transform: translateY(0); + transform: translateY(0); +} +.tiny-grid-header__column.col__ellipsis.is__editable .tiny-grid-required-icon { + margin-left: 20px; +} +.tiny-grid-header__column.col__ellipsis.is__editable .tiny-grid-required-icon + .tiny-grid-edit-icon { + position: absolute; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +.tiny-grid-header__column .tiny-grid-required-icon { + display: inline-block; + color: var(--ti-grid-error-color); + line-height: 14px; + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-header__column .tiny-grid-required-icon:before { + content: '*'; + width: 10px; + height: 10px; + display: block; +} +.tiny-grid-header__column .tiny-grid-edit-icon { + position: absolute; + left: 8px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + text-align: center; + font-size: var(--ti-common-font-size-2); + margin-right: 4px; + fill: var(--ti-grid-column-icon-border-color); +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-grid-header__column .tiny-grid-edit-icon { + top: 18px; + } +} +.tiny-grid-header__column .tiny-grid-resizable, +.tiny-grid-header__column .tiny-grid-thead-partition { + position: absolute; + right: 0; + -webkit-transform: translateX(50%); + transform: translateX(50%); + bottom: 0; + top: 0; + margin: auto; + width: 14px; + height: 28px; + text-align: center; + z-index: 1; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-grid-header__column .tiny-grid-resizable, + .tiny-grid-header__column .tiny-grid-thead-partition { + margin: 0; + } +} +.tiny-grid-header__column .tiny-grid-resizable.is__line:after, +.tiny-grid-header__column .tiny-grid-resizable.is__line:before, +.tiny-grid-header__column .tiny-grid-thead-partition.is__line:after, +.tiny-grid-header__column .tiny-grid-thead-partition.is__line:before { + content: ''; + display: inline-block; + vertical-align: middle; +} +.tiny-grid-header__column .tiny-grid-resizable.is__line:before, +.tiny-grid-header__column .tiny-grid-thead-partition.is__line:before { + width: 1px; + height: 100%; + background-color: #fff; +} +.tiny-grid-header__column .tiny-grid-resizable.is__line:after, +.tiny-grid-header__column .tiny-grid-thead-partition.is__line:after { + width: 0; + height: 100%; +} +.tiny-grid-header__column .tiny-grid-resizable.is__line:hover:before, +.tiny-grid-header__column .tiny-grid-thead-partition.is__line:hover:before { + background-color: var(--ti-grid-icon-fill-active-hover); +} +.tiny-grid-header__column .tiny-grid-resizable { + cursor: col-resize; +} +.tiny-grid-header__column .tiny-grid-checkbox > input:not(:checked) + .tiny-grid-checkbox__icon:hover { + border-color: var(--ti-grid-border-color); +} +.tiny-grid-header__column .tiny-grid-checkbox.is__indeterminate > input + .tiny-grid-checkbox__icon:hover { + border-color: var(--ti-grid-primary-color); +} +.tiny-grid__fixed-left-wrapper .tiny-grid-header__column .tiny-grid-resizable { + right: 1px; +} +.tiny-grid__fixed-right-wrapper .tiny-grid-header__column .tiny-grid-resizable { + right: auto; + left: 0; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} +.tiny-grid__header .tiny-grid-cell__header-suffix { + position: relative; + min-height: 16px; +} +.tiny-grid__header .tiny-grid-cell__header-suffix .suffix-icon-1 { + position: absolute; + right: 12px; +} +.tiny-grid__header .tiny-grid-cell__header-suffix .suffix-icon-0 { + position: absolute; + right: 0; +} +.tiny-grid__header + .col__ellipsis.is__editable.is__sortable.is__filter + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip { + padding-right: 28px; +} +.tiny-grid__header + .col__ellipsis.is__editable.is__filter:not(.is__sortable) + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip, +.tiny-grid__header + .col__ellipsis.is__editable.is__sortable:not(.is__filter) + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip { + padding-right: 14px; +} +.tiny-grid__header + .col__ellipsis:not(.is__sortable):not(.is__filter) + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip { + padding-right: 8px; +} +.tiny-grid__header + .col__ellipsis.is__sortable.is__filter:not(.is__editable) + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip { + padding-right: 26px; +} +.tiny-grid__header + .col__ellipsis.is__filter:not(.is__sortable):not(.is__editable) + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip, +.tiny-grid__header + .col__ellipsis.is__sortable:not(.is__filter):not(.is__editable) + .tiny-grid-cell__header-suffix.tiny-grid-cell__tooltip { + padding-right: 12px; +} +.tiny-grid__body-wrapper, +.tiny-grid__fixed-left-body-wrapper, +.tiny-grid__fixed-right-body-wrapper { + overflow-y: auto; + overflow-x: auto; +} +.tiny-grid__borders .tiny-grid-border-bottom, +.tiny-grid__borders .tiny-grid-border-left, +.tiny-grid__borders .tiny-grid-border-right, +.tiny-grid__borders .tiny-grid-border-top { + position: absolute; + background-color: var(--ti-grid-primary-color); +} +.tiny-grid__borders .tiny-grid-checked-borders .tiny-grid-border-bottom, +.tiny-grid__borders .tiny-grid-checked-borders .tiny-grid-border-top { + height: var(--ti-grid-column-checked-border-width); +} +.tiny-grid__borders .tiny-grid-checked-borders .tiny-grid-border-left, +.tiny-grid__borders .tiny-grid-checked-borders .tiny-grid-border-right { + width: var(--ti-grid-column-checked-border-width); +} +.tiny-grid__borders .tiny-grid-copyed-borders .tiny-grid-border-bottom, +.tiny-grid__borders .tiny-grid-copyed-borders .tiny-grid-border-top { + height: calc(var(--ti-grid-column-checked-border-width) + 1px); +} +.tiny-grid__borders .tiny-grid-copyed-borders .tiny-grid-border-left, +.tiny-grid__borders .tiny-grid-copyed-borders .tiny-grid-border-right { + width: calc(var(--ti-grid-column-checked-border-width) + 1px); +} +.tiny-grid__borders .tiny-grid-copyed-borders > span { + background: repeating-linear-gradient( + 135deg, + transparent, + transparent 3px, + var(--ti-grid-primary-color) 3px, + var(--ti-grid-primary-color) 9px + ); + -webkit-animation: shine 1s infinite linear; + animation: shine 1s infinite linear; +} +.tiny-grid-body__row .tiny-grid-body__column.col__checked { + position: relative; + background-color: var(--ti-grid-column-current-background-color); + border-right-color: var(--ti-grid-column-checked-border-color); + border-bottom-color: var(--ti-grid-column-checked-border-color); +} +.tiny-grid-body__row .tiny-grid-body__column.col__selected { + background-color: var(--ti-grid-light-color); +} +.tiny-grid-body__row .tiny-grid-body__column .tiny-numeric { + width: 100%; +} +@-webkit-keyframes shine { + 0% { + background-position: -1px -1px; + } + 100% { + background-position: -12px -12px; + } +} +@keyframes shine { + 0% { + background-position: -1px -1px; + } + 100% { + background-position: -12px -12px; + } +} +.tiny-grid__footer-wrapper { + margin-top: -1px; + background-color: var(--ti-grid-light-color); +} +.tiny-grid__footer-wrapper.body__wrapper { + overflow-x: auto; +} +.tiny-grid-filter-wrapper { + padding: 0 4px; + vertical-align: middle; + display: inline-block; + line-height: 15px; +} +.tiny-grid-filter-wrapper.is__active .tiny-grid-filter__btn { + fill: var(--ti-grid-primary-hover-color); +} +.tiny-grid-filter-wrapper .tiny-grid-filter__btn { + font-size: var(--ti-common-font-size-base); + fill: #999; + cursor: pointer; + vertical-align: middle; +} +.tiny-grid-filter-wrapper .tiny-grid-filter__btn:hover { + fill: var(--ti-grid-primary-hover-color); +} +.filter__active .tiny-grid-filter-wrapper .tiny-grid-filter__btn { + fill: var(--ti-grid-primary-color); +} +.tiny-grid__filter-wrapper { + display: none; + position: absolute; + min-width: 270px; + border-radius: var(--ti-grid-border-radius); + border: 1px solid var(--ti-grid-popup-border-color); + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.2); + font-size: var(--ti-common-font-size-base); + z-index: 4000; +} +.tiny-grid__filter-wrapper.filter__active { + display: block; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body { + padding: 0; + list-style-type: none; + background-color: var(--ti-grid-light-color); + overflow-x: hidden; + overflow-y: auto; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel { + margin: 0; + width: 100%; + padding: 12px 8px 8px; + border-bottom: solid 1px var(--ti-grid-border-color); +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel.filter-panel__default { + padding: 8px 20px 4px; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel.filter-panel__clear, +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel.filter-panel__default { + padding-left: 0; + padding-right: 0; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__clear + .tiny-grid__filter-option, +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__default + .tiny-grid__filter-option { + cursor: pointer; + padding-left: 16px; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__clear + .tiny-grid__filter-option:hover, +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__default + .tiny-grid__filter-option:hover { + background-color: var(--ti-grid-primary-hover-color); +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__clear + .tiny-grid__filter-option:hover + a, +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__default + .tiny-grid__filter-option:hover + a { + color: var(--ti-grid-light-color); +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel.filter-panel__enum { + padding-top: 4px; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options { + max-height: 170px; + overflow: auto; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options + .tiny-grid__filter-empty { + text-align: center; + line-height: 30px; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options + .tiny-grid__filter-option { + height: 28px; + line-height: 28px; + padding: 0 8px; + max-width: 240px; + width: auto; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + cursor: pointer; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options + .tiny-grid__filter-option.selected { + background-color: var(--ti-grid-header-background-color); +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options + .tiny-grid__filter-option + svg { + font-size: var(--ti-common-font-size-2); + fill: var(--ti-grid-normal-color); + margin-right: 8px; + outline: 0; + vertical-align: middle; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options + .tiny-grid__filter-option + svg:hover { + fill: var(--ti-grid-primary-hover-color); +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel.filter-panel__enum + .tiny-grid__filter-options + .tiny-grid__filter-option + svg.is-checked { + fill: var(--ti-grid-primary-color); +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel .tiny-grid__filter-option { + margin: 0; + height: 24px; + line-height: 24px; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .tiny-grid__filter-panel .tiny-grid__filter-option a { + color: var(--ti-grid-font-color); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__radios { + margin-bottom: 12px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: distribute; + justify-content: space-around; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__radios + label.tiny-grid-radio { + width: auto; + display: inline-block; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__radios + label.tiny-grid-radio + .tiny-grid-radio__label { + color: var(--ti-grid-font-color); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: auto; + max-width: 80%; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__radios + label.tiny-grid-radio + + .tiny-grid-radio { + margin-left: 0; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__radios + label.tiny-grid-radio:nth-child(2) { + text-align: center; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__radios + label.tiny-grid-radio:nth-child(3) { + text-align: right; +} +.tiny-grid__filter-wrapper + .tiny-grid__filter-body + .tiny-grid__filter-panel + .tiny-grid__filter-option.filter-option__btns { + margin: 8px 0 16px; + text-align: center; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .filter-option__input > input { + width: 100%; + border: solid 1px #bdbdbd; + border-radius: var(--ti-grid-border-radius); + outline: 0; + padding: 0 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: inherit; + height: 30px; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-body .filter-option__input > input:focus { + border: 1px solid var(--ti-grid-primary-color); +} +.tiny-grid__filter-wrapper .tiny-grid__filter-footer { + border-top: 1px solid var(--ti-grid-popup-border-color); + padding: 8px; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-footer button { + background-color: transparent; + padding: 0 3px; + border: 0; + font-size: 13px; + color: var(--ti-grid-font-color); + cursor: pointer; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-footer button:focus { + outline: 0; +} +.tiny-grid__filter-wrapper .tiny-grid__filter-footer button:hover { + color: var(--ti-grid-primary-color); +} +.tiny-grid__filter-wrapper .tiny-grid__filter-footer button.is__disabled { + color: var(--ti-grid-column-icon-border-color); + cursor: not-allowed; +} +.tiny-grid-loading { + display: none; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 99; + background-color: var(--ti-grid-loading-background-color); +} +.tiny-grid-loading .tiny-grid-loading__wrap { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.tiny-grid-loading .tiny-grid-loading__wrap.tiny-loading__spinner { + margin-top: 0; +} +.tiny-grid-loading .tiny-grid-loading__round { + width: 46px; + height: 46px; + position: relative; + margin: 0 auto; + background: -webkit-gradient(linear, left bottom, left top, from(transparent), to(transparent)); + background: linear-gradient(to top, transparent, transparent); +} +.tiny-grid-loading .tiny-grid-loading__round span { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 50%; + background: -webkit-gradient(linear, left top, left bottom, from(#000), to(#000)); + background: linear-gradient(#000, #000); + position: absolute; + -webkit-animation: load 1.04s ease infinite; + animation: load 1.04s ease infinite; +} +@-webkit-keyframes load { + 0% { + opacity: 10; + } + 100% { + opacity: 0.1; + } +} +@keyframes load { + 0% { + opacity: 10; + } + 100% { + opacity: 0.1; + } +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(1) { + top: 68%; + left: 68%; + animation-delay: 0s; + -webkit-animation-delay: 0s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(2) { + top: 50%; + right: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + animation-delay: 0.1s; + -webkit-animation-delay: 0.1s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(3) { + top: 10%; + left: 68%; + animation-delay: 0.2s; + -webkit-animation-delay: 0.2s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(5) { + top: 10%; + left: 12%; + animation-delay: 0.4s; + -webkit-animation-delay: 0.4s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(4) { + top: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + animation-delay: 0.3s; + -webkit-animation-delay: 0.3s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(8) { + bottom: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + animation-delay: 0.7s; + -webkit-animation-delay: 0.7s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(6) { + top: 50%; + left: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + animation-delay: 0.5s; + -webkit-animation-delay: 0.5s; +} +.tiny-grid-loading .tiny-grid-loading__round span:nth-child(7) { + top: 68%; + left: 12%; + animation-delay: 0.6s; + -webkit-animation-delay: 0.6s; +} +.tiny-grid .tiny-grid-body__row.row__pending { + color: var(--ti-grid-error-color); + text-decoration: line-through; + cursor: no-drop; +} +.tiny-grid .tiny-grid-body__row.row__pending .tiny-grid-body__column { + position: relative; +} +.tiny-grid .tiny-grid-body__row.row__pending .tiny-grid-body__column:after { + content: ''; + position: absolute; + top: 50%; + left: 0; + width: 100%; + height: 0; + border-bottom: 1px solid var(--ti-grid-error-color); + z-index: 1; +} +.tiny-grid.mark-insert .tiny-grid-body__row.row__new { + background-color: #f2f5fc; +} +.tiny-grid-menu__clild-wrapper, +.tiny-grid-menu__wrapper { + display: none; + position: absolute; + top: 0; + left: 0; + z-index: 5000; + font-size: var(--ti-grid-font-size); + background-color: var(--ti-grid-light-color); + border: 1px solid var(--ti-grid-popup-border-color); + -webkit-box-shadow: 2px 2px 4px -2px rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 4px -2px rgba(0, 0, 0, 0.2); + padding: 0 1px; + color: var(--ti-grid-font-color); + font-family: var(--ti-grid-font-family); + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-grid-menu__clild-wrapper.show, +.tiny-grid-menu__wrapper.show { + display: block; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper { + margin: 0; + padding: 0; + list-style-type: none; + border-bottom: 1px solid var(--ti-grid-border-color); +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper li, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper li, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper li, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper li { + position: relative; + margin: 1px 0; + border: 1px solid transparent; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper li:last-child, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper li:last-child, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper li:last-child, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper li:last-child { + border: 0; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper li.link__active, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper li.link__active, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper li.link__active, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper li.link__active { + color: #2b2b2b; + background-color: #c5c5c5; + border-color: #c5c5c5; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper li.link__disabled .tiny-grid-menu__link, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper li.link__disabled .tiny-grid-menu__link, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper li.link__disabled .tiny-grid-menu__link, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper li.link__disabled .tiny-grid-menu__link { + color: var(--ti-grid-font-color); + cursor: initial; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper li.link__disabled.link__active, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper li.link__disabled.link__active, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper li.link__disabled.link__active, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper li.link__disabled.link__active { + border-color: #c0c1c2; + background-color: #eee; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper li.link__disabled.link__active:hover, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper li.link__disabled.link__active:hover, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper li.link__disabled.link__active:hover, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper li.link__disabled.link__active:hover { + background-color: inherit; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link { + display: block; + padding: 0 30px; + min-width: 120px; + max-width: 180px; + line-height: 26px; + color: var(--ti-grid-font-color); +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix { + position: absolute; + top: 5px; + margin-right: 5px; + font-size: var(--ti-common-font-size-2); +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-prefix { + left: 5px; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-suffix { + right: 5px; +} +.tiny-grid-menu__clild-wrapper + .tiny-grid-menu__clild-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild, +.tiny-grid-menu__clild-wrapper + .tiny-grid-menu__option-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild, +.tiny-grid-menu__wrapper + .tiny-grid-menu__clild-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild, +.tiny-grid-menu__wrapper + .tiny-grid-menu__option-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild { + top: 8px; +} +.tiny-grid-menu__clild-wrapper + .tiny-grid-menu__clild-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild:before, +.tiny-grid-menu__clild-wrapper + .tiny-grid-menu__option-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild:before, +.tiny-grid-menu__wrapper + .tiny-grid-menu__clild-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild:before, +.tiny-grid-menu__wrapper + .tiny-grid-menu__option-wrapper + .tiny-grid-menu__link + .tiny-grid-menu__link-suffix.suffix__haschild:before { + position: absolute; + content: ''; + border: 4px solid transparent; + border-left-color: #727272; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-content, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-content, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-content, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__link .tiny-grid-menu__link-content { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link, +.tiny-grid-menu__clild-wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link, +.tiny-grid-menu__wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link, +.tiny-grid-menu__wrapper .tiny-grid-menu__option-wrapper .tiny-grid-menu__clild-wrapper .tiny-grid-menu__link { + max-width: 180px; + padding: 0 20px 0 30px; +} +.tiny-grid-menu__clild-wrapper { + display: none; + z-index: 5100; + top: 0; + left: 100%; +} +.tiny-grid-custom { + width: 100%; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-head { + white-space: nowrap; + margin: 0; + overflow: hidden; + height: var(--ti-grid-custom-head-height); + width: 100%; + position: relative; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-head ul { + height: var(--ti-grid-custom-head-height); + border-bottom: 1px solid var(--ti-grid-border-color); + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-head ul li { + float: left; + margin-right: -1px; + cursor: pointer; + line-height: 28px; + padding: 0 20px; + color: var(--ti-grid-font-color); + min-width: 90px; + height: var(--ti-grid-custom-head-height); + line-height: var(--ti-grid-custom-head-height); +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-head ul li.tiny-grid-custom__tabs-selected { + color: var(--ti-grid-primary-color); + border-bottom: 3px solid var(--ti-grid-primary-color); + font-weight: 700; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-body { + overflow-y: auto; + border: 0; + padding: 12px 0; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-body .tabs-body-item .tiny-grid-custom__alert { + position: relative; + border: 1px solid; + border-radius: var(--ti-grid-border-radius); + height: var(--ti-grid-custom-body-list-height); + line-height: var(--ti-grid-custom-body-list-height); + padding-left: 8px; + overflow: hidden; + background: var(--ti-grid-row-hover-background-color); + border-color: #91d5ff; + color: var(--ti-grid-font-color); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__alert + .tiny-svg { + font-size: var(--ti-common-font-size-3); + fill: var(--ti-grid-primary-color); +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-body .tabs-body-item .tiny-grid-custom__alert p { + display: inline-block; + line-height: 16px; + padding-left: 8px; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid-custom__tabs-body .tabs-body-item .tiny-grid-custom__setting { + border-bottom: 1px solid var(--ti-grid-border-color); + padding: 12px 0 24px; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item { + font-size: var(--ti-grid-font-size); + padding: 10px 8px; + overflow: hidden; + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon { + font-size: 0; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .icon { + display: inline-block; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .icon:not(:last-child) { + margin-right: 12px; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg { + font-size: var(--ti-common-font-size-1); + fill: var(--ti-grid-normal-color); + cursor: pointer; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg:hover { + fill: var(--ti-grid-primary-disabled-color); +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.lock, +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.open, +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.sort { + fill: var(--ti-grid-primary-color); +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.lock:hover, +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.open:hover, +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.sort:hover { + fill: var(--ti-grid-primary-hover-color); +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting + .setting-item + .setting-icon + .tiny-svg.is-visible { + visibility: hidden; + pointer-events: none; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting.other-setting { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting.other-setting + .setting-item + span.label { + width: 26%; + display: inline-block; + text-align: right; + padding-right: 24px; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting.other-setting + .setting-item + span.selection { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + display: inline-block; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting.other-setting + .setting-item + span.selection + .tiny-grid-radio { + margin-right: 10px; + margin-left: 0 !important; +} +.tiny-grid-custom + .tiny-grid-custom__tabs + .tiny-grid-custom__tabs-body + .tabs-body-item + .tiny-grid-custom__setting.other-setting + .setting-item + span.selection + .tiny-grid-radio__label { + height: 16px; + line-height: 18px; +} +.tiny-grid-custom .tiny-grid-custom__tabs .tiny-grid__body-wrapper { + max-height: 45vh; + border-bottom: 0; +} +.tiny-grid-custom .tiny-grid-custom__footer { + margin: 12px; + text-align: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-grid-custom-switch { + margin-top: 8px; + padding-bottom: 12px; + border-bottom: 1px solid #d9d9d9; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__title { + margin-bottom: 12px; + font-weight: 400; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__title .tiny-svg { + font-size: var(--ti-common-font-size-3); +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__title .tiny-alert__description { + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__label { + text-align: right; + position: relative; + top: 2px; + padding-right: 3px; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__content { + position: relative; + top: -4px; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__icon-btn { + fill: #1890ff; + font-size: var(--ti-common-font-size-1); + cursor: pointer; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__icon-btn:hover { + fill: #096dd9; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__icon-btn--disabled, +.tiny-grid-custom-switch .tiny-grid-custom-switch__icon-btn--disabled:hover { + fill: #bfbfbf; + cursor: not-allowed; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__icon-btn + .tiny-grid-custom-switch__icon-btn { + margin-left: 12px; +} +.tiny-grid-custom-switch .tiny-grid-custom-switch__icon-btn:first-child { + margin-left: 20px; +} +.tiny-grid-custom-switch__dialog-box .tiny-grid-custom-switch__confirm-btns { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + width: 85%; +} +.tiny-grid-custom-switch__dialog-box .tiny-grid-custom-switch__del-tip { + text-align: center; +} +.tiny-grid-modal__wrapper { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + font-size: var(--ti-grid-font-size); + color: var(--ti-grid-font-color); + font-family: var(--ti-grid-font-family); + -webkit-transition: top 0.4s; + transition: top 0.4s; +} +.tiny-grid-modal__wrapper.active { + display: block; +} +.tiny-grid-modal__wrapper.is__visible.is__mask:before { + background-color: rgba(0, 0, 0, 0.5); +} +.tiny-grid-modal__wrapper.is__visible.type__message .tiny-grid-modal__box { + -webkit-transform: translateY(0); + transform: translateY(0); +} +.tiny-grid-modal__wrapper.is__visible:not(.type__message) .tiny-grid-modal__box:not(.is__drag) { + top: 15vh; + -webkit-transition: top 0.3s ease-in, opacity 0.4s ease-in; + transition: top 0.3s ease-in, opacity 0.4s ease-in; +} +.tiny-grid-modal__wrapper.is__visible .tiny-grid-modal__box { + opacity: 1; + visibility: visible; +} +.tiny-grid-modal__wrapper:not(.lock__view) { + pointer-events: none; +} +.tiny-grid-modal__wrapper.lock__scroll { + overflow: hidden; +} +.tiny-grid-modal__wrapper:not(.lock__scroll) { + overflow: auto; +} +.tiny-grid-modal__wrapper.is__mask:before, +.tiny-grid-modal__wrapper.lock__view:before { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + pointer-events: auto; +} +.tiny-grid-modal__wrapper.is__mask:before { + background-color: rgba(0, 0, 0, 0); +} +.tiny-grid-modal__wrapper.is__animat.is__mask:before { + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; +} +.tiny-grid-modal__wrapper.is__animat.type__message .tiny-grid-modal__box:not(.is__drag) { + -webkit-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; +} +.tiny-grid-modal__wrapper.size__mini, +.tiny-grid-modal__wrapper.size__small { + font-size: var(--ti-grid-font-size); +} +.tiny-grid-modal__wrapper.size__mini .tiny-grid-modal__box, +.tiny-grid-modal__wrapper.size__small .tiny-grid-modal__box { + padding: 6px 0; +} +.tiny-grid-modal__wrapper.size__mini .tiny-grid-modal__body, +.tiny-grid-modal__wrapper.size__small .tiny-grid-modal__body { + padding: 4px 14px 10px 14px; +} +.tiny-grid-modal__wrapper.size__mini .tiny-grid-modal__footer, +.tiny-grid-modal__wrapper.size__small .tiny-grid-modal__footer { + padding: 4px 14px 8px 14px; +} +.tiny-grid-modal__wrapper.size__mini .tiny-grid-modal__header, +.tiny-grid-modal__wrapper.size__small .tiny-grid-modal__header { + font-size: var(--ti-grid-modal-header-font-size); + padding: 6px 30px 8px 14px; +} +.tiny-grid-modal__wrapper.size__mini .tiny-grid-modal__close-btn, +.tiny-grid-modal__wrapper.size__mini .tiny-grid-modal__zoom-btn, +.tiny-grid-modal__wrapper.size__small .tiny-grid-modal__close-btn, +.tiny-grid-modal__wrapper.size__small .tiny-grid-modal__zoom-btn { + font-size: var(--ti-grid-modal-small-btn-font-size); + top: 10px; +} +.tiny-grid-modal__wrapper.type__alert .tiny-grid-modal__body, +.tiny-grid-modal__wrapper.type__confirm .tiny-grid-modal__body, +.tiny-grid-modal__wrapper.type__message .tiny-grid-modal__body { + white-space: normal; + word-wrap: break-word; + word-break: break-all; +} +.tiny-grid-modal__wrapper.type__message { + text-align: center; +} +.tiny-grid-modal__wrapper.type__message .tiny-grid-modal__box { + display: inline-block; + padding: 2px 0; + margin-top: 0; + width: auto; + -webkit-box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1); + -webkit-transform: translateY(-10%); + transform: translateY(-10%); +} +.tiny-grid-modal__wrapper.type__message .tiny-grid-modal__box .tiny-grid-modal__body:after { + content: ''; + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; +} +.tiny-grid-modal__wrapper.type__message .tiny-grid-modal__box .tiny-grid-modal__content { + max-width: 800px; + float: left; +} +.tiny-grid-modal__wrapper.type__message .tiny-grid-modal__status-wrapper { + font-size: var(--ti-grid-modal-small-btn-font-size); + padding-right: 10px; +} +.tiny-grid-modal__wrapper.type__alert .tiny-grid-modal__box, +.tiny-grid-modal__wrapper.type__confirm .tiny-grid-modal__box, +.tiny-grid-modal__wrapper.type__modal .tiny-grid-modal__box { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + position: absolute; + left: 50%; + top: 0; + -webkit-box-shadow: var(--ti-grid-modal-box-shadow); + box-shadow: var(--ti-grid-modal-box-shadow); + border: 1px solid var(--ti-grid-modal-border-color); +} +.tiny-grid-modal__wrapper.type__alert .tiny-grid-modal__box .tiny-grid-modal__header, +.tiny-grid-modal__wrapper.type__confirm .tiny-grid-modal__box .tiny-grid-modal__header, +.tiny-grid-modal__wrapper.type__modal .tiny-grid-modal__box .tiny-grid-modal__header { + cursor: move; +} +.tiny-grid-modal__wrapper.type__modal .tiny-grid-modal__body { + overflow: auto; +} +.tiny-grid-modal__wrapper.type__modal .tiny-grid-modal__body .tiny-grid-modal__content { + overflow: auto; +} +.tiny-grid-modal__wrapper.type__alert .tiny-grid-modal__status-wrapper, +.tiny-grid-modal__wrapper.type__confirm .tiny-grid-modal__status-wrapper { + font-size: var(--ti-grid-modal-alert-font-size); + padding: 0 10px 0 2px; +} +.tiny-grid-modal__wrapper.status__info .tiny-grid-modal__status-wrapper { + color: var(--ti-grid-primary-color); +} +.tiny-grid-modal__wrapper.status__question .tiny-grid-modal__status-wrapper, +.tiny-grid-modal__wrapper.status__warning .tiny-grid-modal__status-wrapper { + color: var(--ti-grid-warning-color); +} +.tiny-grid-modal__wrapper.status__success .tiny-grid-modal__status-wrapper { + color: var(--ti-grid-success-color); +} +.tiny-grid-modal__wrapper.status__error .tiny-grid-modal__status-wrapper { + color: var(--ti-grid-error-color); +} +.tiny-grid-modal__wrapper.status__loading .tiny-grid-modal__status-wrapper { + color: var(--ti-grid-modal-loading-color); +} +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__box .tiny-grid-modal__header { + cursor: default; +} +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .sb-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .selb-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .sest-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .st-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .swlb-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .swst-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .wl-resize, +.tiny-grid-modal__wrapper.is__maximize .tiny-grid-modal__resize .wr-resize { + display: none; +} +.tiny-grid-modal__box { + width: 420px; + background-color: var(--ti-grid-modal-box-background-color); + border: 1px solid var(--ti-grid-modal-box-border-color); + font-size: var(--ti-grid-modal-header-font-size); + text-align: left; + pointer-events: auto; + visibility: hidden; + opacity: 0; +} +.tiny-grid-modal__box.is__drag { + cursor: move; +} +.tiny-grid-modal__box.is__drag .tiny-grid-modal__body:after, +.tiny-grid-modal__box.is__drag .tiny-grid-modal__footer:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tiny-grid-modal__box.is__drag .tiny-grid-modal__body { + overflow: hidden; +} +.tiny-grid-modal__box.is__drag .tiny-grid-modal__body .tiny-grid-modal__content { + overflow: hidden; +} +.tiny-grid-modal__status-wrapper { + -ms-flex-negative: 0; + flex-shrink: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-grid-modal__status-icon { + font-style: normal; +} +.tiny-grid-modal__content { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.tiny-grid-modal__body, +.tiny-grid-modal__footer, +.tiny-grid-modal__header { + position: relative; +} +.tiny-grid-modal__body { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 24px; +} +.tiny-grid-modal__header { + -ms-flex-negative: 0; + flex-shrink: 0; + font-size: var(--ti-grid-modal-header-font-size); + font-weight: 700; + padding: 9px 40px 10px 24px; + border-bottom: 1px solid var(--ti-grid-border-color); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tiny-grid-modal__close-btn, +.tiny-grid-modal__zoom-btn { + font-size: var(--ti-grid-modal-header-font-size); + position: absolute; + right: 24px; + top: 13px; + z-index: 1; + color: var(--ti-grid-modal-btn-color); + fill: var(--ti-grid-modal-btn-color); + cursor: pointer; +} +.tiny-grid-modal__close-btn:hover, +.tiny-grid-modal__zoom-btn:hover { + color: var(--ti-grid-primary-color); + fill: var(--ti-grid-primary-color); +} +.tiny-grid-modal__zoom-btn { + right: 44px; + border-color: #c0c4cc; +} +.tiny-grid-modal__zoom-btn:hover { + border-color: #606266; +} +.tiny-grid-modal__footer { + -ms-flex-negative: 0; + flex-shrink: 0; + text-align: center; + padding: 0 24px 24px; +} +.tiny-grid-modal__resize .sb-resize, +.tiny-grid-modal__resize .selb-resize, +.tiny-grid-modal__resize .sest-resize, +.tiny-grid-modal__resize .st-resize, +.tiny-grid-modal__resize .swlb-resize, +.tiny-grid-modal__resize .swst-resize, +.tiny-grid-modal__resize .wl-resize, +.tiny-grid-modal__resize .wr-resize { + position: absolute; + z-index: 100; +} +.tiny-grid-modal__resize .wl-resize, +.tiny-grid-modal__resize .wr-resize { + width: 8px; + height: 100%; + top: 0; + cursor: w-resize; +} +.tiny-grid-modal__resize .wl-resize { + left: -3px; +} +.tiny-grid-modal__resize .wr-resize { + right: -3px; +} +.tiny-grid-modal__resize .selb-resize, +.tiny-grid-modal__resize .sest-resize, +.tiny-grid-modal__resize .swlb-resize, +.tiny-grid-modal__resize .swst-resize { + width: 10px; + height: 10px; + z-index: 101; +} +.tiny-grid-modal__resize .sest-resize, +.tiny-grid-modal__resize .swst-resize { + top: -8px; +} +.tiny-grid-modal__resize .selb-resize, +.tiny-grid-modal__resize .swlb-resize { + bottom: -8px; +} +.tiny-grid-modal__resize .sest-resize, +.tiny-grid-modal__resize .swlb-resize { + cursor: sw-resize; +} +.tiny-grid-modal__resize .selb-resize, +.tiny-grid-modal__resize .swst-resize { + cursor: se-resize; +} +.tiny-grid-modal__resize .swlb-resize, +.tiny-grid-modal__resize .swst-resize { + left: -8px; +} +.tiny-grid-modal__resize .selb-resize, +.tiny-grid-modal__resize .sest-resize { + right: -8px; +} +.tiny-grid-modal__resize .sb-resize, +.tiny-grid-modal__resize .st-resize { + width: 100%; + height: 8px; + left: 0; + cursor: s-resize; +} +.tiny-grid-modal__resize .st-resize { + top: -3px; +} +.tiny-grid-modal__resize .sb-resize { + bottom: -3px; +} +.tiny-grid-toolbar { + padding: 12px 0; +} +.tiny-grid-toolbar:after { + content: ''; + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; +} +.tiny-grid-toolbar svg { + fill: var(--ti-grid-primary-color); + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-toolbar.is__loading { + position: relative; +} +.tiny-grid-toolbar.is__loading:before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + background-color: var(--ti-grid-loading-background-color); +} +.tiny-grid-toolbar.size__mini, +.tiny-grid-toolbar.size__small { + padding: 8px 0; +} +.tiny-grid-toolbar.size__medium .tiny-grid-custom__setting-btn, +.tiny-grid-toolbar.size__medium .tiny-grid-refresh__btn { + font-size: 17px; +} +.tiny-grid-toolbar.size__small .tiny-grid-custom__setting-btn, +.tiny-grid-toolbar.size__small .tiny-grid-refresh__btn { + font-size: 15px; +} +.tiny-grid-toolbar.size__mini .tiny-grid-custom__setting-btn, +.tiny-grid-toolbar.size__mini .tiny-grid-refresh__btn { + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-toolbar .tiny-grid-custom__wrapper, +.tiny-grid-toolbar .tiny-grid-fullscreen__wrapper, +.tiny-grid-toolbar .tiny-grid-refresh__wrapper, +.tiny-grid-toolbar .tiny-grid-tools__wrapper { + float: right; + width: 30px; + height: 30px; + line-height: 30px; + border: solid 1px var(--ti-grid-border-color); + border-radius: 3px; + text-align: center; + margin: 0 4px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-grid-toolbar .tiny-grid-custom__wrapper { + position: relative; +} +.tiny-grid-toolbar .tiny-grid-custom__wrapper.is__active .tiny-grid-custom__setting-btn { + border-color: var(--ti-grid-primary-color); +} +.tiny-grid-toolbar .tiny-grid-custom__wrapper.is__active .tiny-grid-custom__option-wrapper { + display: block; +} +.tiny-grid-toolbar .tiny-grid-custom__setting-btn, +.tiny-grid-toolbar .tiny-grid-fullscreen__btn, +.tiny-grid-toolbar .tiny-grid-refresh__btn { + font-size: var(--ti-common-font-size-2); + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tiny-grid-toolbar .tiny-grid-custom__setting-btn:hover, +.tiny-grid-toolbar .tiny-grid-fullscreen__btn:hover, +.tiny-grid-toolbar .tiny-grid-refresh__btn:hover { + border-color: var(--ti-grid-primary-color); +} +.tiny-grid-toolbar .tiny-grid-custom__setting-btn > i, +.tiny-grid-toolbar .tiny-grid-fullscreen__btn > i, +.tiny-grid-toolbar .tiny-grid-refresh__btn > i { + display: block; + color: var(--ti-grid-primary-color); + line-height: 28px; +} +.tiny-grid-toolbar .tiny-grid-custom__option-wrapper { + display: none; + position: absolute; + right: 0; + text-align: left; + background-color: var(--ti-grid-light-color); + z-index: 19; + max-height: 210px; + overflow: auto; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2); +} +.tiny-grid-toolbar .tiny-grid-custom__option-wrapper .tiny-grid-custom__option { + padding: 5px 5px; + border: 1px solid var(--ti-grid-border-color); + border-radius: 2px; + font-weight: 700; + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-toolbar .tiny-grid-custom__option-wrapper .tiny-grid-custom__option > .tiny-grid-checkbox { + display: block; + padding: 5px; + margin: 0; + max-width: 180px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-grid__select-toolbar { + position: absolute; + background-color: var(--ti-base-color-light); +} +.tiny-grid__select-toolbar .tiny-grid-toolbar { + padding: 2px 0 2px 6px; +} +.tiny-grid-checkbox { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} +.tiny-grid-checkbox.size__mini, +.tiny-grid-checkbox.size__small { + font-size: var(--ti-grid-font-size); +} +.tiny-grid-checkbox.size__mini > input + .tiny-grid-checkbox__icon, +.tiny-grid-checkbox.size__small > input + .tiny-grid-checkbox__icon { + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-checkbox + .tiny-grid-checkbox { + margin-left: 10px; +} +.tiny-grid-checkbox > input { + display: none; +} +.tiny-grid-checkbox > input + .tiny-grid-checkbox__icon { + position: relative; + display: inline-block; + width: 1em; + height: 1em; + border: 1px solid var(--ti-grid-border-color); + background-color: #fff; + vertical-align: middle; + border-radius: var(--ti-grid-border-radius); + font-size: var(--ti-common-font-size-2); +} +.tiny-grid-checkbox > input + .tiny-grid-checkbox__icon:before { + content: ''; + position: absolute; +} +.tiny-grid-checkbox > input + .tiny-grid-checkbox__icon:hover { + border-color: var(--ti-grid-primary-hover-color); +} +.tiny-grid-checkbox > input + .tiny-grid-checkbox__icon + .tiny-grid-checkbox__label { + display: none; +} +.tiny-grid-checkbox > input + .tiny-grid-checkbox__icon > svg.icon-checked-sur { + display: none; +} +.tiny-grid-checkbox > input:checked + .tiny-grid-checkbox__icon { + border: none; +} +.tiny-grid-checkbox > input:checked + .tiny-grid-checkbox__icon + .tiny-grid-checkbox__label { + color: var(--ti-grid-primary-color); +} +.tiny-grid-checkbox > input:checked + .tiny-grid-checkbox__icon > svg { + display: block; + fill: var(--ti-grid-primary-color); +} +.tiny-grid-checkbox.is__indeterminate > input:not(:checked) + .tiny-grid-checkbox__icon { + border: none; +} +.tiny-grid-checkbox.is__indeterminate > input:not(:checked) + .tiny-grid-checkbox__icon > svg { + fill: var(--ti-grid-primary-color); +} +.tiny-grid-checkbox.is__disabled { + cursor: not-allowed; +} +.tiny-grid-checkbox.is__disabled > input + .tiny-grid-checkbox__icon { + border-color: var(--ti-grid-border-color); + background-color: var(--ti-grid-input-disabled-color); +} +.tiny-grid-checkbox.is__disabled > input + .tiny-grid-checkbox__icon:before { + border-color: var(--ti-grid-input-disabled-color); +} +.tiny-grid-checkbox.is__disabled > input + .tiny-grid-checkbox__icon + .tiny-grid-checkbox__label { + color: var(--ti-grid-border-color); +} +.tiny-grid-checkbox.is__disabled > input:checked + .tiny-grid-checkbox__icon { + border-color: var(--ti-grid-disabled-color); + background-color: var(--ti-grid-disabled-color); +} +.tiny-grid-checkbox .tiny-grid-checkbox__label { + padding-left: 5px; + vertical-align: middle; + display: inline-block; +} +.tiny-grid-radio { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} +.tiny-grid-radio.size__mini, +.tiny-grid-radio.size__small { + font-size: var(--ti-grid-font-size); +} +.tiny-grid-radio.size__mini > input + .tiny-grid-radio__icon, +.tiny-grid-radio.size__small > input + .tiny-grid-radio__icon { + font-size: var(--ti-common-font-size-1); +} +.tiny-grid-radio.is__disabled { + cursor: not-allowed; +} +.tiny-grid-radio.is__disabled > input + .tiny-grid-radio__icon { + border-color: var(--ti-grid-border-color); + background-color: var(--ti-grid-input-disabled-color); +} +.tiny-grid-radio.is__disabled > input + .tiny-grid-radio__icon:before { + border-color: var(--ti-grid-input-disabled-color); + background-color: var(--ti-grid-input-disabled-color); +} +.tiny-grid-radio.is__disabled > input + .tiny-grid-radio__icon + .tiny-grid-radio__label { + color: var(--ti-grid-border-color); +} +.tiny-grid-radio.is__disabled > input + .tiny-grid-radio__icon:hover { + border-color: var(--ti-grid-border-color); +} +.tiny-grid-radio.is__disabled > input:checked + .tiny-grid-radio__icon { + border-color: var(--ti-grid-disabled-color); + background-color: var(--ti-grid-disabled-color); +} +.tiny-grid-radio > input { + display: none; +} +.tiny-grid-radio > input + .tiny-grid-radio__icon { + position: relative; + display: inline-block; + width: 1em; + height: 1em; + border: 1px solid var(--ti-grid-border-color); + background-color: #fff; + vertical-align: middle; + border-radius: 50%; + font-size: var(--ti-common-font-size-2); +} +.tiny-grid-radio > input + .tiny-grid-radio__icon:hover { + border-color: var(--ti-grid-primary-hover-color); +} +.tiny-grid-radio > input:checked + .tiny-grid-radio__icon { + background-color: var(--ti-grid-primary-color); + border-color: var(--ti-grid-primary-color); +} +.tiny-grid-radio > input:checked + .tiny-grid-radio__icon:before { + content: ''; + position: absolute; + border-width: 0.15em; + border-style: solid; + border-color: #fff; + background-color: #fff; + border-radius: 50%; + height: 0.4em; + width: 0.4em; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.tiny-grid-radio > input:checked + .tiny-grid-radio__icon + .tiny-grid-radio__label { + color: var(--ti-grid-primary-color); +} +.tiny-grid-radio .tiny-grid-radio__label { + padding-left: 5px; + vertical-align: middle; + display: inline-block; +} +.tiny-grid-radio + .tiny-grid-radio { + margin-left: 10px; +} +.tiny-grid-input__wrapper { + font-size: var(--ti-common-font-size-base); + font-size: var(--ti-grid-font-size, 12px); + display: inline-block; +} +.tiny-grid-input__wrapper.type__textarea { + width: 100%; +} +.tiny-grid-input__wrapper .tiny-grid-input, +.tiny-grid-input__wrapper .tiny-grid-textarea { + border-radius: 4px; + outline: 0; + padding: 4px 8px; + width: 100%; + color: var(--ti-grid-font-color); + border: 1px solid var(--ti-grid-border-color); + background-color: #fff; +} +.tiny-grid-input__wrapper .tiny-grid-input:focus, +.tiny-grid-input__wrapper .tiny-grid-textarea:focus { + border: 1px solid var(--ti-grid-primary-color); +} +.tiny-grid-input__wrapper .tiny-grid-input[disabled], +.tiny-grid-input__wrapper .tiny-grid-textarea[disabled] { + cursor: not-allowed; + background-color: var(--ti-grid-input-disabled-color); +} +.tiny-grid-input__wrapper .tiny-grid-input { + height: 32px; +} +.tiny-grid-input__wrapper .tiny-grid-textarea { + height: 100%; +} +.tiny-grid-input__wrapper.size__medium .tiny-grid-input { + height: 36px; +} +.tiny-grid-input__wrapper.size__small .tiny-grid-input { + height: 32px; +} +.tiny-grid-input__wrapper.size__mini .tiny-grid-input { + height: 28px; +} +.tiny-grid-button { + position: relative; + text-align: center; + background-color: var(--ti-grid-light-color); + outline: 0; + font-size: var(--ti-grid-font-size); + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.tiny-grid-button.is__disabled { + color: var(--ti-grid-primary-disabled-color); +} +.tiny-grid-button.is__disabled:not(.is__loading) { + cursor: no-drop; +} +.tiny-grid-button:not(.is__disabled) { + color: var(--ti-grid-primary-color); + cursor: pointer; +} +.tiny-grid-button.is__loading:before { + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: hsla(0, 0%, 100%, 0.35); + pointer-events: none; +} +.tiny-grid-button.type__text { + text-decoration: none; + border: 0; + background-color: transparent; +} +.tiny-grid-button.type__text:not(.is__disabled):hover { + color: var(--ti-grid-primary-hover-color); +} +.tiny-grid-button.type__button { + padding: 0 12px; + line-height: 28px; + border: 1px solid var(--ti-grid-border-color); + border-radius: 2px; +} +.tiny-grid-button.type__button.theme__primary { + color: var(--ti-grid-light-color); + border-color: var(--ti-grid-primary-color); + background-color: var(--ti-grid-primary-color); +} +.tiny-grid-button.type__button.theme__primary:not(.is__disabled):hover { + color: var(--ti-grid-light-color); + background-color: var(--ti-grid-primary-hover-color); + border-color: var(--ti-grid-primary-hover-color); +} +.tiny-grid-button.type__button.theme__primary:not(.is__disabled):active { + color: var(--ti-grid-light-color); + background-color: var(--ti-grid-primary-active-color); + border-color: var(--ti-grid-primary-active-color); +} +.tiny-grid-button.type__button:not(.theme__primary):not(.is__disabled):hover { + color: var(--ti-grid-primary-color); + border-color: var(--ti-grid-primary-color); +} +.tiny-grid-button.type__button:not(.theme__primary):not(.is__disabled):active { + color: var(--ti-grid-primary-active-color); + border-color: var(--ti-grid-primary-active-color); +} +.tiny-grid-button.type__button.size__medium { + padding: 0 14px; + line-height: 28px; +} +.tiny-grid-button.type__button.size__small { + padding: 0 12px; + line-height: 26px; +} +.tiny-grid-button.type__button.size__mini { + padding: 0 10px; + line-height: 24px; +} +.tiny-grid-button.size__mini, +.tiny-grid-button.size__small { + font-size: var(--ti-common-font-size-base); +} +.tiny-grid-button + .tiny-grid-button, +.tiny-grid-button + .tiny-grid-button__dropdown { + margin-left: 8px; +} +.tiny-grid-button + .tiny-grid-button.size__medium, +.tiny-grid-button + .tiny-grid-button__dropdown.size__medium { + margin-left: 8px; +} +.tiny-grid-button + .tiny-grid-button.size__small, +.tiny-grid-button + .tiny-grid-button__dropdown.size__small { + margin-left: 6px; +} +.tiny-grid-button + .tiny-grid-button.size__mini, +.tiny-grid-button + .tiny-grid-button__dropdown.size__mini { + margin-left: 4px; +} +.tiny-grid-button__loading-icon { + margin-right: 5px; +} +.tiny-grid-button__dropdown, +.tiny-grid-button__wrapper { + display: inline-block; +} +.tiny-grid-button__dropdown { + position: relative; +} +.tiny-grid-button__dropdown + .tiny-grid-button, +.tiny-grid-button__dropdown + .tiny-grid-button__dropdown { + margin-left: 8px; +} +.tiny-grid-button__dropdown + .tiny-grid-button.size__medium, +.tiny-grid-button__dropdown + .tiny-grid-button__dropdown.size__medium { + margin-left: 8px; +} +.tiny-grid-button__dropdown + .tiny-grid-button.size__small, +.tiny-grid-button__dropdown + .tiny-grid-button__dropdown.size__small { + margin-left: 6px; +} +.tiny-grid-button__dropdown + .tiny-grid-button.size__mini, +.tiny-grid-button__dropdown + .tiny-grid-button__dropdown.size__mini { + margin-left: 4px; +} +.tiny-grid-button__dropdown.is__active > .tiny-grid-button.theme__primary { + color: var(--ti-grid-light-color); + background-color: var(--ti-grid-primary-hover-color); + border-color: var(--ti-grid-primary-hover-color); +} +.tiny-grid-button__dropdown.is__active > .tiny-grid-button:not(.is__disabled):not(.theme__primary) { + color: var(--ti-grid-primary-color); + border-color: var(--ti-grid-primary-color); +} +.tiny-grid-button__dropdown.is__active .tiny-grid-button__dropdown-wrapper { + display: block; +} +.tiny-grid-button__dropdown.is__active .tiny-grid-button__dropdown-arrow { + -webkit-transform: rotate(315deg); + transform: rotate(315deg); +} +.tiny-grid-button__dropdown.is__active .tiny-grid-button__dropdown-arrow.tiny-grid-icon__arrow-bottom { + margin-top: -2px; +} +.tiny-grid-button__dropdown .tiny-grid-button__dropdown-arrow { + font-size: var(--ti-common-font-size-base); + margin-left: 5px; + -webkit-transition: -webkit-transform 0.2s ease-in-out; + transition: -webkit-transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; +} +.tiny-grid-button__dropdown .tiny-grid-button__dropdown-wrapper { + display: none; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + margin-top: 5px; + z-index: 100; + padding: 5px; + background-color: var(--ti-grid-light-color); + border-radius: 4px; + border: 1px solid var(--ti-grid-border-color); + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.tiny-grid-button__dropdown .tiny-grid-button__dropdown-wrapper > .tiny-grid-button { + margin: 0; + display: block; + width: 100%; + border: 0; +} +.tiny-grid-button__dropdown .tiny-grid-button__dropdown-wrapper > .tiny-grid-button.type__text { + padding: 2px 8px; +} +.tiny-grid-button__wrapper .tiny-input { + width: 270px; +} +.tiny-grid-button__wrapper .tiny-button, +.tiny-grid-button__wrapper .tiny-input { + vertical-align: middle; +} +.tiny-grid__tooltip-wrapper { + display: none; + position: absolute; + top: -100%; + left: -100%; + font-size: var(--ti-grid-font-size); + max-width: 400px; + border-radius: 4px; + padding: 8px 12px; + white-space: normal; + word-break: break-word; + -webkit-box-shadow: 2px 2px 4px -2px rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 4px -2px rgba(0, 0, 0, 0.2); + color: var(--ti-grid-font-color); + font-family: var(--ti-grid-font-family); + pointer-events: none; + z-index: 4000; +} +.tiny-grid__tooltip-wrapper.is__visible { + display: block; +} +.tiny-grid__tooltip-wrapper.is__arrow .tiny-grid__tooltip-arrow { + display: block; +} +.tiny-grid__tooltip-wrapper.placement__top .tiny-grid__tooltip-arrow { + bottom: -12px; +} +.tiny-grid__tooltip-wrapper.placement__top .tiny-grid__tooltip-arrow:before { + top: -7px; +} +.tiny-grid__tooltip-wrapper.placement__bottom .tiny-grid__tooltip-arrow { + top: -12px; +} +.tiny-grid__tooltip-wrapper.placement__bottom .tiny-grid__tooltip-arrow:before { + top: -4px; +} +.tiny-grid__tooltip-wrapper.theme__light { + background-color: var(--ti-grid-tooltip-light-background-color); + border: 1px solid var(--ti-grid-border-color); +} +.tiny-grid__tooltip-wrapper.theme__light.placement__top .tiny-grid__tooltip-arrow { + border-top-color: var(--ti-grid-border-color); +} +.tiny-grid__tooltip-wrapper.theme__light.placement__top .tiny-grid__tooltip-arrow:before { + border-top-color: var(--ti-grid-tooltip-light-background-color); +} +.tiny-grid__tooltip-wrapper.theme__light.placement__bottom .tiny-grid__tooltip-arrow { + border-bottom-color: var(--ti-grid-border-color); +} +.tiny-grid__tooltip-wrapper.theme__light.placement__bottom .tiny-grid__tooltip-arrow:before { + border-bottom-color: var(--ti-grid-tooltip-light-background-color); +} +.tiny-grid__tooltip-wrapper.theme__dark { + background: var(--ti-grid-tooltip-dark-background-color); + color: var(--ti-grid-light-color); +} +.tiny-grid__tooltip-wrapper.theme__dark.placement__top .tiny-grid__tooltip-arrow { + border-top-color: var(--ti-grid-tooltip-dark-background-color); +} +.tiny-grid__tooltip-wrapper.theme__dark.placement__top .tiny-grid__tooltip-arrow:before { + border-top-color: var(--ti-grid-tooltip-dark-background-color); +} +.tiny-grid__tooltip-wrapper.theme__dark.placement__bottom .tiny-grid__tooltip-arrow { + border-bottom-color: var(--ti-grid-tooltip-dark-background-color); +} +.tiny-grid__tooltip-wrapper.theme__dark.placement__bottom .tiny-grid__tooltip-arrow:before { + border-bottom-color: var(--ti-grid-tooltip-dark-background-color); +} +.tiny-grid__tooltip-wrapper .tiny-grid__tooltip-arrow { + display: none; + position: absolute; + border-color: transparent; + border-width: 6px; + border-style: solid; + left: 50%; +} +.tiny-grid__tooltip-wrapper .tiny-grid__tooltip-arrow:before { + content: ''; + position: absolute; + border-color: transparent; + border-width: 5px; + border-style: solid; + left: -5px; +} +.tiny-grid__tooltip-wrapper.tiny-grid__valid-error { + background-color: var(--ti-grid-error-color); + color: var(--ti-grid-light-color); +} +.tiny-grid { + --ti-grid-font-family: Helvetica, Arial, 'Microsoft YaHei', sans-serif; + --ti-grid-font-color: var(--ti-base-color-info-normal); + --ti-grid-light-color: var(--ti-base-color-light); + --ti-grid-error-color: var(--ti-base-color-bg-8); + --ti-grid-success-color: var(--ti-base-color-success-normal); + --ti-grid-warning-color: var(--ti-base-color-warning-normal); + --ti-grid-disabled-color: var(--ti-base-color-bg-5); + --ti-grid-normal-color: var(--ti-base-color-placeholder); + --ti-grid-font-size: var(--ti-common-font-size-base); + --ti-grid-border-color: var(--ti-common-color-line-dividing); + --ti-grid-border-radius: var(--ti-common-border-radius-normal); + --ti-grid-header-background-color: var(--ti-common-color-bg-white-emphasize); + --ti-grid-primary-color: var(--ti-base-color-brand-6); + --ti-grid-primary-hover-color: var(--ti-base-color-brand-5); + --ti-grid-primary-active-color: var(--ti-base-color-primary-active); + --ti-grid-primary-disabled-color: #b1b1b1; + --ti-grid-header-column-height: var(--ti-base-size-height-small); + --ti-grid-medium-column-height: 52px; + --ti-grid-default-column-height: 42px; + --ti-grid-small-column-height: 40px; + --ti-grid-mini-column-height: 30px; + --ti-grid-custom-head-height: 40px; + --ti-grid-custom-body-list-height: var(--ti-base-size-height-small); + --ti-icon-fill-active-hover: #fff; + --ti-grid-input-disabled-color: #f5f5f5; + --ti-grid-popup-border-color: #ebeef5; + --ti-grid-row-odd-background-color: #fff; + --ti-grid-row-striped-background-color: #fafafa; + --ti-grid-row-hover-background-color: var(--ti-base-color-hover-background); + --ti-grid-column-hover-background-color: #d7effb; + --ti-grid-column-current-background-color: var(--ti-base-color-hover-background); + --ti-grid-column-icon-border-color: var(--ti-base-color-common-1); + --ti-grid-column-checked-border-width: 2px; + --ti-grid-column-checked-border-color: #d4d4d4; + --ti-grid-loading-background-color: rgba(0, 0, 0, 0.2); + --ti-grid-tooltip-dark-background-color: #303133; + --ti-grid-tooltip-light-background-color: var(--ti-base-color-light); + --ti-grid-modal-loading-color: #78b1eb; + --ti-grid-modal-alert-font-size: 22px; + --ti-grid-modal-header-font-size: var(--ti-common-font-size-1); + --ti-grid-modal-small-btn-font-size: var(--ti-common-font-size-2); + --ti-grid-modal-box-background-color: var(--ti-base-color-light); + --ti-grid-modal-box-border-color: #ebeef5; + --ti-grid-modal-btn-color: #c4c4c4; + --ti-grid-modal-box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2); + --ti-grid-modal-border-color: rgba(0, 0, 0, 0.2); + --ti-table-td-padding: 2px 8px; + --ti-table-th-spacing-line-color: var(--ti-common-color-text-white); + --ti-grid-header-icon-font-size: var(--ti-common-font-size-2); + --ti-table-nodata-td-bg-img-url: url('data:image/png;base64,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'); +} +.tiny-hrapprover { + --ti-hrapprover-error-border-color: var(--ti-base-color-bg-8); + --ti-hrapprover-table-color: var(--ti-base-color-info-normal); + --ti-hrapprover-table-font-size: var(--ti-common-font-size-base); + --ti-hrapprover-tr-bgcolor: #fafafa; + --ti-hrapprover-tr-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-hrapprover-tr-odd-bgcolor: var(--ti-base-color-light); + --ti-hrapprover-th-height: var(--ti-base-size-height-small); + --ti-hrapprover-thead-border-color: var(--ti-base-color-border); + --ti-hrapprover-thead-bgcolor: #f1f1f1; +} +.tiny-hrapprover .tiny-hrapprover__list { + height: 180px; + margin-top: 10px; + overflow: auto; +} +.tiny-hrapprover .tiny-hrapprover__error { + border: solid 1px var(--ti-hrapprover-error-border-color); +} +.tiny-hrapprover table tbody tr { + color: var(--ti-hrapprover-table-color); + background: var(--ti-hrapprover-tr-bgcolor); +} +.tiny-hrapprover table tbody tr:hover { + background: var(--ti-hrapprover-tr-hover-bgcolor); +} +.tiny-hrapprover table tbody tr:nth-child(odd) { + background: var(--ti-hrapprover-tr-odd-bgcolor); +} +.tiny-hrapprover table tr { + display: table-row; + vertical-align: inherit; + border-color: inherit; +} +.tiny-hrapprover table th { + border-left: none; + padding: 2px 0 2px 8px; + height: var(--ti-hrapprover-th-height); +} +.tiny-hrapprover table td { + padding: 2px 0 2px 8px; + height: var(--ti-hrapprover-th-height); + font-size: var(--ti-hrapprover-table-font-size); +} +.tiny-hrapprover table thead { + border-bottom: 1px solid var(--ti-hrapprover-thead-border-color); + text-align: left; + background: var(--ti-hrapprover-thead-bgcolor); + color: var(--ti-hrapprover-table-color); +} +.tiny-hrapprover table thead th { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: var(--ti-hrapprover-table-font-size); + color: var(--ti-hrapprover-table-color); +} +.tiny-hrapprover .tiny-input__suffix .tiny-input__icon { + vertical-align: middle; +} +.tiny-image { + --ti-image-error-font-size: var(--ti-common-font-size-1); + --ti-image-error-color: #c0c4cc; + --ti-image-error-background: #f5f7fa; + position: relative; + display: inline-block; + overflow: hidden; +} +.tiny-image__inner { + vertical-align: top; +} +.tiny-image__inner-center { + position: relative; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + display: block; +} +.tiny-image__error { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: var(--ti-image-error-font-size); + color: var(--ti-image-error-color); + vertical-align: middle; +} +.tiny-image__preview { + cursor: pointer; +} +.tiny-image__error, +.tiny-image__placeholder { + background: var(--ti-image-error-background); +} +.tiny-image__error, +.tiny-image__inner, +.tiny-image__placeholder { + width: 100%; + height: 100%; +} +.viewer-fade-enter-active { + -webkit-animation: viewer-fade-in 0.3s; + animation: viewer-fade-in 0.3s; +} +.viewer-fade-leave-active { + -webkit-animation: viewer-fade-out 0.3s; + animation: viewer-fade-out 0.3s; +} +@-webkit-keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@-webkit-keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +@keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +.tiny-image { + --ti-image-viewer-color: var(--ti-base-color-light); + --ti-image-viewer-actions-inner-color: var(--ti-base-color-light); + --ti-image-viewer-close-font-size: var(--ti-common-font-size-4); + --ti-image-viewer-close-bgcolor: #606266; + --ti-image-viewer-close-top: 40px; + --ti-image-viewer-close-right: 40px; + --ti-image-viewer-close-width: 40px; + --ti-image-viewer-close-height: 40px; + --ti-image-viewer-close-bgcolor-hover: #606266; + --ti-image-viewer-actions-border-radius: 22px; + --ti-image-viewer-actions-inner-font-size: 23px; + --ti-image-viewer-actions-width: 282px; + --ti-image-viewer-actions-height: 44px; + --ti-image-viewer-actions-bottom: 30px; + --ti-image-viewer-actions-inner-justify-content: space-around; + --ti-image-viewer-next-font-size: var(--ti-common-font-size-5); + --ti-image-viewer-next-width: 44px; + --ti-image-viewer-next-height: 44px; + --ti-image-viewer-mask-background: none; + --ti-image-viewer-btn-opacity: 0.8; + --ti-image-viewer-mask-bgcolor: #000; +} +.tiny-image .tiny-image-viewer__wrapper { + background: var(--ti-image-viewer-mask-background); + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; +} +.tiny-image .tiny-image-viewer__btn { + position: absolute; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 50%; + opacity: var(--ti-image-viewer-btn-opacity); + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-image .tiny-image-viewer__btn svg { + fill: var(--ti-image-viewer-color); +} +.tiny-image .tiny-image-viewer__close { + top: var(--ti-image-viewer-close-top); + right: var(--ti-image-viewer-close-right); + width: var(--ti-image-viewer-close-width); + height: var(--ti-image-viewer-close-height); + font-size: var(--ti-image-viewer-close-font-size); + background-color: var(--ti-image-viewer-close-bgcolor); +} +.tiny-image .tiny-image-viewer__close:hover { + cursor: pointer; + background-color: var(--ti-image-viewer-close-bgcolor-hover); +} +.tiny-image .tiny-image-viewer__canvas { + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-image .tiny-image-viewer__actions { + left: 50%; + bottom: var(--ti-image-viewer-actions-bottom); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: var(--ti-image-viewer-actions-width); + height: var(--ti-image-viewer-actions-height); + padding: 0 23px; + background-color: var(--ti-image-viewer-close-bgcolor); + border-radius: var(--ti-image-viewer-actions-border-radius); +} +.tiny-image .tiny-image-viewer__actions-inner { + width: 100%; + height: 100%; + text-align: justify; + cursor: default; + font-size: var(--ti-image-viewer-actions-inner-font-size); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: var(--ti-image-viewer-actions-inner-justify-content); + -ms-flex-pack: var(--ti-image-viewer-actions-inner-justify-content); + justify-content: var(--ti-image-viewer-actions-inner-justify-content); +} +.tiny-image .tiny-image-viewer__actions-inner svg { + fill: var(--ti-image-viewer-actions-inner-color); + margin-right: 20px; +} +.tiny-image .tiny-image-viewer__actions-inner svg:hover { + cursor: pointer; +} +.tiny-image .tiny-image-viewer__next, +.tiny-image .tiny-image-viewer__prev { + top: 50%; + width: var(--ti-image-viewer-next-width); + height: var(--ti-image-viewer-next-height); + font-size: var(--ti-image-viewer-next-font-size); + background-color: var(--ti-image-viewer-close-bgcolor); +} +.tiny-image .tiny-image-viewer__next:hover, +.tiny-image .tiny-image-viewer__prev:hover { + cursor: pointer; + background-color: var(--ti-image-viewer-close-bgcolor-hover); +} +.tiny-image .tiny-image-viewer__prev { + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + left: 40px; +} +.tiny-image .tiny-image-viewer__next { + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 40px; + text-indent: 2px; +} +.tiny-image .tiny-image-viewer__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: 0.5; + background: var(--ti-image-viewer-mask-bgcolor); +} +.tiny-transition-icon-out-in-enter-active { + -webkit-animation: bounce-in 0.3s; + animation: bounce-in 0.3s; +} +.tiny-transition-icon-out-in-leave-active { + animation: bounce-in 0.3s reverse; +} +.tiny-transition-icon-scale-in-enter-active { + -webkit-animation: scale-in 0.3s; + animation: scale-in 0.3s; +} +.tiny-transition-icon-scale-in-leave-active { + animation: scale-in 0.3s reverse; +} +@-webkit-keyframes bounce-in { + 0% { + -webkit-transform: translateY(-50%) scale(0); + transform: translateY(-50%) scale(0); + } + 50% { + -webkit-transform: translateY(-50%) scale(1.2); + transform: translateY(-50%) scale(1.2); + } + 100% { + -webkit-transform: translateY(-50%) scale(1); + transform: translateY(-50%) scale(1); + } +} +@keyframes bounce-in { + 0% { + -webkit-transform: translateY(-50%) scale(0); + transform: translateY(-50%) scale(0); + } + 50% { + -webkit-transform: translateY(-50%) scale(1.2); + transform: translateY(-50%) scale(1.2); + } + 100% { + -webkit-transform: translateY(-50%) scale(1); + transform: translateY(-50%) scale(1); + } +} +@-webkit-keyframes scale-in { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@keyframes scale-in { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +.tiny-textarea { + --ti-input-color: var(--ti-base-color-info-normal); + --ti-input-bgcolor: var(--ti-base-color-light); + --ti-input-font-size: var(--ti-common-font-size-base); + --ti-input-height: var(--ti-base-size-height-normal); + --ti-input-border-radius: var(--ti-common-border-radius-normal); + --ti-input-border-color: var(--ti-base-color-border); + --ti-input-hover-border-color: var(--ti-base-color-border-hover); + --ti-input-active-border-color: var(--ti-base-color-brand-5); + --ti-input-placeholder-color: var(--ti-base-color-placeholder); + --ti-input-disabled-color: var(--ti-base-color-placeholder); + --ti-input-medium-height: var(--ti-base-size-height-medium); + --ti-input-small-height: var(--ti-base-size-height-small); + --ti-input-mini-height: var(--ti-base-size-height-mini); + --ti-input-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-input-disabled-border-color: var(--ti-common-color-line-disabled); + --ti-input-exceed-color: var(--ti-base-color-bg-8); + --ti-input-clear-color: #c0c4cc; + --ti-input-icon-font-size: var(--ti-common-font-size-1); + --ti-input-icon-close-color: #bfbfbf; + --ti-input-clear-color-hover: var(--ti-base-color-brand-6); + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: var(--ti-input-font-size); +} +.tiny-textarea.is-disabled .tiny-textarea__inner { + background-color: var(--ti-input-disabled-bgcolor); + border-color: var(--ti-input-border-color); + color: var(--ti-input-disabled-color); + cursor: not-allowed; +} +.tiny-textarea.is-disabled .tiny-textarea__inner::-moz-placeholder { + color: var(--ti-input-placeholder-color); + opacity: 1; +} +.tiny-textarea.is-disabled .tiny-textarea__inner:-ms-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea.is-disabled .tiny-textarea__inner::-webkit-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea.is-disabled .tiny-textarea__inner::-ms-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea.is-disabled .tiny-textarea__inner::placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea.is-exceed .tiny-textarea__inner { + border-color: var(--ti-input-exceed-color); +} +.tiny-textarea.is-exceed .tiny-input__count { + color: var(--ti-input-exceed-color); +} +.tiny-textarea .tiny-input__count { + color: #909399; + background: var(--ti-input-bgcolor); + font-size: var(--ti-input-font-size); + position: absolute; + bottom: 5px; + right: 16px; +} +.tiny-textarea__inner { + display: block; + width: 100%; + min-height: 60px; + min-height: calc(var(--ti-input-height, 30px) * 2); + color: var(--ti-input-color); + border: 1px solid var(--ti-input-border-color); + border-radius: var(--ti-input-border-radius); + background: var(--ti-input-bgcolor); + padding: 8px; + line-height: 1.5; + font-size: inherit; + resize: vertical; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-textarea__inner::-moz-placeholder { + color: var(--ti-input-placeholder-color); + opacity: 1; +} +.tiny-textarea__inner:-ms-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea__inner::-webkit-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea__inner::-ms-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea__inner::placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-textarea__inner:hover { + border-color: var(--ti-input-hover-border-color); +} +.tiny-textarea__inner:focus { + border-color: var(--ti-input-active-border-color); +} +.tiny-textarea__inner:focus, +.tiny-textarea__inner:hover { + outline: 0; +} +.tiny-input { + --ti-input-color: var(--ti-base-color-info-normal); + --ti-input-bgcolor: var(--ti-base-color-light); + --ti-input-font-size: var(--ti-common-font-size-base); + --ti-input-height: var(--ti-base-size-height-normal); + --ti-input-border-radius: var(--ti-common-border-radius-normal); + --ti-input-border-color: var(--ti-base-color-border); + --ti-input-hover-border-color: var(--ti-base-color-border-hover); + --ti-input-active-border-color: var(--ti-base-color-brand-5); + --ti-input-placeholder-color: var(--ti-base-color-placeholder); + --ti-input-disabled-color: var(--ti-base-color-placeholder); + --ti-input-medium-height: var(--ti-base-size-height-medium); + --ti-input-small-height: var(--ti-base-size-height-small); + --ti-input-mini-height: var(--ti-base-size-height-mini); + --ti-input-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-input-disabled-border-color: var(--ti-common-color-line-disabled); + --ti-input-exceed-color: var(--ti-base-color-bg-8); + --ti-input-clear-color: #c0c4cc; + --ti-input-icon-font-size: var(--ti-common-font-size-1); + --ti-input-icon-close-color: #bfbfbf; + --ti-input-clear-color-hover: var(--ti-base-color-brand-6); + position: relative; + font-size: var(--ti-input-font-size); + display: inline-table; + width: 100%; +} +.tiny-input::-webkit-scrollbar { + z-index: 11; + width: 6px; +} +.tiny-input::-webkit-scrollbar:horizontal { + height: 6px; +} +.tiny-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; +} +.tiny-input::-webkit-scrollbar-corner { + background: #fff; +} +.tiny-input::-webkit-scrollbar-track { + background: #fff; +} +.tiny-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; +} +.tiny-input.is-exceed .tiny-input__suffix .tiny-input__count { + color: var(--ti-input-exceed-color); +} +.tiny-input.is-disabled .tiny-input__inner { + cursor: not-allowed; + border: 1px solid var(--ti-input-disabled-border-color); + color: var(--ti-input-disabled-color); + background: var(--ti-input-disabled-bgcolor); +} +.tiny-input.is-disabled .tiny-input__inner::-moz-placeholder { + color: #999; + opacity: 1; +} +.tiny-input.is-disabled .tiny-input__inner:-ms-input-placeholder { + color: #999; +} +.tiny-input.is-disabled .tiny-input__inner::-webkit-input-placeholder { + color: #999; +} +.tiny-input.is-disabled .tiny-input__inner::-ms-input-placeholder { + color: #999; +} +.tiny-input.is-disabled .tiny-input__inner::placeholder { + color: #999; +} +.tiny-input.is-disabled .tiny-input__icon { + cursor: not-allowed; +} +.tiny-input.is-disabled .tiny-input__icon.tiny-svg, +.tiny-input.is-disabled .tiny-input__icon.tiny-svg:hover { + fill: var(--ti-input-disabled-color); +} +.tiny-input.is-disabled .tiny-input__prefix .tiny-svg, +.tiny-input.is-disabled .tiny-input__prefix .tiny-svg:hover, +.tiny-input.is-disabled .tiny-input__suffix .tiny-svg, +.tiny-input.is-disabled .tiny-input__suffix .tiny-svg:hover { + fill: var(--ti-input-disabled-color); +} +.tiny-input.is-exceed .tiny-input__inner { + border-color: var(--ti-input-exceed-color); +} +.tiny-input .tiny-input__clear { + font-size: var(--ti-input-icon-font-size); + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-input .tiny-input__clear, +.tiny-input .tiny-input__clear:hover { + fill: var(--ti-input-icon-close-color); +} +.tiny-input .tiny-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: var(--ti-input-font-size); +} +.tiny-input .tiny-input__count .tiny-input__count-inner { + background: var(--ti-input-bgcolor); + line-height: initial; + display: inline-block; +} +.tiny-input__inner { + width: 100%; + border: 1px solid var(--ti-input-border-color); + border-radius: var(--ti-input-border-radius); + color: var(--ti-input-color); + background: var(--ti-input-bgcolor); + font-size: inherit; + height: var(--ti-input-height); + line-height: var(--ti-input-height); + padding: 0 8px; + outline: 0; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-input__inner::-moz-placeholder { + color: var(--ti-input-placeholder-color); + opacity: 1; +} +.tiny-input__inner:-ms-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-input__inner::-webkit-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-input__inner::-ms-input-placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-input__inner::placeholder { + color: var(--ti-input-placeholder-color); +} +.tiny-input__inner:active, +.tiny-input__inner:focus, +.tiny-input__inner:hover { + outline: 0; + border-color: var(--ti-input-hover-border-color); +} +.tiny-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; +} +.tiny-input__prefix, +.tiny-input__suffix { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + -webkit-transition: all 0.3s; + transition: all 0.3s; + text-align: center; + color: var(--ti-input-border-color); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-input.is-active .tiny-input__inner, +.tiny-input__inner:focus { + border-color: var(--ti-input-active-border-color); + outline: 0; +} +.tiny-input__suffix { + right: 8px; + -webkit-transition: all 0.3s; + transition: all 0.3s; + pointer-events: none; +} +.tiny-input__suffix:hover { + cursor: pointer; +} +.tiny-input__suffix-inner { + pointer-events: all; + font-size: var(--ti-common-font-size-1); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-input__prefix { + left: 8px; + -webkit-transition: all 0.3s; + transition: all 0.3s; + font-size: var(--ti-input-icon-font-size); +} +.tiny-input__prefix > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-input__icon { + height: 100%; + line-height: var(--ti-input-height); + text-align: center; + -webkit-transition: all 0.3s; + transition: all 0.3s; + font-size: var(--ti-input-icon-font-size); + fill: var(--ti-input-hover-border-color); +} +.tiny-input__icon:hover { + fill: var(--ti-input-active-border-color); +} +.tiny-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; +} +.tiny-input__icon .svg-operationfaild, +.tiny-input__icon .svg-operationfaild:hover { + fill: var(--ti-input-icon-close-color); +} +.tiny-input__validateIcon { + pointer-events: none; +} +.tiny-input-suffix .tiny-input__inner { + padding-right: 30px; + padding-left: 8px; +} +.tiny-input-prefix .tiny-input__inner { + padding-left: 30px; + padding-right: 28px; +} +.tiny-input-medium .tiny-input__inner { + height: var(--ti-input-medium-height); + line-height: var(--ti-input-medium-height); +} +.tiny-input-medium .tiny-input__suffix { + line-height: calc(var(--ti-input-medium-height) - 2px); +} +.tiny-input-small .tiny-input__inner { + height: var(--ti-input-small-height); + line-height: var(--ti-input-small-height); +} +.tiny-input-small .tiny-input__suffix { + line-height: calc(var(--ti-input-small-height) - 2px); +} +.tiny-input-mini .tiny-input__inner { + height: var(--ti-input-mini-height); + line-height: var(--ti-input-mini-height); +} +.tiny-input-mini .tiny-input__suffix { + line-height: calc(var(--ti-input-mini-height) - 2px); +} +.tiny-input-group { + --ti-input-color: var(--ti-base-color-info-normal); + --ti-input-bgcolor: var(--ti-base-color-light); + --ti-input-font-size: var(--ti-common-font-size-base); + --ti-input-height: var(--ti-base-size-height-normal); + --ti-input-border-radius: var(--ti-common-border-radius-normal); + --ti-input-border-color: var(--ti-base-color-border); + --ti-input-hover-border-color: var(--ti-base-color-border-hover); + --ti-input-active-border-color: var(--ti-base-color-brand-5); + --ti-input-placeholder-color: var(--ti-base-color-placeholder); + --ti-input-disabled-color: var(--ti-base-color-placeholder); + --ti-input-medium-height: var(--ti-base-size-height-medium); + --ti-input-small-height: var(--ti-base-size-height-small); + --ti-input-mini-height: var(--ti-base-size-height-mini); + --ti-input-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-input-disabled-border-color: var(--ti-common-color-line-disabled); + --ti-input-exceed-color: var(--ti-base-color-bg-8); + --ti-input-clear-color: #c0c4cc; + --ti-input-icon-font-size: var(--ti-common-font-size-1); + --ti-input-icon-close-color: #bfbfbf; + --ti-input-clear-color-hover: var(--ti-base-color-brand-6); + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; +} +.tiny-input-group > .tiny-input__inner { + vertical-align: middle; + display: table-cell; +} +.tiny-input-group__append, +.tiny-input-group__prepend { + background-color: var(--ti-input-disabled-bgcolor); + color: var(--ti-input-placeholder-color); + border: 1px solid var(--ti-input-border-color); + border-radius: var(--ti-input-border-radius); + padding: 0 20px; + width: 1px; + vertical-align: middle; + display: table-cell; + position: relative; + white-space: nowrap; +} +.tiny-input-group__append:focus, +.tiny-input-group__prepend:focus { + outline: 0; +} +.tiny-input-group__append .tiny-button, +.tiny-input-group__append .tiny-select, +.tiny-input-group__prepend .tiny-button, +.tiny-input-group__prepend .tiny-select { + display: inline-block; + margin: -10px -20px; +} +.tiny-input-group__append .tiny-button, +.tiny-input-group__append .tiny-input, +.tiny-input-group__prepend .tiny-button, +.tiny-input-group__prepend .tiny-input { + font-size: inherit; +} +.tiny-input-group__append button.tiny-button, +.tiny-input-group__append div.tiny-select .tiny-input__inner, +.tiny-input-group__append div.tiny-select:hover .tiny-input__inner, +.tiny-input-group__prepend button.tiny-button, +.tiny-input-group__prepend div.tiny-select .tiny-input__inner, +.tiny-input-group__prepend div.tiny-select:hover .tiny-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; +} +.tiny-input-group__append .tiny-select .tiny-input.is-focus .tiny-input__inner, +.tiny-input-group__prepend .tiny-select .tiny-input.is-focus .tiny-input__inner { + border-color: transparent; +} +.tiny-input-group-prepend .tiny-input__inner, +.tiny-input-group__append { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.tiny-input-group-append .tiny-input__suffix { + top: calc(50% - 7px); +} +.tiny-input-group-append .tiny-input__inner, +.tiny-input-group__prepend { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.tiny-input-group__prepend { + border-right: 0; +} +.tiny-input-group__append { + border-left: 0; +} +.tiny-icon-loading { + font-size: var(--ti-common-font-size-1); + line-height: 1; + vertical-align: text-top; + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; +} +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0); + transform: rotateZ(0); + } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); + } +} +.tiny-ip-address { + --ti-ip-address-normal-height: var(--ti-base-size-height-normal); + --ti-ip-address-normal-color: var(--ti-base-color-info-normal); + --ti-ip-address-icon-color: var(--ti-base-color-info-normal); + --ti-ip-address-normal-disabled-color: var(--ti-base-color-placeholder); + --ti-ip-address-normal-border-color: var(--ti-base-color-border); + --ti-ip-address-normal-background: var(--ti-base-color-light); + --ti-ip-address-radius: var(--ti-common-border-radius-normal); + --ti-ip-address-font-size: var(--ti-common-font-size-base); + --ti-ip-address-border-hover-color: var(--ti-base-color-brand-6); + --ti-ip-address-disabled-background: var(--ti-common-color-bg-disabled); + --ti-ip-address-disabled-border: var(--ti-common-color-line-disabled); + width: 270px; + max-width: 100%; + outline: 0; + display: inline-table; + text-align: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-ip-address__input { + position: relative; + padding: 0; + width: 100%; + height: var(--ti-ip-address-normal-height); + border: 1px solid var(--ti-ip-address-normal-border-color); + color: var(--ti-ip-address-normal-color); + border-radius: var(--ti-ip-address-radius); + background: var(--ti-ip-address-normal-background); + font-size: var(--ti-ip-address-font-size); + padding: 0 8px; + display: block; + white-space: nowrap; + background-image: none; + -ms-user-select: auto; + -webkit-user-select: auto; + -o-user-select: auto; + -moz-user-select: auto; + user-select: auto; + -webkit-transition: border 0.3s; + transition: border 0.3s; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-ip-address__input.readonly, +.tiny-ip-address__input[readonly] { + cursor: not-allowed; + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-ip-address__input.readonly.active, +.tiny-ip-address__input.readonly:active, +.tiny-ip-address__input.readonly:focus, +.tiny-ip-address__input.readonly:hover, +.tiny-ip-address__input.readonly[active], +.tiny-ip-address__input[readonly].active, +.tiny-ip-address__input[readonly]:active, +.tiny-ip-address__input[readonly]:focus, +.tiny-ip-address__input[readonly]:hover, +.tiny-ip-address__input[readonly][active] { + border-color: var(--ti-ip-address-border-hover-color); +} +.tiny-ip-address__input::-moz-placeholder { + color: var(--ti-ip-address-normal-disabled-color); + opacity: 1; +} +.tiny-ip-address__input:-ms-input-placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input::-webkit-input-placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input::-ms-input-placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input::placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input:hover { + border: 1px solid var(--ti-ip-address-border-hover-color); + color: var(--ti-ip-address-normal-color); +} +.tiny-ip-address__input:hover::-moz-placeholder { + color: var(--ti-ip-address-normal-disabled-color); + opacity: 1; +} +.tiny-ip-address__input:hover:-ms-input-placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input:hover::-webkit-input-placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input:hover::-ms-input-placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input:hover::placeholder { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input.active, +.tiny-ip-address__input:active, +.tiny-ip-address__input:focus, +.tiny-ip-address__input[active] { + border: 1px solid var(--ti-ip-address-border-hover-color); + color: var(--ti-ip-address-normal-color); +} +.tiny-ip-address__input:focus::-moz-placeholder { + color: #d9d9d9; + opacity: 1; +} +.tiny-ip-address__input:focus:-ms-input-placeholder { + color: #d9d9d9; +} +.tiny-ip-address__input:focus::-webkit-input-placeholder { + color: #d9d9d9; +} +.tiny-ip-address__input:focus::-ms-input-placeholder { + color: #d9d9d9; +} +.tiny-ip-address__input:focus::placeholder { + color: #d9d9d9; +} +.tiny-ip-address__input.disabled, +.tiny-ip-address__input[disabled] { + cursor: not-allowed; + pointer-events: none; + border: 1px solid var(--ti-ip-address-disabled-border); + color: var(--ti-ip-address-normal-disabled-color); + background: var(--ti-ip-address-disabled-background); + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-ip-address__input.disabled .tiny-svg, +.tiny-ip-address__input[disabled] .tiny-svg { + fill: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input li { + float: left; + overflow: hidden; + width: 25%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-ip-address__input li > input { + border: none; + text-align: center; + outline: 0; + background: 0 0; + color: var(--ti-ip-address-normal-color); + width: calc(100% - 12px); + float: left; + height: calc(var(--ti-ip-address-normal-height) - 2px); + line-height: calc(var(--ti-ip-address-normal-height) - 2px); + padding: 0; +} +.tiny-ip-address__input li > input.active, +.tiny-ip-address__input li > input:active, +.tiny-ip-address__input li > input:focus, +.tiny-ip-address__input li > input[active] { + color: var(--ti-ip-address-normal-color); +} +.tiny-ip-address__input li > input:hover { + color: var(--ti-ip-address-normal-color); +} +.tiny-ip-address__input li > input.disabled, +.tiny-ip-address__input li > input[disabled] { + color: var(--ti-ip-address-normal-disabled-color); +} +.tiny-ip-address__input li svg { + vertical-align: middle; + fill: var(--ti-ip-address-icon-color); +} +.tiny-ip-address__input li:last-child > svg { + display: none; +} +.tiny-ip-address__input li:last-child > input { + width: 100%; +} +.tiny-ip-address__input li:only-child { + width: 100%; +} +.tiny-ip-address__input li:only-child > input { + width: 100%; + text-align: left; + padding: 0 8px; +} +.tiny-link { + --ti-link-font-size: var(--ti-common-font-size-1); + --ti-link-font-weight: var(--ti-common-font-weight-5); + --ti-link-border-color: var(--ti-base-color-brand-6); + --ti-link-default-color: #606266; + --ti-link-default-border-color: var(--ti-base-color-brand-6); + --ti-link-default-hover-color: var(--ti-base-color-brand-7); + --ti-link-default-disabled-color: #c0c4cc; + --ti-link-primary-color: var(--ti-base-color-brand-6); + --ti-link-primary-border-color: var(--ti-base-color-brand-6); + --ti-link-primary-hover-color: var(--ti-base-color-brand-5); + --ti-link-primary-disabled-color: #a0cfff; + --ti-link-danger-color: var(--ti-base-color-bg-8); + --ti-link-danger-border-color: var(--ti-base-color-bg-8); + --ti-link-danger-hover-color: var(--ti-base-color-bg-7); + --ti-link-danger-disabled-color: var(--ti-base-color-bg-5); + --ti-link-success-color: var(--ti-base-color-success-normal); + --ti-link-success-border-color: var(--ti-base-color-success-normal); + --ti-link-success-hover-color: var(--ti-base-color-success-hover); + --ti-link-success-disabled-color: var(--ti-base-color-bg-5); + --ti-link-warning-color: var(--ti-base-color-warning-normal); + --ti-link-warning-border-color: var(--ti-base-color-warning-normal); + --ti-link-warning-hover-color: var(--ti-base-color-warning-hover); + --ti-link-warning-disabled-color: var(--ti-base-color-bg-5); + --ti-link-info-color: var(--ti-base-color-info-normal); + --ti-link-info-border-color: var(--ti-base-color-info-normal); + --ti-link-info-hover-color: var(--ti-base-color-info-hover); + --ti-link-info-disabled-color: var(--ti-base-color-bg-5); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; + position: relative; + text-decoration: none; + outline: 0; + cursor: pointer; + padding: 0; + font-size: var(--ti-link-font-size); + font-weight: var(--ti-link-font-weight); +} +.tiny-link.is-underline:hover:after { + content: ''; + position: absolute; + left: 0; + right: 0; + height: 0; + bottom: 0; + border-bottom: 1px solid var(--ti-link-border-color); +} +.tiny-link.is-disabled { + cursor: not-allowed; +} +.tiny-link.tiny-link--default { + color: var(--ti-link-default-color); + fill: var(--ti-link-default-color); +} +.tiny-link.tiny-link--default.is-underline:hover:after, +.tiny-link.tiny-link--default:after { + border-color: var(--ti-link-default-border-color); +} +.tiny-link.tiny-link--default:hover { + color: var(--ti-link-default-hover-color); + fill: var(--ti-link-default-hover-color); + text-decoration: none; +} +.tiny-link.tiny-link--default.is-disabled { + color: var(--ti-link-default-disabled-color); + fill: var(--ti-link-default-disabled-color); +} +.tiny-link.tiny-link--primary { + color: var(--ti-link-primary-color); + fill: var(--ti-link-primary-color); +} +.tiny-link.tiny-link--primary.is-underline:hover:after, +.tiny-link.tiny-link--primary:after { + border-color: var(--ti-link-primary-border-color); +} +.tiny-link.tiny-link--primary:hover { + color: var(--ti-link-primary-hover-color); + fill: var(--ti-link-primary-hover-color); + text-decoration: none; +} +.tiny-link.tiny-link--primary.is-disabled { + color: var(--ti-link-primary-disabled-color); + fill: var(--ti-link-primary-disabled-color); +} +.tiny-link.tiny-link--danger { + color: var(--ti-link-danger-color); + fill: var(--ti-link-danger-color); +} +.tiny-link.tiny-link--danger.is-underline:hover:after, +.tiny-link.tiny-link--danger:after { + border-color: var(--ti-link-danger-border-color); +} +.tiny-link.tiny-link--danger:hover { + color: var(--ti-link-danger-hover-color); + fill: var(--ti-link-danger-hover-color); + text-decoration: none; +} +.tiny-link.tiny-link--danger.is-disabled { + color: var(--ti-link-danger-disabled-color); + fill: var(--ti-link-danger-disabled-color); +} +.tiny-link.tiny-link--success { + color: var(--ti-link-success-color); + fill: var(--ti-link-success-color); +} +.tiny-link.tiny-link--success.is-underline:hover:after, +.tiny-link.tiny-link--success:after { + border-color: var(--ti-link-success-border-color); +} +.tiny-link.tiny-link--success:hover { + color: var(--ti-link-success-hover-color); + fill: var(--ti-link-success-hover-color); + text-decoration: none; +} +.tiny-link.tiny-link--success.is-disabled { + color: var(--ti-link-success-disabled-color); + fill: var(--ti-link-success-disabled-color); +} +.tiny-link.tiny-link--warning { + color: var(--ti-link-warning-color); + fill: var(--ti-link-warning-color); +} +.tiny-link.tiny-link--warning.is-underline:hover:after, +.tiny-link.tiny-link--warning:after { + border-color: var(--ti-link-warning-border-color); +} +.tiny-link.tiny-link--warning:hover { + color: var(--ti-link-warning-hover-color); + fill: var(--ti-link-warning-hover-color); + text-decoration: none; +} +.tiny-link.tiny-link--warning.is-disabled { + color: var(--ti-link-warning-disabled-color); + fill: var(--ti-link-warning-disabled-color); +} +.tiny-link.tiny-link--info { + color: var(--ti-link-info-color); + fill: var(--ti-link-info-color); +} +.tiny-link.tiny-link--info.is-underline:hover:after, +.tiny-link.tiny-link--info:after { + border-color: var(--ti-link-info-border-color); +} +.tiny-link.tiny-link--info:hover { + color: var(--ti-link-info-hover-color); + fill: var(--ti-link-info-hover-color); + text-decoration: none; +} +.tiny-link.tiny-link--info.is-disabled { + color: var(--ti-link-info-disabled-color); + fill: var(--ti-link-info-disabled-color); +} +.tiny-link-menu { + --ti-link-menu-nav-item-color: var(--ti-base-color-brand-6); + --ti-link-menu-nav-item-border-color: #c4c4c4; + --ti-link-menu-btn-color: rgba(24, 144, 255, 0.8); + --ti-link-menu-btn-bgcolor: var(--ti-base-color-light); + --ti-link-menu-input-height: var(--ti-base-size-height-normal); + --ti-link-menu-input-font-size: var(--ti-common-font-size-base); + --ti-link-menu-input-color: var(--ti-base-color-info-normal); + --ti-link-menu-input-border-color: var(--ti-base-color-border); + --ti-link-menu-input-border-radius: var(--ti-common-border-radius-normal); + --ti-link-menu-tree-node-color: var(--ti-common-color-text-disabled); +} +.tiny-link-menu__nav .tiny-link-menu__nav-item { + color: var(--ti-link-menu-nav-item-color); + font-size: var(--ti-common-font-size-1); + border-right: 1px solid var(--ti-link-menu-nav-item-border-color); + padding: 0 8px; + line-height: 1; + display: inline-block; + background: 0; + white-space: nowrap; + text-decoration: none; + outline: 0; + text-align: center; + cursor: pointer; +} +.tiny-link-menu__nav .tiny-link-menu__nav-item .tiny-svg { + fill: var(--ti-link-menu-nav-item-color); + margin-right: 4px; +} +.tiny-link-menu__nav .tiny-link-menu__nav-item span { + line-height: 1; + vertical-align: middle; +} +.tiny-link-menu__nav .tiny-link-menu__btn { + color: var(--ti-link-menu-btn-color); + background: var(--ti-link-menu-btn-bgcolor); + padding: 0 8px; + line-height: 1; + outline: 0; + text-align: center; + border: none; + cursor: pointer; +} +.tiny-link-menu__nav .tiny-link-menu__btn .tiny-svg { + fill: var(--ti-link-menu-nav-item-color); + font-size: var(--ti-common-font-size-3); +} +.tiny-link-menu__dialog-btn { + text-align: center; +} +.tiny-link-menu .tiny-input { + width: 270px; + margin-bottom: 5px; +} +.tiny-link-menu .tiny-input .tiny-input__inner { + height: var(--ti-link-menu-input-height); + line-height: var(--ti-link-menu-input-height); + font-size: var(--ti-link-menu-input-font-size); + color: var(--ti-link-menu-input-color); + background: var(--ti-link-menu-btn-bgcolor); + border: 1px solid var(--ti-link-menu-input-border-color); + border-radius: var(--ti-link-menu-input-border-radius); + padding: 0 8px; + display: block; + white-space: nowrap; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; + -webkit-transition: border 0.3s; + transition: border 0.3s; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-link-menu .tiny-button:last-child { + color: var(--ti-link-menu-nav-item-color); + background-color: var(--ti-link-menu-btn-bgcolor); + border-color: var(--ti-link-menu-input-border-color); +} +.tiny-link-menu .tiny-tree .tiny-tree-node .tiny-checkbox { + -webkit-transform: translateY(1px); + transform: translateY(1px); +} +.tiny-link-menu .tiny-tree .tiny-tree-node .tree-node-body { + display: block; + text-decoration: none; +} +.tiny-link-menu .tiny-tree .tiny-tree-node .tree-node-body > .tiny-svg { + margin-left: 4px; +} +.tiny-link-menu .tiny-tree .tiny-tree-node .tree-node-name { + color: var(--ti-link-menu-tree-node-color); + font-size: var(--ti-link-menu-input-font-size); + border-radius: var(--ti-link-menu-input-border-radius); + padding-left: 4px; + font-weight: 700; + vertical-align: middle; +} +.tiny-link-menu .tiny-tree .tiny-tree-node.is-focusable .tree-node-name { + color: var(--ti-link-menu-input-color); +} +.tiny-link-menu .tiny-tree.tiny-link-menu__overflow .tree-node { + width: calc(100% - 36px); +} +.tiny-link-menu .tiny-tree.tiny-link-menu__overflow .tree-node-name { + width: 100%; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tiny-tree-node__content { + height: auto; + padding: 2px 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tiny-tree-node__content .tiny-tree-node__expand-icon { + -webkit-transform: translateY(-3px); + transform: translateY(-3px); +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tiny-tree-node__content .tiny-tree-node__expand-icon.expanded { + -webkit-transform: translateY(-3px) rotate(90deg); + transform: translateY(-3px) rotate(90deg); +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tiny-tree-node__content .tree-node { + width: 100%; +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tree-node-body { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + text-decoration: none; +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tree-node-body .tiny-svg { + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-transform: translateY(2px); + transform: translateY(2px); +} +.tiny-link-menu .tiny-tree.tiny-link-menu__wrap .tree-node-name { + display: inline-block; + white-space: normal; + line-height: normal; + word-break: break-word; + -webkit-transform: translateY(-2px); + transform: translateY(-2px); +} +.tiny-loading { + --ti-loading-text-color: var(--ti-base-color-brand-6); + --ti-loading-mask-bgcolor: rgba(255, 255, 255, 0.9); + --ti-loading-text-font-size: var(--ti-common-font-size-1); + --ti-loading-spinner-height: 42px; + --ti-loading-spinner-width: 42px; + --ti-loading-fullscreen-height: 50px; + --ti-loading-fullscreen-width: 50px; +} +.tiny-loading__mask { + position: absolute; + z-index: 2000; + background-color: var(--ti-loading-mask-bgcolor); + margin: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} +.tiny-loading__mask.is-fullscreen { + position: fixed; +} +.tiny-loading__mask.is-fullscreen .tiny-loading__spinner { + margin-top: -25px; +} +.tiny-loading__mask.is-fullscreen .tiny-loading__spinner .circular { + height: var(--ti-loading-fullscreen-height); + width: var(--ti-loading-fullscreen-width); +} +.tiny-loading__spinner { + top: 50%; + margin-top: -21px; + width: 100%; + text-align: center; + position: absolute; +} +.tiny-loading__spinner .tiny-loading__text { + color: var(--ti-loading-text-color); + margin: 3px 0; + font-size: var(--ti-loading-text-font-size); +} +.tiny-loading__spinner .circular { + height: var(--ti-loading-spinner-height); + width: var(--ti-loading-spinner-width); + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; +} +.tiny-loading__spinner .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: var(--ti-loading-text-color); + stroke-linecap: round; +} +.tiny-loading__spinner svg { + fill: var(--ti-loading-text-color); +} +.tiny-loading__parent-relative { + position: relative !important; +} +.tiny-loading__parent-hidden { + overflow: hidden !important; +} +.tiny-loading-fade-enter, +.tiny-loading-fade-leave-active { + opacity: 0; +} +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; + } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; + } +} +.tiny-icon-loading { + font-size: var(--ti-common-font-size-1); + line-height: 1; + vertical-align: text-top; + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; +} +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0); + transform: rotateZ(0); + } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); + } +} +.tiny-logout { + cursor: pointer; + display: inline; +} +.tiny-menu.menu-hor { + --ti-menubar-title-font-size: var(--ti-common-font-size-base-normal); + --ti-menubar-title-color: var(--ti-base-color-light); + --ti-menubar-li-height: var(--ti-common-size-12x); + --ti-menubar-menu-height: var(--ti-base-size-height-large); + --ti-menubar-menu-font-size: var(--ti-common-font-size-1); + --ti-menubar-submenu-normal-color: var(--ti-base-color-info-normal); + --ti-menubar-submenu-hover-color: var(--ti-base-color-hover-background); + --ti-menubar-submenu-active-color: var(--ti-base-color-selected-background); + --ti-menubar-submenu-li-height: var(--ti-common-size-10x); + --ti-menubar-background-normal: var(--ti-base-color-navigation-background); + --ti-menubar-background-active: #474c5e; + --ti-menubar-dropdown-border-color: #c9ccda; + --ti-menubar-dropdown-hover-border-color: #585f7f; + --ti-menubar-dropdown-hover-background: #191b25; + margin-bottom: 0; + min-height: 30px; + min-width: 300px; + font-size: var(--ti-menubar-menu-font-size, 14px); +} +.tiny-menu.menu-hor > ul > li { + display: inline-block; + margin-left: -4px; + position: relative; + text-align: center; + padding: 0; + margin: 0; +} +.tiny-menu.menu-hor > ul > li > a { + display: block; + padding: 0 10px; + min-width: 120px; + margin-right: -1px; + color: var(--ti-menubar-title-color); + font-size: var(--ti-common-font-size-2); +} +.tiny-menu.menu-hor > ul > li > a span.menu-icon { + margin-right: 8px; + top: -2px; +} +.tiny-menu.menu-hor > ul > li .submenu > li > a { + color: var(--ti-menubar-submenu-normal-color); +} +.tiny-menu.menu-hor > ul > li .submenu > li > a:focus, +.tiny-menu.menu-hor > ul > li .submenu > li > a:hover { + background: var(--ti-menubar-submenu-hover-color); +} +.tiny-menu.menu-hor > ul > li .submenu > li > a.active, +.tiny-menu.menu-hor > ul > li .submenu > li > a:active { + background: var(--ti-menubar-submenu-active-color); +} +.tiny-menu.menu-hor > ul > li .submenu > li > span.icon-starActive { + left: 8px; +} +.tiny-menu.menu-hor > ul > li .submenu > li > span.icon-transpond { + right: 8px; +} +.tiny-menu.menu-hor > ul > li.node-selected > a, +.tiny-menu.menu-hor > ul > li:hover > a { + border-right: 0; +} +.tiny-menu.menu-hor > ul > li:last-child > a { + border-right: 0; +} +.tiny-menu.menu-hor > ul li { + padding: 0; + height: var(--ti-menubar-li-height); + line-height: var(--ti-menubar-li-height); + position: relative; +} +.tiny-menu.menu-hor > ul li > a { + min-width: 60px; + width: 100%; + height: 100%; + color: var(--ti-menubar-title-color); +} +.tiny-menu.menu-hor > ul li > a:active, +.tiny-menu.menu-hor > ul li > a:focus, +.tiny-menu.menu-hor > ul li > a:hover { + color: var(--ti-menubar-title-color); + text-decoration: none; + background: var(--ti-menubar-background-active); +} +.tiny-menu.menu-hor ul { + padding: 0; + margin: 0; + background: var(--ti-menubar-background-normal); +} +.tiny-menu.menu-hor .menus-left, +.tiny-menu.menu-hor .menus-left .submenu { + left: auto; + right: 100%; +} +.tiny-menu.menu-hor .node-selected > .submenu { + left: auto; + margin-top: 2px; +} +.tiny-menu.menu-hor .node-selected > .submenu > li.node-selected { + background: var(--ti-menubar-background-active); +} +.tiny-menu.menu-hor .node-selected > .submenu > li.node-selected a { + color: var(--ti-menubar-submenu-normal-color); +} +.tiny-menu.menu-hor .node-selected > .submenu > li.node-selected a:hover { + color: #1890ff; + background: #fff; +} +.tiny-menu.menu-hor .node-selected > .submenu > li .submenu { + margin-top: -40px; + margin-left: 2px; +} +.tiny-menu.menu-hor .node-selected > .submenu .node-selected > .submenu { + left: 100%; +} +.tiny-menu.menu-hor .node-selected .submenu { + background: #fff; + border: 1px solid #d9d9d9; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); +} +.tiny-menu.menu-hor .menu-dropdown { + margin-top: 0; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group { + padding: 0 0 0 15px; + display: table-cell; + text-align: left; + word-break: break-all; + min-width: 330px; + max-width: 350px; + font-weight: 400; + vertical-align: top; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group li { + line-height: 30px; + display: inline-block; + margin-right: 8px; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group li.menu-row { + display: block; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group li.menu-row:after, +.tiny-menu.menu-hor .menu-dropdown .menu-group li.menu-row:before { + content: ''; + display: table; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group li.menu-row:after { + clear: both; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group li a { + padding-right: 8px; +} +.tiny-menu.menu-hor .menu-dropdown .menu-group:last-child { + border-right: 0; +} +.tiny-menu.menu-hor .menu-dropdown .memu-group-sub { + font-weight: 400; + border: none; + line-height: 25px; + display: block; +} +.tiny-menu.menu-hor .menu-dropdown .memu-group-sub:after, +.tiny-menu.menu-hor .menu-dropdown .memu-group-sub:before { + content: ''; + display: table; +} +.tiny-menu.menu-hor .menu-dropdown .memu-group-sub:after { + clear: both; +} +.tiny-menu.menu-hor .menu-dropdown .memu-group-sub li { + border: 0; +} +.tiny-menu.menu-hor .submenu { + margin-top: 0; +} +.tiny-menu.menu-hor .submenu li { + padding: 0; + height: var(--ti-menubar-submenu-li-height); + line-height: var(--ti-menubar-submenu-li-height); +} +.tiny-menu.menu-hor .submenu li .starActive-favorite { + color: #e1860a; +} +.tiny-menu.menu-hor .submenu li a { + padding: 0 35px 0 12px; + white-space: nowrap; + text-align: left; +} +.tiny-menu.menu-hor .submenu li span { + position: absolute; + color: var(--ti-menubar-submenu-normal-color); +} +.tiny-menu.menu-hor .menu-dropdown, +.tiny-menu.menu-hor .submenu { + position: absolute; + z-index: 10; + border-top: 0; + margin-top: 0; +} +.tiny-menu.menu-hor span.icon-starActive, +.tiny-menu.menu-hor span.icon-transpond { + position: absolute; +} +.tiny-menu.menu-hor span.icon-transpond { + right: 5px; + margin-right: 0; +} +.tiny-menu.menu-hor span.icon-starActive { + left: 0; +} +.tiny-menu.menu-hor span.icon-starActive + a { + padding-left: 35px; +} +.menu-roll > ul:after, +.menu-roll > ul:before { + content: ''; + display: table; +} +.menu-roll > ul:after { + clear: both; +} +.menu-roll > ul > li { + display: none; + margin-left: 0; +} +.menu-roll > ul > li:after, +.menu-roll > ul > li:before { + content: ''; + display: table; +} +.menu-roll > ul > li:after { + clear: both; +} +.menu-roll > ul > li a { + height: 45px; + font-weight: 700; + min-width: 30px; + margin: 0; + padding: 0 6px; + text-align: left; +} +.menu-roll > ul > li.node-selected > a { + float: left; + width: 100%; +} +.menu-roll .submenu { + text-align: left; + line-height: 30px; + left: 100%; + margin-top: 45px; + min-width: 180px; +} +.menu-roll .submenu .submenu { + margin-top: -31px; + top: inherit; +} +.menu-roll .submenu li { + padding: 0 10px; + height: 45px; + line-height: 45px; +} +.menu-roll .submenu li a { + padding: 0 6px; + display: block; + padding-right: 27px; +} +.menu-roll .submenu li span { + float: right; + margin: 5px 0 0 10px; +} +.menu-roll .submenu li span.tiny-icon { + float: none !important; +} +.menu-roll .submenu li span.icon-starActive, +.menu-roll .submenu li span.icon-transpond { + position: initial; +} +.menu-roll .node-selected { + display: block; +} +.menu-roll .node-selected > .submenu { + display: block; + left: 100%; + margin: 0; + min-width: 720px; +} +.menu-roll .node-selected > .submenu li { + float: left; +} +.roll-popup > ul > li { + display: block; +} +.roll-popup > ul > li > .submenu { + display: none; +} +.hor-dropdown { + position: relative; + z-index: 100; +} +.hor-dropdown .hor-dropdown-content, +.hor-dropdown > ul { + float: left; +} +.hor-dropdown-content { + position: relative; + color: #fff; +} +.hor-dropdown-content > span { + width: 80px; + text-align: center; + display: inline-block; + line-height: 31px; + position: relative; + z-index: 1; + background: var(--ti-menubar-background-normal); + line-height: 46px; +} +.hor-dropdown-content > span i { + width: 15px; + height: 16px; + padding-top: 1px; + border-radius: 2px; + cursor: pointer; + border: 1px solid var(--ti-menubar-dropdown-border-color); +} +.hor-dropdown-content .dropdown-menu { + position: absolute; + min-width: 140px; + padding: 5px; + right: 0; + margin-top: -1px; + background: var(--ti-menubar-background-normal); + padding: 5px 0; +} +.hor-dropdown-content .dropdown-menu li { + line-height: 24px; + padding: 2px 10px; + border: 1px solid var(--ti-menubar-background-normal); +} +.hor-dropdown-content .dropdown-menu li a { + color: #fff; +} +.hor-dropdown-content .dropdown-menu li:hover { + -webkit-box-shadow: inset 0 0 4px rgba(255, 255, 255, 0.6); + box-shadow: inset 0 0 4px rgba(255, 255, 255, 0.6); + border-radius: 3px; + border: 1px solid var(--ti-menubar-dropdown-hover-border-color); + background: var(--ti-menubar-dropdown-hover-background); +} +.menu-horline > ul > li { + position: inherit; +} +.menu-horline > ul > li a { + font-weight: 400; +} +.menu-horline > ul > li a span.tiny-icon { + margin-right: 5px; +} +.menu-horline > ul > li.node-more { + position: relative; +} +.menu-horline > ul > li.node-more > .submenu { + left: 0; +} +.menu-horline > ul > li.node-more > .submenu > li { + float: none; +} +.menu-horline > ul > li.node-more > .submenu > li > a { + text-align: left; +} +.menu-horline > ul > li.node-more > .submenu span.tiny-icon { + margin-left: 5px; +} +.menu-horline > ul > li.node-selected { + position: inherit; +} +.menu-horline .submenu { + min-width: 100%; +} +.menu-horline .submenu li { + float: left; +} +.menu-horline .submenu li a { + padding: 0 8px; + margin: 5px 0; + line-height: 35px; + text-align: center; +} +.menu-horline .submenu li span.tiny-icon { + float: none !important; +} +.menu-horline .submenu li span.icon-starActive, +.menu-horline .submenu li span.icon-transpond { + position: initial; +} +.menu-horline .node-selected > .submenu { + height: 45px; + left: 0; +} +.menu-horline .node-selected > .submenu li { + line-height: 45px; +} +.tiny-milestone { + --ti-milestone-color: var(--ti-base-color-light); + --ti-milestone-font-size: var(--ti-common-font-size-base); + --ti-milestone-icon-width: var(--ti-common-size-5x); + --ti-milestone-icon-height: var(--ti-common-size-5x); + --ti-milestone-line-background: #dbdbdb; + --ti-milestone-status-color: var(--ti-base-color-placeholder); + --ti-milestone-flag-tip-line-height: 20px; + --ti-milestone-flag-tip-background: var(--ti-base-color-border); + --ti-milestone-flag-tip-border-radius: var(--ti-common-border-radius-normal); + --ti-milestone-flag-content-border-radius: var(--ti-common-border-radius-1); + --ti-milestone-flag-content-font-size: var(--ti-common-font-size-1); + overflow: hidden; + padding-top: 38px; +} +.tiny-milestone .tiny-milestone__node { + display: block; + float: left; +} +.tiny-milestone .tiny-milestone__node::before { + content: ''; + width: 28px; + height: 28px; + display: block; + position: relative; + left: calc(50% - 14px); + top: 28px; + z-index: 15; +} +.tiny-milestone .tiny-milestone__node.is-solid::before { + background: var(--ti-milestone-color); +} +.tiny-milestone .tiny-milestone__node.is-solid .tiny-svg { + fill: var(--ti-milestone-color); +} +.tiny-milestone .tiny-milestone__node .iconfix { + font-size: var(--ti-common-font-size-4); +} +.tiny-milestone .tiny-milestone__icon { + background: var(--ti-milestone-color); + width: var(--ti-milestone-icon-width, 20px); + height: var(--ti-milestone-icon-height, 20px); + line-height: var(--ti-milestone-icon-height, 20px); + position: relative; + font-size: var(--ti-milestone-font-size, 12px); + text-align: center; + left: calc(50% - 10px); + top: 4px; + border-radius: 50%; + color: var(--ti-milestone-color); + cursor: pointer; + z-index: 15; +} +.tiny-milestone .tiny-milestone__icon.is-completed { + border: solid 2px; +} +.tiny-milestone .tiny-milestone__icon.is-completed .tiny-svg { + fill: #1890ff; + vertical-align: baseline; +} +.tiny-milestone .tiny-milestone__line { + height: 4px; + left: 50%; + top: -8px; + position: relative; + background: var(--ti-milestone-line-background); +} +.tiny-milestone .tiny-milestone__line-end { + width: 0; +} +.tiny-milestone .tiny-milestone__description { + line-height: 14px; + margin-top: 8px; + position: relative; + overflow: hidden; + text-align: center; +} +.tiny-milestone .tiny-milestone__description-name { + width: 100%; + color: #333; + font-size: var(--ti-milestone-font-size); + float: left; +} +.tiny-milestone .tiny-milestone__description-status { + color: var(--ti-milestone-status-color); + font-size: var(--ti-milestone-font-size); + float: left; + width: 100%; +} +.tiny-milestone .tiny-milestone__flag-tip { + position: fixed; + padding: 2px 4px; + line-height: var(--ti-milestone-flag-tip-line-height); + background: var(--ti-milestone-flag-tip-background); + border-radius: var(--ti-milestone-flag-tip-border-radius); + border: solid 1px var(--ti-milestone-flag-tip-background); + text-align: center; + word-wrap: break-word; +} +.tiny-milestone .tiny-milestone__flag-tip::before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border: 1px solid; + border-width: 8px 8px 0 8px; + border-color: #d9d9d9 transparent; + content: ''; + left: calc(50% - 4px); + bottom: -6px; +} +.tiny-milestone .tiny-milestone__flag { + position: absolute; + left: calc(50% - 29px); + bottom: 5px; + width: 58px; + text-align: center; + z-index: 1; +} +.tiny-milestone .tiny-milestone__flag:hover { + z-index: 2; +} +.tiny-milestone .tiny-milestone__flag-content { + width: 58px; + height: 34px; + padding: 0; + line-height: 15px; + font-size: var(--ti-milestone-flag-content-font-size); + border-radius: var(--ti-milestone-flag-content-border-radius); + color: var(--ti-milestone-color); + background: #333; + cursor: pointer; + vertical-align: middle; + display: table-cell; +} +.tiny-milestone .tiny-milestone__flag-content p { + color: var(--ti-milestone-color); + width: 58px; + font-size: var(--ti-common-font-size-base); + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 0 4px; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-milestone .tiny-milestone__flag-line { + height: 30px; + width: 1px; + margin-left: 50%; + background: #333; +} +.tiny-milestone .tiny-milestone__dot { + display: block; + background: var(--ti-milestone-flag-line-color); + border: solid 1px; + border-radius: 50%; + width: 5px; + height: 5px; + position: relative; + bottom: -29px; + right: 2px; +} +.tiny-modal { + --ti-modal-font-size: var(--ti-common-font-size-base); + --ti-modal-font-color: var(--ti-base-color-info-normal); + --ti-modal-font-family: Helvetica, Arial, 'Microsoft YaHei', sans-serif; + --ti-modal-primary-color: var(--ti-common-color-prompt); + --ti-modal-success-color: var(--ti-common-color-success); + --ti-modal-error-color: var(--ti-common-color-error); + --ti-modal-warning-color: var(--ti-common-color-warn); + --ti-modal-loading-color: var(--ti-common-color-prompt); + --ti-modal-alert-font-size: 22px; + --ti-modal-header-font-size: var(--ti-common-font-size-3); + --ti-modal-header-text-color: var(--ti-common-color-text-primary); + --ti-modal-header-font-weight: var(--ti-base-font-weight-bold); + --ti-modal-header-padding: 32px 32px 12px 32px; + --ti-modal-body-padding: 0 32px; + --ti-modal-footer-padding: 28px 32px 32px; + --ti-modal-footer-btn-border-radius: var(--ti-common-border-radius-normal); + --ti-modal-close-btn-font-size: var(--ti-common-font-size-1); + --ti-modal-close-btn-top: 13px; + --ti-modal-close-btn-scale: scale(1, 1); + --ti-modal-close-btn-padding: 0; + --ti-modal-small-btn-font-size: var(--ti-common-font-size-2); + --ti-modal-box-background-color: var(--ti-base-color-light); + --ti-modal-btn-color: var(--ti-base-color-common-5); + --ti-modal-box-shadow: var(--ti-common-shadow-4-down); + --ti-modal-box-border-radius: var(--ti-common-border-radius-normal); + --ti-modal-border-color: rgba(0, 0, 0, 0.2); + --ti-modal-close-btn-background-color-hover: var(--ti-base-color-light); + --ti-modal-footer-default-button: inline-block; + --ti-modal-box-width: 400px; +} +.tiny-modal__wrapper { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + font-size: var(--ti-modal-font-size); + color: var(--ti-modal-font-color); + font-family: var(--ti-modal-font-family, Helvetica, Arial, 'Microsoft YaHei', sans-serif); + -webkit-transition: top 0.4s; + transition: top 0.4s; +} +.tiny-modal__wrapper.active { + display: block; +} +.tiny-modal__wrapper.is__visible.is__mask:before { + background-color: rgba(0, 0, 0, 0.3); +} +.tiny-modal__wrapper.is__visible.type__message .tiny-modal__box { + -webkit-transform: translateY(0); + transform: translateY(0); +} +.tiny-modal__wrapper.is__visible:not(.type__message) .tiny-modal__box:not(.is__drag) { + top: 15vh; + -webkit-transition: top 0s ease-in, opacity 0.4s ease-in; + transition: top 0s ease-in, opacity 0.4s ease-in; +} +.tiny-modal__wrapper.is__visible .tiny-modal__box { + opacity: 1; + visibility: visible; +} +.tiny-modal__wrapper:not(.lock__view) { + pointer-events: none; +} +.tiny-modal__wrapper.lock__scroll { + overflow: hidden; +} +.tiny-modal__wrapper:not(.lock__scroll) { + overflow: auto; +} +.tiny-modal__wrapper:not(.type__message) .tiny-modal__text { + font-size: var(--ti-common-font-size-base); + color: var(--ti-common-color-text-secondary); + line-height: var(--ti-common-line-height-number); +} +.tiny-modal__wrapper.is__mask:before, +.tiny-modal__wrapper.lock__view:before { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + pointer-events: auto; +} +.tiny-modal__wrapper.is__animat.is__mask:before { + -webkit-transition: background-color, 0.2s, ease-in-out; + transition: background-color, 0.2s, ease-in-out; +} +.tiny-modal__wrapper.is__animat.type__message .tiny-modal__box:not(.is__drag) { + -webkit-transition: all, 0.2s, ease-out; + transition: all, 0.2s, ease-out; +} +.tiny-modal__wrapper.size__mini, +.tiny-modal__wrapper.size__small { + font-size: var(--ti-modal-font-size); +} +.tiny-modal__wrapper.size__mini .tiny-modal__box, +.tiny-modal__wrapper.size__small .tiny-modal__box { + padding: 6px 0; +} +.tiny-modal__wrapper.size__mini .tiny-modal__body, +.tiny-modal__wrapper.size__small .tiny-modal__body { + padding: 4px 14px 10px 14px; +} +.tiny-modal__wrapper.size__mini .tiny-modal__footer, +.tiny-modal__wrapper.size__small .tiny-modal__footer { + padding: 4px 14px 8px 14px; +} +.tiny-modal__wrapper.size__mini .tiny-modal__header, +.tiny-modal__wrapper.size__small .tiny-modal__header { + font-size: var(--ti-modal-header-font-size); + padding: 6px 30px 8px 14px; +} +.tiny-modal__wrapper.size__mini .tiny-modal__close-btn, +.tiny-modal__wrapper.size__mini .tiny-modal__zoom-btn, +.tiny-modal__wrapper.size__small .tiny-modal__close-btn, +.tiny-modal__wrapper.size__small .tiny-modal__zoom-btn { + font-size: var(--ti-modal-small-btn-font-size); + top: 10px; +} +.tiny-modal__wrapper.type__alert .tiny-modal__body, +.tiny-modal__wrapper.type__confirm .tiny-modal__body, +.tiny-modal__wrapper.type__message .tiny-modal__body { + white-space: normal; + word-break: break-word; +} +.tiny-modal__wrapper.type__message { + text-align: center; +} +.tiny-modal__wrapper.type__message .tiny-modal__box { + display: inline-block; + padding: 24px; + margin-top: 0; + width: auto; + -webkit-box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1); + -webkit-transform: translateY(-10%); + transform: translateY(-10%); +} +.tiny-modal__wrapper.type__message .tiny-modal__box .tiny-modal__body:after { + content: ''; + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; +} +.tiny-modal__wrapper.type__message .tiny-modal__box .tiny-modal__content { + max-width: 800px; + float: left; +} +.tiny-modal__wrapper.type__message .tiny-modal__status-wrapper { + font-size: var(--ti-modal-small-btn-font-size); + padding-right: 10px; +} +.tiny-modal__wrapper.type__alert .tiny-modal__box, +.tiny-modal__wrapper.type__confirm .tiny-modal__box, +.tiny-modal__wrapper.type__modal .tiny-modal__box { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + position: absolute; + left: 50%; + top: 0; + -webkit-box-shadow: var(--ti-modal-box-shadow); + box-shadow: var(--ti-modal-box-shadow); + border: 1px solid var(--ti-modal-border-color); +} +.tiny-modal__wrapper.type__alert .tiny-modal__box .tiny-modal__header, +.tiny-modal__wrapper.type__confirm .tiny-modal__box .tiny-modal__header, +.tiny-modal__wrapper.type__modal .tiny-modal__box .tiny-modal__header { + cursor: move; +} +.tiny-modal__wrapper.type__modal .tiny-modal__body { + overflow: auto; +} +.tiny-modal__wrapper.type__modal .tiny-modal__body .tiny-modal__content { + overflow: auto; +} +.tiny-modal__wrapper.type__alert .tiny-modal__status-wrapper, +.tiny-modal__wrapper.type__confirm .tiny-modal__status-wrapper { + font-size: var(--ti-modal-alert-font-size); + padding: 0 10px 0 2px; +} +.tiny-modal__wrapper.status__info .tiny-modal__status-wrapper { + fill: var(--ti-modal-primary-color); +} +.tiny-modal__wrapper.status__question .tiny-modal__status-wrapper, +.tiny-modal__wrapper.status__warning .tiny-modal__status-wrapper { + fill: var(--ti-modal-warning-color); +} +.tiny-modal__wrapper.status__success .tiny-modal__status-wrapper { + fill: var(--ti-modal-success-color); +} +.tiny-modal__wrapper.status__error .tiny-modal__status-wrapper { + fill: var(--ti-modal-error-color); +} +.tiny-modal__wrapper.status__loading .tiny-modal__status-wrapper { + fill: var(--ti-modal-loading-color); +} +.tiny-modal__wrapper.is__maximize .tiny-modal__box .tiny-modal__header { + cursor: default; +} +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .sb-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .selb-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .sest-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .st-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .swlb-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .swst-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .wl-resize, +.tiny-modal__wrapper.is__maximize .tiny-modal__resize .wr-resize { + display: none; +} +.tiny-modal__box { + width: var(--ti-modal-box-width); + background-color: var(--ti-modal-box-background-color); + border-radius: var(--ti-modal-box-border-radius); + font-size: var(--ti-modal-header-font-size); + -webkit-box-shadow: var(--ti-common-shadow-4-down); + box-shadow: var(--ti-common-shadow-4-down); + text-align: left; + pointer-events: auto; + visibility: hidden; + opacity: 0; +} +.tiny-modal__box.is__drag { + cursor: move; +} +.tiny-modal__box.is__drag .tiny-modal__body:after, +.tiny-modal__box.is__drag .tiny-modal__footer:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tiny-modal__box.is__drag .tiny-modal__body { + overflow: hidden; +} +.tiny-modal__box.is__drag .tiny-modal__body .tiny-modal__content { + overflow: hidden; +} +.tiny-modal__status-wrapper { + -ms-flex-negative: 0; + flex-shrink: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-modal__status-icon { + font-style: normal; +} +.tiny-modal__content { + width: 100%; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.tiny-modal__body, +.tiny-modal__footer, +.tiny-modal__header { + position: relative; +} +.tiny-modal__body { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: var(--ti-modal-body-padding); +} +.tiny-modal__header { + -ms-flex-negative: 0; + flex-shrink: 0; + color: var(--ti-modal-header-text-color); + font-size: var(--ti-modal-header-font-size); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-weight: var(--ti-modal-header-font-weight); + border-bottom: none; + padding: var(--ti-modal-header-padding); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tiny-modal__close-btn, +.tiny-modal__zoom-btn { + font-size: var(--ti-modal-close-btn-font-size); + position: absolute; + right: 24px; + top: var(--ti-modal-close-btn-top); + z-index: 1; + fill: var(--ti-modal-btn-color); + -webkit-transform: var(--ti-modal-close-btn-scale); + transform: var(--ti-modal-close-btn-scale); + cursor: pointer; + padding: var(--ti-modal-close-btn-padding); + border-radius: 4px; +} +.tiny-modal__close-btn:hover, +.tiny-modal__zoom-btn:hover { + fill: var(--ti-modal-btn-color); + background-color: var(--ti-modal-close-btn-background-color-hover); +} +.tiny-modal__zoom-btn { + right: 44px; + border-color: #c0c4cc; +} +.tiny-modal__zoom-btn:hover { + border-color: #606266; +} +.tiny-modal__footer { + -ms-flex-negative: 0; + flex-shrink: 0; + text-align: center; + padding: var(--ti-modal-footer-padding); +} +.tiny-modal__footer .tiny-button { + border-radius: var(--ti-modal-footer-btn-border-radius); +} +.tiny-modal__footer .tiny-button--default { + display: var(--ti-modal-footer-default-button); +} +.tiny-modal__resize .sb-resize, +.tiny-modal__resize .selb-resize, +.tiny-modal__resize .sest-resize, +.tiny-modal__resize .st-resize, +.tiny-modal__resize .swlb-resize, +.tiny-modal__resize .swst-resize, +.tiny-modal__resize .wl-resize, +.tiny-modal__resize .wr-resize { + position: absolute; + z-index: 100; +} +.tiny-modal__resize .wl-resize, +.tiny-modal__resize .wr-resize { + width: 8px; + height: 100%; + top: 0; + cursor: w-resize; +} +.tiny-modal__resize .wl-resize { + left: -3px; +} +.tiny-modal__resize .wr-resize { + right: -3px; +} +.tiny-modal__resize .selb-resize, +.tiny-modal__resize .sest-resize, +.tiny-modal__resize .swlb-resize, +.tiny-modal__resize .swst-resize { + width: 10px; + height: 10px; + z-index: 101; +} +.tiny-modal__resize .sest-resize, +.tiny-modal__resize .swst-resize { + top: -8px; +} +.tiny-modal__resize .selb-resize, +.tiny-modal__resize .swlb-resize { + bottom: -8px; +} +.tiny-modal__resize .sest-resize, +.tiny-modal__resize .swlb-resize { + cursor: sw-resize; +} +.tiny-modal__resize .selb-resize, +.tiny-modal__resize .swst-resize { + cursor: se-resize; +} +.tiny-modal__resize .swlb-resize, +.tiny-modal__resize .swst-resize { + left: -8px; +} +.tiny-modal__resize .selb-resize, +.tiny-modal__resize .sest-resize { + right: -8px; +} +.tiny-modal__resize .sb-resize, +.tiny-modal__resize .st-resize { + width: 100%; + height: 8px; + left: 0; + cursor: s-resize; +} +.tiny-modal__resize .st-resize { + top: -3px; +} +.tiny-modal__resize .sb-resize { + bottom: -3px; +} +@-webkit-keyframes modal-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@keyframes modal-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@-webkit-keyframes modal-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +@keyframes modal-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +@keyframes modal-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@keyframes modal-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; + } +} +.tiny-nav-menu { + --ti-nav-menu-height: var(--ti-base-size-height-large); + --ti-nav-menu-background: var(--ti-base-color-navigation-background); + --ti-nav-menu-item-font-size: var(--ti-common-font-size-2); + --ti-nav-menu-item-font-color: var(--ti-base-color-light); + --ti-nav-menu-item-hover-background: #474c5e; + --ti-nav-menu-setting-font-size: 22px; + --ti-nav-menu-popmenu-color: var(--ti-base-color-info-normal); + --ti-nav-menu-popmenu-border-color: var(--ti-base-color-border); + --ti-nav-menu-popmenu-more-item-height: 40px; + --ti-nav-menu-popmenu-more-item-hover-color: var(--ti-base-color-brand-6); + --ti-nav-menu-popmenu-more-item-hover-background: var(--ti-base-color-hover-background); + --ti-nav-menu-popmenu-more-item-active-background: var(--ti-base-color-selected-background); + --ti-nav-menu-popmenu-node-title-font-size: var(--ti-common-font-size-1); + --ti-nav-menu-popmenu-node-item-font-size: var(--ti-common-font-size-base, 12px); + background: var(--ti-nav-menu-background); + height: var(--ti-nav-menu-height); + position: relative; + padding: 0 24px; +} +.tiny-nav-menu > .slot-logo { + float: left; + overflow: hidden; + margin: 0 100px 0 0; + line-height: var(--ti-nav-menu-height); +} +.tiny-nav-menu > .slot-toolbar { + float: right; +} +.tiny-nav-menu > .slot-toolbar > .setting { + position: relative; + float: right; + margin: 0 0 0 24px; +} +.tiny-nav-menu > .slot-toolbar > .setting > .tiny-icon { + font-size: var(--ti-nav-menu-setting-font-size); + line-height: var(--ti-nav-menu-height); + cursor: pointer; + color: #fff; +} +.tiny-nav-menu > .slot-toolbar > .setting > .more-setting { + position: absolute; + right: 0; + min-width: 120px; + background-color: var(--ti-nav-menu-item-font-color); + border: 1px solid #d9d9d9; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); +} +.tiny-nav-menu > .slot-toolbar > .setting > .more-setting > .setting-item { + padding: 6px 10px; + color: #333; +} +.tiny-nav-menu > .slot-toolbar > .setting > .more-setting > .setting-item:hover { + background: var(--ti-nav-menu-popmenu-more-item-hover-background); +} +.tiny-nav-menu > .slot-toolbar > .setting > .more-setting > .setting-item:active { + background: var(--ti-nav-menu-popmenu-more-item-active-background); +} +.tiny-nav-menu > .slot-toolbar > .template-toolbar .tiny-selector { + margin-top: 0; +} +.tiny-nav-menu > .menu { + float: left; + height: var(--ti-nav-menu-height); + line-height: var(--ti-nav-menu-height); + overflow: hidden; +} +.tiny-nav-menu > .menu > li { + float: left; +} +.tiny-nav-menu > .menu > li > a, +.tiny-nav-menu > .menu > li > span { + padding: 0 12px; + font-size: var(--ti-nav-menu-item-font-size); + text-align: center; + color: var(--ti-nav-menu-item-font-color); + cursor: pointer; + display: block; + height: var(--ti-nav-menu-height); + line-height: var(--ti-nav-menu-height); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-nav-menu > .menu > li > a.active, +.tiny-nav-menu > .menu > li > a:hover, +.tiny-nav-menu > .menu > li > span.active, +.tiny-nav-menu > .menu > li > span:hover { + color: var(--ti-nav-menu-item-font-color); + background: var(--ti-nav-menu-item-hover-background); + text-decoration: none; +} +.tiny-nav-menu > .menu > li > a.selected, +.tiny-nav-menu > .menu > li > span.selected { + border-bottom: 3px solid #fff; +} +.tiny-nav-menu > .more { + padding: 0 12px; + font-size: var(--ti-nav-menu-item-font-size); + text-align: center; + color: var(--ti-nav-menu-item-font-color); + cursor: pointer; + display: inline-block; + height: var(--ti-nav-menu-height); + line-height: var(--ti-nav-menu-height); +} +.tiny-nav-menu > .more.active, +.tiny-nav-menu > .more.selected, +.tiny-nav-menu > .more:hover { + color: var(--ti-nav-menu-item-font-color); + background: var(--ti-nav-menu-item-hover-background); +} +.tiny-nav-menu > .more.selected { + border-bottom: 3px solid #fff; +} +.tiny-nav-menu > .popmenu { + position: absolute; + background: #fff; + width: 100%; + border: 1px solid var(--ti-nav-menu-popmenu-border-color); + -webkit-box-shadow: 0 0 4px var(--ti-nav-menu-popmenu-border-color); + box-shadow: 0 0 4px var(--ti-nav-menu-popmenu-border-color); + max-height: calc(100vh - var(--ti-nav-menu-height)); + overflow-y: auto; + left: 0; +} +.tiny-nav-menu > .popmenu > .more-menu { + float: left; + width: 160px; + height: 100%; + border-right: 1px solid var(--ti-nav-menu-popmenu-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-nav-menu > .popmenu > .more-menu > ul { + list-style: none; +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li { + height: var(--ti-nav-menu-popmenu-more-item-height); + line-height: var(--ti-nav-menu-popmenu-more-item-height); + padding: 0 12px 0 24px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li.active, +.tiny-nav-menu > .popmenu > .more-menu > ul > li:hover { + color: var(--ti-nav-menu-popmenu-more-item-hover-color); + background: var(--ti-nav-menu-popmenu-more-item-hover-background); +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li.active .more-icon, +.tiny-nav-menu > .popmenu > .more-menu > ul > li:hover .more-icon { + fill: var(--ti-nav-menu-popmenu-more-item-hover-color); +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li > a { + color: var(--ti-nav-menu-popmenu-color); +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li > a, +.tiny-nav-menu > .popmenu > .more-menu > ul > li > span { + display: block; + height: var(--ti-nav-menu-popmenu-more-item-height); + line-height: var(--ti-nav-menu-popmenu-more-item-height); + font-size: var(--ti-common-font-size-base); + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li > a.showicon, +.tiny-nav-menu > .popmenu > .more-menu > ul > li > span.showicon { + width: calc(100% - 12px); +} +.tiny-nav-menu > .popmenu > .more-menu > ul > li > .more-icon { + font-size: var(--ti-common-font-size-base); +} +.tiny-nav-menu > .popmenu > .sub-menu { + float: left; + width: calc(100% - 160px); + padding-left: 14px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-nav-menu > .popmenu > .sub-menu.full-width { + width: 100%; + padding: 0 86px; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul { + list-style: none; + overflow: hidden; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group { + list-style: none; + margin-bottom: 24px; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group:first-child { + margin-top: 18px; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .tiny-nav-menu__sub-menu-title { + color: var(--ti-nav-menu-popmenu-color); + font-size: var(--ti-nav-menu-popmenu-node-title-font-size); + font-weight: 700; + margin: 0 0 12px 0; + word-break: break-all; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .tiny-nav-menu__sub-menu-title:only-child { + border-bottom: none; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .sub-item { + font-size: var(--ti-nav-menu-popmenu-node-item-font-size); + padding: 4px 0; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .sub-item:hover { + background: var(--ti-nav-menu-popmenu-more-item-hover-background); +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .sub-item.active, +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .sub-item:active { + background: var(--ti-nav-menu-popmenu-more-item-active-background); +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .sub-item > a { + color: var(--ti-nav-menu-popmenu-color); + white-space: normal; + word-break: break-all; + text-decoration: none; +} +.tiny-nav-menu > .popmenu > .sub-menu > ul .group > .sub-item > span { + color: var(--ti-nav-menu-popmenu-color); + white-space: normal; + word-break: break-all; +} +.tiny-nav-menu > .single { + width: auto; + height: auto; + padding: 0; +} +.tiny-nav-menu > .single > .sub-menu.full-width { + padding: 0; +} +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group { + margin: 0; +} +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group .tiny-nav-menu__sub-menu-title { + padding: 18px 35px 0 12px; +} +.tiny-nav-menu + > .single + > .sub-menu.full-width + > ul + .group + .tiny-nav-menu__sub-menu-title.tiny-nav-menu__sub-menu-title-blank { + padding: 0 35px 0 12px; +} +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group > .title { + margin: 0; + line-height: 40px; + padding: 0 35px 0 12px; +} +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group > .sub-item { + height: 40px; + line-height: 40px; + padding: 0 35px 0 12px; + margin: 0; +} +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group > .sub-item:hover { + background: var(--ti-nav-menu-popmenu-more-item-hover-background); +} +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group > .sub-item.active, +.tiny-nav-menu > .single > .sub-menu.full-width > ul .group > .sub-item:active { + background: var(--ti-nav-menu-popmenu-more-item-active-background); +} +.tiny-nav-menu > .more-button { + float: left; + text-align: center; + padding: 0 12px; + height: var(--ti-nav-menu-height); + line-height: var(--ti-nav-menu-height); + overflow: hidden; + fill: #fff; + font-size: var(--ti-nav-menu-item-font-size); +} +.tiny-nav-menu > .more-button:hover { + background: var(--ti-nav-menu-item-hover-background); +} +.tiny-nav-menu > .more-button.float-right { + float: right; + margin-left: 10px; +} +.tiny-nav-menu > .slot-mobile-menu { + display: none; +} +@media (max-width: 768px) { + .tiny-nav-menu > .more-button.mobile { + display: none; + } + .tiny-nav-menu > .slot-mobile-menu { + display: block; + } + .tiny-nav-menu > .menu { + display: none; + } + .tiny-nav-menu > .popmenu .sub-menu .full-width { + padding: 0; + } +} +.tiny-notify { + --ti-notify-info-background: var(--ti-common-color-prompt-bg); + --ti-notify-info-icon-color: var(--ti-common-color-prompt); + --ti-notify-warning-background: var(--ti-common-color-warn-bg); + --ti-notify-warning-icon-color: var(--ti-common-color-warn); + --ti-notify-error-background: var(--ti-common-color-error-bg); + --ti-notify-error-icon-color: var(--ti-common-color-error); + --ti-notify-success-background: var(--ti-common-color-success-bg); + --ti-notify-success-icon-color: var(--ti-common-color-success); + --ti-notify-color: var(--ti-base-color-brand-6); + --ti-notify-border-radius: var(--ti-common-border-radius-normal); + --ti-notify-title-color: var(--ti-base-color-info-normal); + --ti-notify-title-font-size: var(--ti-common-font-size-1); + --ti-notify-title-font-weight: var(--ti-common-font-weight-7); + --ti-notify-content-font-size: var(--ti-common-font-size-1); + --ti-notify-content-margin: 0; + --ti-notify-message-margin: 0 0 0 10px; + --ti-notify-icon-size: var(--ti-common-font-size-5); + --ti-notify-close-color: var(--ti-base-color-common-7); + --ti-notify-max-width: 400px; + --ti-notify-box-shadow: var(--ti-common-shadow-4-down); + position: fixed; + z-index: 1101; + max-width: var(--ti-notify-max-width); + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: all 0.3s; + transition: all 0.3s; + overflow: hidden; + white-space: nowrap; + padding: 16px; + background: var(--ti-notify-background); + border-radius: 2px; + border-radius: var(--ti-notify-border-radius); + font-size: var(--ti-common-font-size-base); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-shadow: var(--ti-notify-box-shadow); + box-shadow: var(--ti-notify-box-shadow); +} +.tiny-notify--info { + background: var(--ti-notify-info-background); +} +.tiny-notify--warning { + background: var(--ti-notify-warning-background); +} +.tiny-notify--error { + background: var(--ti-notify-error-background); +} +.tiny-notify--success { + background: var(--ti-notify-success-background); +} +.tiny-notify.top-left { + left: 10px; + top: 25px; +} +.tiny-notify.bottom-left { + left: 10px; + bottom: 25px; +} +.tiny-notify.top-right { + right: 10px; + top: 25px; +} +.tiny-notify.bottom-right { + right: 10px; + bottom: 25px; +} +.tiny-notify .tiny-notify__title { + font-weight: var(--ti-notify-title-font-weight); + font-size: var(--ti-notify-title-font-size); + color: var(--ti-notify-title-color); + line-height: 1.74; +} +.tiny-notify .tiny-notify__icon { + color: var(--ti-notify-color); +} +.tiny-notify .tiny-notify__content { + color: var(--ti-notify-title-color); + font-size: var(--ti-common-font-size-base); + margin: 0; + padding: 0; + font-size: var(--ti-common-font-size-1); + word-break: break-all; + white-space: pre-wrap; +} +.tiny-notify .tiny-notify__closebtn { + cursor: pointer; + color: var(--ti-notify-color); + position: absolute; + top: 50%; + right: 10px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +.tiny-notify .tiny-notify__icon-zone { + width: 24px; + height: 24px; + font-size: var(--ti-notify-icon-size); +} +.tiny-notify .tiny-notify__message-zone { + width: calc(100% - 40px); + margin: var(--ti-notify-message-margin); +} +.tiny-notify .tiny-notify__close-zone { + width: 16px; + height: 16px; + font-size: var(--ti-common-font-size-2); + cursor: pointer; +} +.tiny-notify--info .tiny-notify__icon-zone { + fill: var(--ti-notify-info-icon-color); +} +.tiny-notify--info .tiny-notify__close-zone { + fill: var(--ti-notify-close-color); +} +.tiny-notify--warning .tiny-notify__icon-zone { + fill: var(--ti-notify-warning-icon-color); +} +.tiny-notify--warning .tiny-notify__close-zone { + fill: var(--ti-notify-close-color); +} +.tiny-notify--error .tiny-notify__icon-zone { + fill: var(--ti-notify-error-icon-color); +} +.tiny-notify--error .tiny-notify__close-zone { + fill: var(--ti-notify-close-color); +} +.tiny-notify--success .tiny-notify__icon-zone { + fill: var(--ti-notify-success-icon-color); +} +.tiny-notify--error .tiny-notify__close-zone { + fill: var(--ti-notify-close-color); +} +.tiny-notify__icon-zone .tiny-notify__icon-status { + position: relative; +} +.tiny-notify--no-close .tiny-notify__message-zone { + width: calc(100% - 24px); +} +.tiny-notify__message-zone .tiny-notify__title-wrapper { + height: 24px; + line-height: 24px; + color: var(--ti-notify-title-color); + font-size: var(--ti-notify-title-font-size); +} +.tiny-notify__message-zone .tiny-notify__content-wrapper { + height: auto; + line-height: 24px; + max-height: 96px; + overflow-y: auto; + font-size: var(--ti-notify-content-font-size); + margin: var(--ti-notify-content-margin); +} +.tiny-notify__close-zone .tiny-notify__icon-close { + position: relative; + top: -5px; +} +.tiny-notify--no-icon .tiny-notify__message-zone { + width: 100%; +} +.tiny-numeric { + --ti-numeric-input-width: 180px; + --ti-numeric-input-radius: var(--ti-common-border-radius-normal); + --ti-numeric-input-normal-border-color: var(--ti-base-color-border); + --ti-numeric-input-normal-color: var(--ti-base-color-info-normal); + --ti-numeric-input-normal-background: var(--ti-base-color-light); + --ti-numeric-input-normal-height: 28px; + --ti-numeric-input-normal-active-border-color: var(--ti-base-color-border-hover); + --ti-numeric-input-placeholder-color: var(--ti-base-color-placeholder); + --ti-numeric-input-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-numeric-input-icon-hover-color: var(--ti-base-color-border-hover); + --ti-numeric-input-icon-disabled-color: var(--ti-common-color-icon-disabled); + --ti-numeric-input-disabled-border-color: var(--ti-common-color-line-disabled); + position: relative; + display: inline-block; + width: var(--ti-numeric-input-width); +} +.tiny-numeric__input { + display: block; + line-height: normal; +} +.tiny-numeric__input.is-disabled .tiny-numeric__input-inner { + cursor: not-allowed; + pointer-events: none; + border: 1px solid var(--ti-numeric-input-disabled-border-color); + color: var(--ti-numeric-input-placeholder-color); + background: var(--ti-numeric-input-disabled-bgcolor); +} +.tiny-numeric__input.is-disabled .tiny-numeric__input-inner::-moz-placeholder { + color: #bfbfbf; + opacity: 1; +} +.tiny-numeric__input.is-disabled .tiny-numeric__input-inner:-ms-input-placeholder { + color: #bfbfbf; +} +.tiny-numeric__input.is-disabled .tiny-numeric__input-inner::-webkit-input-placeholder { + color: #bfbfbf; +} +.tiny-numeric__input.is-disabled .tiny-numeric__input-inner::-ms-input-placeholder { + color: #bfbfbf; +} +.tiny-numeric__input.is-disabled .tiny-numeric__input-inner::placeholder { + color: #bfbfbf; +} +.tiny-numeric__input.is-disabled .tiny-input__icon { + cursor: not-allowed; +} +.tiny-numeric__input.has-unit .tiny-numeric__input-inner { + padding: 0 50px 0 8px; +} +.tiny-numeric__input.text-align-left .tiny-numeric__input-inner { + text-align: left; +} +.tiny-numeric__input-inner { + width: 100%; + height: var(--ti-numeric-input-normal-height); + line-height: var(--ti-numeric-input-normal-height); + border: 1px solid var(--ti-numeric-input-normal-border-color); + border-radius: var(--ti-numeric-input-radius); + color: var(--ti-numeric-input-normal-color); + background: var(--ti-numeric-input-normal-background); + font-size: var(--ti-common-font-size-base); + padding: 0 calc(var(--ti-numeric-input-normal-height) + 8px); + outline: 0; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-align: center; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-numeric__input-inner::-moz-placeholder { + color: var(--ti-numeric-input-placeholder-color); + opacity: 1; +} +.tiny-numeric__input-inner:-ms-input-placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner::-webkit-input-placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner::-ms-input-placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner::placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner:hover { + border: 1px solid var(--ti-numeric-input-normal-active-border-color); +} +.tiny-numeric__input-inner:active, +.tiny-numeric__input-inner:focus { + border: 1px solid var(--ti-base-color-brand-6); +} +.tiny-numeric__input-inner:focus { + outline: 0; +} +.tiny-numeric__input-inner:focus::-moz-placeholder { + color: var(--ti-numeric-input-placeholder-color); + opacity: 1; +} +.tiny-numeric__input-inner:focus:-ms-input-placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner:focus::-webkit-input-placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner:focus::-ms-input-placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner:focus::placeholder { + color: var(--ti-numeric-input-placeholder-color); +} +.tiny-numeric__input-inner::-ms-clear { + display: none; + width: 0; + height: 0; +} +.tiny-numeric__decrease, +.tiny-numeric__increase { + position: absolute; + z-index: 1; + top: 1px; + width: 30px; + height: calc(100% - 2px); + line-height: calc(var(--ti-numeric-input-normal-height) - 2px); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: var(--ti-common-font-size-1); + text-align: center; + cursor: pointer; +} +.tiny-numeric__decrease svg, +.tiny-numeric__increase svg { + fill: var(--ti-numeric-input-normal-active-border-color); +} +.tiny-numeric__decrease:hover:not(.is-disabled) ~ .tiny-numeric__input .tiny-numeric__input-inner:not(.is-disabled), +.tiny-numeric__increase:hover:not(.is-disabled) ~ .tiny-numeric__input .tiny-numeric__input-inner:not(.is-disabled) { + border-color: var(--ti-numeric-input-icon-hover-color); +} +.tiny-numeric__decrease:hover:not(.is-disabled) + ~ .tiny-numeric__input.is-disabled + .tiny-numeric__input-inner:not(.is-disabled), +.tiny-numeric__increase:hover:not(.is-disabled) + ~ .tiny-numeric__input.is-disabled + .tiny-numeric__input-inner:not(.is-disabled) { + border-color: var(--ti-numeric-input-normal-border-color); +} +.tiny-numeric__decrease:hover svg, +.tiny-numeric__increase:hover svg { + fill: var(--ti-numeric-input-icon-hover-color); +} +.tiny-numeric__decrease.is-disabled, +.tiny-numeric__increase.is-disabled { + cursor: not-allowed; +} +.tiny-numeric__decrease.is-disabled svg, +.tiny-numeric__increase.is-disabled svg { + fill: var(--ti-numeric-input-icon-disabled-color); +} +.tiny-numeric__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid var(--ti-numeric-input-normal-border-color); +} +.tiny-numeric__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid var(--ti-numeric-input-normal-border-color); +} +.tiny-numeric__unit { + right: 0; + position: absolute; + z-index: 1; + top: 1px; + width: 50px; + height: calc(100% - 2px); + color: #666; + font-size: var(--ti-common-font-size-base); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + border-left: 1px solid #d9d9d9; + margin: 0 1px 0 0; + background: #f1f1f1; +} +.tiny-numeric.is-disabled .tiny-numeric__decrease, +.tiny-numeric.is-disabled .tiny-numeric__increase { + border-color: var(--ti-numeric-input-disabled-border-color); +} +.tiny-numeric.is-disabled .tiny-numeric__decrease svg, +.tiny-numeric.is-disabled .tiny-numeric__increase svg { + fill: var(--ti-numeric-input-icon-disabled-color); +} +.tiny-numeric.is-disabled .tiny-numeric__decrease:hover, +.tiny-numeric.is-disabled .tiny-numeric__increase:hover { + cursor: not-allowed; +} +.tiny-numeric.is-disabled .tiny-numeric__decrease:hover svg, +.tiny-numeric.is-disabled .tiny-numeric__increase:hover svg { + fill: var(--ti-numeric-input-icon-disabled-color); +} +.tiny-numeric--medium { + width: 270px; +} +.tiny-numeric--medium .tiny-numeric__decrease, +.tiny-numeric--medium .tiny-numeric__increase { + width: 42px; + line-height: 40px; + font-size: var(--ti-common-font-size-2); +} +.tiny-numeric--medium .tiny-numeric__input-inner { + height: 42px; + line-height: 42px; + padding-left: 43px; + padding-right: 43px; +} +.tiny-numeric--small { + width: 200px; +} +.tiny-numeric--small .tiny-numeric__decrease, +.tiny-numeric--small .tiny-numeric__increase { + width: 36px; + line-height: 34px; + font-size: var(--ti-common-font-size-1); +} +.tiny-numeric--small .tiny-numeric__input-inner { + height: 36px; + line-height: 36px; + padding-left: 37px; + padding-right: 37px; +} +.tiny-numeric--mini { + width: 130px; +} +.tiny-numeric--mini .tiny-numeric__decrease, +.tiny-numeric--mini .tiny-numeric__increase { + width: 24px; + line-height: 20px; + font-size: var(--ti-common-font-size-base); +} +.tiny-numeric--mini .tiny-numeric__input-inner { + height: 24px; + line-height: 24px; + padding-left: 35px; + padding-right: 35px; +} +.tiny-numeric.is-without-controls .tiny-numeric__input-inner { + padding-left: 8px; + padding-right: 8px; +} +.tiny-numeric.is-without-controls .tiny-numeric__input.has-unit .tiny-numeric__input-inner { + padding: 0 50px 0 8px; +} +.tiny-numeric.is-without-controls .tiny-numeric__input.text-align-left .tiny-numeric__input-inner { + text-align: left; +} +.tiny-numeric.is-controls-right .tiny-numeric__input-inner { + padding-left: 8px; + padding-right: 38px; +} +.tiny-numeric.is-controls-right .tiny-numeric__decrease, +.tiny-numeric.is-controls-right .tiny-numeric__increase { + height: auto; + line-height: 14px; +} +.tiny-numeric.is-controls-right .tiny-numeric__decrease svg, +.tiny-numeric.is-controls-right .tiny-numeric__increase svg { + -webkit-transform: scale(0.8); + transform: scale(0.8); +} +.tiny-numeric.is-controls-right .tiny-numeric__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid var(--ti-numeric-input-normal-border-color); +} +.tiny-numeric.is-controls-right .tiny-numeric__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid var(--ti-numeric-input-normal-border-color); + border-radius: 0 0 4px; +} +.tiny-numeric.is-controls-right .tiny-numeric__decrease svg { + -webkit-transform: scale(0.8) translateY(3px); + transform: scale(0.8) translateY(3px); +} +.tiny-numeric.is-controls-right[class*='medium'] [class*='decrease'], +.tiny-numeric.is-controls-right[class*='medium'] [class*='increase'] { + line-height: 20px; +} +.tiny-numeric.is-controls-right[class*='small'] [class*='decrease'], +.tiny-numeric.is-controls-right[class*='small'] [class*='increase'] { + line-height: 17px; +} +.tiny-numeric.is-controls-right[class*='mini'] [class*='decrease'], +.tiny-numeric.is-controls-right[class*='mini'] [class*='increase'] { + line-height: 8px; +} +.tiny-select-dropdown { + --ti-select-dropdown-item-color: var(--ti-base-color-info-normal); + --ti-select-dropdown-item-font-size: var(--ti-common-font-size-base); + --ti-select-dropdown-item-height: var(--ti-base-size-height-minor); + --ti-select-dropdown-item-disabled-color: var(--ti-base-color-placeholder); + --ti-select-dropdown-item-disabled-bgcolor: var(--ti-base-color-light); + --ti-select-dropdown-item-bgcolor: var(--ti-base-color-light); + --ti-select-dropdown-item-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-select-dropdown-item-selected-bgcolor: var(--ti-base-color-selected-background); + --ti-select-dropdown-item-selected-color: var(--ti-base-color-selected-font-color); + --ti-select-dropdown-item-icon-color: var(--ti-common-color-line-normal); + --ti-select-dropdown-item-icon-font-size: var(--ti-common-font-size-2); + --ti-select-dropdown-item-icon-selected-color: var(--ti-base-color-brand-6); +} +.tiny-select-dropdown.is-multiple .tiny-select-dropdown__item.selected { + color: var(--ti-select-dropdown-item-color); + background-color: var(--ti-select-dropdown-item-bgcolor); +} +.tiny-select-dropdown__item { + position: relative; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--ti-select-dropdown-item-color); + font-size: var(--ti-select-dropdown-item-font-size); + height: var(--ti-select-dropdown-item-height); + line-height: var(--ti-select-dropdown-item-height); + cursor: pointer; +} +.tiny-select-dropdown__item.is-disabled { + color: var(--ti-select-dropdown-item-disabled-color); + cursor: not-allowed; +} +.tiny-select-dropdown__item.is-disabled:hover { + background-color: var(--ti-select-dropdown-item-disabled-bgcolor); +} +.tiny-select-dropdown__item.hover, +.tiny-select-dropdown__item:hover { + background-color: var(--ti-select-dropdown-item-hover-bgcolor); +} +.tiny-select-dropdown__item.selected { + color: var(--ti-select-dropdown-item-selected-color); + background-color: var(--ti-select-dropdown-item-selected-bgcolor); +} +.tiny-select-dropdown__item .tiny-svg { + fill: var(--ti-select-dropdown-item-icon-color); + font-size: var(--ti-select-dropdown-item-icon-font-size); + margin-right: 8px; +} +.tiny-select-dropdown__item .checked-sur.tiny-svg, +.tiny-select-dropdown__item .halfselect.tiny-svg, +.tiny-select-dropdown__item.hover .tiny-svg, +.tiny-select-dropdown__item.selected .tiny-svg { + fill: var(--ti-select-dropdown-item-icon-selected-color); +} +.tiny-select-dropdown__item.memorize-highlight { + color: var(--ti-select-dropdown-item-icon-selected-color); +} +.tiny-select-group { + --ti-select-group-wrap-background: #e4e7ed; + --ti-select-group-title-font-size: var(--ti-common-font-size-base); + --ti-select-group-title-color: #909399; + --ti-select-group-title-line-height: var(--ti-base-size-height-minor); + margin: 0; + padding: 0; +} +.tiny-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; +} +.tiny-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; +} +.tiny-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 8px; + right: 8px; + bottom: 12px; + height: 1px; + background: var(--ti-select-group-wrap-background); +} +.tiny-select-group__wrap .tiny-select-group__title { + padding-left: 8px; + font-size: var(--ti-select-group-title-font-size); + color: var(--ti-select-group-title-color); + line-height: var(--ti-select-group-title-line-height); +} +.tiny-pager { + --ti-pager-normal-color: var(--ti-base-color-info-normal); + --ti-pager-primary-color: var(--ti-base-color-brand-6); + --ti-pager-primary-hover-color: var(--ti-base-color-brand-5); + --ti-pager-input-border-color: var(--ti-base-color-border); + --ti-pager-input-hover-border-color: var(--ti-common-color-line-hover); + --ti-pager-input-color-disabled: var(--ti-base-color-common-2); + --ti-pager-input-color-hover: var(--ti-base-color-brand-6); + --ti-pager-font-size: var(--ti-common-font-size-base); + --ti-pager-font-color: var(--ti-common-color-text-secondary); + --ti-pager-font-normal: var(--ti-base-color-secondary); + --ti-pager-height: var(--ti-base-size-height-mini); + --ti-pager-input-width: 40px; + --ti-pager-list-padding: 0 6px; + --ti-pager-list-light-shadow: none; + --ti-pager-input-height: var(--ti-base-size-height-mini); + --ti-pager-input-border-radius: var(--ti-common-border-radius-normal); + --ti-pager-poplist-item-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-pager-poplist-item-hover-text-color: var(--ti-common-color-text-highlight); + --ti-pager-poplist-item-selected-bgcolor: var(--ti-common-color-bg-emphasize); + --ti-pager-poplist-item-hover-border: 1px solid transparent; + text-align: left; + padding: 12px 0; + color: var(--ti-pager-font-color); +} +.tiny-pager .tiny-pager__group { + display: inline-block; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + vertical-align: middle; + font-size: var(--ti-pager-font-size); +} +.tiny-pager .tiny-pager__group > span { + display: inline-block; + vertical-align: middle; +} +.tiny-pager .tiny-pager__total { + height: 24px; + line-height: 24px; + font-size: 12px; + color: var(--ti-pager-normal-color); +} +.tiny-pager .tiny-pager__pages { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + font-size: var(--ti-pager-font-size); +} +.tiny-pager .tiny-pager__pages li { + background: 0 0; + display: inline-block; + font-size: var(--ti-pager-font-size); + cursor: pointer; + margin-right: 4px; + text-align: center; + line-height: var(--ti-pager-height); + border-radius: var(--ti-pager-input-border-radius); + height: var(--ti-pager-height); + color: var(--ti-pager-font-color); + padding: var(--ti-pager-list-padding); + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid transparent; + -webkit-transition: all 0.5s ease; + transition: all 0.5s ease; +} +.tiny-pager .tiny-pager__pages li a { + color: var(--ti-pager-font-color); +} +.tiny-pager .tiny-pager__pages li svg { + fill: var(--ti-pager-font-color); + vertical-align: middle; +} +.tiny-pager .tiny-pager__pages li:not(.dot):not(.is-active):hover { + color: var(--ti-pager-poplist-item-hover-text-color); + background-color: var(--ti-pager-poplist-item-hover-bgcolor); + -webkit-box-shadow: var(--ti-pager-list-light-shadow); + box-shadow: var(--ti-pager-list-light-shadow); + border: var(--ti-pager-poplist-item-hover-border); +} +.tiny-pager .tiny-pager__pages li:not(.dot):not(.is-active):hover svg { + fill: var(--ti-pager-poplist-item-hover-text-color); +} +.tiny-pager .tiny-pager__pages li.dot .icon { + font-size: 14px; +} +.tiny-pager .tiny-pager__pages li.is-active { + color: #fff; + background-color: var(--ti-pager-primary-color); +} +.tiny-pager__goto { + font-size: 0; +} +.tiny-pager__goto input[type='text'] { + width: var(--ti-pager-input-width); + text-align: center; + vertical-align: middle; + border-radius: var(--ti-pager-input-border-radius); + display: inline-block; + position: inherit; + height: var(--ti-pager-input-height); + line-height: var(--ti-pager-input-height); + border: 1px solid var(--ti-pager-input-border-color); + color: var(--ti-pager-normal-color); + font-size: var(--ti-pager-font-size); + -webkit-transition: border 0.3s; + transition: border 0.3s; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin-left: 14px; + margin-right: 4px; +} +.tiny-pager__goto input[type='text']:hover { + border: 1px solid var(--ti-pager-input-hover-border-color); + color: var(--ti-pager-normal-color); +} +.tiny-pager__goto input[type='text'].active, +.tiny-pager__goto input[type='text']:active, +.tiny-pager__goto input[type='text']:focus, +.tiny-pager__goto input[type='text'][active] { + border: 1px solid var(--ti-pager-primary-color); + -webkit-box-shadow: 0 0 0 transparent; + box-shadow: 0 0 0 transparent; +} +.tiny-pager__goto button { + height: var(--ti-pager-input-height); + line-height: var(--ti-pager-input-height); + border: 1px solid #d9d9d9; + color: var(--ti-pager-font-color); + vertical-align: middle; + border-radius: var(--ti-pager-input-border-radius); + background: #fff; + font-size: var(--ti-pager-font-size); + padding: 0 8px; + text-align: center; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + -webkit-transition: border 0.3s, color 0.3s, background 0.3s; + transition: border 0.3s, color 0.3s, background 0.3s; + outline: 0; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-pager__btn-next, +.tiny-pager__btn-prev { + height: var(--ti-pager-height); + width: 24px; + line-height: var(--ti-pager-height); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: var(--ti-pager-font-size); + font-weight: bolder; + color: var(--ti-pagination-prev-next-color); + outline: 0; + border: none; + background: 0 0; + margin-left: 4px; + padding: 0; + vertical-align: middle; + cursor: pointer; +} +.tiny-pager__btn-next span, +.tiny-pager__btn-prev span { + color: var(--ti-pager-primary-color); +} +.tiny-pager__btn-next svg, +.tiny-pager__btn-prev svg { + fill: var(--ti-pager-normal-color); + font-size: var(--ti-pager-font-size); + vertical-align: middle; +} +.tiny-pager__btn-next:hover, +.tiny-pager__btn-prev:hover { + background-color: var(--ti-pager-poplist-item-hover-bgcolor); +} +.tiny-pager__btn-next:hover svg, +.tiny-pager__btn-prev:hover svg { + fill: var(--ti-pager-poplist-item-hover-text-color); +} +.tiny-pager__btn-next[disabled], +.tiny-pager__btn-next[disabled]:hover, +.tiny-pager__btn-prev[disabled], +.tiny-pager__btn-prev[disabled]:hover { + background-color: transparent; + cursor: not-allowed; +} +.tiny-pager__btn-next[disabled] span, +.tiny-pager__btn-prev[disabled] span { + color: var(--ti-pagination-text-color-disabled); +} +.tiny-pager__btn-next[disabled] svg, +.tiny-pager__btn-prev[disabled] svg { + fill: var(--ti-pagination-text-color-disabled); +} +.tiny-pager__selector.tiny-popover.tiny-popper { + width: 60px; + padding: 0; +} +.tiny-pager__selector.tiny-popover.tiny-popper[x-placement^='bottom'] { + margin-top: 2px; +} +.tiny-pager__selector.tiny-popover.tiny-popper[x-placement^='top'] { + margin-bottom: 0; +} +.tiny-pager__selector-body { + max-height: 300px; + overflow-y: auto; + overflow-x: hidden; +} +.tiny-pager__selector-poplist .list-item { + min-height: 30px; + padding: 0 8px; + line-height: 30px; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-pager__selector-poplist .list-item:hover { + cursor: pointer; + background: var(--ti-pager-poplist-item-hover-bgcolor); + color: var(--ti-pager-poplist-item-hover-text-color); +} +.tiny-pager__selector-poplist .list-item.is-selected { + background: var(--ti-pager-poplist-item-selected-bgcolor); + color: var(--ti-pager-normal-color); +} +.tiny-pager__selector-poplist .list-item.is-selected:hover { + background: var(--ti-pager-poplist-item-selected-bgcolor); +} +.tiny-pager__selector-poplist .list-item.select-pre { + background: var(--ti-pager-poplist-item-hover-bgcolor); + color: var(--ti-pager-poplist-item-hover-text-color); +} +.tiny-pager__selector-poplist .list-item.select-pre.is-selected { + color: #fff; + background: var(--ti-pager-poplist-item-selected-bgcolor); +} +.tiny-pager .tiny-pager__popover { + margin: 0 4px 0 14px; +} +.tiny-pager .tiny-pager__sizes .tiny-pager__popover { + margin: 0; +} +.tiny-pager .tiny-pager__sizes + .tiny-pager__group { + margin: 0 16px; +} +.tiny-pager .tiny-pager__group + .tiny-pager__sizes { + margin: 0 16px; +} +.tiny-pager__input { + width: 60px; + vertical-align: middle; + position: relative; +} +.tiny-pager__input input { + width: 100%; + height: var(--ti-pager-input-height); + line-height: var(--ti-pager-input-height); + border: 1px solid var(--ti-pager-input-border-color); + color: var(--ti-pager-normal-color); + border-radius: var(--ti-pager-input-border-radius); + background: #fff; + font-size: var(--ti-pager-font-size, 12px); + padding: 0 8px; + display: block; + stop-color: var(--ti-pager-input-color-disabled); + lighting-color: var(--ti-pager-input-color-hover); + padding: 6px 10px; + white-space: nowrap; + -webkit-transition: border 0.3s; + transition: border 0.3s; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-pager__input input:hover { + outline: 0; + border-color: var(--ti-pager-input-hover-border-color); +} +.tiny-pager__input input:active, +.tiny-pager__input input:focus { + outline: 0; + border-color: var(--ti-pager-input-hover-border-color); +} +.tiny-pager__input-btn { + width: 24px; + height: var(--ti-pager-height); + line-height: var(--ti-pager-height); + position: absolute; + right: 2px; + bottom: 0; + top: 0; + outline: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + cursor: pointer; +} +.tiny-pager__input-btn svg { + font-size: var(--ti-pager-font-size); + fill: var(--ti-pager-font-normal); + vertical-align: middle; +} +.tiny-pager .tiny-popover__reference { + outline: 0; +} +@media (max-width: 768px) { + .tiny-pager { + text-align: left; + } + .tiny-pager .tiny-pager__pull-left { + float: none !important; + } +} +.dialog-pbi { + --ti-pbi-font-size-base: var(--ti-common-font-size-base); + --ti-pbi-selected-color: #138fc7; + --ti-pbi-selected-background: rgba(31, 158, 216, 0.12); + --ti-pbi-list-border-color: #ccc; +} +.dialog-pbi.tiny-dialog .dialog-body { + font-size: var(--ti-pbi-font-size-base); + font-weight: 400; +} +.dialog-pbi .tiny-selected { + color: var(--ti-pbi-selected-color); + background: var(--ti-pbi-selected-background); +} +.dialog-pbi .pbi_col { + width: 200px; + float: left; +} +.dialog-pbi .pbi_list { + height: 460px; + overflow-y: auto; + border: 1px solid var(--ti-pbi-list-border-color); + padding: 4px; +} +.tiny-dialog { + background: var(--ti-dialog-background); + padding: 0; + -webkit-box-shadow: var(--ti-dialog-shadow); + box-shadow: var(--ti-dialog-shadow); + -webkit-animation: dialog-fade-in 0.3s; + animation: dialog-fade-in 0.3s; +} +.tiny-dialog .dialog-head { + background: var(--ti-dialog-head-background); + font-size: var(--ti-dialog-head-font-size); +} +.tiny-dialog .dialog-head .dialog-title { + color: var(--ti-dialog-title-color); + display: inline-block; + font-size: var(--ti-dialog-title-font-size); + font-weight: var(--ti-dialog-title-font-weight); + margin: 0; +} +.tiny-dialog .dialog-head .dialog-operation { + float: right; +} +.tiny-dialog .dialog-head .dialog-operation > a { + color: var(--ti-dialog-operation-color); +} +.tiny-dialog .dialog-head .dialog-operation > a:hover { + color: var(--ti-dialog-operation-hover-color); +} +.tiny-dialog .dialog-head .dialog-operation > a .tiny-small-close { + font-size: var(--ti-dialog-head-font-size); +} +.tiny-dialog .dialog-body { + width: 100%; + padding: var(--ti-dialog-body-padding); + min-height: var(--ti-dialog-body-min-height); + font-size: var(--ti-dialog-body-font-size); + font-weight: 700; + overflow: auto; + overflow-x: hidden; + color: var(--ti-dialog-body-color); + max-height: 55vh !important; +} +.tiny-dialog .dialog-head-alert-confirm { + padding: 0 24px; + height: 40px; + line-height: 40px; + border-bottom: 1px solid #d9d9d9; +} +.tiny-toolbar { + clear: both; + text-align: center; +} +.tiny-transition-timepicker { + -webkit-animation: fadein 0.3s; + animation: fadein 0.3s; +} +.tiny-transition-timepicker-up { + -webkit-animation: fadeup 0.3s; + animation: fadeup 0.3s; +} +@-webkit-keyframes fadein { + 0% { + -webkit-transform: translateY(-200px); + transform: translateY(-200px); + z-index: -999; + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + z-index: 0; + } +} +@keyframes fadein { + 0% { + -webkit-transform: translateY(-200px); + transform: translateY(-200px); + z-index: -999; + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + z-index: 0; + } +} +@-webkit-keyframes fadeup { + 0% { + -webkit-transform: translateY(200px); + transform: translateY(200px); + z-index: -999; + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + z-index: 0; + } +} +@keyframes fadeup { + 0% { + -webkit-transform: translateY(200px); + transform: translateY(200px); + z-index: -999; + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + z-index: 0; + } +} +.tiny-date-table { + font-size: var(--ti-date-picker-font-size); + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-date-table.is-week-mode .tiny-date-table__row:hover td.available:hover { + color: var(--ti-date-picker-font-color); +} +.tiny-date-table.is-week-mode .tiny-date-table__row:hover td:first-child div { + margin-left: 5px; + border-top-left-radius: var(--ti-date-table-td-border-radius); + border-bottom-left-radius: var(--ti-date-table-td-border-radius); +} +.tiny-date-table.is-week-mode .tiny-date-table__row:hover td:last-child div { + margin-right: 5px; + border-top-right-radius: var(--ti-date-table-td-border-radius); + border-bottom-right-radius: var(--ti-date-table-td-border-radius); +} +.tiny-date-table.is-week-mode .tiny-date-table__row:hover div { + background-color: var(--ti-date-picker-hover-bgcolor); +} +.tiny-date-table.is-week-mode .tiny-date-table__row.current div { + background-color: var(--ti-date-table-week-current-bgcolor); +} +.tiny-date-table.is-week-mode .tiny-date-table__row.current div:hover { + background-color: var(--ti-date-table-week-current-hover-bgcolor); +} +.tiny-date-table.is-week-mode .tiny-date-table__row.current td.available:hover span { + background-color: transparent; +} +.tiny-date-table.is-week-mode .tiny-date-table__row.current td.available.end-date span, +.tiny-date-table.is-week-mode .tiny-date-table__row.current td.available.start-date span { + background-color: var(--ti-date-picker-current-select-bgcolor); +} +.tiny-date-table td { + width: var(--ti-date-table-td-width); + height: var(--ti-date-table-td-height); + padding: var(--ti-date-table-td-padding); + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + cursor: pointer; + position: relative; +} +.tiny-date-table td div { + height: 24px; + min-width: 36px; + padding: 3px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-date-table td span { + min-width: var(--ti-date-table-td-span-width); + height: var(--ti-date-table-td-span-height); + line-height: var(--ti-date-table-td-span-height); + display: block; + margin: 0 auto; + position: absolute; + left: 50%; + top: 5px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} +.tiny-date-table td.next-month, +.tiny-date-table td.pre-month { + color: var(--ti-date-table-td-pre-month-color); + cursor: pointer; +} +.tiny-date-table td.next-month span:hover, +.tiny-date-table td.pre-month span:hover { + background: var(--ti-datetime-beside-day-bg-color-hover); +} +.tiny-date-table td.today { + position: relative; + color: var(--ti-date-table-td-today-color); +} +.tiny-date-table td.today:after { + content: ''; + width: 12px; + height: 1px; + background: var(--ti-date-table-td-today-border-color); + position: absolute; + left: 0; + right: 0; + margin: auto; + bottom: 5px; +} +.tiny-date-table td.today.end-date span, +.tiny-date-table td.today.start-date span { + color: var(--ti-date-table-td-nomal-color); +} +.tiny-date-table td.available:hover span { + background-color: var(--ti-date-picker-hover-bgcolor); + border-radius: var(--ti-date-picker-current-border-radius); +} +.tiny-date-table td.current:not(.disabled) span { + color: var(--ti-date-table-td-nomal-color); + background-color: var(--ti-date-picker-current-select-bgcolor); + border-radius: var(--ti-date-picker-current-border-radius); +} +.tiny-date-table td.end-date div, +.tiny-date-table td.start-date div { + color: var(--ti-date-table-td-nomal-color); +} +.tiny-date-table td.end-date span, +.tiny-date-table td.start-date span { + background-color: var(--ti-date-picker-current-select-bgcolor); +} +.tiny-date-table td.start-date div { + margin-left: 5px; + border-top-left-radius: var(--ti-date-table-td-border-radius); + border-bottom-left-radius: var(--ti-date-table-td-border-radius); +} +.tiny-date-table td.end-date div { + margin-right: 5px; + border-top-right-radius: var(--ti-date-table-td-border-radius); + border-bottom-right-radius: var(--ti-date-table-td-border-radius); +} +.tiny-date-table td.disabled div { + background-color: var(--ti-date-picker-disabled-bgcolor); + opacity: 1; + cursor: not-allowed; + color: var(--ti-date-picker-disabled-color); +} +.tiny-date-table td.in-range div { + background-color: var(--ti-date-picker-range-bgcolor); +} +.tiny-date-table td.in-range div:hover { + background-color: var(--ti-date-picker-range-hover-bgcolor); +} +.tiny-date-table td.in-range.end-date:hover span, +.tiny-date-table td.in-range.start-date:hover span { + background-color: var(--ti-date-picker-current-select-bgcolor); +} +.tiny-date-table td.available { + padding: 0; +} +.tiny-date-table td.selected div { + margin-left: 5px; + margin-right: 5px; + background-color: var(--ti-date-table-td-range-bgcolor); +} +.tiny-date-table td.selected div:hover { + background-color: var(--ti-date-table-td-range-bgcolor); +} +.tiny-date-table td.selected span { + background-color: var(--ti-date-picker-current-select-bgcolor); + color: var(--ti-date-table-td-nomal-color); + border: none; +} +.tiny-date-table td.selected.available:hover span { + background-color: var(--ti-date-picker-current-select-bgcolor); +} +.tiny-date-table td.week { + font-size: 80%; + color: var(--ti-date-picker-font-color); +} +.tiny-date-table th { + color: var(--ti-date-table-th-font-color); + font-weight: 400; +} +.tiny-month-table { + font-size: var(--ti-date-picker-font-size); + margin: -1px; + border-collapse: collapse; +} +.tiny-month-table td { + text-align: center; + padding: 16px 0; + cursor: pointer; +} +.tiny-month-table td div { + height: 32px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-month-table td.today .cell { + color: var(--ti-month-table-td-color); + font-weight: 700; +} +.tiny-month-table td.today.end-date .cell, +.tiny-month-table td.today.start-date .cell { + color: var(--ti-month-table-td-date-color); +} +.tiny-month-table td.disabled .cell { + background-color: var(--ti-date-picker-disabled-bgcolor); + cursor: not-allowed; + color: var(--ti-date-picker-disabled-color); +} +.tiny-month-table td.disabled .cell:hover { + color: var(--ti-date-picker-disabled-color); +} +.tiny-month-table td .cell { + width: 100%; + height: 32px; + line-height: 32px; + display: block; + color: var(--ti-date-picker-font-color); +} +.tiny-month-table td .cell:hover { + background: var(--ti-date-picker-hover-bgcolor); +} +.tiny-month-table td.in-range div, +.tiny-month-table td.in-range div:hover { + background-color: var(--ti-month-table-td-range-bgcolor); +} +.tiny-month-table td.end-date div, +.tiny-month-table td.start-date div { + color: var(--ti-month-table-td-date-color); +} +.tiny-month-table td.end-date .cell, +.tiny-month-table td.start-date .cell { + color: var(--ti-month-table-td-date-color); + background-color: var(--ti-month-table-td-color); +} +.tiny-month-table td:not(.in-range) { + padding: 16px 4px; +} +.tiny-month-table td:not(.in-range) div { + height: auto; + padding: 0; +} +.tiny-month-table td:not(.in-range) .cell { + width: auto; + height: 32px; + line-height: 32px; + border-radius: 2px; +} +.tiny-month-table td.current:not(.disabled) .cell, +.tiny-month-table td.current:not(.disabled) .cell:hover { + color: var(--ti-date-table-td-nomal-color); + background: var(--ti-month-table-td-color); +} +.tiny-year-table { + font-size: var(--ti-date-picker-font-size); + margin: -1px; + border-collapse: collapse; +} +.tiny-year-table td { + text-align: center; + cursor: pointer; +} +.tiny-year-table td.today .cell { + color: var(--ti-year-table-td-color); + font-weight: 700; +} +.tiny-year-table td.disabled .cell { + background-color: var(--ti-date-picker-disabled-bgcolor); + cursor: not-allowed; + color: var(--ti-date-picker-disabled-color); +} +.tiny-year-table td.disabled .cell:hover { + color: var(--ti-date-picker-disabled-color); +} +.tiny-year-table td .cell { + width: 48px; + height: 24px; + line-height: 24px; + display: block; + color: var(--ti-date-picker-font-color); + margin: 0 auto; + border-radius: 2px; +} +.tiny-year-table td .cell:hover { + background: var(--ti-date-picker-hover-bgcolor); +} +.tiny-year-table td.current:not(.disabled) .cell { + color: var(--ti-date-table-td-nomal-color); + background: var(--ti-date-picker-current-select-bgcolor); +} +.tiny-year-table td.available { + padding: 16px 3px; +} +.tiny-year-table .tiny-icon { + color: var(--ti-year-table-td-icon-color); +} +.tiny-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; +} +.tiny-time-spinner__wrapper .tiny-scrollbar__wrap:not(.tiny-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; +} +.tiny-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; +} +.tiny-time-spinner__wrapper.is-arrow .tiny-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); +} +.tiny-time-spinner__wrapper.is-arrow .tiny-time-spinner__item:hover:not(.disabled):not(.active) { + background: var(--ti-date-picker-bgcolor); + cursor: default; +} +.tiny-time-spinner__wrapper .tiny-time-spinner__list { + -webkit-transform: translateY(-6px); + transform: translateY(-6px); +} +.tiny-time-spinner__wrapper:last-child .tiny-time-spinner__list { + border-right: 0; +} +.tiny-time-spinner__arrow { + font-size: var(--ti-date-picker-font-size); + color: var(--ti-time-spinner-arrow-color); + height: 30px; + line-height: 30px; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + cursor: pointer; +} +.tiny-time-spinner__arrow .tiny-svg { + fill: var(--ti-time-spinner-arrow-color); +} +.tiny-time-spinner__arrow:hover .tiny-svg { + fill: var(--ti-time-spinner-arrow-hover-color); +} +.tiny-time-spinner__arrow.tiny-icon-arrow-up { + top: 10px; +} +.tiny-time-spinner__arrow.tiny-icon-arrow-down { + bottom: 10px; +} +.tiny-time-spinner__arrow.tiny-input { + width: 70%; +} +.tiny-time-spinner__arrow.tiny-input .tiny-input__inner { + padding: 0; + text-align: center; +} +.tiny-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; + border-right: 1px solid var(--ti-time-spinner-list-border-color); +} +.tiny-time-spinner__list::after, +.tiny-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; +} +.tiny-time-spinner__item { + font-size: var(--ti-date-picker-font-size); + color: var(--ti-date-picker-font-color); + height: 32px; + line-height: 32px; +} +.tiny-time-spinner__item:hover:not(.disabled):not(.active) { + background: var(--ti-date-picker-selected-bgcolor); + cursor: pointer; +} +.tiny-time-spinner__item.active:not(.disabled) { + color: var(--ti-time-spinner-item-active-color); + font-weight: var(--ti-time-spinner-item-font-weight); + background-color: var(--ti-time-spinner-item-bgcolor); +} +.tiny-time-spinner__item.disabled { + color: var(--ti-date-picker-disabled-color); + cursor: not-allowed; +} +.tiny-time-spinner.has-seconds .tiny-time-spinner__wrapper { + width: 33.3%; +} +.tiny-date-editor { + --ti-date-picker-width: 280px; + --ti-date-picker-font-size: var(--ti-common-font-size-base); + --ti-date-picker-font-color: var(--ti-base-color-info-normal); + --ti-date-picker-bgcolor: var(--ti-base-color-light); + --ti-date-picker-border-radius: var(--ti-common-border-radius-normal); + --ti-date-picker-border-color: var(--ti-common-color-line-dividing); + --ti-date-picker-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-disabled-color: var(--ti-common-color-text-disabled); + --ti-date-picker-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-date-picker-selected-bgcolor: #f2f2f3; + --ti-date-picker-icon-font-size: var(--ti-common-font-size-1); + --ti-date-picker-current-select-bgcolor: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-color: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-radius: 0; + --ti-date-picker-range-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-range-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-td-width: 36px; + --ti-date-table-td-height: 34px; + --ti-date-table-td-padding: 4px 0; + --ti-date-table-td-span-width: 36px; + --ti-date-table-td-span-height: 24px; + --ti-date-table-th-font-color: var(--ti-base-color-common-2); + --ti-date-table-td-border-radius: 0; + --ti-date-table-td-pre-month-color: var(--ti-base-color-common-2); + --ti-date-table-td-nomal-color: var(--ti-base-color-light); + --ti-date-table-td-range-bgcolor: #f2f6fc; + --ti-date-table-td-today-border-color: var(--ti-base-color-brand-6); + --ti-date-table-td-today-color: var(--ti-date-picker-font-color); + --ti-date-table-week-current-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-week-current-hover-bgcolor: var(--ti-base-color-brand-3); + --ti-month-table-td-color: var(--ti-base-color-brand-7); + --ti-month-table-td-range-bgcolor: #f2f6fc; + --ti-month-table-td-date-color: var(--ti-base-color-light); + --ti-month-table-td-date-border-radius: 24px; + --ti-year-table-td-color: var(--ti-base-color-brand-7); + --ti-year-table-td-icon-color: #303133; + --ti-time-spinner-arrow-color: #909399; + --ti-time-spinner-arrow-hover-color: var(--ti-base-color-brand-7); + --ti-time-spinner-item-active-color: #303133; + --ti-time-spinner-item-font-weight: 700; + --ti-time-spinner-item-bgcolor: transparent; + --ti-time-spinner-list-border-color: transparent; + --ti-picker-panel-line-height: var(--ti-base-size-height-minor); + --ti-picker-panel-shortcut-font-size: var(--ti-common-font-size-1); + --ti-picker-panel-icon-btn-color: var(--ti-base-color-common-2); + --ti-picker-panel-icon-btn-hover-color: var(--ti-base-color-brand-7); + --ti-picker-panel-icon-btn-disabled-color: var(--ti-base-color-bg-5); + --ti-picker-panel-border-color: rgba(0, 0, 0, 0.15); + --ti-picker-panel-box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + --ti-date-picker-header-label-hover-color: var(--ti-base-color-brand-7); + --ti-date-range-picker-header-font-size: var(--ti-common-font-size-2); + --ti-date-range-picker-time-header-icon-color: #303133; + --ti-time-range-picker-header-font-size: var(--ti-common-font-size-1); + --ti-time-panel-footer-height: 36px; + --ti-time-panel-btn-color: #303133; + --ti-time-panel-btn-confirm-color: var(--ti-base-color-brand-7); + --ti-range-separator-color: #303133; + --ti-time-panel-border-color: var(--ti-date-picker-border-color); + --ti-time-panel-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-time-panel-content-split-line-display: block; + --ti-time-panel-btn-cancel-display: inline-block; + --ti-time-panel-btn-bgcolor: transparent; + --ti-time-panel-btn-padding: 0 5px; + --ti-time-panel-btn-radius: var(--ti-common-border-radius-normal); + --ti-time-panel-btn-height: 28px; + --ti-time-panel-btn-min-width: inherit; + --ti-time-panel-btn-font-weight: 800; + --ti-time-panel-btn-confirm-hover-bgcolor: transparent; + --ti-date-editor-input-icon-fill-color: #575d6c; + position: relative; + display: inline-block; + text-align: left; +} +.tiny-date-editor.tiny-input, +.tiny-date-editor.tiny-input__inner { + width: 100%; +} +.tiny-date-editor--monthrange.tiny-input, +.tiny-date-editor--monthrange.tiny-input__inner { + width: 300px; +} +.tiny-date-editor--daterange.tiny-input, +.tiny-date-editor--daterange.tiny-input__inner, +.tiny-date-editor--timerange.tiny-input, +.tiny-date-editor--timerange.tiny-input__inner { + width: 350px; +} +.tiny-date-editor--datetimerange.tiny-input, +.tiny-date-editor--datetimerange.tiny-input__inner { + width: 400px; +} +.tiny-date-editor--dates .tiny-input__inner { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-date-editor .tiny-input__icon { + cursor: pointer; + fill: var(--ti-date-editor-input-icon-fill-color); +} +.tiny-date-editor .tiny-input__icon .baseClearicon { + margin-right: 8px; + fill: #252b3a; +} +.tiny-date-editor .tiny-input__icon .baseClearicon:hover { + fill: var(--ti-input-clear-color-hover); +} +.tiny-date-editor .tiny-input__icon:not(.tiny-range__icon) { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-date-editor .tiny-range__icon { + font-size: var(--ti-date-picker-icon-font-size); + color: #c0c4cc; + margin-left: -5px; + float: left; + line-height: 1; +} +.tiny-date-editor .tiny-range-input, +.tiny-date-editor .tiny-range-separator { + font-size: var(--ti-date-picker-font-size); + height: 100%; + margin: 0; + text-align: center; + display: inline-block; +} +.tiny-date-editor .tiny-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: 0; + padding: 0; + width: 39%; + color: var(--ti-date-picker-font-color); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-date-editor .tiny-range-input::-moz-placeholder { + color: #999; + opacity: 1; +} +.tiny-date-editor .tiny-range-input:-ms-input-placeholder { + color: #999; +} +.tiny-date-editor .tiny-range-input::-webkit-input-placeholder { + color: #999; +} +.tiny-date-editor .tiny-range-input::-ms-input-placeholder { + color: #999; +} +.tiny-date-editor .tiny-range-input::placeholder { + color: #999; +} +.tiny-date-editor .tiny-range-separator { + padding: 0 5px; + line-height: 22px; + width: 12%; + color: var(--ti-range-separator-color); +} +.tiny-date-editor .tiny-range__close-icon { + font-size: var(--ti-date-picker-icon-font-size); + width: 25px; + float: right; + line-height: 32px; + margin-right: 14px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-date-editor .tiny-range__close-icon, +.tiny-date-editor .tiny-range__close-icon:hover { + fill: var(--ti-input-icon-close-color); +} +.tiny-range-editor.tiny-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; +} +.tiny-range-editor .tiny-range-input { + line-height: 1; +} +.tiny-range-editor.is-active, +.tiny-range-editor.is-active:hover { + border-color: var(--ti-date-picker-current-border-color); +} +.tiny-range-editor--medium.tiny-input__inner { + height: 42px; +} +.tiny-range-editor--medium .tiny-range-separator { + line-height: 34px; + font-size: var(--ti-common-font-size-2); +} +.tiny-range-editor--medium .tiny-range-input { + font-size: var(--ti-common-font-size-2); +} +.tiny-range-editor--medium .tiny-range__close-icon, +.tiny-range-editor--medium .tiny-range__icon { + line-height: 34px; +} +.tiny-range-editor--small.tiny-input__inner { + height: 36px; +} +.tiny-range-editor--small .tiny-range-separator { + line-height: 28px; + font-size: var(--ti-common-font-size-1); +} +.tiny-range-editor--small .tiny-range-input { + font-size: var(--ti-common-font-size-1); +} +.tiny-range-editor--small .tiny-range__close-icon, +.tiny-range-editor--small .tiny-range__icon { + line-height: 28px; +} +.tiny-range-editor--mini.tiny-input__inner { + height: 24px; +} +.tiny-range-editor--mini .tiny-range-separator { + line-height: 16px; + font-size: var(--ti-common-font-size-base); +} +.tiny-range-editor--mini .tiny-range-input { + font-size: var(--ti-common-font-size-base); +} +.tiny-range-editor--mini .tiny-range__close-icon, +.tiny-range-editor--mini .tiny-range__icon { + line-height: 16px; +} +.tiny-range-editor.is-disabled { + background-color: var(--ti-date-picker-disabled-bgcolor); + border-color: var(--ti-date-picker-border-color); + color: var(--ti-date-picker-disabled-color); + cursor: not-allowed; +} +.tiny-range-editor.is-disabled:focus, +.tiny-range-editor.is-disabled:hover { + border-color: var(--ti-date-picker-border-color); +} +.tiny-range-editor.is-disabled input { + color: var(--ti-date-picker-disabled-color); + background-color: var(--ti-date-picker-disabled-bgcolor); + cursor: not-allowed; +} +.tiny-range-editor.is-disabled input::-moz-placeholder { + color: #999; + opacity: 1; +} +.tiny-range-editor.is-disabled input:-ms-input-placeholder { + color: #999; +} +.tiny-range-editor.is-disabled input::-webkit-input-placeholder { + color: #999; +} +.tiny-range-editor.is-disabled input::-ms-input-placeholder { + color: #999; +} +.tiny-range-editor.is-disabled input::placeholder { + color: #999; +} +.tiny-range-editor.is-disabled .tiny-range-separator { + color: var(--ti-date-picker-disabled-color); +} +.tiny-picker-panel { + --ti-date-picker-width: 280px; + --ti-date-picker-font-size: var(--ti-common-font-size-base); + --ti-date-picker-font-color: var(--ti-base-color-info-normal); + --ti-date-picker-bgcolor: var(--ti-base-color-light); + --ti-date-picker-border-radius: var(--ti-common-border-radius-normal); + --ti-date-picker-border-color: var(--ti-common-color-line-dividing); + --ti-date-picker-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-disabled-color: var(--ti-common-color-text-disabled); + --ti-date-picker-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-date-picker-selected-bgcolor: #f2f2f3; + --ti-date-picker-icon-font-size: var(--ti-common-font-size-1); + --ti-date-picker-current-select-bgcolor: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-color: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-radius: 0; + --ti-date-picker-range-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-range-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-td-width: 36px; + --ti-date-table-td-height: 34px; + --ti-date-table-td-padding: 4px 0; + --ti-date-table-td-span-width: 36px; + --ti-date-table-td-span-height: 24px; + --ti-date-table-th-font-color: var(--ti-base-color-common-2); + --ti-date-table-td-border-radius: 0; + --ti-date-table-td-pre-month-color: var(--ti-base-color-common-2); + --ti-date-table-td-nomal-color: var(--ti-base-color-light); + --ti-date-table-td-range-bgcolor: #f2f6fc; + --ti-date-table-td-today-border-color: var(--ti-base-color-brand-6); + --ti-date-table-td-today-color: var(--ti-date-picker-font-color); + --ti-date-table-week-current-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-week-current-hover-bgcolor: var(--ti-base-color-brand-3); + --ti-month-table-td-color: var(--ti-base-color-brand-7); + --ti-month-table-td-range-bgcolor: #f2f6fc; + --ti-month-table-td-date-color: var(--ti-base-color-light); + --ti-month-table-td-date-border-radius: 24px; + --ti-year-table-td-color: var(--ti-base-color-brand-7); + --ti-year-table-td-icon-color: #303133; + --ti-time-spinner-arrow-color: #909399; + --ti-time-spinner-arrow-hover-color: var(--ti-base-color-brand-7); + --ti-time-spinner-item-active-color: #303133; + --ti-time-spinner-item-font-weight: 700; + --ti-time-spinner-item-bgcolor: transparent; + --ti-time-spinner-list-border-color: transparent; + --ti-picker-panel-line-height: var(--ti-base-size-height-minor); + --ti-picker-panel-shortcut-font-size: var(--ti-common-font-size-1); + --ti-picker-panel-icon-btn-color: var(--ti-base-color-common-2); + --ti-picker-panel-icon-btn-hover-color: var(--ti-base-color-brand-7); + --ti-picker-panel-icon-btn-disabled-color: var(--ti-base-color-bg-5); + --ti-picker-panel-border-color: rgba(0, 0, 0, 0.15); + --ti-picker-panel-box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + --ti-date-picker-header-label-hover-color: var(--ti-base-color-brand-7); + --ti-date-range-picker-header-font-size: var(--ti-common-font-size-2); + --ti-date-range-picker-time-header-icon-color: #303133; + --ti-time-range-picker-header-font-size: var(--ti-common-font-size-1); + --ti-time-panel-footer-height: 36px; + --ti-time-panel-btn-color: #303133; + --ti-time-panel-btn-confirm-color: var(--ti-base-color-brand-7); + --ti-range-separator-color: #303133; + --ti-time-panel-border-color: var(--ti-date-picker-border-color); + --ti-time-panel-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-time-panel-content-split-line-display: block; + --ti-time-panel-btn-cancel-display: inline-block; + --ti-time-panel-btn-bgcolor: transparent; + --ti-time-panel-btn-padding: 0 5px; + --ti-time-panel-btn-radius: var(--ti-common-border-radius-normal); + --ti-time-panel-btn-height: 28px; + --ti-time-panel-btn-min-width: inherit; + --ti-time-panel-btn-font-weight: 800; + --ti-time-panel-btn-confirm-hover-bgcolor: transparent; + --ti-date-editor-input-icon-fill-color: #575d6c; + color: var(--ti-date-picker-font-color); + font-size: var(--ti-date-picker-font-size); + border: 1px solid var(--ti-picker-panel-border-color); + -webkit-box-shadow: var(--ti-picker-panel-box-shadow); + box-shadow: var(--ti-picker-panel-box-shadow); + background: var(--ti-date-picker-bgcolor); + border-radius: var(--ti-common-border-radius-normal); + line-height: var(--ti-picker-panel-line-height); + margin: var(--ti-base-dropdown-gap) 0; +} +.tiny-picker-panel__body-wrapper::after, +.tiny-picker-panel__body::after { + content: ''; + display: table; + clear: both; +} +.tiny-picker-panel__body { + padding-bottom: 8px; +} +.tiny-picker-panel__content { + position: relative; +} +.tiny-picker-panel__footer { + border-top: 1px solid var(--ti-date-picker-border-color); + padding: 6px 16px; + background-color: var(--ti-date-picker-bgcolor); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-picker-panel__footer .tiny-button { + min-width: 60px; +} +.tiny-picker-panel__footer .tiny-button:only-child { + float: right; +} +.tiny-picker-panel__footer .tiny-button--text { + text-align: left; +} +.tiny-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: var(--ti-picker-panel-shortcut-font-size); + color: var(--ti-date-picker-font-color); + padding-left: 12px; + text-align: left; + outline: 0; + cursor: pointer; +} +.tiny-picker-panel__shortcut:hover { + background-color: var(--ti-date-picker-hover-bgcolor); +} +.tiny-picker-panel__shortcut.active { + background-color: var(--ti-date-picker-selected-bgcolor); +} +.tiny-picker-panel__btn { + color: var(--ti-date-picker-font-color); + border: 1px solid var(--ti-date-picker-border-color); + font-size: var(--ti-date-picker-font-size); + line-height: 24px; + border-radius: var(--ti-date-picker-border-radius); + padding: 0 20px; + cursor: pointer; + outline: 0; + background-color: transparent; +} +.tiny-picker-panel__btn [disabled] { + color: var(--ti-date-picker-disabled-color); + cursor: not-allowed; +} +.tiny-picker-panel__icon-btn { + font-size: var(--ti-date-picker-font-size); + line-height: 30px; + fill: var(--ti-picker-panel-icon-btn-color); + border: 0; + background: 0 0; + cursor: pointer; + outline: 0; +} +.tiny-picker-panel__icon-btn:hover { + fill: var(--ti-picker-panel-icon-btn-hover-color); +} +.tiny-picker-panel__icon-btn.is-disabled { + color: var(--ti-picker-panel-icon-btn-disabled-color); +} +.tiny-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; +} +.tiny-picker-panel__link-btn { + vertical-align: middle; +} +.tiny-picker-panel [slot='sidebar'], +.tiny-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid var(--ti-date-picker-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: var(--ti-date-picker-bgcolor); + overflow: auto; +} +.tiny-picker-panel [slot='sidebar'] + .tiny-picker-panel__body, +.tiny-picker-panel__sidebar + .tiny-picker-panel__body { + margin-left: 110px; +} +.tiny-picker-panel__timezone { + margin-bottom: 10px; +} +.tiny-picker-panel__timezone .tiny-picker-panel__tzlist { + z-index: 10; + overflow-y: hidden; +} +.tiny-picker-panel__timezone .tiny-picker-panel__tzlist-li { + height: 30px; + line-height: 30px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: 0 10px; + border: 1px solid #f4f0f0; + cursor: pointer; +} +.tiny-picker-panel__timezone .tiny-picker-panel__tzlist .tiny-popup { + position: absolute; + width: 238px; + bottom: 77px; + max-height: 260px; + -webkit-box-shadow: 0 -1px 2px 0 rgba(53, 29, 29, 0.5); + box-shadow: 0 -1px 2px 0 rgba(53, 29, 29, 0.5); +} +.tiny-picker-panel__timezone .tiny-input { + position: relative; +} +.tiny-date-picker { + --ti-date-picker-width: 280px; + --ti-date-picker-font-size: var(--ti-common-font-size-base); + --ti-date-picker-font-color: var(--ti-base-color-info-normal); + --ti-date-picker-bgcolor: var(--ti-base-color-light); + --ti-date-picker-border-radius: var(--ti-common-border-radius-normal); + --ti-date-picker-border-color: var(--ti-common-color-line-dividing); + --ti-date-picker-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-disabled-color: var(--ti-common-color-text-disabled); + --ti-date-picker-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-date-picker-selected-bgcolor: #f2f2f3; + --ti-date-picker-icon-font-size: var(--ti-common-font-size-1); + --ti-date-picker-current-select-bgcolor: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-color: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-radius: 0; + --ti-date-picker-range-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-range-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-td-width: 36px; + --ti-date-table-td-height: 34px; + --ti-date-table-td-padding: 4px 0; + --ti-date-table-td-span-width: 36px; + --ti-date-table-td-span-height: 24px; + --ti-date-table-th-font-color: var(--ti-base-color-common-2); + --ti-date-table-td-border-radius: 0; + --ti-date-table-td-pre-month-color: var(--ti-base-color-common-2); + --ti-date-table-td-nomal-color: var(--ti-base-color-light); + --ti-date-table-td-range-bgcolor: #f2f6fc; + --ti-date-table-td-today-border-color: var(--ti-base-color-brand-6); + --ti-date-table-td-today-color: var(--ti-date-picker-font-color); + --ti-date-table-week-current-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-week-current-hover-bgcolor: var(--ti-base-color-brand-3); + --ti-month-table-td-color: var(--ti-base-color-brand-7); + --ti-month-table-td-range-bgcolor: #f2f6fc; + --ti-month-table-td-date-color: var(--ti-base-color-light); + --ti-month-table-td-date-border-radius: 24px; + --ti-year-table-td-color: var(--ti-base-color-brand-7); + --ti-year-table-td-icon-color: #303133; + --ti-time-spinner-arrow-color: #909399; + --ti-time-spinner-arrow-hover-color: var(--ti-base-color-brand-7); + --ti-time-spinner-item-active-color: #303133; + --ti-time-spinner-item-font-weight: 700; + --ti-time-spinner-item-bgcolor: transparent; + --ti-time-spinner-list-border-color: transparent; + --ti-picker-panel-line-height: var(--ti-base-size-height-minor); + --ti-picker-panel-shortcut-font-size: var(--ti-common-font-size-1); + --ti-picker-panel-icon-btn-color: var(--ti-base-color-common-2); + --ti-picker-panel-icon-btn-hover-color: var(--ti-base-color-brand-7); + --ti-picker-panel-icon-btn-disabled-color: var(--ti-base-color-bg-5); + --ti-picker-panel-border-color: rgba(0, 0, 0, 0.15); + --ti-picker-panel-box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + --ti-date-picker-header-label-hover-color: var(--ti-base-color-brand-7); + --ti-date-range-picker-header-font-size: var(--ti-common-font-size-2); + --ti-date-range-picker-time-header-icon-color: #303133; + --ti-time-range-picker-header-font-size: var(--ti-common-font-size-1); + --ti-time-panel-footer-height: 36px; + --ti-time-panel-btn-color: #303133; + --ti-time-panel-btn-confirm-color: var(--ti-base-color-brand-7); + --ti-range-separator-color: #303133; + --ti-time-panel-border-color: var(--ti-date-picker-border-color); + --ti-time-panel-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-time-panel-content-split-line-display: block; + --ti-time-panel-btn-cancel-display: inline-block; + --ti-time-panel-btn-bgcolor: transparent; + --ti-time-panel-btn-padding: 0 5px; + --ti-time-panel-btn-radius: var(--ti-common-border-radius-normal); + --ti-time-panel-btn-height: 28px; + --ti-time-panel-btn-min-width: inherit; + --ti-time-panel-btn-font-weight: 800; + --ti-time-panel-btn-confirm-hover-bgcolor: transparent; + --ti-date-editor-input-icon-fill-color: #575d6c; + width: var(--ti-date-picker-width); +} +.tiny-date-picker.has-sidebar.has-time { + width: 434px; +} +.tiny-date-picker.has-sidebar { + width: 398px; +} +.tiny-date-picker.has-time .tiny-picker-panel__body-wrapper { + position: relative; +} +.tiny-date-picker table { + table-layout: fixed; + width: 100%; +} +.tiny-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; +} +.tiny-date-picker__time-header { + position: relative; + border-bottom: 1px solid var(--ti-date-picker-border-color); + font-size: var(--ti-date-picker-font-size); + padding: 8px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-date-picker__header { + margin: 12px; + text-align: center; +} +.tiny-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: 1px solid var(--ti-date-picker-border-color); +} +.tiny-date-picker__header--bordered + .tiny-picker-panel__content { + margin-top: 0; +} +.tiny-date-picker__header-label { + font-size: var(--ti-date-picker-font-size); + font-weight: 700; + padding: 0 4px; + text-align: center; + cursor: pointer; + color: var(--ti-date-picker-font-color); + vertical-align: middle; +} +.tiny-date-picker__header-label.active, +.tiny-date-picker__header-label:hover { + color: var(--ti-date-picker-header-label-hover-color); +} +.tiny-date-picker__prev-btn { + float: left; +} +.tiny-date-picker__next-btn { + float: right; +} +.tiny-date-picker__time-wrap { + padding: 10px; + text-align: center; +} +.tiny-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; +} +.tiny-date-range-picker { + width: 558px; +} +.tiny-date-range-picker.has-sidebar { + width: 668px; +} +.tiny-date-range-picker table { + table-layout: fixed; + width: 100%; +} +.tiny-date-range-picker .tiny-picker-panel__body { + min-width: var(--ti-date-range-picker-body-min-width); +} +.tiny-date-range-picker .tiny-picker-panel__content { + margin: 0; +} +.tiny-date-range-picker__header { + position: relative; + text-align: center; + height: 28px; +} +.tiny-date-range-picker__header [class*='arrow-left'] { + float: left; +} +.tiny-date-range-picker__header [class*='arrow-right'] { + float: right; +} +.tiny-date-range-picker__header div { + font-size: var(--ti-date-range-picker-header-font-size); + font-weight: 500; + margin-right: 50px; +} +.tiny-date-range-picker__content { + float: left; + width: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 16px; +} +.tiny-date-range-picker__content.is-left { + border-right: 1px solid var(--ti-date-picker-border-color); +} +.tiny-date-range-picker__content .tiny-date-range-picker__header div { + margin-left: 50px; + margin-right: 50px; +} +.tiny-date-range-picker__editors-wrap { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; +} +.tiny-date-range-picker__editors-wrap.is-right { + text-align: right; +} +.tiny-date-range-picker__time-header { + position: relative; + border-bottom: 1px solid var(--ti-date-picker-border-color); + font-size: var(--ti-date-picker-font-size); + padding: 8px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-date-range-picker__time-header > .tiny-icon-arrow-right { + font-size: var(--ti-common-font-size-4); + vertical-align: middle; + display: table-cell; + color: var(--ti-date-range-picker-time-header-icon-color); +} +.tiny-date-range-picker__time-picker-wrap { + position: relative; + display: table-cell; + padding: 0 5px; +} +.tiny-date-range-picker__time-picker-wrap .tiny-picker-panel { + position: absolute; + top: 13px; + right: 0; + z-index: 1; + background: var(--ti-date-picker-bgcolor); +} +.tiny-time-range-picker { + width: 354px; + overflow: visible; +} +.tiny-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.tiny-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; +} +.tiny-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: var(--ti-time-range-picker-header-font-size); +} +.tiny-time-range-picker__body { + border-radius: var(--ti-date-picker-border-radius); + border: 1px solid var(--ti-date-picker-border-color); +} +.tiny-time-panel { + --ti-date-picker-width: 280px; + --ti-date-picker-font-size: var(--ti-common-font-size-base); + --ti-date-picker-font-color: var(--ti-base-color-info-normal); + --ti-date-picker-bgcolor: var(--ti-base-color-light); + --ti-date-picker-border-radius: var(--ti-common-border-radius-normal); + --ti-date-picker-border-color: var(--ti-common-color-line-dividing); + --ti-date-picker-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-disabled-color: var(--ti-common-color-text-disabled); + --ti-date-picker-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-date-picker-selected-bgcolor: #f2f2f3; + --ti-date-picker-icon-font-size: var(--ti-common-font-size-1); + --ti-date-picker-current-select-bgcolor: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-color: var(--ti-base-color-brand-6); + --ti-date-picker-current-border-radius: 0; + --ti-date-picker-range-bgcolor: var(--ti-base-color-brand-2); + --ti-date-picker-range-hover-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-td-width: 36px; + --ti-date-table-td-height: 34px; + --ti-date-table-td-padding: 4px 0; + --ti-date-table-td-span-width: 36px; + --ti-date-table-td-span-height: 24px; + --ti-date-table-th-font-color: var(--ti-base-color-common-2); + --ti-date-table-td-border-radius: 0; + --ti-date-table-td-pre-month-color: var(--ti-base-color-common-2); + --ti-date-table-td-nomal-color: var(--ti-base-color-light); + --ti-date-table-td-range-bgcolor: #f2f6fc; + --ti-date-table-td-today-border-color: var(--ti-base-color-brand-6); + --ti-date-table-td-today-color: var(--ti-date-picker-font-color); + --ti-date-table-week-current-bgcolor: var(--ti-base-color-brand-2); + --ti-date-table-week-current-hover-bgcolor: var(--ti-base-color-brand-3); + --ti-month-table-td-color: var(--ti-base-color-brand-7); + --ti-month-table-td-range-bgcolor: #f2f6fc; + --ti-month-table-td-date-color: var(--ti-base-color-light); + --ti-month-table-td-date-border-radius: 24px; + --ti-year-table-td-color: var(--ti-base-color-brand-7); + --ti-year-table-td-icon-color: #303133; + --ti-time-spinner-arrow-color: #909399; + --ti-time-spinner-arrow-hover-color: var(--ti-base-color-brand-7); + --ti-time-spinner-item-active-color: #303133; + --ti-time-spinner-item-font-weight: 700; + --ti-time-spinner-item-bgcolor: transparent; + --ti-time-spinner-list-border-color: transparent; + --ti-picker-panel-line-height: var(--ti-base-size-height-minor); + --ti-picker-panel-shortcut-font-size: var(--ti-common-font-size-1); + --ti-picker-panel-icon-btn-color: var(--ti-base-color-common-2); + --ti-picker-panel-icon-btn-hover-color: var(--ti-base-color-brand-7); + --ti-picker-panel-icon-btn-disabled-color: var(--ti-base-color-bg-5); + --ti-picker-panel-border-color: rgba(0, 0, 0, 0.15); + --ti-picker-panel-box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + --ti-date-picker-header-label-hover-color: var(--ti-base-color-brand-7); + --ti-date-range-picker-header-font-size: var(--ti-common-font-size-2); + --ti-date-range-picker-time-header-icon-color: #303133; + --ti-time-range-picker-header-font-size: var(--ti-common-font-size-1); + --ti-time-panel-footer-height: 36px; + --ti-time-panel-btn-color: #303133; + --ti-time-panel-btn-confirm-color: var(--ti-base-color-brand-7); + --ti-range-separator-color: #303133; + --ti-time-panel-border-color: var(--ti-date-picker-border-color); + --ti-time-panel-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-time-panel-content-split-line-display: block; + --ti-time-panel-btn-cancel-display: inline-block; + --ti-time-panel-btn-bgcolor: transparent; + --ti-time-panel-btn-padding: 0 5px; + --ti-time-panel-btn-radius: var(--ti-common-border-radius-normal); + --ti-time-panel-btn-height: 28px; + --ti-time-panel-btn-min-width: inherit; + --ti-time-panel-btn-font-weight: 800; + --ti-time-panel-btn-confirm-hover-bgcolor: transparent; + --ti-date-editor-input-icon-fill-color: #575d6c; + margin: 5px 0; + border: 1px solid var(--ti-time-panel-border-color); + background-color: var(--ti-date-picker-bgcolor); + -webkit-box-shadow: var(--ti-time-panel-box-shadow); + box-shadow: var(--ti-time-panel-box-shadow); + border-radius: var(--ti-date-picker-border-radius); + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-box-sizing: content-box; + box-sizing: content-box; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; +} +.tiny-time-panel__content:after, +.tiny-time-panel__content:before { + display: var(--ti-time-panel-content-split-line-display); + content: ''; + top: 50%; + position: absolute; + margin-top: -19px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid var(--ti-date-picker-border-color); + border-bottom: 1px solid var(--ti-date-picker-border-color); +} +.tiny-time-panel__content:after { + left: 50%; + margin-left: 12%; + margin-right: 12%; +} +.tiny-time-panel__content:before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; +} +.tiny-time-panel__content.has-seconds:after { + left: calc(100% / 3 * 2); +} +.tiny-time-panel__content.has-seconds:before { + padding-left: calc(100% / 3); +} +.tiny-time-panel__footer { + border-top: 1px solid var(--ti-date-picker-border-color); + padding: 4px; + height: 36px; + height: var(--ti-time-panel-footer-height, 36px); + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-time-panel__btn { + min-width: var(--ti-time-panel-btn-min-width); + border: none; + line-height: var(--ti-time-panel-btn-height); + padding: var(--ti-time-panel-btn-padding); + margin: 0 5px; + cursor: pointer; + background-color: var(--ti-time-panel-btn-bgcolor); + outline: 0; + font-size: 12px; + color: var(--ti-time-panel-btn-color); + border-radius: var(--ti-time-panel-btn-radius); + -webkit-transition: background-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: background-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-time-panel__btn.cancel { + display: var(--ti-time-panel-btn-cancel-display); +} +.tiny-time-panel__btn.confirm { + font-weight: var(--ti-time-panel-btn-font-weight); + color: var(--ti-time-panel-btn-confirm-color); +} +.tiny-time-panel__btn.confirm:hover { + background-color: var(--ti-time-panel-btn-confirm-hover-bgcolor); +} +.tiny-time-select .tiny-time-select__item { + color: var(--ti-date-picker-font-color); + font-size: var(--ti-common-font-size-base); + padding: 0 8px; + line-height: var(--ti-base-size-height-normal); + height: var(--ti-base-size-height-normal); +} +.tiny-time-select .tiny-time-select__item:not(.disabled):hover { + background-color: var(--ti-date-picker-hover-bgcolor); + cursor: pointer; +} +.tiny-time-select .tiny-time-select__item.selected:not(.disabled) { + background-color: var(--ti-date-picker-selected-bgcolor); +} +.tiny-time-select .tiny-time-select__item.disabled { + color: var(--ti-date-picker-disabled-color); + cursor: not-allowed; +} +.tiny-scrollbar { + overflow: hidden; + position: relative; +} +.tiny-scrollbar:active > .tiny-scrollbar__bar, +.tiny-scrollbar:focus > .tiny-scrollbar__bar, +.tiny-scrollbar:hover > .tiny-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; +} +.tiny-scrollbar__wrap { + overflow: scroll; + height: 100%; +} +.tiny-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; +} +.tiny-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: 0.3s background-color; + transition: 0.3s background-color; +} +.tiny-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); +} +.tiny-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; +} +.tiny-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; +} +.tiny-scrollbar__bar.is-vertical > div { + width: 100%; +} +.tiny-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; +} +.tiny-scrollbar__bar.is-horizontal > div { + height: 100%; +} +.tiny-fade-in-linear-enter-active, +.tiny-fade-in-linear-leave-active { + -webkit-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} +.tiny-fade-in-linear-enter, +.tiny-fade-in-linear-enter-from, +.tiny-fade-in-linear-leave, +.tiny-fade-in-linear-leave-active, +.tiny-fade-in-linear-leave-from { + opacity: 0; +} +.tiny-fade-in-enter-active, +.tiny-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.tiny-fade-in-enter, +.tiny-fade-in-enter-from, +.tiny-fade-in-leave-active { + opacity: 0; +} +.tiny-zoom-in-center-enter-active, +.tiny-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.tiny-zoom-in-center-enter, +.tiny-zoom-in-center-enter-from, +.tiny-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); +} +.tiny-zoom-in-top-enter-active, +.tiny-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; +} +.tiny-zoom-in-top-enter, +.tiny-zoom-in-top-enter-from, +.tiny-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); +} +.tiny-zoom-in-bottom-enter-active, +.tiny-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} +.tiny-zoom-in-bottom-enter, +.tiny-zoom-in-bottom-enter-from, +.tiny-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); +} +.tiny-zoom-in-left-enter-active, +.tiny-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; +} +.tiny-zoom-in-left-enter, +.tiny-zoom-in-left-enter-from, +.tiny-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); +} +.tiny-list-enter-active, +.tiny-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; +} +.tiny-list-enter, +.tiny-list-enter-from, +.tiny-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); +} +.tiny-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; +} +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; +} +.fade-in-linear-enter, +.fade-in-linear-enter-from, +.fade-in-linear-leave, +.fade-in-linear-leave-active, +.fade-in-linear-leave-from { + opacity: 0; +} +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} +.tiny-popupload { + --ti-popupload-font-size: var(--ti-common-font-size-base); + --ti-popupload-dialog-table-border-color: var(--ti-base-color-border); + --ti-popupload-dialog-table-header-height: var(--ti-base-size-height-small); + --ti-popupload-dialog-table-header-color: var(--ti-base-color-info-normal); + --ti-popupload-dialog-table-header-background: #f1f1f1; + --ti-popupload-dialog-table-icon-color: var(--ti-base-color-brand-6); + --ti-popupload-dialog-table-icon-hover-color: var(--ti-base-color-bg-8); + font-size: var(--ti-popupload-font-size); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-popupload__dialog { + max-height: 512px; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-popupload__dialog-header .tiny-alert { + margin-bottom: 10px; +} +.tiny-popupload__dialog-body { + padding-bottom: 24px; +} +.tiny-popupload__dialog-body .tiny-upload-list { + display: none; +} +.tiny-popupload__dialog-footer { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + padding-bottom: 24px; +} +.tiny-popupload__dialog-tips { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-popupload__dialog-table { + height: 280px; + width: 100%; + margin-top: 10px; +} +.tiny-popupload__dialog-table .header-col { + border-right: 1px solid var(--ti-popupload-dialog-table-border-color); + padding: 0 12px; +} +.tiny-popupload__dialog-table .header-col:last-child { + border-right: none; +} +.tiny-popupload__dialog-table .body-col { + padding: 8px 12px; + margin: 0; + line-height: 20px; +} +.tiny-popupload__dialog-table .col1 { + width: 60%; +} +.tiny-popupload__dialog-table .col2 { + width: 20%; +} +.tiny-popupload__dialog-table .col3 { + width: 20%; +} +.tiny-popupload__dialog-table-header { + height: var(--ti-popupload-dialog-table-header-height); + width: 100%; + color: var(--ti-popupload-dialog-table-header-color); + font-weight: 700; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + background: var(--ti-popupload-dialog-table-header-background); + border-bottom: 1px solid var(--ti-popupload-dialog-table-border-color); +} +.tiny-popupload__dialog-table-body { + width: 100%; + height: calc(100% - var(--ti-popupload-dialog-table-header-height)); + overflow-y: auto; + border-bottom: 1px solid var(--ti-popupload-dialog-table-border-color); +} +.tiny-popupload__dialog-table-list { + list-style: none; +} +.tiny-popupload__dialog-table-item { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} +.tiny-popupload__dialog-table-item:nth-child(even) { + background: rgba(51, 51, 51, 0.06); +} +.tiny-popupload__dialog-table-item .delIcon { + height: 17px; + width: 17px; + fill: var(--ti-popupload-dialog-table-icon-color); + cursor: pointer; +} +.tiny-popupload__dialog-table-item .delIcon:hover { + height: 17px; + width: 17px; + fill: var(--ti-popupload-dialog-table-icon-hover-color); +} +.tiny-popupload__modal .tiny-grid-modal__body { + overflow-y: auto; +} +.tiny-popeditor { + --ti-popeditor-border-color: var(--ti-base-color-border); + --ti-popeditor-icon-color: var(--ti-base-color-brand-6); + --ti-popeditor-icon-disabled-color: var(--ti-base-color-placeholder); + --ti-popeditor-icon-hover-color: var(--ti-base-color-brand-5); + --ti-popeditor-tabs-color: var(--ti-base-color-info-normal); + --ti-popeditor-tabs-selected-color: var(--ti-base-color-brand-6); + --ti-popeditor-tabs-li-height: var(--ti-common-size-10x); +} +.tiny-popeditor .tiny-input.tiny-popeditor-readonly .tiny-input__inner:active, +.tiny-popeditor .tiny-input.tiny-popeditor-readonly .tiny-input__inner:focus, +.tiny-popeditor .tiny-input.tiny-popeditor-readonly .tiny-input__inner:hover { + cursor: pointer; + border-color: var(--ti-popeditor-border-color); +} +.tiny-popeditor .tiny-input.is-disabled .tiny-input__inner:active, +.tiny-popeditor .tiny-input.is-disabled .tiny-input__inner:focus, +.tiny-popeditor .tiny-input.is-disabled .tiny-input__inner:hover { + cursor: not-allowed; +} +.tiny-popeditor .tiny-input.is-disabled .tiny-input__inner:active + .tiny-input__suffix .tiny-svg__popeditor, +.tiny-popeditor .tiny-input.is-disabled .tiny-input__inner:focus + .tiny-input__suffix .tiny-svg__popeditor, +.tiny-popeditor .tiny-input.is-disabled .tiny-input__inner:hover + .tiny-input__suffix .tiny-svg__popeditor { + fill: var(--ti-popeditor-icon-disabled-color); +} +.tiny-popeditor .tiny-input.is-disabled .tiny-input__suffix { + cursor: not-allowed; +} +.tiny-popeditor .tiny-input.is-disabled .tiny-input__suffix .tiny-svg__popeditor, +.tiny-popeditor .tiny-input.is-disabled .tiny-input__suffix .tiny-svg__popeditor:hover { + fill: var(--ti-popeditor-icon-disabled-color); + cursor: not-allowed; +} +.tiny-popeditor .tiny-input.suggest .tiny-input__inner { + padding-right: 50px; +} +.tiny-popeditor .tiny-input.suggest .tiny-svg__popeditor.tiny-chevron { + margin-right: 8px; +} +.tiny-popeditor .tiny-input .tiny-input__inner:active + .tiny-input__suffix, +.tiny-popeditor .tiny-input .tiny-input__inner:focus + .tiny-input__suffix, +.tiny-popeditor .tiny-input .tiny-input__inner:hover + .tiny-input__suffix { + cursor: not-allowed; +} +.tiny-popeditor .tiny-input .tiny-input__inner:active + .tiny-input__suffix .tiny-svg__popeditor, +.tiny-popeditor .tiny-input .tiny-input__inner:focus + .tiny-input__suffix .tiny-svg__popeditor, +.tiny-popeditor .tiny-input .tiny-input__inner:hover + .tiny-input__suffix .tiny-svg__popeditor { + fill: var(--ti-popeditor-icon-hover-color); +} +.tiny-popeditor .tiny-input .tiny-input__suffix { + cursor: pointer; +} +.tiny-popeditor .tiny-input .tiny-input__suffix .tiny-svg__popeditor { + height: 30px; + line-height: 30px; + font-size: var(--ti-common-font-size-1); + fill: var(--ti-popeditor-icon-color); + cursor: pointer; +} +.tiny-popeditor .tiny-input .tiny-input__suffix .tiny-svg__popeditor:hover { + fill: var(--ti-popeditor-icon-hover-color); +} +.tiny-popeditor .tiny-dialog-box .tiny-dialog-box__body { + padding: 8px 8px 0; +} +.tiny-popeditor-top .tiny-popeditor__search-lists { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.tiny-popeditor-top .tiny-popeditor__search-lists .tiny-input { + position: relative; + font-size: var(--ti-common-font-size-base); + display: inline-block; + width: 100%; +} +.tiny-popeditor-top .tiny-popeditor__search-lists .tiny-popeditor__search-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 12px; +} +.tiny-popeditor-top .tiny-popeditor__search-lists .tiny-popeditor__search-item .tiny-popeditor__search-label { + text-align: right; + padding-right: 8px; + font-size: var(--ti-common-font-size-base); +} +.tiny-popeditor-top .tiny-popeditor__search-lists .tiny-popeditor__search-input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} +.tiny-popeditor-top .tiny-popeditor__search-footer { + width: 100%; + text-align: center; + margin: 12px auto; +} +.tiny-popeditor-body { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.tiny-popeditor-body__left, +.tiny-popeditor-body__right { + width: 50%; + padding: 0 4px; + vertical-align: top; +} +.tiny-popeditor-body__left.tiny-popeditor-body__radio, +.tiny-popeditor-body__right.tiny-popeditor-body__radio { + width: 100%; +} +.tiny-popeditor-body .tiny-popeditor__tabs .tiny-popeditor__tabs-head { + white-space: nowrap; + margin: 0; + padding: 0 10px; + overflow: hidden; + height: 40px; + width: 100%; + position: relative; +} +.tiny-popeditor-body .tiny-popeditor__tabs .tiny-popeditor__tabs-head ul { + height: 40px; + border-bottom: 1px solid var(--ti-popeditor-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-popeditor-body .tiny-popeditor__tabs .tiny-popeditor__tabs-head ul li { + float: left; + margin-right: -1px; + cursor: pointer; + padding: 0 20px; + color: var(--ti-popeditor-tabs-color); + min-width: 90px; + height: var(--ti-popeditor-tabs-li-height); + line-height: var(--ti-popeditor-tabs-li-height); +} +.tiny-popeditor-body .tiny-popeditor__tabs .tiny-popeditor__tabs-head ul li.tiny-popeditor__tabs-selected { + color: var(--ti-popeditor-tabs-selected-color); + border-bottom: 3px solid var(--ti-popeditor-tabs-selected-color); + font-weight: 700; +} +.tiny-popeditor-body .tiny-popeditor__tabs .tiny-popeditor__tabs-body .tabs-body-item { + padding: 12px 12px 0; +} +.tiny-popeditor-body .tiny-popeditor__tabs .tiny-popeditor__tabs-body .tabs-body-item .tiny-pager { + padding-bottom: 0; +} +.tiny-popeditor_filter-input { + margin-bottom: 20px; +} +.tiny-poplist.poplist-user { + min-width: 180px; +} +.tiny-poplist.poplist-user .tiny-icon { + float: right; + margin-left: 5px; +} +.tiny-popover.tiny-popper { + --ti-popover-background: var(--ti-base-color-light); + --ti-popover-color: #606266; + --ti-popover-border-color: #d9d9d9; + --ti-popover-border-radius: var(--ti-common-border-radius-1); + --ti-popover-font-size: var(--ti-common-font-size-1); + --ti-popover-title-color: #303133; + --ti-popover-title-font-size: var(--ti-common-font-size-2); + --ti-popover-arrow-border-width: 6px; + --ti-popover-placement-margin: var(--ti-common-space-3x); + --ti-popover-placement-arrow-after-border-color: var(--ti-base-color-light); + --ti-popover-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + --ti-popover-arrow-border-color: var(--ti-popover-border-color); + --ti-popover-padding: 11px 15px; + position: absolute; + background: var(--ti-popover-background); + color: var(--ti-popover-color); + border-radius: var(--ti-popover-border-radius); + border: 1px solid var(--ti-popover-border-color); + padding: var(--ti-popover-padding); + z-index: 2000; + line-height: 1.4; + text-align: justify; + font-size: var(--ti-popover-font-size); + -webkit-box-shadow: var(--ti-popover-box-shadow); + box-shadow: var(--ti-popover-box-shadow); + word-break: break-all; +} +.tiny-popover.tiny-popper .popper__arrow, +.tiny-popover.tiny-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tiny-popover.tiny-popper .popper__arrow, +.tiny-popover.tiny-popper .tiny-popper .popper__arrow { + border-width: var(--ti-popover-arrow-border-width); + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); +} +.tiny-popover.tiny-popper .popper__arrow::after { + content: ' '; + border-width: var(--ti-popover-arrow-border-width); +} +.tiny-popover.tiny-popper[x-placement^='top'] { + margin-bottom: var(--ti-popover-placement-margin); +} +.tiny-popover.tiny-popper[x-placement^='top'] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: var(--ti-popover-arrow-border-color); + border-bottom-width: 0; +} +.tiny-popover.tiny-popper[x-placement^='top'] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: var(--ti-popover-placement-arrow-after-border-color); + border-bottom-width: 0; +} +.tiny-popover.tiny-popper[x-placement^='bottom'] { + margin-top: var(--ti-popover-placement-margin); +} +.tiny-popover.tiny-popper[x-placement^='bottom'] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: var(--ti-popover-arrow-border-color); +} +.tiny-popover.tiny-popper[x-placement^='bottom'] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: var(--ti-popover-placement-arrow-after-border-color); +} +.tiny-popover.tiny-popper[x-placement^='right'] { + margin-left: var(--ti-popover-placement-margin); +} +.tiny-popover.tiny-popper[x-placement^='right'] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: var(--ti-popover-arrow-border-color); + border-left-width: 0; +} +.tiny-popover.tiny-popper[x-placement^='right'] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: var(--ti-popover-placement-arrow-after-border-color); + border-left-width: 0; +} +.tiny-popover.tiny-popper[x-placement^='left'] { + margin-right: var(--ti-popover-placement-margin); +} +.tiny-popover.tiny-popper[x-placement^='left'] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: var(--ti-popover-arrow-border-color); +} +.tiny-popover.tiny-popper[x-placement^='left'] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: var(--ti-popover-placement-arrow-after-border-color); +} +.tiny-popover.tiny-popper .tiny-popover__plain { + padding: 18px 20px; +} +.tiny-popover.tiny-popper .tiny-popover__title { + color: var(--ti-popover-title-color); + font-size: var(--ti-popover-title-font-size); + line-height: 1; + margin-bottom: 12px; +} +.tiny-popover.tiny-popper .tiny-popover__reference:focus:hover, +.tiny-popover.tiny-popper .tiny-popover__reference:focus:not(.focusing), +.tiny-popover.tiny-popper:focus, +.tiny-popover.tiny-popper:focus:active { + outline-width: 0; +} +.tiny-popover__reference { + display: inline-block; +} +.tiny-progress { + --ti-progress-text-color: var(--ti-base-color-info-normal); + --ti-progress-text-font-size: var(--ti-common-font-size-base); + --ti-progress-bar-border-radius: 100px; + --ti-progress-bar-outer-bgcolor: var(--ti-base-color-selected-background); + --ti-progress-bar-inner-bgcolor: var(--ti-base-color-brand-6); + --ti-progress-bar-inner-text-color: var(--ti-base-color-light); + --ti-progress-success-color: var(--ti-base-color-success-normal); + --ti-progress-warning-color: var(--ti-base-color-warning-normal); + --ti-progress-exception-color: var(--ti-base-color-bg-8); + position: relative; + line-height: 1; +} +.tiny-progress.is-success .tiny-progress-bar__inner { + background-color: var(--ti-progress-success-color); +} +.tiny-progress.is-success .tiny-progress__text svg { + fill: var(--ti-progress-success-color); +} +.tiny-progress.is-warning .tiny-progress-bar__inner { + background-color: var(--ti-progress-warning-color); +} +.tiny-progress.is-warning .tiny-progress__text svg { + fill: var(--ti-progress-warning-color); +} +.tiny-progress.is-exception .tiny-progress-bar__inner { + background-color: var(--ti-progress-exception-color); +} +.tiny-progress.is-exception .tiny-progress__text svg { + fill: var(--ti-progress-exception-color); +} +.tiny-progress__text { + font-size: var(--ti-progress-text-font-size); + color: var(--ti-progress-text-color); + display: inline-block; + vertical-align: middle; + margin-left: 12px; + line-height: 1; +} +.tiny-progress__text i { + vertical-align: middle; + display: inline-block; +} +.tiny-progress--circle, +.tiny-progress--dashboard { + display: inline-block; +} +.tiny-progress--circle .tiny-progress__text, +.tiny-progress--dashboard .tiny-progress__text { + top: 50%; + position: absolute; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + left: 0; +} +.tiny-progress--circle .tiny-progress__text i, +.tiny-progress--dashboard .tiny-progress__text i { + display: inline-block; + vertical-align: middle; +} +.tiny-progress--without-text .tiny-progress__text { + display: none; +} +.tiny-progress--without-text .tiny-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; +} +.tiny-progress--text-inside .tiny-progress-bar { + padding-right: 0; + margin-right: 0; +} +.tiny-progress-bar { + padding-right: 50px; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-progress-bar__outer { + height: 6px; + border-radius: var(--ti-progress-bar-border-radius); + background-color: var(--ti-progress-bar-outer-bgcolor); + overflow: hidden; + position: relative; + vertical-align: middle; +} +.tiny-progress-bar__inner { + background-color: var(--ti-progress-bar-inner-bgcolor); + text-align: right; + left: 0; + position: absolute; + top: 0; + height: 100%; + border-radius: var(--ti-progress-bar-border-radius); + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.tiny-progress-bar__inner::after { + content: ''; + height: 100%; +} +.tiny-progress-bar__innerText { + color: var(--ti-progress-bar-inner-text-color); + font-size: var(--ti-progress-text-font-size); + margin: 0 5px; +} +.tiny-progress-bar, +.tiny-progress-bar__inner::after, +.tiny-progress-bar__innerText { + display: inline-block; + vertical-align: middle; +} +@-webkit-keyframes progress { + 0% { + background-position: 0 0; + } + 100% { + background-position: 32px 0; + } +} +@keyframes progress { + 0% { + background-position: 0 0; + } + 100% { + background-position: 32px 0; + } +} +.tiny-slider { + --ti-slider-bgcolor: var(--ti-base-color-brand-2); + --ti-slider-height: var(--ti-common-size-2x); + --ti-slider-radius: 2px; + --ti-slider-range-height: var(--ti-common-size-4x); + --ti-slider-range-radius: 2px; + --ti-slider-range-bgcolor: var(--ti-base-color-brand-6); + --ti-slider-range-hover-bgcolor: var(--ti-base-color-brand-6); + --ti-slider-range-top: calc(-1 * var(--ti-common-space-base)); + --ti-slider-range-margin-top: calc(-1 * var(--ti-common-space-base)); + --ti-slider-handle-width: var(--ti-common-size-5x); + --ti-slider-handle-height: var(--ti-common-size-7x); + --ti-slider-handle-bgcolor: linear-gradient(153deg, var(--ti-base-color-white), var(--ti-base-color-brand-2) 99%); + --ti-slider-handle-border-color: var(--ti-base-color-brand-6); + --ti-slider-handle-radius: 10px; + --ti-slider-handle-color-hover: var(--ti-common-color-bg-hover); + --ti-slider-handle-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1); + --ti-slider-handle-top: calc(-1 * var(--ti-common-space-base)); + --ti-slider-handle-border-width: 1px; + --ti-slider-handle-icon-display: inline-block; + --ti-slider-handle-icon-fill-color: var(--ti-slider-handle-border-color); + --ti-slider-handle-icon-fill-color-hover: var(--ti-slider-handle-color-hover); + --ti-slider-handle-transform: scale(1); + --ti-slider-handle-margin: -10px -8px 0; + --ti-slider-input-height: var(--ti-base-size-height-minor, 30px); + --ti-slider-input-width: var(--ti-common-size-10x); + --ti-slider-input-border-radius: var(--ti-common-border-radius-normal, 2px); + --ti-slider-input-border-color: var(--ti-base-color-border, #d9d9d9); + --ti-slider-input-color: var(--ti-base-color-info-normal, #333); + --ti-slider-input-bgcolor: var(--ti-base-color-light, #fff); + --ti-slider-tips-bgcolor: var(--ti-base-color-common-6); + --ti-slider-tips-color: var(--ti-base-color-white); + --ti-slider-tips-margin-left: 3px; + --ti-slider-vertical-margin: -8px 0 -8px -6px; + border-radius: var(--ti-slider-radius); + height: var(--ti-slider-height); + position: relative; + margin: 13px 0; + background: var(--ti-slider-bgcolor); + cursor: pointer; + width: calc(100% - 89px); + display: inline-block; +} +.tiny-slider:hover .tiny-slider__range { + background: var(--ti-slider-range-hover-bgcolor); +} +.tiny-slider:hover .tiny-slider__handle { + border-color: var(--ti-slider-range-hover-bgcolor); +} +.tiny-slider.disabled { + cursor: default; +} +.tiny-slider.disabled .tiny-slider__handle { + cursor: not-allowed; +} +.tiny-slider.tiny-slider__vertical { + width: var(--ti-slider-height); + height: 300px; + display: block; + margin: 0 15px; +} +.tiny-slider.tiny-slider__vertical + .tiny-slider__input { + margin-top: 12px; + float: none; + right: 0; +} +.tiny-slider.tiny-slider__vertical .tiny-slider__range { + border-radius: 10px; + position: absolute; + z-index: 1; + width: var(--ti-slider-height); +} +.tiny-slider.tiny-slider__vertical .tiny-slider__up { + top: 0; +} +.tiny-slider.tiny-slider__vertical .tiny-slider__down { + bottom: 0; +} +.tiny-slider.tiny-slider__vertical .tiny-slider__handle { + margin: var(--ti-slider-vertical-margin); +} +.tiny-slider__range { + border-radius: var(--ti-slider-range-radius); + position: absolute; + z-index: 1; + margin-top: var(--ti-slider-range-margin-top); + height: var(--ti-slider-range-height); + background: var(--ti-slider-range-bgcolor); +} +.tiny-slider__left { + left: 0; +} +.tiny-slider__right { + right: 0; +} +.tiny-slider__handle { + border-radius: var(--ti-slider-handle-radius); + height: var(--ti-slider-handle-height); + width: var(--ti-slider-handle-width); + position: absolute; + margin: var(--ti-slider-handle-margin); + z-index: 2; + outline: 0; + background: var(--ti-slider-handle-bgcolor); + border: var(--ti-slider-handle-border-width) solid var(--ti-slider-handle-border-color); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-shadow: var(--ti-slider-handle-box-shadow); + box-shadow: var(--ti-slider-handle-box-shadow); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: -webkit-grab; + cursor: grab; + text-align: center; +} +.tiny-slider__handle:hover { + color: var(--ti-slider-handle-color-hover); + border-color: var(--ti-slider-handle-color-hover); + -webkit-transform: var(--ti-slider-handle-transform); + transform: var(--ti-slider-handle-transform); +} +.tiny-slider__handle:hover svg { + fill: var(--ti-slider-handle-icon-fill-color-hover); +} +.tiny-slider__handle svg { + display: var(--ti-slider-handle-icon-display); + height: 12px; + margin-left: 4px; + fill: var(--ti-slider-handle-icon-fill-color); +} +.tiny-slider__tips { + text-align: center; + font-size: var(--ti-common-font-size-base); + margin-top: -32px; + margin-left: var(--ti-slider-tips-margin-left); + position: absolute; + padding: 12px 16px; + line-height: 1.5; + z-index: 1010; + word-break: normal; + white-space: nowrap; + background: var(--ti-slider-tips-bgcolor); + border: 1px solid var(--ti-slider-tips-bgcolor); + border-radius: var(--ti-common-border-radius-1); + color: var(--ti-slider-tips-color); +} +.tiny-slider__tips:before { + margin-left: -6px; + bottom: -6px; + content: ''; + left: 50%; + top: auto; + margin-top: 0; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 6px 6px 0 6px; + border-color: var(--ti-slider-tips-bgcolor) transparent; +} +.tiny-slider__tips:after { + margin-left: -4px; + bottom: -4px; + content: ''; + left: 50%; + top: auto; + margin-top: 0; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-slider-tips-bgcolor) transparent; +} +.tiny-slider__input { + display: inline-block; + line-height: var(--ti-slider-input-height); + vertical-align: top; + margin-left: 12px; + font-size: var(--ti-common-font-size-base); +} +.tiny-slider__input input { + width: var(--ti-slider-input-width); + height: var(--ti-slider-input-height); + line-height: var(--ti-slider-input-height); + border: 1px solid var(--ti-slider-input-border-color); + border-radius: var(--ti-slider-input-border-radius); + color: var(--ti-slider-input-color); + background: var(--ti-slider-input-bgcolor); + font-size: inherit; + padding: 0 8px; + outline: 0; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; +} +.tiny-slider__input span { + padding-left: 8px; +} +.tiny-radio { + --ti-radio-color: var(--ti-base-color-info-normal); + --ti-radio-font-size: var(--ti-common-font-size-base); + --ti-radio-bordered-height: var(var(--ti-common-size-10x)); + --ti-radio-bordered-border-radius: var(--ti-common-border-radius-normal); + --ti-radio-bordered-border-color: var(--ti-base-color-common-2); + --ti-radio-input-disabled-border-color: var(--ti-base-color-common-1); + --ti-radio-bordered-checked-border-color: var(--ti-base-color-brand-6); + --ti-radio-bordered-checked-background-color: var(--ti-base-color-light); + --ti-radio-bordered-hover-border-color: var(--ti-base-color-brand-6); + --ti-radio-bordered-checked-hover-border-color: var(--ti-base-color-brand-6); + --ti-radio-bordered-active-border-color: var(--ti-base-color-primary-active); + --ti-radio-input-disabled-bgcolor: var(--ti-base-color-bg-5); + --ti-radio-input-checked-disabled-color: var(--ti-base-color-bg-5); + --ti-radio-input-disabled-color: var(--ti-base-color-placeholder); + --ti-radio-inner-bgcolor: var(--ti-base-color-light); + --ti-radio-inner-checked-bgcolor: var(--ti-base-color-brand-6); + --ti-radio-medium-height: var(--ti-base-size-height-small); + --ti-radio-medium-inner-height: 14px; + --ti-radio-medium-inner-width: 14px; + --ti-radio-small-height: var(--ti-common-size-8x); + --ti-radio-small-inner-height: var(--ti-common-size-3x); + --ti-radio-small-inner-width: var(--ti-common-size-3x); + --ti-radio-mini-height: var(--ti-common-size-7x); + --ti-radio-mini-inner-height: var(--ti-common-size-3x); + --ti-radio-mini-inner-width: var(--ti-common-size-3x); + --ti-radio-inner-size: 8px; + --ti-radio-inner-checked-disabled-bgcolor: var(--ti-base-color-common-2); + color: var(--ti-radio-color); + font-weight: 500; + margin-right: 30px; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + cursor: pointer; + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-radio:last-child { + margin-right: 0; +} +.tiny-radio.is-bordered { + padding: 4px 12px; + border-radius: var(--ti-radio-bordered-border-radius); + border: 1px solid var(--ti-radio-bordered-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: var(--ti-radio-bordered-height); +} +.tiny-radio.is-bordered + .tiny-radio.is-bordered { + margin-left: 10px; +} +.tiny-radio.is-bordered.is-checked { + border-color: var(--ti-radio-bordered-checked-border-color); +} +.tiny-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: var(--ti-radio-bordered-border-color); +} +.tiny-radio, +.tiny-radio__input { + white-space: nowrap; + line-height: 1; + outline: 0; +} +.tiny-radio__input { + cursor: pointer; + line-height: 1; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-radio__input { + display: inline-block; + } +} +@supports (-ms-ime-align: auto) { + .tiny-radio__input { + display: inline-block; + } +} +.tiny-radio__input.is-disabled .tiny-radio__inner { + border-color: var(--ti-radio-input-disabled-border-color); +} +.tiny-radio__input.is-disabled .tiny-radio__inner, +.tiny-radio__input.is-disabled .tiny-radio__inner::after { + cursor: not-allowed; + background-color: var(--ti-radio-input-disabled-bgcolor); +} +.tiny-radio__input.is-disabled .tiny-radio__inner + .tiny-radio__label { + cursor: not-allowed; +} +.tiny-radio__input.is-disabled.is-checked .tiny-radio__inner { + background-color: var(--ti-radio-input-checked-disabled-color); + border-color: var(--ti-base-color-common-1); +} +.tiny-radio__input.is-disabled.is-checked .tiny-radio__inner::after { + background-color: var(--ti-radio-inner-checked-disabled-bgcolor); +} +.tiny-radio__input.is-disabled + span.tiny-radio__label { + color: var(--ti-radio-input-disabled-color); + cursor: not-allowed; +} +.tiny-radio__input.is-checked .tiny-radio__inner { + border-color: var(--ti-radio-bordered-checked-border-color); + background: var(--ti-radio-bordered-checked-background-color); +} +.tiny-radio__input.is-checked .tiny-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); + background-color: var(--ti-radio-inner-checked-bgcolor); +} +.tiny-radio__input.is-checked:not(.is-disabled) .tiny-radio__inner:hover { + border-color: var(--ti-radio-bordered-checked-hover-border-color); +} +.tiny-radio__inner { + border: 1px solid var(--ti-radio-bordered-border-color); + border-radius: 100%; + width: 16px; + height: 16px; + background-color: var(--ti-radio-inner-bgcolor); + position: relative; + display: inline-block; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: 0; +} +.tiny-radio__inner:hover { + border-color: var(--ti-radio-bordered-hover-border-color); +} +.tiny-radio__inner:active { + border-color: var(--ti-radio-bordered-active-border-color); +} +.tiny-radio__inner::after { + width: var(--ti-radio-inner-size); + height: var(--ti-radio-inner-size); + border-radius: 100%; + background-color: var(--ti-radio-inner-bgcolor); + content: ''; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform 0.15s ease-in; + transition: -webkit-transform 0.15s ease-in; + transition: transform 0.15s ease-in; + transition: transform 0.15s ease-in, -webkit-transform 0.15s ease-in; +} +.tiny-radio__original { + opacity: 0; + outline: 0; + position: absolute; + z-index: -1; + margin: 0; + width: 0; + height: 0; +} +.tiny-radio__label { + font-size: var(--ti-radio-font-size); + padding-left: 8px; + vertical-align: middle; +} +.tiny-radio--medium.is-bordered { + border-radius: var(--ti-radio-bordered-border-radius); + height: var(--ti-radio-medium-height); +} +.tiny-radio--medium.is-bordered .tiny-radio__inner { + height: var(--ti-radio-medium-inner-height); + width: var(--ti-radio-medium-inner-width); +} +.tiny-radio--medium.is-bordered .tiny-radio__label { + font-size: var(--ti-radio-font-size); +} +.tiny-radio--small.is-bordered { + border-radius: var(--ti-radio-bordered-border-radius); + height: var(--ti-radio-small-height); +} +.tiny-radio--small.is-bordered .tiny-radio__inner { + height: var(--ti-radio-small-inner-height); + width: var(--ti-radio-small-inner-width); +} +.tiny-radio--small.is-bordered .tiny-radio__label { + font-size: var(--ti-radio-font-size); +} +.tiny-radio--mini.is-bordered { + padding: 0 8px; + border-radius: var(--ti-radio-bordered-border-radius, 2px); + height: var(--ti-radio-mini-height); + line-height: calc(var(--ti-radio-mini-height) - 2px); +} +.tiny-radio--mini.is-bordered .tiny-radio__inner { + height: var(--ti-radio-mini-inner-height); + width: var(--ti-radio-mini-inner-width); +} +.tiny-radio--mini.is-bordered .tiny-radio__inner::after { + width: 4px; + height: 4px; +} +.tiny-radio--mini.is-bordered .tiny-radio__label { + font-size: var(--ti-radio-font-size); +} +.tiny-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .tiny-radio__inner { + -webkit-box-shadow: 0 0 2px 2px var(--ti-radio-bordered-hover-border-color); + box-shadow: 0 0 2px 2px var(--ti-radio-bordered-hover-border-color); +} +.tiny-radio-button { + --ti-radio-button-color: var(--ti-base-color-info-normal); + --ti-radio-button-hover-color: var(--ti-base-color-light); + --ti-radio-button-border-color: var(--ti-base-color-border); + --ti-radio-button-border-radius: var(--ti-common-border-radius-normal); + --ti-radio-button-font-size: var(--ti-common-font-size-base); + --ti-radio-button-bgcolor: var(--ti-base-color-light); + --ti-radio-button-checked-normal-color: var(--ti-base-color-brand-6); + --ti-radio-button-checked-hover-color: var(--ti-base-color-brand-5); + --ti-radio-button-disabled-color: var(--ti-base-color-placeholder); + --ti-radio-button-disabled-bgcolor: var(--ti-base-color-bg-5); + --ti-radio-button-medium-font-size: var(--ti-common-font-size-1); +} +.tiny-radio-button:first-child .tiny-radio-button__inner { + border-left: 1px solid var(--ti-radio-button-border-color); + border-radius: var(--ti-radio-button-border-radius) 0 0 var(--ti-radio-button-border-radius); +} +.tiny-radio-button:first-child .tiny-radio-button__orig-radio:checked + .tiny-radio-button__inner { + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-radio-button:last-child .tiny-radio-button__inner { + border-radius: 0 var(--ti-radio-button-border-radius) var(--ti-radio-button-border-radius) 0; +} +.tiny-radio-button:first-child:last-child .tiny-radio-button__inner { + border-radius: var(--ti-radio-button-border-radius); +} +.tiny-radio-button, +.tiny-radio-button__inner { + display: inline-block; + position: relative; + outline: 0; +} +.tiny-radio-button__inner { + color: var(--ti-radio-button-color); + font-size: var(--ti-radio-button-font-size); + background: var(--ti-radio-button-bgcolor); + border: 1px solid var(--ti-radio-button-border-color); + padding: 12px 20px; + font-weight: 500; + border-radius: 0; + border-left: 0; + line-height: 1; + white-space: nowrap; + vertical-align: middle; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + cursor: pointer; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-radio-button__inner.is-round { + padding: 12px 20px; +} +.tiny-radio-button__inner:hover { + color: var(--ti-radio-button-hover-color); + background-color: var(--ti-radio-button-checked-hover-color); + border-color: var(--ti-radio-button-checked-hover-color); + outline: 0; +} +.tiny-radio-button__inner [class*='tiny-icon'] { + line-height: 0.9; +} +.tiny-radio-button__inner [class*='tiny-icon'] + span { + margin-left: 5px; +} +.tiny-radio-button__orig-radio { + opacity: 0; + outline: 0; + position: absolute; + z-index: -1; +} +.tiny-radio-button__orig-radio:checked + .tiny-radio-button__inner { + color: #fff; + background-color: var(--ti-radio-button-checked-normal-color); + border-color: var(--ti-radio-button-checked-normal-color); + -webkit-box-shadow: -1px 0 0 0 var(--ti-radio-button-checked-normal-color); + box-shadow: -1px 0 0 0 var(--ti-radio-button-checked-normal-color); +} +.tiny-radio-button__orig-radio:checked + .tiny-radio-button__inner:hover { + background-color: var(--ti-radio-button-checked-hover-color); + border-color: var(--ti-radio-button-checked-hover-color); + -webkit-box-shadow: -1px 0 0 0 var(--ti-radio-button-checked-hover-color); + box-shadow: -1px 0 0 0 var(--ti-radio-button-checked-hover-color); +} +.tiny-radio-button__orig-radio:disabled + .tiny-radio-button__inner { + color: var(--ti-radio-button-disabled-color); + border-color: var(--ti-radio-button-border-color); + background-color: var(--ti-radio-button-disabled-bgcolor); + background-image: none; + -webkit-box-shadow: none; + box-shadow: none; + cursor: not-allowed; +} +.tiny-radio-button__orig-radio:disabled:checked + .tiny-radio-button__inner { + background-color: var(--ti-radio-input-checked-disabled-color); +} +.tiny-radio-button__orig-radio:disabled:checked + .tiny-radio-button__inner, +.tiny-radio-button__orig-radio:disabled:checked + .tiny-radio-button__inner:hover { + border-color: var(--ti-radio-input-checked-disabled-color); +} +.tiny-radio-button--medium .tiny-radio-button__inner { + font-size: var(--ti-radio-button-medium-font-size); + padding: 10px 20px; + border-radius: 0; +} +.tiny-radio-button--medium .tiny-radio-button__inner.is-round { + padding: 10px 20px; +} +.tiny-radio-button--small .tiny-radio-button__inner { + font-size: var(--ti-radio-button-font-size); + padding: 9px 15px; + border-radius: 0; +} +.tiny-radio-button--small .tiny-radio-button__inner.is-round { + padding: 9px 15px; +} +.tiny-radio-button--mini .tiny-radio-button__inner { + font-size: var(--ti-radio-button-font-size); + padding: 7px 15px; + border-radius: 0; +} +.tiny-radio-button--mini .tiny-radio-button__inner.is-round { + padding: 7px 15px; +} +.tiny-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled) { + -webkit-box-shadow: 0 0 2px 2px var(--ti-radio-bordered-hover-border-color); + box-shadow: 0 0 2px 2px var(--ti-radio-bordered-hover-border-color); +} +.tiny-radio-group { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; +} +.tiny-radio-group.list-inline { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-radio-group.list-inline .tiny-radio { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-right: 0; +} +.tiny-radio-group.list-inline .tiny-radio:not(:last-child) { + margin-bottom: 8px; +} +.tiny-radio-group.list-inline .tiny-radio-button { + display: block; +} +.tiny-radio-group.list-inline .tiny-radio-button:first-child .tiny-radio-button__inner { + border-radius: var(--ti-radio-button-border-radius) var(--ti-radio-button-border-radius) 0 0; + border-top: 1px solid var(--ti-radio-button-border-color); +} +.tiny-radio-group.list-inline .tiny-radio-button:last-child .tiny-radio-button__inner { + border-radius: 0 0 var(--ti-radio-button-border-radius) var(--ti-radio-button-border-radius); +} +.tiny-radio-group.list-inline .tiny-radio-button.is-active .tiny-radio-button__inner { + -webkit-box-shadow: none; + box-shadow: none; + border-color: var(--ti-radio-button-checked-normal-color); +} +.tiny-radio-group.list-inline .tiny-radio-button.is-active.is-disabled .tiny-radio-button__inner { + border-color: var(--ti-radio-input-checked-disabled-color); +} +.tiny-radio-group.list-inline .tiny-radio-button__inner { + border-top: 0; + border-left: 1px solid var(--ti-radio-button-border-color); +} +.tiny-rate { + --ti-rate-bottom-font-size: var(--ti-common-font-size-base); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + outline: 0; +} +.tiny-rate:active, +.tiny-rate:focus { + outline-width: 0; +} +.tiny-rate .tiny-rate__star { + position: relative; + display: inline-block; + font-size: 0; + vertical-align: middle; + text-align: center; + line-height: 1; +} +.tiny-rate svg { + -webkit-transition: 0.3s; + transition: 0.3s; +} +.tiny-rate svg.hover { + -webkit-transform: scale(1.15); + transform: scale(1.15); +} +.tiny-rate .tiny-rate__decimal { + display: inline-block; + overflow: hidden; + font-size: var(--ti-common-font-size-2); + position: absolute; + top: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} +.tiny-rate .tiny-rate__text { + vertical-align: middle; + margin-left: 8px; +} +.tiny-rate .tiny-rate__bottom-text { + position: relative; + font-size: var(--ti-rate-bottom-font-size); + text-align: center; + text-overflow: clip; + overflow: hidden; + margin-top: 8px; +} +.tiny-roles { + --ti-roles-poplist-item-height: var(--ti-base-size-height-minor); + --ti-roles-poplist-item-color: var(--ti-base-color-info-normal); + --ti-roles-poplist-item-font-size: var(--ti-common-font-size-base); + --ti-roles-poplist-item-hover-background: var(--ti-base-color-hover-background); + --ti-roles-poplist-item-selected-background: var(--ti-base-color-selected-background); + --ti-roles-poplist-item-selected-font-color: var(--ti-base-color-selected-font-color); +} +.tiny-roles svg { + margin-left: 2px; +} +.tiny-roles__selector.tiny-popover.tiny-popper { + padding: 0; +} +.tiny-roles__selector .tiny-roles__poplist-item { + padding: 0 8px; +} +.tiny-roles__selector-body { + max-height: 300px; + overflow-y: auto; + overflow-x: hidden; +} +.tiny-roles__poplist { + min-width: 180px; +} +.tiny-roles__poplist-item { + min-height: var(--ti-roles-poplist-item-height); + line-height: var(--ti-roles-poplist-item-height); + max-width: 100%; + color: var(--ti-roles-poplist-item-color); + font-size: var(--ti-roles-poplist-item-font-size); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; +} +.tiny-roles__poplist-item:hover { + background: var(--ti-roles-poplist-item-hover-background); +} +.tiny-roles__poplist-item.is-selected, +.tiny-roles__poplist-item.is-selected:hover { + background: var(--ti-roles-poplist-item-selected-background); + color: var(--ti-roles-poplist-item-selected-font-color); +} +.tiny-row { + width: 100%; +} +.tiny-row:after, +.tiny-row:before { + content: ''; + display: table; +} +.tiny-row:after { + clear: both; +} +.tiny-row.row-flex { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-row.row-justify-start { + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; +} +.tiny-row.row-justify-end { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; +} +.tiny-row.row-justify-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-row.row-justify-space-around { + -ms-flex-pack: distribute; + justify-content: space-around; +} +.tiny-row.row-justify-space-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} +.tiny-row.row-align-top { + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +.tiny-row.row-align-middle { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-row.row-align-bottom { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; +} +.tiny-scroll-text { + --ti-scroll-text-height: var(--ti-base-size-height-small); + --ti-scroll-text-background: #f1f1f1; + width: 300px; + height: var(--ti-scroll-text-height); + line-height: var(--ti-scroll-text-height); + background: var(--ti-scroll-text-background); + margin: 0 auto; + overflow: hidden; +} +.tiny-scroll-text .tiny-scroll-text__content { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + height: 100%; + padding: 0 8px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + white-space: nowrap; + position: relative; + -webkit-animation: infinite linear; + animation: infinite linear; + -webkit-animation-duration: 7s; + animation-duration: 7s; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-scroll-text .tiny-scroll-text__content { + display: inline-block; + } +} +@supports (-ms-ime-align: auto) { + .tiny-scroll-text .tiny-scroll-text__content { + display: inline-block; + } +} +.tiny-scroll-text .tiny-scroll-text__content.left { + -webkit-animation-name: moveLeft; + animation-name: moveLeft; +} +.tiny-scroll-text .tiny-scroll-text__content.right { + -webkit-animation-name: moveRight; + animation-name: moveRight; +} +.tiny-scroll-text .tiny-scroll-text__content.up { + -webkit-animation-name: moveUp; + animation-name: moveUp; +} +.tiny-scroll-text .tiny-scroll-text__content.down { + -webkit-animation-name: moveDown; + animation-name: moveDown; +} +.tiny-scroll-text .tiny-scroll-text__content.singleUp { + -webkit-animation-name: singleUp; + animation-name: singleUp; +} +.tiny-scroll-text .tiny-scroll-text__content.stop { + -webkit-animation-play-state: paused; + animation-play-state: paused; +} +.tiny-scroll-text .tiny-scroll-text__content.down, +.tiny-scroll-text .tiny-scroll-text__content.up { + width: 100%; + white-space: normal; +} +.tiny-scroll-text .tiny-scroll-text__content p { + width: auto; + line-height: 1; + margin: 0; +} +@-webkit-keyframes moveLeft { + 0% { + -webkit-transform: translateX(300px); + transform: translateX(300px); + } + 100% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } +} +@keyframes moveLeft { + 0% { + -webkit-transform: translateX(300px); + transform: translateX(300px); + } + 100% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } +} +@-webkit-keyframes moveRight { + 0% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + 100% { + -webkit-transform: translateX(300px); + transform: translateX(300px); + } +} +@keyframes moveRight { + 0% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + 100% { + -webkit-transform: translateX(300px); + transform: translateX(300px); + } +} +@-webkit-keyframes moveUp { + 0% { + -webkit-transform: translateY(100%); + transform: translateY(100%); + } + 100% { + -webkit-transform: translateY(-100%); + transform: translateY(-100%); + } +} +@keyframes moveUp { + 0% { + -webkit-transform: translateY(100%); + transform: translateY(100%); + } + 100% { + -webkit-transform: translateY(-100%); + transform: translateY(-100%); + } +} +@-webkit-keyframes moveDown { + 0% { + -webkit-transform: translateY(-100%); + transform: translateY(-100%); + } + 100% { + -webkit-transform: translateY(100%); + transform: translateY(100%); + } +} +@keyframes moveDown { + 0% { + -webkit-transform: translateY(-100%); + transform: translateY(-100%); + } + 100% { + -webkit-transform: translateY(100%); + transform: translateY(100%); + } +} +.tiny-scrollbar { + overflow: hidden; + position: relative; +} +.tiny-scrollbar:active > .tiny-scrollbar__bar, +.tiny-scrollbar:focus > .tiny-scrollbar__bar, +.tiny-scrollbar:hover > .tiny-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; +} +.tiny-scrollbar__wrap { + overflow: scroll; + height: 100%; + max-height: 200px; +} +.tiny-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; +} +.tiny-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: 0.3s background-color; + transition: 0.3s background-color; +} +.tiny-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); +} +.tiny-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; +} +.tiny-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; +} +.tiny-scrollbar__bar.is-vertical > div { + width: 100%; +} +.tiny-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; +} +.tiny-scrollbar__bar.is-horizontal > div { + height: 100%; +} +.tiny-transition-search-line-fade-enter, +.tiny-transition-search-line-fade-enter-from, +.tiny-transition-search-line-fade-leave-to { + opacity: 0; +} +.tiny-transition-search-line-fade-enter-to { + opacity: 0; +} +.tiny-transition-search-line-fade-enter-active, +.tiny-transition-search-line-fade-leave-active { + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} +.tiny-search { + --ti-search-font-size: var(--ti-common-font-size-base); + --ti-search-input-height: var(--ti-base-size-height-normal); + --ti-search-inputinner-height: var(--ti-base-size-height-small); + --ti-search-input-color: var(--ti-base-color-info-normal); + --ti-search-input-background: var(--ti-base-color-light); + --ti-search-input-btn-color: var(--ti-base-color-brand-6); + --ti-search-input-btn-hover-color: var(--ti-base-color-brand-5); + --ti-search-input-btn-font-size: var(--ti-common-font-size-1); + --ti-search-input-border-color: var(--ti-base-color-border); + --ti-search-icon-border-color: #dbdbdb; + --ti-search-icon-color: #c4c4c4; + --ti-search-size-height-normal: var(--ti-base-size-height-normal); + --ti-search-size-height-small: var(--ti-base-size-height-small); + --ti-search-selector-color: var(--ti-base-color-info-normal); + --ti-search-line-hover-color: var(--ti-base-color-border-hover); + --ti-search-list-hover-background: var(--ti-base-color-selected-background); + --ti-search-selector-radius: var(--ti-common-border-radius-normal); + --ti-search-selector-background: var(--ti-base-color-light); + --ti-search-selector-list-height: var(--ti-base-size-height-normal); + position: relative; + display: inline-block; + font-size: var(--ti-search-font-size); + width: 100%; +} +.tiny-search .tiny-search__line { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + height: var(--ti-search-input-height); + border: 1px solid var(--ti-search-input-border-color); + border-radius: var(--ti-common-border-radius-normal); + background-color: var(--ti-search-input-background); + -webkit-transition: 0.4s; + transition: 0.4s; + border-collapse: separate; +} +.tiny-search .tiny-search__line:hover { + border-color: var(--ti-search-line-hover-color); +} +.tiny-search .tiny-search__line.focus, +.tiny-search .tiny-search__line:focus { + border-color: var(--ti-search-input-btn-color); +} +.tiny-search .tiny-search__input { + width: 100%; + height: 100%; + line-height: 1; + color: var(--ti-search-input-color); + padding: 0 0 0 8px; + border: 0; + outline: 0; + background: 0 0; +} +.tiny-search .tiny-search__input::-moz-placeholder { + color: #999; + opacity: 1; +} +.tiny-search .tiny-search__input:-ms-input-placeholder { + color: #999; +} +.tiny-search .tiny-search__input::-webkit-input-placeholder { + color: #999; +} +.tiny-search .tiny-search__input::-ms-input-placeholder { + color: #999; +} +.tiny-search .tiny-search__input::placeholder { + color: #999; +} +.tiny-search .tiny-search__input:focus::-moz-placeholder { + color: #d9d9d9; + opacity: 1; +} +.tiny-search .tiny-search__input:focus:-ms-input-placeholder { + color: #d9d9d9; +} +.tiny-search .tiny-search__input:focus::-webkit-input-placeholder { + color: #d9d9d9; +} +.tiny-search .tiny-search__input:focus::-ms-input-placeholder { + color: #d9d9d9; +} +.tiny-search .tiny-search__input:focus::placeholder { + color: #d9d9d9; +} +.tiny-search .tiny-search__input-btn { + text-align: center; +} +.tiny-search .tiny-search__input-btn a { + text-decoration: none; + display: block; + width: var(--ti-search-inputinner-height); + height: 100%; + line-height: var(--ti-search-inputinner-height); +} +.tiny-search .tiny-search__input-btn svg { + fill: var(--ti-search-input-btn-color); + font-size: var(--ti-search-input-btn-font-size); +} +.tiny-search .tiny-search__input-btn:hover svg { + fill: var(--ti-search-input-btn-hover-color); +} +.tiny-search .tiny-search__present { + color: var(--ti-search-selector-color); + line-height: var(--ti-search-size-height-normal); + padding-left: 8px; + white-space: nowrap; +} +.tiny-search .tiny-search__present .icon-outer { + height: calc(var(--ti-search-size-height-normal) - 12px); + line-height: calc(var(--ti-search-size-height-normal) - 12px); + display: inline-block; + padding: 0 8px 0 4px; + border-right: 1px solid var(--ti-search-input-border-color); + cursor: pointer; +} +.tiny-search .tiny-search__present .icon-outer svg { + font-size: var(--ti-search-input-btn-font-size); + fill: var(--ti-search-icon-color); +} +.tiny-search .tiny-search__selector { + position: absolute; + top: 32px; + left: 0; + overflow: hidden; + min-width: 68px; + border: 1px solid var(--ti-search-input-border-color); + border-radius: var(--ti-search-selector-radius); + font-size: var(--ti-search-font-size); + -webkit-box-shadow: var(--ti-base-box-shadow); + box-shadow: var(--ti-base-box-shadow); + background: var(--ti-search-selector-background); + color: var(--ti-search-selector-color); + margin-top: 2px; +} +.tiny-search .tiny-search__selector-body { + max-height: 300px; + overflow-y: auto; + overflow-x: hidden; +} +.tiny-search .tiny-search__poplist-item { + min-height: var(--ti-search-selector-list-height); + padding: 0 8px; + line-height: var(--ti-search-selector-list-height); + max-width: 100%; + font-size: var(--ti-search-font-size); + overflow: hidden; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-search .tiny-search__poplist-item:hover { + background: var(--ti-search-list-hover-background); + cursor: pointer; +} +.tiny-search .tiny-search__poplist-item span { + font-size: var(--ti-search-font-size); +} +.tiny-search .tiny-search__poplist-item .icon-check { + font-size: var(--ti-common-font-size-2); +} +.tiny-search .tiny-search__poplist-item .icon-check:hover { + color: var(--ti-search-input-btn-hover-color); +} +.tiny-search.mini .tiny-search__line { + border-radius: var(--ti-search-input-height); + width: 100%; + float: right; +} +.tiny-search.mini.collapse .tiny-search__input-btn svg { + fill: var(--ti-search-icon-color); +} +.tiny-search.mini .tiny-search__input { + border-radius: var(--ti-search-input-height); +} +.tiny-search.collapse .tiny-search__input { + padding: 0; + width: var(--ti-search-size-height-normal); + float: right; +} +.tiny-search.mini.collapse .tiny-search__line { + width: 30px; + float: right; + background-color: transparent; + border-collapse: separate; +} +.tiny-search.mini.collapse .tiny-search__input, +.tiny-search.mini.collapse .tiny-search__present { + display: none; +} +.tiny-search .fade-enter-to { + opacity: 0; +} +.tiny-search .fade-enter, +.tiny-search .fade-leave-to { + opacity: 0; +} +.tiny-select { + --ti-select-inner-hover-border-color: var(--ti-base-color-brand-5); + --ti-select-input-color: #666; + --ti-select-input-font-size: var(--ti-common-font-size-base); + --ti-select-input-caret-color: var(--ti-base-color-brand-6); + --ti-select-input-caret-hover-color: var(--ti-base-color-brand-5); + --ti-select-input-caret-font-size: var(--ti-common-font-size-1); + --ti-select-input-caret-close-color: var(--ti-base-color-bg-5); + --ti-select-input-caret-close-hover-color: var(--ti-base-color-placeholder); + --ti-select-input-disabled-caret-color: var(--ti-base-color-border); + --ti-select-input-disabled-inner-hover-border-color: #e4e7ed; + --ti-select-input-mini-height: var(--ti-base-size-height-mini); + --ti-select-input-small-height: var(--ti-base-size-height-small); + --ti-select-input-medium-height: var(--ti-base-size-height-medium); + display: inline-block; + position: relative; + width: 100%; + outline: 0; +} +.tiny-select .tiny-select__tags > span { + display: contents; +} +.tiny-select__input { + border: none; + outline: 0; + padding: 0; + margin-left: 8px; + color: var(--ti-select-input-color); + font-size: var(--ti-select-input-font-size); + height: 28px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; +} +.tiny-select__input.is-mini { + height: var(--ti-select-input-mini-height); +} +.tiny-select__input.is-small { + height: var(--ti-select-input-small-height); +} +.tiny-select__input.is-medium { + height: var(--ti-select-input-medium-height); +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-select.tiny-select__multiple:not(.tiny-select__collapse-tags):not(.tiny-select__filterable) + .tiny-select__tags + > span { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -ms-flex-line-pack: start; + align-content: flex-start; + } +} +@supports (-ms-ime-align: auto) { + .tiny-select.tiny-select__multiple:not(.tiny-select__collapse-tags):not(.tiny-select__filterable) + .tiny-select__tags + > span { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -ms-flex-line-pack: start; + align-content: flex-start; + } +} +.tiny-select.tiny-select__collapse-tags .tiny-select__tags > span { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 100%; +} +.tiny-select.tiny-select__collapse-tags .tiny-select__tags > span > span:not(:only-child):first-child { + max-width: 70%; +} +.tiny-select.tiny-select__collapse-tags.tiny-select__filterable .tiny-select__tags > span { + width: auto; + max-width: 76%; +} +.tiny-select.tiny-select__collapse-tags.tiny-select__filterable .tiny-select__tags > span > span:first-child { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-select.tiny-select__collapse-tags.tiny-select__filterable .tiny-select__tags > span > span:first-child { + -ms-flex-preferred-size: auto; + flex-basis: auto; + } +} +.tiny-select.tiny-select__collapse-tags.tiny-select__filterable + .tiny-select__tags + > span + > span:not(:only-child):first-child, +.tiny-select.tiny-select__collapse-tags.tiny-select__filterable .tiny-select__tags > span > span:only-child { + max-width: 100%; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-select.tiny-select__collapse-tags.tiny-select__filterable + .tiny-select__tags + > span + > span:not(:only-child):not(:first-child) { + -ms-flex-negative: 0; + flex-shrink: 0; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } +} +.tiny-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + padding-left: 4px; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.tiny-select__tags.is-showicon { + padding-left: 24px; +} +.tiny-select__tags .tiny-tag.tiny-tag--info { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-select__tags-text { + width: 100%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.tiny-select__tags-text + .tiny-tag__close { + -ms-flex-negative: 0; + flex-shrink: 0; +} +.tiny-select-tip .tiny-select-tipcontent { + max-width: 300px; +} +.tiny-select .tiny-input .tiny-select__caret { + fill: var(--ti-select-input-caret-color); + font-size: var(--ti-select-input-caret-font-size); + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; +} +.tiny-select .tiny-input .tiny-select__caret:hover { + fill: var(--ti-select-input-caret-hover-color); +} +.tiny-select .tiny-input .tiny-select__caret.is-reverse { + -webkit-transform: rotateZ(0); + transform: rotateZ(0); +} +.tiny-select .tiny-input .tiny-select__caret.is-show-close { + font-size: var(--ti-select-input-font-size); + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + fill: var(--ti-select-input-caret-close-color); + -webkit-transition: fill 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: fill 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-select .tiny-input .tiny-select__caret.is-show-close:hover { + color: var(--ti-select-input-caret-close-hover-color); +} +.tiny-select .tiny-input .tiny-select__copy { + cursor: pointer; +} +.tiny-select .tiny-input.is-disabled .tiny-select__caret { + fill: var(--ti-select-input-disabled-caret-color); + cursor: not-allowed; +} +.tiny-select .tiny-input.is-disabled .tiny-input__inner { + cursor: not-allowed; +} +.tiny-select .tiny-input.is-disabled .tiny-input__inner:hover { + border-color: var(--ti-select-input-disabled-inner-hover-border-color); +} +.tiny-select .tiny-input.is-focus .tiny-input__inner { + border-color: var(--ti-select-inner-hover-border-color); +} +.tiny-select > .tiny-input { + display: block; +} +.tiny-select .tiny-tag { + white-space: nowrap; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 4px; + background-color: #f0f2f5; +} +.tiny-select-dropdown { + --ti-select-dropdown-border-color: transparent; + --ti-select-dropdown-border-radius: var(--ti-common-border-radius-normal); + --ti-select-dropdown-bgcolor: var(--ti-base-color-light); + --ti-select-dropdown-empty-color: var(--ti-base-color-placeholder); + --ti-select-dropdown-empty-font-size: var(--ti-common-font-size-1); + --ti-select-dropdown-list-padding: 0 0 6px 0; + --ti-select-dropdown-item-padding: 0 8px; + --ti-select-dropdown-item-gap: 0; + position: absolute; + z-index: 1001; + border: 1px solid var(--ti-select-dropdown-border-color); + border-radius: var(--ti-select-dropdown-border-radius); + background-color: var(--ti-select-dropdown-bgcolor); + -webkit-box-shadow: var(--ti-base-box-shadow); + box-shadow: var(--ti-base-box-shadow); + margin-top: var(--ti-base-dropdown-gap); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-select-dropdown .tiny-tree { + max-height: 300px; + overflow-y: auto; +} +.tiny-select-dropdown.tiny-popper { + margin-top: var(--ti-base-dropdown-gap); +} +.tiny-select-dropdown .tiny-scrollbar.is-empty .tiny-select-dropdown__list { + padding: 0; +} +.tiny-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: var(--ti-select-dropdown-empty-color); + font-size: var(--ti-select-dropdown-empty-font-size); +} +.tiny-select-dropdown .tiny-select-dropdown__wrap { + max-height: 197px; + margin-right: -4px; +} +.tiny-select-dropdown .tiny-select-dropdown__list { + list-style: none; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: var(--ti-select-dropdown-list-padding); + text-align: left; +} +.tiny-select-dropdown .tiny-select-dropdown__item { + white-space: nowrap; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: var(--ti-select-dropdown-item-padding); + margin-top: var(--ti-select-dropdown-item-gap); + border-radius: var(--ti-common-border-radius-normal); +} +.tiny-select-dropdown .tiny-select-dropdown__wrap.virtual { + position: relative; + margin-right: 0 !important; +} +.tiny-select-dropdown .tiny-select-dropdown__wrap.virtual .tiny-select-dropdown__item { + position: absolute; + width: 100%; +} +.tiny-slide-bar { + --ti-slider-progress-box-border-color: var(--ti-base-color-light); + --ti-slider-progress-box-hover-border-color: rgba(153, 153, 153, 0.7); + --ti-slider-progress-box-arrow-normal: #f2f2f2; + --ti-slider-progress-box-arrow-hover: #808080; + --ti-slider-progress-box-middleline-normal: #ebebeb; + padding: 0 32px; + position: relative; +} +.tiny-slide-bar > .tiny-svg { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: 2em; + cursor: pointer; + fill: var(--ti-slider-progress-box-arrow-normal); +} +.tiny-slide-bar > .tiny-svg:hover { + fill: var(--ti-slider-progress-box-arrow-hover); +} +.tiny-slide-bar > .tiny-svg.tiny-disabled, +.tiny-slide-bar > .tiny-svg.tiny-disabled:hover { + background: 0 0; + fill: #fff; + cursor: default; +} +.tiny-slide-bar > .icon-chevron-left { + left: 0; +} +.tiny-slide-bar > .icon-chevron-right { + right: 0; +} +.tiny-slide-bar li li div { + margin: 15px 0; + font-size: var(--ti-common-font-size-base); + color: #4e5e67; +} +.tiny-slide-bar li li div:nth-child(2) { + border-bottom: 1px solid var(--ti-slider-progress-box-middleline-normal); +} +.tiny-slide-bar li li div svg { + float: right; + margin: -6px 0 0 0; + background: #fff; + fill: var(--ti-slider-progress-box-middleline-normal); +} +.tiny-slide-bar .tiny-slide-bar__content { + width: 100%; + min-height: 170px; + position: relative; + overflow: hidden; +} +.tiny-slide-bar .tiny-slide-bar__list { + position: absolute; + min-height: 170px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-slide-bar .tiny-slide-bar__list > li { + width: 23%; + padding: 20px; + float: left; + margin-left: 2%; + position: relative; + border: 5px solid var(--ti-slider-progress-box-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-slide-bar .tiny-slide-bar__list > li:first-child { + margin-left: 0; +} +.tiny-slide-bar .tiny-slide-bar__list > li:hover { + border-color: var(--ti-slider-progress-box-hover-border-color); +} +.tiny-slide-bar .tiny-slide-bar__list > li > .icon-chevron-down { + position: absolute; + top: 98.8%; + left: 50%; + margin-left: -10px; + font-size: 2em; + width: 22px; + display: none !important; +} +.tiny-slide-bar .tiny-slide-bar__list > li > .icon-chevron-down:before { + content: ''; + position: absolute; + width: 20px; + height: 20px; + border-right: 5px solid var(--ti-slider-progress-box-hover-border-color); + border-bottom: 5px solid var(--ti-slider-progress-box-hover-border-color); + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + background: #fff; + top: -5px; +} +.tiny-slide-bar .tiny-slide-bar__list > li > ul { + width: 100%; + list-style: none; +} +.tiny-slide-bar .tiny-slide-bar__list > li.tiny-slide-bar__select { + border-color: var(--ti-slider-progress-box-hover-border-color); +} +.tiny-slide-bar .tiny-slide-bar__list > li.tiny-slide-bar__select > .icon-chevron-down { + display: block !important; +} +.tiny-slide-bar .tiny-slide-bar__list > li.tiny-slide-bar__select li .tiny-icon { + color: var(--ti-slider-progress-box-hover-border-color); +} +.tiny-slide-bar .tiny-slide-bar__list > li.tiny-slide-bar__select li:nth-child(2) { + border-bottom: 1px solid var(--ti-slider-progress-box-hover-border-color); +} +.tiny-split { + --ti-split-border-color: #d9d9d9; + --ti-split-trigger-background: #d9d9d9; + --ti-split-trigger-bar-background: var(--ti-base-color-secondary); + --ti-split-trigger-hover-background: var(--ti-split-trigger-background); + --ti-split-trigger-bar-hover-background: var(--ti-split-trigger-bar-background); + --ti-split-trigger-bar-con-background: var(--ti-base-color-light); + --ti-split-trigger-size: 4px; + --ti-split-trigger-con-col-cursor: e-resize; + --ti-split-trigger-con-row-cursor: n-resize; +} +.tiny-split-wrapper { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} +.tiny-split-pane { + position: absolute; +} +.tiny-split-pane.left-pane, +.tiny-split-pane.right-pane { + top: 0; + bottom: 0; + overflow: hidden; +} +.tiny-split-pane.left-pane { + left: 0; +} +.tiny-split-pane.right-pane { + right: 0; +} +.tiny-split-pane.bottom-pane, +.tiny-split-pane.top-pane { + left: 0; + right: 0; + overflow: hidden; +} +.tiny-split-pane.top-pane { + top: 0; +} +.tiny-split-pane.bottom-pane { + bottom: 0; +} +.tiny-split-pane-moving { + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-split-trigger-con { + position: absolute; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 10; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-split-trigger-con:hover .tiny-split-trigger { + background: var(--ti-split-trigger-hover-background); +} +.tiny-split-trigger-con:hover .tiny-split-trigger-bar { + background: var(--ti-split-trigger-bar-hover-background); +} +.tiny-split-trigger-bar-con { + position: absolute; + overflow: hidden; + background: var(--ti-split-trigger-bar-con-background); +} +.tiny-split-trigger-bar-con.vertical { + top: 50%; + height: calc(var(--ti-split-trigger-size) * 7); + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-split-trigger-bar-con.horizontal { + left: 50%; + width: calc(var(--ti-split-trigger-size) * 7); + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); +} +.tiny-split-trigger-vertical { + width: var(--ti-split-trigger-size); + height: 100%; + background: var(--ti-split-trigger-background); +} +.tiny-split-trigger-vertical .tiny-split-trigger-bar { + width: var(--ti-split-trigger-size); + height: var(--ti-split-trigger-size); + background: var(--ti-split-trigger-bar-background); + float: left; + margin-top: var(--ti-split-trigger-size); + border-radius: 50%; +} +.tiny-split-trigger-horizontal { + height: var(--ti-split-trigger-size); + width: 100%; + background: var(--ti-split-trigger-background); +} +.tiny-split-trigger-horizontal .tiny-split-trigger-bar { + height: var(--ti-split-trigger-size); + width: var(--ti-split-trigger-size); + background: var(--ti-split-trigger-bar-background); + float: left; + margin-left: var(--ti-split-trigger-size); + border-radius: 50%; +} +.tiny-split-horizontal .tiny-split-trigger-con { + top: 50%; + height: 100%; + width: 10px; + cursor: var(--ti-split-trigger-con-col-cursor); +} +.tiny-split-horizontal .tiny-split-vertical .tiny-split-trigger-con { + left: 50%; + height: 10px; + width: 100%; +} +.tiny-split-vertical .tiny-split-trigger-con { + left: 50%; + height: 10px; + width: 100%; + cursor: var(--ti-split-trigger-con-row-cursor); +} +.tiny-split-vertical .tiny-split-horizontal .tiny-split-trigger-con { + top: 50%; + height: 100%; + width: 10px; +} +.tiny-split .no-select { + -ms-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tiny-steps { + --ti-steps-advanced-active-color: var(--ti-base-color-brand-6); + --ti-steps-done-active-color: var(--ti-base-color-brand-6); + --ti-steps-done-icon-fill-color: var(--ti-base-color-brand-6); + --ti-steps-done-icon-color: var(--ti-base-color-light); + --ti-steps-line-background: #dbdbdb; + --ti-steps-done-font-color: var(--ti-base-color-info-normal); + --ti-steps-line-height: var(--ti-common-size-base); + --ti-steps-line-active-color: var(--ti-base-color-brand-6); + --ti-steps-advanced-border-color: var(--ti-base-color-border); + --ti-steps-advanced-text: var(--ti-base-color-placeholder); + --ti-steps-advanced-line-height: 28px; + --ti-steps-advanced-li-color: var(--ti-base-color-light); + --ti-steps-advanced-li-font-color: var(--ti-base-color-light); + --ti-steps-advanced-li-hover-color: var(--ti-base-color-placeholder); + --ti-steps-advanced-li-hover-bgcolor: #f1f1f1; + --ti-steps-advanced-link-font-size: var(--ti-common-font-size-base); + --ti-steps-advanced-dot-height: 12px; + --ti-steps-advanced-dot-width: 12px; + --ti-steps-advanced-dot-done-background: var(--ti-base-color-success-normal); + --ti-steps-advanced-dot-doing-background: #faad14; + --ti-steps-advanced-dot-wait-background: var(--ti-base-color-success-normal); + --ti-steps-advanced-count-bgcolor: var(--ti-base-color-bg-8); + --ti-steps-advanced-count-border-radius: 10px; + --ti-steps-advanced-count-font-size: var(--ti-common-font-size-base); + --ti-steps-advanced-count-height: 18px; + --ti-steps-advanced-border-size: 14px; + --ti-steps-timeline-date-time-font-size: var(--ti-common-font-size-base); + --ti-steps-timeline-name-font-size: var(--ti-common-font-size-1); + --ti-steps-timeline-date-time-color: var(--ti-base-color-placeholder); + --ti-steps-icon-size: var(--ti-common-size-5x); + --ti-steps-font-size-7: var(--ti-common-font-size-7); + --ti-steps-font-size-base: var(--ti-common-font-size-base); + --ti-steps-icon-font-size: var(--ti-common-font-size-base); + --ti-steps-icon-background: #d9d9d9; + --ti-steps-unselected-color: var(--ti-base-color-light); + color: var(--ti-steps-timeline-date-time-color); +} +.tiny-steps .tiny-steps-advanced li { + line-height: var(--ti-steps-advanced-line-height); + display: inline-block; + background: var(--ti-steps-advanced-li-color); + position: relative; +} +.tiny-steps .tiny-steps-advanced li.current a { + background: var(--ti-steps-advanced-active-color); + color: var(--ti-steps-advanced-li-font-color); + font-weight: 700; +} +.tiny-steps .tiny-steps-advanced li.current a::after { + border-left-color: var(--ti-steps-advanced-active-color); +} +.tiny-steps .tiny-steps-advanced li a { + border: solid 1px var(--ti-steps-advanced-border-color); + border-right: none; + display: block; + text-align: center; + position: relative; + text-decoration: none; + color: var(--ti-steps-advanced-text); + font-size: var(--ti-steps-advanced-link-font-size); +} +.tiny-steps .tiny-steps-advanced li a::after { + content: ''; + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-left: 9px solid #fff; + position: absolute; + right: -9px; + top: 0; + z-index: 1; +} +.tiny-steps .tiny-steps-advanced li a::before { + content: ''; + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-left: 9px solid #d7d8da; + position: absolute; + left: 0; + top: 0; +} +.tiny-steps .tiny-steps-advanced li a:hover { + background: var(--ti-steps-advanced-li-hover-bgcolor); + color: var(--ti-steps-advanced-li-hover-color); + text-decoration: none; +} +.tiny-steps .tiny-steps-advanced li a:hover::after { + border-left-color: var(--ti-steps-advanced-li-hover-bgcolor); +} +.tiny-steps .tiny-steps-advanced li:first-child a { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.tiny-steps .tiny-steps-advanced li:first-child a::before { + display: none; +} +.tiny-steps .tiny-steps-advanced li:last-child a { + border-right: solid 1px var(--ti-steps-advanced-border-color); + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.tiny-steps .tiny-steps-advanced li:last-child a::after { + display: none; +} +.tiny-steps .tiny-steps-advanced li .dot { + height: var(--ti-steps-advanced-dot-height); + width: var(--ti-steps-advanced-dot-width); + margin-right: 8px; + padding: 0; + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + position: absolute; +} +.tiny-steps .tiny-steps-advanced li .dot svg { + width: 100%; + height: 100%; + fill: var(--ti-steps-advanced-text); +} +.tiny-steps .tiny-steps-advanced li.current .dot svg, +.tiny-steps .tiny-steps-advanced li.current .dot svg:hover { + fill: var(--ti-steps-advanced-li-color); +} +.tiny-steps .tiny-steps-advanced li:hover .dot svg { + fill: var(--ti-steps-advanced-text); +} +.tiny-steps .tiny-steps-advanced .count { + background-color: var(--ti-steps-advanced-count-bgcolor); + border-radius: var(--ti-steps-advanced-count-border-radius); + color: var(--ti-steps-advanced-li-font-color); + display: inline-block; + font-size: var(--ti-steps-advanced-count-font-size); + height: var(--ti-steps-advanced-count-height); + line-height: var(--ti-steps-advanced-count-height); + padding: 0 6px; + text-align: center; + white-space: nowrap; + position: absolute; + top: -10px; + right: 10px; +} +.tiny-steps .line { + background: var(--ti-steps-line-background); +} +.tiny-steps .icon { + width: var(--ti-steps-icon-size); + height: var(--ti-steps-icon-size); + line-height: var(--ti-steps-icon-size); + position: relative; + font-size: var(--ti-steps-icon-font-size); + text-align: center; + left: calc(50% - 10px); + top: 4px; + border-radius: 50%; + background: var(--ti-steps-icon-background); + color: var(--ti-steps-unselected-color); + cursor: pointer; + z-index: 15; +} +.tiny-steps .date-time { + text-align: center; +} +.tiny-steps .node-description { + position: relative; + margin-top: 6px; + overflow: hidden; + text-align: center; +} +.tiny-steps .node-description .name { + font-size: var(--ti-steps-font-size-base); + float: left; + width: 100%; +} +.tiny-steps .node-description .status { + font-size: var(--ti-steps-font-size-base); + float: left; + width: 100%; +} +.tiny-steps .process-done .node-description { + color: var(--ti-steps-done-font-color); +} +.tiny-steps .process-done .icon { + background: var(--ti-steps-done-icon-color); + color: var(--ti-steps-done-icon-fill-color); + width: var(--ti-steps-icon-size); + height: var(--ti-steps-icon-size); + line-height: var(--ti-steps-icon-size); + font-size: var(--ti-steps-icon-size); +} +.tiny-steps .process-done .icon .tiny-svg { + fill: var(--ti-steps-done-icon-fill-color); + vertical-align: baseline; + border: 1px solid var(--ti-steps-done-active-color); + border-radius: 50%; + padding: 2px; +} +.tiny-steps .process-done .line { + background: var(--ti-steps-line-active-color); +} +.tiny-steps .process-current .icon { + background: var(--ti-steps-advanced-active-color); + color: var(--ti-steps-advanced-li-font-color); + font-size: var(--ti-steps-font-size-base); +} +.tiny-steps .reverse .process-current .line { + background: var(--ti-steps-line-active-color); +} +.tiny-steps .tiny-steps-normal { + overflow: hidden; +} +.tiny-steps .tiny-steps-normal .normal { + display: block; + float: left; +} +.tiny-steps .tiny-steps-normal .line { + height: var(--ti-steps-line-height); + left: 50%; + top: -8px; + position: relative; +} +.tiny-steps .tiny-steps-normal .line-end { + width: 0; +} +.tiny-steps .tiny-steps-normal .process-done .line { + background: var(--ti-steps-line-active-color); +} +.tiny-steps .tiny-steps-normal .process-current .name { + color: var(--ti-steps-advanced-active-color); + font-weight: 700; +} +.tiny-steps .tiny-steps-normal .icon span { + display: inline-block; +} +.tiny-steps .tiny-steps-timeline { + overflow: hidden; + font-size: var(--ti-steps-timeline-name-font-size); + color: var(--ti-steps-timeline-date-time-color); +} +.tiny-steps .tiny-steps-timeline .timeline .line { + width: var(--ti-steps-line-height); + float: left; +} +.tiny-steps .tiny-steps-timeline .timeline .line .tiny-svg { + vertical-align: baseline; +} +.tiny-steps .tiny-steps-timeline .timeline .date-time { + width: 100px; + float: left; + padding-right: 20px; + text-align: right; +} +.tiny-steps .tiny-steps-timeline .timeline .date-time .time { + display: block; + line-height: 1; +} +.tiny-steps .tiny-steps-timeline .timeline .date-time .date { + display: block; + line-height: 1; + margin-bottom: 4px; +} +.tiny-steps .tiny-steps-timeline .timeline.process-done { + color: var(--ti-steps-done-font-color); +} +.tiny-steps .tiny-steps-timeline .timeline.process-current { + color: var(--ti-steps-advanced-active-color); +} +.tiny-steps .tiny-steps-timeline .timeline .name { + float: left; + margin-left: 20px; + line-height: 1.45em; +} +.tiny-steps .tiny-steps-timeline .timeline .icon { + top: 0; +} +.tiny-steps.mobile { + padding-left: 10%; +} +.tiny-steps.mobile .tiny-steps-timeline { + overflow: inherit; +} +.tiny-steps.mobile .tiny-steps-timeline .tiny-icon { + font-size: 45px; +} +.tiny-steps.mobile .tiny-steps-timeline .timeline .line .icon { + width: 45px; + line-height: 45px; + height: 45px; + font-size: var(--ti-steps-font-size-7); + position: relative; + left: -20px; +} +.tiny-steps.mobile .tiny-steps-timeline .timeline .name { + margin-left: 30px; + font-size: 26px; +} +.tiny-steps.mobile .tiny-steps-timeline .timeline > div { + margin-left: 20px; +} +.tiny-switch { + --ti-switch-on-bgcolor: var(--ti-base-color-brand-6); + --ti-switch-off-bgcolor: var(--ti-base-color-common-2); + --ti-switch-disabled-bgcolor: var(--ti-base-color-common-1); + --ti-switch-checked-disabled-bgcolor: var(--ti-base-color-brand-3); + --ti-switch-disabled-text-color: var(--ti-base-color-bg-5); + --ti-switch-disabled-dot-color: var(--ti-base-color-bg-5); + --ti-switch-font-color: var(--ti-base-color-light); + --ti-switch-dot-color: var(--ti-base-color-light); + --ti-switch-width: 38px; + --ti-switch-height: 20px; + --ti-switch-border-radius: 24px; + --ti-switch-inner-font-size: var(--ti-common-font-size-base, 12px); + --ti-switch-dot-size: 16px; + --ti-switch-dot-offset: calc(var(--ti-switch-dot-size) + 1px); + --ti-switch-text-width: 45px; + display: inline-block; + width: var(--ti-switch-width); + height: var(--ti-switch-height); + line-height: var(--ti-switch-height); + border-radius: var(--ti-switch-border-radius); + vertical-align: middle; + border: 1px solid var(--ti-switch-off-bgcolor); + background-color: var(--ti-switch-off-bgcolor); + position: relative; + cursor: pointer; + outline: 0; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.tiny-switch .tiny-switch-inner { + color: var(--ti-switch-font-color); + font-size: var(--ti-switch-inner-font-size); + position: absolute; + left: calc(var(--ti-switch-dot-size) + 4px); + top: -1px; +} +.tiny-switch__text { + width: var(--ti-switch-text-width); +} +.tiny-switch__text .tiny-switch-inner { + left: calc(var(--ti-switch-dot-size) + 9px); +} +.tiny-switch.mini { + width: calc(var(--ti-switch-width) - 6px); +} +.tiny-switch.disabled, +.tiny-switch.tiny-switch-checked.disabled { + cursor: not-allowed; + background: var(--ti-switch-disabled-bgcolor); + border-color: var(--ti-switch-disabled-bgcolor); +} +.tiny-switch.disabled::after, +.tiny-switch.tiny-switch-checked.disabled::after { + background: var(--ti-switch-disabled-dot-color); + cursor: not-allowed; +} +.tiny-switch.disabled .tiny-switch-inner, +.tiny-switch.tiny-switch-checked.disabled .tiny-switch-inner { + color: var(--ti-switch-disabled-text-color); +} +.tiny-switch.tiny-switch-checked.disabled { + background: var(--ti-switch-checked-disabled-bgcolor); + border-color: var(--ti-switch-checked-disabled-bgcolor); +} +.tiny-switch::after { + content: ''; + width: var(--ti-switch-dot-size); + height: var(--ti-switch-dot-size); + border-radius: 50%; + background-color: var(--ti-switch-dot-color); + position: absolute; + left: 1px; + top: 1px; + cursor: pointer; + -webkit-transition: left 0.2s ease-in-out, width 0.2s ease-in-out; + transition: left 0.2s ease-in-out, width 0.2s ease-in-out; +} +.tiny-switch.tiny-switch-checked { + border-color: var(--ti-switch-on-bgcolor); + background-color: var(--ti-switch-on-bgcolor); +} +.tiny-switch.tiny-switch-checked .tiny-switch-inner { + left: 8px; + width: calc(100% - var(--ti-switch-dot-size)); + overflow: hidden; +} +.tiny-switch.tiny-switch-checked:after { + left: calc(100% - var(--ti-switch-dot-offset)); +} +.tiny-table { + --ti-table-color: var(--ti-base-color-info-normal); + --ti-table-bgcolor: #fafafa; + --ti-table-odd-bgcolor: var(--ti-base-color-light); + --ti-table-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-table-disabled-color: var(--ti-base-color-placeholder); + --ti-table-disabled-bgcolor: #f1f1f1; + --ti-table-nodata-color: #909399; + --ti-table-td-height: var(--ti-base-size-height-medium); + --ti-table-td-font-size: var(--ti-common-font-size-base); + --ti-table-border-color: var(--ti-base-color-border); + --ti-table-thead-bgcolor: var(--ti-base-color-brand-1); + --ti-table-icon-font-size: var(--ti-common-font-size-2); + --ti-table-icon-check-color: var(--ti-base-color-brand-6); +} +.tiny-table.simple table { + table-layout: fixed; +} +.tiny-table.simple table tr { + display: table-row; + vertical-align: inherit; + border-color: inherit; +} +.tiny-table.simple table tbody { + border-bottom: 1px solid var(--ti-table-border-color); +} +.tiny-table.simple table tbody tr { + color: var(--ti-table-color); + background: var(--ti-table-bgcolor); +} +.tiny-table.simple table tbody tr:nth-child(odd) { + background: var(--ti-table-odd-bgcolor); +} +.tiny-table.simple table tbody tr:hover { + background: var(--ti-table-hover-bgcolor); +} +.tiny-table.simple table tbody tr.is-disabled { + background: var(--ti-table-disabled-bgcolor); + color: var(--ti-table-disabled-color); +} +.tiny-table.simple table tbody .noData { + width: 582px; + height: 360px; + text-align: center; + color: var(--ti-table-nodata-color); + margin-bottom: -1px; + border-bottom: 1px solid var(--ti-table-border-color); + padding-top: 10px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-table.simple table th { + padding: 2px 0 2px 8px; + height: var(--ti-table-td-height); + border-left: none; +} +.tiny-table.simple table td { + padding: 2px 0 2px 8px; + height: var(--ti-table-td-height); + font-size: var(--ti-table-td-font-size); +} +.tiny-table.simple table td .overflow { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-table.simple table thead { + border-bottom: 1px solid var(--ti-table-border-color); + text-align: left; + background: var(--ti-table-thead-bgcolor); + color: var(--ti-table-color); +} +.tiny-table.simple table thead th { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: left; + font-size: var(--ti-table-td-font-size); + color: var(--ti-table-color); + line-height: 1.7em; +} +.tiny-table.simple table thead th .overflow { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-table.simple .tiny-table-header__line { + float: right; + border-left: 1px solid var(--ti-table-border-color); + height: 20px; +} +.tiny-table.simple .tiny-table-cell .tiny-svg { + font-size: var(--ti-common-font-size-2); + font-size: var(--ti-table-icon-font-size); + fill: var(--ti-table-border-color); +} +.tiny-table.simple .tiny-table-cell .tiny-svg.is-check { + fill: var(--ti-table-icon-check-color); +} +.tiny-tabs { + --ti-tabs-header-font-normal: var(--ti-base-color-common-5); + --ti-tabs-header-font-active: var(--ti-base-color-brand-6); + --ti-tabs-header-color: var(--ti-base-color-brand-6); + --ti-tabs-header-background: #f5f5f5; + --ti-tabs-border-color: var(--ti-common-color-line-dividing); + --ti-tabs-height: var(--ti-common-size-10x); + --ti-tabs-item-disabled-color: #b4bccc; + --ti-tabs-icon-close-hover-color: var(--ti-base-color-light); + --ti-tabs-new-height: 18px; + --ti-tabs-new-width: 18px; + --ti-tabs-new-radius: var(--ti-base-radius-large); + --ti-tabs-new-svg-color: var(--ti-base-color-placeholder); + --ti-tabs-font-base-size: var(--ti-common-font-size-base); + --ti-tabs-more-hover-color: var(--ti-base-color-brand-5); + --ti-tabs-more-item-hover-color: var(--ti-base-color-hover-background); + --ti-tabs-dropdown-font-size: var(--ti-common-font-size-1); + --ti-tabs-dropdown-bgcolor: var(--ti-base-color-light); + --ti-tabs-dropdown-border-radius: var(--ti-common-border-radius-normal); + --ti-tabs-dropdown-li-color: var(--ti-base-color-secondary); + --ti-tabs-dropdown-li-border-color: #e6e6e6; + --ti-tabs-small-height: var(--ti-common-size-9x); + --ti-tab-dark-border-radius: var(--ti-common-border-radius-normal) var(--ti-common-border-radius-normal) 0 0; + --ti-tab-dark-text-color-active: var(--ti-base-color-common-7); + --ti-tab-dark-bg-color-avtive: var(--ti-base-color-bg-6); + --ti-tab-dark-text-color-hover: var(--ti-base-color-white); + --ti-tab-dark-bg-color-hover: var(--ti-base-color-common-4); + --ti-tab-dark-text-color: var(--ti-base-color-common-2); + --ti-tabs-header-dark-background: var(--ti-base-color-common-6); + --ti-tabs-item-margin: var(--ti-common-space-10x); + --ti-tabs-item-horizontal-padding: 0 var(--ti-common-space-3x); + --ti-tabs-item-vertical-padding: 0 var(--ti-common-space-5x); + --ti-tabs-item-active-border: 3px solid var(--ti-tabs-header-font-active); + --ti-tabs-item-border-bottom: 1px solid var(--ti-base-color-white); + --ti-tabs-item-card-active-bgcolor: var(--ti-base-color-white); + --ti-tabs-item-card-border-radius: 0; + --ti-tabs-icon-close-default-bgcolor: transparent; + --ti-tabs-icon-close-default-color: var(--ti-tabs-header-font-normal); + --ti-tabs-icon-close-hover-color: var(--ti-tabs-header-font-active); + --ti-tabs-icon-close-size: var(--ti-common-font-size-1); + --ti-tabs-icon-close-margin: 0 0 0 5px; +} +.tiny-tabs--left, +.tiny-tabs--right, +.tiny-tabs__content, +.tiny-tabs__nav-scroll, +.tiny-tabs__nav-wrap { + overflow: hidden; +} +.tiny-tabs__header { + padding: 0; + position: relative; + margin: 0; +} +.tiny-tabs__header .tiny-tabs__active-bar { + position: absolute; + bottom: 0; + left: 0; + height: 2px; + background-color: var(--ti-tabs-header-color); + z-index: 1; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), + -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + list-style: none; +} +.tiny-tabs__header .tiny-tabs__new-tab { + float: right; + border: 1px solid var(--ti-tabs-border-color); + height: var(--ti-tabs-new-height); + line-height: var(--ti-tabs-new-height); + width: var(--ti-tabs-new-width); + margin: 12px 0 9px 10px; + border-radius: var(--ti-tabs-new-radius); + font-size: var(--ti-tabs-font-base-size); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + cursor: pointer; + -webkit-transition: all 0.15s; + transition: all 0.15s; + outline: 0; +} +.tiny-tabs__header .tiny-tabs__new-tab svg { + fill: var(--ti-tabs-new-svg-color); +} +.tiny-tabs__header .tiny-tabs__new-tab:hover svg { + fill: var(--ti-tabs-header-color); +} +.tiny-tabs__header .tiny-tabs__nav-wrap { + margin-bottom: -1px; + position: relative; +} +.tiny-tabs__header .tiny-tabs__nav-wrap::after { + content: ''; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: var(--ti-tabs-border-color); + z-index: 1; +} +.tiny-tabs__header .tiny-tabs__nav-wrap.is-scrollable { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.tiny-tabs__header .tab-dropdown { + position: absolute; + right: 8px; + z-index: 90; + font-size: var(--ti-tabs-dropdown-font-size); + -webkit-box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.18); + box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.18); + background: var(--ti-tabs-dropdown-bgcolor); + border-radius: var(--ti-tabs-dropdown-border-radius); +} +.tiny-tabs__header .tab-dropdown:before { + position: absolute; + display: inline-block; + top: -5px; + left: 44%; + width: 0; + height: 0; + content: ''; + border-style: solid; + border-width: 6px; + border-color: #fff #fff transparent transparent; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-box-shadow: 1px -1px 1px #e4e4e4; + box-shadow: 1px -1px 1px #e4e4e4; +} +.tiny-tabs__header .tab-dropdown li { + border-bottom: 1px solid var(--ti-tabs-dropdown-li-border-color); +} +.tiny-tabs__header .tab-dropdown li:last-child { + border-bottom: none; +} +.tiny-tabs__header .tab-dropdown li a { + white-space: nowrap; + color: var(--ti-tabs-dropdown-li-color); + line-height: 26px; + padding: 0 10px; + min-width: 100px; + display: block; + font-size: var(--ti-tabs-font-base-size); +} +.tiny-tabs__header .tab-dropdown li a:hover { + color: var(--ti-tabs-more-hover-color); + text-decoration: none; +} +.tiny-tabs__nav-more { + position: absolute; + cursor: pointer; + height: var(--ti-tabs-height); + line-height: var(--ti-tabs-height); + font-size: var(--ti-common-font-size-1); + right: 45px; + z-index: 99; + color: var(--ti-tabs-header-color); +} +.tiny-tabs__nav-next, +.tiny-tabs__nav-prev { + position: absolute; + cursor: pointer; + line-height: var(--ti-tabs-height); + font-size: var(--ti-common-font-size-base); + color: var(--ti-tabs-header-font-normal); +} +.tiny-tabs__nav-next { + right: 0; +} +.tiny-tabs__nav-prev { + left: 0; +} +.tiny-tabs__nav { + white-space: nowrap; + position: relative; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + float: left; + z-index: 2; +} +.tiny-tabs__nav.is-stretch { + min-width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-tabs__nav.is-stretch > * { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} +.tiny-tabs__nav.is-show-active-bar .tiny-tabs__item { + margin-right: var(--ti-tabs-item-margin); +} +.tiny-tabs__nav.is-show-active-bar .tiny-tabs__item.is-active { + border-bottom: var(--ti-tabs-item-active-border); +} +.tiny-tabs__item { + height: var(--ti-tabs-height); + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: var(--ti-tabs-height); + display: inline-block; + list-style: none; + font-size: var(--ti-tabs-dropdown-font-size); + color: var(--ti-tabs-header-font-normal); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; +} +.tiny-tabs__item:active, +.tiny-tabs__item:focus { + outline: 0; +} +.tiny-tabs__item.is-active, +.tiny-tabs__item:hover { + color: var(--ti-tabs-header-font-active); + cursor: pointer; +} +.tiny-tabs__item.is-active .tiny-tabs__icon-close svg, +.tiny-tabs__item:hover .tiny-tabs__icon-close svg { + fill: var(--ti-tabs-icon-close-hover-color); +} +.tiny-tabs__item.is-disabled { + color: var(--ti-tabs-item-disabled-color); + cursor: default; +} +.tiny-tabs__item.is-disabled .tiny-tabs__icon-close, +.tiny-tabs__item.is-disabled .tiny-tabs__icon-close:hover { + background-color: transparent; +} +.tiny-tabs__item.is-disabled .tiny-tabs__icon-close svg, +.tiny-tabs__item.is-disabled .tiny-tabs__icon-close:hover svg { + fill: var(--ti-tabs-item-disabled-color); +} +.tiny-tabs__item.is-closable > div { + display: inline-block; +} +.tiny-tabs__item > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-tabs__item .tiny-tabs__icon-close { + border-radius: 50%; + text-align: center; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin: var(--ti-tabs-icon-close-margin); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + vertical-align: middle; + background-color: var(--ti-tabs-icon-close-default-bgcolor); +} +.tiny-tabs__item .tiny-tabs__icon-close svg { + font-size: var(--ti-tabs-font-base-size); + -webkit-transform: scale(0.9); + transform: scale(0.9); + vertical-align: middle; + fill: var(--ti-tabs-icon-close-default-color); +} +.tiny-tabs__item .tiny-tabs__icon-close:hover { + background-color: var(--ti-tabs-icon-close-hover-bgcolor); +} +.tiny-tabs__item .tiny-tabs__icon-close:hover svg { + fill: var(--ti-tabs-icon-close-hover-color); +} +.tiny-tabs__content { + position: relative; + padding: 15px 24px; +} +.tiny-tabs .is-show-more { + padding: 0 48px 0 0; +} +.tiny-tabs__more-container { + position: absolute; + right: 0; + font-size: var(--ti-tabs-font-base-size); + color: var(--ti-tabs-header-font-normal); + line-height: var(--ti-tabs-height); +} +.tiny-tabs__more { + cursor: pointer; + color: var(--ti-tabs-header-color); + font-size: var(--ti-tabs-dropdown-font-size); + outline: 0; +} +.tiny-tabs__more:hover { + color: var(--ti-tabs-more-hover-color); +} +.tiny-tabs__more-popover.tiny-popover.tiny-popper { + padding: 0; + border-radius: var(--ti-tabs-dropdown-border-radius); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); +} +.tiny-tabs__more-popover .tiny-tabs__more-item { + cursor: pointer; + padding: 8px 12px; + outline: 0; +} +.tiny-tabs__more-popover .tiny-tabs__more-item:hover { + background: var(--ti-tabs-more-item-hover-color); +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--left .tiny-tabs__nav, +.tiny-tabs.tiny-tabs--card.tiny-tabs--right .tiny-tabs__nav { + width: 120px; +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active { + top: -1px; + border-bottom: var(--ti-tabs-item-border-bottom); + border-top: 1px solid var(--ti-tabs-border-color); + border-left: 1px solid var(--ti-tabs-border-color); + border-right: 1px solid var(--ti-tabs-border-color); + background-color: var(--ti-tabs-item-card-active-bgcolor); + border-radius: var(--ti-tabs-item-card-border-radius); +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active:before { + left: 0; + top: 0; +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active.is-closable { + padding: var(--ti-tabs-item-horizontal-padding); +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item.is-active { + -webkit-box-shadow: 0 -2px 0 0 #fff; + box-shadow: 0 -2px 0 0 #fff; +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item.is-active:before { + left: 0; + bottom: 0; +} +.tiny-tabs.tiny-tabs--card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item.is-active.is-closable { + padding: var(--ti-tabs-item-horizontal-padding); +} +.tiny-tabs.tiny-tabs--card > .tiny-tabs__header { + border-bottom: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item { + border-bottom: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-top: 1px solid transparent; + -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item:first-child { + border-left: none; +} +.tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__nav { + border-bottom: none; + top: 1px; +} +.tiny-tabs.tiny-tabs--border-card { + background: #fff; + border-top: 1px solid var(--ti-tabs-border-color); + -webkit-box-shadow: none; + box-shadow: none; +} +.tiny-tabs.tiny-tabs--border-card > .tiny-tabs__content { + padding: 0 24px 15px; +} +.tiny-tabs.tiny-tabs--border-card > .tiny-tabs__content .tiny-tabs__content { + padding: 15px 0; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header { + background-color: var(--ti-tabs-header-dark-background); + border: none; + margin: 0; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item { + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin: -1px -1px 0; + color: var(--ti-tab-dark-text-color); + padding: 0 24px; + border: none; + height: 37px; + margin: 5px 4px 0 0; + line-height: 37px; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item:nth-child(2) { + padding: 0 12px; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active { + color: var(--ti-tab-dark-text-color-active); + background-color: var(--ti-tab-dark-bg-color-avtive); + border: none; + border-bottom-color: #fff; + border-radius: var(--ti-tab-dark-border-radius); +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active:before { + left: 0; + top: 0; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active.is-closable { + padding: var(--ti-tabs-item-horizontal-padding); +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item:not(.is-active):hover { + color: var(--ti-tab-dark-text-color-hover); + background: var(--ti-tab-dark-bg-color-hover); +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item:first-child { + margin-left: 20px; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__nav-prev { + fill: var(--ti-common-color-icon-white); +} +.tiny-tabs.tiny-tabs--border-card .tiny-tabs--border-card .tiny-tabs--bottom { + border-top: 0; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item.is-active:before, +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active:before, +.tiny-tabs.tiny-tabs--card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item.is-active:before, +.tiny-tabs.tiny-tabs--card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item.is-active:before { + position: absolute; + content: ''; + width: 100%; + height: 0; + background: var(--ti-tabs-header-color); +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item .tiny-tabs__icon-close, +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item .tiny-tabs__icon-close, +.tiny-tabs.tiny-tabs--card.tiny-tabs--bottom > .tiny-tabs__header .tiny-tabs__item .tiny-tabs__icon-close, +.tiny-tabs.tiny-tabs--card.tiny-tabs--top > .tiny-tabs__header .tiny-tabs__item .tiny-tabs__icon-close { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: var(--ti-tabs-icon-close-size); + height: var(--ti-tabs-icon-close-size); + line-height: var(--ti-tabs-icon-close-size); + vertical-align: middle; + overflow: hidden; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; +} +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--bottom .is-scrollable, +.tiny-tabs.tiny-tabs--border-card.tiny-tabs--top .is-scrollable, +.tiny-tabs.tiny-tabs--card.tiny-tabs--bottom .is-scrollable, +.tiny-tabs.tiny-tabs--card.tiny-tabs--top .is-scrollable { + padding: 0 24px; +} +.tiny-tabs.tiny-tabs--border-card > .tiny-tabs__header .tiny-tabs__nav-wrap:after, +.tiny-tabs.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__nav-wrap:after { + content: none; +} +.tiny-tabs.tiny-tabs--small .tiny-tabs__item { + height: var(--ti-tabs-small-height); + line-height: var(--ti-tabs-small-height); +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__header { + float: left; + margin-bottom: 0; + margin-right: 10px; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap { + margin-right: -1px; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__item { + text-align: left; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card .tiny-tabs__item { + padding: var(--ti-tabs-item-vertical-padding); +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item { + border-left: 1px solid var(--ti-tabs-border-color); + border-right: 1px solid var(--ti-tabs-border-color); + border-top: 1px solid var(--ti-tabs-border-color); + background-color: var(--ti-tabs-header-background); +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item:first-child { + border-top: none; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item.is-active { + border-right-color: transparent; + border-left: var(--ti-tabs-item-active-border); + border-bottom: none; + background: 0 0; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item.is-active:first-child { + border-top: none; + border-right-color: transparent; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__item.is-active:last-child { + border-bottom: none; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__nav { + border-right: none; + border-left: none; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--card > .tiny-tabs__header .tiny-tabs__new-tab { + float: none; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__header { + border-right: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__item { + border: 1px solid transparent; + margin: -1px -1px -1px 0; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__item.is-active { + border: 1px solid var(--ti-tabs-border-color); + border-left: none; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs--border-card .tiny-tabs__item { + margin: -1px; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs--border-card .tiny-tabs__item.is-bottom.is-active { + border-left: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__active-bar, +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap::after { + right: auto; + left: 0; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-scroll { + height: 100%; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs__header { + float: right; + margin-bottom: 0; + margin-left: 10px; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs__header.is-left { + margin-left: 0; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap { + margin-left: -1px; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap.is-left { + margin-left: 0; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap:after { + left: 0; + right: auto; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item { + border-top: 1px solid var(--ti-tabs-border-color); + border-bottom: none; + background-color: var(--ti-tabs-header-background); + padding: var(--ti-tabs-item-vertical-padding); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-active { + border-left-color: transparent; + border-right: var(--ti-tabs-item-active-border); + background: 0 0; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-active:first-child { + border-left: none; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-active:last-child { + border-bottom: none; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-active.is-bottom { + border-top: 0; + border-right: 0; + border-left-color: var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-active.is-bottom:first-child { + border-left: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item:first-child { + border-left: 1px solid var(--ti-tabs-border-color); + border-top: none; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-bottom:first-child { + border-top: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-bottom.is-active:first-child { + border-top: none; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-bottom, +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__item.is-top { + background: 0 0; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__nav { + border-bottom: 1px solid var(--ti-tabs-border-color); + border-left: none; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs__nav.is-bottom { + border-top: none; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tab-pane .tiny-tabs--top .tiny-tabs__header { + margin-left: 0; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tab-pane .tiny-tabs--top .tiny-tabs__item { + border-top: none; + border-bottom: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tab-pane .tiny-tabs--top .tiny-tabs__item.is-active { + top: 0; + border-right: 0; + border-left-color: var(--ti-tabs-border-color); + border-bottom: 1px solid #fff; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tab-pane .tiny-tabs--top .tiny-tabs__item.is-active:first-child { + border-left: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__item.is-top { + margin: 0 0 -1px -1px; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__item.is-top.is-active { + border-right: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__item.is-bottom { + margin: -1px; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__item.is-bottom.is-active { + border-right: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__item.is-right { + margin: -1px 0 -1px 0; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__item.is-right.is-active { + border-top: 1px solid var(--ti-tabs-border-color); + border-bottom: 1px solid var(--ti-tabs-border-color); + border-right: 3px solid var(--ti-tabs-header-font-active); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--card .tiny-tabs--border-card .tiny-tabs__nav.is-bottom { + border-bottom: 0; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__header { + border-left: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__item { + border: 1px solid transparent; + margin: -1px -1px -1px 0; +} +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__item.is-active { + border-color: var(--ti-tabs-border-color) transparent; +} +.tiny-tabs.tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__active-bar { + left: auto; + right: 0; +} +.tiny-tabs.tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__active-bar.is-bottom { + left: 0; +} +.tiny-tabs.tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__active-bar.is-left { + left: 0; + right: auto; +} +.tiny-tabs.tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__nav-wrap::after { + left: auto; + right: 0; +} +.tiny-tabs.tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__nav-wrap.is-left::after { + left: 0; + right: auto; +} +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__header.is-bottom { + margin-left: 0; +} +.tiny-tabs.tiny-tabs--right + .tiny-tab-pane + .tiny-tabs--top:not(.tiny-tabs--card):not(.tiny-tabs--border-card) + .tiny-tabs__item { + border-bottom: 0; + background-color: transparent; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs--bottom:not(.tiny-tabs--card) .tiny-tabs__item { + border-top: 0; + background-color: transparent; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs--left.tiny-tabs--card .tiny-tabs__item.is-active:first-child { + border-left: 3px solid var(--ti-tabs-header-font-active); + border-right: 0; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs--left:not(.tiny-tabs--card) .tiny-tabs__nav, +.tiny-tabs.tiny-tabs--right .tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__nav { + border-bottom: 0; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs--left:not(.tiny-tabs--card) .tiny-tabs__item, +.tiny-tabs.tiny-tabs--right .tiny-tabs--right:not(.tiny-tabs--card) .tiny-tabs__item { + border: 0; + background-color: transparent; +} +.tiny-tabs.tiny-tabs--right .tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__item.is-active { + border: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--right .tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__item.is-active.is-left { + border-left: 3px solid var(--ti-tabs-header-font-active); +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__header, +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap, +.tiny-tabs.tiny-tabs--right .tiny-tabs__header, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap { + height: 100%; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__active-bar, +.tiny-tabs.tiny-tabs--right .tiny-tabs__active-bar { + top: 1px; + bottom: auto; + width: 2px; + height: auto; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__active-bar.is-top, +.tiny-tabs.tiny-tabs--right .tiny-tabs__active-bar.is-top { + height: 3px; + bottom: 0; + left: 0; + top: auto; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__active-bar.is-bottom, +.tiny-tabs.tiny-tabs--right .tiny-tabs__active-bar.is-bottom { + top: auto; + bottom: 0; + height: 3px; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap { + margin-bottom: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap.is-scrollable, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap.is-scrollable { + padding: 30px 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap::after, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap::after { + height: 100%; + width: 2px; + bottom: auto; + top: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap.is-top::after, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap.is-top::after { + left: 0; + bottom: 0; + top: auto; + width: 100%; + height: 1px; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-wrap.is-bottom:after, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-wrap.is-bottom:after { + left: 0; + bottom: 0; + top: auto; + width: 100%; + height: 1px; + background-color: #d9d9d9; + z-index: 1; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav { + float: none; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__item, +.tiny-tabs.tiny-tabs--right .tiny-tabs__item { + display: block; + font-size: var(--ti-tabs-font-base-size); +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-prev, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-prev { + height: 30px; + line-height: 30px; + width: 100%; + text-align: center; + cursor: pointer; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-next i, +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-prev i, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-next i, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-prev i { + -webkit-transform: rotateZ(90deg); + transform: rotateZ(90deg); +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-prev, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-prev { + left: auto; + top: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--right .tiny-tabs__nav-next { + right: auto; + bottom: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__header, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__nav-wrap, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__header, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__nav-wrap { + float: inherit; + margin-bottom: -1px; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__header.is-bottom, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__header.is-top, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__nav-wrap.is-bottom, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__nav-wrap.is-top, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__header.is-bottom, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__header.is-top, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__nav-wrap.is-bottom, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__nav-wrap.is-top { + float: none; + margin-right: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__header.is-left, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__nav-wrap.is-left, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__header.is-left, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__nav-wrap.is-left { + float: left; + margin-bottom: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__header.is-right, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__nav-wrap.is-right, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__header.is-right, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__nav-wrap.is-right { + float: right; + margin-bottom: 0; + margin-right: 0; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__item, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__item { + display: inline-block; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__item.is-left, +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__item.is-right, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__item.is-left, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__item.is-right { + display: inherit; +} +.tiny-tabs.tiny-tabs--left .tiny-tab-pane .tiny-tabs__nav, +.tiny-tabs.tiny-tabs--right .tiny-tab-pane .tiny-tabs__nav { + width: -webkit-fit-content; + width: -moz-fit-content; + width: fit-content; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card { + border-top: 0; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__nav-wrap.is-scrollable, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__nav-wrap.is-scrollable { + padding: 0; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__nav-prev, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__nav-prev { + display: none; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs__header, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs__header { + border: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs--border-card .is-top.tiny-tabs__header, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs--border-card .is-top.tiny-tabs__header { + border-top: 0; + border-left: 0; +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs--border-card .is-top.tiny-tabs__item.is-active, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs--border-card .is-top.tiny-tabs__item.is-active { + border-left: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--left.tiny-tabs--border-card .tiny-tabs--border-card .is-bottom.tiny-tabs__header, +.tiny-tabs.tiny-tabs--right.tiny-tabs--border-card .tiny-tabs--border-card .is-bottom.tiny-tabs__header { + border-left: 0; +} +.tiny-tabs.tiny-tabs--bottom .tiny-tabs__header { + margin-bottom: 0; + margin-top: 10px; +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card { + border-top: 0; +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__header { + background: var(--ti-tabs-header-background); + border-bottom: 1px solid var(--ti-tabs-border-color); + border-right: 1px solid var(--ti-tabs-border-color); + border-top: 1px solid var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__nav-wrap { + margin-top: -1px; + margin-bottom: 0; +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__nav-wrap.is-top { + margin-bottom: -1px; +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__item { + border: 1px solid transparent; + margin: 0 -1px -1px; +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__item.is-active { + background-color: var(--ti-tabs-dropdown-bgcolor); + border-right-color: var(--ti-tabs-border-color); + border-left-color: var(--ti-tabs-border-color); +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__item.is-active:before { + left: 0; + bottom: 0; +} +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs--border-card { + border-top: 0; +} +.tiny-tabs.tiny-tabs--bottom .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) .tiny-tabs__header { + background: 0 0; + border: 0; +} +.tiny-tabs.tiny-tabs--bottom + .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) + .tiny-tabs__header.is-left + .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--bottom + .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) + .tiny-tabs__header.is-left + .tiny-tabs__nav-prev, +.tiny-tabs.tiny-tabs--bottom + .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) + .tiny-tabs__header.is-right + .tiny-tabs__nav-next, +.tiny-tabs.tiny-tabs--bottom + .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) + .tiny-tabs__header.is-right + .tiny-tabs__nav-prev { + display: none; +} +.tiny-tabs.tiny-tabs--bottom + .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) + .tiny-tabs__header.is-left + .tiny-tabs__nav-wrap, +.tiny-tabs.tiny-tabs--bottom + .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) + .tiny-tabs__header.is-right + .tiny-tabs__nav-wrap { + padding: 0; +} +.tiny-tabs.tiny-tabs--bottom .tiny-tabs:not(.tiny-tabs--border-card):not(.tiny-tabs--card) .tiny-tabs__item.is-active { + background-color: transparent; + border: none; +} +.tiny-tabs.tiny-tabs--bottom .tiny-tabs--left .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--bottom .tiny-tabs--right .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--border-card .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--bottom.tiny-tabs--card .tiny-tabs__item, +.tiny-tabs.tiny-tabs--top .tiny-tabs--left .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--top .tiny-tabs--right .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--top.tiny-tabs--border-card .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--top.tiny-tabs--card .tiny-tabs__item { + padding: var(--ti-tabs-item-horizontal-padding); +} +.tiny-tabs.tiny-tabs--bottom:not(.tiny-tabs--card):not(.tiny-tabs--border-card) .tiny-tabs__item, +.tiny-tabs.tiny-tabs--top:not(.tiny-tabs--card):not(.tiny-tabs--border-card) .tiny-tabs__item { + padding-left: 0; +} +.tiny-tabs.tiny-tabs--bottom:not(.tiny-tabs--card):not(.tiny-tabs--border-card) .tiny-tabs__item.is-left, +.tiny-tabs.tiny-tabs--top:not(.tiny-tabs--card):not(.tiny-tabs--border-card) .tiny-tabs__item.is-left { + padding: 0 24px; +} +.tiny-tabs.tiny-tabs--bottom:not(.tiny-tabs--card):not(.tiny-tabs--border-card) .tiny-tabs__item:nth-child(2), +.tiny-tabs.tiny-tabs--top:not(.tiny-tabs--card):not(.tiny-tabs--border-card) .tiny-tabs__item:nth-child(2) { + padding-left: 0; +} +.tiny-tabs .slideInLeft-transition, +.tiny-tabs .slideInRight-transition { + display: inline-block; +} +.tiny-tabs .slideInRight-enter { + -webkit-animation: slideInRight-enter 0.3s; + animation: slideInRight-enter 0.3s; +} +.tiny-tabs .slideInRight-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInRight-leave 0.3s; + animation: slideInRight-leave 0.3s; +} +.tiny-tabs .slideInLeft-enter { + -webkit-animation: slideInLeft-enter 0.3s; + animation: slideInLeft-enter 0.3s; +} +.tiny-tabs .slideInLeft-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInLeft-leave 0.3s; + animation: slideInLeft-leave 0.3s; +} +@-webkit-keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; + } +} +@keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; + } +} +@-webkit-keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; + } +} +@keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; + } +} +.tiny-tag { + --ti-tag-height: 22px; + --ti-tag-medium-height: var(--ti-common-size-6x); + --ti-tag-small-height: var(--ti-common-size-5x); + --ti-tag-mini-height: var(--ti-common-size-4x); + --ti-tag-border-color: var(--ti-base-color-border); + --ti-tag-border-radius: var(--ti-base-radius-medium); + --ti-tag-font-size: var(--ti-base-font-size); + --ti-tag-close-font-size: var(--ti-common-font-size-1); + --ti-tag-primary-color: var(--ti-base-color-common-5); + --ti-tag-primary-border-color: var(--ti-base-color-bg-6); + --ti-tag-primary-background-color: var(--ti-base-color-bg-6); + --ti-tag-warning-color: var(--ti-common-color-warn-text); + --ti-tag-warning-border-color: var(--ti-common-color-warn-border); + --ti-tag-warning-background-color: var(--ti-common-color-warn-bg); + --ti-tag-danger-color: var(--ti-common-color-error-text); + --ti-tag-danger-border-color: var(--ti-common-color-error-border-secondary); + --ti-tag-danger-background-color: var(--ti-common-color-error-bg); + --ti-tag-success-color: var(--ti-common-color-text-success); + --ti-tag-success-border-color: var(--ti-common-color-success-border); + --ti-tag-success-background-color: var(--ti-common-color-success-bg); + --ti-tag-info-color: var(--ti-common-color-info-text); + --ti-tag-info-border-color: var(--ti-common-color-info-border); + --ti-tag-info-background-color: var(--ti-common-color-info-bg); + --ti-tag-dark-color: var(--ti-base-color-light); + --ti-tag-dark-bgcolor: var(--ti-common-color-prompt); + --ti-tag-dark-success-bgcolor: var(--ti-common-color-success); + --ti-tag-dark-warning-bgcolor: var(--ti-common-color-warn); + --ti-tag-dark-danger-bgcolor: var(--ti-common-color-error); + --ti-tag-dark-info-bgcolor: var(--ti-common-color-info); + --ti-tag-plain-color: var(--ti-common-color-prompt); + --ti-tag-plain-border-color: var(--ti-common-color-prompt-border); + --ti-tag-plain-background-color: var(--ti-base-color-light); + --ti-tag-plain-info-color: var(--ti-common-color-info); + --ti-tag-plain-info-border-color: var(--ti-common-color-info-border); + --ti-tag-plain-success-color: var(--ti-common-color-success); + --ti-tag-plain-success-border-color: var(--ti-common-color-success-border); + --ti-tag-plain-warning-color: var(--ti-common-color-warn); + --ti-tag-plain-warning-border-color: var(--ti-common-color-warn-border); + --ti-tag-plain-danger-color: var(--ti-common-color-error); + --ti-tag-plain-danger-border-color: var(--ti-common-color-error-border-secondary); + height: var(--ti-tag-height); + line-height: var(--ti-tag-height); + padding: 0 8px; + font-size: var(--ti-tag-font-size); + border-width: 1px; + border-radius: var(--ti-tag-border-radius); + border-style: solid; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: var(--ti-tag-primary-color); + border-color: var(--ti-tag-primary-border-color); + background-color: var(--ti-tag-primary-background-color); +} +.tiny-tag.is-hit { + border-color: var(--ti-tag-primary-color); +} +.tiny-tag .tiny-tag__close { + fill: var(--ti-tag-primary-color); + opacity: 0.5; +} +.tiny-tag .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag .tiny-tag__text:hover { + cursor: pointer; + color: #526ecc; +} +.tiny-tag .tiny-tag__close { + font-size: var(--ti-tag-close-font-size); + margin-left: 6px; +} +.tiny-tag .tiny-tag__close:hover { + cursor: pointer; + fill: #5e7ce0; +} +.tiny-tag.tiny-tag--info { + color: var(--ti-tag-info-color); + border-color: var(--ti-tag-info-border-color); + background-color: var(--ti-tag-info-background-color); +} +.tiny-tag.tiny-tag--info.is-hit { + border-color: var(--ti-tag-info-color); +} +.tiny-tag.tiny-tag--info .tiny-tag__close { + fill: var(--ti-tag-info-color); + opacity: 0.5; +} +.tiny-tag.tiny-tag--info .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag.tiny-tag--success { + color: var(--ti-tag-success-color); + border-color: var(--ti-tag-success-border-color); + background-color: var(--ti-tag-success-background-color); +} +.tiny-tag.tiny-tag--success.is-hit { + border-color: var(--ti-tag-success-color); +} +.tiny-tag.tiny-tag--success .tiny-tag__close { + fill: var(--ti-tag-success-color); + opacity: 0.5; +} +.tiny-tag.tiny-tag--success .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag.tiny-tag--warning { + color: var(--ti-tag-warning-color); + border-color: var(--ti-tag-warning-border-color); + background-color: var(--ti-tag-warning-background-color); +} +.tiny-tag.tiny-tag--warning.is-hit { + border-color: var(--ti-tag-warning-color); +} +.tiny-tag.tiny-tag--warning .tiny-tag__close { + fill: var(--ti-tag-warning-color); + opacity: 0.5; +} +.tiny-tag.tiny-tag--warning .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag.tiny-tag--danger { + color: var(--ti-tag-danger-color); + border-color: var(--ti-tag-danger-border-color); + background-color: var(--ti-tag-danger-background-color); +} +.tiny-tag.tiny-tag--danger.is-hit { + border-color: var(--ti-tag-danger-color); +} +.tiny-tag.tiny-tag--danger .tiny-tag__close { + fill: var(--ti-tag-danger-color); + opacity: 0.5; +} +.tiny-tag.tiny-tag--danger .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--dark { + color: var(--ti-tag-dark-color); + border-color: var(--ti-tag-dark-bgcolor); + background-color: var(--ti-tag-dark-bgcolor); +} +.tiny-tag--dark.is-hit { + border-color: var(--ti-tag-dark-bgcolor); +} +.tiny-tag--dark .tiny-tag__close { + fill: var(--ti-tag-dark-color); + opacity: 0.5; +} +.tiny-tag--dark .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--dark.tiny-tag--info { + color: var(--ti-tag-dark-color); + border-color: var(--ti-tag-dark-info-bgcolor); + background-color: var(--ti-tag-dark-info-bgcolor); +} +.tiny-tag--dark.tiny-tag--info.is-hit { + border-color: var(--ti-tag-dark-info-bgcolor); +} +.tiny-tag--dark.tiny-tag--info .tiny-tag__close { + fill: var(--ti-tag-dark-color); + opacity: 0.5; +} +.tiny-tag--dark.tiny-tag--info .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--dark.tiny-tag--success { + color: var(--ti-tag-dark-color); + border-color: var(--ti-tag-dark-success-bgcolor); + background-color: var(--ti-tag-dark-success-bgcolor); +} +.tiny-tag--dark.tiny-tag--success.is-hit { + border-color: var(--ti-tag-dark-success-bgcolor); +} +.tiny-tag--dark.tiny-tag--success .tiny-tag__close { + fill: var(--ti-tag-dark-color); + opacity: 0.5; +} +.tiny-tag--dark.tiny-tag--success .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--dark.tiny-tag--warning { + color: var(--ti-tag-dark-color); + border-color: var(--ti-tag-dark-warning-bgcolor); + background-color: var(--ti-tag-dark-warning-bgcolor); +} +.tiny-tag--dark.tiny-tag--warning.is-hit { + border-color: var(--ti-tag-dark-warning-bgcolor); +} +.tiny-tag--dark.tiny-tag--warning .tiny-tag__close { + fill: var(--ti-tag-dark-color); + opacity: 0.5; +} +.tiny-tag--dark.tiny-tag--warning .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--dark.tiny-tag--danger { + color: var(--ti-tag-dark-color); + border-color: var(--ti-tag-dark-danger-bgcolor); + background-color: var(--ti-tag-dark-danger-bgcolor); +} +.tiny-tag--dark.tiny-tag--danger.is-hit { + border-color: var(--ti-tag-dark-danger-bgcolor); +} +.tiny-tag--dark.tiny-tag--danger .tiny-tag__close { + fill: var(--ti-tag-dark-color); + opacity: 0.5; +} +.tiny-tag--dark.tiny-tag--danger .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--plain { + color: var(--ti-tag-plain-color); + border-color: var(--ti-tag-plain-border-color); + background-color: var(--ti-tag-plain-background-color); +} +.tiny-tag--plain.is-hit { + border-color: var(--ti-tag-plain-color); +} +.tiny-tag--plain .tiny-tag__close { + fill: var(--ti-tag-plain-color); + opacity: 0.5; +} +.tiny-tag--plain .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--plain.tiny-tag--info { + color: var(--ti-tag-plain-info-color); + border-color: var(--ti-tag-plain-info-border-color); + background-color: var(--ti-tag-plain-background-color); +} +.tiny-tag--plain.tiny-tag--info.is-hit { + border-color: var(--ti-tag-plain-info-color); +} +.tiny-tag--plain.tiny-tag--info .tiny-tag__close { + fill: var(--ti-tag-plain-info-color); + opacity: 0.5; +} +.tiny-tag--plain.tiny-tag--info .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--plain.tiny-tag--success { + color: var(--ti-tag-plain-success-color); + border-color: var(--ti-tag-plain-success-border-color); + background-color: var(--ti-tag-plain-background-color); +} +.tiny-tag--plain.tiny-tag--success.is-hit { + border-color: var(--ti-tag-plain-success-color); +} +.tiny-tag--plain.tiny-tag--success .tiny-tag__close { + fill: var(--ti-tag-plain-success-color); + opacity: 0.5; +} +.tiny-tag--plain.tiny-tag--success .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--plain.tiny-tag--warning { + color: var(--ti-tag-plain-warning-color); + border-color: var(--ti-tag-plain-warning-border-color); + background-color: var(--ti-tag-plain-background-color); +} +.tiny-tag--plain.tiny-tag--warning.is-hit { + border-color: var(--ti-tag-plain-warning-color); +} +.tiny-tag--plain.tiny-tag--warning .tiny-tag__close { + fill: var(--ti-tag-plain-warning-color); + opacity: 0.5; +} +.tiny-tag--plain.tiny-tag--warning .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--plain.tiny-tag--danger { + color: var(--ti-tag-plain-danger-color); + border-color: var(--ti-tag-plain-danger-border-color); + background-color: var(--ti-tag-plain-background-color); +} +.tiny-tag--plain.tiny-tag--danger.is-hit { + border-color: var(--ti-tag-plain-danger-color); +} +.tiny-tag--plain.tiny-tag--danger .tiny-tag__close { + fill: var(--ti-tag-plain-danger-color); + opacity: 0.5; +} +.tiny-tag--plain.tiny-tag--danger .tiny-tag__close:hover { + opacity: 1; +} +.tiny-tag--medium { + height: var(--ti-tag-medium-height); + line-height: calc(var(--ti-tag-medium-height) - 2px); +} +.tiny-tag--small { + height: var(--ti-tag-small-height); + line-height: calc(var(--ti-tag-small-height) - 2px); +} +.tiny-tag--mini { + height: var(--ti-tag-mini-height); + line-height: calc(var(--ti-tag-mini-height) - 2px); +} +.tiny-tall-storage { + --ti-tall-storage-bgcolor: var(--ti-base-color-light); + --ti-tall-storage-border-radius: var(--ti-common-border-radius-normal); + --ti-tall-storage-item-height: var(--ti-base-size-height-minor); + --ti-tall-storage-item-bgcolor: var(--ti-base-color-hover-background); + position: relative; + margin-top: 2px; +} +.tiny-tall-storage .tiny-storage-list-style { + position: absolute; + background-color: var(--ti-tall-storage-bgcolor); + -webkit-box-shadow: var(--ti-base-box-shadow); + box-shadow: var(--ti-base-box-shadow); + border-radius: var(--ti-tall-storage-border-radius); + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + z-index: 10; +} +.tiny-tall-storage .tiny-storage-list-style .tiny-storage-list { + padding: 0; + list-style: none; +} +.tiny-tall-storage .tiny-storage-list-style .tiny-storage-list .tiny-storage-item { + height: var(--ti-tall-storage-item-height); + line-height: var(--ti-tall-storage-item-height); + padding: 0 8px; + white-space: nowrap; +} +.tiny-tall-storage .tiny-storage-list-style .tiny-storage-list .tiny-storage-item.item-hover, +.tiny-tall-storage .tiny-storage-list-style .tiny-storage-list .tiny-storage-item:hover { + cursor: pointer; + background-color: var(--ti-tall-storage-item-bgcolor); +} +.tiny-text-popup { + --ti-text-popup-radius: var(--ti-common-border-radius-normal); + --ti-text-popup-border-color: var(--ti-base-color-border); + --ti-text-popup-hover-border-color: var(--ti-base-color-brand-6); + display: inline-block; +} +.tiny-text-popup .area { + padding: 6px; + width: 100%; + border-radius: var(--ti-text-popup-radius, 2px); + outline: 0; +} +.tiny-text-popup .text { + border: 1px solid var(--ti-text-popup-border-color); + line-height: 1; +} +.tiny-text-popup .text:hover { + border-color: var(--ti-text-popup-hover-border-color); +} +.tiny-text-popup .popup { + resize: none; + -webkit-box-shadow: 0 0 1px 1px rgba(175, 175, 175, 0.3); + box-shadow: 0 0 1px 1px rgba(175, 175, 175, 0.3); + border: 1px solid var(--ti-text-popup-border-color); +} +.tiny-tips { + --ti-tips-normal-color: var(--ti-base-color-secondary); + --ti-tips-normal-font-color: var(--ti-base-color-light); + --ti-tips-error-color: #ff7875; + --ti-tips-error-font-color: var(--ti-base-color-light); + --ti-tips-succeed-color: var(--ti-base-color-success-normal); + --ti-tips-succeed-font-color: var(--ti-base-color-light); + --ti-tips-warning-color: #fa8c16; + --ti-tips-warning-font-color: var(--ti-base-color-light); + --ti-tips-infor-color: var(--ti-base-color-border); + --ti-tips-infor-font-color: var(--ti-base-color-info-normal); + --ti-tips-bgcolor: #ff7875; + --ti-tips-radius: var(--ti-common-border-radius-normal); + --ti-tips-height: 26px; + z-index: 900; + position: absolute; + padding: var(--ti-tips-padding); + background: var(--ti-tips-bgcolor); + border-radius: var(--ti-tips-radius); + color: var(--ti-tips-color-infor); + min-height: var(--ti-tips-height); + text-align: center; + line-height: var(--ti-tips-height); +} +.tiny-tips .tiny-icon { + color: var(--ti-tips-color-infor); + line-height: 36px; +} +.tiny-tips > span { + float: left; + top: -5px; +} +.tiny-tips:before { + content: ''; + left: -4px; + top: 50%; + margin-top: -4px; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-tips-bgcolor); +} +.tiny-tips span + p { + max-width: 300px; + max-height: 100px; + word-break: break-all; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow: auto; +} +.tiny-tips .tiny-small-close { + position: absolute; + cursor: pointer; + right: 8px; + top: -5px; +} +.tiny-tips .icon-remove + p, +.tiny-tips .icon-successful + p { + margin-left: 0; +} +.tiny-tips.tips-bottom { + top: -5px; + left: 0; +} +.tiny-tips.tips-bottom:before { + content: ''; + left: 50%; + top: -4px; + margin-top: 0; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-bgcolor) transparent; + margin-left: -6px; +} +.tiny-tips.tips-left:before { + content: ''; + left: auto; + top: 50%; + margin-top: -4px; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 0 4px 4px; + border-color: transparent var(--ti-tips-bgcolor); + right: -4px; +} +.tiny-tips.tips-top { + top: -5px; + left: 0; +} +.tiny-tips.tips-top:before { + content: ''; + left: 50%; + top: auto; + margin-top: auto; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-bgcolor) transparent; + margin-left: -6px; + bottom: -4px; + margin-bottom: 0; +} +.tiny-tips.tips-top-left { + top: -5px; + left: 0; +} +.tiny-tips.tips-top-left:before { + content: ''; + left: 0; + top: auto; + margin-top: auto; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-bgcolor) transparent; + margin-left: 10px; + bottom: -4px; + margin-bottom: 0; +} +.tiny-tips.tips-top-right { + top: -5px; + left: 0; +} +.tiny-tips.tips-top-right:before { + content: ''; + left: 100%; + top: auto; + margin-top: auto; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-bgcolor) transparent; + margin-left: -16px; + bottom: -4px; + margin-bottom: 0; +} +.tiny-tips.tips-bottom-left { + top: -5px; + left: 0; +} +.tiny-tips.tips-bottom-left:before { + content: ''; + left: 0; + top: -4px; + margin-top: 0; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-bgcolor) transparent; + margin-left: 10px; +} +.tiny-tips.tips-bottom-right { + top: -5px; + left: 0; +} +.tiny-tips.tips-bottom-right:before { + content: ''; + left: 100%; + top: -4px; + margin-top: 0; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-bgcolor) transparent; + margin-left: -16px; +} +.tiny-tips.tips-error { + background: var(--ti-tips-error-color); + color: var(--ti-tips-error-font-color); + border-radius: var(--ti-tips-radius-large, 3px); + -webkit-box-shadow: 0 0 4px var(--ti-tips-error-color); + box-shadow: 0 0 4px var(--ti-tips-error-color); + margin-top: 0; +} +.tiny-tips.tips-error:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-tips-error-color); +} +.tiny-tips.tips-error.tips-bottom:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-error-color) transparent; +} +.tiny-tips.tips-error.tips-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 0 4px 4px; + border-color: transparent var(--ti-tips-error-color); +} +.tiny-tips.tips-error.tips-top:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-error-color) transparent; +} +.tiny-tips.tips-error.tips-bottom-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-error-color) transparent; +} +.tiny-tips.tips-error.tips-bottom-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-error-color) transparent; +} +.tiny-tips.tips-error.tips-top-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-error-color) transparent; +} +.tiny-tips.tips-error.tips-top-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-error-color) transparent; +} +.tiny-tips.tips-warning { + background: var(--ti-tips-warning-color); + color: var(--ti-tips-warning-font-color); + border-radius: var(--ti-tips-radius-large, 3px); + -webkit-box-shadow: 0 0 4px var(--ti-tips-warning-color); + box-shadow: 0 0 4px var(--ti-tips-warning-color); + margin-top: 0; +} +.tiny-tips.tips-warning:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-tips-warning-color); +} +.tiny-tips.tips-warning.tips-bottom:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-warning-color) transparent; +} +.tiny-tips.tips-warning.tips-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 0 4px 4px; + border-color: transparent var(--ti-tips-warning-color); +} +.tiny-tips.tips-warning.tips-top:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-warning-color) transparent; +} +.tiny-tips.tips-warning.tips-bottom-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-warning-color) transparent; +} +.tiny-tips.tips-warning.tips-bottom-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-warning-color) transparent; +} +.tiny-tips.tips-warning.tips-top-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-warning-color) transparent; +} +.tiny-tips.tips-warning.tips-top-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-warning-color) transparent; +} +.tiny-tips.tips-succeed { + background: var(--ti-tips-succeed-color); + color: var(--ti-tips-succeed-font-color); + border-radius: var(--ti-tips-radius-large, 3px); + -webkit-box-shadow: 0 0 4px var(--ti-tips-succeed-color); + box-shadow: 0 0 4px var(--ti-tips-succeed-color); + margin-top: 0; +} +.tiny-tips.tips-succeed:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-tips-succeed-color); +} +.tiny-tips.tips-succeed.tips-bottom:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-succeed-color) transparent; +} +.tiny-tips.tips-succeed.tips-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 0 4px 4px; + border-color: transparent var(--ti-tips-succeed-color); +} +.tiny-tips.tips-succeed.tips-top:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-succeed-color) transparent; +} +.tiny-tips.tips-succeed.tips-bottom-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-succeed-color) transparent; +} +.tiny-tips.tips-succeed.tips-bottom-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-succeed-color) transparent; +} +.tiny-tips.tips-succeed.tips-top-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-succeed-color) transparent; +} +.tiny-tips.tips-succeed.tips-top-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-succeed-color) transparent; +} +.tiny-tips.tips-infor { + background: var(--ti-tips-infor-color); + color: var(--ti-tips-infor-font-color); + border-radius: var(--ti-tips-radius-large, 3px); + -webkit-box-shadow: 0 0 4px var(--ti-tips-infor-color); + box-shadow: 0 0 4px var(--ti-tips-infor-color); + margin-top: 0; +} +.tiny-tips.tips-infor:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-tips-infor-color); +} +.tiny-tips.tips-infor.tips-bottom:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-infor-color) transparent; +} +.tiny-tips.tips-infor.tips-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 0 4px 4px; + border-color: transparent var(--ti-tips-infor-color); +} +.tiny-tips.tips-infor.tips-top:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-infor-color) transparent; +} +.tiny-tips.tips-infor.tips-bottom-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-infor-color) transparent; +} +.tiny-tips.tips-infor.tips-bottom-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-infor-color) transparent; +} +.tiny-tips.tips-infor.tips-top-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-infor-color) transparent; +} +.tiny-tips.tips-infor.tips-top-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-infor-color) transparent; +} +.tiny-tips.tips-normal { + background: var(--ti-tips-normal-color); + color: var(--ti-tips-normal-font-color); + border-radius: var(--ti-tips-radius-large, 3px); + -webkit-box-shadow: 0 0 4px var(--ti-tips-normal-color); + box-shadow: 0 0 4px var(--ti-tips-normal-color); + margin-top: 0; +} +.tiny-tips.tips-normal:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-tips-normal-color); +} +.tiny-tips.tips-normal.tips-bottom:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-normal-color) transparent; +} +.tiny-tips.tips-normal.tips-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 0 4px 4px; + border-color: transparent var(--ti-tips-normal-color); +} +.tiny-tips.tips-normal.tips-top:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-normal-color) transparent; +} +.tiny-tips.tips-normal.tips-bottom-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-normal-color) transparent; +} +.tiny-tips.tips-normal.tips-bottom-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 0 4px 4px 4px; + border-color: var(--ti-tips-normal-color) transparent; +} +.tiny-tips.tips-normal.tips-top-left:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-normal-color) transparent; +} +.tiny-tips.tips-normal.tips-top-right:before { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 4px 4px 0 4px; + border-color: var(--ti-tips-normal-color) transparent; +} +.tiny-tips .grid-innercell .grid-simplesort { + display: none; +} +.tiny-toggle-menu { + --ti-toggle-menu-width: 210px; + --ti-toggle-menu-font-size: var(--ti-common-font-size-base); + --ti-toggle-menu-name-color: var(--ti-base-color-info-normal); + --ti-toggle-menu-tree-node-height: var(--ti-common-size-7x); + --ti-toggle-menu-filter-search-size: 30px; + --ti-toggle-menu-filter-search-font-size: var(--ti-common-font-size-2); + --ti-toggle-menu-filter-search-icon-color: var(--ti-base-color-brand-6); + --ti-toggle-menu-toggle-icon-color: var(--ti-base-color-brand-6); + --ti-toggle-menu-toggle-icon-hover-color: var(--ti-base-color-brand-5); + --ti-toggle-menu-toggle-bgcolor: var(--ti-base-color-border); + width: var(--ti-toggle-menu-width); + position: relative; +} +.tiny-toggle-menu .tiny-toggle-menu__body { + cursor: pointer; + line-height: 1; + padding-left: 4px; + width: 100%; +} +.tiny-toggle-menu .tiny-toggle-menu__body, +.tiny-toggle-menu .tiny-toggle-menu__body:hover { + text-decoration: none; +} +.tiny-toggle-menu .tiny-toggle-menu__name { + color: var(--ti-toggle-menu-name-color); + font-size: var(--ti-toggle-menu-font-size); +} +.tiny-toggle-menu .tiny-toggle-menu__tree { + position: relative; +} +.tiny-toggle-menu .tiny-toggle-menu__filter { + position: relative; + margin-bottom: 4px; + width: calc(100% - 16px); +} +.tiny-toggle-menu .tiny-toggle-menu__filter-search { + width: var(--ti-toggle-menu-filter-search-size); + height: var(--ti-toggle-menu-filter-search-size); + line-height: var(--ti-toggle-menu-filter-search-size); + display: block; + text-align: center; + position: absolute; + right: 0; + top: 0; +} +.tiny-toggle-menu .tiny-toggle-menu__filter-search .tiny-svg { + fill: var(--ti-toggle-menu-filter-search-icon-color); + font-size: var(--ti-toggle-menu-filter-search-font-size); +} +.tiny-toggle-menu .tiny-toggle-menu__toggle { + position: absolute; + top: 0; + left: calc(100% - 14px); + z-index: 2; + width: 14px; + height: var(--ti-toggle-menu-filter-search-size); + line-height: var(--ti-toggle-menu-filter-search-size); + background: var(--ti-toggle-menu-toggle-bgcolor); + cursor: pointer; + -webkit-transition: 0.2s linear; + transition: 0.2s linear; +} +.tiny-toggle-menu .tiny-toggle-menu__toggle .tiny-svg { + fill: var(--ti-toggle-menu-toggle-icon-color); +} +.tiny-toggle-menu .tiny-toggle-menu__toggle:hover .tiny-svg { + fill: var(--ti-toggle-menu-toggle-icon-hover-color); +} +.tiny-toggle-menu .tiny-toggle-menu__link { + width: 100%; +} +.tiny-toggle-menu.is-toggle-right { + width: 80px; +} +.tiny-toggle-menu.is-toggle-right .tiny-tree-node.is-current .tiny-tree-node__content { + background: 0 0; +} +.tiny-toggle-menu.is-toggle-right .tiny-tree-node__content:hover { + background: 0 0; +} +.tiny-toggle-menu.is-toggle-right .tiny-tree-node__content:hover .tiny-svg { + fill: var(--ti-toggle-menu-toggle-icon-hover-color); +} +.tiny-toggle-menu.is-toggle-right .tiny-toggle-menu__toggle { + position: relative; + left: 0; +} +.tiny-toggle-menu.is-toggle-right .tiny-toggle-menu__filter { + display: none; +} +.tiny-toggle-menu .tiny-tree.is-wrap .tiny-tree-node__content { + height: auto; +} +.tiny-toggle-menu .tiny-tree.is-wrap .tiny-toggle-menu__name { + display: inline-block; + white-space: normal; + line-height: normal; + word-break: break-word; +} +.tiny-toggle-menu .tiny-tree.is-overflow .tiny-toggle-menu__name { + width: calc(100% - 18px); + vertical-align: middle; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-toggle-menu .tiny-tree.is-node-hide .tiny-toggle-menu__body, +.tiny-toggle-menu .tiny-tree.is-node-hide .tiny-tree-node__children { + display: none; +} +.tiny-toggle-menu .tiny-input__inner { + font-size: var(--ti-toggle-menu-font-size); + padding-right: 30px; + border-radius: 0; + border-top: 0; + border-left: 0; + border-right: 0; +} +.tiny-toggle-menu .tiny-tree-node__content { + height: var(--ti-toggle-menu-tree-node-height); + line-height: var(--ti-toggle-menu-tree-node-height); + font-size: var(--ti-toggle-menu-font-size); + padding-left: 0; + margin-left: 0; +} +.tiny-tooltip { + --ti-tooltip-popper-border-radius: var(--ti-common-border-radius-1); + --ti-tooltip-popper-font-size: var(--ti-common-font-size-base); + --ti-tooltip-popper-border-color: var(--ti-base-color-common-6); + --ti-tooltip-popper-normal-background: var(--ti-base-color-secondary); + --ti-tooltip-popper-normal-color: var(--ti-base-color-light); + --ti-tooltip-popper-normal-border-color: var(--ti-base-color-secondary); + --ti-tooltip-popper-info-background: #69c0ff; + --ti-tooltip-popper-info-color: var(--ti-base-color-light); + --ti-tooltip-popper-info-border-color: #69c0ff; + --ti-tooltip-popper-error-background: var(--ti-base-color-common-6); + --ti-tooltip-popper-error-color: var(--ti-base-color-light); + --ti-tooltip-popper-error-border-color: var(--ti-base-color-common-6); + --ti-tooltip-popper-warning-background: #ffd666; + --ti-tooltip-popper-warning-color: var(--ti-base-color-light); + --ti-tooltip-popper-warning-border-color: #ffd666; + --ti-tooltip-popper-success-background: #95de64; + --ti-tooltip-popper-success-color: var(--ti-base-color-light); + --ti-tooltip-popper-success-border-color: #95de64; + --ti-tooltip-popper-dark-background: var(--ti-base-color-common-6); + --ti-tooltip-popper-dark-color: var(--ti-base-color-light); + --ti-tooltip-popper-light-background: var(--ti-base-color-light); + --ti-tooltip-popper-light-color: var(--ti-base-color-common-6); + --ti-tooltip-popper-light-border-color: var(--ti-base-color-common-6); + --ti-tooltip-box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.2); + --ti-tooltip-padding: 11px 15px; +} +.tiny-tooltip:focus:hover, +.tiny-tooltip:focus:not(.focusing) { + outline-width: 0; +} +.tiny-tooltip.tiny-tooltip__popper { + position: absolute; + left: -9999px; + border-radius: var(--ti-tooltip-popper-border-radius); + padding: var(--ti-tooltip-padding); + font-size: var(--ti-tooltip-popper-font-size); + line-height: 1.2; + min-width: 10px; + max-width: 450px; + z-index: 2000; + word-wrap: break-word; + -webkit-box-shadow: var(--ti-tooltip-box-shadow); + box-shadow: var(--ti-tooltip-box-shadow); +} +.tiny-tooltip.tiny-tooltip__popper .popper__arrow, +.tiny-tooltip.tiny-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tiny-tooltip.tiny-tooltip__popper .popper__arrow { + border-width: 6px; +} +.tiny-tooltip.tiny-tooltip__popper .popper__arrow::after { + content: ' '; + border-width: 5px; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='top'] { + margin-bottom: 12px; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='top'] .popper__arrow { + bottom: -6px; + border-top-color: var(--ti-tooltip-popper-border-color); + border-bottom-width: 0; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='top'] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: var(--ti-tooltip-popper-border-color); + border-bottom-width: 0; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='bottom'] { + margin-top: 12px; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='bottom'] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: var(--ti-tooltip-popper-border-color); +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='bottom'] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: var(--ti-tooltip-popper-border-color); +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='right'] { + margin-left: 12px; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='right'] .popper__arrow { + left: -6px; + border-right-color: var(--ti-tooltip-popper-border-color); + border-left-width: 0; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='right'] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: var(--ti-tooltip-popper-border-color); + border-left-width: 0; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='left'] { + margin-right: 12px; +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='left'] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: var(--ti-tooltip-popper-border-color); +} +.tiny-tooltip.tiny-tooltip__popper[x-placement^='left'] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: var(--ti-tooltip-popper-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal { + background: var(--ti-tooltip-popper-normal-background); + color: var(--ti-tooltip-popper-normal-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='top'] .popper__arrow { + border-top-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='top'] .popper__arrow::after { + border-top-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='bottom'] .popper__arrow { + border-bottom-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='bottom'] .popper__arrow::after { + border-bottom-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='left'] .popper__arrow { + border-left-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='left'] .popper__arrow::after { + border-left-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='right'] .popper__arrow { + border-right-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-normal[x-placement^='right'] .popper__arrow::after { + border-right-color: var(--ti-tooltip-popper-normal-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info { + background: var(--ti-tooltip-popper-info-background); + color: var(--ti-tooltip-popper-info-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='top'] .popper__arrow { + border-top-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='top'] .popper__arrow::after { + border-top-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='bottom'] .popper__arrow { + border-bottom-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='bottom'] .popper__arrow::after { + border-bottom-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='left'] .popper__arrow { + border-left-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='left'] .popper__arrow::after { + border-left-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='right'] .popper__arrow { + border-right-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-info[x-placement^='right'] .popper__arrow::after { + border-right-color: var(--ti-tooltip-popper-info-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error { + background: var(--ti-tooltip-popper-error-background); + color: var(--ti-tooltip-popper-error-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='top'] .popper__arrow { + border-top-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='top'] .popper__arrow::after { + border-top-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='bottom'] .popper__arrow { + border-bottom-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='bottom'] .popper__arrow::after { + border-bottom-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='left'] .popper__arrow { + border-left-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='left'] .popper__arrow::after { + border-left-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='right'] .popper__arrow { + border-right-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-error[x-placement^='right'] .popper__arrow::after { + border-right-color: var(--ti-tooltip-popper-error-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning { + background: var(--ti-tooltip-popper-warning-background); + color: var(--ti-tooltip-popper-warning-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='top'] .popper__arrow { + border-top-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='top'] .popper__arrow::after { + border-top-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='bottom'] .popper__arrow { + border-bottom-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='bottom'] .popper__arrow::after { + border-bottom-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='left'] .popper__arrow { + border-left-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='left'] .popper__arrow::after { + border-left-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='right'] .popper__arrow { + border-right-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-warning[x-placement^='right'] .popper__arrow::after { + border-right-color: var(--ti-tooltip-popper-warning-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success { + background: var(--ti-tooltip-popper-success-background); + color: var(--ti-tooltip-popper-success-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='top'] .popper__arrow { + border-top-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='top'] .popper__arrow::after { + border-top-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='bottom'] .popper__arrow { + border-bottom-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='bottom'] .popper__arrow::after { + border-bottom-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='left'] .popper__arrow { + border-left-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='left'] .popper__arrow::after { + border-left-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='right'] .popper__arrow { + border-right-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-success[x-placement^='right'] .popper__arrow::after { + border-right-color: var(--ti-tooltip-popper-success-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-dark { + background: var(--ti-tooltip-popper-dark-background); + color: var(--ti-tooltip-popper-dark-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-light { + background: var(--ti-tooltip-popper-light-background); + color: var(--ti-tooltip-popper-light-color); + border: 1px solid var(--ti-tooltip-popper-light-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='top'] .popper__arrow { + border-top-color: var(--ti-tooltip-popper-light-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='top'] .popper__arrow::after { + border-top-color: var(--ti-tooltip-popper-light-background); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='bottom'] .popper__arrow { + border-bottom-color: var(--ti-tooltip-popper-light-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='bottom'] .popper__arrow::after { + border-bottom-color: var(--ti-tooltip-popper-light-background); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='left'] .popper__arrow { + border-left-color: var(--ti-tooltip-popper-light-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='left'] .popper__arrow::after { + border-left-color: var(--ti-tooltip-popper-light-background); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='right'] .popper__arrow { + border-right-color: var(--ti-tooltip-popper-light-border-color); +} +.tiny-tooltip.tiny-tooltip__popper.is-light[x-placement^='right'] .popper__arrow::after { + border-right-color: var(--ti-tooltip-popper-light-background); +} +.tiny-tooltip.tiny-tooltip__popper.is-blank-content { + display: none; +} +.tiny-fade-in-linear-enter-active, +.tiny-fade-in-linear-leave-active { + -webkit-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} +.tiny-fade-in-linear-enter, +.tiny-fade-in-linear-enter-from, +.tiny-fade-in-linear-leave, +.tiny-fade-in-linear-leave-active, +.tiny-fade-in-linear-leave-from { + opacity: 0; +} +.tiny-fade-in-enter-active, +.tiny-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); +} +.tiny-fade-in-enter, +.tiny-fade-in-enter-from, +.tiny-fade-in-leave-active { + opacity: 0; +} +.tiny-top-box { + --ti-top-box-background: var(--ti-base-color-light); + --ti-top-box-icon-font-size: var(--ti-common-font-size-5); + --ti-top-box-success-icon-color: var(--ti-base-color-success-normal); + --ti-top-box-error-icon-color: var(--ti-base-color-bg-8); + --ti-top-box-warning-icon-color: var(--ti-base-color-warning-normal); + --ti-top-box-help-icon-color: var(--ti-base-color-brand-6); + --ti-top-box-info-icon-color: var(--ti-base-color-info-normal); + position: fixed; + top: 20px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 400px; + max-height: 600px; + background: var(--ti-top-box-background); + padding: 24px; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); + -webkit-transition: opacity 0.3s, top 0.4s, -webkit-transform 0.4s; + transition: opacity 0.3s, top 0.4s, -webkit-transform 0.4s; + transition: opacity 0.3s, transform 0.4s, top 0.4s; + transition: opacity 0.3s, transform 0.4s, top 0.4s, -webkit-transform 0.4s; +} +.tiny-top-box .tiny-top-box__icon { + font-size: var(--ti-top-box-icon-font-size, 24px); + vertical-align: middle; +} +.tiny-top-box .tiny-top-box__content { + display: inline-block; + padding: 0 16px; + vertical-align: middle; +} +.tiny-top-box .tiny-top-box__closeBtn { + position: absolute; + top: 14px; + right: 12px; + cursor: pointer; + fill: rgba(51, 51, 51, 0.5); + display: none; +} +.tiny-top-box .tiny-top-box__closeBtn:hover { + fill: #333; +} +.tiny-top-box .tiny-top-box__toolbar { + float: right; + margin-top: 24px; +} +.tiny-top-box.is-closable .tiny-top-box__closeBtn { + display: inline-block; +} +.tiny-top-box.is-center { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-top-box--success .tiny-top-box__icon { + fill: var(--ti-top-box-success-icon-color); +} +.tiny-top-box--error .tiny-top-box__icon { + fill: var(--ti-top-box-error-icon-color); +} +.tiny-top-box--warning .tiny-top-box__icon { + fill: var(--ti-top-box-warning-icon-color); +} +.tiny-top-box--help .tiny-top-box__icon { + fill: var(--ti-top-box-help-icon-color); +} +.tiny-top-box--info .tiny-top-box__icon { + fill: var(--ti-top-box-info-icon-color); +} +.tiny-top-box-fade-enter, +.tiny-top-box-fade-leave-active { + opacity: 0; + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); +} +.tiny-transition-transfer-fade-enter-active, +.tiny-transition-transfer-fade-leave-active { + -webkit-transition: all 0.3s; + transition: all 0.3s; +} +.tiny-transition-transfer-fade-leave-active { + position: absolute; +} +.tiny-transition-transfer-fade-enter, +.tiny-transition-transfer-fade-enter-from, +.tiny-transition-transfer-fade-leave-to { + opacity: 0; + -webkit-transform: translateX(30px); + transform: translateX(30px); +} +.tiny-transfer { + --ti-transfer-font-size: var(--ti-common-font-size-1); + --ti-transfer-button-bgcolor: var(--ti-base-color-brand-6); + --ti-transfer-button-border-radius: var(--ti-common-border-radius-normal); + --ti-transfer-button-disabled-color: var(--ti-base-color-placeholder); + --ti-transfer-button-disabled-border-color: var(--ti-base-color-border); + --ti-transfer-button-disabled-bgcolor: var(--ti-common-color-bg-disabled); + --ti-transfer-panel-background: var(--ti-base-color-light); + --ti-transfer-panel-body-height: 260px; + --ti-transfer-panel-border-color: var(--ti-base-color-border); + --ti-transfer-panel-border-radius: var(--ti-common-border-radius-normal); + --ti-transfer-panel-item-height: var(--ti-base-size-height-minor); + --ti-transfer-panel-item-color: var(--ti-base-color-info-normal); + --ti-transfer-panel-item-hover-font-color: var(--ti-base-color-brand-6); + --ti-transfer-panel-item-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-transfer-panel-filter-height: var(--ti-base-size-height-minor); + --ti-transfer-panel-filter-font-size: var(--ti-common-font-size-base); + --ti-transfer-panel-filter-border-radius: var(--ti-common-border-radius-normal); + --ti-transfer-panel-body-filter-height: 216px; + --ti-transfer-panel-width: 200px; + --ti-transfer-header-height: 40px; + --ti-transfer-header-background: var(--ti-base-color-hover-background); + --ti-transfer-header-border-color: var(--ti-base-color-border); + --ti-transfer-header-color: var(--ti-base-color-info-normal); + --ti-transfer-header-span-color: var(--ti-base-color-info-normal); + --ti-transfer-header-font-size: var(--ti-common-font-size-base); + --ti-transfer-header-sort-width: var(--ti-common-size-5x); + --ti-transfer-header-sort-color: var(--ti-base-color-brand-6); + --ti-transfer-footer-height: var(--ti-common-size-10x); + --ti-transfer-footer-background: var(--ti-base-color-light); + --ti-transfer-footer-border-color: var(--ti-base-color-border); + --ti-transfer-footer-color: #606266; + --ti-transfer-empty-height: var(--ti-base-size-height-minor); + --ti-transfer-empty-color: #909399; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: var(--ti-transfer-font-size); +} +.tiny-transfer__buttons { + padding: 0 16px; +} +.tiny-transfer__buttons .defaultButton { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.tiny-transfer__buttons .defaultButton .tiny-button + .tiny-button { + margin-left: 0; +} +.tiny-transfer__buttons .defaultButton + .tiny-button { + margin: 12px 0 0; +} +.tiny-transfer__buttons .tiny-button { + min-width: auto; + margin: 0 0 8px 0; +} +.tiny-transfer__button { + display: block; + margin: 0 auto; + border-color: var(--ti-transfer-button-bgcolor); + background-color: var(--ti-transfer-button-bgcolor); + min-width: 30px; + min-height: 30px; + border-radius: var(--ti-transfer-button-border-radius); + line-height: normal; + padding: 8px; +} +.tiny-transfer__button.is-with-texts { + border-radius: var(--ti-transfer-button-border-radius); + min-width: 60px; +} +.tiny-transfer__button.tiny-button:not(.is-circle) .tiny-svg { + margin-right: 0; +} +.tiny-transfer__button:first-child { + margin-bottom: 12px; +} +.tiny-transfer__button:nth-child(2) { + margin: 0; +} +.tiny-transfer__button i, +.tiny-transfer__button span { + font-size: var(--ti-transfer-font-size); +} +.tiny-transfer__button [class*='tiny-icon'] + span { + margin-left: 0; +} +.tiny-transfer .tiny-transfer__button.is-disabled, +.tiny-transfer .tiny-transfer__button.is-disabled:hover { + border: 1px solid var(--ti-transfer-button-disabled-border-color); + background-color: var(--ti-transfer-button-disabled-bgcolor); + color: var(--ti-transfer-button-disabled-color); + line-height: 1; +} +.tiny-transfer .tiny-transfer__button.is-disabled .tiny-svg, +.tiny-transfer .tiny-transfer__button.is-disabled:hover .tiny-svg { + fill: var(--ti-transfer-button-disabled-color); +} +.tiny-transfer-panel { + border: 1px solid var(--ti-transfer-panel-border-color); + border-radius: var(--ti-transfer-panel-border-radius); + overflow: hidden; + background: var(--ti-transfer-panel-background); + width: var(--ti-transfer-panel-width); + max-height: 100%; + vertical-align: middle; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; +} +.tiny-transfer-panel__body { + position: relative; + height: var(--ti-transfer-panel-body-height); + text-align: left; + padding-right: 2px; +} +.tiny-transfer-panel__body.is-with-footer { + padding-bottom: 40px; + height: calc(100% - 40px); +} +.tiny-transfer-panel__body .tiny-tree { + height: 100%; + padding: 0 8px 8px; + overflow: auto; +} +.tiny-transfer-panel__body .tiny-tree::-webkit-scrollbar { + width: 8px; + height: 8px; +} +.tiny-transfer-panel__body .tiny-tree::-webkit-scrollbar-track-piece { + background: #fafafa; +} +.tiny-transfer-panel__body .tiny-tree::-webkit-scrollbar-thumb { + background: #bfbfbf; + border-radius: calc(8px / 2); +} +.tiny-transfer-panel__body .tiny-tree::-webkit-scrollbar-thumb:hover { + background: #999; +} +.tiny-transfer-panel__body .tiny-tree::-webkit-scrollbar-thumb:active { + background: #999; +} +.tiny-transfer-panel__body .tiny-transfer-panel__filter ~ .tiny-tree { + height: calc(100% - 46px); +} +.tiny-transfer-panel__list { + margin: 0; + padding: 6px 0; + list-style: none; + height: var(--ti-transfer-panel-body-height); + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; +} +.tiny-transfer-panel__list.tiny-checkbox-group { + display: block; +} +.tiny-transfer-panel__list.is-filterable { + height: var(--ti-transfer-panel-body-filter-height); + padding-top: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-transfer-panel__list.is-filterable .tiny-transfer-panel__item { + -ms-flex-negative: 0; + flex-shrink: 0; + } +} +.tiny-transfer-panel .tiny-transfer-panel__list::-webkit-scrollbar { + width: 8px; + height: 8px; +} +.tiny-transfer-panel .tiny-transfer-panel__list::-webkit-scrollbar-track-piece { + background: #fafafa; +} +.tiny-transfer-panel .tiny-transfer-panel__list::-webkit-scrollbar-thumb { + background: #bfbfbf; + border-radius: calc(8px / 2); +} +.tiny-transfer-panel .tiny-transfer-panel__list::-webkit-scrollbar-thumb:hover { + background: #999; +} +.tiny-transfer-panel .tiny-transfer-panel__list::-webkit-scrollbar-thumb:active { + background: #999; +} +.tiny-transfer-panel__item { + line-height: var(--ti-transfer-panel-item-height); + padding-left: 8px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-transition: all 0.5s; + transition: all 0.5s; +} +.tiny-transfer-panel__item + .tiny-transfer-panel__item { + margin-left: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-transfer-panel__item.tiny-checkbox { + color: var(--ti-transfer-panel-item-color); + line-height: var(--ti-transfer-panel-item-height); + margin: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.tiny-transfer-panel__item.tiny-checkbox.tiny-checkbox__label { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-left: 22px; + line-height: var(--ti-transfer-panel-item-height); +} +.tiny-transfer-panel__item.tiny-checkbox .tiny-checkbox__input { + line-height: 1; +} +.tiny-transfer-panel__item:hover { + background: var(--ti-transfer-panel-item-hover-bgcolor); + color: var(--ti-transfer-panel-item-hover-font-color); +} +.tiny-transfer-panel__item.is-disabled:hover { + background: 0; +} +.tiny-transfer-panel__item.tiny-checkbox__input { + position: absolute; + top: 7px; +} +.tiny-transfer-panel__filter { + text-align: center; + padding: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; + width: auto; +} +.tiny-transfer-panel__filter .tiny-input__inner { + height: var(--ti-transfer-panel-filter-height); + line-height: var(--ti-transfer-panel-filter-height); + width: 100%; + font-size: var(--ti-transfer-panel-filter-font-size); + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: var(--ti-transfer-panel-filter-border-radius); + padding-right: 30px; + padding-left: 8px; +} +.tiny-transfer-panel__filter .tiny-input__icon { + margin-left: 5px; +} +.tiny-transfer-panel__filter .tiny-icon-circle-close { + cursor: pointer; +} +.tiny-transfer-panel .tiny-transfer-panel__header { + height: var(--ti-transfer-header-height); + line-height: var(--ti-transfer-header-height); + background: var(--ti-transfer-header-background); + margin: 0; + padding: 0 8px; + border-bottom: 1px solid var(--ti-transfer-header-border-color); + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--ti-transfer-header-color); + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-transfer-panel .tiny-transfer-panel__header .tiny-checkbox { + width: 100%; + line-height: 1; + text-align: left; +} +.tiny-transfer-panel .tiny-transfer-panel__header .tiny-checkbox .tiny-checkbox__label { + font-size: var(--ti-transfer-header-font-size); + color: var(--ti-transfer-header-color); + font-weight: 400; + width: calc(100% - 38px); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-transfer-panel .tiny-transfer-panel__header .tiny-checkbox .tiny-checkbox__label span { + position: absolute; + right: 0; + color: var(--ti-transfer-header-span-color); + font-size: var(--ti-transfer-header-font-size); + font-weight: 400; +} +.tiny-transfer-panel .tiny-transfer-panel__header .headSort { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +.tiny-transfer-panel .tiny-transfer-panel__header .headSort div { + width: var(--ti-transfer-header-sort-width); + height: var(--ti-transfer-header-sort-width); + line-height: var(--ti-transfer-header-sort-width); + margin-right: 8px; + text-align: center; + border: 1px solid; + border-radius: 50%; + color: var(--ti-transfer-header-sort-color); + display: inline-block; + cursor: pointer; +} +.tiny-transfer-panel .tiny-transfer-panel__header .headSort div i { + width: calc(var(--ti-transfer-header-sort-width) - 2px); + height: calc(var(--ti-transfer-header-sort-width) - 2px); + display: block; +} +.tiny-transfer-panel .tiny-transfer-panel__footer { + height: var(--ti-transfer-footer-height); + background: var(--ti-transfer-footer-background); + margin: 0; + padding: 0; + border-top: 1px solid var(--ti-transfer-footer-border-color); + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 1; +} +.tiny-transfer-panel .tiny-transfer-panel__footer::after { + display: inline-block; + content: ''; + height: 100%; + vertical-align: middle; +} +.tiny-transfer-panel .tiny-transfer-panel__footer .tiny-checkbox { + padding-left: 20px; + color: var(--ti-transfer-footer-color); +} +.tiny-transfer-panel .tiny-transfer-panel__empty { + position: absolute; + width: 100%; + top: calc(50% - 33px); + margin: 0; + height: var(--ti-transfer-empty-height); + line-height: var(--ti-transfer-empty-height); + padding: 6px 15px 0; + color: var(--ti-transfer-empty-color); + text-align: center; +} +.tiny-transfer-panel.transferGrid { + width: 600px; +} +.tiny-transfer-panel.transferGrid .tiny-transfer-panel__body { + height: 100%; +} +.tiny-transfer-panel.transferGrid .tiny-table.simple { + width: 100%; + padding: 0 8px; + height: 400px; + overflow-y: auto; +} +.tiny-transfer-panel.transferGrid .tiny-table.simple table { + width: 100%; +} +.tiny-transfer-panel.transferGrid .tiny-pager { + padding: 10px; +} +.tiny-transfer-panel .tiny-checkbox__label { + padding-left: 8px; +} +.tiny-tree { + --ti-tree-color: var(--ti-base-color-info-normal); + --ti-tree-bgcolor: var(--ti-base-color-light); + --ti-tree-empty-text-color: #909399; + --ti-tree-node-content-current-bgcolor: var(--ti-base-color-brand-2); + --ti-tree-node-content-hover-bgcolor: var(--ti-base-color-hover-background); + --ti-tree-node-label-font-size: var(--ti-common-font-size-1); + --ti-tree-node-label-margin-left: var(--ti-common-space-base); + --ti-tree-node-label-bgcolor: var(--ti-base-color-brand-5); + --ti-tree-node-label-font-color: var(--ti-base-color-light); + --ti-tree-node-icon-font-size: var(--ti-common-font-size-1); + --ti-tree-node-icon-loading-color: #1890ff; + --ti-tree-node-icon-expand-color: var(--ti-base-color-info-normal); + --ti-tree-node-checked-icon-color: var(--ti-base-color-brand-6); + position: relative; + cursor: default; + background: var(--ti-tree-bgcolor); + color: var(--ti-tree-color); +} +.tiny-tree__empty-block { + position: relative; + min-height: 60px; + text-align: center; + width: 100%; + height: 100%; +} +.tiny-tree__empty-text { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: var(--ti-tree-empty-text-color); +} +.tiny-tree__drop-indicator { + position: absolute; + left: 0; + right: 0; + height: 1px; + background-color: #40a9ff; +} +.tiny-tree.is-dragging .tiny-tree-node__content { + cursor: move; +} +.tiny-tree.is-dragging .tiny-tree-node__content * { + pointer-events: none; +} +.tiny-tree.is-dragging.is-drop-not-allow .tiny-tree-node__content { + cursor: not-allowed; +} +.tiny-tree--highlight-current .tiny-tree-node.is-current > .tiny-tree-node__content { + background-color: #f0f7ff; +} +.tiny-tree-node { + white-space: nowrap; + outline: 0; +} +.tiny-tree-node:focus > .tiny-tree-node__content { + background-color: var(--ti-tree-node-content-hover-bgcolor); +} +.tiny-tree-node.is-current > .tiny-tree-node__content { + background-color: var(--ti-tree-node-content-current-bgcolor); +} +.tiny-tree-node.is-drop-inner > .tiny-tree-node__content .tiny-tree-node__label { + background-color: var(--ti-tree-node-label-bgcolor); + color: var(--ti-tree-node-label-font-color); +} +.tiny-tree-node.is-checked .tiny-tree-node__expand-icon, +.tiny-tree-node.is-expanded .tiny-tree-node__expand-icon, +.tiny-tree-node.is-indeterminate .tiny-tree-node__expand-icon { + fill: var(--ti-tree-node-checked-icon-color); +} +.tiny-tree-node__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 30px; + cursor: pointer; + border-radius: var(--ti-common-border-radius-normal); +} +.tiny-tree-node__content:hover { + background-color: var(--ti-tree-node-content-hover-bgcolor); +} +.tiny-tree-node__content > label.tiny-checkbox { + margin-left: var(--ti-tree-node-label-margin-left); +} +.tiny-tree-node__expand-icon { + cursor: pointer; + fill: var(--ti-tree-node-icon-expand-color); + font-size: var(--ti-tree-node-icon-font-size); + -webkit-transform: rotate(0); + transform: rotate(0); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.tiny-tree-node__expand-icon.expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.tiny-tree-node__expand-icon.is-leaf { + visibility: hidden; +} +.tiny-tree-node__label { + font-size: var(--ti-tree-node-label-font-size); + margin-left: var(--ti-tree-node-label-margin-left); +} +.tiny-tree-node__loading.circular { + margin-right: 4px; + margin-left: var(--ti-tree-node-label-margin-left); + font-size: var(--ti-tree-node-icon-font-size); + fill: var(--ti-tree-node-icon-loading-color); + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; +} +.tiny-tree-node__loading.circular .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: #1890ff; + stroke-linecap: round; +} +.tiny-tree-node > .tiny-tree-node__children { + overflow: hidden; + background-color: transparent; +} +.tiny-tree-node.is-expanded > .tiny-tree-node__children { + display: block; +} +.tiny-tree-node__menu { + position: absolute; + top: 0; + left: 0; + z-index: 5000; + font-size: var(--ti-common-font-size-base); + -webkit-box-shadow: 2px 2px 4px -2px #000; + box-shadow: 2px 2px 4px -2px #000; + padding: 0 1px; + color: #606266; + font-family: Helvetica, Arial, 'Microsoft YaHei', sans-serif; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tiny-tree-node .tiny-radio { + margin-right: 0; +} +.tiny-tree-node .tiny-radio .tiny-radio__label { + display: none; +} +.tiny-tree-node .collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; +} +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; + } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; + } +} +.tiny-tree-menu { + --ti-tree-menu-width: 210px; + --ti-tree-menu-font-size: var(--ti-common-font-size-base); + --ti-tree-menu-border-color: #d9d9d9; + --ti-tree-menu-node-height: var(--ti-common-size-10x); + --ti-tree-menu-node-hover-bgcolor: var(--ti-base-color-white); + --ti-tree-menu-node-current-color: var(--ti-base-color-brand-6); + --ti-tree-menu-node-body-color: var(--ti-base-color-info-normal); + --ti-tree-minus-square-color: var(--ti-base-color-brand-6); + width: var(--ti-tree-menu-width); + position: relative; + font-size: var(--ti-tree-menu-font-size); +} +.tiny-tree-menu:before { + content: ''; + border-right: 1px solid var(--ti-tree-menu-border-color); + position: absolute; + top: 0; + right: 0; + height: 100%; + z-index: 1; +} +.tiny-tree-menu .tiny-input .tiny-input__inner { + border: none; + border-bottom: 1px solid var(--ti-tree-menu-border-color); +} +.tiny-tree-menu .tiny-tree .tiny-tree-node .tiny-tree-node__content { + height: var(--ti-tree-menu-node-height); + line-height: var(--ti-tree-menu-node-height); + overflow: hidden; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node .tiny-tree-node__content .tree-node-icon { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + margin-right: 8px; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node .tiny-tree-node__content .tree-node { + width: 100%; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node .tiny-tree-node__content .tree-node-name { + padding: 0 24px; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node.is-current > .tiny-tree-node__content { + background-color: var(--ti-tree-menu-node-hover-bgcolor); + position: relative; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node.is-current > .tiny-tree-node__content .tree-node-name { + border-left: 2px solid var(--ti-tree-minus-square-color); +} +.tiny-tree-menu .tiny-tree .tiny-tree-node.is-current > .tiny-tree-node__content .tree-node-body { + color: var(--ti-tree-menu-node-current-color); +} +.tiny-tree-menu .tiny-tree .tiny-tree-node .tree-node-body { + color: var(--ti-tree-menu-node-body-color); + display: block; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node .tree-node-body, +.tiny-tree-menu .tiny-tree .tiny-tree-node .tree-node-body:hover { + text-decoration: none; +} +.tiny-tree-menu .tiny-tree .tiny-tree-node.is-loading .tiny-tree-node__content .tree-node-name { + padding-left: 0; +} +.tiny-tree-menu .tiny-tree-menu__overflow.tiny-tree .tiny-tree-node .tiny-tree-node__content .tree-node-name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: block; + padding-right: 0; +} +.tiny-tree-menu .tiny-tree-menu__overflow.tiny-tree .tiny-tree-node .tiny-tree-node__content .tree-node { + width: calc(100% - 24px); +} +.tiny-tree-menu .tiny-tree-menu__wrap.tiny-tree .tiny-tree-node__content { + min-height: var(--ti-tree-menu-node-height); + height: auto; +} +.tiny-tree-menu .tiny-tree-menu__wrap.tiny-tree .tree-node-body { + min-height: 40px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .tiny-tree-menu .tiny-tree-menu__wrap.tiny-tree .tiny-tree-node__label { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } +} +.tiny-tree-menu .tiny-tree-menu__wrap.tiny-tree .tree-node-name { + white-space: normal; + line-height: normal; + display: block; + word-break: break-all; +} +.tiny-upload { + --ti-upload-tip-font-size: var(--ti-common-font-size-base); + --ti-upload-tip-color: #666; + --ti-upload-picture-card-bgcolor: #fbfdff; + --ti-upload-picture-card-border-color: #c0ccda; + --ti-upload-picture-card-border-radius: 6px; + --ti-upload-picture-card-hover-color: var(--ti-base-color-brand-5); + --ti-upload-picture-card-icon-font-size: 28px; + --ti-upload-picture-card-icon-color: #8c939d; + display: inline-block; + text-align: center; + cursor: pointer; + outline: 0; +} +.tiny-upload__input { + display: none; +} +.tiny-upload__tip { + font-size: var(--ti-upload-tip-font-size); + color: var(--ti-upload-tip-color); + margin-top: 8px; +} +.tiny-upload--picture-card { + width: 148px; + height: 148px; + line-height: 146px; + background-color: var(--ti-upload-picture-card-bgcolor); + border: 1px dashed var(--ti-upload-picture-card-border-color); + border-radius: var(--ti-upload-picture-card-border-radius); + -webkit-box-sizing: border-box; + box-sizing: border-box; + vertical-align: top; +} +.tiny-upload--picture-card svg { + font-size: var(--ti-upload-picture-card-icon-font-size); + fill: var(--ti-upload-picture-card-icon-color); +} +.tiny-upload--picture-card:hover, +.tiny-upload:focus { + border-color: var(--ti-upload-picture-card-hover-color); + color: var(--ti-upload-picture-card-hover-color); +} +.tiny-upload:focus .tiny-upload-dragger { + border-color: var(--ti-upload-picture-card-hover-color); +} +.tiny-upload-cover__title, +.tiny-upload-list__item-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tiny-upload--picture-card, +.tiny-upload-dragger { + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; +} +.tiny-upload iframe { + position: absolute; + z-index: -1; + top: 0; + left: 0; + opacity: 0; +} +.tiny-upload input[type='file'] { + display: none; +} +.tiny-upload-cover { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + cursor: default; +} +.tiny-upload-cover::after { + display: inline-block; + content: ''; + height: 100%; + vertical-align: middle; +} +.tiny-upload-cover img { + display: block; + width: 100%; + height: 100%; +} +.tiny-upload-cover__label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); +} +.tiny-upload-cover__label i { + color: #fff; + font-size: var(--ti-common-font-size-base); + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.tiny-upload-cover__progress { + display: inline-block; + vertical-align: middle; + position: static; + width: 243px; +} +.tiny-upload-cover__progress + .tiny-upload__inner { + opacity: 0; +} +.tiny-upload-cover__content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tiny-upload-cover__interact { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.72); + text-align: center; +} +.tiny-upload-cover__interact .btn { + display: inline-block; + color: #fff; + font-size: var(--ti-common-font-size-1); + cursor: pointer; + vertical-align: middle; + -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1), + -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); + margin-top: 60px; +} +.tiny-upload-cover__interact .btn span { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.tiny-upload-cover__interact .btn i { + color: #fff; + display: block; + font-size: var(--ti-common-font-size-5); + line-height: inherit; + margin: 0 auto 5px; +} +.tiny-upload-cover__interact .btn:not(:first-child) { + margin-left: 35px; +} +.tiny-upload-cover__interact .btn:hover { + -webkit-transform: translateY(-13px); + transform: translateY(-13px); +} +.tiny-upload-cover__interact .btn:hover span { + opacity: 1; +} +.tiny-upload-cover__title { + position: absolute; + bottom: 0; + left: 0; + background-color: #fff; + width: 100%; + height: 36px; + line-height: 36px; + font-weight: 400; + padding: 0 10px; + margin: 0; + font-size: var(--ti-common-font-size-1); + color: #303133; + text-align: left; +} +.tiny-upload-cover + .tiny-upload__inner { + opacity: 0; + position: relative; + z-index: 1; +} +.tiny-upload-dragger { + --ti-upload-dragger-width: 360px; + --ti-upload-dragger-height: 180px; + --ti-upload-dragger-bgcolor: #fafafa; + --ti-upload-dragger-border-color: var(--ti-base-color-border); + --ti-upload-dragger-border-radius: var(--ti-common-border-radius-normal); + --ti-upload-dragger-hover-color: var(--ti-base-color-brand-5); + --ti-upload-dragger-dragover-bgcolor: rgba(32, 159, 255, 0.06); + --ti-upload-dragger-icon-color: var(--ti-base-color-placeholder); + --ti-upload-dragger-icon-font-size: var(--ti-common-font-size-7); + --ti-upload-dragger-text-color: var(--ti-base-color-secondary); + --ti-upload-dragger-text-font-size: var(--ti-common-font-size-base); + --ti-upload-dragger-files-border-color: #dcdfe6; + width: var(--ti-upload-dragger-width); + height: var(--ti-upload-dragger-height); + background-color: var(--ti-upload-dragger-bgcolor); + border: 1px dashed var(--ti-upload-dragger-border-color); + border-radius: var(--ti-upload-dragger-border-radius); + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-upload-dragger:hover { + border-color: var(--ti-upload-dragger-hover-color); +} +.tiny-upload-dragger.is-dragover { + background-color: var(--ti-upload-dragger-dragover-bgcolor, rgba(32, 159, 255, 0.06)); + border: 2px dashed var(--ti-upload-dragger-hover-color); +} +.tiny-upload-dragger .icon-fileupload { + font-size: var(--ti-upload-dragger-icon-font-size); + fill: var(--ti-upload-dragger-icon-color); +} +.tiny-upload-dragger .tiny-upload__text { + color: var(--ti-upload-dragger-text-color); + font-size: var(--ti-upload-dragger-text-font-size); + text-align: center; +} +.tiny-upload-dragger .tiny-upload__text em { + color: var(--ti-upload-dragger-hover-color); + font-style: normal; +} +.tiny-upload-dragger + .tiny-upload__tip { + text-align: center; +} +.tiny-upload-dragger ~ .tiny-upload__files { + border-top: 1px solid var(--ti-upload-dragger-files-border-color); + margin-top: 7px; + padding-top: 5px; +} +.tiny-upload-list { + --ti-upload-list-item-font-size: var(--ti-common-font-size-1); + --ti-upload-list-item-color: var(--ti-base-color-info-normal); + --ti-upload-list-item-border-radius: var(--ti-common-border-radius-normal); + --ti-upload-list-item-hover-background-color: #f5f7fa; + --ti-upload-list-item-hover-color: var(--ti-base-color-brand-5); + --ti-upload-list-item-name-icon-color: #909399; + --ti-upload-list-item-name-icon-font-size: var(--ti-common-font-size-2); + --ti-upload-list-svg-icon-close-color: #606266; + --ti-upload-list-svg-icon-font-size: var(--ti-common-font-size-base); + --ti-upload-list-successful-icon-font-size: var(--ti-common-font-size-1); + --ti-upload-list-picture-card-item-border-color: var(--ti-base-color-border); + --ti-upload-list-picture-card-item-bgcolor: var(--ti-base-color-light); + --ti-upload-list-successful-status-color: var(--ti-base-color-success-normal); + margin: 0; + padding: 0; + list-style: none; +} +.tiny-upload-list__item { + -webkit-transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + font-size: var(--ti-upload-list-item-font-size); + color: var(--ti-upload-list-item-color); + line-height: 1.8; + margin-top: 8px; + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: var(--ti-upload-list-item-border-radius); + width: 100%; + outline: 0; +} +.tiny-upload-list__item:hover { + background-color: var(--ti-upload-list-item-hover-background-color); +} +.tiny-upload-list__item:hover .tiny-svg.icon-close, +.tiny-upload-list__item:hover .tiny-svg.icon-refres { + display: inline-block; +} +.tiny-upload-list__item:hover .tiny-progress__text { + display: none; +} +.tiny-upload-list__item.is-success .tiny-upload-list__item-status-label { + display: block; +} +.tiny-upload-list__item.is-success .tiny-upload-list__item-name:focus, +.tiny-upload-list__item.is-success .tiny-upload-list__item-name:hover { + color: var(--ti-upload-list-item-hover-color); + cursor: pointer; + text-decoration: none; +} +.tiny-upload-list__item.is-success:focus:not(:hover) .tiny-icon-close-tip { + display: inline-block; +} +.tiny-upload-list__item.is-success:active, +.tiny-upload-list__item.is-success:not(.focusing):focus { + outline-width: 0; +} +.tiny-upload-list__item.is-success:active .tiny-icon-close-tip, +.tiny-upload-list__item.is-success:focus .tiny-upload-list__item-status-label, +.tiny-upload-list__item.is-success:hover .tiny-upload-list__item-status-label, +.tiny-upload-list__item.is-success:not(.focusing):focus .tiny-icon-close-tip { + display: none; +} +.tiny-upload-list__item.is-disabled .tiny-upload-list__item:hover .tiny-upload-list__item-status-label { + display: block; +} +.tiny-upload-list__item.isEdm .tiny-upload-list__item-name { + display: inline-block; +} +.tiny-upload-list__item.isEdm .tiny-upload-list__item-name.isFail { + color: red; +} +.tiny-upload-list__item.isEdm .tiny-upload-list__item-edminfo { + margin-right: 46px; +} +.tiny-upload-list__item.isEdm .tiny-upload-list__item-status-label { + right: 16px; +} +.tiny-upload-list__item.isEdm:not(.showUpdate) .icon-refres { + display: none; +} +.tiny-upload-list__item.isEdm:not(.showDel) .icon-close { + display: none; +} +.tiny-upload-list__item.isEdm.showUpdate .icon-refres { + right: 16px; +} +.tiny-upload-list__item.isEdm.showDel .icon-close { + right: 16px; +} +.tiny-upload-list__item.isEdm.showUpdate.showDel .icon-refres { + right: 28px; +} +.tiny-upload-list__item.isEdm.showUpdate.showDel .icon-close { + right: 8px; +} +.tiny-upload-list__item.isEdm:not(.showUpdate):not(.showDel) .tiny-upload-list__item-status-label { + display: block; +} +.tiny-upload-list__item .tiny-progress { + position: absolute; + top: 20px; + width: 100%; +} +.tiny-upload-list__item .tiny-progress__text { + position: absolute; + right: 0; + top: -13px; +} +.tiny-upload-list__item .tiny-progress-bar { + margin-right: 0; + padding-right: 0; +} +.tiny-upload-list__item .tiny-svg.icon-successful { + font-size: var(--ti-upload-list-successful-icon-font-size); + fill: var(--ti-upload-list-successful-status-color); +} +.tiny-upload-list__item .tiny-svg.icon-close { + display: none; + position: absolute; + top: 50%; + right: 8px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + fill: var(--ti-upload-list-svg-icon-close-color); + font-size: var(--ti-upload-list-svg-icon-font-size); + opacity: 0.75; + cursor: pointer; +} +.tiny-upload-list__item .tiny-svg.icon-close:hover { + opacity: 1; +} +.tiny-upload-list__item .tiny-svg.icon-refres { + display: none; + position: absolute; + top: 50%; + right: 28px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + fill: #606266; + font-size: var(--ti-common-font-size-base); + opacity: 0.75; + cursor: pointer; +} +.tiny-upload-list__item .tiny-svg.icon-refres:hover { + opacity: 1; +} +.tiny-upload-list__item .tiny-icon-close-tip { + display: none; + position: absolute; + top: 5px; + right: 5px; + font-size: var(--ti-upload-list-svg-icon-font-size); + cursor: pointer; + opacity: 1; + color: var(--ti-upload-list-item-hover-color); +} +.tiny-upload-list__item-edminfo, +.tiny-upload-list__item-folder { + display: inline-block; + vertical-align: top; +} +.tiny-upload-list__item-edminfo { + margin-right: 20px; +} +.tiny-upload-list__item-edminfo span { + display: inline-block; + margin-right: 10px; +} +.tiny-upload-list__item-edminfo.isFail span { + color: #f5222d; +} +.tiny-upload-list__item-name { + color: var(--ti-upload-list-item-color); + display: block; + margin-right: 40px; + padding-left: 4px; + -webkit-transition: color 0.3s; + transition: color 0.3s; +} +.tiny-upload-list__item-name .tiny-svg { + font-size: var(--ti-upload-list-item-name-icon-font-size); + margin-right: 4px; + fill: var(--ti-upload-list-item-name-icon-color); +} +.tiny-upload-list__item-status-label { + position: absolute; + right: 5px; + top: 0; + line-height: inherit; + display: none; +} +.tiny-upload-list__item-delete { + position: absolute; + right: 10px; + top: 0; + font-size: var(--ti-upload-list-svg-icon-font-size); + color: var(--ti-upload-list-svg-icon-close-color); + display: none; +} +.tiny-upload-list__item-delete:hover { + color: var(--ti-upload-list-item-hover-color); +} +.tiny-upload-list--picture-card { + margin: 0; + display: inline; + vertical-align: top; +} +.tiny-upload-list--picture-card .tiny-upload-list__item { + overflow: hidden; + background-color: var(--ti-upload-list-picture-card-item-bgcolor); + border: 1px solid var(--ti-upload-list-picture-card-item-border-color); + border-radius: var(--ti-upload-list-item-border-radius); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + margin: 0 8px 8px 0; + display: inline-block; +} +.tiny-upload-list--picture-card .tiny-upload-list__item .tiny-icon-check { + fill: var(--ti-upload-list-picture-card-item-bgcolor); +} +.tiny-upload-list--picture-card .tiny-upload-list__item .tiny-svg.icon-close, +.tiny-upload-list--picture-card .tiny-upload-list__item .tiny-svg.icon-refres, +.tiny-upload-list--picture-card .tiny-upload-list__item:hover .tiny-upload-list__item-status-label { + display: none; +} +.tiny-upload-list--picture-card .tiny-upload-list__item:hover .tiny-progress__text { + display: block; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-name { + display: none; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-thumbnail { + width: 100%; + height: 100%; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-status-label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: var(--ti-upload-list-successful-status-color); + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); +} +.tiny-upload-list--picture-card .tiny-upload-list__item-status-label .tiny-svg { + font-size: var(--ti-upload-list-svg-icon-font-size, 12px); + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + cursor: default; + text-align: center; + color: var(--ti-upload-list-picture-card-item-bgcolor); + opacity: 0; + font-size: var(--ti-common-font-size-4); + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions::after { + display: inline-block; + content: ''; + height: 100%; + vertical-align: middle; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions:hover { + opacity: 1; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions:hover span { + display: inline-block; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions span { + display: none; + cursor: pointer; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions span + span { + margin-left: 15px; +} +.tiny-upload-list--picture-card .tiny-upload-list__item-actions .tiny-upload-list__item-delete, +.tiny-upload-list--picture-card .tiny-upload-list__item-actions .tiny-upload-list__item-refres { + position: static; + font-size: inherit; + color: inherit; +} +.tiny-upload-list--picture-card .tiny-progress { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + bottom: auto; + width: 126px; +} +.tiny-upload-list--picture-card .tiny-progress .tiny-progress__text { + top: 50%; +} +.tiny-upload-list--picture .tiny-upload-list__item { + overflow: hidden; + z-index: 0; + background-color: var(--ti-upload-list-picture-card-item-bgcolor); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin-top: 8px; + outline: 0; +} +.tiny-upload-list--picture .tiny-upload-list__item .tiny-icon-check { + fill: var(--ti-upload-list-picture-card-item-bgcolor); +} +.tiny-upload-list--picture .tiny-upload-list__item:hover .tiny-upload-list__item-status-label { + background: 0 0; + -webkit-box-shadow: none; + box-shadow: none; + top: -2px; + right: -12px; +} +.tiny-upload-list--picture .tiny-upload-list__item:hover .tiny-progress__text { + display: block; +} +.tiny-upload-list--picture .tiny-upload-list__item.is-success .tiny-upload-list__item-name { + line-height: 56px; + margin-top: 0; +} +.tiny-upload-list--picture .tiny-upload-list__item.is-success .tiny-upload-list__item-name .tiny-svg { + display: none; +} +.tiny-upload-list--picture .tiny-upload-list__item-thumbnail { + width: 56px; + height: 56px; + border: 1px solid var(--ti-upload-list-picture-card-item-border-color); + border-radius: var(--ti-upload-list-item-border-radius); + float: left; + position: relative; + z-index: 1; + vertical-align: middle; + margin-right: 12px; +} +.tiny-upload-list--picture .tiny-upload-list__item-name { + display: block; + line-height: 56px; +} +.tiny-upload-list--picture .tiny-upload-list__item-name .tiny-svg { + font-size: var(--ti-common-font-size-1); +} +.tiny-upload-list--picture .tiny-upload-list__item-status-label { + position: absolute; + right: -17px; + top: -7px; + width: 46px; + height: 26px; + background: var(--ti-upload-list-successful-status-color); + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; +} +.tiny-upload-list--picture .tiny-upload-list__item-status-label .tiny-svg { + font-size: var(--ti-upload-list-svg-icon-font-size); + margin-top: 12px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.tiny-upload-list--picture .tiny-progress { + position: relative; + top: -7px; +} +.tiny-user { + --ti-user-font-size: var(--ti-common-font-size-base); + --ti-user-tag-background: var(--ti-base-color-hover-background); + --ti-user-svg-color: var(--ti-base-color-brand-6); +} +.tiny-user.mini { + height: 30px; +} +.tiny-user .tiny-user__select { + width: 100%; +} +.tiny-user .tiny-user__select .tiny-input .tiny-svg { + fill: var(--ti-user-svg-color); +} +.tiny-user .tiny-user__select .tiny-input.is-disabled .tiny-svg { + fill: var(--ti-input-normal-disabled-color); +} +.tiny-user .tiny-user__select .tiny-select__input { + height: 20px; +} +.tiny-user .tiny-user__ghost.tiny-tag { + background: var(--ti-user-tag-background); +} +.tiny-user_select { + max-width: 50%; + width: auto; + font-size: var(--ti-user-font-size); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.tiny-user_select.left { + float: left; + margin-right: 4px; +} +.tiny-user_select.right { + float: right; + margin-left: 4px; +} +.tiny-user__select-dropdown { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-user-contact { + --ti-user-account-padding: 0 var(--ti-common-space-2x); + --ti-user-account-line-height: 36px; +} +.tiny-user-contact__main .user-account-pop { + padding: var(--ti-user-account-padding); +} +.tiny-user-contact__main .user-account-custom { + line-height: var(--ti-user-account-line-height); +} +.tiny-user-contact__main .tiny-logout { + line-height: var(--ti-user-account-line-height); +} +.tiny-card { + --ti-usercard-border-color: var(--ti-base-color-border); + --ti-usercard-image-radius: var(--ti-base-radius-large); + --ti-usercard-state-online: #33cc00; + --ti-usercard-state-busy: #ff3300; + --ti-usercard-state-goaway: #ffae00; + --ti-usercard-state-offline: #aeaeae; + border: 1px solid var(--ti-usercard-border-color); + -webkit-box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); + box-shadow: 2px 3px 7px rgba(0, 0, 0, 0.15); +} +.tiny-card .dialog-foot { + display: block; +} +.tiny-card .dialog-foot > div { + width: 100%; + text-align: center; +} +.tiny-card h5, +.tiny-card p { + margin: 5px 0; +} +.tiny-card .card-top { + margin-bottom: 10px; +} +.tiny-card .card-top img { + width: 80px; + height: 80px; + border-radius: var(--ti-usercard-image-radius, 3px); +} +.tiny-card .card-top .card-top-text { + padding: 5px 10px; + overflow: hidden; +} +.tiny-card .card-top .card-top-img, +.tiny-card .card-top .card-top-text { + display: inline-block; + vertical-align: middle; +} +.tiny-card .card-bottom { + text-align: center; + display: block; + height: 20px; + margin: 0 -20px -20px; +} +.tiny-card .espace-online { + color: var(--ti-usercard-state-online); +} +.tiny-card .espace-busy { + color: var(--ti-usercard-state-busy); + font-size: 23px; + vertical-align: middle; + margin-top: -5px; +} +.tiny-card .espace-goaway { + color: var(--ti-usercard-state-goaway); + background: #fff; + border-radius: 50%; + font-size: 13px; +} +.tiny-card .espace-offline { + color: var(--ti-usercard-state-offline); + font-size: 23px; + vertical-align: middle; + margin-top: -5px; +} +.tiny-user-contact { + --ti-user-contact-roleInfo-color: var(--ti-base-color-info-normal); + --ti-user-contact-roleInfo-font-size: var(--ti-common-font-size-base); + --ti-user-contact-card-message-color: var(--ti-base-color-placeholder); + --ti-user-contact-card-border-color: #ddd; + --ti-user-contact-card-header-background: #3f4251; + --ti-user-contact-card-header-role-color: var(--ti-base-color-light); + --ti-user-contact-card-header-role-font-size: var(--ti-common-font-size-2); + --ti-user-contact-card-header-roleNumber-color: #b9babc; + --ti-user-contact-card-espace-color: var(--ti-base-color-placeholder); + position: relative; + display: inline-block; + font-size: 0; +} +.tiny-user-contact .tiny-user-contact__main { + width: 300px; + overflow: visible; + font-size: var(--ti-user-contact-roleInfo-font-size); +} +.tiny-user-contact .tiny-user-contact__main .tiny-user-head { + height: 100%; + width: 86px; + float: left; +} +.tiny-user-contact .tiny-user-contact__main .tiny-user-head__portrait { + margin-top: 16px; + width: 54px; + height: 54px; + line-height: 54px; + margin-left: 20px; +} +.tiny-user-contact .tiny-user-contact__main .tiny-user-contact__role { + height: 100%; + width: auto; + float: left; + margin-left: 0; +} +.tiny-user-contact .tiny-user-contact__main .tiny-user-contact__role-name { + display: block; + width: 100%; + color: var(--ti-user-contact-card-header-role-color); + margin: 16px 0 6px; + height: 24px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: var(--ti-user-contact-card-header-role-font-size); + text-align: left; +} +.tiny-user-contact .tiny-user-contact__main .tiny-user-contact__role-number { + display: block; + color: var(--ti-user-contact-card-header-roleNumber-color); +} +.tiny-user-contact .tiny-user-contact__main .tiny-espace svg { + fill: var(--ti-user-contact-card-message-left-color); +} +.tiny-user-contact .tiny-user-contact__main .card-tools { + display: none; +} +.tiny-user-contact .tiny-user-contact__header { + line-height: 1.42857143; + border: 1px solid var(--ti-user-contact-card-border-color); + height: 86px; + background: var(--ti-user-contact-card-header-background); + opacity: 0.9; +} +.tiny-user-contact .tiny-user-contact__title { + display: block; + height: 100%; + font-size: var(--ti-user-contact-roleInfo-font-size); + font-weight: 400; + line-height: 46px; +} +.tiny-user-contact .tiny-user-contact__role { + display: inline-block; + color: var(--ti-user-contact-roleInfo-color); + margin-left: 8px; + vertical-align: middle; + font-size: var(--ti-user-contact-roleInfo-font-size); + line-height: 1.5; +} +.tiny-user-contact .tiny-user-contact__arrow { + margin-left: 4px; + font-size: var(--ti-user-contact-roleInfo-font-size); + vertical-align: middle; + fill: var(--ti-user-contact-roleInfo-color); +} +.tiny-user-contact .tiny-user-contact__message { + padding: 10px 20px; +} +.tiny-user-contact .tiny-user-contact__state { + text-align: left; + margin-bottom: 0; +} +.tiny-user-contact .tiny-user-contact__state:nth-of-type(2) { + margin-top: 3px; +} +.tiny-user-contact .tiny-user-contact__state:nth-of-type(3) { + margin-top: 3px; +} +.tiny-user-contact .tiny-user-contact__state-left { + color: var(--ti-user-contact-card-message-color); + opacity: 1; + font-size: var(--ti-common-font-size-base); + font-family: MicrosoftYaHei; + line-height: 16px; + text-align: left; + width: auto; + margin-right: 0; +} +.tiny-user-contact .tiny-user-contact__state-right { + color: var(--ti-user-contact-card-message-color); + opacity: 1; + font-size: var(--ti-common-font-size-base); + font-family: MicrosoftYaHei; + line-height: 16px; +} +.tiny-user-contact.tiny-popover.tiny-popper { + padding: 0; + border: 0; + border-radius: 0; +} +.tiny-user-contact .tiny-card-template__header.is-line { + height: auto; + border-bottom: 0; + padding: 0; +} +.tiny-user-contact .tiny-card-template__body { + padding: 0; + border: 1px solid var(--ti-user-contact-card-border-color); +} +.tiny-user-contact .tiny-user-head { + position: relative; + display: inline-block; + vertical-align: middle; +} +.tiny-user-contact .tiny-espace { + padding: 0 20px 10px; +} +.tiny-user-contact .tiny-espace .item-call, +.tiny-user-contact .tiny-espace .item-email, +.tiny-user-contact .tiny-espace .item-talk { + color: var(--ti-user-contact-card-espace-color); +} +.tiny-user-contact.show-arrow .tiny-user-contact__main { + width: auto; +} +.tiny-user-contact.show-arrow .tiny-user-contact__main .user-account-custom { + line-height: 30px; +} +.tiny-user-contact.show-arrow .tiny-user-contact__main .tiny-logout { + line-height: 30px; +} +.tiny-user-contact.show-arrow .tiny-card-template__body { + min-width: 180px; + border-radius: 4px; +} +.tiny-user-head { + --ti-userhead-head-size-normal: var(--ti-common-size-18x); + --ti-userhead-head-size-small: 30px; + --ti-userhead-head-icon-normal: var(--ti-common-size-10x); + --ti-userhead-head-icon-small: 14px; + --ti-userhead-head-radius: var(--ti-common-border-radius-1); + display: inline-block; + position: relative; +} +.tiny-user-head__portrait { + overflow: hidden; + width: var(--ti-userhead-head-size-normal); + height: var(--ti-userhead-head-size-normal); + line-height: var(--ti-userhead-head-size-normal); + text-align: center; + border-radius: var(--ti-userhead-head-radius); + background-position: center center; + background-repeat: no-repeat; + background-size: cover; +} +.tiny-user-head__portrait.round { + border-radius: 50%; +} +.tiny-user-head__portrait.min { + width: var(--ti-userhead-head-size-small); + height: var(--ti-userhead-head-size-small); + line-height: var(--ti-userhead-head-size-small); +} +.tiny-user-head__portrait.icon { + font-size: var(--ti-userhead-head-icon-normal); +} +.tiny-user-head__portrait.icon.min { + font-size: var(--ti-userhead-head-icon-small); +} +.tiny-user-head__portrait.icon svg { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.tiny-user-head__portrait.label > span { + overflow: hidden; + width: calc(100% - 6px); + display: block; + margin: 0 3px; +} +.tiny-user-head__message { + position: absolute; + top: -9px; + left: 63px; + height: 18px; + line-height: 16px; + min-width: 18px; + width: auto; + border-radius: 9px; + background: red; + color: #fff; + text-align: center; + padding: 0 2px; + border: 2px solid #fff; + font-size: var(--ti-common-font-size-base); + word-break: initial; +} +.tiny-user-head__message.round { + top: 0; + left: 54px; +} +.tiny-user-head__message.min { + top: -9px; + left: 21px; +} +.tiny-user-head__message.basic { + top: -4px; + left: 68px; + height: 8px; + width: 8px; + min-width: 8px; + line-height: 0; + border-radius: 4px; +} +.tiny-user-head__message.basic.round { + top: 10px; + left: 64px; +} +.tiny-user-head__message.basic.min { + top: -4px; + left: 26px; +} +.tiny-user-head__message.basic.min.round { + top: 0; +} +.tiny-userlink { + --ti-user-link-font-size: var(--ti-common-font-size-base); + --ti-user-link-color: var(--ti-base-color-info-normal); + --ti-user-link-font-weight: var(--ti-common-font-weight-7); + --ti-user-link-border-radius: var(--ti-base-radius-large); +} +.tiny-userlink li { + float: left; + list-style: none; +} +.tiny-userlink li .tiny-popover__reference { + font-size: var(--ti-common-font-size-base); + color: #1890ff; +} +.tiny-userlink li .tiny-popover__reference:hover { + color: #40a9ff; + text-decoration: none; + cursor: pointer; +} +.tiny-userlink .tiny-user-card { + width: 600px; +} +.tiny-user-card .card-box { + font-size: var(--ti-user-link-font-size); + color: var(--ti-user-link-color); + font-weight: var(--ti-user-link-font-weight); +} +.tiny-user-card .card-box .card-box__body .card-top-img, +.tiny-user-card .card-box .card-box__body .card-top-text { + display: inline-block; + vertical-align: middle; +} +.tiny-user-card .card-box .card-box__body .card-top-img { + width: 80px; + border-radius: var(--ti-user-link-border-radius); +} +.tiny-user-card .card-box .card-box__body .card-top-img img { + width: 100%; +} +.tiny-user-card .card-box .card-box__body .card-top-text { + padding: 5px 10px; + overflow: hidden; +} +.tiny-user-card .card-box .card-box__body .card-center { + margin-top: 10px; +} +.tiny-user-card .card-box .box__footer { + text-align: center; + cursor: pointer; +} +.tiny-user-card .card-box p { + margin: 5px 0; +} +.tiny-user-card.tiny-popover.tiny-popper { + padding: 24px; +} +.tiny-wizard { + --ti-wizard-font-size: var(--ti-common-font-size-base); + --ti-wizard-color: var(--ti-base-color-info-normal); + --ti-wizard-icon-color: var(--ti-base-color-light); + --ti-wizard-icon-bgcolor: var(--ti-base-color-brand-6); + --ti-wizard-detail-border-radius: var(--ti-common-border-radius-normal); + --ti-wizard-detail-background: var(--ti-base-color-warning-normal); + --ti-wizard-chart-icon-bgcolor: #d9d9d9; +} +.tiny-wizard .tiny-wizard__nomarl .tiny-wizard__steps { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-wizard .tiny-wizard__nomarl .tiny-wizard__chart span { + display: inline-block; +} +.tiny-wizard .tiny-wizard__nomarl .tiny-wizard__name { + margin-top: 6px; + overflow: hidden; + text-align: center; +} +.tiny-wizard .tiny-wizard__nomarl .tiny-wizard__name .name { + font-size: var(--ti-wizard-font-size); + width: 100%; +} +.tiny-wizard .tiny-wizard__nomarl .tiny-wizard__button { + margin-top: 10px; + text-align: right; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__steps-item.is-doing .tiny-wizard__chart-icon { + color: var(--ti-wizard-icon-color); + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__steps-item.is-doing .tiny-wizard__chart-icon .tiny-wizard__chart-line, +.tiny-wizard + .tiny-wizard__vertical + .tiny-wizard__steps-item.is-doing + .tiny-wizard__chart-icon + .tiny-wizard__chart-line.is-time-line { + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__steps-item:last-child > ul .tiny-wizard__chart-line { + background: 0 0; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__chart-line { + height: 88px; + width: 4px; + top: 0; + position: relative; + display: inline-block; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__chart-name { + font-size: var(--ti-common-font-size-1); + margin-left: 15px; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + position: relative; + top: -5px; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__chart-icon { + position: relative; + left: 50%; + top: -14px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__time-wrapper { + position: relative; + left: 50%; + top: -14px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + fill: var(--ti-wizard-icon-bgcolor); + font-size: var(--ti-common-font-size-5); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 24px; + height: 24px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 50%; + text-align: center; + background: var(--ti-wizard-icon-color); + border: 2px solid var(--ti-wizard-icon-bgcolor); + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__time-wrapper .tiny-svg { + width: 16px; + height: 20px; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__chart-children { + position: relative; +} +.tiny-wizard .tiny-wizard__vertical .tiny-wizard__chart-children .children-name { + position: absolute; + margin-left: 15px; +} +.tiny-wizard .tiny-wizard__date { + min-width: 100px; + width: auto; + color: var(--ti-wizard-color); + font-size: var(--ti-wizard-font-size); + line-height: 1.2em; + display: inline-block; + text-align: right; + position: relative; + top: -24px; + right: 15px; +} +.tiny-wizard .tiny-wizard__date .date-icon { + margin-left: 4px; +} +.tiny-wizard .tiny-wizard__date span { + vertical-align: middle; +} +.tiny-wizard .tiny-wizard__date.time-line-text { + top: -14px; +} +.tiny-wizard .tiny-wizard__steps-item.is-ready .name { + color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__steps-item.is-ready .tiny-wizard__chart-icon { + color: var(--ti-wizard-icon-color); + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__steps-item.is-ready .tiny-wizard__chart-line { + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__steps-item ul { + list-style: none; +} +.tiny-wizard .tiny-wizard__chart { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.tiny-wizard .tiny-wizard__chart > .tiny-wizard__chart-svg > .tiny-svg { + font-size: var(--ti-common-font-size-4); + fill: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__chart-children.is-doing .tiny-wizard__chart-icon, +.tiny-wizard .tiny-wizard__chart-children.is-ready .tiny-wizard__chart-icon, +.tiny-wizard .tiny-wizard__steps-item.is-doing .tiny-wizard__chart-icon, +.tiny-wizard .tiny-wizard__steps-item.is-ready .tiny-wizard__chart-icon { + color: var(--ti-wizard-icon-color); + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__chart-children.is-doing .tiny-wizard__chart-line, +.tiny-wizard .tiny-wizard__steps-item.is-doing .tiny-wizard__chart-line { + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__chart-children.is-ready .tiny-wizard__chart-line, +.tiny-wizard .tiny-wizard__chart-line.is-time-line { + background: var(--ti-wizard-icon-bgcolor); + border-color: var(--ti-wizard-icon-bgcolor); +} +.tiny-wizard .tiny-wizard__chart-detail { + padding: 4px 8px; + border-radius: 2px; + border-radius: var(--ti-wizard-detail-border-radius, 2px); + min-height: 26px; + height: auto; + line-height: 1; + margin-left: 12px; + text-align: center; + display: inline-block; + position: absolute; + top: -14px; +} +.tiny-wizard .tiny-wizard__chart-detail:hover { + background: var(--ti-wizard-detail-background); +} +.tiny-wizard .tiny-wizard__chart-detail:hover::before { + content: ''; + width: 0; + height: 0; + margin-top: -4px; + border-style: solid; + border-width: 4px 4px 4px 0; + border-color: transparent var(--ti-wizard-detail-background); + position: absolute; + left: -4px; + top: 10px; +} +.tiny-wizard .tiny-wizard__chart-detail:hover .detail-title, +.tiny-wizard .tiny-wizard__chart-detail:hover .tiny-user-contact__role { + color: var(--ti-wizard-icon-color); +} +.tiny-wizard .tiny-wizard__chart-detail .detail-title { + color: var(--ti-wizard-color); + font-size: var(--ti-common-font-size-1); + font-weight: 700; + margin-bottom: 8px; +} +.tiny-wizard .tiny-wizard__chart-icon { + width: 20px; + height: 20px; + line-height: 20px; + border-radius: 50%; + font-size: var(--ti-common-font-size-base); + text-align: center; + background: var(--ti-wizard-chart-icon-bgcolor); + color: var(--ti-wizard-icon-color); + -webkit-box-sizing: content-box; + box-sizing: content-box; + display: inline-block; +} +.tiny-wizard .tiny-wizard__chart-icon.time-line-icon { + width: 10px; + height: 10px; + line-height: 10px; +} +.tiny-wizard .tiny-svg, +.tiny-wizard .tiny-wizard__chart-icon, +.tiny-wizard .tiny-wizard__chart-name, +.tiny-wizard .tiny-wizard__date { + cursor: pointer; +} +.tiny-wizard .tiny-wizard__chart-line { + height: 4px; + background: #c2c4c7; + width: 50px; +} +.tiny-wizard .tiny-wizard__chart-line .tiny-wizard__chart-icon-time { + font-size: var(--ti-common-font-size-4); + fill: var(--ti-wizard-icon-bgcolor); + background: var(--ti-wizard-icon-color); +} +.tiny-wizard .tiny-user-contact .dropdown-part .tiny-user-head, +.tiny-wizard .tiny-user-contact .tiny-svg { + display: none; +} +.tiny-wizard .tiny-user-contact .tiny-user-contact__role span { + display: inline-block; +} diff --git a/mockServer/assets/images/0055f57e0a38d45ced54e1b2b566cb29_308x180.jpg b/mockServer/assets/images/0055f57e0a38d45ced54e1b2b566cb29_308x180.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5ef0583ae857eec06540d871be5e757714a7d06 GIT binary patch literal 20842 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 }tiz!m{2TZw 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 literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png b/mockServer/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3fd36c1b3930eef9f8e2a59fe3d1fb01b9f58a GIT binary patch literal 5775 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 HErR|B5H{nY literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/120.jpg b/mockServer/assets/images/120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf9b61defe0e2b6d62299cf2e69079b032c7f242 GIT binary patch literal 1283 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 QzXWOYw2U;X)g7Y$2VGP$i~s-t literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg b/mockServer/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..157b258c5363839f35a0aa9503ed201af3c8668f GIT binary patch literal 5135 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 NSvW=V0nOFI{{Sy7RlEQI literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/627366463067fa2f1a59d7db4ac55885_308x100.jpg b/mockServer/assets/images/627366463067fa2f1a59d7db4ac55885_308x100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8280a90f77b2723d44ba4be7834d12ff2be11624 GIT binary patch literal 6889 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 literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/777aad0c570f653f0a95b48b898c7b4b_308x180.jpg b/mockServer/assets/images/777aad0c570f653f0a95b48b898c7b4b_308x180.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7bf5fa9def0a00181bdb3f83cd0e5b3e73f929c GIT binary patch literal 31242 zcmb4qRZtvW%)JOo;N z9zaAJe?o-PlBS5oN~s!GAu0TuYT(2NGM7MX*-@C7A;#tu=sbw zZPMVeQr11=st1>p!57#kC%h8brzlgPBz<1J$s^92c$;DiLD-ascIH=|vkFa8NqUm> z1FM7l#%soKKna@NBK>^+Q8D)b738okTO0jS2KrI(mSf=UnSyPM(KKB2IjjxqUfWIV zw4;Rnp{{F6R&BIwFP&V_Xy8Xg%-=%8pHTXOqQI}}POp=Q&oLGC*(_Ct2)q|u9%J|| z0&=D;lZSp1g%Jk@=kZrgOL`Vo>Uve$x~B3uTJ6BPlvx3p8b*18JwobdKd9hF`~B7( zch_du^4leZK&RKV&_*dflN4X%KL}V=B=s@{RkRz-KK%33(da!X=4vZW)-N>mscNT2 zf#B-XgMt@zc9$8QNl_gZYL(Wns#|+&uC7f+arZcfdoARJA6#wC6a?VFDJ5x)_vi-CiJ#WJn?
jOQQyus(F_2&`>tGp{|F_B@ux^_Orr0lM7kunEeEK#4aA?2>Kvq*{jKo5B)1t6;V_A zbWYv;$Y2|MMSX{FmZ-*XrkmmGX|6%;7XHIlV`X$E7baDroimR1Y4CM~jG5FG-#3ER zwq4l6dnTsR3#K+7vU!<3fBLc}rO|KoNA%p^T(};rHh0ktq%X(glPF{4GPLURMOLKT zi&dNVkpMB=U38hn2V``sqiuDr*3d(LE|$#vY1(idB~c4Zf}v&GUB3fPx!wW#>Rdzh zQVKa83KbUYSZA8suFZ3o!F7(wo(Jyfzi&i730f!;i2l()PEgwHf2jD#=o{#ICh_o_ z4UaO7wL6)>K$b{UWuXSLcK+ubV8-7Cf8?1QUrgh8b7GBEDLgKz3SD$xM|(PQq~ex1 zGzl#(1mVt}UYRc=+TA@{kbLO5#rm$LIM(G9B~n)ZwH2e#K3QgEG-k5SL2WMLhjG5$ zPb_RlF0Xph_BL?6bMoCgAec)iIhCgqk1xWPqE>lH;Der0ygJcRF5PrSXf0<0_AtTD zJHW;3`g87;;8TRvPTgJ+^^w*xpRC5M@@fR=qn*ArRK(ZZ=grtYIzxH1Njw3XrF|ZKvupp6_-ctVXVPoT2l~F&(2cIs z#`m4DxQ+|>Iq~*4W{4@!JxOtFM_7xbx$izYOyamTt|rzB2KyP^Xil2YB5W_-zFF`5 zx_oEus%Ql_vdfN?wW0+OCo_V8i};Gj=oC-_l@b^bzZO%Ax?1}JHZC-<-wePb2wl{4 zpLx4ga@i0s=he=xdU93y?Ja5yt+w1;FL+w%y%1`X{o(vM70uzje~SN-!WXhOWb&&SxidMW>SI z6Eaa=gEyp3--?Wv^=R#iW9_Q&oW`HV$?mC|lU7~0lBz>1mS^Ce9anw0q+y_E)hDN- zP{|c?3l9L`{AqR&q_uJuv^KxufZ6lkEOg^(6RqpnrmJkN(1#3kp2rp6QyyR^nOD}4 zM^rU&Mk>vDV7VX{3eglW{+B!oH}ax3S!T#ziQnTgKgC18PZCR8ue6}o&!97U+r*IdQdzcG*GyNVd3t-$fe2flO7W~2H zHU`Tc6RWNqm&?j^EXl#dvYF6TnZW3zJb>#;U-Jq*qI>~4sy7V<{`vfPq}c*g5N(t$ zrA+TAH{Eh)CikCmZ%$AB{o3FTLXbJJS~2Hm21ZINIR#WE9tLUI*q&RKSJ4L{XJ;ojO^P~l5 z9r^}r010ApjIDc=R`jqKRWn0e{n`DOO@@s^(>u}(-9C?Koysnk{|eHT0okV?C%18D z9CZq@`@mVbJ8wj^*LhSSDdKT(Z7ft+$WqFAj51mb8ZCv>HqMqz^n@dxq1_~6DnSH# zRPm?SCVSdo5wF~it-3*MZ5Nl-!p8j zTR0@6$_DWYAGdTvw6;2|`lCC40}8G@J9{?}V$+6{)EEP32Rw}lw?aEq$JSN< zb;@s8=_UVh^W5OL%U@E2p3vmi=sA^A1$`uZ3Ihr zysg$mn^a`Ti;o-&-JK^|)t)2T7#l#o^z1{j1(Kxkhfd}zcD zPN!M)zTzFp08H`JZ7lX-c}!N^RuiL7DN4Jse6%RL`}tClI#v1&(iDwY6CH%XHuPt9 z>?cFk)pNyBAWuzIehia%RJLuemcgX^kD%}2>o`k6VE!cf82G?=B2%!q{SCTEE|$E3 zS$d~cty#hu1F+f-2rQ<7tZ#dE!#pKFQ~U?jrHf6e?5zyW&##PxKq^y8BNC)0^`5}u z3TrOnhV64H+syyA2!kGcie~w>>rLsjdR(_QKVp`q|6OK=#+-SAd5o>>*A9b`(&|l#A z>Ha#xTu{Go9;OrNBE65}guLSh2RWIX?4G1L6id@nv&sIPMZp1rvk1r6i*0ZJbhIK$ zA^AHT3y4qM7C7GO(#TqDH`g-Z>>a-5a6ONzYvPBbqnh~_10Q?XWM!Wu3U_?tKN*KX zDPRsC*PfxC9T?54+vOYU)B*u}rZ3A9Z!0UgS_hy`4yz5aIM*R~$*i+JzGp8T3v%lo zU*Rba*Rd~wE6VNp79E=Gx2a5(CzhOo*hpWGhk51s5SJHfp1)*h$N=-!TY0k1M>7|iD+4|S}_gA zTbBsG3gW0g*~mglzV!~3Pa)=z;GNt$BCctVR7M!1;O3(NS1d&Zh%^L1`~E(!C&^2p z39&T&QmTmcX5YrA)JtZoF+k%zGfwVY^0o+u>p(41h;A2CII_v-W{NcB;DKL5?vc-5 zBjh~TTHkuvTJ10)&zAT&;UsEl7w(+6Od(RhbWi*aIP9wqIn!VzpP?$JL24Fbfss6n zaErN?fA@0gK55B;Zd`KAuAj##V?p>)FJyTUbWYoO^CF{d;yDdNWOm#>v^QC${$}~8 zgr|&k`Sa*B|#yx3kk7_reToJy_c|5D7(T-}rYD>W?7EN*{oNar3 z@0Lf}cTJBOqO@dfUYKs3!Tu~O-6q>XCR150 z2{U@#?|L96dzqLR)gxhR_v$FoKWtc74yQ2p`6Ydg#{MgRy;0x!hvuvJ;Y zP{es)`*$3rJf~yGHGDg2E^!+%Lf@CxN-a*)Xrws7=fde$q@d=eeJ=Td;?F1xD~CTj z5xhL+0x6B$7e8vxb($E)5p})5SXBt|BbD*is9Z&vQGFgb-E`Oj{2n&a&rB6LlVVT z^nGE-u$0wdKZRGzwSIGE9PpKd#sc12Jv$Fs0D>ZL(oNc(ZQ|SbW}7{|>nj^HdH1&r z8v(dIN3xHQ^^lsR4sbf$$f$OnaZ(hEElSXG1YwDzBS~>`mAjOig0UYa-$c3&HU|)& zd1e#zYDxmf>G;Z{N9qR@rHFUS7jNJn?VaMO?2-^LjkFf>hribNg8cGozK13~Gw$x@Z|2|s$2J0aDk;Yytg5(Qhs zNkaLIz*jkRB4`*3WQLV@h|^o)lVhTuGCQ9G9z;haYr})XvTGd|lLLH#pLl^X!SD`% z3A79tDso-Fj7e8O&s%DOS7=AZ(^EFWrP}YtOo=5c*)}>KT>L3_i>Dy=k#LCV-?NS2 z#|MkfOeVYI?Eo07i5TY{WTBNGJBI0z^d1fDpgnB7OOXRwDu$-!D;v6=R}T)DeBla#RKG09ZW}6pyP`$;ohBOG>AX`6iC1tq2r6bh*o} zb=Ftye+%zXM!xS2!Lv-rQ7VVr%aJJLF2HQGu)(w78^5%7qzDtKU^v50vi(|2NPjN;$V3EZ7eD_Nbi^#+k8~ zRYT052)*8bVvjB}q#!*2F^q14QA;**?urr!iP#s$;QeJYYGfKW`UFK0MN@m(PSIhU z49deyM6sG*z%1_oCXCotFMbc#{le7V2Q3R9#wL1bX`4o)))nB&G2U7tgA~P=CPbnZ zh|o#piNGU@AGf4rn++DuY1hiXbwqD4%N7!3zQr&PJCDJW8w5;L7sBTx#nUGtrSwNm zswc8YD5KmFAM8<7!TKuMyz14ES#7fU;OuGmD5bC-sH>hm{5rn~onnjo0uW$irn-7r zUSpb&8i8Cnfts(**@&M7pLfF}ISt8^%?F)E)QUc^QmXLAShq)@c)ngXefNwIHTsW0 zd;Vjkz%=;ATPyh#c&u+%Q4vVOn!8_wEP2cy!aDq&KKv_?;lyv{|j8T1{{OI|0E z*RoHudFphdNn{ldY)el@zX={9uJ0FoF(QbE`jo5ljlTm1l=fs60LXVFLRX2F9y~UH zB@Nma%~O%PX>e=`#+1e%dVO6U7zD1b{PLcv$W38&{7jIXO;AAu62DMr`7c5xvqiGZ z4$Mj~NvO}QRaj<*T1k`*+-+|oKX?hZJ4uvA*a4FQX7xqw+&?jAmy%UaiYcfP9N)SC zEXd!)qLS=S5yt3#J`b=edJ;KXS2dhT*sAg;niU?{lIV3*=5`&)3Bi3gbMdS;SUv?1 z(hF#+*$SXxLVaCLY)8Jq>t)7d-z^aDEx7wh9PML}6;$GL6R42aXrwpf$G0jLIf_fm z`K5@mE}&BINCb4Q1GEllA~0}pcVs6D#*8V&e06ha8>P`w1f9!Q7TBlyC6r&AzfKH$ z^6UchP#|4P#=aDfscMT$Q<(D#2Br0%{$6nd6;jDo6EnQ0T-=>^(y8O7hwkqAl3b7m ze)`!K*|ixrn48j?OgL73%WcCQ;6#<+gxgzz3NI!SOPFOkiK0hY#A!bG&FdYeahfy4 zoU+mzS7YQLR>Kb&HNjQ{vD#Bsf5GPR95$Uqr11ywL96>!79+#aFO{8@r=*26$rnOU z!EHhpxofJVzjYZhTEo?-h{N&g@V43~ThFYbxF1jm<>TS@OMqSyO$A)z860yhZ8NNU zNxU1?G+u<;*3RLmTU!s*;9qVoYHO>}Pp2I!y?K*-AV290J#H+G0iSHkUmL4{Dy@#e zJK?HUik+)wnm1~OzVX1)bk&z{Sr>vGB)S%36J3%?>Q^Lecn6gnTFUDI*?gQ(H2b6` z@{O~Z`)lmNREjUU$n?5JGFwN<^m+pn0}1TeM%D%$r6{$k*q??hLnefyxq;b$zjjM1 zQbpvs8SS9N0a{BS=MLWS>hpO|GgsP$ewx2Pq)9VotY43s+!%H_y_vOzf%sr!vTE<> z^LY$~k9ttjVf_q4VO4dT49ORc6*XI({g~dhfAN)i#5$JT4#<#hQzb)37dEE#sRU?J z^F2~xy{UHv<77dpY1=ZagG|Lw4qj8o4xSluQ62wtnMt?b-NV&QtT0v7G9)x@;PvPl zb}yQ~peoK2Kbm8@9zM9z<@~Atb5noJfqFdJ{)IDUdb*g0f}*#rdOsA!5d&j0d7|kU zPm31TqKd{SclrxoNv_+6)+BBm?`ChzgX8qZL*c=l9>CO~m8i!vgT*G#Kb~Hu3&TDi zS(mZ{cC73qp9fjG+swyCt162tK?0Z|fs+Fj3`xbk#T+4$o_E3@OG5Wx9?ac)AWK$7n{VAhc7= zJrTJR6ekL1eh4^-1Y4KHF-5&WJzVga0%f68NqmY72a2$q=R_=wr@fmxPp@WRN}0X2B7q~=OX$d+8wO)h zVKpar;)CV>Tx~fC@3IU@sW^HEYHX)ra-S&-FK)K?Q#MR!d2 zJ@X%la1fT0uSdteI_0NoySQ)$AL3`cF6z}JrphKu2d6=eR;Cl3V$Y$*)R(&v!)nYP zdELucSr$g1!*>5WK>1EsfJUx6hsgW0H>&L9b(;kgY86`I9JYvQ(3LYhwY-<@Y{Z9D zTUK79@x&sc3apk??xex?_)jcC%b(n-tI-?m8)}%}6CzU?zz<#+pp*fuR*hx&XzfOHhyn5Z|_0`=JhY^0{Q6$z^%~m!vw347>l4Cam*Jzy$e_HA5 zz$?HApk@+4D0C7$^r4hCHrEu_SLfH(B#?t$$sujtwa?t*vJ1G5)Q1lpR8s$45a7H= z3d3gmad2&`z!eqT>mO5~Ik}7xJVAkx2(Osv-E*~yJUn(#@(p(+xaGxE2i95x6^G>< zE6fCqtl}=e|^FNe-uN4=iOT!;{Bwjpsb{Vz;XzY`9 zr4h=KsjFi)&8f_Pllccs4W9{HaUwN_2_B8Um=f-gsZN#JEBy-j@JI7loGZ5_axFhw z%Z=2C(%Eyj&Y#MohR&xMXp->`z_!f(%6>{tp6?rJ@;RD`QBoOwaCAL2Y@nBxyvu0B zOlgX-(2*72*z(KWU7)*4L{R1@6$oH8;~Pf7RiXg5#2sT4I{`_GQ{)US=SSUB;+ACk z@dJ~wf*qr9e-_R<${8DdNy1cZjJlmQCW~F^gX(KvQS+Wgxm6yie_&qtLi&T52!WS0iBBOxSB=&<1d$=F@{#dI1J1L4@MyRoO+B*UF z%}m1uo>8W3*O?BKn)2EVk$SOL<(zu0NM~y+G+VpSn=@Bus|)Og!#JC&Sg8tE11VIa zwtTFVv+r=OcUxOqI!4u97G6J!7Uugr$v=?3RFiX4;00aakO+b#5eR^>{G7Th81#Yh zqTafTtE&8klh$;+boj3R+E(gg>+Zd%K%vu**i~R2{_+nBEa(}8hDz&}weNs*=H!Rt zSxh_#drRB>=NK7XJw2t9ioHxEJ5x$|LZHB_q@|T63gQ!f#u;;s(pflYH+qV^ri-ns zqhCm*=U-l;4z;X=aenJ4I&OY9E68KG8hrwYEHV?1=%NTLF#2;$vK#@97i2V9%W^Un zby&NttbGMqgB`DwE7#XAA zsCkv{al)SV1`$`Ya>#+K;Nb7qxKTurh;QN*(04i66~6A?YYp}YQDWPFsujn$cR0vv zyVrXMoHs(BJv&GeSv-gDn5DhY<{^Aae5m-P*+#i=Au0D%IQvm|!khv^WwF$`e)$a_ zSP#gJhDWcNPZjPv--43hka-WTmX)G(Bt!Y0G85C!6u*2_Ee?vharwytv9INC{Dl~4 zg)Z=!M9e*We1jxCVRDE(n=ipvQ&-cUzChOwU?N*o!|q=xDX0@Q|GmW21lyd2e@^T9~*?6uDG)tja4P2eX!U#FU3RM(p zrJMqXc?R0LM9$ywCyk3jpDY>vCY;ry zg{ir5c)Ga>5{p?IrrKQdJP?MIR$5DQ82DlW{@s+!5KOoZstfWDorRy(Ag-T48#UCO3SD1n^iuf_Y08g zlV~+BaN_Kkdue<)X5tqkTzaFm6x)D9J)Fnvs|zebt)v_L# zyLD$gnv@exHq1#qSFd!ARX?946C~!P_%wRh_6|^gl#FO^8h*IvK9G3_EJ9^WqQpj> zM=03v9CtH6<`2hg-y(}a)|0qXt#oQ2m2a0@1~^_QVd~sg+v4nHf1j-B`UBR+{o5VpYTeYWg8^&!qR`V#t;FQ&SB?=M?{yhXl=!lEr8s;hmXr*lZ) z15R)akylfx6gci%aVu~0_H4za07hiM(W;i%Y(@I8FB^F*{un|Ns~5ga%5+R8$t$S* z^ZnZcXHtc(Ts-l-%oS|*W{PJ8-&D=bwdcRvkj@=k9<_c-SycqD{kqoKQ~~MuXBSFk zblk#*u?fM>o(7L9et%fAmcETD`>#d*{DCNXiX7SkzAcPPCUEN6; zO=>54o(fzp;m3wGP1q1y;A>i`TGzk$#c-C37I128)YxWQrsm4z2XF!r&|jGUf)%wAM(U10pEy|fXBpl&xumH&OtprU8-k>^NtrAr34{;>P9olti2TQ|pPW^ZKOd=YL)jrD2qM!c<+60Q6}C#Vnn6&2tE{YT5RlRL zk0JSS8ve~ZtrHl!{`GE<@6qVW;6i9@m`p9%>!q^j@~FL0TbsH(5NSS`wX;a`PkiD8 zb_e1b1WBsqYSQf<3oe?V&__4=Em0f3j;n~UP3rw6Vdy0Bl}WecG5g7|mbKeY z*=hezQ-+F|vIWD&(|^s|Nj@GKdYfar6Jz?&4X?WEoJVT|{=qbb&a_Szaxf+SR7xtZ2co$BTe+b@h^rtpp@F{X>v$%RcicfYM7I*=sM> zC_faI&MnAcFWb?dG5)geCdo(|oV{a6AXGZ>)X>qO6kSgip;Eq6k|IE_4G3Y{_fo%* ze;lp6ZW3PonF7qYQH$c%xUj`y&|Weq_naWS$))qEAyO!NtHs5NS^vWI=;wj7Fi85R z`b!yOLIGVgY)q`RnjKG?ec@DmAWTpQ0K5uzG>`njr_#8n!WUW!PH{4+Dv#4!(g7)5 z%Cq3`be2$tvsWnWN3I?~ERJSV``$FXe=;%O8dv17L*nhK8~n%}97PQSeE`ARO6?Jh z>i6v{F3wj&$j>6#HJEthKds~Xzz{}#NK<@7q98i94m|cxsxjhjpt%-vy zNxG34v1fbi^LDDxD8-wVg$3%XozLj#*p`e}_gSxBs$k9eVq5h1RkJq%WxD*ih0@hQ z;(3Jmo{?AnNb4hvE<9MFJdk zGWj)|lzw0R3|3=cDbuAlL%wb>+`3yFfewyJ=4ihI46?^ObE;~QHRl7iES2W(mu)|% zA8+PQqSW3?a8IJ>eqw&`O2j|>VP7v{xp)nlWw0wsJDVRTzJG=bNal6%j4DP;d`pZVc{kNq)Y{bTxMMI(bMV*OxMr^=AJlg&?2=7xj3ympNI;j zDD8id<1n}cv<|E4-H?Sl z9w*V#W6M;y9}h+h`X+Bl7urtz)6n2}cHQbNu0<;6_LZ!H(#BVyaA&SwN{f(^ry2eX zn0VzS-g9Xtu7{U)FoDV3&n5kWwE# zN~1!G^JDDFg5aVv!O`I z+&a0DzyCXp)>bqh5S&>$c}EUUkzoq`jct`gr992)##8)$MEg6Sk8A2C4l72X_i8FO zmCoi>U%<Y_l9!3Cqx z)S@24>LP)N_+|GttLeDTICaYzYfLL!&6eBW+XY|WCedIE_V^47)+A*)^as2S;-OfBKM2;sfNuD zU1xqgA+}P7Qq|nDDuiM6Z0L(m4xP=sDBhGJRKimEih3C2&1s7>*p#Gh0H+@>6K>r2 zAZ+1<+mbx!o?Z5z_Oa(YOm}X6WEi&^Us(~mt%xndj={~n*1HQzy8G~OZNvOHJ69SQ zSHq9^A?NVJM~l*!-_@tJ3`tA*f&RQtU*Knx+&!Jmyu>i=Co({Ml;Hw*$$MyJBu`~@ z|D0KZsoV+H*bnSl%+n6R$Q~L8UnL}ieS#(T)U#rF@G|halRh9jQrf9x89OLw@psF! zAZSxnE%*W4gRV6T_G^4x26iSxKPq5XK+I}OepNf+BP9feUwvDLRr@hiBg}M+ux`$b zW)P}Yr8Kfz8)q*&d^tNOYEW-LfOFS;(p)D)xngI0;HJMlwbM}TS^?k2>gFyIpQ@m- z{Qfp5+)7%u=trdzwsv2a;M@RC5yeeSC&fy5R8kb;NC>PN7XlJ*se| z6U505cfXCxc}PtW$j!hHedX60`IvJWXm6@n-a1|zBC9`PX$26A9y!ZJxDwY`UAueYGk@ za3svL&sI>7L$2gxvkWpqB5gT*rJ0L##`g{MxslR+a{r(Z@ z2JmFvqL`pr6wFf*+0@LPrlp;7$){gCM|gG?ZLEz_xvkU0?D=PaWH5^QB$h?lRH2$q z8pH#*m#GU`z`E#Q01I`(ul7wum+NI~{pPLXQDrmxn2Ds>Wbw`9g$i{iiGkb+GNA7d z(*IOsG_9phP*L=0>Yl^Ph3c-!y=k@n@)d@Q0yTr_ih=9&CDPW=*<)6;nZ_<%PzA3d z4ns>IY~A@Y)DQ6qG5CUWmeyA6@YVNg2iJZ#!P=G=n(2`S@h3Iap=5IK`5(xR{a`vW z94FA*)Ml|So?>f9F8=)1-7wX9mpRU1@wlFI7H`fnLy6m%#Cek<+k zu784Xd47z{z@k@<#Q7ovlM3arsLW-|Wcf;qHl)DR=2-}D->f-#0{~2AQf7+fIsAxb6uGxOCV3Pq2>XFq+2e%ub96Wn8;S zGLhNBkl#QchUE^DQ(^urgD^An=--vT15wA1nMua%d9rm!)8SS zUh0gH?<_$!(*ArnI=767>E*^*+C^uG1T2NpJ^fH15V%pq-F&!jd(fj$>Hlly8fQ-- z5c<-#gp9t7MuRt^>Br%Qz}lHH_u2&Wn6eY#B__5;Q9Eu~v02o&YaPDzxrXDcQj!^P z&E;WUY3}|iis>yjG%=!zjj4M2{q0kkK~-g0mc`=d=LX7h85f3itAA;W=Iw2i{{X`Q z%?bXKDroZ7XE~}%?!XKg(a!kh@V1BTdieD1D$!|ZRL!a(?&7aE&r`T^{{@^hjo9^k4Cdm52b^((?Twpc%$Vq!Qw zR2V)6Uy;8U!n2Wu(ndQmLkmYG&lr)qGBrqd-p z#eeRy4t<>ziSB#L#}*8fdcIf0wnoExX)4XB($;MaB)SBrm|@Id#l0c8pRF4}4kGU- zvy0Mr+9}z(G^5(HkpYH}M(0&$I8@vpG5{1ULkePD{bV0GoD4;mmIgTFWjPKrFNT4B zUqdy?mDee@>6rv6Jfmda%-A;-zK;o2O);kAn{+``is_IoM&#!TtTR$aT#B1Wh-oHY zy5@&+Cvv2+vb+Ubf!~~iE^Ihv(*)bE7OlL9upLlsjYdR%f?5NvS1l{RUwLx#KdsS9 zRURa>2Oy7Kxi}5QS+`)N9Ow&G&x?ey6oJh4qQs|9nXSmt8Zx_Bq+nxC3yU26nE;t!f8*^;Y(Ef1&2+K z!B1ONSH55m+VtL0GI;67~<|@d3OgiNf@>j`Re$wb@fCEgomnp9sBc z6pn2-064&1BUNjm5EW2}RGz!)kHI!A(H}68Y}AzKdpKYYy~k$@P2$ckjuNKL%rH7O zukV{ceKF6WtRsD`<$)UEP}VW0fAJ^1mH;=<&As;pW4G)fVV|M}!#r^NHy5xVi*3wM zU+19Sn3D3NJmNg8okexrC!?xs-)b2psxPX&iS*{PYF5H(v*GW%|K@^Hxee`nmy)u0 z+Sz$Krfh5Ak`ur8=fFrdgj~3H-tZgGj^x$8O!Q|+H#5MBdR~yr$}W>=`;@Y3Odg; zQP8f_4O!j%->wC+y3>5#0UEmEdY%#%SpuwFet{klgsiv7s`xINsap>hpF=?bv|dr> zsb0<1@PhVDHcJHj?Ycn5e|Hj?u2E<=?o9>bIkLasTSk*(k za-E!rNk4s_B31PuOVGfVd%5JHg8O)XL*BBueD*V(9Czshp_a zW6te*(o-j~`ge;NtUF@xI&p$tJu*ka@UV%YSHJIJC@%pkaYCk^X zffBlx;>o$@Cu#H+N#I+;26<_72p926 z0h!%|!v!z6DI&2~gs41ToW^0>&zbTA$+?SDdXBBA_F$67z{HfPa6g96K#cW*kY_*24Y{|0UtzFH&A!}KU9_(?N% za^rWh?Fv0WVH|6w@ebO{dJ|3jb?LRFgycGPQy%<7P*F2SPgWK$QXm11(Ug}NU5f># z-cKTN{Lh|#_;8(X1W%`Ae9bz-s8?|+!^WZ#j;IpA;T@FtX(P>bRa?VCKY3oX+6AJ zmE^yXu3o|G=z`lzK=X$gTZfvx#Zuy`r4~L%ogJr-O6=<2;r2;v{ArA9$m8>Ve9D8> z+<>0Vtvg4!Im(5v&{J)o zfuZcB8XCH~)7p|EMX7N3(J0gAge)F|_!Gzni-REpm~p)Bg8#VxvvJLC&+>b0O;*qn zG>aw62`1A>T(S!Cw}Y+%uThdP_*O9TFMpYd@=SR%Ce*UmsLk1JZy;^(#@u>>8ENd zGM)x6R)eS-Y6`EPgfA>ydV!-1uhI?5%~TQ(n+5O|8Z7>g;RkT!Y~G4s5fSo)z!L4^ znSUjWg6U6D)aB{zDgPRDtj1y|tO-qS(GT%Q(-&lQ)eX)m4%o_V`D2mNZ5cL`J4Vf! zi6@BIsZ4M;uGFqIH{$IeTEryDK3S>juWEul=dQ6IPGusrVs6>&?Rh3zOyy1G)rB5C zCqV7(8Khoc{a3U>9oR{@R%S<%*($(#aZ9LtFO3Zigwk!oh`VdYG99S@P>l zs^~h(fyH&RM8vBlq9jaQYEzvvgh8K(w}Loxo>2@u)DiBBi%YF_?cUzem&Av11$PT) z?Mv+4^Ycrrya4&Blapu`pQu=pM7`X(vq#?{HuZ-yHXnt)!cy2;q`r~59tI|OIA6z|P< z07SB_$yrL>(eZaR?pVJ5h!`^WwOBM7s;(bcs;_i|$|&u_@ZqgGO=(zL0-68;xBwE^ zSjXZNt*d1_ugqFzRgngAUl%-_Ov5_&^bGd-9u+m%-+z|-L{(PL5on90D4X}4FzetR z(dU5FmhLT?!AXm&duwc9>}zAadz{hBQ#?viiLqh+kV#vcr)(|*!2frVPQ4CA!Elr% zW1pzWb~fD}+Z^j&2+lpP7YeM3QNtFAFfSQFcR`ahFjfU3pQVR8MZWF)*wjnfb@dI& zLg}~SJHV@tN6mLm+mN$ndKk5kAH?7kA^le1p%}Gy3@msEOX=2cecT|K95ZC=|E(z* z7^!GX5>Ce>a>{KS?{>EUmAZu zgM3#)c2aZ`v`9!PE1$5ekK(I(m~0spW-lMMrk{C`IB-8t3Aid42YFJ_Z*Sj)dtt|I zl;o@|$Y;^}pJ;PlHqpk2q(jdG5MwE}!$t+|2GW1iBI4X|B&VpeacS8S-g05_8tUo{ zpgPzjr!y1{!>5LkT-^<%63vYlF#kD~@mv|jnd9S1#QV|_2})Nu4Hd*iLo6t0YGVIz z*Gu^y>R6RipH389nK+KF{Kwoe>Fuw(_6$n5%4-G^aGhN*?uq8O#q20|8(%c5IrJHp z_>o$k*7W%uevD7B(9w?ObTy%DZG9Nncal8CKE#1$;&!-W=zec?wCUjxPP!{kCs}eX zI6WG6@qe+bY%Y>Q!|sj({eGhoriDx+#pOTdGcwa(k6yz$vbqTqMbmc@ms_Z=jv`hmSiLO>|*gNUHf*1m$$l024iS4> zZI=6y8Tc%HGsRu&uw`C2*8?OxSzIFdZX#w$8~J9jucTpkA=|p_zDMDr3)~EfAU} zT$xiADTm=Jugl4{7=^3y9N_auxn8wOCXYl$8D2P;St5FzIMs9&IZdZjv1f2qaJCNN zovQ+@RN`??ETQWQF8*Vp)1L^*XP$4dYpo%o;-{-7hBXh11q;eRIhY&QPsFEOZgYeB z2pwUBU}j>9q!P{He~|4n(YW+iO66?*!+p9~h%F8Vd)pO6tHD$&WaRatbM0X*&!`sj z*t+cP2Sr>c9^s=^8|RwOsX<(!s&~&Vyu#h_C|_s3^d8cHwl|+owl7FtoR-Wp*+AU8 zAkd#7ToAA|=6W|e{kcH6(gfuX=I0AP0W=$5r2h$SIg!RP3aGOhx!Ou7inRT^kh}!9 zk;ePq1LSxJhnkpdgBo%^qDNWRW_gBL6*Tp|($L0QA_-X;b}ST|s*rqNe{12sGX*BB z546D9+WXWC)AiYgSC!Y%*TYcVq8>6_$FFPe`m=^4?N;9;M{%4K^@B-Iw`Wb+O?|Fw z)R2v1akj);d^(f~MSf!?eJvh)mPS4rBs^-Sqo^YQp!txF0Yrl8? z-+4I-*wje=CFIj*y=9iePVt5ZM7qiOK>bESyACa}_8xK7{tKLA#K86c06%yGC7OZy z$153TVk&6pbO;R_j$+pJ#wiS&V%Ge(f*^dr*)kNIl zY|}bLY3M4GvI>=z?WxAZg&g$y}ZxhjLA<)HPve;Qqgxeva#?FxW!@49XXE2uW@Lw z{T5S6QPWSB)5#??>KaMoSJaGDTK?L6+;g|KGUW1Ia&uu~Gk<->4E~js=}iJiw1pNo zRJ#U0s3EoNIp5zMFB>2?&$$qR+|Ex!9d%_T9RzBVO)ACNk?duZ5>%D_D{c3<=gu3K zDO4_feW84ecBG=G%d2wvvhL{lKzwyK%oDp3XF|LvTUx`wzBqX^WXKpf{f?-5H~E!B zXc$c8(B&0?AlU9U9PPFMnaC?pSVeeaHcm5VM%wHFyodWn^NIZ>BUQ`2Nru}Jbl47D`Q#g-zvy=(^?@K3hb zam;ctF4_|#xgw>$j_KU7@+F#?s~xIk(>$G^HE9KVK~Dgk{a55+K0{{6!9dsIH5S)W z-6u}w5iLxvl<-Lb7mh)%R{Ib~1P|KyV)$7f`i%)g3-{Dw>5h)!RM45rhj#MUw zD3(_#H)d%V>@LS*HolMu-|dWU35!4UfK0}5@@YZ@q0e%)gD+mxZ5tKss4gx=%Zuy@9Fw**70HeMamkEtVcLk~H`x-+Xj2XHWWvQu$H1cP^SN{;DV|AWWYq?7U2A z!QH~?zOSVP{0s6in>!3Zy6np?7|LBo(v*7UJ3wJ1FcGRUuM+Ihc6lk5+j4($h zUFNyfteuA8t!pq3$>Ra!=Kfy`JzQq$6cJ}FH6~Ei5W@<&Qc?k^Mg{w7N2rbgI}v@a zk0M_dMLCM!{PzZ%P&ZIynLH@+OO&fPXZWe1m$o2Nx!i7A<7GI%7s&Dr0_1(HcNNq} z&AOv7q!7nLSyL?nQi@;$E#m~-HP`B4{;zCzyj&}@kw9X9=ll}YkGL~F>S%K~D5+%* z@j!2`MFE+uYmz*j_{Qvbc#=nQ#oT7-UbT8Gp0bxkBnFBWdUujAtUbf|lUMyW#t$>V z4&leX;aON~qU#f^YHKrG@_`XhD#O`b91?b6<5%zF3(1LmTE@11@tBYk@)4gls-yUo z?-KPw=RC?rY5 zrmhD7lHH`z+lChXJ74z3qnJAmJs;i?CSK?q-6LAOvPufP&c0`31w?xRx35+AwXNzL z3?ulC3sICe5IsU55gHbjhK@?6_-F-B!uD!RswVhvR?~@RCB>u9WG&*Q;Rh!=#Aba-Fzj7GM+|z_z6%A6K^6nKLFuwxWN}?;z?&9P&|SPe}D}!$Ru)pv|sW zeR{2OE=fG<8*B#{x8mu|R@i>P{<6U`{a~0;R#j2GS*xgs%M8v@otd{Pmpoi?upZlE zI=9VNB?0@7?+BB3D)dEYtup3_&za`}5VA!YBudsgN;=x&*S*Ik-f`)%V_ZY&<5~y% zMP>{>UZa&X63ZRq{{RmoTr1fq9 z4Q)UYP5sZS&e$-*pc*@nQ^;hJ326+oRTj`mlmvus5t%&sw%!kn0AMO8oDk5egufT(V{4GVPUqVI*(_R(LJL=CaBg5Aj%jB|q!Gf!Wp!|hZEeXX)KrD` zw;SNWSD^&2AD3_rUqhPb?^QNqOBFN|h618CEgZU7*eE9Yj{dJUIK!MSBTK);*@=q_ zjFgljjSMpDB}lMqwS|V)ANjr(x!!A5Fl{w%Urrv9gwZ(ZtO9Q?B z_)aD{Jd3{J;(In@hG1S=RtQlg8;K-ag&s)vHpfBGfoeB2xW2oIp9d8(%S%&NHCdJQ z-Y8A^8L09{Uze_xtgOKZxLs z>IXZOR+FczrSHb@{B!~3hBOQ$mcv^ph@VxB&cf$%4e-JI-~A=B5B%;hXnrNxD60B{ zRXt!7fXDF*O+TVRwb(EXV4zrnby#XVjCOo)9WbXEW8w=-aZ*)QQN81(ngmb_y+Cz! zKA;fntT!sBlVV9YX#jp9hN-X{N<7Hr(*nldmnP4iZzi~&Xsl{XwLqjBDP{t|M?16wc z3|o`8pSC(49jUkKC*vz+eK}Go>PBSIM=xkePa87pWn<}O{;Te7>@l+@Pz|K8pqr3q z{Xbchgc9ZEu32Jqmq`+;?ma~QhW`MJOg=!!Naav~Al1QH4^ZZL4qrp0L3wv zjhfsQzW4iMX~MY$ou9nWg@(j?_*pBd-m5$;%&q(_@260#Gs+{UYFSO%;#5#CbUqKiy4+xYihz7_K(nbDr$VL4sp|6Bvnn~M z%)PlEM9NxFKUT)esCd4^9((zh#Qy+GAlKus{{WBx6>>Oe>2ex<2^B;+hO~xfs6P=g zR~HLmunp$hsj=Sp(sH(bh^^IY{(ro%2V!_fRZ#VlBo8bUbqpy&X^|`k5(C1keJ0xr z+k6=)fkDwDfBr&lq*-%RR#H_@PnMZ$Bw-b7{ndyN4(yvxZhmQQ^V>+v9J*^F5hPaVtD zOFC9hX(p+TQ5mRWJz;HN7jisYZg&{;xUsGz2%|z{$n3_wLo%t77>xA|02)MbBQ%^2 zWPO_Vuq-ceVQeh6_8}$KjE=3Rj;#z!BvMIp+h|qdm4VrxQS?Z78`uH97^70T5@^js zQH;LLFLd_V3~9&M9AyofJ+ieu(a=U6b?$3?Tff&+#Mj_K(Y3@xxo;|ipn1DQmlG<6iUF}kjlI%0?t53G-v+ zWl2v@4Du~xt6vj$A~UFYS5`K03^Ke6 zl)AB&sS1geSdr*rFRd5@U@Qmc85;%{YtDe5#LvZ;>Lc}MPxU@USy|LwMFY!$XWNF+w5GizX>%b#!^Ol$6CS_yXDpyL|>ecL2oreA~3I_QD7C}3XF!jz^ z4IJ4`VS< zUhJRo4}hwNa|$VDDn(g~V#M1R7p-!*a%ii*3bAI5o;i&inv_OYZD5{Q z^I>alai_x1^{6oY{{Y%hYCLWxQ)ZP#qmwjYH4$JWkr;PCz3;y#^Nx#P$NvCkoBTro zTlJWUGTg^CsQ8S=bdR=7COav)g4V@@!;bl zV){ashwU^Kp}jyUmefN@Omh6fDlE2%Nr^P0Yrg*gHP5Amx72vm?~GqivmR;5kNnij zxthA)f$T>eIhI2UYG}bow5Yj|E|OR&Ha51cz3}f7!aiAT&=3pp?oE;`l`zuR=2K<0 zu$#Rs@xo*7ex;Q_ZAoAmeM4fqTOG`PE*})yclyO;V&58v*Zjw5SsGc2kC>}=`?jll z9me9okZ+9~i5iFty~xd79d%TOm8xoFjw1B)R3S*>DmnFeHu|^l*jLqMA2C8{7`5?} zP}E6R6)j}TQ5BQWE}yO@?F zms(Rh7L`?Gi&%}!VXidI%Ht=0Q+>X%S$Yj~x-g8%>^ zFxyr6`)(SSR$w=CF=dj~#u|={OHP+W4ysIG6X-gKJ73ND=L8y{(DxQoJgu&h7&6Mr zdb(Ltvm#Q)NTwTxeNSr(8+xy9M%dyENsRHY^EVbZ#(OoasmLjuzr$uwB1Y^fzI2A? zPjD94DwPTVu(>A&n3p4QJ^ujBLMvLhwO`fw*HHC^B%MAcpn6nwSgPbL5hmo47h=S3 zZ*h&-{7iU|t8Nnhv*<73e7S9BOVs7L#RWENnX&IxO;c?ztD7kvgSC^jgi_PTn^VFj?t>cl*`!ARu(LMdwkP^Wo8g`>)NHnd*SP>QS`50j ze7-e;x{gRfmW`I3hO)-e2?4QSLDX1{&YM_cu0UPFR<7ZuSR_S`8khw=AR7(AJYhtOs)t~Uxdv*jM+|VTWbIaixgUKMkVnC9O_>-ECgXxf7-}}P)C2eR z6*C(D0E4WS8h+gooU5eJfqIC50Bb-kak#$1)&OsdY)I>Q1;H#=qdER}9P(4^okK_q zNU{N?kYE1*EC(2@Osl07Bus+mPM0stlPILjD=U_sXkuRJXK2$&P%g)i*04W)#yI0H zFRaUqU;Om}g|&#in^I<3-2Ive%(-j~3cTsuD(tt^PwG-Oxc$x?A092aqac1Fs#ebv zs4C^9gC>LFWu&KCjTG~$Dv`-hJlt}50@yq)fo-xI2k#m(DKWt+v#)~7r5#0AQv`}x z7FYEhy=`zfxi-Jr*v7dqoQw)o*@HGc0wKCw_KqyEA?gZ_%&}~;fXl6XHNZT1+wX+t z@WVCYm*jZCjpLO1t2@c^ytYczub!n1H)aNY7fln^Y51i`V3_xNbw^21MfBU18x8Mo?}ubzgwWX^X_eG2uW>i1I$~MilB$%e zN(l6UpmT3Z`2<-10KXXM_}*fv;AP^=S}<2h^wMTIthD)+Q_#r}42z?A4eUT;u>Sya zjb2BU^wX9x%4=MT-Aq(dM?;=`JuOpCw;&U3&+X&yi}9S~UQ8-ljmFws?z+FEPFB&h zi5%!VkleV85EW5CweRHk!m@-JLm&SDBN?x`d!+h3y4$HMDKi?nim2(LW)o9$tS6-D z-~erLYmz@WnLM$DKhwv)^*4BaB4-7ifE`Azss0=1G!(ghbwgL3)z;~ZW-eLGiM`rb z$ARFk_7*rtkLM15O|g}+eShvZ$o?6PP@GH+eaMBDzN`QoIHP&mmT&tCAW{{{U^x zfwGbKz4U;l_ddtmU^yuy31J8qaz$CH1jt0984wUj($BW#m|E7_>J7-b=M`XV!qaF- zB%qX5QB={SZ9FhKE#)>U$MxHGON);__rVM7K~hu^>SmWU71=wqwDQkUOD>5LH%4V| z)oT%9VomHV#uKt=^&i58iKSn`Nv@`?Y7wPDt&uFwiog{t31RuazSxR+y;L402Xbg- zoy3te5YwtSG4{A+919)TTa$1sF=d%siI4zA`-7@z^BRdvqPfu+0)RTNr^d`L{^#s) z^A-plL{5vV>Wu!R7uhA#G5zis4FYG z$2H75f;Fd_qEf70+gS0bEwCVMg$&D&KxzpBSIaWG%$~M-OrtNJO1Uno^$bvur+tRN zU&-GT`IVN~%20hroQ97&f~ZBAXVr_BT|(1SLWW5i*8@=Bn~R;#+X)Viq}Jxl4yt!P zh5jE*Yr0@ZH*K_*jkG?o_$P~t?gtprfDtRm*|@dV{V7y3C#;OAsfCFv9>5{k-{1Db z%UFqB8DFC^oToF$JZ%=bISR>5uJ#PBb+2^<}hcOINbn4zJ{ zvmE+-$1m3_!2yZ1O5$o)I)g^zjUwf>9uM0ce-&6`qbc3B~a$c3|=bT#_1t9ZE|OR7e5}*N_t;GFY%6U(&=a>`&xh0L&X^9oWU}{) zwlB_-ZR8QgGyk%tjPMk*Rv9R*U#!kS1GW299b zxQBo?x!8N#7_(#s!0+!2SGg5+J0u;+B7#wCSz`YHFMa^p>u+=WU{u(zPzb%nT-`)+ z%+!pHP=@ayA(06eK7q%9Y;DAU^6UQqf4pWT7Ff-aIb@U}}|pc2H`JA!gtvYwkUhN^=vd1Dd1KtSPa06wcR`iI|}n`5v>T$svT7<}FS zE^NkXYKUuTJ|d!?UfjQ?>URGCeOruia$q=Ej$4Xl1Kb~)QpZ-E>V!y)|)e6##8{vi&K%p#Vyh1)HXnc-HZ zaAa0(MHa@}5-dsFbNPGt0oaiHj`8yhSIk`KeMkIQug$u0k$Pw1GWjH@)mc*Sc_BOe zxQOQ9ADO_o^NEMRIG8gvksFuH#?}Dt4(a$H88Xu4ddyJWCXAEZrUVnGMYS>H6MgM} zIM_z?XCeC}h*wX=&?K>lr=x3{dj?=GMelMy)BwKM#Uh|Tn1f_)ZXTYY%ykt{+MmyL zfg<++fxW#x``Xx<7%BNeMJzQulyE-1QtJxqA(vR&P&=qytis@du=d*u8CA48gcXs``+>!Y^K3C&o`+J3`#s7rP{B^LuLu#dk6eZWtG0JH z-o%~(JM)S1UyQzF>Q5$>o;qrFWTj?yD#>PPHnsN~>c5@rK^|~PS7r$$4Np`M!CZ*u z(4ZBC$nH262u;P0_t+7G(Ub*u2iI2SH1Z^HqDC|VQH&^5oyfB=Bk^l{d*b;0T^@aUzyYg?+sCO{$ug8z15DAKxlw4 zkV$Z)+QP?;$hW>TsO7J6g58*Rq~*)ns&PFtR8>V7RGJwCjUz4XsNYW;?|aza+ZVtq z0>l1(k%`22+<(aEt1}GF8p!gP>68VN;%ZXLz-{S4V5E!t^MVRk-9{I^ROqpY;f~R$ z1CXjM{js$;sERgwkxx|!GDRZm8huM`TY10R5aqoAa>8oh9-yeT3PYAhGpoW{B&JPD zK=%X39&u?$L;FcYb|M#4N|wEe2TXtwxfUmnY+gL!hx&^cs%2dHI)a7{0%oSUWQlUB ziDRX5K~!6rGXy1Zg=*u&>C>4x-6dNY3s-mlV#82qfEjv4DyJ|E0X2T!H@L)#|GHIo-;9~8j(mQj5VL-nVl6= z(?*dfEoPa9wNc|^wf(WBKZiFuVX3zthU{qd_ke1s>0#|f9Q4Uu5!EQYiGS)ppKNt; z;0P!Soh(=v67h6HrwYleZje+=<5HS>z|1 z3-7iQmoLwd6*aQ^i(NrcG!a-eDXOWKM6FoRE071KGDK$bk^z3Ss zYSNgUSf{Q;*ge;h0Y0y`<4wKJHWCcwt2e&k%6eInwx}bBLi5RKWh+X`Ws)X| zeMD{ubGTiAu^S!F-Ua4uy-LvPMzcs_fujOBomaAkJ%aPd=I3uKsdgj(7VBrG^PDZSVm zev*Ct@C--k4RtnXDcy*cuA)avF0oj#>)Q9WlYV(S;C`iO891@sN7^b%%*MJ&@;D-< z2)>%Bjid}l=Es5s#={vxf_bd!oNNxFSMdU>hbXJnoljAkSE{4-*2o^;t5G{13B9k4 zTvQ8q75SFBcdTYg7-q<_?7Dy{)!PV5$@g|Q*1L<4eB(ZB!AB$)UZX(@JJFrzr1L4W zZl9&Cs*Fc8fa(AcE(sf7#x-Gb_`|T=Th;t}obRlEiL{HE&6ZI;d`Sy3&ruaQb|i7z zAE;bdpBO{s9Jt(H)eEUN@ZYcJ&+31Z)zkKBqk>0y$n{DAvgsTXxd!-l4BWL)gDZk> zaqA+5mH|sqPHh3#3$VDijrQDoVSz|vsAaXOaAo$a_?D7JaN3b}vJEyMd9mkn&JK*O zda8&Y#4dmt-Cb>WeY@2W2;7gCBC3sok#KqTzqT{y#mI8@BmrATQ|GpxOrt)f$*F1k z6vi`6tT-LbCt}CyzdZ5{ykkBr1%or2Fa|%70(&{Arpn`LS#tv_D;Z`}Ol3et$TwS+ z@V=DThJ__Uy_NSO z;EMpZCg2<5f^U;XUC1frFbIE{#T_1LQ5vO0bKR82K`u%Qh9dT`*nPJcA}AU^+E}Rt zT{#l=Y4W)0z;eq^EX87G09k?cVbl!QcSxkj(|PH(MaOaz~=fR;1aw6VPWL?#&0LcEI-~@1PHxf zPw+XyOWRmuM^FL_k$*P-0DLnJLdjRSlBG=<-a3l9D!ivGom{ikQKJT3$Z@v#-Q;H} zh*xAzy5=JtT;}~*(-irHv{6l%noP;%*0Le7UA(=#ZHyj2o0l6F@AZk~#NEKtbn9f) z^C!ehJn=D=W+zHYPxOubUf1$Y8s1@c0E)SvDiR4NaZ5H6){97s3`13ri|gC!eg2?$ z9x=BbMaDJU%g>KczfI?Pg;WXC$z4U3)5;YpWT>_3lpjoF{q8mdZZ3Gn#PS-6UvqXp zAZMWZs7kXi>1xWl=xHjdqpr)3W;%oDj07WXKMmz> zDV=A~#TlI_>DWNEGC3%pGIU%)*i7Mhqx@mn{m$v2yQ_2 zGI2LXI`l_E=2^5;v^S)tik+c?Srn?dzZyp1ZN@Ja7JHOz&f^HC$Z|S(7~NouMvA{w ztOp7S+?yS-yMn3(mpG?Uy%dDrmjW zz4;%v9N{gDFUUzgV(Q$tGo2<%I*DSen(@c;)sjUQ^tRX5d=bv~$3GvK0~;S0vTL~q zPo#N$BvgnNj#N!EMAl{(-H5i#PmBAF?Sgk1AC>AX{mgC3HP%v1EUbxe6$2F^hn+_I zdu_qr8IFDrVlxs3uw|!;ri6uP;hH%d>sah9x2oE&d*72_Ip1t_F!?K=i@>A$26f}55qzl)D2^wS{X;wblLsedjxZf8#hYnM?+HGHa(TI>$Ha8LAeW9^PM ze;YbC04+~Zs)Xzauhm&@W0mKVQdA+1tTyq+bpdg37u{@j!gAm^j~s#}`Kgi5K~)}H z^Jj62YL`BSk%qeuAbI=@W8|gl9>kQyTh6hUNBp}jp{b$xdZ3VqmN~|>`|bT#`|XV% z%sw!r(fkoLEdc`04Lelpk|^4qMf&t=b#K4p{xOZRoWF~QcNcoDwiFQ4B&k~qk+c$6 zA@IcbAn}IdBzuX-)v3?3+`b>1B1GaxV5aO_jqiUypE%ir$#QD-GLU^r8GlC4niOlDvxh`}3qcZ+gJxWN1N-1UeXpL`NjxD9^ zR0~}1#j()(rPGkGKK}sxkFp2KFuhE$W)-x#bzM(>DReCZi#rSLthgP(4aJV&8-Q_? zW9Gb=57rJpxR)l(>hp>UsH04`F_MBsiR)@<)U1pF1othaBS63b_6K|$Rw4&i_Ks&g z5&Oa&J5QabN>tI&*T+$q3YUdy)M*fbZ=jGa2jbh{oa0~|i2Qq4BQVRT>+9Y;-6NyT zqtP`@OwL!njekmyrA5W;J@>#I-%I|Ou@{j*v2lYemYyK2C3&gPtA?kA?9Ile0^Ymc z&F7qL#_h(~e$$%tO#>K~l_`ZziRY$5=eeXSD()CJt6)j;Z+nx@DZx*n@W47$edJ?=wW~PueK}pE%meFQHPRB^_ zMZUtqtFDBM&|chCgg&78}o**lA&&6drU$3i!f4iLNH*;_+#C4j->}8F`l<@RWh!XP zS!Yhu!6H=FM-0_!#znIFB62-N2aBEm05~jI0&Mpym)dVtR3vsXp$Mc4>iSomWOyn^ z_QQ#lJwOrUWhkM8ktn{(Xmc!ML|EvDyf zuel(P_s1K^@knA&%4MbHIL!h^DrA~Ug)+04+hn4#446($;)=ct0Az8O`P>+;AdL9-o+0{8Y9 z>G;@KuOcH~FsXCl;8c_Mpaeqf`N(Cb^3t1@3$iRa@=a5e7l#(kxC_6C88B` zp=DaF4c~@ysG=B@$09FikQnn#p*N)TEmWTHq7E zpKMk|ITPY&j-zqe97&MpwRKWv9}yiytx%1tyQ=K3{X~p;=0*&8n~2D)4NBr1&orvG zYbl;7EaP7hTb(1=;cv$nq!lT7pX!|+sh29D>Bt1%;iRB;ePdw2`T)25`*VhQ*wkW1 z_C(e?5-BQ#8Ca-<(>jE)1dyuSayK8oIm*B&3Ssi4h1-7rlc30)J>GlOdwcGa78lmP*>HqKn?7o)24<1W3h}_OP)VZaia4W-6rs z*WwQ&)U%ytc~xa~EgX^5O(LvvoXfOX=@@OG>D|VV1+VG9JmO+T`em=bQM`UV$aoApSRe{A#aB?}37mW!Q_)W-Q{8H^Qs_qEOA8bBJ~5vkjg`Ja;4^{T zhb&2kf1m-m+S_fmDREIOBrIy0 zMNw2FM?`mjmc6he)~Fkj*0Iy)elO<-v#Df`y~vt51cD`!N_ib_A`++sk~MqSa5WDE zj6f@?M_tIk_=J<{q2)#ubc_u~ShjS~!PSn6t$RlG45 zoXb)I>W-)oP%!l!197Q%_psl5Q!=KG;Q`88Q!~bo6=GAPC?Q@YB>nwOa6N(J346T> zL8sGF(o@vy6TusX^sp*DL+_16LGE;}Ryh_~U_K5lAh8Q=y<0Zld@tx@>ZS5BM9Omb zzzaoBZMG;67q$s;B8mb)Na|fc0)PMm*kI*M;^d0e@-o+I8|jH^fIMr|RQ|+rFt+>2 zEK)CSqBsF18b^TNbD#}N{{Z>91MP@{q=abN)Fz{2BPVeCYPGNa*kq6sM32;dr3F$| zrP4*iMq};(ee|%nJ}z*U{;@1Z+&Wa|AICCJLuV0#V9bhb>_EOU=IqODr1@K>D1nhf@wz3Qa~ys^x|!3fC^Bi9c^2jAz21Q2eHH{Cb#*wrX08 z$V5Q+9TG%+$&9|^j&|T}jp|AcA{uPWXL88(bP$%XXk&2tL1l7+>?K#v^Fj)Op&@R{J=KJEaBEcrQm+ENJr!J0JB%8eLEj!7qlE|Q& z8{d=9z0NrvZf8~s4y850c{L1G@zerdpG2Lj!fkcaa1HOrj3L( zNbJt*tyH&*DZwG-+|hw~DY>O>T=hLv*>uvDr>Dyzc)S!gzTe*u{wSl0{v!$io8TJB@1@`$N( zbj(_!vZA6So?+gYkW5K+Q)?Svo$h_@gGTuA9^?iOrmU&#Wc5!wytVmvc6-<L$=^S+8z=w>x7VANq_;CMN0(q@sqdx(TWmxjeEXcNhZ7b=z&d zw!@b*hoEX_%uUXL-IG*yV5sKh0)V$u={#;mpFCXK9Y!Pxkxlm)E2H>oDk%drk5ccf z$Zuewhy&PdgzT6=0l7*7wUJZz(MrmDWktXN?|=Bd_umF3p5V!5Fu!^viCxx4HbMFq zi}Pc(#rz9f3jOe;4aZe>zbMW>MU?6d~%WpbW^Jkl?Mg0&GvKn{Tk-a50;Y$jt=O>R!lYdded+ Y9?>!|D;~pbuf6d_LmM$c$Qqyj+33t?mH+?% literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/bbb35cd0-db30-11ec-a1c4-7b3b3de0a1d8.png b/mockServer/assets/images/bbb35cd0-db30-11ec-a1c4-7b3b3de0a1d8.png new file mode 100644 index 0000000000000000000000000000000000000000..5fca3cee40da6e99c405bd08c6f480cbee598226 GIT binary patch literal 1922 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 HErR|B5H{nY literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/f750dc319828b039af713c643aad02bd_222x134.png b/mockServer/assets/images/f750dc319828b039af713c643aad02bd_222x134.png new file mode 100644 index 0000000000000000000000000000000000000000..32659baf14adab74b3e79caf51aaf697d9ecff1a GIT binary patch literal 992 zcmZ{jZA?>l6vi*0B5%Xsq6DyN5wn#M#+JwiILBLnA&7;HK*p6#CZPzObkL&Bm{pWX zl$Z($+gjL$Kuuwk(E>$jmG{v?mRZocUhj$>&}my}%fG$t?cF7Q-iPNrIlnyTd^+d5 zyxfc+|1f_Df`YO#)99olq^|AuA!}pVs z@%t*Xhy_7!Ol-?*hS^(2!qvQ!1?l!JV0RFcQ?oYUu{j9Y4B>Kn2!c>8{JEedU@qF; z_i|{$uH>RPj=SBse9qzVcpffdz~Ss3*_hSfPAAqkZpAQ{%jNDIGy~w!$j}}HQyQ@z z1UIPB(OHK=jZOUF>XKRJG`MJNvtMBqN=&fKs+6HH*Gdp%nCRi6(~CA(24Jp90|+}} zGN?@kf`HY4Fj|!e5Q|aS;0r+qI{nlEcf5qfX4c@wv!^x!00TmfUah;gTBd9bu{x&o6do&aHBe(am? zw`B@#8r&o?wk6tNbyK>lWQTw>~1LTLoNRDn% zcSf;SEbUIj^xq6s-`dYGAFof~v6m7m`+_W5fvKWFu^9O%@!i#i=HD)9ol7F_h4Dl# z?y(rYG?&=^Dz$4*oEitzwFfGrl>bG97@1n;m#+&?*l0Jw)>P{XG5|iKus+of2*pVK zBxm73@Fz8j_Pw#2`3%d*Aw3*W_%Ay3Z9KK<$UVj@p;4xz>xL5Vh1V6<>W&qJ*Ok;R zSNEEpC@w7{Hf;qfI8D$eSS4p6eZtY8VpM$0<`0N#AxyT4J>?lUR||C z;T%StA4QA8ILIlv_x6c|>r2LISovZ5CV#& Aj{pDw literal 0 HcmV?d00001 diff --git a/mockServer/assets/images/logo.png b/mockServer/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6271b2d8129adb150b3e8c51956cbe9e1c045c55 GIT binary patch literal 12996 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 O(bG28s?>P$?Ee7CusRa} literal 0 HcmV?d00001 diff --git a/mockServer/assets/js/1005web-components.es.js b/mockServer/assets/js/1005web-components.es.js new file mode 100644 index 000000000..689d20a98 --- /dev/null +++ b/mockServer/assets/js/1005web-components.es.js @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineCustomElement } from '@opentiny/tiny-engine-webcomponent-core' +import * as vue from 'vue' +import { resolveComponent, openBlock, createElementBlock, createElementVNode, createVNode, toDisplayString } from 'vue' +import { I18nInjectionKey } from 'vue-i18n' +import { IconChevronLeft } from '@opentiny/vue-icon' +Object.freeze({}) +Object.freeze([]) +const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null) + return (str) => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } +} +const hyphenateRE = /\B([A-Z])/g +const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase()) +const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc + for (const [key, val] of props) { + target[key] = val + } + return target +} +const _sfc_main = { + components: { + TinyIconChevronLeft: IconChevronLeft() + }, + props: { + blockName: { type: String, default: 'MT0526-React 1.0' } + }, + setup(props, context) { + const { t, lowcodeWrap } = vue.inject(I18nInjectionKey).lowcode() + const wrap = lowcodeWrap(props, context, t) + const state = vue.reactive({}) + const attrs = wrap({ + state + }) + return attrs + } +} +const _hoisted_1 = { + style: { 'font-size': '18px', height: '40px', 'border-bottom': '1px solid rgb(223, 225, 230)', 'margin-top': '20px' } +} +const _hoisted_2 = /* @__PURE__ */ createElementVNode( + 'span', + { style: { 'margin-left': '10px', 'font-weight': 'bold' } }, + '\u7F16\u8F91\u7269\u6599\u8D44\u4EA7\u5305 | ', + -1 +) +const _hoisted_3 = { style: { 'margin-left': '10px', 'font-weight': 'bold' } } +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + const _component_tiny_icon_chevron_left = resolveComponent('tiny-icon-chevron-left') + return ( + openBlock(), + createElementBlock('div', null, [ + createElementVNode('div', _hoisted_1, [ + createVNode(_component_tiny_icon_chevron_left), + _hoisted_2, + createElementVNode('span', _hoisted_3, toDisplayString($props.blockName), 1) + ]) + ]) + ) +} +const block = /* @__PURE__ */ _export_sfc(_sfc_main, [ + ['render', _sfc_render], + ['__file', 'D:/tmp/buildground/buildground_1673597935715/src/block/generated/components/PortalBlock.vue'] +]) +window.TinyLowcodeResource = window.TinyLowcodeResource || {} +const blockName = hyphenate('PortalBlock') +block.blockId = 1005 +block.blockVersion = '1.0.0' +if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } +} else { + block.links = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: ['//localhost:9090/assets/css/0.1.20/index.css'] + }.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, defineCustomElement(block)) +} +export { block as default } diff --git a/mockServer/assets/js/1005web-components.umd.js b/mockServer/assets/js/1005web-components.umd.js new file mode 100644 index 000000000..049e2961b --- /dev/null +++ b/mockServer/assets/js/1005web-components.umd.js @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +;(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = factory( + require('@opentiny/tiny-engine-webcomponent-core'), + require('vue'), + require('vue-i18n'), + require('@opentiny/vue-icon') + ) + } else if (typeof define === 'function' && define.amd) { + define(['@opentiny/tiny-engine-webcomponent-core', 'vue', 'vue-i18n', '@opentiny/vue-icon'], factory) + } else { + ;(global = typeof globalThis !== 'undefined' ? globalThis : global || self), + (global.TinyVueBlock = factory(global.TinyWebcomponentCore, global.Vue, global.VueI18n, global.TinyVueIcon)) + } +})(this, (tinyWebcomponentCore, vue, vueI18n, tinyVue3Icon) => { + function _interopNamespace(e) { + if (e && e.__esModule) return e + const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }) + if (e) { + Object.keys(e).forEach((k) => { + if (k !== 'default') { + const d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get: function () { + return e[k] + } + } + ) + } + }) + } + n.default = e + return Object.freeze(n) + } + const vue__namespace = /* @__PURE__ */ _interopNamespace(vue) + Object.freeze({}) + Object.freeze([]) + const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null) + return (str) => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } + } + const hyphenateRE = /\B([A-Z])/g + const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase()) + const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc + for (const [key, val] of props) { + target[key] = val + } + return target + } + const _sfc_main = { + components: { + TinyIconChevronLeft: tinyVue3Icon.IconChevronLeft() + }, + props: { + blockName: { type: String, default: 'MT0526-React 1.0' } + }, + setup(props, context) { + const { t, lowcodeWrap } = vue__namespace.inject(vueI18n.I18nInjectionKey).lowcode() + const wrap = lowcodeWrap(props, context, t) + const state = vue__namespace.reactive({}) + const attrs = wrap({ + state + }) + return attrs + } + } + const _hoisted_1 = { + style: { + 'font-size': '18px', + height: '40px', + 'border-bottom': '1px solid rgb(223, 225, 230)', + 'margin-top': '20px' + } + } + const _hoisted_2 = /* @__PURE__ */ vue.createElementVNode( + 'span', + { style: { 'margin-left': '10px', 'font-weight': 'bold' } }, + '\u7F16\u8F91\u7269\u6599\u8D44\u4EA7\u5305 | ', + -1 + ) + const _hoisted_3 = { style: { 'margin-left': '10px', 'font-weight': 'bold' } } + function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + const _component_tiny_icon_chevron_left = vue.resolveComponent('tiny-icon-chevron-left') + return ( + vue.openBlock(), + vue.createElementBlock('div', null, [ + vue.createElementVNode('div', _hoisted_1, [ + vue.createVNode(_component_tiny_icon_chevron_left), + _hoisted_2, + vue.createElementVNode('span', _hoisted_3, vue.toDisplayString($props.blockName), 1) + ]) + ]) + ) + } + const block = /* @__PURE__ */ _export_sfc(_sfc_main, [ + ['render', _sfc_render], + ['__file', 'D:/tmp/buildground/buildground_1673597935715/src/block/generated/components/PortalBlock.vue'] + ]) + window.TinyLowcodeResource = window.TinyLowcodeResource || {} + const blockName = hyphenate('PortalBlock') + block.blockId = 1005 + block.blockVersion = '1.0.0' + if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } + } else { + block.links = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: ['//localhost:9090/assets/css/0.1.20/index.css'] + }.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, tinyWebcomponentCore.defineCustomElement(block)) + } + return block +}) diff --git a/mockServer/assets/js/1505web-components.es.js b/mockServer/assets/js/1505web-components.es.js new file mode 100644 index 000000000..1d33e4e1c --- /dev/null +++ b/mockServer/assets/js/1505web-components.es.js @@ -0,0 +1,81 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { + CarouselItem, + CheckboxButton, + Tree, + Popover, + Tooltip, + Col, + DropdownItem, + Pager, + Search, + Row, + FormItem, + Alert, + Input, + Tabs, + DropdownMenu, + DialogBox, + Switch, + TimeLine, + TabItem, + Radio, + Form, + Grid, + Numeric, + CheckboxGroup, + Select, + ButtonGroup, + Carousel, + Popeditor, + DatePicker, + Dropdown, + ChartHistogram +} from '@opentiny/vue' +const Mapper = { + TinyCarouselItem: CarouselItem, + TinyCheckboxButton: CheckboxButton, + TinyTree: Tree, + TinyPopover: Popover, + TinyTooltip: Tooltip, + TinyCol: Col, + TinyDropdownItem: DropdownItem, + TinyPager: Pager, + TinySearch: Search, + TinyRow: Row, + TinyFormItem: FormItem, + TinyAlert: Alert, + TinyInput: Input, + TinyTabs: Tabs, + TinyDropdownMenu: DropdownMenu, + TinyDialogBox: DialogBox, + TinySwitch: Switch, + TinyTimeLine: TimeLine, + TinyTabItem: TabItem, + TinyRadio: Radio, + TinyForm: Form, + TinyGrid: Grid, + TinyNumeric: Numeric, + TinyCheckboxGroup: CheckboxGroup, + TinySelect: Select, + TinyButtonGroup: ButtonGroup, + TinyCarousel: Carousel, + TinyPopeditor: Popeditor, + TinyDatePicker: DatePicker, + TinyDropdown: Dropdown, + TinyChartHistogram: ChartHistogram +} +Mapper.TinyTabs.isGroup = true +Mapper.TinyGrid.isGroup = true +export { Mapper as default } diff --git a/mockServer/assets/js/1505web-components.umd.js b/mockServer/assets/js/1505web-components.umd.js new file mode 100644 index 000000000..baf686393 --- /dev/null +++ b/mockServer/assets/js/1505web-components.umd.js @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +;(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = factory(require('@opentiny/vue')) + } else if (typeof define === 'function' && define.amd) { + define(['@opentiny/vue'], factory) + } else { + ;(global = typeof globalThis !== 'undefined' ? globalThis : global || self), + (global.TinyLowcodeComponent = factory(global.TinyVue)) + } +})(this, (tinyVue3) => { + 'use strict' + const Mapper = { + TinyCarouselItem: tinyVue3.CarouselItem, + TinyCheckboxButton: tinyVue3.CheckboxButton, + TinyTree: tinyVue3.Tree, + TinyPopover: tinyVue3.Popover, + TinyTooltip: tinyVue3.Tooltip, + TinyCol: tinyVue3.Col, + TinyDropdownItem: tinyVue3.DropdownItem, + TinyPager: tinyVue3.Pager, + TinySearch: tinyVue3.Search, + TinyRow: tinyVue3.Row, + TinyFormItem: tinyVue3.FormItem, + TinyAlert: tinyVue3.Alert, + TinyInput: tinyVue3.Input, + TinyTabs: tinyVue3.Tabs, + TinyDropdownMenu: tinyVue3.DropdownMenu, + TinyDialogBox: tinyVue3.DialogBox, + TinySwitch: tinyVue3.Switch, + TinyTimeLine: tinyVue3.TimeLine, + TinyTabItem: tinyVue3.TabItem, + TinyRadio: tinyVue3.Radio, + TinyForm: tinyVue3.Form, + TinyGrid: tinyVue3.Grid, + TinyNumeric: tinyVue3.Numeric, + TinyCheckboxGroup: tinyVue3.CheckboxGroup, + TinySelect: tinyVue3.Select, + TinyButtonGroup: tinyVue3.ButtonGroup, + TinyCarousel: tinyVue3.Carousel, + TinyPopeditor: tinyVue3.Popeditor, + TinyDatePicker: tinyVue3.DatePicker, + TinyDropdown: tinyVue3.Dropdown, + TinyChartHistogram: tinyVue3.ChartHistogram + } + Mapper.TinyTabs.isGroup = true + Mapper.TinyGrid.isGroup = true + return Mapper +}) diff --git a/mockServer/assets/js/989web-components.es.js b/mockServer/assets/js/989web-components.es.js new file mode 100644 index 000000000..338fa190f --- /dev/null +++ b/mockServer/assets/js/989web-components.es.js @@ -0,0 +1,246 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineCustomElement } from '@opentiny/tiny-engine-webcomponent-core' +import * as vue from 'vue' +import { + resolveComponent, + openBlock, + createElementBlock, + createElementVNode, + createVNode, + withCtx, + pushScopeId, + popScopeId +} from 'vue' +import { I18nInjectionKey } from 'vue-i18n' +import { Button, Col, Row } from '@opentiny/vue' +Object.freeze({}) +Object.freeze([]) +const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null) + return (str) => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } +} +const hyphenateRE = /\B([A-Z])/g +const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase()) +var _style_0 = + '\n.home-content[data-v-5d023d19] {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\n}\n.home-content .btn[data-v-5d023d19] {\r\n margin-top: 24px;\n}\n.home-content .btn button[data-v-5d023d19] {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\n}\n.home-content .text[data-v-5d023d19] {\r\n font-size: 18px;\n}\n.home-content .account[data-v-5d023d19] {\r\n margin-top: 16px;\n}\n.home-content .account .sub-text[data-v-5d023d19] {\r\n color: #575d6c;\n}\n.home-content .account .login[data-v-5d023d19] {\r\n color: #1890ff;\r\n cursor: pointer;\n}\n.home-content .logo img[data-v-5d023d19]{\r\n border-radius: 50%;\r\n overflow: hidden;\n}\n' +var _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc + for (const [key, val] of props) { + target[key] = val + } + return target +} +const _sfc_main = { + components: { + TinyButton: Button, + TinyCol: Col, + TinyRow: Row + }, + props: {}, + emits: ['goto-home'], + setup(props, context) { + const { t, lowcodeWrap } = vue.inject(I18nInjectionKey).lowcode() + const wrap = lowcodeWrap(props, context, t) + const state = vue.reactive({ + logoUrl: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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', + loginImgUrl: + 'data:image/png;base64,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' + }) + const handleClick = wrap(function (event) { + this.emit('goto-home', event) + }) + const attrs = wrap({ + state, + handleClick + }) + return attrs + } +} +const _withScopeId = (n) => (pushScopeId('data-v-5d023d19'), (n = n()), popScopeId(), n) +const _hoisted_1 = { + class: 'home', + style: { height: '100vh', display: 'flex' } +} +const _hoisted_2 = { style: { width: '90%', height: '50%' } } +const _hoisted_3 = ['src'] +const _hoisted_4 = { + class: 'home-content', + style: { 'font-size': '14px' } +} +const _hoisted_5 = { class: 'text' } +const _hoisted_6 = { style: { 'font-size': '16px' } } +const _hoisted_7 = { class: 'logo' } +const _hoisted_8 = ['src'] +const _hoisted_9 = { + style: { + display: 'block', + 'font-size': '28px', + 'margin-top': '12px', + 'margin-bottom': '12px', + 'font-weight': 'bold' + }, + ref: '', + class: 'title' +} +const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode( + 'span', + { style: { display: 'block', 'margin-bottom': '12px' } }, + '\u81F4\u529B\u4E8E\u901A\u8FC7\u53CB\u597D\u7684\u7528\u6237\u4EA4\u4E92\u63D0\u5347\u4E1A\u52A1\u7684\u5F00\u53D1\u6548\u7387', + -1 + ) +) +const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode( + 'span', + { style: { 'margin-top': '12px' } }, + '\u6B22\u8FCE\u4E00\u8D77\u6765\u89E3\u9501~~', + -1 + ) +) +const _hoisted_12 = { class: 'btn' } +const _hoisted_13 = { class: 'account' } +const _hoisted_14 = { style: { 'font-size': '14px', 'margin-top': '4px' } } +const _hoisted_15 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode('span', { style: { color: '#777777' } }, '\u5DF2\u6709\u56E2\u961F\uFF1F', -1) +) +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + const _component_tiny_col = resolveComponent('tiny-col') + const _component_tiny_button = resolveComponent('tiny-button') + const _component_tiny_row = resolveComponent('tiny-row') + return ( + openBlock(), + createElementBlock('div', null, [ + createElementVNode('div', _hoisted_1, [ + createVNode( + _component_tiny_row, + { + align: 'middle', + flex: true, + style: {} + }, + { + default: withCtx(() => [ + createVNode( + _component_tiny_col, + { + span: 6, + style: { 'text-align': 'center', display: 'flex', 'justify-content': 'center' } + }, + { + default: withCtx(() => [ + createElementVNode('div', _hoisted_2, [ + createElementVNode( + 'img', + { + style: { width: '100%', height: '100%' }, + src: _ctx.state.loginImgUrl + }, + null, + 8, + _hoisted_3 + ) + ]) + ]), + _: 1 + } + ), + createVNode( + _component_tiny_col, + { + span: '6', + style: { 'text-align': 'center' } + }, + { + default: withCtx(() => [ + createElementVNode('div', _hoisted_4, [ + createElementVNode('div', _hoisted_5, [ + createElementVNode('div', _hoisted_6, [ + createElementVNode('div', _hoisted_7, [ + createElementVNode( + 'img', + { + style: { width: '105px', height: '105px', 'border-radius': '100px' }, + src: _ctx.state.logoUrl + }, + null, + 8, + _hoisted_8 + ) + ]), + createElementVNode('span', _hoisted_9, 'TinyLowCode \u4F4E\u4EE3\u7801\u5E73\u53F0', 512), + _hoisted_10, + _hoisted_11 + ]), + createElementVNode('div', _hoisted_12, [ + createVNode(_component_tiny_button, { + text: '\u7ACB\u5373\u4F53\u9A8C', + round: true, + type: 'primary', + style: { 'margin-top': '40px' } + }), + createElementVNode('div', _hoisted_13, [ + createElementVNode('div', _hoisted_14, [ + _hoisted_15, + createElementVNode( + 'span', + { + style: { color: '#5e7ce0' }, + onClick: _cache[0] || (_cache[0] = ($event) => _ctx.handleClick(_ctx.event)) + }, + '\u7ACB\u5373\u8FDB\u5165' + ) + ]) + ]) + ]) + ]) + ]) + ]), + _: 1 + } + ) + ]), + _: 1 + } + ) + ]) + ]) + ) +} +var block = /* @__PURE__ */ _export_sfc(_sfc_main, [ + ['render', _sfc_render], + ['styles', [_style_0]], + ['__scopeId', 'data-v-5d023d19'], + ['__file', 'D:/tmp/buildground/buildground_1673597486053/src/block/generated/components/PortalHome.vue'] +]) +window.TinyLowcodeResource = window.TinyLowcodeResource || {} +const blockName = hyphenate('PortalHome') +block.blockId = 989 +block.blockVersion = '1.0.0' +if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } +} else { + block.links = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: ['//localhost:9090/assets/css/0.1.20/index.css'] + }.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, defineCustomElement(block)) +} +export { block as default } diff --git a/mockServer/assets/js/989web-components.umd.js b/mockServer/assets/js/989web-components.umd.js new file mode 100644 index 000000000..b98d7d83a --- /dev/null +++ b/mockServer/assets/js/989web-components.umd.js @@ -0,0 +1,283 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + ? (module.exports = factory( + require('@opentiny/tiny-engine-webcomponent-core'), + require('vue'), + require('vue-i18n'), + require('@opentiny/vue') + )) + : typeof define === 'function' && define.amd + ? define(['@opentiny/tiny-engine-webcomponent-core', 'vue', 'vue-i18n', '@opentiny/vue'], factory) + : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self), + (global.TinyVueBlock = factory(global.TinyWebcomponentCore, global.Vue, global.VueI18n, global.TinyVue))) +})(this, function (tinyWebcomponentCore, vue, vueI18n, tinyVue3) { + 'use strict' + function _interopNamespace(e) { + if (e && e.__esModule) return e + var n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }) + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get: function () { + return e[k] + } + } + ) + } + }) + } + n['default'] = e + return Object.freeze(n) + } + var vue__namespace = /* @__PURE__ */ _interopNamespace(vue) + Object.freeze({}) + Object.freeze([]) + const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null) + return (str) => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } + } + const hyphenateRE = /\B([A-Z])/g + const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase()) + var _style_0 = + '\n.home-content[data-v-5d023d19] {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\n}\n.home-content .btn[data-v-5d023d19] {\r\n margin-top: 24px;\n}\n.home-content .btn button[data-v-5d023d19] {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\n}\n.home-content .text[data-v-5d023d19] {\r\n font-size: 18px;\n}\n.home-content .account[data-v-5d023d19] {\r\n margin-top: 16px;\n}\n.home-content .account .sub-text[data-v-5d023d19] {\r\n color: #575d6c;\n}\n.home-content .account .login[data-v-5d023d19] {\r\n color: #1890ff;\r\n cursor: pointer;\n}\n.home-content .logo img[data-v-5d023d19]{\r\n border-radius: 50%;\r\n overflow: hidden;\n}\n' + var _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc + for (const [key, val] of props) { + target[key] = val + } + return target + } + const _sfc_main = { + components: { + TinyButton: tinyVue3.Button, + TinyCol: tinyVue3.Col, + TinyRow: tinyVue3.Row + }, + props: {}, + emits: ['goto-home'], + setup(props, context) { + const { t, lowcodeWrap } = vue__namespace.inject(vueI18n.I18nInjectionKey).lowcode() + const wrap = lowcodeWrap(props, context, t) + const state = vue__namespace.reactive({ + logoUrl: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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', + loginImgUrl: + 'data:image/png;base64,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' + }) + const handleClick = wrap(function (event) { + this.emit('goto-home', event) + }) + const attrs = wrap({ + state, + handleClick + }) + return attrs + } + } + const _withScopeId = (n) => (vue.pushScopeId('data-v-5d023d19'), (n = n()), vue.popScopeId(), n) + const _hoisted_1 = { + class: 'home', + style: { height: '100vh', display: 'flex' } + } + const _hoisted_2 = { style: { width: '90%', height: '50%' } } + const _hoisted_3 = ['src'] + const _hoisted_4 = { + class: 'home-content', + style: { 'font-size': '14px' } + } + const _hoisted_5 = { class: 'text' } + const _hoisted_6 = { style: { 'font-size': '16px' } } + const _hoisted_7 = { class: 'logo' } + const _hoisted_8 = ['src'] + const _hoisted_9 = { + style: { + display: 'block', + 'font-size': '28px', + 'margin-top': '12px', + 'margin-bottom': '12px', + 'font-weight': 'bold' + }, + ref: '', + class: 'title' + } + const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'span', + { style: { display: 'block', 'margin-bottom': '12px' } }, + '\u81F4\u529B\u4E8E\u901A\u8FC7\u53CB\u597D\u7684\u7528\u6237\u4EA4\u4E92\u63D0\u5347\u4E1A\u52A1\u7684\u5F00\u53D1\u6548\u7387', + -1 + ) + ) + const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'span', + { style: { 'margin-top': '12px' } }, + '\u6B22\u8FCE\u4E00\u8D77\u6765\u89E3\u9501~~', + -1 + ) + ) + const _hoisted_12 = { class: 'btn' } + const _hoisted_13 = { class: 'account' } + const _hoisted_14 = { style: { 'font-size': '14px', 'margin-top': '4px' } } + const _hoisted_15 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'span', + { style: { color: '#777777' } }, + '\u5DF2\u6709\u56E2\u961F\uFF1F', + -1 + ) + ) + function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + const _component_tiny_col = vue.resolveComponent('tiny-col') + const _component_tiny_button = vue.resolveComponent('tiny-button') + const _component_tiny_row = vue.resolveComponent('tiny-row') + return ( + vue.openBlock(), + vue.createElementBlock('div', null, [ + vue.createElementVNode('div', _hoisted_1, [ + vue.createVNode( + _component_tiny_row, + { + align: 'middle', + flex: true, + style: {} + }, + { + default: vue.withCtx(() => [ + vue.createVNode( + _component_tiny_col, + { + span: 6, + style: { 'text-align': 'center', display: 'flex', 'justify-content': 'center' } + }, + { + default: vue.withCtx(() => [ + vue.createElementVNode('div', _hoisted_2, [ + vue.createElementVNode( + 'img', + { + style: { width: '100%', height: '100%' }, + src: _ctx.state.loginImgUrl + }, + null, + 8, + _hoisted_3 + ) + ]) + ]), + _: 1 + } + ), + vue.createVNode( + _component_tiny_col, + { + span: '6', + style: { 'text-align': 'center' } + }, + { + default: vue.withCtx(() => [ + vue.createElementVNode('div', _hoisted_4, [ + vue.createElementVNode('div', _hoisted_5, [ + vue.createElementVNode('div', _hoisted_6, [ + vue.createElementVNode('div', _hoisted_7, [ + vue.createElementVNode( + 'img', + { + style: { width: '105px', height: '105px', 'border-radius': '100px' }, + src: _ctx.state.logoUrl + }, + null, + 8, + _hoisted_8 + ) + ]), + vue.createElementVNode( + 'span', + _hoisted_9, + 'TinyLowCode \u4F4E\u4EE3\u7801\u5E73\u53F0', + 512 + ), + _hoisted_10, + _hoisted_11 + ]), + vue.createElementVNode('div', _hoisted_12, [ + vue.createVNode(_component_tiny_button, { + text: '\u7ACB\u5373\u4F53\u9A8C', + round: true, + type: 'primary', + style: { 'margin-top': '40px' } + }), + vue.createElementVNode('div', _hoisted_13, [ + vue.createElementVNode('div', _hoisted_14, [ + _hoisted_15, + vue.createElementVNode( + 'span', + { + style: { color: '#5e7ce0' }, + onClick: _cache[0] || (_cache[0] = ($event) => _ctx.handleClick(_ctx.event)) + }, + '\u7ACB\u5373\u8FDB\u5165' + ) + ]) + ]) + ]) + ]) + ]) + ]), + _: 1 + } + ) + ]), + _: 1 + } + ) + ]) + ]) + ) + } + var block = /* @__PURE__ */ _export_sfc(_sfc_main, [ + ['render', _sfc_render], + ['styles', [_style_0]], + ['__scopeId', 'data-v-5d023d19'], + ['__file', 'D:/tmp/buildground/buildground_1673597486053/src/block/generated/components/PortalHome.vue'] + ]) + window.TinyLowcodeResource = window.TinyLowcodeResource || {} + const blockName = hyphenate('PortalHome') + block.blockId = 989 + block.blockVersion = '1.0.0' + if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } + } else { + block.links = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: ['//localhost:9090/assets/css/0.1.20/index.css'] + }.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, tinyWebcomponentCore.defineCustomElement(block)) + } + return block +}) diff --git a/mockServer/assets/js/998web-components.es.js b/mockServer/assets/js/998web-components.es.js new file mode 100644 index 000000000..173aa1786 --- /dev/null +++ b/mockServer/assets/js/998web-components.es.js @@ -0,0 +1,664 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineCustomElement } from '@opentiny/tiny-engine-webcomponent-core' +import * as vue from 'vue' +import { + resolveComponent, + openBlock, + createElementBlock, + createElementVNode, + Fragment, + renderList, + toDisplayString, + normalizeClass, + createVNode, + withCtx, + createBlock, + createCommentVNode, + pushScopeId, + popScopeId +} from 'vue' +import { I18nInjectionKey } from 'vue-i18n' +import { IconCheckOut, IconDeltaDown, IconGroup, IconHelpQuery, IconSetting, IconYes } from '@opentiny/vue-icon' +import { Popover, Tooltip } from '@opentiny/vue' +Object.freeze({}) +Object.freeze([]) +const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null) + return (str) => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } +} +const hyphenateRE = /\B([A-Z])/g +const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase()) +const _style_0 = + '\n.team-list-item.active[data-v-b66e3972] {\r\n border: 1px solid #38acff;\n}\n.toolbars-item[data-v-b66e3972]:hover {\r\n cursor: pointer;\r\n background-color: #f1f2f3;\n}\n.toolbars-item.active[data-v-b66e3972] {\r\n background-color: #e5e6e8;\n}\n' +const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc + for (const [key, val] of props) { + target[key] = val + } + return target +} +const _sfc_main = { + components: { + TinyIconCheckOut: IconCheckOut(), + TinyIconDeltaDown: IconDeltaDown(), + TinyIconGroup: IconGroup(), + TinyIconHelpQuery: IconHelpQuery(), + TinyIconSetting: IconSetting(), + TinyIconYes: IconYes(), + TinyPopover: Popover, + TinyTooltip: Tooltip + }, + props: { + tenant: { type: Object, default: () => "{tenant_id: 'public'}" } + }, + emits: ['handle-route'], + setup(props, context) { + const { t, lowcodeWrap } = vue.inject(I18nInjectionKey).lowcode() + const wrap = lowcodeWrap(props, context, t) + const state = vue.reactive({ + menuData: [ + { + label: '\u9996\u9875', + url: '/home' + }, + { + label: '\u6211\u7684\u5E94\u7528', + url: '/home' + }, + { + label: '\u5E94\u7528\u4E2D\u5FC3', + url: '/home' + }, + { + label: '\u6211\u7684\u5E73\u53F0', + url: '/home' + }, + { + label: '\u5E73\u53F0\u4E2D\u5FC3', + url: '/home' + }, + { + label: '\u6211\u7684\u7269\u6599', + url: '/home' + }, + { + label: '\u751F\u6001\u4E2D\u5FC3', + url: '/home' + }, + { + label: '\u76D1\u63A7\u4E2D\u5FC3', + url: '/home' + } + ], + tenants: [ + { + id: 1, + tenant_id: 'public', + name_cn: '\u516C\u5171\u79DF\u6237', + name_en: 'Public Tenant', + description: 'Default tenant for new user to explore.', + published_at: '2021-12-28T11:39:10.000Z', + created_by: null, + updated_by: null, + created_at: '2021-12-28T11:39:10.000Z', + updated_at: '2022-06-27T03:52:15.000Z', + createdBy: null + }, + { + id: 2, + tenant_id: 'crm', + name_cn: '\u5BA2\u6237\u5173\u7CFB\u7BA1\u7406\u7CFB\u7EDF', + name_en: 'Cloud CRM', + description: null, + published_at: '2021-12-30T07:39:19.000Z', + created_by: null, + created_at: '2021-12-30T14:41:57.000Z', + updated_at: '2022-06-14T06:28:08.000Z', + createdBy: null + }, + { + id: 3, + tenant_id: 'tinyMock', + name_cn: 'mock\u5E73\u53F0', + name_en: null, + description: null, + published_at: '2022-05-26T07:13:28.000Z', + created_by: null, + updated_by: null, + created_at: '2022-05-26T07:13:29.000Z', + updated_at: '2022-05-26T07:13:29.000Z', + createdBy: null, + updatedBy: null + }, + { + id: 4, + tenant_id: 'tinyStage', + name_cn: '\u5F00\u53D1\u5DE5\u5177\u96C6', + name_en: 'toolkits', + description: null, + published_at: '2022-05-18T07:56:55.000Z', + created_by: null, + updated_by: null, + created_at: '2022-05-18T07:56:55.000Z', + updated_at: '2022-05-18T07:56:55.000Z' + }, + { + id: 5, + tenant_id: 'tinyUI', + name_cn: 'UI\u7EC4\u4EF6', + name_en: 'components', + description: null, + published_at: '2022-05-18T08:29:32.000Z', + created_by: null, + updated_by: null, + created_at: '2022-05-18T08:29:32.000Z', + updated_at: '2022-05-18T08:29:33.000Z' + }, + { + id: 6, + tenant_id: 'tinyGate', + name_cn: '\u95E8\u7981\u7CFB\u7EDF', + name_en: 'gate', + description: null, + published_at: '2022-06-23T10:15:42.000Z', + created_by: null, + updated_by: null, + created_at: '2022-05-23T10:40:14.000Z', + updated_at: '2022-05-23T10:40:14.000Z', + createdBy: null, + updatedBy: null + }, + { + id: 7, + tenant_id: 'guestGroup', + name_cn: '\u6E38\u5BA2\u56E2\u961F', + name_en: 'guest', + description: null, + published_at: '2022-06-23T10:15:38.000Z', + created_by: null, + updated_by: null, + created_at: '2022-06-22T14:58:22.000Z', + updated_at: '2022-06-22T14:58:22.000Z' + }, + { + id: 265, + tenant_id: 'myteam', + name_cn: null, + name_en: null, + description: null, + published_at: '2022-06-14T06:49:58.000Z', + created_by: null, + updated_by: null, + created_at: '2022-06-14T06:49:58.000Z', + updated_at: '2022-06-14T06:49:58.000Z' + }, + { + id: 267, + tenant_id: 'test', + name_cn: null, + name_en: null, + description: null, + published_at: '2022-06-15T03:35:14.000Z', + created_by: null, + updated_by: null, + created_at: '2022-06-15T03:35:14.000Z', + updated_at: '2022-06-15T03:35:14.000Z' + }, + { + id: 268, + tenant_id: 'zzcTest', + name_cn: null, + name_en: null, + description: null, + published_at: '2022-06-17T08:47:17.000Z', + created_by: null, + updated_by: null, + created_at: '2022-06-17T08:47:17.000Z', + updated_at: '2022-06-17T08:47:17.000Z' + } + ] + }) + const openHomePage = wrap(function openHomePage2(event) { + this.router.push('/team-home') + }) + const gotoRouter = wrap(function gotoRouter2(event) { + this.emit('handle-route', event) + }) + const attrs = wrap({ + state, + openHomePage, + gotoRouter + }) + return attrs + } +} +const _withScopeId = (n) => (pushScopeId('data-v-b66e3972'), (n = n()), popScopeId(), n) +const _hoisted_1 = { + style: { + display: 'flex', + 'justify-content': 'space-between', + 'align-items': 'center', + height: '50px', + 'border-radius': '0px' + } +} +const _hoisted_2 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode( + 'img', + { + src: 'http://localhost:9090/assets/images/bbb35cd0-db30-11ec-a1c4-7b3b3de0a1d8.png', + style: { display: 'block', width: '48px', height: 'auto', 'margin-left': '10px' } + }, + null, + -1 + ) +) +const _hoisted_3 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode('span', { style: { 'font-weight': 'bolder', color: '#000000' } }, 'TinyEngine', -1) +) +const _hoisted_4 = [_hoisted_2, _hoisted_3] +const _hoisted_5 = { + style: { + width: '230px', + height: '50px', + display: 'flex', + 'justify-content': 'space-around', + 'align-items': 'center', + 'margin-right': '10px', + 'border-radius': '0px' + }, + class: 'toolbars' +} +const _hoisted_6 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode('div', { placeholder: '\u89E6\u53D1\u6E90' }, null, -1) +) +const _hoisted_7 = { + style: { + 'padding-top': '6px', + 'padding-left': '6px', + 'padding-right': '6px', + 'padding-bottom': '6px', + 'margin-left': '8px', + 'border-radius': '6px' + } +} +const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode('div', { placeholder: '\u89E6\u53D1\u6E90' }, null, -1) +) +const _hoisted_9 = { + style: { + 'padding-top': '6px', + 'padding-left': '6px', + 'padding-right': '6px', + 'padding-bottom': '6px', + 'margin-left': '8px', + 'border-radius': '6px' + } +} +const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode('div', { placeholder: '\u89E6\u53D1\u6E90' }, null, -1) +) +const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode( + 'span', + { + class: 'split', + style: { margin: '0 8px', 'font-size': '16px', 'border-radius': '0px', color: '#e5e6e8' } + }, + '|', + -1 + ) +) +const _hoisted_12 = { placeholder: '\u89E6\u53D1\u6E90' } +const _hoisted_13 = { + class: 'toolbars-item', + style: { padding: '6px', 'border-radius': '6px', display: 'flex', 'align-items': 'center' } +} +const _hoisted_14 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode('span', { style: { 'border-radius': '0px' } }, 'public', -1) +) +const _hoisted_15 = { + placeholder: '\u63D0\u793A\u5185\u5BB9', + style: { 'border-radius': '0px' } +} +const _hoisted_16 = { + style: { 'border-radius': '0px' }, + class: 'team-list' +} +const _hoisted_17 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode( + 'div', + { + class: 'team-list-title', + style: { + 'font-size': '16px', + 'line-height': '22px', + 'font-weight': '500', + 'text-overflow': 'ellipsis', + 'white-space': 'nowrap', + overflow: 'hidden' + } + }, + [/* @__PURE__ */ createElementVNode('span', null, '\u7EC4\u7EC7/\u56E2\u961F')], + -1 + ) +) +const _hoisted_18 = { + class: 'team-list-group', + style: { height: 'auto', 'max-height': '335px', overflow: 'auto', 'margin-top': '16px', 'border-radius': '0px' } +} +const _hoisted_19 = { + class: 'team-list-item-logo', + style: { + height: '28px', + width: '28px', + 'border-radius': '8px', + 'font-size': '16px', + color: '#fff', + background: '#38acff', + 'margin-right': '12px', + display: 'flex', + 'align-items': 'center', + 'justify-content': 'center' + } +} +const _hoisted_20 = { + style: { + height: '22px', + 'font-size': '14px', + 'line-height': '22px', + color: 'rgba(0, 0, 0, 0.8)', + flex: '1', + 'margin-right': '5px', + overflow: 'hidden', + 'text-overflow': 'ellipsis', + 'white-space': 'nowrap', + 'border-radius': '0px' + } +} +const _hoisted_21 = { + style: { 'border-radius': '0px' }, + class: 'team-list-item-icon' +} +const _hoisted_22 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ createElementVNode( + 'img', + { + style: { width: '40px', height: 'auto', 'border-radius': '50px' }, + src: 'https://localhost:9090/assets/images/120' + }, + null, + -1 + ) +) +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + let _a + const _component_tiny_icon_setting = resolveComponent('tiny-icon-setting') + const _component_tiny_tooltip = resolveComponent('tiny-tooltip') + const _component_tiny_icon_check_out = resolveComponent('tiny-icon-check-out') + const _component_tiny_icon_help_query = resolveComponent('tiny-icon-help-query') + const _component_tiny_icon_delta_down = resolveComponent('tiny-icon-delta-down') + const _component_tiny_icon_group = resolveComponent('tiny-icon-group') + const _component_tiny_icon_yes = resolveComponent('tiny-icon-yes') + const _component_tiny_popover = resolveComponent('tiny-popover') + return ( + openBlock(), + createElementBlock('div', null, [ + createElementVNode('div', _hoisted_1, [ + createElementVNode( + 'div', + { + style: { display: 'flex', 'align-items': 'center', 'border-radius': '0px' }, + onClick: _cache[0] || (_cache[0] = ($event) => _ctx.openHomePage(_ctx.event)) + }, + _hoisted_4 + ), + createElementVNode('div', null, [ + (openBlock(true), + createElementBlock( + Fragment, + null, + renderList(_ctx.state.menuData, (item, index) => { + return ( + openBlock(), + createElementBlock( + 'span', + { + key: index, + style: { 'font-size': '16px', 'margin-left': '10px', 'margin-right': '10px', color: '#747677' }, + onClick: _cache[1] || (_cache[1] = ($event) => _ctx.gotoRouter(_ctx.event)) + }, + toDisplayString(item.label), + 1 + ) + ) + }), + 128 + )) + ]), + createElementVNode('div', _hoisted_5, [ + createElementVNode( + 'div', + { + class: normalizeClass({ + 'toolbars-item': true, + active: ((_a = _ctx.route.path) == null ? void 0 : _a.indexOf('/permission-setting')) > -1 + }), + style: { + 'padding-top': '6px', + 'padding-left': '6px', + 'padding-right': '6px', + 'padding-bottom': '6px', + 'margin-left': '8px', + 'border-radius': '6px' + }, + onClick: _cache[2] || (_cache[2] = ($event) => _ctx.openPermission(_ctx.event)) + }, + [ + createVNode( + _component_tiny_tooltip, + { + content: '\u8BBE\u7F6E\u4E2D\u5FC3', + placement: 'top', + manual: false, + modelValue: true, + style: { color: '#878f95' } + }, + { + default: withCtx(() => [_hoisted_6, createVNode(_component_tiny_icon_setting)]), + _: 1 + } + ) + ], + 2 + ), + createElementVNode('div', _hoisted_7, [ + createVNode( + _component_tiny_tooltip, + { + content: '\u534F\u8BAE\u89C4\u8303', + placement: 'top', + manual: false, + modelValue: true, + style: { 'border-radius': '0px' } + }, + { + default: withCtx(() => [ + _hoisted_8, + createVNode(_component_tiny_icon_check_out, { style: { color: '#878f95' } }) + ]), + _: 1 + } + ) + ]), + createElementVNode('div', _hoisted_9, [ + createVNode( + _component_tiny_tooltip, + { + content: '\u5E2E\u52A9\u4E2D\u5FC3', + placement: 'top', + manual: false, + modelValue: true, + class: 'tip-icon', + style: { fill: '#878f95', 'border-radius': '0px' } + }, + { + default: withCtx(() => [ + _hoisted_10, + createVNode(_component_tiny_icon_help_query, { style: { color: '#ffffff' } }) + ]), + _: 1 + } + ) + ]), + _hoisted_11, + createVNode( + _component_tiny_popover, + { + width: 308, + title: '\u5F39\u6846\u6807\u9898', + trigger: 'manual', + modelValue: true, + placement: 'bottom-end', + 'popper-class': 'team-list-pop', + style: { 'border-radius': '0px' } + }, + { + reference: withCtx(() => [ + createElementVNode('div', _hoisted_12, [ + createElementVNode('div', _hoisted_13, [ + _hoisted_14, + createVNode(_component_tiny_icon_delta_down, { + style: { 'font-size': '12px', 'border-radius': '0px', color: '#878f95' } + }) + ]) + ]) + ]), + default: withCtx(() => [ + createElementVNode('div', _hoisted_15, [ + createElementVNode('div', _hoisted_16, [ + _hoisted_17, + createElementVNode('div', _hoisted_18, [ + (openBlock(true), + createElementBlock( + Fragment, + null, + renderList(_ctx.state.tenants, (item, index) => { + return ( + openBlock(), + createElementBlock( + 'div', + { + class: normalizeClass(['team-list-item', { active: item.id === $props.tenant.id }]), + key: item.id, + style: { + display: 'flex', + 'align-items': 'center', + height: '56px', + 'border-radius': '6px', + 'background-color': '#fff', + cursor: 'pointer', + padding: '8px 12px', + 'box-sizing': 'border-box' + } + }, + [ + createElementVNode('div', _hoisted_19, [ + createVNode(_component_tiny_icon_group, { style: { 'border-radius': '0px' } }) + ]), + createElementVNode('span', _hoisted_20, toDisplayString(item.tenant_id), 1), + createElementVNode('div', _hoisted_21, [ + item.id === 1 + ? (openBlock(), + createBlock(_component_tiny_icon_yes, { + key: 0, + style: { 'font-size': '20px', color: '#38acff' } + })) + : createCommentVNode('v-if', true) + ]) + ], + 2 + ) + ) + }), + 128 + )) + ]) + ]) + ]) + ]), + _: 1 + } + ), + createVNode(_component_tiny_popover, { + width: 200, + title: '\u5F39\u6846\u6807\u9898', + trigger: 'manual', + modelValue: false, + 'append-to-body': false + }), + createVNode(_component_tiny_popover, { + width: 308, + title: '\u5F39\u6846\u6807\u9898', + trigger: 'click', + modelValue: false, + placement: 'bottom-end', + 'append-to-body': false, + 'visible-arrow': false, + 'popper-class': 'team-list-pop' + }), + _hoisted_22 + ]) + ]), + createVNode(_component_tiny_popover, { + width: 200, + title: '\u5F39\u6846\u6807\u9898', + trigger: 'manual', + modelValue: true + }), + createVNode(_component_tiny_popover, { + width: 200, + title: '\u5F39\u6846\u6807\u9898', + trigger: 'manual', + modelValue: false, + 'visible-arrow': true + }) + ]) + ) +} +const block = /* @__PURE__ */ _export_sfc(_sfc_main, [ + ['render', _sfc_render], + ['styles', [_style_0]], + ['__scopeId', 'data-v-b66e3972'], + ['__file', 'D:/tmp/buildground/buildground_1673597845904/src/block/generated/components/PortalHeader.vue'] +]) +window.TinyLowcodeResource = window.TinyLowcodeResource || {} +const blockName = hyphenate('PortalHeader') +block.blockId = 998 +block.blockVersion = '1.0.0' +if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } +} else { + block.links = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: ['//localhost:9090/assets/css/0.1.20/index.css'] + }.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, defineCustomElement(block)) +} +export { block as default } diff --git a/mockServer/assets/js/998web-components.umd.js b/mockServer/assets/js/998web-components.umd.js new file mode 100644 index 000000000..312b59eba --- /dev/null +++ b/mockServer/assets/js/998web-components.umd.js @@ -0,0 +1,718 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +;(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = factory( + require('@opentiny/tiny-engine-webcomponent-core'), + require('vue'), + require('vue-i18n'), + require('@opentiny/vue-icon'), + require('@opentiny/vue') + ) + } else if (typeof define === 'function ' && define.amd) { + define([ + '@opentiny/tiny-engine-webcomponent-core', + 'vue', + 'vue-i18n', + '@opentiny/vue-icon', + '@opentiny/vue' + ], factory) + } else { + ;(global = typeof globalThis !== 'undefined' ? globalThis : global || self), + (global.TinyVueBlock = factory( + global.TinyWebcomponentCore, + global.Vue, + global.VueI18n, + global.TinyVueIcon, + global.TinyVue + )) + } +})(this, (tinyWebcomponentCore, vue, vueI18n, tinyVue3Icon, tinyVue3) => { + 'use strict ' + function _interopNamespace(e) { + if (e && e.__esModule) return e + const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module ' } }) + if (e) { + Object.keys(e).forEach((k) => { + if (k !== 'default ') { + const d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get: function () { + return e[k] + } + } + ) + } + }) + } + n['default '] = e + return Object.freeze(n) + } + const vue__namespace = /* @__PURE__ */ _interopNamespace(vue) + Object.freeze({}) + Object.freeze([]) + const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null) + return (str) => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } + } + const hyphenateRE = /\B([A-Z])/g + const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1 ').toLowerCase()) + const _style_0 = + '\n.team-list-item.active[data-v-b66e3972] {\r\n border: 1px solid #38acff;\n}\n.toolbars-item[data-v-b66e3972]:hover {\r\n cursor: pointer;\r\n background-color: #f1f2f3;\n}\n.toolbars-item.active[data-v-b66e3972] {\r\n background-color: #e5e6e8;\n}\n ' + const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc + for (const [key, val] of props) { + target[key] = val + } + return target + } + const _sfc_main = { + components: { + TinyIconCheckOut: tinyVue3Icon.IconCheckOut(), + TinyIconDeltaDown: tinyVue3Icon.IconDeltaDown(), + TinyIconGroup: tinyVue3Icon.IconGroup(), + TinyIconHelpQuery: tinyVue3Icon.IconHelpQuery(), + TinyIconSetting: tinyVue3Icon.IconSetting(), + TinyIconYes: tinyVue3Icon.IconYes(), + TinyPopover: tinyVue3.Popover, + TinyTooltip: tinyVue3.Tooltip + }, + props: { + tenant: { type: Object, default: () => "{tenant_id: 'public'} " } + }, + emits: ['handle-route '], + setup(props, context) { + const { t, lowcodeWrap } = vue__namespace.inject(vueI18n.I18nInjectionKey).lowcode() + const wrap = lowcodeWrap(props, context, t) + const state = vue__namespace.reactive({ + 'menuData ': [ + { + 'label ': '\u9996\u9875 ', + 'url ': '/home ' + }, + { + 'label ': '\u6211\u7684\u5E94\u7528 ', + 'url ': '/home ' + }, + { + 'label ': '\u5E94\u7528\u4E2D\u5FC3 ', + 'url ': '/home ' + }, + { + 'label ': '\u6211\u7684\u5E73\u53F0 ', + 'url ': '/home ' + }, + { + 'label ': '\u5E73\u53F0\u4E2D\u5FC3 ', + 'url ': '/home ' + }, + { + 'label ': '\u6211\u7684\u7269\u6599 ', + 'url ': '/home ' + }, + { + 'label ': '\u751F\u6001\u4E2D\u5FC3 ', + 'url ': '/home ' + }, + { + 'label ': '\u76D1\u63A7\u4E2D\u5FC3 ', + 'url ': '/home ' + } + ], + 'tenants ': [ + { + 'id ': 1, + 'tenant_id ': 'public ', + 'name_cn ': '\u516C\u5171\u79DF\u6237 ', + 'name_en ': 'Public Tenant ', + 'description ': 'Default tenant for new user to explore. ', + 'published_at ': '2021-12-28T11:39:10.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2021-12-28T11:39:10.000Z ', + 'updated_at ': '2022-06-27T03:52:15.000Z ', + 'createdBy ': null + }, + { + 'id ': 2, + 'tenant_id ': 'crm ', + 'name_cn ': '\u5BA2\u6237\u5173\u7CFB\u7BA1\u7406\u7CFB\u7EDF ', + 'name_en ': 'Cloud CRM ', + 'description ': null, + 'published_at ': '2021-12-30T07:39:19.000Z ', + 'created_by ': null, + 'created_at ': '2021-12-30T14:41:57.000Z ', + 'updated_at ': '2022-06-14T06:28:08.000Z ', + 'createdBy ': null + }, + { + 'id ': 3, + 'tenant_id ': 'tinyMock ', + 'name_cn ': 'mock\u5E73\u53F0 ', + 'name_en ': null, + 'description ': null, + 'published_at ': '2022-05-26T07:13:28.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-05-26T07:13:29.000Z ', + 'updated_at ': '2022-05-26T07:13:29.000Z ', + 'createdBy ': null, + 'updatedBy ': null + }, + { + 'id ': 4, + 'tenant_id ': 'tinyStage ', + 'name_cn ': '\u5F00\u53D1\u5DE5\u5177\u96C6 ', + 'name_en ': 'toolkits ', + 'description ': null, + 'published_at ': '2022-05-18T07:56:55.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-05-18T07:56:55.000Z ', + 'updated_at ': '2022-05-18T07:56:55.000Z ' + }, + { + 'id ': 5, + 'tenant_id ': 'tinyUI ', + 'name_cn ': 'UI\u7EC4\u4EF6 ', + 'name_en ': 'components ', + 'description ': null, + 'published_at ': '2022-05-18T08:29:32.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-05-18T08:29:32.000Z ', + 'updated_at ': '2022-05-18T08:29:33.000Z ' + }, + { + 'id ': 6, + 'tenant_id ': 'tinyGate ', + 'name_cn ': '\u95E8\u7981\u7CFB\u7EDF ', + 'name_en ': 'gate ', + 'description ': null, + 'published_at ': '2022-06-23T10:15:42.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-05-23T10:40:14.000Z ', + 'updated_at ': '2022-05-23T10:40:14.000Z ', + 'createdBy ': null, + 'updatedBy ': null + }, + { + 'id ': 7, + 'tenant_id ': 'guestGroup ', + 'name_cn ': '\u6E38\u5BA2\u56E2\u961F ', + 'name_en ': 'guest ', + 'description ': null, + 'published_at ': '2022-06-23T10:15:38.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-06-22T14:58:22.000Z ', + 'updated_at ': '2022-06-22T14:58:22.000Z ' + }, + { + 'id ': 265, + 'tenant_id ': 'myteam ', + 'name_cn ': null, + 'name_en ': null, + 'description ': null, + 'published_at ': '2022-06-14T06:49:58.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-06-14T06:49:58.000Z ', + 'updated_at ': '2022-06-14T06:49:58.000Z ' + }, + { + 'id ': 267, + 'tenant_id ': 'test ', + 'name_cn ': null, + 'name_en ': null, + 'description ': null, + 'published_at ': '2022-06-15T03:35:14.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-06-15T03:35:14.000Z ', + 'updated_at ': '2022-06-15T03:35:14.000Z ' + }, + { + 'id ': 268, + 'tenant_id ': 'zzcTest ', + 'name_cn ': null, + 'name_en ': null, + 'description ': null, + 'published_at ': '2022-06-17T08:47:17.000Z ', + 'created_by ': null, + 'updated_by ': null, + 'created_at ': '2022-06-17T08:47:17.000Z ', + 'updated_at ': '2022-06-17T08:47:17.000Z ' + } + ] + }) + const openHomePage = wrap(function openHomePage2(event) { + this.router.push('/team-home ') + }) + const gotoRouter = wrap(function gotoRouter2(event) { + this.emit('handle-route ', event) + }) + const attrs = wrap({ + state, + openHomePage, + gotoRouter + }) + return attrs + } + } + const _withScopeId = (n) => (vue.pushScopeId('data-v-b66e3972 '), (n = n()), vue.popScopeId(), n) + const _hoisted_1 = { + style: { + 'display ': 'flex ', + 'justify-content ': 'space-between ', + 'align-items ': 'center ', + 'height ': '50px ', + 'border-radius ': '0px ' + } + } + const _hoisted_2 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'img ', + { + src: 'http://localhost:9090/assets/images/bbb35cd0-db30-11ec-a1c4-7b3b3de0a1d8.png ', + style: { 'display ': 'block ', 'width ': '48px ', 'height ': 'auto ', 'margin-left ': '10px ' } + }, + null, + -1 + ) + ) + const _hoisted_3 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'span ', + { style: { 'font-weight ': 'bolder ', 'color ': '#000000 ' } }, + 'TinyEngine ', + -1 + ) + ) + const _hoisted_4 = [_hoisted_2, _hoisted_3] + const _hoisted_5 = { + style: { + 'width ': '230px ', + 'height ': '50px ', + 'display ': 'flex ', + 'justify-content ': 'space-around ', + 'align-items ': 'center ', + 'margin-right ': '10px ', + 'border-radius ': '0px ' + }, + class: 'toolbars ' + } + const _hoisted_6 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode('div ', { placeholder: '\u89E6\u53D1\u6E90 ' }, null, -1) + ) + const _hoisted_7 = { + style: { + 'padding-top ': '6px ', + 'padding-left ': '6px ', + 'padding-right ': '6px ', + 'padding-bottom ': '6px ', + 'margin-left ': '8px ', + 'border-radius ': '6px ' + } + } + const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode('div ', { placeholder: '\u89E6\u53D1\u6E90 ' }, null, -1) + ) + const _hoisted_9 = { + style: { + 'padding-top ': '6px ', + 'padding-left ': '6px ', + 'padding-right ': '6px ', + 'padding-bottom ': '6px ', + 'margin-left ': '8px ', + 'border-radius ': '6px ' + } + } + const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode('div ', { placeholder: '\u89E6\u53D1\u6E90 ' }, null, -1) + ) + const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'span ', + { + class: 'split ', + style: { 'margin ': '0 8px ', 'font-size ': '16px ', 'border-radius ': '0px ', 'color ': '#e5e6e8 ' } + }, + '| ', + -1 + ) + ) + const _hoisted_12 = { placeholder: '\u89E6\u53D1\u6E90 ' } + const _hoisted_13 = { + class: 'toolbars-item ', + style: { 'padding ': '6px ', 'border-radius ': '6px ', 'display ': 'flex ', 'align-items ': 'center ' } + } + const _hoisted_14 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode('span ', { style: { 'border-radius ': '0px ' } }, 'public ', -1) + ) + const _hoisted_15 = { + placeholder: '\u63D0\u793A\u5185\u5BB9 ', + style: { 'border-radius ': '0px ' } + } + const _hoisted_16 = { + style: { 'border-radius ': '0px ' }, + class: 'team-list ' + } + const _hoisted_17 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'div ', + { + class: 'team-list-title ', + style: { + 'font-size ': '16px ', + 'line-height ': '22px ', + 'font-weight ': '500 ', + 'text-overflow ': 'ellipsis ', + 'white-space ': 'nowrap ', + 'overflow ': 'hidden ' + } + }, + [/* @__PURE__ */ vue.createElementVNode('span ', null, '\u7EC4\u7EC7/\u56E2\u961F ')], + -1 + ) + ) + const _hoisted_18 = { + class: 'team-list-group ', + style: { + 'height ': 'auto ', + 'max-height ': '335px ', + 'overflow ': 'auto ', + 'margin-top ': '16px ', + 'border-radius ': '0px ' + } + } + const _hoisted_19 = { + class: 'team-list-item-logo ', + style: { + 'height ': '28px ', + 'width ': '28px ', + 'border-radius ': '8px ', + 'font-size ': '16px ', + 'color ': '#fff ', + 'background ': '#38acff ', + 'margin-right ': '12px ', + 'display ': 'flex ', + 'align-items ': 'center ', + 'justify-content ': 'center ' + } + } + const _hoisted_20 = { + style: { + 'height ': '22px ', + 'font-size ': '14px ', + 'line-height ': '22px ', + 'color ': 'rgba(0, 0, 0, 0.8) ', + 'flex ': '1 ', + 'margin-right ': '5px ', + 'overflow ': 'hidden ', + 'text-overflow ': 'ellipsis ', + 'white-space ': 'nowrap ', + 'border-radius ': '0px ' + } + } + const _hoisted_21 = { + style: { 'border-radius ': '0px ' }, + class: 'team-list-item-icon ' + } + const _hoisted_22 = /* @__PURE__ */ _withScopeId(() => + /* @__PURE__ */ vue.createElementVNode( + 'img ', + { + style: { 'width ': '40px ', 'height ': 'auto ', 'border-radius ': '50px ' }, + src: 'http://localhost:9090/assets/images/120 ' + }, + null, + -1 + ) + ) + function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + let _a + const _component_tiny_icon_setting = vue.resolveComponent('tiny-icon-setting ') + const _component_tiny_tooltip = vue.resolveComponent('tiny-tooltip ') + const _component_tiny_icon_check_out = vue.resolveComponent('tiny-icon-check-out ') + const _component_tiny_icon_help_query = vue.resolveComponent('tiny-icon-help-query ') + const _component_tiny_icon_delta_down = vue.resolveComponent('tiny-icon-delta-down ') + const _component_tiny_icon_group = vue.resolveComponent('tiny-icon-group ') + const _component_tiny_icon_yes = vue.resolveComponent('tiny-icon-yes ') + const _component_tiny_popover = vue.resolveComponent('tiny-popover ') + return ( + vue.openBlock(), + vue.createElementBlock('div ', null, [ + vue.createElementVNode('div ', _hoisted_1, [ + vue.createElementVNode( + 'div ', + { + style: { 'display ': 'flex ', 'align-items ': 'center ', 'border-radius ': '0px ' }, + onClick: _cache[0] || (_cache[0] = ($event) => _ctx.openHomePage(_ctx.event)) + }, + _hoisted_4 + ), + vue.createElementVNode('div ', null, [ + (vue.openBlock(true), + vue.createElementBlock( + vue.Fragment, + null, + vue.renderList(_ctx.state.menuData, (item, index) => { + return ( + vue.openBlock(), + vue.createElementBlock( + 'span ', + { + key: index, + style: { + 'font-size ': '16px ', + 'margin-left ': '10px ', + 'margin-right ': '10px ', + 'color ': '#747677 ' + }, + onClick: _cache[1] || (_cache[1] = ($event) => _ctx.gotoRouter(_ctx.event)) + }, + vue.toDisplayString(item.label), + 1 + ) + ) + }), + 128 + )) + ]), + vue.createElementVNode('div ', _hoisted_5, [ + vue.createElementVNode( + 'div ', + { + class: vue.normalizeClass({ + 'toolbars-item ': true, + active: ((_a = _ctx.route.path) == null ? void 0 : _a.indexOf('/permission-setting ')) > -1 + }), + style: { + 'padding-top ': '6px ', + 'padding-left ': '6px ', + 'padding-right ': '6px ', + 'padding-bottom ': '6px ', + 'margin-left ': '8px ', + 'border-radius ': '6px ' + }, + onClick: _cache[2] || (_cache[2] = ($event) => _ctx.openPermission(_ctx.event)) + }, + [ + vue.createVNode( + _component_tiny_tooltip, + { + content: '\u8BBE\u7F6E\u4E2D\u5FC3 ', + placement: 'top ', + manual: false, + modelValue: true, + style: { 'color ': '#878f95 ' } + }, + { + default: vue.withCtx(() => [_hoisted_6, vue.createVNode(_component_tiny_icon_setting)]), + _: 1 + } + ) + ], + 2 + ), + vue.createElementVNode('div ', _hoisted_7, [ + vue.createVNode( + _component_tiny_tooltip, + { + content: '\u534F\u8BAE\u89C4\u8303 ', + placement: 'top ', + manual: false, + modelValue: true, + style: { 'border-radius ': '0px ' } + }, + { + default: vue.withCtx(() => [ + _hoisted_8, + vue.createVNode(_component_tiny_icon_check_out, { style: { 'color ': '#878f95 ' } }) + ]), + _: 1 + } + ) + ]), + vue.createElementVNode('div ', _hoisted_9, [ + vue.createVNode( + _component_tiny_tooltip, + { + content: '\u5E2E\u52A9\u4E2D\u5FC3 ', + placement: 'top ', + manual: false, + modelValue: true, + class: 'tip-icon ', + style: { 'fill ': '#878f95 ', 'border-radius ': '0px ' } + }, + { + default: vue.withCtx(() => [ + _hoisted_10, + vue.createVNode(_component_tiny_icon_help_query, { style: { 'color ': '#ffffff ' } }) + ]), + _: 1 + } + ) + ]), + _hoisted_11, + vue.createVNode( + _component_tiny_popover, + { + width: 308, + title: '\u5F39\u6846\u6807\u9898 ', + trigger: 'manual ', + modelValue: true, + placement: 'bottom-end ', + 'popper-class ': 'team-list-pop ', + style: { 'border-radius ': '0px ' } + }, + { + reference: vue.withCtx(() => [ + vue.createElementVNode('div ', _hoisted_12, [ + vue.createElementVNode('div ', _hoisted_13, [ + _hoisted_14, + vue.createVNode(_component_tiny_icon_delta_down, { + style: { 'font-size ': '12px ', 'border-radius ': '0px ', 'color ': '#878f95 ' } + }) + ]) + ]) + ]), + default: vue.withCtx(() => [ + vue.createElementVNode('div ', _hoisted_15, [ + vue.createElementVNode('div ', _hoisted_16, [ + _hoisted_17, + vue.createElementVNode('div ', _hoisted_18, [ + (vue.openBlock(true), + vue.createElementBlock( + vue.Fragment, + null, + vue.renderList(_ctx.state.tenants, (item, index) => { + return ( + vue.openBlock(), + vue.createElementBlock( + 'div ', + { + class: vue.normalizeClass([ + 'team-list-item ', + { active: item.id === $props.tenant.id } + ]), + key: item.id, + style: { + 'display ': 'flex ', + 'align-items ': 'center ', + 'height ': '56px ', + 'border-radius ': '6px ', + 'background-color ': '#fff ', + 'cursor ': 'pointer ', + 'padding ': '8px 12px ', + 'box-sizing ': 'border-box ' + } + }, + [ + vue.createElementVNode('div ', _hoisted_19, [ + vue.createVNode(_component_tiny_icon_group, { style: { 'border-radius ': '0px ' } }) + ]), + vue.createElementVNode('span ', _hoisted_20, vue.toDisplayString(item.tenant_id), 1), + vue.createElementVNode('div ', _hoisted_21, [ + item.id === 1 + ? (vue.openBlock(), + vue.createBlock(_component_tiny_icon_yes, { + key: 0, + style: { 'font-size ': '20px ', 'color ': '#38acff ' } + })) + : vue.createCommentVNode('v-if ', true) + ]) + ], + 2 + ) + ) + }), + 128 + )) + ]) + ]) + ]) + ]), + _: 1 + } + ), + vue.createVNode(_component_tiny_popover, { + width: 200, + title: '\u5F39\u6846\u6807\u9898 ', + trigger: 'manual ', + modelValue: false, + 'append-to-body ': false + }), + vue.createVNode(_component_tiny_popover, { + width: 308, + title: '\u5F39\u6846\u6807\u9898 ', + trigger: 'click ', + modelValue: false, + placement: 'bottom-end ', + 'append-to-body ': false, + 'visible-arrow ': false, + 'popper-class ': 'team-list-pop ' + }), + _hoisted_22 + ]) + ]), + vue.createVNode(_component_tiny_popover, { + width: 200, + title: '\u5F39\u6846\u6807\u9898 ', + trigger: 'manual ', + modelValue: true + }), + vue.createVNode(_component_tiny_popover, { + width: 200, + title: '\u5F39\u6846\u6807\u9898 ', + trigger: 'manual ', + modelValue: false, + 'visible-arrow ': true + }) + ]) + ) + } + const block = /* @__PURE__ */ _export_sfc(_sfc_main, [ + ['render ', _sfc_render], + ['styles ', [_style_0]], + ['__scopeId ', 'data-v-b66e3972 '], + ['__file ', 'D:/tmp/buildground/buildground_1673597845904/src/block/generated/components/PortalHeader.vue '] + ]) + window.TinyLowcodeResource = window.TinyLowcodeResource || {} + const blockName = hyphenate('PortalHeader ') + block.blockId = 998 + block.blockVersion = '1.0.0 ' + if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } + } else { + block.links = { + 'VUE_APP_UI_LIB_FULL_STYLE_FILE_URL ': ['//localhost:9090/assets/css/0.1.20/index.css '] + }.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, tinyWebcomponentCore.defineCustomElement(block)) + } + return block +}) diff --git a/mockServer/assets/json/bundle.json b/mockServer/assets/json/bundle.json new file mode 100644 index 000000000..95c91c0da --- /dev/null +++ b/mockServer/assets/json/bundle.json @@ -0,0 +1,10471 @@ +{ + "data": { + "framework": "Vue", + "materials": { + "components": [ + { + "name": { + "zh_CN": "走马灯子项" + }, + "component": "TinyCarouselItem", + "icon": "carouselitem", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CarouselItem", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "幻灯片的名字,可用作 setActiveItem 的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "幻灯片的标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "outside", + "value": "outside" + }, + { + "label": "none", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "走马灯" + }, + "component": "TinyCarousel", + "icon": "carousel", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Carousel", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "arrow", + "label": { + "text": { + "zh_CN": "切换箭头的显示时机" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "总是显示", + "value": "always" + }, + { + "label": "鼠标悬停时显示", + "value": "hover" + }, + { + "label": "从不显示", + "value": "never" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否自动切换" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "走马灯的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "走马灯外部", + "value": "outside" + }, + { + "label": "不显示", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "initial-index", + "label": { + "text": { + "zh_CN": "初始状态激活的幻灯片的索引,从 0 开始 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "interval", + "label": { + "text": { + "zh_CN": "自动切换的时间间隔,单位为毫秒" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "loop", + "label": { + "text": { + "zh_CN": "是否循环显示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "show-title", + "label": { + "text": { + "zh_CN": "是否显示标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "指示器的触发方式,默认为 hover" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "点击", + "value": "click" + }, + { + "label": "悬停", + "value": "hover" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "走马灯的类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "水平", + "value": "horizontal" + }, + { + "label": "垂直", + "value": "vertical" + }, + { + "label": "卡片", + "value": "card" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyCarouselItem"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "link", + "name": { + "zh_CN": "提示框" + }, + "component": "a", + "description": "链接", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "href", + "label": { + "text": { + "zh_CN": "跳转链接" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "链接" + } + }, + { + "property": "target", + "label": { + "text": { + "zh_CN": "页面目标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "当前页面", + "value": "_self" + }, + { + "label": "打开新页面", + "value": "_blank" + } + ] + } + }, + "description": { + "zh_CN": "链接" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ] + }, + "configure": { + "loop": true, + "condition": true, + "slots": [], + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "name": { + "zh_CN": "标题" + }, + "component": ["h1", "h2", "h3", "h4", "h5", "h6"], + "icon": "h16", + "description": "标题", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 20, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": { + "showRadioButton": true + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "段落" + }, + "component": "p", + "icon": "paragraph", + "description": "段落", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 30, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "input", + "icon": "input", + "description": "输入框", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 40, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "checkbox", + "value": "checkbox" + }, + { + "label": "color", + "value": "color" + }, + { + "label": "date", + "value": "date" + }, + { + "label": "button", + "value": "button" + }, + { + "label": "email", + "value": "email" + }, + { + "label": "file", + "value": "file" + }, + { + "label": "hidden", + "value": "hidden" + }, + { + "label": "image", + "value": "image" + }, + { + "label": "month", + "value": "month" + }, + { + "label": "number", + "value": "number" + }, + { + "label": "password", + "value": "password" + }, + { + "label": "radio", + "value": "radio" + }, + { + "label": "range", + "value": "range" + }, + { + "label": "reset", + "value": "reset" + }, + { + "label": "search", + "value": "search" + }, + { + "label": "submit", + "value": "submit" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "time", + "value": "time" + }, + { + "label": "week", + "value": "week" + }, + { + "label": "url", + "value": "url" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onChange": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "component": "video", + "icon": "video", + "description": "视频", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 50, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "label": { + "text": { + "zh_CN": "视频的 URL" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "视频播放器的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "视频播放器的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否显示控件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否马上播放" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "icon": "Image", + "name": { + "zh_CN": "Img" + }, + "component": "Img", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 60, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "type": "string", + "defaultValue": "", + "bindState": true, + "label": { + "text": { + "zh_CN": "src路径" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": ["src"] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "button", + "name": { + "zh_CN": "Button" + }, + "component": "button", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 70, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "table", + "name": { + "zh_CN": "表格" + }, + "component": "table", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 80, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "表格的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "表格边框的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "td", + "name": { + "zh_CN": "表格单元格" + }, + "component": "td", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 90, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "colspan", + "label": { + "text": { + "zh_CN": "单元格可横跨的列数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "rowspan", + "label": { + "text": { + "zh_CN": "单元格可横跨的行数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "form", + "name": { + "zh_CN": "表单" + }, + "component": "form", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 100, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "表单的名称" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "action", + "label": { + "text": { + "zh_CN": "提交表单时向何处发送表单数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "method", + "label": { + "text": { + "zh_CN": "用于发送 form-data 的 HTTP 方法" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "get", + "value": "get" + }, + { + "label": "post", + "value": "post" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "label", + "name": { + "zh_CN": "表单标签" + }, + "component": "label", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 110, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "for", + "label": { + "text": { + "zh_CN": "label 绑定到哪个表单元素" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "form", + "label": { + "text": { + "zh_CN": "label 字段所属的一个或多个表单" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "component": "TinyButtonGroup", + "icon": "buttonGroup", + "description": "以按钮组的方式出现,常用于多项类似操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "ButtonGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "general", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "按钮组数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "组件大小" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "mini", + "value": "mini" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "medium", + "value": "medium" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "是否是朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "row", + "name": { + "zh_CN": "row" + }, + "component": "TinyRow", + "description": "定义 Layout 的行配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Row", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 5, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "layout", + "label": { + "text": { + "zh_CN": "layout" + } + }, + "cols": 12, + "widget": { + "component": "MetaLayoutGrid", + "props": {} + }, + "description": { + "zh_CN": "layout" + }, + "labelPosition": "none" + }, + { + "property": "align", + "label": { + "text": { + "zh_CN": "align" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "middle", + "value": "middle" + }, + { + "label": "bottom", + "value": "bottom" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "flex", + "label": { + "text": { + "zh_CN": "flex" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "gutter", + "label": { + "text": { + "zh_CN": "gutter" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ] + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "form", + "name": { + "zh_CN": "表单" + }, + "component": "TinyForm", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Form", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 5, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "标签宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签占位宽度,默认为 80px" + }, + "labelPosition": "left" + }, + { + "property": "inline", + "label": { + "text": { + "zh_CN": "行内布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "行内布局模式,默认为 false" + } + }, + { + "property": "label-align", + "label": { + "text": { + "zh_CN": "必填标识是否占位" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "必填标识 * 是否占位" + }, + "labelPosition": "left" + }, + { + "property": "label-suffix", + "label": { + "text": { + "zh_CN": "标签后缀" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签后缀" + } + }, + { + "property": "label-position", + "label": { + "text": { + "zh_CN": "标签位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "right", + "value": "right" + }, + { + "label": "left ", + "value": "left " + }, + { + "label": "top", + "value": "top" + } + ] + } + }, + "description": { + "zh_CN": "表单中标签的布局位置" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "校验属性" + }, + "content": [ + { + "property": "model", + "label": { + "text": { + "zh_CN": "表单校验对象" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单数据对象" + }, + "labelPosition": "left" + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单验证规则" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onValidate": { + "label": { + "zh_CN": "表单项被校验后触发" + }, + "description": { + "zh_CN": "表单项被校验后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "function", + "type": "Function", + "defaultValue": "(valid) => {}", + "description": { + "zh_CN": "校验回调函数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "formitem", + "name": { + "zh_CN": "表单项" + }, + "component": "TinyFormItem", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FormItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "label", + "label": { + "text": { + "zh_CN": "标签文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "标签", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标签文本" + }, + "labelPosition": "left" + }, + { + "property": "prop", + "label": { + "text": { + "zh_CN": "校验字段" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的" + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "必填" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否必填" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "字段名" + }, + "description": { + "zh_CN": "自定义显示字段名称" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyForm"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "col", + "name": { + "zh_CN": "col" + }, + "component": "TinyCol", + "description": "列配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Col", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "span", + "label": { + "text": { + "zh_CN": "栅格列格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整行", + "value": 12 + }, + { + "label": "6格", + "value": 6 + }, + { + "label": "4格", + "value": 4 + }, + { + "label": "3格", + "value": 3 + }, + { + "label": "1格", + "value": 1 + } + ] + } + }, + "description": { + "zh_CN": "当一行分为12格时,一列可占位多少格" + } + }, + { + "property": "move", + "label": { + "text": { + "zh_CN": "栅格左右移动格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": -12, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左右移动格数(正数向右,负数向左)" + } + }, + { + "property": "no", + "label": { + "text": { + "zh_CN": "排序编号" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "max": 12 + } + }, + "description": { + "zh_CN": "排序编号(row中启用order生效)" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "间隔格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 0, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左侧的间隔格数" + } + }, + { + "property": "xs", + "label": { + "text": { + "zh_CN": "超小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "<768px 响应式栅格数" + } + }, + { + "property": "sm", + "label": { + "text": { + "zh_CN": "小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥768px 响应式栅格数" + } + }, + { + "property": "md", + "label": { + "text": { + "zh_CN": "中屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥992px 响应式栅格数" + } + }, + { + "property": "lg", + "label": { + "text": { + "zh_CN": "大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1200px 响应式栅格数" + } + }, + { + "property": "xl", + "label": { + "text": { + "zh_CN": "超大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1920px 响应式栅格数" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "component": "TinyButton", + "icon": "button", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Button", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "type": "string", + "defaultValue": "按钮文案", + "label": { + "text": { + "zh_CN": "按钮文字" + } + }, + "cols": 12, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "type": "select", + "label": { + "text": { + "zh_CN": "大小" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "primary", + "value": "primary" + }, + { + "label": "success", + "value": "success" + }, + { + "label": "info", + "value": "info" + }, + { + "label": "warning", + "value": "warning" + }, + { + "label": "danger", + "value": "danger" + }, + { + "label": "text", + "value": "text" + } + ] + } + }, + "description": { + "zh_CN": "设置不同的主题样式" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "round", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆角按钮" + }, + "labelPosition": "left" + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "labelPosition": "left" + }, + { + "property": "reset-time", + "label": { + "text": { + "zh_CN": "禁用时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置禁用时间,防止重复提交,单位毫秒" + } + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆形按钮" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否默认聚焦" + }, + "labelPosition": "left" + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "加载中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否展示位加载中样式" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "TinyInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Input", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "textarea", + "value": "textarea" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "password", + "value": "password" + } + ] + } + }, + "description": { + "zh_CN": "设置input框的type属性" + } + }, + { + "property": "rows", + "label": { + "text": { + "zh_CN": "行数" + } + }, + "widget": { + "component": "MetaNumber" + }, + "description": { + "zh_CN": "输入框行数,只对 type='textarea' 有效" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "前置内容" + } + }, + "suffix": { + "label": { + "zh_CN": "后置内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "radio", + "name": { + "zh_CN": "单选" + }, + "component": "TinyRadio", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Radio", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "单选框的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "label": { + "zh_CN": "其他" + }, + "description": { + "zh_CN": "" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "显示边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "单选框的尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生 name 属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": "绑定值变化时触发的事件" + } + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "select", + "name": { + "zh_CN": "下拉框" + }, + "component": "TinySelect", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 8, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "searchable", + "label": { + "text": { + "zh_CN": "下拉面板可搜索" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "下拉面板是否可搜索" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "下拉数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "配置 Select 下拉数据项" + }, + "labelPosition": "left" + }, + { + "property": "multiple", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许输入框输入或选择多个项" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "multiple-limit", + "label": { + "text": { + "zh_CN": "最大可选值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "多选时用户最多可以选择的项目数,为 0 则不限制" + }, + "labelPosition": "left" + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "下拉框的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置下拉框自定义的类名" + }, + "labelPosition": "left" + }, + { + "property": "collapse-tags", + "label": { + "text": { + "zh_CN": "多选展示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "多选时是否将选中值按文字的形式展示" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在下拉框值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "下拉框选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onRemoveTag": { + "label": { + "zh_CN": "多选模式下移除tag时触发" + }, + "description": { + "zh_CN": "多选模式下移除tag时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "被移除Tag对应数据项的值字段" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "onBeforeMount": "console.log('table on load'); this.options = source.data" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["multiple", "options"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "switch", + "name": { + "zh_CN": "开关" + }, + "component": "TinySwitch", + "description": "Switch 在两种状态间切换选择", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Switch", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 9, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定默认值" + } + }, + { + "property": "true-value", + "label": { + "text": { + "zh_CN": "打开时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置打开时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "false-value", + "label": { + "text": { + "zh_CN": "关闭时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置关闭时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示为 mini 模式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "开关的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的开关状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "search", + "name": { + "zh_CN": "搜索框" + }, + "component": "TinySearch", + "description": "指定条件对象进行搜索数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Search", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "默认值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的默认搜索值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的提示占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清空按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置显示清空图标按钮" + }, + "labelPosition": "left" + }, + { + "property": "isEnterSearch", + "label": { + "text": { + "zh_CN": "是否Enter键触发search事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在按下键盘Enter键的时候触发search事件" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他配置" + }, + "content": [ + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "迷你模式,配置为true时,搜索默认显示为一个带图标的圆形按钮,点击后展开" + }, + "labelPosition": "left" + }, + { + "property": "transparent", + "label": { + "text": { + "zh_CN": "透明模式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "配置为true时,边框变为透明且收缩后半透明显示,一般用在带有背景的场景,默认 false" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "输入完成时触发" + }, + "description": { + "zh_CN": "在 input 框中输入完成时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onSearch": { + "label": { + "zh_CN": "点击搜索按钮时触发" + }, + "description": { + "zh_CN": "展开状态点击搜索按钮时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["clearable", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkbox", + "name": { + "zh_CN": "复选框" + }, + "component": "TinyCheckbox", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Checkbox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "复选框的文本" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示边框" + } + }, + { + "property": "false-label", + "label": { + "text": { + "zh_CN": "未选中的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "没有选中时的值" + } + }, + { + "property": "true-label", + "label": { + "text": { + "zh_CN": "选择时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "选中时的值" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["border", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxbutton", + "name": { + "zh_CN": "复选按钮" + }, + "component": "TinyCheckboxButton", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "按钮文本" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxgroup", + "name": { + "zh_CN": "复选按钮组" + }, + "component": "TinyCheckboxGroup", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "dataType": "Array" + } + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "数据列表" + } + }, + "defaultValue": [ + { + "label": "标签2" + }, + { + "label": "标签2" + } + ], + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "checkbox组件列表" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "button", + "value": "button" + }, + { + "label": "checkbox", + "value": "checkbox" + } + ] + } + }, + "description": { + "zh_CN": "checkbox组件类型(button/checkbox),该属性的默认值为 checkbox,配合 options 属性一起使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "type"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "dialogbox", + "name": { + "zh_CN": "对话框" + }, + "component": "TinyDialogBox", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DialogBox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框标题" + }, + "labelPosition": "left" + }, + { + "property": "visible", + "label": { + "text": { + "zh_CN": "显示与隐藏" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "控制弹出框显示与关闭" + }, + "labelPosition": "left" + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框的宽度" + }, + "labelPosition": "left" + }, + { + "property": "draggable", + "label": { + "text": { + "zh_CN": "可拖拽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否开启弹窗的拖拽功能,默认值为 false 。" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "弹出框的头部与底部内容会自动居中" + }, + "labelPosition": "left" + }, + { + "property": "dialog-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义配置弹窗类名" + }, + "labelPosition": "left" + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "插入到 Body " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "DialogBox 本身是否插入到 body 上,嵌套的 Dialog 必须指定该属性并赋值为 true" + }, + "labelPosition": "left" + }, + { + "property": "show-close", + "label": { + "text": { + "zh_CN": "关闭按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示关闭按钮,默认值为 true 。" + } + } + ] + } + ], + "selector": ".TinyDialogBox", + "events": { + "onClose": { + "label": { + "zh_CN": "关闭弹窗时触发" + }, + "description": { + "zh_CN": "Dialog 关闭的回调" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:visible": { + "label": { + "zh_CN": "双向绑定的状态改变时触发" + }, + "description": { + "zh_CN": "显示或隐藏的状态值,发生改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的显示或隐藏的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "title": { + "label": { + "zh_CN": "标题区" + }, + "description": { + "zh_CN": "Dialog 标题区的内容" + } + }, + "footer": { + "label": { + "zh_CN": "按钮操作区" + }, + "description": { + "zh_CN": "Dialog 按钮操作区的内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": ".tiny-dialog-box", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabs", + "name": { + "zh_CN": "标签页" + }, + "component": "TinyTabs", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tabs", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 10, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "showEditIcon", + "label": { + "text": { + "zh_CN": "显示编辑ICON " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示标题后编辑 ICON" + }, + "labelPosition": "left" + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定值,选中选项卡的 name" + }, + "labelPosition": "left" + }, + { + "property": "with-add", + "label": { + "text": { + "zh_CN": "可新增" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可增加" + }, + "labelPosition": "left" + }, + { + "property": "with-close", + "label": { + "text": { + "zh_CN": "可关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可关闭" + }, + "labelPosition": "left" + }, + { + "property": "tab-style", + "label": { + "text": { + "zh_CN": "标签页样式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "card", + "value": "card" + }, + { + "label": "border-card", + "value": "border-card" + } + ] + } + }, + "description": { + "zh_CN": "标签页样式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击页签时触发事件" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "component", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前点击的页签对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onEdit": { + "label": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "description": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "tab", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的页签对象" + } + }, + { + "name": "type", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的类型(remove || add || edit)" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "关闭页签时触发" + }, + "description": { + "zh_CN": "关闭页签时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "name", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "页签名称" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyTabItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["size", "tab-style"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabitem", + "name": { + "zh_CN": "tab页签" + }, + "component": "TinyTabItem", + "description": "tab 标签页", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TabItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一表示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一表示" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyTab"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["name", "title"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑" + }, + "component": "TinyBreadcrumb", + "description": "告诉访问者他们目前在网站中的位置以及如何返回", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "separator", + "label": { + "text": { + "zh_CN": "分隔符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义分隔符" + }, + "labelPosition": "left" + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "options" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "textField", + "label": { + "text": { + "zh_CN": "textField" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "description": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyBreadcrumbItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["separator"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑项" + }, + "component": "TinyBreadcrumbItem", + "description": "", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "BreadcrumbItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "to", + "label": { + "text": { + "zh_CN": "路由路径" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面包屑项" + } + } + ] + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "面包屑项标签" + }, + "description": { + "zh_CN": "面包屑项" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyBreadcrumb"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["to"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapse", + "name": { + "zh_CN": "折叠面板" + }, + "component": "TinyCollapse", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Collapse", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "当前激活的面板" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定当前激活的面板" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "激活面板改变时触发" + }, + "description": { + "zh_CN": "当前激活面板改变时触发(如果是手风琴模式,参数 activeNames 类型为string,否则为array)" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前激活面板的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前激活面板的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapseitem", + "name": { + "zh_CN": "折叠面板项" + }, + "component": "TinyCollapseItem", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CollapseItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一标志符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一标志符;String | Number" + }, + "labelPosition": "left" + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "面板标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面板标题" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "grid", + "name": { + "zh_CN": "表格" + }, + "component": "TinyGrid", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Grid", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础属性" + }, + "description": { + "zh_CN": "基础属性" + }, + "collapse": { + "number": 15, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "onChange": "this.delProp('fetchData')", + "description": { + "zh_CN": "设置表格的数据" + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列标题" + } + }, + "widget": { + "component": "MetaBindI18n", + "props": {} + } + }, + { + "property": "field", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列键值" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "sortable", + "type": "boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "width", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列宽" + } + }, + "widget": { + "component": "MetaNumber", + "props": {} + } + }, + { + "property": "formatText", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "内置渲染器" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整数", + "value": "integer" + }, + { + "label": "小数", + "value": "number" + }, + { + "label": "金额", + "value": "money" + }, + { + "label": "百分比", + "value": "rate" + }, + { + "label": "布尔", + "value": "boole" + }, + { + "label": "年月日", + "value": "date" + }, + { + "label": "年月日时分", + "value": "dateTime" + }, + { + "label": "时间", + "value": "time" + }, + { + "label": "省略", + "value": "ellipsis" + } + ] + } + } + }, + { + "property": "renderer", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSFunction" + } + } + }, + { + "property": "slots", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "插槽" + } + }, + "labelPosition": "none", + "widget": { + "component": "MetaJsSlot", + "props": { + "slots": ["header", "default"] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "列类型" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "索引列", + "value": "index" + }, + { + "label": "单选列", + "value": "radio" + }, + { + "label": "多选列", + "value": "selection" + }, + { + "label": "展开列", + "value": "expand" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)" + }, + "labelPosition": "left" + }, + { + "property": "editor", + "label": { + "text": { + "zh_CN": "编辑配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "单元格编辑渲染配置项,也可以是函数 Function(h, params)" + }, + "labelPosition": "left" + }, + { + "property": "filter", + "label": { + "text": { + "zh_CN": "筛选配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "设置表格列的筛选配置信息。默认值为 false 不配置筛选信息" + } + }, + { + "property": "showOverflow", + "label": { + "text": { + "zh_CN": "内容超出部分省略号配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "只显示省略号", + "value": "ellipsis" + }, + { + "label": "显示为原生 title", + "value": "title" + }, + { + "label": "显示为 tooltip 提示", + "value": "tooltip" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)" + }, + "labelPosition": "left" + } + ] + } + ], + "widget": { + "component": "MetaArrayItem", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "fetchData", + "label": { + "text": { + "zh_CN": "服务端数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "onChange": "this.delProp('data')", + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "fetchData", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "服务端数据查询方法" + } + }, + { + "property": "pager", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": { + "attrs": { + "currentPage": 1 + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "pager", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "分页配置" + } + }, + { + "property": "resizable", + "label": { + "text": { + "zh_CN": "调整列宽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许调整列宽" + }, + "labelPosition": "left" + }, + { + "property": "row-id", + "label": { + "text": { + "zh_CN": "行数据唯一标识的字段名" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "placeholder": "比如:id" + } + }, + "description": { + "zh_CN": "行数据唯一标识的字段名" + }, + "labelPosition": "left" + }, + { + "property": "select-config", + "label": { + "text": { + "zh_CN": "复选框配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "表格行数据复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格校验规则配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-config", + "label": { + "text": { + "zh_CN": "编辑配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格编辑配置项" + } + }, + { + "property": "expand-config", + "label": { + "text": { + "zh_CN": "复选框配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "sortable", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + } + ] + }, + { + "label": { + "zh_CN": "其他属性" + }, + "description": { + "zh_CN": "其他属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "auto-resize", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "labelPosition": "left" + }, + { + "property": "seq-serial", + "label": { + "text": { + "zh_CN": "行号连续" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置行序号是否连续,开启分页时有效,该属性的默认值为 false" + }, + "labelPosition": "left" + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "高亮当前行" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "高亮当前行" + }, + "labelPosition": "left" + }, + { + "property": "highlight-hover-row", + "label": { + "text": { + "zh_CN": "hover 时候高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "鼠标移到行是否要高亮显示" + }, + "labelPosition": "left" + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})" + }, + "labelPosition": "left" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "最大高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置表格内容区域(不含表格头部,底部)的最大高度。" + }, + "labelPosition": "left" + }, + { + "property": "row-span", + "label": { + "text": { + "zh_CN": "行合并" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onFilterChange": { + "label": { + "zh_CN": "筛选条件改变时触发改事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSortChange": { + "label": { + "zh_CN": "点击列头,执行数据排序前触发的事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectAll": { + "label": { + "zh_CN": "当手动勾选全选时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选全选时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 包含 table 实例对象" + } + }, + { + "name": "checked", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "勾选状态" + } + }, + { + "name": "selction", + "type": "Array", + "defaultValue": "", + "description": { + "zh_CN": "选中的表格数据数组" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectChange": { + "label": { + "zh_CN": "手动勾选并且值发生改变时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " table 实例对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onToggleExpandChange": { + "label": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "description": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onCurrentChange": { + "label": { + "zh_CN": "行点击时触发" + }, + "description": { + "zh_CN": "行点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contentMenu": { + "actions": ["create symbol"] + }, + "onBeforeMount": "console.log('table on load'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "分页" + }, + "component": "TinyPager", + "icon": "pager", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Pager", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "currentPage", + "label": { + "text": { + "zh_CN": "当前页数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "当前页数,支持 .sync 修饰符" + }, + "labelPosition": "left" + }, + { + "property": "pageSize", + "label": { + "text": { + "zh_CN": "每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "每页显示条目个数" + }, + "labelPosition": "left" + }, + { + "property": "pageSizes", + "label": { + "text": { + "zh_CN": "可选每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置可选择的每页显示条数" + } + }, + { + "property": "total", + "label": { + "text": { + "zh_CN": "总条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "数据总条数" + }, + "labelPosition": "left" + }, + { + "property": "layout", + "label": { + "text": { + "zh_CN": "布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": "total,sizes,prev, pager, next", + "widget": { + "component": "MetaInput", + "props": { + "type": "textarea" + } + }, + "description": { + "zh_CN": "组件布局,子组件名用逗号分隔" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onCurrentChange ": { + "label": { + "zh_CN": "切换页码时触发" + }, + "description": { + "zh_CN": "切换页码时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前页的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onPrevClick ": { + "label": { + "zh_CN": "点击上一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNextClick": { + "label": { + "zh_CN": "点击下一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["currentPage", "total"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "component": "TinyPopeditor", + "icon": "popEditor", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "PopEditor", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 6, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "show-clear-btn", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板的宽度(单位像素)" + }, + "labelPosition": "left" + }, + { + "property": "conditions", + "label": { + "text": { + "zh_CN": "过滤条件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "当弹出面板配置的是表格时,设置弹出面板中的过滤条件" + }, + "labelPosition": "left" + }, + { + "property": "grid-op", + "label": { + "text": { + "zh_CN": "表格配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中表格组件的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "pager-op", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出编辑框中分页配置" + }, + "labelPosition": "left" + }, + { + "property": "multi", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中的数据是否可多选" + }, + "labelPosition": "left" + }, + { + "property": "show-pager", + "label": { + "text": { + "zh_CN": "启用分页" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "选中值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项的值" + } + }, + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中对象" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "弹框关闭时触发的事件" + }, + "description": { + "zh_CN": "弹框关闭时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onPageChange": { + "label": { + "zh_CN": "分页切换事件" + }, + "description": { + "zh_CN": "表格模式下分页切换事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页码数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["modelValue", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tree", + "name": { + "zh_CN": "树" + }, + "component": "TinyTree", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tree", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "show-checkbox", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置接口是否可以多选" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1" + } + ] + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "可配置静态数据源和动态数据源" + } + }, + { + "property": "node-key", + "label": { + "text": { + "zh_CN": "唯一标识" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "节点唯一标识属性名称" + }, + "labelPosition": "left" + }, + { + "property": "icon-trigger-click-node", + "label": { + "text": { + "zh_CN": "触发NodeClick 事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "点击图标展开节点时是否触发 node-click 事件" + }, + "labelPosition": "left" + }, + { + "property": "expand-icon", + "label": { + "text": { + "zh_CN": "展开图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点展开图标" + }, + "labelPosition": "left" + }, + { + "property": "shrink-icon", + "label": { + "text": { + "zh_CN": "收缩图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点收缩的图标" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "check-on-click-node", + "label": { + "text": { + "zh_CN": "点击节点选中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点" + }, + "labelPosition": "left" + }, + { + "property": "filter-node-method", + "label": { + "text": { + "zh_CN": "筛选函数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点筛选函数" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onCheck": { + "label": { + "zh_CN": "勾选节点后的事件" + }, + "description": { + "zh_CN": "勾选节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "currentNode", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNodeClick": { + "label": { + "zh_CN": "点击节点后的事件" + }, + "description": { + "zh_CN": "点击节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "node", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + }, + { + "name": "vm", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件实例" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["data", "show-checkbox"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "timeline", + "name": { + "zh_CN": "时间线" + }, + "component": "TinyTimeLine", + "description": "TimeLine 时间线", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TimeLine", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "horizontal", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "水平布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字横向布局" + } + }, + { + "property": "vertical", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "垂直布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "垂直布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字垂直布局" + } + }, + { + "property": "active", + "label": { + "text": { + "zh_CN": "选中值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "步骤条的选中步骤值" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "name": "配置基本信息", + "status": "ready" + }, + { + "name": "配置报价", + "status": "wait" + }, + { + "name": "完成报价", + "status": "wait" + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "时间线步骤条数据" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "节点的点击时触发" + }, + "description": { + "zh_CN": "节点的点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "点击节点的下标" + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前节点对象:{ name: 节点名称, time: 时间 }" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["active", "data"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tooltip", + "name": { + "zh_CN": "文字提示框" + }, + "component": "TinyTooltip", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tooltip", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 11, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 20, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "placement", + "label": { + "text": { + "zh_CN": "提示位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "Tooltip 的出现位置" + }, + "labelPosition": "left" + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "提示信息", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot#content 传入 DOM" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "是否可见" + } + }, + "defaultValue": true, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "状态是否可见" + } + }, + { + "property": "manual", + "label": { + "text": { + "zh_CN": "手动控制" + } + }, + "defaultValue": true, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "手动控制模式,设置为 true 后,mouseenter 和 mouseleave 事件将不会生效" + } + } + ] + } + ], + "events": {}, + "slots": { + "content": { + "label": { + "zh_CN": "提示内容" + }, + "description": { + "zh_CN": "自定义提示内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "content"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "popover", + "name": { + "zh_CN": "提示框" + }, + "component": "TinyPopover", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popover", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,手动控制是否可见的状态值" + }, + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "left" + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "click", + "value": "click" + }, + { + "label": "focus", + "value": "focus" + }, + { + "label": "hover", + "value": "hover" + }, + { + "label": "manual", + "value": "manual" + } + ] + } + }, + "description": { + "zh_CN": "触发方式,该属性的可选值为 click / focus / hover / manual,该属性的默认值为 click" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "为 popper 添加类名" + }, + "labelPosition": "left" + }, + { + "property": "visible-arrow", + "label": { + "text": { + "zh_CN": "显示箭头" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示 Tooltip 箭头" + } + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "添加到body上" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover弹窗是否添加到body上" + } + }, + { + "property": "arrow-offset", + "label": { + "text": { + "zh_CN": "箭头的位置偏移" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "箭头的位置偏移,该属性的默认值为 0" + } + }, + { + "property": "close-delay", + "label": { + "text": { + "zh_CN": "隐藏延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的隐藏延迟,单位为毫秒" + } + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "显示的内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot 传入 DOM" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover 是否可用" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "位置偏移量" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "出现位置的偏移量" + } + }, + { + "property": "open-delay", + "label": { + "text": { + "zh_CN": "显示延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的显示延迟,单位为毫秒" + } + }, + { + "property": "popper-options", + "label": { + "text": { + "zh_CN": "popper.js的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "popper.js 的参数" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "transform-origin", + "label": { + "text": { + "zh_CN": "旋转中心点" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "组件的旋转中心点,组件的旋转中心点" + } + }, + { + "property": "transition", + "label": { + "text": { + "zh_CN": "定义渐变动画" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "该属性的默认值为 fade-in-linear" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "宽度" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "手动控制是否可见的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的可见状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + } + ], + "blocks": [], + "snippets": [ + { + "group": "html", + "children": [ + { + "name": { + "zh_CN": "段落" + }, + "icon": "paragraph", + "screenshot": "", + "snippetName": "p", + "schema": { + "componentName": "p", + "children": "TinyEngine 前端可视化设计器致力于通过友好的用户交互提升业务应用的开发效率。" + } + }, + { + "name": { + "zh_CN": "链接" + }, + "icon": "link", + "screenshot": "", + "snippetName": "a", + "schema": { + "componentName": "a", + "children": "链接" + } + }, + { + "name": { + "zh_CN": "分隔线" + }, + "icon": "hr", + "screenshot": "", + "snippetName": "hr", + "schema": {} + }, + { + "name": { + "zh_CN": "标题" + }, + "icon": "h16", + "screenshot": "", + "snippetName": "h1", + "schema": { + "componentName": "h1", + "props": {}, + "children": "Heading" + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "input", + "schema": { + "componentName": "input", + "props": { + "type": "text", + "placeholder": "请输入" + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "icon": "video", + "screenshot": "", + "snippetName": "video", + "schema": { + "componentName": "video", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100", + "style": "border:1px solid #ccc" + } + } + }, + { + "name": { + "zh_CN": "图片" + }, + "icon": "Image", + "screenshot": "", + "snippetName": "img", + "schema": { + "componentName": "img", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100" + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "button", + "schema": { + "componentName": "button", + "props": {}, + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文案" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "table", + "screenshot": "", + "snippetName": "table", + "schema": { + "componentName": "table", + "props": { + "border": "1" + }, + "children": [ + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": "Month" + }, + { + "componentName": "td", + "children": "Savings" + } + ] + }, + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": "January" + }, + { + "componentName": "td", + "children": "100" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "form", + "schema": { + "componentName": "form", + "props": { + "action": "action" + }, + "children": [ + { + "componentName": "label", + "props": { + "for": "male" + }, + "children": "male" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + }, + { + "componentName": "br" + }, + { + "componentName": "label", + "props": { + "for": "Female" + }, + "children": "Female" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + } + ] + } + } + ] + }, + { + "group": "content", + "children": [ + { + "name": { + "zh_CN": "走马灯" + }, + "screenshot": "", + "snippetName": "tiny-carousel", + "icon": "carousel", + "schema": { + "componentName": "TinyCarousel", + "props": { + "height": "180px" + }, + "children": [ + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "screenshot": "", + "snippetName": "tiny-form", + "icon": "form", + "schema": { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "人员" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "密码" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "type": "password" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "" + }, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": "margin-right: 10px" + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "type": "primary" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "下拉框" + }, + "icon": "select", + "screenshot": "", + "snippetName": "TinySelect", + "schema": { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + } + } + }, + { + "name": { + "zh_CN": "开关" + }, + "icon": "switch", + "screenshot": "", + "snippetName": "TinySwitch", + "schema": { + "componentName": "TinySwitch", + "props": { + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "复选框组" + }, + "icon": "checkboxs", + "screenshot": "", + "snippetName": "TinyCheckboxGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": ["name1", "name2"], + "type": "checkbox", + "options": [ + { + "text": "复选框1", + "label": "name1" + }, + { + "text": "复选框2", + "label": "name2" + }, + { + "text": "复选框3", + "label": "name3" + } + ] + } + } + }, + { + "name": { + "zh_CN": "复选框拖拽按钮组" + }, + "icon": "checkboxgroup", + "screenshot": "", + "snippetName": "TinyCheckboxbuttonGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": [] + }, + "children": [ + { + "componentName": "TinyCheckboxButton", + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "对话框" + }, + "screenshot": "", + "snippetName": "TinyDialogBox", + "icon": "dialogbox", + "schema": { + "componentName": "TinyDialogBox", + "props": { + "visible": true, + "show-close": true, + "title": "dialogBox title" + }, + "children": [ + { + "componentName": "div" + } + ] + } + }, + { + "name": { + "zh_CN": "标签页" + }, + "icon": "tabs", + "screenshot": "", + "group": true, + "snippetName": "TinyTabs", + "schema": { + "componentName": "TinyTabs", + "props": { + "modelValue": "first" + }, + "children": [ + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页1", + "name": "first" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页2", + "name": "second" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "折叠面板" + }, + "screenshot": "", + "snippetName": "TinyCollapse", + "icon": "collapse", + "schema": { + "componentName": "TinyCollapse", + "props": { + "modelValue": "collapse1" + }, + "children": [ + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse1", + "title": "折叠项1" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse2", + "title": "折叠项2" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse3", + "title": "折叠项3" + }, + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "tinyGrid", + "schema": { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "index", + "width": 60 + }, + { + "type": "selection", + "width": 60 + }, + { + "field": "employees", + "title": "员工数" + }, + { + "field": "created_date", + "title": "创建日期" + }, + { + "field": "city", + "title": "城市" + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "icon": "popeditor", + "screenshot": "", + "snippetName": "TinyPopeditor", + "schema": { + "componentName": "TinyPopeditor", + "props": { + "modelValue": "", + "placeholder": "请选择", + "gridOp": { + "columns": [ + { + "field": "id", + "title": "ID", + "width": 40 + }, + { + "field": "name", + "title": "名称", + "showOverflow": "tooltip" + }, + { + "field": "province", + "title": "省份", + "width": 80 + }, + { + "field": "city", + "title": "城市", + "width": 80 + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司", + "city": "福州", + "province": "福建" + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "province": "广东" + }, + { + "id": "3", + "name": "RFV有限责任公司", + "city": "中山", + "province": "广东" + }, + { + "id": "4", + "name": "TGB科技有限公司", + "city": "龙岩", + "province": "福建" + }, + { + "id": "5", + "name": "YHN科技有限公司", + "city": "韶关", + "province": "广东" + }, + { + "id": "6", + "name": "WSX科技有限公司", + "city": "黄冈", + "province": "武汉" + } + ] + } + } + } + }, + { + "name": { + "zh_CN": "树" + }, + "icon": "tree", + "screenshot": "", + "snippetName": "TinyTree", + "schema": { + "componentName": "TinyTree", + "props": { + "data": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1", + "children": [ + { + "label": "三级 1-1-1" + } + ] + } + ] + }, + { + "label": "一级 2", + "children": [ + { + "label": "二级 2-1", + "children": [ + { + "label": "三级 2-1-1" + } + ] + }, + { + "label": "二级 2-2", + "children": [ + { + "label": "三级 2-2-1" + } + ] + } + ] + } + ] + } + } + }, + { + "name": { + "zh_CN": "文字提示框" + }, + "icon": "tooltip", + "screenshot": "", + "snippetName": "TinyTooltip", + "schema": { + "componentName": "TinyTooltip", + "props": { + "content": "Top Left 提示文字", + "placement": "top-start", + "manual": true, + "modelValue": true + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": {} + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "content" + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "提示框" + }, + "icon": "popover", + "screenshot": "", + "snippetName": "TinyPopover", + "schema": { + "componentName": "TinyPopover", + "props": { + "width": 200, + "title": "弹框标题", + "trigger": "manual", + "modelValue": true + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": "reference" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "default" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "分页" + }, + "icon": "pager", + "screenshot": "", + "snippetName": "TinyPager", + "schema": { + "componentName": "TinyPager", + "props": { + "layout": "total, sizes, prev, pager, next", + "total": 100, + "pageSize": 10, + "currentPage": 1 + } + } + }, + { + "name": { + "zh_CN": "面包屑" + }, + "icon": "breadcrumb", + "screenshot": "", + "snippetName": "TinyBreadcrumb", + "schema": { + "componentName": "TinyBreadcrumb", + "props": { + "options": [ + { + "to": "{ path: '/' }", + "label": "首页" + }, + { + "to": "{ path: '/breadcrumb' }", + "label": "产品" + }, + { + "replace": "true", + "label": "软件" + } + ] + } + } + } + ] + }, + { + "group": "general", + "children": [ + { + "name": { + "zh_CN": "Row" + }, + "icon": "row", + "screenshot": "", + "snippetName": "TinyRow", + "schema": { + "componentName": "TinyRow", + "props": {}, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + } + ] + } + }, + { + "name": { + "zh_CN": "Col" + }, + "icon": "col", + "screenshot": "", + "snippetName": "TinyCol", + "schema": { + "componentName": "TinyCol", + "props": { + "span": 12, + "style": { + "height": "30px", + "border": "1px solid #ccc" + } + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "TinyButton", + "schema": { + "componentName": "TinyButton", + "props": { + "text": "按钮文案" + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtons", + "screenshot": "", + "schema": { + "componentName": "div", + "props": {}, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "取消" + } + } + ] + }, + "configure": { + "isContainer": true + } + }, + { + "name": { + "zh_CN": "互斥按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtonGroup", + "screenshot": "", + "schema": { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "Button1", + "value": "1" + }, + { + "text": "Button2", + "value": "2" + }, + { + "text": "Button3", + "value": "3" + } + ], + "modelValue": "1" + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "TinyInput", + "schema": { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "单选" + }, + "icon": "radio", + "screenshot": "", + "snippetName": "TinyRadio", + "schema": { + "componentName": "TinyRadio", + "props": { + "label": "1", + "text": "单选文本" + } + } + }, + { + "name": { + "zh_CN": "复选框" + }, + "icon": "checkbox", + "screenshot": "", + "snippetName": "TinyCheckbox", + "schema": { + "componentName": "TinyCheckbox", + "props": { + "text": "复选框文案" + } + } + } + ] + }, + { + "group": "navigation", + "children": [ + { + "name": { + "zh_CN": "搜索框" + }, + "icon": "search", + "screenshot": "", + "snippetName": "TinySearch", + "schema": { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + } + } + }, + { + "name": { + "zh_CN": "时间线" + }, + "icon": "timeline", + "screenshot": "", + "snippetName": "TinyTimeLine", + "schema": { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "已下单" + }, + { + "name": "运输中" + }, + { + "name": "已签收" + } + ] + } + } + } + ] + } + ] + } + } +} diff --git a/mockServer/assets/uploads/.gitkeep b/mockServer/assets/uploads/.gitkeep new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/mockServer/assets/uploads/.gitkeep @@ -0,0 +1 @@ +1 diff --git a/mockServer/build/dev-server.js b/mockServer/build/dev-server.js new file mode 100644 index 000000000..f32a8a0b6 --- /dev/null +++ b/mockServer/build/dev-server.js @@ -0,0 +1,14 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +require('@babel/register') +require('../src/app') diff --git a/mockServer/config/config.js b/mockServer/config/config.js new file mode 100644 index 000000000..dcd70e9a1 --- /dev/null +++ b/mockServer/config/config.js @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +module.exports = { + port: process.env.MOCK_PORT || 9090, + env: process.env.NODE_ENV || 'development' // Current mode +} diff --git a/mockServer/gulpfile.js b/mockServer/gulpfile.js new file mode 100644 index 000000000..c49d674db --- /dev/null +++ b/mockServer/gulpfile.js @@ -0,0 +1,109 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +const gulp = require('gulp') +const eslint = require('gulp-eslint') +const nodemon = require('gulp-nodemon') +const friendlyFormatter = require('eslint-friendly-formatter') + +let jsScript = 'node' +if (process.env.npm_config_argv !== undefined && process.env.npm_config_argv.indexOf('debug') > 0) { + jsScript = 'node debug' +} + +function lintOne(aims) { + return gulp + .src(aims) + .pipe(eslint({ configFile: './.eslintrc.js' })) + .pipe(eslint.format(friendlyFormatter)) + .pipe( + eslint.results((results) => { + // Called once for all ESLint results. + }) + ) +} + +gulp.task('ESlint', () => { + return gulp + .src(['src/**/*.js', '!node_modules/**']) + .pipe(eslint({ configFile: './.eslintrc.js' })) + .pipe(eslint.format(friendlyFormatter)) + .pipe(eslint.results((results) => {})) +}) + +gulp.task( + 'ESlint_nodemon', + gulp.series('ESlint', () => { + const stream = nodemon({ + script: 'build/dev-server.js', + execMap: { + js: jsScript + }, + tasks: function (changedFiles) { + lintOne(changedFiles) + return [] + }, + verbose: true, + ignore: ['build/*.js', 'dist/*.js', 'nodemon.json', '.git', 'node_modules/**/node_modules', 'gulpfile.js'], + env: { + NODE_ENV: 'development' + }, + ext: 'js json' + }) + + return stream + .on('restart', () => { + // 重启项目 + }) + .on('crash', () => { + // 重启工程:restart the server in 20 seconds:stream.emit('restart', 20) + }) + }) +) + +gulp.task('nodemon', () => { + return nodemon({ + script: 'build/dev-server.js', + execMap: { + js: jsScript + }, + verbose: true, + ignore: ['build/*.js', 'dist/*.js', 'nodemon.json', '.git', 'node_modules/**/node_modules', 'gulpfile.js'], + env: { + NODE_ENV: 'development' + }, + ext: 'js json' + }) +}) + +gulp.task('default', () => { + const stream = nodemon({ + script: 'build/dev-server.js', + execMap: { + js: jsScript + }, + verbose: true, + ignore: ['build/*.js', 'dist/*.js', 'nodemon.json', '.git', 'node_modules/**/node_modules', 'gulpfile.js'], + env: { + NODE_ENV: 'development' + }, + ext: 'js json' + }) + + return stream + .on('restart', () => { + // 重启项目 + }) + .on('crash', () => { + // 重启工程:restart the server in 20 seconds:stream.emit('restart', 20) + }) +}) diff --git a/mockServer/logs/out.log b/mockServer/logs/out.log new file mode 100644 index 000000000..9766475a4 --- /dev/null +++ b/mockServer/logs/out.log @@ -0,0 +1 @@ +ok diff --git a/mockServer/package.json b/mockServer/package.json new file mode 100644 index 000000000..7b51d4daf --- /dev/null +++ b/mockServer/package.json @@ -0,0 +1,69 @@ +{ + "name": "@opentiny/tiny-engine-mock", + "version": "1.0.3", + "publishConfig": { + "access": "public" + }, + "description": "mock服务", + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "mockServer" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "scripts": { + "start": "gulp nodemon", + "dev": "gulp", + "build": "babel src -d dist", + "production": "node dist/app.js", + "test": "jest", + "lint": "eslint --fix ." + }, + "dependencies": { + "@opentiny/tiny-engine-dsl-vue": "^1.0.3", + "@seald-io/nedb": "^4.0.2", + "fs-extra": "^11.1.1", + "glob": "^10.3.4", + "koa": "^2.11.0", + "koa-body": "^4.1.1", + "koa-compose": "^4.1.0", + "koa-jwt": "^3.6.0", + "koa-router": "^8.0.8", + "koa-static2": "^0.1.8" + }, + "devDependencies": { + "@babel/cli": "^7.8.4", + "@babel/core": "^7.9.0", + "@babel/plugin-external-helpers": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.9.0", + "@babel/preset-env": "^7.9.5", + "@babel/register": "^7.9.0", + "@babel/runtime": "^7.9.2", + "babel-core": "^7.0.0-bridge.0", + "babel-eslint": "^10.1.0", + "babel-jest": "^25.3.0", + "eslint": "^6.8.0", + "eslint-config-standard": "^14.1.1", + "eslint-friendly-formatter": "^4.0.1", + "eslint-plugin-html": "^6.0.1", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-jest": "^23.8.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "gulp": "^4.0.2", + "gulp-eslint": "^6.0.0", + "gulp-nodemon": "^2.5.0", + "jest": "^25.3.0", + "koa-logger": "^3.2.1" + }, + "engines": { + "node": ">= 7.8.0", + "npm": ">= 4.2.0" + } +} diff --git a/mockServer/pm2.js b/mockServer/pm2.js new file mode 100644 index 000000000..b4de90cfc --- /dev/null +++ b/mockServer/pm2.js @@ -0,0 +1,31 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +module.exports = { + apps: [ + { + name: 'RESRful API Server', + script: './dist/app.js', + watch: false, // 默认关闭watch 可替换为 ['src'] + ignoreWatch: ['node_modules', 'build', 'logs'], + outFile: '/logs/out.log', // 日志输出 + errorFile: '/logs/error.log', // 错误日志 + maxMemoryRestart: '2G', // 超过多大内存自动重启,仅防止内存泄露有意义,需要根据自己的业务设置 + env: { + NODE_ENV: 'production' + }, + execMode: 'cluster', // 开启多线程模式,用于负载均衡 + instances: 'max', // 启用多少个实例,可用于负载均衡 + autorestart: true // 程序崩溃后自动重启 + } + ] +} diff --git a/mockServer/src/app.js b/mockServer/src/app.js new file mode 100644 index 000000000..26c5b341c --- /dev/null +++ b/mockServer/src/app.js @@ -0,0 +1,61 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import Koa2 from 'koa' +import KoaBody from 'koa-body' +import KoaStatic from 'koa-static2' +import path from 'path' +import { env, port } from '../config/config' +import ErrorRoutesCatch from './middleware/ErrorRoutesCatch' +import ErrorRoutes from './routes/error-routes' +import MainRoutes from './routes/main-routes' + +const app = new Koa2() +app + .use((ctx, next) => { + ctx.set('Access-Control-Allow-Origin', '*') + ctx.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') + ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS') + ctx.set('Access-Control-Allow-Credentials', true) // 允许带上 cookie + return next() + }) + .use(ErrorRoutesCatch()) + .use(KoaStatic('assets', path.resolve(__dirname, '../assets'))) // Static resource + .use( + KoaBody({ + multipart: true, + parsedMethods: ['POST', 'PUT', 'PATCH', 'GET', 'HEAD', 'DELETE'], // parse GET, HEAD, DELETE requests + formidable: { + uploadDir: path.join(__dirname, '../assets/uploads/tmp') + }, + jsonLimit: '50mb', + formLimit: '50mb', + textLimit: '50mb' + }) + ) // Processing request + .use(MainRoutes.routes()) + .use(MainRoutes.allowedMethods()) + .use(ErrorRoutes()) + +if (env === 'development') { + // logger + app.use((ctx, next) => { + const start = new Date() + return next().then(() => { + const ms = new Date() - start + }) + }) +} + +app.listen(port) + +export default app diff --git a/mockServer/src/database/blockCategories.db b/mockServer/src/database/blockCategories.db new file mode 100644 index 000000000..85744f5a5 --- /dev/null +++ b/mockServer/src/database/blockCategories.db @@ -0,0 +1,3 @@ +{"id":"L0fyFYECrNiRZMiX","app":{"id":918,"name":"portal-app","app_website":null,"platform":{"id":897,"name":"portal-platform"},"obs_url":"","created_by":null,"updated_by":null,"created_at":"2022-06-08T07:19:01.000Z","updated_at":"2023-09-04T08:55:40.000Z","state":null,"published":false,"createdBy":86,"updatedBy":564,"tenant":1,"home_page":"NTJ4MjvqoVj8OVsc","css":null,"config":{},"git_group":"","project_name":"","constants":null,"data_handler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"},"description":"demo应用","latest":22,"platform_history":null,"editor_url":"","branch":"develop","visit_url":null,"is_demo":null,"image_url":"","is_default":true,"template_type":null,"set_template_time":null,"set_template_by":null,"set_default_by":169,"framework":"Vue","global_state":[],"default_lang":null,"extend_config":{"business":{"serviceName":"","endpointName":"cce","endpointId":"ee","serviceId":"ee","router":"ee"},"env":{"alpha":{"regions":[{"name":"","baseUrl":"","isDefault":false}],"isDefault":true}},"type":"console"},"assets_url":"","data_hash":"ae128e37f6bc378f1b9c21d75bd05551","can_associate":true,"data_source_global":{"dataHandler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"}}},"name":"我的分类","desc":"","blocks":["ALvDb0JD8atzd3nA"],"category_id":"qukuaifenlei","_id":"L0fyFYECrNiRZMiX"} +{"$$indexCreated":{"fieldName":"name","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"name","unique":true}} diff --git a/mockServer/src/database/blockGroups.db b/mockServer/src/database/blockGroups.db new file mode 100644 index 000000000..fe904aae8 --- /dev/null +++ b/mockServer/src/database/blockGroups.db @@ -0,0 +1,3 @@ +{"id":"b57MCCORYPGjgL23","app":{"id":918,"name":"portal-app","app_website":null,"platform":{"id":897,"name":"portal-platform"},"obs_url":"","created_by":null,"updated_by":null,"created_at":"2022-06-08T07:19:01.000Z","updated_at":"2023-09-04T08:55:40.000Z","state":null,"published":false,"createdBy":86,"updatedBy":564,"tenant":1,"home_page":"NTJ4MjvqoVj8OVsc","css":null,"config":{},"git_group":"","project_name":"","constants":null,"data_handler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"},"description":"demo应用","latest":22,"platform_history":null,"editor_url":"","branch":"develop","visit_url":null,"is_demo":null,"image_url":"","is_default":true,"template_type":null,"set_template_time":null,"set_template_by":null,"set_default_by":169,"framework":"Vue","global_state":[],"default_lang":null,"extend_config":{"business":{"serviceName":"","endpointName":"cce","endpointId":"ee","serviceId":"ee","router":"ee"},"env":{"alpha":{"regions":[{"name":"","baseUrl":"","isDefault":false}],"isDefault":true}},"type":"console"},"assets_url":"","data_hash":"ae128e37f6bc378f1b9c21d75bd05551","can_associate":true,"data_source_global":{"dataHandler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"}}},"name":"我的区块","desc":"","blocks":["ALvDb0JD8atzd3nA"],"_id":"b57MCCORYPGjgL23"} +{"$$indexCreated":{"fieldName":"name","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"name","unique":true}} diff --git a/mockServer/src/database/blocks.db b/mockServer/src/database/blocks.db new file mode 100644 index 000000000..387c640b2 --- /dev/null +++ b/mockServer/src/database/blocks.db @@ -0,0 +1,4 @@ +{"id":"ALvDb0JD8atzd3nA","label":"PortalHome","name_cn":null,"framework":"Vue","content":{"state":{"logoUrl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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","loginImgUrl":"data:image/png;base64,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"},"componentName":"Block","css":".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }","props":{},"children":[{"componentName":"div","props":{"className":"home","style":"height: 100vh; display: flex;"},"id":"357534ab","children":[{"componentName":"TinyRow","props":{"align":"middle","flex":true,"style":""},"children":[{"componentName":"TinyCol","props":{"span":6,"style":"text-align: center; display: flex; justify-content: center;"},"id":"f01b66ea","children":[{"componentName":"div","props":{"style":"width: 90%; height: 50%;"},"id":"8197d016","children":[{"componentName":"Img","props":{"style":"width: 100%; height: 100%;","src":{"type":"JSExpression","value":"this.state.loginImgUrl"}},"id":"471e30f3"}]}]},{"componentName":"TinyCol","props":{"span":"6","style":"text-align: center;"},"id":"781d5b46","children":[{"componentName":"div","props":{"className":"home-content","style":"font-size: 14px;"},"id":"08638b8a","children":[{"componentName":"div","props":{"className":"text"},"id":"18712ee2","children":[{"componentName":"div","props":{"style":"font-size: 16px;"},"id":"07e6794c","children":[{"componentName":"div","props":{"className":"logo"},"id":"07cad264","children":[{"componentName":"Img","props":{"style":"width: 105px; height: 105px; border-radius: 100px;","src":{"type":"JSExpression","value":"this.state.logoUrl"}},"id":"f4489e27"}]},{"componentName":"Text","props":{"text":"TinyLowCode 低代码平台","style":"display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;","ref":"","className":"title"},"id":"e82108ce"},{"componentName":"Text","props":{"text":"致力于通过友好的用户交互提升业务的开发效率","style":"display: block; margin-bottom: 12px;"},"id":"65a2f1ad"},{"componentName":"Text","props":{"text":"欢迎一起来解锁~~","style":"margin-top: 12px;"},"id":"bb879abb"}]},{"componentName":"div","props":{"className":"btn"},"id":"44b2bcbd","children":[{"componentName":"TinyButton","props":{"text":"立即体验","round":true,"type":"primary","style":"margin-top: 40px;"},"id":"9580c5e7"},{"componentName":"div","props":{"className":"account"},"id":"6a8ffa3e","children":[{"componentName":"div","props":{"style":"font-size: 14px; margin-top: 4px;"},"id":"bfc6eb6c","children":[{"componentName":"Text","props":{"text":"已有团队?","style":"color: #777777;"},"id":"3d993264"},{"componentName":"Text","props":{"text":"立即进入","style":"color: #5e7ce0;","onClick":{"type":"JSExpression","value":"this.handleClick(event)"}},"id":"21390118"}]}]}]}]}]}]}],"id":"4545fea2"}]}],"methods":{"handleClick":{"type":"JSFunction","value":"function (event) {this.emit('goto-home', event)\n}"}},"fileName":"PortalHome","meta":{"id":1722,"parentId":"0","group":"staticPages","title":null,"occupier":null,"isHome":false,"description":"","router":"/","rootElement":"div","creator":"开发者","gmt_create":"2022-06-08 03:25:51","gmt_modified":"2022-06-09 05:19:09"},"id":1722,"schema":{"properties":[{"label":{"zh_CN":"基础信息"},"description":{"zh_CN":"基础信息"},"collapse":{"number":6,"text":{"zh_CN":"显示更多"}},"content":[]}],"events":{"onGotoHome":{"label":{"zh_CN":"点击立即进入触发方法"},"description":{"zh_CN":"点击立即进入触发方法"},"type":"event","functionInfo":{"params":[],"returns":{}},"defaultValue":"","linked":{"id":"21390118","componentName":"Text","event":"onClick"}}},"slots":{}},"dataSource":{},"i18n":{}},"description":null,"path":"common/components/home","screenshot":"","created_app":null,"tags":"","categories":[],"occupier":null,"isDefault":null,"isOfficial":true,"created_at":"2022-06-13T07:56:51.000Z","updated_at":"2023-01-13T08:12:51.000Z","assets":{"material":[],"scripts":["http://localhost:9090/assets/js/989web-components.es.js","http://localhost:9090/assets/js/989web-components.umd.js"],"styles":[]},"createdBy":86,"current_history":1655,"public":1,"tiny_reserved":false,"author":null,"content_blocks":null,"current_version":"x","is_published":true,"_id":"ALvDb0JD8atzd3nA"} +{"id":"V85zd9sWEya25Kxh","label":"PortalBlock","name_cn":null,"framework":"Vue","content":{"state":{},"methods":{},"componentName":"Block","fileName":"PortalBlock","css":"","props":{},"children":[{"componentName":"div","props":{"style":"font-size: 18px; height: 40px; border-bottom: 1px solid rgb(223, 225, 230); margin-top: 20px;"},"id":"d38cea57","children":[{"componentName":"Icon","props":{"name":"IconChevronLeft"},"id":"86c6e6b0"},{"componentName":"Text","props":{"text":"编辑物料资产包 | ","style":"margin-left: 10px; font-weight: bold;"},"id":"38d9fbc8"},{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"this.props.blockName"},"style":"margin-left: 10px; font-weight: bold;"},"id":"6cd76396"}]}],"schema":{"properties":[{"label":{"zh_CN":"基础信息"},"description":{"zh_CN":"基础信息"},"collapse":{"number":6,"text":{"zh_CN":"显示更多"}},"content":[{"property":"blockName","type":"String","defaultValue":"MT0526-React 1.0","label":{"text":{"zh_CN":"区块名称"}},"cols":12,"rules":[],"handle":{"getter":"","setter":""},"hidden":false,"required":true,"readOnly":false,"disabled":false,"widget":{"component":"MetaInput","props":{"modelValue":"MT0526-React 1.0"}}}]}],"events":{},"slots":{}},"dataSource":{}},"description":null,"path":"portal","screenshot":"","created_app":null,"tags":null,"categories":[],"occupier":{"id":86,"username":"开发者","resetPasswordToken":"developer"},"isDefault":null,"isOfficial":null,"created_at":"2022-06-28T08:59:54.000Z","updated_at":"2023-01-13T08:20:09.000Z","assets":{"material":[],"scripts":["http://localhost:9090/assets/js/1005web-components.es.js","http://localhost:9090/assets/js/1005web-components.umd.js"],"styles":[]},"createdBy":{"id":86,"username":"开发者","resetPasswordToken":"developer"},"current_history":1665,"public":1,"tiny_reserved":false,"author":null,"content_blocks":null,"public_scope_tenants":[],"histories_length":1,"is_published":true,"_id":"V85zd9sWEya25Kxh"} +{"$$indexCreated":{"fieldName":"label","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"label","unique":true}} diff --git a/mockServer/src/database/defaultData/default.db b/mockServer/src/database/defaultData/default.db new file mode 100644 index 000000000..e9fbf4960 --- /dev/null +++ b/mockServer/src/database/defaultData/default.db @@ -0,0 +1,4 @@ +{"name":"createVm","id":"NTJ4MjvqoVj8OVsc","app":"918","route":"createVm","page_content":{"state":{"dataDisk":[1,2,3]},"methods":{},"componentName":"Page","css":"body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}","props":{},"children":[{"componentName":"div","props":{"style":"padding-bottom: 10px; padding-top: 10px;"},"id":"2b2cabf0","children":[{"componentName":"TinyTimeLine","props":{"active":"2","data":[{"name":"基础配置"},{"name":"网络配置"},{"name":"高级配置"},{"name":"确认配置"}],"horizontal":true,"style":"border-radius: 0px;"},"id":"dd764b17"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"id":"30c94cc8","children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"计费模式"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"包年/包月","value":"1"},{"text":"按需计费","value":"2"}],"modelValue":"1"},"id":"a8d84361"}],"id":"9f39f3e7"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"乌兰察布二零一","value":"1"}],"modelValue":"1","style":"border-radius: 0px; margin-right: 10px;"},"id":"c97ccd99"},{"componentName":"Text","props":{"text":"温馨提示:页面左上角切换区域","style":"background-color: [object Event]; color: #8a8e99; font-size: 12px;"},"id":"20923497"},{"componentName":"Text","props":{"text":"不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度","style":"display: block; color: #8a8e99; border-radius: 0px; font-size: 12px;"},"id":"54780a26"}],"id":"4966384d"},{"componentName":"TinyFormItem","props":{"label":"可用区","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"可用区1","value":"1"},{"text":"可用区2","value":"2"},{"text":"可用区3","value":"3"}],"modelValue":"1"},"id":"6184481b"}],"id":"690837bf"}],"id":"b6a425d4"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"CPU架构"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"x86计算","value":"1"},{"text":"鲲鹏计算","value":"2"}],"modelValue":"1"},"id":"7d33ced7"}],"id":"05ed5a79"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"div","props":{"style":"display: flex; justify-content: flex-start; align-items: center;"},"id":"606edf78","children":[{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"id":"f3f98246","children":[{"componentName":"Text","props":{"text":"vCPUs","style":"width: 80px;"},"id":"c287437e"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"4c43286b"}]},{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"children":[{"componentName":"Text","props":{"text":"内存","style":"width: 80px; border-radius: 0px;"},"id":"38b8fa1f"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"cd33328e"}],"id":"2b2c678f"},{"componentName":"div","props":{"style":"display: flex; align-items: center;"},"children":[{"componentName":"Text","props":{"text":"规格名称","style":"width: 80px;"},"id":"d3eb6352"},{"componentName":"TinySearch","props":{"modelValue":"","placeholder":"输入关键词"},"id":"21cb9282"}],"id":"b8e0f35c"}]},{"componentName":"div","props":{"style":"border-radius: 0px;"},"id":"5000c83e","children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"通用计算型","value":"1"},{"text":"通用计算增强型","value":"2"},{"text":"内存优化型","value":"3"},{"text":"内存优化型","value":"4"},{"text":"磁盘增强型","value":"5"},{"text":"超高I/O型","value":"6"},{"text":"GPU加速型","value":"7"}],"modelValue":"1","style":"border-radius: 0px; margin-top: 12px;"},"id":"b8724703"},{"componentName":"TinyGrid","props":{"editConfig":{"trigger":"click","mode":"cell","showStatus":true},"columns":[{"type":"radio","width":60},{"field":"employees","title":"规格名称"},{"field":"created_date","title":"vCPUs | 内存(GiB)","sortable":true},{"field":"city","title":"CPU","sortable":true},{"title":"基准 / 最大带宽\t","sortable":true},{"title":"内网收发包","sortable":true}],"data":[{"id":"1","name":"GFD科技有限公司","city":"福州","employees":800,"created_date":"2014-04-30 00:56:00","boole":false},{"id":"2","name":"WWW科技有限公司","city":"深圳","employees":300,"created_date":"2016-07-08 12:36:22","boole":true}],"style":"margin-top: 12px; border-radius: 0px;","auto-resize":true},"id":"77701c25"},{"componentName":"div","props":{"style":"margin-top: 12px; border-radius: 0px;"},"id":"3339838b","children":[{"componentName":"Text","props":{"text":"当前规格","style":"width: 150px; display: inline-block;"},"id":"203b012b"},{"componentName":"Text","props":{"text":"通用计算型 | Si2.large.2 | 2vCPUs | 4 GiB","style":"font-weight: 700;"},"id":"87723f52"}]}]}],"id":"657fb2fc"}],"id":"d19b15cf"}],"id":"9991228b"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"镜像","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"公共镜像","value":"1"},{"text":"私有镜像","value":"2"},{"text":"共享镜像","value":"3"}],"modelValue":"1"},"id":"922b14cb"},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"id":"6b679524","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 170px; margin-right: 10px;"},"id":"4851fff7"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 340px;"},"id":"a7183eb7"}]},{"componentName":"div","props":{"style":"margin-top: 12px;"},"id":"57aee314","children":[{"componentName":"Text","props":{"text":"请注意操作系统的语言类型。","style":"color: #e37d29;"},"id":"56d36c27"}]}],"id":"e3b02436"}],"id":"59aebf2b"}],"id":"87ff7b99"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"系统盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"display: flex;"},"id":"cddba5b8","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"a97fbe15"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"1cde4c0f"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限240,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px;"},"id":"2815d82d"}]}],"id":"50239a3a"}],"id":"e8582986"},{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"数据盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"margin-top: 12px; display: flex;"},"id":"728c9825","children":[{"componentName":"Icon","props":{"style":"margin-right: 10px; width: 16px; height: 16px;","name":"IconPanelMini"},"id":"fded6930"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"62734e3f"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"667c7926"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限600,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px; margin-right: 10px;"},"id":"e7bc36d6"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px;"},"id":"1bd56dc0"}],"loop":{"type":"JSExpression","value":"this.state.dataDisk"}},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"children":[{"componentName":"Icon","props":{"name":"IconPlus","style":"width: 16px; height: 16px; margin-right: 10px;"},"id":"65c89f2b"},{"componentName":"Text","props":{"text":"增加一块数据盘","style":"font-size: 12px; border-radius: 0px; margin-right: 10px;"},"id":"cb344071"},{"componentName":"Text","props":{"text":"您还可以挂载 21 块磁盘(云硬盘)","style":"color: #8a8e99; font-size: 12px;"},"id":"80eea996"}],"id":"e9e530ab"}],"id":"078e03ef"}],"id":"ccef886e"}],"id":"0fb7bd74"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-color: #ffffff; padding-top: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; position: fixed; inset: auto 0% 0% 0%; height: 80px; line-height: 80px; border-radius: 0px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[],"id":"21ed4475"},{"componentName":"TinyRow","props":{"style":"border-radius: 0px; height: 100%;"},"children":[{"componentName":"TinyCol","props":{"span":"8"},"id":"b9d051a5","children":[{"componentName":"TinyRow","props":{"style":"border-radius: 0px;"},"children":[{"componentName":"TinyCol","props":{"span":"5","style":"display: flex;"},"id":"02352776","children":[{"componentName":"Text","props":{"text":"购买量","style":"margin-right: 10px;"},"id":"0cd9ed5c"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"2f9cf442"},{"componentName":"Text","props":{"text":"台"},"id":"facd4481"}]},{"componentName":"TinyCol","props":{"span":"7"},"id":"82b6c659","children":[{"componentName":"div","props":{},"id":"9cd65874","children":[{"componentName":"Text","props":{"text":"配置费用","style":"font-size: 12px;"},"id":"b5a0a0da"},{"componentName":"Text","props":{"text":"¥1.5776","style":"padding-left: 10px; padding-right: 10px; color: #de504e;"},"id":"d9464214"},{"componentName":"Text","props":{"text":"/小时","style":"font-size: 12px;"},"id":"af7cc5e6"}]},{"componentName":"div","props":{},"id":"89063830","children":[{"componentName":"Text","props":{"text":"参考价格,具体扣费请以账单为准。","style":"font-size: 12px; border-radius: 0px;"},"id":"d8995fbc"},{"componentName":"Text","props":{"text":"了解计费详情","style":"font-size: 12px; color: #344899;"},"id":"b383c3e2"}]}]}],"id":"94fc0e43"}]},{"componentName":"TinyCol","props":{"span":"4","style":"display: flex; flex-direction: row-reverse; border-radius: 0px; height: 100%; justify-content: flex-start; align-items: center;"},"id":"10b73009","children":[{"componentName":"TinyButton","props":{"text":"下一步: 网络配置","type":"danger","style":"max-width: unset;"},"id":"0b584011"}]}],"id":"d414a473"}],"id":"e8ec029b"}],"fileName":"createVm"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"_id":"NTJ4MjvqoVj8OVsc"} +{"name":"ComponentsSetting","id":"fh7U0xYetFGA5Ieu","app":"918","route":"componentsSetting","page_content":{"state":{"components":[{"name":"表单","text":"由按钮、输入框、选择器、单选框、多选框等控件组成..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."}],"pageConfig":{"component":{"type":"JSResource","value":"this.utils.Pager"},"attrs":{"currentPage":1,"pageSize":50,"pageSizes":[10,20,50],"total":0,"layout":"sizes,total, prev, pager, next, jumper"}},"componentsTotal":0,"renderf5956ed2":[{"label":"按更新时间","value":"updata","_RID":"row_6"},{"label":"按创建时间","value":"create"}],"renderb52aeac9":[{"framework":"","materials":"","name":"表单","description":"由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据","id":"021fd6b6","_RID":"row_1"},{"framework":"","materials":"","name":"按钮","description":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型","id":"84d239bb","_RID":"row_2"},{"framework":"","materials":"","name":"表单项","description":"Form 组件下的 FormItem 配置","id":"490f8a00","_RID":"row_3"},{"framework":"","materials":"","name":"开关","description":"关闭或打开","id":"c259b8b3","_RID":"row_4"},{"framework":"","materials":"","name":"互斥按钮组","description":"以按钮组的方式出现,常用于多项类似操作","id":"083ed9c7","_RID":"row_5"},{"framework":"","materials":"","name":"提示框","description":"Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画","id":"09136cea","_RID":"row_6"},{"framework":"","materials":"","name":"文字提示框","description":"动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信","id":"a63b57d5","_RID":"row_7"},{"framework":"","materials":"","name":"树","description":"可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单","id":"a0f6e8a3","_RID":"row_8"},{"framework":"","materials":"","name":"分页","description":"当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件","id":"d1aa18fc","_RID":"row_9"},{"framework":"","materials":"","name":"表格","description":"提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等","id":"ca49cc52","_RID":"row_10"},{"framework":"","materials":"","name":"搜索框","description":"指定条件对象进行搜索数据","id":"4e20ecc9"},{"framework":"","materials":"","name":"折叠面板","description":"内容区可指定动态页面或自定义 html 等,支持展开收起操作","id":"6b093ee5"},{"framework":"","materials":"","name":"对话框","description":"模态对话框,在浮层中显示,引导用户进行相关操作","id":"0a09abc0"},{"framework":"","materials":"","name":"标签页签项","description":"tab页签","id":"f814b901"},{"framework":"","materials":"","name":"单选","description":"用于配置不同场景的选项,在一组备选项中进行单选","id":"c5ae797c"},{"framework":"","materials":"","name":"弹出编辑","description":"该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件","id":"33d0c590"},{"framework":"","materials":"","name":"下拉框","description":"Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件","id":"16711dfa"},{"framework":"","materials":"","name":"折叠面板项","description":"内容区可指定动态页面或自定义 html 等,支持展开收起操作","id":"a9fd190a"},{"framework":"","materials":"","name":"复选框","description":"用于配置不同场景的选项,提供用户可在一组选项中进行多选","id":"a7dfa9ec"},{"framework":"","materials":"","name":"复选框按钮","description":"用于配置不同场景的选项,提供用户可在一组选项中进行多选","id":"c9071a7b"},{"framework":"","materials":"","name":"输入框","description":"通过鼠标或键盘输入字符","id":"d4bb8330"},{"framework":"","materials":"","name":"时间线","description":"时间线","id":"ced3dc83"}],"render7e97d9c7":[{"name":"标签页","description":"分隔内容上有关联但属于不同类别的数据集合","id":"a2b3e681","_RID":"row_1"},{"name":"走马灯","description":"常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现","id":"311fd1ae","_RID":"row_2"},{"name":"日期选择器","description":"用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式","id":"8d38b248","_RID":"row_3"},{"name":"布局列","description":"列配置信息","id":"1f6940d8"}]},"methods":{"linkClick":{"type":"JSFunction","value":"function linkClick() {\n location.href = 'http://10.37.114.118:3000/my-platform/create';\n}"},"query":{"type":"JSFunction","value":"function query(name) {\n this.state.components.fillter((e) => {\n return e.name !== name;\n });\n}"},"getTableData":{"type":"JSFunction","value":"function getTableData() {\n return new Promise((resolve, reject) => {\n this.dataSourceMap['timeData'].load().then((res) => {\n resolve({ result: [], page: { total: 0 } });\n });\n });\n}"},"clearSelected":{"type":"JSFunction","value":"function clearSelected(event) {\n this.dataSourceMap['selectedComponents'] = this.dataSourceMap['selectedComponents'] || [];\n this.dataSourceMap['selectedComponents']?.map((e) => {\n this.dataSourceMap['componentList'].push(e);\n });\n this.dataSourceMap['selectedComponents'] = [];\n}"}},"componentName":"Page","css":".components-box{\r\n height:900px;\r\n display: flex;\r\n}\r\n.components-box-left{\r\n width: 270px;\r\n}\r\n.components-box-right{\r\n width:50%;\r\n}\r\n.components-box-right-add{\r\n width: 100%;\r\n height: 200px;\r\n}\r\n.mgr20{\r\n margin-right: 20px;\r\n}","props":{},"children":[{"componentName":"div","props":{},"id":"2a5d4622","children":[{"componentName":"TinyGrid","props":{"editConfig":{"trigger":"click","mode":"cell","showStatus":true},"columns":[{"type":"index","width":60},{"type":"selection","width":60},{"field":"employees","title":"员工数"},{"field":"created_date","title":"创建日期"},{"field":"city","title":"城市"}],"data":[{"id":"1","name":"GFD科技有限公司","city":"福州","employees":800,"created_date":"2014-04-30 00:56:00","boole":false},{"id":"2","name":"WWW科技有限公司","city":"深圳","employees":300,"created_date":"2016-07-08 12:36:22","boole":true}]},"id":"3635454e"}]},{"componentName":"PortalHeader","props":{},"componentType":"Block","id":"60284cf1"},{"componentName":"portalBlock","props":{},"componentType":"Block","id":"6911db84"},{"componentName":"div","props":{"style":"height: 80px; width: 87%; margin: 0 auto; margin-bottom: 20px; margin-top: 20px; padding-left: 20px; padding-top: 30px; background: rgb(242, 245, 252);"},"id":"436ecc4a","children":[{"componentName":"Text","props":{"text":" 物料资产包简介","style":"color: rgb(138, 142, 153);"},"id":"16ad7aa9"},{"componentName":"Text","props":{"text":"调试构建报错","style":"margin-left: 10px; margin-right: 10px;"},"id":"ab44d8ea"},{"componentName":"Icon","props":{"name":"IconEdit"},"id":"8b6be3c2"},{"componentName":"div","props":{},"id":"848e3e8a","children":[{"componentName":"Text","props":{"text":"发布地址","style":"color: rgb(138, 142, 153);"},"id":"cd51ad2c"},{"componentName":"Text","props":{"text":"http://10.37.114.118:3000/my-platform/create","style":"margin-left: 20px; margin-right: 10px; color: rgb(36, 150, 255);","onClick":{"type":"JSExpression","value":"this.linkClick"}},"id":"3ed13633"},{"componentName":"Icon","props":{"name":"IconEdit"},"id":"16b75d9f"}]}]},{"componentName":"div","props":{"className":"components-box","style":"width: 88%; margin: 0 auto; border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; padding-top: 40px; padding-bottom: 40px; height: 1200px;"},"id":"c880007b","children":[{"componentName":"div","props":{"className":"components-box-left","style":"border-right-width: 2px; border-right-style: solid; border-color: rgb(223, 225, 230); position: relative;"},"id":"3525fc52","children":[{"componentName":"TinyTimeLine","props":{"active":"1","data":[{"name":"添加组件"},{"name":"添加区块"}],"horizontal":false,"className":"components-box-left","vertical":true},"id":"1e391ed7"},{"componentName":"div","props":{},"id":"81ccd767","children":[{"componentName":"div","props":{"style":"height: 300px; position: absolute; bottom: 20px; left: 20px;"},"id":"bc11d593","children":[{"componentName":"div","props":{},"id":"50ed6e39","children":[{"componentName":"Text","props":{"text":"组件示意图 "},"id":"fa6b920c"}]},{"componentName":"div","props":{},"id":"9ca346e6","children":[{"componentName":"Text","props":{"text":"组件是构建物料资产包的必要元素\n","style":"margin-top: 10px; color: rgb(173, 176, 184); margin-bottom: 20px;"},"id":"d0ac5a34"}]},{"componentName":"Img","props":{"src":"http://localhost:9090/assets/images/f750dc319828b039af713c643aad02bd_222x134.png","style":"margin-top: 20px; width: 95%;"},"id":"3eac458c"}]}]}]},{"componentName":"div","props":{"className":".components-box-right","style":"padding-left: 50px; border-radius: 0px; height: 100%;"},"id":"d0890144","children":[{"componentName":"div","props":{"className":"components-box-right-add"},"id":"0c79b824","children":[{"componentName":"div","props":{"style":"height: 50px;"},"id":"5dd75633","children":[{"componentName":"Text","props":{"text":"已添加","style":"font-size: 16px; font-weight: bold;"},"id":"e534646e"},{"componentName":"div","props":{"style":"display: inline-block;","onClick":{"type":"JSExpression","value":"this.clearSelected(event)"}},"id":"1f3f03e5","children":[{"componentName":"Icon","props":{"name":"IconUndelete","style":"margin-left: 10px; font-size: 20px; color:rgb(94, 124, 224);"},"id":"1ea6eea4"},{"componentName":"Text","props":{"text":"清空默认","style":"color: rgb(94, 124, 224); border-radius: 0px;"},"id":"4f143cd5"}]}]},{"componentName":"Collection","props":{"style":"height: 140px; display: flex; border-radius: 0px;","dataSource":151},"id":"9b4f4898","children":[{"componentName":"div","props":{"style":"width: 300px; height: 70px; margin-top: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-width: 1px; border-style: solid; border-color: #dfe1e6; display: flex; flex-direction: row; padding-right: 0px; padding-left: 0px; margin-right: 25px; margin-left: 0px; padding-top: 20px; margin-bottom: 20px; position: relative; background: rgb(242, 245, 252); border-radius: 2px;"},"id":"b5f585f9","children":[{"componentName":"Img","props":{"style":"width: 50px; height: 50px; margin-left: 20px; margin-top: 0px;","src":"http://localhost:9090/assets/images/24b520f0-dd5d-11ec-9e28-e51c91ead705.png"},"id":"ee90fa60"},{"componentName":"div","props":{"style":"width: 200px; margin-left: 12px;"},"id":"7735e4da","children":[{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"item.name"},"style":"font-weight: bold;"},"id":"068127b6"},{"componentName":"Text","props":{"text":"默认","style":"position: absolute; right: 2px; top: 2px; font-family: \"Microsoft YaHei\"; color: rgb(255, 255, 255); background: rgb(80, 212, 171); border-radius: 4.5px 0px;"},"id":"6d0281d2"},{"componentName":"TinyCheckbox","props":{"text":"","style":"position: absolute; right: 10px; bottom: 10px; color: rgb(82, 110, 204);","checked":{"type":"JSExpression","value":"item.isSelected"},"modelValue":true},"id":"622d9bdf"},{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"item.description"},"style":"display: block; margin-top: 10px; text-overflow: ellipsis; width: 90%; overflow: hidden; white-space: nowrap;"},"id":"eb87da78"}]}],"loop":{"type":"JSExpression","value":"this.state.render7e97d9c7"}}]}]},{"componentName":"div","props":{"style":"width: 98%; display: flex; margin-bottom: 22px; justify-content: space-between; margin-right: 0px; padding-right: 0px;"},"id":"c7f80c55","children":[{"componentName":"Text","props":{"text":"选择组件","style":"font-size: 16px; font-weight: bold;"},"id":"2ebef929"},{"componentName":"div","props":{"style":"display: flex;"},"id":"00a6fb16","children":[{"componentName":"TinySearch","props":{"modelValue":"","placeholder":"输入关键词","style":"width: 295px; margin-right: 12px;","onChange":{"type":"JSExpression","value":"this.query"}},"id":"d7364e4d"},{"componentName":"Collection","props":{"dataSource":129},"id":"03a2f95b","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":{"type":"JSExpression","value":"this.state.renderf5956ed2"},"style":"border-radius: 0px; margin-right: 0px;"},"id":"181b5ab7"}]}]}]},{"componentName":"Collection","props":{"dataSource":150,"style":"margin-left: 0px; margin-right: 314px; display: flex; justify-content: flex-start; flex-wrap: wrap; width: 98%; over-flow: hidden; border-radius: 0px;"},"id":"2b24a6d3","children":[{"componentName":"div","props":{"style":"padding-top: 20px; padding-left: 12px; padding-right: 12px; width: 280px; height: 92px; background: rgb(255, 255, 255); border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; border-radius: 2px; padding-bottom: 20px; display: flex; margin-right: 0px; margin-bottom: 20px; margin-left: 20px;"},"id":"8a6e5b83","children":[{"componentName":"Img","props":{"style":"width: 40px; height: 40px;","src":"http://localhost:9090/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png"},"id":"474ffcb2"},{"componentName":"div","props":{"style":"margin-left: 12px; border-radius: 0px; width: 90%;"},"id":"99944a57","children":[{"componentName":"div","props":{"style":"display: flex; justify-content: space-between;"},"id":"b5c88120","children":[{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"item.name"},"style":"font-weight: bold; border-radius: 0px;"},"id":"a747169d"},{"componentName":"TinyCheckbox","props":{"text":"","checked":false,"modelValue":{"type":"JSExpression","value":"item.isSelected","model":true},"style":"border-radius: 0px;"},"id":"72cee0e5"}]},{"componentName":"Text","props":{"style":"display: block; font-size: 12px; line-height: 17px; color: #333333; margin-top: 10px;","text":{"type":"JSExpression","value":"item.description"}},"id":"1aed3258"}]}],"loop":{"type":"JSExpression","value":"this.state.renderb52aeac9"},"condition":true,"loopArgs":["item","idx"]}]},{"componentName":"TinyPager","props":{"layout":"sizes,total, prev, pager, next","total":{"type":"JSExpression","value":"this.state.componentsTotal"},"pageSize":10,"currentPage":1,"style":"margin-left: 314px; margin-right: 314px;"},"id":"ff96cc4e"}]}]},{"componentName":"div","props":{"style":"height: 100px; background: rgb(255, 255, 255); filter: drop-shadow(rgba(0, 0, 0, 0.1) 0px -1px 4px); text-align: center;"},"id":"616d5f40","children":[{"componentName":"TinyButton","props":{"text":"创建物料资产包","style":"background: rgb(245, 245, 246); border-width: 1px; border-color: rgb(173, 176, 184); border-style: solid; border-radius: 2.5px; opacity: 0.6; margin: 0 auto; width: 200px; height: 32px; margin-top: 30px; max-width: none; margin-bottom: 10px;"},"id":"e6abff72"},{"componentName":"Text","props":{"style":"display: block; color: rgb(173, 176, 184); margin-top: 5px; width: 380px; margin: 0 auto;","text":"组件或区块未添加,请切换左侧步骤条去完成添加"},"id":"f3a123ba","children":[{"componentName":"Icon","props":{}}]}]}],"fileName":"componentsSetting"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":true,"_id":"fh7U0xYetFGA5Ieu"} +{"$$indexCreated":{"fieldName":"route","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"route","unique":true}} diff --git a/mockServer/src/database/pages.db b/mockServer/src/database/pages.db new file mode 100644 index 000000000..103c88610 --- /dev/null +++ b/mockServer/src/database/pages.db @@ -0,0 +1,4 @@ +{"name":"DemoPage","id":"5bhD7p5FUsUOTFRN","app":"918","route":"demopage","page_content":{"state":{},"methods":{},"componentName":"Page","css":"","props":{},"lifeCycles":{},"children":[{"componentName":"div","props":{},"id":"85375559","children":[{"componentName":"TinySwitch","props":{"modelValue":""},"id":"33433546"}]}],"dataSource":{"list":[]},"utils":[],"bridge":[],"inputs":[],"outputs":[],"fileName":"DemoPage"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"message":"Page auto save","_id":"5bhD7p5FUsUOTFRN"} +{"name":"createVm","id":"NTJ4MjvqoVj8OVsc","app":"918","route":"createVm","page_content":{"state":{"dataDisk":[1,2,3]},"methods":{},"componentName":"Page","css":"body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}","props":{},"children":[{"componentName":"div","props":{"style":"padding-bottom: 10px; padding-top: 10px;"},"id":"2b2cabf0","children":[{"componentName":"TinyTimeLine","props":{"active":"2","data":[{"name":"基础配置"},{"name":"网络配置"},{"name":"高级配置"},{"name":"确认配置"}],"horizontal":true,"style":"border-radius: 0px;"},"id":"dd764b17"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"id":"30c94cc8","children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"计费模式"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"包年/包月","value":"1"},{"text":"按需计费","value":"2"}],"modelValue":"1"},"id":"a8d84361"}],"id":"9f39f3e7"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"乌兰察布二零一","value":"1"}],"modelValue":"1","style":"border-radius: 0px; margin-right: 10px;"},"id":"c97ccd99"},{"componentName":"Text","props":{"text":"温馨提示:页面左上角切换区域","style":"background-color: [object Event]; color: #8a8e99; font-size: 12px;"},"id":"20923497"},{"componentName":"Text","props":{"text":"不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度","style":"display: block; color: #8a8e99; border-radius: 0px; font-size: 12px;"},"id":"54780a26"}],"id":"4966384d"},{"componentName":"TinyFormItem","props":{"label":"可用区","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"可用区1","value":"1"},{"text":"可用区2","value":"2"},{"text":"可用区3","value":"3"}],"modelValue":"1"},"id":"6184481b"}],"id":"690837bf"}],"id":"b6a425d4"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"CPU架构"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"x86计算","value":"1"},{"text":"鲲鹏计算","value":"2"}],"modelValue":"1"},"id":"7d33ced7"}],"id":"05ed5a79"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"div","props":{"style":"display: flex; justify-content: flex-start; align-items: center;"},"id":"606edf78","children":[{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"id":"f3f98246","children":[{"componentName":"Text","props":{"text":"vCPUs","style":"width: 80px;"},"id":"c287437e"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"4c43286b"}]},{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"children":[{"componentName":"Text","props":{"text":"内存","style":"width: 80px; border-radius: 0px;"},"id":"38b8fa1f"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"cd33328e"}],"id":"2b2c678f"},{"componentName":"div","props":{"style":"display: flex; align-items: center;"},"children":[{"componentName":"Text","props":{"text":"规格名称","style":"width: 80px;"},"id":"d3eb6352"},{"componentName":"TinySearch","props":{"modelValue":"","placeholder":"输入关键词"},"id":"21cb9282"}],"id":"b8e0f35c"}]},{"componentName":"div","props":{"style":"border-radius: 0px;"},"id":"5000c83e","children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"通用计算型","value":"1"},{"text":"通用计算增强型","value":"2"},{"text":"内存优化型","value":"3"},{"text":"内存优化型","value":"4"},{"text":"磁盘增强型","value":"5"},{"text":"超高I/O型","value":"6"},{"text":"GPU加速型","value":"7"}],"modelValue":"1","style":"border-radius: 0px; margin-top: 12px;"},"id":"b8724703"},{"componentName":"TinyGrid","props":{"editConfig":{"trigger":"click","mode":"cell","showStatus":true},"columns":[{"type":"radio","width":60},{"field":"employees","title":"规格名称"},{"field":"created_date","title":"vCPUs | 内存(GiB)","sortable":true},{"field":"city","title":"CPU","sortable":true},{"title":"基准 / 最大带宽\t","sortable":true},{"title":"内网收发包","sortable":true}],"data":[{"id":"1","name":"GFD科技有限公司","city":"福州","employees":800,"created_date":"2014-04-30 00:56:00","boole":false},{"id":"2","name":"WWW科技有限公司","city":"深圳","employees":300,"created_date":"2016-07-08 12:36:22","boole":true}],"style":"margin-top: 12px; border-radius: 0px;","auto-resize":true},"id":"77701c25"},{"componentName":"div","props":{"style":"margin-top: 12px; border-radius: 0px;"},"id":"3339838b","children":[{"componentName":"Text","props":{"text":"当前规格","style":"width: 150px; display: inline-block;"},"id":"203b012b"},{"componentName":"Text","props":{"text":"通用计算型 | Si2.large.2 | 2vCPUs | 4 GiB","style":"font-weight: 700;"},"id":"87723f52"}]}]}],"id":"657fb2fc"}],"id":"d19b15cf"}],"id":"9991228b"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"镜像","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"公共镜像","value":"1"},{"text":"私有镜像","value":"2"},{"text":"共享镜像","value":"3"}],"modelValue":"1"},"id":"922b14cb"},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"id":"6b679524","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 170px; margin-right: 10px;"},"id":"4851fff7"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 340px;"},"id":"a7183eb7"}]},{"componentName":"div","props":{"style":"margin-top: 12px;"},"id":"57aee314","children":[{"componentName":"Text","props":{"text":"请注意操作系统的语言类型。","style":"color: #e37d29;"},"id":"56d36c27"}]}],"id":"e3b02436"}],"id":"59aebf2b"}],"id":"87ff7b99"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"系统盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"display: flex;"},"id":"cddba5b8","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"a97fbe15"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"1cde4c0f"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限240,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px;"},"id":"2815d82d"}]}],"id":"50239a3a"}],"id":"e8582986"},{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"数据盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"margin-top: 12px; display: flex;"},"id":"728c9825","children":[{"componentName":"Icon","props":{"style":"margin-right: 10px; width: 16px; height: 16px;","name":"IconPanelMini"},"id":"fded6930"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"62734e3f"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"667c7926"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限600,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px; margin-right: 10px;"},"id":"e7bc36d6"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px;"},"id":"1bd56dc0"}],"loop":{"type":"JSExpression","value":"this.state.dataDisk"}},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"children":[{"componentName":"Icon","props":{"name":"IconPlus","style":"width: 16px; height: 16px; margin-right: 10px;"},"id":"65c89f2b"},{"componentName":"Text","props":{"text":"增加一块数据盘","style":"font-size: 12px; border-radius: 0px; margin-right: 10px;"},"id":"cb344071"},{"componentName":"Text","props":{"text":"您还可以挂载 21 块磁盘(云硬盘)","style":"color: #8a8e99; font-size: 12px;"},"id":"80eea996"}],"id":"e9e530ab"}],"id":"078e03ef"}],"id":"ccef886e"}],"id":"0fb7bd74"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-color: #ffffff; padding-top: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; position: fixed; inset: auto 0% 0% 0%; height: 80px; line-height: 80px; border-radius: 0px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[],"id":"21ed4475"},{"componentName":"TinyRow","props":{"style":"border-radius: 0px; height: 100%;"},"children":[{"componentName":"TinyCol","props":{"span":"8"},"id":"b9d051a5","children":[{"componentName":"TinyRow","props":{"style":"border-radius: 0px;"},"children":[{"componentName":"TinyCol","props":{"span":"5","style":"display: flex;"},"id":"02352776","children":[{"componentName":"Text","props":{"text":"购买量","style":"margin-right: 10px;"},"id":"0cd9ed5c"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"2f9cf442"},{"componentName":"Text","props":{"text":"台"},"id":"facd4481"}]},{"componentName":"TinyCol","props":{"span":"7"},"id":"82b6c659","children":[{"componentName":"div","props":{},"id":"9cd65874","children":[{"componentName":"Text","props":{"text":"配置费用","style":"font-size: 12px;"},"id":"b5a0a0da"},{"componentName":"Text","props":{"text":"¥1.5776","style":"padding-left: 10px; padding-right: 10px; color: #de504e;"},"id":"d9464214"},{"componentName":"Text","props":{"text":"/小时","style":"font-size: 12px;"},"id":"af7cc5e6"}]},{"componentName":"div","props":{},"id":"89063830","children":[{"componentName":"Text","props":{"text":"参考价格,具体扣费请以账单为准。","style":"font-size: 12px; border-radius: 0px;"},"id":"d8995fbc"},{"componentName":"Text","props":{"text":"了解计费详情","style":"font-size: 12px; color: #344899;"},"id":"b383c3e2"}]}]}],"id":"94fc0e43"}]},{"componentName":"TinyCol","props":{"span":"4","style":"display: flex; flex-direction: row-reverse; border-radius: 0px; height: 100%; justify-content: flex-start; align-items: center;"},"id":"10b73009","children":[{"componentName":"TinyButton","props":{"text":"下一步: 网络配置","type":"danger","style":"max-width: unset;"},"id":"0b584011"}]}],"id":"d414a473"}],"id":"e8ec029b"}],"fileName":"createVm"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"_id":"NTJ4MjvqoVj8OVsc"} +{"$$indexCreated":{"fieldName":"route","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"route","unique":true}} diff --git a/mockServer/src/middleware/ErrorRoutesCatch.js b/mockServer/src/middleware/ErrorRoutesCatch.js new file mode 100644 index 000000000..b1d42440a --- /dev/null +++ b/mockServer/src/middleware/ErrorRoutesCatch.js @@ -0,0 +1,22 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +const { getResponseData } = require('../tool/Common') + +module.exports = function () { + return function (ctx, next) { + return next().catch((err) => { + ctx.status = 200 + ctx.body = getResponseData(null, err) + }) + } +} diff --git a/mockServer/src/mock/get/app-center/apps/detail/918.json b/mockServer/src/mock/get/app-center/apps/detail/918.json new file mode 100644 index 000000000..efd46d535 --- /dev/null +++ b/mockServer/src/mock/get/app-center/apps/detail/918.json @@ -0,0 +1,78 @@ +{ + "data": { + "id": 918, + "name": "portal-app", + "app_website": null, + "platform": { + "id": 897, + "name": "portal-platform" + }, + "obs_url": "", + "created_by": null, + "updated_by": null, + "created_at": "2022-06-08T07:19:01.000Z", + "updated_at": "2023-09-04T08:55:40.000Z", + "state": null, + "published": false, + "createdBy": 86, + "updatedBy": 564, + "tenant": 1, + "home_page": "NTJ4MjvqoVj8OVsc", + "css": null, + "config": {}, + "git_group": "", + "project_name": "", + "constants": null, + "data_handler": { + "type": "JSFunction", + "value": "function dataHanlder(res){\n return res;\n}" + }, + "description": "demo应用", + "latest": 22, + "platform_history": null, + "editor_url": "", + "branch": "develop", + "visit_url": null, + "is_demo": null, + "image_url": "", + "is_default": true, + "template_type": null, + "set_template_time": null, + "set_template_by": null, + "set_default_by": 169, + "framework": "Vue", + "global_state": [], + "default_lang": null, + "extend_config": { + "business": { + "serviceName": "", + "endpointName": "cce", + "endpointId": "ee", + "serviceId": "ee", + "router": "ee" + }, + "env": { + "alpha": { + "regions": [ + { + "name": "", + "baseUrl": "", + "isDefault": false + } + ], + "isDefault": true + } + }, + "type": "console" + }, + "assets_url": "", + "data_hash": "ae128e37f6bc378f1b9c21d75bd05551", + "can_associate": true, + "data_source_global": { + "dataHandler": { + "type": "JSFunction", + "value": "function dataHanlder(res){\n return res;\n}" + } + } + } +} diff --git a/mockServer/src/mock/get/app-center/apps/extension/delete.json b/mockServer/src/mock/get/app-center/apps/extension/delete.json new file mode 100644 index 000000000..a41dcbbb3 --- /dev/null +++ b/mockServer/src/mock/get/app-center/apps/extension/delete.json @@ -0,0 +1,20 @@ +{ + "data": { + "id": 245824, + "name": "Input", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Input", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_at": "2023-09-04T08:32:38.000Z", + "updated_at": "2023-09-04T08:32:38.000Z" + }, + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/get/app-center/apps/extension/list.json b/mockServer/src/mock/get/app-center/apps/extension/list.json new file mode 100644 index 000000000..d3f2008dd --- /dev/null +++ b/mockServer/src/mock/get/app-center/apps/extension/list.json @@ -0,0 +1,127 @@ +{ + "data": [ + { + "id": 176, + "name": "axios", + "type": "npm", + "content": { + "type": "JSFunction", + "value": "", + "package": "axios", + "destructuring": false, + "exportName": "axios" + }, + "app": 918, + "category": "utils", + "created_at": "2022-10-27T11:02:26.000Z", + "updated_at": "2022-10-27T11:02:26.000Z" + }, + { + "id": 104, + "name": "Button", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Button", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_at": "2022-07-06T10:17:31.000Z", + "updated_at": "2022-07-06T10:17:31.000Z" + }, + { + "id": 101, + "name": "Menu", + "type": "npm", + "content": { + "type": "JSFunction", + "value": "", + "package": "@opentiny/vue", + "exportName": "NavMenu", + "destructuring": true + }, + "app": 918, + "category": "utils", + "created_at": "2022-06-24T06:40:52.000Z", + "updated_at": "2022-06-24T08:03:13.000Z" + }, + { + "id": 103, + "name": "Modal ", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Modal ", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_at": "2022-07-01T03:21:19.000Z", + "updated_at": "2022-07-01T03:21:19.000Z" + }, + { + "id": 146, + "name": "npm", + "type": "function", + "content": { + "type": "JSFunction", + "value": "''" + }, + "app": 918, + "category": "utils", + "created_at": "2022-08-29T06:54:02.000Z", + "updated_at": "2023-01-05T01:00:52.000Z" + }, + { + "id": 102, + "name": "Pager", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Pager", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_at": "2022-06-28T08:17:38.000Z", + "updated_at": "2023-03-21T12:13:04.000Z" + }, + { + "id": 106, + "name": "test", + "type": "function", + "content": { + "type": "JSFunction", + "value": "function test() {\r\n return 'test'\r\n}" + }, + "app": 918, + "category": "utils", + "created_at": "2022-07-06T10:21:02.000Z", + "updated_at": "2023-03-21T12:12:49.000Z" + }, + { + "id": 97, + "name": "util", + "type": "function", + "content": { + "type": "JSFunction", + "value": "function util () {\r\n console.log(321)\r\n}" + }, + "app": 918, + "category": "utils", + "created_at": "2022-06-23T11:13:07.000Z", + "updated_at": "2023-04-06T02:31:44.000Z" + } + ], + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/get/app-center/i18n/entries.json b/mockServer/src/mock/get/app-center/i18n/entries.json new file mode 100644 index 000000000..84127ff5d --- /dev/null +++ b/mockServer/src/mock/get/app-center/i18n/entries.json @@ -0,0 +1,33 @@ +{ + "data": { + "locales": [ + { + "lang": "en_US", + "label": "美式英文" + }, + { + "lang": "zh_CN", + "label": "简体中文" + } + ], + "messages": { + "en_US": { + "lowcode.c257d5e8": "search", + "lowcode.61c8ac8c": "testi18n", + "lowcode.f53187a0": "test", + "lowcode.97ad00dd": "createMaterial", + "common.index.fullName": "zhangsan", + "other.utileName": "getName" + }, + "zh_CN": { + "lowcode.c257d5e8": "查询", + "lowcode.61c8ac8c": "地方", + "lowcode.f53187a0": "测试", + "lowcode.97ad00dd": "创建物料资产包", + "common.index.fullName": "张三", + "other.utileName": "获取名称" + } + } + }, + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/get/app-center/source_tpl.json b/mockServer/src/mock/get/app-center/source_tpl.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/get/app-center/source_tpl.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/get/app-center/sources/list/918.json b/mockServer/src/mock/get/app-center/sources/list/918.json new file mode 100644 index 000000000..632927979 --- /dev/null +++ b/mockServer/src/mock/get/app-center/sources/list/918.json @@ -0,0 +1,671 @@ +{ + "data": [ + { + "id": 132, + "name": "getAllComponent", + "data": { + "data": [], + "type": "array" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T06:26:26.000Z", + "updated_at": "2022-06-28T07:02:30.000Z" + }, + { + "id": 133, + "name": "getAllList", + "data": { + "columns": [ + { + "name": "test", + "title": "测试", + "field": "test", + "type": "string", + "format": {} + }, + { + "name": "test1", + "title": "测试1", + "field": "test1", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "test": "test1", + "test1": "test1", + "_id": "341efc48" + }, + { + "test": "test2", + "test1": "test1", + "_id": "b86b516c" + }, + { + "test": "test3", + "test1": "test1", + "_id": "f680cd78" + } + ], + "options": { + "uri": "", + "method": "GET" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T07:32:16.000Z", + "updated_at": "2023-01-19T03:29:11.000Z" + }, + { + "id": 135, + "name": "getAllMaterialList", + "data": { + "columns": [ + { + "name": "id", + "title": "id", + "field": "id", + "type": "string", + "format": {} + }, + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": {} + }, + { + "name": "framework", + "title": "framework", + "field": "framework", + "type": "string", + "format": { + "required": true + } + }, + { + "name": "components", + "title": "components", + "field": "components", + "type": "string", + "format": {} + }, + { + "name": "content", + "title": "content", + "field": "content", + "type": "string", + "format": {} + }, + { + "name": "url", + "title": "url", + "field": "url", + "type": "string", + "format": {} + }, + { + "name": "published_at", + "title": "published_at", + "field": "published_at", + "type": "string", + "format": {} + }, + { + "name": "created_at", + "title": "created_at", + "field": "created_at", + "type": "string", + "format": {} + }, + { + "name": "updated_at", + "title": "updated_at", + "field": "updated_at", + "type": "string", + "format": {} + }, + { + "name": "published", + "title": "published", + "field": "published", + "type": "string", + "format": {} + }, + { + "name": "last_build_info", + "title": "last_build_info", + "field": "last_build_info", + "type": "string", + "format": {} + }, + { + "name": "tenant", + "title": "tenant", + "field": "tenant", + "type": "string", + "format": {} + }, + { + "name": "version", + "title": "version", + "field": "version", + "type": "string", + "format": {} + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "2a23e653" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "06b253be" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "c55a41ed" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "f37123ec" + }, + { + "id": "7a63c1a2", + "url": "", + "name": "tiny-vue", + "tenant": "", + "content": "Tiny Vue物料", + "version": "1.0.0", + "framework": "Vue", + "published": "", + "components": "", + "created_at": "", + "updated_at": "", + "description": "Tiny Vue物料", + "published_at": "", + "last_build_info": "", + "_id": "7a63c1a2" + } + ], + "options": { + "uri": "", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-29T00:57:50.000Z", + "updated_at": "2023-05-15T02:37:12.000Z" + }, + { + "id": 139, + "name": "treedata", + "data": { + "data": [ + { + "label": "level111", + "value": "111", + "id": "f6609643", + "pid": "", + "_RID": "row_4" + }, + { + "label": "level1-son", + "value": "111-1", + "id": "af1f937f", + "pid": "f6609643", + "_RID": "row_5" + }, + { + "label": "level222", + "value": "222", + "id": "28e3709c", + "pid": "", + "_RID": "row_6" + }, + { + "label": "level2-son", + "value": "222-1", + "id": "6b571bef", + "pid": "28e3709c", + "_RID": "row_5" + }, + { + "id": "6317c2cc", + "pid": "fdfa", + "label": "fsdfaa", + "value": "fsadf", + "_RID": "row_6" + }, + { + "id": "9cce369f", + "pid": "test", + "label": "test1", + "value": "001" + } + ], + "type": "tree" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-30T06:13:57.000Z", + "updated_at": "2022-07-29T03:14:55.000Z" + }, + { + "id": 150, + "name": "componentList", + "data": { + "data": [ + { + "_RID": "row_1", + "name": "表单", + "isSelected": "true", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据" + }, + { + "name": "按钮", + "isSelected": "false", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型" + }, + { + "id": "490f8a00", + "_RID": "row_3", + "name": "表单项", + "framework": "", + "materials": "", + "description": "Form 组件下的 FormItem 配置" + }, + { + "id": "c259b8b3", + "_RID": "row_4", + "name": "开关", + "framework": "", + "materials": "", + "description": "关闭或打开" + }, + { + "id": "083ed9c7", + "_RID": "row_5", + "name": "互斥按钮组", + "framework": "", + "materials": "", + "description": "以按钮组的方式出现,常用于多项类似操作" + }, + { + "id": "09136cea", + "_RID": "row_6", + "name": "提示框", + "framework": "", + "materials": "", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画" + }, + { + "id": "a63b57d5", + "_RID": "row_7", + "name": "文字提示框", + "framework": "", + "materials": "", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信" + }, + { + "id": "a0f6e8a3", + "_RID": "row_8", + "name": "树", + "framework": "", + "materials": "", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单" + }, + { + "id": "d1aa18fc", + "_RID": "row_9", + "name": "分页", + "framework": "", + "materials": "", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件" + }, + { + "id": "ca49cc52", + "_RID": "row_10", + "name": "表格", + "framework": "", + "materials": "", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等" + }, + { + "id": "4e20ecc9", + "name": "搜索框", + "framework": "", + "materials": "", + "description": "指定条件对象进行搜索数据" + }, + { + "id": "6b093ee5", + "name": "折叠面板", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "0a09abc0", + "name": "对话框", + "framework": "", + "materials": "", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作" + }, + { + "id": "f814b901", + "name": "标签页签项", + "framework": "", + "materials": "", + "description": "tab页签" + }, + { + "id": "c5ae797c", + "name": "单选", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,在一组备选项中进行单选" + }, + { + "id": "33d0c590", + "_RID": "row_13", + "name": "弹出编辑", + "framework": "", + "materials": "", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件" + }, + { + "id": "16711dfa", + "_RID": "row_14", + "name": "下拉框", + "framework": "", + "materials": "", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件" + }, + { + "id": "a9fd190a", + "_RID": "row_15", + "name": "折叠面板项", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "a7dfa9ec", + "_RID": "row_16", + "name": "复选框", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选" + }, + { + "id": "d4bb8330", + "name": "输入框", + "framework": "", + "materials": "", + "description": "通过鼠标或键盘输入字符" + }, + { + "id": "ced3dc83", + "name": "时间线", + "framework": "", + "materials": "", + "description": "时间线" + } + ], + "type": "array", + "columns": [ + { + "name": "name", + "type": "string", + "field": "name", + "title": "name", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "description", + "type": "string", + "field": "description", + "title": "description", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "isSelected", + "type": "string", + "field": "isSelected", + "title": "isSelected", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + } + ], + "options": { + "uri": "http://localhost:9090/assets/json/bundle.json", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T02:20:07.000Z", + "updated_at": "2022-07-04T06:25:29.000Z" + }, + { + "id": 151, + "name": "selectedComponents", + "data": { + "columns": [ + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "isSelected", + "title": "isSelected", + "field": "isSelected", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + } + ], + "type": "array", + "data": [ + { + "name": "标签页", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "isSelected": "true", + "_RID": "row_2" + }, + { + "name": "布局列", + "description": "列配置信息", + "isSelected": "true", + "id": "76a7080a", + "_RID": "row_4" + }, + { + "name": "日期选择器", + "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式", + "isSelected": "true", + "id": "76b20d73", + "_RID": "row_1" + }, + { + "name": "走马灯", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现", + "isSelected": "true", + "id": "4c884c3d" + } + ] + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T03:04:05.000Z", + "updated_at": "2022-07-04T03:43:40.000Z" + } + ], + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/get/app-center/v1/apps/schema/918.json b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json new file mode 100644 index 000000000..24abb5191 --- /dev/null +++ b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json @@ -0,0 +1,2096 @@ +{ + "data": { + "meta": { + "name": "portal-app", + "tenant": 1, + "git_group": "", + "project_name": "", + "description": "demo应用", + "branch": "develop", + "is_demo": null, + "global_state": [], + "appId": "918", + "creator": "", + "gmt_create": "2022-06-08 03:19:01", + "gmt_modified": "2023-08-23 10:22:28" + }, + "dataSource": { + "list": [ + { + "id": 132, + "name": "getAllComponent", + "data": { + "data": [], + "type": "array" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T06:26:26.000Z", + "updated_at": "2022-06-28T07:02:30.000Z" + }, + { + "id": 133, + "name": "getAllList", + "data": { + "columns": [ + { + "name": "test", + "title": "测试", + "field": "test", + "type": "string", + "format": {} + }, + { + "name": "test1", + "title": "测试1", + "field": "test1", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "test": "test1", + "test1": "test1", + "_id": "341efc48" + }, + { + "test": "test2", + "test1": "test1", + "_id": "b86b516c" + }, + { + "test": "test3", + "test1": "test1", + "_id": "f680cd78" + } + ], + "options": { + "uri": "", + "method": "GET" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T07:32:16.000Z", + "updated_at": "2023-01-19T03:29:11.000Z" + }, + { + "id": 135, + "name": "getAllMaterialList", + "data": { + "columns": [ + { + "name": "id", + "title": "id", + "field": "id", + "type": "string", + "format": {} + }, + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": {} + }, + { + "name": "framework", + "title": "framework", + "field": "framework", + "type": "string", + "format": { + "required": true + } + }, + { + "name": "components", + "title": "components", + "field": "components", + "type": "string", + "format": {} + }, + { + "name": "content", + "title": "content", + "field": "content", + "type": "string", + "format": {} + }, + { + "name": "url", + "title": "url", + "field": "url", + "type": "string", + "format": {} + }, + { + "name": "published_at", + "title": "published_at", + "field": "published_at", + "type": "string", + "format": {} + }, + { + "name": "created_at", + "title": "created_at", + "field": "created_at", + "type": "string", + "format": {} + }, + { + "name": "updated_at", + "title": "updated_at", + "field": "updated_at", + "type": "string", + "format": {} + }, + { + "name": "published", + "title": "published", + "field": "published", + "type": "string", + "format": {} + }, + { + "name": "last_build_info", + "title": "last_build_info", + "field": "last_build_info", + "type": "string", + "format": {} + }, + { + "name": "tenant", + "title": "tenant", + "field": "tenant", + "type": "string", + "format": {} + }, + { + "name": "version", + "title": "version", + "field": "version", + "type": "string", + "format": {} + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "2a23e653" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "06b253be" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "c55a41ed" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "f37123ec" + }, + { + "id": "7a63c1a2", + "url": "", + "name": "tiny-vue", + "tenant": "", + "content": "Tiny Vue物料", + "version": "1.0.0", + "framework": "Vue", + "published": "", + "components": "", + "created_at": "", + "updated_at": "", + "description": "Tiny Vue物料", + "published_at": "", + "last_build_info": "", + "_id": "7a63c1a2" + } + ], + "options": { + "uri": "", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-29T00:57:50.000Z", + "updated_at": "2023-05-15T02:37:12.000Z" + }, + { + "id": 139, + "name": "treedata", + "data": { + "data": [ + { + "label": "level111", + "value": "111", + "id": "f6609643", + "pid": "", + "_RID": "row_4" + }, + { + "label": "level1-son", + "value": "111-1", + "id": "af1f937f", + "pid": "f6609643", + "_RID": "row_5" + }, + { + "label": "level222", + "value": "222", + "id": "28e3709c", + "pid": "", + "_RID": "row_6" + }, + { + "label": "level2-son", + "value": "222-1", + "id": "6b571bef", + "pid": "28e3709c", + "_RID": "row_5" + }, + { + "id": "6317c2cc", + "pid": "fdfa", + "label": "fsdfaa", + "value": "fsadf", + "_RID": "row_6" + }, + { + "id": "9cce369f", + "pid": "test", + "label": "test1", + "value": "001" + } + ], + "type": "tree" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-30T06:13:57.000Z", + "updated_at": "2022-07-29T03:14:55.000Z" + }, + { + "id": 150, + "name": "componentList", + "data": { + "data": [ + { + "_RID": "row_1", + "name": "表单", + "isSelected": "true", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据" + }, + { + "name": "按钮", + "isSelected": "false", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型" + }, + { + "id": "490f8a00", + "_RID": "row_3", + "name": "表单项", + "framework": "", + "materials": "", + "description": "Form 组件下的 FormItem 配置" + }, + { + "id": "c259b8b3", + "_RID": "row_4", + "name": "开关", + "framework": "", + "materials": "", + "description": "关闭或打开" + }, + { + "id": "083ed9c7", + "_RID": "row_5", + "name": "互斥按钮组", + "framework": "", + "materials": "", + "description": "以按钮组的方式出现,常用于多项类似操作" + }, + { + "id": "09136cea", + "_RID": "row_6", + "name": "提示框", + "framework": "", + "materials": "", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画" + }, + { + "id": "a63b57d5", + "_RID": "row_7", + "name": "文字提示框", + "framework": "", + "materials": "", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信" + }, + { + "id": "a0f6e8a3", + "_RID": "row_8", + "name": "树", + "framework": "", + "materials": "", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单" + }, + { + "id": "d1aa18fc", + "_RID": "row_9", + "name": "分页", + "framework": "", + "materials": "", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件" + }, + { + "id": "ca49cc52", + "_RID": "row_10", + "name": "表格", + "framework": "", + "materials": "", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等" + }, + { + "id": "4e20ecc9", + "name": "搜索框", + "framework": "", + "materials": "", + "description": "指定条件对象进行搜索数据" + }, + { + "id": "6b093ee5", + "name": "折叠面板", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "0a09abc0", + "name": "对话框", + "framework": "", + "materials": "", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作" + }, + { + "id": "f814b901", + "name": "标签页签项", + "framework": "", + "materials": "", + "description": "tab页签" + }, + { + "id": "c5ae797c", + "name": "单选", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,在一组备选项中进行单选" + }, + { + "id": "33d0c590", + "_RID": "row_13", + "name": "弹出编辑", + "framework": "", + "materials": "", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件" + }, + { + "id": "16711dfa", + "_RID": "row_14", + "name": "下拉框", + "framework": "", + "materials": "", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件" + }, + { + "id": "a9fd190a", + "_RID": "row_15", + "name": "折叠面板项", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "a7dfa9ec", + "_RID": "row_16", + "name": "复选框", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选" + }, + { + "id": "d4bb8330", + "name": "输入框", + "framework": "", + "materials": "", + "description": "通过鼠标或键盘输入字符" + }, + { + "id": "ced3dc83", + "name": "时间线", + "framework": "", + "materials": "", + "description": "时间线" + } + ], + "type": "array", + "columns": [ + { + "name": "name", + "type": "string", + "field": "name", + "title": "name", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "description", + "type": "string", + "field": "description", + "title": "description", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "isSelected", + "type": "string", + "field": "isSelected", + "title": "isSelected", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + } + ], + "options": { + "uri": "http://localhost:9090/assets/json/bundle.json", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T02:20:07.000Z", + "updated_at": "2022-07-04T06:25:29.000Z" + }, + { + "id": 151, + "name": "selectedComponents", + "data": { + "columns": [ + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "isSelected", + "title": "isSelected", + "field": "isSelected", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + } + ], + "type": "array", + "data": [ + { + "name": "标签页", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "isSelected": "true", + "_RID": "row_2" + }, + { + "name": "布局列", + "description": "列配置信息", + "isSelected": "true", + "id": "76a7080a", + "_RID": "row_4" + }, + { + "name": "日期选择器", + "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式", + "isSelected": "true", + "id": "76b20d73", + "_RID": "row_1" + }, + { + "name": "走马灯", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现", + "isSelected": "true", + "id": "4c884c3d" + } + ] + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T03:04:05.000Z", + "updated_at": "2022-07-04T03:43:40.000Z" + } + ], + "dataHandler": { + "type": "JSFunction", + "value": "function dataHanlder(res){\n return res;\n}" + } + }, + "i18n": { + "zh_CN": { + "lowcode.cca8d0ea": "应用", + "lowcode.c257d5e8": "查询", + "lowcode.61c8ac8c": "地方", + "lowcode.f53187a0": "测试", + "lowcode.97ad00dd": "创建物料资产包", + "lowcode.61dcef52": "terterere", + "lowcode.45f4c42a": "gdfgdf", + "lowcode.c6f5a652": "fsdaf", + "lowcode.34923432": "fdsafdsa", + "lowcode.48521e45": "fdsfds", + "lowcode.6534943e": "fdsafds", + "lowcode.44252642": "fdsafds", + "lowcode.2a743651": "sda", + "lowcode.24315357": "fdsafds", + "lowcode.44621691": "fdsafsd", + "lowcode.65636226": "fdsaf", + "lowcode.6426a4e2": "sd", + "lowcode.e41c6636": "aa", + "lowcode.51c23164": "aa", + "lowcode.17245b46": "aa", + "lowcode.4573143c": "aa", + "lowcode.56432442": "aa", + "lowcode.33566643": "aa", + "lowcode.565128f3": "aa", + "lowcode.56643835": "aa", + "lowcode.33311134": "aa", + "lowcode.44326643": "aa", + "lowcode.36223242": "aa" + }, + "en_US": { + "lowcode.cca8d0ea": "app", + "lowcode.c257d5e8": "search", + "lowcode.61c8ac8c": "dsdsa", + "lowcode.f53187a0": "test", + "lowcode.97ad00dd": "createMaterial", + "lowcode.61dcef52": "sadasda", + "lowcode.45f4c42a": "gfdgfd", + "lowcode.c6f5a652": "fsdafds", + "lowcode.34923432": "fdsafds", + "lowcode.6534943e": "fdsafdsa", + "lowcode.44252642": "aaaa", + "lowcode.2a743651": "fdsaf", + "lowcode.24315357": "fsdafds", + "lowcode.44621691": "sd", + "lowcode.65636226": "fdsfsd", + "lowcode.6426a4e2": "fdsafsd", + "lowcode.e41c6636": "aa", + "lowcode.51c23164": "aa", + "lowcode.17245b46": "aa", + "lowcode.4573143c": "a", + "lowcode.56432442": "aa", + "lowcode.33566643": "aa", + "lowcode.565128f3": "aa", + "lowcode.56643835": "aa", + "lowcode.33311134": "aa", + "lowcode.44326643": "aa", + "lowcode.36223242": "aa" + } + }, + "componentsTree": [ + { + "state": { + "dataDisk": [1, 2, 3] + }, + "methods": {}, + "componentName": "Page", + "css": "body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}", + "props": {}, + "children": [ + { + "componentName": "div", + "props": { + "style": "padding-bottom: 10px; padding-top: 10px;" + }, + "id": "2b2cabf0", + "children": [ + { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "基础配置" + }, + { + "name": "网络配置" + }, + { + "name": "高级配置" + }, + { + "name": "确认配置" + } + ], + "horizontal": true, + "style": "border-radius: 0px;" + }, + "id": "dd764b17" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "id": "30c94cc8", + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "计费模式" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "包年/包月", + "value": "1" + }, + { + "text": "按需计费", + "value": "2" + } + ], + "modelValue": "1" + }, + "id": "a8d84361" + } + ], + "id": "9f39f3e7" + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "区域" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "乌兰察布二零一", + "value": "1" + } + ], + "modelValue": "1", + "style": "border-radius: 0px; margin-right: 10px;" + }, + "id": "c97ccd99" + }, + { + "componentName": "Text", + "props": { + "text": "温馨提示:页面左上角切换区域", + "style": "background-color: [object Event]; color: #8a8e99; font-size: 12px;" + }, + "id": "20923497" + }, + { + "componentName": "Text", + "props": { + "text": "不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度", + "style": "display: block; color: #8a8e99; border-radius: 0px; font-size: 12px;" + }, + "id": "54780a26" + } + ], + "id": "4966384d" + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "可用区", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "可用区1", + "value": "1" + }, + { + "text": "可用区2", + "value": "2" + }, + { + "text": "可用区3", + "value": "3" + } + ], + "modelValue": "1" + }, + "id": "6184481b" + } + ], + "id": "690837bf" + } + ], + "id": "b6a425d4" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "CPU架构" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "x86计算", + "value": "1" + }, + { + "text": "鲲鹏计算", + "value": "2" + } + ], + "modelValue": "1" + }, + "id": "7d33ced7" + } + ], + "id": "05ed5a79" + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "区域" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex; justify-content: flex-start; align-items: center;" + }, + "id": "606edf78", + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex; align-items: center; margin-right: 10px;" + }, + "id": "f3f98246", + "children": [ + { + "componentName": "Text", + "props": { + "text": "vCPUs", + "style": "width: 80px;" + }, + "id": "c287437e" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + }, + "id": "4c43286b" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "display: flex; align-items: center; margin-right: 10px;" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "内存", + "style": "width: 80px; border-radius: 0px;" + }, + "id": "38b8fa1f" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + }, + "id": "cd33328e" + } + ], + "id": "2b2c678f" + }, + { + "componentName": "div", + "props": { + "style": "display: flex; align-items: center;" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "规格名称", + "style": "width: 80px;" + }, + "id": "d3eb6352" + }, + { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + }, + "id": "21cb9282" + } + ], + "id": "b8e0f35c" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "border-radius: 0px;" + }, + "id": "5000c83e", + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "通用计算型", + "value": "1" + }, + { + "text": "通用计算增强型", + "value": "2" + }, + { + "text": "内存优化型", + "value": "3" + }, + { + "text": "内存优化型", + "value": "4" + }, + { + "text": "磁盘增强型", + "value": "5" + }, + { + "text": "超高I/O型", + "value": "6" + }, + { + "text": "GPU加速型", + "value": "7" + } + ], + "modelValue": "1", + "style": "border-radius: 0px; margin-top: 12px;" + }, + "id": "b8724703" + }, + { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "radio", + "width": 60 + }, + { + "field": "employees", + "title": "规格名称" + }, + { + "field": "created_date", + "title": "vCPUs | 内存(GiB)", + "sortable": true + }, + { + "field": "city", + "title": "CPU", + "sortable": true + }, + { + "title": "基准 / 最大带宽\t", + "sortable": true + }, + { + "title": "内网收发包", + "sortable": true + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ], + "style": "margin-top: 12px; border-radius: 0px;", + "auto-resize": true + }, + "id": "77701c25" + }, + { + "componentName": "div", + "props": { + "style": "margin-top: 12px; border-radius: 0px;" + }, + "id": "3339838b", + "children": [ + { + "componentName": "Text", + "props": { + "text": "当前规格", + "style": "width: 150px; display: inline-block;" + }, + "id": "203b012b" + }, + { + "componentName": "Text", + "props": { + "text": "通用计算型 | Si2.large.2 | 2vCPUs | 4 GiB", + "style": "font-weight: 700;" + }, + "id": "87723f52" + } + ] + } + ] + } + ], + "id": "657fb2fc" + } + ], + "id": "d19b15cf" + } + ], + "id": "9991228b" + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "镜像", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "公共镜像", + "value": "1" + }, + { + "text": "私有镜像", + "value": "2" + }, + { + "text": "共享镜像", + "value": "3" + } + ], + "modelValue": "1" + }, + "id": "922b14cb" + }, + { + "componentName": "div", + "props": { + "style": "display: flex; margin-top: 12px; border-radius: 0px;" + }, + "id": "6b679524", + "children": [ + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 170px; margin-right: 10px;" + }, + "id": "4851fff7" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 340px;" + }, + "id": "a7183eb7" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "margin-top: 12px;" + }, + "id": "57aee314", + "children": [ + { + "componentName": "Text", + "props": { + "text": "请注意操作系统的语言类型。", + "style": "color: #e37d29;" + }, + "id": "56d36c27" + } + ] + } + ], + "id": "e3b02436" + } + ], + "id": "59aebf2b" + } + ], + "id": "87ff7b99" + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "系统盘", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex;" + }, + "id": "cddba5b8", + "children": [ + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 200px; margin-right: 10px;" + }, + "id": "a97fbe15" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px; margin-right: 10px;" + }, + "id": "1cde4c0f" + }, + { + "componentName": "Text", + "props": { + "text": "GiB \nIOPS上限240,IOPS突发上限5,000", + "style": "color: #575d6c; font-size: 12px;" + }, + "id": "2815d82d" + } + ] + } + ], + "id": "50239a3a" + } + ], + "id": "e8582986" + }, + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "数据盘", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin-top: 12px; display: flex;" + }, + "id": "728c9825", + "children": [ + { + "componentName": "Icon", + "props": { + "style": "margin-right: 10px; width: 16px; height: 16px;", + "name": "IconPanelMini" + }, + "id": "fded6930" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 200px; margin-right: 10px;" + }, + "id": "62734e3f" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px; margin-right: 10px;" + }, + "id": "667c7926" + }, + { + "componentName": "Text", + "props": { + "text": "GiB \nIOPS上限600,IOPS突发上限5,000", + "style": "color: #575d6c; font-size: 12px; margin-right: 10px;" + }, + "id": "e7bc36d6" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px;" + }, + "id": "1bd56dc0" + } + ], + "loop": { + "type": "JSExpression", + "value": "this.state.dataDisk" + } + }, + { + "componentName": "div", + "props": { + "style": "display: flex; margin-top: 12px; border-radius: 0px;" + }, + "children": [ + { + "componentName": "Icon", + "props": { + "name": "IconPlus", + "style": "width: 16px; height: 16px; margin-right: 10px;" + }, + "id": "65c89f2b" + }, + { + "componentName": "Text", + "props": { + "text": "增加一块数据盘", + "style": "font-size: 12px; border-radius: 0px; margin-right: 10px;" + }, + "id": "cb344071" + }, + { + "componentName": "Text", + "props": { + "text": "您还可以挂载 21 块磁盘(云硬盘)", + "style": "color: #8a8e99; font-size: 12px;" + }, + "id": "80eea996" + } + ], + "id": "e9e530ab" + } + ], + "id": "078e03ef" + } + ], + "id": "ccef886e" + } + ], + "id": "0fb7bd74" + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-color: #ffffff; padding-top: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; position: fixed; inset: auto 0% 0% 0%; height: 80px; line-height: 80px; border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [], + "id": "21ed4475" + }, + { + "componentName": "TinyRow", + "props": { + "style": "border-radius: 0px; height: 100%;" + }, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": "8" + }, + "id": "b9d051a5", + "children": [ + { + "componentName": "TinyRow", + "props": { + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": "5", + "style": "display: flex;" + }, + "id": "02352776", + "children": [ + { + "componentName": "Text", + "props": { + "text": "购买量", + "style": "margin-right: 10px;" + }, + "id": "0cd9ed5c" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px; margin-right: 10px;" + }, + "id": "2f9cf442" + }, + { + "componentName": "Text", + "props": { + "text": "台" + }, + "id": "facd4481" + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": "7" + }, + "id": "82b6c659", + "children": [ + { + "componentName": "div", + "props": {}, + "id": "9cd65874", + "children": [ + { + "componentName": "Text", + "props": { + "text": "配置费用", + "style": "font-size: 12px;" + }, + "id": "b5a0a0da" + }, + { + "componentName": "Text", + "props": { + "text": "¥1.5776", + "style": "padding-left: 10px; padding-right: 10px; color: #de504e;" + }, + "id": "d9464214" + }, + { + "componentName": "Text", + "props": { + "text": "/小时", + "style": "font-size: 12px;" + }, + "id": "af7cc5e6" + } + ] + }, + { + "componentName": "div", + "props": {}, + "id": "89063830", + "children": [ + { + "componentName": "Text", + "props": { + "text": "参考价格,具体扣费请以账单为准。", + "style": "font-size: 12px; border-radius: 0px;" + }, + "id": "d8995fbc" + }, + { + "componentName": "Text", + "props": { + "text": "了解计费详情", + "style": "font-size: 12px; color: #344899;" + }, + "id": "b383c3e2" + } + ] + } + ] + } + ], + "id": "94fc0e43" + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": "4", + "style": "display: flex; flex-direction: row-reverse; border-radius: 0px; height: 100%; justify-content: flex-start; align-items: center;" + }, + "id": "10b73009", + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "下一步: 网络配置", + "type": "danger", + "style": "max-width: unset;" + }, + "id": "0b584011" + } + ] + } + ], + "id": "d414a473" + } + ], + "id": "e8ec029b" + } + ], + "fileName": "createVm", + "meta": { + "id": 1977, + "parentId": "0", + "group": "staticPages", + "occupier": { + "id": 86, + "username": "开发者", + "email": "developer@lowcode.com", + "provider": null, + "password": null, + "resetPasswordToken": "developer", + "confirmationToken": "dfb2c162-351f-4f44-ad5f-899831311129", + "confirmed": true, + "blocked": null, + "role": null, + "created_by": null, + "updated_by": null, + "created_at": "2022-05-27T16:50:44.000Z", + "updated_at": "2022-05-27T16:50:44.000Z", + "block": null, + "is_admin": true, + "is_public": null + }, + "isHome": false, + "router": "createVm", + "rootElement": "div", + "creator": "", + "gmt_create": "2022-07-21 03:08:20", + "gmt_modified": "2022-07-21 05:18:26" + } + } + ], + "componentsMap": [ + { + "componentName": "TinyCarouselItem", + "package": "@opentiny/vue", + "exportName": "CarouselItem", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyCheckboxButton", + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "destructuring": true, + "version": "0.1.17" + }, + { + "componentName": "TinyTree", + "package": "@opentiny/vue", + "exportName": "Tree", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyPopover", + "package": "@opentiny/vue", + "exportName": "Popover", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyTooltip", + "package": "@opentiny/vue", + "exportName": "Tooltip", + "destructuring": true, + "version": "3.2.0" + }, + { + "componentName": "TinyCol", + "package": "@opentiny/vue", + "exportName": "Col", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyDropdownItem", + "package": "@opentiny/vue", + "exportName": "DropdownItem", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyPager", + "package": "@opentiny/vue", + "exportName": "Pager", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyPlusAccessdeclined", + "package": "@opentiny/vue", + "exportName": "AccessDeclined", + "destructuring": true, + "version": "3.4.1" + }, + { + "componentName": "TinyPlusFrozenPage", + "package": "@opentiny/vuee", + "exportName": "FrozenPage", + "destructuring": true, + "version": "3.4.1" + }, + { + "componentName": "TinyPlusNonSupportRegion", + "package": "@opentiny/vue", + "exportName": "NonSupportRegion", + "destructuring": true, + "version": "3.4.1" + }, + { + "componentName": "TinyPlusBeta", + "package": "@opentiny/vue", + "exportName": "Beta", + "destructuring": true, + "version": "3.4.1" + }, + { + "componentName": "TinySearch", + "package": "@opentiny/vue", + "exportName": "Search", + "destructuring": true, + "version": "0.1.13" + }, + { + "componentName": "TinyRow", + "package": "@opentiny/vue", + "exportName": "Row", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyFormItem", + "package": "@opentiny/vue", + "exportName": "FormItem", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyAlert", + "package": "@opentiny/vue", + "exportName": "Alert", + "destructuring": true, + "version": "3.2.0" + }, + { + "componentName": "TinyInput", + "package": "@opentiny/vue", + "exportName": "Input", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyTabs", + "package": "@opentiny/vue", + "exportName": "Tabs", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyDropdownMenu", + "package": "@opentiny/vue", + "exportName": "DropdownMenu", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyDialogBox", + "package": "@opentiny/vue", + "exportName": "DialogBox", + "destructuring": true, + "version": "3.2.0" + }, + { + "componentName": "TinySwitch", + "package": "@opentiny/vue", + "exportName": "Switch", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyTimeLine", + "package": "@opentiny/vue", + "exportName": "TimeLine", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyTabItem", + "package": "@opentiny/vue", + "exportName": "TabItem", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyRadio", + "package": "@opentiny/vue", + "exportName": "Radio", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyForm", + "package": "@opentiny/vue", + "exportName": "Form", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyGrid", + "package": "@opentiny/vue", + "exportName": "Grid", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyNumeric", + "package": "@opentiny/vue", + "exportName": "Numeric", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyCheckboxGroup", + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "destructuring": true, + "version": "0.1.17" + }, + { + "componentName": "TinySelect", + "package": "@opentiny/vue", + "exportName": "Select", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyButtonGroup", + "package": "@opentiny/vue", + "exportName": "ButtonGroup", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyCarousel", + "package": "@opentiny/vue", + "exportName": "Carousel", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyPopeditor", + "package": "@opentiny/vue", + "exportName": "Popeditor", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyDatePicker", + "package": "@opentiny/vue", + "exportName": "DatePicker", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "TinyDropdown", + "package": "@opentiny/vue", + "exportName": "Dropdown", + "destructuring": true, + "version": "0.1.20" + }, + { + "componentName": "TinyChartHistogram", + "package": "@opentiny/vue", + "exportName": "ChartHistogram", + "destructuring": true, + "version": "0.1.16" + }, + { + "componentName": "PortalHome", + "main": "common/components/home", + "destructuring": false, + "version": "1.0.0" + }, + { + "componentName": "PreviewBlock1", + "main": "preview", + "destructuring": false, + "version": "1.0.0" + }, + { + "componentName": "PortalHeader", + "main": "common", + "destructuring": false, + "version": "1.0.0" + }, + { + "componentName": "PortalBlock", + "main": "portal", + "destructuring": false, + "version": "1.0.0" + }, + { + "componentName": "PortalPermissionBlock", + "main": "", + "destructuring": false, + "version": "1.0.0" + } + ], + "bridge": [], + "utils": [ + { + "name": "axios", + "type": "npm", + "content": { + "type": "JSFunction", + "value": "", + "package": "axios", + "destructuring": false, + "exportName": "axios" + } + }, + { + "name": "Button", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Button", + "subName": "", + "destructuring": true, + "main": "" + } + }, + { + "name": "Menu", + "type": "npm", + "content": { + "type": "JSFunction", + "value": "", + "package": "@opentiny/vue", + "exportName": "NavMenu", + "destructuring": true + } + }, + { + "name": "Modal ", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Modal ", + "subName": "", + "destructuring": true, + "main": "" + } + }, + { + "name": "npm", + "type": "function", + "content": { + "type": "JSFunction", + "value": "''" + } + }, + { + "name": "Pager", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Pager", + "subName": "", + "destructuring": true, + "main": "" + } + }, + { + "name": "test", + "type": "function", + "content": { + "type": "JSFunction", + "value": "function test() {\r\n return 'test'\r\n}" + } + }, + { + "name": "util", + "type": "function", + "content": { + "type": "JSFunction", + "value": "function util () {\r\n console.log(321)\r\n}" + } + } + ], + "config": { + "sdkVersion": "1.0.3", + "historyMode": "hash", + "targetRootID": "app" + }, + "constants": "", + "css": "", + "version": "" + }, + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/get/platform-center/courses.json b/mockServer/src/mock/get/platform-center/courses.json new file mode 100644 index 000000000..dcd1c3bc6 --- /dev/null +++ b/mockServer/src/mock/get/platform-center/courses.json @@ -0,0 +1,148 @@ +{ + "data": [ + { + "id": 37, + "createdBy": { + "id": 86, + "username": "开发者", + "email": "developer@lowcode.com", + "resetPasswordToken": "developer", + "blocked": null, + "created_at": "2022-05-27T16:50:44.000Z", + "updated_at": "2022-05-27T16:50:44.000Z", + "block": null, + "is_admin": true, + "is_public": null + }, + "updatedBy": { + "id": 86, + "username": "开发者", + "email": "developer@lowcode.com", + "resetPasswordToken": "developer", + "blocked": null, + "created_at": "2022-05-27T16:50:44.000Z", + "updated_at": "2022-05-27T16:50:44.000Z", + "block": null, + "is_admin": true, + "is_public": null + }, + "created_at": "2023-08-17T02:40:06.000Z", + "updated_at": "2023-08-17T02:40:21.000Z", + "category": "appDev", + "name": "ai生成简单页面教程", + "desc": "", + "poster": "http://localhost:9090/assets/images/0055f57e0a38d45ced54e1b2b566cb29_308x180.jpg", + "type": "advanced", + "tags": "", + "variety": "solution", + "videos": [], + "progress": 0 + }, + { + "id": 34, + "createdBy": { + "id": 108, + "username": "张三", + "email": "xyz@email.com", + "resetPasswordToken": "工号xxxxxx", + "blocked": null, + "created_at": "2022-06-22T08:20:55.000Z", + "updated_at": "2022-12-08T07:29:41.000Z", + "block": null, + "is_admin": false, + "is_public": null + }, + "updatedBy": { + "id": 108, + "username": "张三", + "email": "xyz@email.com", + "resetPasswordToken": "工号xxxxxx", + "blocked": null, + "created_at": "2022-06-22T08:20:55.000Z", + "updated_at": "2022-12-08T07:29:41.000Z", + "block": null, + "is_admin": false, + "is_public": null + }, + "created_at": "2022-08-27T07:29:49.000Z", + "updated_at": "2022-08-27T07:29:49.000Z", + "category": "appDev", + "name": "如何加入组织", + "desc": "讲解如何加入已有组织,如何创建自己的组织", + "poster": "http://localhost:9090/assets/images/627366463067fa2f1a59d7db4ac55885_308x100.jpg", + "type": "introductory", + "tags": ["入门", "最新"], + "variety": "manual", + "videos": [ + { + "id": 72, + "courseId": 34, + "title": "申请加入组织", + "video": "http://localhost:9090/assets/videos/tiny-engine.mp4", + "docs": "TinyEngine简介", + "created_at": "2022-08-27T07:29:49.000Z", + "updated_at": "2022-08-27T07:29:49.000Z" + }, + { + "id": 73, + "courseId": 34, + "title": "创建平台", + "video": "http://localhost:9090/assets/videos/tiny-engine.mp4", + "docs": "fdsa", + "created_at": "2022-08-27T07:29:49.000Z", + "updated_at": "2022-08-27T07:29:49.000Z" + } + ], + "progress": 0 + }, + { + "id": 28, + "createdBy": { + "id": 169, + "username": "张三", + "email": "xyz@email.com", + "resetPasswordToken": "工号xxxxxx", + "blocked": null, + "created_at": "2022-07-04T07:25:53.000Z", + "updated_at": "2022-09-27T11:48:34.000Z", + "block": null, + "is_admin": true, + "is_public": true + }, + "updatedBy": { + "id": 169, + "username": "张三", + "email": "xyz@email.com", + "resetPasswordToken": "工号xxxxxx", + "blocked": null, + "created_at": "2022-07-04T07:25:53.000Z", + "updated_at": "2022-09-27T11:48:34.000Z", + "block": null, + "is_admin": true, + "is_public": true + }, + "created_at": "2022-08-10T08:38:06.000Z", + "updated_at": "2022-08-11T03:44:28.000Z", + "category": "appDev", + "name": "实战课程", + "desc": "实战课程", + "poster": "http://localhost:9090/assets/images/777aad0c570f653f0a95b48b898c7b4b_308x180.jpg", + "type": "practical", + "tags": "", + "variety": "manual", + "videos": [ + { + "id": 66, + "courseId": 28, + "title": "从零搭建一个页面", + "video": "http://localhost:9090/assets/videos/in-action.mp4", + "docs": "", + "created_at": "2022-08-10T08:38:06.000Z", + "updated_at": "2022-08-10T08:38:06.000Z" + } + ], + "progress": 0 + } + ], + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/get/platform-center/user/me.json b/mockServer/src/mock/get/platform-center/user/me.json new file mode 100644 index 000000000..c1876b8df --- /dev/null +++ b/mockServer/src/mock/get/platform-center/user/me.json @@ -0,0 +1,57 @@ +{ + "data": { + "id": 86, + "username": "开发者", + "email": "developer@lowcode.com", + "provider": null, + "password": null, + "resetPasswordToken": "developer", + "confirmationToken": "uuid~dfafasdfasdfa", + "confirmed": true, + "blocked": null, + "role": null, + "created_by": null, + "updated_by": null, + "created_at": "2021-11-11T13:52:21.000Z", + "updated_at": "2022-11-01T01:39:30.000Z", + "block": null, + "is_admin": true, + "is_public": null, + "tenant": { + "id": "1" + }, + "auths": [ + { + "id": 265, + "unit": { + "type": "tenant", + "id": 1, + "name": "public" + }, + "auth_type": null, + "expired_time": null, + "role": { + "name": "Tinybuilder_Tenant_Admin", + "id": 6, + "description": "组织管理员" + } + } + ], + "tenants": [ + { + "id": 1, + "tenant_id": "public", + "name_cn": "公共租户", + "name_en": "Public Tenant", + "description": "Default tenant for new user to explore.", + "created_by": null, + "updated_by": null, + "created_at": "2021-12-28T11:39:10.000Z", + "updated_at": "2023-02-09T08:23:00.000Z", + "createdBy": null, + "updatedBy": 86 + } + ] + }, + "locale": "zh-cn" +} diff --git a/mockServer/src/mock/post/app-center/apps/extension/create.json b/mockServer/src/mock/post/app-center/apps/extension/create.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/apps/extension/create.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/apps/extension/update.json b/mockServer/src/mock/post/app-center/apps/extension/update.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/apps/extension/update.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/apps/update/918.json b/mockServer/src/mock/post/app-center/apps/update/918.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/apps/update/918.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/i18n/entries/bulk/delete.json b/mockServer/src/mock/post/app-center/i18n/entries/bulk/delete.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/i18n/entries/bulk/delete.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/i18n/entries/update.json b/mockServer/src/mock/post/app-center/i18n/entries/update.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/i18n/entries/update.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/sources/create.json b/mockServer/src/mock/post/app-center/sources/create.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/sources/create.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/sources/delete.json b/mockServer/src/mock/post/app-center/sources/delete.json new file mode 100644 index 000000000..9c6b044fe --- /dev/null +++ b/mockServer/src/mock/post/app-center/sources/delete.json @@ -0,0 +1 @@ +{ "data": [], "locale": "zh-cn" } diff --git a/mockServer/src/mock/post/app-center/sources/update.json b/mockServer/src/mock/post/app-center/sources/update.json new file mode 100644 index 000000000..284dfe680 --- /dev/null +++ b/mockServer/src/mock/post/app-center/sources/update.json @@ -0,0 +1,69 @@ +{ + "data": { + "id": 133, + "name": "getAllList", + "data": { + "columns": [ + { + "name": "test", + "title": "测试", + "field": "test", + "type": "string", + "format": {} + }, + { + "name": "test1", + "title": "测试1", + "field": "test1", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "test": "test1", + "test1": "test1", + "_id": "341efc48" + }, + { + "test": "test2", + "test1": "test1", + "_id": "b86b516c" + }, + { + "test": "test3", + "test1": "test1", + "_id": "f680cd78" + } + ], + "options": { + "uri": "/app-center/api/sources/list/918", + "isSync": true, + "method": "GET" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T07:32:16.000Z", + "updated_at": "2023-01-19T03:29:11.000Z" + }, + "locale": "zh-cn" +} diff --git a/mockServer/src/routes/error-routes.js b/mockServer/src/routes/error-routes.js new file mode 100644 index 000000000..aca35329c --- /dev/null +++ b/mockServer/src/routes/error-routes.js @@ -0,0 +1,24 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +module.exports = function () { + return function (ctx, next) { + switch (ctx.status) { + case 404: + ctx.body = '没有找到内容 - 404' + break + default: + break + } + return next() + } +} diff --git a/mockServer/src/routes/main-routes.js b/mockServer/src/routes/main-routes.js new file mode 100644 index 000000000..06280c494 --- /dev/null +++ b/mockServer/src/routes/main-routes.js @@ -0,0 +1,227 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import fs from 'fs-extra' +import * as glob from 'glob' +import KoaRouter from 'koa-router' +import path from 'path' +import MockService from '../services/mockService' +import { getResponseData } from '../tool/Common' + +const router = new KoaRouter() +export const mockService = new MockService() +const getJsonPathData = (jpath, method = 'get') => { + const usefulPath = jpath.split(`${method}${path.sep}`)[1] + const apipath = usefulPath.split(path.sep) + const lastSegment = apipath[apipath.length - 1] + const lastdirname = lastSegment.split('.')[0] + apipath[apipath.length - 1] = lastdirname + const [center, version, ...routes] = apipath + let api = '' + if (version === 'v1') { + api = `/${center}/${version}/api/${routes.join('/')}` + } else { + api = `/${center}/api/${version}/${routes.join('/')}` + } + const data = fs.readJSONSync(path.resolve(__dirname, path.relative(__dirname, jpath))) + return { + api, + data + } +} + +const mockPath = path.resolve(__dirname, '../mock') +// 注册路由 +glob.globSync(`${mockPath}/get/**/*.json`).forEach((jpath) => { + const { api, data } = getJsonPathData(jpath) + router.get(api, (ctx, next) => { + ctx.body = data + }) +}) + +glob.globSync(`${mockPath}/post/**/*.json`).forEach((jpath) => { + const { api, data } = getJsonPathData(jpath, 'post') + router.post(api, (ctx, next) => { + ctx.body = data + }) +}) + +router.get('/app-center/api/apps/canvas/lock', async (ctx) => { + ctx.body = await mockService.appService.lock(ctx.request.query) +}) + +router.post('/app-center/api/schema2code', (ctx) => { + const { pageInfo } = ctx.request.body + ctx.body = mockService.schema2codeService.schema2code(pageInfo) +}) + +router.get('/app-center/api/preview/metadata', (ctx) => { + ctx.body = mockService.appService.getAppPreviewMetaData() +}) + +router.post('/app-center/api/pages/create', async (ctx) => { + ctx.body = await mockService.pageService.create(ctx.request.body) +}) + +router.post('/app-center/api/pages/update/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.pageService.update(id, body) +}) + +router.get('/app-center/api/pages/list/:appId', async (ctx) => { + const { appId } = ctx.params + ctx.body = await mockService.pageService.list(appId) +}) + +router.get('/app-center/api/pages/detail/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.pageService.detail(id) +}) + +router.get('/app-center/api/pages/delete/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.pageService.delete(id) +}) + +router.get('/material-center/api/block/detail/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockService.detail(id) +}) + +router.get('/material-center/api/blocks', async (ctx) => { + const { appId } = ctx.params + ctx.body = await mockService.blockService.list(appId) +}) + +router.post('/material-center/api/block/create', async (ctx) => { + const result = mockService.blockService.create(ctx.request.body) + const categoriesId = ctx.request.body.categories[0] + const _id = result.id + await mockService.blockCategoryService.update(categoriesId, { _id }) + ctx.body = getResponseData(result) +}) + +router.post('/material-center/api/block/update/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.blockService.update(id, body) +}) + +router.get('/material-center/api/block/delete/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockService.delete(id) +}) + +router.post('/material-center/api/block-groups/create', async (ctx) => { + ctx.body = await mockService.blockGroupService.create(ctx.request.body) +}) + +router.post('/material-center/api/block-groups/update/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.blockGroupService.update(id, body) +}) + +router.get('/material-center/api/block-groups/delete/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockGroupService.delete(id) +}) + +router.get('/material-center/api/block-groups', async (ctx) => { + const result = await mockService.blockGroupService.find(ctx.query) + let blockGroup + if (result.data.length === 0) { + ctx.body = result + } else if (result.data.length > 1) { + blockGroup = await Promise.all( + result.data.map(async (group) => { + group.blocks = await Promise.all( + group.blocks.map(async (block) => { + const blockData = await mockService.blockService.detail(block.id) + return blockData + }) + ) + return group + }) + ) + ctx.body = getResponseData(blockGroup) + } else if (result.data.length === 1) { + blockGroup = result.data[0] + const blocks = await Promise.all( + blockGroup.blocks.map(async (item) => { + const blockData = await mockService.blockService.detail(item) + return blockData + }) + ) + + blockGroup.blocks = blocks + ctx.body = getResponseData([blockGroup]) + } +}) + +router.post('/material-center/api/block-categories', async (ctx) => { + ctx.body = await mockService.blockCategoryService.create(ctx.request.body) +}) + +router.put('/material-center/api/block-categories/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.blockCategoryService.update(id, body) +}) + +router.delete('/material-center/api/block-categories/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockCategoryService.delete(id) +}) + +router.get('/material-center/api/block-categories', async (ctx) => { + const result = await mockService.blockCategoryService.find(ctx.query) + const blockCategories = await Promise.all( + result.data.map(async (group) => { + const blocks = await Promise.all( + group.blocks.map(async (block) => { + const blockData = await mockService.blockService.detail(block) + return blockData + }) + ) + group.blocks = blocks + return group + }) + ) + ctx.body = getResponseData(blockCategories) +}) + +router.get('/app-center/api/sources/detail/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.sourceService.detail(id) +}) + +router.post('/material-center/api/block/deploy', async (ctx) => { + ctx.body = await mockService.blockBuildService.build(ctx.request.body) +}) + +router.get('/material-center/api/tasks/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.taskService.detail(id) +}) + +router.get('/block-history', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockHistoryService.find(id) +}) + +router.post('block-history/create', async (ctx) => { + ctx.body = await mockService.blockHistoryService.create(ctx.request.body) +}) + +export default router diff --git a/mockServer/src/services/.gitkeep b/mockServer/src/services/.gitkeep new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/mockServer/src/services/.gitkeep @@ -0,0 +1 @@ +1 diff --git a/mockServer/src/services/app.js b/mockServer/src/services/app.js new file mode 100644 index 000000000..60821e43d --- /dev/null +++ b/mockServer/src/services/app.js @@ -0,0 +1,73 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { pageService } from '../routes/main-routes' +import { getResponseData } from '../tool/Common' +export default class AppService { + async lock(query) { + const { id, state } = query + const occupier = state === 'occupy' ? pageService.userInfo : null + await pageService.update(id, { occupier }) + return getResponseData({ + operate: 'success', + occupier + }) + } + + // 获取应用预览数据 + getAppPreviewMetaData() { + const appMetaData = require('./appinfo.json') + + const { i18n: i18nEntries, source = [], extension = [], app } = appMetaData + // 拼装数据源 + const dataSource = { + list: source, + dataHandler: app.data_handler + } + // 拼装工具类 + const utils = [] + extension.forEach((item) => { + const { name, type, content, category } = item + const data = { name, type, content } + if (category === 'utils') { + utils.push(data) + } + }) + // 拼装国际化词条 + const entriesData = getResponseData(i18nEntries) + const i18n = this.formatI18nEntrites(entriesData) + return getResponseData({ + dataSource, + globalState: app.global_state, + utils, + i18n + }) + } + + formatI18nEntrites(entriesData) { + const entries = entriesData.data + // 中文和英文作为全局国际化语言,并没有和应用/区块建立关联关系 + const defaultLang = [{ lang: 'en_US' }, { lang: 'zh_CN' }] + + const res = {} + entries.forEach((entry) => { + const { + key, + lang: { lang }, + content + } = entry + res[lang] = res[lang] || {} + res[lang][key] = content + }) + return res + } +} diff --git a/mockServer/src/services/appinfo.json b/mockServer/src/services/appinfo.json new file mode 100644 index 000000000..ab75552f6 --- /dev/null +++ b/mockServer/src/services/appinfo.json @@ -0,0 +1,29712 @@ +{ + "i18n": [ + { + "id": 123, + "key": "lowcode.c257d5e8", + "content": "search", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-06-13T08:17:17.000Z", + "updated_at": "2023-05-15T00:48:10.000Z" + }, + { + "id": 124, + "key": "lowcode.c257d5e8", + "content": "查询", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-06-13T08:17:17.000Z", + "updated_at": "2023-05-15T00:48:10.000Z" + }, + { + "id": 211, + "key": "lowcode.61c8ac8c", + "content": "地方", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-06-30T08:06:59.000Z", + "updated_at": "2023-05-04T08:06:48.000Z" + }, + { + "id": 212, + "key": "lowcode.61c8ac8c", + "content": "dsdsa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-06-30T08:06:59.000Z", + "updated_at": "2023-05-04T08:06:48.000Z" + }, + { + "id": 229, + "key": "lowcode.f53187a0", + "content": "测试", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-07-06T11:19:17.000Z", + "updated_at": "2023-07-18T12:33:31.000Z" + }, + { + "id": 230, + "key": "lowcode.f53187a0", + "content": "test", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-07-06T11:19:17.000Z", + "updated_at": "2023-07-18T12:33:31.000Z" + }, + { + "id": 231, + "key": "lowcode.97ad00dd", + "content": "创建物料资产包", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-07-06T11:21:54.000Z", + "updated_at": "2022-07-06T11:21:54.000Z" + }, + { + "id": 232, + "key": "lowcode.97ad00dd", + "content": "createMaterial", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2022-07-06T11:21:54.000Z", + "updated_at": "2022-07-06T11:21:54.000Z" + }, + { + "id": 31985, + "key": "lowcode.61dcef52", + "content": "terterere", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-05-04T08:07:15.000Z", + "updated_at": "2023-05-04T08:07:15.000Z" + }, + { + "id": 31986, + "key": "lowcode.61dcef52", + "content": "sadasda", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-05-04T08:07:15.000Z", + "updated_at": "2023-05-04T08:07:15.000Z" + }, + { + "id": 36011, + "key": "lowcode.45f4c42a", + "content": "gfdgfd", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-05-06T08:18:35.000Z", + "updated_at": "2023-05-06T08:20:01.000Z" + }, + { + "id": 36012, + "key": "lowcode.45f4c42a", + "content": "gdfgdf", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-05-06T08:18:35.000Z", + "updated_at": "2023-05-06T08:20:01.000Z" + }, + { + "id": 45420, + "key": "lowcode.c6f5a652", + "content": "fsdaf", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-06-17T08:50:24.000Z", + "updated_at": "2023-07-18T12:33:28.000Z" + }, + { + "id": 45421, + "key": "lowcode.c6f5a652", + "content": "fsdafds", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-06-17T08:50:24.000Z", + "updated_at": "2023-07-18T12:33:28.000Z" + }, + { + "id": 55726, + "key": "lowcode.34923432", + "content": "fdsafdsa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:01:19.000Z", + "updated_at": "2023-08-15T07:01:19.000Z" + }, + { + "id": 55727, + "key": "lowcode.34923432", + "content": "fdsafds", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:01:19.000Z", + "updated_at": "2023-08-15T07:01:19.000Z" + }, + { + "id": 55728, + "key": "lowcode.48521e45", + "content": "fdsfds", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:03:02.000Z", + "updated_at": "2023-08-15T07:03:02.000Z" + }, + { + "id": 55729, + "key": "lowcode.6534943e", + "content": "fdsafds", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:04:22.000Z", + "updated_at": "2023-08-15T07:04:22.000Z" + }, + { + "id": 55730, + "key": "lowcode.6534943e", + "content": "fdsafdsa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:04:22.000Z", + "updated_at": "2023-08-15T07:04:22.000Z" + }, + { + "id": 55731, + "key": "lowcode.44252642", + "content": "fdsafds", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:04:53.000Z", + "updated_at": "2023-08-15T07:04:53.000Z" + }, + { + "id": 55732, + "key": "lowcode.44252642", + "content": "aaaa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-15T07:04:53.000Z", + "updated_at": "2023-08-15T07:04:53.000Z" + }, + { + "id": 64792, + "key": "lowcode.2a743651", + "content": "sda", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T00:58:35.000Z", + "updated_at": "2023-08-21T00:58:35.000Z" + }, + { + "id": 64793, + "key": "lowcode.2a743651", + "content": "fdsaf", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T00:58:35.000Z", + "updated_at": "2023-08-21T00:58:35.000Z" + }, + { + "id": 64794, + "key": "lowcode.24315357", + "content": "fdsafds", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:51:56.000Z", + "updated_at": "2023-08-21T02:51:56.000Z" + }, + { + "id": 64795, + "key": "lowcode.24315357", + "content": "fsdafds", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:51:56.000Z", + "updated_at": "2023-08-21T02:51:56.000Z" + }, + { + "id": 64796, + "key": "lowcode.44621691", + "content": "fdsafsd", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:00.000Z", + "updated_at": "2023-08-21T02:52:00.000Z" + }, + { + "id": 64797, + "key": "lowcode.44621691", + "content": "sd", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:00.000Z", + "updated_at": "2023-08-21T02:52:00.000Z" + }, + { + "id": 64798, + "key": "lowcode.65636226", + "content": "fdsaf", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:04.000Z", + "updated_at": "2023-08-21T02:52:04.000Z" + }, + { + "id": 64799, + "key": "lowcode.65636226", + "content": "fdsfsd", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:04.000Z", + "updated_at": "2023-08-21T02:52:04.000Z" + }, + { + "id": 64800, + "key": "lowcode.6426a4e2", + "content": "sd", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:08.000Z", + "updated_at": "2023-08-21T02:52:08.000Z" + }, + { + "id": 64801, + "key": "lowcode.6426a4e2", + "content": "fdsafsd", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:08.000Z", + "updated_at": "2023-08-21T02:52:08.000Z" + }, + { + "id": 64802, + "key": "lowcode.e41c6636", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:11.000Z", + "updated_at": "2023-08-21T02:52:11.000Z" + }, + { + "id": 64803, + "key": "lowcode.e41c6636", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:11.000Z", + "updated_at": "2023-08-21T02:52:11.000Z" + }, + { + "id": 64804, + "key": "lowcode.51c23164", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:15.000Z", + "updated_at": "2023-08-21T02:52:15.000Z" + }, + { + "id": 64805, + "key": "lowcode.51c23164", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:15.000Z", + "updated_at": "2023-08-21T02:52:15.000Z" + }, + { + "id": 64806, + "key": "lowcode.17245b46", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:21.000Z", + "updated_at": "2023-08-21T02:52:21.000Z" + }, + { + "id": 64807, + "key": "lowcode.17245b46", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:21.000Z", + "updated_at": "2023-08-21T02:52:21.000Z" + }, + { + "id": 64808, + "key": "lowcode.4573143c", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:22.000Z", + "updated_at": "2023-08-21T02:52:22.000Z" + }, + { + "id": 64809, + "key": "lowcode.4573143c", + "content": "a", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:22.000Z", + "updated_at": "2023-08-21T02:52:22.000Z" + }, + { + "id": 64810, + "key": "lowcode.56432442", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:25.000Z", + "updated_at": "2023-09-04T08:45:49.000Z" + }, + { + "id": 64811, + "key": "lowcode.56432442", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:25.000Z", + "updated_at": "2023-09-04T08:45:49.000Z" + }, + { + "id": 64812, + "key": "lowcode.33566643", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:28.000Z", + "updated_at": "2023-08-21T02:52:28.000Z" + }, + { + "id": 64813, + "key": "lowcode.33566643", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:28.000Z", + "updated_at": "2023-08-21T02:52:28.000Z" + }, + { + "id": 64814, + "key": "lowcode.565128f3", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:32.000Z", + "updated_at": "2023-08-21T02:52:32.000Z" + }, + { + "id": 64815, + "key": "lowcode.565128f3", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:32.000Z", + "updated_at": "2023-08-21T02:52:32.000Z" + }, + { + "id": 64816, + "key": "lowcode.56643835", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 1, + "lang": "zh_CN", + "label": "简体中文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:00:54.000Z", + "updated_at": "2022-03-08T08:00:54.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:34.000Z", + "updated_at": "2023-08-21T02:52:34.000Z" + }, + { + "id": 64817, + "key": "lowcode.56643835", + "content": "aa", + "host": 918, + "host_type": "app", + "lang": { + "id": 2, + "lang": "en_US", + "label": "美式英文", + "created_by": null, + "updated_by": null, + "created_at": "2022-03-08T08:01:16.000Z", + "updated_at": "2022-03-08T08:01:16.000Z" + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-08-21T02:52:34.000Z", + "updated_at": "2023-08-21T02:52:34.000Z" + } + ], + "source": [ + { + "id": 132, + "name": "getAllComponent", + "data": { + "data": [], + "type": "array" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T06:26:26.000Z", + "updated_at": "2022-06-28T07:02:30.000Z" + }, + { + "id": 133, + "name": "getAllList", + "data": { + "columns": [ + { + "name": "test", + "title": "测试", + "field": "test", + "type": "string", + "format": {} + }, + { + "name": "test1", + "title": "测试1", + "field": "test1", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "test": "test1", + "test1": "test1", + "_id": "341efc48" + }, + { + "test": "test2", + "test1": "test1", + "_id": "b86b516c" + }, + { + "test": "test3", + "test1": "test1", + "_id": "f680cd78" + } + ], + "options": { + "uri": "", + "method": "GET" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T07:32:16.000Z", + "updated_at": "2023-01-19T03:29:11.000Z" + }, + { + "id": 135, + "name": "getAllMaterialList", + "data": { + "columns": [ + { + "name": "id", + "title": "id", + "field": "id", + "type": "string", + "format": {} + }, + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": {} + }, + { + "name": "framework", + "title": "framework", + "field": "framework", + "type": "string", + "format": { + "required": true + } + }, + { + "name": "components", + "title": "components", + "field": "components", + "type": "string", + "format": {} + }, + { + "name": "content", + "title": "content", + "field": "content", + "type": "string", + "format": {} + }, + { + "name": "url", + "title": "url", + "field": "url", + "type": "string", + "format": {} + }, + { + "name": "published_at", + "title": "published_at", + "field": "published_at", + "type": "string", + "format": {} + }, + { + "name": "created_at", + "title": "created_at", + "field": "created_at", + "type": "string", + "format": {} + }, + { + "name": "updated_at", + "title": "updated_at", + "field": "updated_at", + "type": "string", + "format": {} + }, + { + "name": "published", + "title": "published", + "field": "published", + "type": "string", + "format": {} + }, + { + "name": "last_build_info", + "title": "last_build_info", + "field": "last_build_info", + "type": "string", + "format": {} + }, + { + "name": "tenant", + "title": "tenant", + "field": "tenant", + "type": "string", + "format": {} + }, + { + "name": "version", + "title": "version", + "field": "version", + "type": "string", + "format": {} + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "2a23e653" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "06b253be" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "c55a41ed" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "f37123ec" + }, + { + "id": "7a63c1a2", + "url": "", + "name": "tiny-vue", + "tenant": "", + "content": "Tiny Vue物料", + "version": "1.0.0", + "framework": "Vue", + "published": "", + "components": "", + "created_at": "", + "updated_at": "", + "description": "Tiny Vue物料", + "published_at": "", + "last_build_info": "", + "_id": "7a63c1a2" + } + ], + "options": { + "uri": "", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-29T00:57:50.000Z", + "updated_at": "2023-05-15T02:37:12.000Z" + }, + { + "id": 139, + "name": "treedata", + "data": { + "data": [ + { + "label": "level111", + "value": "111", + "id": "f6609643", + "pid": "", + "_RID": "row_4" + }, + { + "label": "level1-son", + "value": "111-1", + "id": "af1f937f", + "pid": "f6609643", + "_RID": "row_5" + }, + { + "label": "level222", + "value": "222", + "id": "28e3709c", + "pid": "", + "_RID": "row_6" + }, + { + "label": "level2-son", + "value": "222-1", + "id": "6b571bef", + "pid": "28e3709c", + "_RID": "row_5" + }, + { + "id": "6317c2cc", + "pid": "fdfa", + "label": "fsdfaa", + "value": "fsadf", + "_RID": "row_6" + }, + { + "id": "9cce369f", + "pid": "test", + "label": "test1", + "value": "001" + } + ], + "type": "tree" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-30T06:13:57.000Z", + "updated_at": "2022-07-29T03:14:55.000Z" + }, + { + "id": 150, + "name": "componentList", + "data": { + "data": [ + { + "_RID": "row_1", + "name": "表单", + "isSelected": "true", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据" + }, + { + "name": "按钮", + "isSelected": "false", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型" + }, + { + "id": "490f8a00", + "_RID": "row_3", + "name": "表单项", + "framework": "", + "materials": "", + "description": "Form 组件下的 FormItem 配置" + }, + { + "id": "c259b8b3", + "_RID": "row_4", + "name": "开关", + "framework": "", + "materials": "", + "description": "关闭或打开" + }, + { + "id": "083ed9c7", + "_RID": "row_5", + "name": "互斥按钮组", + "framework": "", + "materials": "", + "description": "以按钮组的方式出现,常用于多项类似操作" + }, + { + "id": "09136cea", + "_RID": "row_6", + "name": "提示框", + "framework": "", + "materials": "", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画" + }, + { + "id": "a63b57d5", + "_RID": "row_7", + "name": "文字提示框", + "framework": "", + "materials": "", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信" + }, + { + "id": "a0f6e8a3", + "_RID": "row_8", + "name": "树", + "framework": "", + "materials": "", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单" + }, + { + "id": "d1aa18fc", + "_RID": "row_9", + "name": "分页", + "framework": "", + "materials": "", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件" + }, + { + "id": "ca49cc52", + "_RID": "row_10", + "name": "表格", + "framework": "", + "materials": "", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等" + }, + { + "id": "4e20ecc9", + "name": "搜索框", + "framework": "", + "materials": "", + "description": "指定条件对象进行搜索数据" + }, + { + "id": "6b093ee5", + "name": "折叠面板", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "0a09abc0", + "name": "对话框", + "framework": "", + "materials": "", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作" + }, + { + "id": "f814b901", + "name": "标签页签项", + "framework": "", + "materials": "", + "description": "tab页签" + }, + { + "id": "c5ae797c", + "name": "单选", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,在一组备选项中进行单选" + }, + { + "id": "33d0c590", + "_RID": "row_13", + "name": "弹出编辑", + "framework": "", + "materials": "", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件" + }, + { + "id": "16711dfa", + "_RID": "row_14", + "name": "下拉框", + "framework": "", + "materials": "", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件" + }, + { + "id": "a9fd190a", + "_RID": "row_15", + "name": "折叠面板项", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "a7dfa9ec", + "_RID": "row_16", + "name": "复选框", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选" + }, + { + "id": "d4bb8330", + "name": "输入框", + "framework": "", + "materials": "", + "description": "通过鼠标或键盘输入字符" + }, + { + "id": "ced3dc83", + "name": "时间线", + "framework": "", + "materials": "", + "description": "时间线" + } + ], + "type": "array", + "columns": [ + { + "name": "name", + "type": "string", + "field": "name", + "title": "name", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "description", + "type": "string", + "field": "description", + "title": "description", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "isSelected", + "type": "string", + "field": "isSelected", + "title": "isSelected", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + } + ], + "options": { + "uri": "http://localhost:9090/assets/json/bundle.json", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T02:20:07.000Z", + "updated_at": "2022-07-04T06:25:29.000Z" + }, + { + "id": 151, + "name": "selectedComponents", + "data": { + "columns": [ + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "isSelected", + "title": "isSelected", + "field": "isSelected", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + } + ], + "type": "array", + "data": [ + { + "name": "标签页", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "isSelected": "true", + "_RID": "row_2" + }, + { + "name": "布局列", + "description": "列配置信息", + "isSelected": "true", + "id": "76a7080a", + "_RID": "row_4" + }, + { + "name": "日期选择器", + "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式", + "isSelected": "true", + "id": "76b20d73", + "_RID": "row_1" + }, + { + "name": "走马灯", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现", + "isSelected": "true", + "id": "4c884c3d" + } + ] + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T03:04:05.000Z", + "updated_at": "2022-07-04T03:43:40.000Z" + } + ], + "extension": [ + { + "id": 176, + "name": "axios", + "type": "npm", + "content": { + "type": "JSFunction", + "value": "", + "package": "axios", + "destructuring": false, + "exportName": "axios" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-10-27T11:02:26.000Z", + "updated_at": "2022-10-27T11:02:26.000Z" + }, + { + "id": 104, + "name": "Button", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Button", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-07-06T10:17:31.000Z", + "updated_at": "2022-07-06T10:17:31.000Z" + }, + { + "id": 101, + "name": "Menu", + "type": "npm", + "content": { + "type": "JSFunction", + "value": "", + "package": "@opentiny/vue", + "exportName": "NavMenu", + "destructuring": true + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-06-24T06:40:52.000Z", + "updated_at": "2022-06-24T08:03:13.000Z" + }, + { + "id": 103, + "name": "Modal ", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Modal ", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-07-01T03:21:19.000Z", + "updated_at": "2022-07-01T03:21:19.000Z" + }, + { + "id": 146, + "name": "npm", + "type": "function", + "content": { + "type": "JSFunction", + "value": "''" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-08-29T06:54:02.000Z", + "updated_at": "2023-01-05T01:00:52.000Z" + }, + { + "id": 102, + "name": "Pager", + "type": "npm", + "content": { + "package": "@opentiny/vue", + "version": "", + "exportName": "Pager", + "subName": "", + "destructuring": true, + "main": "" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-06-28T08:17:38.000Z", + "updated_at": "2023-03-21T12:13:04.000Z" + }, + { + "id": 106, + "name": "test", + "type": "function", + "content": { + "type": "JSFunction", + "value": "function test() {\r\n return 'test'\r\n}" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-07-06T10:21:02.000Z", + "updated_at": "2023-03-21T12:12:49.000Z" + }, + { + "id": 97, + "name": "util", + "type": "function", + "content": { + "type": "JSFunction", + "value": "function util () {\r\n console.log(321)\r\n}" + }, + "app": 918, + "category": "utils", + "created_by": null, + "updated_by": null, + "created_at": "2022-06-23T11:13:07.000Z", + "updated_at": "2023-04-06T02:31:44.000Z" + } + ], + "pages": [ + { + "name": "createVm", + "id": "NTJ4MjvqoVj8OVsc", + "app": "918", + "route": "createVm", + "page_content": { + "state": { + "dataDisk": [1, 2, 3] + }, + "methods": {}, + "componentName": "Page", + "css": "body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}", + "props": {}, + "children": [ + { + "componentName": "div", + "props": { + "style": "padding-bottom: 10px; padding-top: 10px;" + }, + "id": "2b2cabf0", + "children": [ + { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "基础配置" + }, + { + "name": "网络配置" + }, + { + "name": "高级配置" + }, + { + "name": "确认配置" + } + ], + "horizontal": true, + "style": "border-radius: 0px;" + }, + "id": "dd764b17" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "id": "30c94cc8", + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "计费模式" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "包年/包月", + "value": "1" + }, + { + "text": "按需计费", + "value": "2" + } + ], + "modelValue": "1" + }, + "id": "a8d84361" + } + ], + "id": "9f39f3e7" + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "区域" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "乌兰察布二零一", + "value": "1" + } + ], + "modelValue": "1", + "style": "border-radius: 0px; margin-right: 10px;" + }, + "id": "c97ccd99" + }, + { + "componentName": "Text", + "props": { + "text": "温馨提示:页面左上角切换区域", + "style": "background-color: [object Event]; color: #8a8e99; font-size: 12px;" + }, + "id": "20923497" + }, + { + "componentName": "Text", + "props": { + "text": "不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度", + "style": "display: block; color: #8a8e99; border-radius: 0px; font-size: 12px;" + }, + "id": "54780a26" + } + ], + "id": "4966384d" + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "可用区", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "可用区1", + "value": "1" + }, + { + "text": "可用区2", + "value": "2" + }, + { + "text": "可用区3", + "value": "3" + } + ], + "modelValue": "1" + }, + "id": "6184481b" + } + ], + "id": "690837bf" + } + ], + "id": "b6a425d4" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "CPU架构" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "x86计算", + "value": "1" + }, + { + "text": "鲲鹏计算", + "value": "2" + } + ], + "modelValue": "1" + }, + "id": "7d33ced7" + } + ], + "id": "05ed5a79" + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "区域" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex; justify-content: flex-start; align-items: center;" + }, + "id": "606edf78", + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex; align-items: center; margin-right: 10px;" + }, + "id": "f3f98246", + "children": [ + { + "componentName": "Text", + "props": { + "text": "vCPUs", + "style": "width: 80px;" + }, + "id": "c287437e" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + }, + "id": "4c43286b" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "display: flex; align-items: center; margin-right: 10px;" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "内存", + "style": "width: 80px; border-radius: 0px;" + }, + "id": "38b8fa1f" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + }, + "id": "cd33328e" + } + ], + "id": "2b2c678f" + }, + { + "componentName": "div", + "props": { + "style": "display: flex; align-items: center;" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "规格名称", + "style": "width: 80px;" + }, + "id": "d3eb6352" + }, + { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + }, + "id": "21cb9282" + } + ], + "id": "b8e0f35c" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "border-radius: 0px;" + }, + "id": "5000c83e", + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "通用计算型", + "value": "1" + }, + { + "text": "通用计算增强型", + "value": "2" + }, + { + "text": "内存优化型", + "value": "3" + }, + { + "text": "内存优化型", + "value": "4" + }, + { + "text": "磁盘增强型", + "value": "5" + }, + { + "text": "超高I/O型", + "value": "6" + }, + { + "text": "GPU加速型", + "value": "7" + } + ], + "modelValue": "1", + "style": "border-radius: 0px; margin-top: 12px;" + }, + "id": "b8724703" + }, + { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "radio", + "width": 60 + }, + { + "field": "employees", + "title": "规格名称" + }, + { + "field": "created_date", + "title": "vCPUs | 内存(GiB)", + "sortable": true + }, + { + "field": "city", + "title": "CPU", + "sortable": true + }, + { + "title": "基准 / 最大带宽\t", + "sortable": true + }, + { + "title": "内网收发包", + "sortable": true + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ], + "style": "margin-top: 12px; border-radius: 0px;", + "auto-resize": true + }, + "id": "77701c25" + }, + { + "componentName": "div", + "props": { + "style": "margin-top: 12px; border-radius: 0px;" + }, + "id": "3339838b", + "children": [ + { + "componentName": "Text", + "props": { + "text": "当前规格", + "style": "width: 150px; display: inline-block;" + }, + "id": "203b012b" + }, + { + "componentName": "Text", + "props": { + "text": "通用计算型 | Si2.large.2 | 2vCPUs | 4 GiB", + "style": "font-weight: 700;" + }, + "id": "87723f52" + } + ] + } + ] + } + ], + "id": "657fb2fc" + } + ], + "id": "d19b15cf" + } + ], + "id": "9991228b" + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "镜像", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "公共镜像", + "value": "1" + }, + { + "text": "私有镜像", + "value": "2" + }, + { + "text": "共享镜像", + "value": "3" + } + ], + "modelValue": "1" + }, + "id": "922b14cb" + }, + { + "componentName": "div", + "props": { + "style": "display: flex; margin-top: 12px; border-radius: 0px;" + }, + "id": "6b679524", + "children": [ + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 170px; margin-right: 10px;" + }, + "id": "4851fff7" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 340px;" + }, + "id": "a7183eb7" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "margin-top: 12px;" + }, + "id": "57aee314", + "children": [ + { + "componentName": "Text", + "props": { + "text": "请注意操作系统的语言类型。", + "style": "color: #e37d29;" + }, + "id": "56d36c27" + } + ] + } + ], + "id": "e3b02436" + } + ], + "id": "59aebf2b" + } + ], + "id": "87ff7b99" + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "系统盘", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex;" + }, + "id": "cddba5b8", + "children": [ + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 200px; margin-right: 10px;" + }, + "id": "a97fbe15" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px; margin-right: 10px;" + }, + "id": "1cde4c0f" + }, + { + "componentName": "Text", + "props": { + "text": "GiB \nIOPS上限240,IOPS突发上限5,000", + "style": "color: #575d6c; font-size: 12px;" + }, + "id": "2815d82d" + } + ] + } + ], + "id": "50239a3a" + } + ], + "id": "e8582986" + }, + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "数据盘", + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin-top: 12px; display: flex;" + }, + "id": "728c9825", + "children": [ + { + "componentName": "Icon", + "props": { + "style": "margin-right: 10px; width: 16px; height: 16px;", + "name": "IconPanelMini" + }, + "id": "fded6930" + }, + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "style": "width: 200px; margin-right: 10px;" + }, + "id": "62734e3f" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px; margin-right: 10px;" + }, + "id": "667c7926" + }, + { + "componentName": "Text", + "props": { + "text": "GiB \nIOPS上限600,IOPS突发上限5,000", + "style": "color: #575d6c; font-size: 12px; margin-right: 10px;" + }, + "id": "e7bc36d6" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px;" + }, + "id": "1bd56dc0" + } + ], + "loop": { + "type": "JSExpression", + "value": "this.state.dataDisk" + } + }, + { + "componentName": "div", + "props": { + "style": "display: flex; margin-top: 12px; border-radius: 0px;" + }, + "children": [ + { + "componentName": "Icon", + "props": { + "name": "IconPlus", + "style": "width: 16px; height: 16px; margin-right: 10px;" + }, + "id": "65c89f2b" + }, + { + "componentName": "Text", + "props": { + "text": "增加一块数据盘", + "style": "font-size: 12px; border-radius: 0px; margin-right: 10px;" + }, + "id": "cb344071" + }, + { + "componentName": "Text", + "props": { + "text": "您还可以挂载 21 块磁盘(云硬盘)", + "style": "color: #8a8e99; font-size: 12px;" + }, + "id": "80eea996" + } + ], + "id": "e9e530ab" + } + ], + "id": "078e03ef" + } + ], + "id": "ccef886e" + } + ], + "id": "0fb7bd74" + }, + { + "componentName": "div", + "props": { + "style": "border-width: 1px; border-style: solid; border-color: #ffffff; padding-top: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; position: fixed; inset: auto 0% 0% 0%; height: 80px; line-height: 80px; border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "inline": false, + "label-position": "left ", + "label-width": "150px", + "style": "border-radius: 0px;" + }, + "children": [], + "id": "21ed4475" + }, + { + "componentName": "TinyRow", + "props": { + "style": "border-radius: 0px; height: 100%;" + }, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": "8" + }, + "id": "b9d051a5", + "children": [ + { + "componentName": "TinyRow", + "props": { + "style": "border-radius: 0px;" + }, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": "5", + "style": "display: flex;" + }, + "id": "02352776", + "children": [ + { + "componentName": "Text", + "props": { + "text": "购买量", + "style": "margin-right: 10px;" + }, + "id": "0cd9ed5c" + }, + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "style": "width: 120px; margin-right: 10px;" + }, + "id": "2f9cf442" + }, + { + "componentName": "Text", + "props": { + "text": "台" + }, + "id": "facd4481" + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": "7" + }, + "id": "82b6c659", + "children": [ + { + "componentName": "div", + "props": {}, + "id": "9cd65874", + "children": [ + { + "componentName": "Text", + "props": { + "text": "配置费用", + "style": "font-size: 12px;" + }, + "id": "b5a0a0da" + }, + { + "componentName": "Text", + "props": { + "text": "¥1.5776", + "style": "padding-left: 10px; padding-right: 10px; color: #de504e;" + }, + "id": "d9464214" + }, + { + "componentName": "Text", + "props": { + "text": "/小时", + "style": "font-size: 12px;" + }, + "id": "af7cc5e6" + } + ] + }, + { + "componentName": "div", + "props": {}, + "id": "89063830", + "children": [ + { + "componentName": "Text", + "props": { + "text": "参考价格,具体扣费请以账单为准。", + "style": "font-size: 12px; border-radius: 0px;" + }, + "id": "d8995fbc" + }, + { + "componentName": "Text", + "props": { + "text": "了解计费详情", + "style": "font-size: 12px; color: #344899;" + }, + "id": "b383c3e2" + } + ] + } + ] + } + ], + "id": "94fc0e43" + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": "4", + "style": "display: flex; flex-direction: row-reverse; border-radius: 0px; height: 100%; justify-content: flex-start; align-items: center;" + }, + "id": "10b73009", + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "下一步: 网络配置", + "type": "danger", + "style": "max-width: unset;" + }, + "id": "0b584011" + } + ] + } + ], + "id": "d414a473" + } + ], + "id": "e8ec029b" + } + ], + "fileName": "createVm" + }, + "tenant": 1, + "isBody": false, + "parentId": "0", + "group": "staticPages", + "depth": 0, + "isPage": true, + "isDefault": false, + "occupier": { + "id": 86, + "username": "开发者", + "email": "developer@lowcode.com", + "resetPasswordToken": "developer", + "confirmationToken": "dfb2c162-351f-4f44-ad5f-8998", + "is_admin": true + }, + "isHome": false, + "_id": "NTJ4MjvqoVj8OVsc" + }, + { + "name": "ComponentsSetting", + "id": "fh7U0xYetFGA5Ieu", + "app": "918", + "route": "componentsSetting", + "page_content": { + "state": { + "components": [ + { + "name": "表单", + "text": "由按钮、输入框、选择器、单选框、多选框等控件组成..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + }, + { + "name": "按钮", + "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." + } + ], + "pageConfig": { + "component": { + "type": "JSResource", + "value": "this.utils.Pager" + }, + "attrs": { + "currentPage": 1, + "pageSize": 50, + "pageSizes": [10, 20, 50], + "total": 0, + "layout": "sizes,total, prev, pager, next, jumper" + } + }, + "componentsTotal": 0, + "renderf5956ed2": [ + { + "label": "按更新时间", + "value": "updata", + "_RID": "row_6" + }, + { + "label": "按创建时间", + "value": "create" + } + ], + "renderb52aeac9": [ + { + "framework": "", + "materials": "", + "name": "表单", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "id": "021fd6b6", + "_RID": "row_1" + }, + { + "framework": "", + "materials": "", + "name": "按钮", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", + "id": "84d239bb", + "_RID": "row_2" + }, + { + "framework": "", + "materials": "", + "name": "表单项", + "description": "Form 组件下的 FormItem 配置", + "id": "490f8a00", + "_RID": "row_3" + }, + { + "framework": "", + "materials": "", + "name": "开关", + "description": "关闭或打开", + "id": "c259b8b3", + "_RID": "row_4" + }, + { + "framework": "", + "materials": "", + "name": "互斥按钮组", + "description": "以按钮组的方式出现,常用于多项类似操作", + "id": "083ed9c7", + "_RID": "row_5" + }, + { + "framework": "", + "materials": "", + "name": "提示框", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "id": "09136cea", + "_RID": "row_6" + }, + { + "framework": "", + "materials": "", + "name": "文字提示框", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "id": "a63b57d5", + "_RID": "row_7" + }, + { + "framework": "", + "materials": "", + "name": "树", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "id": "a0f6e8a3", + "_RID": "row_8" + }, + { + "framework": "", + "materials": "", + "name": "分页", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "id": "d1aa18fc", + "_RID": "row_9" + }, + { + "framework": "", + "materials": "", + "name": "表格", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "id": "ca49cc52", + "_RID": "row_10" + }, + { + "framework": "", + "materials": "", + "name": "搜索框", + "description": "指定条件对象进行搜索数据", + "id": "4e20ecc9" + }, + { + "framework": "", + "materials": "", + "name": "折叠面板", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "id": "6b093ee5" + }, + { + "framework": "", + "materials": "", + "name": "对话框", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作", + "id": "0a09abc0" + }, + { + "framework": "", + "materials": "", + "name": "标签页签项", + "description": "tab页签", + "id": "f814b901" + }, + { + "framework": "", + "materials": "", + "name": "单选", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "id": "c5ae797c" + }, + { + "framework": "", + "materials": "", + "name": "弹出编辑", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "id": "33d0c590" + }, + { + "framework": "", + "materials": "", + "name": "下拉框", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "id": "16711dfa" + }, + { + "framework": "", + "materials": "", + "name": "折叠面板项", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "id": "a9fd190a" + }, + { + "framework": "", + "materials": "", + "name": "复选框", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "id": "a7dfa9ec" + }, + { + "framework": "", + "materials": "", + "name": "复选框按钮", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "id": "c9071a7b" + }, + { + "framework": "", + "materials": "", + "name": "输入框", + "description": "通过鼠标或键盘输入字符", + "id": "d4bb8330" + }, + { + "framework": "", + "materials": "", + "name": "时间线", + "description": "时间线", + "id": "ced3dc83" + } + ], + "render7e97d9c7": [ + { + "name": "标签页", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "id": "a2b3e681", + "_RID": "row_1" + }, + { + "name": "走马灯", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现", + "id": "311fd1ae", + "_RID": "row_2" + }, + { + "name": "日期选择器", + "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式", + "id": "8d38b248", + "_RID": "row_3" + }, + { + "name": "布局列", + "description": "列配置信息", + "id": "1f6940d8" + } + ] + }, + "methods": { + "linkClick": { + "type": "JSFunction", + "value": "function linkClick() {\n location.href = '';\n}" + }, + "query": { + "type": "JSFunction", + "value": "function query(name) {\n this.state.components.fillter((e) => {\n return e.name !== name;\n });\n}" + }, + "getTableData": { + "type": "JSFunction", + "value": "function getTableData() {\n return new Promise((resolve, reject) => {\n this.dataSourceMap['timeData'].load().then((res) => {\n resolve({ result: [], page: { total: 0 } });\n });\n });\n}" + }, + "clearSelected": { + "type": "JSFunction", + "value": "function clearSelected(event) {\n this.dataSourceMap['selectedComponents'].map((e) => {\n this.dataSourceMap['selectedComponents'] = this.dataSourceMap['selectedComponents'] || [];\n this.dataSourceMap['componentList'].push(e);\n });\n this.dataSourceMap['selectedComponents'] = [];\n}" + } + }, + "componentName": "Page", + "css": ".components-box{\r\n height:900px;\r\n display: flex;\r\n}\r\n.components-box-left{\r\n width: 270px;\r\n}\r\n.components-box-right{\r\n width:50%;\r\n}\r\n.components-box-right-add{\r\n width: 100%;\r\n height: 200px;\r\n}\r\n.mgr20{\r\n margin-right: 20px;\r\n}", + "props": {}, + "children": [ + { + "componentName": "div", + "props": {}, + "id": "2a5d4622", + "children": [ + { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "index", + "width": 60 + }, + { + "type": "selection", + "width": 60 + }, + { + "field": "employees", + "title": "员工数" + }, + { + "field": "created_date", + "title": "创建日期" + }, + { + "field": "city", + "title": "城市" + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ] + }, + "id": "3635454e" + } + ] + }, + { + "componentName": "div", + "props": { + "style": "height: 80px; width: 87%; margin: 0 auto; margin-bottom: 20px; margin-top: 20px; padding-left: 20px; padding-top: 30px; background: rgb(242, 245, 252);" + }, + "id": "436ecc4a", + "children": [ + { + "componentName": "Text", + "props": { + "text": " 物料资产包简介", + "style": "color: rgb(138, 142, 153);" + }, + "id": "16ad7aa9" + }, + { + "componentName": "Text", + "props": { + "text": "调试构建报错", + "style": "margin-left: 10px; margin-right: 10px;" + }, + "id": "ab44d8ea" + }, + { + "componentName": "Icon", + "props": { + "name": "IconEdit" + }, + "id": "8b6be3c2" + }, + { + "componentName": "div", + "props": {}, + "id": "848e3e8a", + "children": [ + { + "componentName": "Text", + "props": { + "text": "发布地址", + "style": "color: rgb(138, 142, 153);" + }, + "id": "cd51ad2c" + }, + { + "componentName": "Text", + "props": { + "text": "", + "style": "margin-left: 20px; margin-right: 10px; color: rgb(36, 150, 255);", + "onClick": { + "type": "JSExpression", + "value": "this.linkClick" + } + }, + "id": "3ed13633" + }, + { + "componentName": "Icon", + "props": { + "name": "IconEdit" + }, + "id": "16b75d9f" + } + ] + } + ] + }, + { + "componentName": "div", + "props": { + "className": "components-box", + "style": "width: 88%; margin: 0 auto; border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; padding-top: 40px; padding-bottom: 40px; height: 1200px;" + }, + "id": "c880007b", + "children": [ + { + "componentName": "div", + "props": { + "className": "components-box-left", + "style": "border-right-width: 2px; border-right-style: solid; border-color: rgb(223, 225, 230); position: relative;" + }, + "id": "3525fc52", + "children": [ + { + "componentName": "TinyTimeLine", + "props": { + "active": "1", + "data": [ + { + "name": "添加组件" + }, + { + "name": "添加区块" + } + ], + "horizontal": false, + "className": "components-box-left", + "vertical": true + }, + "id": "1e391ed7" + }, + { + "componentName": "div", + "props": {}, + "id": "81ccd767", + "children": [ + { + "componentName": "div", + "props": { + "style": "height: 300px; position: absolute; bottom: 20px; left: 20px;" + }, + "id": "bc11d593", + "children": [ + { + "componentName": "div", + "props": {}, + "id": "50ed6e39", + "children": [ + { + "componentName": "Text", + "props": { + "text": "组件示意图 " + }, + "id": "fa6b920c" + } + ] + }, + { + "componentName": "div", + "props": {}, + "id": "9ca346e6", + "children": [ + { + "componentName": "Text", + "props": { + "text": "组件是构建物料资产包的必要元素\n", + "style": "margin-top: 10px; color: rgb(173, 176, 184); margin-bottom: 20px;" + }, + "id": "d0ac5a34" + } + ] + }, + { + "componentName": "Img", + "props": { + "src": "http://localhost:9090/assets/images/f750dc319828b039af713c643aad02bd_222x134.png", + "style": "margin-top: 20px; width: 95%;" + }, + "id": "3eac458c" + } + ] + } + ] + } + ] + }, + { + "componentName": "div", + "props": { + "className": ".components-box-right", + "style": "padding-left: 50px; border-radius: 0px; height: 100%;" + }, + "id": "d0890144", + "children": [ + { + "componentName": "div", + "props": { + "className": "components-box-right-add" + }, + "id": "0c79b824", + "children": [ + { + "componentName": "div", + "props": { + "style": "height: 50px;" + }, + "id": "5dd75633", + "children": [ + { + "componentName": "Text", + "props": { + "text": "已添加", + "style": "font-size: 16px; font-weight: bold;" + }, + "id": "e534646e" + }, + { + "componentName": "div", + "props": { + "style": "display: inline-block;", + "onClick": { + "type": "JSExpression", + "value": "this.clearSelected(event)" + } + }, + "id": "1f3f03e5", + "children": [ + { + "componentName": "Icon", + "props": { + "name": "IconUndelete", + "style": "margin-left: 10px; font-size: 20px; color:rgb(94, 124, 224);" + }, + "id": "1ea6eea4" + }, + { + "componentName": "Text", + "props": { + "text": "清空默认", + "style": "color: rgb(94, 124, 224); border-radius: 0px;" + }, + "id": "4f143cd5" + } + ] + } + ] + }, + { + "componentName": "Collection", + "props": { + "style": "height: 140px; display: flex; border-radius: 0px;", + "dataSource": 151 + }, + "id": "9b4f4898", + "children": [ + { + "componentName": "div", + "props": { + "style": "width: 300px; height: 70px; margin-top: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-width: 1px; border-style: solid; border-color: #dfe1e6; display: flex; flex-direction: row; padding-right: 0px; padding-left: 0px; margin-right: 25px; margin-left: 0px; padding-top: 20px; margin-bottom: 20px; position: relative; background: rgb(242, 245, 252); border-radius: 2px;" + }, + "id": "b5f585f9", + "children": [ + { + "componentName": "Img", + "props": { + "style": "width: 50px; height: 50px; margin-left: 20px; margin-top: 0px;", + "src": "http://localhost:9090/assets/images/24b520f0-dd5d-11ec-9e28-e51c91ead705.png" + }, + "id": "ee90fa60" + }, + { + "componentName": "div", + "props": { + "style": "width: 200px; margin-left: 12px;" + }, + "id": "7735e4da", + "children": [ + { + "componentName": "Text", + "props": { + "text": { + "type": "JSExpression", + "value": "item.name" + }, + "style": "font-weight: bold;" + }, + "id": "068127b6" + }, + { + "componentName": "Text", + "props": { + "text": "默认", + "style": "position: absolute; right: 2px; top: 2px; font-family: \"Microsoft YaHei\"; color: rgb(255, 255, 255); background: rgb(80, 212, 171); border-radius: 4.5px 0px;" + }, + "id": "6d0281d2" + }, + { + "componentName": "TinyCheckbox", + "props": { + "text": "", + "style": "position: absolute; right: 10px; bottom: 10px; color: rgb(82, 110, 204);", + "checked": { + "type": "JSExpression", + "value": "item.isSelected" + }, + "modelValue": true + }, + "id": "622d9bdf" + }, + { + "componentName": "Text", + "props": { + "text": { + "type": "JSExpression", + "value": "item.description" + }, + "style": "display: block; margin-top: 10px; text-overflow: ellipsis; width: 90%; overflow: hidden; white-space: nowrap;" + }, + "id": "eb87da78" + } + ] + } + ], + "loop": { + "type": "JSExpression", + "value": "this.state.render7e97d9c7" + } + } + ] + } + ] + }, + { + "componentName": "div", + "props": { + "style": "width: 98%; display: flex; margin-bottom: 22px; justify-content: space-between; margin-right: 0px; padding-right: 0px;" + }, + "id": "c7f80c55", + "children": [ + { + "componentName": "Text", + "props": { + "text": "选择组件", + "style": "font-size: 16px; font-weight: bold;" + }, + "id": "2ebef929" + }, + { + "componentName": "div", + "props": { + "style": "display: flex;" + }, + "id": "00a6fb16", + "children": [ + { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词", + "style": "width: 295px; margin-right: 12px;", + "onChange": { + "type": "JSExpression", + "value": "this.query" + } + }, + "id": "d7364e4d" + }, + { + "componentName": "Collection", + "props": { + "dataSource": 129 + }, + "id": "03a2f95b", + "children": [ + { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": { + "type": "JSExpression", + "value": "this.state.renderf5956ed2" + }, + "style": "border-radius: 0px; margin-right: 0px;" + }, + "id": "181b5ab7" + } + ] + } + ] + } + ] + }, + { + "componentName": "Collection", + "props": { + "dataSource": 150, + "style": "margin-left: 0px; margin-right: 314px; display: flex; justify-content: flex-start; flex-wrap: wrap; width: 98%; over-flow: hidden; border-radius: 0px;" + }, + "id": "2b24a6d3", + "children": [ + { + "componentName": "div", + "props": { + "style": "padding-top: 20px; padding-left: 12px; padding-right: 12px; width: 280px; height: 92px; background: rgb(255, 255, 255); border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; border-radius: 2px; padding-bottom: 20px; display: flex; margin-right: 0px; margin-bottom: 20px; margin-left: 20px;" + }, + "id": "8a6e5b83", + "children": [ + { + "componentName": "Img", + "props": { + "style": "width: 40px; height: 40px;", + "src": "http://localhost:9090/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png" + }, + "id": "474ffcb2" + }, + { + "componentName": "div", + "props": { + "style": "margin-left: 12px; border-radius: 0px; width: 90%;" + }, + "id": "99944a57", + "children": [ + { + "componentName": "div", + "props": { + "style": "display: flex; justify-content: space-between;" + }, + "id": "b5c88120", + "children": [ + { + "componentName": "Text", + "props": { + "text": { + "type": "JSExpression", + "value": "item.name" + }, + "style": "font-weight: bold; border-radius: 0px;" + }, + "id": "a747169d" + }, + { + "componentName": "TinyCheckbox", + "props": { + "text": "", + "checked": false, + "modelValue": { + "type": "JSExpression", + "value": "item.isSelected", + "model": true + }, + "style": "border-radius: 0px;" + }, + "id": "72cee0e5" + } + ] + }, + { + "componentName": "Text", + "props": { + "style": "display: block; font-size: 12px; line-height: 17px; color: #333333; margin-top: 10px;", + "text": { + "type": "JSExpression", + "value": "item.description" + } + }, + "id": "1aed3258" + } + ] + } + ], + "loop": { + "type": "JSExpression", + "value": "this.state.renderb52aeac9" + }, + "condition": true, + "loopArgs": ["item", "idx"] + } + ] + }, + { + "componentName": "TinyPager", + "props": { + "layout": "sizes,total, prev, pager, next", + "total": { + "type": "JSExpression", + "value": "this.state.componentsTotal" + }, + "pageSize": 10, + "currentPage": 1, + "style": "margin-left: 314px; margin-right: 314px;" + }, + "id": "ff96cc4e" + } + ] + } + ] + }, + { + "componentName": "div", + "props": { + "style": "height: 100px; background: rgb(255, 255, 255); filter: drop-shadow(rgba(0, 0, 0, 0.1) 0px -1px 4px); text-align: center;" + }, + "id": "616d5f40", + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "创建物料资产包", + "style": "background: rgb(245, 245, 246); border-width: 1px; border-color: rgb(173, 176, 184); border-style: solid; border-radius: 2.5px; opacity: 0.6; margin: 0 auto; width: 200px; height: 32px; margin-top: 30px; max-width: none; margin-bottom: 10px;" + }, + "id": "e6abff72" + }, + { + "componentName": "Text", + "props": { + "style": "display: block; color: rgb(173, 176, 184); margin-top: 5px; width: 380px; margin: 0 auto;", + "text": "组件或区块未添加,请切换左侧步骤条去完成添加" + }, + "id": "f3a123ba", + "children": [ + { + "componentName": "Icon", + "props": {} + } + ] + } + ] + } + ], + "fileName": "componentsSetting" + }, + "tenant": 1, + "isBody": false, + "parentId": "0", + "group": "staticPages", + "depth": 0, + "isPage": true, + "isDefault": false, + "occupier": { + "id": 86, + "username": "开发者", + "email": "developer@lowcode.com", + "resetPasswordToken": "developer", + "confirmationToken": "dfb2c162-351f-4f44-ad5f-8998", + "is_admin": true + }, + "isHome": true, + "_id": "fh7U0xYetFGA5Ieu" + } + ], + "blockHistories": [ + { + "id": 1655, + "message": "build block 989", + "content": { + "state": { + "logoUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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", + "loginImgUrl": "data:image/png;base64,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" + }, + "componentName": "Block", + "css": ".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }", + "props": {}, + "children": [ + { + "componentName": "div", + "props": { + "className": "home", + "style": "height: 100vh; display: flex;" + }, + "id": "357534ab", + "children": [ + { + "componentName": "TinyRow", + "props": { + "align": "middle", + "flex": true, + "style": "" + }, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 6, + "style": "text-align: center; display: flex; justify-content: center;" + }, + "id": "f01b66ea", + "children": [ + { + "componentName": "div", + "props": { + "style": "width: 90%; height: 50%;" + }, + "id": "8197d016", + "children": [ + { + "componentName": "Img", + "props": { + "style": "width: 100%; height: 100%;", + "src": { + "type": "JSExpression", + "value": "this.state.loginImgUrl" + } + }, + "id": "471e30f3" + } + ] + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": "6", + "style": "text-align: center;" + }, + "id": "781d5b46", + "children": [ + { + "componentName": "div", + "props": { + "className": "home-content", + "style": "font-size: 14px;" + }, + "id": "08638b8a", + "children": [ + { + "componentName": "div", + "props": { + "className": "text" + }, + "id": "18712ee2", + "children": [ + { + "componentName": "div", + "props": { + "style": "font-size: 16px;" + }, + "id": "07e6794c", + "children": [ + { + "componentName": "div", + "props": { + "className": "logo" + }, + "id": "07cad264", + "children": [ + { + "componentName": "Img", + "props": { + "style": "width: 105px; height: 105px; border-radius: 100px;", + "src": { + "type": "JSExpression", + "value": "this.state.logoUrl" + } + }, + "id": "f4489e27" + } + ] + }, + { + "componentName": "Text", + "props": { + "text": "TinyLowCode 低代码平台", + "style": "display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;", + "ref": "", + "className": "title" + }, + "id": "e82108ce" + }, + { + "componentName": "Text", + "props": { + "text": "致力于通过友好的用户交互提升业务的开发效率", + "style": "display: block; margin-bottom: 12px;" + }, + "id": "65a2f1ad" + }, + { + "componentName": "Text", + "props": { + "text": "欢迎一起来解锁~~", + "style": "margin-top: 12px;" + }, + "id": "bb879abb" + } + ] + }, + { + "componentName": "div", + "props": { + "className": "btn" + }, + "id": "44b2bcbd", + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "立即体验", + "round": true, + "type": "primary", + "style": "margin-top: 40px;" + }, + "id": "9580c5e7" + }, + { + "componentName": "div", + "props": { + "className": "account" + }, + "id": "6a8ffa3e", + "children": [ + { + "componentName": "div", + "props": { + "style": "font-size: 14px; margin-top: 4px;" + }, + "id": "bfc6eb6c", + "children": [ + { + "componentName": "Text", + "props": { + "text": "已有团队?", + "style": "color: #777777;" + }, + "id": "3d993264" + }, + { + "componentName": "Text", + "props": { + "text": "立即进入", + "style": "color: #5e7ce0;", + "onClick": { + "type": "JSExpression", + "value": "this.handleClick(event)" + } + }, + "id": "21390118" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ], + "id": "4545fea2" + } + ] + } + ], + "methods": { + "handleClick": { + "type": "JSFunction", + "value": "function (event) {this.emit('goto-home', event)\n}" + } + }, + "fileName": "PortalHome", + "meta": { + "id": 1722, + "parentId": "0", + "group": "staticPages", + "title": null, + "occupier": null, + "isHome": false, + "description": "", + "router": "/", + "rootElement": "div", + "creator": "开发者", + "gmt_create": "2022-06-08 03:25:51", + "gmt_modified": "2022-06-09 05:19:09" + }, + "id": 1722, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [] + } + ], + "events": { + "onGotoHome": { + "label": { + "zh_CN": "点击立即进入触发方法" + }, + "description": { + "zh_CN": "点击立即进入触发方法" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "", + "linked": { + "id": "21390118", + "componentName": "Text", + "event": "onClick" + } + } + }, + "slots": {} + }, + "dataSource": {}, + "i18n": {} + }, + "assets": { + "material": [], + "scripts": [ + "http://localhost:9090/assets/js/989web-components.es.js", + "http://localhost:9090/assets/js/989web-components.umd.js" + ], + "styles": [] + }, + "created_by": null, + "updated_by": null, + "created_at": "2023-01-13T08:12:49.000Z", + "updated_at": "2023-01-13T08:12:49.000Z", + "screenshot": "", + "path": "common/components/home", + "label": "PortalHome", + "description": null, + "mode": null, + "block_id": 989, + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "i18n": null, + "created_app": null, + "content_blocks": null + }, + { + "id": 1005, + "label": "PortalBlock", + "framework": "Vue", + "content": { + "state": {}, + "methods": {}, + "componentName": "Block", + "fileName": "PortalBlock", + "css": "", + "props": {}, + "children": [ + { + "componentName": "div", + "props": { + "style": "font-size: 18px; height: 40px; border-bottom: 1px solid rgb(223, 225, 230); margin-top: 20px;" + }, + "id": "d38cea57", + "children": [ + { + "componentName": "Icon", + "props": { + "name": "IconChevronLeft" + }, + "id": "86c6e6b0" + }, + { + "componentName": "Text", + "props": { + "text": "编辑物料资产包 | ", + "style": "margin-left: 10px; font-weight: bold;" + }, + "id": "38d9fbc8" + }, + { + "componentName": "Text", + "props": { + "text": { + "type": "JSExpression", + "value": "this.props.blockName" + }, + "style": "margin-left: 10px; font-weight: bold;" + }, + "id": "6cd76396" + } + ] + } + ], + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "blockName", + "type": "String", + "defaultValue": "MT0526-React 1.0", + "label": { + "text": { + "zh_CN": "区块名称" + } + }, + "cols": 12, + "rules": [], + "handle": { + "getter": "", + "setter": "" + }, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaInput", + "props": { + "modelValue": "MT0526-React 1.0" + } + } + } + ] + } + ], + "events": {}, + "slots": {} + }, + "dataSource": {} + }, + "created_at": "2022-06-28T08:59:54.000Z", + "updated_at": "2023-01-13T08:20:09.000Z", + "assets": { + "material": [], + "scripts": [ + "http://localhost:9090/assets/js/1005web-components.es.js", + "http://localhost:9090/assets/js/1005web-components.umd.js" + ], + "styles": [] + }, + "createdBy": { + "id": 86, + "username": "开发者", + "resetPasswordToken": "developer" + }, + "description": null, + "tags": null, + "current_history": 1665, + "screenshot": "", + "path": "portal", + "occupier": { + "id": 86, + "username": "开发者", + "resetPasswordToken": "developer" + }, + "isOfficial": null, + "public": 1, + "isDefault": null, + "tiny_reserved": false, + "author": null, + "name_cn": null, + "created_app": null, + "content_blocks": null, + "categories": [], + "public_scope_tenants": [], + "histories_length": 1 + } + ], + "materialHistory": { + "id": 639, + "name": "materialstwo", + "material_version": "", + "version": "1.0.8", + "framework": "Vue", + "material": 1505, + "content": { + "data": { + "framework": "Vue", + "materials": { + "blocks": [], + "snippets": [{}], + "components": [ + { + "name": { + "zh_CN": "走马灯子项" + }, + "component": "TinyCarouselItem", + "icon": "carouselitem", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "doc_url": "", + "screenshot": "screenshoot", + "tags": "tiny-carousel-item", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CarouselItem", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "snippets": [], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-06-23T12:05:38.000Z", + "updated_at": "2022-06-27T06:51:25.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "幻灯片的名字,可用作 setActiveItem 的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "幻灯片的标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "复选框按钮" + }, + "component": "TinyCheckboxButton", + "icon": "checkboxbutton", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "doc_url": "", + "screenshot": "screenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "version": "0.1.17", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["remove", "copy", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-06-17T06:42:16.000Z", + "updated_at": "2022-06-27T08:31:33.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的是否选中的状态值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "按钮文本" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "是否选中的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的是否选中的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "树" + }, + "component": "TinyTree", + "icon": "tree", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "doc_url": "", + "screenshot": "null", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tree", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "数据组件", + "priority": 12, + "snippets": [ + { + "name": { + "zh_CN": "树" + }, + "icon": "tree", + "screenshot": "", + "snippetName": "TinyTree", + "schema": { + "componentName": "TinyTree", + "props": { + "data": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1", + "children": [ + { + "label": "三级 1-1-1" + } + ] + } + ] + }, + { + "label": "一级 2", + "children": [ + { + "label": "二级 2-1", + "children": [ + { + "label": "三级 2-1-1" + } + ] + }, + { + "label": "二级 2-2", + "children": [ + { + "label": "三级 2-2-1" + } + ] + } + ] + } + ] + } + } + } + ], + "configure": { + "loop": false, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["show-checkbox"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:31:12.000Z", + "updated_at": "2022-06-30T10:55:59.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "show-checkbox", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置接口是否可以多选" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1" + } + ] + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "可配置静态数据源和动态数据源" + } + }, + { + "property": "node-key", + "label": { + "text": { + "zh_CN": "唯一标识" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "节点唯一标识属性名称" + }, + "labelPosition": "left" + }, + { + "property": "icon-trigger-click-node", + "label": { + "text": { + "zh_CN": "触发NodeClick 事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "点击图标展开节点时是否触发 node-click 事件" + }, + "labelPosition": "left" + }, + { + "property": "expand-icon", + "label": { + "text": { + "zh_CN": "展开图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点展开图标" + }, + "labelPosition": "left" + }, + { + "property": "shrink-icon", + "label": { + "text": { + "zh_CN": "收缩图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点收缩的图标" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "check-on-click-node", + "label": { + "text": { + "zh_CN": "点击节点选中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点" + }, + "labelPosition": "left" + }, + { + "property": "filter-node-method", + "label": { + "text": { + "zh_CN": "筛选函数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点筛选函数" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onCheck": { + "label": { + "zh_CN": "勾选节点后的事件" + }, + "description": { + "zh_CN": "勾选节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "currentNode", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNodeClick": { + "label": { + "zh_CN": "点击节点后的事件" + }, + "description": { + "zh_CN": "点击节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "node", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + }, + { + "name": "vm", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件实例" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "提示框" + }, + "component": "TinyPopover", + "icon": "popover", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "doc_url": "", + "screenshot": "null", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popover", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "提示组件", + "priority": 7, + "snippets": [ + { + "name": { + "zh_CN": "提示框" + }, + "icon": "popover", + "screenshot": "", + "snippetName": "TinyPopover", + "schema": { + "componentName": "TinyPopover", + "props": { + "width": 200, + "title": "弹框标题", + "trigger": "manual", + "modelValue": true + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": "reference" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "default" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["placement", "trigger"] + }, + "contextMenu": { + "actions": ["createBlock", "copy"], + "disable": ["copy", "remove"] + }, + "slots": ["reference"], + "isPopper": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:17:18.000Z", + "updated_at": "2022-07-04T06:23:19.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,手动控制是否可见的状态值" + }, + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "left" + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "click", + "value": "click" + }, + { + "label": "focus", + "value": "focus" + }, + { + "label": "hover", + "value": "hover" + }, + { + "label": "manual", + "value": "manual" + } + ] + } + }, + "description": { + "zh_CN": "触发方式,该属性的可选值为 click / focus / hover / manual,该属性的默认值为 click" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "为 popper 添加类名" + }, + "labelPosition": "left" + }, + { + "property": "visible-arrow", + "label": { + "text": { + "zh_CN": "显示箭头" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示 Tooltip 箭头" + } + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "添加到body上" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover弹窗是否添加到body上" + } + }, + { + "property": "arrow-offset", + "label": { + "text": { + "zh_CN": "箭头的位置偏移" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "箭头的位置偏移,该属性的默认值为 0" + } + }, + { + "property": "close-delay", + "label": { + "text": { + "zh_CN": "隐藏延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的隐藏延迟,单位为毫秒" + } + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "显示的内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot 传入 DOM" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover 是否可用" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "位置偏移量" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "出现位置的偏移量" + } + }, + { + "property": "open-delay", + "label": { + "text": { + "zh_CN": "显示延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的显示延迟,单位为毫秒" + } + }, + { + "property": "popper-options", + "label": { + "text": { + "zh_CN": "popper.js的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "popper.js 的参数" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "transform-origin", + "label": { + "text": { + "zh_CN": "旋转中心点" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "组件的旋转中心点,组件的旋转中心点" + } + }, + { + "property": "transition", + "label": { + "text": { + "zh_CN": "定义渐变动画" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "该属性的默认值为 fade-in-linear" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "宽度" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "手动控制是否可见的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的可见状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "文字提示框" + }, + "component": "TinyTooltip", + "icon": "tooltip", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "doc_url": "", + "screenshot": "null", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tooltip", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "提示组件", + "priority": 11, + "snippets": [ + { + "name": { + "zh_CN": "文字提示框" + }, + "icon": "tooltip", + "screenshot": "", + "snippetName": "TinyTooltip", + "schema": { + "componentName": "TinyTooltip", + "props": { + "content": "Top Left 提示文字", + "placement": "top-start", + "manual": true, + "modelValue": true + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "content" + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "", "size"] + }, + "contextMenu": { + "actions": ["createBlock", "copy", "remove", "insert", "updateAttr", "bindEevent"], + "disable": [] + }, + "slots": ["content"], + "isPopper": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:22:59.000Z", + "updated_at": "2022-07-04T06:24:18.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 20, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "placement", + "label": { + "text": { + "zh_CN": "提示位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "Tooltip 的出现位置" + }, + "labelPosition": "left" + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "提示信息", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot#content 传入 DOM" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "是否可见" + } + }, + "defaultValue": true, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "状态是否可见" + } + }, + { + "property": "manual", + "label": { + "text": { + "zh_CN": "手动控制" + } + }, + "defaultValue": true, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "手动控制模式,设置为 true 后,mouseenter 和 mouseleave 事件将不会生效" + } + } + ] + } + ], + "events": {}, + "slots": { + "content": { + "label": { + "zh_CN": "提示内容" + }, + "description": { + "zh_CN": "自定义提示内容" + } + } + } + } + }, + { + "name": { + "zh_CN": "布局列" + }, + "component": "TinyCol", + "icon": "col", + "description": "列配置信息", + "doc_url": "", + "screenshot": "colscreenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Col", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "布局组件", + "priority": 20, + "snippets": [ + { + "name": { + "zh_CN": "Col" + }, + "icon": "col", + "screenshot": "", + "snippetName": "TinyCol", + "schema": { + "componentName": "TinyCol", + "props": { + "span": 12, + "style": { + "height": "30px", + "border": "1px solid #ccc" + } + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "TinyRow", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["span"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:40:08.000Z", + "updated_at": "2022-07-15T02:22:42.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "span", + "label": { + "text": { + "zh_CN": "栅格列格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整行", + "value": 12 + }, + { + "label": "6格", + "value": 6 + }, + { + "label": "4格", + "value": 4 + }, + { + "label": "3格", + "value": 3 + }, + { + "label": "1格", + "value": 1 + } + ] + } + }, + "description": { + "zh_CN": "当一行分为12格时,一列可占位多少格" + } + }, + { + "property": "move", + "label": { + "text": { + "zh_CN": "栅格左右移动格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": -12, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左右移动格数(正数向右,负数向左)" + } + }, + { + "property": "no", + "label": { + "text": { + "zh_CN": "排序编号" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "max": 12 + } + }, + "description": { + "zh_CN": "排序编号(row中启用order生效)" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "间隔格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 0, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左侧的间隔格数" + } + }, + { + "property": "xs", + "label": { + "text": { + "zh_CN": "超小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "<768px 响应式栅格数" + } + }, + { + "property": "sm", + "label": { + "text": { + "zh_CN": "小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥768px 响应式栅格数" + } + }, + { + "property": "md", + "label": { + "text": { + "zh_CN": "中屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥992px 响应式栅格数" + } + }, + { + "property": "lg", + "label": { + "text": { + "zh_CN": "大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1200px 响应式栅格数" + } + }, + { + "property": "xl", + "label": { + "text": { + "zh_CN": "超大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1920px 响应式栅格数" + } + } + ] + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "下拉菜单子项" + }, + "component": "TinyDropdownItem", + "icon": "dropdown", + "description": "下拉菜单子项", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DropdownItem", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "导航组件", + "priority": 2, + "snippets": [{}], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "TinyDropdownMenu", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-09T03:31:38.000Z", + "updated_at": "2022-11-10T03:47:10.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "divided", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": "显示分割线", + "_RID": "row_1" + }, + { + "property": "disabled", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_3" + }, + { + "property": "icon", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "菜单项", + "_RID": "row_2" + }, + { + "property": "label", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "菜单项标签", + "_RID": "row_1" + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "default" + }, + "description": { + "zh_CN": "下拉列表选项内容" + } + } + } + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "icon", + "label": { + "text": { + "zh_CN": "图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "divided", + "label": { + "text": { + "zh_CN": "显示分割线" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": [], + "slots": { + "default": { + "label": { + "zh_CN": "default" + }, + "description": { + "zh_CN": "下拉列表选项内容" + } + } + } + } + }, + { + "name": { + "zh_CN": "分页" + }, + "component": "TinyPager", + "icon": "pager", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "doc_url": "", + "screenshot": "null", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Pager", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "数据组件", + "priority": 1, + "snippets": [ + { + "name": { + "zh_CN": "分页" + }, + "icon": "pager", + "screenshot": "", + "snippetName": "TinyPager", + "schema": { + "componentName": "TinyPager", + "props": { + "layout": "total, sizes, prev, pager, next", + "total": 100, + "pageSize": 10, + "currentPage": 1 + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "", "size"] + }, + "contextMenu": { + "actions": [], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:36:23.000Z", + "updated_at": "2022-11-26T02:45:29.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "current-change", + "label": "切换页码触发事件", + "params": null, + "defaultValue": null, + "description": "\tcurrentPage 改变时会触发;arg1: 新的当前页的值", + "_RID": "row_1" + }, + { + "eventName": "size-change", + "label": "分页事件", + "params": null, + "defaultValue": null, + "description": "设置分页跳转后的事件;pageSize 改变时会触发;arg1: pageSize 新的当前值", + "_RID": "row_2" + } + ], + "attrs": [], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "currentPage", + "label": { + "text": { + "zh_CN": "当前页数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "当前页数,支持 .sync 修饰符" + }, + "labelPosition": "left" + }, + { + "property": "pageSize", + "label": { + "text": { + "zh_CN": "每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "每页显示条目个数" + }, + "labelPosition": "left" + }, + { + "property": "pageSizes", + "label": { + "text": { + "zh_CN": "可选每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置可选择的每页显示条数" + } + }, + { + "property": "total", + "label": { + "text": { + "zh_CN": "总条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "数据总条数" + }, + "labelPosition": "left" + }, + { + "property": "layout", + "label": { + "text": { + "zh_CN": "布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "value": "total,sizes,prev, pager, next" + } + }, + "description": { + "zh_CN": "组件布局,子组件名用逗号分隔" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onCurrent-change": { + "label": { + "zh_CN": "切换页码触发事件" + }, + "description": { + "zh_CN": "\tcurrentPage 改变时会触发;arg1: 新的当前页的值" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onSize-change": { + "label": { + "zh_CN": "分页事件" + }, + "description": { + "zh_CN": "设置分页跳转后的事件;pageSize 改变时会触发;arg1: pageSize 新的当前值" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + }, + "slots": [] + } + }, + { + "name": { + "zh_CN": "访问受限页面" + }, + "component": "TinyPlusAccessdeclined", + "icon": "accessdeclined", + "description": "访问受限页面组件", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "受限", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "AccessDeclined", + "version": "3.4.1", + "destructuring": true + }, + "group": "component", + "category": "业务组件", + "priority": 1, + "snippets": [ + { + "name": { + "zh_CN": "访问受限页面" + }, + "icon": "accessdeclined", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyPlusAccessdeclined", + "schema": { + "componentName": "TinyPlusAccessdeclined", + "props": { + "description": "非常抱歉,您尚未有该服务的访问权限,请联系管理员申请权限。", + "linkText": "返回华为云首页", + "linkHref": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-21T07:08:03.000Z", + "updated_at": "2023-01-18T06:35:58.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "description", + "label": null, + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_1" + } + ], + "attrs": [ + { + "property": "image", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_4" + }, + { + "property": "linkHref", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_3" + }, + { + "property": "linkText", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "description", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "description", + "label": { + "text": { + "zh_CN": "description" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "linkText", + "label": { + "text": { + "zh_CN": "linkText" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "linkHref", + "label": { + "text": { + "zh_CN": "linkHref" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "image", + "label": { + "text": { + "zh_CN": "image" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "冻结页面" + }, + "component": "TinyPlusFrozenPage", + "icon": "frozenpage", + "description": "冻结页面组件", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "冻结", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FrozenPage", + "version": "3.4.1", + "destructuring": true + }, + "group": "component", + "category": "业务组件", + "priority": 4, + "snippets": [ + { + "name": { + "zh_CN": "冻结页面" + }, + "icon": "frozenpage", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyPlusFrozenPage", + "schema": { + "componentName": "TinyPlusFrozenPage", + "props": { + "description": "非常抱歉,您尚未有该服务的访问权限,请联系管理员申请权限。", + "linkText": "返回华为云首页", + "linkHref": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-22T08:56:31.000Z", + "updated_at": "2023-01-18T06:36:15.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "image", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_25" + }, + { + "property": "linkHref", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_24" + }, + { + "property": "linkText", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_23" + }, + { + "property": "description", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_22" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "description", + "label": { + "text": { + "zh_CN": "description" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "linkText", + "label": { + "text": { + "zh_CN": "linkText" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "linkHref", + "label": { + "text": { + "zh_CN": "linkHref" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "image", + "label": { + "text": { + "zh_CN": "image" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": [] + } + }, + { + "name": { + "zh_CN": "区域服务不支持页面" + }, + "component": "TinyPlusNonSupportRegion", + "icon": "nonsupportregion", + "description": "区域服务不支持页面组件", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "NonSupportRegion", + "version": "3.4.1", + "destructuring": true + }, + "group": "component", + "category": "业务组件", + "priority": 5, + "snippets": [ + { + "name": { + "zh_CN": "区域服务不支持页面" + }, + "icon": "nonsupportregion", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyPlusNonSupportRegion", + "schema": { + "componentName": "TinyPlusNonSupportRegion", + "props": { + "regionData": { + "region": { + "displayName": "奥丁" + }, + "supportRegions": [ + { + "displayName": "华北-北京一", + "href": "1" + }, + { + "displayName": "华东-上海二", + "href": "1" + }, + { + "displayName": "华南-广州", + "href": "1" + } + ] + } + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-22T11:18:52.000Z", + "updated_at": "2023-01-18T06:36:24.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "image", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_21" + }, + { + "property": "regionData", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_20" + }, + { + "property": "regionData", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_20" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "regionData", + "label": { + "text": { + "zh_CN": "regionData" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "image", + "label": { + "text": { + "zh_CN": "image" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": [] + } + }, + { + "name": { + "zh_CN": "公测" + }, + "component": "TinyPlusBeta", + "icon": "beta", + "description": "公测组件", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "公测", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Beta", + "version": "3.4.1", + "destructuring": true + }, + "group": "component", + "category": "业务组件", + "priority": 3, + "snippets": [ + { + "name": { + "zh_CN": "公测" + }, + "icon": "beta", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyPlusBeta", + "schema": {} + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-22T08:13:37.000Z", + "updated_at": "2023-01-18T06:36:53.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "message", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_4" + }, + { + "property": "intro", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_3" + }, + { + "property": "icon", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "applyUrl", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "applyUrl", + "label": { + "text": { + "zh_CN": "applyUrl" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "icon", + "label": { + "text": { + "zh_CN": "icon" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "intro", + "label": { + "text": { + "zh_CN": "intro" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "message", + "label": { + "text": { + "zh_CN": "message" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": [] + } + }, + { + "name": { + "zh_CN": "搜索框" + }, + "component": "TinySearch", + "icon": "search", + "description": "指定条件对象进行搜索数据", + "doc_url": "", + "screenshot": "searchscreenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Search", + "version": "0.1.13", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "搜索框" + }, + "icon": "search", + "screenshot": "", + "snippetName": "TinySearch", + "schema": { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["clearable", "", "mini"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "createBlock", "bindEevent"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:47:45.000Z", + "updated_at": "2023-02-16T03:13:14.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "search", + "label": "搜索的回调", + "params": null, + "defaultValue": null, + "description": "在展开状态点击搜索按钮时触发的回调函数;arg1:{Object 搜索类型},arg2:{String 当前input框中值}", + "_RID": "row_1" + }, + { + "eventName": "mouseout", + "label": "鼠标离开", + "params": null, + "defaultValue": null, + "description": "鼠标离开时候触发该时间", + "_RID": "row_2" + } + ], + "attrs": [ + { + "property": "isEnterSearch", + "type": "boolean", + "defaultValue": "false", + "enumerateValue": null, + "title": "是否在按下键盘Enter键的时候触发search事件", + "_RID": "row_1" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "button-text", + "type": "string", + "defaultValue": "搜索", + "enumerateValue": null, + "title": null, + "_RID": "row_2" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "默认值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的搜索值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的提示占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清空按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置显示清空图标按钮" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他配置" + }, + "content": [ + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "迷你模式,配置为true时,搜索默认显示为一个带图标的圆形按钮,点击后展开" + }, + "labelPosition": "left" + }, + { + "property": "transparent", + "label": { + "text": { + "zh_CN": "透明模式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "配置为true时,边框变为透明且收缩后半透明显示,一般用在带有背景的场景,默认 false" + }, + "labelPosition": "left" + }, + { + "property": "isEnterSearch", + "label": { + "text": { + "zh_CN": "isEnterSearch" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "button-text", + "label": { + "text": { + "zh_CN": "button-text" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义搜索框按钮的文本内容" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onSearch": { + "label": { + "zh_CN": "搜索的回调" + }, + "description": { + "zh_CN": "在展开状态点击搜索按钮时触发的回调函数;arg1:{Object 搜索类型},arg2:{String 当前input框中值}" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onMouseout": { + "label": { + "zh_CN": "鼠标离开" + }, + "description": { + "zh_CN": "鼠标离开时候触发该时间" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + } + } + }, + { + "name": { + "zh_CN": "布局行" + }, + "component": "TinyRow", + "icon": "row", + "description": "定义 Layout 的行配置信息", + "doc_url": "", + "screenshot": "rowscreenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Row", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "布局组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "Row" + }, + "icon": "row", + "screenshot": "", + "snippetName": "TinyRow", + "schema": { + "componentName": "TinyRow", + "props": {}, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 3, + "style": "height:100%;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "height: 100%;" + } + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": 3, + "style": "height:100%;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "height: 100%;" + } + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": 3, + "style": "height:100%;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "height: 100%;" + } + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": 3, + "style": "height:100%;" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "height: 100%;" + } + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "TinyCol", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["flex", "align"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:02:47.000Z", + "updated_at": "2023-02-16T03:53:28.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_44" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "layout", + "label": { + "text": { + "zh_CN": "layout" + } + }, + "cols": 12, + "widget": { + "component": "MetaLayoutGrid", + "props": {} + }, + "description": { + "zh_CN": "layout" + }, + "labelPosition": "none" + }, + { + "property": "align", + "label": { + "text": { + "zh_CN": "align" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "middle", + "value": "middle" + }, + { + "label": "bottom", + "value": "bottom" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "flex", + "label": { + "text": { + "zh_CN": "flex" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "gutter", + "label": { + "text": { + "zh_CN": "gutter" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": [] + } + }, + { + "name": { + "zh_CN": "表单项" + }, + "component": "TinyFormItem", + "icon": "formitem", + "description": "Form 组件下的 FormItem 配置", + "doc_url": "", + "screenshot": "img/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FormItem", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 3, + "snippets": [{}], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "TinyForm", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["remove", "insert", "copy", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": ["label"], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-09T03:09:44.000Z", + "updated_at": "2023-02-16T06:15:02.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "validateIcon", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": "校验提示图标", + "_RID": "row_1" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_8" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "label", + "label": { + "text": { + "zh_CN": "标签文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "标签", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标签文本" + }, + "labelPosition": "left" + }, + { + "property": "prop", + "label": { + "text": { + "zh_CN": "校验字段" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的" + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "必填" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否必填" + }, + "labelPosition": "left" + }, + { + "property": "validateIcon", + "label": { + "text": { + "zh_CN": "validateIcon" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "警告" + }, + "component": "TinyAlert", + "icon": "alert", + "description": "警告", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Alert", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "提示组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "警告" + }, + "icon": "alert", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyAlert", + "schema": { + "componentName": "TinyAlert", + "props": { + "description": "提示内容" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["type", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-10-25T07:27:44.000Z", + "updated_at": "2023-02-16T06:32:42.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "close", + "label": "关闭Alert时触发的事件", + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_1" + } + ], + "attrs": [ + { + "property": "title", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_13" + }, + { + "property": "icon", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_12" + }, + { + "property": "show-icon", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "是否显示图标", + "_RID": "row_7" + }, + { + "property": "close-text", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "关闭按钮文本", + "_RID": "row_6" + }, + { + "property": "center", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "是否居中", + "_RID": "row_5" + }, + { + "property": "description", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "提示内容", + "_RID": "row_4" + }, + { + "property": "type", + "type": "array", + "defaultValue": "info", + "enumerateValue": null, + "title": "类型", + "_RID": "row_3" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_1" + } + ], + "slots": { + "description": { + "label": { + "zh_CN": "description" + }, + "description": { + "zh_CN": "提示内容" + } + }, + "title": { + "label": { + "zh_CN": "title" + }, + "description": { + "zh_CN": "标题内容" + } + }, + "default": { + "label": { + "zh_CN": "default" + }, + "description": { + "zh_CN": "默认插槽" + } + } + } + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "show-icon", + "label": { + "text": { + "zh_CN": "是否显示图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "close-text", + "label": { + "text": { + "zh_CN": "关闭按钮文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "文字是否居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "description", + "label": { + "text": { + "zh_CN": "提示内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "警告类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "success", + "value": "success" + }, + { + "label": "warning", + "value": "warning" + }, + { + "label": "info", + "value": "info" + }, + { + "label": "error", + "value": "error" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "closable", + "label": { + "text": { + "zh_CN": "是否可以关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "normal", + "value": "normal" + }, + { + "label": "large", + "value": "large" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "icon", + "label": { + "text": { + "zh_CN": "图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题,在 size 为 large 时有效" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onClose": { + "label": { + "zh_CN": "关闭Alert时触发的事件" + }, + "description": { + "zh_CN": null + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "TinyInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "doc_url": "", + "screenshot": "input-screeshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Input", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 3, + "snippets": [ + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "TinyInput", + "schema": { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-11T07:22:02.000Z", + "updated_at": "2023-03-06T06:44:18.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "key", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "modelValue", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "", + "_RID": "row_1" + }, + { + "property": "type", + "type": "array", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "rows", + "type": "number", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_3" + }, + { + "property": "placeholder", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_4" + }, + { + "property": "clearable", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_5" + }, + { + "property": "disabled", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_6" + }, + { + "property": "size", + "type": "array", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_7" + }, + { + "property": "maxlength", + "type": "number", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_8" + }, + { + "property": "autofocus", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_9" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "key", + "label": { + "text": { + "zh_CN": "key" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "textarea", + "value": "textarea" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "password", + "value": "password" + } + ] + } + }, + "description": { + "zh_CN": "设置input框的type属性" + } + }, + { + "property": "rows", + "label": { + "text": { + "zh_CN": "行数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "输入框行数,只对 type='textarea' 有效" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + } + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否禁用" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + }, + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "最大长度" + } + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "标签页" + }, + "component": "TinyTabs", + "icon": "tabs", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "doc_url": "", + "screenshot": "tabsscreenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tabs", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 5, + "snippets": [ + { + "name": { + "zh_CN": "标签页" + }, + "icon": "tabs", + "screenshot": "", + "group": true, + "snippetName": "TinyTabs", + "schema": { + "componentName": "TinyTabs", + "props": { + "modelValue": "first", + "tiny_mode": "" + }, + "children": [ + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页1", + "name": "first" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页2", + "name": "second" + }, + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "TinyTabItem", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["tab-style", "", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "clickCapture": false, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:58:09.000Z", + "updated_at": "2023-03-06T06:45:54.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "swipeable", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "active-color", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "showEditIcon", + "label": { + "text": { + "zh_CN": "显示编辑ICON " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示标题后编辑 ICON" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,当前选中选项卡的 name" + }, + "labelPosition": "left" + }, + { + "property": "with-add", + "label": { + "text": { + "zh_CN": "可新增" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可增加" + }, + "labelPosition": "left" + }, + { + "property": "with-close", + "label": { + "text": { + "zh_CN": "可关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可关闭" + }, + "labelPosition": "left" + }, + { + "property": "tab-style", + "label": { + "text": { + "zh_CN": "标签页样式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "card", + "value": "card" + }, + { + "label": "border-card", + "value": "border-card" + } + ] + } + }, + "description": { + "zh_CN": "标签页样式" + }, + "labelPosition": "left" + }, + { + "property": "active-color", + "label": { + "text": { + "zh_CN": "active-color" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "swipeable", + "label": { + "text": { + "zh_CN": "swipeable" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击页签时触发事件" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "component", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前点击的页签对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的选项卡改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中选项卡的 name 值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onEdit": { + "label": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "description": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "tab", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的页签对象" + } + }, + { + "name": "type", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的类型(remove || add || edit)" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "关闭页签时触发" + }, + "description": { + "zh_CN": "关闭页签时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "name", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "页签名称" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "下拉菜单menu" + }, + "component": "TinyDropdownMenu", + "icon": "dropdown", + "description": "下拉菜单menu", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DropdownMenu", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "导航组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "下拉菜单menu" + }, + "icon": "dropdown", + "screenshot": "", + "snippetName": "TinyDropdownMenu", + "schema": { + "componentName": "TinyDropdownMenu", + "props": { + "modelValue": "", + "options": [ + { + "value": "1", + "text": "黄金糕" + }, + { + "value": "2", + "text": "双皮奶" + } + ], + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "DropdownItem", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-09T03:28:12.000Z", + "updated_at": "2023-03-06T07:01:00.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "open", + "label": null, + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_27" + }, + { + "eventName": "close", + "label": null, + "params": null, + "defaultValue": null, + "description": "关闭菜单时触发", + "_RID": "row_26" + }, + { + "eventName": "change", + "label": null, + "params": null, + "defaultValue": null, + "description": "点击选项时触发,type为 selection 时启用", + "_RID": "row_25" + } + ], + "attrs": [ + { + "property": "icon", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "菜单项", + "_RID": "row_2" + }, + { + "property": "label", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "菜单项标签", + "_RID": "row_1" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": "mobile", + "enumerateValue": "mobile", + "title": null, + "_RID": "row_22" + }, + { + "property": "key", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "active-color", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "标题和选项的选中态颜色", + "_RID": "row_2" + }, + { + "property": "close-on-click-outside", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "设置点击外部元素后关闭菜单", + "_RID": "row_3" + }, + { + "property": "close-on-click-overlay", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": "设置点击遮罩层后关闭菜单", + "_RID": "row_4" + }, + { + "property": "direction", + "type": "string", + "defaultValue": "down", + "enumerateValue": null, + "title": "设置弹出框弹出框展开方向", + "_RID": "row_5" + }, + { + "property": "duration", + "type": "number", + "defaultValue": null, + "enumerateValue": null, + "title": "设置弹出框的动画时长", + "_RID": "row_6" + }, + { + "property": "overlay", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "设置是否显示遮罩层", + "_RID": "row_7" + } + ], + "slots": [ + { + "slotName": "title", + "description": "当type为selection时选项内容", + "_RID": "row_24" + }, + { + "slotName": "icon", + "description": "当type为selection时选项左侧内容", + "_RID": "row_23" + } + ] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "分组1" + }, + "content": [ + { + "property": "icon", + "label": { + "text": { + "zh_CN": "icon" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "label" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "key", + "label": { + "text": { + "zh_CN": "key" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "active-color", + "label": { + "text": { + "zh_CN": "active-color" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "close-on-click-outside", + "label": { + "text": { + "zh_CN": "close-on-click-outside" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "close-on-click-overlay", + "label": { + "text": { + "zh_CN": "close-on-click-overlay" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "direction", + "label": { + "text": { + "zh_CN": "direction" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "duration", + "label": { + "text": { + "zh_CN": "duration" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + } + }, + { + "property": "overlay", + "label": { + "text": { + "zh_CN": "overlay" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onOpen": { + "label": { + "zh_CN": null + }, + "description": { + "zh_CN": null + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onClose": { + "label": { + "zh_CN": null + }, + "description": { + "zh_CN": "关闭菜单时触发" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onChange": { + "label": { + "zh_CN": null + }, + "description": { + "zh_CN": "点击选项时触发,type为 selection 时启用" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + } + } + }, + { + "name": { + "zh_CN": "对话框" + }, + "component": "TinyDialogBox", + "icon": "dialogbox", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作。", + "doc_url": "", + "screenshot": "dialogboxshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DialogBox", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "对话框" + }, + "screenshot": "", + "snippetName": "TinyDialogBox", + "icon": "dialogbox", + "schema": { + "componentName": "TinyDialogBox", + "props": { + "visible": true, + "title": "dialogBox title", + "tiny_mode": "" + }, + "children": [ + { + "componentName": "div" + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": ".tiny-dialog-box", + "shortcuts": { + "properties": ["visible", "", "width"] + }, + "contextMenu": { + "actions": ["remove", "insert", "copy", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:55:58.000Z", + "updated_at": "2023-03-06T07:01:26.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "close-on-click-modal", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "是否可以通过点击遮罩层关闭弹窗,默认为 true ,可以在标签上设置:modal-closable=\"false\"不能通过点击遮罩层关闭弹窗。", + "_RID": "row_1" + }, + { + "property": "show-close", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "是否显示关闭按钮", + "_RID": "row_1" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_16" + } + ], + "slots": [ + { + "slotName": "footer", + "description": "\tDialog 按钮操作区的内容", + "_RID": "row_2" + } + ] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框标题" + }, + "labelPosition": "left" + }, + { + "property": "visible", + "label": { + "text": { + "zh_CN": "显示与隐藏" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "控制弹出框显示与关闭" + }, + "labelPosition": "left" + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框的宽度" + }, + "labelPosition": "left" + }, + { + "property": "draggable", + "label": { + "text": { + "zh_CN": "可拖拽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否开启弹窗的拖拽功能,默认值为 false 。" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "弹出框的头部与底部内容会自动居中" + }, + "labelPosition": "left" + }, + { + "property": "dialog-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义配置弹窗类名" + }, + "labelPosition": "left" + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "插入到 Body " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "DialogBox 本身是否插入到 body 上,嵌套的 Dialog 必须指定该属性并赋值为 true" + }, + "labelPosition": "left" + }, + { + "property": "show-close", + "label": { + "text": { + "zh_CN": "show-close" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": { + "modelValue": true + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "close-on-click-modal", + "label": { + "text": { + "zh_CN": "close-on-click-modal" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": { + "modelValue": true + } + }, + "description": { + "zh_CN": "是否可以通过点击遮罩层关闭弹窗,默认为 true ,可以在标签上设置:modal-closable=\"false\"不能通过点击遮罩层关闭弹窗。" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onClose": { + "label": { + "zh_CN": "关闭弹窗是触发" + }, + "description": { + "zh_CN": "Dialog 关闭的回调" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "显示或隐藏的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的显示或隐藏的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "开关" + }, + "component": "TinySwitch", + "icon": "switch", + "description": "开关开关开关开关开关", + "doc_url": "", + "screenshot": "img/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Switch", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 5, + "snippets": [ + { + "name": { + "zh_CN": "开关" + }, + "icon": "switch", + "screenshot": "", + "snippetName": "TinySwitch", + "schema": { + "componentName": "TinySwitch", + "props": { + "modelValue": "", + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "mini"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-12T08:13:59.000Z", + "updated_at": "2023-03-06T07:02:29.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_3" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的开关状态值" + } + }, + { + "property": "true-value", + "label": { + "text": { + "zh_CN": "打开时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置打开时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "false-value", + "label": { + "text": { + "zh_CN": "关闭时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置关闭时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示为 mini 模式" + }, + "labelPosition": "left" + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "开关的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的开关状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "时间线" + }, + "component": "TinyTimeLine", + "icon": "timeline", + "description": "时间线", + "doc_url": "", + "screenshot": "null", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TimeLine", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "数据组件", + "priority": 3, + "snippets": [ + { + "name": { + "zh_CN": "时间线" + }, + "icon": "timeline", + "screenshot": "", + "snippetName": "TinyTimeLine", + "schema": { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "已下单" + }, + { + "name": "运输中" + }, + { + "name": "已签收" + } + ], + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["horizontal", "", "active"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:26:32.000Z", + "updated_at": "2023-03-06T07:04:21.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_4" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "vertical", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "竖向布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "竖向时间线" + } + }, + { + "property": "reverse", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "竖向逆向" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "竖向时数字的顺序,从上到下还是从下到上" + } + }, + { + "property": "horizontal", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "水平布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字横向布局" + } + }, + { + "property": "active", + "label": { + "text": { + "zh_CN": "选中值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "步骤条的选中步骤值" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "name": "配置基本信息", + "status": "ready" + }, + { + "name": "配置报价", + "status": "wait" + }, + { + "name": "完成报价", + "status": "wait" + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "时间线步骤条数据" + }, + "labelPosition": "left" + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "节点的点击时触发" + }, + "description": { + "zh_CN": "节点的点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "点击节点的下标" + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前节点对象:{ name: 节点名称, time: 时间 }" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "标签页签项" + }, + "component": "TinyTabItem", + "icon": "tabitem", + "description": "tab页签", + "doc_url": "", + "screenshot": "tabshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TabItem", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 20, + "snippets": [ + { + "name": { + "zh_CN": "标签页签项" + }, + "icon": "tabitem", + "screenshot": "", + "snippetName": "TinyTabItem", + "schema": { + "componentName": "TinyTabItem", + "props": { + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "TinyTabs", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["name", "title"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T03:00:11.000Z", + "updated_at": "2023-03-06T07:04:47.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一表示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一表示" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "单选" + }, + "component": "TinyRadio", + "icon": "radio", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "doc_url": "", + "screenshot": "img/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Radio", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 5, + "snippets": [ + { + "name": { + "zh_CN": "单选" + }, + "icon": "radio", + "screenshot": "", + "snippetName": "TinyRadio", + "schema": { + "componentName": "TinyRadio", + "props": { + "label": "1", + "text": "单选文本", + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-16T02:38:18.000Z", + "updated_at": "2023-03-06T07:05:11.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_13" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "单选框的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "label": { + "zh_CN": "其他" + }, + "description": { + "zh_CN": "" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "显示边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "单选框的尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生 name 属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": "绑定值变化时触发的事件" + } + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "表单" + }, + "component": "TinyForm", + "icon": "form", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "doc_url": "", + "screenshot": "formscreenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Form", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "表单" + }, + "screenshot": "", + "snippetName": "tiny-form", + "icon": "form", + "schema": { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top", + "tiny_mode": "" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "人员" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "密码" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "type": "password" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "" + }, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": "margin-right: 10px" + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "type": "primary" + } + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "TinyFormItem", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "", "disabled"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-09T02:50:45.000Z", + "updated_at": "2023-03-06T07:05:36.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_12" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "标签宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签占位宽度,默认为 80px" + }, + "labelPosition": "left" + }, + { + "property": "inline", + "label": { + "text": { + "zh_CN": "行内布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "行内布局模式,默认为 false" + } + }, + { + "property": "label-align", + "label": { + "text": { + "zh_CN": "必填标识是否占位" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "必填标识 * 是否占位" + }, + "labelPosition": "left" + }, + { + "property": "label-suffix", + "label": { + "text": { + "zh_CN": "标签后缀" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签后缀" + } + }, + { + "property": "label-position", + "label": { + "text": { + "zh_CN": "标签位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "right", + "value": "right" + }, + { + "label": "left ", + "value": "left " + }, + { + "label": "top", + "value": "top" + } + ] + } + }, + "description": { + "zh_CN": "表单中标签的布局位置" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "校验属性" + }, + "content": [ + { + "property": "model", + "label": { + "text": { + "zh_CN": "表单校验对象" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单数据对象" + }, + "labelPosition": "left" + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单验证规则" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onValidate": { + "label": { + "zh_CN": "表单项被校验后触发" + }, + "description": { + "zh_CN": "表单项被校验后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "function", + "type": "Function", + "defaultValue": "(valid) => {}", + "description": { + "zh_CN": "校验回调函数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "表格" + }, + "component": "TinyGrid", + "icon": "grid", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "doc_url": null, + "screenshot": "null", + "tags": null, + "keywords": null, + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Grid", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "数据组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "tinyGrid", + "schema": { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "index", + "width": 60 + }, + { + "type": "selection", + "width": 60 + }, + { + "field": "employees", + "title": "员工数" + }, + { + "field": "created_date", + "title": "创建日期" + }, + { + "field": "city", + "title": "城市" + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ], + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": false, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["columns", "", "resizable"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue", + "invalidity": [""] + }, + "createdBy": 169, + "created_at": "2022-05-19T10:41:29.000Z", + "updated_at": "2023-03-06T07:06:54.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "select-change", + "label": "当手动勾选并且值发生改变时触发的事件", + "params": null, + "defaultValue": null, + "description": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件;", + "_RID": "row_2" + }, + { + "eventName": "select-all", + "label": "全选时触发的事件", + "params": null, + "defaultValue": null, + "description": "只对 type=selection 有效,当手动勾选全选时触发的事件", + "_RID": "row_1" + }, + { + "eventName": "current-change", + "label": "行选中事件", + "params": "e", + "defaultValue": null, + "description": "行选中事件", + "_RID": "row_4" + } + ], + "attrs": [ + { + "property": "highlight-current-row", + "type": "boolean", + "defaultValue": "false", + "enumerateValue": null, + "title": "是否需要高亮当前行", + "_RID": "row_3" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础属性" + }, + "description": { + "zh_CN": "基础属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "onChange": "this.delProp('fetchData')", + "description": { + "zh_CN": "设置表格的数据" + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列标题" + } + }, + "widget": { + "component": "MetaBindI18n", + "props": {} + } + }, + { + "property": "field", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列键值" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "sortable", + "type": "boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "width", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列宽" + } + }, + "widget": { + "component": "MetaNumber", + "props": {} + } + }, + { + "property": "formatText", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "内置渲染器" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整数", + "value": "integer" + }, + { + "label": "小数", + "value": "number" + }, + { + "label": "金额", + "value": "money" + }, + { + "label": "百分比", + "value": "rate" + }, + { + "label": "布尔", + "value": "boole" + }, + { + "label": "年月日", + "value": "date" + }, + { + "label": "年月日时分", + "value": "dateTime" + }, + { + "label": "时间", + "value": "time" + }, + { + "label": "省略", + "value": "ellipsis" + } + ] + } + } + }, + { + "property": "renderer", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSFunction" + } + } + }, + { + "property": "slots", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "插槽" + } + }, + "labelPosition": "none", + "widget": { + "component": "MetaJsSlot", + "props": { + "slots": ["header", "default"] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "列类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "索引列", + "value": "index" + }, + { + "label": "单选列", + "value": "radio" + }, + { + "label": "多选列", + "value": "selection" + }, + { + "label": "展开列", + "value": "expand" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)" + }, + "labelPosition": "left" + }, + { + "property": "editor", + "label": { + "text": { + "zh_CN": "编辑配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "单元格编辑渲染配置项,也可以是函数 Function(h, params)" + }, + "labelPosition": "left" + }, + { + "property": "filter", + "label": { + "text": { + "zh_CN": "筛选配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置表格列的筛选配置信息。默认值为 false 不配置筛选信息" + } + }, + { + "property": "showOverflow", + "label": { + "text": { + "zh_CN": "内容超出部分省略号配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "只显示省略号", + "value": "ellipsis" + }, + { + "label": "显示为原生 title", + "value": "title" + }, + { + "label": "显示为 tooltip 提示", + "value": "tooltip" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)" + }, + "labelPosition": "left" + } + ] + } + ], + "widget": { + "component": "MetaArrayItem", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "fetchData", + "label": { + "text": { + "zh_CN": "服务端数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "onChange": "this.delProp('data')", + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "fetchData" + } + }, + "description": { + "zh_CN": "服务端数据查询方法" + } + }, + { + "property": "pager", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": { + "attrs": { + "currentPage": 1 + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "pager" + } + }, + "description": { + "zh_CN": "分页配置" + } + }, + { + "property": "resizable", + "label": { + "text": { + "zh_CN": "调整列宽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许调整列宽" + }, + "labelPosition": "left" + }, + { + "property": "row-id", + "label": { + "text": { + "zh_CN": "行数据唯一标识的字段名" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "placeholder": "比如:id" + } + }, + "description": { + "zh_CN": "行数据唯一标识的字段名" + }, + "labelPosition": "left" + }, + { + "property": "select-config", + "label": { + "text": { + "zh_CN": "复选框配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "表格行数据复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格校验规则配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-config", + "label": { + "text": { + "zh_CN": "编辑配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格编辑配置项" + } + }, + { + "property": "expand-config", + "label": { + "text": { + "zh_CN": "复选框配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "sortable", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "highlight-current-row" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + } + ] + }, + { + "label": { + "zh_CN": "其他属性" + }, + "description": { + "zh_CN": "其他属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "auto-resize", + "label": { + "text": { + "zh_CN": "父元素响应式监听" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "父元素响应式监听(对于父元素可能存在动态变化的场景可能会用到)" + }, + "labelPosition": "left" + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "labelPosition": "left" + }, + { + "property": "seq-serial", + "label": { + "text": { + "zh_CN": "行号连续" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置行序号是否连续,开启分页时有效,该属性的默认值为 false" + }, + "labelPosition": "left" + }, + { + "property": "highlight-hover-row", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "鼠标移到行是否要高亮显示" + }, + "labelPosition": "left" + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})" + }, + "labelPosition": "left" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "最大高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置表格内容区域(不含表格头部,底部)的最大高度。" + }, + "labelPosition": "left" + }, + { + "property": "row-span", + "label": { + "text": { + "zh_CN": "行合并" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onSelect-change": { + "label": { + "zh_CN": "当手动勾选并且值发生改变时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件;" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onSelect-all": { + "label": { + "zh_CN": "全选时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选全选时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onCurrent-change": { + "label": { + "zh_CN": "行选中事件" + }, + "description": { + "zh_CN": "行选中事件" + }, + "type": "event", + "functionInfo": { + "params": ["e"], + "returns": {} + } + } + } + } + }, + { + "name": { + "zh_CN": "计数器" + }, + "component": "TinyNumeric", + "icon": "numeric", + "description": "用于输入数字,可自定义数值范围,步进大小。支持鼠标键盘增减", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Numeric", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "计数器" + }, + "icon": "numeric", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyNumeric", + "schema": { + "componentName": "TinyNumeric", + "props": { + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-10-25T03:02:56.000Z", + "updated_at": "2023-03-06T07:07:18.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "update:modelValue", + "label": "双向绑定的值改变时触发", + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_2" + }, + { + "eventName": "blur", + "label": "失去焦点事件", + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_11" + }, + { + "eventName": "focus", + "label": "获得焦点事件", + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_10" + }, + { + "eventName": "change", + "label": "值变化事件", + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_11" + } + ], + "attrs": [ + { + "property": "allow-empty", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_9" + }, + { + "property": "format", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_8" + }, + { + "property": "precision", + "type": "number", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_7" + }, + { + "property": "placeholder", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_6" + }, + { + "property": "label", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_5" + }, + { + "property": "name", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_4" + }, + { + "property": "controls-position", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_3" + }, + { + "property": "controls", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "step-strictly", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "modelValue", + "type": "number", + "defaultValue": null, + "enumerateValue": null, + "title": "绑定值", + "_RID": "row_10" + }, + { + "property": "size", + "type": "array", + "defaultValue": "small", + "enumerateValue": "mini,small,medium", + "title": "尺寸", + "_RID": "row_9" + }, + { + "property": "disabled", + "type": "boolean", + "defaultValue": "false", + "enumerateValue": null, + "title": "禁用", + "_RID": "row_8" + }, + { + "property": "mouse-wheel", + "type": "boolean", + "defaultValue": "true", + "enumerateValue": null, + "title": "鼠标滚动", + "_RID": "row_6" + }, + { + "property": "circulate", + "type": "boolean", + "defaultValue": "false", + "enumerateValue": null, + "title": "数值循环", + "_RID": "row_5" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_2" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "mini", + "value": "mini" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "medium", + "value": "medium" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "mouse-wheel", + "label": { + "text": { + "zh_CN": "鼠标滚动滑轮是否改变数值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "circulate", + "label": { + "text": { + "zh_CN": "向上到达最大值后从最小值开始,或反过来" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "step", + "label": { + "text": { + "zh_CN": "步长" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "max", + "label": { + "text": { + "zh_CN": "最大数值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "min", + "label": { + "text": { + "zh_CN": "最小数值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否使用控制按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls-position", + "label": { + "text": { + "zh_CN": "控制按钮位置;该属性的可选值为 right" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "step-strictly", + "label": { + "text": { + "zh_CN": "是否只能输入 step 的倍数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "输入框关联的label文字" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "输入框内的提示占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "precision", + "label": { + "text": { + "zh_CN": "数值精度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "format", + "label": { + "text": { + "zh_CN": "数字格式化置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "allow-empty", + "label": { + "text": { + "zh_CN": "计数器内容可清空" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "计数器的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "number", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的计数值" + } + } + ], + "returns": {} + } + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点事件" + }, + "description": { + "zh_CN": null + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onFocus": { + "label": { + "zh_CN": "获得焦点事件" + }, + "description": { + "zh_CN": null + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": null + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + } + } + }, + { + "name": { + "zh_CN": "复选框按钮组" + }, + "component": "TinyCheckboxGroup", + "icon": "checkboxgroup", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "doc_url": "", + "screenshot": "screenshot", + "tags": "", + "keywords": "复选框按钮组", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "version": "0.1.17", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "复选框组" + }, + "icon": "checkboxs", + "screenshot": "", + "snippetName": "TinyCheckboxGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": ["name1", "name2"], + "type": "checkbox", + "options": [ + { + "text": "复选框1", + "label": "name1" + }, + { + "text": "复选框2", + "label": "name2" + }, + { + "text": "复选框3", + "label": "name3" + } + ], + "tiny_mode": "" + } + } + }, + { + "name": { + "zh_CN": "复选框拖拽按钮组" + }, + "icon": "checkboxgroup", + "screenshot": "", + "snippetName": "TinyCheckboxbuttonGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": [] + }, + "children": [ + { + "componentName": "TinyCheckboxButton", + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-06-18T03:09:20.000Z", + "updated_at": "2023-03-06T07:08:09.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "tiny_mode", + "type": "string", + "defaultValue": null, + "enumerateValue": "pc,mobile", + "title": null, + "_RID": "row_45" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "dataType": "Array" + } + }, + "description": { + "zh_CN": "双向绑定选中的选项值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "数据列表" + } + }, + "defaultValue": [ + { + "label": "标签2" + }, + { + "label": "标签2" + } + ], + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "checkbox组件列表" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "button", + "value": "button" + }, + { + "label": "checkbox", + "value": "checkbox" + } + ] + } + }, + "description": { + "zh_CN": "checkbox组件类型(button/checkbox),该属性的默认值为 checkbox,配合 options 属性一起使用" + }, + "labelPosition": "left" + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + }, + { + "label": "mobile", + "value": "mobile" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "双向绑定选中的选项值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的选中选项值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "下拉框" + }, + "component": "TinySelect", + "icon": "select", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "doc_url": "", + "screenshot": "selectScreenshot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "下拉框" + }, + "icon": "select", + "screenshot": "", + "snippetName": "TinySelect", + "schema": { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ], + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": false, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["multiple", "", "options"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:44:05.000Z", + "updated_at": "2023-03-06T07:08:49.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "searchable", + "type": "boolean", + "defaultValue": "false", + "enumerateValue": null, + "title": "是否可搜索", + "_RID": "row_1" + }, + { + "property": "tiny_mode", + "type": "string", + "defaultValue": "", + "enumerateValue": null, + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "searchable", + "label": { + "text": { + "zh_CN": "下拉面板可搜索" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "下拉面板是否可搜索" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "下拉数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "配置 Select 下拉数据项" + }, + "labelPosition": "left" + }, + { + "property": "multiple", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许输入框输入或选择多个项" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "multiple-limit", + "label": { + "text": { + "zh_CN": "最大可选值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "多选时用户最多可以选择的项目数,为 0 则不限制" + }, + "labelPosition": "left" + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "下拉框的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置下拉框自定义的类名" + }, + "labelPosition": "left" + }, + { + "property": "collapse-tags", + "label": { + "text": { + "zh_CN": "多选展示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "多选时是否将选中值按文字的形式展示" + }, + "labelPosition": "left" + }, + { + "property": "tiny_mode", + "label": { + "text": { + "zh_CN": "tiny_mode" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "pc", + "value": "pc" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在下拉框值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "下拉框选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onRemoveTag": { + "label": { + "zh_CN": "多选模式下移除tag时触发" + }, + "description": { + "zh_CN": "多选模式下移除tag时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "被移除Tag对应数据项的值字段" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "component": "TinyButtonGroup", + "icon": "buttons", + "description": "以按钮组的方式出现,常用于多项类似操作", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/e4f27d446aef8318e4b4989f1f816b1e_220x220.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "ButtonGroup", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "互斥按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtonGroup", + "screenshot": "", + "schema": { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "Button1", + "value": "1" + }, + { + "text": "Button2", + "value": "2" + }, + { + "text": "Button3", + "value": "3" + } + ], + "modelValue": "1", + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T01:53:17.000Z", + "updated_at": "2023-03-06T07:10:09.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "update:modelValue", + "label": "绑定值改变触发的事件", + "params": null, + "defaultValue": null, + "description": null, + "_RID": "row_1" + } + ], + "attrs": [ + { + "property": "modelValue", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "按钮组数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "组件大小" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "mini", + "value": "mini" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "medium", + "value": "medium" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "是否是朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "modelValue" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "绑定值改变触发的事件" + }, + "description": { + "zh_CN": null + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + }, + "slots": [] + } + }, + { + "name": { + "zh_CN": "走马灯" + }, + "component": "TinyCarousel", + "icon": "carousel", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "doc_url": "", + "screenshot": "screenshoot", + "tags": "tiny-carousel", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Carousel", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "走马灯" + }, + "screenshot": "", + "snippetName": "tiny-carousel", + "icon": "carousel", + "schema": { + "componentName": "TinyCarousel", + "props": { + "height": "180px", + "tiny_mode": "" + }, + "children": [ + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "TinyCarouselItem", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["arrow"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": ["default"], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-06-23T12:01:18.000Z", + "updated_at": "2023-03-06T07:10:37.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [], + "slots": [] + }, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 12, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "arrow", + "label": { + "text": { + "zh_CN": "切换箭头的显示时机" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "总是显示", + "value": "always" + }, + { + "label": "鼠标悬停时显示", + "value": "hover" + }, + { + "label": "从不显示", + "value": "never" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否自动切换" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "走马灯的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "outside", + "value": "outside" + }, + { + "label": "none", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "initial-index", + "label": { + "text": { + "zh_CN": "初始状态激活的幻灯片的索引,从 0 开始 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "interval", + "label": { + "text": { + "zh_CN": "自动切换的时间间隔,单位为毫秒" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "loop", + "label": { + "text": { + "zh_CN": "是否循环显示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "show-title", + "label": { + "text": { + "zh_CN": "是否显示标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "指示器的触发方式,默认为 hover" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "点击", + "value": "click" + }, + { + "label": "悬停", + "value": "hover" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "走马灯的类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "水平", + "value": "horizontal" + }, + { + "label": "垂直", + "value": "vertical" + }, + { + "label": "卡片", + "value": "card" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "component": "TinyPopeditor", + "icon": "popeditor", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "doc_url": "", + "screenshot": "null", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popeditor", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "弹出编辑" + }, + "icon": "popeditor", + "screenshot": "", + "snippetName": "TinyPopeditor", + "schema": { + "componentName": "TinyPopeditor", + "props": { + "modelValue": "", + "placeholder": "请选择", + "gridOp": { + "columns": [ + { + "field": "id", + "title": "ID", + "width": 40 + }, + { + "field": "name", + "title": "名称", + "showOverflow": "tooltip" + }, + { + "field": "province", + "title": "省份", + "width": 80 + }, + { + "field": "city", + "title": "城市", + "width": 80 + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司", + "city": "福州", + "province": "福建" + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "province": "广东" + }, + { + "id": "3", + "name": "RFV有限责任公司", + "city": "中山", + "province": "广东" + }, + { + "id": "4", + "name": "TGB科技有限公司", + "city": "龙岩", + "province": "福建" + }, + { + "id": "5", + "name": "YHN科技有限公司", + "city": "韶关", + "province": "广东" + }, + { + "id": "6", + "name": "WSX科技有限公司", + "city": "黄冈", + "province": "武汉" + } + ] + }, + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["placeholder", "show-clear-btn"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "slots": [], + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-05-19T02:34:37.000Z", + "updated_at": "2023-03-06T07:11:13.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "show-clear-btn", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板的宽度(单位像素)" + }, + "labelPosition": "left" + }, + { + "property": "conditions", + "label": { + "text": { + "zh_CN": "过滤条件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "当弹出面板配置的是表格时,设置弹出面板中的过滤条件" + }, + "labelPosition": "left" + }, + { + "property": "grid-op", + "label": { + "text": { + "zh_CN": "表格配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中表格组件的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "pager-op", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出编辑框中分页配置" + }, + "labelPosition": "left" + }, + { + "property": "multi", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中的数据是否可多选" + }, + "labelPosition": "left" + }, + { + "property": "show-pager", + "label": { + "text": { + "zh_CN": "启用分页" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "选中值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项的值" + } + }, + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中对象" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "弹框关闭时触发的事件" + }, + "description": { + "zh_CN": "弹框关闭时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onPageChange": { + "label": { + "zh_CN": "分页切换事件" + }, + "description": { + "zh_CN": "表格模式下分页切换事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页码数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + } + }, + { + "name": { + "zh_CN": "日期选择器" + }, + "component": "TinyDatePicker", + "icon": "datepicker", + "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式。", + "doc_url": "", + "screenshot": "screenshoot", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DatePicker", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "表单组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "日期选择器" + }, + "screenshot": "", + "snippetName": "tiny-date-picker", + "icon": "datepick", + "schema": { + "componentName": "TinyDatePicker", + "props": { + "placeholder": "请选择日期", + "modelValue": "", + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-06-28T01:54:39.000Z", + "updated_at": "2023-03-06T07:11:42.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": true, + "tiny_reserved": true, + "component_metadata": null, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "align", + "label": { + "text": { + "zh_CN": "对齐方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "左对齐", + "value": "left" + }, + { + "label": "居中对齐", + "value": "center" + }, + { + "label": "右对齐", + "value": "right" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "clear-icon", + "label": { + "text": { + "zh_CN": "自定义清空图标的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "是否显示清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "default-time", + "label": { + "text": { + "zh_CN": "范围选择时选中日期所使用的当日内具体时刻,可选值为 支持的日期格式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "default-value", + "label": { + "text": { + "zh_CN": "可选,选择器打开时默认显示的时间,可选值为 可被new Date()解析" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "editable", + "label": { + "text": { + "zh_CN": "文本框可输入" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "end-placeholder", + "label": { + "text": { + "zh_CN": "范围选择时结束日期的占位内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "format", + "label": { + "text": { + "zh_CN": "显示在输入框中的格式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "isutc8", + "label": { + "text": { + "zh_CN": "默认值为 false ,设置为 true 时切换系统默认时区,时间依然显示为东八区时间。适用场景为海外地区显示东八区时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "picker-options", + "label": { + "text": { + "zh_CN": "当前时间日期选择器特有的选项参考下表" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "非范围选择时的占位内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "popper-append-to-body", + "label": { + "text": { + "zh_CN": "是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 false (可参考 select 组件)" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "为 popper 添加类名(可参考 popover 组件)" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "range-separator", + "label": { + "text": { + "zh_CN": "选择范围时的分隔符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "readonly", + "label": { + "text": { + "zh_CN": "设置日历组件是否只读" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "输入框尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "中等尺寸", + "value": "medium" + }, + { + "label": "较小尺寸", + "value": "small" + }, + { + "label": "迷你尺寸", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "start-placeholder", + "label": { + "text": { + "zh_CN": "范围选择时开始日期的占位内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "suffix-icon ", + "label": { + "text": { + "zh_CN": "自定义后置图标的类名,prefix-icon 自 AUI 3.8.0 版本将替换为 suffix-icon " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "time-arrow-control", + "label": { + "text": { + "zh_CN": "通过箭头按钮控制时间选择,当 type 为 datetime、datetimerange 时使用,默认为 通过鼠标滚轮滚动选择时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "显示类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "年", + "value": "year" + }, + { + "label": "月", + "value": "month" + }, + { + "label": "多个日期", + "value": "dates" + }, + { + "label": "周", + "value": "week" + }, + { + "label": "日期范围", + "value": "daterange" + }, + { + "label": "日期", + "value": "date" + }, + { + "label": "日期时间", + "value": "datetime" + }, + { + "label": "日期时间范围", + "value": "datetimerange" + }, + { + "label": "月范围", + "value": "monthrange" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "unlink-panels", + "label": { + "text": { + "zh_CN": "在范围选择器里取消两个日期面板之间的联动" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "validate-event", + "label": { + "text": { + "zh_CN": "设置日期选择器在输入时是否会触发表单校验" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "value", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "value-format", + "label": { + "text": { + "zh_CN": "指定绑定值的格式。不指定则绑定值为 Date 对象" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + } + }, + { + "name": { + "zh_CN": "下拉菜单" + }, + "component": "TinyDropdown", + "icon": "dropdown", + "description": "Dropdown 下拉菜单", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Dropdown", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "导航组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "下拉菜单" + }, + "icon": "dropdown", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyDropdown", + "schema": { + "componentName": "TinyDropdown", + "props": { + "trigger": "hover", + "title": "下拉菜单", + "menuOptions": { + "options": [ + { + "label": "老友粉", + "disabled": true + }, + { + "label": "狮子头", + "divided": true + }, + { + "label": "黄金糕", + "divided": true + } + ] + }, + "tiny_mode": "" + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["size", "trigger"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-09T03:20:31.000Z", + "updated_at": "2023-03-08T06:20:17.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": false, + "tiny_reserved": true, + "component_metadata": { + "events": [ + { + "eventName": "visible-change", + "label": "下拉框出现/隐藏时触发", + "params": null, + "defaultValue": null, + "description": "下拉框出现/隐藏时触发", + "_RID": "row_8" + }, + { + "eventName": "button-click", + "label": "点击左侧按钮的回调", + "params": null, + "defaultValue": null, + "description": "点击左侧按钮的回调", + "_RID": "row_7" + }, + { + "eventName": "item-click", + "label": "点击菜单项触发的事件回调", + "params": null, + "defaultValue": null, + "description": "点击菜单项触发的事件回调", + "_RID": "row_6" + } + ], + "attrs": [ + { + "property": "menuOptions", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "title", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "size", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "菜单尺寸", + "_RID": "row_4" + }, + { + "property": "trigger", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "触发下拉的行为", + "_RID": "row_3" + }, + { + "property": "trigger", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "触发下拉的行为", + "_RID": "row_3" + }, + { + "property": "trigger", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": "触发下拉的行为", + "_RID": "row_3" + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "default" + }, + "description": { + "zh_CN": null + } + } + } + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "触发源名称" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "menuOptions", + "label": { + "text": { + "zh_CN": "菜单子项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发下拉的行为" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 6, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "hover", + "value": "hover" + }, + { + "label": "click", + "value": "click" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "type": "string", + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "customProperty" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "id", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "customProperty" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "field", + "type": "array", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "customProperty" + } + }, + "widget": { + "component": "MetaSelect", + "props": {} + } + } + ] + } + ], + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "菜单弹出位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "hide-timeout", + "label": { + "text": { + "zh_CN": "收起下拉菜单的延时" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "show-timeout", + "label": { + "text": { + "zh_CN": "展开下拉菜单的延时" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumeric", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "hide-on-click", + "label": { + "text": { + "zh_CN": "点击菜单项后隐藏菜单" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onVisible-change": { + "label": { + "zh_CN": "下拉框出现/隐藏时触发" + }, + "description": { + "zh_CN": "下拉框出现/隐藏时触发" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onButton-click": { + "label": { + "zh_CN": "点击左侧按钮的回调" + }, + "description": { + "zh_CN": "点击左侧按钮的回调" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + }, + "onItem-click": { + "label": { + "zh_CN": "点击菜单项触发的事件回调" + }, + "description": { + "zh_CN": "点击菜单项触发的事件回调" + }, + "type": "event", + "functionInfo": { + "params": [null], + "returns": {} + } + } + } + } + }, + { + "name": { + "zh_CN": "柱状图" + }, + "component": "TinyChartHistogram", + "icon": "histogram ", + "description": "基于 eCharts 封装的柱状图", + "doc_url": "", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "ChartHistogram", + "version": "0.1.16", + "destructuring": true + }, + "group": "component", + "category": "图表组件", + "priority": 2, + "snippets": [ + { + "name": { + "zh_CN": "柱状图" + }, + "icon": "histogram ", + "screenshot": "http://localhost:9090/assets/images/logo.png", + "snippetName": "TinyChartHistogram", + "schema": { + "componentName": "TinyChartHistogram", + "props": { + "data": { + "columns": ["日期", "访问用户", "下单用户", "下单率"], + "rows": [ + { + "日期": "1/1", + "访问用户": 1393, + "下单用户": 1093, + "下单率": 0.32 + }, + { + "日期": "1/2", + "访问用户": 3530, + "下单用户": 3230, + "下单率": 0.26 + }, + { + "日期": "1/3", + "访问用户": 2923, + "下单用户": 2623, + "下单率": 0.76 + }, + { + "日期": "1/4", + "访问用户": 1723, + "下单用户": 1423, + "下单率": 0.49 + }, + { + "日期": "1/5", + "访问用户": 3792, + "下单用户": 3492, + "下单率": 0.323 + }, + { + "日期": "1/6", + "访问用户": 4593, + "下单用户": 4293, + "下单率": 0.78 + } + ] + } + } + } + } + ], + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [""] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "createdBy": 169, + "created_at": "2022-11-11T03:25:54.000Z", + "updated_at": "2022-11-12T08:18:30.000Z", + "public": 1, + "framework": "Vue", + "isOfficial": true, + "isDefault": false, + "tiny_reserved": true, + "component_metadata": { + "events": [], + "attrs": [ + { + "property": "data-empty", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_6" + }, + { + "property": "loading", + "type": "boolean", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_5" + }, + { + "property": "events", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_4" + }, + { + "property": "extend", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_3" + }, + { + "property": "height", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "width", + "type": "string", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + }, + { + "property": "settings", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_2" + }, + { + "property": "data", + "type": "object", + "defaultValue": null, + "enumerateValue": null, + "title": null, + "_RID": "row_1" + } + ], + "slots": [] + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础信息" + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "图表数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "settings", + "label": { + "text": { + "zh_CN": "图表配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "extend", + "label": { + "text": { + "zh_CN": "图表扩展配置,参考eChart" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "图表容器的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "图表容器的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "events", + "label": { + "text": { + "zh_CN": "事件绑定" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "显示loading" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "data-empty", + "label": { + "text": { + "zh_CN": "暂无数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": [] + } + } + ] + } + } + }, + "createdBy": null, + "updatedBy": null, + "assets_url": { + "material": ["http://localhost:9090/assets/json/bundle.json"], + "scripts": [ + "http://localhost:9090/assets/js/1505web-components.es.js", + "http://localhost:9090/assets/js/1505web-components.umd.js" + ], + "styles": [] + }, + "tenant": null, + "created_by": null, + "updated_by": null, + "created_at": "2023-03-09T11:58:08.000Z", + "updated_at": "2023-03-09T11:58:08.000Z", + "description": "2023.3.9", + "components": [ + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "输入框" + }, + "component": "ElInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://unpkg.com/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://unpkg.com/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElInput" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["type", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "modelValue" + } + }, + "description": { + "zh_CN": "绑定值" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "type" + } + }, + "description": { + "zh_CN": "类型" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "placeholder" + } + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "device": [] + }, + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "maxlength" + } + }, + "description": { + "zh_CN": "最大输入长度" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "number", + "widget": { + "component": "MetaNumberic", + "props": {} + }, + "device": [] + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "disabled" + } + }, + "description": { + "zh_CN": "是否禁用" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定值改变时触发" + }, + "description": { + "zh_CN": "双向绑定值改变时触发" + } + }, + "onBlur": { + "label": { + "zh_CN": "输入框失去焦点时触发" + }, + "description": { + "zh_CN": "输入框失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "头部内容" + }, + "description": { + "zh_CN": "输入框头部内容,只对非 type='textarea' 有效" + } + }, + "suffix": { + "label": { + "zh_CN": "尾部内容" + }, + "description": { + "zh_CN": "输入框尾部内容,只对非 type='textarea' 有效" + } + }, + "prepend": { + "label": { + "zh_CN": "前置内容" + }, + "description": { + "zh_CN": "输入框前置内容,只对非 type='textarea' 有效" + } + }, + "append": { + "label": { + "zh_CN": "后置内容" + }, + "description": { + "zh_CN": "输入框后置内容,只对非 type='textarea' 有效" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "按钮" + }, + "component": "ElButton", + "icon": "button", + "description": "常用的操作按钮", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://unpkg.com/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://unpkg.com/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElButton" + }, + "group": "基础组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["type", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "type" + } + }, + "description": { + "zh_CN": "类型" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "plain" + } + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "text" + } + }, + "description": { + "zh_CN": "是否为文字按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "bg", + "label": { + "text": { + "zh_CN": "bg" + } + }, + "description": { + "zh_CN": "是否显示文字按钮背景颜色" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "link", + "label": { + "text": { + "zh_CN": "link" + } + }, + "description": { + "zh_CN": "是否为链接按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "round", + "label": { + "text": { + "zh_CN": "round" + } + }, + "description": { + "zh_CN": "是否为圆角按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "circle" + } + }, + "description": { + "zh_CN": "是否为圆形按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "loading" + } + }, + "description": { + "zh_CN": "是否为加载中状态" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "disabled" + } + }, + "description": { + "zh_CN": "是否禁用" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": {}, + "slots": { + "default": { + "label": { + "zh_CN": "default" + }, + "description": { + "zh_CN": "自定义默认内容" + } + }, + "loading": { + "label": { + "zh_CN": "loading" + }, + "description": { + "zh_CN": "自定义加载中组件" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单" + }, + "component": "ElForm", + "icon": "form", + "description": "表单包含 输入框, 单选框, 下拉选择, 多选框 等用户输入的组件。 使用表单,您可以收集、验证和提交数据。", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://unpkg.com/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://unpkg.com/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElForm" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": ["ElFormItem"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "model", + "label": { + "text": { + "zh_CN": "model" + } + }, + "description": { + "zh_CN": "表单数据对象" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "object", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "rules" + } + }, + "description": { + "zh_CN": "表单验证规则" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "object", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "inline", + "label": { + "text": { + "zh_CN": "inline" + } + }, + "description": { + "zh_CN": "行内表单模式" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "label-position", + "label": { + "text": { + "zh_CN": "label-position" + } + }, + "description": { + "zh_CN": "表单域标签的位置, 当设置为 left 或 right 时,则也需要设置 label-width 属性" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "right", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "top", + "value": "top" + } + ] + } + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "label-width" + } + }, + "description": { + "zh_CN": "标签的长度,例如 '50px'。 作为 Form 直接子元素的 form-item 会继承该值。 可以使用 auto。" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "label-suffix", + "label": { + "text": { + "zh_CN": "label-suffix" + } + }, + "description": { + "zh_CN": "表单域标签的后缀" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "hide-required-asterisk", + "label": { + "text": { + "zh_CN": "hide-required-asterisk" + } + }, + "description": { + "zh_CN": "是否隐藏必填字段标签旁边的红色星号" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "require-asterisk-position", + "label": { + "text": { + "zh_CN": "星号的位置" + } + }, + "description": { + "zh_CN": "星号的位置" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "left", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "show-message", + "label": { + "text": { + "zh_CN": "show-message" + } + }, + "description": { + "zh_CN": "是否显示校验错误信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "inline-message", + "label": { + "text": { + "zh_CN": "inline-message" + } + }, + "description": { + "zh_CN": "是否以行内形式展示校验信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "status-icon", + "label": { + "text": { + "zh_CN": "status-icon" + } + }, + "description": { + "zh_CN": "是否在输入框中显示校验结果反馈图标" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "validate-on-rule-change", + "label": { + "text": { + "zh_CN": "validate-on-rule-change" + } + }, + "description": { + "zh_CN": "是否在 rules 属性改变后立即触发一次验证" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "用于控制该表单内组件的尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "disabled" + } + }, + "description": { + "zh_CN": "是否禁用该表单内的所有组件。 如果设置为 true, 它将覆盖内部组件的 disabled 属性" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "scroll-to-error", + "label": { + "text": { + "zh_CN": "scroll-to-error" + } + }, + "description": { + "zh_CN": "当校验失败时,滚动到第一个错误表单项" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onValidate": { + "label": { + "zh_CN": "任一表单项被校验后触发" + }, + "description": { + "zh_CN": "任一表单项被校验后触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": {} + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单子项" + }, + "component": "ElFormItem", + "icon": "formItem", + "description": "表单包含 输入框, 单选框, 下拉选择, 多选框 等用户输入的组件。 使用表单,您可以收集、验证和提交数据。", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://unpkg.com/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://unpkg.com/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElFormItem" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "prop", + "label": { + "text": { + "zh_CN": "prop" + } + }, + "description": { + "zh_CN": "model 的键名。 它可以是一个属性的值(如 a.b.0 或 [a', 'b', '0'])。 在定义了 validate、resetFields 的方法时,该属性是必填的" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "label" + } + }, + "description": { + "zh_CN": "标签文本" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "label-width" + } + }, + "description": { + "zh_CN": "标签宽度,例如 '50px'。 可以使用 auto" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "required" + } + }, + "description": { + "zh_CN": "是否为必填项,如不设置,则会根据校验规则确认" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "rules" + } + }, + "description": { + "zh_CN": "表单验证规则, 更多内容可以参考async-validator" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "object", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "error", + "label": { + "text": { + "zh_CN": "error" + } + }, + "description": { + "zh_CN": "表单域验证错误时的提示信息。设置该值会导致表单验证状态变为 error,并显示该错误信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "show-message", + "label": { + "text": { + "zh_CN": "show-message" + } + }, + "description": { + "zh_CN": "是否显示校验错误信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "inline-message", + "label": { + "text": { + "zh_CN": "inline-message" + } + }, + "description": { + "zh_CN": "是否在行内显示校验信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "用于控制该表单内组件的尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "for", + "label": { + "text": { + "zh_CN": "for" + } + }, + "description": { + "zh_CN": "和原生标签相同能力" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "validate-status", + "label": { + "text": { + "zh_CN": "validate-status" + } + }, + "description": { + "zh_CN": "formItem 校验的状态" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "error", + "value": "error" + }, + { + "label": "validating", + "value": "validating" + }, + { + "label": "success", + "value": "success" + } + ] + } + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "label" + }, + "description": { + "zh_CN": "标签位置显示的内容" + } + }, + "error": { + "label": { + "zh_CN": "error" + }, + "description": { + "zh_CN": "验证错误信息的显示内容" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单" + }, + "component": "ElTable", + "icon": "table", + "description": "用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://unpkg.com/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://unpkg.com/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElTable" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": ["ElTableColumn"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "data" + } + }, + "description": { + "zh_CN": "显示的数据" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "array", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "type", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "type" + } + }, + "description": { + "text": { + "zh_CN": "对应列的类型。 如果设置了selection则显示多选框; 如果设置了 index 则显示该行的索引(从 1 开始计算); 如果设置了 expand 则显示为一个可展开的按钮" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "selection", + "value": "selection" + }, + { + "label": "index", + "value": "index" + }, + { + "label": "expand", + "value": "expand" + } + ] + } + } + }, + { + "property": "index", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "index" + } + }, + "description": { + "text": { + "zh_CN": "如果设置了 type=index,可以通过传递 index 属性来自定义索引" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "label", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "label" + } + }, + "description": { + "text": { + "zh_CN": "显示的标题" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "column-key", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "column-key" + } + }, + "description": { + "text": { + "zh_CN": "column 的 key, column 的 key, 如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "prop", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "prop" + } + }, + "description": { + "text": { + "zh_CN": "字段名称 对应列内容的字段名, 也可以使用 property属性" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "width", + "type": "number", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "width" + } + }, + "description": { + "text": { + "zh_CN": "对应列的宽度" + } + }, + "widget": { + "component": "MetaNumberic", + "props": {} + } + }, + { + "property": "min-width", + "type": "number", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "min-width" + } + }, + "description": { + "text": { + "zh_CN": "对应列的最小宽度, 对应列的最小宽度, 与 width 的区别是 width 是固定的,min-width 会把剩余宽度按比例分配给设置了 min-width 的列" + } + }, + "widget": { + "component": "MetaNumberic", + "props": {} + } + }, + { + "property": "fixed", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "fixed" + } + }, + "description": { + "text": { + "zh_CN": "列是否固定在左侧或者右侧。 true 表示固定在左侧" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "sortable", + "type": "boolean", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sortable" + } + }, + "description": { + "text": { + "zh_CN": "对应列是否可以排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "sort-method", + "type": "function", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sort-method" + } + }, + "description": { + "text": { + "zh_CN": "指定数据按照哪个属性进行排序,仅当sortable设置为true的时候有效。 应该如同 Array.sort 那样返回一个 Number" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "sort-by", + "type": "array", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sort-by" + } + }, + "description": { + "text": { + "zh_CN": "指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 且没有设置 sort-method 的时候有效。 如果 sort-by 为数组,则先按照第 1 个属性排序,如果第 1 个相等,再按照第 2 个排序,以此类推" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "sort-orders", + "type": "array", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sort-orders" + } + }, + "description": { + "text": { + "zh_CN": "数据在排序时所使用排序策略的轮转顺序,仅当 sortable 为 true 时有效。 需传入一个数组,随着用户点击表头,该列依次按照数组中元素的顺序进行排序" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "resizable", + "type": "boolean", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "resizable" + } + }, + "description": { + "text": { + "zh_CN": "对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真)" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "formatter", + "type": "function", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "formatter" + } + }, + "description": { + "text": { + "zh_CN": "用来格式化内容" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "show-overflow-tooltip", + "type": "boolean", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "show-overflow-tooltip" + } + }, + "description": { + "text": { + "zh_CN": "当内容过长被隐藏时显示 tooltip" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "align", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "align" + } + }, + "description": { + "text": { + "zh_CN": "对齐方式" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "center", + "value": "center" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "header-align", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "header-align" + } + }, + "description": { + "text": { + "zh_CN": "表头对齐方式, 若不设置该项,则使用表格的对齐方式" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "center", + "value": "center" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "class-name", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "class-name" + } + }, + "description": { + "text": { + "zh_CN": "列的 className" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label-class-name", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "label-class-name" + } + }, + "description": { + "text": { + "zh_CN": "当前列标题的自定义类名" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "selectable", + "type": "function", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "selectable" + } + }, + "description": { + "text": { + "zh_CN": "仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "reserve-selection", + "type": "boolean", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "reserve-selection" + } + }, + "description": { + "text": { + "zh_CN": "数据刷新后是否保留选项,仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "filters", + "type": "array", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filters" + } + }, + "description": { + "text": { + "zh_CN": "数据刷新后是否保留选项,仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "filter-placement", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "filter-placement" + } + }, + "description": { + "text": { + "zh_CN": "过滤弹出框的定位" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "filter-multiple", + "type": "string", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filter-multiple" + } + }, + "description": { + "text": { + "zh_CN": "数据过滤的选项是否多选" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "filter-method", + "type": "function", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filter-method" + } + }, + "description": { + "text": { + "zh_CN": "数据过滤使用的方法, 如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "filtered-value", + "type": "array", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filtered-value" + } + }, + "description": { + "text": { + "zh_CN": "选中的数据过滤项,如果需要自定义表头过滤的渲染方式,可能会需要此属性" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + } + ] + } + ], + "widget": { + "component": "MetaTableColumns", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "top" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "max-height" + } + }, + "description": { + "zh_CN": "Table 的最大高度。" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "number", + "widget": { + "component": "MetaNumberic", + "props": {} + }, + "device": [] + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "height" + } + }, + "description": { + "zh_CN": "Table 的高度, 默认为自动高度。 这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "stripe", + "label": { + "text": { + "zh_CN": "stripe" + } + }, + "description": { + "zh_CN": "是否为斑马纹 table" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "border" + } + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "Table 的尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "fit", + "label": { + "text": { + "zh_CN": "fit" + } + }, + "description": { + "zh_CN": "列的宽度是否自撑开" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "show-header", + "label": { + "text": { + "zh_CN": "show-header" + } + }, + "description": { + "zh_CN": "是否显示表头" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "highlight-current-row" + } + }, + "description": { + "zh_CN": "是否要高亮当前行" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "current-row-key", + "label": { + "text": { + "zh_CN": "current-row-key" + } + }, + "description": { + "zh_CN": "当前行的 key,只写属性" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "row-class-name" + } + }, + "description": { + "zh_CN": "行的 className" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "row-key", + "label": { + "text": { + "zh_CN": "row-key" + } + }, + "description": { + "zh_CN": "行数据的 Key,用来优化 Table 的渲染; 在使用reserve-selection功能与显示树形数据时,该属性是必填的。 类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "device": [] + }, + { + "property": "empty-text", + "label": { + "text": { + "zh_CN": "empty-text" + } + }, + "description": { + "zh_CN": "空数据时显示的文本内容" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "table-layout", + "label": { + "text": { + "zh_CN": "table-layout" + } + }, + "description": { + "zh_CN": "设置表格单元、行和列的布局方式" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": "fixed", + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "fixed", + "value": "fixed" + }, + { + "label": "auto", + "value": "auto" + } + ] + } + }, + "device": [] + }, + { + "property": "scrollbar-always-on", + "label": { + "text": { + "zh_CN": "scrollbar-always-on" + } + }, + "description": { + "zh_CN": "总是显示滚动条" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "flexible", + "label": { + "text": { + "zh_CN": "flexible" + } + }, + "description": { + "zh_CN": "确保主轴的最小尺寸,以便不超过内容" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "勾选数据行的 Checkbox 时触发" + }, + "description": { + "zh_CN": "当用户手动勾选数据行的 Checkbox 时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "selection", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项" + } + }, + { + "name": "row", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前行" + } + } + ], + "returns": {} + } + }, + "onSelectAll": { + "label": { + "zh_CN": "勾选全选时触发" + }, + "description": { + "zh_CN": "当用户手动勾选全选 Checkbox 时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "selection", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项" + } + } + ], + "returns": {} + } + }, + "onSelectionChange": { + "label": { + "zh_CN": "选择项发生变化时会触发" + }, + "description": { + "zh_CN": "当选择项发生变化时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "selection", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项" + } + } + ], + "returns": {} + } + }, + "onCellMouseEnter": { + "label": { + "zh_CN": "单元格 hover 时会触发" + }, + "description": { + "zh_CN": "当单元格 hover 进入时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "row", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前行" + } + }, + { + "name": "column", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前列" + } + }, + { + "name": "cell", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前单元格" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生事件 event" + } + } + ], + "returns": {} + } + }, + "onCellMouseLeave": { + "label": { + "zh_CN": "单元格 hover 退出时会触发" + }, + "description": { + "zh_CN": "当单元格 hover 退出时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "row", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前行" + } + }, + { + "name": "column", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前列" + } + }, + { + "name": "cell", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前单元格" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生事件 event" + } + } + ], + "returns": {} + } + } + }, + "slots": { + "empty": { + "label": { + "zh_CN": "empty" + }, + "description": { + "zh_CN": "当数据为空时自定义的内容" + } + }, + "append": { + "label": { + "zh_CN": "append" + }, + "description": { + "zh_CN": "插入至表格最后一行之后的内容, 如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。 若表格有合计行,该 slot 会位于合计行之上。" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单" + }, + "component": "ElTableColumn", + "icon": "table", + "description": "用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://unpkg.com/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://unpkg.com/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElTableColumn" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [], + "description": { + "zh_CN": "" + } + } + ], + "events": {}, + "slots": {} + } + }, + { + "name": { + "zh_CN": "走马灯子项" + }, + "component": "TinyCarouselItem", + "icon": "carouselitem", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CarouselItem", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "幻灯片的名字,可用作 setActiveItem 的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "幻灯片的标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "outside", + "value": "outside" + }, + { + "label": "none", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "走马灯" + }, + "component": "TinyCarousel", + "icon": "carousel", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Carousel", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "arrow", + "label": { + "text": { + "zh_CN": "切换箭头的显示时机" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "总是显示", + "value": "always" + }, + { + "label": "鼠标悬停时显示", + "value": "hover" + }, + { + "label": "从不显示", + "value": "never" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否自动切换" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "走马灯的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "走马灯外部", + "value": "outside" + }, + { + "label": "不显示", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "initial-index", + "label": { + "text": { + "zh_CN": "初始状态激活的幻灯片的索引,从 0 开始 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "interval", + "label": { + "text": { + "zh_CN": "自动切换的时间间隔,单位为毫秒" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "loop", + "label": { + "text": { + "zh_CN": "是否循环显示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "show-title", + "label": { + "text": { + "zh_CN": "是否显示标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "指示器的触发方式,默认为 hover" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "点击", + "value": "click" + }, + { + "label": "悬停", + "value": "hover" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "走马灯的类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "水平", + "value": "horizontal" + }, + { + "label": "垂直", + "value": "vertical" + }, + { + "label": "卡片", + "value": "card" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyCarouselItem"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "link", + "name": { + "zh_CN": "提示框" + }, + "component": "a", + "description": "链接", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "href", + "label": { + "text": { + "zh_CN": "跳转链接" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "链接" + } + }, + { + "property": "target", + "label": { + "text": { + "zh_CN": "页面目标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "当前页面", + "value": "_self" + }, + { + "label": "打开新页面", + "value": "_blank" + } + ] + } + }, + "description": { + "zh_CN": "链接" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ] + }, + "configure": { + "loop": true, + "condition": true, + "slots": [], + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "name": { + "zh_CN": "标题" + }, + "component": ["h1", "h2", "h3", "h4", "h5", "h6"], + "icon": "h16", + "description": "标题", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 20, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": { + "showRadioButton": true + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "段落" + }, + "component": "p", + "icon": "paragraph", + "description": "段落", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 30, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "input", + "icon": "input", + "description": "输入框", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 40, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "checkbox", + "value": "checkbox" + }, + { + "label": "color", + "value": "color" + }, + { + "label": "date", + "value": "date" + }, + { + "label": "button", + "value": "button" + }, + { + "label": "email", + "value": "email" + }, + { + "label": "file", + "value": "file" + }, + { + "label": "hidden", + "value": "hidden" + }, + { + "label": "image", + "value": "image" + }, + { + "label": "month", + "value": "month" + }, + { + "label": "number", + "value": "number" + }, + { + "label": "password", + "value": "password" + }, + { + "label": "radio", + "value": "radio" + }, + { + "label": "range", + "value": "range" + }, + { + "label": "reset", + "value": "reset" + }, + { + "label": "search", + "value": "search" + }, + { + "label": "submit", + "value": "submit" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "time", + "value": "time" + }, + { + "label": "week", + "value": "week" + }, + { + "label": "url", + "value": "url" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onChange": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "component": "video", + "icon": "video", + "description": "视频", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 50, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "label": { + "text": { + "zh_CN": "视频的 URL" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "视频播放器的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "视频播放器的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否显示控件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否马上播放" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "icon": "Image", + "name": { + "zh_CN": "Img" + }, + "component": "Img", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 60, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "type": "string", + "defaultValue": "", + "bindState": true, + "label": { + "text": { + "zh_CN": "src路径" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": ["src"] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "button", + "name": { + "zh_CN": "Button" + }, + "component": "button", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 70, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "table", + "name": { + "zh_CN": "表格" + }, + "component": "table", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 80, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "表格的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "表格边框的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "td", + "name": { + "zh_CN": "表格单元格" + }, + "component": "td", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 90, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "colspan", + "label": { + "text": { + "zh_CN": "单元格可横跨的列数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "rowspan", + "label": { + "text": { + "zh_CN": "单元格可横跨的行数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "form", + "name": { + "zh_CN": "表单" + }, + "component": "form", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 100, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "表单的名称" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "action", + "label": { + "text": { + "zh_CN": "提交表单时向何处发送表单数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "method", + "label": { + "text": { + "zh_CN": "用于发送 form-data 的 HTTP 方法" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "get", + "value": "get" + }, + { + "label": "post", + "value": "post" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "label", + "name": { + "zh_CN": "表单标签" + }, + "component": "label", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 110, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "for", + "label": { + "text": { + "zh_CN": "label 绑定到哪个表单元素" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "form", + "label": { + "text": { + "zh_CN": "label 字段所属的一个或多个表单" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "component": "TinyButtonGroup", + "icon": "buttonGroup", + "description": "以按钮组的方式出现,常用于多项类似操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "ButtonGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "general", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "按钮组数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "组件大小" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "mini", + "value": "mini" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "medium", + "value": "medium" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "是否是朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "row", + "name": { + "zh_CN": "row" + }, + "component": "TinyRow", + "description": "定义 Layout 的行配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Row", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 5, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "layout", + "label": { + "text": { + "zh_CN": "layout" + } + }, + "cols": 12, + "widget": { + "component": "MetaLayoutGrid", + "props": {} + }, + "description": { + "zh_CN": "layout" + }, + "labelPosition": "none" + }, + { + "property": "align", + "label": { + "text": { + "zh_CN": "align" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "middle", + "value": "middle" + }, + { + "label": "bottom", + "value": "bottom" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "flex", + "label": { + "text": { + "zh_CN": "flex" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "gutter", + "label": { + "text": { + "zh_CN": "gutter" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ] + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "form", + "name": { + "zh_CN": "表单" + }, + "component": "TinyForm", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Form", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 5, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "标签宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签占位宽度,默认为 80px" + }, + "labelPosition": "left" + }, + { + "property": "inline", + "label": { + "text": { + "zh_CN": "行内布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "行内布局模式,默认为 false" + } + }, + { + "property": "label-align", + "label": { + "text": { + "zh_CN": "必填标识是否占位" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "必填标识 * 是否占位" + }, + "labelPosition": "left" + }, + { + "property": "label-suffix", + "label": { + "text": { + "zh_CN": "标签后缀" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签后缀" + } + }, + { + "property": "label-position", + "label": { + "text": { + "zh_CN": "标签位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "right", + "value": "right" + }, + { + "label": "left ", + "value": "left " + }, + { + "label": "top", + "value": "top" + } + ] + } + }, + "description": { + "zh_CN": "表单中标签的布局位置" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "校验属性" + }, + "content": [ + { + "property": "model", + "label": { + "text": { + "zh_CN": "表单校验对象" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单数据对象" + }, + "labelPosition": "left" + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单验证规则" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onValidate": { + "label": { + "zh_CN": "表单项被校验后触发" + }, + "description": { + "zh_CN": "表单项被校验后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "function", + "type": "Function", + "defaultValue": "(valid) => {}", + "description": { + "zh_CN": "校验回调函数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "formitem", + "name": { + "zh_CN": "表单项" + }, + "component": "TinyFormItem", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FormItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "label", + "label": { + "text": { + "zh_CN": "标签文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "标签", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标签文本" + }, + "labelPosition": "left" + }, + { + "property": "prop", + "label": { + "text": { + "zh_CN": "校验字段" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的" + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "必填" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否必填" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "字段名" + }, + "description": { + "zh_CN": "自定义显示字段名称" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyForm"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "col", + "name": { + "zh_CN": "col" + }, + "component": "TinyCol", + "description": "列配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Col", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "span", + "label": { + "text": { + "zh_CN": "栅格列格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整行", + "value": 12 + }, + { + "label": "6格", + "value": 6 + }, + { + "label": "4格", + "value": 4 + }, + { + "label": "3格", + "value": 3 + }, + { + "label": "1格", + "value": 1 + } + ] + } + }, + "description": { + "zh_CN": "当一行分为12格时,一列可占位多少格" + } + }, + { + "property": "move", + "label": { + "text": { + "zh_CN": "栅格左右移动格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": -12, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左右移动格数(正数向右,负数向左)" + } + }, + { + "property": "no", + "label": { + "text": { + "zh_CN": "排序编号" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "max": 12 + } + }, + "description": { + "zh_CN": "排序编号(row中启用order生效)" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "间隔格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 0, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左侧的间隔格数" + } + }, + { + "property": "xs", + "label": { + "text": { + "zh_CN": "超小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "<768px 响应式栅格数" + } + }, + { + "property": "sm", + "label": { + "text": { + "zh_CN": "小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥768px 响应式栅格数" + } + }, + { + "property": "md", + "label": { + "text": { + "zh_CN": "中屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥992px 响应式栅格数" + } + }, + { + "property": "lg", + "label": { + "text": { + "zh_CN": "大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1200px 响应式栅格数" + } + }, + { + "property": "xl", + "label": { + "text": { + "zh_CN": "超大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1920px 响应式栅格数" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "component": "TinyButton", + "icon": "button", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Button", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "type": "string", + "defaultValue": "按钮文案", + "label": { + "text": { + "zh_CN": "按钮文字" + } + }, + "cols": 12, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "type": "select", + "label": { + "text": { + "zh_CN": "大小" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "primary", + "value": "primary" + }, + { + "label": "success", + "value": "success" + }, + { + "label": "info", + "value": "info" + }, + { + "label": "warning", + "value": "warning" + }, + { + "label": "danger", + "value": "danger" + }, + { + "label": "text", + "value": "text" + } + ] + } + }, + "description": { + "zh_CN": "设置不同的主题样式" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "round", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆角按钮" + }, + "labelPosition": "left" + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "labelPosition": "left" + }, + { + "property": "reset-time", + "label": { + "text": { + "zh_CN": "禁用时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置禁用时间,防止重复提交,单位毫秒" + } + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆形按钮" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否默认聚焦" + }, + "labelPosition": "left" + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "加载中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否展示位加载中样式" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "TinyInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Input", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "textarea", + "value": "textarea" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "password", + "value": "password" + } + ] + } + }, + "description": { + "zh_CN": "设置input框的type属性" + } + }, + { + "property": "rows", + "label": { + "text": { + "zh_CN": "行数" + } + }, + "widget": { + "component": "MetaNumber" + }, + "description": { + "zh_CN": "输入框行数,只对 type='textarea' 有效" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "前置内容" + } + }, + "suffix": { + "label": { + "zh_CN": "后置内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "radio", + "name": { + "zh_CN": "单选" + }, + "component": "TinyRadio", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Radio", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "单选框的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "label": { + "zh_CN": "其他" + }, + "description": { + "zh_CN": "" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "显示边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "单选框的尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生 name 属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": "绑定值变化时触发的事件" + } + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "select", + "name": { + "zh_CN": "下拉框" + }, + "component": "TinySelect", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 8, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "searchable", + "label": { + "text": { + "zh_CN": "下拉面板可搜索" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "下拉面板是否可搜索" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "下拉数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "配置 Select 下拉数据项" + }, + "labelPosition": "left" + }, + { + "property": "multiple", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许输入框输入或选择多个项" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "multiple-limit", + "label": { + "text": { + "zh_CN": "最大可选值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "多选时用户最多可以选择的项目数,为 0 则不限制" + }, + "labelPosition": "left" + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "下拉框的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置下拉框自定义的类名" + }, + "labelPosition": "left" + }, + { + "property": "collapse-tags", + "label": { + "text": { + "zh_CN": "多选展示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "多选时是否将选中值按文字的形式展示" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在下拉框值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "下拉框选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onRemoveTag": { + "label": { + "zh_CN": "多选模式下移除tag时触发" + }, + "description": { + "zh_CN": "多选模式下移除tag时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "被移除Tag对应数据项的值字段" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "onBeforeMount": "console.log('table on load'); this.options = source.data" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["multiple", "options"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "switch", + "name": { + "zh_CN": "开关" + }, + "component": "TinySwitch", + "description": "Switch 在两种状态间切换选择", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Switch", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 9, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定默认值" + } + }, + { + "property": "true-value", + "label": { + "text": { + "zh_CN": "打开时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置打开时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "false-value", + "label": { + "text": { + "zh_CN": "关闭时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置关闭时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示为 mini 模式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "开关的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的开关状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "search", + "name": { + "zh_CN": "搜索框" + }, + "component": "TinySearch", + "description": "指定条件对象进行搜索数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Search", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "默认值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的默认搜索值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的提示占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清空按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置显示清空图标按钮" + }, + "labelPosition": "left" + }, + { + "property": "isEnterSearch", + "label": { + "text": { + "zh_CN": "是否Enter键触发search事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在按下键盘Enter键的时候触发search事件" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他配置" + }, + "content": [ + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "迷你模式,配置为true时,搜索默认显示为一个带图标的圆形按钮,点击后展开" + }, + "labelPosition": "left" + }, + { + "property": "transparent", + "label": { + "text": { + "zh_CN": "透明模式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "配置为true时,边框变为透明且收缩后半透明显示,一般用在带有背景的场景,默认 false" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "输入完成时触发" + }, + "description": { + "zh_CN": "在 input 框中输入完成时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onSearch": { + "label": { + "zh_CN": "点击搜索按钮时触发" + }, + "description": { + "zh_CN": "展开状态点击搜索按钮时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["clearable", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkbox", + "name": { + "zh_CN": "复选框" + }, + "component": "TinyCheckbox", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Checkbox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "复选框的文本" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示边框" + } + }, + { + "property": "false-label", + "label": { + "text": { + "zh_CN": "未选中的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "没有选中时的值" + } + }, + { + "property": "true-label", + "label": { + "text": { + "zh_CN": "选择时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "选中时的值" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["border", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxbutton", + "name": { + "zh_CN": "复选按钮" + }, + "component": "TinyCheckboxButton", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "按钮文本" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxgroup", + "name": { + "zh_CN": "复选按钮组" + }, + "component": "TinyCheckboxGroup", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "dataType": "Array" + } + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "数据列表" + } + }, + "defaultValue": [ + { + "label": "标签2" + }, + { + "label": "标签2" + } + ], + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "checkbox组件列表" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "button", + "value": "button" + }, + { + "label": "checkbox", + "value": "checkbox" + } + ] + } + }, + "description": { + "zh_CN": "checkbox组件类型(button/checkbox),该属性的默认值为 checkbox,配合 options 属性一起使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "type"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "dialogbox", + "name": { + "zh_CN": "对话框" + }, + "component": "TinyDialogBox", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DialogBox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框标题" + }, + "labelPosition": "left" + }, + { + "property": "visible", + "label": { + "text": { + "zh_CN": "显示与隐藏" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "控制弹出框显示与关闭" + }, + "labelPosition": "left" + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框的宽度" + }, + "labelPosition": "left" + }, + { + "property": "draggable", + "label": { + "text": { + "zh_CN": "可拖拽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否开启弹窗的拖拽功能,默认值为 false 。" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "弹出框的头部与底部内容会自动居中" + }, + "labelPosition": "left" + }, + { + "property": "dialog-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义配置弹窗类名" + }, + "labelPosition": "left" + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "插入到 Body " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "DialogBox 本身是否插入到 body 上,嵌套的 Dialog 必须指定该属性并赋值为 true" + }, + "labelPosition": "left" + }, + { + "property": "show-close", + "label": { + "text": { + "zh_CN": "关闭按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示关闭按钮,默认值为 true 。" + } + } + ] + } + ], + "selector": ".TinyDialogBox", + "events": { + "onClose": { + "label": { + "zh_CN": "关闭弹窗时触发" + }, + "description": { + "zh_CN": "Dialog 关闭的回调" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:visible": { + "label": { + "zh_CN": "双向绑定的状态改变时触发" + }, + "description": { + "zh_CN": "显示或隐藏的状态值,发生改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的显示或隐藏的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "title": { + "label": { + "zh_CN": "标题区" + }, + "description": { + "zh_CN": "Dialog 标题区的内容" + } + }, + "footer": { + "label": { + "zh_CN": "按钮操作区" + }, + "description": { + "zh_CN": "Dialog 按钮操作区的内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": ".tiny-dialog-box", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabs", + "name": { + "zh_CN": "标签页" + }, + "component": "TinyTabs", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tabs", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 10, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "showEditIcon", + "label": { + "text": { + "zh_CN": "显示编辑ICON " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示标题后编辑 ICON" + }, + "labelPosition": "left" + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定值,选中选项卡的 name" + }, + "labelPosition": "left" + }, + { + "property": "with-add", + "label": { + "text": { + "zh_CN": "可新增" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可增加" + }, + "labelPosition": "left" + }, + { + "property": "with-close", + "label": { + "text": { + "zh_CN": "可关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可关闭" + }, + "labelPosition": "left" + }, + { + "property": "tab-style", + "label": { + "text": { + "zh_CN": "标签页样式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "card", + "value": "card" + }, + { + "label": "border-card", + "value": "border-card" + } + ] + } + }, + "description": { + "zh_CN": "标签页样式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击页签时触发事件" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "component", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前点击的页签对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onEdit": { + "label": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "description": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "tab", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的页签对象" + } + }, + { + "name": "type", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的类型(remove || add || edit)" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "关闭页签时触发" + }, + "description": { + "zh_CN": "关闭页签时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "name", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "页签名称" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyTabItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["size", "tab-style"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabitem", + "name": { + "zh_CN": "tab页签" + }, + "component": "TinyTabItem", + "description": "tab 标签页", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TabItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一表示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一表示" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyTab"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["name", "title"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑" + }, + "component": "TinyBreadcrumb", + "description": "告诉访问者他们目前在网站中的位置以及如何返回", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "separator", + "label": { + "text": { + "zh_CN": "分隔符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义分隔符" + }, + "labelPosition": "left" + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "options" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "textField", + "label": { + "text": { + "zh_CN": "textField" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "description": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyBreadcrumbItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["separator"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑项" + }, + "component": "TinyBreadcrumbItem", + "description": "", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "BreadcrumbItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "to", + "label": { + "text": { + "zh_CN": "路由路径" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面包屑项" + } + } + ] + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "面包屑项标签" + }, + "description": { + "zh_CN": "面包屑项" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyBreadcrumb"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["to"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapse", + "name": { + "zh_CN": "折叠面板" + }, + "component": "TinyCollapse", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Collapse", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "当前激活的面板" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定当前激活的面板" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "激活面板改变时触发" + }, + "description": { + "zh_CN": "当前激活面板改变时触发(如果是手风琴模式,参数 activeNames 类型为string,否则为array)" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前激活面板的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前激活面板的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapseitem", + "name": { + "zh_CN": "折叠面板项" + }, + "component": "TinyCollapseItem", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CollapseItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一标志符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一标志符;String | Number" + }, + "labelPosition": "left" + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "面板标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面板标题" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "grid", + "name": { + "zh_CN": "表格" + }, + "component": "TinyGrid", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Grid", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础属性" + }, + "description": { + "zh_CN": "基础属性" + }, + "collapse": { + "number": 15, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "onChange": "this.delProp('fetchData')", + "description": { + "zh_CN": "设置表格的数据" + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列标题" + } + }, + "widget": { + "component": "MetaBindI18n", + "props": {} + } + }, + { + "property": "field", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列键值" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "sortable", + "type": "boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "width", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列宽" + } + }, + "widget": { + "component": "MetaNumber", + "props": {} + } + }, + { + "property": "formatText", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "内置渲染器" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整数", + "value": "integer" + }, + { + "label": "小数", + "value": "number" + }, + { + "label": "金额", + "value": "money" + }, + { + "label": "百分比", + "value": "rate" + }, + { + "label": "布尔", + "value": "boole" + }, + { + "label": "年月日", + "value": "date" + }, + { + "label": "年月日时分", + "value": "dateTime" + }, + { + "label": "时间", + "value": "time" + }, + { + "label": "省略", + "value": "ellipsis" + } + ] + } + } + }, + { + "property": "renderer", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSFunction" + } + } + }, + { + "property": "slots", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "插槽" + } + }, + "labelPosition": "none", + "widget": { + "component": "MetaJsSlot", + "props": { + "slots": ["header", "default"] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "列类型" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "索引列", + "value": "index" + }, + { + "label": "单选列", + "value": "radio" + }, + { + "label": "多选列", + "value": "selection" + }, + { + "label": "展开列", + "value": "expand" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)" + }, + "labelPosition": "left" + }, + { + "property": "editor", + "label": { + "text": { + "zh_CN": "编辑配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "单元格编辑渲染配置项,也可以是函数 Function(h, params)" + }, + "labelPosition": "left" + }, + { + "property": "filter", + "label": { + "text": { + "zh_CN": "筛选配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "设置表格列的筛选配置信息。默认值为 false 不配置筛选信息" + } + }, + { + "property": "showOverflow", + "label": { + "text": { + "zh_CN": "内容超出部分省略号配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "只显示省略号", + "value": "ellipsis" + }, + { + "label": "显示为原生 title", + "value": "title" + }, + { + "label": "显示为 tooltip 提示", + "value": "tooltip" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)" + }, + "labelPosition": "left" + } + ] + } + ], + "widget": { + "component": "MetaArrayItem", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "fetchData", + "label": { + "text": { + "zh_CN": "服务端数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "onChange": "this.delProp('data')", + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "fetchData", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "服务端数据查询方法" + } + }, + { + "property": "pager", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": { + "attrs": { + "currentPage": 1 + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "pager", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "分页配置" + } + }, + { + "property": "resizable", + "label": { + "text": { + "zh_CN": "调整列宽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许调整列宽" + }, + "labelPosition": "left" + }, + { + "property": "row-id", + "label": { + "text": { + "zh_CN": "行数据唯一标识的字段名" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "placeholder": "比如:id" + } + }, + "description": { + "zh_CN": "行数据唯一标识的字段名" + }, + "labelPosition": "left" + }, + { + "property": "select-config", + "label": { + "text": { + "zh_CN": "复选框配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "表格行数据复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格校验规则配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-config", + "label": { + "text": { + "zh_CN": "编辑配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格编辑配置项" + } + }, + { + "property": "expand-config", + "label": { + "text": { + "zh_CN": "复选框配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "sortable", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + } + ] + }, + { + "label": { + "zh_CN": "其他属性" + }, + "description": { + "zh_CN": "其他属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "auto-resize", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "labelPosition": "left" + }, + { + "property": "seq-serial", + "label": { + "text": { + "zh_CN": "行号连续" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置行序号是否连续,开启分页时有效,该属性的默认值为 false" + }, + "labelPosition": "left" + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "高亮当前行" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "高亮当前行" + }, + "labelPosition": "left" + }, + { + "property": "highlight-hover-row", + "label": { + "text": { + "zh_CN": "hover 时候高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "鼠标移到行是否要高亮显示" + }, + "labelPosition": "left" + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})" + }, + "labelPosition": "left" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "最大高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置表格内容区域(不含表格头部,底部)的最大高度。" + }, + "labelPosition": "left" + }, + { + "property": "row-span", + "label": { + "text": { + "zh_CN": "行合并" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onFilterChange": { + "label": { + "zh_CN": "筛选条件改变时触发改事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSortChange": { + "label": { + "zh_CN": "点击列头,执行数据排序前触发的事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectAll": { + "label": { + "zh_CN": "当手动勾选全选时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选全选时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 包含 table 实例对象" + } + }, + { + "name": "checked", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "勾选状态" + } + }, + { + "name": "selction", + "type": "Array", + "defaultValue": "", + "description": { + "zh_CN": "选中的表格数据数组" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectChange": { + "label": { + "zh_CN": "手动勾选并且值发生改变时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " table 实例对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onToggleExpandChange": { + "label": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "description": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onCurrentChange": { + "label": { + "zh_CN": "行点击时触发" + }, + "description": { + "zh_CN": "行点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contentMenu": { + "actions": ["create symbol"] + }, + "onBeforeMount": "console.log('table on load'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "分页" + }, + "component": "TinyPager", + "icon": "pager", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Pager", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "currentPage", + "label": { + "text": { + "zh_CN": "当前页数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "当前页数,支持 .sync 修饰符" + }, + "labelPosition": "left" + }, + { + "property": "pageSize", + "label": { + "text": { + "zh_CN": "每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "每页显示条目个数" + }, + "labelPosition": "left" + }, + { + "property": "pageSizes", + "label": { + "text": { + "zh_CN": "可选每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置可选择的每页显示条数" + } + }, + { + "property": "total", + "label": { + "text": { + "zh_CN": "总条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "数据总条数" + }, + "labelPosition": "left" + }, + { + "property": "layout", + "label": { + "text": { + "zh_CN": "布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": "total,sizes,prev, pager, next", + "widget": { + "component": "MetaInput", + "props": { + "type": "textarea" + } + }, + "description": { + "zh_CN": "组件布局,子组件名用逗号分隔" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onCurrentChange ": { + "label": { + "zh_CN": "切换页码时触发" + }, + "description": { + "zh_CN": "切换页码时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前页的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onPrevClick ": { + "label": { + "zh_CN": "点击上一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNextClick": { + "label": { + "zh_CN": "点击下一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["currentPage", "total"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "component": "TinyPopeditor", + "icon": "popEditor", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "PopEditor", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 6, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "show-clear-btn", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板的宽度(单位像素)" + }, + "labelPosition": "left" + }, + { + "property": "conditions", + "label": { + "text": { + "zh_CN": "过滤条件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "当弹出面板配置的是表格时,设置弹出面板中的过滤条件" + }, + "labelPosition": "left" + }, + { + "property": "grid-op", + "label": { + "text": { + "zh_CN": "表格配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中表格组件的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "pager-op", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出编辑框中分页配置" + }, + "labelPosition": "left" + }, + { + "property": "multi", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中的数据是否可多选" + }, + "labelPosition": "left" + }, + { + "property": "show-pager", + "label": { + "text": { + "zh_CN": "启用分页" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "选中值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项的值" + } + }, + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中对象" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "弹框关闭时触发的事件" + }, + "description": { + "zh_CN": "弹框关闭时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onPageChange": { + "label": { + "zh_CN": "分页切换事件" + }, + "description": { + "zh_CN": "表格模式下分页切换事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页码数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["modelValue", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tree", + "name": { + "zh_CN": "树" + }, + "component": "TinyTree", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tree", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "show-checkbox", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置接口是否可以多选" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1" + } + ] + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "可配置静态数据源和动态数据源" + } + }, + { + "property": "node-key", + "label": { + "text": { + "zh_CN": "唯一标识" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "节点唯一标识属性名称" + }, + "labelPosition": "left" + }, + { + "property": "icon-trigger-click-node", + "label": { + "text": { + "zh_CN": "触发NodeClick 事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "点击图标展开节点时是否触发 node-click 事件" + }, + "labelPosition": "left" + }, + { + "property": "expand-icon", + "label": { + "text": { + "zh_CN": "展开图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点展开图标" + }, + "labelPosition": "left" + }, + { + "property": "shrink-icon", + "label": { + "text": { + "zh_CN": "收缩图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点收缩的图标" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "check-on-click-node", + "label": { + "text": { + "zh_CN": "点击节点选中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点" + }, + "labelPosition": "left" + }, + { + "property": "filter-node-method", + "label": { + "text": { + "zh_CN": "筛选函数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点筛选函数" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onCheck": { + "label": { + "zh_CN": "勾选节点后的事件" + }, + "description": { + "zh_CN": "勾选节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "currentNode", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNodeClick": { + "label": { + "zh_CN": "点击节点后的事件" + }, + "description": { + "zh_CN": "点击节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "node", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + }, + { + "name": "vm", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件实例" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["data", "show-checkbox"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "timeline", + "name": { + "zh_CN": "时间线" + }, + "component": "TinyTimeLine", + "description": "TimeLine 时间线", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TimeLine", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "horizontal", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "水平布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字横向布局" + } + }, + { + "property": "vertical", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "垂直布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "垂直布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字垂直布局" + } + }, + { + "property": "active", + "label": { + "text": { + "zh_CN": "选中值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "步骤条的选中步骤值" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "name": "配置基本信息", + "status": "ready" + }, + { + "name": "配置报价", + "status": "wait" + }, + { + "name": "完成报价", + "status": "wait" + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "时间线步骤条数据" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "节点的点击时触发" + }, + "description": { + "zh_CN": "节点的点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "点击节点的下标" + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前节点对象:{ name: 节点名称, time: 时间 }" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["active", "data"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tooltip", + "name": { + "zh_CN": "文字提示框" + }, + "component": "TinyTooltip", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tooltip", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 11, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 20, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "placement", + "label": { + "text": { + "zh_CN": "提示位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "Tooltip 的出现位置" + }, + "labelPosition": "left" + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "提示信息", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot#content 传入 DOM" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "是否可见" + } + }, + "defaultValue": true, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "状态是否可见" + } + }, + { + "property": "manual", + "label": { + "text": { + "zh_CN": "手动控制" + } + }, + "defaultValue": true, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "手动控制模式,设置为 true 后,mouseenter 和 mouseleave 事件将不会生效" + } + } + ] + } + ], + "events": {}, + "slots": { + "content": { + "label": { + "zh_CN": "提示内容" + }, + "description": { + "zh_CN": "自定义提示内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "content"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "popover", + "name": { + "zh_CN": "提示框" + }, + "component": "TinyPopover", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popover", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,手动控制是否可见的状态值" + }, + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "left" + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "click", + "value": "click" + }, + { + "label": "focus", + "value": "focus" + }, + { + "label": "hover", + "value": "hover" + }, + { + "label": "manual", + "value": "manual" + } + ] + } + }, + "description": { + "zh_CN": "触发方式,该属性的可选值为 click / focus / hover / manual,该属性的默认值为 click" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "为 popper 添加类名" + }, + "labelPosition": "left" + }, + { + "property": "visible-arrow", + "label": { + "text": { + "zh_CN": "显示箭头" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示 Tooltip 箭头" + } + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "添加到body上" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover弹窗是否添加到body上" + } + }, + { + "property": "arrow-offset", + "label": { + "text": { + "zh_CN": "箭头的位置偏移" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "箭头的位置偏移,该属性的默认值为 0" + } + }, + { + "property": "close-delay", + "label": { + "text": { + "zh_CN": "隐藏延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的隐藏延迟,单位为毫秒" + } + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "显示的内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot 传入 DOM" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover 是否可用" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "位置偏移量" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "出现位置的偏移量" + } + }, + { + "property": "open-delay", + "label": { + "text": { + "zh_CN": "显示延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的显示延迟,单位为毫秒" + } + }, + { + "property": "popper-options", + "label": { + "text": { + "zh_CN": "popper.js的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "popper.js 的参数" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "transform-origin", + "label": { + "text": { + "zh_CN": "旋转中心点" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "组件的旋转中心点,组件的旋转中心点" + } + }, + { + "property": "transition", + "label": { + "text": { + "zh_CN": "定义渐变动画" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "该属性的默认值为 fade-in-linear" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "宽度" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "手动控制是否可见的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的可见状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "日期选择" + }, + "component": "TinyDatePicker", + "icon": "datepick", + "description": "用于输入或选择日期", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DatePicker", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "日期", + "value": "date" + }, + { + "label": "日期时间", + "value": "datetime" + }, + { + "label": "周", + "value": "week" + }, + { + "label": "月份", + "value": "month" + }, + { + "label": "年份", + "value": "year" + } + ] + } + }, + "description": { + "zh_CN": "设置日期框的type属性" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "禁用" + } + }, + { + "property": "readonly", + "label": { + "text": { + "zh_CN": "是否只读" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "日期框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "数字输入框" + }, + "component": "TinyNumeric", + "icon": "numeric", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Numeric", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "allow-empty", + "label": { + "text": { + "zh_CN": "内容可清空" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否内容可清空" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "禁用" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否使用加减按钮" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls-position", + "label": { + "text": { + "zh_CN": "加减按钮位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "左右两侧", + "value": "" + }, + { + "label": "只在右侧", + "value": "right" + } + ] + } + }, + "description": { + "zh_CN": "加减按钮位置" + }, + "labelPosition": "left" + }, + { + "property": "precision", + "label": { + "text": { + "zh_CN": "数值精度" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "数值精度" + }, + "labelPosition": "left" + }, + { + "property": "step", + "label": { + "text": { + "zh_CN": "步长" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "步长" + }, + "labelPosition": "left" + }, + { + "property": "max", + "label": { + "text": { + "zh_CN": "可输入的最大数值" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "可输入的最大数值" + }, + "labelPosition": "left" + }, + { + "property": "min", + "label": { + "text": { + "zh_CN": "可输入的最小数值" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "可输入的最大数值" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + } + ] + }, + "app": { + "id": 918, + "name": "portal-app", + "app_website": null, + "platform": { + "id": 897, + "name": "portal-platform" + }, + "obs_url": "", + "created_by": null, + "updated_by": null, + "created_at": "2022-06-08T07:19:01.000Z", + "updated_at": "2023-09-04T08:55:40.000Z", + "state": null, + "published": false, + "createdBy": 86, + "updatedBy": 564, + "tenant": 1, + "home_page": "NTJ4MjvqoVj8OVsc", + "css": null, + "config": {}, + "git_group": "", + "project_name": "", + "constants": null, + "data_handler": { + "type": "JSFunction", + "value": "function dataHanlder(res){\n return res;\n}" + }, + "description": "demo应用", + "latest": 22, + "platform_history": null, + "editor_url": "", + "branch": "develop", + "visit_url": null, + "is_demo": null, + "image_url": "", + "is_default": true, + "template_type": null, + "set_template_time": null, + "set_template_by": null, + "set_default_by": 169, + "framework": "Vue", + "global_state": [], + "default_lang": null, + "extend_config": { + "business": { + "serviceName": "", + "endpointName": "cce", + "endpointId": "ee", + "serviceId": "ee", + "router": "ee" + }, + "env": { + "alpha": { + "regions": [ + { + "name": "", + "baseUrl": "", + "isDefault": false + } + ], + "isDefault": true + } + }, + "type": "console" + }, + "assets_url": "", + "data_hash": "ae128e37f6bc378f1b9c21d75bd05551", + "can_associate": true, + "data_source_global": { + "dataHandler": { + "type": "JSFunction", + "value": "function dataHanlder(res){\n return res;\n}" + } + } + } +} diff --git a/mockServer/src/services/block.js b/mockServer/src/services/block.js new file mode 100644 index 000000000..c8071fe10 --- /dev/null +++ b/mockServer/src/services/block.js @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' +export default class BlockService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/blocks.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'label', + unique: true + }) + + this.userInfo = { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + } + + this.blockModel = { + id: '', + label: '', + name_cn: '', + framework: [], + content: {}, + description: '', + path: '', + screenshot: '', + created_app: '', + tags: '', + categories: [], + occupier: { + id: 86, + username: '开发者', + resetPasswordToken: 'developer' + }, + isDefault: null, + isOfficial: null + } + } + + async create(params) { + const blockData = { ...this.blockModel, ...params } + const result = await this.db.insertAsync(blockData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return result + } + + async update(id, params) { + await this.db.updateAsync({ _id: id }, { $set: params }) + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async detail(blockId) { + const result = await this.db.findOneAsync({ _id: blockId }) + return result + } + + async delete(blockId) { + const result = await this.db.findOneAsync({ _id: blockId }) + await this.db.removeAsync({ _id: blockId }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync() + return getResponseData(result) + } + + async find(params) { + const result = await this.db.findAsync(params) + return result + } +} diff --git a/mockServer/src/services/blockCategory.js b/mockServer/src/services/blockCategory.js new file mode 100644 index 000000000..401b963dd --- /dev/null +++ b/mockServer/src/services/blockCategory.js @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' +import appinfo from './appinfo.json' +export default class BlockCategoryService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/blockCategories.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'name', + unique: true + }) + + this.blockCategoriesModel = { + id: '', + app: '', + name: '', + desc: '', + blocks: [] + } + } + + async create(params) { + const blockCategoriesData = { ...this.blockCategoriesModel, ...params } + blockCategoriesData.app = appinfo.app + const result = await this.db.insertAsync(blockCategoriesData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return getResponseData(result) + } + + async update(id, params) { + if (params?._id) { + const categories = await this.db.findOneAsync({ _id: id }) + categories.blocks.push(params._id) + await this.db.updateAsync({ _id: id }, { $set: categories }) + return getResponseData(categories) + } + params.app = appinfo.app + await this.db.updateAsync({ _id: id }, { $set: params }) + + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async find(params) { + const result = await this.db.findAsync() + return getResponseData(result) + } + + async delete(id) { + const result = await this.db.findOneAsync({ _id: id }) + await this.db.removeAsync({ _id: id }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync() + return getResponseData(result) + } +} diff --git a/mockServer/src/services/blockGroup.js b/mockServer/src/services/blockGroup.js new file mode 100644 index 000000000..01cd868f6 --- /dev/null +++ b/mockServer/src/services/blockGroup.js @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' +import appinfo from './appinfo.json' +export default class BlockGroupService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/blockGroups.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'name', + unique: true + }) + + this.blockGroupModel = { + id: '', + app: '', + name: '', + desc: '', + blocks: [] + } + } + + async create(params) { + const blockGroupData = { ...this.blockGroupModel, ...params } + blockGroupData.app = appinfo.app + const result = await this.db.insertAsync(blockGroupData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return getResponseData(result) + } + + async update(id, params) { + params.app = appinfo.app + await this.db.updateAsync({ _id: id }, { $set: params }) + + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async find(params) { + if (params?.app || !params?.id) { + const result = await this.db.findAsync() + return getResponseData(result) + } + const { id } = params + const blockGroup = await this.db.findOneAsync({ _id: id }) + return getResponseData([blockGroup]) + } + + async delete(blockGroupId) { + const result = await this.db.findOneAsync({ _id: blockGroupId }) + await this.db.removeAsync({ _id: blockGroupId }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync() + return getResponseData(result) + } +} diff --git a/mockServer/src/services/blocks.json b/mockServer/src/services/blocks.json new file mode 100644 index 000000000..df91f08fc --- /dev/null +++ b/mockServer/src/services/blocks.json @@ -0,0 +1,436 @@ +{ + "PortalHome": { + "id": 989, + "label": "PortalHome", + "framework": "Vue", + "content": { + "state": { + "logoUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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", + "loginImgUrl": "data:image/png;base64,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" + }, + "componentName": "Block", + "css": ".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }", + "props": {}, + "children": [ + { + "componentName": "div", + "props": { + "className": "home", + "style": "height: 100vh; display: flex;" + }, + "id": "357534ab", + "children": [ + { + "componentName": "TinyRow", + "props": { + "align": "middle", + "flex": true, + "style": "" + }, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 6, + "style": "text-align: center; display: flex; justify-content: center;" + }, + "id": "f01b66ea", + "children": [ + { + "componentName": "div", + "props": { + "style": "width: 90%; height: 50%;" + }, + "id": "8197d016", + "children": [ + { + "componentName": "Img", + "props": { + "style": "width: 100%; height: 100%;", + "src": { + "type": "JSExpression", + "value": "this.state.loginImgUrl" + } + }, + "id": "471e30f3" + } + ] + } + ] + }, + { + "componentName": "TinyCol", + "props": { + "span": "6", + "style": "text-align: center;" + }, + "id": "781d5b46", + "children": [ + { + "componentName": "div", + "props": { + "className": "home-content", + "style": "font-size: 14px;" + }, + "id": "08638b8a", + "children": [ + { + "componentName": "div", + "props": { + "className": "text" + }, + "id": "18712ee2", + "children": [ + { + "componentName": "div", + "props": { + "style": "font-size: 16px;" + }, + "id": "07e6794c", + "children": [ + { + "componentName": "div", + "props": { + "className": "logo" + }, + "id": "07cad264", + "children": [ + { + "componentName": "Img", + "props": { + "style": "width: 105px; height: 105px; border-radius: 100px;", + "src": { + "type": "JSExpression", + "value": "this.state.logoUrl" + } + }, + "id": "f4489e27" + } + ] + }, + { + "componentName": "Text", + "props": { + "text": "TinyLowCode 低代码平台", + "style": "display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;", + "ref": "", + "className": "title" + }, + "id": "e82108ce" + }, + { + "componentName": "Text", + "props": { + "text": "致力于通过友好的用户交互提升业务的开发效率", + "style": "display: block; margin-bottom: 12px;" + }, + "id": "65a2f1ad" + }, + { + "componentName": "Text", + "props": { + "text": "欢迎一起来解锁~~", + "style": "margin-top: 12px;" + }, + "id": "bb879abb" + } + ] + }, + { + "componentName": "div", + "props": { + "className": "btn" + }, + "id": "44b2bcbd", + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "立即体验", + "round": true, + "type": "primary", + "style": "margin-top: 40px;" + }, + "id": "9580c5e7" + }, + { + "componentName": "div", + "props": { + "className": "account" + }, + "id": "6a8ffa3e", + "children": [ + { + "componentName": "div", + "props": { + "style": "font-size: 14px; margin-top: 4px;" + }, + "id": "bfc6eb6c", + "children": [ + { + "componentName": "Text", + "props": { + "text": "已有团队?", + "style": "color: #777777;" + }, + "id": "3d993264" + }, + { + "componentName": "Text", + "props": { + "text": "立即进入", + "style": "color: #5e7ce0;", + "onClick": { + "type": "JSExpression", + "value": "this.handleClick(event)" + } + }, + "id": "21390118" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ], + "id": "4545fea2" + } + ] + } + ], + "methods": { + "handleClick": { + "type": "JSFunction", + "value": "function (event) {this.emit('goto-home', event)\n}" + } + }, + "fileName": "PortalHome", + "meta": { + "id": 1722, + "parentId": "0", + "group": "staticPages", + "title": null, + "occupier": null, + "isHome": false, + "description": "", + "router": "/", + "rootElement": "div", + "creator": "开发者", + "gmt_create": "2022-06-08 03:25:51", + "gmt_modified": "2022-06-09 05:19:09" + }, + "id": 1722, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [] + } + ], + "events": { + "onGotoHome": { + "label": { + "zh_CN": "点击立即进入触发方法" + }, + "description": { + "zh_CN": "点击立即进入触发方法" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "", + "linked": { + "id": "21390118", + "componentName": "Text", + "event": "onClick" + } + } + }, + "slots": {} + }, + "dataSource": {}, + "i18n": {} + }, + "created_at": "2022-06-13T07:56:51.000Z", + "updated_at": "2023-01-13T08:12:51.000Z", + "assets": { + "material": [], + "scripts": [ + "http://localhost:9090/assets/js/989web-components.es.js", + "http://localhost:9090/assets/js/989web-components.umd.js" + ], + "styles": [] + }, + "createdBy": 86, + "description": null, + "tags": "", + "current_history": 1655, + "screenshot": "", + "path": "common/components/home", + "occupier": null, + "isOfficial": true, + "public": 1, + "isDefault": null, + "tiny_reserved": false, + "author": null, + "name_cn": null, + "created_app": null, + "content_blocks": null, + "current_version": "x" + }, + "portalBlock": { + "id": 1005, + "label": "PortalBlock", + "framework": "Vue", + "content": { + "state": {}, + "methods": {}, + "componentName": "Block", + "fileName": "PortalBlock", + "css": "", + "props": {}, + "children": [ + { + "componentName": "div", + "props": { + "style": "font-size: 18px; height: 40px; border-bottom: 1px solid rgb(223, 225, 230); margin-top: 20px;" + }, + "id": "d38cea57", + "children": [ + { + "componentName": "Icon", + "props": { + "name": "IconChevronLeft" + }, + "id": "86c6e6b0" + }, + { + "componentName": "Text", + "props": { + "text": "编辑物料资产包 | ", + "style": "margin-left: 10px; font-weight: bold;" + }, + "id": "38d9fbc8" + }, + { + "componentName": "Text", + "props": { + "text": { + "type": "JSExpression", + "value": "this.props.blockName" + }, + "style": "margin-left: 10px; font-weight: bold;" + }, + "id": "6cd76396" + } + ] + } + ], + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "blockName", + "type": "String", + "defaultValue": "MT0526-React 1.0", + "label": { + "text": { + "zh_CN": "区块名称" + } + }, + "cols": 12, + "rules": [], + "handle": { + "getter": "", + "setter": "" + }, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaInput", + "props": { + "modelValue": "MT0526-React 1.0" + } + } + } + ] + } + ], + "events": {}, + "slots": {} + }, + "dataSource": {} + }, + "created_at": "2022-06-28T08:59:54.000Z", + "updated_at": "2023-01-13T08:20:09.000Z", + "assets": { + "material": [], + "scripts": [ + "http://localhost:9090/assets/js/1005web-components.es.js", + "http://localhost:9090/assets/js/1005web-components.umd.js" + ], + "styles": [] + }, + "createdBy": { + "id": 86, + "username": "开发者", + "resetPasswordToken": "developer" + }, + "description": null, + "tags": null, + "current_history": 1665, + "screenshot": "", + "path": "portal", + "occupier": { + "id": 86, + "username": "开发者", + "resetPasswordToken": "developer" + }, + "isOfficial": null, + "public": 1, + "isDefault": null, + "tiny_reserved": false, + "author": null, + "name_cn": null, + "created_app": null, + "content_blocks": null, + "categories": [], + "public_scope_tenants": [], + "histories_length": 1 + } +} \ No newline at end of file diff --git a/mockServer/src/services/mockService.js b/mockServer/src/services/mockService.js new file mode 100644 index 000000000..5f05fd389 --- /dev/null +++ b/mockServer/src/services/mockService.js @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import PageService from './pages' +import AppService from './app' +import BlockService from './block' +import SourceService from './source' +import BlockGroupService from './blockGroup' +import BlockCategoryService from './blockCategory' +import Schema2CodeServcice from './schema2code' +export default class MockService { + schema2codeService + pageService + appService + blockService + sourceService + blockGroupService + blockCategoryService + + constructor() { + this.schema2codeService = new Schema2CodeServcice() + this.pageService = new PageService() + this.appService = new AppService() + this.blockService = new BlockService() + this.sourceService = new SourceService() + this.blockGroupService = new BlockGroupService() + this.blockCategoryService = new BlockCategoryService() + } +} diff --git a/mockServer/src/services/pageSchema.js b/mockServer/src/services/pageSchema.js new file mode 100644 index 000000000..2b78b9be7 --- /dev/null +++ b/mockServer/src/services/pageSchema.js @@ -0,0 +1,178 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { E_SchemaFormatFunc } from './utils' +import { getResponseData } from '../tool/Common' + +const config = { + pageMeta: { + convert: { + page_desc: 'description', + route: 'router', + isBody: 'rootElement', + createdBy: 'creator', + created_at: 'gmt_create', + updated_at: 'gmt_modified' + }, + include: [ + 'id', + 'title', + 'page_desc', + 'createdBy', + 'parentId', + 'created_at', + 'updated_at', + 'isHome', + 'isBody', + 'group', + 'route', + 'occupier' + ], + format: { + created_at: E_SchemaFormatFunc.ToLocalTimestamp, + updated_at: E_SchemaFormatFunc.ToLocalTimestamp, + isBody: E_SchemaFormatFunc.ToRootElement, + group: E_SchemaFormatFunc.ToGroupName, + createdBy: E_SchemaFormatFunc.ToCreatorName + } + }, + pageContent: { + include: ['fileName', 'componentName', 'props', 'css', 'children', 'methods', 'state', 'lifeCycles'] + }, + folder: { + convert: { + name: 'folderName', + route: 'router', + created_at: 'gmt_create', + updated_at: 'gmt_modified' + }, + include: ['name', 'route', 'created_at', 'updated_at', 'id', 'parentId', 'depth'], + format: { + created_at: E_SchemaFormatFunc.ToLocalTimestamp, + updated_at: E_SchemaFormatFunc.ToLocalTimestamp + } + } +} + +export default class PageSchemaService { + constructor() { + this.config = config + } + + + assembleFields(originalData, type) { + let dataCopy = JSON.parse(JSON.stringify(originalData.data)) + const conf = this.config[type] + if (conf.include || conf.exclude) { + dataCopy = this.filterFields(dataCopy, conf) + } + if (conf.format) { + dataCopy = this.formatFields(dataCopy, conf) + } + if (conf.convert) { + dataCopy = this.convertFields(dataCopy, conf) + } + return getResponseData(dataCopy) + } + + // 转换数据表字段为schema中的字段命名 + convertFields(data, conf) { + const convertConf = conf.convert || {} + Object.keys(convertConf).forEach((key) => { + data[convertConf[key]] = data[key] + delete data[key] + }) + return data + } + + // 筛选数据 + filterFields(data, conf) { + const excludeConf = conf.exclude || [] + const includeConf = conf.include || [] + let res = {} + // include 优先级高于 exclude + if (includeConf.length) { + for (const key in data) { + if (includeConf.includes(key)) { + res[key] = data[key] + } + } + } else if (excludeConf.length) { + for (const key in data) { + if (!excludeConf.includes(key)) { + res[key] = data[key] + } + } + } else { + res = data + } + + return res + } + + // 格式化数据 + formatFields(data, conf) { + const { format = {} } = conf + Object.keys(format).forEach((key) => { + const funcName = format[key] + const func = this[funcName] + if (func) { + data[key] = func(data[key]) + } + }) + return data + } + + // 获取页面元数据 + getSchemaMeta(pageData) { + return this.assembleFields(pageData, 'pageMeta') + } + + // 提取page_schema + getSchemaBase(pageData) { + const pageMate = JSON.parse(JSON.stringify(pageData.data)) + const pageContent = pageMate.page_content || {} + pageContent.fileName = pageMate.name + return this.assembleFields( + { + data: pageContent + }, + 'pageContent' + ) + } + + // 获取folder schema数据 todo + getFolderSchema(param) { + const schema = this.assembleFields( + { + data: param + }, + 'folder' + ) + schema.data.componentName = 'Folder' + return schema + } + + // 获取页面的schema + getSchema(pageInfo) { + const pageInfoData = { + data: pageInfo + } + if (!pageInfo.isPage) { + return this.getFolderSchema(pageInfo) + } + const schema = this.getSchemaBase(pageInfoData).data + // 从page_schema中获取基本字段 + schema.meta = this.getSchemaMeta(pageInfoData).data + return getResponseData(schema) + } +} diff --git a/mockServer/src/services/pages.js b/mockServer/src/services/pages.js new file mode 100644 index 000000000..07b743e2e --- /dev/null +++ b/mockServer/src/services/pages.js @@ -0,0 +1,102 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' + +export default class PageService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/pages.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'route', + unique: true + }) + + this.userInfo = { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + } + + this.pageModel = { + name: '', + id: '', + app: '918', + route: '', + page_content: {}, + tenant: 1, + isBody: true, + parentId: '', + depth: 0, + isPage: true, + isDefault: false, + group: 'staticPages', + occupier: { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + } + } + + this.folderModel = { + parentId: '0', + route: 'test', + name: 'test', + app: '918', + isPage: false, + group: 'staticPages' + } + } + + async create(params) { + const model = params.isPage ? this.pageModel : this.folderModel + const pageData = { ...model, ...params } + const result = await this.db.insertAsync(pageData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return getResponseData(result) + } + + async update(id, params) { + await this.db.updateAsync({ _id: id }, { $set: params }) + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync({ app: appId.toString() }) + return getResponseData(result) + } + + async detail(pageId) { + const result = await this.db.findOneAsync({ _id: pageId }) + return getResponseData(result) + } + + async delete(pageId) { + const result = await this.db.findOneAsync({ _id: pageId }) + await this.db.removeAsync({ _id: pageId }) + return getResponseData(result) + } +} diff --git a/mockServer/src/services/schema2code.js b/mockServer/src/services/schema2code.js new file mode 100644 index 000000000..9b2700065 --- /dev/null +++ b/mockServer/src/services/schema2code.js @@ -0,0 +1,113 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { pageService } from '../routes/main-routes' +import appInfo from './appinfo.json' + +export default class Schema2CodeServcice { + constructor() { + this.blockHistories = appInfo.blockHistories + this.components = appInfo.materialHistory.components + } + + schema2code(pageInfo, type = 'page') { + const { schema, name } = pageInfo + return this.translateSchema({ + schema, + name, + type + }) + } + + /** + * 通过dsl 将页面/区块schema数据生成对应代码 + * @param { I_TranslateSchemaParam } params + * @return {Promise} dsl函数返回数据 + */ + translateSchema(params) { + const { schema, name, type, blockHistories = this.blockHistories, components = this.components } = params + // 页面/区块 预览只需将页面、区块路径和区块构建产物路径统一设置为 ./components 即可 + const defaultMain = './components' + let componentsMap = this.getComponentSchema(components) + componentsMap = componentsMap.concat(this.getBlockSchema(blockHistories)) + componentsMap.forEach((component) => { + if (component.main !== undefined) { + component.main = defaultMain + } + }) + + componentsMap.push({ + componentName: name, + main: defaultMain + }) + + const { generateCode } = require('@opentiny/tiny-engine-dsl-vue') + let code + try { + code = generateCode({ + pageInfo: { schema, name }, + blocksData: [], + componentsMap + }) + } catch (e) { + this.getResponseData(null, e) + } + + return this.getResponseData(code) + } + + getResponseData(data, error) { + const res = { + data + } + + if (error) { + const err_code = error.code || '' + res.error = { + code: err_code, + message: error.message || '' + } + } + return res + } + + getComponentSchema(components) { + return components.map((component) => { + const { + component: componentName, + npm: { package: packageName, exportName, version, destructuring } = {} + } = component + return { + componentName, + package: packageName, + exportName, + destructuring, + version + } + }) + } + + // 将区块组装成schema数据 + getBlockSchema(blockHistories) { + return blockHistories.map((blockHistory) => { + const { path, version } = blockHistory + // 每个区块历史记录必有content + const { fileName: componentName } = blockHistory.content + return { + componentName, + main: path || '', + destructuring: false, + version: version || 'N/A' + } + }) + } +} diff --git a/mockServer/src/services/source.js b/mockServer/src/services/source.js new file mode 100644 index 000000000..be25719f0 --- /dev/null +++ b/mockServer/src/services/source.js @@ -0,0 +1,21 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { getResponseData } from '../tool/Common' +import sources from './sources.json' +export default class soueceService { + detail(id) { + const sourceData = sources[id] || {} + return getResponseData(sourceData) + } + +} diff --git a/mockServer/src/services/sources.json b/mockServer/src/services/sources.json new file mode 100644 index 000000000..2c0c8b89f --- /dev/null +++ b/mockServer/src/services/sources.json @@ -0,0 +1,669 @@ +{ + "132": { + "id": 132, + "name": "getAllComponent", + "data": { + "data": [], + "type": "array" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T06:26:26.000Z", + "updated_at": "2022-06-28T07:02:30.000Z" + }, + "133": { + "id": 133, + "name": "getAllList", + "data": { + "columns": [ + { + "name": "test", + "title": "测试", + "field": "test", + "type": "string", + "format": {} + }, + { + "name": "test1", + "title": "测试1", + "field": "test1", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "test": "test1", + "test1": "test1", + "_id": "341efc48" + }, + { + "test": "test2", + "test1": "test1", + "_id": "b86b516c" + }, + { + "test": "test3", + "test1": "test1", + "_id": "f680cd78" + } + ], + "options": { + "uri": "https://mock.demo.com/mock/198/material-center/api/component/list", + "method": "GET" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-28T07:32:16.000Z", + "updated_at": "2023-01-19T03:29:11.000Z" + }, + "135": { + "id": 135, + "name": "getAllMaterialList", + "data": { + "columns": [ + { + "name": "id", + "title": "id", + "field": "id", + "type": "string", + "format": {} + }, + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": {} + }, + { + "name": "framework", + "title": "framework", + "field": "framework", + "type": "string", + "format": { + "required": true + } + }, + { + "name": "components", + "title": "components", + "field": "components", + "type": "string", + "format": {} + }, + { + "name": "content", + "title": "content", + "field": "content", + "type": "string", + "format": {} + }, + { + "name": "url", + "title": "url", + "field": "url", + "type": "string", + "format": {} + }, + { + "name": "published_at", + "title": "published_at", + "field": "published_at", + "type": "string", + "format": {} + }, + { + "name": "created_at", + "title": "created_at", + "field": "created_at", + "type": "string", + "format": {} + }, + { + "name": "updated_at", + "title": "updated_at", + "field": "updated_at", + "type": "string", + "format": {} + }, + { + "name": "published", + "title": "published", + "field": "published", + "type": "string", + "format": {} + }, + { + "name": "last_build_info", + "title": "last_build_info", + "field": "last_build_info", + "type": "string", + "format": {} + }, + { + "name": "tenant", + "title": "tenant", + "field": "tenant", + "type": "string", + "format": {} + }, + { + "name": "version", + "title": "version", + "field": "version", + "type": "string", + "format": {} + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": {} + } + ], + "type": "array", + "data": [ + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "2a23e653" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "06b253be" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "c55a41ed" + }, + { + "id": "f37123ec", + "url": "", + "name": "ng-material", + "tenant": "", + "content": "", + "version": "1.0.0", + "framework": "Angular", + "published": "", + "components": "", + "created_at": "2021-11-02T11:32:22.000Z", + "updated_at": "2021-11-02T11:32:22.000Z", + "description": "angular组件库物料", + "published_at": "2021-11-02T11:32:22.000Z", + "last_build_info": "", + "_id": "f37123ec" + }, + { + "id": "7a63c1a2", + "url": "", + "name": "tiny-vue", + "tenant": "", + "content": "Tiny Vue物料", + "version": "1.0.0", + "framework": "Vue", + "published": "", + "components": "", + "created_at": "", + "updated_at": "", + "description": "Tiny Vue物料", + "published_at": "", + "last_build_info": "", + "_id": "7a63c1a2" + } + ], + "options": { + "uri": "https://mock.demo.com/mock/198/material-center/api/material/list", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-29T00:57:50.000Z", + "updated_at": "2023-05-15T02:37:12.000Z" + }, + "139": { + "id": 139, + "name": "treedata", + "data": { + "data": [ + { + "label": "level111", + "value": "111", + "id": "f6609643", + "pid": "", + "_RID": "row_4" + }, + { + "label": "level1-son", + "value": "111-1", + "id": "af1f937f", + "pid": "f6609643", + "_RID": "row_5" + }, + { + "label": "level222", + "value": "222", + "id": "28e3709c", + "pid": "", + "_RID": "row_6" + }, + { + "label": "level2-son", + "value": "222-1", + "id": "6b571bef", + "pid": "28e3709c", + "_RID": "row_5" + }, + { + "id": "6317c2cc", + "pid": "fdfa", + "label": "fsdfaa", + "value": "fsadf", + "_RID": "row_6" + }, + { + "id": "9cce369f", + "pid": "test", + "label": "test1", + "value": "001" + } + ], + "type": "tree" + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-06-30T06:13:57.000Z", + "updated_at": "2022-07-29T03:14:55.000Z" + }, + "150": { + "id": 150, + "name": "componentList", + "data": { + "data": [ + { + "_RID": "row_1", + "name": "表单", + "isSelected": "true", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据" + }, + { + "name": "按钮", + "isSelected": "false", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型" + }, + { + "id": "490f8a00", + "_RID": "row_3", + "name": "表单项", + "framework": "", + "materials": "", + "description": "Form 组件下的 FormItem 配置" + }, + { + "id": "c259b8b3", + "_RID": "row_4", + "name": "开关", + "framework": "", + "materials": "", + "description": "关闭或打开" + }, + { + "id": "083ed9c7", + "_RID": "row_5", + "name": "互斥按钮组", + "framework": "", + "materials": "", + "description": "以按钮组的方式出现,常用于多项类似操作" + }, + { + "id": "09136cea", + "_RID": "row_6", + "name": "提示框", + "framework": "", + "materials": "", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画" + }, + { + "id": "a63b57d5", + "_RID": "row_7", + "name": "文字提示框", + "framework": "", + "materials": "", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信" + }, + { + "id": "a0f6e8a3", + "_RID": "row_8", + "name": "树", + "framework": "", + "materials": "", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单" + }, + { + "id": "d1aa18fc", + "_RID": "row_9", + "name": "分页", + "framework": "", + "materials": "", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件" + }, + { + "id": "ca49cc52", + "_RID": "row_10", + "name": "表格", + "framework": "", + "materials": "", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等" + }, + { + "id": "4e20ecc9", + "name": "搜索框", + "framework": "", + "materials": "", + "description": "指定条件对象进行搜索数据" + }, + { + "id": "6b093ee5", + "name": "折叠面板", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "0a09abc0", + "name": "对话框", + "framework": "", + "materials": "", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作" + }, + { + "id": "f814b901", + "name": "标签页签项", + "framework": "", + "materials": "", + "description": "tab页签" + }, + { + "id": "c5ae797c", + "name": "单选", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,在一组备选项中进行单选" + }, + { + "id": "33d0c590", + "_RID": "row_13", + "name": "弹出编辑", + "framework": "", + "materials": "", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件" + }, + { + "id": "16711dfa", + "_RID": "row_14", + "name": "下拉框", + "framework": "", + "materials": "", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件" + }, + { + "id": "a9fd190a", + "_RID": "row_15", + "name": "折叠面板项", + "framework": "", + "materials": "", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作" + }, + { + "id": "a7dfa9ec", + "_RID": "row_16", + "name": "复选框", + "framework": "", + "materials": "", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选" + }, + { + "id": "d4bb8330", + "name": "输入框", + "framework": "", + "materials": "", + "description": "通过鼠标或键盘输入字符" + }, + { + "id": "ced3dc83", + "name": "时间线", + "framework": "", + "materials": "", + "description": "时间线" + } + ], + "type": "array", + "columns": [ + { + "name": "name", + "type": "string", + "field": "name", + "title": "name", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "description", + "type": "string", + "field": "description", + "title": "description", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + }, + { + "name": "isSelected", + "type": "string", + "field": "isSelected", + "title": "isSelected", + "format": { + "max": 0, + "min": 0, + "dateTime": false, + "required": false, + "stringType": "" + } + } + ], + "options": { + "uri": "http://localhost:9090/assets/json/bundle.json", + "method": "GET" + }, + "willFetch": { + "type": "JSFunction", + "value": "function willFetch(option) {\n return option \n}" + }, + "dataHandler": { + "type": "JSFunction", + "value": "function dataHandler(data) { \n return data \n}" + }, + "shouldFetch": { + "type": "JSFunction", + "value": "function shouldFetch(option) {\n return true \n}" + }, + "errorHandler": { + "type": "JSFunction", + "value": "function errorHandler(err) {}" + } + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T02:20:07.000Z", + "updated_at": "2022-07-04T06:25:29.000Z" + }, + "151": { + "id": 151, + "name": "selectedComponents", + "data": { + "columns": [ + { + "name": "name", + "title": "name", + "field": "name", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "description", + "title": "description", + "field": "description", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + }, + { + "name": "isSelected", + "title": "isSelected", + "field": "isSelected", + "type": "string", + "format": { + "required": false, + "stringType": "", + "min": 0, + "max": 0, + "dateTime": false + } + } + ], + "type": "array", + "data": [ + { + "name": "标签页", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "isSelected": "true", + "_RID": "row_2" + }, + { + "name": "布局列", + "description": "列配置信息", + "isSelected": "true", + "id": "76a7080a", + "_RID": "row_4" + }, + { + "name": "日期选择器", + "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式", + "isSelected": "true", + "id": "76b20d73", + "_RID": "row_1" + }, + { + "name": "走马灯", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现", + "isSelected": "true", + "id": "4c884c3d" + } + ] + }, + "tpl": null, + "app": "918", + "desc": null, + "created_at": "2022-07-04T03:04:05.000Z", + "updated_at": "2022-07-04T03:43:40.000Z" + }, + "locale": "zh-cn" +} diff --git a/mockServer/src/services/utils.js b/mockServer/src/services/utils.js new file mode 100644 index 000000000..853dc4265 --- /dev/null +++ b/mockServer/src/services/utils.js @@ -0,0 +1,43 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import moment from 'moment' + +export const E_SchemaFormatFunc = { + toLocalTimestamp(time) { + return moment(time).format('YYYY-MM-DD hh:mm:ss') + }, + toRootElement(isBody) { + return isBody ? 'body' : 'div' + }, + toGroupName(group) { + // 调整一下group命名 + if (['static', 'public'].includes(group)) { + return `${group}Pages` + } + return group + }, + toCreatorName(createdBy) { + // 历史原因 数据库中有页面的createdBy为null + return (createdBy || {}).username || '' + }, + + // 数字转字符串 + toFormatString(param) { + return param.toString() + }, + + // 给global_state设置默认值 + toArrayValue(state) { + return Array.isArray(state) ? state : [] + } +} diff --git a/mockServer/src/tool/Common.js b/mockServer/src/tool/Common.js new file mode 100644 index 000000000..23d79880d --- /dev/null +++ b/mockServer/src/tool/Common.js @@ -0,0 +1,75 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +// 截取字符串,多余的部分用...代替 +export const setString = (str, len) => { + let StrLen = 0 + let s = '' + for (let i = 0; i < str.length; i++) { + if (str.charCodeAt(i) > 128) { + StrLen += 2 + } else { + StrLen++ + } + s += str.charAt(i) + if (StrLen >= len) { + return s + '...' + } + } + return s +} + +// 格式化设置 +export const OptionFormat = (GetOptions) => { + let options = '{' + for (let n = 0; n < GetOptions.length; n++) { + options = options + "'" + GetOptions[n].option_name + "':'" + GetOptions[n].option_value + "'" + if (n < GetOptions.length - 1) { + options = options + ',' + } + } + return JSON.parse(options + '}') +} + + +// 数组去重 +export const HovercUnique = (arr) => { + const n = {} + const r = [] + for (let i = 0; i < arr.length; i++) { + if (!n[arr[i]]) { + n[arr[i]] = true + r.push(arr[i]) + } + } + return r +} + +// 获取json长度 +export const getJsonLength = (jsonData) => { + return Object.keys(jsonData).length +} + +export const getResponseData = (data, error) => { + const res = { + data + } + + if (error) { + const err_code = error.code + res.error = { + code: err_code, + message: error.message + } + } + return res +} diff --git a/mockServer/test/app.test.js b/mockServer/test/app.test.js new file mode 100644 index 000000000..1af2aa315 --- /dev/null +++ b/mockServer/test/app.test.js @@ -0,0 +1,19 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import app from '../src/app' + +describe('Example', () => { + test('should be defined', () => { + expect(app).toBeDefined() + }) +}) diff --git a/package.json b/package.json new file mode 100644 index 000000000..8586040b0 --- /dev/null +++ b/package.json @@ -0,0 +1,74 @@ +{ + "name": "tiny-engine", + "private": true, + "scripts": { + "preinstall": "npx only-allow pnpm", + "dev": "pnpm run setup && concurrently 'pnpm:serve:backend' 'pnpm:serve:frontend'", + "dev:mock": "pnpm --filter @opentiny/tiny-engine dev", + "serve:frontend": "pnpm --filter @opentiny/tiny-engine serve", + "serve:backend": "pnpm --filter @opentiny/tiny-engine-mock dev", + "build:plugin": "pnpm --filter @opentiny/tiny-engine-* build", + "build:alpha": "pnpm --filter @opentiny/tiny-engine build:alpha", + "build:prod": "pnpm --filter @opentiny/tiny-engine build:prod", + "buildComponentSchemas": "node scripts/buildComponentSchemas.js", + "preview": "pnpm --filter @opentiny/tiny-engine preview", + "lint": "eslint . --ext .js,.vue,.jsx --fix", + "format": "prettier --write **/*{.vue,.js,.ts,.html,.json}", + "prepare": "node -e \"if(require('fs').existsSync('.git')){process.exit(1)}\" || husky install", + "pub:premajor": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version premajor --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "pub:preminor": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version preminor --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "pub:prepatch": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version prepatch --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "pub:prerelease": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version prerelease --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "setup": "node ./scripts/setup.js", + "splitMaterials": "node ./scripts/splitMaterials.mjs", + "buildMaterials": "node ./scripts/buildMaterials.mjs" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.21.3", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@types/node": "^18.0.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "assert": "^2.0.0", + "buffer": "^6.0.3", + "chokidar": "^3.5.3", + "concurrently": "^8.2.0", + "cross-env": "^7.0.3", + "dotenv": "^16.3.1", + "eslint": "^8.38.0", + "eslint-plugin-vue": "^8.0.0", + "fast-glob": "^3.3.2", + "fs-extra": "^10.1.0", + "husky": "^8.0.0", + "lerna": "^7.2.0", + "less": "^4.1.2", + "lint-staged": "^13.2.0", + "mysql": "^2.18.1", + "path": "^0.12.7", + "picocolors": "^1.0.0", + "rimraf": "^3.0.2", + "rollup-plugin-polyfill-node": "^0.12.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-visualizer": "^5.8.3", + "svg-sprite-loader": "^6.0.11", + "vite": "^4.3.7", + "vite-plugin-monaco-editor": "^1.0.10", + "vite-plugin-svg-icons": "^2.0.1", + "vue-eslint-parser": "^8.0.1" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ], + "engines": { + "node": ">=14", + "pnpm": ">=7" + }, + "pnpm": { + "patchedDependencies": { + "@vue/repl@2.9.0": "patches/@vue__repl@2.9.0.patch" + } + } +} diff --git a/packages/blockToWebComponentTemplate/README.md b/packages/blockToWebComponentTemplate/README.md new file mode 100644 index 000000000..cb104541e --- /dev/null +++ b/packages/blockToWebComponentTemplate/README.md @@ -0,0 +1,12 @@ +# @opentiny/tiny-engine-blockToWebComponentTemplate + +将区块转换成 webComponent,使得不同技术栈的区块可以统一在 vue 的画布上面运行 + +## 使用 + +- 后端拉取 template +- 将区块 schema 转换成 高代码,并写入 src 文件夹中 +- 写入 lib.js,替换 BlockFileName 为实际出码的文件名 +- 执行 `pnpm install` 安装依赖 +- 运行 `pnpm run build:block` 命令 +- 得到 webcomponent 转换产物 \ No newline at end of file diff --git a/packages/blockToWebComponentTemplate/package.json b/packages/blockToWebComponentTemplate/package.json new file mode 100644 index 000000000..c857539ae --- /dev/null +++ b/packages/blockToWebComponentTemplate/package.json @@ -0,0 +1,47 @@ +{ + "name": "@opentiny/tiny-engine-block-build", + "version": "1.0.2", + "description": "translate block to webcomponent template", + "main": "./dist/web-components.es.js", + "scripts": { + "build:block": "vite build --mode block" + }, + "keywords": [ + "vue", + "vue3", + "frontend", + "opentiny", + "lowcode", + "tiny-engine", + "webComponent" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/builtinComponent" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@opentiny/tiny-engine-i18n-host": "workspace:*", + "@opentiny/tiny-engine-webcomponent-core": "workspace:*", + "@opentiny/vue": "~3.11.0", + "@opentiny/vue-icon": "~3.11.0", + "@opentiny/vue-theme": "~3.11.0", + "@vue/shared": "^3.3.11", + "vue": "^3.4.15", + "vue-i18n": "^9.9.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.5.2", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "vite": "^4.3.7" + } +} diff --git a/packages/blockToWebComponentTemplate/src/BlockFileName.vue b/packages/blockToWebComponentTemplate/src/BlockFileName.vue new file mode 100644 index 000000000..90791a499 --- /dev/null +++ b/packages/blockToWebComponentTemplate/src/BlockFileName.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/packages/blockToWebComponentTemplate/src/lib.js b/packages/blockToWebComponentTemplate/src/lib.js new file mode 100644 index 000000000..61a538b09 --- /dev/null +++ b/packages/blockToWebComponentTemplate/src/lib.js @@ -0,0 +1,20 @@ +import { hyphenate } from '@vue/shared' +import { defineCustomElement } from '@opentiny/tiny-engine-webcomponent-core' +import block from './BlockFileName.vue' + +window.TinyLowcodeResource = window.TinyLowcodeResource || {} + +const blockName = hyphenate('BlockFileName') + +if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } +} else { + block.links = process.env.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + block.styles = ['svg { width: 10px; height: 10px;}', ...(block.styles || [])] + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, defineCustomElement(block)) +} + +export default block diff --git a/packages/blockToWebComponentTemplate/vite.config.js b/packages/blockToWebComponentTemplate/vite.config.js new file mode 100644 index 000000000..446d0050c --- /dev/null +++ b/packages/blockToWebComponentTemplate/vite.config.js @@ -0,0 +1,66 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import path from 'path' + +const config = { + define: {}, + resolve: { + alias: {} + }, + build: { + cssCodeSplit: false, + minify: false, + commonjsOptions: { + transformMixedEsModules: true + }, + rollupOptions: { + external: [ + 'vue', + 'vue-i18n', + '@opentiny/tiny-engine-i18n-host', + '@opentiny/tiny-engine-webcomponent-core', + '@opentiny/vue', + '@opentiny/vue-icon' + ], + output: { + globals: { + vue: 'Vue', + 'vue-i18n': 'VueI18n', + '@opentiny/tiny-engine-i18n-host': 'TinyI18nHost', + '@opentiny/tiny-engine-webcomponent-core': 'TinyWebcomponentCore', + '@opentiny/vue': 'TinyVue', + '@opentiny/vue-icon': 'TinyVueIcon' + } + } + } + } +} + +export default defineConfig(({ command, mode }) => { + if (command !== 'build' || mode !== 'block') { + return config + } + + const vuePluginConfig = {} + const styleLinks = ['https://npm.onmicrosoft.cn/@opentiny/vue-theme@3.11/index.css'] + + config.publicDir = false + + config.build.lib = { + entry: path.resolve(__dirname, './src/lib.js'), + name: 'TinyVueBlock', + formats: ['umd', 'es'], + fileName: (format) => `js/web-component.${format}.js` + } + + vuePluginConfig.customElement = true + + config.plugins = [vue(vuePluginConfig), vueJsx()] + + config.define['process.env'] = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: styleLinks + } + + return config +}) diff --git a/packages/builtinComponent/README.md b/packages/builtinComponent/README.md new file mode 100644 index 000000000..5670a81d8 --- /dev/null +++ b/packages/builtinComponent/README.md @@ -0,0 +1,9 @@ +# 内置组件 + +## 目前内置的组件 + +### CanvasRow + +### CanvasCol + +### CanvasRowColContainer diff --git a/packages/builtinComponent/index.js b/packages/builtinComponent/index.js new file mode 100644 index 000000000..99242b77a --- /dev/null +++ b/packages/builtinComponent/index.js @@ -0,0 +1,4 @@ +export { default as CanvasCol } from './src/components/CanvasCol.vue' +export { default as CanvasRow } from './src/components/CanvasRow.vue' +export { default as CanvasRowColContainer } from './src/components/CanvasRowColContainer.vue' +export { default as meta } from './src/meta' diff --git a/packages/builtinComponent/package.json b/packages/builtinComponent/package.json new file mode 100644 index 000000000..92ff6b3ee --- /dev/null +++ b/packages/builtinComponent/package.json @@ -0,0 +1,31 @@ +{ + "name": "@opentiny/tiny-engine-builtin-component", + "version": "1.0.1", + "description": "", + "main": "dist/index.js", + "module": "dist/index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/builtinComponent" + }, + "scripts": { + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@opentiny/vue": "~3.10.0", + "vite-plugin-css-injected-by-js": "^3.3.1" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "vite": "^4.5.0" + } +} diff --git a/packages/builtinComponent/src/components/CanvasCol.vue b/packages/builtinComponent/src/components/CanvasCol.vue new file mode 100644 index 000000000..7bbaeb4be --- /dev/null +++ b/packages/builtinComponent/src/components/CanvasCol.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/packages/builtinComponent/src/components/CanvasRow.vue b/packages/builtinComponent/src/components/CanvasRow.vue new file mode 100644 index 000000000..5c7ba54d5 --- /dev/null +++ b/packages/builtinComponent/src/components/CanvasRow.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/packages/builtinComponent/src/components/CanvasRowColContainer.vue b/packages/builtinComponent/src/components/CanvasRowColContainer.vue new file mode 100644 index 000000000..ad46e409d --- /dev/null +++ b/packages/builtinComponent/src/components/CanvasRowColContainer.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/packages/builtinComponent/src/components/helper.js b/packages/builtinComponent/src/components/helper.js new file mode 100644 index 000000000..59200272e --- /dev/null +++ b/packages/builtinComponent/src/components/helper.js @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export const getStyleValue = (value) => { + if (typeof value === 'number' || /^\d+\.?\d*$/.test(value)) { + return `${value}px` + } + + if (/^\d+\.?\d*(px|%|pt|em|rem|vw|vh)$/.test(value)) { + return value + } + + return '' +} + +export const alignMap = { + 'flex-start': 'flex-start', + 'flex-end': 'flex-end', + center: 'center', + stretch: 'stretch', + start: 'start', + end: 'end' +} + +export const justAlignMap = { + 'space-between': 'space-between', + 'space-around': 'space-around', + 'space-evenly': 'space-evenly', + 'flex-start': 'flex-start', + 'flex-end': 'flex-end', + stretch: 'stretch', + center: 'center', + start: 'start', + end: 'end', + left: 'left', + right: 'right' +} diff --git a/packages/builtinComponent/src/meta/CanvasCol.json b/packages/builtinComponent/src/meta/CanvasCol.json new file mode 100644 index 000000000..33c68b5df --- /dev/null +++ b/packages/builtinComponent/src/meta/CanvasCol.json @@ -0,0 +1,196 @@ +{ + "components": { + "icon": "Box", + "name": { + "zh_CN": "CanvasCol" + }, + "component": "CanvasCol", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "widthType", + "type": "String", + "defaultValue": "auto", + "label": { + "text": { + "zh_CN": "宽度类型" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaRadioGroup", + "props": { + "options": [ + { "label": "auto", "text": "自适应" }, + { "label": "fixed", "text": "固定" } + ], + "type": "button" + } + } + }, + { + "property": "flexBasis", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "固定宽度" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "rowGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "行间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "colGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "align", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "副轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "stretch", "label": "拉伸对齐" } + ], + "type": "button" + } + } + }, + { + "property": "justAlign", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "主轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "space-between", "label": "两端对齐" }, + { "value": "space-evenly", "label": "均分对齐" } + ], + "type": "button" + } + } + }, + { + "property": "grow", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "增长" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "shrink", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "收缩" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSwitch", + "props": {} + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + } +} diff --git a/packages/builtinComponent/src/meta/CanvasRow.json b/packages/builtinComponent/src/meta/CanvasRow.json new file mode 100644 index 000000000..5033b30ba --- /dev/null +++ b/packages/builtinComponent/src/meta/CanvasRow.json @@ -0,0 +1,142 @@ +{ + "components": { + "icon": "Box", + "name": { + "zh_CN": "CanvasRow" + }, + "component": "CanvasRow", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "minHeight", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "最小高度" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "rowGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "行间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "colGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "align", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "副轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "stretch", "label": "拉伸对齐" } + ], + "type": "button" + } + } + }, + { + "property": "justAlign", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "主轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "space-between", "label": "两端对齐" }, + { "value": "space-evenly", "label": "均分对齐" } + ], + "type": "button" + } + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + } +} diff --git a/packages/builtinComponent/src/meta/CanvasRowColContainer.json b/packages/builtinComponent/src/meta/CanvasRowColContainer.json new file mode 100644 index 000000000..e363530f6 --- /dev/null +++ b/packages/builtinComponent/src/meta/CanvasRowColContainer.json @@ -0,0 +1,96 @@ +{ + "components": { + "icon": "Box", + "name": { + "zh_CN": "行列容器" + }, + "component": "CanvasRowColContainer", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "rowGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "行间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + }, + "snippets": { + "name": { + "zh_CN": "行列容器" + }, + "screenshot": "", + "snippetName": "CanvasRowColContainer", + "icon": "Box", + "schema": { + "componentName": "CanvasRowColContainer", + "props": { + "rowGap": "20px" + }, + "children": [ + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + } + } + ] + } + ] + } + } +} diff --git a/packages/builtinComponent/src/meta/index.js b/packages/builtinComponent/src/meta/index.js new file mode 100644 index 000000000..fa2fca60d --- /dev/null +++ b/packages/builtinComponent/src/meta/index.js @@ -0,0 +1,18 @@ +import CanvasCol from './CanvasCol.json' +import CanvasRow from './CanvasRow.json' +import CanvasRowColContainer from './CanvasRowColContainer.json' + +export default { + components: [ + { + group: '内置组件', + children: [{ ...CanvasCol.components }, { ...CanvasRow.components }, { ...CanvasRowColContainer.components }] + } + ], + snippets: [ + { + group: '内置组件', + children: [{ ...CanvasRowColContainer.snippets }] + } + ] +} diff --git a/packages/builtinComponent/vite.config.js b/packages/builtinComponent/vite.config.js new file mode 100644 index 000000000..d77e390b5 --- /dev/null +++ b/packages/builtinComponent/vite.config.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import vitePluginCssInjectedByJs from 'vite-plugin-css-injected-by-js' + +export default defineConfig({ + plugins: [vue(), vueJsx(), vitePluginCssInjectedByJs()], + publicDir: false, + build: { + cssCodeSplit: false, + lib: { + entry: path.resolve(__dirname, './index.js'), + name: 'builtinComponent', + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + external: ['vue'] + } + } +}) diff --git a/packages/canvas/.eslintrc.js b/packages/canvas/.eslintrc.js new file mode 100644 index 000000000..7e042cff2 --- /dev/null +++ b/packages/canvas/.eslintrc.js @@ -0,0 +1,42 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +module.exports = { + env: { + browser: true, + es2015: true, + node: true, + jest: true + }, + extends: ['eslint:recommended', 'plugin:vue/vue3-essential'], + parser: 'vue-eslint-parser', + parserOptions: { + parser: '@babel/eslint-parser', + ecmaVersion: 'latest', + sourceType: 'module', + requireConfigFile: false, + babelOptions: { + parserOpts: { + plugins: ['jsx'] + } + } + }, + plugins: ['vue'], + rules: { + 'no-console': 'error', + 'no-debugger': 'error', + 'space-before-function-paren': 'off', + 'vue/multi-word-component-names': 'off', + 'no-use-before-define': 'error', + 'no-unused-vars': ['error', { ignoreRestSiblings: true, varsIgnorePattern: '^_', argsIgnorePattern: '^_' }] + } +} diff --git a/packages/canvas/.gitignore b/packages/canvas/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/packages/canvas/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/canvas/README.md b/packages/canvas/README.md new file mode 100644 index 000000000..eea15cef4 --- /dev/null +++ b/packages/canvas/README.md @@ -0,0 +1,7 @@ +# Vue 3 + Vite + +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + diff --git a/packages/canvas/index.html b/packages/canvas/index.html new file mode 100644 index 000000000..030a6ff51 --- /dev/null +++ b/packages/canvas/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/packages/canvas/package.json b/packages/canvas/package.json new file mode 100644 index 000000000..a3e61b730 --- /dev/null +++ b/packages/canvas/package.json @@ -0,0 +1,53 @@ +{ + "name": "@opentiny/tiny-engine-canvas", + "version": "1.0.3", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/canvas" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@babel/core": "7.18.13", + "@opentiny/tiny-engine-builtin-component": "workspace:*", + "@opentiny/tiny-engine-controller": "workspace:*", + "@opentiny/tiny-engine-i18n-host": "workspace:*", + "@opentiny/tiny-engine-live-component": "workspace:*", + "@opentiny/tiny-engine-utils": "workspace:*", + "@opentiny/tiny-engine-webcomponent-core": "workspace:*", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", + "@vue/babel-plugin-jsx": "1.1.1", + "@vue/shared": "^3.3.4", + "@vueuse/core": "^9.6.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "rollup-plugin-terser": "^7.0.2", + "vite": "^4.3.7" + }, + "peerDependencies": { + "vue": "^3.4.15", + "vue-i18n": "^9.9.0" + } +} diff --git a/packages/canvas/public/favicon.ico b/packages/canvas/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/packages/canvas/src/Design.vue b/packages/canvas/src/Design.vue new file mode 100644 index 000000000..886bc7d33 --- /dev/null +++ b/packages/canvas/src/Design.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/packages/canvas/src/assets/logo.png b/packages/canvas/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 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 { + const { name } = component + if (name) { + window.TinyLowcodeComponent[name] = component + } +}) + +const i18nHost = createI18n({ + locale: 'zh_CN', + messages: {} +}) + +createApp(RenderMain).use(i18nHost).provide(I18nInjectionKey, i18nHost).mount('#app') diff --git a/packages/canvas/src/components/builtin/CanvasBox.vue b/packages/canvas/src/components/builtin/CanvasBox.vue new file mode 100644 index 000000000..96beea7c2 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasBox.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/canvas/src/components/builtin/CanvasCol.vue b/packages/canvas/src/components/builtin/CanvasCol.vue new file mode 100644 index 000000000..5c0a5cb61 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasCol.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/packages/canvas/src/components/builtin/CanvasCollection.js b/packages/canvas/src/components/builtin/CanvasCollection.js new file mode 100644 index 000000000..98def2473 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasCollection.js @@ -0,0 +1,278 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { getController } from '../render/render' +import { api } from '../render/RenderMain' +import { useModal } from '@opentiny/tiny-engine-controller' + +const NAME_PREFIX = { + loop: 'loop', + table: 'getTableData', + page: 'pageConfig', + grid: 'tinyGrid', + tree: 'tinyTree', + select: 'tinySelect' +} + +const genRemoteMethodToLifeSetup = (variableName, sourceRef, pageSchema) => { + if (sourceRef.value.data?.option) { + const setupFn = pageSchema.lifeCycles?.setup?.value + const fetchBody = ` + this.state.${variableName} = [] + this.dataSourceMap.${sourceRef.value.name}.load().then(data=>{ this.state.${variableName}=data })` + + if (!setupFn) { + pageSchema.lifeCycles = pageSchema.lifeCycles || {} + pageSchema.lifeCycles.setup = { + type: 'JSFunction', + value: `function setup({ props, state, watch, onMounted }) {${fetchBody}}` + } + } else { + pageSchema.lifeCycles.setup.value = setupFn.trim().replace(/\}$/, fetchBody + '}') + } + } +} + +const removeState = (pageSchema, variableName) => { + delete pageSchema.state[variableName] + + const { parse, traverse, generate } = getController().ast + const setupFn = pageSchema.lifeCycles?.setup?.value + + try { + const ast = parse(setupFn) + + traverse(ast, { + ExpressionStatement(path) { + path.toString().includes(variableName) && path.remove() + } + }) + + pageSchema.lifeCycles.setup.value = generate(ast).code + } catch (error) { + // do nothing + } +} + +const setStateWithSourceRef = (pageSchema, variableName, sourceRef, data) => { + api.setState({ [variableName]: data }) + pageSchema.state[variableName] = data + + if (sourceRef.value.data?.option?.isSync) { + genRemoteMethodToLifeSetup(variableName, sourceRef, pageSchema) + } +} + +const defaultHandlerTemplate = ({ node, sourceRef, schemaId, pageSchema }) => { + const genVarName = (schemaId) => `${NAME_PREFIX.loop}${schemaId}` + + const updateNode = () => { + const { configure } = getController().getMaterial(node?.componentName) + + if (!configure?.loop) { + return + } + + const variableName = genVarName(schemaId) + + setStateWithSourceRef(pageSchema, variableName, sourceRef, sourceRef.value.data?.data) + + node.loop = { + type: 'JSExpression', + value: `this.state.${variableName}` + } + } + + const clearBindVar = () => { + const variableName = genVarName(schemaId) + + removeState(pageSchema, variableName) + } + + return { + updateNode, + clearBindVar + } +} + +const generateAssginColumns = (newColumns, oldColumns) => { + newColumns.forEach((item) => { + const targetColumn = oldColumns.find((value) => value.field === item.field) + if (targetColumn) { + Object.assign(item, targetColumn) + } + }) + return newColumns +} + +const askShouldImportData = ({ node, sourceRef }) => { + useModal().confirm({ + message: '检测到表格存在配置的数据,是否需要引入?', + exec() { + const sourceColums = sourceRef.value?.data?.columns?.map(({ title, field }) => ({ title, field })) || [] + // 这里需要找到对应列,然后进行列合并 + node.props.columns = generateAssginColumns(sourceColums, node.props.columns) + }, + cancel() { + node.props.columns = [...sourceRef.value.data?.columns] + } + }) +} + +const updateNodeHandler = ({ node, sourceRef, pageSchema, sourceName, methodName }) => { + if (!node || !node.props) { + return + } + + // 如果使用了数据元则需要删除表格的data属性 + delete node?.props?.data + + if (node.props.columns.length) { + askShouldImportData({ node, sourceRef }) + } else { + node.props.columns = [...sourceRef.value.data?.columns] + } + + const pageConfig = { + attrs: { + currentPage: 1, + pageSize: 50, + pageSizes: [10, 20, 50], + total: 0, + layout: 'sizes,total, prev, pager, next, jumper' + } + } + + node.props.pager = pageConfig + + pageSchema.methods[methodName] = { + type: 'JSFunction', + value: `function ${methodName}({ page, sort, sortBy, filters}) { +/** +* @param {Object} sort 排序数据 +* @param {Array} sortBy 排序方式 +* @param {Object} page 分页数据 +* @param {Array} filters 筛选数据 +* @returns {Object} 返回一个promise对象,并且resolve格式为{ result: Array, page: { total: Number } } +*/ +return new Promise((resolve, reject) => { +this.dataSourceMap.${sourceName}.load().then((res) => { + // 如果按照数据源面板的建议格式编写dataHandler + // 那么dataSourceMap的res格式应该是:{ code: string, msg: string, data: {items: any[], total: number} } + resolve({ result: res.data.items, page: { total: res.data.total } }); +}); +}); +}` + } +} + +const extraHandlerMap = { + TinyGrid: ({ node, sourceRef, schemaId, pageSchema }) => { + const sourceName = sourceRef.value?.name + const methodName = `${NAME_PREFIX.table}${schemaId}` + + node.props.fetchData = { + type: 'JSExpression', + value: `{ api: this.${methodName} }` + } + + const updateNode = () => updateNodeHandler({ node, sourceRef, pageSchema, sourceName, methodName }) + + const clearBindVar = () => { + // 当数据源组件children字段为空时,及时清空创建的methods + delete pageSchema.methods[methodName] + } + + return { + updateNode, + clearBindVar + } + }, + TinyTree: ({ node, sourceRef, schemaId, pageSchema }) => { + const genVarName = (schemaId) => `${NAME_PREFIX.tree}${schemaId}` + + const updateNode = () => { + const variableName = genVarName(schemaId) + + const arrayToTree = (data) => { + const map = {} + const tree = [] + let node = null + let i = 0 + + for (i = 0; i < data.length; i++) { + map[data[i].id] = data[i] + data[i].children = [] + } + + for (i = 0; i < data.length; i++) { + node = data[i] + if (node.pid !== '') { + map[node.pid]?.children?.push(node) + } else { + tree.push(node) + } + } + + return tree + } + + setStateWithSourceRef(pageSchema, variableName, sourceRef, arrayToTree(sourceRef.value.data?.data)) + + node.props.data = { + type: 'JSExpression', + value: `this.state.${variableName}` + } + } + + const clearBindVar = () => { + const variableName = genVarName(schemaId) + + removeState(pageSchema, variableName) + } + + return { + updateNode, + clearBindVar + } + }, + TinySelect: ({ node, sourceRef, schemaId, pageSchema }) => { + const genVarName = (schemaId) => `${NAME_PREFIX.select}${schemaId}` + + const updateNode = () => { + const variableName = genVarName(schemaId) + + setStateWithSourceRef(pageSchema, variableName, sourceRef, sourceRef.value.data?.data) + + node.props.options = { + type: 'JSExpression', + value: `this.state.${variableName}` + } + } + + const clearBindVar = () => { + const variableName = genVarName(schemaId) + + removeState(pageSchema, variableName) + } + + return { + updateNode, + clearBindVar + } + } +} + +export const getHandler = ({ node, sourceRef, schemaId, pageSchema }) => + extraHandlerMap[node.componentName] + ? extraHandlerMap[node.componentName]({ node, sourceRef, schemaId, pageSchema }) + : defaultHandlerTemplate({ node, sourceRef, schemaId, pageSchema }) diff --git a/packages/canvas/src/components/builtin/CanvasCollection.vue b/packages/canvas/src/components/builtin/CanvasCollection.vue new file mode 100644 index 000000000..35173f1ea --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasCollection.vue @@ -0,0 +1,106 @@ + + + diff --git a/packages/canvas/src/components/builtin/CanvasIcon.vue b/packages/canvas/src/components/builtin/CanvasIcon.vue new file mode 100644 index 000000000..42567318b --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasIcon.vue @@ -0,0 +1,30 @@ + + + diff --git a/packages/canvas/src/components/builtin/CanvasImg.vue b/packages/canvas/src/components/builtin/CanvasImg.vue new file mode 100644 index 000000000..2581381c6 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasImg.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/canvas/src/components/builtin/CanvasPlaceholder.vue b/packages/canvas/src/components/builtin/CanvasPlaceholder.vue new file mode 100644 index 000000000..698df4d47 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasPlaceholder.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/packages/canvas/src/components/builtin/CanvasRow.vue b/packages/canvas/src/components/builtin/CanvasRow.vue new file mode 100644 index 000000000..03c86dbf3 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasRow.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/packages/canvas/src/components/builtin/CanvasRowColContainer.vue b/packages/canvas/src/components/builtin/CanvasRowColContainer.vue new file mode 100644 index 000000000..ccef5fb16 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasRowColContainer.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/packages/canvas/src/components/builtin/CanvasSlot.vue b/packages/canvas/src/components/builtin/CanvasSlot.vue new file mode 100644 index 000000000..2c5455976 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasSlot.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/canvas/src/components/builtin/CanvasText.vue b/packages/canvas/src/components/builtin/CanvasText.vue new file mode 100644 index 000000000..ec9de2992 --- /dev/null +++ b/packages/canvas/src/components/builtin/CanvasText.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/canvas/src/components/builtin/builtin.json b/packages/canvas/src/components/builtin/builtin.json new file mode 100644 index 000000000..b957eb495 --- /dev/null +++ b/packages/canvas/src/components/builtin/builtin.json @@ -0,0 +1,595 @@ +{ + "data": { + "materials": { + "components": [ + { + "group": "内置组件", + "children": [ + { + "icon": "Box", + "name": { + "zh_CN": "Box" + }, + "component": "div", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + }, + { + "icon": "slot", + "name": { + "zh_CN": "Slot" + }, + "component": "Slot", + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "type": "String", + "label": { + "text": { + "zh_CN": "插槽名称" + } + }, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "params", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "作用域参数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json", + "tips": { + "title": { "zh_CN": "提示:数据为数组类型" }, + "demo": { + "zh_CN": "示例:\n[\n {\n \"name\": \"text\",\n \"value\": {\n \"type\": \"JSExpression\",\n \"value\": \"this.state.greetingMessage\"\n }\n },\n {\n \"name\": \"count\",\n \"value\": 1\n }\n]" + } + } + } + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "isContainer": true + } + }, + { + "icon": "Collection", + "name": { + "zh_CN": "Collection" + }, + "component": "Collection", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "condition", + "type": "Boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否渲染" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "style", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "样式" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "dataSource", + "type": "String", + "defaultValue": "", + "bindState": false, + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaCollection", + "props": {} + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "isContainer": true + } + }, + { + "icon": "Text", + "name": { + "zh_CN": "Text" + }, + "component": "Text", + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "type": "String", + "defaultValue": "TinyEngine 前端可视化设计器,为设计器开发者提供定制服务,在线构建出自己专属的设计器。", + "label": { + "text": { + "zh_CN": "文本内容" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": { + "type": "textarea", + "autosize": true + } + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["text"] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true + } + }, + { + "icon": "icon", + "name": { + "zh_CN": "Icon" + }, + "component": "Icon", + "container": false, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "type": "String", + "defaultValue": "IconDel", + "bindState": true, + "label": { + "text": { + "zh_CN": "图标类型" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelectIcon", + "props": {} + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["name"] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true + } + }, + { + "icon": "Image", + "name": { + "zh_CN": "Img" + }, + "component": "Img", + "container": false, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "type": "String", + "defaultValue": "", + "bindState": true, + "label": { + "text": { + "zh_CN": "src路径" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["src"] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true + } + }, + { + "icon": "Image", + "name": { + "zh_CN": "Live" + }, + "component": "Live", + "container": false, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "code", + "type": "String", + "defaultValue": "", + "bindState": true, + "label": { + "text": { + "zh_CN": "代码逻辑" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "vue" + } + } + } + ] + } + ], + "events": {}, + "shortcuts": {}, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true + } + } + ] + } + ], + "snippets": [ + { + "group": "内置组件", + "children": [ + { + "name": { + "zh_CN": "Box" + }, + "screenshot": "", + "snippetName": "Box", + "icon": "Box", + "schema": { + "componentName": "div", + "props": {} + } + }, + { + "name": { + "zh_CN": "Slot" + }, + "screenshot": "", + "snippetName": "Slot", + "icon": "slot", + "schema": { + "componentName": "Slot", + "props": {} + } + }, + { + "name": { + "zh_CN": "Collection" + }, + "screenshot": "", + "snippetName": "Collection", + "icon": "Collection", + "schema": { + "componentName": "Collection", + "props": {} + } + }, + { + "name": { + "zh_CN": "Text" + }, + "screenshot": "", + "snippetName": "Text", + "icon": "Text", + "schema": { + "componentName": "Text", + "props": { + "text": "TinyEngine 前端可视化设计器,为设计器开发者提供定制服务,在线构建出自己专属的设计器。" + } + } + }, + { + "name": { + "zh_CN": "Icon" + }, + "screenshot": "", + "snippetName": "Icon", + "icon": "icon", + "schema": { + "componentName": "Icon", + "props": { + "name": "IconDel" + } + } + }, + { + "name": { + "zh_CN": "Img" + }, + "screenshot": "", + "snippetName": "Img", + "icon": "Image", + "schema": { + "componentName": "Img", + "props": { + "src": "https://tinyengine-assets.obs.cn-north-4.myhuaweicloud.com/files/designer-default-icon.jpg" + } + } + }, + { + "name": { + "zh_CN": "Live" + }, + "screenshot": "", + "snippetName": "Live", + "icon": "Image", + "schema": { + "componentName": "Live", + "props": { + "code": "" + } + } + } + ] + } + ] + } + } +} diff --git a/packages/canvas/src/components/builtin/helper.js b/packages/canvas/src/components/builtin/helper.js new file mode 100644 index 000000000..8f884f71b --- /dev/null +++ b/packages/canvas/src/components/builtin/helper.js @@ -0,0 +1,46 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export const getStyleValue = (value) => { + if (typeof value === 'number' || /^\d+\.?\d*$/.test(value)) { + return `${value}px` + } + + if (/^\d+\.?\d*(px|%|pt|em|rem|vw|vh)$/.test(value)) { + return value + } + + return '' +} + +export const alignMap = { + 'flex-start': 'flex-start', + 'flex-end': 'flex-end', + center: 'center', + stretch: 'stretch', + start: 'start', + end: 'end' +} + +export const justAlignMap = { + 'space-between': 'space-between', + 'space-around': 'space-around', + 'space-evenly': 'space-evenly', + 'flex-start': 'flex-start', + 'flex-end': 'flex-end', + stretch: 'stretch', + center: 'center', + start: 'start', + end: 'end', + left: 'left', + right: 'right' +} diff --git a/packages/canvas/src/components/builtin/index.js b/packages/canvas/src/components/builtin/index.js new file mode 100644 index 000000000..f857ff1a1 --- /dev/null +++ b/packages/canvas/src/components/builtin/index.js @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import CanvasText from './CanvasText.vue' +import CanvasBox from './CanvasBox.vue' +import CanvasCollection from './CanvasCollection.vue' +import CanvasIcon from './CanvasIcon.vue' +import CanvasSlot from './CanvasSlot.vue' +import CanvasImg from './CanvasImg.vue' +import CanvasPlaceholder from './CanvasPlaceholder.vue' + +export { CanvasText, CanvasBox, CanvasCollection, CanvasIcon, CanvasSlot, CanvasImg, CanvasPlaceholder } diff --git a/packages/canvas/src/components/common/index.js b/packages/canvas/src/components/common/index.js new file mode 100644 index 000000000..68a7097c1 --- /dev/null +++ b/packages/canvas/src/components/common/index.js @@ -0,0 +1,158 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export const NODE_UID = 'data-uid' +export const NODE_TAG = 'data-tag' +export const NODE_LOOP = 'loop-id' + +export const addScript = (src, doc = document) => { + return new Promise((resolve, reject) => { + const script = doc.createElement('script') + + script.setAttribute('type', 'text/javascript') + script.setAttribute('src', src) + + script.async = false + + script.onload = resolve + script.onerror = reject + + doc.querySelector('head').appendChild(script) + }) +} + +export const addStyle = (href, doc = document) => { + return new Promise((resolve, reject) => { + const link = doc.createElement('link') + + link.setAttribute('href', href) + link.setAttribute('rel', 'stylesheet') + + link.onload = resolve + link.onerror = reject + + doc.querySelector('head').appendChild(link) + }) +} + +export const copyObject = (node) => { + if (typeof node === 'object') { + if (!node) { + return node + } + + if (Array.isArray(node)) { + return node.map(copyObject) + } + + const res = {} + Object.keys(node).forEach((key) => { + res[key] = copyObject(node[key]) + }) + + const { componentName, id } = res + + if (componentName && id) { + delete res.id + } + + return res + } + + return node +} + +/** + * 复制节点的schema对象到剪切板,以String形式保存 + * @param {*} event ClipboardEvent + * @param {*} node 节点的schema对象 + * @return 复制的剪切板的String + */ +export const setClipboardSchema = (event, node) => { + let text + + if (typeof node === 'object') { + text = JSON.stringify(node) + } else { + text = String(node) + } + + event.clipboardData.setData('text/plain', text) + event.preventDefault() + + return text +} + +const translateStringToSchame = (clipText) => { + if (!clipText) { + return null + } + + let data + + try { + data = JSON.parse(clipText) + if (!data || !data.componentName) { + data = null + } + } catch (error) { + data = null + } + + return data +} + +/** + * 获得剪切板的内容,转换成schema + * @param {*} event ClipboardEvent + * @return 节点的schema对象 + */ +export const getClipboardSchema = (event) => translateStringToSchame(event.clipboardData.getData('text/plain')) + +/** + * 动态导入组件,缓存组件对象 + * @param {object} param0 组件的依赖: { package: 包名,script:js文件cdn, components:组件id和导出组件名的映射关系} + * @returns + */ +export const dynamicImportComponents = async ({ package: pkg, script, components }) => { + if (!script) return + + if (!window.TinyComponentLibs[pkg]) { + const modules = await import(/* @vite-ignore */ script) + + window.TinyComponentLibs[pkg] = modules + } + + Object.entries(components).forEach(([componentId, exportName]) => { + const modules = window.TinyComponentLibs[pkg] + + if (!window.TinyLowcodeComponent[componentId]) { + window.TinyLowcodeComponent[componentId] = modules[exportName] + } + }) +} + +/** + * 更新区块/组件依赖 + * @param {object} param0 依赖的CDN信息 + */ +export const updateDependencies = ({ detail }) => { + const { scripts = [], styles = [] } = detail || {} + const { styles: canvasStyles } = window.thirdPartyDeps + const newStyles = [...styles].filter((item) => !canvasStyles.has(item)) + + newStyles.forEach((item) => canvasStyles.add(item)) + + const promises = [...newStyles].map((src) => addStyle(src)).concat(scripts.map(dynamicImportComponents)) + + Promise.allSettled(promises) +} diff --git a/packages/canvas/src/components/container/CanvasAction.vue b/packages/canvas/src/components/container/CanvasAction.vue new file mode 100644 index 000000000..5008e1c46 --- /dev/null +++ b/packages/canvas/src/components/container/CanvasAction.vue @@ -0,0 +1,700 @@ + + + + diff --git a/packages/canvas/src/components/container/CanvasContainer.vue b/packages/canvas/src/components/container/CanvasContainer.vue new file mode 100644 index 000000000..21abc307f --- /dev/null +++ b/packages/canvas/src/components/container/CanvasContainer.vue @@ -0,0 +1,272 @@ + + + + diff --git a/packages/canvas/src/components/container/CanvasDivider.vue b/packages/canvas/src/components/container/CanvasDivider.vue new file mode 100644 index 000000000..84c1fcf11 --- /dev/null +++ b/packages/canvas/src/components/container/CanvasDivider.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/packages/canvas/src/components/container/CanvasDragItem.vue b/packages/canvas/src/components/container/CanvasDragItem.vue new file mode 100644 index 000000000..864670c95 --- /dev/null +++ b/packages/canvas/src/components/container/CanvasDragItem.vue @@ -0,0 +1,51 @@ + + + + diff --git a/packages/canvas/src/components/container/CanvasFooter.vue b/packages/canvas/src/components/container/CanvasFooter.vue new file mode 100644 index 000000000..84293a9b9 --- /dev/null +++ b/packages/canvas/src/components/container/CanvasFooter.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/packages/canvas/src/components/container/CanvasMenu.vue b/packages/canvas/src/components/container/CanvasMenu.vue new file mode 100644 index 000000000..d7392ec70 --- /dev/null +++ b/packages/canvas/src/components/container/CanvasMenu.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/packages/canvas/src/components/container/CanvasResize.vue b/packages/canvas/src/components/container/CanvasResize.vue new file mode 100644 index 000000000..bdf0e0112 --- /dev/null +++ b/packages/canvas/src/components/container/CanvasResize.vue @@ -0,0 +1,203 @@ + + + diff --git a/packages/canvas/src/components/container/CanvasResizeBorder.vue b/packages/canvas/src/components/container/CanvasResizeBorder.vue new file mode 100644 index 000000000..df91fe9ec --- /dev/null +++ b/packages/canvas/src/components/container/CanvasResizeBorder.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/packages/canvas/src/components/container/container.js b/packages/canvas/src/components/container/container.js new file mode 100644 index 000000000..581282576 --- /dev/null +++ b/packages/canvas/src/components/container/container.js @@ -0,0 +1,854 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive, toRaw, nextTick, shallowReactive } from 'vue' +import { + addScript as appendScript, + addStyle as appendStyle, + copyObject, + NODE_UID, + NODE_TAG, + NODE_LOOP +} from '../common' +import { useCanvas, useLayout, useResource, useTranslate } from '@opentiny/tiny-engine-controller' +export const POSITION = Object.freeze({ + TOP: 'top', + BOTTOM: 'bottom', + LEFT: 'left', + RIGHT: 'right', + IN: 'in', + FORBID: 'forbid' +}) +import { isVsCodeEnv } from '@opentiny/tiny-engine-controller/js/environments' + +const initialDragState = { + keydown: false, + draging: false, + data: null, + position: null, // ghost位置 + mouse: null, // iframe里鼠标位置 + element: null, + offset: {} +} + +export const canvasState = shallowReactive({ + type: 'normal', + schema: null, + renderer: null, // 存放画布内的api + iframe: null, + loading: true, + current: null, + parent: null, + loopId: null +}) + +export const getRenderer = () => canvasState.renderer + +export const getController = () => canvasState.controller + +export const getDocument = () => canvasState.iframe.contentDocument + +export const getWindow = () => canvasState.iframe.contentWindow + +export const getCurrent = () => { + return { + schema: canvasState.current, + parent: canvasState.parent, + loopId: canvasState.loopId + } +} + +export const getGlobalState = () => getRenderer().getGlobalState() + +export const getNode = (id, parent) => getRenderer()?.getNode(id, parent) + +export const getSchema = () => getRenderer()?.getSchema() + +export const getContext = () => { + return getRenderer().getContext() +} + +// 记录拖拽状态 +export const dragState = reactive({ + ...initialDragState +}) + +export const initialRectState = { + top: 0, + height: 0, + width: 0, + left: 0, + schema: null, + configure: null, + componentName: '' +} + +const initialLineState = { + top: 0, + height: 0, + width: 0, + left: 0, + position: '', + id: '', + config: null, + doc: null +} + +// 选中画布中元素时的状态 +export const selectState = reactive({ + ...initialRectState +}) + +// 鼠标移入画布中元素时的状态 +export const hoverState = reactive({ + ...initialRectState +}) + +// 拖拽时的位置状态 +export const lineState = reactive({ + ...initialLineState +}) + +export const clearHover = () => { + Object.assign(hoverState, initialRectState, { slot: null }) +} + +export const clearSelect = () => { + canvasState.current = null + canvasState.parent = null + Object.assign(selectState, initialRectState) + // 临时借用 remote 事件出发 currentSchema 更新 + canvasState?.emit?.('remove') +} + +const smoothScroll = { + timmer: null, + /** + * + * @param {*} up 方向 + * @param {*} step 每次滚动距离 + * @param {*} time 滚动延时(不得大于系统滚动时长,否则可能出现卡顿效果) + */ + start(up, step = 40, time = 100) { + const dom = getDocument().documentElement + const fn = () => { + const top = up ? dom.scrollTop + step : dom.scrollTop - step + + dom.scrollTo({ top, behavior: 'smooth' }) + this.timmer = setTimeout(fn, time) + } + + this.timmer || fn() + }, + stop() { + clearTimeout(this.timmer) + this.timmer = null + } +} + +export const dragStart = ( + data, + element, + { offsetX = 0, offsetY = 0, horizontal, vertical, width, height, x, y } = {} +) => { + // 表示鼠标按下开始拖拽 + dragState.keydown = true + dragState.data = data || {} + + // 记录上次一开始拖拽的时间 + dragState.timer = Date.now() + + // 如果element存在表示在iframe内部拖拽 + dragState.element = element + dragState.offset = { offsetX, offsetY, horizontal, vertical, width, height, x, y } + clearHover() +} + +export const clearLineState = () => { + Object.assign(lineState, initialLineState) +} + +export const dragEnd = () => { + const { element, data } = dragState + + if (element && canvasState.type === 'absolute') { + data.props = data.props || {} + data.props.style = element.style.cssText + } + + // 重置拖拽状态 + Object.assign(dragState, initialDragState) + + // 重置拖拽插入位置状态 + clearLineState() + smoothScroll.stop() +} + +export const getOffset = (element) => { + if (element.ownerDocument === document) { + return { x: 0, y: 0 } + } + const { x, y, bottom, top } = canvasState.iframe.getBoundingClientRect() + return { x, y, bottom, top } +} + +export const getElement = (element) => { + // 如果当前元素是body + if (element === element.ownerDocument.body) { + return element + } + + // 如果当前元素是画布的html,返回画布的body + if (element === element.ownerDocument.documentElement) { + return element.ownerDocument.body + } + + if (!element || element.nodeType !== 1) { + return undefined + } + + if (element.getAttribute(NODE_UID)) { + return element + } else if (element.parentElement) { + return getElement(element.parentElement) + } + + return undefined +} + +const getRect = (element) => { + if (element === getDocument().body) { + const { innerWidth: width, innerHeight: height } = getWindow() + return { + left: 0, + top: 0, + right: width, + bottom: height, + width, + height, + x: 0, + y: 0 + } + } + return element.getBoundingClientRect() +} + +const inserAfter = ({ parent, node, data }) => { + const parentChildren = parent.children + const index = parentChildren.indexOf(node) + parent.children.splice(index + 1, 0, data) +} + +const insertBefore = ({ parent, node, data }) => { + const parentChildren = parent.children + const index = parentChildren.indexOf(node) + parent.children.splice(index, 0, data) +} + +const insertInner = ({ node, data }, position) => { + node.children = node.children || [] + + if (position === POSITION.TOP || position === POSITION.LEFT) { + node.children.unshift(data) + } else { + node.children.push(data) + } +} + +export const removeNode = ({ parent, node }) => { + const parentChildren = parent.children || parent.value + const index = parentChildren.indexOf(node) + + if (index > -1) { + parentChildren.splice(index, 1) + } else { + const templates = parentChildren.filter(({ componentName }) => componentName === 'Template') + + templates.forEach((template) => { + const { children } = template + + if (children.length) { + children.splice(children.indexOf(node), 1) + } + + if (!children.length) { + parentChildren.splice(parentChildren.indexOf(template), 1) + } + }) + } +} + +export const removeNodeById = (id) => { + if (!id) { + return + } + + removeNode(getNode(id, true)) + clearSelect() + getController().addHistory() + canvasState.emit('remove') +} + +export const querySelectById = (id) => { + let selector = `[${NODE_UID}="${id}"]` + const doc = canvasState.iframe.contentDocument + let element = doc.querySelector(selector) + const loopId = element?.getAttribute('loop-id') + if (element && loopId) { + const currentLoopId = getCurrent().loopId + selector = `[${NODE_UID}="${id}"][${NODE_LOOP}="${currentLoopId}"]` + element = doc.querySelector(selector) + } + return element +} + +export const getCurrentElement = () => querySelectById(getCurrent().schema?.id) + +// 滚动页面后,目标元素与页面边界至少保留的边距 +const SCROLL_MARGIN = 15 + +export const scrollToNode = (element) => { + if (element) { + const container = getDocument().documentElement + const { clientWidth, clientHeight } = container + const { x, y, width, height } = element.getBoundingClientRect() + const option = {} + + if (x < 0) { + option.left = container.scrollLeft + x - SCROLL_MARGIN + } else if (x > clientWidth) { + option.left = x + width - clientWidth + SCROLL_MARGIN + } + + if (y < 0) { + option.top = container.scrollTop + y - SCROLL_MARGIN + } else if (y > clientHeight) { + option.top = y + height - clientHeight + SCROLL_MARGIN + } + + if (typeof option.left === 'number' || typeof option.top === 'number') { + container.scrollTo(option) + } + } + + return nextTick() +} +const setSelectRect = (element) => { + element = element || getDocument().body + + const { left, height, top, width } = getRect(element) + const { x, y } = getOffset(element) + const siteCanvasRect = document.querySelector('.site-canvas').getBoundingClientRect() + const componentName = getCurrent().schema?.componentName || '' + const scale = useLayout().getScale() + clearHover() + Object.assign(selectState, { + width: width * scale, + height: height * scale, + top: top * scale + y - siteCanvasRect.y, + left: left * scale + x - siteCanvasRect.x, + componentName, + doc: getDocument() + }) +} + +export const updateRect = (id) => { + id = (typeof id === 'string' && id) || getCurrent().schema?.id + clearHover() + + if (id) { + setTimeout(() => setSelectRect(querySelectById(id))) + } else { + // 如果选中的是body,不清除选中框 + if (!selectState.componentName && selectState.width > 0) { + return + } + clearSelect() + } +} + +export const getConfigure = (targetName) => { + const material = getController().getMaterial(targetName) + + // 这里如果是区块插槽,则返回标识为容器的对象 + if (targetName === 'Template') { + return { + isContainer: true + } + } + + return material?.content?.configure || material.configure || {} +} + +/** + * 是否允许插入 + * @param {*} configure 当前放置目标的 configure,比如getConfigure(componentName) + * @param {*} data 当前插入目标的schame数据 + * @returns + */ +export const allowInsert = (configure = hoverState.configure || {}, data = dragState.data || {}) => { + const { nestingRule = {} } = configure + const { childWhitelist = [], descendantBlacklist = [] } = nestingRule + + // 要插入的父节点必须是容器 + if (!configure.isContainer) { + return false + } + + let flag = true + // 白名单 + flag = childWhitelist.length ? childWhitelist.includes(data?.componentName) : true + + // 黑名单 + if (descendantBlacklist.length) { + flag = !descendantBlacklist.includes(data?.componentName) + } + + return flag +} + +// 获取位置信息,返回状态 +const lineAbs = 20 +const getPosLine = (rect, configure) => { + const mousePos = dragState.mouse + const yAbs = Math.min(lineAbs, rect.height / 3) + const xAbs = Math.min(lineAbs, rect.width / 3) + let type + + if (mousePos.y < rect.top + yAbs) { + type = POSITION.TOP + } else if (mousePos.y > rect.bottom - yAbs) { + type = POSITION.BOTTOM + } else if (mousePos.x < rect.left + xAbs) { + type = POSITION.LEFT + } else if (mousePos.x > rect.right - xAbs) { + type = POSITION.RIGHT + } else if (configure.isContainer) { + type = allowInsert() ? POSITION.IN : POSITION.FORBID + } else { + type = POSITION.BOTTOM + } + + return { type } +} + +const isBodyEl = (element) => element.nodeName === 'BODY' + +const setHoverRect = (element, data) => { + if (!element) { + return clearHover() + } + const componentName = element.getAttribute(NODE_TAG) + const id = element.getAttribute(NODE_UID) + const configure = getConfigure(componentName) + const rect = getRect(element) + const { left, height, top, width } = rect + const { x, y } = getOffset(element) + const siteCanvasRect = document.querySelector('.site-canvas').getBoundingClientRect() + const scale = useLayout().getScale() + + hoverState.configure = configure + + if (data) { + let childEle = null + lineState.id = id + lineState.configure = configure + const rectType = isBodyEl(element) ? POSITION.IN : getPosLine(rect, configure).type + + // 如果拖拽经过的元素是body或者是带有容器属性的盒子,并且在元素内部插入,则需要特殊处理 + if ((isBodyEl(element) || configure?.isContainer) && rectType === POSITION.IN) { + const { node } = isBodyEl(element) ? { node: getSchema() } : getNode(id, true) || {} + const children = node?.children || [] + if (children.length > 0) { + // 如果容器盒子有子节点,则以最后一个子节点为拖拽参照物 + const lastNode = children[children.length - 1] + childEle = querySelectById(lastNode.id) + const childComponentName = element.getAttribute(childEle) + const Childconfigure = getConfigure(childComponentName) + lineState.id = lastNode.id + lineState.configure = Childconfigure + } + } + + // 如果容器盒子有子元素 + if (childEle) { + const childRect = getRect(childEle) + const { left, height, top, width } = childRect + const { x, y } = getOffset(childEle) + Object.assign(lineState, { + width: width * scale, + height: height * scale, + top: top * scale + y - siteCanvasRect.y, + left: left * scale + x - siteCanvasRect.x, + position: canvasState.type === 'absolute' || getPosLine(childRect, lineState.configure).type + }) + } else { + Object.assign(lineState, { + width: width * scale, + height: height * scale, + top: top * scale + y - siteCanvasRect.y, + left: left * scale + x - siteCanvasRect.x, + position: canvasState.type === 'absolute' || getPosLine(rect, configure).type + }) + } + + useLayout().closePlugin() + } + + // 设置元素hover状态 + Object.assign(hoverState, { + width: width * scale, + height: height * scale, + top: top * scale + y - siteCanvasRect.y, + left: left * scale + x - siteCanvasRect.x, + componentName + }) + return undefined +} + +// 绝对布局 +const absoluteMove = (event, element) => { + const { clientX, clientY } = event + const { offsetX, offsetY, horizontal, vertical, height, width, x, y } = dragState.offset + + element.style.position = 'absolute' + + if (!horizontal) { + // 未传方向信息时判断为移动元素位置 + element.style.top = `${clientY - offsetY}px` + element.style.left = `${clientX - offsetX}px` + } else { + // 调整元素大小 + if (horizontal === 'start') { + element.style.left = `${clientX}px` + element.style.width = `${width + (x - clientX)}px` + } + + if (horizontal === 'end') { + element.style.width = `${clientX - x}px` + } + + if (vertical === 'start') { + element.style.top = `${clientY}px` + element.style.height = `${height + (y - clientY)}px` + } + + if (vertical === 'end') { + element.style.height = `${clientY - y}px` + } + } + updateRect() +} + +const setDragPosition = ({ clientX, x, clientY, y, offsetBottom, offsetTop }) => { + const left = clientX + x + const top = clientY + y + if (clientY < 20) { + smoothScroll.start(false) + } else if (offsetBottom - clientY - offsetTop < 20) { + smoothScroll.start(true) + } else { + smoothScroll.stop() + } + + dragState.position = { left, top } +} + +export const dragMove = (event, isHover) => { + if (!dragState.draging && dragState.keydown && new Date().getTime() - dragState.timer < 200) { + return + } + + const { x, y, bottom: offsetBottom, top: offsetTop } = getOffset(event.target) + const { clientX, clientY } = event + const { element } = dragState + const absolute = canvasState.type === 'absolute' + + dragState.draging = dragState.keydown + + dragState.mouse = { x: clientX, y: clientY } + + // 如果仅仅是mouseover事件直接return,并重置拖拽位置状态,优化性能 + if (isHover) { + lineState.position = '' + setHoverRect(getElement(event.target), null) + + return + } + + setHoverRect(getElement(event.target), dragState.data) + + if (dragState.draging) { + // 绝对布局时走的逻辑 + if (element && absolute) { + absoluteMove(event, element) + } + setDragPosition({ clientX, x, clientY, y, offsetBottom, offsetTop }) + } +} + +// type == clickTree, 为点击大纲; type == loop-id=xxx ,为点击循环数据 +export const selectNode = async (id, type) => { + if (type && type.indexOf('loop-id') > -1) { + const loopId = type.split('=')[1] + canvasState.loopId = loopId + } + const { node, parent } = getNode(id, true) || {} + let element = querySelectById(id, type) + + if (element) { + const { rootSelector } = getConfigure(node.componentName) + element = rootSelector ? element.querySelector(rootSelector) : element + } + + canvasState.current = node + canvasState.parent = parent + + await scrollToNode(element) + setSelectRect(element) + canvasState.emit('selected', node, parent, type) + + return node +} + +export const hoverNode = (id, data) => { + const element = querySelectById(id) + element && setHoverRect(element, data) +} + +export const insertNode = (node, position = POSITION.IN, select = true) => { + if (!node.parent) { + insertInner({ node: canvasState.schema, data: node.data }, position) + } else { + switch (position) { + case POSITION.TOP: + case POSITION.LEFT: + insertBefore(node) + break + case POSITION.BOTTOM: + case POSITION.RIGHT: + inserAfter(node) + break + case POSITION.IN: + insertInner(node) + break + default: + insertInner(node) + break + } + } + + select && setTimeout(() => selectNode(node.data.id)) + + getController().addHistory() +} + +export const addComponent = (data, position) => { + const { schema, parent } = getCurrent() + + insertNode({ node: schema, parent, data }, position) +} + +export const copyNode = (id) => { + if (!id) { + return + } + const { node, parent } = getNode(id, true) + + inserAfter({ parent, node, data: copyObject(node) }) + getController().addHistory() +} + +export const onMouseUp = () => { + const { draging, data } = dragState + const { position } = lineState + const absolute = canvasState.type === 'absolute' + const sourceId = data?.id + const lineId = lineState.id + const allowInsert = position !== POSITION.FORBID + + if (draging && allowInsert) { + const { parent, node } = getNode(lineId, true) || {} // target + const targetNode = { parent, node, data: toRaw(data) } + + if (sourceId) { + // 内部拖拽 + if (sourceId !== lineId && !absolute) { + removeNode(getNode(sourceId, true)) + insertNode(targetNode, position) + } + } else { + // 从外部拖拽进来的无ID,insert + if (absolute) { + targetNode.node = getSchema() + data.props = data.props || {} + data.props.style = { + position: 'absolute', + top: dragState.mouse.y + 'px', + left: dragState.mouse.x + 'px' + } + } + + insertNode(targetNode, position) + } + } + + // 重置拖拽状态 + dragEnd() +} + +export const setPageCss = (css = '') => { + const id = 'page-css' + const document = getDocument() + let element = document.getElementById(id) + const head = document.querySelector('head') + + document.body.setAttribute('style', '') + + if (!element) { + element = document.createElement('style') + element.setAttribute('type', 'text/css') + element.setAttribute('id', id) + + element.innerHTML = css + head.appendChild(element) + } else { + element.innerHTML = css + } +} + +export const addStyle = (href) => appendStyle(href, getDocument()) + +export const addScript = (src) => appendScript(src, getDocument()) + +/** + * + * @param {*} messages + * @param {*} merge 是否合并,默认是重置所有数据 + */ +export const setLocales = (messages, merge) => { + const i18n = getRenderer().getI18n() + + Object.keys(messages).forEach((lang) => { + const fn = merge ? 'mergeLocaleMessage' : 'setLocaleMessage' + i18n.global[fn](lang, messages[lang]) + }) +} + +export const setState = (state) => { + getRenderer().setState(state) +} + +export const setUtils = (utils, clear, isForceRefresh) => { + getRenderer().setUtils(utils, clear, isForceRefresh) +} + +export const updateUtils = (utils) => { + getRenderer().updateUtils(utils) +} + +export const deleteUtils = (utils) => { + getRenderer().deleteUtils(utils) +} + +export const deleteState = (variable) => { + getRenderer().deleteState(variable) +} + +export const setGlobalState = (state) => { + useResource().resState.globalState = state + getRenderer().setGlobalState(state) +} + +export const getNodePath = (id, nodes = []) => { + const { parent, node } = getNode(id, true) || {} + + node && nodes.unshift({ name: node.componentName, node: id }) + + if (parent) { + parent && getNodePath(parent.id, nodes) + } else { + nodes.unshift({ name: 'BODY', node: id }) + } + + return nodes +} + +export const setSchema = async (schema) => { + clearHover() + clearSelect() + canvasState.schema = await getRenderer()?.setSchema(schema) + + return canvasState.schema +} + +export const setConfigure = (configure) => { + getRenderer().setConfigure(configure) +} + +export const setProps = (data) => getRenderer()?.setProps(data) + +export const setI18n = (data) => { + const messages = data || useTranslate().getData() + const i18n = getRenderer().getI18n() + Object.keys(messages).forEach((lang) => { + i18n.global.mergeLocaleMessage(lang, messages[lang]) + }) +} + +export const setCanvasType = (type) => { + canvasState.type = type || 'normal' + getDocument().body.className = type === 'absolute' ? 'canvas-grid-bg' : '' +} + +export const getCanvasType = () => canvasState.type + +/** + * 画布派发事件 + * @param {string} name 事件名称 + * @param {any} data 派发的数据 + */ +export const canvasDispatch = (name, data, doc = getDocument()) => { + if (!doc) return + + doc.dispatchEvent(new CustomEvent(name, data)) +} + +export const initCanvas = ({ renderer, iframe, emit, controller }) => { + const currentSchema = getSchema() + + // 在点击刷新按钮的情况下继续保留最新的schema.json + const schema = currentSchema ? currentSchema : useCanvas().getPageSchema() + + canvasState.iframe = iframe + canvasState.emit = emit + // 存放画布外层传进来的插件api + canvasState.controller = controller + canvasState.renderer = renderer + renderer.setController(controller) + setLocales(useTranslate().getData(), true) + if (isVsCodeEnv) { + const parent = window.parent + const senterMessage = parent.postMessage + // 发消息给webview + senterMessage({ type: 'i18nReady', value: true }, '*') + } + + setGlobalState(useResource().resState.globalState) + renderer.setDataSourceMap(useResource().resState.dataSource) + // 设置画布全局的utils工具类上下文环境 + setUtils(useResource().resState.utils) + setSchema(schema) + setConfigure(useResource().getConfigureMap()) + canvasDispatch('updateDependencies', { detail: useResource().resState.thirdPartyDeps }) + canvasState.loading = false +} diff --git a/packages/canvas/src/components/container/keyboard.js b/packages/canvas/src/components/container/keyboard.js new file mode 100644 index 000000000..3ac52427e --- /dev/null +++ b/packages/canvas/src/components/container/keyboard.js @@ -0,0 +1,147 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { + getCurrent, + insertNode, + selectNode, + getSchema, + POSITION, + removeNodeById, + allowInsert, + getConfigure, + clearHover, + hoverState +} from './container' +import { useHistory } from '@opentiny/tiny-engine-controller' +import { copyObject, getClipboardSchema, setClipboardSchema } from '../common' + +const KEY_Y = 89 +const KEY_Z = 90 +const KEY_RIGHT = 39 +const KEY_LEFT = 37 +const KEY_UP = 38 +const KEY_DOWN = 40 +const KEY_DEL = 46 + +function handlerLeft({ parent }) { + selectNode(parent?.id) +} +function handlerRight({ schema }) { + const id = schema.children?.[0]?.id + id && selectNode(id) +} +function handlerUp({ index, parent }) { + const id = (parent.children[index - 1] || parent)?.id + id && selectNode(id) +} +function handlerDown({ index, parent }) { + const id = parent.children[index + 1]?.id + id && selectNode(id) +} +function handlerDelete({ schema }) { + if (hoverState.id === schema.id) { + clearHover() + } + removeNodeById(schema.id) +} + +const handlerArrow = (keyCode) => { + let { schema, parent } = getCurrent() + let index = null + + if (schema) { + index = parent.children.indexOf(schema) + } else { + schema = getSchema() + } + + let obj = { + [KEY_LEFT]: handlerLeft, + [KEY_RIGHT]: handlerRight, + [KEY_UP]: handlerUp, + [KEY_DOWN]: handlerDown, + [KEY_DEL]: handlerDelete + } + if (obj[keyCode]) { + obj[keyCode]({ index, schema, parent }) + } +} + +const handlerCtrl = (keyCode) => { + switch (keyCode) { + case KEY_Y: + useHistory().forward() + break + case KEY_Z: + useHistory().back() + break + default: + break + } +} + +const handleClipboardCut = (event, schema) => { + if (setClipboardSchema(event, copyObject(schema))) { + removeNodeById(schema?.id) + } +} + +const handleClipboardPaste = (node, schema, parent) => { + if (node?.componentName && schema?.componentName && allowInsert(getConfigure(schema.componentName), node)) { + insertNode({ parent, node: schema, data: { ...node } }, POSITION.IN) + } +} + +const handlerClipboardEvent = (event) => { + const { schema, parent } = getCurrent() + const node = getClipboardSchema(event) + switch (event.type) { + case 'copy': + setClipboardSchema(event, copyObject(schema)) + break + case 'paste': + handleClipboardPaste(node, schema, parent) + break + case 'cut': + handleClipboardCut(event, schema) + break + default: + break + } +} + +const keyboardHandler = (event) => { + if (event.ctrlKey) { + getCurrent()?.schema && handlerCtrl(event.keyCode) + } + + handlerArrow(event.keyCode) +} + +const removeHostkeyEvent = (dom) => { + dom.removeEventListener('keydown', keyboardHandler) + dom.removeEventListener('copy', handlerClipboardEvent) + dom.removeEventListener('cut', handlerClipboardEvent) + dom.removeEventListener('paste', handlerClipboardEvent) +} + +const registerHostkeyEvent = (dom) => { + removeHostkeyEvent(dom) + + dom.addEventListener('keydown', keyboardHandler) + dom.addEventListener('copy', handlerClipboardEvent) + dom.addEventListener('cut', handlerClipboardEvent) + dom.addEventListener('paste', handlerClipboardEvent) +} + +export { registerHostkeyEvent, removeHostkeyEvent } diff --git a/packages/canvas/src/components/container/shortCutPopover.vue b/packages/canvas/src/components/container/shortCutPopover.vue new file mode 100644 index 000000000..592f13b14 --- /dev/null +++ b/packages/canvas/src/components/container/shortCutPopover.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/packages/canvas/src/components/render/CanvasEmpty.vue b/packages/canvas/src/components/render/CanvasEmpty.vue new file mode 100644 index 000000000..c6dc2c454 --- /dev/null +++ b/packages/canvas/src/components/render/CanvasEmpty.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/canvas/src/components/render/RenderMain.js b/packages/canvas/src/components/render/RenderMain.js new file mode 100644 index 000000000..97040fc15 --- /dev/null +++ b/packages/canvas/src/components/render/RenderMain.js @@ -0,0 +1,442 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { h, provide, inject, nextTick, shallowReactive, reactive, ref, watch, watchEffect } from 'vue' +import { I18nInjectionKey } from 'vue-i18n' +import { useBroadcastChannel } from '@vueuse/core' +import { constants } from '@opentiny/tiny-engine-utils' +import { generateFunction } from '@opentiny/tiny-engine-controller/utils' +import renderer, { parseData, setConfigure, setController, globalNotify, isStateAccessor } from './render' +import { getNode as getNodeById, clearNodes, getRoot, setContext, getContext, setCondition, context } from './context' +import CanvasEmpty from './CanvasEmpty.vue' +import { getCurrent, setLocales, updateRect, addStyle, addScript, canvasDispatch } from '../container/container' +import Builtin from '../builtin/builtin.json' + +const { BROADCAST_CHANNEL } = constants + +const reset = (obj) => { + Object.keys(obj).forEach((key) => delete obj[key]) +} + +const refreshKey = ref(0) +const methods = {} +const schema = reactive({}) +const state = shallowReactive({}) +const bridge = {} +const utils = {} +const props = {} + +const globalState = ref([]) +const stores = shallowReactive({}) +const dataSourceMap = shallowReactive({}) + +const Func = Function + +watchEffect(() => { + reset(stores) + globalState.value.forEach(({ id, state = {}, getters = {} }) => { + const computedGetters = Object.keys(getters).reduce( + (acc, key) => ({ + ...acc, + [key]: new Func('return ' + getters[key].value)().call(acc, state) + }), + {} + ) + + stores[id] = { ...state, ...computedGetters } + }) +}) + +const getUtils = () => utils + +const setUtils = (data, clear, isForceRefresh) => { + if (clear) { + reset(utils) + } + const utilsCollection = {} + // 目前画布还不具备远程加载utils工具类的功能,目前只能加载TinyVue组件库中的组件工具 + data?.forEach((item) => { + const util = window.TinyVue[item.content.exportName] + if (util) { + utilsCollection[item.name] = util + } + + // 此处需要把工具类中的icon图标也加入utils上下文环境 + const utilIcon = window.TinyVueIcon[item.content.exportName] + if (utilIcon) { + utilsCollection[item.name] = utilIcon + } + + // 解析函数式的工具类 + if (item.type === 'function') { + const defaultFn = () => {} + utilsCollection[item.name] = generateFunction(item.content.value, context) || defaultFn + } + }) + Object.assign(utils, utilsCollection) + + // 因为工具类并不具有响应式行为,所以需要通过修改key来强制刷新画布 + if (isForceRefresh) { + refreshKey.value++ + } +} + +const updateUtils = (data) => { + setUtils(data, false, true) +} + +const deleteUtils = (data) => { + data?.forEach((item) => { + if (utils[item.name]) { + delete utils[item.name] + } + }) + setUtils([], false, true) +} + +const setBridge = (data, clear) => { + clear && reset(bridge) + Object.assign(bridge, data) +} + +const getBridge = () => bridge + +const getMethods = () => methods + +const setMethods = (data = {}, clear) => { + clear && reset(methods) + // 这里有些方法在画布还是有执行的必要的,比如说表格的renderer和formatText方法,包括一些自定义渲染函数 + Object.assign( + methods, + Object.fromEntries( + Object.keys(data).map((key) => { + return [key, parseData(data[key], {}, getContext())] + }) + ) + ) + setContext(methods) +} + +const getState = () => state + +const deleteState = (variable) => { + delete state[variable] +} + +const generateAccessor = (type, accessor, property) => { + const accessorFn = generateFunction(accessor[type].value, context) + + return { property, accessorFn, type } +} + +// 这里缓存状态变量对应的访问器,用于watchEffect更新和取消监听 +const stateAccessorMap = new Map() + +// 缓存区块属性的访问器 +const propsAccessorMap = new Map() + +const generateStateAccessors = (type, accessor, key) => { + const stateWatchEffectKey = `${key}${type}` + const { property, accessorFn } = generateAccessor(type, accessor, key) + + // 将之前已有的watchEffect取消监听,这里操作很有必要,不然会造成数据混乱 + stateAccessorMap.get(stateWatchEffectKey)?.() + + // 更新watchEffect监听 + stateAccessorMap.set( + stateWatchEffectKey, + watchEffect(() => { + try { + accessorFn() + } catch (error) { + globalNotify({ + type: 'warning', + title: `状态变量${property}的访问器函数:${accessorFn.name}执行报错`, + message: error?.message || `状态变量${property}的访问器函数:${accessorFn.name}执行报错,请检查语法` + }) + } + }) + ) +} + +const setState = (data, clear) => { + clear && reset(state) + if (!schema.state) { + schema.state = data + } + + Object.assign(state, parseData(data, {}, getContext()) || {}) + + // 在状态变量合并之后,执行访问器中watchEffect,为了可以在访问器函数中可以访问其他state变量 + Object.entries(data || {})?.forEach(([key, stateData]) => { + if (isStateAccessor(stateData)) { + const accessor = stateData.accessor + if (accessor?.getter?.value) { + generateStateAccessors('getter', accessor, key) + } + + if (accessor?.setter?.value) { + generateStateAccessors('setter', accessor, key) + } + } + }) +} + +const getDataSourceMap = () => { + return dataSourceMap.value +} + +const setDataSourceMap = (list) => { + dataSourceMap.value = list.reduce((dMap, config) => { + const dataSource = { config: config.data } + + const result = { + code: '', + msg: 'success', + data: {} + } + result.data = + dataSource.config.type === 'array' + ? { items: dataSource?.config?.data, total: dataSource?.config?.data?.length } + : dataSource?.config?.data + + dataSource.load = () => Promise.resolve(result) + dMap[config.name] = dataSource + + return dMap + }, {}) +} + +const getGlobalState = () => { + return globalState.value +} + +const setGlobalState = (data = []) => { + globalState.value = data +} + +const setProps = (data, clear) => { + clear && reset(props) + Object.assign(props, data) +} + +const getProps = () => props + +const initProps = (properties = []) => { + const props = {} + const accessorFunctions = [] + + properties.forEach(({ content = [] }) => { + content.forEach(({ defaultValue, property, accessor }) => { + // 如果没有设置defaultValue就是undefined这和vue处理方式一样 + props[property] = defaultValue + + // 如果区块属性有访问器accessor,则先解析getter和setter函数 + if (accessor?.getter?.value) { + // 此处不能直接执行watchEffect,需要在上下文环境设置好之后去执行,此处只是收集函数 + accessorFunctions.push(generateAccessor('getter', accessor, property)) + } + + if (accessor?.setter?.value) { + accessorFunctions.push(generateAccessor('setter', accessor, property)) + } + }) + }) + + setProps(props, true) + + return accessorFunctions +} + +const getSchema = () => schema + +const setPagecss = (css = '') => { + const id = 'page-css' + let element = document.getElementById(id) + const head = document.querySelector('head') + + document.body.setAttribute('style', '') + + if (!element) { + element = document.createElement('style') + element.setAttribute('type', 'text/css') + element.setAttribute('id', id) + + element.innerHTML = css + head.appendChild(element) + } else { + element.innerHTML = css + } +} + +const setSchema = async (data) => { + const newSchema = JSON.parse(JSON.stringify(data || schema)) + reset(schema) + // 页面初始化的时候取消所有状态变量的watchEffect监听 + stateAccessorMap.forEach((stateAccessorFn) => { + stateAccessorFn() + }) + + // 区块初始化的时候取消所有的区块属性watchEffect监听 + propsAccessorMap.forEach((propsAccessorFn) => { + propsAccessorFn() + }) + + // 清空存状态变量和区块props访问器的缓存 + stateAccessorMap.clear() + propsAccessorMap.clear() + + const context = { + utils, + bridge, + stores, + state, + props, + dataSourceMap: {}, + emit: () => {} // 兼容访问器中getter和setter中this.emit写法 + } + Object.defineProperty(context, 'dataSourceMap', { + get: getDataSourceMap + }) + // 此处提升很重要,因为setState、initProps也会触发画布重新渲染,所以需要提升上下文环境的设置时间 + setContext(context, true) + + // 设置方法调用上下文 + setMethods(newSchema.methods, true) + + // 如果是区块则需要设置对外暴露的props + const accessorFunctions = initProps(newSchema.schema?.properties) + + // 这里setState(会触发画布渲染),是因为状态管理里面的变量会用到props、utils、bridge、stores、methods + setState(newSchema.state, true) + clearNodes() + await nextTick() + setPagecss(data.css) + Object.assign(schema, newSchema) + + // 当上下文环境设置完成之后再去处理区块属性访问器的watchEffect + accessorFunctions.forEach(({ property, accessorFn, type }) => { + const propsWatchEffectKey = `${property}${type}` + propsAccessorMap.set( + propsWatchEffectKey, + watchEffect(() => { + try { + accessorFn() + } catch (error) { + globalNotify({ + type: 'warning', + title: `区块属性${property}的访问器函数:${accessorFn.name}执行报错`, + message: error?.message || `区块属性${property}的访问器函数:${accessorFn.name}执行报错,请检查语法` + }) + } + }) + ) + }) + + return schema +} + +const getNode = (id, parent) => (id ? getNodeById(id, parent) : schema) + +export default { + setup() { + provide('rootSchema', schema) + + const { locale } = inject(I18nInjectionKey).global + const { data } = useBroadcastChannel({ name: BROADCAST_CHANNEL.CanvasLang }) + const { post } = useBroadcastChannel({ name: BROADCAST_CHANNEL.SchemaLength }) + + watch(data, () => { + locale.value = data.value + }) + + watch( + () => schema?.children?.length, + (length) => { + post(length) + } + ) + + // 这里监听schema.methods,为了保证methods上下文环境始终为最新 + watch( + () => schema.methods, + (value) => { + setMethods(value, true) + }, + { + deep: true + } + ) + }, + render() { + // 渲染画布增加根节点,与出码和预览保持一致 + const rootChildrenSchema = { + componentName: 'div', + props: schema.props, + children: schema.children + } + + return h( + 'tiny-i18n-host', + { + locale: 'zh_CN', + key: refreshKey.value, + ref: 'page', + className: 'design-page' + }, + schema.children?.length ? h(renderer, { schema: rootChildrenSchema, parent: schema }) : [h(CanvasEmpty)] + ) + } +} + +export const api = { + getUtils, + setUtils, + updateUtils, + deleteUtils, + getBridge, + setBridge, + getMethods, + setMethods, + setController, + setConfigure, + getSchema, + setSchema, + getState, + deleteState, + setState, + getProps, + setProps, + getContext, + getNode, + getRoot, + setPagecss, + setCondition, + getGlobalState, + getDataSourceMap, + setDataSourceMap, + setGlobalState +} + +const canvasApi = { + getCurrent, + setLocales, + getNodeById: getNode, + updateRect, + addStyle, + addScript, + canvasDispatch +} + +window.api = api +window.canvasApi = canvasApi +window.Builtin = Builtin diff --git a/packages/canvas/src/components/render/context.js b/packages/canvas/src/components/render/context.js new file mode 100644 index 000000000..96b8ca673 --- /dev/null +++ b/packages/canvas/src/components/render/context.js @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { shallowReactive } from 'vue' +import { utils } from '@opentiny/tiny-engine-utils' + +export const context = shallowReactive({}) + +// 从大纲树控制隐藏 +export const conditions = shallowReactive({}) + +const nodes = {} + +export const setNode = (schema, parent) => { + schema.id = schema.id || utils.guid() + nodes[schema.id] = { node: schema, parent } +} + +export const getNode = (id, parent) => { + return parent ? nodes[id] : nodes[id].node +} + +export const delNode = (id) => delete nodes[id] + +export const clearNodes = () => { + Object.keys(nodes).forEach(delNode) +} + +export const getRoot = (id) => { + const { parent } = getNode(id, true) + + return parent?.id ? getRoot(parent.id) : parent +} + +export const setContext = (ctx, clear) => { + clear && Object.keys(context).forEach((key) => delete context[key]) + Object.assign(context, ctx) +} + +export const getContext = () => context + +export const setCondition = (id, visible = false) => { + conditions[id] = visible +} diff --git a/packages/canvas/src/components/render/render.js b/packages/canvas/src/components/render/render.js new file mode 100644 index 000000000..b5985c73b --- /dev/null +++ b/packages/canvas/src/components/render/render.js @@ -0,0 +1,722 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { h, provide, reactive } from 'vue' +import { isHTMLTag, hyphenate } from '@vue/shared' +import { useBroadcastChannel } from '@vueuse/core' +import { constants, utils } from '@opentiny/tiny-engine-utils' +import babelPluginJSX from '@vue/babel-plugin-jsx' +import { transformSync } from '@babel/core' +import i18nHost from '@opentiny/tiny-engine-i18n-host' +import { CanvasRow, CanvasCol, CanvasRowColContainer } from '@opentiny/tiny-engine-builtin-component' +import { CanvasLive } from '@opentiny/tiny-engine-live-component' +import { context, conditions, setNode } from './context' +import { + CanvasBox, + CanvasCollection, + CanvasIcon, + CanvasText, + CanvasSlot, + CanvasImg, + CanvasPlaceholder +} from '../builtin' +import { NODE_UID as DESIGN_UIDKEY, NODE_TAG as DESIGN_TAGKEY, NODE_LOOP as DESIGN_LOOPID } from '../common' + +const { BROADCAST_CHANNEL } = constants +const { hyphenateRE } = utils +const customElements = {} + +const transformJSX = (code) => { + const res = transformSync(code, { + plugins: [ + [ + babelPluginJSX, + { + pragma: 'h', + isCustomElement: (name) => customElements[name] + } + ] + ] + }) + return (res.code || '') + .replace(/import \{.+\} from "vue";/, '') + .replace(/h\(_?resolveComponent\((.*?)\)/g, `h(this.getComponent($1)`) + .replace(/_?resolveComponent/g, 'h') + .replace(/_?createTextVNode\((.*?)\)/g, '$1') + .trim() +} + +export const blockSlotDataMap = reactive({}) + +const Mapper = { + Icon: CanvasIcon, + Text: CanvasText, + Collection: CanvasCollection, + div: CanvasBox, + Slot: CanvasSlot, + slot: CanvasSlot, + Template: CanvasBox, + Img: CanvasImg, + Live: CanvasLive, + CanvasRow, + CanvasCol, + CanvasRowColContainer, + CanvasPlaceholder +} + +const { post } = useBroadcastChannel({ name: BROADCAST_CHANNEL.Notify }) + +// 此处向外层window传递notify配置参数 +export const globalNotify = (options) => post(options) + +export const collectionMethodsMap = {} + +const getNative = (name) => { + return window.TinyLowcodeComponent?.[name] +} + +const getBlock = (name) => { + return window.blocks?.[name] +} + +const configure = {} +const controller = {} + +export const setConfigure = (configureData) => { + Object.assign(configure, configureData) +} + +export const setController = (controllerData) => { + Object.assign(controller, controllerData) +} + +export const getController = () => controller + +const isI18nData = (data) => { + return data && data.type === 'i18n' +} + +const isJSSlot = (data) => { + return data && data.type === 'JSSlot' +} + +const isJSExpression = (data) => { + return data && data.type === 'JSExpression' +} + +const isJSFunction = (data) => { + return data && data.type === 'JSFunction' +} + +const isJSResource = (data) => { + return data && data.type === 'JSResource' +} + +const isString = (data) => { + return typeof data === 'string' +} + +const isArray = (data) => { + return Array.isArray(data) +} + +const isFunction = (data) => { + return typeof data === 'function' +} + +const isObject = (data) => { + return typeof data === 'object' +} + +// 判断是否是状态访问器 +export const isStateAccessor = (stateData) => + stateData?.accessor?.getter?.type === 'JSFunction' || stateData?.accessor?.setter?.type === 'JSFunction' + +// 规避创建function eslint报错 +export const newFn = (...argv) => { + const Fn = Function + return new Fn(...argv) +} + +const parseExpression = (data, scope, ctx, isJsx = false) => { + try { + if (data.value.indexOf('this.i18n') > -1) { + ctx.i18n = i18nHost.global.t + } else if (data.value.indexOf('t(') > -1) { + ctx.t = i18nHost.global.t + } + + const expression = isJsx ? transformJSX(data.value) : data.value + return newFn('$scope', `with($scope || {}) { return ${expression} }`).call(ctx, { + ...ctx, + ...scope, + slotScope: scope + }) + } catch (err) { + // 解析抛出异常,则再尝试解析 JSX 语法。如果解析 JSX 语法仍然出现错误,isJsx 变量会确保不会再次递归执行解析 + if (!isJsx) { + return parseExpression(data, scope, ctx, true) + } + return undefined + } +} + +const parseI18n = (i18n, scope, ctx) => { + return parseExpression( + { + type: 'JSExpression', + value: `this.i18n('${i18n.key}', ${JSON.stringify(i18n.params)})` + }, + scope, + { i18n: i18nHost.global.t, ...ctx } + ) +} + +const renderDefault = (children, scope, parent) => + children.map?.((child) => + // eslint-disable-next-line no-use-before-define + h(renderer, { + schema: child, + scope, + parent + }) + ) + +const parseJSSlot = (data, scope) => { + return ($scope) => renderDefault(data.value, { ...scope, ...$scope }, data) +} + +export const generateFn = (innerFn, context) => { + return (...args) => { + // 如果有数据源标识,则表格的fetchData返回数据源的静态数据 + const sourceId = collectionMethodsMap[innerFn.realName || innerFn.name] + if (sourceId) { + return innerFn.call(context, ...args) + } else { + let result = null + + // 这里是为了兼容用户写法报错导致画布异常,但无法捕获promise内部的异常 + try { + result = innerFn.call(context, ...args) + } catch (error) { + globalNotify({ + type: 'warning', + title: `函数:${innerFn.name}执行报错`, + message: error?.message || `函数:${innerFn.name}执行报错,请检查语法` + }) + } + + // 这里注意如果innerFn返回的是一个promise则需要捕获异常,重新返回默认一条空数据 + if (result.then) { + result = new Promise((resolve) => { + result.then(resolve).catch((error) => { + globalNotify({ + type: 'warning', + title: '异步函数执行报错', + message: error?.message || '异步函数执行报错,请检查语法' + }) + // 这里需要至少返回一条空数据,方便用户使用表格默认插槽 + resolve({ + result: [{}], + page: { total: 1 } + }) + }) + }) + } + + return result + } + } +} + +// 解析函数字符串结构 +const parseFunctionString = (fnStr) => { + const fnRegexp = /(async)?.*?(\w+) *\(([\s\S]*?)\) *\{([\s\S]*)\}/ + const result = fnRegexp.exec(fnStr) + if (result) { + return { + type: result[1] || '', + name: result[2], + params: result[3] + .split(',') + .map((item) => item.trim()) + .filter((item) => Boolean(item)), + body: result[4] + } + } + return null +} + +const getPlainProps = (object = {}) => { + const { slot, ...rest } = object + const props = {} + + if (slot) { + rest.slot = slot.name || slot + } + + Object.entries(rest).forEach(([key, value]) => { + let renderKey = key + + // html 标签属性会忽略大小写,所以传递包含大写的 props 需要转换为 kebab 形式的 props + if (!/on[A-Z]/.test(renderKey) && hyphenateRE.test(renderKey)) { + renderKey = hyphenate(renderKey) + } + + if (['boolean', 'string', 'number'].includes(typeof value)) { + props[renderKey] = value + } else { + // 如果传给webcomponent标签的是对象或者数组需要使用.prop修饰符,转化成h函数就是如下写法 + props[`.${renderKey}`] = value + } + }) + return props +} + +const generateCollection = (schema) => { + if (schema.componentName === 'Collection' && schema.props?.dataSource && schema.children) { + schema.children.forEach((item) => { + const fetchData = item.props?.fetchData + const methodMatch = fetchData?.value?.match(/this\.(.+?)}/) + if (fetchData && methodMatch?.[1]) { + const methodName = methodMatch[1].trim() + // 缓存表格fetchData对应的数据源信息 + collectionMethodsMap[methodName] = schema.props.dataSource + } + }) + } +} + +const generateBlockContent = (schema) => { + if (schema?.componentName === 'Collection') { + generateCollection(schema) + } + if (Array.isArray(schema?.children)) { + schema.children.forEach((item) => { + generateBlockContent(item) + }) + } +} + +const registerBlock = (componentName) => { + getController() + .registerBlock?.(componentName) + .then((res) => { + const blockSchema = res.content + + // 拿到区块数据,建立区块中数据源的映射关系 + generateBlockContent(blockSchema) + + // 如果区块的根节点有百分比高度,则需要特殊处理,把高度百分比传递下去,适配大屏应用 + if (/height:\s*?[\d|.]+?%/.test(blockSchema?.props?.style)) { + const blockDoms = document.querySelectorAll(hyphenate(componentName)) + blockDoms.forEach((item) => { + item.style.height = '100%' + }) + } + }) +} + +export const wrapCustomElement = (componentName) => { + const material = getController().getMaterial(componentName) + + if (!Object.keys(material).length) { + registerBlock(componentName) + } + + customElements[componentName] = { + name: componentName + '.ce', + render() { + return h( + hyphenate(componentName), + window.parent.TinyGlobalConfig.dslMode === 'Vue' ? getPlainProps(this.$attrs) : this.$attrs, + this.$slots.default?.() + ) + } + } + + return customElements[componentName] +} + +export const getComponent = (name) => { + return ( + Mapper[name] || + getNative(name) || + getBlock(name) || + customElements[name] || + (isHTMLTag(name) ? name : wrapCustomElement(name)) + ) +} + +// 解析JSX字符串为可执行函数 +const parseJSXFunction = (data, ctx) => { + try { + const newValue = transformJSX(data.value) + const fnInfo = parseFunctionString(newValue) + if (!fnInfo) throw Error('函数解析失败,请检查格式。示例:function fnName() { }') + + return newFn(...fnInfo.params, fnInfo.body).bind({ + ...ctx, + getComponent + }) + } catch (error) { + globalNotify({ + type: 'warning', + title: '函数声明解析报错', + message: error?.message || '函数声明解析报错,请检查语法' + }) + + return newFn() + } +} + +const parseJSFunction = (data, scope, ctx = context) => { + try { + const innerFn = newFn(`return ${data.value}`).bind(ctx)() + return generateFn(innerFn, ctx) + } catch (error) { + return parseJSXFunction(data, ctx) + } +} + +const parseList = [] + +export function parseData(data, scope, ctx = context) { + let res = data + parseList.some((item) => { + if (item.type(data)) { + res = item.parseFunc(data, scope, ctx) + + return true + } + + return false + }) + + return res +} + +const parseCondition = (condition, scope, ctx = context) => { + // eslint-disable-next-line no-eq-null + return condition == null ? true : parseData(condition, scope, ctx) +} + +const parseLoopArgs = (_loop) => { + if (_loop) { + const { item, index, loopArgs = '' } = _loop + const body = `return {${loopArgs[0] || 'item'}: item, ${loopArgs[1] || 'index'} : index }` + return newFn('item,index', body)(item, index) + } + return undefined +} + +export const getIcon = (name) => window.TinyVueIcon?.[name]?.() || '' + +const parseObjectData = (data, scope, ctx) => { + if (!data) { + return data + } + + // 如果是状态访问器,则直接解析默认值 + if (isStateAccessor(data)) { + return parseData(data.defaultValue) + } + + // 解析通过属性传递icon图标组件 + if (data.componentName === 'Icon') { + return getIcon(data.props.name) + } + const res = {} + Object.entries(data).forEach(([key, value]) => { + // 如果是插槽则需要进行特殊处理 + if (key === 'slot' && value?.name) { + res[key] = value.name + } else { + res[key] = parseData(value, scope, ctx) + } + }) + return res +} + +const parseString = (data) => { + return data.trim() +} + +const parseArray = (data, scope, ctx) => { + return data.map((item) => parseData(item, scope, ctx)) +} + +const parseFunction = (data, scope, ctx) => { + return data.bind(ctx) +} + +parseList.push( + ...[ + { + type: isJSExpression, + parseFunc: parseExpression + }, + { + type: isI18nData, + parseFunc: parseI18n + }, + { + type: isJSFunction, + parseFunc: parseJSFunction + }, + { + type: isJSResource, + parseFunc: parseExpression + }, + { + type: isJSSlot, + parseFunc: parseJSSlot + }, + { + type: isString, + parseFunc: parseString + }, + { + type: isArray, + parseFunc: parseArray + }, + { + type: isFunction, + parseFunc: parseFunction + }, + { + type: isObject, + parseFunc: parseObjectData + } + ] +) + +const stopEvent = (event) => { + event.preventDefault?.() + event.stopPropagation?.() + return false +} + +const generateSlotGroup = (children, isCustomElm, schema) => { + const slotGroup = {} + + children.forEach((child) => { + const { componentName, children, params = [], props } = child + const slot = child.slot || props?.slot?.name || props?.slot || 'default' + const isNotEmptyTemplate = componentName === 'Template' && children.length + + isCustomElm && (child.props.slot = 'slot') // CE下需要给子节点加上slot标识 + slotGroup[slot] = slotGroup[slot] || { + value: [], + params, + parent: isNotEmptyTemplate ? child : schema + } + + slotGroup[slot].value.push(...(isNotEmptyTemplate ? children : [child])) // template 标签直接过滤掉 + }) + + return slotGroup +} + +const renderSlot = (children, scope, schema, isCustomElm) => { + if (children.some((a) => a.componentName === 'Template')) { + const slotGroup = generateSlotGroup(children, isCustomElm, schema) + const slots = {} + + Object.keys(slotGroup).forEach((slotName) => { + const currentSlot = slotGroup[slotName] + + slots[slotName] = ($scope) => renderDefault(currentSlot.value, { ...scope, ...$scope }, currentSlot.parent) + }) + + return slots + } + + return { default: () => renderDefault(children, scope, schema) } +} + +const checkGroup = (componentName) => configure[componentName]?.nestingRule?.childWhitelist?.length + +const clickCapture = (componentName) => configure[componentName]?.clickCapture !== false + +const getBindProps = (schema, scope) => { + const { id, componentName } = schema + const invalidity = configure[componentName]?.invalidity || [] + + if (componentName === 'CanvasPlaceholder') { + return {} + } + + const bindProps = { + ...parseData(schema.props, scope), + [DESIGN_UIDKEY]: id, + [DESIGN_TAGKEY]: componentName, + onMoseover: stopEvent, + onFocus: stopEvent + } + if (scope) { + bindProps[DESIGN_LOOPID] = scope.index === undefined ? scope.idx : scope.index + } + + // 在捕获阶段阻止事件的传播 + if (clickCapture(componentName)) { + bindProps.onClickCapture = stopEvent + } + + if (Mapper[componentName]) { + bindProps.schema = schema + } + + // 绑定组件属性时需要将 className 重命名为 class,防止覆盖组件内置 class + bindProps.class = bindProps.className + delete bindProps.className + + // 使画布中元素可拖拽 + bindProps.draggable = true + + // 过滤在门户网站上配置的画布丢弃的属性 + invalidity.forEach((prop) => delete bindProps[prop]) + + return bindProps +} + +const getLoopScope = ({ scope, index, item, loopArgs }) => { + return { + ...scope, + ...(parseLoopArgs({ + item, + index, + loopArgs + }) || {}) + } +} + +const renderGroup = (children, scope, parent) => { + return children.map?.((schema) => { + const { componentName, children, loop, loopArgs, condition, id } = schema + const loopList = parseData(loop, scope) + + const renderElement = (item, index) => { + const mergeScope = getLoopScope({ + scope, + index, + item, + loopArgs + }) + + setNode(schema, parent) + + if (conditions[id] === false || !parseCondition(condition, mergeScope)) { + return null + } + + return h( + getComponent(componentName), + getBindProps(schema, mergeScope), + Array.isArray(children) ? renderSlot(children, mergeScope, schema) : parseData(children, mergeScope) + ) + } + + return loopList?.length ? loopList.map(renderElement) : renderElement() + }) +} + +const ContainerComponent = ['CanvasCol', 'CanvasRow', 'CanvasRowColContainer'] + +const getChildren = (schema, mergeScope) => { + const { componentName, children } = schema + let renderChildren = children + + if (ContainerComponent.includes(componentName) && !renderChildren?.length) { + renderChildren = [ + { + componentName: 'CanvasPlaceholder' + } + ] + } + + const component = getComponent(componentName) + const isNative = typeof component === 'string' + const isCustomElm = customElements[componentName] + const isGroup = checkGroup(componentName) + + if (Array.isArray(renderChildren)) { + if (isNative || isCustomElm) { + return renderDefault(renderChildren, mergeScope, schema) + } else { + return isGroup + ? renderGroup(renderChildren, mergeScope, schema) + : renderSlot(renderChildren, mergeScope, schema, isCustomElm) + } + } else { + return parseData(renderChildren, mergeScope) + } +} + +export const renderer = { + name: 'renderer', + props: { + schema: Object, + scope: Object, + parent: Object + }, + setup(props) { + provide('schema', props.schema) + }, + render() { + const { scope, schema, parent } = this + const { componentName, loop, loopArgs, condition } = schema + + // 处理数据源和表格fetchData的映射关系 + generateCollection(schema) + + if (!componentName) { + return parseData(schema, scope) + } + + const component = getComponent(componentName) + + const loopList = parseData(loop, scope) + + const renderElement = (item, index) => { + let mergeScope = item + ? getLoopScope({ + item, + index, + loopArgs, + scope + }) + : scope + + // 如果是区块,并且使用了区块的作用域插槽,则需要将作用域插槽的数据传递下去 + if (parent?.componentType === 'Block' && componentName === 'Template' && schema.props?.slot?.params?.length) { + const slotName = schema.props.slot?.name || schema.props.slot + const blockName = parent.componentName + const slotData = blockSlotDataMap[blockName]?.[slotName] || {} + mergeScope = mergeScope ? { ...mergeScope, ...slotData } : slotData + } + + // 给每个节点设置schema.id,并缓存起来 + setNode(schema, parent) + + if (conditions[schema.id] === false || !parseCondition(condition, mergeScope)) { + return null + } + + return h(component, getBindProps(schema, mergeScope), getChildren(schema, mergeScope)) + } + + return loopList?.length ? loopList.map(renderElement) : renderElement() + } +} + +export default renderer diff --git a/packages/canvas/src/components/render/runner.js b/packages/canvas/src/components/render/runner.js new file mode 100644 index 000000000..bf70d32ff --- /dev/null +++ b/packages/canvas/src/components/render/runner.js @@ -0,0 +1,142 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import * as Vue from 'vue' +import * as VueI18n from 'vue-i18n' +import { addScript, addStyle, dynamicImportComponents, updateDependencies } from '../common' +import TinyI18nHost, { I18nInjectionKey } from '@opentiny/tiny-engine-controller/js/i18n' +import * as TinyWebcomponentCore from '@opentiny/tiny-engine-webcomponent-core' +import TinyVue from '@opentiny/vue' +import * as TinyVueIcon from '@opentiny/vue-icon' +import Main, { api } from './RenderMain' +import { getComponent, blockSlotDataMap } from './render' +import lowcode from '../../lowcode' +import { camelize, capitalize } from '@vue/shared' + +const dispatch = (name, data) => { + window.parent.document.dispatchEvent(new CustomEvent(name, data)) +} + +dispatch('beforeCanvasReady') + +TinyI18nHost.lowcode = lowcode + +// 目前先兼容老区块发布的代码,后期区块发布整改后再删除 +window.React = {} +window.React.createElement = Vue.h + +// 不能采用new Proxy代理Vue的方案,在编译后的vue会报错警告,采用一下方案扩展用于注入一些区块加载逻辑 +window.Vue = { + ...Vue, + resolveComponent(...args) { + // 此处先执行vue内部的解析组件的方法,如果可以拿到组件对象则直接返回,反之则去注册区块 + const component = Vue.resolveComponent(args[0]) + if (component && typeof component === 'string') { + return getComponent(capitalize(camelize(args[0]))) + } else { + return component + } + }, + // renderSlot方法第三个参数是作用域插槽传递的数据,格式{ data: vue.unref(state).componentData } + renderSlot(...args) { + // 获取当前vue的实例 + const instance = Vue.getCurrentInstance() + + // 获取当前区块名称 + const blockName = instance.attrs.dataTag + + const [, slotName, slotData] = args + + // 如果是作用域插槽,则获取作用域插槽传递过来的参数 + if (slotData) { + if (blockSlotDataMap[blockName]) { + blockSlotDataMap[blockName][slotName] = slotData + } else { + blockSlotDataMap[blockName] = { [slotName]: slotData } + } + } + + /** + * vue源码中的renderSlot会忽略default插槽的名称,所以这里必须手动添加args第三个参数的name值 + * vue源码如右所示:if (name !== 'default') props.name = name; return createVNode('slot', props, fallback && fallback()); + **/ + if (slotName === 'default') { + args[2] = args[2] || {} + args[2].name = slotName + } + + return Vue.renderSlot(...args) + } +} + +window.VueI18n = VueI18n +window.TinyVue = TinyVue +window.TinyVueIcon = TinyVueIcon +window.TinyWebcomponentCore = TinyWebcomponentCore +window.TinyI18nHost = TinyI18nHost +window.TinyLowcodeComponent = {} +window.TinyComponentLibs = {} + +Object.entries(TinyVue).forEach(([_key, component]) => { + const { name } = component + if (name) { + window.TinyLowcodeComponent[name] = component + } +}) + +let App = null + +const renderer = { + getApp() { + return App + }, + getI18n() { + return TinyI18nHost + }, + ...api +} + +const create = () => { + App && App.unmount() + App = null + + document.body.remove() + document.body = document.createElement('body') + const app = document.createElement('div') + app.setAttribute('id', 'app') + document.body.appendChild(app) + + dispatch('canvasReady', { detail: renderer }) + + App = Vue.createApp(Main).use(TinyI18nHost).provide(I18nInjectionKey, TinyI18nHost) + App.config.globalProperties.lowcodeConfig = window.parent.TinyGlobalConfig + App.mount(document.querySelector('#app')) + + new ResizeObserver(() => { + dispatch('canvasResize') + }).observe(document.body) + + App.config.errorHandler = () => {} +} + +export const createRender = (config) => { + const { dslMode, canvasOptions } = config + const { styles = [], scripts = [] } = canvasOptions[dslMode] + const { styles: thirdStyles = [], scripts: thirdScripts = [] } = window.thirdPartyDeps || {} + + Promise.all([ + ...thirdScripts.map(dynamicImportComponents), + ...scripts.map((src) => addScript(src)).concat([...thirdStyles, ...styles].map((src) => addStyle(src))) + ]).finally(create) +} + +document.addEventListener('updateDependencies', updateDependencies) diff --git a/packages/canvas/src/i18n.js b/packages/canvas/src/i18n.js new file mode 100644 index 000000000..d50d9602f --- /dev/null +++ b/packages/canvas/src/i18n.js @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import i18n from '@opentiny/tiny-engine-i18n-host' +import lowcode from './lowcode' +import locale from './locale' + +i18n.lowcode = lowcode +i18n.global.mergeLocaleMessage('zh_CN', locale.zh) +i18n.global.mergeLocaleMessage('en_US', locale.en) + +export default i18n diff --git a/packages/canvas/src/i18n/en.json b/packages/canvas/src/i18n/en.json new file mode 100644 index 000000000..7d106f58a --- /dev/null +++ b/packages/canvas/src/i18n/en.json @@ -0,0 +1,5 @@ +{ + "tip": { + "ok": "are you ok" + } +} diff --git a/packages/canvas/src/i18n/zh.json b/packages/canvas/src/i18n/zh.json new file mode 100644 index 000000000..e15179f44 --- /dev/null +++ b/packages/canvas/src/i18n/zh.json @@ -0,0 +1,5 @@ +{ + "tip": { + "ok": "准备好了吗?" + } +} diff --git a/packages/canvas/src/index.js b/packages/canvas/src/index.js new file mode 100644 index 000000000..fcf1d07ee --- /dev/null +++ b/packages/canvas/src/index.js @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import CanvasContainer from './components/container/CanvasContainer.vue' +import CanvasAction from './components/container/CanvasAction.vue' +import CanvasDragItem from './components/container/CanvasDragItem.vue' +import CanvasFooter from './components/container/CanvasFooter.vue' +import CanvasResize from './components/container/CanvasResize.vue' +import Builtin from './components/builtin/builtin.json' +import RenderMain, { api as renderApi } from './components/render/RenderMain' +import { createRender } from './components/render/runner' +import { + dragStart, + updateRect, + getContext, + getNodePath, + dragMove, + setLocales, + setState, + deleteState, + getRenderer, + clearSelect, + selectNode, + hoverNode, + insertNode, + removeNode, + addComponent, + setPageCss, + addScript, + addStyle, + getNode, + getCurrent, + setSchema, + setUtils, + updateUtils, + deleteUtils, + getSchema, + setI18n, + getCanvasType, + setCanvasType, + setProps, + setGlobalState, + getGlobalState, + getDocument, + canvasDispatch +} from './components/container/container' + +export { + CanvasContainer, + CanvasAction, + CanvasFooter, + CanvasDragItem, + CanvasResize, + RenderMain, + renderApi, + Builtin, + dragStart, + dragMove, + updateRect, + getContext, + getNodePath, + getNode, + getCurrent, + setSchema, + setUtils, + updateUtils, + deleteUtils, + getSchema, + setLocales, + setState, + deleteState, + setI18n, + getRenderer, + clearSelect, + selectNode, + insertNode, + removeNode, + hoverNode, + addComponent, + setPageCss, + addScript, + addStyle, + getCanvasType, + setCanvasType, + setProps, + setGlobalState, + getGlobalState, + getDocument, + canvasDispatch, + createRender +} + +export default CanvasContainer diff --git a/packages/canvas/src/locale.js b/packages/canvas/src/locale.js new file mode 100644 index 000000000..00aea38fc --- /dev/null +++ b/packages/canvas/src/locale.js @@ -0,0 +1,19 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import zh from './i18n/zh.json' +import en from './i18n/en.json' + +export default { + en, + zh +} diff --git a/packages/canvas/src/lowcode.js b/packages/canvas/src/lowcode.js new file mode 100644 index 000000000..0c453d83a --- /dev/null +++ b/packages/canvas/src/lowcode.js @@ -0,0 +1,104 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { getCurrentInstance, nextTick, provide, inject } from 'vue' +import { I18nInjectionKey } from 'vue-i18n' +import { api } from './components/render/RenderMain' +import { collectionMethodsMap, generateFn, globalNotify } from './components/render/render' + +export const lowcodeWrap = (props, context) => { + const global = {} + const instance = getCurrentInstance() + const router = '' + const route = '' + const { t, locale } = inject(I18nInjectionKey).global + const emit = context.emit + const ref = (ref) => instance.refs[ref] + + const setState = (newState, callback) => { + Object.assign(global.state, newState) + nextTick(() => callback?.apply(global)) + } + + const getLocale = () => locale.value + const setLocale = (val) => { + locale.value = val + } + + const location = () => window.location + const history = () => window.history + + Object.defineProperties(global, { + props: { get: () => props }, + emit: { get: () => emit }, + setState: { get: () => setState }, + router: { get: () => router }, + route: { get: () => route }, + i18n: { get: () => t }, + getLocale: { get: () => getLocale }, + setLocale: { get: () => setLocale }, + location: { get: location }, + history: { get: history }, + utils: { + get: api.getUtils + }, + bridge: { get: () => ({}) }, + dataSourceMap: { get: api.getDataSourceMap }, + $: { get: () => ref } + }) + + const wrap = (fn) => { + if (typeof fn === 'function') { + const fnName = fn.name + if (fn.toString().includes('return this')) { + return () => global + } else if (fnName && collectionMethodsMap[fnName.slice(0, -1)]) { + // 这里区块打包的时候会在方法名称后面多加一个字符串,所以此处需要截取下函数名称 + fn.realName = fnName.slice(0, -1) + return generateFn(fn) + } else if (fn.name === 'setter' || fn.name === 'getter') { + // 这里需要保证在消费区块时,区块中的访问器函数可以正常执行 + return (...args) => { + try { + fn.apply(global, args) + } catch (error) { + globalNotify({ + type: 'warning', + title: `访问器函数:${fn.name}执行报错`, + message: error?.message || `访问器函数:${fn.name}执行报错,请检查语法` + }) + } + } + } else { + return () => Promise.resolve({ result: [], page: { total: 100 } }) + } + } + + Object.entries(fn).forEach(([name, value]) => { + Object.defineProperty(global, name, { + get: () => value + }) + }) + + fn.t = t + + return fn + } + + return wrap +} + +export default () => { + const i18n = inject(I18nInjectionKey) + provide(I18nInjectionKey, i18n) + return { t: i18n.global.t, lowcodeWrap } +} diff --git a/packages/canvas/src/main.js b/packages/canvas/src/main.js new file mode 100644 index 000000000..64201a274 --- /dev/null +++ b/packages/canvas/src/main.js @@ -0,0 +1,17 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { createApp } from 'vue' + +import App from './Design.vue' + +createApp(App).mount('#app') diff --git a/packages/canvas/test/form.json b/packages/canvas/test/form.json new file mode 100644 index 000000000..ff5f7140d --- /dev/null +++ b/packages/canvas/test/form.json @@ -0,0 +1,690 @@ +{ + "componentName": "Block", + "fileName": "CrmQuoteInfo", + "css": ".crm-quote-info .form-title {\r\n color: #252b3a;\r\n font-size: 14px;\r\n font-weight: bold;\r\n margin-bottom: 20px;\r\n padding-left: 12px;\r\n}\r\n.crm-quote-info .form-fixed-layout {\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-column-gap: 12px;\r\n}\r\n.crm-quote-info {\r\n background: #fff;\r\n padding: 12px;\r\n min-height: 500px;\r\n}\r\n.crm-quote-info .form-auto-layout {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n.search-form {\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n width: 70%;\r\n}\r\n.icon-wrap {\r\n border: 1px solid #adb0b8;\r\n margin-left: 10px;\r\n border-radius: 3px;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n height: 30px;\r\n display: flex;\r\n align-items: center;\r\n width: 24px;\r\n padding: 0 12px;\r\n justify-content: center;\r\n}\r\n.out-search-box {\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.tag-nomal {\r\n display: flex;\r\n align-items: center;\r\n}\r\n.tag-nomal span {\r\n display: block;\r\n background-color: #adb0b8;\r\n border: 1px solid #adb0b8;\r\n border-radius: 4px;\r\n padding: 2px;\r\n color: #fff;\r\n height: 16px;\r\n line-height: 16px;\r\n}\r\n.tag-success span {\r\n background-color: #50d4a8;\r\n border: 1px solid #50d4a8;\r\n}", + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "isFixed", + "type": "Boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否固定列布局" + } + }, + "description": { + "zh_CN": "配置固定列布局" + }, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "cols": 12, + "rules": [], + "required": true, + "handle": {} + }, + { + "property": "isAuto", + "type": "Boolean", + "defaultValue": false, + "label": { + "text": { + "zh_CN": "是否弹性布局" + } + }, + "description": { + "zh_CN": "配置弹性布局" + }, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "cols": 12, + "rules": [], + "required": true, + "handle": {} + }, + { + "property": "cpqId", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "报价ID" + } + }, + "description": { + "zh_CN": "报价ID" + }, + "widget": { + "component": "MetaInput", + "props": {} + }, + "cols": 12, + "rules": [], + "required": true, + "handle": {} + } + ] + } + ] + }, + "children": [ + { + "componentName": "div", + "id": "ffab54ff", + "props": { + "className": "crm-quote-info" + }, + "children": [ + { + "componentName": "TinyForm", + "id": "85d5eae4", + "props": { + "ref": "quotaForm", + "disabled": { + "type": "JSExpression", + "value": "this.state.formDisabled" + }, + "model": { + "type": "JSExpression", + "value": "this.state.quotationInfo" + }, + "label-position": "left", + "label-width": "99px", + "label-align": true, + "rules": { + "type": "JSExpression", + "value": "this.state.rules" + } + }, + "children": [ + { + "componentName": "div", + "id": "51852926", + "props": { + "className": "form-title" + }, + "children": [ + { + "componentName": "span", + "id": "99ea0dcf", + "children": { + "type": "i18n", + "key": "quotes.basic_info.basic_info" + } + } + ] + }, + { + "componentName": "div", + "id": "d9e174ae", + "props": { + "className": { + "type": "JSExpression", + "value": "['basic-info', {'form-fixed-layout': this.props.isFixed}, {'form-auto-layout': this.props.isAuto}]" + } + }, + "children": [ + { + "componentName": "TinyFormItem", + "id": "eab52926", + "props": { + "label": { + "type": "i18n", + "key": "quotes.quote_list.project_name" + }, + "prop": "cpqName" + }, + "children": [ + { + "componentName": "TinyTooltip", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.showTooltip", + "model": { + "prop": "" + } + }, + "placement": "right", + "content": { + "type": "i18n", + "key": "tips.valid_err_msg_project_name" + }, + "manual": true + }, + "children": [ + { + "componentName": "TinyInput", + "id": "eab11113", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.quotationInfo.cpqName", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "JSExpression", + "value": "`xxx客户-${new Date().toLocaleDateString()}`" + }, + "onFocus": { + "type": "JSExpression", + "value": "this.state.showTooltip = true" + }, + "onBlur": { + "type": "JSExpression", + "value": "this.state.showTooltip = false" + } + } + } + ], + "id": "9dec979c" + } + ] + }, + { + "componentName": "TinyFormItem", + "id": "eab174ae", + "props": { + "label": { + "type": "i18n", + "key": "quotes.basic_info.sales_method" + }, + "prop": "salesMode" + }, + "children": [ + { + "componentName": "TinySelect", + "id": "eab11114", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.quotationInfo.salesMode", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "i18n", + "key": "quotes.productlist.pleaseenterkeywords" + } + }, + "children": [ + { + "componentName": "TinyOption", + "props": { + "key": { + "type": "JSExpression", + "value": "item.key" + }, + "label": { + "type": "JSExpression", + "value": "item.label" + }, + "value": { + "type": "JSExpression", + "value": "item.value" + } + }, + "id": "02944972" + } + ] + } + ] + }, + { + "componentName": "TinyFormItem", + "id": "eab11111", + "props": { + "label": { + "type": "i18n", + "key": "quotes.basic_info.agreement_type_create" + }, + "prop": "bizType" + }, + "children": [ + { + "componentName": "TinySelect", + "id": "eab11116", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.quotationInfo.bizType", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "i18n", + "key": "crm.common.pleaseselect" + } + }, + "children": [ + { + "componentName": "TinyOption", + "id": "eab11117", + "props": { + "key": { + "type": "JSExpression", + "value": "item.value" + }, + "label": { + "type": "JSExpression", + "value": "item.text" + }, + "value": { + "type": "JSExpression", + "value": "item.value" + } + } + } + ] + } + ] + }, + { + "componentName": "TinyFormItem", + "id": "eab11112", + "props": { + "label": { + "type": "i18n", + "key": "quotes.basic_info.opportunity_name_create" + } + }, + "children": [ + { + "componentName": "TinyPopeditor", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.quotationInfo.opptyName", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "i18n", + "key": "quotes.basic_info.oppty_error" + }, + "title": { + "type": "i18n", + "key": "business.basic_info.choose_opportunity" + }, + "width": "700", + "grid-op": { + "type": "JSExpression", + "value": "this.state.gridOp" + }, + "text-field": "opportunity_name", + "value-field": "opportunity_id", + "show-pager": true, + "remote-search": { + "type": "JSExpression", + "value": "this.remoteSearch" + }, + "pager-op": { + "type": "JSExpression", + "value": "this.state.gridOp.pagerOp" + }, + "conditions": { + "type": "JSExpression", + "value": "this.state.conditions" + }, + "onChange": { + "type": "JSExpression", + "value": "this.opportunityChange" + } + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": { + "name": "search", + "params": "slotScope" + } + }, + "children": [ + { + "componentName": "div", + "props": { + "className": "out-search-box" + }, + "children": [ + { + "componentName": "div", + "props": { + "className": "search-form" + }, + "children": [ + { + "componentName": "TinySelect", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.conditionForm.oppSourceSelected", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "i18n", + "key": "crm.common.pleaseselect" + }, + "onChange": { + "type": "JSExpression", + "value": "slotScope.searchOp.doSearch(this.state.conditionForm)" + } + }, + "children": [ + { + "componentName": "TinyOption", + "props": { + "key": { + "type": "JSExpression", + "value": "item.value" + }, + "label": { + "type": "JSExpression", + "value": "item.label" + }, + "value": { + "type": "JSExpression", + "value": "item.value" + } + } + } + ] + }, + { + "componentName": "TinySelect", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.conditionForm.searchTypeSelected", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "i18n", + "key": "crm.common.pleaseselect" + } + }, + "children": [ + { + "componentName": "TinyOption", + "props": { + "key": { + "type": "JSExpression", + "value": "item.value" + }, + "label": { + "type": "JSExpression", + "value": "item.label" + }, + "value": { + "type": "JSExpression", + "value": "item.value" + } + } + } + ] + }, + { + "componentName": "TinySearch", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.conditionForm.searchOpportunityValue", + "model": { + "prop": "" + } + }, + "placeholder": { + "type": "i18n", + "key": "crm.common.pleaseselect" + }, + "size": "mini", + "onSearch": { + "type": "JSExpression", + "value": "slotScope.searchOp.doSearch(this.state.conditionForm)" + } + } + }, + { + "componentName": "div", + "props": { + "className": "icon-wrap", + "onClick": { + "type": "JSExpression", + "value": "slotScope.searchOp.doSearch(this.state.conditionForm)" + } + }, + "children": [ + { + "componentName": "Icon", + "props": { + "name": "IconRefres" + } + } + ] + } + ] + } + ] + } + ] + } + ], + "id": "17ced631" + } + ] + } + ] + }, + { + "componentName": "div", + "id": "eab11119", + "props": { + "className": "form-title" + }, + "children": { + "type": "i18n", + "key": "quotes.basic_info.customer_info" + } + }, + { + "componentName": "div", + "id": "eab11121", + "props": { + "className": { + "type": "JSExpression", + "value": "['customer-info', {'form-fixed-layout': this.props.isFixed}, {'form-auto-layout': this.props.isAuto}]" + } + }, + "children": [ + { + "componentName": "TinyFormItem", + "id": "eab11122", + "props": { + "label": { + "type": "i18n", + "key": "quotes.quotelistmodal.customername" + } + }, + "children": [ + { + "componentName": "TinyInput", + "id": "eab11124", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.quotationInfo.customerName", + "model": { + "prop": "" + } + }, + "disabled": { + "type": "JSExpression", + "value": "this.state.customDisabled" + } + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": { + "name": "suffix" + } + }, + "children": [ + { + "componentName": "div", + "condition": { + "type": "JSExpression", + "value": "this.state.customerNameTrack?.customer_track_name" + }, + "props": { + "className": "tag-nomal" + }, + "children": [ + { + "componentName": "span", + "children": { + "type": "JSExpression", + "value": "this.state.customerNameTrack?.customer_track_name" + } + } + ], + "id": "ffadf00e" + } + ] + } + ] + } + ] + }, + { + "componentName": "TinyFormItem", + "id": "eab11123", + "props": { + "label": { + "type": "i18n", + "key": "quotes.quotelistmodal.amountnumber" + } + }, + "children": [ + { + "componentName": "TinyInput", + "id": "eab11125", + "props": { + "value": { + "type": "JSExpression", + "value": "this.state.quotationInfo.customAccount", + "model": { + "prop": "" + } + }, + "onBlur": { + "type": "JSExpression", + "value": "this.customAccountChange" + } + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": { + "name": "suffix" + } + }, + "children": [ + { + "componentName": "div", + "condition": { + "type": "JSExpression", + "value": "this.state.customerAcctNoTrack?.customer_track_name" + }, + "props": { + "className": "tag-nomal tag-success" + }, + "children": [ + { + "componentName": "span", + "children": { + "type": "JSExpression", + "value": "this.state.customerAcctNoTrack?.customer_track_name" + }, + "id": "264153c5" + } + ], + "id": "84b2f9c0" + } + ] + } + ] + }, + { + "componentName": "TinyAlert", + "condition": { + "type": "JSExpression", + "value": "this.state.validateInfo.acctNoInvalidError" + }, + "props": { + "type": "warning", + "description": { + "type": "JSExpression", + "value": "this.state.validateInfo.acctNoInvalidError" + } + }, + "id": "c7263fd2" + }, + { + "componentName": "TinyAlert", + "condition": { + "type": "JSExpression", + "value": "this.state.validateInfo.acctountNoResigteredTip" + }, + "props": { + "type": "warning", + "description": { + "type": "JSExpression", + "value": "state.validateInfo.acctountNoResigteredTip" + } + }, + "id": "fe165547" + } + ] + } + ] + } + ] + } + ] + } + ], + "type": "block", + "component": "CrmQuoteInfo", + "label": "CrmQuoteInfo", + "methods": {} +} diff --git a/packages/canvas/test/group.json b/packages/canvas/test/group.json new file mode 100644 index 000000000..914cba4c5 --- /dev/null +++ b/packages/canvas/test/group.json @@ -0,0 +1,99 @@ +{ + "componentName": "div", + "children": [ + { + "componentName": "TinyForm", + "props": { "labelWidth": 80, "labelPosition": "disabled" }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { "label": "人员" }, + "children": [ + { + "componentName": "TinyInput", + "props": { "placeholder": "请输入", "modelValue": "" }, + "id": "c3ec1fff" + } + ], + "id": "62717bc1" + }, + { + "componentName": "TinyFormItem", + "props": { "label": "密码" }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "type": "password" + }, + "id": "e1331c84" + } + ], + "id": "808159c9" + }, + { + "componentName": "TinyFormItem", + "props": { "label": "" }, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": { "marginRight": "10px" } + }, + "id": "01e8a1f3" + }, + { + "componentName": "TinyButton", + "props": { "text": "重置", "type": "primary" }, + "id": "7aecc5f4" + } + ], + "id": "41ecdb3d" + } + ], + "id": "b2341d0e" + }, + { + "componentName": "TinyTabs", + "props": { + "modelValue": "first" + }, + "children": [ + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页1", + "name": "first" + }, + "children": [ + { + "componentName": "div", + "id": "2e2bfde3" + } + ], + "id": "813aae66" + }, + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页2", + "name": "second" + }, + "children": [ + { + "componentName": "div", + "id": "295578a9" + } + ], + "id": "21873fc9" + } + ], + "id": "1f6e781f" + } + ], + "id": "root" +} diff --git a/packages/canvas/test/jsslot.json b/packages/canvas/test/jsslot.json new file mode 100644 index 000000000..8a6cf5b66 --- /dev/null +++ b/packages/canvas/test/jsslot.json @@ -0,0 +1,427 @@ +{ + "componentName": "Block", + "fileName": "CrmConsumeVoucherGrid", + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "isEdit", + "type": "Boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否编辑" + } + }, + "description": { + "zh_CN": "是否编辑配置项" + }, + "widget": { + "component": "MetaCodeEditor" + }, + "cols": 12, + "rules": [], + "required": true, + "handle": {} + }, + { + "property": "tableData", + "type": "Array", + "defaultValue": [ + { + "way": "test", + "_RID": "row_1" + } + ], + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "description": { + "zh_CN": "表格数据配置项" + }, + "widget": { + "component": "MetaCodeEditor" + }, + "cols": 12, + "rules": [], + "required": true, + "handle": {} + }, + { + "property": "options", + "type": "Array", + "defaultValue": [ + { + "value": "test" + } + ], + "label": { + "text": { + "zh_CN": "下拉框数据" + } + }, + "description": { + "zh_CN": "下拉框数据配置项" + }, + "widget": { + "component": "MetaCodeEditor" + }, + "cols": 12, + "rules": [], + "required": true, + "handle": {} + } + ] + } + ], + "lifeCycles": { + "setup": { + "type": "JSFunction", + "value": "function( props, context, vue, state ) {\r\n watch(()=>props.tableData, (value) => {state.tableData = value })\r\n}" + } + } + }, + "methods": { + "deleteData": { + "type": "JSFunction", + "value": "function deleteData(row) {\n this.utils.Modal.confirm({\n title: '提示',\n message: '您确定要删除吗?'\n }).then(res => {\n if (res === 'confirm') {\n this.$('gridRef').remove(row);\n }\n });\n}" + }, + "activeMethod": { + "type": "JSFunction", + "value": "function activeMethod() {\n return this.props.isEdit;\n}" + }, + "stepsChange": { + "type": "JSFunction", + "value": "function stepsChange(data) {\n console.log(data);\n this.emit('change', data);\n}" + }, + "strategySubTypeChange": { + "type": "JSFunction", + "value": "function strategySubTypeChange(row) {\n console.log(row);\n}" + } + }, + "children": [ + { + "componentName": "TinyGrid", + "props": { + "ref": "gridRef", + "className": "crm-consume-voucher-grid", + "edit-config": { + "type": "JSExpression", + "value": "this.{ trigger: 'click', mode: 'cell', showStatus: false, activeMethod }" + }, + "edit-rules": { + "type": "JSExpression", + "value": "this.state.validRules" + }, + "data": { + "type": "JSExpression", + "value": "this.state.tableData" + }, + "columns": { + "type": "JSExpression", + "value": "this.state.columns" + }, + "auto-resize": true + }, + "id": "ab110672" + } + ], + "blockName": "CrmConsumeVoucherGrid", + "state": { + "validRules": { + "interval": { + "required": true + }, + "way": { + "required": true + }, + "percent": { + "required": true + }, + "deadline": { + "required": true + } + }, + "tableData": { + "type": "JSExpression", + "value": "this.props.tableData" + }, + "columns": [ + { + "type": "index", + "title": { + "type": "i18n", + "key": "quotes.voucher.tier" + }, + "width": 80 + }, + { + "title": { + "type": "i18n", + "key": "quotes.voucher.consumption_interval" + }, + "field": "interval", + "slots": { + "default": { + "type": "JSSlot", + "params": ["row", "data", "seq", "rowIndex"], + "value": [ + { + "componentName": "ConsumptionRangeGrid", + "fileName": "ConsumptionRangeGrid", + "props": { + "isEdit": { + "type": "JSExpression", + "value": "this.props.isEdit" + }, + "tableData": { + "type": "JSExpression", + "value": "data" + }, + "seq": { + "type": "JSExpression", + "value": "seq" + }, + "rowIndex": { + "type": "JSExpression", + "value": "rowIndex" + }, + "rowData": { + "type": "JSExpression", + "value": "row" + }, + "onChange": { + "type": "JSExpression", + "value": "this.stepsChange" + } + }, + "id": "da20dae5" + } + ] + } + } + }, + { + "field": "strategySubType", + "title": { + "type": "i18n", + "key": "quotes.voucher.vouchertype" + }, + "showIcon": false, + "editor": { + "component": { + "type": "JSResource", + "value": "this.utils.Select" + }, + "type": { + "type": "JSExpression", + "value": "this.props.isEdit ? 'visible' : ''" + }, + "events": { + "change": { + "type": "JSExpression", + "value": "this.strategySubTypeChange" + } + }, + "attrs": { + "type": "JSExpression", + "value": "{ options: props.options, textField: 'name', valueField: 'valueId' }" + } + }, + "formatConfig": { + "data": { + "type": "JSExpression", + "value": "this.props.options" + }, + "label": "name", + "value": "valueId" + }, + "formatText": "enum" + }, + { + "title": { + "type": "i18n", + "key": "quotes.voucher.giveamount" + }, + "slots": { + "default": { + "type": "JSSlot", + "params": ["row"], + "value": [ + { + "componentName": "div", + "children": [ + { + "componentName": "TinyInput", + "props": { + "style": { + "type": "JSExpression", + "value": "props.isEdit ? 'display:inline-block' : 'display:none'" + }, + "value": { + "type": "JSExpression", + "value": "row.voucherSpec.amount", + "model": { + "prop": "" + } + }, + "disabled": { + "type": "JSExpression", + "value": "row.strategySubType === 1" + } + }, + "id": "d1c37157" + }, + { + "componentName": "span", + "props": { + "style": { + "type": "JSExpression", + "value": "props.isEdit ? 'display:none' : 'display:inline-block'" + } + }, + "children": { + "type": "JSExpression", + "value": "row.voucherSpec.amount" + }, + "id": "f4686ebb" + } + ], + "id": "7b588b12" + } + ] + } + }, + "field": "voucherSpec.amount", + "width": 120 + }, + { + "field": "percvoucherSpec.ratioent", + "title": { + "type": "i18n", + "key": "quotes.voucher.ratio" + }, + "showIcon": false, + "slots": { + "default": { + "type": "JSSlot", + "params": ["row"], + "value": [ + { + "componentName": "div", + "children": [ + { + "componentName": "TinyInput", + "props": { + "style": { + "type": "JSExpression", + "value": "props.isEdit ? 'display:inline-block' : 'display:none'" + }, + "value": { + "type": "JSExpression", + "value": "row.voucherSpec.ratio", + "model": { + "prop": "" + } + }, + "disabled": { + "type": "JSExpression", + "value": "row.strategySubType === 2" + }, + "size": "medium" + }, + "id": "d1c37157" + }, + { + "componentName": "span", + "props": { + "style": { + "type": "JSExpression", + "value": "props.isEdit ? 'display:none' : 'display:inline-block'" + } + }, + "children": { + "type": "JSExpression", + "value": "row.voucherSpec.ratio" + }, + "id": "f4686ebb" + } + ], + "id": "7b588b12" + } + ] + } + } + }, + { + "title": { + "type": "i18n", + "key": "quotes.voucher.validity_period_month" + }, + "field": "voucherSpec.validationPeriod", + "showIcon": false, + "editor": { + "component": "input", + "attrs": { + "disabled": true + }, + "type": { + "type": "JSExpression", + "value": "this.props.isEdit ? 'visible' : ''" + } + } + }, + { + "title": { + "type": "i18n", + "key": "quotes.quoteconfig.operate" + }, + "width": 100, + "slots": { + "default": { + "type": "JSSlot", + "params": ["row"], + "value": [ + { + "componentName": "span", + "props": { + "style": "color: #5285db,cursor: pointer", + "onClick": { + "type": "JSFunction", + "value": " ()=>{this.deleteData(row)}" + } + }, + "children": { + "type": "i18n", + "key": "quotes.voucher.voucher_modal_tip4" + }, + "id": "6d81ff9d" + } + ] + } + } + } + ] + }, + "lifeCycles": { + "setup": { + "type": "JSFunction", + "value": "function setup({ props, state, watchEffect }) {\r\n \r\n watchEffect(\r\n () => {\r\n this.state.tableData = props.tableData\r\n this.state.columns[2].editor.attrs.options = props.options;\r\n }\r\n )\r\n}" + } + } +} diff --git a/packages/canvas/vite.config.js b/packages/canvas/vite.config.js new file mode 100644 index 000000000..1f4a573a9 --- /dev/null +++ b/packages/canvas/vite.config.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import { terser } from 'rollup-plugin-terser' + +// https://vitejs.dev/config/ +export default defineConfig({ + resolve: { + alias: { + '@': path.resolve(__dirname, 'src') + } + }, + define: { + 'process.env': {} + }, + plugins: [ + vue({ + template: { + compilerOptions: { + isCustomElement: (tag) => tag.startsWith('tiny-i18n-host') + } + } + }), + vueJsx(), + { ...terser({ module: true }), enforce: 'post' }, + { + apply: 'build', + enforce: 'post', + generateBundle(_, bundle) { + const cssFileName = 'style.css' + const jsFileName = 'index.js' + const { [cssFileName]: cssBundle } = bundle + let IIFEcss = '' + + if (cssBundle) { + IIFEcss = `(function() {try {var elementStyle = document.createElement('style');elementStyle.innerText = ${JSON.stringify( + cssBundle.source + )};document.head.appendChild(elementStyle);} catch(error) {console.error(error, 'unable to concat style inside the bundled file')}})()` + delete bundle[cssFileName] + } + + bundle[jsFileName].code += IIFEcss + } + } + ], + publicDir: false, + build: { + cssCodeSplit: false, + lib: { + entry: path.resolve(__dirname, './src/index.js'), + name: 'canvas', + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + external: ['vue', '@vueuse/core', 'vue-i18n', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + }, + minify: true + } +}) diff --git a/packages/common/component/BindI18n.vue b/packages/common/component/BindI18n.vue new file mode 100644 index 000000000..9a93a2494 --- /dev/null +++ b/packages/common/component/BindI18n.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/packages/common/component/BlockDeployDialog.vue b/packages/common/component/BlockDeployDialog.vue new file mode 100644 index 000000000..f5aa6c96c --- /dev/null +++ b/packages/common/component/BlockDeployDialog.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/packages/common/component/BlockDescription.vue b/packages/common/component/BlockDescription.vue new file mode 100644 index 000000000..5bf96537b --- /dev/null +++ b/packages/common/component/BlockDescription.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/packages/common/component/BlockHistoryList.vue b/packages/common/component/BlockHistoryList.vue new file mode 100644 index 000000000..d34e119b3 --- /dev/null +++ b/packages/common/component/BlockHistoryList.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/packages/common/component/BlockHistoryTemplate.vue b/packages/common/component/BlockHistoryTemplate.vue new file mode 100644 index 000000000..7e7cbbbd3 --- /dev/null +++ b/packages/common/component/BlockHistoryTemplate.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/packages/common/component/BlockLinkEvent.vue b/packages/common/component/BlockLinkEvent.vue new file mode 100644 index 000000000..cfc162415 --- /dev/null +++ b/packages/common/component/BlockLinkEvent.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/packages/common/component/BlockLinkField.vue b/packages/common/component/BlockLinkField.vue new file mode 100644 index 000000000..95d2a2bb1 --- /dev/null +++ b/packages/common/component/BlockLinkField.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/packages/common/component/ButtonGroup.vue b/packages/common/component/ButtonGroup.vue new file mode 100644 index 000000000..81d65c995 --- /dev/null +++ b/packages/common/component/ButtonGroup.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/common/component/CloseIcon.vue b/packages/common/component/CloseIcon.vue new file mode 100644 index 000000000..c105b7586 --- /dev/null +++ b/packages/common/component/CloseIcon.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/packages/common/component/ConfigCollapse.vue b/packages/common/component/ConfigCollapse.vue new file mode 100644 index 000000000..1ba8b20e6 --- /dev/null +++ b/packages/common/component/ConfigCollapse.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/packages/common/component/ConfigGroup.vue b/packages/common/component/ConfigGroup.vue new file mode 100644 index 000000000..329959d17 --- /dev/null +++ b/packages/common/component/ConfigGroup.vue @@ -0,0 +1,59 @@ + + + diff --git a/packages/common/component/ConfigItem.vue b/packages/common/component/ConfigItem.vue new file mode 100644 index 000000000..c0fd195e7 --- /dev/null +++ b/packages/common/component/ConfigItem.vue @@ -0,0 +1,696 @@ + + + + + + + diff --git a/packages/common/component/ConfigRender.vue b/packages/common/component/ConfigRender.vue new file mode 100644 index 000000000..f7bd2b623 --- /dev/null +++ b/packages/common/component/ConfigRender.vue @@ -0,0 +1,101 @@ + + + diff --git a/packages/common/component/EmptyTip.vue b/packages/common/component/EmptyTip.vue new file mode 100644 index 000000000..8e72800e2 --- /dev/null +++ b/packages/common/component/EmptyTip.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/packages/common/component/LifeCycles.vue b/packages/common/component/LifeCycles.vue new file mode 100644 index 000000000..a608d0a81 --- /dev/null +++ b/packages/common/component/LifeCycles.vue @@ -0,0 +1,359 @@ + + + + + diff --git a/packages/common/component/LinkButton.vue b/packages/common/component/LinkButton.vue new file mode 100644 index 000000000..11a80d684 --- /dev/null +++ b/packages/common/component/LinkButton.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/packages/common/component/MaskModal.vue b/packages/common/component/MaskModal.vue new file mode 100644 index 000000000..60052764e --- /dev/null +++ b/packages/common/component/MaskModal.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/packages/common/component/MetaArrayItem.vue b/packages/common/component/MetaArrayItem.vue new file mode 100644 index 000000000..b6ea09ba0 --- /dev/null +++ b/packages/common/component/MetaArrayItem.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/packages/common/component/MetaBindI18n.vue b/packages/common/component/MetaBindI18n.vue new file mode 100644 index 000000000..dfe037717 --- /dev/null +++ b/packages/common/component/MetaBindI18n.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/packages/common/component/MetaBindVariable.vue b/packages/common/component/MetaBindVariable.vue new file mode 100644 index 000000000..970d4a456 --- /dev/null +++ b/packages/common/component/MetaBindVariable.vue @@ -0,0 +1,714 @@ + + + + + diff --git a/packages/common/component/MetaButtonGroup.vue b/packages/common/component/MetaButtonGroup.vue new file mode 100644 index 000000000..ca4dfa1a7 --- /dev/null +++ b/packages/common/component/MetaButtonGroup.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/packages/common/component/MetaCascader.vue b/packages/common/component/MetaCascader.vue new file mode 100644 index 000000000..519f859fb --- /dev/null +++ b/packages/common/component/MetaCascader.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/packages/common/component/MetaCheckBox.vue b/packages/common/component/MetaCheckBox.vue new file mode 100644 index 000000000..5dfcce81d --- /dev/null +++ b/packages/common/component/MetaCheckBox.vue @@ -0,0 +1,28 @@ + + + diff --git a/packages/common/component/MetaCheckboxGroup.vue b/packages/common/component/MetaCheckboxGroup.vue new file mode 100644 index 000000000..7d3c3bd17 --- /dev/null +++ b/packages/common/component/MetaCheckboxGroup.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/packages/common/component/MetaChildItem.vue b/packages/common/component/MetaChildItem.vue new file mode 100644 index 000000000..3c8a6a82e --- /dev/null +++ b/packages/common/component/MetaChildItem.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/packages/common/component/MetaCodeEditor.vue b/packages/common/component/MetaCodeEditor.vue new file mode 100644 index 000000000..85b2a2c3b --- /dev/null +++ b/packages/common/component/MetaCodeEditor.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/packages/common/component/MetaCodeEditorList.vue b/packages/common/component/MetaCodeEditorList.vue new file mode 100644 index 000000000..578a9c3f5 --- /dev/null +++ b/packages/common/component/MetaCodeEditorList.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/packages/common/component/MetaCollection.vue b/packages/common/component/MetaCollection.vue new file mode 100644 index 000000000..601709ff0 --- /dev/null +++ b/packages/common/component/MetaCollection.vue @@ -0,0 +1,94 @@ + + + + diff --git a/packages/common/component/MetaColor.vue b/packages/common/component/MetaColor.vue new file mode 100644 index 000000000..d1662a6f1 --- /dev/null +++ b/packages/common/component/MetaColor.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/packages/common/component/MetaContainer.vue b/packages/common/component/MetaContainer.vue new file mode 100644 index 000000000..be0e300b4 --- /dev/null +++ b/packages/common/component/MetaContainer.vue @@ -0,0 +1,102 @@ + + + diff --git a/packages/common/component/MetaDatePicker.vue b/packages/common/component/MetaDatePicker.vue new file mode 100644 index 000000000..e886607a0 --- /dev/null +++ b/packages/common/component/MetaDatePicker.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/common/component/MetaDescription.vue b/packages/common/component/MetaDescription.vue new file mode 100644 index 000000000..d6609e29a --- /dev/null +++ b/packages/common/component/MetaDescription.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/packages/common/component/MetaForm.vue b/packages/common/component/MetaForm.vue new file mode 100644 index 000000000..a2999ecc4 --- /dev/null +++ b/packages/common/component/MetaForm.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/packages/common/component/MetaGroupItem.vue b/packages/common/component/MetaGroupItem.vue new file mode 100644 index 000000000..6833289dd --- /dev/null +++ b/packages/common/component/MetaGroupItem.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/packages/common/component/MetaHtmlAttributes.vue b/packages/common/component/MetaHtmlAttributes.vue new file mode 100644 index 000000000..f98c7f3ba --- /dev/null +++ b/packages/common/component/MetaHtmlAttributes.vue @@ -0,0 +1,239 @@ + + + + diff --git a/packages/common/component/MetaHtmlText.vue b/packages/common/component/MetaHtmlText.vue new file mode 100644 index 000000000..bb8a28d39 --- /dev/null +++ b/packages/common/component/MetaHtmlText.vue @@ -0,0 +1,110 @@ + + + + diff --git a/packages/common/component/MetaInput.vue b/packages/common/component/MetaInput.vue new file mode 100644 index 000000000..f44e0bc9f --- /dev/null +++ b/packages/common/component/MetaInput.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/packages/common/component/MetaIpSection.vue b/packages/common/component/MetaIpSection.vue new file mode 100644 index 000000000..ebd738295 --- /dev/null +++ b/packages/common/component/MetaIpSection.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/packages/common/component/MetaJsSlot.vue b/packages/common/component/MetaJsSlot.vue new file mode 100644 index 000000000..87af9ae50 --- /dev/null +++ b/packages/common/component/MetaJsSlot.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/packages/common/component/MetaLayoutGrid.vue b/packages/common/component/MetaLayoutGrid.vue new file mode 100644 index 000000000..c8734f8d7 --- /dev/null +++ b/packages/common/component/MetaLayoutGrid.vue @@ -0,0 +1,336 @@ + + + + + diff --git a/packages/common/component/MetaList.vue b/packages/common/component/MetaList.vue new file mode 100644 index 000000000..f844b452b --- /dev/null +++ b/packages/common/component/MetaList.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/common/component/MetaListActions.vue b/packages/common/component/MetaListActions.vue new file mode 100644 index 000000000..2f77a0679 --- /dev/null +++ b/packages/common/component/MetaListActions.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/packages/common/component/MetaListItem.vue b/packages/common/component/MetaListItem.vue new file mode 100644 index 000000000..014dd3a48 --- /dev/null +++ b/packages/common/component/MetaListItem.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/packages/common/component/MetaListItems.vue b/packages/common/component/MetaListItems.vue new file mode 100644 index 000000000..92da0e008 --- /dev/null +++ b/packages/common/component/MetaListItems.vue @@ -0,0 +1,191 @@ + + + + diff --git a/packages/common/component/MetaListTitle.vue b/packages/common/component/MetaListTitle.vue new file mode 100644 index 000000000..c69e60c99 --- /dev/null +++ b/packages/common/component/MetaListTitle.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/common/component/MetaModal.vue b/packages/common/component/MetaModal.vue new file mode 100644 index 000000000..8bd2115b7 --- /dev/null +++ b/packages/common/component/MetaModal.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/packages/common/component/MetaModalItem.vue b/packages/common/component/MetaModalItem.vue new file mode 100644 index 000000000..e7343bb63 --- /dev/null +++ b/packages/common/component/MetaModalItem.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/packages/common/component/MetaNumber.md b/packages/common/component/MetaNumber.md new file mode 100644 index 000000000..4826bcdf7 --- /dev/null +++ b/packages/common/component/MetaNumber.md @@ -0,0 +1,41 @@ +# MetaNumber + +## 属性 + +addonAfter: 显示的单位 +showUnit: value 中是否显示单位 +units: 切换单位时单位列表 +selectedUnit: 选中的单位 +unitSelectWidth: select 框的宽度,默认 25px + +## 场景 + +### 组件单位显示场景 + +1. 值为数字类型,不需要单位,但在末尾需要显示默认的单位: + +```js +"addonAfter": "Mbit/s" +``` + +2. 组件值包含单位,为字符串类型: 如 '5Mbit/s' + +```js +"addonAfter": "Mbit/s" +"showUnit": true +``` + +3. 组件值包含单位,为字符串类型: 如 '5Mbit/s',也需要支持通过点击下拉列表切换单位: + +```js +// 不用配置addonAfter,如果配置了就是场景2 +"showUnit": true +"units": [ + { + "value": "Mbit/s", + "label": "Mbit/s" + } +], +"selectedUnit": "Mbit/s", +"unitSelectWidth": "60px" +``` diff --git a/packages/common/component/MetaNumber.vue b/packages/common/component/MetaNumber.vue new file mode 100644 index 000000000..cce0a68e5 --- /dev/null +++ b/packages/common/component/MetaNumber.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/packages/common/component/MetaPopover.vue b/packages/common/component/MetaPopover.vue new file mode 100644 index 000000000..d396c2f92 --- /dev/null +++ b/packages/common/component/MetaPopover.vue @@ -0,0 +1,43 @@ + + + diff --git a/packages/common/component/MetaRadio.vue b/packages/common/component/MetaRadio.vue new file mode 100644 index 000000000..0f2279b76 --- /dev/null +++ b/packages/common/component/MetaRadio.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/packages/common/component/MetaRadioGroup.vue b/packages/common/component/MetaRadioGroup.vue new file mode 100644 index 000000000..8655c71cf --- /dev/null +++ b/packages/common/component/MetaRadioGroup.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/packages/common/component/MetaRelatedColumns.vue b/packages/common/component/MetaRelatedColumns.vue new file mode 100644 index 000000000..38154ef97 --- /dev/null +++ b/packages/common/component/MetaRelatedColumns.vue @@ -0,0 +1,79 @@ + + + diff --git a/packages/common/component/MetaRelatedEditor.vue b/packages/common/component/MetaRelatedEditor.vue new file mode 100644 index 000000000..81d294123 --- /dev/null +++ b/packages/common/component/MetaRelatedEditor.vue @@ -0,0 +1,139 @@ + + + + diff --git a/packages/common/component/MetaSelect.vue b/packages/common/component/MetaSelect.vue new file mode 100644 index 000000000..d9a59b8f9 --- /dev/null +++ b/packages/common/component/MetaSelect.vue @@ -0,0 +1,122 @@ + + + + diff --git a/packages/common/component/MetaSelectIcon.vue b/packages/common/component/MetaSelectIcon.vue new file mode 100644 index 000000000..d428041cc --- /dev/null +++ b/packages/common/component/MetaSelectIcon.vue @@ -0,0 +1,176 @@ + + + + diff --git a/packages/common/component/MetaSlider.vue b/packages/common/component/MetaSlider.vue new file mode 100644 index 000000000..6fd6c6dc2 --- /dev/null +++ b/packages/common/component/MetaSlider.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/packages/common/component/MetaSlot.vue b/packages/common/component/MetaSlot.vue new file mode 100644 index 000000000..e13579638 --- /dev/null +++ b/packages/common/component/MetaSlot.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/packages/common/component/MetaSwitch.vue b/packages/common/component/MetaSwitch.vue new file mode 100644 index 000000000..afb8b15ba --- /dev/null +++ b/packages/common/component/MetaSwitch.vue @@ -0,0 +1,38 @@ + + + diff --git a/packages/common/component/MetaTableColumns.vue b/packages/common/component/MetaTableColumns.vue new file mode 100644 index 000000000..502335e77 --- /dev/null +++ b/packages/common/component/MetaTableColumns.vue @@ -0,0 +1,33 @@ + + + diff --git a/packages/common/component/MonacoEditor.vue b/packages/common/component/MonacoEditor.vue new file mode 100644 index 000000000..dadf83717 --- /dev/null +++ b/packages/common/component/MonacoEditor.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/packages/common/component/MultiTypeSelector.vue b/packages/common/component/MultiTypeSelector.vue new file mode 100644 index 000000000..8d7ebd199 --- /dev/null +++ b/packages/common/component/MultiTypeSelector.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/packages/common/component/Pane.vue b/packages/common/component/Pane.vue new file mode 100644 index 000000000..5bd379354 --- /dev/null +++ b/packages/common/component/Pane.vue @@ -0,0 +1,61 @@ + + + diff --git a/packages/common/component/PluginBlockList.vue b/packages/common/component/PluginBlockList.vue new file mode 100644 index 000000000..e4e6b25b4 --- /dev/null +++ b/packages/common/component/PluginBlockList.vue @@ -0,0 +1,735 @@ + + + + + + + diff --git a/packages/common/component/PluginPanel.vue b/packages/common/component/PluginPanel.vue new file mode 100644 index 000000000..7aa6b7358 --- /dev/null +++ b/packages/common/component/PluginPanel.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/packages/common/component/PluginSetting.vue b/packages/common/component/PluginSetting.vue new file mode 100644 index 000000000..cd622ed54 --- /dev/null +++ b/packages/common/component/PluginSetting.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/packages/common/component/ProgressBar.vue b/packages/common/component/ProgressBar.vue new file mode 100644 index 000000000..2c76153e0 --- /dev/null +++ b/packages/common/component/ProgressBar.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/packages/common/component/PublicIcon.vue b/packages/common/component/PublicIcon.vue new file mode 100644 index 000000000..4367175b1 --- /dev/null +++ b/packages/common/component/PublicIcon.vue @@ -0,0 +1,30 @@ + + + diff --git a/packages/common/component/SaveNewBlock.vue b/packages/common/component/SaveNewBlock.vue new file mode 100644 index 000000000..3ca22e1aa --- /dev/null +++ b/packages/common/component/SaveNewBlock.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/packages/common/component/SplitPanes.vue b/packages/common/component/SplitPanes.vue new file mode 100644 index 000000000..09e368cd4 --- /dev/null +++ b/packages/common/component/SplitPanes.vue @@ -0,0 +1,686 @@ + + + diff --git a/packages/common/component/SvgButton.vue b/packages/common/component/SvgButton.vue new file mode 100644 index 000000000..e46650d35 --- /dev/null +++ b/packages/common/component/SvgButton.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/packages/common/component/VideoGuide.vue b/packages/common/component/VideoGuide.vue new file mode 100644 index 000000000..825d9d19c --- /dev/null +++ b/packages/common/component/VideoGuide.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/packages/common/component/VueMonaco.vue b/packages/common/component/VueMonaco.vue new file mode 100644 index 000000000..d10244942 --- /dev/null +++ b/packages/common/component/VueMonaco.vue @@ -0,0 +1,196 @@ + + diff --git a/packages/common/i18n/en-us.json b/packages/common/i18n/en-us.json new file mode 100644 index 000000000..62a2d85aa --- /dev/null +++ b/packages/common/i18n/en-us.json @@ -0,0 +1,45 @@ +{ + "common": { + "required": "Mandatory", + "addParameter": "Add", + "deleteParameter": "Delete Parameter", + "selectParameter": "Select Input Parameter", + "parameterName": "Name", + "nameFormat": "Start with a letter and enter only letters, digits, underscores (_), and hyphens (-). Max. characters: 32.", + "description": "Description", + "parameterGroup": "Parameter Group", + "parameterType": "Data Type", + "initialValue": "Initial Value", + "allowEmpty": "Null Allowance", + "condition": "Constraint", + "constraintError": "If either Constraint or Error Message is specified, the other is mandatory.", + "errorTip": "Error Message", + "inputValue": "Enter a value.", + "inputConstraint": "Enter a constraint.", + "inputMessage": "Enter an error message.", + "inputParamName": "Enter a name.", + "inputDescription": "Enter a description.", + "proposal": "Recommended CIDR blocks:", + "selectAParameter": "--Select--", + "typeErrorTip": "The data type of {property} is {type}. Select the same data type.", + "selectParam": "Parameter", + "confirm": "Confirm", + "ok": "OK", + "cancel": "Cancel", + "string": "String", + "number": "Number", + "boolean": "Boolean", + "select": "Select", + "format": "Format", + "save": "Save", + "close": "Close", + "commonParam": "Plain Parameter", + "encryptionParam": "Encrypted Parameter", + "createCommon": "Create Plain Parameter", + "passwordTip1": "Sensitive. Plaintext is risky. You are advised to click ", + "passwordTip2": " to add an encrypted parameter to configure the value.", + "createEncryption": "Create Encrypted Parameter", + "expandExample": "Show Example", + "collapseExample": "Hide Example" + } +} diff --git a/packages/common/i18n/zh-cn.json b/packages/common/i18n/zh-cn.json new file mode 100644 index 000000000..a1d40dbd7 --- /dev/null +++ b/packages/common/i18n/zh-cn.json @@ -0,0 +1,45 @@ +{ + "common": { + "required": "必填", + "addParameter": "添加参数", + "deleteParameter": "删除参数", + "selectParameter": "选择输入参数", + "parameterName": "参数名称", + "nameFormat": "大小写字母开头,大小写字母、数字、连线符、下划线组成,长度为1-32", + "description": "描述", + "parameterGroup": "参数分类", + "parameterType": "参数类型", + "initialValue": "初始值", + "allowEmpty": "允许空值", + "condition": "约束条件", + "constraintError": "约束条件与失败提示必须同时存在", + "errorTip": "失败提示", + "inputValue": "请输入值", + "inputConstraint": "请输入值", + "inputMessage": "请输入值", + "inputParamName": "请输入参数名称", + "inputDescription": "请输入描述", + "selectAParameter": "请选择参数", + "proposal": "建议使用网段:", + "typeErrorTip": "{property}的参数类型为{type},请选择相同的参数类型!", + "selectParam": "选择参数", + "confirm": "确认", + "ok": "确定", + "cancel": "取消", + "string": "字符串", + "number": "整数", + "boolean": "布尔值", + "select": "选择", + "format": "格式化", + "save": "保存", + "close": "关闭", + "commonParam": "普通参数", + "encryptionParam": "加密参数", + "createCommon": "创建普通参数", + "passwordTip1": "密码属敏感数据,输入明文有一定安全风险,建议点击", + "passwordTip2": "通过加密参数来配置密码数据。", + "createEncryption": "创建加密参数", + "expandExample": "展开示例", + "collapseExample": "收起示例" + } +} diff --git a/packages/common/index.js b/packages/common/index.js new file mode 100644 index 000000000..cab3818fe --- /dev/null +++ b/packages/common/index.js @@ -0,0 +1,210 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import PluginSetting from './component/PluginSetting.vue' +import PluginPanel from './component/PluginPanel.vue' +import SvgButton from './component/SvgButton.vue' +import LinkButton from './component/LinkButton.vue' + +import ConfigCollapse from './component/ConfigCollapse.vue' +import ConfigGroup from './component/ConfigGroup.vue' +import ConfigItem from './component/ConfigItem.vue' +import ConfigRender from './component/ConfigRender.vue' + +import MetaArrayItem from './component/MetaArrayItem.vue' +import MetaBindI18n from './component/MetaBindI18n.vue' +import MetaBindVariable from './component/MetaBindVariable.vue' +import MetaCascader from './component/MetaCascader.vue' +import MetaCheckBox from './component/MetaCheckBox.vue' +import MetaCodeEditor from './component/MetaCodeEditor.vue' +import MetaCodeEditorList from './component/MetaCodeEditorList.vue' +import MetaCollection from './component/MetaCollection.vue' +import MetaColor from './component/MetaColor.vue' +import MetaDatePicker from './component/MetaDatePicker.vue' +import MetaDescription from './component/MetaDescription.vue' +import MetaForm from './component/MetaForm.vue' +import MetaGroupItem from './component/MetaGroupItem.vue' +import MetaInput from './component/MetaInput.vue' +import MetaLayoutGrid from './component/MetaLayoutGrid.vue' +import MetaList from './component/MetaList.vue' +import MetaListTitle from './component/MetaListTitle.vue' +import MetaListActions from './component/MetaListActions.vue' +import MetaListItems from './component/MetaListItems.vue' +import MetaListItem from './component/MetaListItem.vue' +import MetaModal, { useModal } from './component/MetaModal.vue' +import MetaNumber from './component/MetaNumber.vue' +import MetaPopover from './component/MetaPopover.vue' +import MetaRadio from './component/MetaRadio.vue' +import MetaSelect from './component/MetaSelect.vue' +import MetaSelectIcon from './component/MetaSelectIcon.vue' +import MetaSlider from './component/MetaSlider.vue' +import MetaSwitch from './component/MetaSwitch.vue' +import MetaContainer from './component/MetaContainer.vue' +import MetaJsSlot from './component/MetaJsSlot.vue' +import MetaSlot from './component/MetaSlot.vue' +import MetaHtmlText from './component/MetaHtmlText.vue' +import MetaHtmlAttributes from './component/MetaHtmlAttributes.vue' +import MetaRadioGroup from './component/MetaRadioGroup.vue' +import MetaCheckboxGroup from './component/MetaCheckboxGroup.vue' +import MetaIpSection from './component/MetaIpSection.vue' +import VideoGuide from './component/VideoGuide.vue' +import MonacoEditor from './component/MonacoEditor.vue' +import BlockHistoryList from './component/BlockHistoryList.vue' +import BlockHistoryTemplate from './component/BlockHistoryTemplate.vue' +import BlockLinkField from './component/BlockLinkField.vue' +import BlockLinkEvent from './component/BlockLinkEvent.vue' +import BlockDescription from './component/BlockDescription.vue' +import PluginBlockList from './component/PluginBlockList.vue' +import ButtonGroup from './component/ButtonGroup.vue' +import CloseIcon from './component/CloseIcon.vue' +import LifeCycles from './component/LifeCycles.vue' +import EmptyTip from './component/EmptyTip.vue' +import MaskModal from './component/MaskModal.vue' +import VueMonaco from './component/VueMonaco.vue' +import PublicIcon from './component/PublicIcon.vue' +import SaveNewBlock from './component/SaveNewBlock.vue' +import BindI18n from './component/BindI18n.vue' +import MetaRelatedEditor from './component/MetaRelatedEditor.vue' +import MetaRelatedColumns from './component/MetaRelatedColumns.vue' +import BlockDeployDialog from './component/BlockDeployDialog.vue' +import ProgressBar from './component/ProgressBar.vue' +import MetaButtonGroup from './component/MetaButtonGroup.vue' +import MetaTableColumns from './component/MetaTableColumns.vue' + +import i18n, { i18nKeyMaps } from '@opentiny/tiny-engine-controller/js/i18n' + +import enUs from './i18n/en-us.json' +import zhCn from './i18n/zh-cn.json' + +const { mergeLocaleMessage } = i18n.global + +mergeLocaleMessage(i18nKeyMaps.enUS, enUs) +mergeLocaleMessage(i18nKeyMaps.zhCN, zhCn) + +const globalComponents = { + SaveNewBlock, + ConfigGroup, + ConfigItem +} + +export const injectGlobalComponents = { + install: (app) => { + Object.entries(globalComponents).forEach(([name, component]) => { + app.component(name, component) + }) + } +} + +export const MetaComponents = { + MetaArrayItem, + MetaBindI18n, + MetaBindVariable, + MetaButtonGroup, + MetaCheckBox, + MetaCascader, + MetaCodeEditor, + MetaCodeEditorList, + MetaColor, + MetaDatePicker, + MetaDescription, + MetaGroupItem, + MetaInput, + MetaLayoutGrid, + MetaList, + MetaModal, + MetaNumber, + MetaNumeric: MetaNumber, + MetaPopover, + MetaRadio, + MetaSelect, + MetaSelectIcon, + MetaSlider, + MetaSwitch, + MetaListTitle, + MetaListActions, + MetaListItems, + MetaListItem, + MetaForm, + MetaCollection, + MetaContainer, + MetaJsSlot, + MetaSlot, + MetaHtmlText, + MetaHtmlAttributes, + MetaRadioGroup, + MetaCheckboxGroup, + MetaIpSection, + MetaRelatedEditor, + MetaRelatedColumns, + MetaTableColumns +} + +export { + MetaBindI18n, + MetaBindVariable, + MetaCheckBox, + MetaCodeEditor, + MetaCodeEditorList, + MetaColor, + MetaDatePicker, + MetaDescription, + MetaInput, + MetaList, + MetaModal, + MetaNumber, + MetaPopover, + MetaRadio, + MetaSelect, + MetaSelectIcon, + MetaSlider, + MetaSwitch, + MetaListTitle, + MetaListActions, + MetaListItems, + MetaListItem, + MetaJsSlot, + MetaSlot, + MetaHtmlText, + MetaForm, + ConfigCollapse, + ConfigGroup, + ConfigItem, + ConfigRender, + useModal, + PluginSetting, + PluginPanel, + VideoGuide, + SvgButton, + LinkButton, + BlockHistoryList, + BlockHistoryTemplate, + BlockLinkField, + BlockLinkEvent, + BlockDescription, + PluginBlockList, + MetaCollection, + ButtonGroup, + CloseIcon, + LifeCycles, + EmptyTip, + MetaContainer, + MonacoEditor, + MaskModal, + MetaHtmlAttributes, + VueMonaco, + PublicIcon, + SaveNewBlock, + BindI18n, + BlockDeployDialog, + ProgressBar, + MetaTableColumns +} diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 000000000..1c7016030 --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,50 @@ +{ + "name": "@opentiny/tiny-engine-common", + "version": "1.0.2", + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "vite build" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "exports": { + ".": "./dist/index.js" + }, + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/common" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@opentiny/tiny-engine-canvas": "workspace:*", + "@opentiny/tiny-engine-controller": "workspace:*", + "@opentiny/tiny-engine-http": "workspace:*", + "@opentiny/tiny-engine-utils": "workspace:*", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", + "@vue/shared": "^3.3.4", + "monaco-editor": "0.33.0", + "prettier": "2.7.1", + "vue-draggable-next": "2.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "vite": "^4.3.7" + }, + "peerDependencies": { + "vue": "^3.4.15" + } +} diff --git a/packages/common/vite.config.js b/packages/common/vite.config.js new file mode 100644 index 000000000..fbd436ce0 --- /dev/null +++ b/packages/common/vite.config.js @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + resolve: {}, + define: { + 'process.env': {} + }, + build: { + cssCodeSplit: false, + lib: { + entry: { + index: path.resolve(__dirname, './index.js') + }, + name: 'common', + fileName: (format, entryName) => `${entryName}.js`, + formats: ['es'] + }, + rollupOptions: { + output: { + banner: (chunk) => { + if (chunk.name === 'index') { + return 'import "./style.css"' + } + + return '' + } + }, + external: ['vue', 'monaco-editor', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/, /^prettier.*/] + } + } +}) diff --git a/packages/controller/adapter.js b/packages/controller/adapter.js new file mode 100644 index 000000000..403b66e08 --- /dev/null +++ b/packages/controller/adapter.js @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { toRaw } from 'vue' +import { getGlobalConfig } from './src/globalConfig' + +/** + * 将画布pageSchema对象转换成编辑器中的string + * + * @param {*} obj + * @returns + */ +export const obj2String = (obj) => { + let out = null + + try { + out = JSON.stringify(toRaw(obj), null, 2) + } catch (error) { + // do nothing + } + + return out +} + +/** + * 将编辑器中的string转换成画布识别的pageSchema对象 + * @param {*} string + * @returns + */ + +export const string2Obj = (string) => { + let obj = null + + try { + obj = JSON.parse(string) + } catch (error) { + // do nothing + } + + return obj +} + +/** + * 判断 Monaco 编辑器背景色的主题 + * @returns + */ + +export const theme = () => { + const theme = getGlobalConfig()?.theme?.includes('dark') ? 'vs-dark' : 'vs' + + return theme +} diff --git a/packages/controller/js/app.js b/packages/controller/js/app.js new file mode 100644 index 000000000..9d2383f48 --- /dev/null +++ b/packages/controller/js/app.js @@ -0,0 +1,22 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export const EXTEND_CONFIG = { + TYPE: { + CONSOLE: 'console', + MOBILE: 'mobile', + BUG_SCREEN: 'bigScreen', + PRICE_CALCULATOR: 'priceCalculator', + TAIHU: 'taihu', + COMMON: 'common' + } +} diff --git a/packages/controller/js/ast.js b/packages/controller/js/ast.js new file mode 100644 index 000000000..18026c0de --- /dev/null +++ b/packages/controller/js/ast.js @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { parse, parseExpression } from '@babel/parser' +import generate from '@babel/generator' +import traverse from '@babel/traverse' +import prettier from 'prettier' +import parserHtml from 'prettier/parser-html' +import parseCss from 'prettier/parser-postcss' +import parserBabel from 'prettier/parser-babel' + +const METHOD_REGEXP = /function.*?\(/ + +export const insertName = (name, content) => content.replace(METHOD_REGEXP, `function ${name}(`) + +export const removeName = (content) => content.replace(METHOD_REGEXP, 'function (') + +export const string2Ast = (string = '') => parse(string, { sourceType: 'module', plugins: ['typescript', 'jsx'] }) + +export const ast2String = (ast) => generate(ast, { retainLines: true }).code + +const formatScript = (string) => { + let newStr = string + const options = { + parser: 'babel', + plugins: [parserBabel], + printWidth: 120, + singleQuote: true, + semi: false, + trailingComma: 'none' + } + try { + // 低码中的编辑器大多只会输入js值,并不是一个完整的javascript表达式,无法格式化,因此需要特殊处理预格式化该种情形 + newStr = prettier.format(`!${string}`, options).substring(1).replace(/\n$/, '') + } catch (error) { + newStr = prettier.format(newStr, options) + } + + return newStr +} + +const formatJson = (string) => + prettier.format(string, { + parser: 'json', + plugins: [parserBabel], + trailingComma: 'es5', + tabWidth: 2, + semi: false, + singleQuote: true + }) + +const formatHtml = (string) => + prettier.format(string, { + parser: 'html', + plugins: [parserBabel, parserHtml] + }) + +const formatCss = (string) => + prettier.format(string, { + parser: 'css', + plugins: [parseCss] + }) + +const formatterMap = { + json: formatJson, + typescript: formatScript, + javascript: formatScript, + html: formatHtml, + css: formatCss +} + +export const formatString = (str, language) => { + const formatter = formatterMap[language] || formatJson + let result = str + try { + result = formatter(str) + } catch (error) { + const printer = console + printer.log(error) + } + + return result +} + +export { parse, parseExpression, traverse, generate } + +export const includedExpression = (code, expression) => { + let flag = false + try { + traverse(parse(code), { + ExpressionStatement(path) { + if (path.toString().includes(expression)) { + flag = true + + return + } + } + }) + } catch (err) { + const printer = console + printer.log(err) + } + + return flag +} + +export const includedExpressionInSchema = (schemaObj, expression) => { + let hadFlag = false + + const checkReferencedFromSchema = (_schemaObj) => { + Object.values(_schemaObj).forEach((schemaObjIner) => { + if ( + ['[object Array]', '[object Object]'].includes(Object.prototype.toString.call(schemaObjIner)) && + Object.keys(schemaObjIner).length + ) { + if (schemaObjIner.type && ['jsstring', 'JSExpression', 'JSFunction'].includes(schemaObjIner.type)) { + if (includedExpression(schemaObjIner.value, expression)) { + hadFlag = true + + return + } + } else { + checkReferencedFromSchema(schemaObjIner) + } + } + }) + } + + checkReferencedFromSchema(schemaObj) + + return hadFlag +} + +export const findExpressionInAppSchema = (pageSchemas, expression) => { + const includedPage = [] + + pageSchemas.forEach((pageSchema) => { + if (includedExpressionInSchema(pageSchema, expression)) { + includedPage.push(pageSchema.fileName) + } + }) + + return includedPage +} diff --git a/packages/controller/js/canvas.js b/packages/controller/js/canvas.js new file mode 100644 index 000000000..c73f81c94 --- /dev/null +++ b/packages/controller/js/canvas.js @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { PAGE_STATUS } from './constants' +import useEditorInfo from '../src/useEditorInfo' +import useResource from '../src/useResource' + +export const getCanvasStatus = (data) => { + // 写死ID 待删除 + let isDemo = useResource().resState.isDemo + const { resetPasswordToken } = useEditorInfo().userInfo + + if (isDemo && [PAGE_STATUS.Developer, PAGE_STATUS.SuperAdmin].includes(resetPasswordToken)) { + isDemo = false + } + + let state = '' + + if (isDemo) { + state = PAGE_STATUS.Guest + } else if (!data) { + state = PAGE_STATUS.Release + } else { + state = useEditorInfo().userInfo.id === data.id ? PAGE_STATUS.Occupy : PAGE_STATUS.Lock + } + + return { + state, + data + } +} diff --git a/packages/controller/js/completion.js b/packages/controller/js/completion.js new file mode 100644 index 000000000..ddd113870 --- /dev/null +++ b/packages/controller/js/completion.js @@ -0,0 +1,206 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import useCanvas from '../src/useCanvas' +import useResource from '../src/useResource' + +const keyWords = [ + 'state', + 'stores', + 'props', + 'emit', + 'setState', + 'route', + 'i18n', + 'getLocale', + 'setLocale', + 'history', + 'utils', + 'bridge', + 'dataSourceMap' +] + +const snippets = [ + { + lable: 'new function', + type: 'Function', + insertText: `function \${1:funName} (\${2}) { + \${3} +}`, + detail: 'create new function' + } +] + +const TYPES = { + KeyWord: 'KeyWord', + Function: 'Function', + Method: 'Method', + Value: 'Value', + Variable: 'Variable' +} + +const getApiSuggestions = (monaco, range, wordContent) => + keyWords + .map((item) => ({ + label: `this.${item}`, + kind: monaco.languages.CompletionItemKind.Keyword, + insertText: `this.${item}`, + detail: `Lowcode API`, + range + })) + .filter(({ insertText }) => insertText.indexOf(wordContent) === 0) + +const getSnippetsSuggestions = (monaco, range, wordContent) => + snippets + .map((item) => ({ + label: item.lable, + insertText: item.insertText, + detail: item.detail, + kind: monaco.languages.CompletionItemKind[item.type], + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + })) + .filter(({ insertText }) => insertText.indexOf(wordContent) === 0) + +const getUserWords = () => { + const { bridge = [], dataSource = [], utils = [], globalState = [] } = useResource().resState + + return { + state: { + type: TYPES.Variable, + getInsertText: (value) => `this.state.${value}`, + data: Object.keys(useCanvas().getPageSchema().state || {}) + }, + stores: { + type: TYPES.Variable, + getInsertText: (value) => `this.stores.${value}`, + data: globalState + .filter((item) => item.id) + .map((item) => [ + item.id, + ...[...Object.keys(item.state), ...Object.keys(item.getters)].map((name) => `${item.id}.${name}`) + ]) + .flat() + }, + storeFn: { + type: TYPES.Method, + getInsertText: (value) => `this.stores.${value}()`, + data: globalState + .filter((item) => item.id) + .map((item) => Object.keys(item.actions).map((name) => `${item.id}.${name}`)) + .flat() + }, + utils: { + type: TYPES.Variable, + getInsertText: (value) => `this.utils.${value}`, + data: utils.map((item) => item.name) + }, + dataSource: { + type: TYPES.Method, + getInsertText: (value) => `this.dataSourceMap.${value}.load()`, + data: dataSource.map((item) => item.name) + }, + bridge: { + type: TYPES.Variable, + getInsertText: (value) => `this.bridge.${value}`, + data: bridge.map((item) => item.name) + } + } +} + +const getUserSuggestions = (monaco, range, wordContent) => { + const userWords = getUserWords() + + return Object.entries(userWords) + .map(([_itemKey, itemContent]) => + itemContent.data.map((item) => ({ + kind: monaco.languages.CompletionItemKind[itemContent.type], + label: itemContent.getInsertText(item), + insertText: itemContent.getInsertText(item), + detail: `Lowcode API`, + range + })) + ) + .flat() + .filter(({ insertText }) => insertText.indexOf(wordContent) === 0) +} + +const getCurrentChar = (model, position) => { + const currentChar = model.getValueInRange({ + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: position.column - 1, + endColumn: position.column + }) + + return { word: currentChar, startColumn: position.column - 1, endColumn: position.column } +} + +const getWords = (model, position) => { + const words = [] + + const currentWord = model.getWordUntilPosition(position).word + ? model.getWordAtPosition(position) + : getCurrentChar(model, position) + words.push(currentWord) + + const lastPosition = { ...position, column: currentWord.startColumn } + while (lastPosition.column > 1) { + const lastWord = model.getWordUntilPosition(lastPosition).word + ? model.getWordUntilPosition(lastPosition) + : getCurrentChar(model, lastPosition) + if (!/[\w.]/.test(lastWord.word)) break + words.push(lastWord) + lastPosition.column = lastWord.startColumn + } + + return words.reverse() +} + +const getRange = (position, words) => ({ + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: words[0].startColumn, + endColumn: words[words.length - 1].endColumn +}) + +export const initCompletion = (monacoInstance, editorModel, conditionFn) => { + const completionItemProvider = { + provideCompletionItems(model, position, _context, _token) { + if (editorModel && model.id !== editorModel.id) { + return { + suggestions: [] + } + } + const words = getWords(model, position) + const wordContent = words.map((item) => item.word).join('') + const range = getRange(position, words) + + // 内置 API 提示 e.g. this.state/props/utils/... + const apiSuggestions = getApiSuggestions(monacoInstance, range, wordContent) + // 代码片段提示 e.g. create new function + const snippetSuggestions = getSnippetsSuggestions(monacoInstance, range, wordContent) + // 用户变量数据提示 e.g. this.dataSourceMap.xxx.load() + const userSuggestions = getUserSuggestions(monacoInstance, range, wordContent) + return { + suggestions: [...apiSuggestions, ...snippetSuggestions, ...userSuggestions].filter((item) => + conditionFn ? conditionFn(item) : true + ) + } + }, + triggerCharacters: ['.'] + } + + return ['javascript', 'typescript'].map((lang) => + monacoInstance.languages.registerCompletionItemProvider(lang, completionItemProvider) + ) +} diff --git a/packages/controller/js/constants.js b/packages/controller/js/constants.js new file mode 100644 index 000000000..5b9a76cb7 --- /dev/null +++ b/packages/controller/js/constants.js @@ -0,0 +1,78 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export const COMPONENT_NAME = { + Page: 'Page', + Block: 'Block', + Folder: 'Folder' +} + +export const ELEMENT_TAG = { + Body: 'body', + Div: 'div' +} + +export const SCHEMA_DATA_TYPE = { + JSFunction: 'JSFunction', + JSExpression: 'JSExpression', + I18n: 'i18n' +} + +export const PAGE_STATUS = { + Release: 'release', + Occupy: 'occupy', + Lock: 'lock', + Guest: 'guest', + Empty: 'empty', + SuperAdmin: 'p_webcenter', + Developer: 'developer' +} + +export const BLOCK_OPENNESS = { + Private: 0, + Open: 1, + Special: 2 +} + +export const BROADCAST_CHANNEL = { + CanvasLang: 'tiny-lowcode-canvas-lang', + Notify: 'global-notify', + AppType: 'app-type' +} + +export const TYPES = { + ErrorType: 'error', + ObjectType: 'object', + RegExpType: 'regExp', + DateType: 'date', + ArrayType: 'array', + FunctionType: 'function', + StringType: 'string', + NumberType: 'number', + BooleanType: 'boolean' +} + +export const DEFAULT_LOOP_NAME = { + INDEX: 'index', + ITEM: 'item' +} + +export const HOST_TYPE = { + App: 'app', + Block: 'block' +} + +// תʻӳϵ +export const i18nKeyMaps = { + zhCN: 'zh_CN', + enUS: 'en_US' +} diff --git a/packages/controller/js/css.js b/packages/controller/js/css.js new file mode 100644 index 000000000..e00ea3b00 --- /dev/null +++ b/packages/controller/js/css.js @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import * as cssTree from 'css-tree' +import { hyphenate } from '../utils' + +/** + * 传入 css 字符串,得到以选择器为 Key,css 规则为 value 的 object + * 传入示例:.test { background-color: deepskyblue; } .test.link { background-color: deeppink; } .test-text { color: #fff; } + * 返回示例 { ".test": "background-color:deepskyblue"; ".test-text": "color:#fff"; ".test.link": "background-color:deeppink" } + * @param {string} styleStr css 字符串 + * @returns object { [string]: string } + */ +export const getCssObjectFromStyleStr = (styleStr) => { + const ast = cssTree.parse(styleStr) + const cssObject = {} + + ast.children + .filter(({ type }) => type === 'Rule') + .forEach((item) => { + const matchCode = cssTree.generate(item).match(/^(.+){(.+)}$/) + + if (!matchCode) { + return + } + + const [_, selector, code] = matchCode + + cssObject[selector] = code + }) + + return cssObject +} + +export const styleStrAddRoot = (str = '') => { + return `:root { ${str}\n}` +} + +export const obj2StyleStr = (obj = {}, addRoot = true) => { + const list = Object.entries(obj).map(([key, value]) => (value ? `${hyphenate(key)}: ${value};` : '')) + + return addRoot ? styleStrAddRoot(list.join('\n ')) : ` { \n ${list.join('\n ')} \n}` +} diff --git a/packages/controller/js/environments.js b/packages/controller/js/environments.js new file mode 100644 index 000000000..9da87a6cf --- /dev/null +++ b/packages/controller/js/environments.js @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export const MODE = import.meta.env.MODE +export const PROD = import.meta.env.PROD +export const BASE_URL = import.meta.env.BASE_URL +export const VITE_ORIGIN = import.meta.env.VITE_ORIGIN +export const VITE_API_MOCK = import.meta.env.VITE_API_MOCK +export const VITE_CDN_DOMAIN = import.meta.env.VITE_CDN_DOMAIN + +export const isMock = VITE_API_MOCK === 'mock' + +export const isVsCodeEnv = window.vscodeBridge + +export const isDevelopEnv = MODE?.includes('dev') + +export const isAlphaEnv = MODE?.includes('alpha') + +export const isProdEnv = MODE?.includes('prod') diff --git a/packages/controller/js/http.js b/packages/controller/js/http.js new file mode 100644 index 000000000..28446e572 --- /dev/null +++ b/packages/controller/js/http.js @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { useHttp } from '@opentiny/tiny-engine-http' +import usePage from '../src/usePage' +import useCanvas from '../src/useCanvas' +import useNotify from '../src/useNotify' +import { isVsCodeEnv } from './environments' +import { generateRouter, generatePage } from './vscodeGenerateFile' + +const http = useHttp() + +/** + * 异常情况埋点上传 + * @param { json } params {"event_type": design_error,"url": "elit in reprehenderit enim incididunt" } + * @returns { Promise } + */ +export const requestEvent = (url, params) => http.post(url, params).catch(() => {}) + +/** + * 页面更新 + * @param { string } pageId 页面ID + * @param { json } params 页面信息 + * @returns { Promise } + * + */ +export const handlePageUpdate = (pageId, params, routerChange) => { + return http + .post(`/app-center/api/pages/update/${pageId}`, params) + .then((res) => { + const { pageSettingState } = usePage() + const { setSaved } = useCanvas() + if (isVsCodeEnv) { + generatePage({ + id: pageId, + name: params.name, + page_content: params.page_content + }) + + if (routerChange) { + generateRouter({ + pageId, + componentsTree: params + }) + } + } + + if (routerChange) { + pageSettingState.updateTreeData() + } + pageSettingState.isNew = false + useNotify({ message: '保存成功!', type: 'success' }) + + // 更新 页面状态 标志 + setSaved(true) + return res + }) + .catch((err) => { + useNotify({ title: '保存失败', message: `${err?.message || ''}`, type: 'error' }) + }) +} diff --git a/packages/controller/js/i18n.js b/packages/controller/js/i18n.js new file mode 100644 index 000000000..cd7163024 --- /dev/null +++ b/packages/controller/js/i18n.js @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { createI18n, I18nInjectionKey } from 'vue-i18n' +import i18n, { defineCustomI18n } from '@opentiny/tiny-engine-i18n-host' +import tinyLocale from '@opentiny/vue-locale' +import { i18nKeyMaps } from './constants' + +// 此处处理TinyVue组件库的国际化zhCN --> zh_CN +const customCreateI18n = ({ locale, messages }) => { + const newMessages = {} + Object.keys(messages).forEach((key) => { + const lang = i18nKeyMaps[key] + newMessages[lang] = messages[key] + }) + + return createI18n({ + locale, + messages: newMessages, + legacy: false + }) +} + +const customI18n = tinyLocale.initI18n({ + i18n: { locale: i18nKeyMaps.zhCN }, + createI18n: customCreateI18n, + messages: {} +}) + +// 合并组件库的i18n配置 +defineCustomI18n(customI18n) + +export { I18nInjectionKey, i18nKeyMaps } + +// i18n对象可以多处使用。模板中直接使用$t,setup环境或普通环境中可以引入后使用i18n.global.t +export default i18n diff --git a/packages/controller/js/linter.js b/packages/controller/js/linter.js new file mode 100644 index 000000000..14e9e7edb --- /dev/null +++ b/packages/controller/js/linter.js @@ -0,0 +1,58 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { PROD, BASE_URL } from './environments' + +export const initLinter = (editor, monacoInstance, state) => { + let workerUrl = `${BASE_URL}monaco-linter/eslint.worker.js` + + // 线上环境,存在 worker 资源跨域的情况 + if (PROD) { + const workerBlob = new Blob([`importScripts('${workerUrl}');`], { type: 'application/javascript' }) + workerUrl = window.URL.createObjectURL(workerBlob) + } + + const worker = new Worker(workerUrl) + + // 监听 ESLint web worker 的返回 + worker.onmessage = function (event) { + const { markers, version } = event.data + const model = editor.getModel() + + state.hasError = markers.filter(({ severity }) => severity === 'Error').length > 0 + + // 判断当前 model 的 versionId 与请求时是否一致 + if (model && model.getVersionId() === version) { + monacoInstance.editor.setModelMarkers(model, 'ESLint', markers) + } + } + + return worker +} + +let timer = null + +export const lint = (model, worker) => { + if (timer) { + clearTimeout(timer) + } + + // 防抖处理 + timer = setTimeout(() => { + timer = null + worker.postMessage({ + code: model.getValue(), + // 发起 ESLint 静态检查时,携带 versionId + version: model.getVersionId() + }) + }, 500) +} diff --git a/packages/controller/js/monitor.js b/packages/controller/js/monitor.js new file mode 100644 index 000000000..b2628caf4 --- /dev/null +++ b/packages/controller/js/monitor.js @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { requestEvent } from './http.js' + +let monitorUrl = '' + +/** + * 全局js异常埋点上报 + * @param errorMessage 异常信息 + * @param scriptURI 异常文件路径 + * @param lineNo 异常行号 + * @param columnNo 异常列号 + * @param error 异常堆栈信息 + */ +const getUrlUnit = () => { + const urlUnit = window.location?.search?.substring(1)?.split('&') + const unit = {} + if (urlUnit.length) { + urlUnit.forEach((item) => { + let unitItem = item.split('=') + unit[unitItem[0]] = unitItem[1] + }) + } + + return JSON.stringify(unit) +} + +const globalMonitoring = () => { + window.onerror = function (errorMessage, scriptURI, lineNo, columnNo, error) { + requestEvent(monitorUrl, { + event_type: 'design_JSError', + url: window.location.href, + unit: getUrlUnit(), + content: JSON.stringify({ errorMessage: errorMessage, scriptURI: scriptURI, columnNo: columnNo, error: error }) + }) + } +} + +/** + * promise异常埋点上报 + * @param message 异常promise原因 + * @param matchResult 异常promise堆栈 + */ + +const promiseMonitoring = () => { + window.addEventListener( + 'unhandledrejection', + (event) => { + event.preventDefault() + let message + let matchResult = '' + let reason = event.reason + if (typeof reason === 'string') { + message = reason + } else if (typeof reason === 'object') { + message = reason.message + if (reason.stack) { + matchResult = reason.stack.match(/at\s+(.+):(\d+):(\d+)/) + } + } + + requestEvent(monitorUrl, { + event_type: 'design_promiseError', + url: window.location.href, + unit: getUrlUnit(), + content: JSON.stringify({ + message: message, + matchResult: matchResult + }) + }) + }, + true + ) +} + +/** + * iframe加载完后异常报错埋点上报 + * @param errorMessage 异常信息 + * @param scriptURI 异常文件路径 + * @param lineNo 异常行号 + * @param columnNo 异常列号 + * @param error 异常堆栈信息 + */ + +export const iframeMonitoring = () => { + window.frames[0].onerror = function (errorMessage, scriptURI, lineNo, columnNo, error) { + requestEvent(monitorUrl, { + event_type: 'design_iframeError', + url: window.location.href, + unit: getUrlUnit(), + content: JSON.stringify({ + errorMessage: errorMessage, + scriptURI: scriptURI, + columnNo: columnNo, + error: error + }) + }) + } +} + +export const initMonitor = (url) => { + monitorUrl = url + globalMonitoring() + promiseMonitoring() +} diff --git a/packages/controller/js/preview.js b/packages/controller/js/preview.js new file mode 100644 index 000000000..12840569f --- /dev/null +++ b/packages/controller/js/preview.js @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { constants } from '@opentiny/tiny-engine-utils' +import { isDevelopEnv } from './environments' +import useResource from '../src/useResource' +// prefer old unicode hacks for backward compatibility + +const { COMPONENT_NAME } = constants + +export const utoa = (string) => btoa(unescape(encodeURIComponent(string))) + +export const atou = (base64) => decodeURIComponent(escape(atob(base64))) + +const open = (params = {}) => { + const paramsMap = new URLSearchParams(location.search) + params.app = paramsMap.get('id') + params.tenant = paramsMap.get('tenant') + const { scripts, styles } = useResource().resState.thirdPartyDeps + params.scripts = scripts + .filter((item) => item.script) + .reduce((pre, cur) => ({ ...pre, [cur.package]: cur.script }), {}) + params.styles = [...styles] + + const href = window.location.href.split('?')[0] || './' + const tenant = new URLSearchParams(location.search).get('tenant') || '' + let openUrl = '' + const hashString = utoa(JSON.stringify(params)) + + openUrl = isDevelopEnv + ? `./preview.html?tenant=${tenant}#${hashString}` + : `${href}/preview?tenant=${tenant}#${hashString}` + + const aTag = document.createElement('a') + aTag.href = openUrl + aTag.target = '_blank' + aTag.click() +} + +export const previewPage = (params = {}) => { + params.type = COMPONENT_NAME.Page + open(params) +} + +export const previewBlock = (params = {}) => { + params.type = COMPONENT_NAME.Block + open(params) +} diff --git a/packages/controller/js/verification.js b/packages/controller/js/verification.js new file mode 100644 index 000000000..3276983d3 --- /dev/null +++ b/packages/controller/js/verification.js @@ -0,0 +1,43 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export const REGEXP_EVENT_NAME = /^[a-z]+([A-Z][a-z]*)*$/ + +export const verifyEventName = (name) => REGEXP_EVENT_NAME.test(name) + +export const REGEXP_BLOCK_NAME = /^([A-Z][A-Za-z0-9]{2,})*?([A-Z][A-Za-z0-9]{2,})*?$/ + +export const verifyBlockName = (string) => REGEXP_BLOCK_NAME.test(string) + +export const REGEXP_BLOCK_ID = /^[A-Za-z]+$/ + +export const verifyBlockId = (string) => REGEXP_BLOCK_ID.test(string) + +export const REGEXP_BLOCK_PATH = /^[\w-][/\w-]*?[\w-]*?$/ + +export const verifyBlockPath = (string) => !string || REGEXP_BLOCK_PATH.test(string) + +export const REGEXP_GROUP_NAME = /^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/ + +export const REGEXP_REGULAR_STRING = /^[\w-]*$/ // 只能包含英文字母、数字、下横线_、中横线- +export const REGEXP_REGULAR_STRING2 = /^[A-Za-z][\w-]*$/ // 只能包含英文字母、数字、下横线_、中横线-,且以英文字符开头 +export const REGEXP_REGULAR_STRING3 = /^[A-Za-z][\w-/]*$/ // 只能包含英文字母、数字、下横线_、中横线-、正斜杠/,且以英文字符开头 + +export const REGEXP_PAGE_NAME = /^([A-Z][a-z]*?)+$/ + +export const REGEXP_FOLDER_NAME = REGEXP_REGULAR_STRING2 + +export const REGEXP_ROUTE = REGEXP_REGULAR_STRING3 + +export const REGEXP_JS_VAR = /^[a-zA-Z_]\w*$/ + +export const verifyJsVarName = (name) => REGEXP_JS_VAR.test(name) diff --git a/packages/controller/js/vscodeGenerateFile.js b/packages/controller/js/vscodeGenerateFile.js new file mode 100644 index 000000000..35ea13689 --- /dev/null +++ b/packages/controller/js/vscodeGenerateFile.js @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { useHttp } from '@opentiny/tiny-engine-http' + +const http = useHttp() + +/** + * vscode生成路由文件 + * + * + * @param { json } params + { + pageId:"123", // 当前页面ID + componentsTree:{} // 整个应用的路由对象 + } + * @returns { string } + */ + +const generateRouter = (params) => http.post('/generate/api/generateRouter', params) + +/** + * vscode生成本地国际化词条 + * + * @param { json } params + { + + key:'lowcode.preview' // 词条的唯一key值 + contents: { + en_US: "preview", // 英文 + zh_CN: "预览" // 中文 + } + } + * @returns { string } + */ + +const generateI18n = (params) => http.post('/generate/api/generateI18n', params) + +/** + * vscode生成区块 + * + * @param { json } params + { + + schema: '', // 区块的schema + blockPath: ''// 区块的分类ID,或者说传保存路径 +} + * @returns { string } + */ + +const generateBlock = (params) => http.post('/generate/api/generateBlock', params) + +/** + * vscode生成页面 + * + * @param { json } params + { + id: 2645, // 页面ID + name: 'xh-test', // 页面名称 + page_content:{} //页面的schema + } + * @returns { string } + */ +const generatePage = (params) => http.post('/generate/api/generatePage', params) + +/** + * vscode生成数据源 + * + * @param { json } params + { + list:[], // 新的数据源合集 + dataHanlder:{ + //全局的处理函数,可以从apps/schema/:id 接口返回中的dataSource中获取 + type: "JSFunction", + value: "" + } +} + * @returns { string } + */ +const generateDataSource = (params) => http.post('/generate/api/generateDataSource', params) + +/** + * vscode生成桥接源 + * + * @param { json } params + { + //桥接源合集,可以从apps/schema/:id 接口返回中的bridge中获取 + bridge:[] + } + * @returns { string } + */ +const generateBridge = (params) => http.post('/generate/api/generateBridge', params) + +/** + * vscode生成工具类 + * + * @param { json } params + { + //桥接源合集,可以从apps/schema/:id 接口返回中的utils中获取 + utils:[] + } + * @returns { string } + */ +const generateUtil = (params) => http.post('/generate/api/generateUtil', params) + +export { generateRouter, generateI18n, generateBlock, generatePage, generateDataSource, generateBridge, generateUtil } diff --git a/packages/controller/package.json b/packages/controller/package.json new file mode 100644 index 000000000..b247c6f6d --- /dev/null +++ b/packages/controller/package.json @@ -0,0 +1,58 @@ +{ + "name": "@opentiny/tiny-engine-controller", + "version": "1.0.3", + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "vite build" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist", + "js" + ], + "exports": { + ".": "./dist/index.js", + "./js/": "./dist/js/", + "./utils": "./dist/utils.js", + "./adapter": "./dist/adapter.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/controller" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@babel/generator": "7.18.13", + "@babel/parser": "7.18.13", + "@babel/traverse": "7.18.13", + "@opentiny/tiny-engine-builtin-component": "workspace:*", + "@opentiny/tiny-engine-http": "workspace:*", + "@opentiny/tiny-engine-i18n-host": "workspace:*", + "@opentiny/tiny-engine-utils": "workspace:*", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-locale": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", + "@vue/shared": "^3.3.4", + "css-tree": "^2.3.1", + "prettier": "2.7.1" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "glob": "^10.3.4", + "vite": "^4.3.7" + }, + "peerDependencies": { + "vue": "^3.4.15", + "vue-i18n": "^9.9.0" + } +} diff --git a/packages/controller/src/example.js b/packages/controller/src/example.js new file mode 100644 index 000000000..42a7b7bba --- /dev/null +++ b/packages/controller/src/example.js @@ -0,0 +1,98 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +// 编辑器输入示例 +const exampleMap = { + datasource: ` + { + "list": [ + { + "name": "columns", + "protocal": "VALUE", + "initialData": { + "variable": [ + { + "title": "序号", + "sorter": true + } + ], + "type": "variable", + "value": "" + } + } + ] + } + `, + globalstyle: ` + body { + background: #ccc + } + .crm-button { + line-height: 26px; + padding: 0 20px; + } + `, + imports: ` + /** + * name: 中文桥接源名称 + * path: 导入的路径(包名或者本地路径) + * item: 导入的项目,可以有以下几种形式: + * 1、import { httpService } from + * 2、import httpService from + * 3、import httpService as http from) + * instance: 实例名,需要注入service时需要添加该字段 + */ + [ + { + "name": "中文桥接源名称", + "type": "package", + "path": "@cloud/crm-http-service", + "item": "HttpServie", + "instance": "http" + } + ] + `, + inputs: ` + /** + * name: 输入属性名称 + * type: 输入类型,用于typescript类型声明, 不指定则为any, + * default: 默认值 + */ + [ + { + "name": "detailUrl", + "type": "string", + "default": "rest/cbc/cbccontractmgmtservice/v1/biz/list" + }, + { + "name": "options", + "type": "Array", + "default": [] + } + ] + `, + outputs: ` + /** + * name: 事件名称 + * type: 事件输出数据类型, 用于typescript类型声明, 不指定则为any + */ + [ + { + "name": "goToDetailPage", + "type": "object" + } + ] ` +} +export default (name) => { + const resetName = `${name || ''}`.toLocaleLowerCase() + return exampleMap[resetName] +} diff --git a/packages/controller/src/globalConfig.js b/packages/controller/src/globalConfig.js new file mode 100644 index 000000000..062d379ed --- /dev/null +++ b/packages/controller/src/globalConfig.js @@ -0,0 +1,19 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +let globalConfig = null + +export const getGlobalConfig = () => globalConfig + +export const setGlobalConfig = (config) => { + globalConfig = config +} diff --git a/packages/controller/src/index.js b/packages/controller/src/index.js new file mode 100644 index 000000000..322c248ed --- /dev/null +++ b/packages/controller/src/index.js @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import useLayout from './useLayout' +import useCanvas from './useCanvas' +import useApp from './useApp' +import useResource from './useResource' +import useHistory from './useHistory' +import useProperties from './useProperties' +import useSaveLocal from './useSaveLocal' +import useEditorInfo from './useEditorInfo' +import example from './example' +import useModal from './useModal' +import useBlock from './useBlock' +import useTranslate from './useTranslate' +import usePage from './usePage' +import useDataSource from './useDataSource' +import useBreadcrumb from './useBreadcrumb' +import useProperty from './useProperty' +import { getGlobalConfig, setGlobalConfig } from './globalConfig' +import useNotify from './useNotify' +import useData from './useData' +import useMessage from './useMessage' +import useHelp from './useHelp' + +export const getExample = example + +export { + useLayout, + useCanvas, + useApp, + useResource, + useHistory, + useProperties, + useSaveLocal, + useModal, + useEditorInfo, + useBlock, + useTranslate, + usePage, + useDataSource, + useBreadcrumb, + useProperty, + getGlobalConfig, + setGlobalConfig, + useNotify, + useData, + useMessage, + useHelp +} diff --git a/packages/controller/src/useApp.js b/packages/controller/src/useApp.js new file mode 100644 index 000000000..9a3b840bd --- /dev/null +++ b/packages/controller/src/useApp.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive, watch } from 'vue' +import { useHttp } from '@opentiny/tiny-engine-http' + +const http = useHttp() + +const defaultState = { + // 应用列表 + list: [], + // 当前选中的应用 + selectedApp: { + id: '', + name: '', + app_desc: '', + app_website: '', + obs_url: null, + published_at: '', + created_at: '', + updated_at: '', + platform: '', + state: null, + published: false, + tenant: null, + editor_url: '' + }, + // 当前选中的appId + selectedId: '' +} + +const appInfoState = reactive({ ...defaultState }) + +// 获取当前应用的信息 +const fetchAppInfo = (appId) => http.get(`/app-center/api/apps/detail/${appId}`) + +watch( + () => appInfoState.selectedId, + (id) => { + fetchAppInfo(id).then((app) => { + appInfoState.selectedApp = app + // 监听应用 ID 变化,根据应用名称设置网页 title + document.title = `${app.name} —— TinyEditor 前端可视化设计器` + }) + } +) + +// 获取应用列表 +const fetchAppList = (platformId) => http.get(`/app-center/api/apps/list/${platformId}`) + +const updateApp = async (id) => { + const appInfo = await fetchAppInfo(id) + appInfoState.selectedApp = appInfo + appInfoState.selectedId = appInfo.id +} + +export default () => { + return { + appInfoState, + fetchAppInfo, + fetchAppList, + updateApp + } +} diff --git a/packages/controller/src/useBlock.js b/packages/controller/src/useBlock.js new file mode 100644 index 000000000..0aaaf71bb --- /dev/null +++ b/packages/controller/src/useBlock.js @@ -0,0 +1,766 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { ref, reactive, readonly } from 'vue' +import { hyphenate } from '@vue/shared' +import { extend, copyArray } from '@opentiny/vue-renderless/common/object' +import { format } from '@opentiny/vue-renderless/common/date' +import { remove } from '@opentiny/vue-renderless/common/array' +import { constants } from '@opentiny/tiny-engine-utils' +import { getCanvasStatus } from '../js/canvas' +import { ast2String, parseExpression } from '../js/ast' +import { getCssObjectFromStyleStr } from '../js/css' +import useCanvas from './useCanvas' +import useTranslate from './useTranslate' +import useEditorInfo from './useEditorInfo' +import useBreadcrumb from './useBreadcrumb' +import useLayout from './useLayout' +import { getGlobalConfig } from './globalConfig' + +const { SORT_TYPE, SCHEMA_DATA_TYPE, BLOCK_OPENNESS } = constants + +const NODE_TYPE_PAGE = 'Page' +const nameCn = 'name_cn' +const DEFAULT_PROPERTIES = readonly([ + { + label: { + zh_CN: '基础信息' + }, + description: { + zh_CN: '基础信息' + }, + collapse: { + number: 6, + text: { + zh_CN: '显示更多' + } + }, + content: [] + } +]) + +const DEFAULT_BLOCK = readonly({ + componentName: 'Block', + fileName: '', + css: '', + props: {}, + children: [], + schema: { + properties: DEFAULT_PROPERTIES, + events: {} + }, + state: {}, + methods: {}, + dataSource: {} +}) + +const blockState = reactive({ + list: [], + current: null // 当前画布中正在渲染的区块数据 +}) + +// 区块分组信息 +const groupState = reactive({ + list: [], + selected: {} +}) + +// 区块分类 +const categoryState = reactive({ + list: [] +}) + +const getBlockList = () => blockState.list + +const setBlockList = (list) => { + blockState.list = list +} + +const addBlock = (block) => { + const blockList = getBlockList() + blockList.unshift(block) +} + +const delBlock = (block) => { + remove(getBlockList(), block) +} + +// 获取当前画布中的区块信息 +const getCurrentBlock = () => blockState.current + +const setCurrentBlock = (block) => { + blockState.current = block +} + +const getGroupList = () => groupState.list + +const setGroupList = (list) => { + groupState.list = list +} + +const getCategoryList = () => categoryState.list + +const setCategoryList = (list) => { + categoryState.list = list +} + +const getSelectedGroup = () => groupState.selected + +const setSelectedGroup = (selected) => { + groupState.selected = selected +} + +const copyCss = (css, classNameList) => { + classNameList = Array.from(new Set(classNameList)).map((item) => '.' + item) + let cssObject = getCssObjectFromStyleStr(css) + let styleStr = '' + + Object.entries(cssObject).forEach(([key, value]) => { + // 只要选择器包含目标类名,就复制 + if (classNameList.some((classNameItem) => key.includes(classNameItem))) { + styleStr += `${key} {\n${value}\n}\n` + } + }) + + return styleStr +} + +const copySchema = (schema, contentList, methods) => { + const content = schema?.properties?.[0]?.content || [] + let emitList = [] + let emitListCopies = {} + Object.keys(methods).forEach((key) => { + let item = JSON.stringify(methods[key].value).match(/emit..*?\)/g) + + if (item?.length) { + emitList = [...emitList, ...item] + } + }) + + emitList.forEach((e) => { + let key = e.match(/'.*?'/g)[0].replace(/'/g, '') + + key = `on${key[0].toLocaleUpperCase() + key.slice(1, key.length)}` + if (schema?.events[key]) { + emitListCopies[key] = schema?.events[key] + } + }) + const schemaCopies = { + properties: [ + { + ...extend(true, {}, DEFAULT_PROPERTIES[0]), + content: content.filter((item) => contentList.includes(item.property)) + } + ], + events: emitListCopies || {} + } + + return schemaCopies +} + +const copyMethods = (schema) => { + const methodsListCopies = {} + + // 因为methods方法里面大部分是用户的业务代码(无法复用),所以只需要拷贝一个空方法即可 + Object.entries(schema).forEach(([key, value]) => { + const ast = parseExpression(value.value) + + // 清空函数体 + if (ast.body?.body) { + ast.body.body = [] + } + methodsListCopies[key] = { + type: 'JSFunction', + value: ast2String(ast) + } + }) + + return methodsListCopies +} + +const copyState = (stateObj = {}, methodsObj = {}) => { + let stateCopies = {} + const stateKey = Object.keys(stateObj).map((e) => `state.${e} `) + + stateKey.forEach((e) => { + Object.keys(methodsObj).forEach((key) => { + if (methodsObj[key].value.indexOf(e) !== -1) { + const key = e.replace('state.', '').replace(' ', '') + stateCopies[key] = stateObj[key] + } + }) + }) + + return stateCopies +} + +const parsePropToData = (data, { prop, langs, state, methods }) => { + if (prop.type === SCHEMA_DATA_TYPE.I18n) { + data.langs[prop.key] = langs[prop.key] + } else if (prop.type === SCHEMA_DATA_TYPE.JSExpression) { + if (/\.state\./.test(prop.value)) { + const key = prop.value.replace('this.state.', '') + data.state[key] = state[key] + } else if (/\.props\./.test(prop.value)) { + const key = prop.value.replace('this.props.', '') + data.contentList.push(key) + } else { + const key = prop.value.replace('this.', '').replace(/\(.*?\)/, '') + data.methods[key] = methods[key] + } + } +} + +const filterDataFn = + (parseChildProps) => + ({ children = [], langs = {}, methods = {}, state = {} }) => { + const data = { + langs: {}, + methods: {}, + state: {}, + classNameList: [], + contentList: [] + } + + if (Array.isArray(children)) { + children.forEach((child) => { + parseChildProps(data, { child, langs, state, methods }) + }) + } + + return data + } + +const parseChildProps = (data, { child, langs, state, methods }) => { + if (child.props) { + Object.entries(child.props).forEach(([propKey, prop]) => { + if (typeof prop === 'object') { + parsePropToData(data, { prop, langs, state, methods }) + } else { + if (propKey === 'className' && prop) { + data.classNameList.push(...prop.split(' ').filter((item) => item)) + } + } + }) + } + + if (Array.isArray(child.children)) { + const filterData = filterDataFn(parseChildProps) + const childData = filterData({ children: child.children, langs, methods, state }) + Object.assign(data.langs, childData.langs) + Object.assign(data.methods, childData.methods) + Object.assign(data.state, childData.state) + data.classNameList = [...data.classNameList, ...childData.classNameList] + data.contentList = [...data.contentList, ...childData.contentList] + } +} + +const getBlockPageSchema = (block) => { + const content = block?.content || {} + content.componentName = content.componentName || content.blockName + + return content +} + +const initBlock = async (block = {}, _langs = {}, isEdit) => { + const { resetBlockCanvasState, setSaved } = useCanvas() + const { setBreadcrumbBlock } = useBreadcrumb() + + // 把区块的schema传递给画布 + await resetBlockCanvasState({ pageSchema: getBlockPageSchema(block) }) + // 这一步操作很重要,让区块管理面板和画布共同维护同一份区块schema + block.content = useCanvas().renderer.value?.getSchema() + + setCurrentBlock(block) + setBreadcrumbBlock([block[nameCn] || block.label], block.histories) + + // 如果是点击区块管理列表进来的则不需要执行以下操作 + if (!isEdit) { + // 非编辑状态即为新增,新增默认锁定画布 + block.occupier = useEditorInfo().userInfo + useLayout().layoutState.pageStatus = getCanvasStatus(block.occupier) + addBlock(block) + setSaved(false) + } +} + +const createBlock = ({ name_cn, label, path, categories }) => { + const { pageState } = useCanvas() + const schema = extend(true, {}, pageState.currentSchema) + // 选中 body 节点创建区块时需传递子节点数据 + const children = schema.componentName === NODE_TYPE_PAGE ? schema.children : [schema] + + // 过滤只有新区块内使用到的数据 + const { getLangs } = useTranslate() + const filterData = filterDataFn(parseChildProps) + const { langs, methods, state, classNameList, contentList } = extend( + true, + {}, + filterData({ + children, + langs: getLangs(), + methods: pageState.pageSchema.methods, + state: pageState.pageSchema.state + }) + ) + + const css = copyCss(pageState.pageSchema.css, classNameList) + const methodsCopies = copyMethods(methods) + Object.assign(methods, methodsCopies) + + const schemaCopies = copySchema(pageState.pageSchema.schema, contentList, methods) + const stateCopies = copyState(pageState.pageSchema.state, methods) + Object.assign(state, stateCopies) + + const block = { + path, + [nameCn]: name_cn, + label, + histories: [], + categories, + public: BLOCK_OPENNESS.Open, + framework: getGlobalConfig()?.dslMode, + content: { + ...extend(true, {}, DEFAULT_BLOCK), + fileName: label, + css, + methods, + state, + children, + schema: schemaCopies + } + } + + initBlock(block, langs) +} + +const createEmptyBlock = ({ name_cn, label, path, categories }) => { + const block = { + path, + [nameCn]: name_cn, + label, + categories, + public: BLOCK_OPENNESS.Open, + framework: getGlobalConfig()?.dslMode, + content: { + ...extend(true, {}, DEFAULT_BLOCK), + fileName: label + } + } + + initBlock(block) +} + +const setComponentLinkedValue = ({ propertyName, value }) => { + const { schema } = useCanvas().renderer.value?.getCurrent() || {} + + if (!propertyName || !schema) { + return + } + + schema.props = schema.props || {} + schema.props[propertyName] = value +} + +const getBlockI18n = (block) => block?.content?.i18n || {} + +const getBlockProperties = (block) => block?.content?.schema?.properties?.[0]?.content || [] + +const addBlockProperty = (property, block) => { + if (!block) { + return + } + + if (!block.content) { + block.content = {} + } + + if (!block.content.schema) { + block.content.schema = {} + } + + if (!block.content.schema.properties) { + block.content.schema.properties = copyArray(DEFAULT_PROPERTIES) + } + + block.content.schema.properties[0].content.push(property) + + if (property.linked) { + setComponentLinkedValue({ + propertyName: property.linked.property, + value: { + type: SCHEMA_DATA_TYPE.JSExpression, + value: `this.props.${property.property}` + } + }) + } +} + +const editBlockProperty = (property, data) => { + if (property.linked) { + const value = { + type: SCHEMA_DATA_TYPE.JSExpression, + value: `this.props.${property.property}` + } + setComponentLinkedValue({ + propertyName: data?.property, + value + }) + data.widget.props.modelValue = value + } +} + +const removePropertyLink = ({ componentProperty }) => { + const linked = componentProperty.linked + componentProperty.linked = null + const properties = getBlockProperties(getCurrentBlock()) + + properties.forEach((property) => { + if (property.linked && property.property === linked.blockProperty) { + if (componentProperty.widget?.props?.modelValue) { + componentProperty.widget.props.modelValue = property.defaultValue + } + + setComponentLinkedValue({ + propertyName: property.linked.property, + value: property.defaultValue + }) + + property.linked = null + } + }) +} + +const getBlockEvents = (block = {}) => block?.content?.schema?.events || {} + +const addBlockEvent = ({ name, event }, block) => { + if (!block) { + return + } + + if (!block.content) { + block.content = {} + } + + if (!block.content.schema) { + block.content.schema = {} + } + + if (!block.content.schema.events) { + block.content.schema.events = {} + } + + block.content.schema.events[name] = event +} + +const removeEventLink = (linkedEventName) => { + const events = getBlockEvents(getCurrentBlock()) + + Object.entries(events).forEach(([name, event]) => { + if (linkedEventName === name) { + event.linked = null + } + }) +} + +const appendEventEmit = ({ eventName, functionName } = {}) => { + if (!eventName || !functionName) { + return + } + + const { PLUGIN_NAME, getPluginApi } = useLayout() + const getMethods = getPluginApi(PLUGIN_NAME.PageController)?.getMethods + + if (getMethods && typeof getMethods === 'function') { + const method = getMethods()?.[functionName] + + if (method?.type === SCHEMA_DATA_TYPE.JSFunction) { + const ast = parseExpression(method.value) + const params = ast.params.map((param) => param.name) + const emitContent = `this.emit('${hyphenate(eventName.replace(/^on/i, ''))}', ${params.join(',')})` + + // 如果方法里面已经有了相同的emit语句就不添加了 + if (!method?.value?.includes(emitContent)) { + ast.body.body.push(parseExpression(emitContent)) + } + method.value = ast2String(ast) + } + } +} + +// 区块消费侧 + +const DEFAULT_GROUPS = [ + { + groupId: 'all', + groupName: '所有分组' + }, + { + groupId: 'default', + groupName: '设计器默认区块分组' + } +] + +// 区块默认分组id +const DEFAULT_GROUP_ID = DEFAULT_GROUPS[1].groupId + +// 区块默认分组名称 +const DEFAULT_GROUP_NAME = DEFAULT_GROUPS[1].groupName + +// 当前选中的分组 +const selectedGroup = ref({ ...DEFAULT_GROUPS[0] }) + +// 当前选中的区块,用于查看区块详情、区块历史记录 +const selectedBlock = ref('') + +// 已选择的区块数组,用于在当前分组里添加区块 +const selectedBlockArray = ref([]) + +// 是否刷新区块列表,在当前分组里添加/删除区块后通知刷新区块列表 +const isRefresh = ref(false) + +// 切换分组时调用 +const groupChange = (group) => { + if (!group) return + + // 需要改变selectedGroup的引用地址才能触发tiny-select组件的watch事件 + selectedGroup.value = { + groupId: group.groupId || group.id, + groupName: group.groupName || group.name + } +} + +// 添加设计器默认区块分组 +const addDefaultGroup = (groups) => { + const result = DEFAULT_GROUPS.map((group) => ({ + label: group.groupName, + value: group + })) + + groups.forEach((item) => { + result.push({ + label: item.name, + value: { + groupId: item.id, + groupName: item.name + } + }) + }) + + setGroupList(groups) + + return result +} + +// 是否是设计器默认区块分组 +const isDefaultGroupId = (groupId) => groupId === DEFAULT_GROUP_ID + +const isAllGroupId = (groupId) => groupId === DEFAULT_GROUPS[0].groupId + +// 获取今天的开始时间 +const getCurrentDate = () => new Date().setHours(0, 0, 0, 0) + +// 获取本周的开始时间 +const getCurrentWeek = (date) => { + const { nowDayOfWeek, nowDay, nowMonth, nowYear } = date + const weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1) + + return weekStartDate.setHours(0, 0, 0, 0) +} + +// 获取本月的开始时间 +const getCurrentMonth = (date) => { + const { nowMonth, nowYear } = date + const monthStartDate = new Date(nowYear, nowMonth, 1) + + return monthStartDate.setHours(0, 0, 0, 0) +} + +// 获取上月的开始时间 +const getLastMonth = (date) => { + const { nowYear, lastMonth } = date + const lastMonthStartDate = new Date(nowYear, lastMonth, 1) + + return lastMonthStartDate.setHours(0, 0, 0, 0) +} + +// 判断时间戳属于今天/本周/本月/上月/更久以前 +const getDateFromNow = (timeStamp) => { + // 当前日期 + const now = new Date() + const nowDay = now.getDate() + const nowMonth = now.getMonth() + const nowYear = now.getFullYear() + + // 今天是本周的第几天 + const nowDayOfWeek = now.getDay() || 7 + + // 上月日期 + const lastMonthDate = new Date() + lastMonthDate.setDate(1) + lastMonthDate.setMonth(lastMonthDate.getMonth() - 1) + const lastMonth = lastMonthDate.getMonth() + + const date = { nowDayOfWeek, nowDay, nowMonth, nowYear, lastMonth } + + // 存在currentDateStart与currentWeekStart相同的情况,故不可以用currentDateStart作key + const dateMap = new Map([ + ['今天', getCurrentDate], + ['本周', () => getCurrentWeek(date)], + ['本月', () => getCurrentMonth(date)], + ['上月', () => getLastMonth(date)], + ['更久以前', () => ''] + ]) + + for (let [key, value] of dateMap) { + if (timeStamp >= value()) { + return key + } + } + + return undefined +} + +// 将历史记录分组 +const splitBackupGroups = (data) => { + const backupList = {} + + if (!data || !data.length) return backupList + + data.sort((backup1, backup2) => new Date(backup2.updated_at) - new Date(backup1.updated_at)) + data.forEach((item) => { + const updateTime = item.updated_at && new Date(item.updated_at) + const title = getDateFromNow(updateTime?.getTime()) || '' + backupList[title] = backupList[title] || [] + backupList[title].push({ + backupTitle: item.message, + backupTime: format(updateTime), + id: item.id + }) + }) + + return backupList +} + +const sortTypeHandlerMap = { + [SORT_TYPE.timeAsc]: (blockList) => { + blockList.sort((block1, block2) => new Date(block1.updated_at) - new Date(block2.updated_at)) + }, + [SORT_TYPE.timeDesc]: (blockList) => { + blockList.sort((block1, block2) => new Date(block2.updated_at) - new Date(block1.updated_at)) + }, + [SORT_TYPE.alphabetDesc]: (blockList) => { + // name_cn 包含中文,需要用 localeCompare + blockList.sort((block1, block2) => (block2.name_cn || block2.label).localeCompare(block1.name_cn || block1.label)) + }, + [SORT_TYPE.alphabetAsc]: (blockList) => { + // name_cn 包含中文,需要用 localeCompare + blockList.sort((block1, block2) => (block1.name_cn || block1.label).localeCompare(block2.name_cn || block2.label)) + } +} + +// 排序 +const sort = (blockList, type) => { + if (blockList.length === 0) return blockList + + if (sortTypeHandlerMap[type]) { + sortTypeHandlerMap[type](blockList) + } else { + // 默认按照时间倒序进行排序 + sortTypeHandlerMap[SORT_TYPE.timeDesc](blockList) + } + + return blockList +} + +// 在可选区块列表里选择区块 +const check = (blockList, block) => { + const index = blockList.indexOf(block) + + blockList.splice(index, 1) + selectedBlockArray.value.push(block) + + return blockList +} + +// 取消选择区块 +const cancelCheck = (blockList, block) => { + const index = selectedBlockArray.value.indexOf(block) + + selectedBlockArray.value.splice(index, 1) + blockList.push(block) + + return blockList +} + +const getBlockAssetsByVersion = (block, version) => { + let assets = block.assets + + if (version) { + const replaceUri = (uri) => uri.replace(/@\d{1,3}(\.\d{1,3}){0,2}\//, `@${version}/`) + + assets = { + ...block.assets, + scripts: block.assets.scripts.map(replaceUri), + styles: block.assets.styles.map(replaceUri) + } + } + + return assets +} + +export default function () { + return { + NODE_TYPE_PAGE, + DEFAULT_GROUP_ID, + DEFAULT_GROUP_NAME, + selectedGroup, + selectedBlock, + selectedBlockArray, + isRefresh, + addBlock, + delBlock, + createBlock, + getBlockAssetsByVersion, + createEmptyBlock, + groupChange, + addDefaultGroup, + isDefaultGroupId, + isAllGroupId, + splitBackupGroups, + sort, + check, + cancelCheck, + getBlockList, + setBlockList, + getBlockI18n, + getGroupList, + setGroupList, + getCategoryList, + setCategoryList, + addBlockEvent, + getBlockEvents, + appendEventEmit, + getCurrentBlock, + initBlock, + setCurrentBlock, + removeEventLink, + getSelectedGroup, + setSelectedGroup, + addBlockProperty, + editBlockProperty, + removePropertyLink, + getBlockProperties, + getBlockPageSchema, + getDateFromNow + } +} diff --git a/packages/controller/src/useBreadcrumb.js b/packages/controller/src/useBreadcrumb.js new file mode 100644 index 000000000..3ac0af784 --- /dev/null +++ b/packages/controller/src/useBreadcrumb.js @@ -0,0 +1,39 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { ref } from 'vue' + +let breadcrumbData = ref([]) +const CONSTANTS = { + PAGETEXT: '页面', + BLOCKTEXT: '区块' +} + +const setBreadcrumbPage = (value) => { + breadcrumbData.value = [CONSTANTS.PAGETEXT, ...value] + sessionStorage.setItem('pageInfo', value) +} + +const setBreadcrumbBlock = (value, histories = []) => { + breadcrumbData.value = [CONSTANTS.BLOCKTEXT, ...value, histories] +} + +const getBreadcrumbData = () => breadcrumbData + +export default () => { + return { + CONSTANTS, + setBreadcrumbPage, + setBreadcrumbBlock, + getBreadcrumbData + } +} diff --git a/packages/controller/src/useCanvas.js b/packages/controller/src/useCanvas.js new file mode 100644 index 000000000..c97b65f29 --- /dev/null +++ b/packages/controller/src/useCanvas.js @@ -0,0 +1,162 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +/* eslint-disable no-new-func */ +import { reactive, ref } from 'vue' +import { constants } from '@opentiny/tiny-engine-utils' +import useHistory from './useHistory' + +const { COMPONENT_NAME } = constants + +const defaultPageState = { + currentVm: null, + currentSchema: null, + currentType: null, + pageSchema: null, + properties: null, + dataSource: null, + dataSourceMap: null, + isSaved: true, + isLock: false, + isBlock: false, + nodesStatus: {}, + loading: false +} + +const defaultSchema = { + componentName: 'Page', + fileName: '', + css: '', + props: {}, + lifeCycles: {}, + children: [], + dataSource: { + list: [] + }, + methods: {}, + bridge: { + imports: [] + }, + state: {}, + inputs: [], + outputs: [] +} + +const renderer = ref(null) + +const pageState = reactive({ ...defaultPageState, loading: true }) +// 重置画布数据 +const resetCanvasState = async (state = {}) => { + Object.assign(pageState, defaultPageState, state) + + await renderer.value?.setSchema(pageState.pageSchema) +} + +// 页面重置画布数据 +const resetPageCanvasState = (state = {}) => { + state.isBlock = false + resetCanvasState(state) + useHistory().addHistory(state.pageSchema) +} + +// 区块重置画布数据 +const resetBlockCanvasState = async (state = {}) => { + state.isBlock = true + await resetCanvasState(state) +} + +const getDefaultSchema = (componentName = 'Page', fileName = '') => ({ + ...defaultSchema, + componentName, + fileName +}) + +const setSaved = (flag = false) => { + pageState.isSaved = flag +} + +// 清空画布 +const clearCanvas = () => { + pageState.properties = null + + const { fileName, componentName } = pageState.pageSchema || {} + + resetCanvasState({ + pageSchema: { ...getDefaultSchema(componentName, fileName) } + }) + + setSaved(false) +} + +const isBlock = () => pageState.isBlock + +// 初始化页面数据 +const initData = (schema = { ...defaultSchema }, currentPage) => { + if (schema.componentName === COMPONENT_NAME.Block) { + resetBlockCanvasState({ + pageSchema: schema, + loading: false + }) + } else { + resetPageCanvasState({ + pageSchema: schema, + currentPage, + loading: false + }) + } + + useHistory().addHistory(schema) +} + +const isSaved = () => pageState.isSaved + +const isLoading = () => pageState.loading + +const getPageSchema = () => { + return pageState.pageSchema || {} +} + +const setCurrentSchema = (schema) => { + pageState.currentSchema = schema +} + +const getCurrentSchema = () => pageState.currentSchema + +const clearCurrentState = () => { + pageState.currentVm = null + pageState.hoverVm = null + pageState.properties = {} + pageState.pageSchema = null +} +const getCurrentPage = () => pageState.currentPage + +export default function () { + return { + pageState, + renderer, + isBlock, + isSaved, + isLoading, + initData, + setSaved, + clearCanvas, + getPageSchema, + resetPageCanvasState, + resetBlockCanvasState, + clearCurrentState, + getDataSourceMap: renderer.value?.getDataSourceMap, + setDataSourceMap: renderer.value?.setDataSourceMap, + getCurrentSchema, + setCurrentSchema, + getCurrentPage + } +} diff --git a/packages/controller/src/useData.js b/packages/controller/src/useData.js new file mode 100644 index 000000000..417e50b02 --- /dev/null +++ b/packages/controller/src/useData.js @@ -0,0 +1,20 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +const getCommentByKey = (key) => ({ + start: `start-${key} 设计器生成的代码,为了避免出现问题,请勿修改`, + end: `end-${key}` +}) + +export default () => ({ + getCommentByKey +}) diff --git a/packages/controller/src/useDataSource.js b/packages/controller/src/useDataSource.js new file mode 100644 index 000000000..e1e93affa --- /dev/null +++ b/packages/controller/src/useDataSource.js @@ -0,0 +1,120 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive } from 'vue' +import { utils } from '@opentiny/tiny-engine-utils' +import { isEqual } from '@opentiny/vue-renderless/common/object' +import { isEmptyObject } from '@opentiny/vue-renderless/common/type' +import useModal from './useModal' + +const dataSourceState = reactive({ + dataSource: {}, + record: {}, + recordCopies: {}, + dataSourceColumn: {}, + dataSourceColumnCopies: {}, + remoteData: {}, + remoteDataCopies: {}, + currentRecordId: '', + isRecordValidate: true, + disCard: false, + remoteConfig: {} +}) + +const compareData = () => { + let isRecordSame = true + let isDataSourceSame = false + + if (!isEmptyObject(dataSourceState.record) && !isEmptyObject(dataSourceState.recordCopies)) { + isRecordSame = isEqual(dataSourceState.record, dataSourceState.recordCopies) + } + + isDataSourceSame = isEqual(dataSourceState.dataSourceColumn, dataSourceState.dataSourceColumnCopies) + + const isRemoteDataSame = isEqual(dataSourceState.remoteData, dataSourceState.remoteDataCopies) + + return { isRecordSame, isDataSourceSame, isRemoteDataSame } +} + +const handleConfirmSave = (dataSourceState, isRecordSame, resolve, isDataSourceSame, callback) => { + let { + name, + id, + data: { data, columns, type } + } = dataSourceState.dataSource + + if (!isRecordSame) { + // 必填字段没数据不记录该条数据 + if (!dataSourceState.isRecordValidate) { + dataSourceState.record = {} + dataSourceState.recordCopies = {} + dataSourceState.isRecordValidate = true + return resolve(true) + } + + // 数据源数据修改,新增,数据源数据做修改 + if (dataSourceState.currentRecordId) { + data = data || [] + const index = data.findIndex((item) => item.id === dataSourceState.currentRecordId) + + data[index] = Object.assign(data[index], dataSourceState.record) + } else { + const record = { ...dataSourceState.record, id: utils.guid() } + data = [...data, record] + } + } + + if (!isDataSourceSame) { + // 数据源名称,类型,字段改变,数据源修改 + columns = dataSourceState.dataSourceColumn?.columns + name = dataSourceState.dataSourceColumn?.name + } + + const requestData = { name, data: { columns, data, type } } + + callback(id, requestData).then((data) => { + if (data) { + dataSourceState.record = {} + dataSourceState.recordCopies = {} + dataSourceState.currentRecordId = '' + dataSourceState.dataSourceColumn = {} + dataSourceState.dataSourceColumnCopies = {} + dataSourceState.dataSource = {} + resolve(true) + } + }) + + return undefined +} + +const saveDataSource = (callback) => { + const { isRecordSame, isDataSourceSame } = compareData() + const { confirm } = useModal() + + if (!isEmptyObject(dataSourceState.dataSource) && (!isRecordSame || !isDataSourceSame)) { + return new Promise((resolve) => { + confirm({ + title: '提示', + message: dataSourceState.isRecordValidate + ? '当前数据未保存,关闭前是否需要保存改数据' + : '必填项为空,将不会被存储!', + exec: () => handleConfirmSave(dataSourceState, isDataSourceSame, resolve, isDataSourceSame, callback) + }) + }) + } + + return Promise.resolve(false) +} + +export default () => { + return { dataSourceState, compareData, saveDataSource } +} diff --git a/packages/controller/src/useEditorInfo.js b/packages/controller/src/useEditorInfo.js new file mode 100644 index 000000000..bd4b1e106 --- /dev/null +++ b/packages/controller/src/useEditorInfo.js @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { useHttp } from '@opentiny/tiny-engine-http' +import useModal from './useModal' + +// web版获取配置信息: 从url中获取 +const _getWebData = () => { + const paramsMap = new URLSearchParams(location.search) + const id = paramsMap.get('id') + const blockId = paramsMap.get('blockid') + const pageId = paramsMap.get('pageid') + const type = paramsMap.get('type') + const version = paramsMap.get('version') + + return { + type: type || 'app', + id, + pageId, + blockId, + version + } +} + +let userInfo = {} +const getUserInfo = () => { + // 获取登录用户信息 + useHttp() + .get('/platform-center/api/user/me') + .then((data) => { + if (data) { + userInfo = data + } + }) + .catch((error) => { + useModal().message({ message: error.message, status: 'error' }) + }) +} + +const isAdmin = () => userInfo.resetPasswordToken === 'p_webcenter' +/** + * 1、是否是VSCode插件: 通过是否有全局变量window.vscodeBridge判断 + * + * 2、vscode中类型和id + * window.vscodeInjectData + * type: app 应用管理 block 区块管理 + * id: 应用id/blockid + * ...其他详细信息 + * + * 3、web版中,通过url参数判断 + * type: app 应用管理 block 区块管理 + * id: 应用id/blockid + * + */ +export default () => { + return { + useInfo: _getWebData, + getUserInfo, + userInfo, + isAdmin + } +} diff --git a/packages/controller/src/useHelp.js b/packages/controller/src/useHelp.js new file mode 100644 index 000000000..8240c3ccc --- /dev/null +++ b/packages/controller/src/useHelp.js @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +const getBaseUrl = () => 'https://opentiny.design/tiny-engine#/help-center/course/engine/' + +const helpState = { + docsUrl: { + block: 3, + bridge: 13, + data: 7, + datasource: 11, + i18n: 12, + page: 2, + script: 8, + stylePanel: 6 + } +} + +const getDocsUrl = (plugin) => { + return `${getBaseUrl()}${helpState.docsUrl[plugin]}` +} + +export default () => ({ + getBaseUrl, + getDocsUrl +}) diff --git a/packages/controller/src/useHistory.js b/packages/controller/src/useHistory.js new file mode 100644 index 000000000..943dd92c2 --- /dev/null +++ b/packages/controller/src/useHistory.js @@ -0,0 +1,123 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive, isProxy, toRaw, watch } from 'vue' +import useCanvas from './useCanvas' + +const schema2String = (schema) => { + if (isProxy(schema)) { + schema = toRaw(schema) + } + + return JSON.stringify(schema) +} + +const string2Schema = (string) => { + let schema + + try { + schema = JSON.parse(string) + } catch (error) { + schema = {} + } + + return schema +} + +const list = [] +const maxLength = 5 +const historyState = reactive({ + index: 0, + back: false, + forward: false +}) + +const push = (schema) => { + let length = list.length + + // 处于撤销中,又修改了 schema ,需要将后面的历史记录清除 + if (historyState.index < length - 1) { + list.splice(historyState.index + 1) + length = list.length + } + + // 历史记录超过限制,删除前面的记录 + if (length >= maxLength) { + list.splice(0, length - maxLength + 1) + } + + list.push(schema2String(schema)) + historyState.index = list.length - 1 +} + +const go = (addend, valid) => { + historyState.index = historyState.index + addend + useCanvas().renderer.value?.setSchema(string2Schema(list[historyState.index])) + + // 不是锁定状态,撤销操作后,传递第二个标识位,将 list 的长度减一,置灰 undoredo 操作按钮 + if (typeof valid === 'boolean') { + list.splice(1, 1) + } +} + +const back = () => { + if (historyState.back) { + go(-1) + useCanvas().setSaved(false) + } +} + +const forward = () => { + if (historyState.forward) { + go(1) + useCanvas().setSaved(historyState.index === list.length - 1) + } +} + +const clear = () => { + list.splice(0) + Object.assign(historyState, { + index: 0, + back: false, + forward: false + }) +} + +const addHistory = (schema) => { + if (!schema) { + useCanvas().setSaved(false) + push(useCanvas().renderer.value?.getSchema()) + } else { + clear() + // 初始 schema 需要设置为第一条历史记录 + push(schema) + } +} + +// 监控下标,判断是否允许前进后退标志 +watch( + () => historyState.index, + (value) => { + historyState.back = value > 0 + historyState.forward = value < list.length - 1 + } +) + +export default () => { + return { + historyState, + back, + forward, + go, + addHistory + } +} diff --git a/packages/controller/src/useLayout.js b/packages/controller/src/useLayout.js new file mode 100644 index 000000000..368b77129 --- /dev/null +++ b/packages/controller/src/useLayout.js @@ -0,0 +1,135 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive, nextTick } from 'vue' +import { constants } from '@opentiny/tiny-engine-utils' + +const { PAGE_STATUS } = constants + +const PLUGIN_NAME = { + Materials: 'Materials', + AppManage: 'AppManage', + BlockManage: 'BlockManage', + PageController: 'PageController', + Lock: 'Lock', + Tutorial: 'Tutorial', + OutlineTree: 'OutlineTree', + save: 'save' +} + +const pluginState = reactive({ + pluginEvent: 'all' +}) + +const layoutState = reactive({ + deviceType: 'desktop', + iframeWidth: '1200px', + dimension: { + deviceType: 'desktop', + width: '', + maxWidth: '', + minWidth: '', + scale: 1, + height: '100%' + }, + plugins: { + fixedPanels: [PLUGIN_NAME.Materials], + render: null, + api: {} // 插件需要注册交互API到这里 + }, + settings: { + render: 'props', + api: null, + activating: false, // 右侧面版激活提示状态 + showDesignSettings: true + }, + toolbars: { + visiblePopover: false + }, + pageStatus: '' +}) + +const registerPluginApi = (api) => { + Object.assign(layoutState.plugins.api, api) +} + +const getScale = () => layoutState.dimension.scale + +// 激活setting面板并高亮提示 +const activeSetting = (name) => { + const { settings } = layoutState + + settings.render = name + nextTick(() => { + settings.activating = true + setTimeout(() => { + // 高亮提示延时 + settings.activating = false + }, 1000) + }) +} + +// 获取当前插件注册的Api +const getPluginApi = (pluginName) => { + const { plugins } = layoutState + + return plugins.api[pluginName] || plugins.api +} + +// 激活plugin面板并返回当前插件注册的Api +const activePlugin = (name, noActiveRender) => { + const { plugins } = layoutState + + if (!noActiveRender) { + plugins.render = name + } + + return new Promise((resolve) => { + nextTick(() => resolve(getPluginApi(name))) + }) +} + +// 关闭插件面板 +const closePlugin = (forceClose) => { + const { plugins } = layoutState + if (!plugins.fixedPanels.includes(plugins.render) || forceClose) { + plugins.render = null + } +} + +const setDimension = (data) => { + Object.assign(layoutState.dimension, data) +} + +const getDimension = () => layoutState.dimension + +const getPluginState = () => layoutState.plugins + +const isEmptyPage = () => layoutState.pageStatus?.state === PAGE_STATUS.Empty + +export default () => { + return { + PLUGIN_NAME, + activeSetting, + activePlugin, + closePlugin, + layoutState, + getScale, + setDimension, + getDimension, + registerPluginApi, + getPluginApi, + getPluginState, + pluginState, + isEmptyPage + } +} diff --git a/packages/controller/src/useMessage.js b/packages/controller/src/useMessage.js new file mode 100644 index 000000000..5681c1b0d --- /dev/null +++ b/packages/controller/src/useMessage.js @@ -0,0 +1,138 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +let lastMessage = null +const subscribers = { '': {} } + +/** + * 订阅消息。 + * + * const { subscribe } = useMessage() + * subscribe({ topic: 'myTopic', callback: data => console.log(data) }) + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, subscriber(可选): 消息集合, callback: 接收到消息之后的回调用函数 } + * @return {Object} { topic: 消息名称, subscriber: 消息集合 } + */ +const subscribe = ({ topic, subscriber, callback } = {}) => { + const root = subscribers[''] + let listeners = root + + if (topic && typeof topic === 'string' && typeof callback === 'function') { + if (subscriber && typeof subscriber === 'string') { + listeners = subscribers[subscriber] || {} + subscribers[subscriber] = listeners + } + + const callbacks = listeners[topic] || [] + listeners[topic] = callbacks + callbacks.push(callback) + + const lastEvent = callbacks.lastEvent || (root[topic] && root[topic].lastEvent) + if (lastEvent) { + callback(lastEvent.data) + } + } + + return { topic, subscriber } +} + +/** + * 取消订阅。 + * + * //订阅消息 + * const { subscribe } = useMessage() + * let message = subscribe({ topic: 'myTopic', callback: data => console.log(data) }) + * + * //取消订阅 + * const { unsubscribe } = useMessage() + * unsubscribe({topic: 'myTopic'}) // 方式一 + * unsubscribe(message) // 方式二 + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, subscriber(可选): 消息集合 } + */ +const unsubscribe = ({ topic, subscriber } = {}) => { + if (topic && typeof topic === 'string') { + const removeListener = (subscriber) => { + const listeners = subscribers[subscriber] + if (listeners) { + delete listeners[topic] + if (subscriber && !Object.getOwnPropertyNames(listeners).length) { + delete subscribers[subscriber] + } + } + } + + if (subscriber && typeof subscriber === 'string') { + removeListener(subscriber) + } else { + Object.keys(subscribers).forEach((key) => { + removeListener(key) + }) + } + } +} + +/** + * 发布消息。 + * const { publish } = useMessage() + * publish({ topic: 'myTopic', data: 'string' }) + * publish({ topic: 'myTopic', data: {} }) + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, data(string | object): 消息内容 } + */ +const publish = ({ topic, data } = {}) => { + if (topic && typeof topic === 'string') { + Object.values(subscribers).forEach((value) => { + let callbacks = value[topic] || [] + + if (callbacks.length) { + callbacks.forEach((callback) => callback(data)) + } else { + value[topic] = callbacks + } + + callbacks.lastEvent = { data } + }) + } +} + +/** + * 广播消息。 + * const { broadcast } = useMessage() + * broadcast({ topic: 'myTopic', data: 'string' }) + * broadcast({ topic: 'myTopic', data: {} }) + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, data(string | object): 消息内容 } + */ +const broadcast = ({ topic, data }) => { + if (topic && typeof topic === 'string') { + lastMessage = { topic, data } + + publish(lastMessage) + } +} + +export default () => { + // 新use的message自动广播上次的异步消息 + lastMessage && publish(lastMessage) + + return { + subscribe, + unsubscribe, + publish, + broadcast + } +} diff --git a/packages/controller/src/useModal.jsx b/packages/controller/src/useModal.jsx new file mode 100644 index 000000000..3c0b0bf8c --- /dev/null +++ b/packages/controller/src/useModal.jsx @@ -0,0 +1,76 @@ +import { h, render } from 'vue' +import { Modal } from '@opentiny/vue' + +const confirm = ({ title, status, message, exec, cancel, showFooter = true }) => { + Modal.confirm({ + title, + status, + showFooter, + message: () => { + return ( + + ) + } + }).then((res) => { + if (res === 'confirm' && typeof exec === 'function') { + exec() + } else if (typeof cancel === 'function') { + cancel() + } + }) +} + +const message = ({ title, status, message, exec, width = '400' }) => { + Modal.alert({ + title, + status, + 'confirm-btn-props': { text: '确定' }, + width: width, + message() { + return ( + + ) + } + }).then(() => { + if (typeof exec === 'function') { + exec() + } + }) +} + +const topbox = (options) => { + const props = { ...options, modelValue: true } + let TopBox = h(Modal, props) + const modalEl = document.createElement('div') + + const close = () => { + TopBox.el.remove() + TopBox = null + } + + render(TopBox, modalEl) + + return { + TopBox, + close + } +} + +window.topbox = topbox +window.message = message + +export default () => { + return { + confirm, + message, + topbox + } +} diff --git a/packages/controller/src/useNotify.jsx b/packages/controller/src/useNotify.jsx new file mode 100644 index 000000000..c9a27b317 --- /dev/null +++ b/packages/controller/src/useNotify.jsx @@ -0,0 +1,25 @@ +import { Notify } from '@opentiny/vue' + +const durationMap = { + info: 5000, + success: 5000, + warning: 10000, + error: 10000 +} + +const useNotify = (config) => { + const { customClass, title, type = 'info', position = 'top-right', ...otherConfig } = config + + + Notify({ + duration: durationMap[type], + ...otherConfig, + position, + title, + type, + customClass: `${customClass}`, + verticalOffset: 46, + }) +} + +export default useNotify diff --git a/packages/controller/src/usePage.js b/packages/controller/src/usePage.js new file mode 100644 index 000000000..8af5fc0e4 --- /dev/null +++ b/packages/controller/src/usePage.js @@ -0,0 +1,147 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive } from 'vue' +import { extend, isEqual } from '@opentiny/vue-renderless/common/object' + +const DEFAULT_PAGE = { + app: '', + name: '', + route: '', + page_content: { + componentName: 'Page', + css: '', + props: {}, + lifeCycles: {}, + children: [], + dataSource: { + list: [] + }, + state: {}, + methods: {}, + utils: [], + bridge: [], + inputs: [], + outputs: [] + }, + isHome: false, + parentId: 'none', + isBody: false, + group: 'staticPages' +} + +const pageSettingState = reactive({ + currentPageDataCopy: {}, // 记录当前页最开始的状态,当用户点击取消按钮的时候恢复到初始状态 + currentPageData: {}, // 当前配置页面的数据 + pages: [], + oldParentId: null, + pageTreeKey: 0, + isNew: false, + ROOT_ID: '0', // 根节点ID + updateTreeData: null, + treeDataMapping: {} +}) + +const isTemporaryPage = reactive({ + saved: false +}) +const isCurrentDataSame = () => { + const data = pageSettingState.currentPageData || {} + const dataCopy = pageSettingState.currentPageDataCopy || {} + let isEqual = true + + Object.keys(dataCopy).some((item) => { + // 页面比较是否更改,为了减少判断次数,不需要判断以下字段 + if (['children', 'label', 'createdBy', 'assets', 'occupier'].includes(item)) { + return false + } else if (item === 'page_content') { + const obj = { + inputs: dataCopy[item].inputs, + outputs: dataCopy[item].outputs, + lifeCycles: dataCopy[item].lifeCycles + } + const objCopy = { + inputs: data[item].inputs, + outputs: data[item].outputs, + lifeCycles: data[item].lifeCycles + } + + if (JSON.stringify(obj) !== JSON.stringify(objCopy)) { + isEqual = false + } + } else { + if (dataCopy[item] !== data[item]) { + isEqual = false + } + } + + return !isEqual + }) + + return isEqual +} + +const changeTreeData = (newParentId, oldParentId) => { + if (newParentId && oldParentId && newParentId !== oldParentId) { + const folderData = pageSettingState.treeDataMapping[newParentId] + const parentData = pageSettingState.treeDataMapping[oldParentId] + const currentPageDataId = pageSettingState.currentPageData.id + const curDataIndex = parentData.children?.findIndex?.(({ id }) => id === currentPageDataId) + + if (curDataIndex > -1) { + parentData.children.splice(curDataIndex, 1) + if (!folderData.children) { + folderData.children = [] + } + folderData.children.unshift(pageSettingState.currentPageData) + pageSettingState.pageTreeKey++ + } + } +} + +const getPageContent = () => { + return pageSettingState.currentPageData.page_content || {} +} + +const initCurrentPageData = (pageDetail) => { + pageSettingState.currentPageData = pageDetail + pageSettingState.currentPageDataCopy = extend(true, {}, pageDetail) + pageSettingState.oldParentId = pageDetail.parentId +} + +const resetPageData = () => { + pageSettingState.currentPageData = {} + pageSettingState.currentPageDataCopy = {} + pageSettingState.oldParentId = null +} + +// 判断当前页面内容是否有修改 +const isChangePageData = () => !isEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy) + +const STATIC_PAGE_GROUP_ID = 0 +const COMMON_PAGE_GROUP_ID = 1 + +export default () => { + return { + DEFAULT_PAGE, + pageSettingState, + isTemporaryPage, + isCurrentDataSame, + changeTreeData, + getPageContent, + resetPageData, + initCurrentPageData, + isChangePageData, + STATIC_PAGE_GROUP_ID, + COMMON_PAGE_GROUP_ID + } +} diff --git a/packages/controller/src/useProperties.js b/packages/controller/src/useProperties.js new file mode 100644 index 000000000..8c0a91caf --- /dev/null +++ b/packages/controller/src/useProperties.js @@ -0,0 +1,234 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { toRaw, nextTick, shallowReactive, ref } from 'vue' +import { constants } from '@opentiny/tiny-engine-utils' +import useCanvas from './useCanvas' +import useResource from './useResource' +import useTranslate from './useTranslate' + +const { COMPONENT_NAME } = constants +const propsUpdateKey = ref(0) + +const otherBaseKey = { + className: { + property: 'className', + type: 'string', + defaultValue: '', + label: { + text: { + zh_CN: '样式类' + } + }, + cols: 12, + rules: [], + widget: { + component: 'MetaInput', + props: {} + } + }, + id: { + property: 'id', + type: 'string', + defaultValue: '', + label: { + text: { + zh_CN: '元素id值' + } + }, + cols: 12, + rules: [], + widget: { + component: 'MetaInput', + props: {} + } + }, + ref: { + property: 'ref', + type: 'string', + defaultValue: '', + label: { + text: { + zh_CN: 'ref引用类' + } + }, + cols: 12, + rules: [], + widget: { + component: 'MetaInput', + props: {} + } + } +} + +const patchOtherName = (content = []) => { + const otherName = ['ref', 'className', 'id'] + otherName.forEach((e) => { + if (!content.find(({ property }) => property === e)) { + content.unshift(JSON.parse(JSON.stringify(otherBaseKey[e]))) + } + }) +} + +const getSlotSwitch = (properties, slots = {}) => { + if (Object.keys(slots).length) { + properties.push({ + label: { + zh_CN: '插槽信息' + }, + description: { + zh_CN: '插槽信息' + }, + content: [ + { + property: 'slots', + labelPosition: 'none', + bindState: false, + widget: { + component: 'MetaSlot', + props: { + slots + } + }, + description: { + zh_CN: '插槽开关' + } + } + ] + }) + } +} + +/** + * 合并元数据与pageSchema中的实际属性 + * @param {*} pageProps 实际节点属性 + * @param {*} groups 组件元数据 + * @returns + */ +const mergeProps = (pageProps = {}, groups = []) => { + const group = groups.map(({ content = [], ...group }) => { + return { + ...group, + content: (content || []).map(({ widget, ...prop }) => { + const { props, ...meta } = widget + const modelValue = pageProps[prop.property] === undefined ? prop.defaultValue : pageProps[prop.property] + + return { + ...prop, + widget: { ...meta, props: { ...props, modelValue } } + } + }) + } + }) + + return group +} + +const translateProp = (value) => { + if (value?.type === 'i18n') { + return useTranslate().translate(value) + } + + return value +} + +/** + * 生成属性面版渲染数据 + * @param {*} instance 画布上当前选中节点信息 + */ + +const properties = shallowReactive({ + schema: null, + parent: null +}) + +const isPageOrBlock = (schema) => [COMPONENT_NAME.Block, COMPONENT_NAME.Page].includes(schema?.componentName) + +const getProps = (schema, parent) => { + // 1 现在选中的节点和当前节点一样,不需要重新计算, 2 默认进来由于scheme和properities.schema相等,因此判断如果是“页面或者区块”需要进入if判断 + if (schema && (properties.schema !== schema || isPageOrBlock(schema))) { + const { props, componentName } = schema + // 若选中的是page或者 blcok,没有对应schema,ComponentName 给 div 设置根节点属性 + const { + schema: metaSchema, + content, + properties + } = useResource().getMaterial(isPageOrBlock(schema) ? 'div' : componentName) + const schemaProps = properties || metaSchema?.properties || content?.schema?.properties || [] + const propGroups = [...schemaProps] + + patchOtherName(propGroups[0]?.content) + getSlotSwitch(propGroups, metaSchema?.slots) + useCanvas().pageState.properties = mergeProps(toRaw(props), propGroups) + } else if (!schema) { + useCanvas().pageState.properties = {} + } + + properties.schema = schema + properties.parent = parent +} + +const setProp = (name, value, type) => { + if (!properties.schema) { + return + } + + properties.schema.props = properties.schema.props || {} + + if ((value === '' && type !== 'String') || value === undefined || value === null) { + delete properties.schema.props[name] + } else { + properties.schema.props[name] = value + } + + // 没有父级,或者不在节点上面,要更新内容。就用setState + const { getNode, setState, updateRect } = useCanvas().renderer.value || {} + getNode(properties.schema.id, true)?.parent || setState(useCanvas().getPageSchema().state) + propsUpdateKey.value++ + + // 更新根节点props不用updateRect + if (!properties.schema.id) { + return + } + + nextTick(updateRect) +} + +const getProp = (key) => { + return (properties.schema.props || {})[key] +} + +const delProp = (name) => { + const props = properties.schema.props || {} + delete props[name] + propsUpdateKey.value++ +} + +const setProps = (schema) => { + Object.entries(schema.props || {}).map(([key, value]) => setProp(key, value)) +} + +export default function () { + return { + getProps, + getProp, + setProps, + mergeProps, + delProp, + setProp, + translateProp, + getSchema(parent) { + return parent ? properties : properties.schema + }, + propsUpdateKey + } +} diff --git a/packages/controller/src/useProperty.js b/packages/controller/src/useProperty.js new file mode 100644 index 000000000..f6e8a9323 --- /dev/null +++ b/packages/controller/src/useProperty.js @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { computed } from 'vue' +import { extend } from '@opentiny/vue-renderless/common/object' +import { constants } from '@opentiny/tiny-engine-utils' +import useBlock from './useBlock' + +const { SCHEMA_DATA_TYPE } = constants + +// 遍历区块属性,查找已关联的组件属性 +const findLinked = ({ componentProperties, componentId, blockProperties }) => { + for (let i = 0; i < blockProperties.length; i++) { + const property = blockProperties[i] + + if (property.linked && componentId === property.linked.id) { + addPropertyLinks({ + componentProperties, + linked: { ...property.linked, blockProperty: property.property }, + defaultValue: property.defaultValue, + propertyName: property.linked.property + }) + } + } +} + +// 给组件属性添加关联信息 +const addPropertyLinks = ({ linked, propertyName, componentProperties }) => { + for (let i = 0; i < componentProperties.length; i++) { + const propertyList = componentProperties[i].content + + for (let j = 0; j < propertyList.length; j++) { + const property = propertyList[j] + + if (property.property === propertyName) { + propertyList[j] = extend(true, {}, property, { + linked, + widget: { + props: { + modelValue: { + type: SCHEMA_DATA_TYPE.JSExpression, + value: `this.props.${linked.blockProperty}` + } + } + } + }) + } + } + } +} + +// 重置组件属性的关联信息 +const resetLink = (properties) => { + if (properties && Array.isArray(properties)) { + properties.forEach((group) => { + if (group?.content && Array.isArray(group.content)) { + group.content.forEach((property) => { + property.linked = null + }) + } + }) + } +} + +export default ({ pageState }) => { + const { getCurrentBlock, getBlockProperties } = useBlock() + + const properties = computed(() => { + // 区块消费时区块属性有关联信息需要重置 + resetLink(pageState.properties) + // 区块编辑态下设置组件关联信息 + if (pageState.isBlock && pageState.currentSchema?.id) { + findLinked({ + componentProperties: pageState.properties, + componentId: pageState.currentSchema.id, + blockProperties: getBlockProperties(getCurrentBlock()) + }) + } + + return pageState.properties + }) + + return { + properties + } +} diff --git a/packages/controller/src/useResource.js b/packages/controller/src/useResource.js new file mode 100644 index 000000000..e8e462ad9 --- /dev/null +++ b/packages/controller/src/useResource.js @@ -0,0 +1,477 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive } from 'vue' +import { getGlobalConfig } from './globalConfig' +import { useHttp } from '@opentiny/tiny-engine-http' +import { utils, constants } from '@opentiny/tiny-engine-utils' +import { meta as BuiltinComponentMaterials } from '@opentiny/tiny-engine-builtin-component' +import { getCanvasStatus } from '../js/canvas' +import useApp from './useApp' +import useCanvas from './useCanvas' +import useTranslate from './useTranslate' +import useEditorInfo from './useEditorInfo' +import useBreadcrumb from './useBreadcrumb' +import useLayout from './useLayout' +import useBlock from './useBlock' +import useNotify from './useNotify' + +const { camelize, capitalize } = utils +const { MATERIAL_TYPE, COMPONENT_NAME, DEFAULT_INTERCEPTOR } = constants + +// 这里存放TinyVue组件、原生HTML、内置组件的缓存 +const resource = new Map() + +// 这里涉及到区块发布后的更新问题,所以需要单独缓存区块 +const blockResource = new Map() + +const http = useHttp() + +const resState = reactive({ + components: [], + blocks: [], + dataSource: [], + pageTree: [], + langs: {}, + utils: {}, + globalState: [], + thirdPartyDeps: { scripts: [], styles: new Set() } +}) + +const getSnippet = (component) => { + let schema = {} + resState.components.forEach(({ children }) => { + const child = children.find(({ snippetName }) => snippetName === component) + child && (schema = child.schema) + }) + + return schema +} + +const generateNode = ({ type, component }) => { + const schema = { + componentName: component, + props: {}, + ...getSnippet(component) + } + + if (type === 'block') { + schema.componentType = 'Block' + } + + return schema +} + +const registerComponent = (data) => { + if (Array.isArray(data.component)) { + const { component, ...others } = data + component.forEach((item) => { + resource.set(item, { item, ...others, type: MATERIAL_TYPE.Component }) + }) + } else { + resource.set(data.component, { ...data, type: MATERIAL_TYPE.Component }) + } + + return data +} + +const fetchBlockDetail = async (blockName) => { + const { getBlockAssetsByVersion } = useBlock() + const currentVersion = resState.componentsMap?.[blockName]?.version + const block = (await http.get(`/material-center/api/block?label=${blockName}`))?.[0] + + if (!block) { + throw new Error(`区块${blockName}不存在!`) + } + + block.assets = getBlockAssetsByVersion(block, currentVersion) + block.assets = history?.assets || block.assets + + return block +} + +/** + * registerBlock 注册区块 + * @param {String|Object} data 当为字符串时请求详细信息 + * @param {*} notFetchResouce 是否添加js css资源到页面 + * @returns + */ +const registerBlock = async (data, notFetchResouce) => { + let block = data + + if (typeof block === 'string') { + try { + block = await fetchBlockDetail(block) + } catch (error) { + useNotify({ + type: 'warning', + title: '区块读取错误', + message: error?.message || error + }) + + return false + } + } + + if (!block) { + return false + } + + block.type = MATERIAL_TYPE.Block + block.component = block.component || block.blockName || block.label || block.fileName + // 区块还原备份时, 后台改变current_history, 所以assets优先从current_history里取 + const assets = block.assets + const label = block.component + const { scripts = [], styles = [] } = assets || {} + + if (notFetchResouce) { + return block + } else { + if (!blockResource.get(label)) { + const { addScript, addStyle } = useCanvas().renderer.value + const promises = scripts + .filter((item) => item.includes('umd.js')) + .map(addScript) + .concat(styles.map(addStyle)) + // 此处删除await,提前放行区块数据,在区块渲染前找到区块数据源映射关系 + Promise.allSettled(promises) + blockResource.set(label, block.content) + } + } + + return block +} + +const clearMaterials = () => { + resState.components = [] + resState.blocks = [] + resource.clear() +} + +const clearBlockResources = () => blockResource.clear() + +/** + * 收集第三方组件库依赖 + * @param {array} components 组件物料列表 + */ +const generateThirdPartyDeps = (components) => { + const styles = [] + const scripts = [] + + components.forEach((item) => { + const { npm, component } = item + + if (!npm || !Object.keys(npm).length) return + + const { package: pkg, script, exportName, css } = npm + const currentPkg = scripts.find((item) => item.package === pkg) + + if (currentPkg) { + // 保存组件id和导出组件名的对应关系 TinyButton: Button + currentPkg.components[component] = exportName + } else { + scripts.push({ + package: pkg, + script, + components: { + [component]: exportName + } + }) + } + + if (css) { + styles.push(css) + } + }) + + resState.thirdPartyDeps.scripts.push(...scripts) + styles.forEach((item) => resState.thirdPartyDeps.styles.add(item)) +} + +const addMaterials = (materials = {}) => { + generateThirdPartyDeps(materials.components) + resState.components.push(...materials.snippets) + materials.components.map(registerComponent) + + const promises = materials?.blocks?.map((item) => registerBlock(item, true)) + Promise.allSettled(promises).then((blocks) => { + if (!blocks?.length) { + return + } + // 默认区块都会展示在默认分组中 + if (!resState.blocks?.[0]?.children) { + resState.blocks.push({ + groupId: useBlock().DEFAULT_GROUP_ID, + groupName: useBlock().DEFAULT_GROUP_NAME, + children: [] + }) + } + resState.blocks[0].children.unshift(...blocks.filter((res) => res.status === 'fulfilled').map((res) => res.value)) + }) +} + +const getMaterial = (name) => { + if (name) { + // 先读取组件缓存,再读取区块缓存 + return ( + resource.get(name) || + resource.get(capitalize(camelize(name))) || + blockResource.get(name) || + blockResource.get(capitalize(camelize(name))) || + {} + ) + } else { + return {} + } +} + +const setMaterial = (name, data) => { + resource.set(name, data) +} + +const getConfigureMap = () => { + const entries = Object.entries(Object.fromEntries(resource)).map(([key, value]) => { + return [key, value.content?.configure || value.configure] + }) + return Object.fromEntries(entries) +} + +const fetchMaterial = async () => { + const { dslMode, canvasOptions } = getGlobalConfig() + const bundleUrls = canvasOptions[dslMode].material + const materials = await Promise.allSettled(bundleUrls.map((url) => http.get(url))) + + materials.forEach((response) => { + if (response.status === 'fulfilled' && response.value.materials) { + addMaterials(response.value.materials) + } + }) +} + +const initPage = (pageInfo) => { + try { + if (pageInfo.meta) { + const { occupier } = pageInfo.meta + + useLayout().layoutState.pageStatus = getCanvasStatus(occupier) + } else { + useLayout().layoutState.pageStatus = { + state: 'empty', + data: {} + } + } + + pageInfo.id = pageInfo.meta?.id + } catch (error) { + console.log(error) // eslint-disable-line + } + + const { id, meta, ...pageSchema } = pageInfo + // 画布传递 schema ,多余的数据不能传递 + useCanvas().initData(pageSchema, { + id, + name: pageInfo?.fileName + }) + useBreadcrumb().setBreadcrumbPage([pageInfo.fileName]) +} + +/** + * 根据区块 id 初始化应用 + * @param {string} blockId 区块 id + */ +const initBlock = async (blockId) => { + const { PLUGIN_NAME, getPluginApi } = useLayout() + const blockApi = getPluginApi(PLUGIN_NAME.BlockManage) + const blockContent = await blockApi.getBlockById(blockId) + + if (blockContent.public_scope_tenants.length) { + blockContent.public_scope_tenants = blockContent.public_scope_tenants.map((e) => e.id) + } + + useLayout().layoutState.pageStatus = getCanvasStatus(blockContent?.occupier) + + // 请求区块详情 + useBlock().initBlock(blockContent, {}, true) +} + +const initPageOrBlock = async () => { + const { pageId, blockId } = useEditorInfo().useInfo() + const { setBreadcrumbPage } = useBreadcrumb() + + if (pageId) { + const { PLUGIN_NAME, getPluginApi } = useLayout() + const pagePluginApi = getPluginApi(PLUGIN_NAME.AppManage) + + const data = await pagePluginApi.getPageById(pageId) + + useLayout().layoutState.pageStatus = getCanvasStatus(data.occupier) + useCanvas().initData(data.page_content, data) + setBreadcrumbPage([data.name]) + return + } + + if (blockId) { + await initBlock(blockId) + + return + } + + // url 没有 pageid 或 blockid,到页面首页或第一页 + const pageInfo = resState.pageTree.find((page) => page?.meta?.isHome) || + resState.pageTree.find( + (page) => page.componentName === COMPONENT_NAME.Page && page?.meta?.group !== 'publicPages' + ) || { + componentName: COMPONENT_NAME.Page + } + initPage(pageInfo) +} + +const handlePopStateEvent = async () => { + const { id, type } = useEditorInfo().useInfo() + + await initPageOrBlock() + + // 国际化貌似有 app 和区块之分,但是目前其实都存到了 app 里面,需要确认是否需要修复 + await useTranslate().initI18n({ host: id, hostType: type }) +} + +/** + * 获取区块保存的依赖信息,合并到resState.thirdPartyDeps + * @param {object} dependencies 区块保存的依赖信息 + */ +const getBlockDeps = (dependencies = {}) => { + const { scripts = [], styles = [] } = dependencies + + scripts.length && + scripts.forEach((npm) => { + const { package: pkg, script, css, components } = npm + const npmInfo = resState.thirdPartyDeps.scripts.find((item) => item.package === pkg) + + if (!npmInfo || !npmInfo.script) { + resState.thirdPartyDeps.scripts.push({ package: pkg, script, css, components }) + } else { + const components = npmInfo.components || {} + + npmInfo.components = { ...components, ...npm.components } + } + }) + + styles?.forEach((item) => resState.thirdPartyDeps.styles.add(item)) +} + +const fetchResource = async ({ isInit = true } = {}) => { + const { id, type } = useEditorInfo().useInfo() + useApp().appInfoState.selectedId = id + + const Builtin = window.Builtin + Builtin.data.materials.components[0].children.map(registerComponent) + BuiltinComponentMaterials.components[0].children.map(registerComponent) + + const builtinSnippets = { + group: '内置组件', + children: [...Builtin.data.materials.snippets[0].children, ...BuiltinComponentMaterials.snippets[0].children] + } + + resState.components.push(builtinSnippets) + + const appData = await useHttp().get(`/app-center/v1/api/apps/schema/${id}`) + resState.pageTree = appData.componentsTree + resState.dataSource = appData.dataSource?.list + resState.dataHandler = appData.dataSource?.dataHandler || DEFAULT_INTERCEPTOR.dataHandler + resState.willFetch = appData.dataSource?.willFetch || DEFAULT_INTERCEPTOR.willFetch + resState.errorHandler = appData.dataSource?.errorHandler || DEFAULT_INTERCEPTOR.errorHandler + + resState.bridge = appData.bridge + resState.utils = appData.utils + resState.isDemo = appData.meta?.is_demo + resState.globalState = appData?.meta.global_state + + if (isInit) { + resState.componentsMap = appData.componentsMap?.reduce((componentsMap, component) => { + if (component.dependencies) { + getBlockDeps(component.dependencies) + } + + return { ...componentsMap, [component.componentName]: component } + }, {}) + } + + // 词条语言为空时使用默认的语言 + const defaultLocales = [ + { lang: 'zh_CN', label: 'zh_CN' }, + { lang: 'en_US', label: 'en_US' } + ] + const locales = Object.keys(appData.i18n).length + ? Object.keys(appData.i18n).map((key) => ({ lang: key, label: key })) + : defaultLocales + resState.langs = { + locales, + messages: appData.i18n + } + + try { + await fetchMaterial() + + if (isInit) { + await initPageOrBlock() + } + + await useTranslate().initI18n({ host: id, hostType: type, init: true }) + } catch (error) { + console.log(error) // eslint-disable-line + } +} + +const getSnippetRelationship = (component) => { + let relationship = {} + resState.components.forEach(({ children }) => { + const child = children.find(({ snippetName }) => snippetName === component) + child && (relationship = child.relationship) + }) + + return relationship +} + +/** + * 获取新增区块的依赖,更新画布中的组件依赖 + * @param {array} blocks 新增的区块列表 + */ +const updateCanvasDependencies = (blocks) => { + blocks.forEach((block) => { + if (!block.content.dependencies) return + + getBlockDeps(block.content.dependencies) + }) + + useCanvas().renderer.value?.canvasDispatch('updateDependencies', { detail: resState.thirdPartyDeps }) +} + +export default function () { + return { + resState, + fetchResource, + fetchMaterial, + generateNode, + addMaterials, + clearMaterials, + clearBlockResources, + getMaterial, + setMaterial, + getConfigureMap, + registerComponent, + registerBlock, + getSnippetRelationship, + initPageOrBlock, + handlePopStateEvent, + updateCanvasDependencies + } +} diff --git a/packages/controller/src/useSaveLocal.js b/packages/controller/src/useSaveLocal.js new file mode 100644 index 000000000..7bbc5fbb0 --- /dev/null +++ b/packages/controller/src/useSaveLocal.js @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { Modal } from '@opentiny/vue' +import { VITE_ORIGIN } from '../js/environments' +import useCanvas from './useCanvas' +import { getGlobalConfig } from './globalConfig' + +// 获取当前页面的全量信息 + +const bridge = window.vscodeBridge + +const confirmSaveLocal = async () => { + const { pageState, setSaved } = useCanvas() + const currentPageId = pageState.currentPageId || pageState.currentPage.id + const currentPageName = pageState.currentPageName || pageState.currentPage.name + + const savePage = await bridge.callHandler('save-page', { + api: `${VITE_ORIGIN}/app-service/api/pages/code/${currentPageId}`, + pageName: currentPageName, + pageId: currentPageId, + platformId: getGlobalConfig()?.platformId + }) + + if (savePage.error) { + Modal.message({ message: savePage.error.message, status: 'error', duration: '5000', top: 60 }) + return + } + + const errorMsg = savePage.data.reason + ? `保存文件到本地失败!失败原因:${savePage.data.reason}` + : '保存文件到本地失败!' + + const message = savePage.data.isSuccess ? '保存文件到本地成功' : errorMsg + + savePage.data.isSuccess && setSaved(true) + + Modal.message({ message, status: 'error', duration: '5000', top: 60 }) +} + +const savePageLocal = async () => { + // 查询本地页面文件是否存在 + const { currentPageId, currentPageName, currentPage } = useCanvas().pageState + const fileExistRes = await bridge.callHandler('page-is-exist', { + pageName: currentPageName || currentPage.name, + pageId: currentPageId || currentPage.id, + platformId: getGlobalConfig()?.platformId + }) + + // 查询本地文件失败:存在同名文件 / 接口报错 + if (fileExistRes.error) { + Modal.message({ message: fileExistRes.error.message, status: 'error', duration: '5000', top: 60 }) + return + } + + // 如果本地不存在同名文件,执行保存文件到本地操作 + if (!fileExistRes.data.isExist) { + confirmSaveLocal() + return + } + + // 如果本地存在同名文件,需要询问用户是否覆盖 + Modal.confirm({ + title: '查询本地文件', + message: '本地已经存在同名文件,是否覆盖?' + }).then((res) => { + res === 'confirm' && confirmSaveLocal() + }) +} + +export default () => { + return { + confirmSaveLocal, + savePageLocal + } +} diff --git a/packages/controller/src/useTranslate.js b/packages/controller/src/useTranslate.js new file mode 100644 index 000000000..3df0e9442 --- /dev/null +++ b/packages/controller/src/useTranslate.js @@ -0,0 +1,255 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { reactive, ref } from 'vue' +import { useHttp } from '@opentiny/tiny-engine-http' +import { utils } from '@opentiny/tiny-engine-utils' +import { isVsCodeEnv } from '../js/environments' +import { constants } from '@opentiny/tiny-engine-utils' +import { generateI18n } from '../js/vscodeGenerateFile' +import useResource from './useResource' +import { PROP_DATA_TYPE } from '../utils' +import useCanvas from './useCanvas' + +const { HOST_TYPE } = constants +const state = reactive({ + langs: {} +}) + +const currentLanguage = ref('zh_CN') +const i18nResource = reactive({ messages: {}, locales: [] }) +const i18nApi = '/app-center/api/i18n/entries' +const globalParams = { + host: '', + host_type: '' +} + +const getLangs = () => state.langs + +const setLangs = (newLangs = {}) => { + state.langs = newLangs +} + +const removeI18n = (key = []) => { + if (!key.length) { + return + } + + const langs = getLangs() + key.forEach((element) => { + delete langs[element] + }) + + useHttp().post(`${i18nApi}/bulk/delete`, { + ...globalParams, + key_in: key + }) +} + +/** + * + * @param {Object} obj 国际化对象 + * @param {Boolean} send 为true时表示需要向后台发起请求进行新增或修改 + * @returns + */ + +const ensureI18n = (obj, send) => { + const { locales } = i18nResource + const contents = Object.fromEntries(locales.map(({ lang }) => [lang, obj[lang]])) + const langs = getLangs() + const key = obj.key || utils.guid() + + if (send) { + const exist = langs[key] + + globalParams.host && + useHttp().post(`${i18nApi}/${exist ? 'update' : 'create'}`, { + ...globalParams, + key, + contents + }) + + locales.forEach((lang) => { + if (i18nResource[lang]?.[key]) { + i18nResource[lang][key] = contents[lang] + } + }) + + // VsCode环境生成本地国际化 + if (isVsCodeEnv) { + generateI18n({ + key, + contents + }) + } + } + + try { + const messages = {} + Object.entries(contents).forEach(([locale, message]) => { + messages[locale] = { + [key]: message + } + }) + + useCanvas().renderer.value?.setLocales(messages, true) + } catch (e) { + // 不需要处理,有报错的词条会在画布初始化的时候统一调setLocales这个方法 + } + + langs[key] = { key, ...contents, type: PROP_DATA_TYPE.I18N } + + return langs[contents.key] +} + +const getI18nData = () => { + return useHttp().get(i18nApi, { + params: { ...globalParams, _limit: -1 } + }) +} + +const getI18n = async ({ init, local }) => { + const { resState } = useResource() + + if (local) { + const locales = resState?.langs?.locales || [] + const messages = {} + const langs = getLangs() + + if (Array.isArray(locales)) { + locales.forEach(({ lang }) => { + messages[lang] = {} + + Object.entries(langs).forEach(([key, message]) => { + messages[lang][key] = message[lang] + }) + }) + } + + return { locales, messages } + } else { + const i18n = init ? resState.langs : await getI18nData + + return i18n + } +} + +const initI18n = async ({ host, hostType, init, local }) => { + globalParams.host = host + const hostTypeVar = 'host_type' + globalParams[hostTypeVar] = hostType || HOST_TYPE.App + + const { locales = [], messages = {} } = await getI18n({ host, hostType, init, local }) + + const langs = locales.map((item) => item.lang) + + const firstLangData = messages[langs[0] || 'zh_CN'] + + i18nResource.locales = locales + i18nResource.messages = messages + + Object.keys(firstLangData || {}).forEach((key) => { + const i18n = { key } + + langs.forEach((lang) => messages[lang] && Object.assign(i18n, { [lang]: messages[lang][key] })) + ensureI18n(i18n) + }) +} + +const initAppI18n = async (appId) => { + if (appId) { + await initI18n({ + host: appId, + hostType: HOST_TYPE.App + }) + useCanvas().renderer.value?.setLocales(i18nResource.messages) + } +} + +const initBlockI18n = async (blockId) => { + if (blockId) { + await initI18n({ + host: blockId, + hostType: HOST_TYPE.Block + }) + useCanvas().renderer.value?.setLocales(i18nResource.messages) + } +} + +const initBlockLocalI18n = async (langs = {}) => { + setLangs(langs) + await initI18n({ + host: '', + hostType: HOST_TYPE.Block, + local: true + }) + useCanvas().renderer.value?.setLocales(i18nResource.messages) +} + +const format = (str = '', params = {}) => str.replace(/\$\{(.+?)\}/g, (substr, key) => params[key] || '') + +const translate = (obj) => { + const { type, key = utils.guid() } = obj || {} + + if (type === PROP_DATA_TYPE.I18N) { + const langs = getLangs() + const i18n = langs[key] + const langData = i18n || obj + + return format(langData[currentLanguage.value] || langData.key, obj.params) + } + + return obj +} + +const getData = () => i18nResource.messages + +const batchCreateI18n = ({ host, hostType }) => { + if (!host) { + return + } + + globalParams.host = host + globalParams.host_type = hostType + + const { locales } = i18nResource + const langs = getLangs() + + const entries = Object.entries(langs).map(([key, message]) => ({ + key, + contents: Object.fromEntries(locales.map(({ lang }) => [lang, message[lang]])) + })) + + useHttp().post(`${i18nApi}/batch/create`, { + ...globalParams, + entries + }) +} + +export default () => { + return { + i18nResource, + currentLanguage, + getLangs, + setLangs, + getData, + translate, + removeI18n, + ensureI18n, + initI18n, + batchCreateI18n, + initAppI18n, + initBlockI18n, + getI18nData, + initBlockLocalI18n + } +} diff --git a/packages/controller/utils.js b/packages/controller/utils.js new file mode 100644 index 000000000..9c22b4861 --- /dev/null +++ b/packages/controller/utils.js @@ -0,0 +1,133 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { isObject, isArray } from '@opentiny/vue-renderless/grid/static' + +export const MATERIAL_TYPE = { + Component: 'component', + Block: 'block' +} + +export const NODE_INSERT_TYPE = { + Inside: 'inside', + After: 'after', + Before: 'before', + Replace: 'replace' +} + +export const PROP_DATA_TYPE = { + I18N: 'i18n', + VARIABLE: 'variable', + JSEXPRESSION: 'JSExpression', + JSRESOURCE: 'JSResource', + JSSLOT: 'JSSlot' +} + +/** + * Create a cached version of a pure function. + */ +function cached(fn) { + const cache = Object.create(null) + return function cachedFn(str) { + if (!cache[str]) { + cache[str] = fn(str) + } + return cache[str] + } +} + +/** + * Camelize a hyphen-delimited string. + */ +const camelizeRE = /-(\w)/g +export const camelize = cached((str) => { + return str.replace(camelizeRE, (_, c) => { + return c ? c.toUpperCase() : '' + }) +}) + +/** + * Capitalize a string. + */ +export const capitalize = cached((str) => { + return str.charAt(0).toUpperCase() + str.slice(1) +}) + +const hyphenateRE = /\B([A-Z])/g +export const hyphenate = cached((str) => { + return str.replace(hyphenateRE, '-$1').toLowerCase() +}) + +export const getEnumData = (item) => { + if (item.enum && item.enumNames) { + return item.enum.map((value, index) => ({ value, text: item.enumNames[index] })) + } + return undefined +} + +export const mapTree = (obj = {}, handler, childName = 'children') => { + const children = obj[childName] + const node = handler(obj) + if (Array.isArray(children)) { + node[childName] = children.map((child) => mapTree(child, handler)) + } + + return node +} + +export const mapObj = (source, handler, rootKey) => { + const caller = (obj, key) => { + const { item, deep } = handler(obj, key) + + return deep ? mapObj(item, handler, key) : item + } + + if (isArray(source)) { + return source.map((obj) => caller(obj, rootKey)) + } + + if (source && isObject(source)) { + return Object.keys(source).reduce((output, key) => { + output[key] = caller(source[key], rootKey || key) + + return output + }, {}) + } + + return source +} + +export const generateFunction = (body, context) => { + const Func = Function + try { + return new Func(`return ${body}`).call(context).bind(context) + } catch (error) { + // do nothing + } + return undefined +} + +export const getDefaultProps = (properties = []) => { + const props = {} + + properties.forEach(({ content = [] }) => { + content.forEach(({ defaultValue, schema, property }) => { + const value = Array.isArray(schema) ? getDefaultProps(schema) : defaultValue + + if (value) { + props[property] = value + } + }) + }) + + return props +} diff --git a/packages/controller/vite.config.js b/packages/controller/vite.config.js new file mode 100644 index 000000000..5602cfc18 --- /dev/null +++ b/packages/controller/vite.config.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import { glob } from 'glob' +import { fileURLToPath } from 'node:url' + +const jsEntries = glob.sync('./js/**.js').map((file) => { + return [file.slice(0, file.length - path.extname(file).length), fileURLToPath(new URL(file, import.meta.url))] +}) + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + resolve: {}, + define: { + 'process.env': {}, + 'import.meta': 'import.meta' + }, + build: { + cssCodeSplit: false, + lib: { + entry: { + index: path.resolve(__dirname, './src/index.js'), + adapter: path.resolve(__dirname, './adapter.js'), + utils: path.resolve(__dirname, './utils.js'), + ...Object.fromEntries(jsEntries) + }, + name: 'controller', + fileName: (formats, entryName) => `${entryName}.js`, + formats: ['es'] + }, + rollupOptions: { + external: ['vue', 'vue-i18n', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/, /^prettier.*/, /^@babel.*/] + } + } +}) diff --git a/packages/design-core/.env.alpha b/packages/design-core/.env.alpha new file mode 100644 index 000000000..cfd059c8b --- /dev/null +++ b/packages/design-core/.env.alpha @@ -0,0 +1,10 @@ +# alpha mode, used by the "build:alpha" script + +NODE_ENV=production +VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +# VITE_ORIGIN= + +# 错误监控上报 url +VITE_ERROR_MONITOR_URL=/platform-center/api/platform/monitoring/event +# 是否开启错误监控 +VITE_ERROR_MONITOR=false diff --git a/packages/design-core/.env.development b/packages/design-core/.env.development new file mode 100644 index 000000000..05e65af31 --- /dev/null +++ b/packages/design-core/.env.development @@ -0,0 +1,6 @@ +# development mode, used by the "vite" command + +NODE_ENV=development +VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +# request data via alpha service +# VITE_ORIGIN= \ No newline at end of file diff --git a/packages/design-core/.env.prod b/packages/design-core/.env.prod new file mode 100644 index 000000000..00c129ad6 --- /dev/null +++ b/packages/design-core/.env.prod @@ -0,0 +1,5 @@ +# prod mode, used by the "build:prod" script + +NODE_ENV=production +VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +#VITE_ORIGIN= \ No newline at end of file diff --git a/packages/design-core/.npmignore b/packages/design-core/.npmignore new file mode 100644 index 000000000..474a335e8 --- /dev/null +++ b/packages/design-core/.npmignore @@ -0,0 +1,8 @@ +test +node_modules +package-lock.json +.idea + +public/mock/* +tmp +temp \ No newline at end of file diff --git a/packages/design-core/assets/AI.png b/packages/design-core/assets/AI.png new file mode 100644 index 0000000000000000000000000000000000000000..05ea3740624760e8ea3fc1b2134946017e822062 GIT binary patch literal 121432 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�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 + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/accordion.svg b/packages/design-core/assets/accordion.svg new file mode 100644 index 000000000..a58c5db7e --- /dev/null +++ b/packages/design-core/assets/accordion.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/achart.svg b/packages/design-core/assets/achart.svg new file mode 100644 index 000000000..3f0b0594c --- /dev/null +++ b/packages/design-core/assets/achart.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/add-collection.svg b/packages/design-core/assets/add-collection.svg new file mode 100644 index 000000000..322b2e705 --- /dev/null +++ b/packages/design-core/assets/add-collection.svg @@ -0,0 +1,13 @@ + + + 操作/添加 2 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/add-folder.svg b/packages/design-core/assets/add-folder.svg new file mode 100644 index 000000000..a357eb377 --- /dev/null +++ b/packages/design-core/assets/add-folder.svg @@ -0,0 +1,12 @@ + + + 类型/新建文件夹 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/add-group.svg b/packages/design-core/assets/add-group.svg new file mode 100644 index 000000000..23a31ee02 --- /dev/null +++ b/packages/design-core/assets/add-group.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/packages/design-core/assets/add-page-new.svg b/packages/design-core/assets/add-page-new.svg new file mode 100644 index 000000000..55ca79208 --- /dev/null +++ b/packages/design-core/assets/add-page-new.svg @@ -0,0 +1,13 @@ + + + 操作/添加 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/add-page.svg b/packages/design-core/assets/add-page.svg new file mode 100644 index 000000000..011725eaa --- /dev/null +++ b/packages/design-core/assets/add-page.svg @@ -0,0 +1,9 @@ + + ic_redirect_plus_lined + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/add-utils.svg b/packages/design-core/assets/add-utils.svg new file mode 100644 index 000000000..23b8ea09c --- /dev/null +++ b/packages/design-core/assets/add-utils.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/design-core/assets/add.svg b/packages/design-core/assets/add.svg new file mode 100644 index 000000000..44f21fa3b --- /dev/null +++ b/packages/design-core/assets/add.svg @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/alert.svg b/packages/design-core/assets/alert.svg new file mode 100644 index 000000000..02be2f42c --- /dev/null +++ b/packages/design-core/assets/alert.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/align-content-center.svg b/packages/design-core/assets/align-content-center.svg new file mode 100644 index 000000000..900599217 --- /dev/null +++ b/packages/design-core/assets/align-content-center.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-content-end.svg b/packages/design-core/assets/align-content-end.svg new file mode 100644 index 000000000..10096580d --- /dev/null +++ b/packages/design-core/assets/align-content-end.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-content-space-around.svg b/packages/design-core/assets/align-content-space-around.svg new file mode 100644 index 000000000..c200c8e32 --- /dev/null +++ b/packages/design-core/assets/align-content-space-around.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-content-space-between.svg b/packages/design-core/assets/align-content-space-between.svg new file mode 100644 index 000000000..90e9cc8b3 --- /dev/null +++ b/packages/design-core/assets/align-content-space-between.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-content-start.svg b/packages/design-core/assets/align-content-start.svg new file mode 100644 index 000000000..8acd3ae10 --- /dev/null +++ b/packages/design-core/assets/align-content-start.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-content-stretch.svg b/packages/design-core/assets/align-content-stretch.svg new file mode 100644 index 000000000..6f13565ee --- /dev/null +++ b/packages/design-core/assets/align-content-stretch.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-items-baseline.svg b/packages/design-core/assets/align-items-baseline.svg new file mode 100644 index 000000000..be7f60e25 --- /dev/null +++ b/packages/design-core/assets/align-items-baseline.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-items-center.svg b/packages/design-core/assets/align-items-center.svg new file mode 100644 index 000000000..ac4d44ce2 --- /dev/null +++ b/packages/design-core/assets/align-items-center.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-items-end.svg b/packages/design-core/assets/align-items-end.svg new file mode 100644 index 000000000..cda47ffd9 --- /dev/null +++ b/packages/design-core/assets/align-items-end.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-items-start.svg b/packages/design-core/assets/align-items-start.svg new file mode 100644 index 000000000..b52a39b9e --- /dev/null +++ b/packages/design-core/assets/align-items-start.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/align-items-stretch.svg b/packages/design-core/assets/align-items-stretch.svg new file mode 100644 index 000000000..7cf7af4db --- /dev/null +++ b/packages/design-core/assets/align-items-stretch.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/background-color.svg b/packages/design-core/assets/background-color.svg new file mode 100644 index 000000000..5a5b78857 --- /dev/null +++ b/packages/design-core/assets/background-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/background-image.svg b/packages/design-core/assets/background-image.svg new file mode 100644 index 000000000..229cae5c1 --- /dev/null +++ b/packages/design-core/assets/background-image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/bar.svg b/packages/design-core/assets/bar.svg new file mode 100644 index 000000000..5f95d02fe --- /dev/null +++ b/packages/design-core/assets/bar.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/basic-search.svg b/packages/design-core/assets/basic-search.svg new file mode 100644 index 000000000..c819bf74d --- /dev/null +++ b/packages/design-core/assets/basic-search.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/bdlayout.svg b/packages/design-core/assets/bdlayout.svg new file mode 100644 index 000000000..213803f8c --- /dev/null +++ b/packages/design-core/assets/bdlayout.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/packages/design-core/assets/beingmaintained.svg b/packages/design-core/assets/beingmaintained.svg new file mode 100644 index 000000000..ce9ff98a6 --- /dev/null +++ b/packages/design-core/assets/beingmaintained.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/bem.svg b/packages/design-core/assets/bem.svg new file mode 100644 index 000000000..d8b74b230 --- /dev/null +++ b/packages/design-core/assets/bem.svg @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/beta.svg b/packages/design-core/assets/beta.svg new file mode 100644 index 000000000..d9bb1478f --- /dev/null +++ b/packages/design-core/assets/beta.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/bind-variable.svg b/packages/design-core/assets/bind-variable.svg new file mode 100644 index 000000000..9ccc2b6a0 --- /dev/null +++ b/packages/design-core/assets/bind-variable.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/block-default-img.svg b/packages/design-core/assets/block-default-img.svg new file mode 100644 index 000000000..543ff6ae9 --- /dev/null +++ b/packages/design-core/assets/block-default-img.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/block-manage.svg b/packages/design-core/assets/block-manage.svg new file mode 100644 index 000000000..9ad7e7b22 --- /dev/null +++ b/packages/design-core/assets/block-manage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-all.svg b/packages/design-core/assets/border-all.svg new file mode 100644 index 000000000..4ffa1819b --- /dev/null +++ b/packages/design-core/assets/border-all.svg @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-bottom.svg b/packages/design-core/assets/border-bottom.svg new file mode 100644 index 000000000..8f93e91c7 --- /dev/null +++ b/packages/design-core/assets/border-bottom.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-left.svg b/packages/design-core/assets/border-left.svg new file mode 100644 index 000000000..a6f894050 --- /dev/null +++ b/packages/design-core/assets/border-left.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-radius-bottomleft.svg b/packages/design-core/assets/border-radius-bottomleft.svg new file mode 100644 index 000000000..59f226fda --- /dev/null +++ b/packages/design-core/assets/border-radius-bottomleft.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-radius-bottomright.svg b/packages/design-core/assets/border-radius-bottomright.svg new file mode 100644 index 000000000..d271d9e50 --- /dev/null +++ b/packages/design-core/assets/border-radius-bottomright.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-radius-multiple.svg b/packages/design-core/assets/border-radius-multiple.svg new file mode 100644 index 000000000..f1fef4b8c --- /dev/null +++ b/packages/design-core/assets/border-radius-multiple.svg @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-radius-single.svg b/packages/design-core/assets/border-radius-single.svg new file mode 100644 index 000000000..be7c187f6 --- /dev/null +++ b/packages/design-core/assets/border-radius-single.svg @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-radius-topleft.svg b/packages/design-core/assets/border-radius-topleft.svg new file mode 100644 index 000000000..b9fb600bd --- /dev/null +++ b/packages/design-core/assets/border-radius-topleft.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-radius-topright.svg b/packages/design-core/assets/border-radius-topright.svg new file mode 100644 index 000000000..dce377c3c --- /dev/null +++ b/packages/design-core/assets/border-radius-topright.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-right.svg b/packages/design-core/assets/border-right.svg new file mode 100644 index 000000000..3692a90c6 --- /dev/null +++ b/packages/design-core/assets/border-right.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-style-dashed.svg b/packages/design-core/assets/border-style-dashed.svg new file mode 100644 index 000000000..df7c5c95e --- /dev/null +++ b/packages/design-core/assets/border-style-dashed.svg @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-style-dotted.svg b/packages/design-core/assets/border-style-dotted.svg new file mode 100644 index 000000000..2318c0158 --- /dev/null +++ b/packages/design-core/assets/border-style-dotted.svg @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-style-solid.svg b/packages/design-core/assets/border-style-solid.svg new file mode 100644 index 000000000..1fa74bbfb --- /dev/null +++ b/packages/design-core/assets/border-style-solid.svg @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/border-top.svg b/packages/design-core/assets/border-top.svg new file mode 100644 index 000000000..b73d8a431 --- /dev/null +++ b/packages/design-core/assets/border-top.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/box.svg b/packages/design-core/assets/box.svg new file mode 100644 index 000000000..582efb3b8 --- /dev/null +++ b/packages/design-core/assets/box.svg @@ -0,0 +1,10 @@ + + + + diff --git a/packages/design-core/assets/breadcrumb.svg b/packages/design-core/assets/breadcrumb.svg new file mode 100644 index 000000000..bd90eda9d --- /dev/null +++ b/packages/design-core/assets/breadcrumb.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/packages/design-core/assets/bridge.svg b/packages/design-core/assets/bridge.svg new file mode 100644 index 000000000..53d4fd65f --- /dev/null +++ b/packages/design-core/assets/bridge.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/button.svg b/packages/design-core/assets/button.svg new file mode 100644 index 000000000..b0e05b71c --- /dev/null +++ b/packages/design-core/assets/button.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/buttons.svg b/packages/design-core/assets/buttons.svg new file mode 100644 index 000000000..b9efa9cc1 --- /dev/null +++ b/packages/design-core/assets/buttons.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git a/packages/design-core/assets/cancel-full-screen.svg b/packages/design-core/assets/cancel-full-screen.svg new file mode 100644 index 000000000..f2ae2e9f2 --- /dev/null +++ b/packages/design-core/assets/cancel-full-screen.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/canvas-fit.svg b/packages/design-core/assets/canvas-fit.svg new file mode 100644 index 000000000..ac33f3c29 --- /dev/null +++ b/packages/design-core/assets/canvas-fit.svg @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/carousel.svg b/packages/design-core/assets/carousel.svg new file mode 100644 index 000000000..0da954851 --- /dev/null +++ b/packages/design-core/assets/carousel.svg @@ -0,0 +1,15 @@ + + + + + + + diff --git a/packages/design-core/assets/carouselitem.svg b/packages/design-core/assets/carouselitem.svg new file mode 100644 index 000000000..b40cfe4e0 --- /dev/null +++ b/packages/design-core/assets/carouselitem.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/chat-maximize.svg b/packages/design-core/assets/chat-maximize.svg new file mode 100644 index 000000000..0ea860701 --- /dev/null +++ b/packages/design-core/assets/chat-maximize.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/chat-message.svg b/packages/design-core/assets/chat-message.svg new file mode 100644 index 000000000..9e7fd691a --- /dev/null +++ b/packages/design-core/assets/chat-message.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/chat-microphone.svg b/packages/design-core/assets/chat-microphone.svg new file mode 100644 index 000000000..486f8a6f6 --- /dev/null +++ b/packages/design-core/assets/chat-microphone.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/chat-minimize.svg b/packages/design-core/assets/chat-minimize.svg new file mode 100644 index 000000000..88f0c3f85 --- /dev/null +++ b/packages/design-core/assets/chat-minimize.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/packages/design-core/assets/checkbox.svg b/packages/design-core/assets/checkbox.svg new file mode 100644 index 000000000..f2de5a921 --- /dev/null +++ b/packages/design-core/assets/checkbox.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/packages/design-core/assets/checkboxgroup.svg b/packages/design-core/assets/checkboxgroup.svg new file mode 100644 index 000000000..b312c70c1 --- /dev/null +++ b/packages/design-core/assets/checkboxgroup.svg @@ -0,0 +1,10 @@ + + + + diff --git a/packages/design-core/assets/checkboxs.svg b/packages/design-core/assets/checkboxs.svg new file mode 100644 index 000000000..fdbbaa23c --- /dev/null +++ b/packages/design-core/assets/checkboxs.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/checkin.svg b/packages/design-core/assets/checkin.svg new file mode 100644 index 000000000..3ad506e10 --- /dev/null +++ b/packages/design-core/assets/checkin.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/checkout.svg b/packages/design-core/assets/checkout.svg new file mode 100644 index 000000000..ca19c6316 --- /dev/null +++ b/packages/design-core/assets/checkout.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/clear.svg b/packages/design-core/assets/clear.svg new file mode 100644 index 000000000..8619e2169 --- /dev/null +++ b/packages/design-core/assets/clear.svg @@ -0,0 +1,13 @@ + + + ic_eraser_lined + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/clock-small.svg b/packages/design-core/assets/clock-small.svg new file mode 100644 index 000000000..e2b9ae8a8 --- /dev/null +++ b/packages/design-core/assets/clock-small.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/clock-wise-counter.svg b/packages/design-core/assets/clock-wise-counter.svg new file mode 100644 index 000000000..c1737d270 --- /dev/null +++ b/packages/design-core/assets/clock-wise-counter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/clock-wise.svg b/packages/design-core/assets/clock-wise.svg new file mode 100644 index 000000000..ec7b481d2 --- /dev/null +++ b/packages/design-core/assets/clock-wise.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/close.svg b/packages/design-core/assets/close.svg new file mode 100644 index 000000000..ce53f7cae --- /dev/null +++ b/packages/design-core/assets/close.svg @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/closest-corner.svg b/packages/design-core/assets/closest-corner.svg new file mode 100644 index 000000000..8defcf2d9 --- /dev/null +++ b/packages/design-core/assets/closest-corner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/closest-side.svg b/packages/design-core/assets/closest-side.svg new file mode 100644 index 000000000..37515b389 --- /dev/null +++ b/packages/design-core/assets/closest-side.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cloud-shell.svg b/packages/design-core/assets/cloud-shell.svg new file mode 100644 index 000000000..e04bbba52 --- /dev/null +++ b/packages/design-core/assets/cloud-shell.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/cn.svg b/packages/design-core/assets/cn.svg new file mode 100644 index 000000000..17459c66b --- /dev/null +++ b/packages/design-core/assets/cn.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/packages/design-core/assets/col.svg b/packages/design-core/assets/col.svg new file mode 100644 index 000000000..fbda1f56a --- /dev/null +++ b/packages/design-core/assets/col.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/packages/design-core/assets/collapse.svg b/packages/design-core/assets/collapse.svg new file mode 100644 index 000000000..080b417c8 --- /dev/null +++ b/packages/design-core/assets/collapse.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/packages/design-core/assets/collection.svg b/packages/design-core/assets/collection.svg new file mode 100644 index 000000000..8f455f9b6 --- /dev/null +++ b/packages/design-core/assets/collection.svg @@ -0,0 +1,11 @@ + + + + diff --git a/packages/design-core/assets/copy-outline.svg b/packages/design-core/assets/copy-outline.svg new file mode 100644 index 000000000..d6c3e645f --- /dev/null +++ b/packages/design-core/assets/copy-outline.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/copy.svg b/packages/design-core/assets/copy.svg new file mode 100644 index 000000000..f8d52974c --- /dev/null +++ b/packages/design-core/assets/copy.svg @@ -0,0 +1,8 @@ + + + 操作/复制 + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/cross.svg b/packages/design-core/assets/cross.svg new file mode 100644 index 000000000..4bdee7c8a --- /dev/null +++ b/packages/design-core/assets/cross.svg @@ -0,0 +1,10 @@ + + + 全局/关闭 + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-alias.svg b/packages/design-core/assets/cursor-alias.svg new file mode 100644 index 000000000..cf615aa19 --- /dev/null +++ b/packages/design-core/assets/cursor-alias.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-auto.svg b/packages/design-core/assets/cursor-auto.svg new file mode 100644 index 000000000..a2ecb13e0 --- /dev/null +++ b/packages/design-core/assets/cursor-auto.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-cell.svg b/packages/design-core/assets/cursor-cell.svg new file mode 100644 index 000000000..b5ddd25e3 --- /dev/null +++ b/packages/design-core/assets/cursor-cell.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-col-resize.svg b/packages/design-core/assets/cursor-col-resize.svg new file mode 100644 index 000000000..7ee46308b --- /dev/null +++ b/packages/design-core/assets/cursor-col-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-context-menu.svg b/packages/design-core/assets/cursor-context-menu.svg new file mode 100644 index 000000000..88decec41 --- /dev/null +++ b/packages/design-core/assets/cursor-context-menu.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-copy.svg b/packages/design-core/assets/cursor-copy.svg new file mode 100644 index 000000000..fe39ffbf1 --- /dev/null +++ b/packages/design-core/assets/cursor-copy.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-crosshair.svg b/packages/design-core/assets/cursor-crosshair.svg new file mode 100644 index 000000000..3a94a5e31 --- /dev/null +++ b/packages/design-core/assets/cursor-crosshair.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-e-resize.svg b/packages/design-core/assets/cursor-e-resize.svg new file mode 100644 index 000000000..5032785e7 --- /dev/null +++ b/packages/design-core/assets/cursor-e-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-ew-resize.svg b/packages/design-core/assets/cursor-ew-resize.svg new file mode 100644 index 000000000..74f7a487b --- /dev/null +++ b/packages/design-core/assets/cursor-ew-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-grab.svg b/packages/design-core/assets/cursor-grab.svg new file mode 100644 index 000000000..8ff2b2c8c --- /dev/null +++ b/packages/design-core/assets/cursor-grab.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-grabbing.svg b/packages/design-core/assets/cursor-grabbing.svg new file mode 100644 index 000000000..47df374c9 --- /dev/null +++ b/packages/design-core/assets/cursor-grabbing.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-help.svg b/packages/design-core/assets/cursor-help.svg new file mode 100644 index 000000000..952c6ecb9 --- /dev/null +++ b/packages/design-core/assets/cursor-help.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-move.svg b/packages/design-core/assets/cursor-move.svg new file mode 100644 index 000000000..da2d38880 --- /dev/null +++ b/packages/design-core/assets/cursor-move.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-n-resize.svg b/packages/design-core/assets/cursor-n-resize.svg new file mode 100644 index 000000000..b7295e20b --- /dev/null +++ b/packages/design-core/assets/cursor-n-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-ne-resize.svg b/packages/design-core/assets/cursor-ne-resize.svg new file mode 100644 index 000000000..9ba46228b --- /dev/null +++ b/packages/design-core/assets/cursor-ne-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-nesw-resize.svg b/packages/design-core/assets/cursor-nesw-resize.svg new file mode 100644 index 000000000..b2bc180fd --- /dev/null +++ b/packages/design-core/assets/cursor-nesw-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-none.svg b/packages/design-core/assets/cursor-none.svg new file mode 100644 index 000000000..a3d7e3e6d --- /dev/null +++ b/packages/design-core/assets/cursor-none.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-not-allowed.svg b/packages/design-core/assets/cursor-not-allowed.svg new file mode 100644 index 000000000..324df3068 --- /dev/null +++ b/packages/design-core/assets/cursor-not-allowed.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-ns-resize.svg b/packages/design-core/assets/cursor-ns-resize.svg new file mode 100644 index 000000000..ff628d1b5 --- /dev/null +++ b/packages/design-core/assets/cursor-ns-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-nw-resize.svg b/packages/design-core/assets/cursor-nw-resize.svg new file mode 100644 index 000000000..e00c77010 --- /dev/null +++ b/packages/design-core/assets/cursor-nw-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-nwse-resize.svg b/packages/design-core/assets/cursor-nwse-resize.svg new file mode 100644 index 000000000..fa046f6f2 --- /dev/null +++ b/packages/design-core/assets/cursor-nwse-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-pointer.svg b/packages/design-core/assets/cursor-pointer.svg new file mode 100644 index 000000000..5e798a405 --- /dev/null +++ b/packages/design-core/assets/cursor-pointer.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-progress.svg b/packages/design-core/assets/cursor-progress.svg new file mode 100644 index 000000000..c6a277198 --- /dev/null +++ b/packages/design-core/assets/cursor-progress.svg @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-row-resize.svg b/packages/design-core/assets/cursor-row-resize.svg new file mode 100644 index 000000000..7ca65ed79 --- /dev/null +++ b/packages/design-core/assets/cursor-row-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-s-resize.svg b/packages/design-core/assets/cursor-s-resize.svg new file mode 100644 index 000000000..1d18741c3 --- /dev/null +++ b/packages/design-core/assets/cursor-s-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-se-resize.svg b/packages/design-core/assets/cursor-se-resize.svg new file mode 100644 index 000000000..3faeb4257 --- /dev/null +++ b/packages/design-core/assets/cursor-se-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-sw-resize.svg b/packages/design-core/assets/cursor-sw-resize.svg new file mode 100644 index 000000000..c88a666c3 --- /dev/null +++ b/packages/design-core/assets/cursor-sw-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-text.svg b/packages/design-core/assets/cursor-text.svg new file mode 100644 index 000000000..d48605521 --- /dev/null +++ b/packages/design-core/assets/cursor-text.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-vertical-text.svg b/packages/design-core/assets/cursor-vertical-text.svg new file mode 100644 index 000000000..a699b14ad --- /dev/null +++ b/packages/design-core/assets/cursor-vertical-text.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-w-resize.svg b/packages/design-core/assets/cursor-w-resize.svg new file mode 100644 index 000000000..16c98fd28 --- /dev/null +++ b/packages/design-core/assets/cursor-w-resize.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-wait.svg b/packages/design-core/assets/cursor-wait.svg new file mode 100644 index 000000000..0528fb3a2 --- /dev/null +++ b/packages/design-core/assets/cursor-wait.svg @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-zoom-in.svg b/packages/design-core/assets/cursor-zoom-in.svg new file mode 100644 index 000000000..2801ba596 --- /dev/null +++ b/packages/design-core/assets/cursor-zoom-in.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/cursor-zoom-out.svg b/packages/design-core/assets/cursor-zoom-out.svg new file mode 100644 index 000000000..f4c570438 --- /dev/null +++ b/packages/design-core/assets/cursor-zoom-out.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/data.svg b/packages/design-core/assets/data.svg new file mode 100644 index 000000000..de1c97b31 --- /dev/null +++ b/packages/design-core/assets/data.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/datepick.svg b/packages/design-core/assets/datepick.svg new file mode 100644 index 000000000..677b860d1 --- /dev/null +++ b/packages/design-core/assets/datepick.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/packages/design-core/assets/daterange.svg b/packages/design-core/assets/daterange.svg new file mode 100644 index 000000000..9159c82b0 --- /dev/null +++ b/packages/design-core/assets/daterange.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/delete.svg b/packages/design-core/assets/delete.svg new file mode 100644 index 000000000..03d1807be --- /dev/null +++ b/packages/design-core/assets/delete.svg @@ -0,0 +1,11 @@ + + + 操作/删除 + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/descend.svg b/packages/design-core/assets/descend.svg new file mode 100644 index 000000000..d1bdb91de --- /dev/null +++ b/packages/design-core/assets/descend.svg @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/desktop-large.svg b/packages/design-core/assets/desktop-large.svg new file mode 100644 index 000000000..51690b61a --- /dev/null +++ b/packages/design-core/assets/desktop-large.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/dialogbox.svg b/packages/design-core/assets/dialogbox.svg new file mode 100644 index 000000000..388920887 --- /dev/null +++ b/packages/design-core/assets/dialogbox.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/display-block.svg b/packages/design-core/assets/display-block.svg new file mode 100644 index 000000000..99e4c35b4 --- /dev/null +++ b/packages/design-core/assets/display-block.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/display-flex.svg b/packages/design-core/assets/display-flex.svg new file mode 100644 index 000000000..98bdc1d1b --- /dev/null +++ b/packages/design-core/assets/display-flex.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/display-grid.svg b/packages/design-core/assets/display-grid.svg new file mode 100644 index 000000000..305e29869 --- /dev/null +++ b/packages/design-core/assets/display-grid.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/display-inline-block.svg b/packages/design-core/assets/display-inline-block.svg new file mode 100644 index 000000000..1c10000d4 --- /dev/null +++ b/packages/design-core/assets/display-inline-block.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/display-inline.svg b/packages/design-core/assets/display-inline.svg new file mode 100644 index 000000000..214c2a4ec --- /dev/null +++ b/packages/design-core/assets/display-inline.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/dragger.svg b/packages/design-core/assets/dragger.svg new file mode 100644 index 000000000..ed906cae4 --- /dev/null +++ b/packages/design-core/assets/dragger.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/dropdown.svg b/packages/design-core/assets/dropdown.svg new file mode 100644 index 000000000..bf4ce3d2d --- /dev/null +++ b/packages/design-core/assets/dropdown.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/edit.svg b/packages/design-core/assets/edit.svg new file mode 100644 index 000000000..aeafe44cd --- /dev/null +++ b/packages/design-core/assets/edit.svg @@ -0,0 +1,11 @@ + + + 操作/编辑 2 + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/ellipsis.svg b/packages/design-core/assets/ellipsis.svg new file mode 100644 index 000000000..7f0e7b694 --- /dev/null +++ b/packages/design-core/assets/ellipsis.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/empty-action.svg b/packages/design-core/assets/empty-action.svg new file mode 100644 index 000000000..357df9518 --- /dev/null +++ b/packages/design-core/assets/empty-action.svg @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/empty-data.svg b/packages/design-core/assets/empty-data.svg new file mode 100644 index 000000000..26dccc951 --- /dev/null +++ b/packages/design-core/assets/empty-data.svg @@ -0,0 +1,19 @@ + + emptydata + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/empty.svg b/packages/design-core/assets/empty.svg new file mode 100644 index 000000000..055253a5c --- /dev/null +++ b/packages/design-core/assets/empty.svg @@ -0,0 +1,27 @@ + + + 空数据 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/en.svg b/packages/design-core/assets/en.svg new file mode 100644 index 000000000..877870f90 --- /dev/null +++ b/packages/design-core/assets/en.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/error.svg b/packages/design-core/assets/error.svg new file mode 100644 index 000000000..9da1b4b80 --- /dev/null +++ b/packages/design-core/assets/error.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/events.svg b/packages/design-core/assets/events.svg new file mode 100644 index 000000000..d96ad7ec6 --- /dev/null +++ b/packages/design-core/assets/events.svg @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/expand.svg b/packages/design-core/assets/expand.svg new file mode 100644 index 000000000..3a6bfa612 --- /dev/null +++ b/packages/design-core/assets/expand.svg @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/eye-invisible.svg b/packages/design-core/assets/eye-invisible.svg new file mode 100644 index 000000000..cbe2feb36 --- /dev/null +++ b/packages/design-core/assets/eye-invisible.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/eye.svg b/packages/design-core/assets/eye.svg new file mode 100644 index 000000000..42be6ffe4 --- /dev/null +++ b/packages/design-core/assets/eye.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/farthest-corner.svg b/packages/design-core/assets/farthest-corner.svg new file mode 100644 index 000000000..c791bda19 --- /dev/null +++ b/packages/design-core/assets/farthest-corner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/farthest-side.svg b/packages/design-core/assets/farthest-side.svg new file mode 100644 index 000000000..f1890e8e7 --- /dev/null +++ b/packages/design-core/assets/farthest-side.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/fixed.svg b/packages/design-core/assets/fixed.svg new file mode 100644 index 000000000..d7c8ce65a --- /dev/null +++ b/packages/design-core/assets/fixed.svg @@ -0,0 +1,7 @@ + + + 操作/未固定 + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-alignbaselinerow.svg b/packages/design-core/assets/flex-alignbaselinerow.svg new file mode 100644 index 000000000..36098438f --- /dev/null +++ b/packages/design-core/assets/flex-alignbaselinerow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-aligncenterrow.svg b/packages/design-core/assets/flex-aligncenterrow.svg new file mode 100644 index 000000000..8050c98cc --- /dev/null +++ b/packages/design-core/assets/flex-aligncenterrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-alignflex-endrow.svg b/packages/design-core/assets/flex-alignflex-endrow.svg new file mode 100644 index 000000000..946d6350e --- /dev/null +++ b/packages/design-core/assets/flex-alignflex-endrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-alignflex-startrow.svg b/packages/design-core/assets/flex-alignflex-startrow.svg new file mode 100644 index 000000000..1ae35c087 --- /dev/null +++ b/packages/design-core/assets/flex-alignflex-startrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-alignstretchrow.svg b/packages/design-core/assets/flex-alignstretchrow.svg new file mode 100644 index 000000000..259602edf --- /dev/null +++ b/packages/design-core/assets/flex-alignstretchrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-directioncolumn-reverse.svg b/packages/design-core/assets/flex-directioncolumn-reverse.svg new file mode 100644 index 000000000..517c7242a --- /dev/null +++ b/packages/design-core/assets/flex-directioncolumn-reverse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-directioncolumn.svg b/packages/design-core/assets/flex-directioncolumn.svg new file mode 100644 index 000000000..2f1ff7704 --- /dev/null +++ b/packages/design-core/assets/flex-directioncolumn.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-directionrow-reverse.svg b/packages/design-core/assets/flex-directionrow-reverse.svg new file mode 100644 index 000000000..cbaa8cd9a --- /dev/null +++ b/packages/design-core/assets/flex-directionrow-reverse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-directionrow.svg b/packages/design-core/assets/flex-directionrow.svg new file mode 100644 index 000000000..bd4b7d5ad --- /dev/null +++ b/packages/design-core/assets/flex-directionrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-justifycenterrow.svg b/packages/design-core/assets/flex-justifycenterrow.svg new file mode 100644 index 000000000..bfe683fe4 --- /dev/null +++ b/packages/design-core/assets/flex-justifycenterrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-justifyflex-endrow.svg b/packages/design-core/assets/flex-justifyflex-endrow.svg new file mode 100644 index 000000000..7f970a07c --- /dev/null +++ b/packages/design-core/assets/flex-justifyflex-endrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-justifyflex-startrow.svg b/packages/design-core/assets/flex-justifyflex-startrow.svg new file mode 100644 index 000000000..a788a9448 --- /dev/null +++ b/packages/design-core/assets/flex-justifyflex-startrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-justifyspace-aroundrow.svg b/packages/design-core/assets/flex-justifyspace-aroundrow.svg new file mode 100644 index 000000000..063c656bc --- /dev/null +++ b/packages/design-core/assets/flex-justifyspace-aroundrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flex-justifyspace-betweenrow.svg b/packages/design-core/assets/flex-justifyspace-betweenrow.svg new file mode 100644 index 000000000..2ceea34c7 --- /dev/null +++ b/packages/design-core/assets/flex-justifyspace-betweenrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-add.svg b/packages/design-core/assets/flow-add.svg new file mode 100644 index 000000000..73ffde4d2 --- /dev/null +++ b/packages/design-core/assets/flow-add.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-align-bottom.svg b/packages/design-core/assets/flow-align-bottom.svg new file mode 100644 index 000000000..0ff7d006a --- /dev/null +++ b/packages/design-core/assets/flow-align-bottom.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/design-core/assets/flow-align-left.svg b/packages/design-core/assets/flow-align-left.svg new file mode 100644 index 000000000..e237485c6 --- /dev/null +++ b/packages/design-core/assets/flow-align-left.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/design-core/assets/flow-align-level.svg b/packages/design-core/assets/flow-align-level.svg new file mode 100644 index 000000000..cdde2e578 --- /dev/null +++ b/packages/design-core/assets/flow-align-level.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/packages/design-core/assets/flow-align-rf.svg b/packages/design-core/assets/flow-align-rf.svg new file mode 100644 index 000000000..d33e4eafd --- /dev/null +++ b/packages/design-core/assets/flow-align-rf.svg @@ -0,0 +1,27 @@ + + + icon9 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-align-right.svg b/packages/design-core/assets/flow-align-right.svg new file mode 100644 index 000000000..2fc31a292 --- /dev/null +++ b/packages/design-core/assets/flow-align-right.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/packages/design-core/assets/flow-align-top.svg b/packages/design-core/assets/flow-align-top.svg new file mode 100644 index 000000000..8dcc0f671 --- /dev/null +++ b/packages/design-core/assets/flow-align-top.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/packages/design-core/assets/flow-align-vertical.svg b/packages/design-core/assets/flow-align-vertical.svg new file mode 100644 index 000000000..29636855c --- /dev/null +++ b/packages/design-core/assets/flow-align-vertical.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/design-core/assets/flow-box-select-rf.svg b/packages/design-core/assets/flow-box-select-rf.svg new file mode 100644 index 000000000..402dc9004 --- /dev/null +++ b/packages/design-core/assets/flow-box-select-rf.svg @@ -0,0 +1,21 @@ + + + 框选 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-box-select.svg b/packages/design-core/assets/flow-box-select.svg new file mode 100644 index 000000000..4e9fb70fe --- /dev/null +++ b/packages/design-core/assets/flow-box-select.svg @@ -0,0 +1,41 @@ + + + + +Created with Sketch. + + + + + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/flow-checkmark.svg b/packages/design-core/assets/flow-checkmark.svg new file mode 100644 index 000000000..799de6c68 --- /dev/null +++ b/packages/design-core/assets/flow-checkmark.svg @@ -0,0 +1 @@ +checkmark \ No newline at end of file diff --git a/packages/design-core/assets/flow-clear.svg b/packages/design-core/assets/flow-clear.svg new file mode 100644 index 000000000..d0d878005 --- /dev/null +++ b/packages/design-core/assets/flow-clear.svg @@ -0,0 +1,16 @@ + + + icon7 + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-cross.svg b/packages/design-core/assets/flow-cross.svg new file mode 100644 index 000000000..266e8ec20 --- /dev/null +++ b/packages/design-core/assets/flow-cross.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/flow-delete.svg b/packages/design-core/assets/flow-delete.svg new file mode 100644 index 000000000..47b3f641b --- /dev/null +++ b/packages/design-core/assets/flow-delete.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-download.svg b/packages/design-core/assets/flow-download.svg new file mode 100644 index 000000000..9f7cb78b4 --- /dev/null +++ b/packages/design-core/assets/flow-download.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/design-core/assets/flow-edit.svg b/packages/design-core/assets/flow-edit.svg new file mode 100644 index 000000000..ea80621bc --- /dev/null +++ b/packages/design-core/assets/flow-edit.svg @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-empty.svg b/packages/design-core/assets/flow-empty.svg new file mode 100644 index 000000000..d580e0fd1 --- /dev/null +++ b/packages/design-core/assets/flow-empty.svg @@ -0,0 +1,26 @@ + + 小 暂无数据 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-failure.svg b/packages/design-core/assets/flow-failure.svg new file mode 100644 index 000000000..cd15fca74 --- /dev/null +++ b/packages/design-core/assets/flow-failure.svg @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-file-download.svg b/packages/design-core/assets/flow-file-download.svg new file mode 100644 index 000000000..f215dc166 --- /dev/null +++ b/packages/design-core/assets/flow-file-download.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/packages/design-core/assets/flow-fullscreen-icon.svg b/packages/design-core/assets/flow-fullscreen-icon.svg new file mode 100644 index 000000000..8b8b07b12 --- /dev/null +++ b/packages/design-core/assets/flow-fullscreen-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-core/assets/flow-guide.svg b/packages/design-core/assets/flow-guide.svg new file mode 100644 index 000000000..8ad449680 --- /dev/null +++ b/packages/design-core/assets/flow-guide.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-help-center.svg b/packages/design-core/assets/flow-help-center.svg new file mode 100644 index 000000000..cb1234b3d --- /dev/null +++ b/packages/design-core/assets/flow-help-center.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/flow-location.svg b/packages/design-core/assets/flow-location.svg new file mode 100644 index 000000000..3e18a6153 --- /dev/null +++ b/packages/design-core/assets/flow-location.svg @@ -0,0 +1,21 @@ + + + icon5 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-minscreen-icon.svg b/packages/design-core/assets/flow-minscreen-icon.svg new file mode 100644 index 000000000..8c0f398a2 --- /dev/null +++ b/packages/design-core/assets/flow-minscreen-icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/flow-navigation.svg b/packages/design-core/assets/flow-navigation.svg new file mode 100644 index 000000000..cc1b5ca24 --- /dev/null +++ b/packages/design-core/assets/flow-navigation.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/packages/design-core/assets/flow-params-rf.svg b/packages/design-core/assets/flow-params-rf.svg new file mode 100644 index 000000000..9f701ac66 --- /dev/null +++ b/packages/design-core/assets/flow-params-rf.svg @@ -0,0 +1,9 @@ + + + 画板 + + + + + + diff --git a/packages/design-core/assets/flow-params.svg b/packages/design-core/assets/flow-params.svg new file mode 100644 index 000000000..a4f7bed0f --- /dev/null +++ b/packages/design-core/assets/flow-params.svg @@ -0,0 +1,49 @@ + + + 编组 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-prompt.svg b/packages/design-core/assets/flow-prompt.svg new file mode 100644 index 000000000..58b2bad79 --- /dev/null +++ b/packages/design-core/assets/flow-prompt.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-redo.svg b/packages/design-core/assets/flow-redo.svg new file mode 100644 index 000000000..0361bdd56 --- /dev/null +++ b/packages/design-core/assets/flow-redo.svg @@ -0,0 +1,15 @@ + + + xiugai111 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-reduce.svg b/packages/design-core/assets/flow-reduce.svg new file mode 100644 index 000000000..460059e89 --- /dev/null +++ b/packages/design-core/assets/flow-reduce.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-refresh.svg b/packages/design-core/assets/flow-refresh.svg new file mode 100644 index 000000000..dfc3c4adc --- /dev/null +++ b/packages/design-core/assets/flow-refresh.svg @@ -0,0 +1,12 @@ + + + 刷新 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-requirestar.svg b/packages/design-core/assets/flow-requirestar.svg new file mode 100644 index 000000000..4d4282203 --- /dev/null +++ b/packages/design-core/assets/flow-requirestar.svg @@ -0,0 +1,14 @@ + + + 星号 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-select.svg b/packages/design-core/assets/flow-select.svg new file mode 100644 index 000000000..68445c1f0 --- /dev/null +++ b/packages/design-core/assets/flow-select.svg @@ -0,0 +1,18 @@ + + + + +Created with Sketch. + + + + + + + + diff --git a/packages/design-core/assets/flow-set-bottom.svg b/packages/design-core/assets/flow-set-bottom.svg new file mode 100644 index 000000000..c34ff147c --- /dev/null +++ b/packages/design-core/assets/flow-set-bottom.svg @@ -0,0 +1,27 @@ + + + icon0 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-set-top.svg b/packages/design-core/assets/flow-set-top.svg new file mode 100644 index 000000000..b78cb942f --- /dev/null +++ b/packages/design-core/assets/flow-set-top.svg @@ -0,0 +1,27 @@ + + + icon-a + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-success.svg b/packages/design-core/assets/flow-success.svg new file mode 100644 index 000000000..c75a6c66a --- /dev/null +++ b/packages/design-core/assets/flow-success.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-undo.svg b/packages/design-core/assets/flow-undo.svg new file mode 100644 index 000000000..a6dcf0971 --- /dev/null +++ b/packages/design-core/assets/flow-undo.svg @@ -0,0 +1,16 @@ + + + xiugai111 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-view-rf.svg b/packages/design-core/assets/flow-view-rf.svg new file mode 100644 index 000000000..6c934fb8f --- /dev/null +++ b/packages/design-core/assets/flow-view-rf.svg @@ -0,0 +1,13 @@ + + + 编组 31 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-view.svg b/packages/design-core/assets/flow-view.svg new file mode 100644 index 000000000..056801517 --- /dev/null +++ b/packages/design-core/assets/flow-view.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/packages/design-core/assets/flow-zoom-in.svg b/packages/design-core/assets/flow-zoom-in.svg new file mode 100644 index 000000000..ae6437894 --- /dev/null +++ b/packages/design-core/assets/flow-zoom-in.svg @@ -0,0 +1,12 @@ + + + icon4 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/flow-zoom-out.svg b/packages/design-core/assets/flow-zoom-out.svg new file mode 100644 index 000000000..4a0300b82 --- /dev/null +++ b/packages/design-core/assets/flow-zoom-out.svg @@ -0,0 +1,12 @@ + + + icon4 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/fold-outline.svg b/packages/design-core/assets/fold-outline.svg new file mode 100644 index 000000000..a13f5ec1c --- /dev/null +++ b/packages/design-core/assets/fold-outline.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/folder-wold.svg b/packages/design-core/assets/folder-wold.svg new file mode 100644 index 000000000..1aa966ca1 --- /dev/null +++ b/packages/design-core/assets/folder-wold.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/folder.svg b/packages/design-core/assets/folder.svg new file mode 100644 index 000000000..ce1455611 --- /dev/null +++ b/packages/design-core/assets/folder.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/font-style-italic.svg b/packages/design-core/assets/font-style-italic.svg new file mode 100644 index 000000000..cbb30369f --- /dev/null +++ b/packages/design-core/assets/font-style-italic.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/font-style-none.svg b/packages/design-core/assets/font-style-none.svg new file mode 100644 index 000000000..8dcdd575d --- /dev/null +++ b/packages/design-core/assets/font-style-none.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/form.svg b/packages/design-core/assets/form.svg new file mode 100644 index 000000000..3eb5cf04d --- /dev/null +++ b/packages/design-core/assets/form.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/formfield.svg b/packages/design-core/assets/formfield.svg new file mode 100644 index 000000000..35daddcdc --- /dev/null +++ b/packages/design-core/assets/formfield.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/packages/design-core/assets/formitem.svg b/packages/design-core/assets/formitem.svg new file mode 100644 index 000000000..c097e40b2 --- /dev/null +++ b/packages/design-core/assets/formitem.svg @@ -0,0 +1,2 @@ + + diff --git a/packages/design-core/assets/frozenpage.svg b/packages/design-core/assets/frozenpage.svg new file mode 100644 index 000000000..5f6066fd7 --- /dev/null +++ b/packages/design-core/assets/frozenpage.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/full-screen.svg b/packages/design-core/assets/full-screen.svg new file mode 100644 index 000000000..71f2eb1c4 --- /dev/null +++ b/packages/design-core/assets/full-screen.svg @@ -0,0 +1,30 @@ + + + 操作/全屏 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/generate-code.svg b/packages/design-core/assets/generate-code.svg new file mode 100644 index 000000000..2c78583a1 --- /dev/null +++ b/packages/design-core/assets/generate-code.svg @@ -0,0 +1,17 @@ + + + 操作/下载 + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/grid-column-flex.svg b/packages/design-core/assets/grid-column-flex.svg new file mode 100644 index 000000000..c855bf0f4 --- /dev/null +++ b/packages/design-core/assets/grid-column-flex.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/grid-row-auto.svg b/packages/design-core/assets/grid-row-auto.svg new file mode 100644 index 000000000..c0e129542 --- /dev/null +++ b/packages/design-core/assets/grid-row-auto.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/grid.svg b/packages/design-core/assets/grid.svg new file mode 100644 index 000000000..32abffe83 --- /dev/null +++ b/packages/design-core/assets/grid.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/h1.svg b/packages/design-core/assets/h1.svg new file mode 100644 index 000000000..79506ba18 --- /dev/null +++ b/packages/design-core/assets/h1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/h16.svg b/packages/design-core/assets/h16.svg new file mode 100644 index 000000000..c3f7d7f6d --- /dev/null +++ b/packages/design-core/assets/h16.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/packages/design-core/assets/h2.svg b/packages/design-core/assets/h2.svg new file mode 100644 index 000000000..34ee33295 --- /dev/null +++ b/packages/design-core/assets/h2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/h3.svg b/packages/design-core/assets/h3.svg new file mode 100644 index 000000000..85f4886a0 --- /dev/null +++ b/packages/design-core/assets/h3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/h4.svg b/packages/design-core/assets/h4.svg new file mode 100644 index 000000000..b3e218356 --- /dev/null +++ b/packages/design-core/assets/h4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/h5.svg b/packages/design-core/assets/h5.svg new file mode 100644 index 000000000..11d5a580b --- /dev/null +++ b/packages/design-core/assets/h5.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/h6.svg b/packages/design-core/assets/h6.svg new file mode 100644 index 000000000..008ebf3f1 --- /dev/null +++ b/packages/design-core/assets/h6.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/help-center.svg b/packages/design-core/assets/help-center.svg new file mode 100644 index 000000000..45b48855d --- /dev/null +++ b/packages/design-core/assets/help-center.svg @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/help.svg b/packages/design-core/assets/help.svg new file mode 100644 index 000000000..68233e366 --- /dev/null +++ b/packages/design-core/assets/help.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/histogram.svg b/packages/design-core/assets/histogram.svg new file mode 100644 index 000000000..d0ed4ef8f --- /dev/null +++ b/packages/design-core/assets/histogram.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/home-outline.svg b/packages/design-core/assets/home-outline.svg new file mode 100644 index 000000000..6ccdc65c2 --- /dev/null +++ b/packages/design-core/assets/home-outline.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/packages/design-core/assets/home.svg b/packages/design-core/assets/home.svg new file mode 100644 index 000000000..2cb522a62 --- /dev/null +++ b/packages/design-core/assets/home.svg @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/hr.svg b/packages/design-core/assets/hr.svg new file mode 100644 index 000000000..4ae70e294 --- /dev/null +++ b/packages/design-core/assets/hr.svg @@ -0,0 +1,8 @@ + + + + diff --git a/packages/design-core/assets/icon.svg b/packages/design-core/assets/icon.svg new file mode 100644 index 000000000..34dae441f --- /dev/null +++ b/packages/design-core/assets/icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/packages/design-core/assets/image.svg b/packages/design-core/assets/image.svg new file mode 100644 index 000000000..07c59d4ab --- /dev/null +++ b/packages/design-core/assets/image.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/packages/design-core/assets/input.svg b/packages/design-core/assets/input.svg new file mode 100644 index 000000000..6a47c5014 --- /dev/null +++ b/packages/design-core/assets/input.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/packages/design-core/assets/internationalization.svg b/packages/design-core/assets/internationalization.svg new file mode 100644 index 000000000..e14a32d83 --- /dev/null +++ b/packages/design-core/assets/internationalization.svg @@ -0,0 +1,13 @@ + + + 国际化 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/js.svg b/packages/design-core/assets/js.svg new file mode 100644 index 000000000..25c11a496 --- /dev/null +++ b/packages/design-core/assets/js.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/packages/design-core/assets/json.svg b/packages/design-core/assets/json.svg new file mode 100644 index 000000000..84ffaee6c --- /dev/null +++ b/packages/design-core/assets/json.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/justify-content-center.svg b/packages/design-core/assets/justify-content-center.svg new file mode 100644 index 000000000..c34402ee1 --- /dev/null +++ b/packages/design-core/assets/justify-content-center.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-content-end.svg b/packages/design-core/assets/justify-content-end.svg new file mode 100644 index 000000000..db8fda458 --- /dev/null +++ b/packages/design-core/assets/justify-content-end.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-content-space-around.svg b/packages/design-core/assets/justify-content-space-around.svg new file mode 100644 index 000000000..e4b2f033b --- /dev/null +++ b/packages/design-core/assets/justify-content-space-around.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-content-space-between.svg b/packages/design-core/assets/justify-content-space-between.svg new file mode 100644 index 000000000..3a1861da5 --- /dev/null +++ b/packages/design-core/assets/justify-content-space-between.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-content-start.svg b/packages/design-core/assets/justify-content-start.svg new file mode 100644 index 000000000..e9a323afc --- /dev/null +++ b/packages/design-core/assets/justify-content-start.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-content-stretch.svg b/packages/design-core/assets/justify-content-stretch.svg new file mode 100644 index 000000000..fa7ef6765 --- /dev/null +++ b/packages/design-core/assets/justify-content-stretch.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-items-baseline.svg b/packages/design-core/assets/justify-items-baseline.svg new file mode 100644 index 000000000..bb5226872 --- /dev/null +++ b/packages/design-core/assets/justify-items-baseline.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-items-center.svg b/packages/design-core/assets/justify-items-center.svg new file mode 100644 index 000000000..8f1387a0d --- /dev/null +++ b/packages/design-core/assets/justify-items-center.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-items-end.svg b/packages/design-core/assets/justify-items-end.svg new file mode 100644 index 000000000..20a3fc492 --- /dev/null +++ b/packages/design-core/assets/justify-items-end.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-items-start.svg b/packages/design-core/assets/justify-items-start.svg new file mode 100644 index 000000000..ab1a1a4e0 --- /dev/null +++ b/packages/design-core/assets/justify-items-start.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/justify-items-stretch.svg b/packages/design-core/assets/justify-items-stretch.svg new file mode 100644 index 000000000..bbc5d5376 --- /dev/null +++ b/packages/design-core/assets/justify-items-stretch.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/language.svg b/packages/design-core/assets/language.svg new file mode 100644 index 000000000..068f8815c --- /dev/null +++ b/packages/design-core/assets/language.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/packages/design-core/assets/laptop-cut-corner.svg b/packages/design-core/assets/laptop-cut-corner.svg new file mode 100644 index 000000000..3b49fe003 --- /dev/null +++ b/packages/design-core/assets/laptop-cut-corner.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/line.svg b/packages/design-core/assets/line.svg new file mode 100644 index 000000000..a1d1eae3e --- /dev/null +++ b/packages/design-core/assets/line.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/linear-gradient.svg b/packages/design-core/assets/linear-gradient.svg new file mode 100644 index 000000000..c1c4c32fd --- /dev/null +++ b/packages/design-core/assets/linear-gradient.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/link.svg b/packages/design-core/assets/link.svg new file mode 100644 index 000000000..85f8219ab --- /dev/null +++ b/packages/design-core/assets/link.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/packages/design-core/assets/list.svg b/packages/design-core/assets/list.svg new file mode 100644 index 000000000..05edc612b --- /dev/null +++ b/packages/design-core/assets/list.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/loading.svg b/packages/design-core/assets/loading.svg new file mode 100644 index 000000000..299e8aa6d --- /dev/null +++ b/packages/design-core/assets/loading.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/design-core/assets/location.svg b/packages/design-core/assets/location.svg new file mode 100644 index 000000000..a5e4e9a79 --- /dev/null +++ b/packages/design-core/assets/location.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/locked-outline.svg b/packages/design-core/assets/locked-outline.svg new file mode 100644 index 000000000..69f5b2eba --- /dev/null +++ b/packages/design-core/assets/locked-outline.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/locked.svg b/packages/design-core/assets/locked.svg new file mode 100644 index 000000000..dc8a8ebba --- /dev/null +++ b/packages/design-core/assets/locked.svg @@ -0,0 +1,10 @@ + + + ic_locked_lined + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/logout.svg b/packages/design-core/assets/logout.svg new file mode 100644 index 000000000..5026ac9d9 --- /dev/null +++ b/packages/design-core/assets/logout.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/margin.svg b/packages/design-core/assets/margin.svg new file mode 100644 index 000000000..faf1eb7e9 --- /dev/null +++ b/packages/design-core/assets/margin.svg @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/materials.svg b/packages/design-core/assets/materials.svg new file mode 100644 index 000000000..7cf24ce06 --- /dev/null +++ b/packages/design-core/assets/materials.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/menu.svg b/packages/design-core/assets/menu.svg new file mode 100644 index 000000000..9f13785e5 --- /dev/null +++ b/packages/design-core/assets/menu.svg @@ -0,0 +1,13 @@ + + + ic_menul_line_lined + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/mobile-landscape.svg b/packages/design-core/assets/mobile-landscape.svg new file mode 100644 index 000000000..50786bdae --- /dev/null +++ b/packages/design-core/assets/mobile-landscape.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/mobile-portrai.svg b/packages/design-core/assets/mobile-portrai.svg new file mode 100644 index 000000000..7b0a1dd2a --- /dev/null +++ b/packages/design-core/assets/mobile-portrai.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/new-page.svg b/packages/design-core/assets/new-page.svg new file mode 100644 index 000000000..ef15cddb9 --- /dev/null +++ b/packages/design-core/assets/new-page.svg @@ -0,0 +1,13 @@ + + + 操作/定位到面板 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/news.svg b/packages/design-core/assets/news.svg new file mode 100644 index 000000000..5b97910ec --- /dev/null +++ b/packages/design-core/assets/news.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/nonsupportregion.svg b/packages/design-core/assets/nonsupportregion.svg new file mode 100644 index 000000000..78803a638 --- /dev/null +++ b/packages/design-core/assets/nonsupportregion.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/packages/design-core/assets/notify-alarm.svg b/packages/design-core/assets/notify-alarm.svg new file mode 100644 index 000000000..65250334a --- /dev/null +++ b/packages/design-core/assets/notify-alarm.svg @@ -0,0 +1,11 @@ + + + alarm + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/notify-failure.svg b/packages/design-core/assets/notify-failure.svg new file mode 100644 index 000000000..f43ef8a6c --- /dev/null +++ b/packages/design-core/assets/notify-failure.svg @@ -0,0 +1,11 @@ + + + failure + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/notify-prompt.svg b/packages/design-core/assets/notify-prompt.svg new file mode 100644 index 000000000..4c88ecc62 --- /dev/null +++ b/packages/design-core/assets/notify-prompt.svg @@ -0,0 +1,11 @@ + + + prompt + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/notify-success.svg b/packages/design-core/assets/notify-success.svg new file mode 100644 index 000000000..e6308a7dd --- /dev/null +++ b/packages/design-core/assets/notify-success.svg @@ -0,0 +1,11 @@ + + + success + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/numeric.svg b/packages/design-core/assets/numeric.svg new file mode 100644 index 000000000..4fc04e75e --- /dev/null +++ b/packages/design-core/assets/numeric.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/overflow-scroll.svg b/packages/design-core/assets/overflow-scroll.svg new file mode 100644 index 000000000..028a7b775 --- /dev/null +++ b/packages/design-core/assets/overflow-scroll.svg @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/padding.svg b/packages/design-core/assets/padding.svg new file mode 100644 index 000000000..fe4f6e57c --- /dev/null +++ b/packages/design-core/assets/padding.svg @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/page-schema.svg b/packages/design-core/assets/page-schema.svg new file mode 100644 index 000000000..ab4b1b64a --- /dev/null +++ b/packages/design-core/assets/page-schema.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/packages/design-core/assets/page.svg b/packages/design-core/assets/page.svg new file mode 100644 index 000000000..7241678dd --- /dev/null +++ b/packages/design-core/assets/page.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/packages/design-core/assets/pager.svg b/packages/design-core/assets/pager.svg new file mode 100644 index 000000000..596193821 --- /dev/null +++ b/packages/design-core/assets/pager.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/paragraph.svg b/packages/design-core/assets/paragraph.svg new file mode 100644 index 000000000..da5e4d797 --- /dev/null +++ b/packages/design-core/assets/paragraph.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/packages/design-core/assets/pencil-thick.svg b/packages/design-core/assets/pencil-thick.svg new file mode 100644 index 000000000..f9c06a793 --- /dev/null +++ b/packages/design-core/assets/pencil-thick.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/pie.svg b/packages/design-core/assets/pie.svg new file mode 100644 index 000000000..c9d07ad79 --- /dev/null +++ b/packages/design-core/assets/pie.svg @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/packages/design-core/assets/plugin-help.svg b/packages/design-core/assets/plugin-help.svg new file mode 100644 index 000000000..1431b3cfc --- /dev/null +++ b/packages/design-core/assets/plugin-help.svg @@ -0,0 +1 @@ +帮助中心 \ No newline at end of file diff --git a/packages/design-core/assets/plugin-icon-data.svg b/packages/design-core/assets/plugin-icon-data.svg new file mode 100644 index 000000000..f0f7a8715 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-data.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/packages/design-core/assets/plugin-icon-js.svg b/packages/design-core/assets/plugin-icon-js.svg new file mode 100644 index 000000000..f912d107a --- /dev/null +++ b/packages/design-core/assets/plugin-icon-js.svg @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/packages/design-core/assets/plugin-icon-language.svg b/packages/design-core/assets/plugin-icon-language.svg new file mode 100644 index 000000000..780b81b44 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-language.svg @@ -0,0 +1,20 @@ + + + + + + diff --git a/packages/design-core/assets/plugin-icon-materials.svg b/packages/design-core/assets/plugin-icon-materials.svg new file mode 100644 index 000000000..31240724b --- /dev/null +++ b/packages/design-core/assets/plugin-icon-materials.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/packages/design-core/assets/plugin-icon-page-schema.svg b/packages/design-core/assets/plugin-icon-page-schema.svg new file mode 100644 index 000000000..f64793b0e --- /dev/null +++ b/packages/design-core/assets/plugin-icon-page-schema.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/packages/design-core/assets/plugin-icon-page.svg b/packages/design-core/assets/plugin-icon-page.svg new file mode 100644 index 000000000..41aaeccc2 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-page.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/packages/design-core/assets/plugin-icon-plugin-help.svg b/packages/design-core/assets/plugin-icon-plugin-help.svg new file mode 100644 index 000000000..d5a5e9c66 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-plugin-help.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/plugin-icon-robot.svg b/packages/design-core/assets/plugin-icon-robot.svg new file mode 100644 index 000000000..82212f324 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-robot.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/packages/design-core/assets/plugin-icon-sresources.svg b/packages/design-core/assets/plugin-icon-sresources.svg new file mode 100644 index 000000000..94786d636 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-sresources.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/packages/design-core/assets/plugin-icon-symbol.svg b/packages/design-core/assets/plugin-icon-symbol.svg new file mode 100644 index 000000000..495d60df1 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-symbol.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/packages/design-core/assets/plugin-icon-tree.svg b/packages/design-core/assets/plugin-icon-tree.svg new file mode 100644 index 000000000..b37d62cb6 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-tree.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/packages/design-core/assets/plugin-icon-tutorial.svg b/packages/design-core/assets/plugin-icon-tutorial.svg new file mode 100644 index 000000000..aaf5a0809 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-tutorial.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/packages/design-core/assets/plugin-icon-var.svg b/packages/design-core/assets/plugin-icon-var.svg new file mode 100644 index 000000000..18c15a620 --- /dev/null +++ b/packages/design-core/assets/plugin-icon-var.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/plus-circle.svg b/packages/design-core/assets/plus-circle.svg new file mode 100644 index 000000000..a0bbe2982 --- /dev/null +++ b/packages/design-core/assets/plus-circle.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/plus.svg b/packages/design-core/assets/plus.svg new file mode 100644 index 000000000..73ffde4d2 --- /dev/null +++ b/packages/design-core/assets/plus.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/popeditor.svg b/packages/design-core/assets/popeditor.svg new file mode 100644 index 000000000..5a846e10e --- /dev/null +++ b/packages/design-core/assets/popeditor.svg @@ -0,0 +1,15 @@ + + + + + + + diff --git a/packages/design-core/assets/popover.svg b/packages/design-core/assets/popover.svg new file mode 100644 index 000000000..bb5c624ae --- /dev/null +++ b/packages/design-core/assets/popover.svg @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/position-all.svg b/packages/design-core/assets/position-all.svg new file mode 100644 index 000000000..d911e6cc5 --- /dev/null +++ b/packages/design-core/assets/position-all.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-bottom-left.svg b/packages/design-core/assets/position-bottom-left.svg new file mode 100644 index 000000000..6734d5719 --- /dev/null +++ b/packages/design-core/assets/position-bottom-left.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-bottom-right.svg b/packages/design-core/assets/position-bottom-right.svg new file mode 100644 index 000000000..87b46dc32 --- /dev/null +++ b/packages/design-core/assets/position-bottom-right.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-bottom.svg b/packages/design-core/assets/position-bottom.svg new file mode 100644 index 000000000..de8468be1 --- /dev/null +++ b/packages/design-core/assets/position-bottom.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-left.svg b/packages/design-core/assets/position-left.svg new file mode 100644 index 000000000..0a14b8f0a --- /dev/null +++ b/packages/design-core/assets/position-left.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-right.svg b/packages/design-core/assets/position-right.svg new file mode 100644 index 000000000..45df77143 --- /dev/null +++ b/packages/design-core/assets/position-right.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-top-left.svg b/packages/design-core/assets/position-top-left.svg new file mode 100644 index 000000000..965c7bca7 --- /dev/null +++ b/packages/design-core/assets/position-top-left.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-top-right.svg b/packages/design-core/assets/position-top-right.svg new file mode 100644 index 000000000..00680806a --- /dev/null +++ b/packages/design-core/assets/position-top-right.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/position-top.svg b/packages/design-core/assets/position-top.svg new file mode 100644 index 000000000..2fc39c982 --- /dev/null +++ b/packages/design-core/assets/position-top.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/preview.svg b/packages/design-core/assets/preview.svg new file mode 100644 index 000000000..da9964e73 --- /dev/null +++ b/packages/design-core/assets/preview.svg @@ -0,0 +1,12 @@ + + + 操作/播放1 + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/prompt.svg b/packages/design-core/assets/prompt.svg new file mode 100644 index 000000000..9652fa103 --- /dev/null +++ b/packages/design-core/assets/prompt.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/radar.svg b/packages/design-core/assets/radar.svg new file mode 100644 index 000000000..e758f795c --- /dev/null +++ b/packages/design-core/assets/radar.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/packages/design-core/assets/radial-gradient.svg b/packages/design-core/assets/radial-gradient.svg new file mode 100644 index 000000000..a01f76625 --- /dev/null +++ b/packages/design-core/assets/radial-gradient.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/radio.svg b/packages/design-core/assets/radio.svg new file mode 100644 index 000000000..41ee7ab06 --- /dev/null +++ b/packages/design-core/assets/radio.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/realtime-flow.svg b/packages/design-core/assets/realtime-flow.svg new file mode 100644 index 000000000..3465dc47a --- /dev/null +++ b/packages/design-core/assets/realtime-flow.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/redo.svg b/packages/design-core/assets/redo.svg new file mode 100644 index 000000000..9c84d4cf9 --- /dev/null +++ b/packages/design-core/assets/redo.svg @@ -0,0 +1,12 @@ + + + 操作/还原 2 + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/refresh.svg b/packages/design-core/assets/refresh.svg new file mode 100644 index 000000000..762d72dc5 --- /dev/null +++ b/packages/design-core/assets/refresh.svg @@ -0,0 +1,13 @@ + + + 操作/刷新 2 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/report.svg b/packages/design-core/assets/report.svg new file mode 100644 index 000000000..257119fed --- /dev/null +++ b/packages/design-core/assets/report.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/resources.svg b/packages/design-core/assets/resources.svg new file mode 100644 index 000000000..469e78828 --- /dev/null +++ b/packages/design-core/assets/resources.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/return.svg b/packages/design-core/assets/return.svg new file mode 100644 index 000000000..0897b3500 --- /dev/null +++ b/packages/design-core/assets/return.svg @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/rf-alarm.svg b/packages/design-core/assets/rf-alarm.svg new file mode 100644 index 000000000..d31ce331f --- /dev/null +++ b/packages/design-core/assets/rf-alarm.svg @@ -0,0 +1,11 @@ + + + alarm + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/rf-resources/flowchart-ecs.svg b/packages/design-core/assets/rf-resources/flowchart-ecs.svg new file mode 100644 index 000000000..933fb2a27 --- /dev/null +++ b/packages/design-core/assets/rf-resources/flowchart-ecs.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/rf-resources/flowchart-evs.svg b/packages/design-core/assets/rf-resources/flowchart-evs.svg new file mode 100644 index 000000000..f864d6ae5 --- /dev/null +++ b/packages/design-core/assets/rf-resources/flowchart-evs.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/rf-resources/flowchart-rds.svg b/packages/design-core/assets/rf-resources/flowchart-rds.svg new file mode 100644 index 000000000..efb34b36e --- /dev/null +++ b/packages/design-core/assets/rf-resources/flowchart-rds.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/rf-resources/flowchart-vpc.svg b/packages/design-core/assets/rf-resources/flowchart-vpc.svg new file mode 100644 index 000000000..a85acdc29 --- /dev/null +++ b/packages/design-core/assets/rf-resources/flowchart-vpc.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/ring.svg b/packages/design-core/assets/ring.svg new file mode 100644 index 000000000..09aeb9b08 --- /dev/null +++ b/packages/design-core/assets/ring.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/packages/design-core/assets/row.svg b/packages/design-core/assets/row.svg new file mode 100644 index 000000000..7c31b079c --- /dev/null +++ b/packages/design-core/assets/row.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/packages/design-core/assets/save.svg b/packages/design-core/assets/save.svg new file mode 100644 index 000000000..157897bd8 --- /dev/null +++ b/packages/design-core/assets/save.svg @@ -0,0 +1,12 @@ + + + 操作/保存 + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/search.svg b/packages/design-core/assets/search.svg new file mode 100644 index 000000000..6fe9f4186 --- /dev/null +++ b/packages/design-core/assets/search.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/packages/design-core/assets/select.svg b/packages/design-core/assets/select.svg new file mode 100644 index 000000000..c5d8b4c50 --- /dev/null +++ b/packages/design-core/assets/select.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/packages/design-core/assets/setting-outline.svg b/packages/design-core/assets/setting-outline.svg new file mode 100644 index 000000000..6a391f996 --- /dev/null +++ b/packages/design-core/assets/setting-outline.svg @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/setting.svg b/packages/design-core/assets/setting.svg new file mode 100644 index 000000000..852a94599 --- /dev/null +++ b/packages/design-core/assets/setting.svg @@ -0,0 +1,13 @@ + + + 操作/设置 2 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/slot.svg b/packages/design-core/assets/slot.svg new file mode 100644 index 000000000..79ed51c10 --- /dev/null +++ b/packages/design-core/assets/slot.svg @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/small-list.svg b/packages/design-core/assets/small-list.svg new file mode 100644 index 000000000..db30d399b --- /dev/null +++ b/packages/design-core/assets/small-list.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/packages/design-core/assets/stars.svg b/packages/design-core/assets/stars.svg new file mode 100644 index 000000000..cedfce572 --- /dev/null +++ b/packages/design-core/assets/stars.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/start.svg b/packages/design-core/assets/start.svg new file mode 100644 index 000000000..5d568344e --- /dev/null +++ b/packages/design-core/assets/start.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/style-setting-background-image.svg b/packages/design-core/assets/style-setting-background-image.svg new file mode 100644 index 000000000..c31fef564 --- /dev/null +++ b/packages/design-core/assets/style-setting-background-image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/swiper.svg b/packages/design-core/assets/swiper.svg new file mode 100644 index 000000000..43ae60611 --- /dev/null +++ b/packages/design-core/assets/swiper.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/switch.svg b/packages/design-core/assets/switch.svg new file mode 100644 index 000000000..d976f5874 --- /dev/null +++ b/packages/design-core/assets/switch.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/packages/design-core/assets/symbol.svg b/packages/design-core/assets/symbol.svg new file mode 100644 index 000000000..2b96eabab --- /dev/null +++ b/packages/design-core/assets/symbol.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/packages/design-core/assets/table.svg b/packages/design-core/assets/table.svg new file mode 100644 index 000000000..c8edd039c --- /dev/null +++ b/packages/design-core/assets/table.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/packages/design-core/assets/tablefilter.svg b/packages/design-core/assets/tablefilter.svg new file mode 100644 index 000000000..da00316cc --- /dev/null +++ b/packages/design-core/assets/tablefilter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/tablet-portrait.svg b/packages/design-core/assets/tablet-portrait.svg new file mode 100644 index 000000000..52fafc312 --- /dev/null +++ b/packages/design-core/assets/tablet-portrait.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/packages/design-core/assets/tabs.svg b/packages/design-core/assets/tabs.svg new file mode 100644 index 000000000..0f9156b17 --- /dev/null +++ b/packages/design-core/assets/tabs.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/packages/design-core/assets/tag.svg b/packages/design-core/assets/tag.svg new file mode 100644 index 000000000..3fcf36c1c --- /dev/null +++ b/packages/design-core/assets/tag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/target.svg b/packages/design-core/assets/target.svg new file mode 100644 index 000000000..9522431a7 --- /dev/null +++ b/packages/design-core/assets/target.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-align-center.svg b/packages/design-core/assets/text-align-center.svg new file mode 100644 index 000000000..b837c7423 --- /dev/null +++ b/packages/design-core/assets/text-align-center.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-align-justify.svg b/packages/design-core/assets/text-align-justify.svg new file mode 100644 index 000000000..4a1cc1c92 --- /dev/null +++ b/packages/design-core/assets/text-align-justify.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-align-left.svg b/packages/design-core/assets/text-align-left.svg new file mode 100644 index 000000000..33b6a6016 --- /dev/null +++ b/packages/design-core/assets/text-align-left.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-align-right.svg b/packages/design-core/assets/text-align-right.svg new file mode 100644 index 000000000..879769687 --- /dev/null +++ b/packages/design-core/assets/text-align-right.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-copy-page.svg b/packages/design-core/assets/text-copy-page.svg new file mode 100644 index 000000000..6cf9d0e31 --- /dev/null +++ b/packages/design-core/assets/text-copy-page.svg @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/design-core/assets/text-decoration-overline.svg b/packages/design-core/assets/text-decoration-overline.svg new file mode 100644 index 000000000..396ddf4fe --- /dev/null +++ b/packages/design-core/assets/text-decoration-overline.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-decoration-strike.svg b/packages/design-core/assets/text-decoration-strike.svg new file mode 100644 index 000000000..5095a6580 --- /dev/null +++ b/packages/design-core/assets/text-decoration-strike.svg @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-decoration-underline.svg b/packages/design-core/assets/text-decoration-underline.svg new file mode 100644 index 000000000..05b598341 --- /dev/null +++ b/packages/design-core/assets/text-decoration-underline.svg @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-direction-ltr.svg b/packages/design-core/assets/text-direction-ltr.svg new file mode 100644 index 000000000..cc411341a --- /dev/null +++ b/packages/design-core/assets/text-direction-ltr.svg @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-direction-rtl.svg b/packages/design-core/assets/text-direction-rtl.svg new file mode 100644 index 000000000..5866af976 --- /dev/null +++ b/packages/design-core/assets/text-direction-rtl.svg @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-common.svg b/packages/design-core/assets/text-page-common.svg new file mode 100644 index 000000000..13dd986ea --- /dev/null +++ b/packages/design-core/assets/text-page-common.svg @@ -0,0 +1,9 @@ + + + 操作/反馈备份 + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-folder-closed.svg b/packages/design-core/assets/text-page-folder-closed.svg new file mode 100644 index 000000000..c80e854f4 --- /dev/null +++ b/packages/design-core/assets/text-page-folder-closed.svg @@ -0,0 +1,10 @@ + + + 类型/文件夹 + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-folder.svg b/packages/design-core/assets/text-page-folder.svg new file mode 100644 index 000000000..39415bbb6 --- /dev/null +++ b/packages/design-core/assets/text-page-folder.svg @@ -0,0 +1,12 @@ + + + 类型/文件夹展开 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-home.svg b/packages/design-core/assets/text-page-home.svg new file mode 100644 index 000000000..be62073b4 --- /dev/null +++ b/packages/design-core/assets/text-page-home.svg @@ -0,0 +1,7 @@ + + + 全局/首页 + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-link.svg b/packages/design-core/assets/text-page-link.svg new file mode 100644 index 000000000..1dbc5e6fd --- /dev/null +++ b/packages/design-core/assets/text-page-link.svg @@ -0,0 +1,10 @@ + + + 类型/图表/链接到 + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-revert.svg b/packages/design-core/assets/text-page-revert.svg new file mode 100644 index 000000000..d59a32c9c --- /dev/null +++ b/packages/design-core/assets/text-page-revert.svg @@ -0,0 +1,9 @@ + + + 返回 back + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-page-review.svg b/packages/design-core/assets/text-page-review.svg new file mode 100644 index 000000000..3c2c64b54 --- /dev/null +++ b/packages/design-core/assets/text-page-review.svg @@ -0,0 +1,20 @@ + + + 全局/隐藏 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-source-delete.svg b/packages/design-core/assets/text-source-delete.svg new file mode 100644 index 000000000..090a08121 --- /dev/null +++ b/packages/design-core/assets/text-source-delete.svg @@ -0,0 +1,13 @@ + + + 删除 delete + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-source-list-add.svg b/packages/design-core/assets/text-source-list-add.svg new file mode 100644 index 000000000..2daacb4bf --- /dev/null +++ b/packages/design-core/assets/text-source-list-add.svg @@ -0,0 +1,13 @@ + + + 创建/添加 create/add + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-source-list-close.svg b/packages/design-core/assets/text-source-list-close.svg new file mode 100644 index 000000000..76351fd48 --- /dev/null +++ b/packages/design-core/assets/text-source-list-close.svg @@ -0,0 +1,12 @@ + + + 全局/关闭 + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-source-list-ref.svg b/packages/design-core/assets/text-source-list-ref.svg new file mode 100644 index 000000000..6b4d12928 --- /dev/null +++ b/packages/design-core/assets/text-source-list-ref.svg @@ -0,0 +1,13 @@ + + + 操作/刷新 + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-source-setting.svg b/packages/design-core/assets/text-source-setting.svg new file mode 100644 index 000000000..e22e97228 --- /dev/null +++ b/packages/design-core/assets/text-source-setting.svg @@ -0,0 +1,10 @@ + + + 设置 setting + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-source-string.svg b/packages/design-core/assets/text-source-string.svg new file mode 100644 index 000000000..0517683bd --- /dev/null +++ b/packages/design-core/assets/text-source-string.svg @@ -0,0 +1,11 @@ + + + 类型/文本 + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/text-transform-capitalize.svg b/packages/design-core/assets/text-transform-capitalize.svg new file mode 100644 index 000000000..0a2a57076 --- /dev/null +++ b/packages/design-core/assets/text-transform-capitalize.svg @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-transform-lowercase.svg b/packages/design-core/assets/text-transform-lowercase.svg new file mode 100644 index 000000000..4486a6600 --- /dev/null +++ b/packages/design-core/assets/text-transform-lowercase.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text-transform-sentence.svg b/packages/design-core/assets/text-transform-sentence.svg new file mode 100644 index 000000000..1607a3764 --- /dev/null +++ b/packages/design-core/assets/text-transform-sentence.svg @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/text.svg b/packages/design-core/assets/text.svg new file mode 100644 index 000000000..2ded44c82 --- /dev/null +++ b/packages/design-core/assets/text.svg @@ -0,0 +1,9 @@ + + + + diff --git a/packages/design-core/assets/tile-x.svg b/packages/design-core/assets/tile-x.svg new file mode 100644 index 000000000..3c6f80819 --- /dev/null +++ b/packages/design-core/assets/tile-x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/tile-xy.svg b/packages/design-core/assets/tile-xy.svg new file mode 100644 index 000000000..0cd82ecfc --- /dev/null +++ b/packages/design-core/assets/tile-xy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/tile-y.svg b/packages/design-core/assets/tile-y.svg new file mode 100644 index 000000000..12e962c11 --- /dev/null +++ b/packages/design-core/assets/tile-y.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/timeline.svg b/packages/design-core/assets/timeline.svg new file mode 100644 index 000000000..10a659ba5 --- /dev/null +++ b/packages/design-core/assets/timeline.svg @@ -0,0 +1,12 @@ + + + + diff --git a/packages/design-core/assets/tiny-logo.svg b/packages/design-core/assets/tiny-logo.svg new file mode 100644 index 000000000..f62b77769 --- /dev/null +++ b/packages/design-core/assets/tiny-logo.svg @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/tooltip.svg b/packages/design-core/assets/tooltip.svg new file mode 100644 index 000000000..af473ebe6 --- /dev/null +++ b/packages/design-core/assets/tooltip.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/packages/design-core/assets/transform-origin-bottom-left.svg b/packages/design-core/assets/transform-origin-bottom-left.svg new file mode 100644 index 000000000..04e0c9472 --- /dev/null +++ b/packages/design-core/assets/transform-origin-bottom-left.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-bottom-right.svg b/packages/design-core/assets/transform-origin-bottom-right.svg new file mode 100644 index 000000000..a83c196bf --- /dev/null +++ b/packages/design-core/assets/transform-origin-bottom-right.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-bottom.svg b/packages/design-core/assets/transform-origin-bottom.svg new file mode 100644 index 000000000..2384b991b --- /dev/null +++ b/packages/design-core/assets/transform-origin-bottom.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-center.svg b/packages/design-core/assets/transform-origin-center.svg new file mode 100644 index 000000000..de1ee0955 --- /dev/null +++ b/packages/design-core/assets/transform-origin-center.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-left.svg b/packages/design-core/assets/transform-origin-left.svg new file mode 100644 index 000000000..b91debe3e --- /dev/null +++ b/packages/design-core/assets/transform-origin-left.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-point.svg b/packages/design-core/assets/transform-origin-point.svg new file mode 100644 index 000000000..be219a86e --- /dev/null +++ b/packages/design-core/assets/transform-origin-point.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-right.svg b/packages/design-core/assets/transform-origin-right.svg new file mode 100644 index 000000000..a77a9af74 --- /dev/null +++ b/packages/design-core/assets/transform-origin-right.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-top-left.svg b/packages/design-core/assets/transform-origin-top-left.svg new file mode 100644 index 000000000..e48650fea --- /dev/null +++ b/packages/design-core/assets/transform-origin-top-left.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-top-right.svg b/packages/design-core/assets/transform-origin-top-right.svg new file mode 100644 index 000000000..6c71fd67f --- /dev/null +++ b/packages/design-core/assets/transform-origin-top-right.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/transform-origin-top.svg b/packages/design-core/assets/transform-origin-top.svg new file mode 100644 index 000000000..6e4163393 --- /dev/null +++ b/packages/design-core/assets/transform-origin-top.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/trash.svg b/packages/design-core/assets/trash.svg new file mode 100644 index 000000000..47c3fad99 --- /dev/null +++ b/packages/design-core/assets/trash.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/design-core/assets/tree-shape.svg b/packages/design-core/assets/tree-shape.svg new file mode 100644 index 000000000..1c69bec12 --- /dev/null +++ b/packages/design-core/assets/tree-shape.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/tree.svg b/packages/design-core/assets/tree.svg new file mode 100644 index 000000000..b2275e743 --- /dev/null +++ b/packages/design-core/assets/tree.svg @@ -0,0 +1,11 @@ + + + + diff --git a/packages/design-core/assets/tutorial.svg b/packages/design-core/assets/tutorial.svg new file mode 100644 index 000000000..5abdf3fbd --- /dev/null +++ b/packages/design-core/assets/tutorial.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/packages/design-core/assets/undo.svg b/packages/design-core/assets/undo.svg new file mode 100644 index 000000000..97f628ef2 --- /dev/null +++ b/packages/design-core/assets/undo.svg @@ -0,0 +1,11 @@ + + + 操作/撤销 + + + + \ No newline at end of file diff --git a/packages/design-core/assets/unfold-outline.svg b/packages/design-core/assets/unfold-outline.svg new file mode 100644 index 000000000..9d4d0c1d1 --- /dev/null +++ b/packages/design-core/assets/unfold-outline.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/design-core/assets/unlocked.svg b/packages/design-core/assets/unlocked.svg new file mode 100644 index 000000000..79e990f69 --- /dev/null +++ b/packages/design-core/assets/unlocked.svg @@ -0,0 +1,10 @@ + + + ic_lock_open_lined + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/user-locked.svg b/packages/design-core/assets/user-locked.svg new file mode 100644 index 000000000..c7b0b4683 --- /dev/null +++ b/packages/design-core/assets/user-locked.svg @@ -0,0 +1,14 @@ + + + 编组 7备份 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/var.svg b/packages/design-core/assets/var.svg new file mode 100644 index 000000000..fc9641528 --- /dev/null +++ b/packages/design-core/assets/var.svg @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/packages/design-core/assets/video.svg b/packages/design-core/assets/video.svg new file mode 100644 index 000000000..37384f16a --- /dev/null +++ b/packages/design-core/assets/video.svg @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/packages/design-core/assets/warning.svg b/packages/design-core/assets/warning.svg new file mode 100644 index 000000000..c55807e82 --- /dev/null +++ b/packages/design-core/assets/warning.svg @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/packages/design-core/assets/wizard.svg b/packages/design-core/assets/wizard.svg new file mode 100644 index 000000000..c6d8ce23e --- /dev/null +++ b/packages/design-core/assets/wizard.svg @@ -0,0 +1,11 @@ + + + + diff --git a/packages/design-core/canvas.html b/packages/design-core/canvas.html new file mode 100644 index 000000000..3c3ab1858 --- /dev/null +++ b/packages/design-core/canvas.html @@ -0,0 +1,302 @@ + + + + + + + + + + + + + +

+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/packages/design-core/config/addons.js b/packages/design-core/config/addons.js new file mode 100644 index 000000000..dba639d5d --- /dev/null +++ b/packages/design-core/config/addons.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import Breadcrumb from '@opentiny/tiny-engine-toolbar-breadcrumb' +import Fullscreen from '@opentiny/tiny-engine-toolbar-fullscreen' +import Lang from '@opentiny/tiny-engine-toolbar-lang' +import Checkinout from '@opentiny/tiny-engine-toolbar-checkinout' +import Logo from '@opentiny/tiny-engine-toolbar-logo' +import Media from '@opentiny/tiny-engine-toolbar-media' +import Redoundo from '@opentiny/tiny-engine-toolbar-redoundo' +import Save from '@opentiny/tiny-engine-toolbar-save' +import Clean from '@opentiny/tiny-engine-toolbar-clean' +import Preview from '@opentiny/tiny-engine-toolbar-preview' +import GenerateVue from '@opentiny/tiny-engine-toolbar-generate-vue' +import Refresh from '@opentiny/tiny-engine-toolbar-refresh' +import Collaboration from '@opentiny/tiny-engine-toolbar-collaboration' +import Setting from '@opentiny/tiny-engine-toolbar-setting' + +import Materials from '@opentiny/tiny-engine-plugin-materials' +import Data from '@opentiny/tiny-engine-plugin-data' +import Script from '@opentiny/tiny-engine-plugin-script' +import Tree from '@opentiny/tiny-engine-plugin-tree' +import Help from '@opentiny/tiny-engine-plugin-help' +import Schema from '@opentiny/tiny-engine-plugin-schema' +import Page from '@opentiny/tiny-engine-plugin-page' +import I18n from '@opentiny/tiny-engine-plugin-i18n' +import Bridge from '@opentiny/tiny-engine-plugin-bridge' +import Block from '@opentiny/tiny-engine-plugin-block' +import Datasource from '@opentiny/tiny-engine-plugin-datasource' +import Robot from '@opentiny/tiny-engine-plugin-robot' +import { getPlugins } from '@opentiny/tiny-engine-plugin-ai' + +import Props from '@opentiny/tiny-engine-setting-props' +import Events from '@opentiny/tiny-engine-setting-events' +import Styles from '@opentiny/tiny-engine-setting-styles' + +import { useCanvas, useHistory } from '@opentiny/tiny-engine-controller' + +import '@opentiny/tiny-engine-theme' + +const { PageCreator, ComponentEditor } = getPlugins({ useCanvas, useHistory }) + +const addons = { + plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot, PageCreator, ComponentEditor], + toolbars: [ + Logo, + Breadcrumb, + Media, + Collaboration, + Clean, + Refresh, + Save, + GenerateVue, + Preview, + Redoundo, + Fullscreen, + Checkinout, + Setting, + Lang + ], + settings: [Props, Styles, Events] +} + +export default addons diff --git a/packages/design-core/config/lowcode.config.js b/packages/design-core/config/lowcode.config.js new file mode 100644 index 000000000..01c0697ca --- /dev/null +++ b/packages/design-core/config/lowcode.config.js @@ -0,0 +1,97 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export default { + // 编辑器主题类型, 取值:dark暗色系,light浅色系, 对应的npm包名为:@opentiny/tiny-engine-theme-${theme}, 暗色主题名需要以dark开头 + theme: 'light', + + // 当前面板技术栈类型,DSL转义参数, 其取值有: Angular、React、HTML、Vue、Flowchart + dslMode: 'Vue', + + // DSL 代码转换的服务地址 + dslHost: '', + + // 工具栏配置: Array类型,当前取值: + toolbarOptions: [], + + // 插件栏配置:Array类型,当前取值: + pluginOptions: [], + + canvasOptions: { + Angular: {}, + Vue: { + material: ['/mock/bundle.json'], + scripts: [], + styles: ['/tiny-vue.css'] + }, + React: {}, + HTML: {}, + Flowchart: {} + }, + + // 生命周期函数 + lifeCyclesOptions: { + Angular: [ + '_constructor_', + 'ngOnInit', + 'ngOnChanges', + 'ngDoCheck', + 'ngAfterContentInit', + 'ngAfterContentChecked', + 'ngAfterViewInit', + 'ngAfterViewChecked', + 'ngOnDestroy' + ], + Vue: [ + 'setup', + 'onBeforeMount', + 'onMounted', + 'onBeforeUpdate', + 'onUpdated', + 'onBeforeUnmount', + 'onUnmounted', + 'onErrorCaptured', + 'onActivated', + 'onDeactivated' + ], + HTML: [], + React: [ + 'componentWillMount', + 'componentDidMount', + 'componentWillReceiveProps', + 'shouldComponentUpdate', + 'componentWillUpdate', + 'componentDidUpdate', + 'componentWillUnmount' + ] + }, + + // 生命周期使用提示 + lifeCycleTips: { + Vue: '通过Vue解构出来的方法都可以在setup这里使用,比如watch、computed、watchEffect等' + }, + + // 设计器服务的host + platformHost: '', + + // 发布应用host + appHost: '', + + // 物料服务的host + materialHost: '', + + // 当前 editor 实例绑定的设计器id + platformId: 897, + + // 是否默认导入布局组件 + defaultImportLayout: 1 +} diff --git a/packages/design-core/index.html b/packages/design-core/index.html new file mode 100644 index 000000000..f4e14a6d2 --- /dev/null +++ b/packages/design-core/index.html @@ -0,0 +1,131 @@ + + + + + + + + TinyEditor 前端可视化设计器 + + + +
+
+
+

Loading

+ + + + + + + +
+
+
+ + + diff --git a/packages/design-core/package.json b/packages/design-core/package.json new file mode 100644 index 000000000..7a3193d4a --- /dev/null +++ b/packages/design-core/package.json @@ -0,0 +1,133 @@ +{ + "name": "@opentiny/tiny-engine", + "version": "1.0.0-beta.4", + "description": "TinyEngine enables developers to customize low-code platforms, build low-bit platforms online in real time, and support secondary development or integration of low-bit platform capabilities.", + "homepage": "https://opentiny.design/tiny-engine", + "keywords": [ + "vue", + "vue3", + "frontend", + "opentiny", + "lowcode", + "tiny-engine" + ], + "scripts": { + "dev": "cross-env NODE_OPTIONS=--max-old-space-size=10240 VITE_API_MOCK=mock vite", + "serve": "cross-env NODE_OPTIONS=--max-old-space-size=10240 vite", + "build:alpha": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode alpha", + "build:prod": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode prod", + "preview": "vite preview", + "lint": "eslint . --ext .js,.vue,.jsx --fix" + }, + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/design-core" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "dependencies": { + "@babel/core": "7.18.13", + "@babel/generator": "7.18.13", + "@babel/parser": "7.18.13", + "@babel/traverse": "7.18.13", + "@opentiny/tiny-engine-canvas": "workspace:*", + "@opentiny/tiny-engine-common": "workspace:*", + "@opentiny/tiny-engine-controller": "workspace:*", + "@opentiny/tiny-engine-http": "workspace:*", + "@opentiny/tiny-engine-i18n-host": "workspace:*", + "@opentiny/tiny-engine-plugin-ai": "workspace:*", + "@opentiny/tiny-engine-plugin-block": "workspace:*", + "@opentiny/tiny-engine-plugin-bridge": "workspace:*", + "@opentiny/tiny-engine-plugin-data": "workspace:*", + "@opentiny/tiny-engine-plugin-datasource": "workspace:*", + "@opentiny/tiny-engine-plugin-help": "workspace:*", + "@opentiny/tiny-engine-plugin-i18n": "workspace:*", + "@opentiny/tiny-engine-plugin-materials": "workspace:*", + "@opentiny/tiny-engine-plugin-page": "workspace:*", + "@opentiny/tiny-engine-plugin-robot": "workspace:*", + "@opentiny/tiny-engine-plugin-schema": "workspace:*", + "@opentiny/tiny-engine-plugin-script": "workspace:*", + "@opentiny/tiny-engine-plugin-tree": "workspace:*", + "@opentiny/tiny-engine-plugin-tutorial": "workspace:*", + "@opentiny/tiny-engine-setting-design": "workspace:*", + "@opentiny/tiny-engine-setting-events": "workspace:*", + "@opentiny/tiny-engine-setting-props": "workspace:*", + "@opentiny/tiny-engine-setting-styles": "workspace:*", + "@opentiny/tiny-engine-svgs": "workspace:*", + "@opentiny/tiny-engine-theme-dark": "workspace:*", + "@opentiny/tiny-engine-theme-light": "workspace:*", + "@opentiny/tiny-engine-toolbar-breadcrumb": "workspace:*", + "@opentiny/tiny-engine-toolbar-checkinout": "workspace:*", + "@opentiny/tiny-engine-toolbar-clean": "workspace:*", + "@opentiny/tiny-engine-toolbar-collaboration": "workspace:*", + "@opentiny/tiny-engine-toolbar-fullscreen": "workspace:*", + "@opentiny/tiny-engine-toolbar-generate-vue": "workspace:*", + "@opentiny/tiny-engine-toolbar-lang": "workspace:*", + "@opentiny/tiny-engine-toolbar-layout": "workspace:*", + "@opentiny/tiny-engine-toolbar-logo": "workspace:*", + "@opentiny/tiny-engine-toolbar-logout": "workspace:*", + "@opentiny/tiny-engine-toolbar-media": "workspace:*", + "@opentiny/tiny-engine-toolbar-preview": "workspace:*", + "@opentiny/tiny-engine-toolbar-redoundo": "workspace:*", + "@opentiny/tiny-engine-toolbar-refresh": "workspace:*", + "@opentiny/tiny-engine-toolbar-save": "workspace:*", + "@opentiny/tiny-engine-toolbar-setting": "workspace:*", + "@opentiny/tiny-engine-utils": "workspace:*", + "@opentiny/tiny-engine-webcomponent-core": "workspace:*", + "@opentiny/vue": "~3.11.0", + "@opentiny/vue-design-smb": "~3.11.0", + "@opentiny/vue-renderless": "~3.11.0", + "@opentiny/vue-theme": "~3.11.0", + "@vue/babel-plugin-jsx": "1.1.1", + "@vue/repl": "^2.9.0", + "@vueuse/core": "^9.6.0", + "element-resize-detector": "^1.2.4", + "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "jszip": "^3.10.1", + "monaco-editor": "0.33.0", + "prettier": "2.7.1", + "sortablejs": "^1.14.0", + "vue": "^3.4.15", + "vue-i18n": "^9.9.0" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.21.3", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@opentiny/tiny-engine-i18n-host": "workspace:*", + "@types/node": "^18.0.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "assert": "^2.0.0", + "buffer": "^6.0.3", + "cross-env": "^7.0.3", + "esbuild-plugin-copy": "^2.1.1", + "eslint": "^8.38.0", + "eslint-plugin-vue": "^8.0.0", + "fs-extra": "^10.1.0", + "husky": "^8.0.0", + "lerna": "^7.2.0", + "less": "^4.1.2", + "lint-staged": "^13.2.0", + "path": "^0.12.7", + "rimraf": "^3.0.2", + "rollup-plugin-polyfill-node": "^0.12.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-visualizer": "^5.8.3", + "svg-sprite-loader": "^6.0.11", + "vite": "^4.3.7", + "vite-plugin-monaco-editor": "^1.0.10", + "vite-plugin-svg-icons": "^2.0.1", + "vue-eslint-parser": "^8.0.1" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/packages/design-core/preview.html b/packages/design-core/preview.html new file mode 100644 index 000000000..db01baf04 --- /dev/null +++ b/packages/design-core/preview.html @@ -0,0 +1,17 @@ + + + + + + + + Design Core Preview + + + + +
+ + + + \ No newline at end of file diff --git a/packages/design-core/previewApp.html b/packages/design-core/previewApp.html new file mode 100644 index 000000000..6dd44c064 --- /dev/null +++ b/packages/design-core/previewApp.html @@ -0,0 +1,13 @@ + + + + + + + Design Core Preview + + +
+ + + diff --git a/packages/design-core/public/favicon.ico b/packages/design-core/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/packages/design-core/public/i18n-mock/i18n-template-for-batch-import.zip b/packages/design-core/public/i18n-mock/i18n-template-for-batch-import.zip new file mode 100644 index 0000000000000000000000000000000000000000..635aab08087b368fc779434ade0735731454c94e GIT binary patch literal 455 zcmWIWW@Zs#U|`^2I8hN9rYYM}9s%T405KO3S7pQ}=jmk?=jW|{78DTRb?*Gxv*&|1 z1u=YV_;Y5@lq*~o;u;geW=(!Pea37qk>ILb=?5pv&h<)I8Kn@pn%PKczl!o!jzp(S z&on&W*O*R5$xcxGsVceBmBZI-sp?G2l?J{qSE?qcd6D%(>9yb}62aDzZ2GTtm{I@`SbhA;tg=}^M(0qg^kXjp^uSv$BC4#RP;qfb>rghXDYuLys8% literal 0 HcmV?d00001 diff --git a/packages/design-core/public/img/bgcModal.png b/packages/design-core/public/img/bgcModal.png new file mode 100644 index 0000000000000000000000000000000000000000..fedfb66bc2ae5814d841c9c54ecaefd794d3ecf7 GIT binary patch literal 1094 zcmV-M1iAZ(P)Px#32;bRa{vGi!vFvd!vV){sAK>D06b7kR7K$6;NITe z#>U3l+S<|4(b(A7$;rvW!ouC%-N?wu#Kgqa)z#0>&(qV>&CSir%gfi-*WBFP%F4>w z+1Zz@db$7r1CvQaK~!ko?VE{~qaYAP*-H^|$^ZZBywXl5o!%m%b!H}YPD0dJR~C5+ zg(7N{j5S1xr0{^#^3@2z8zqE)r%K@OnCIg^5V6soiEr8u*~R9G_)oMm@n5jc!+%LS z3;zx09Q?PGGw?q!j>rE8m$ef%bm zwecJM)x~f2Ruf;~s~*0{Q!RX-3c+FW41d%D20!IwG*uS>@q~ZSJa%g}|YE`p>TVKuqH{{Mktj zK)&o{f2|SQY(MSyTxiv*GDFz;=CI1 zuV@PBah_v~dUuJ-&Q4@BP$PWzl$EBaaY0NEyuZh#(sZMf#nGe;QcGp^KG2Mkx1EdR zySMuG)Y8C7TAC)np07@`xO6xAl7?&jmDPKqPS0dQAP?Vfbc)FK+W2mCY~cDH>C@t+ zwAJMoDiixlOO|ss z;Dhpa=1L!_y>tA2h|BJawAh0->YPnYb3q&@D$Tp3(^fQt7Rql}hwxM5Kp^MbO!gdlSe3tDr9MDO1KT!d{2h>5O`6I~l9x-L?5O{na8SlP9}qU)gl0HXXaEq5Rt0{{R3 M07*qoM6N<$f=YxeTL1t6 literal 0 HcmV?d00001 diff --git a/packages/design-core/public/img/defaultAvator.png b/packages/design-core/public/img/defaultAvator.png new file mode 100644 index 0000000000000000000000000000000000000000..c45c040430a2957114089a542b04da0e3ec89c7b GIT binary patch literal 171603 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%0D&v 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
3(1*xj>Q1~rH1x^WRS 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

I^RM}+ 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 literal 0 HcmV?d00001 diff --git a/packages/design-core/public/img/rocket.jpg b/packages/design-core/public/img/rocket.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f17e20023d540b5374f88dcf818b68c44a68890c GIT binary patch literal 182047 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

;P@?AAi(JShrYP+lYX+Ltn?u;7y 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

P~q(&bUwe;S+Z>*iHSMilkPC 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�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�yzDrA?golA}os>wip8BGBocTY)rwbj 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

T_%MhC6GUh2<+k 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

?*zlTbd4kBp856k?@>ynQfec?#6~d-!Ffifi4w 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

ACjBR&~W&8*kGUb!)$mTve|f z@mC5j(~7s#bBeZiG#INyc01y&(2ljmTy_B8Kp?-^;;nJ<#amhqyB{1?aQtgrRcP9s z$5V>7+x76pUD$#*#Z(N!I+hJin+#RnqR^5Er+QZvO0RC>hoEf z%eP0A34LqG>^UT(@#06{lHHEQkKEhBgbP_2$6B;uPs?UFL1QS=1JNLw5^`ku<*rJ^I$rVJTRJKq|`kC zt$Peowu7PE;x|*Xiu5P(#?*xtTAju!v7uQA3|sw)BX6SxC&_BUBBdTfPQ|J}9BR-C zrAQ~|Tp>tzE%v|ym8=7AO}pWw+Jiz3II{!nZ~%haE7Fk=8lSgXei;%eHl(jG+GS8k zp(@qi=>sLgSdzFBD117T-w7%P%0Q zZEBZRIsxNNzF4FNnjlZW{7os>wk)j-@lKUw;`H%RgfLMvOCQ^W0Z)JHfhBi4dA=tA zH-R+%7*)o`8MlRvPhdgD)`A)B8X;6?2e-g+wWKevA^1tJ%yj$lAp>=WTGdG3<%X8p zV6JKxrUaD+0Q9P!`6N=ELE5##QB<<0uGj*VjG_M8D}2Dhf}miB{q`&Ex6c7jC5>fh z!{dP(zA6vnhLWb1kivg*s)yR68ex6vq_Z8Gr`nhbZAH*XemKK;(YO8>q?=v!RH*7Z z?Cd{|G?26Et6pBDqMf;%94H&OTC$IZX?{f4^^7%0AgyR*1K^O7JbL1VCW>l+cljJF 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�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 A {}", + "description": { + "zh_CN": "校验回调函数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "formitem", + "name": { + "zh_CN": "表单项" + }, + "component": "TinyFormItem", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FormItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "label", + "label": { + "text": { + "zh_CN": "标签文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "标签", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标签文本" + }, + "labelPosition": "left" + }, + { + "property": "prop", + "label": { + "text": { + "zh_CN": "校验字段" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的" + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "必填" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否必填" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "字段名" + }, + "description": { + "zh_CN": "自定义显示字段名称" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyForm"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "col", + "name": { + "zh_CN": "col" + }, + "component": "TinyCol", + "description": "列配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Col", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "span", + "label": { + "text": { + "zh_CN": "栅格列格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整行", + "value": 12 + }, + { + "label": "6格", + "value": 6 + }, + { + "label": "4格", + "value": 4 + }, + { + "label": "3格", + "value": 3 + }, + { + "label": "1格", + "value": 1 + } + ] + } + }, + "description": { + "zh_CN": "当一行分为12格时,一列可占位多少格" + } + }, + { + "property": "move", + "label": { + "text": { + "zh_CN": "栅格左右移动格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": -12, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左右移动格数(正数向右,负数向左)" + } + }, + { + "property": "no", + "label": { + "text": { + "zh_CN": "排序编号" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "max": 12 + } + }, + "description": { + "zh_CN": "排序编号(row中启用order生效)" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "间隔格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 0, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左侧的间隔格数" + } + }, + { + "property": "xs", + "label": { + "text": { + "zh_CN": "超小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "<768px 响应式栅格数" + } + }, + { + "property": "sm", + "label": { + "text": { + "zh_CN": "小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥768px 响应式栅格数" + } + }, + { + "property": "md", + "label": { + "text": { + "zh_CN": "中屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥992px 响应式栅格数" + } + }, + { + "property": "lg", + "label": { + "text": { + "zh_CN": "大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1200px 响应式栅格数" + } + }, + { + "property": "xl", + "label": { + "text": { + "zh_CN": "超大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1920px 响应式栅格数" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "component": "TinyButton", + "icon": "button", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Button", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "type": "string", + "defaultValue": "按钮文案", + "label": { + "text": { + "zh_CN": "按钮文字" + } + }, + "cols": 12, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "type": "select", + "label": { + "text": { + "zh_CN": "大小" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "primary", + "value": "primary" + }, + { + "label": "success", + "value": "success" + }, + { + "label": "info", + "value": "info" + }, + { + "label": "warning", + "value": "warning" + }, + { + "label": "danger", + "value": "danger" + }, + { + "label": "text", + "value": "text" + } + ] + } + }, + "description": { + "zh_CN": "设置不同的主题样式" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "round", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆角按钮" + }, + "labelPosition": "left" + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "labelPosition": "left" + }, + { + "property": "reset-time", + "label": { + "text": { + "zh_CN": "禁用时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置禁用时间,防止重复提交,单位毫秒" + } + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆形按钮" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否默认聚焦" + }, + "labelPosition": "left" + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "加载中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否展示位加载中样式" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "TinyInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Input", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "textarea", + "value": "textarea" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "password", + "value": "password" + } + ] + } + }, + "description": { + "zh_CN": "设置input框的type属性" + } + }, + { + "property": "rows", + "label": { + "text": { + "zh_CN": "行数" + } + }, + "widget": { + "component": "MetaNumber" + }, + "description": { + "zh_CN": "输入框行数,只对 type='textarea' 有效" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "前置内容" + } + }, + "suffix": { + "label": { + "zh_CN": "后置内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "radio", + "name": { + "zh_CN": "单选" + }, + "component": "TinyRadio", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Radio", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "单选框的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "label": { + "zh_CN": "其他" + }, + "description": { + "zh_CN": "" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "显示边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "单选框的尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生 name 属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": "绑定值变化时触发的事件" + } + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "select", + "name": { + "zh_CN": "下拉框" + }, + "component": "TinySelect", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 8, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "searchable", + "label": { + "text": { + "zh_CN": "下拉面板可搜索" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "下拉面板是否可搜索" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "下拉数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "配置 Select 下拉数据项" + }, + "labelPosition": "left" + }, + { + "property": "multiple", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许输入框输入或选择多个项" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "multiple-limit", + "label": { + "text": { + "zh_CN": "最大可选值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "多选时用户最多可以选择的项目数,为 0 则不限制" + }, + "labelPosition": "left" + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "下拉框的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置下拉框自定义的类名" + }, + "labelPosition": "left" + }, + { + "property": "collapse-tags", + "label": { + "text": { + "zh_CN": "多选展示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "多选时是否将选中值按文字的形式展示" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在下拉框值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "下拉框选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onRemoveTag": { + "label": { + "zh_CN": "多选模式下移除tag时触发" + }, + "description": { + "zh_CN": "多选模式下移除tag时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "被移除Tag对应数据项的值字段" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "onBeforeMount": "console.log('table on load'); this.options = source.data" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["multiple", "options"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "switch", + "name": { + "zh_CN": "开关" + }, + "component": "TinySwitch", + "description": "Switch 在两种状态间切换选择", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Switch", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 9, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定默认值" + } + }, + { + "property": "true-value", + "label": { + "text": { + "zh_CN": "打开时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置打开时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "false-value", + "label": { + "text": { + "zh_CN": "关闭时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置关闭时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示为 mini 模式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "开关的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的开关状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "search", + "name": { + "zh_CN": "搜索框" + }, + "component": "TinySearch", + "description": "指定条件对象进行搜索数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Search", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "默认值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的默认搜索值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的提示占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清空按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置显示清空图标按钮" + }, + "labelPosition": "left" + }, + { + "property": "isEnterSearch", + "label": { + "text": { + "zh_CN": "是否Enter键触发search事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在按下键盘Enter键的时候触发search事件" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他配置" + }, + "content": [ + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "迷你模式,配置为true时,搜索默认显示为一个带图标的圆形按钮,点击后展开" + }, + "labelPosition": "left" + }, + { + "property": "transparent", + "label": { + "text": { + "zh_CN": "透明模式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "配置为true时,边框变为透明且收缩后半透明显示,一般用在带有背景的场景,默认 false" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "输入完成时触发" + }, + "description": { + "zh_CN": "在 input 框中输入完成时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onSearch": { + "label": { + "zh_CN": "点击搜索按钮时触发" + }, + "description": { + "zh_CN": "展开状态点击搜索按钮时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["clearable", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkbox", + "name": { + "zh_CN": "复选框" + }, + "component": "TinyCheckbox", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Checkbox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "复选框的文本" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示边框" + } + }, + { + "property": "false-label", + "label": { + "text": { + "zh_CN": "未选中的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "没有选中时的值" + } + }, + { + "property": "true-label", + "label": { + "text": { + "zh_CN": "选择时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "选中时的值" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["border", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxbutton", + "name": { + "zh_CN": "复选按钮" + }, + "component": "TinyCheckboxButton", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "按钮文本" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxgroup", + "name": { + "zh_CN": "复选按钮组" + }, + "component": "TinyCheckboxGroup", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "dataType": "Array" + } + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "数据列表" + } + }, + "defaultValue": [ + { + "label": "标签2" + }, + { + "label": "标签2" + } + ], + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "checkbox组件列表" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "button", + "value": "button" + }, + { + "label": "checkbox", + "value": "checkbox" + } + ] + } + }, + "description": { + "zh_CN": "checkbox组件类型(button/checkbox),该属性的默认值为 checkbox,配合 options 属性一起使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "type"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "dialogbox", + "name": { + "zh_CN": "对话框" + }, + "component": "TinyDialogBox", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DialogBox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框标题" + }, + "labelPosition": "left" + }, + { + "property": "visible", + "label": { + "text": { + "zh_CN": "显示与隐藏" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "控制弹出框显示与关闭" + }, + "labelPosition": "left" + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框的宽度" + }, + "labelPosition": "left" + }, + { + "property": "draggable", + "label": { + "text": { + "zh_CN": "可拖拽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否开启弹窗的拖拽功能,默认值为 false 。" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "弹出框的头部与底部内容会自动居中" + }, + "labelPosition": "left" + }, + { + "property": "dialog-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义配置弹窗类名" + }, + "labelPosition": "left" + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "插入到 Body " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "DialogBox 本身是否插入到 body 上,嵌套的 Dialog 必须指定该属性并赋值为 true" + }, + "labelPosition": "left" + }, + { + "property": "show-close", + "label": { + "text": { + "zh_CN": "关闭按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示关闭按钮,默认值为 true 。" + } + } + ] + } + ], + "selector": ".TinyDialogBox", + "events": { + "onClose": { + "label": { + "zh_CN": "关闭弹窗时触发" + }, + "description": { + "zh_CN": "Dialog 关闭的回调" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:visible": { + "label": { + "zh_CN": "双向绑定的状态改变时触发" + }, + "description": { + "zh_CN": "显示或隐藏的状态值,发生改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的显示或隐藏的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "title": { + "label": { + "zh_CN": "标题区" + }, + "description": { + "zh_CN": "Dialog 标题区的内容" + } + }, + "footer": { + "label": { + "zh_CN": "按钮操作区" + }, + "description": { + "zh_CN": "Dialog 按钮操作区的内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": ".tiny-dialog-box", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabs", + "name": { + "zh_CN": "标签页" + }, + "component": "TinyTabs", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tabs", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 10, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "showEditIcon", + "label": { + "text": { + "zh_CN": "显示编辑ICON " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示标题后编辑 ICON" + }, + "labelPosition": "left" + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定值,选中选项卡的 name" + }, + "labelPosition": "left" + }, + { + "property": "with-add", + "label": { + "text": { + "zh_CN": "可新增" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可增加" + }, + "labelPosition": "left" + }, + { + "property": "with-close", + "label": { + "text": { + "zh_CN": "可关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可关闭" + }, + "labelPosition": "left" + }, + { + "property": "tab-style", + "label": { + "text": { + "zh_CN": "标签页样式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "card", + "value": "card" + }, + { + "label": "border-card", + "value": "border-card" + } + ] + } + }, + "description": { + "zh_CN": "标签页样式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击页签时触发事件" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "component", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前点击的页签对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onEdit": { + "label": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "description": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "tab", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的页签对象" + } + }, + { + "name": "type", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的类型(remove || add || edit)" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "关闭页签时触发" + }, + "description": { + "zh_CN": "关闭页签时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "name", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "页签名称" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyTabItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["size", "tab-style"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabitem", + "name": { + "zh_CN": "tab页签" + }, + "component": "TinyTabItem", + "description": "tab 标签页", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TabItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一表示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一表示" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyTab"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["name", "title"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑" + }, + "component": "TinyBreadcrumb", + "description": "告诉访问者他们目前在网站中的位置以及如何返回", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "separator", + "label": { + "text": { + "zh_CN": "分隔符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义分隔符" + }, + "labelPosition": "left" + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "options" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "textField", + "label": { + "text": { + "zh_CN": "textField" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "description": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyBreadcrumbItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["separator"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑项" + }, + "component": "TinyBreadcrumbItem", + "description": "", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "BreadcrumbItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "to", + "label": { + "text": { + "zh_CN": "路由路径" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面包屑项" + } + } + ] + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "面包屑项标签" + }, + "description": { + "zh_CN": "面包屑项" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyBreadcrumb"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["to"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapse", + "name": { + "zh_CN": "折叠面板" + }, + "component": "TinyCollapse", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Collapse", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "当前激活的面板" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定当前激活的面板" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "激活面板改变时触发" + }, + "description": { + "zh_CN": "当前激活面板改变时触发(如果是手风琴模式,参数 activeNames 类型为string,否则为array)" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前激活面板的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前激活面板的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapseitem", + "name": { + "zh_CN": "折叠面板项" + }, + "component": "TinyCollapseItem", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CollapseItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一标志符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一标志符;String | Number" + }, + "labelPosition": "left" + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "面板标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面板标题" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "grid", + "name": { + "zh_CN": "表格" + }, + "component": "TinyGrid", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Grid", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础属性" + }, + "description": { + "zh_CN": "基础属性" + }, + "collapse": { + "number": 15, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "onChange": "this.delProp('fetchData')", + "description": { + "zh_CN": "设置表格的数据" + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列标题" + } + }, + "widget": { + "component": "MetaBindI18n", + "props": {} + } + }, + { + "property": "field", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列键值" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "sortable", + "type": "boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "width", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列宽" + } + }, + "widget": { + "component": "MetaNumber", + "props": {} + } + }, + { + "property": "formatText", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "内置渲染器" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整数", + "value": "integer" + }, + { + "label": "小数", + "value": "number" + }, + { + "label": "金额", + "value": "money" + }, + { + "label": "百分比", + "value": "rate" + }, + { + "label": "布尔", + "value": "boole" + }, + { + "label": "年月日", + "value": "date" + }, + { + "label": "年月日时分", + "value": "dateTime" + }, + { + "label": "时间", + "value": "time" + }, + { + "label": "省略", + "value": "ellipsis" + } + ] + } + } + }, + { + "property": "renderer", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSFunction" + } + } + }, + { + "property": "slots", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "插槽" + } + }, + "labelPosition": "none", + "widget": { + "component": "MetaJsSlot", + "props": { + "slots": ["header", "default"] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "列类型" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "索引列", + "value": "index" + }, + { + "label": "单选列", + "value": "radio" + }, + { + "label": "多选列", + "value": "selection" + }, + { + "label": "展开列", + "value": "expand" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)" + }, + "labelPosition": "left" + }, + { + "property": "editor", + "label": { + "text": { + "zh_CN": "编辑配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "单元格编辑渲染配置项,也可以是函数 Function(h, params)" + }, + "labelPosition": "left" + }, + { + "property": "filter", + "label": { + "text": { + "zh_CN": "筛选配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "设置表格列的筛选配置信息。默认值为 false 不配置筛选信息" + } + }, + { + "property": "showOverflow", + "label": { + "text": { + "zh_CN": "内容超出部分省略号配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "只显示省略号", + "value": "ellipsis" + }, + { + "label": "显示为原生 title", + "value": "title" + }, + { + "label": "显示为 tooltip 提示", + "value": "tooltip" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)" + }, + "labelPosition": "left" + } + ] + } + ], + "widget": { + "component": "MetaArrayItem", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "fetchData", + "label": { + "text": { + "zh_CN": "服务端数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "onChange": "this.delProp('data')", + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "fetchData", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "服务端数据查询方法" + } + }, + { + "property": "pager", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": { + "attrs": { + "currentPage": 1 + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "pager", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "分页配置" + } + }, + { + "property": "resizable", + "label": { + "text": { + "zh_CN": "调整列宽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许调整列宽" + }, + "labelPosition": "left" + }, + { + "property": "row-id", + "label": { + "text": { + "zh_CN": "行数据唯一标识的字段名" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "placeholder": "比如:id" + } + }, + "description": { + "zh_CN": "行数据唯一标识的字段名" + }, + "labelPosition": "left" + }, + { + "property": "select-config", + "label": { + "text": { + "zh_CN": "复选框配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "表格行数据复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格校验规则配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-config", + "label": { + "text": { + "zh_CN": "编辑配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格编辑配置项" + } + }, + { + "property": "expand-config", + "label": { + "text": { + "zh_CN": "复选框配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "sortable", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + } + ] + }, + { + "label": { + "zh_CN": "其他属性" + }, + "description": { + "zh_CN": "其他属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "auto-resize", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "labelPosition": "left" + }, + { + "property": "seq-serial", + "label": { + "text": { + "zh_CN": "行号连续" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置行序号是否连续,开启分页时有效,该属性的默认值为 false" + }, + "labelPosition": "left" + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "高亮当前行" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "高亮当前行" + }, + "labelPosition": "left" + }, + { + "property": "highlight-hover-row", + "label": { + "text": { + "zh_CN": "hover 时候高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "鼠标移到行是否要高亮显示" + }, + "labelPosition": "left" + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})" + }, + "labelPosition": "left" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "最大高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置表格内容区域(不含表格头部,底部)的最大高度。" + }, + "labelPosition": "left" + }, + { + "property": "row-span", + "label": { + "text": { + "zh_CN": "行合并" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onFilterChange": { + "label": { + "zh_CN": "筛选条件改变时触发改事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSortChange": { + "label": { + "zh_CN": "点击列头,执行数据排序前触发的事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectAll": { + "label": { + "zh_CN": "当手动勾选全选时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选全选时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 包含 table 实例对象" + } + }, + { + "name": "checked", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "勾选状态" + } + }, + { + "name": "selction", + "type": "Array", + "defaultValue": "", + "description": { + "zh_CN": "选中的表格数据数组" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectChange": { + "label": { + "zh_CN": "手动勾选并且值发生改变时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " table 实例对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onToggleExpandChange": { + "label": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "description": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onCurrentChange": { + "label": { + "zh_CN": "行点击时触发" + }, + "description": { + "zh_CN": "行点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contentMenu": { + "actions": ["create symbol"] + }, + "onBeforeMount": "console.log('table on load'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "分页" + }, + "component": "TinyPager", + "icon": "pager", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Pager", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "currentPage", + "label": { + "text": { + "zh_CN": "当前页数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "当前页数,支持 .sync 修饰符" + }, + "labelPosition": "left" + }, + { + "property": "pageSize", + "label": { + "text": { + "zh_CN": "每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "每页显示条目个数" + }, + "labelPosition": "left" + }, + { + "property": "pageSizes", + "label": { + "text": { + "zh_CN": "可选每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置可选择的每页显示条数" + } + }, + { + "property": "total", + "label": { + "text": { + "zh_CN": "总条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "数据总条数" + }, + "labelPosition": "left" + }, + { + "property": "layout", + "label": { + "text": { + "zh_CN": "布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": "total,sizes,prev, pager, next", + "widget": { + "component": "MetaInput", + "props": { + "type": "textarea" + } + }, + "description": { + "zh_CN": "组件布局,子组件名用逗号分隔" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onCurrentChange ": { + "label": { + "zh_CN": "切换页码时触发" + }, + "description": { + "zh_CN": "切换页码时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前页的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onPrevClick ": { + "label": { + "zh_CN": "点击上一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNextClick": { + "label": { + "zh_CN": "点击下一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["currentPage", "total"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "component": "TinyPopeditor", + "icon": "popEditor", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "PopEditor", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 6, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "show-clear-btn", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板的宽度(单位像素)" + }, + "labelPosition": "left" + }, + { + "property": "conditions", + "label": { + "text": { + "zh_CN": "过滤条件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "当弹出面板配置的是表格时,设置弹出面板中的过滤条件" + }, + "labelPosition": "left" + }, + { + "property": "grid-op", + "label": { + "text": { + "zh_CN": "表格配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中表格组件的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "pager-op", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出编辑框中分页配置" + }, + "labelPosition": "left" + }, + { + "property": "multi", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中的数据是否可多选" + }, + "labelPosition": "left" + }, + { + "property": "show-pager", + "label": { + "text": { + "zh_CN": "启用分页" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "选中值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项的值" + } + }, + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中对象" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "弹框关闭时触发的事件" + }, + "description": { + "zh_CN": "弹框关闭时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onPageChange": { + "label": { + "zh_CN": "分页切换事件" + }, + "description": { + "zh_CN": "表格模式下分页切换事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页码数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["modelValue", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tree", + "name": { + "zh_CN": "树" + }, + "component": "TinyTree", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tree", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "show-checkbox", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置接口是否可以多选" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1" + } + ] + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "可配置静态数据源和动态数据源" + } + }, + { + "property": "node-key", + "label": { + "text": { + "zh_CN": "唯一标识" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "节点唯一标识属性名称" + }, + "labelPosition": "left" + }, + { + "property": "render-content", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "disabled": true, + "placeholder": "请使用变量绑定来绑定函数" + } + }, + "description": { + "zh_CN": "树节点的内容区的渲染函数" + } + }, + { + "property": "icon-trigger-click-node", + "label": { + "text": { + "zh_CN": "触发NodeClick 事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "点击图标展开节点时是否触发 node-click 事件" + }, + "labelPosition": "left" + }, + { + "property": "expand-icon", + "label": { + "text": { + "zh_CN": "展开图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点展开图标" + }, + "labelPosition": "left" + }, + { + "property": "shrink-icon", + "label": { + "text": { + "zh_CN": "收缩图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点收缩的图标" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "check-on-click-node", + "label": { + "text": { + "zh_CN": "点击节点选中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点" + }, + "labelPosition": "left" + }, + { + "property": "filter-node-method", + "label": { + "text": { + "zh_CN": "筛选函数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点筛选函数" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onCheck": { + "label": { + "zh_CN": "勾选节点后的事件" + }, + "description": { + "zh_CN": "勾选节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "currentNode", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNodeClick": { + "label": { + "zh_CN": "点击节点后的事件" + }, + "description": { + "zh_CN": "点击节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "node", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + }, + { + "name": "vm", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件实例" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["data", "show-checkbox"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "timeline", + "name": { + "zh_CN": "时间线" + }, + "component": "TinyTimeLine", + "description": "TimeLine 时间线", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TimeLine", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "horizontal", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "水平布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字横向布局" + } + }, + { + "property": "vertical", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "垂直布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "垂直布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字垂直布局" + } + }, + { + "property": "active", + "label": { + "text": { + "zh_CN": "选中值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "步骤条的选中步骤值" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "name": "配置基本信息", + "status": "ready" + }, + { + "name": "配置报价", + "status": "wait" + }, + { + "name": "完成报价", + "status": "wait" + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "时间线步骤条数据" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "节点的点击时触发" + }, + "description": { + "zh_CN": "节点的点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "点击节点的下标" + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前节点对象:{ name: 节点名称, time: 时间 }" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["active", "data"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tooltip", + "name": { + "zh_CN": "文字提示框" + }, + "component": "TinyTooltip", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tooltip", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 11, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 20, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "placement", + "label": { + "text": { + "zh_CN": "提示位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "Tooltip 的出现位置" + }, + "labelPosition": "left" + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "提示信息", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot#content 传入 DOM" + } + }, + { + "property": "render-content", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "disabled": true, + "placeholder": "请使用变量绑定来绑定函数" + } + }, + "description": { + "zh_CN": "自定义渲染函数,返回需要渲染的节点内容" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "是否可见" + } + }, + "defaultValue": true, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "状态是否可见" + } + }, + { + "property": "manual", + "label": { + "text": { + "zh_CN": "手动控制" + } + }, + "defaultValue": true, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "手动控制模式,设置为 true 后,mouseenter 和 mouseleave 事件将不会生效" + } + } + ] + } + ], + "events": {}, + "slots": { + "content": { + "label": { + "zh_CN": "提示内容" + }, + "description": { + "zh_CN": "自定义提示内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "content"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "popover", + "name": { + "zh_CN": "提示框" + }, + "component": "TinyPopover", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popover", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,手动控制是否可见的状态值" + }, + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "left" + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "click", + "value": "click" + }, + { + "label": "focus", + "value": "focus" + }, + { + "label": "hover", + "value": "hover" + }, + { + "label": "manual", + "value": "manual" + } + ] + } + }, + "description": { + "zh_CN": "触发方式,该属性的可选值为 click / focus / hover / manual,该属性的默认值为 click" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "为 popper 添加类名" + }, + "labelPosition": "left" + }, + { + "property": "visible-arrow", + "label": { + "text": { + "zh_CN": "显示箭头" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示 Tooltip 箭头" + } + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "添加到body上" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover弹窗是否添加到body上" + } + }, + { + "property": "arrow-offset", + "label": { + "text": { + "zh_CN": "箭头的位置偏移" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "箭头的位置偏移,该属性的默认值为 0" + } + }, + { + "property": "close-delay", + "label": { + "text": { + "zh_CN": "隐藏延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的隐藏延迟,单位为毫秒" + } + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "显示的内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot 传入 DOM" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover 是否可用" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "位置偏移量" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "出现位置的偏移量" + } + }, + { + "property": "open-delay", + "label": { + "text": { + "zh_CN": "显示延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的显示延迟,单位为毫秒" + } + }, + { + "property": "popper-options", + "label": { + "text": { + "zh_CN": "popper.js的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "popper.js 的参数" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "transform-origin", + "label": { + "text": { + "zh_CN": "旋转中心点" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "组件的旋转中心点,组件的旋转中心点" + } + }, + { + "property": "transition", + "label": { + "text": { + "zh_CN": "定义渐变动画" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "该属性的默认值为 fade-in-linear" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "宽度" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "手动控制是否可见的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的可见状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "日期选择" + }, + "component": "TinyDatePicker", + "icon": "datepick", + "description": "用于输入或选择日期", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DatePicker", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "日期", + "value": "date" + }, + { + "label": "日期时间", + "value": "datetime" + }, + { + "label": "周", + "value": "week" + }, + { + "label": "月份", + "value": "month" + }, + { + "label": "年份", + "value": "year" + } + ] + } + }, + "description": { + "zh_CN": "设置日期框的type属性" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "禁用" + } + }, + { + "property": "readonly", + "label": { + "text": { + "zh_CN": "是否只读" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "日期框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "数字输入框" + }, + "component": "TinyNumeric", + "icon": "numeric", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Numeric", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "allow-empty", + "label": { + "text": { + "zh_CN": "内容可清空" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否内容可清空" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "禁用" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否使用加减按钮" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls-position", + "label": { + "text": { + "zh_CN": "加减按钮位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "左右两侧", + "value": "" + }, + { + "label": "只在右侧", + "value": "right" + } + ] + } + }, + "description": { + "zh_CN": "加减按钮位置" + }, + "labelPosition": "left" + }, + { + "property": "precision", + "label": { + "text": { + "zh_CN": "数值精度" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "数值精度" + }, + "labelPosition": "left" + }, + { + "property": "step", + "label": { + "text": { + "zh_CN": "步长" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "步长" + }, + "labelPosition": "left" + }, + { + "property": "max", + "label": { + "text": { + "zh_CN": "可输入的最大数值" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "可输入的最大数值" + }, + "labelPosition": "left" + }, + { + "property": "min", + "label": { + "text": { + "zh_CN": "可输入的最小数值" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "可输入的最大数值" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + } + ], + "blocks": [], + "snippets": [ + { + "group": "element-plus", + "children": [ + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "ElInput", + "schema": {} + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "ElButton", + "schema": { + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文本" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "ElForm", + "schema": { + "children": [ + { + "componentName": "ElFormItem", + "props": { + "label": "账号", + "prop": "account" + }, + "children": [ + { + "componentName": "ElInput", + "props": { + "modelValue": "", + "placeholder": "请输入账号" + } + } + ] + }, + { + "componentName": "ElFormItem", + "props": { + "label": "密码", + "prop": "password" + }, + "children": [ + { + "componentName": "ElInput", + "props": { + "modelValue": "", + "placeholder": "请输入密码", + "type": "password" + } + } + ] + }, + { + "componentName": "ElFormItem", + "props": {}, + "children": [ + { + "componentName": "ElButton", + "props": { + "type": "primary", + "style": "margin-right: 10px" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "提交" + } + } + ] + }, + { + "componentName": "ElButton", + "props": { + "type": "primary" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "重置" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "ElTable", + "schema": { + "props": { + "data": [ + { + "date": "2016-05-03", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-02", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-04", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-01", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + } + ], + "columns": [ + { + "type": "index" + }, + { + "label": "Date", + "prop": "date" + }, + { + "label": "Name", + "prop": "name" + }, + { + "label": "Address", + "prop": "address" + } + ] + } + } + } + ] + }, + { + "group": "html", + "children": [ + { + "name": { + "zh_CN": "段落" + }, + "icon": "paragraph", + "screenshot": "", + "snippetName": "p", + "schema": { + "componentName": "p", + "children": "TinyEngine 前端可视化设计器致力于通过友好的用户交互提升业务应用的开发效率。" + } + }, + { + "name": { + "zh_CN": "链接" + }, + "icon": "link", + "screenshot": "", + "snippetName": "a", + "schema": { + "componentName": "a", + "children": "链接" + } + }, + { + "name": { + "zh_CN": "分隔线" + }, + "icon": "hr", + "screenshot": "", + "snippetName": "hr", + "schema": {} + }, + { + "name": { + "zh_CN": "标题" + }, + "icon": "h16", + "screenshot": "", + "snippetName": "h1", + "schema": { + "componentName": "h1", + "props": {}, + "children": "Heading" + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "input", + "schema": { + "componentName": "input", + "props": { + "type": "text", + "placeholder": "请输入" + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "icon": "video", + "screenshot": "", + "snippetName": "video", + "schema": { + "componentName": "video", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100", + "style": "border:1px solid #ccc" + } + } + }, + { + "name": { + "zh_CN": "图片" + }, + "icon": "Image", + "screenshot": "", + "snippetName": "img", + "schema": { + "componentName": "img", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100" + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "button", + "schema": { + "componentName": "button", + "props": {}, + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文案" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "table", + "screenshot": "", + "snippetName": "table", + "schema": { + "componentName": "table", + "props": { + "border": "1" + }, + "children": [ + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": "Month" + }, + { + "componentName": "td", + "children": "Savings" + } + ] + }, + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": "January" + }, + { + "componentName": "td", + "children": "100" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "form", + "schema": { + "componentName": "form", + "props": { + "action": "action" + }, + "children": [ + { + "componentName": "label", + "props": { + "for": "male" + }, + "children": "male" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + }, + { + "componentName": "br" + }, + { + "componentName": "label", + "props": { + "for": "Female" + }, + "children": "Female" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + } + ] + } + } + ] + }, + { + "group": "content", + "children": [ + { + "name": { + "zh_CN": "走马灯" + }, + "screenshot": "", + "snippetName": "tiny-carousel", + "icon": "carousel", + "schema": { + "componentName": "TinyCarousel", + "props": { + "height": "180px" + }, + "children": [ + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "screenshot": "", + "snippetName": "tiny-form", + "icon": "form", + "schema": { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "人员" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "密码" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "type": "password" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "" + }, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": "margin-right: 10px" + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "type": "primary" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "下拉框" + }, + "icon": "select", + "screenshot": "", + "snippetName": "TinySelect", + "schema": { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + } + } + }, + { + "name": { + "zh_CN": "开关" + }, + "icon": "switch", + "screenshot": "", + "snippetName": "TinySwitch", + "schema": { + "componentName": "TinySwitch", + "props": { + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "复选框组" + }, + "icon": "checkboxs", + "screenshot": "", + "snippetName": "TinyCheckboxGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": ["name1", "name2"], + "type": "checkbox", + "options": [ + { + "text": "复选框1", + "label": "name1" + }, + { + "text": "复选框2", + "label": "name2" + }, + { + "text": "复选框3", + "label": "name3" + } + ] + } + } + }, + { + "name": { + "zh_CN": "复选框拖拽按钮组" + }, + "icon": "checkboxgroup", + "screenshot": "", + "snippetName": "TinyCheckboxbuttonGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": [] + }, + "children": [ + { + "componentName": "TinyCheckboxButton", + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "对话框" + }, + "screenshot": "", + "snippetName": "TinyDialogBox", + "icon": "dialogbox", + "schema": { + "componentName": "TinyDialogBox", + "props": { + "visible": true, + "show-close": true, + "title": "dialogBox title" + }, + "children": [ + { + "componentName": "div" + } + ] + } + }, + { + "name": { + "zh_CN": "标签页" + }, + "icon": "tabs", + "screenshot": "", + "group": true, + "snippetName": "TinyTabs", + "schema": { + "componentName": "TinyTabs", + "props": { + "modelValue": "first" + }, + "children": [ + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页1", + "name": "first" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页2", + "name": "second" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "折叠面板" + }, + "screenshot": "", + "snippetName": "TinyCollapse", + "icon": "collapse", + "schema": { + "componentName": "TinyCollapse", + "props": { + "modelValue": "collapse1" + }, + "children": [ + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse1", + "title": "折叠项1" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse2", + "title": "折叠项2" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse3", + "title": "折叠项3" + }, + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "tinyGrid", + "schema": { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "index", + "width": 60 + }, + { + "type": "selection", + "width": 60 + }, + { + "field": "employees", + "title": "员工数" + }, + { + "field": "created_date", + "title": "创建日期" + }, + { + "field": "city", + "title": "城市" + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "icon": "popeditor", + "screenshot": "", + "snippetName": "TinyPopeditor", + "schema": { + "componentName": "TinyPopeditor", + "props": { + "modelValue": "", + "placeholder": "请选择", + "gridOp": { + "columns": [ + { + "field": "id", + "title": "ID", + "width": 40 + }, + { + "field": "name", + "title": "名称", + "showOverflow": "tooltip" + }, + { + "field": "province", + "title": "省份", + "width": 80 + }, + { + "field": "city", + "title": "城市", + "width": 80 + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司", + "city": "福州", + "province": "福建" + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "province": "广东" + }, + { + "id": "3", + "name": "RFV有限责任公司", + "city": "中山", + "province": "广东" + }, + { + "id": "4", + "name": "TGB科技有限公司", + "city": "龙岩", + "province": "福建" + }, + { + "id": "5", + "name": "YHN科技有限公司", + "city": "韶关", + "province": "广东" + }, + { + "id": "6", + "name": "WSX科技有限公司", + "city": "黄冈", + "province": "武汉" + } + ] + } + } + } + }, + { + "name": { + "zh_CN": "树" + }, + "icon": "tree", + "screenshot": "", + "snippetName": "TinyTree", + "schema": { + "componentName": "TinyTree", + "props": { + "data": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1", + "children": [ + { + "label": "三级 1-1-1" + } + ] + } + ] + }, + { + "label": "一级 2", + "children": [ + { + "label": "二级 2-1", + "children": [ + { + "label": "三级 2-1-1" + } + ] + }, + { + "label": "二级 2-2", + "children": [ + { + "label": "三级 2-2-1" + } + ] + } + ] + } + ] + } + } + }, + { + "name": { + "zh_CN": "文字提示框" + }, + "icon": "tooltip", + "screenshot": "", + "snippetName": "TinyTooltip", + "schema": { + "componentName": "TinyTooltip", + "props": { + "content": "Top Left 提示文字", + "placement": "top-start", + "manual": true, + "modelValue": true + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": {} + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "content" + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "提示框" + }, + "icon": "popover", + "screenshot": "", + "snippetName": "TinyPopover", + "schema": { + "componentName": "TinyPopover", + "props": { + "width": 200, + "title": "弹框标题", + "trigger": "manual", + "modelValue": true + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": "reference" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "default" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "分页" + }, + "icon": "pager", + "screenshot": "", + "snippetName": "TinyPager", + "schema": { + "componentName": "TinyPager", + "props": { + "layout": "total, sizes, prev, pager, next", + "total": 100, + "pageSize": 10, + "currentPage": 1 + } + } + }, + { + "name": { + "zh_CN": "面包屑" + }, + "icon": "breadcrumb", + "screenshot": "", + "snippetName": "TinyBreadcrumb", + "schema": { + "componentName": "TinyBreadcrumb", + "props": { + "options": [ + { + "to": "{ path: '/' }", + "label": "首页" + }, + { + "to": "{ path: '/breadcrumb' }", + "label": "产品" + }, + { + "replace": "true", + "label": "软件" + } + ] + } + } + }, + { + "name": { + "zh_CN": "日期选择" + }, + "icon": "datepick", + "screenshot": "", + "snippetName": "TinyDatePicker", + "schema": { + "componentName": "TinyDatePicker", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "数字输入框" + }, + "icon": "numeric", + "screenshot": "", + "snippetName": "TinyNumeric", + "schema": { + "componentName": "TinyNumeric", + "props": { + "allow-empty": true, + "placeholder": "请输入", + "controlsPosition": "right", + "step": 1 + } + } + } + ] + }, + { + "group": "general", + "children": [ + { + "name": { + "zh_CN": "Row" + }, + "icon": "row", + "screenshot": "", + "snippetName": "TinyRow", + "schema": { + "componentName": "TinyRow", + "props": {}, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + } + ] + } + }, + { + "name": { + "zh_CN": "Col" + }, + "icon": "col", + "screenshot": "", + "snippetName": "TinyCol", + "schema": { + "componentName": "TinyCol", + "props": { + "span": 12, + "style": { + "height": "30px", + "border": "1px solid #ccc" + } + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "TinyButton", + "schema": { + "componentName": "TinyButton", + "props": { + "text": "按钮文案" + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtons", + "screenshot": "", + "schema": { + "componentName": "div", + "props": {}, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "取消" + } + } + ] + }, + "configure": { + "isContainer": true + } + }, + { + "name": { + "zh_CN": "互斥按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtonGroup", + "screenshot": "", + "schema": { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "Button1", + "value": "1" + }, + { + "text": "Button2", + "value": "2" + }, + { + "text": "Button3", + "value": "3" + } + ], + "modelValue": "1" + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "TinyInput", + "schema": { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "单选" + }, + "icon": "radio", + "screenshot": "", + "snippetName": "TinyRadio", + "schema": { + "componentName": "TinyRadio", + "props": { + "label": "1", + "text": "单选文本" + } + } + }, + { + "name": { + "zh_CN": "复选框" + }, + "icon": "checkbox", + "screenshot": "", + "snippetName": "TinyCheckbox", + "schema": { + "componentName": "TinyCheckbox", + "props": { + "text": "复选框文案" + } + } + } + ] + }, + { + "group": "navigation", + "children": [ + { + "name": { + "zh_CN": "搜索框" + }, + "icon": "search", + "screenshot": "", + "snippetName": "TinySearch", + "schema": { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + } + } + }, + { + "name": { + "zh_CN": "时间线" + }, + "icon": "timeline", + "screenshot": "", + "snippetName": "TinyTimeLine", + "schema": { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "已下单" + }, + { + "name": "运输中" + }, + { + "name": "已签收" + } + ] + } + } + } + ] + } + ] + } + } +} diff --git a/packages/design-core/public/monaco-linter/eslint.worker.js b/packages/design-core/public/monaco-linter/eslint.worker.js new file mode 100644 index 000000000..05cf20d0f --- /dev/null +++ b/packages/design-core/public/monaco-linter/eslint.worker.js @@ -0,0 +1,57 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +// importScripts 不支持 esm, 此处使用 umd, 对外暴露的变量名:linter,需要填写openTiny的cdn地址 +importScripts('') + +// 根据公司的编码规范内置了 config/rules, 可以进一步定制 +const config = { + ...self.linter.config, + rules: { + ...self.linter.config.rules, + // JS 面板中,仅定义 function,但可能不使用该方法 + 'no-unused-vars': 'off', + 'no-alert': 'off', + 'no-console': 'off' + }, + settings: {} +} + +// 错误的等级,ESLint 与 monaco 的存在差异,做一层映射 +const severityMap = { + 2: 'Error', + 1: 'Warning' +} + +self.addEventListener('message', (event) => { + const { code, version } = event.data + + const ruleDefines = self.linter.esLinter.getRules() + const errs = self.linter.esLinter.verify(code, config) + + const markers = errs.map(({ ruleId = '', line, endLine, column, endColumn, message, severity }) => ({ + code: { + value: ruleId, + target: ruleDefines.get(ruleId)?.meta?.docs?.url + }, + startLineNumber: line, + endLineNumber: endLine, + startColumn: column, + endColumn: endColumn, + message: message, + severity: severityMap[severity], + source: 'ESLint' + })) + + // ESLint 静态检查结果,发回主线程 + self.postMessage({ markers, version }) +}) diff --git a/packages/design-core/public/tiny-vue.css b/packages/design-core/public/tiny-vue.css new file mode 100644 index 000000000..785372b05 --- /dev/null +++ b/packages/design-core/public/tiny-vue.css @@ -0,0 +1,63 @@ +tiny-button { + display: inline-block; +} + +tiny-search{ +display: inline-block; +} + +tiny-switch{ + display: inline-block; +} + +tiny-select{ + display: inline-block; +} + +tiny-input{ + display: inline-table; +} + +tiny-checkbox{ + display: inline-flex; +} + +tiny-checkbox-button{ + display: block; +} + +tiny-checkbox-group{ + display: inline-block; +} + +tiny-dialog-box{ + display: block; +} + +tiny-time-line{ + display: block; +} + +tiny-form{ + display: block; +} + +tiny-form-item{ + display: block; +} + +tiny-tabs{ + display: block; +} + +tiny-pager{ + display: block; +} + +tiny-grid{ + display: block; +} + +tiny-grid-column{ + display: inline-block; +} diff --git a/packages/design-core/scripts/externalDeps.js b/packages/design-core/scripts/externalDeps.js new file mode 100644 index 000000000..418fec751 --- /dev/null +++ b/packages/design-core/scripts/externalDeps.js @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +/** + * 嵌入 + + diff --git a/packages/design-core/src/App.vue b/packages/design-core/src/App.vue new file mode 100644 index 000000000..e8c169a28 --- /dev/null +++ b/packages/design-core/src/App.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/packages/design-core/src/DesignCanvas.vue b/packages/design-core/src/DesignCanvas.vue new file mode 100644 index 000000000..dfad7bac2 --- /dev/null +++ b/packages/design-core/src/DesignCanvas.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/packages/design-core/src/DesignPlugins.vue b/packages/design-core/src/DesignPlugins.vue new file mode 100644 index 000000000..2c7f1e5c5 --- /dev/null +++ b/packages/design-core/src/DesignPlugins.vue @@ -0,0 +1,359 @@ + + + + + diff --git a/packages/design-core/src/DesignSettings.vue b/packages/design-core/src/DesignSettings.vue new file mode 100644 index 000000000..b7f082f4b --- /dev/null +++ b/packages/design-core/src/DesignSettings.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/packages/design-core/src/DesignToolbars.vue b/packages/design-core/src/DesignToolbars.vue new file mode 100644 index 000000000..d6786d4d9 --- /dev/null +++ b/packages/design-core/src/DesignToolbars.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/packages/design-core/src/canvas.js b/packages/design-core/src/canvas.js new file mode 100644 index 000000000..118254a0d --- /dev/null +++ b/packages/design-core/src/canvas.js @@ -0,0 +1,3 @@ +import { createRender } from '@opentiny/tiny-engine-canvas' + +createRender(window.parent.TinyGlobalConfig) diff --git a/packages/design-core/src/main.js b/packages/design-core/src/main.js new file mode 100644 index 000000000..4da1396e4 --- /dev/null +++ b/packages/design-core/src/main.js @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { createApp } from 'vue' +import initSvgs from '@opentiny/tiny-engine-svgs' +import { setGlobalConfig } from '@opentiny/tiny-engine-controller' +import i18n from '@opentiny/tiny-engine-controller/js/i18n' +import App from './App.vue' +import globalConfig from '../config/lowcode.config' +import { initMonitor } from '@opentiny/tiny-engine-controller/js/monitor' +import { injectGlobalComponents } from '@opentiny/tiny-engine-common' +import { initHttp } from '@opentiny/tiny-engine-http' +import 'virtual:svg-icons-register' + +import TinyThemeTool from '@opentiny/vue-theme/theme-tool' +import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 + +initHttp({ env: import.meta.env }) + +// eslint-disable-next-line no-new +new TinyThemeTool(tinySmbTheme, 'smbtheme') // 初始化主题 + +if (import.meta.env.VITE_ERROR_MONITOR === 'true' && import.meta.env.VITE_ERROR_MONITOR_URL) { + initMonitor(import.meta.env.VITE_ERROR_MONITOR_URL) +} + +window.TinyGlobalConfig = globalConfig +setGlobalConfig(globalConfig) + +const app = createApp(App) + +initSvgs(app) +window.lowcodeI18n = i18n +app.use(i18n).use(injectGlobalComponents).mount('#app') diff --git a/packages/design-core/src/preview/src/App.vue b/packages/design-core/src/preview/src/App.vue new file mode 100644 index 000000000..bc57e710b --- /dev/null +++ b/packages/design-core/src/preview/src/App.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/packages/design-core/src/preview/src/Toolbar.vue b/packages/design-core/src/preview/src/Toolbar.vue new file mode 100644 index 000000000..18071ecba --- /dev/null +++ b/packages/design-core/src/preview/src/Toolbar.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/packages/design-core/src/preview/src/constant/index.js b/packages/design-core/src/preview/src/constant/index.js new file mode 100644 index 000000000..6debf4243 --- /dev/null +++ b/packages/design-core/src/preview/src/constant/index.js @@ -0,0 +1,23 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +const PanelType = { + VUE: 'vue' +} + +const PreviewTips = { + ERROR_WHEN_COMPILE: '预览时,代码解析、预编译报错', + // 为了保持一致的 return,仅用作开发提示,相当于注释 + READY_FOR_PREVIEW: 'schema 生成的代码,装载成功,即将在线编译预览' +} + +export { PanelType, PreviewTips } diff --git a/packages/design-core/src/preview/src/main.js b/packages/design-core/src/preview/src/main.js new file mode 100644 index 000000000..df3de70ec --- /dev/null +++ b/packages/design-core/src/preview/src/main.js @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { createApp } from 'vue' +import initSvgs from '@opentiny/tiny-engine-svgs' +import App from './App.vue' +import 'virtual:svg-icons-register' + +const app = createApp(App) + +initSvgs(app) + +app.mount('#app') diff --git a/packages/design-core/src/preview/src/preview/Preview.vue b/packages/design-core/src/preview/src/preview/Preview.vue new file mode 100644 index 000000000..a08723642 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/Preview.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/packages/design-core/src/preview/src/preview/debugSwitch.js b/packages/design-core/src/preview/src/preview/debugSwitch.js new file mode 100644 index 000000000..654b5eba0 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/debugSwitch.js @@ -0,0 +1,10 @@ +import { ref, provide, inject } from 'vue' +export const debuggerSwitchTokenKey = Symbol('tiny-engine-preview-debug-switch') +export function useDebugSwitch() { + const debugSwitch = ref(false) + provide(debuggerSwitchTokenKey, debugSwitch) + return debugSwitch +} +export function injectDebugSwitch() { + return inject(debuggerSwitchTokenKey) +} diff --git a/packages/design-core/src/preview/src/preview/generate.js b/packages/design-core/src/preview/src/preview/generate.js new file mode 100644 index 000000000..3a7b3abcd --- /dev/null +++ b/packages/design-core/src/preview/src/preview/generate.js @@ -0,0 +1,161 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +const generateDefaultExport = (data) => + data && typeof data === 'object' ? `export default ${JSON.stringify(data, null, 2)}`.trim() : 'export default {}' + +const generateStores = (globalState) => { + if (!Array.isArray(globalState)) { + return 'export {}' + } + + const result = ["import { defineStore } from 'pinia'\n"] + + const getStoreFunctionStrs = (getters = {}) => + Object.values(getters) + .map(({ value }) => value?.replace(/function /, '')) + .join(',\n') + + globalState.forEach(({ id, state, getters, actions }) => { + const storeCode = `export const ${id} = defineStore({ + id: '${id}', + state: () => (${JSON.stringify(state)}), + getters: { + ${getStoreFunctionStrs(getters)} + }, + actions: { + ${getStoreFunctionStrs(actions)} + } +})` + + result.push(storeCode) + }) + + return result.join('\n') +} + +const generateBridge = () => 'export default {}' + +const checkIsValidFunString = (str) => { + if (!str) { + return false + } + try { + const F = Function + const func = new F(`return ${str}`) + const type = Object.prototype.toString.call(func) + + return type === '[object Function]' || type === '[object AsyncFunction]' + } catch (error) { + return false + } +} + +function generateImportsByType({ item, imports, exportNames, functionStrs }) { + if (item.type === 'npm') { + const importFrom = `${item.content.package || ''}${item.content.main || ''}` + + if (importFrom) { + imports[importFrom] = imports[importFrom] || {} + const importItem = imports[importFrom] + + if (item.content.destructuring) { + importItem.destructurings = importItem.destructurings || [] + importItem.destructurings.push(item.content.exportName) + importItem.aliases = importItem.aliases || [] + importItem.aliases.push(item.name) + } else { + importItem.exportName = item.name + } + + exportNames.push(item.name) + } + } else if (item.type === 'function' && checkIsValidFunString(item.content.value)) { + functionStrs.push(`const ${item.name} = ${item.content.value}`) + exportNames.push(item.name) + } +} + +function generateStrsFromImports({ imports, strs, functionStrs, exportNames }) { + const importStrs = [] + + Object.entries(imports).forEach(([key, value]) => { + const list = [] + + if (value.exportName) { + list.push(value.exportName) + } + + if (Array.isArray(value.destructurings) && value.destructurings.length) { + const destructuringsWithAliases = value.destructurings.map((destructuring, index) => { + const alias = value.aliases[index] + if (destructuring === alias) { + return destructuring + } + return `${destructuring} as ${alias}` + }) + list.push(`{ ${destructuringsWithAliases.join(', ')} }`) + } + + importStrs.push(`import ${list.join(', ')} from '${key}'`) + }) + + strs.push(...importStrs, ...functionStrs) + + if (exportNames.length) { + strs.push(`export { ${exportNames.join(', ')} }`) + } +} + +const generateUtils = (list) => { + const strs = [] + + if (Array.isArray(list)) { + const exportNames = [] + const functionStrs = [] + const imports = {} + + list.forEach((item) => { + generateImportsByType({ item, imports, exportNames, functionStrs }) + }) + + generateStrsFromImports({ imports, strs, functionStrs, exportNames }) + } + + return strs.join('\n') +} + +/** + * 处理css文件依赖 + * @param {*} code 源代码 + * @param {*} cssList css文件 + * @returns + */ +export const processAppJsCode = (code, cssList) => { + return `${code}${cssList.map((css) => `addCss('${css}')`).join('\n')}` +} + +export default (data) => { + const locales = generateDefaultExport(data.i18n) + const dataSource = generateDefaultExport(data.dataSource) + const stores = generateStores(data.globalState) + const bridge = generateBridge(data.bridge) + const utils = generateUtils(data.utils) + + return { + 'locales.js': locales, + 'dataSource.js': dataSource, + 'stores.js': stores, + 'bridge.js': bridge, + 'utils.js': utils + } +} diff --git a/packages/design-core/src/preview/src/preview/http.js b/packages/design-core/src/preview/src/preview/http.js new file mode 100644 index 000000000..2726e5b58 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/http.js @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { useHttp } from '@opentiny/tiny-engine-http' +import { atou } from '@opentiny/tiny-engine-controller/js/preview' + +const http = useHttp() + +const HEADER_LOWCODE_ORG = 'x-lowcode-org' + +export const getSearchParams = () => { + let params + + try { + params = JSON.parse(atou(location.hash.slice(1))) + } catch (error) { + params = {} + } + + return params +} + +export const fetchCode = async ({ platform, app, type, id, history, pageInfo, tenant } = {}) => + pageInfo + ? http.post( + '/app-center/api/schema2code', + { platform, app, pageInfo }, + { + headers: { [HEADER_LOWCODE_ORG]: tenant } + } + ) + : http.get('/app-center/api/code', { + headers: { [HEADER_LOWCODE_ORG]: tenant }, + params: { platform, app, type, id, history } + }) + +export const fetchMetaData = async ({ platform, app, type, id, history, tenant } = {}) => + id + ? http.get('/app-center/api/preview/metadata', { + headers: { [HEADER_LOWCODE_ORG]: tenant }, + params: { platform, app, type, id, history } + }) + : {} diff --git a/packages/design-core/src/preview/src/preview/importMap.js b/packages/design-core/src/preview/src/preview/importMap.js new file mode 100644 index 000000000..35ccfd21b --- /dev/null +++ b/packages/design-core/src/preview/src/preview/importMap.js @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +// import { hyphenate } from '@vue/shared' + +import { getSearchParams } from './http' +import { VITE_CDN_DOMAIN } from '@opentiny/tiny-engine-controller/js/environments' + +const importMap = {} + +const opentinyVueVersion = '~3.11' + +const tinyVue3Imports = { + // 推荐之后统一使用@opentiny/vue去引入依赖,兼容后续录入的组件来源于tiny-vue + '@opentiny/vue': `${VITE_CDN_DOMAIN}/@opentiny/vue@${opentinyVueVersion}/runtime/tiny-vue.mjs`, + '@opentiny/vue-icon': `${VITE_CDN_DOMAIN}/@opentiny/vue@${opentinyVueVersion}/runtime/tiny-vue-icon.mjs`, + '@opentiny/vue-common': `${VITE_CDN_DOMAIN}/@opentiny/vue@${opentinyVueVersion}/runtime/tiny-vue-common.mjs`, + '@opentiny/vue-locale': `${VITE_CDN_DOMAIN}/@opentiny/vue@${opentinyVueVersion}/runtime/tiny-vue-locale.mjs`, + '@opentiny/vue-renderless/': `${VITE_CDN_DOMAIN}/@opentiny/vue-renderless@${opentinyVueVersion}/` +} + +importMap.imports = { + vue: `${VITE_CDN_DOMAIN}/vue@3.2.36/dist/vue.runtime.esm-browser.js`, + 'vue/server-renderer': `${VITE_CDN_DOMAIN}/@vue/server-renderer@3.2.36/dist/server-renderer.esm-browser.js`, + 'vue-i18n': `${VITE_CDN_DOMAIN}/vue-i18n@9.2.0-beta.36/dist/vue-i18n.esm-browser.js`, + 'vue-router': `${VITE_CDN_DOMAIN}/vue-router@4.0.16/dist/vue-router.esm-browser.js`, + '@vue/devtools-api': `${VITE_CDN_DOMAIN}/@vue/devtools-api@6.5.1/lib/esm/index.js`, + '@vueuse/core': `${VITE_CDN_DOMAIN}/@vueuse/core@9.6.0/index.mjs`, + '@vueuse/shared': `${VITE_CDN_DOMAIN}/@vueuse/shared@9.6.0/index.mjs`, + axios: `${VITE_CDN_DOMAIN}/axios@1.0.0-alpha.1/dist/esm/axios.js`, + 'axios-mock-adapter': `${VITE_CDN_DOMAIN}/axios-mock-adapter@1.21.1/dist/axios-mock-adapter.js`, + '@opentiny/tiny-engine-webcomponent-core': `${VITE_CDN_DOMAIN}/@opentiny/tiny-engine-webcomponent-core@1/dist/tiny-engine-webcomponent-core.es.js`, + '@opentiny/tiny-engine-i18n-host': `${VITE_CDN_DOMAIN}/@opentiny/tiny-engine-i18n-host@1/dist/tiny-engine-i18n-host.es.js`, + '@opentiny/tiny-engine-builtin-component': `${VITE_CDN_DOMAIN}/@opentiny/tiny-engine-builtin-component@1/dist/index.js`, + '@opentiny/tiny-engine-live-component': `${VITE_CDN_DOMAIN}/tiny-engine-live-component@1.0.8/dist/index.js`, + 'vue-demi': `${VITE_CDN_DOMAIN}/vue-demi@0.13.11/lib/index.mjs`, + pinia: `${VITE_CDN_DOMAIN}/pinia@2.0.22/dist/pinia.esm-browser.js`, + ...tinyVue3Imports, + ...getSearchParams().scripts +} + +export default importMap diff --git a/packages/design-core/src/preview/src/preview/srcFiles.js b/packages/design-core/src/preview/src/preview/srcFiles.js new file mode 100644 index 000000000..2b109998b --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles.js @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import appVue from './srcFiles/App.vue?raw' +import injectGlobalJS from './srcFiles/injectGlobal.js?raw' +import constantJS from './srcFiles/constant/index.js?raw' +import appJS from './srcFiles/app.js?raw' +import mainVue from './srcFiles/Main.vue?raw' +import lowcodeJS from './srcFiles/lowcode.js?raw' +import dataSourceMapJS from './srcFiles/dataSourceMap.js?raw' +import dataSourceJS from './srcFiles/dataSource.js?raw' +import utilsJS from './srcFiles/utils.js?raw' +import bridgeJS from './srcFiles/bridge.js?raw' +import localesJS from './srcFiles/locales.js?raw' +import storesJS from './srcFiles/stores.js?raw' +import storesHelperJS from './srcFiles/storesHelper.js?raw' + +const srcFiles = {} + +srcFiles['App.vue'] = appVue +srcFiles['Main.vue'] = mainVue +srcFiles['constant.js'] = constantJS +srcFiles['app.js'] = appJS.replace(/VITE_CDN_DOMAIN/g, import.meta.env.VITE_CDN_DOMAIN) +srcFiles['injectGlobal.js'] = injectGlobalJS +srcFiles['lowcode.js'] = lowcodeJS +srcFiles['dataSourceMap.js'] = dataSourceMapJS +srcFiles['dataSource.js'] = dataSourceJS +srcFiles['utils.js'] = utilsJS +srcFiles['bridge.js'] = bridgeJS +srcFiles['locales.js'] = localesJS +srcFiles['stores.js'] = storesJS +srcFiles['storesHelper.js'] = storesHelperJS + +export default srcFiles diff --git a/packages/design-core/src/preview/src/preview/srcFiles/App.vue b/packages/design-core/src/preview/src/preview/srcFiles/App.vue new file mode 100644 index 000000000..66a4febbe --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/App.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/packages/design-core/src/preview/src/preview/srcFiles/Login.vue b/packages/design-core/src/preview/src/preview/srcFiles/Login.vue new file mode 100644 index 000000000..cd64e9b46 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/Login.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/packages/design-core/src/preview/src/preview/srcFiles/Main.vue b/packages/design-core/src/preview/src/preview/srcFiles/Main.vue new file mode 100644 index 000000000..2d4963b4e --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/Main.vue @@ -0,0 +1,3 @@ + diff --git a/packages/design-core/src/preview/src/preview/srcFiles/app.js b/packages/design-core/src/preview/src/preview/srcFiles/app.js new file mode 100644 index 000000000..d01bd1d1a --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/app.js @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +function addCss(href) { + const link = document.createElement('link') + link.setAttribute('rel', 'stylesheet') + link.setAttribute('href', href) + document.head.appendChild(link) +} +addCss('VITE_CDN_DOMAIN/@opentiny/vue-theme@3.11/index.css') +addCss('VITE_CDN_DOMAIN/@opentiny/vue-theme-mobile@3.11/index.css') diff --git a/packages/design-core/src/preview/src/preview/srcFiles/bridge.js b/packages/design-core/src/preview/src/preview/srcFiles/bridge.js new file mode 100644 index 000000000..3ee6a55b4 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/bridge.js @@ -0,0 +1,13 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export default {} diff --git a/packages/design-core/src/preview/src/preview/srcFiles/constant/index.js b/packages/design-core/src/preview/src/preview/srcFiles/constant/index.js new file mode 100644 index 000000000..b166abbbe --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/constant/index.js @@ -0,0 +1,22 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +const BROADCAST_CHANNEL = { + PreviewLang: 'tiny-lowcode-preview-lang' +} + +export const I18N_KEY_MAPS = { + zhCN: 'zh_CN', + enUS: 'en_US' +} + +export { BROADCAST_CHANNEL } diff --git a/packages/design-core/src/preview/src/preview/srcFiles/dataSource.js b/packages/design-core/src/preview/src/preview/srcFiles/dataSource.js new file mode 100644 index 000000000..547a519a6 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/dataSource.js @@ -0,0 +1,16 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export default { + list: [], + dataHandler: null +} diff --git a/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js b/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js new file mode 100644 index 000000000..ae37f2e25 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js @@ -0,0 +1,35 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import dataSources from './dataSource.js' + +const dataSourceMap = {} + +Array.isArray(dataSources.list) && + dataSources.list.forEach((config) => { + const dataSource = { config: config.data } + + const result = { + code: '', + msg: 'success', + data: {} + } + result.data = + dataSource.config.type === 'array' + ? { items: dataSource?.config?.data, total: dataSource?.config?.data?.length } + : dataSource?.config?.data + dataSourceMap[config.name] = dataSource + + dataSource.load = () => Promise.resolve(result) + }) + +export default dataSourceMap diff --git a/packages/design-core/src/preview/src/preview/srcFiles/injectGlobal.js b/packages/design-core/src/preview/src/preview/srcFiles/injectGlobal.js new file mode 100644 index 000000000..62bc52fa0 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/injectGlobal.js @@ -0,0 +1,17 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import * as Vue from 'vue' +import * as VueI18n from 'vue-i18n' + +window.Vue = Vue +window.VueI18n = VueI18n diff --git a/packages/design-core/src/preview/src/preview/srcFiles/locales.js b/packages/design-core/src/preview/src/preview/srcFiles/locales.js new file mode 100644 index 000000000..cec31cfd2 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/locales.js @@ -0,0 +1,16 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export default { + zh_CN: {}, + en_US: {} +} diff --git a/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js b/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js new file mode 100644 index 000000000..22d96c1b6 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { getCurrentInstance, nextTick, provide, inject } from 'vue' +import { I18nInjectionKey } from 'vue-i18n' +import dataSourceMap from './dataSourceMap.js' +import * as utils from './utils.js' +import * as bridge from './bridge.js' +import { useStores } from './storesHelper.js' +import { Modal } from '@opentiny/vue' + +export const lowcodeWrap = (props, context) => { + const global = {} + const instance = getCurrentInstance() + const router = new Proxy( + {}, + { + get() { + Modal.alert('页面和区块预览不支持路由操作,请使用应用预览', '提示') + return () => {} + } + } + ) + const { t, locale } = inject(I18nInjectionKey).global + const emit = context.emit + const ref = (ref) => instance.refs[ref] + + const setState = (newState, callback) => { + Object.assign(global.state, newState) + nextTick(() => callback?.apply(global)) + } + + const getLocale = () => locale.value + const setLocale = (val) => { + locale.value = val + } + + const location = () => window.location + const history = () => window.history + + Object.defineProperties(global, { + props: { get: () => props }, + emit: { get: () => emit }, + setState: { get: () => setState }, + router: { get: () => router }, + i18n: { get: () => t }, + getLocale: { get: () => getLocale }, + setLocale: { get: () => setLocale }, + location: { get: location }, + history: { get: history }, + utils: { get: () => utils }, + bridge: { get: () => bridge }, + dataSourceMap: { get: () => dataSourceMap }, + $: { get: () => ref } + }) + + const wrap = (fn) => { + if (typeof fn === 'function') { + return (...args) => fn.apply(global, args) + } + + Object.entries(fn).forEach(([name, value]) => { + Object.defineProperty(global, name, { + get: () => value + }) + }) + + fn.t = t + + return fn + } + + return wrap +} + +export default () => { + const i18n = inject(I18nInjectionKey) + provide(I18nInjectionKey, i18n) + + const stores = useStores() + + return { t: i18n.global.t, stores, lowcodeWrap } +} diff --git a/packages/design-core/src/preview/src/preview/srcFiles/stores.js b/packages/design-core/src/preview/src/preview/srcFiles/stores.js new file mode 100644 index 000000000..ff4ee0aa0 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/stores.js @@ -0,0 +1,13 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +export {} diff --git a/packages/design-core/src/preview/src/preview/srcFiles/storesHelper.js b/packages/design-core/src/preview/src/preview/srcFiles/storesHelper.js new file mode 100644 index 000000000..f766b5445 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/storesHelper.js @@ -0,0 +1,29 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import * as userDefinedStores from './stores.js' + +const validStore = (store) => typeof store === 'function' && store.name === 'useStore' && store.$id + +const useStores = () => { + const stores = {} + + Object.values(userDefinedStores) + .filter(validStore) + .forEach((store) => { + stores[store.$id] = store() + }) + + return stores +} + +export { validStore, useStores } diff --git a/packages/design-core/src/preview/src/preview/srcFiles/utils.js b/packages/design-core/src/preview/src/preview/srcFiles/utils.js new file mode 100644 index 000000000..b51178395 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/utils.js @@ -0,0 +1,14 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { Pager, Select, Modal, Input } from '@opentiny/vue' +export { Pager, Select, Modal, Input } diff --git a/packages/design-core/src/preview/src/previewApp.js b/packages/design-core/src/preview/src/previewApp.js new file mode 100644 index 000000000..0d7dab502 --- /dev/null +++ b/packages/design-core/src/preview/src/previewApp.js @@ -0,0 +1,17 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { createApp } from 'vue' + +import App from './previewApp.vue' + +createApp(App).mount('#app') diff --git a/packages/design-core/src/preview/src/previewApp.vue b/packages/design-core/src/preview/src/previewApp.vue new file mode 100644 index 000000000..9dba94595 --- /dev/null +++ b/packages/design-core/src/preview/src/previewApp.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js new file mode 100644 index 000000000..ed560b4e5 --- /dev/null +++ b/packages/design-core/vite.config.js @@ -0,0 +1,292 @@ +import { defineConfig, loadEnv } from 'vite' + +import path from 'path' +import vue from '@vitejs/plugin-vue' +import monacoEditorPlugin from 'vite-plugin-monaco-editor' +import vueJsx from '@vitejs/plugin-vue-jsx' +import nodeGlobalsPolyfillPlugin from '@esbuild-plugins/node-globals-polyfill' +import nodeModulesPolyfillPlugin from '@esbuild-plugins/node-modules-polyfill' +import nodePolyfill from 'rollup-plugin-polyfill-node' +import esbuildCopy from 'esbuild-plugin-copy' +import lowcodeConfig from './config/lowcode.config' +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' +import { importmapPlugin } from './scripts/externalDeps' +import visualizer from 'rollup-plugin-visualizer' + +const origin = 'http://localhost:9090/' + +const config = { + base: './', + publicDir: path.resolve(__dirname, './public'), + resolve: { + extensions: ['.js', '.jsx', '.vue'], + alias: {} + }, + server: { + // 这里保证本地启动服务是localhost,支持js多线程和谷歌浏览器读写本地文件api + port: 8080, + open: '/?type=app&id=918&tenant=1', + proxy: { + '/app-center/v1/api': { + target: origin, + changeOrigin: true + }, + '/app-center/api': { + target: origin, + changeOrigin: true + }, + '/material-center/api': { + target: origin, + changeOrigin: true + }, + '/platform-center/api': { + target: origin, + changeOrigin: true + } + } + }, + preview: { + host: 'localhost', + port: 8080, + open: false + }, + plugins: [ + visualizer({ + filename: 'tmp/report.html', + title: 'Bundle Analyzer' + }), + vue({ + reactivityTransform: path.resolve(__dirname, 'src'), + template: { + compilerOptions: { + isCustomElement: (tag) => tag.startsWith('tiny-i18n-host') || tag.startsWith('ng') + } + } + }), + vueJsx(), + createSvgIconsPlugin({ + iconDirs: [ + path.resolve(__dirname, './assets/rf-resources/'), // 脚手架执行构建时将图元图片拷贝到此目录 + path.resolve(__dirname, './assets/') + ], + symbolId: 'icon-[name]', + inject: 'body-last' + }) + ], + optimizeDeps: { + esbuildOptions: { + plugins: [ + nodeGlobalsPolyfillPlugin({ + process: true, + buffer: true + }), + nodeModulesPolyfillPlugin(), + esbuildCopy({ + //@vue/repl monaco编辑器需要 + resolveFrom: 'cwd', + assets: { + from: ['./node_modules/@vue/repl/dist/assets/*'], // worker.js文件以url形式引用不会被esbuild拉起,需要手动复制 + to: ['./node_modules/.vite/assets'] // 开发态,js文件被缓存在.vite/deps,请求相对路径为.vite/assets + }, + watch: true + }) + ] + } + }, + define: { + 'process.env': {} + }, + build: { + commonjsOptions: { + transformMixedEsModules: true, + // monaco-editor 满足 ESM 规范,防止被误转换 + exclude: ['node_modules/*monaco-editor*/**', 'node_modules/lodash-es/**', 'node_modules/@types/lodash-es/**'] + }, + minify: true, + sourcemap: false, + rollupOptions: { + plugins: [nodePolyfill({ include: null })], // 使用@rollup/plugin-inject的默认值{include: null}, 即在所有代码中生效 + input: { + index: path.resolve(__dirname, './index.html'), + canvas: path.resolve(__dirname, './canvas.html'), + preview: path.resolve(__dirname, './preview.html'), + previewApp: path.resolve(__dirname, './previewApp.html') + }, + output: { + manualChunks: (id) => { + const chunksMap = { + monaco: ['node_modules/monaco-editor'], + prettier: ['node_modules/prettier'], + vendor: ['node_modules'] + } + for (const [chunkName, sourcePaths] of Object.entries(chunksMap)) { + if (sourcePaths.some((item) => id.indexOf(item) > -1)) { + return chunkName + } + } + return undefined + } + } + } + } +} + +const importMapVersions = { + prettier: '2.7.1', + vue: '3', + tinyVue: '~3.11' +} + +const devAlias = { + '@opentiny/tiny-engine-controller/js': path.resolve(__dirname, '../controller/js'), + '@opentiny/tiny-engine-common/component': path.resolve(__dirname, '../common/component'), + '@opentiny/tiny-engine-common': path.resolve(__dirname, '../common/index.js'), + '@opentiny/tiny-engine-controller/utils': path.resolve(__dirname, '../controller/utils.js'), + '@opentiny/tiny-engine-controller/adapter': path.resolve(__dirname, '../controller/adapter.js'), + '@opentiny/tiny-engine-controller': path.resolve(__dirname, '../controller/src/index.js'), + '@opentiny/tiny-engine-plugin-materials': path.resolve(__dirname, '../plugins/materials/index.js'), + '@opentiny/tiny-engine-plugin-block': path.resolve(__dirname, '../plugins/block/index.js'), + '@opentiny/tiny-engine-plugin-data': path.resolve(__dirname, '../plugins/data/index.js'), + '@opentiny/tiny-engine-plugin-datasource': path.resolve(__dirname, '../plugins/datasource/index.js'), + '@opentiny/tiny-engine-plugin-script': path.resolve(__dirname, '../plugins/script/index.js'), + '@opentiny/tiny-engine-plugin-tree': path.resolve(__dirname, '../plugins/tree/index.js'), + '@opentiny/tiny-engine-plugin-help': path.resolve(__dirname, '../plugins/help/index.js'), + '@opentiny/tiny-engine-plugin-schema': path.resolve(__dirname, '../plugins/schema/index.js'), + '@opentiny/tiny-engine-plugin-page': path.resolve(__dirname, '../plugins/page/index.js'), + '@opentiny/tiny-engine-plugin-i18n': path.resolve(__dirname, '../plugins/i18n/index.js'), + '@opentiny/tiny-engine-plugin-bridge': path.resolve(__dirname, '../plugins/bridge/index.js'), + '@opentiny/tiny-engine-plugin-tutorial': path.resolve(__dirname, '../plugins/tutorial/index.js'), + '@opentiny/tiny-engine-plugin-robot': path.resolve(__dirname, '../plugins/robot/index.js'), + '@opentiny/tiny-engine-setting-events': path.resolve(__dirname, '../settings/events/index.js'), + '@opentiny/tiny-engine-setting-props': path.resolve(__dirname, '../settings/props/index.js'), + '@opentiny/tiny-engine-setting-styles': path.resolve(__dirname, '../settings/styles/index.js'), + '@opentiny/tiny-engine-toolbar-breadcrumb': path.resolve(__dirname, '../toolbars/breadcrumb/index.js'), + '@opentiny/tiny-engine-toolbar-fullscreen': path.resolve(__dirname, '../toolbars/fullscreen/index.js'), + '@opentiny/tiny-engine-toolbar-lang': path.resolve(__dirname, '../toolbars/lang/index.js'), + '@opentiny/tiny-engine-toolbar-layout': path.resolve(__dirname, '../toolbars/layout/index.js'), + '@opentiny/tiny-engine-toolbar-checkinout': path.resolve(__dirname, '../toolbars/lock/index.js'), + '@opentiny/tiny-engine-toolbar-logo': path.resolve(__dirname, '../toolbars/logo/index.js'), + '@opentiny/tiny-engine-toolbar-logout': path.resolve(__dirname, '../toolbars/logout/index.js'), + '@opentiny/tiny-engine-toolbar-media': path.resolve(__dirname, '../toolbars/media/index.js'), + '@opentiny/tiny-engine-toolbar-preview': path.resolve(__dirname, '../toolbars/preview/index.js'), + '@opentiny/tiny-engine-toolbar-generate-vue': path.resolve(__dirname, '../toolbars/generate-vue/index.js'), + '@opentiny/tiny-engine-toolbar-refresh': path.resolve(__dirname, '../toolbars/refresh/index.js'), + '@opentiny/tiny-engine-toolbar-redoundo': path.resolve(__dirname, '../toolbars/redoundo/index.js'), + '@opentiny/tiny-engine-toolbar-clean': path.resolve(__dirname, '../toolbars/clean/index.js'), + '@opentiny/tiny-engine-toolbar-save': path.resolve(__dirname, '../toolbars/save/index.js'), + '@opentiny/tiny-engine-toolbar-setting': path.resolve(__dirname, '../toolbars/setting/index.js'), + '@opentiny/tiny-engine-toolbar-collaboration': path.resolve(__dirname, '../toolbars/collaboration/index.js'), + '@opentiny/tiny-engine-theme-dark': path.resolve(__dirname, '../theme/dark/index.less'), + '@opentiny/tiny-engine-theme-light': path.resolve(__dirname, '../theme/light/index.less'), + '@opentiny/tiny-engine-svgs': path.resolve(__dirname, '../svgs/index.js'), + '@opentiny/tiny-engine-http': path.resolve(__dirname, '../http/src/index.js'), + '@opentiny/tiny-engine-canvas': path.resolve(__dirname, '../canvas/src/index.js'), + '@opentiny/tiny-engine-theme': path.resolve(__dirname, `../theme/${lowcodeConfig.theme}/index.less`), + '@opentiny/tiny-engine-utils': path.resolve(__dirname, '../utils/src/index.js'), + '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, '../webcomponent/src/lib.js'), + '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../i18n/src/lib.js'), + '@opentiny/tiny-engine-builtin-component': path.resolve(__dirname, '../builtinComponent/index.js'), + '@opentiny/tiny-engine-live-component': path.resolve(__dirname, '../live-component/src/index.js') +} + +const prodAlias = { + '@opentiny/tiny-engine-theme': path.resolve( + __dirname, + `node_modules/@opentiny/tiny-engine-theme-${lowcodeConfig.theme}/dist/style.css` + ) +} + +const commonAlias = { + '@opentiny/tiny-engine-app-addons': path.resolve(__dirname, './config/addons.js') +} + +export default defineConfig(({ command, mode }) => { + const { VITE_CDN_DOMAIN } = loadEnv(mode, process.cwd(), '') + const monacoPublicPath = { + local: 'editor/monaco-workers', + alpha: 'https://tinyengine-assets.obs.cn-north-4.myhuaweicloud.com/files/monaco-assets', + prod: 'https://tinyengine-assets.obs.cn-north-4.myhuaweicloud.com/files/monaco-assets' + } + + let monacoEditorPluginInstance = monacoEditorPlugin({ publicPath: monacoPublicPath.local }) + const htmlPlugin = (mode) => { + const upgradeHttpsMetaTags = [] + const includeHtmls = ['index.html', 'preview.html', 'previewApp.html'] + + if (mode === 'alpha' || mode === 'prod') { + upgradeHttpsMetaTags.push({ + tag: 'meta', + injectTo: 'head-prepend', + attrs: { + 'http-equiv': 'Content-Security-Policy', + content: 'upgrade-insecure-requests' + } + }) + } + + return { + name: 'html-transform', + transformIndexHtml: { + enforce: 'pre', + transform(html, { filename }) { + return { + html, + tags: includeHtmls.includes(path.basename(filename)) ? upgradeHttpsMetaTags : [] + } + } + } + } + } + + if (command === 'serve') { + const devVueAlias = { + find: /^vue$/, + replacement: `${VITE_CDN_DOMAIN}/vue@${importMapVersions.vue}/dist/vue.runtime.esm-browser.js` + } + + config.resolve.alias = [ + devVueAlias, + ...Object.entries({ ...commonAlias, ...devAlias }).map(([find, replacement]) => ({ + find, + replacement + })) + ] + } else { + // command === 'build' + config.resolve.alias = { ...commonAlias, ...prodAlias } + + monacoEditorPluginInstance = monacoEditorPlugin({ publicPath: monacoPublicPath[mode] }) + + if (mode === 'prod') { + config.build.minify = true + config.build.sourcemap = false + } + } + + const importmap = { + imports: { + prettier: `${VITE_CDN_DOMAIN}/prettier@${importMapVersions.prettier}/esm/standalone.mjs`, + 'prettier/': `${VITE_CDN_DOMAIN}/prettier@${importMapVersions.prettier}/esm/`, + 'prettier/parser-typescript': `${VITE_CDN_DOMAIN}/prettier@${importMapVersions.prettier}/esm/parser-typescript.mjs`, + 'prettier/parser-html': `${VITE_CDN_DOMAIN}/prettier@${importMapVersions.prettier}/esm/parser-html.mjs`, + 'prettier/parser-postcss': `${VITE_CDN_DOMAIN}/prettier@${importMapVersions.prettier}/esm/parser-postcss.mjs`, + 'prettier/parser-babel': `${VITE_CDN_DOMAIN}/prettier@${importMapVersions.prettier}/esm/parser-babel.mjs`, + + vue: `${VITE_CDN_DOMAIN}/vue@${importMapVersions.vue}/dist/vue.runtime.esm-browser${command === 'build' ? '.prod' : '' + }.js`, + '@opentiny/vue': `${VITE_CDN_DOMAIN}/@opentiny/vue@${importMapVersions.tinyVue}/runtime/tiny-vue.mjs`, + '@opentiny/vue-icon': `${VITE_CDN_DOMAIN}/@opentiny/vue@${importMapVersions.tinyVue}/runtime/tiny-vue-icon.mjs`, + '@opentiny/vue-common': `${VITE_CDN_DOMAIN}/@opentiny/vue@${importMapVersions.tinyVue}/runtime/tiny-vue-common.mjs`, + '@opentiny/vue-locale': `${VITE_CDN_DOMAIN}/@opentiny/vue@${importMapVersions.tinyVue}/runtime/tiny-vue-locale.mjs`, + '@opentiny/vue-design-smb': `${VITE_CDN_DOMAIN}/@opentiny/vue-design-smb@${importMapVersions.tinyVue}/index.js`, + '@opentiny/vue-theme/theme-tool': `${VITE_CDN_DOMAIN}/@opentiny/vue-theme@${importMapVersions.tinyVue}/theme-tool`, + '@opentiny/vue-theme/theme': `${VITE_CDN_DOMAIN}/@opentiny/vue-theme@${importMapVersions.tinyVue}/theme` + } + } + + const importMapStyles = [`${VITE_CDN_DOMAIN}/@opentiny/vue-theme@${importMapVersions.tinyVue}/index.css`] + + config.plugins.push(monacoEditorPluginInstance, htmlPlugin(mode), importmapPlugin(importmap, importMapStyles)) + + return config +}) diff --git a/packages/http/package.json b/packages/http/package.json new file mode 100644 index 000000000..85566e8b5 --- /dev/null +++ b/packages/http/package.json @@ -0,0 +1,41 @@ +{ + "name": "@opentiny/tiny-engine-http", + "version": "1.0.2", + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "vite build" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/http" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@opentiny/tiny-engine-utils": "workspace:*", + "@opentiny/vue": "~3.10.0", + "@vueuse/core": "^9.6.0", + "axios": "^0.27.2", + "axios-mock-adapter": "^1.21.5" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "vite": "^4.3.7" + }, + "peerDependencies": { + "vue": "^3.4.15" + } +} diff --git a/packages/http/src/Login.vue b/packages/http/src/Login.vue new file mode 100644 index 000000000..6c5c8b0d6 --- /dev/null +++ b/packages/http/src/Login.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/packages/http/src/axios.js b/packages/http/src/axios.js new file mode 100644 index 000000000..25edcb693 --- /dev/null +++ b/packages/http/src/axios.js @@ -0,0 +1,151 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' + +export function globalDefaults(key, value) { + if (key && typeof key === 'string') { + if (typeof value === 'undefined') { + return axios.defaults[key] + } + axios.defaults[key] = value + return undefined + } + + return axios.defaults +} + +export default (config) => { + const instance = axios.create(config) + const defaults = {} + let mock + + if (typeof MockAdapter.prototype.proxy === 'undefined') { + MockAdapter.prototype.proxy = function ({ url, config = {}, proxy, response, handleData } = {}) { + let stream = this + const request = (proxy, any) => { + return (setting) => { + return new Promise((resolve) => { + config.responseType = 'json' + axios + .get(any ? proxy + setting.url + '.json' : proxy, config) + .then(({ data }) => { + typeof handleData === 'function' && (data = handleData(data, setting)) + resolve([200, data]) + }) + .catch((error) => { + resolve([error.response.status, error.response.data]) + }) + }) + } + } + + if (url === '*' && proxy && typeof proxy === 'string') { + stream = proxy === '*' ? this.onAny().passThrough() : this.onAny().reply(request(proxy, true)) + } else { + if (proxy && typeof proxy === 'string') { + stream = this.onAny(url).reply(request(proxy)) + } else if (typeof response === 'function') { + stream = this.onAny(url).reply(response) + } + } + + return stream + } + } + + return { + request(config) { + return instance(config) + }, + get(url, config) { + return instance.get(url, config) + }, + delete(url, config) { + return instance.delete(url, config) + }, + head(url, config) { + return instance.head(url, config) + }, + post(url, data, config) { + return instance.post(url, data, config) + }, + put(url, data, config) { + return instance.put(url, data, config) + }, + patch(url, data, config) { + return instance.patch(url, data, config) + }, + all(iterable) { + return axios.all(iterable) + }, + spread(callback) { + return axios.spread(callback) + }, + defaults(key, value) { + if (key && typeof key === 'string') { + if (typeof value === 'undefined') { + return instance.defaults[key] + } + instance.defaults[key] = value + defaults[key] = value + return undefined + } + + return instance.defaults + }, + defaultSettings() { + return defaults + }, + interceptors: { + request: { + use(fnHandle, fnError) { + return instance.interceptors.request.use(fnHandle, fnError) + }, + eject(id) { + return instance.interceptors.request.eject(id) + } + }, + response: { + use(fnHandle, fnError) { + return instance.interceptors.response.use(fnHandle, fnError) + }, + eject(id) { + return instance.interceptors.response.eject(id) + } + } + }, + mock(config) { + if (!mock) { + mock = new MockAdapter(instance) + } + + if (Array.isArray(config)) { + config.forEach((item) => { + mock.proxy(item) + }) + } + + return mock + }, + disableMock() { + mock && mock.restore() + mock = undefined + }, + isMock() { + return typeof mock !== 'undefined' + }, + CancelToken: axios.CancelToken, + isCancel: axios.isCancel + } +} diff --git a/packages/http/src/config.js b/packages/http/src/config.js new file mode 100644 index 000000000..54b57a8ca --- /dev/null +++ b/packages/http/src/config.js @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export function getConfig(env = import.meta.env) { + const baseURL = env.VITE_ORIGIN + + // 仅在本地开发时,启用 withCredentials + const dev = env.MODE?.includes('dev') + + // 获取租户 id + const getTenant = () => new URLSearchParams(location.search).get('tenant') + return { + baseURL, + withCredentials: false, + headers: { + 'x-lowcode-mode': dev ? 'develop' : null, + 'x-lowcode-org': getTenant() + } + } +} diff --git a/packages/http/src/index.js b/packages/http/src/index.js new file mode 100644 index 000000000..64b182c30 --- /dev/null +++ b/packages/http/src/index.js @@ -0,0 +1,155 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +/* eslint-disable no-undef */ +import axios, { globalDefaults } from './axios' +import { createApp } from 'vue' +import { useBroadcastChannel } from '@vueuse/core' +import Login from './Login.vue' +import { getConfig } from './config' +import mockData from './mock' +import { constants } from '@opentiny/tiny-engine-utils' + +const { BROADCAST_CHANNEL } = constants + +const { post: globalNotify } = useBroadcastChannel({ name: BROADCAST_CHANNEL.Notify }) + +const procession = { + promiseLogin: null, + mePromise: {} +} + +const LOGIN_EXPIRED_CODE = 401 + +const loginDom = document.createElement('div') +document.body.appendChild(loginDom) +const loginVM = createApp(Login).mount(loginDom) + +const showError = (url, message) => { + globalNotify({ + type: 'error', + title: '接口报错', + message: `报错接口: ${url} \n报错信息: ${message ?? ''}` + }) +} + +window.lowcode = { + platformCenter: { + Session: { + rebuiltCallback: function () { + loginVM.closeLogin() + + procession.mePromise.resolve('login ok') + procession.promiseLogin = null + procession.mePromise = {} + } + } + } +} + +let http // 封装axios的http实例 +let environment = import.meta.env // 当前设计器运行环境变量 + +const isVsCodeEnv = window.vscodeBridge +const isMock = () => environment.VITE_API_MOCK === 'mock' + +export const createHttp = (options) => { + // 缓存http实例,避免每个请求重新创建实例 + if (http && !options.force) { + return http + } + const isDevelopEnv = environment.MODE?.includes('dev') + const axiosConfig = getConfig(environment) + http = axios(axiosConfig) + + // 如果未指定是否启用 mock,则本地开发时默认启用,模拟数据在 public/mock 目录下 + const { enableMock = isDevelopEnv } = options + enableMock && http.mock(mockData) + + const preRequest = (config) => { + if (isDevelopEnv && config.url.match(/\/generate\//)) { + config.baseURL = '' + } + + if (isVsCodeEnv) { + config.baseURL = '' + } + + return config + } + + // 请求拦截器 + http.interceptors.request.use(preRequest) + + const preResponse = (res) => { + if (res.data?.error) { + showError(res.config?.url, res?.data?.error?.message) + + return Promise.reject(res.data.error) + } + + return res.data?.data + } + + const openLogin = () => { + return new Promise((resolve, reject) => { + if (!procession.promiseLogin) { + procession.promiseLogin = loginVM.openLogin(procession, '/api/rebuildSession') + procession.promiseLogin.then(() => { + http.request(response.config).then(resolve, reject) + }) + } + }) + } + + const errorResponse = (error) => { + // 用户信息失效时,弹窗提示登录 + const { response } = error + if (response?.status === LOGIN_EXPIRED_CODE) { + // vscode 插件环境弹出输入框提示登录 + if (window.vscodeBridge) { + return Promise.resolve(true) + } + + // 浏览器环境弹出小窗登录 + if (response?.headers['x-login-url']) { + return openLogin() + } + } + + showError(error.config?.url, error?.message) + + return response?.data.error ? Promise.reject(response.data.error) : Promise.reject(error.message) + } + + // 响应拦截器 + http.interceptors.response.use(preResponse, errorResponse) + + return http +} + +/** + * 根据环境不同初始化设置http参数 + * @param {*} env: 当前环境变量 + */ +export const initHttp = ({ env }) => { + if (Object.keys(env).length) { + environment = env + } + const baseURL = environment.VITE_ORIGIN + // 调用初始化方法前可能已经存在已经实例化的http,需要设置baseURL + http?.defaults('baseURL', baseURL) + globalDefaults('baseURL', baseURL) + http = createHttp({ force: true, enableMock: isMock() }) +} + +export const useHttp = () => createHttp({ enableMock: isMock() }) diff --git a/packages/http/src/mock.js b/packages/http/src/mock.js new file mode 100644 index 000000000..9b33d94d7 --- /dev/null +++ b/packages/http/src/mock.js @@ -0,0 +1,939 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +const arrData = [] +const blockList = [] +let tempObj = null +let blockCount = 0 +let blockProgress = 0 + +export default [ + // 获取app的详细信息 + { + url: /\/app-center\/api\/apps\/detail/, + response: async () => { + const getAppInfo = async () => { + const response = await fetch('/mock/appInfo.json') + return response.json() + } + + const appInfoRes = await getAppInfo() + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, appInfoRes]) + }, 1000) + }) + } + }, + { + url: /api\/apps\/i18n\/entries/, + response: async () => { + const getAppInfo = async () => { + const response = await fetch('/mock/i18n.json') + return response.json() + } + + const appInfoRes = await getAppInfo() + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, appInfoRes]) + }, 1000) + }) + } + }, + // 获取应用列表信息 + { + url: /\/app-center\/api\/apps\/list/, + response: async () => { + const getAppList = async () => { + const response = await fetch('/mock/appList.json') + return response.json() + } + + const appListRes = await getAppList() + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, appListRes]) + }, 1000) + }) + } + }, + // 页面管理 - 获取页面详情 + { + url: /\/app-center\/api\/pages\/detail/, + response: async (config) => { + const url = config.url + const pageId = url.substr(url.lastIndexOf('/') + 1) + + // 根据pageId加载不同的页面详情 + const pageDetail = async (pageId) => { + const response = await fetch(`/mock/pageDetail/${pageId}.json`) + return response.json() + } + + const pageInfo = await pageDetail(pageId) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, pageInfo]) + }, 1000) + }) + } + }, + // 页面管理 - 获取页面列表 + { + url: /\/app-center\/api\/pages\/list\/\d+/, + response: async () => { + const getPageList = async () => { + const response = await fetch('/mock/pageLists.json') + return response.json() + } + + const pageListRes = await getPageList() + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, pageListRes]) + }, 1000) + }) + } + }, + // 页面管理 - 获取文件夹列表列表 + { + url: /\/app-center\/api\/folders\/list/, + response: async () => { + const getPageList = async () => { + const response = await fetch('/mock/pageFolder.json') + return response.json() + } + + const pageListRes = await getPageList() + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, pageListRes]) + }, 1000) + }) + } + }, + // 页面管理 -- 新建页面 + { + url: /\/app-center\/api\/pages\/create/, + response: async (config) => { + const createPage = async () => { + const response = await fetch('/mock/createPage.json') + return response.json() + } + + const createPageRes = await createPage() + const data = JSON.parse(config.data) + const pageId = data.app + + if (pageId % 2) { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, createPageRes]) + }, 500) + }) + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '服务出错' } }]) + }, 500) + }) + } + }, + // 页面管理 -- 保存页面,同时创建页面备份记录 + { + url: /\/app-center\/api\/pages\/update/, + response: async (config) => { + const savePage = async () => { + const response = await fetch('/mock/savePage.json') + return response.json() + } + + const savePageRes = await savePage() + + const url = config.url + const pageId = url.substr(url.lastIndexOf('/') + 1) + + if (pageId === '1') { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, savePageRes]) + }, 1000) + }) + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '服务出错' } }]) + }, 500) + }) + } + }, + // 页面管理 -- 复制页面 + /** + * params + * { + * name:'', + * route:'', + * parent:'', + * groupId:'' + * } + * res + * { + * pages:[{},{}], + * pageInfo:{} + * } + **/ + { + url: /\/app-center\/api\/pages\/copy/, + response: async (config) => { + const newPage = JSON.parse(config.data) + + const pageList = async () => { + const response = await fetch('/mock/pageList.json') + + return response.json() + } + + const list = await pageList(newPage) + list.data[0].data.push(newPage) + + const res = { + data: { + pages: list, + newPage: newPage + } + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, res]) + }, 1000) + }) + } + }, + // 根据页面ID获取页面历史备份列表 + { + url: /\/app-center\/api\/pageHistory\/list/, + response: async (config) => { + /** + * 数据格式 + * [ + * { + * "id": 1, + * "pageId": 1, // 页面ID,根据id获取页面详情 + * "message": "修改文本内容", + * "time": "2022-02-06 18:00:00" + * } + * ] + */ + const pageId = config.url.substr(config.url.lastIndexOf('/') + 1) + + const pageHistory = async (pageId) => { + const response = await fetch(`/mock/pageHistory/${pageId}.json`) + return response.json() + } + + const historyData = await pageHistory(pageId) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, historyData]) + }, 1000) + }) + } + }, + // 删除页面备份记录 + { + url: /\/app-center\/api\/pageHistory\/delete/, + response: async () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200]) + }, 1000) + }) + } + }, + // 根据页面备份记录还原页面信息 + { + url: /\/app-center\/api\/pageHistory\/restore/, + response: async () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200]) + }, 1000) + }) + } + }, + // 创建区块分组信息 + { + url: /\/material-center\/api\/block-groups\/create/, + response: (config) => { + const data = JSON.parse(config.data) + const name = data.name + + const id = blockList.length + 1 + const group = { + id, + name, + blocks: [] + } + + blockList.push(group) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: group }]) + }, 500) + }) + } + }, + // 更新分组:修改分组名字/向分组里添加、删除区块 + { + url: /\/material-center\/api\/block-groups\/update/, + response: async (config) => { + const url = config.url + const groupId = url.substr(url.lastIndexOf('/') + 1) + const { name, blocks } = JSON.parse(config.data) + const getAvailable = async (groupId) => { + const response = await fetch(`/mock/block/available/${(groupId % 2) + 1}.json`) + return response.json() + } + + const avaliableBlocks = await getAvailable(groupId) + let result = [] + + for (let i = 0; i < blockList.length; i++) { + if (String(blockList[i].id) === groupId) { + if (name) blockList[i].name = name + if (blocks) { + blockList[i].blocks = [] + avaliableBlocks.forEach((item) => { + if (blocks.indexOf(item.id) > -1) { + blockList[i].blocks.push(item) + } + }) + } + result = blockList[i] + + break + } + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: result }]) + }, 500) + }) + } + }, + // 根据区块分组ID删除区块分组信息 + { + url: /\/material-center\/api\/block-groups\/delete/, + response: async (config) => { + const url = config.url + const groupId = url.substr(url.lastIndexOf('/') + 1) + + const group = blockList.splice( + blockList.findIndex((item) => item.id === groupId), + 1 + ) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: group }]) + }, 500) + }) + } + }, + // 获取区块分组列表 + { + url: /\/material-center\/api\/block-groups/, + response() { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: blockList }]) + }, 500) + }) + } + }, + // 创建区块 + { + url: /\/material-center\/api\/block\/create/, + response: async (config) => { + const data = JSON.parse(config.data) + + // 创建需往数据库里插入信息 + data.id = String(++blockCount) + arrData.push(data) + + const blockId = data.id + if (blockId % 2) { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data }]) + }, 2000) // 耗时较长 + }) + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '新建区块失败' } }]) + }, 500) + }) + } + }, + // 发布区块 + { + url: /\/material-center\/api\/block\/deploy/, + /* + 请求参数: + { + block, + deploy_info: "修改button信息" + } + */ + response: async (config) => { + const data = JSON.parse(config.data) + const blockId = data.block?.id + if (blockId % 2) { + const deploy = async () => { + const response = await fetch(`/mock/block/deploy.json`) + return response.json() + } + const deployData = await deploy() + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: deployData.data }]) + }, 500) + }) + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '发布区块失败' } }]) + }, 500) + }) + } + }, + // 获取发布区块的进度信息 + { + url: /\/material-center\/api\/tasks/, + response: async (config) => { + const url = config.url + const taskId = url.substr(url.lastIndexOf('/') + 1) + const deployProgress = async () => { + const response = await fetch(`/mock/block/deployProgress.json`) + return response.json() + } + const deployProgressRes = await deployProgress() + + // 区块Id不相等直接返回 + if (Number(taskId) !== deployProgressRes.data.id) { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '查询区块进度失败' } }]) + }, 500) + }) + } + + const FINISHED_PROGRESS = 100 + const INTERVAL_PROGRESS = 20 + + // 判断发布状态 + const deployStatus = deployProgressRes.data.taskStatus + + // 如果构建状态为运行中:1, 返回构建进度条 + if (deployStatus === 1) { + // 模拟后台进度更新, 每次查询进度更新增加20% + deployProgressRes.data.progress_percent = blockProgress + blockProgress += INTERVAL_PROGRESS + + if (blockProgress >= FINISHED_PROGRESS) { + deployProgressRes.data.progress_percent = FINISHED_PROGRESS + blockProgress = 0 + } + } + + // 其它状态直接返回结果 + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, deployProgressRes]) + }, 1000) + }) + } + }, + // 修改区块,同时创建区块备份记录/还原到某一历史备份 + { + url: /\/material-center\/api\/block\/update/, + response: async (config) => { + const url = config.url + const blockId = url.substr(url.lastIndexOf('/') + 1) + const { current_history } = JSON.parse(config.data) + + // 消费侧-还原到某一历史备份 + if (current_history) { + let block = null + + for (let i = 0; i < blockList.length; i++) { + const blocks = blockList[i].blocks + + for (let i = 0; i < blocks.length; i++) { + block = blocks[i] + + if (String(block.id) === blockId && block.current_history) { + block.current_history.id = current_history + + break + } + } + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: block }]) + }, 500) + }) + } + + // 只有奇数区块可以保存成功 + if (blockId % 2) { + const block = JSON.parse(config.data) + let blockData = null + + for (let i = 0; i < arrData.length; i++) { + if (Number(arrData[i].id) === Number(blockId)) { + blockData = arrData[i] + + Object.entries(block).forEach(([key, value]) => { + blockData[key] = value + }) + + break + } + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: blockData }]) + }, 1000) + }) + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '保存区块失败' } }]) + }, 500) + }) + } + }, + // 区块管理 -- 获取区块列表 + { + url: /\/material-center\/api\/block\/list/, + proxy: '/mock/block/blockList.json', + handleData({ data }) { + if (arrData.length === 0) { + arrData.push(...data) + blockCount = arrData.length + } + + return { data: arrData } + } + }, + // 区块管理 -- 删除区块 + { + url: /\/material-center\/api\/block\/delete/, + response(config) { + const url = config.url + const blockId = url.substr(url.lastIndexOf('/') + 1) + let data = [] + + // 只有 ID 为奇数的区块才能删除,否则抛出错误信息 + if (blockId % 2) { + arrData.some((item, index) => { + if (String(item.id) === blockId) { + data = item + arrData.splice(index, 1) + return true + } + return false + }) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data }]) + }, 500) // 耗时较短 + }) + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { error: { message: '删除区块失败' } }]) + }, 500) // 耗时较短 + }) + } + }, + // 根据区块ID获取区块历史备份列表 + { + url: /\/material-center\/api\/block-history/, + response: async (config) => { + const url = config.url + const query = url.substr(url.indexOf('?')) + const params = new URLSearchParams(query) + const block = params.get('block') + + if (!block) { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: [] }]) + }, 1000) + }) + } + + const historyList = async () => { + const response = await fetch(`/mock/block/history.json`) + return response.json() + } + + const blockInfo = await historyList(block) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: blockInfo }]) + }, 1000) + }) + } + }, + // 删除区块备份记录 + { + url: /\/app-center\/api\/blockHistory\/delete/, + response: async () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200]) + }, 1000) + }) + } + }, + // 根据区块备份记录还原区块信息 + { + url: /\/app-center\/api\/blockHistory\/restore/, + response: async () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200]) + }, 1000) + }) + } + }, + // 根据分组ID获取当前分组可以添加的区块 + { + url: /\/material-center\/api\/block\/notgroup/, + response: async (config) => { + const url = config.url + const groupId = + url.indexOf('?') > -1 + ? url.substring(url.lastIndexOf('/') + 1, url.indexOf('?')) + : url.substr(url.lastIndexOf('/') + 1) + const query = url.substr(url.indexOf('?')) + const params = new URLSearchParams(query) + const value = params.get('label_contains') + const author = params.getAll('author') + const tenant = params.getAll('tenant') + const tag = params.getAll('tag') + + if (!groupId) { + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: [] }]) + }, 500) + }) + } + + const getAvailable = async (groupId) => { + const response = await fetch(`/mock/block/available/${(groupId % 2) + 1}.json`) + return response.json() + } + + const blocks = await getAvailable(groupId) + + // 搜索结果 + const searchResult = value ? blocks.filter((item) => item.label.indexOf(value) > -1) : blocks + // 标签过滤结果 + const tagResult = + tag && tag.length ? searchResult.filter((item) => item.tags?.some((i) => tag.includes(i))) : searchResult + // 组织过滤结果 + const tenantResult = + tenant && tenant.length ? tagResult.filter((item) => tenant.includes(String(item.tenant?.id))) : tagResult + // 作者过滤结果 + const authorResult = + author && author.length ? tenantResult.filter((item) => author.includes(String(item.author?.id))) : tenantResult + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: authorResult }]) + }, 500) + }) + } + }, + // 获取区块所有标签 + { + url: /\/material-center\/api\/block\/tags/, + response: async () => { + const getAvailable = async () => { + const response = await fetch(`/mock/block/available/1.json`) + return response.json() + } + + const blocks = await getAvailable() + const tags = [] + + blocks && + blocks.forEach((block) => { + block.tags && tags.push(...block.tags) + }) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: Array.from(new Set(tags)) }]) + }, 500) + }) + } + }, + // 获取区块所有作者 + { + url: /\/material-center\/api\/block\/users/, + response: async () => { + const getAvailable = async () => { + const response = await fetch(`/mock/block/available/1.json`) + return response.json() + } + + const blocks = await getAvailable() + const users = [] + + blocks && + blocks.forEach((block) => { + users.push(block.author) + }) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: users }]) + }, 500) + }) + } + }, + // 获取区块所有组织 + { + url: /\/material-center\/api\/block\/tenants/, + response: async () => { + const getAvailable = async () => { + const response = await fetch(`/mock/block/available/1.json`) + return response.json() + } + + const blocks = await getAvailable() + const tenants = [] + + blocks && + blocks.forEach((block) => { + block.tenant && tenants.push(block.tenant) + }) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: tenants }]) + }, 500) + }) + } + }, + // 根据区块分组ID获取该分组下的区块列表 + { + url: /\/material-center\/api\/block/, + response(config) { + const url = config.url + const query = url.substr(url.indexOf('?')) + const params = new URLSearchParams(query) + const groupId = params.get('groups') + const value = params.get('label_contains') + let groupData = [] + + for (let i = 0; i < blockList.length; i++) { + if (String(blockList[i].id) === groupId) { + groupData = blockList[i].blocks + + break + } + } + + groupData = value ? groupData.filter((item) => item.label.indexOf(value) > -1) : groupData + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: groupData }]) + }, 500) + }) + } + }, + // 数据源管理 -- 获取数据源列表 + { + url: /api\/sources\/list/, + response: async () => { + const getDatasourceList = async () => { + const response = await fetch('/mock/datasource.json') + return response.json() + } + + let { data } = await getDatasourceList() + const index = data.findIndex((data) => data.id === tempObj?.id) + + if (index > -1) { + data[index] = tempObj + + if (tempObj.status === 'delete') { + data.splice(index, 1) + } + } else { + if (tempObj) { + tempObj.id = data.length + 1 + data = [...data, tempObj] + } + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: data }]) + }, 1000) + }) + } + }, + // 数据源管理 -- 新增数据源 + { + url: /\/app-center\/api\/sources\/create/, + response: async (config) => { + tempObj = JSON.parse(config.data) + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: tempObj }]) + }, 1000) + }) + } + }, + // 数据源管理 -- 删除数据源 + { + url: /\/app-center\/api\/sources\/delete/, + response: async (config) => { + const url = config.url + const dataSourceId = url.substr(url.lastIndexOf('/') + 1) + tempObj = { id: dataSourceId, status: 'delete' } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: tempObj }]) + }, 500) + }) + } + }, + // 数据源管理 -- 更新数据源 + { + url: /\/app-center\/api\/sources\/update/, + response: async (config) => { + const addres = config.url.split('/') + const id = Number(addres[addres.length - 1]) + + // 提交需要更新的内容 + tempObj = JSON.parse(config.data) + tempObj.id = id + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: tempObj }]) + }, 500) + }) + } + }, + // 数据源管理 -- 查询数据源详情 + { + url: /api\/sources\/detail/, + response: async (config) => { + const addres = config.url.split('/') + const id = addres[addres.length - 1] + + const getDataSourceDetail = async () => { + const response = await fetch('/mock/datasource.json') + return response.json() + } + + const { data } = await getDataSourceDetail() + let result = data.filter((item) => item.id === id)[0] + + if (tempObj && tempObj.id === id) { + result = tempObj + } + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, { data: result }]) + }, 500) + }) + } + }, + // 数据源管理 -- 获取数据源模板列表 + { + url: /\/app-center\/api\/source_tpl/, + response: async () => { + const getDataSourceTemplate = async () => { + const response = await fetch('/mock/dataSourceTemplate.json') + return response.json() + } + const templateData = await getDataSourceTemplate() + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, templateData]) + }, 500) + }) + } + }, + // 数据源管理 -- mock 用户输入的远程服务 + { + url: /\.*api.*\/mock/, + response: async () => { + const getDataSourceTemplate = async () => { + const response = await fetch('/mock/userService.json') + return response.json() + } + const templateData = await getDataSourceTemplate() + + return new Promise((resolve) => { + setTimeout(() => { + resolve([200, templateData]) + }, 500) + }) + } + }, + { + url: /ng-bundle\.json$/, + proxy: 'mock/ng-bundle.json' + }, + { + url: '*', + proxy: '*' + } +] diff --git a/packages/http/vite.config.js b/packages/http/vite.config.js new file mode 100644 index 000000000..6b29354da --- /dev/null +++ b/packages/http/vite.config.js @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + resolve: {}, + build: { + cssCodeSplit: false, + lib: { + entry: path.resolve(__dirname, './src/index.js'), + name: 'http', + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + output: { + banner: 'import "./style.css"' + }, + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + } + } +}) diff --git a/packages/i18n/README.md b/packages/i18n/README.md new file mode 100644 index 000000000..4f6b9df81 --- /dev/null +++ b/packages/i18n/README.md @@ -0,0 +1,2 @@ +# lowcode-webcomponent + diff --git a/packages/i18n/index.html b/packages/i18n/index.html new file mode 100644 index 000000000..7ea1dea2b --- /dev/null +++ b/packages/i18n/index.html @@ -0,0 +1,13 @@ + + + + + + Tiny Vue WebComponent + + + +

+ + + diff --git a/packages/i18n/package.json b/packages/i18n/package.json new file mode 100644 index 000000000..445cf8fe2 --- /dev/null +++ b/packages/i18n/package.json @@ -0,0 +1,50 @@ +{ + "name": "@opentiny/tiny-engine-i18n-host", + "version": "1.0.3", + "publishConfig": { + "access": "public" + }, + "description": "webcomponent vue i18n host", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext .js,.vue --fix", + "format": "prettier --write **/*{.vue,.js,.ts,.html,.json}", + "publish:npm": "npm run build && npm publish --verbose" + }, + "files": [ + "dist" + ], + "main": "dist/lowcode-design-i18n-host.umd.js", + "module": "dist/lowcode-design-i18n-host.es.js", + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/i18n" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@opentiny/tiny-engine-webcomponent-core": "workspace:*" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^2.2.0", + "babel-eslint": "^10.1.0", + "eslint": "^7.32.0", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.1.0", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^7.17.0", + "prettier": "^2.4.0", + "vite": "^2.9.1" + }, + "peerDependencies": { + "vue": "^3.4.15", + "vue-i18n": "^9.9.0" + } +} diff --git a/packages/i18n/src/App.vue b/packages/i18n/src/App.vue new file mode 100644 index 000000000..c79486385 --- /dev/null +++ b/packages/i18n/src/App.vue @@ -0,0 +1,44 @@ + + + diff --git a/packages/i18n/src/I18nHost.vue b/packages/i18n/src/I18nHost.vue new file mode 100644 index 000000000..7d1544e31 --- /dev/null +++ b/packages/i18n/src/I18nHost.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/i18n/src/i18n.js b/packages/i18n/src/i18n.js new file mode 100644 index 000000000..8c72e7e1e --- /dev/null +++ b/packages/i18n/src/i18n.js @@ -0,0 +1,28 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { createI18n } from 'vue-i18n' + +// 这里需要展开才能再下面进行合并操作,要不然会报错 +const i18n = { + ...createI18n({ + locale: 'zh_CN', + messages: {}, + legacy: false + }) +} + +export const defineCustomI18n = (customI18n) => { + Object.assign(i18n, customI18n) +} + +export default i18n diff --git a/packages/i18n/src/lib.js b/packages/i18n/src/lib.js new file mode 100644 index 000000000..347422558 --- /dev/null +++ b/packages/i18n/src/lib.js @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineCustomElement } from '@opentiny/tiny-engine-webcomponent-core' +import I18nHost from './I18nHost.vue' +import i18n, { defineCustomI18n } from './i18n' + +const name = 'tiny-i18n-host' + +if (!customElements.get(name)) { + customElements.define(name, defineCustomElement(I18nHost)) +} + +export { defineCustomI18n } + +export default i18n diff --git a/packages/i18n/src/main.js b/packages/i18n/src/main.js new file mode 100644 index 000000000..afcf8cdc0 --- /dev/null +++ b/packages/i18n/src/main.js @@ -0,0 +1,21 @@ +/** +* Copyright (c) 2023 - present TinyEngine Authors. +* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. +* +* Use of this source code is governed by an MIT-style license. +* +* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, +* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR +* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. +* +*/ + +import { createApp } from 'vue' +import App from './App.vue' +import i18n from './lib' + +i18n.global.mergeLocaleMessage('en_US', { hello: 'Hello!' }) +i18n.global.mergeLocaleMessage('zh_CN', { hello: '你好!' }) + +// use(i18n) 可以让 app 内的 vue 组件使用 useI18n +createApp(App).use(i18n).mount('#app') diff --git a/packages/i18n/src/test/TestVueInject.vue b/packages/i18n/src/test/TestVueInject.vue new file mode 100644 index 000000000..c07f8f79e --- /dev/null +++ b/packages/i18n/src/test/TestVueInject.vue @@ -0,0 +1,20 @@ + + + diff --git a/packages/i18n/src/test/TestVueUse.vue b/packages/i18n/src/test/TestVueUse.vue new file mode 100644 index 000000000..335467cde --- /dev/null +++ b/packages/i18n/src/test/TestVueUse.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/i18n/src/test/TestWebcomponent.vue b/packages/i18n/src/test/TestWebcomponent.vue new file mode 100644 index 000000000..e5575c958 --- /dev/null +++ b/packages/i18n/src/test/TestWebcomponent.vue @@ -0,0 +1,20 @@ + + + diff --git a/packages/i18n/vite.config.js b/packages/i18n/vite.config.js new file mode 100644 index 000000000..ad869631e --- /dev/null +++ b/packages/i18n/vite.config.js @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import vue from '@vitejs/plugin-vue' +import path from 'path' + +export default { + plugins: [ + vue({ + template: { + compilerOptions: { + // 将所有包含短横线的标签作为自定义元素处理 + isCustomElement: (tag) => tag.includes('-') + } + } + }) + ], + build: { + minify: false, + emptyOutDir: false, + lib: { + entry: path.resolve(__dirname, './src/lib.js'), + name: 'LowcodeDesignI18nHost', + formats: ['es', 'umd'], + fileName: (format) => `lowcode-design-i18n-host.${format}.js` + }, + commonjsOptions: { + transformMixedEsModules: true + }, + rollupOptions: { + // 确保外部化处理那些你不想打包进库的依赖 + external: ['vue', 'vue-i18n', '@opentiny/tiny-engine-webcomponent-core'], + output: { + // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量 + globals: { + vue: 'Vue', + 'vue-i18n': 'VueI18n', + '@opentiny/tiny-engine-webcomponent-core': 'LowcodeDesignWebcomponentCore' + } + } + } + } +} diff --git a/packages/live-component/components.json b/packages/live-component/components.json new file mode 100644 index 000000000..1b44af8aa --- /dev/null +++ b/packages/live-component/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "default", + "typescript": false, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "slate", + "cssVariables": false + }, + "framework": "vite", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/packages/live-component/jsconfig.json b/packages/live-component/jsconfig.json new file mode 100644 index 000000000..abe04df57 --- /dev/null +++ b/packages/live-component/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/packages/live-component/package.json b/packages/live-component/package.json new file mode 100644 index 000000000..ba70d95eb --- /dev/null +++ b/packages/live-component/package.json @@ -0,0 +1,40 @@ +{ + "name": "@opentiny/tiny-engine-live-component", + "version": "1.0.8", + "description": "", + "main": "dist/index.js", + "module": "dist/index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/live-component" + }, + "scripts": { + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vueuse/core": "^9.6.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "lucide-vue-next": "^0.367.0", + "radix-vue": "^1.7.0", + "tailwind-merge": "^2.2.2", + "tailwindcss-animate": "^1.0.7", + "vite-plugin-css-injected-by-js": "^3.3.1", + "vue-live-preview-only-fork": "^0.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "autoprefixer": "^10.4.19", + "tailwindcss": "^3.4.3", + "vite": "^4.5.0" + } +} diff --git a/packages/live-component/src/CanvasLive.vue b/packages/live-component/src/CanvasLive.vue new file mode 100644 index 000000000..e2fdf3515 --- /dev/null +++ b/packages/live-component/src/CanvasLive.vue @@ -0,0 +1,58 @@ + + + \ No newline at end of file diff --git a/packages/live-component/src/components/ui/accordion/Accordion.vue b/packages/live-component/src/components/ui/accordion/Accordion.vue new file mode 100644 index 000000000..062b92f55 --- /dev/null +++ b/packages/live-component/src/components/ui/accordion/Accordion.vue @@ -0,0 +1,24 @@ + + + diff --git a/packages/live-component/src/components/ui/accordion/AccordionContent.vue b/packages/live-component/src/components/ui/accordion/AccordionContent.vue new file mode 100644 index 000000000..291a19165 --- /dev/null +++ b/packages/live-component/src/components/ui/accordion/AccordionContent.vue @@ -0,0 +1,28 @@ + + + diff --git a/packages/live-component/src/components/ui/accordion/AccordionItem.vue b/packages/live-component/src/components/ui/accordion/AccordionItem.vue new file mode 100644 index 000000000..1147a4cdb --- /dev/null +++ b/packages/live-component/src/components/ui/accordion/AccordionItem.vue @@ -0,0 +1,27 @@ + + + diff --git a/packages/live-component/src/components/ui/accordion/AccordionTrigger.vue b/packages/live-component/src/components/ui/accordion/AccordionTrigger.vue new file mode 100644 index 000000000..4979135c8 --- /dev/null +++ b/packages/live-component/src/components/ui/accordion/AccordionTrigger.vue @@ -0,0 +1,37 @@ + + + diff --git a/packages/live-component/src/components/ui/accordion/index.js b/packages/live-component/src/components/ui/accordion/index.js new file mode 100644 index 000000000..92efaba3d --- /dev/null +++ b/packages/live-component/src/components/ui/accordion/index.js @@ -0,0 +1,4 @@ +export { default as Accordion } from "./Accordion.vue"; +export { default as AccordionContent } from "./AccordionContent.vue"; +export { default as AccordionItem } from "./AccordionItem.vue"; +export { default as AccordionTrigger } from "./AccordionTrigger.vue"; diff --git a/packages/live-component/src/components/ui/avatar/Avatar.vue b/packages/live-component/src/components/ui/avatar/Avatar.vue new file mode 100644 index 000000000..e8da910df --- /dev/null +++ b/packages/live-component/src/components/ui/avatar/Avatar.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/live-component/src/components/ui/avatar/AvatarFallback.vue b/packages/live-component/src/components/ui/avatar/AvatarFallback.vue new file mode 100644 index 000000000..a194420e1 --- /dev/null +++ b/packages/live-component/src/components/ui/avatar/AvatarFallback.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/live-component/src/components/ui/avatar/AvatarImage.vue b/packages/live-component/src/components/ui/avatar/AvatarImage.vue new file mode 100644 index 000000000..94e204061 --- /dev/null +++ b/packages/live-component/src/components/ui/avatar/AvatarImage.vue @@ -0,0 +1,13 @@ + + + diff --git a/packages/live-component/src/components/ui/avatar/index.js b/packages/live-component/src/components/ui/avatar/index.js new file mode 100644 index 000000000..f1277d94c --- /dev/null +++ b/packages/live-component/src/components/ui/avatar/index.js @@ -0,0 +1,22 @@ +import { cva } from "class-variance-authority"; + +export { default as Avatar } from "./Avatar.vue"; +export { default as AvatarImage } from "./AvatarImage.vue"; +export { default as AvatarFallback } from "./AvatarFallback.vue"; + +export const avatarVariant = cva( + "inline-flex items-center justify-center font-normal text-slate-950 select-none shrink-0 bg-slate-100 overflow-hidden dark:text-slate-50 dark:bg-slate-800", + { + variants: { + size: { + sm: "h-10 w-10 text-xs", + base: "h-16 w-16 text-2xl", + lg: "h-32 w-32 text-5xl", + }, + shape: { + circle: "rounded-full", + square: "rounded-md", + }, + }, + } +); diff --git a/packages/live-component/src/components/ui/badge/Badge.vue b/packages/live-component/src/components/ui/badge/Badge.vue new file mode 100644 index 000000000..6c6fabafe --- /dev/null +++ b/packages/live-component/src/components/ui/badge/Badge.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/live-component/src/components/ui/badge/index.js b/packages/live-component/src/components/ui/badge/index.js new file mode 100644 index 000000000..381d09b87 --- /dev/null +++ b/packages/live-component/src/components/ui/badge/index.js @@ -0,0 +1,23 @@ +import { cva } from "class-variance-authority"; + +export { default as Badge } from "./Badge.vue"; + +export const badgeVariants = cva( + "inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300", + { + variants: { + variant: { + default: + "border-transparent bg-slate-900 text-slate-50 hover:bg-slate-900/80 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/80", + secondary: + "border-transparent bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80", + destructive: + "border-transparent bg-red-500 text-slate-50 hover:bg-red-500/80 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/80", + outline: "text-slate-950 dark:text-slate-50", + }, + }, + defaultVariants: { + variant: "default", + }, + } +); diff --git a/packages/live-component/src/components/ui/button/Button.vue b/packages/live-component/src/components/ui/button/Button.vue new file mode 100644 index 000000000..a287e6ba8 --- /dev/null +++ b/packages/live-component/src/components/ui/button/Button.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/live-component/src/components/ui/button/index.js b/packages/live-component/src/components/ui/button/index.js new file mode 100644 index 000000000..feff389f1 --- /dev/null +++ b/packages/live-component/src/components/ui/button/index.js @@ -0,0 +1,34 @@ +import { cva } from "class-variance-authority"; + +export { default as Button } from "./Button.vue"; + +export const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300", + { + variants: { + variant: { + default: + "bg-slate-900 text-slate-50 hover:bg-slate-900/90 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/90", + destructive: + "bg-red-500 text-slate-50 hover:bg-red-500/90 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/90", + outline: + "border border-slate-200 bg-white hover:bg-slate-100 hover:text-slate-900 dark:border-slate-800 dark:bg-slate-950 dark:hover:bg-slate-800 dark:hover:text-slate-50", + secondary: + "bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80", + ghost: + "hover:bg-slate-100 hover:text-slate-900 dark:hover:bg-slate-800 dark:hover:text-slate-50", + link: "text-slate-900 underline-offset-4 hover:underline dark:text-slate-50", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +); diff --git a/packages/live-component/src/components/ui/input/Input.vue b/packages/live-component/src/components/ui/input/Input.vue new file mode 100644 index 000000000..0eb5a620d --- /dev/null +++ b/packages/live-component/src/components/ui/input/Input.vue @@ -0,0 +1,29 @@ + + + diff --git a/packages/live-component/src/components/ui/input/index.js b/packages/live-component/src/components/ui/input/index.js new file mode 100644 index 000000000..110f0460e --- /dev/null +++ b/packages/live-component/src/components/ui/input/index.js @@ -0,0 +1 @@ +export { default as Input } from "./Input.vue"; diff --git a/packages/live-component/src/components/ui/scroll-area/ScrollArea.vue b/packages/live-component/src/components/ui/scroll-area/ScrollArea.vue new file mode 100644 index 000000000..f65297b24 --- /dev/null +++ b/packages/live-component/src/components/ui/scroll-area/ScrollArea.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/live-component/src/components/ui/scroll-area/ScrollBar.vue b/packages/live-component/src/components/ui/scroll-area/ScrollBar.vue new file mode 100644 index 000000000..dfd552eba --- /dev/null +++ b/packages/live-component/src/components/ui/scroll-area/ScrollBar.vue @@ -0,0 +1,35 @@ + + + diff --git a/packages/live-component/src/components/ui/scroll-area/index.js b/packages/live-component/src/components/ui/scroll-area/index.js new file mode 100644 index 000000000..cd655e029 --- /dev/null +++ b/packages/live-component/src/components/ui/scroll-area/index.js @@ -0,0 +1,2 @@ +export { default as ScrollArea } from "./ScrollArea.vue"; +export { default as ScrollBar } from "./ScrollBar.vue"; diff --git a/packages/live-component/src/components/ui/select/Select.vue b/packages/live-component/src/components/ui/select/Select.vue new file mode 100644 index 000000000..9988dcea3 --- /dev/null +++ b/packages/live-component/src/components/ui/select/Select.vue @@ -0,0 +1,25 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectContent.vue b/packages/live-component/src/components/ui/select/SelectContent.vue new file mode 100644 index 000000000..17dc45a11 --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectContent.vue @@ -0,0 +1,68 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectGroup.vue b/packages/live-component/src/components/ui/select/SelectGroup.vue new file mode 100644 index 000000000..285c3812e --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectGroup.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectItem.vue b/packages/live-component/src/components/ui/select/SelectItem.vue new file mode 100644 index 000000000..486152b29 --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectItem.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectItemText.vue b/packages/live-component/src/components/ui/select/SelectItemText.vue new file mode 100644 index 000000000..96c1a484a --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectItemText.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectLabel.vue b/packages/live-component/src/components/ui/select/SelectLabel.vue new file mode 100644 index 000000000..a2e45d645 --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectLabel.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectScrollDownButton.vue b/packages/live-component/src/components/ui/select/SelectScrollDownButton.vue new file mode 100644 index 000000000..b280f2c2a --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectScrollDownButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectScrollUpButton.vue b/packages/live-component/src/components/ui/select/SelectScrollUpButton.vue new file mode 100644 index 000000000..277968061 --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectScrollUpButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectSeparator.vue b/packages/live-component/src/components/ui/select/SelectSeparator.vue new file mode 100644 index 000000000..464dc42c2 --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectTrigger.vue b/packages/live-component/src/components/ui/select/SelectTrigger.vue new file mode 100644 index 000000000..cb2e5284a --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectTrigger.vue @@ -0,0 +1,38 @@ + + + diff --git a/packages/live-component/src/components/ui/select/SelectValue.vue b/packages/live-component/src/components/ui/select/SelectValue.vue new file mode 100644 index 000000000..351cb36ca --- /dev/null +++ b/packages/live-component/src/components/ui/select/SelectValue.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/live-component/src/components/ui/select/index.js b/packages/live-component/src/components/ui/select/index.js new file mode 100644 index 000000000..f7de67263 --- /dev/null +++ b/packages/live-component/src/components/ui/select/index.js @@ -0,0 +1,11 @@ +export { default as Select } from "./Select.vue"; +export { default as SelectValue } from "./SelectValue.vue"; +export { default as SelectTrigger } from "./SelectTrigger.vue"; +export { default as SelectContent } from "./SelectContent.vue"; +export { default as SelectGroup } from "./SelectGroup.vue"; +export { default as SelectItem } from "./SelectItem.vue"; +export { default as SelectItemText } from "./SelectItemText.vue"; +export { default as SelectLabel } from "./SelectLabel.vue"; +export { default as SelectSeparator } from "./SelectSeparator.vue"; +export { default as SelectScrollUpButton } from "./SelectScrollUpButton.vue"; +export { default as SelectScrollDownButton } from "./SelectScrollDownButton.vue"; diff --git a/packages/live-component/src/index.css b/packages/live-component/src/index.css new file mode 100644 index 000000000..b5c61c956 --- /dev/null +++ b/packages/live-component/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/packages/live-component/src/index.js b/packages/live-component/src/index.js new file mode 100644 index 000000000..354491852 --- /dev/null +++ b/packages/live-component/src/index.js @@ -0,0 +1,4 @@ +import CanvasLive from "./CanvasLive.vue"; +import './index.css' + +export { CanvasLive } \ No newline at end of file diff --git a/packages/live-component/src/lib/utils.js b/packages/live-component/src/lib/utils.js new file mode 100644 index 000000000..378ccef43 --- /dev/null +++ b/packages/live-component/src/lib/utils.js @@ -0,0 +1,6 @@ +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs) { + return twMerge(clsx(inputs)); +} diff --git a/packages/live-component/tailwind.config.js b/packages/live-component/tailwind.config.js new file mode 100644 index 000000000..f580a5c74 --- /dev/null +++ b/packages/live-component/tailwind.config.js @@ -0,0 +1,39 @@ +const animate = require("tailwindcss-animate") + +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + './pages/**/*.{js,jsx,vue}', + './components/**/*.{js,jsx,vue}', + './app/**/*.{js,jsx,vue}', + './src/**/*.{js,jsx,vue}', + ], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [animate], +} \ No newline at end of file diff --git a/packages/live-component/vite.config.js b/packages/live-component/vite.config.js new file mode 100644 index 000000000..4ca9d40bc --- /dev/null +++ b/packages/live-component/vite.config.js @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import vitePluginCssInjectedByJs from 'vite-plugin-css-injected-by-js' + +import tailwind from "tailwindcss" +import autoprefixer from "autoprefixer" + +export default defineConfig({ + css: { + postcss: { + plugins: [tailwind(), autoprefixer()], + }, + }, + plugins: [vue(), vueJsx(), vitePluginCssInjectedByJs()], + publicDir: false, + build: { + cssCodeSplit: false, + lib: { + entry: path.resolve(__dirname, './src/index.js'), + name: 'builtinComponent', + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + external: ['vue'] + } + } +}) diff --git a/packages/plugins/ai/README.md b/packages/plugins/ai/README.md new file mode 100644 index 000000000..4ea56147b --- /dev/null +++ b/packages/plugins/ai/README.md @@ -0,0 +1,97 @@ +# engine-ai-plugins 设计文档 + +## 目标 + +TinyEngine 作为一个低代码引擎,内置了一套更加结构化、精简的 schema 用于描述 UI 应用逻辑。相比原生代码,LLM AI 在理解、生成 schema 时会更加高效、准确,因此 engine-ai-plugins 将通过开发一组 TinyEngine 插件探索 LLM AI 和低代码引擎结合的最佳实践。 + +目前实现中包含以下两个 AI 插件: + +- page creator,根据文字和图片输入的提示词,生成稳定、丰富的 TinyEngine 页面,且产出物为 TinyEngine JSON schema。(在仓库中已有的 robot plugin 实现中,看起来是让 LLM AI 输出标准的 Vue2 代码,再通过 `/app-center/api/ai/chat` API 获取的返回结果中就有了 schema,可能是该 API 中包含 Vue -> schema 的实现,但暂未看到对应代码开源)。 +- component editor,通过松散的文字输入与结构化的表单 UI **混合编辑**每个组件的属性,实现效率的最大化,可以看作是对当前组件属性编辑器的一个扩展。 + +## 设计思路概览 + +### page creator 页面模式:基于 prompt engineering 优化 schema 生成结果 + +在 TinyEngine 中已有不少注册的组件,且其架构支持持续实现、注册新的组件,如果让 LLM AI 知道这些组件的存在、理解这些组件的用法、收到需求时正确组合这些组件完成需求,就是 page creator 的实验方向。 + +由于 TinyEngine 组件对于 LLM AI 来说不是热知识,所以通常有 prompt engineering 和 fine-tuning 两个方案向 LLM AI 注入知识,在我们过往的经验中,prompt engineering 在这类场景下已经足够好。 + +TinyEngine 中通过一个 bundle.json 维护了注册的组件和示例代码,经过对比测试,我们发现仅仅将示例代码放入 prompt 中,生成效果就不错,希望进一步提升 LLM AI 表现,可以维护更详细或多个 snippet 示例。 + +这个[脚本](../engine-ai-plugins/scripts//generate-prompt.js)完成了从 bundle.json 拼接 prompt 的工作,目前对质量比较高的组件进行了拼接。 + +除了组件使用知识之外,prompt 中还包含了 TinyEngine schema 的 Typescript interface,在对比测试中同样发现仅保留必要的结构、样式相关的字段,LLM AI 的注意力可以更加稳定集中在主要任务中,显著提升了 schema 生成的稳定性。 + +在插件 UX 设计中,由于 page creator 的定位是从零生成一个基础页面,供后续的迭代修改,所以输入部分支持文字描述和图片描述(以来 gpt4-vision 模型)。 + +page creator 专注页面结构和样式的实现,也代表了一种可行的低代码 AI 插件的设计思路:由于低代码引擎从 schema 到编辑器 GUI 都对视图、状态、逻辑做了清晰的划分,所以也可以开发多个各司其职的 AI 插件,有助于提升完成单项任务的稳定性且成本更可控,而不是追求一个 AI 插件完成所有的页面搭建工作。 + +### page creator 组件模式:动态创建复杂组件 + +页面模式的好处是生成的是可二次编辑的 TinyEngine 页面,其中每个元素对应一个 TinyEngine 组件。但如果我们希望生成一些逻辑内聚但复杂的逻辑,例如: + +- 一个计算器 UI +- 一个 K8s 日志查看器 UI + +它们会产生大量的 TinyEngine 组件。但这些组件大部分并不需要让用户二次编辑,因此只会带来使用上的不便和性能下降。page creator 组件模式就是为解决这一问题而实现的,组件模式下 page creator 插件会生成一个与需求对应的 Vue SFC 组件代码,目前为了适配 TinyEngine 中的一些预览加载的能力,我们约束 Vue SFC 只能使用部分预置的 UI 组件。 + +在此基础上,我们开发了一个 Live 组件,其功能是输入 Vue SFC 组件代码,进行渲染。与 LLM AI 生成的 Vue SFC 组件代码相配合,就可以动态向页面插入一个内聚的复杂组件。 + +### component editor:AI form 混合编辑 + +虽然同样借助 LLM AI 的能力,但 component editor 的实验方向和 page creator 非常不同。在 component editor 中,我们设计了一种 AI form 架构,可以最大程度结合自然语言松散输入效率高和结构化 UI 精确输入准确性高的优点,降低用户使用低代码引擎的技术门槛。 + +以 TinyEngine 中的 TinySelect 组件为例,它包含了 searchable、closable、placeholder 等一系列常规属性的配置能力,这些配置通过表单 UI 输入准确性高、操作便捷。但它还包含 options 这样的复杂数据结构,目前 TinyEngine 中预期使用代码编辑器进行配置,对于低代码引擎用户来说还是有一定门槛。即使设计了专用的 JSON 输入 UI,也有较高的学习成本和操作复杂度。这时结合对应属性的数据结构和用户提示词,让用户通过 `增加 10 个水果的选项` 这样的方式进行配置,就带来了很大的效率提升。 + +另一个使用低代码引擎的场景是静态页面,例如官网或 H5 活动页面,这类网站通常包含大量的文案编写工作,例如宣传语。AI form 同样可以将输入文案的场景和 LLM AI 结合,让 LLM AI 完成它最擅长的 text-gen 工作。 + +最后一类更为重要的使用场景是页面动态逻辑的编辑。尽管 TinyEngine 对常见的动态能力做了结构化的封装,但 state、methods、loop 等概念对于缺少专业代码知识的用户来说,仍然是复杂的抽象概念。component editor 也实现了基于提示词编辑这些动态逻辑参数的能力,例如输入 `点击创建一个 todo`,compnent editor 会从 LLM AI 中生成一组结果: + +- currentTodo state 和 todos state +- addTodo method +- onClick 事件回调配置 + +这些都是原本的用户自行学习配置较为复杂的内容。 + +AI form 在技术架构上,是对 LLM AI functional calling 能力的封装: + +- 通过对类型的封装,表单 UI 和 LLM AI 共享一套类型逻辑。 +- 通过状态机封装,实现对于不同状态数据的呈现和管理。 + +在这个[文件](../engine-ai-plugins/src/plugins/component-editor/edit-component-form.tsx)中可以看到当前几个已经封装为 AI form 的低代码组件的封装方式,基本只需要声明少量类型即可。 + +状态机逻辑可以参考这个[文件](../engine-ai-plugins/src/plugins/ai-form.tsx)中的 Machine 实现。 + +### 使用非 Vue 技术栈开发插件 + +由于 AI UI 生态中 React 更为活跃,所以为了验证使用 React 开发 TinyEngine 插件的可行性,当前仓库中的插件均基于 React 开发。遇到的问题是通过 useCanvas 等 Vue hook 获取状态时存在异常,暂未深入调查,代码中通过依赖注入的形式修复。 + +## Demo 视频 + +[视频链接](https://www.bilibili.com/video/BV1xH4y1p7ZG/) + +## 使用方式 + +当前仓库未发布至 NPM,可以通过 pnpm i $FOLDER 的方式本地安装测试。在当前仓库中,通过以下方式打包: + +```shell +cd engine-ai-plugins +yarn +yarn build:lib +``` + +在 TinyEngine 中,在 `packages/design-core/config/addons.js` 内加载插件: + +```js +import { useCanvas, useHistory } from '@opentiny/tiny-engine-controller' +import { getPlugins } from 'engine-ai-plugins' + +const { PageCreator, ComponentEditor } = getPlugins({ useCanvas, useHistory }) + +const addons = { + plugins: [PageCreator, ComponentEditor] +} +``` + +使用时,输入 OpenAI API key,按需配置代理。 diff --git a/packages/plugins/ai/components.json b/packages/plugins/ai/components.json new file mode 100644 index 000000000..1c6facd2f --- /dev/null +++ b/packages/plugins/ai/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/packages/plugins/ai/index.html b/packages/plugins/ai/index.html new file mode 100644 index 000000000..976f9f064 --- /dev/null +++ b/packages/plugins/ai/index.html @@ -0,0 +1,15 @@ + + + + + + + Playground + + + +
+ + + + \ No newline at end of file diff --git a/packages/plugins/ai/package.json b/packages/plugins/ai/package.json new file mode 100644 index 000000000..750bacaf7 --- /dev/null +++ b/packages/plugins/ai/package.json @@ -0,0 +1,62 @@ +{ + "name": "@opentiny/tiny-engine-plugin-ai", + "version": "1.0.3", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "build:lib": "BUILD_MODE=library vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist" + ], + "dependencies": { + "@radix-ui/react-aspect-ratio": "^1.0.3", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-radio-group": "^1.1.3", + "@radix-ui/react-scroll-area": "^1.0.5", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-switch": "^1.0.3", + "@xstate/react": "^4.1.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "lucide-react": "^0.363.0", + "mdast-util-from-markdown": "^2.0.0", + "openai": "^4.33.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^9.0.1", + "tailwind-merge": "^2.2.2", + "tailwindcss-animate": "^1.0.7", + "unist-util-visit-parents": "^6.0.1", + "xstate": "^5.9.1", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.4" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react": "^4.2.1", + "@vitejs/plugin-vue": "^5.0.4", + "autoprefixer": "^10.4.19", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.1", + "typescript": "^5.2.2", + "vite": "^5.2.0", + "vite-plugin-css-injected-by-js": "^3.5.0", + "vue": "^3.4.15" + }, + "peerDependencies": { + "vue": "^3.4.15" + } +} diff --git a/packages/plugins/ai/postcss.config.js b/packages/plugins/ai/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/packages/plugins/ai/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/plugins/ai/public/component-editor.svg b/packages/plugins/ai/public/component-editor.svg new file mode 100644 index 000000000..81a9f0dc4 --- /dev/null +++ b/packages/plugins/ai/public/component-editor.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/plugins/ai/public/page-creator.svg b/packages/plugins/ai/public/page-creator.svg new file mode 100644 index 000000000..c07afc2b8 --- /dev/null +++ b/packages/plugins/ai/public/page-creator.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/plugins/ai/scripts/bundle.json b/packages/plugins/ai/scripts/bundle.json new file mode 100644 index 000000000..217ebcb66 --- /dev/null +++ b/packages/plugins/ai/scripts/bundle.json @@ -0,0 +1,13415 @@ +{ + "data": { + "framework": "Vue", + "materials": { + "components": [ + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "输入框" + }, + "component": "ElInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElInput" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["type", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "modelValue" + } + }, + "description": { + "zh_CN": "绑定值" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "type" + } + }, + "description": { + "zh_CN": "类型" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "placeholder" + } + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "device": [] + }, + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "maxlength" + } + }, + "description": { + "zh_CN": "最大输入长度" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "number", + "widget": { + "component": "MetaNumberic", + "props": {} + }, + "device": [] + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "disabled" + } + }, + "description": { + "zh_CN": "是否禁用" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定值改变时触发" + }, + "description": { + "zh_CN": "双向绑定值改变时触发" + } + }, + "onBlur": { + "label": { + "zh_CN": "输入框失去焦点时触发" + }, + "description": { + "zh_CN": "输入框失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "头部内容" + }, + "description": { + "zh_CN": "输入框头部内容,只对非 type='textarea' 有效" + } + }, + "suffix": { + "label": { + "zh_CN": "尾部内容" + }, + "description": { + "zh_CN": "输入框尾部内容,只对非 type='textarea' 有效" + } + }, + "prepend": { + "label": { + "zh_CN": "前置内容" + }, + "description": { + "zh_CN": "输入框前置内容,只对非 type='textarea' 有效" + } + }, + "append": { + "label": { + "zh_CN": "后置内容" + }, + "description": { + "zh_CN": "输入框后置内容,只对非 type='textarea' 有效" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "按钮" + }, + "component": "ElButton", + "icon": "button", + "description": "常用的操作按钮", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElButton" + }, + "group": "基础组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["type", "size"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "type" + } + }, + "description": { + "zh_CN": "类型" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "plain" + } + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "text" + } + }, + "description": { + "zh_CN": "是否为文字按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "bg", + "label": { + "text": { + "zh_CN": "bg" + } + }, + "description": { + "zh_CN": "是否显示文字按钮背景颜色" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "link", + "label": { + "text": { + "zh_CN": "link" + } + }, + "description": { + "zh_CN": "是否为链接按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "round", + "label": { + "text": { + "zh_CN": "round" + } + }, + "description": { + "zh_CN": "是否为圆角按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "circle" + } + }, + "description": { + "zh_CN": "是否为圆形按钮" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "loading" + } + }, + "description": { + "zh_CN": "是否为加载中状态" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "disabled" + } + }, + "description": { + "zh_CN": "是否禁用" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": {}, + "slots": { + "default": { + "label": { + "zh_CN": "default" + }, + "description": { + "zh_CN": "自定义默认内容" + } + }, + "loading": { + "label": { + "zh_CN": "loading" + }, + "description": { + "zh_CN": "自定义加载中组件" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单" + }, + "component": "ElForm", + "icon": "form", + "description": "表单包含 输入框, 单选框, 下拉选择, 多选框 等用户输入的组件。 使用表单,您可以收集、验证和提交数据。", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElForm" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": ["ElFormItem"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "model", + "label": { + "text": { + "zh_CN": "model" + } + }, + "description": { + "zh_CN": "表单数据对象" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "object", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "rules" + } + }, + "description": { + "zh_CN": "表单验证规则" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "object", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "inline", + "label": { + "text": { + "zh_CN": "inline" + } + }, + "description": { + "zh_CN": "行内表单模式" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "label-position", + "label": { + "text": { + "zh_CN": "label-position" + } + }, + "description": { + "zh_CN": "表单域标签的位置, 当设置为 left 或 right 时,则也需要设置 label-width 属性" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "right", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "top", + "value": "top" + } + ] + } + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "label-width" + } + }, + "description": { + "zh_CN": "标签的长度,例如 '50px'。 作为 Form 直接子元素的 form-item 会继承该值。 可以使用 auto。" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "label-suffix", + "label": { + "text": { + "zh_CN": "label-suffix" + } + }, + "description": { + "zh_CN": "表单域标签的后缀" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "hide-required-asterisk", + "label": { + "text": { + "zh_CN": "hide-required-asterisk" + } + }, + "description": { + "zh_CN": "是否隐藏必填字段标签旁边的红色星号" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "require-asterisk-position", + "label": { + "text": { + "zh_CN": "星号的位置" + } + }, + "description": { + "zh_CN": "星号的位置" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "left", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "show-message", + "label": { + "text": { + "zh_CN": "show-message" + } + }, + "description": { + "zh_CN": "是否显示校验错误信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "inline-message", + "label": { + "text": { + "zh_CN": "inline-message" + } + }, + "description": { + "zh_CN": "是否以行内形式展示校验信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "status-icon", + "label": { + "text": { + "zh_CN": "status-icon" + } + }, + "description": { + "zh_CN": "是否在输入框中显示校验结果反馈图标" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "validate-on-rule-change", + "label": { + "text": { + "zh_CN": "validate-on-rule-change" + } + }, + "description": { + "zh_CN": "是否在 rules 属性改变后立即触发一次验证" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "用于控制该表单内组件的尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "disabled" + } + }, + "description": { + "zh_CN": "是否禁用该表单内的所有组件。 如果设置为 true, 它将覆盖内部组件的 disabled 属性" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + }, + { + "property": "scroll-to-error", + "label": { + "text": { + "zh_CN": "scroll-to-error" + } + }, + "description": { + "zh_CN": "当校验失败时,滚动到第一个错误表单项" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "device": [] + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onValidate": { + "label": { + "zh_CN": "任一表单项被校验后触发" + }, + "description": { + "zh_CN": "任一表单项被校验后触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": {} + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单子项" + }, + "component": "ElFormItem", + "icon": "formItem", + "description": "表单包含 输入框, 单选框, 下拉选择, 多选框 等用户输入的组件。 使用表单,您可以收集、验证和提交数据。", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElFormItem" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "prop", + "label": { + "text": { + "zh_CN": "prop" + } + }, + "description": { + "zh_CN": "model 的键名。 它可以是一个属性的值(如 a.b.0 或 [a', 'b', '0'])。 在定义了 validate、resetFields 的方法时,该属性是必填的" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "label" + } + }, + "description": { + "zh_CN": "标签文本" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "label-width" + } + }, + "description": { + "zh_CN": "标签宽度,例如 '50px'。 可以使用 auto" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "required" + } + }, + "description": { + "zh_CN": "是否为必填项,如不设置,则会根据校验规则确认" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "rules" + } + }, + "description": { + "zh_CN": "表单验证规则, 更多内容可以参考async-validator" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "object", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "error", + "label": { + "text": { + "zh_CN": "error" + } + }, + "description": { + "zh_CN": "表单域验证错误时的提示信息。设置该值会导致表单验证状态变为 error,并显示该错误信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "show-message", + "label": { + "text": { + "zh_CN": "show-message" + } + }, + "description": { + "zh_CN": "是否显示校验错误信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "inline-message", + "label": { + "text": { + "zh_CN": "inline-message" + } + }, + "description": { + "zh_CN": "是否在行内显示校验信息" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "用于控制该表单内组件的尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "for", + "label": { + "text": { + "zh_CN": "for" + } + }, + "description": { + "zh_CN": "和原生标签相同能力" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "validate-status", + "label": { + "text": { + "zh_CN": "validate-status" + } + }, + "description": { + "zh_CN": "formItem 校验的状态" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "error", + "value": "error" + }, + { + "label": "validating", + "value": "validating" + }, + { + "label": "success", + "value": "success" + } + ] + } + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "label" + }, + "description": { + "zh_CN": "标签位置显示的内容" + } + }, + "error": { + "label": { + "zh_CN": "error" + }, + "description": { + "zh_CN": "验证错误信息的显示内容" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单" + }, + "component": "ElTable", + "icon": "table", + "description": "用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElTable" + }, + "group": "数据展示", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": ["ElTableColumn"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "data" + } + }, + "description": { + "zh_CN": "显示的数据" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "array", + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "type", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "type" + } + }, + "description": { + "text": { + "zh_CN": "对应列的类型。 如果设置了selection则显示多选框; 如果设置了 index 则显示该行的索引(从 1 开始计算); 如果设置了 expand 则显示为一个可展开的按钮" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "selection", + "value": "selection" + }, + { + "label": "index", + "value": "index" + }, + { + "label": "expand", + "value": "expand" + } + ] + } + } + }, + { + "property": "index", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "index" + } + }, + "description": { + "text": { + "zh_CN": "如果设置了 type=index,可以通过传递 index 属性来自定义索引" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "label", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "label" + } + }, + "description": { + "text": { + "zh_CN": "显示的标题" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "column-key", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "column-key" + } + }, + "description": { + "text": { + "zh_CN": "column 的 key, column 的 key, 如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "prop", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "prop" + } + }, + "description": { + "text": { + "zh_CN": "字段名称 对应列内容的字段名, 也可以使用 property属性" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "width", + "type": "number", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "width" + } + }, + "description": { + "text": { + "zh_CN": "对应列的宽度" + } + }, + "widget": { + "component": "MetaNumberic", + "props": {} + } + }, + { + "property": "min-width", + "type": "number", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "min-width" + } + }, + "description": { + "text": { + "zh_CN": "对应列的最小宽度, 对应列的最小宽度, 与 width 的区别是 width 是固定的,min-width 会把剩余宽度按比例分配给设置了 min-width 的列" + } + }, + "widget": { + "component": "MetaNumberic", + "props": {} + } + }, + { + "property": "fixed", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "fixed" + } + }, + "description": { + "text": { + "zh_CN": "列是否固定在左侧或者右侧。 true 表示固定在左侧" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "sortable", + "type": "boolean", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sortable" + } + }, + "description": { + "text": { + "zh_CN": "对应列是否可以排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "sort-method", + "type": "function", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sort-method" + } + }, + "description": { + "text": { + "zh_CN": "指定数据按照哪个属性进行排序,仅当sortable设置为true的时候有效。 应该如同 Array.sort 那样返回一个 Number" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "sort-by", + "type": "array", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sort-by" + } + }, + "description": { + "text": { + "zh_CN": "指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 且没有设置 sort-method 的时候有效。 如果 sort-by 为数组,则先按照第 1 个属性排序,如果第 1 个相等,再按照第 2 个排序,以此类推" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "sort-orders", + "type": "array", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "sort-orders" + } + }, + "description": { + "text": { + "zh_CN": "数据在排序时所使用排序策略的轮转顺序,仅当 sortable 为 true 时有效。 需传入一个数组,随着用户点击表头,该列依次按照数组中元素的顺序进行排序" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "resizable", + "type": "boolean", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "resizable" + } + }, + "description": { + "text": { + "zh_CN": "对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真)" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "formatter", + "type": "function", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "formatter" + } + }, + "description": { + "text": { + "zh_CN": "用来格式化内容" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "show-overflow-tooltip", + "type": "boolean", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "show-overflow-tooltip" + } + }, + "description": { + "text": { + "zh_CN": "当内容过长被隐藏时显示 tooltip" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "align", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "align" + } + }, + "description": { + "text": { + "zh_CN": "对齐方式" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "center", + "value": "center" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "header-align", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "header-align" + } + }, + "description": { + "text": { + "zh_CN": "表头对齐方式, 若不设置该项,则使用表格的对齐方式" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "left", + "value": "left" + }, + { + "label": "center", + "value": "center" + }, + { + "label": "right", + "value": "right" + } + ] + } + } + }, + { + "property": "class-name", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "class-name" + } + }, + "description": { + "text": { + "zh_CN": "列的 className" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "label-class-name", + "type": "string", + "labelPosition": "top", + "defaultValue": "left", + "label": { + "text": { + "zh_CN": "label-class-name" + } + }, + "description": { + "text": { + "zh_CN": "当前列标题的自定义类名" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "selectable", + "type": "function", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "selectable" + } + }, + "description": { + "text": { + "zh_CN": "仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "reserve-selection", + "type": "boolean", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "reserve-selection" + } + }, + "description": { + "text": { + "zh_CN": "数据刷新后是否保留选项,仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "filters", + "type": "array", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filters" + } + }, + "description": { + "text": { + "zh_CN": "数据刷新后是否保留选项,仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + }, + { + "property": "filter-placement", + "type": "string", + "labelPosition": "top", + "label": { + "text": { + "zh_CN": "filter-placement" + } + }, + "description": { + "text": { + "zh_CN": "过滤弹出框的定位" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "filter-multiple", + "type": "string", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filter-multiple" + } + }, + "description": { + "text": { + "zh_CN": "数据过滤的选项是否多选" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "filter-method", + "type": "function", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filter-method" + } + }, + "description": { + "text": { + "zh_CN": "数据过滤使用的方法, 如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": {} + } + }, + { + "property": "filtered-value", + "type": "array", + "labelPosition": "top", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "filtered-value" + } + }, + "description": { + "text": { + "zh_CN": "选中的数据过滤项,如果需要自定义表头过滤的渲染方式,可能会需要此属性" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + } + } + ] + } + ], + "widget": { + "component": "MetaTableColumns", + "props": { + "type": "object", + "textField": "label", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "top" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "max-height" + } + }, + "description": { + "zh_CN": "Table 的最大高度。" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "number", + "widget": { + "component": "MetaNumberic", + "props": {} + }, + "device": [] + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "height" + } + }, + "description": { + "zh_CN": "Table 的高度, 默认为自动高度。 这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "stripe", + "label": { + "text": { + "zh_CN": "stripe" + } + }, + "description": { + "zh_CN": "是否为斑马纹 table" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "border" + } + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "size" + } + }, + "description": { + "zh_CN": "Table 的尺寸" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "defaultValue": "default", + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "default", + "value": "default" + }, + { + "label": "small", + "value": "small" + } + ] + } + } + }, + { + "property": "fit", + "label": { + "text": { + "zh_CN": "fit" + } + }, + "description": { + "zh_CN": "列的宽度是否自撑开" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "show-header", + "label": { + "text": { + "zh_CN": "show-header" + } + }, + "description": { + "zh_CN": "是否显示表头" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": true, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "highlight-current-row" + } + }, + "description": { + "zh_CN": "是否要高亮当前行" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "current-row-key", + "label": { + "text": { + "zh_CN": "current-row-key" + } + }, + "description": { + "zh_CN": "当前行的 key,只写属性" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "type": "string", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "row-class-name" + } + }, + "description": { + "zh_CN": "行的 className" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "row-key", + "label": { + "text": { + "zh_CN": "row-key" + } + }, + "description": { + "zh_CN": "行数据的 Key,用来优化 Table 的渲染; 在使用reserve-selection功能与显示树形数据时,该属性是必填的。 类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "device": [] + }, + { + "property": "empty-text", + "label": { + "text": { + "zh_CN": "empty-text" + } + }, + "description": { + "zh_CN": "空数据时显示的文本内容" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "widget": { + "component": "MetaInput", + "props": {} + }, + "device": [] + }, + { + "property": "table-layout", + "label": { + "text": { + "zh_CN": "table-layout" + } + }, + "description": { + "zh_CN": "设置表格单元、行和列的布局方式" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": "fixed", + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "fixed", + "value": "fixed" + }, + { + "label": "auto", + "value": "auto" + } + ] + } + }, + "device": [] + }, + { + "property": "scrollbar-always-on", + "label": { + "text": { + "zh_CN": "scrollbar-always-on" + } + }, + "description": { + "zh_CN": "总是显示滚动条" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "flexible", + "label": { + "text": { + "zh_CN": "flexible" + } + }, + "description": { + "zh_CN": "确保主轴的最小尺寸,以便不超过内容" + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "labelPosition": "top", + "defaultValue": false, + "type": "boolean", + "widget": { + "component": "MetaSwitch", + "props": {} + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "勾选数据行的 Checkbox 时触发" + }, + "description": { + "zh_CN": "当用户手动勾选数据行的 Checkbox 时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "selection", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项" + } + }, + { + "name": "row", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前行" + } + } + ], + "returns": {} + } + }, + "onSelectAll": { + "label": { + "zh_CN": "勾选全选时触发" + }, + "description": { + "zh_CN": "当用户手动勾选全选 Checkbox 时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "selection", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项" + } + } + ], + "returns": {} + } + }, + "onSelectionChange": { + "label": { + "zh_CN": "选择项发生变化时会触发" + }, + "description": { + "zh_CN": "当选择项发生变化时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "selection", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项" + } + } + ], + "returns": {} + } + }, + "onCellMouseEnter": { + "label": { + "zh_CN": "单元格 hover 时会触发" + }, + "description": { + "zh_CN": "当单元格 hover 进入时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "row", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前行" + } + }, + { + "name": "column", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前列" + } + }, + { + "name": "cell", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前单元格" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生事件 event" + } + } + ], + "returns": {} + } + }, + "onCellMouseLeave": { + "label": { + "zh_CN": "单元格 hover 退出时会触发" + }, + "description": { + "zh_CN": "当单元格 hover 退出时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "row", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前行" + } + }, + { + "name": "column", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前列" + } + }, + { + "name": "cell", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前单元格" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生事件 event" + } + } + ], + "returns": {} + } + } + }, + "slots": { + "empty": { + "label": { + "zh_CN": "empty" + }, + "description": { + "zh_CN": "当数据为空时自定义的内容" + } + }, + "append": { + "label": { + "zh_CN": "append" + }, + "description": { + "zh_CN": "插入至表格最后一行之后的内容, 如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。 若表格有合计行,该 slot 会位于合计行之上。" + } + } + } + } + }, + { + "id": 1, + "version": "2.4.2", + "name": { + "zh_CN": "表单" + }, + "component": "ElTableColumn", + "icon": "table", + "description": "用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作", + "doc_url": "", + "screenshot": "", + "tags": "", + "keywords": "", + "dev_mode": "proCode", + "npm": { + "package": "element-plus", + "version": "2.4.2", + "script": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.full.mjs", + "css": "https://npm.onmicrosoft.cn/element-plus@2.4.2/dist/index.css", + "dependencies": null, + "exportName": "ElTableColumn" + }, + "group": "表单组件", + "category": "element-plus", + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "isPopper": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["inline", "label-width"] + }, + "contextMenu": { + "actions": ["copy", "remove", "insert", "updateAttr", "bindEevent", "createBlock"], + "disable": [] + }, + "invalidity": [""], + "clickCapture": true, + "framework": "Vue" + }, + "schema": { + "properties": [ + { + "name": "0", + "label": { + "zh_CN": "基础属性" + }, + "content": [], + "description": { + "zh_CN": "" + } + } + ], + "events": {}, + "slots": {} + } + }, + { + "name": { + "zh_CN": "走马灯子项" + }, + "component": "TinyCarouselItem", + "icon": "carouselitem", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CarouselItem", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "幻灯片的名字,可用作 setActiveItem 的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "幻灯片的标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "outside", + "value": "outside" + }, + { + "label": "none", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "走马灯" + }, + "component": "TinyCarousel", + "icon": "carousel", + "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Carousel", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "容器组件", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "arrow", + "label": { + "text": { + "zh_CN": "切换箭头的显示时机" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "总是显示", + "value": "always" + }, + { + "label": "鼠标悬停时显示", + "value": "hover" + }, + { + "label": "从不显示", + "value": "never" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否自动切换" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "走马灯的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "indicator-position", + "label": { + "text": { + "zh_CN": "指示器的位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "走马灯外部", + "value": "outside" + }, + { + "label": "不显示", + "value": "none" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "initial-index", + "label": { + "text": { + "zh_CN": "初始状态激活的幻灯片的索引,从 0 开始 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "interval", + "label": { + "text": { + "zh_CN": "自动切换的时间间隔,单位为毫秒" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "loop", + "label": { + "text": { + "zh_CN": "是否循环显示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "show-title", + "label": { + "text": { + "zh_CN": "是否显示标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "指示器的触发方式,默认为 hover" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "点击", + "value": "click" + }, + { + "label": "悬停", + "value": "hover" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "走马灯的类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "options": [ + { + "label": "水平", + "value": "horizontal" + }, + { + "label": "垂直", + "value": "vertical" + }, + { + "label": "卡片", + "value": "card" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyCarouselItem"], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "link", + "name": { + "zh_CN": "提示框" + }, + "component": "a", + "description": "链接", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "group": "component", + "priority": 7, + "npm": {}, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "href", + "label": { + "text": { + "zh_CN": "跳转链接" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "链接" + } + }, + { + "property": "target", + "label": { + "text": { + "zh_CN": "页面目标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "当前页面", + "value": "_self" + }, + { + "label": "打开新页面", + "value": "_blank" + } + ] + } + }, + "description": { + "zh_CN": "链接" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ] + }, + "configure": { + "loop": true, + "condition": true, + "slots": [], + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "name": { + "zh_CN": "标题" + }, + "component": ["h1", "h2", "h3", "h4", "h5", "h6"], + "icon": "h16", + "description": "标题", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 20, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": { + "showRadioButton": true + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "段落" + }, + "component": "p", + "icon": "paragraph", + "description": "段落", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 30, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "children", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlText", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "input", + "icon": "input", + "description": "输入框", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 40, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "checkbox", + "value": "checkbox" + }, + { + "label": "color", + "value": "color" + }, + { + "label": "date", + "value": "date" + }, + { + "label": "button", + "value": "button" + }, + { + "label": "email", + "value": "email" + }, + { + "label": "file", + "value": "file" + }, + { + "label": "hidden", + "value": "hidden" + }, + { + "label": "image", + "value": "image" + }, + { + "label": "month", + "value": "month" + }, + { + "label": "number", + "value": "number" + }, + { + "label": "password", + "value": "password" + }, + { + "label": "radio", + "value": "radio" + }, + { + "label": "range", + "value": "range" + }, + { + "label": "reset", + "value": "reset" + }, + { + "label": "search", + "value": "search" + }, + { + "label": "submit", + "value": "submit" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "time", + "value": "time" + }, + { + "label": "week", + "value": "week" + }, + { + "label": "url", + "value": "url" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onChange": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "component": "video", + "icon": "video", + "description": "视频", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 50, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "label": { + "text": { + "zh_CN": "视频的 URL" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "视频播放器的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "height", + "label": { + "text": { + "zh_CN": "视频播放器的高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否显示控件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "autoplay", + "label": { + "text": { + "zh_CN": "是否马上播放" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": [] + }, + "contextMenu": { + "actions": [], + "disable": [] + } + } + }, + { + "icon": "Image", + "name": { + "zh_CN": "Img" + }, + "component": "Img", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 60, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "src", + "type": "string", + "defaultValue": "", + "bindState": true, + "label": { + "text": { + "zh_CN": "src路径" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": ["src"] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "button", + "name": { + "zh_CN": "Button" + }, + "component": "button", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 70, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "table", + "name": { + "zh_CN": "表格" + }, + "component": "table", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 80, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "表格的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "表格边框的宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "td", + "name": { + "zh_CN": "表格单元格" + }, + "component": "td", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 90, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "colspan", + "label": { + "text": { + "zh_CN": "单元格可横跨的列数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "rowspan", + "label": { + "text": { + "zh_CN": "单元格可横跨的行数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "attributes3", + "label": { + "text": { + "zh_CN": "原生属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaHtmlAttributes", + "props": {} + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "none" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "form", + "name": { + "zh_CN": "表单" + }, + "component": "form", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 100, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "表单的名称" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "action", + "label": { + "text": { + "zh_CN": "提交表单时向何处发送表单数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "method", + "label": { + "text": { + "zh_CN": "用于发送 form-data 的 HTTP 方法" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "get", + "value": "get" + }, + { + "label": "post", + "value": "post" + } + ] + } + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击时触发" + }, + "description": { + "zh_CN": "点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "icon": "label", + "name": { + "zh_CN": "表单标签" + }, + "component": "label", + "container": false, + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": {}, + "group": "component", + "category": "html", + "priority": 110, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "for", + "label": { + "text": { + "zh_CN": "label 绑定到哪个表单元素" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "form", + "label": { + "text": { + "zh_CN": "label 字段所属的一个或多个表单" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "component": "TinyButtonGroup", + "icon": "buttonGroup", + "description": "以按钮组的方式出现,常用于多项类似操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "ButtonGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "category": "general", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "按钮组数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "组件大小" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "mini", + "value": "mini" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "medium", + "value": "medium" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "是否是朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "row", + "name": { + "zh_CN": "row" + }, + "component": "TinyRow", + "description": "定义 Layout 的行配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Row", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 5, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "layout", + "label": { + "text": { + "zh_CN": "layout" + } + }, + "cols": 12, + "widget": { + "component": "MetaLayoutGrid", + "props": {} + }, + "description": { + "zh_CN": "layout" + }, + "labelPosition": "none" + }, + { + "property": "align", + "label": { + "text": { + "zh_CN": "align" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "middle", + "value": "middle" + }, + { + "label": "bottom", + "value": "bottom" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "flex", + "label": { + "text": { + "zh_CN": "flex" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "gutter", + "label": { + "text": { + "zh_CN": "gutter" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ] + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "form", + "name": { + "zh_CN": "表单" + }, + "component": "TinyForm", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Form", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 5, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label-width", + "label": { + "text": { + "zh_CN": "标签宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签占位宽度,默认为 80px" + }, + "labelPosition": "left" + }, + { + "property": "inline", + "label": { + "text": { + "zh_CN": "行内布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "行内布局模式,默认为 false" + } + }, + { + "property": "label-align", + "label": { + "text": { + "zh_CN": "必填标识是否占位" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "必填标识 * 是否占位" + }, + "labelPosition": "left" + }, + { + "property": "label-suffix", + "label": { + "text": { + "zh_CN": "标签后缀" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单中标签后缀" + } + }, + { + "property": "label-position", + "label": { + "text": { + "zh_CN": "标签位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "right", + "value": "right" + }, + { + "label": "left ", + "value": "left " + }, + { + "label": "top", + "value": "top" + } + ] + } + }, + "description": { + "zh_CN": "表单中标签的布局位置" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "校验属性" + }, + "content": [ + { + "property": "model", + "label": { + "text": { + "zh_CN": "表单校验对象" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单数据对象" + }, + "labelPosition": "left" + }, + { + "property": "rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表单验证规则" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onValidate": { + "label": { + "zh_CN": "表单项被校验后触发" + }, + "description": { + "zh_CN": "表单项被校验后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "function", + "type": "Function", + "defaultValue": "(valid) => {}", + "description": { + "zh_CN": "校验回调函数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "formitem", + "name": { + "zh_CN": "表单项" + }, + "component": "TinyFormItem", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FormItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "label", + "label": { + "text": { + "zh_CN": "标签文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "标签", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标签文本" + }, + "labelPosition": "left" + }, + { + "property": "prop", + "label": { + "text": { + "zh_CN": "校验字段" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的" + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "必填" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否必填" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "字段名" + }, + "description": { + "zh_CN": "自定义显示字段名称" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyForm"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "col", + "name": { + "zh_CN": "col" + }, + "component": "TinyCol", + "description": "列配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Col", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "span", + "label": { + "text": { + "zh_CN": "栅格列格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整行", + "value": 12 + }, + { + "label": "6格", + "value": 6 + }, + { + "label": "4格", + "value": 4 + }, + { + "label": "3格", + "value": 3 + }, + { + "label": "1格", + "value": 1 + } + ] + } + }, + "description": { + "zh_CN": "当一行分为12格时,一列可占位多少格" + } + }, + { + "property": "move", + "label": { + "text": { + "zh_CN": "栅格左右移动格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": -12, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左右移动格数(正数向右,负数向左)" + } + }, + { + "property": "no", + "label": { + "text": { + "zh_CN": "排序编号" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "max": 12 + } + }, + "description": { + "zh_CN": "排序编号(row中启用order生效)" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "间隔格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 0, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左侧的间隔格数" + } + }, + { + "property": "xs", + "label": { + "text": { + "zh_CN": "超小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "<768px 响应式栅格数" + } + }, + { + "property": "sm", + "label": { + "text": { + "zh_CN": "小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥768px 响应式栅格数" + } + }, + { + "property": "md", + "label": { + "text": { + "zh_CN": "中屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥992px 响应式栅格数" + } + }, + { + "property": "lg", + "label": { + "text": { + "zh_CN": "大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1200px 响应式栅格数" + } + }, + { + "property": "xl", + "label": { + "text": { + "zh_CN": "超大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1920px 响应式栅格数" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "component": "TinyButton", + "icon": "button", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Button", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "type": "string", + "defaultValue": "按钮文案", + "label": { + "text": { + "zh_CN": "按钮文字" + } + }, + "cols": 12, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "type": "select", + "label": { + "text": { + "zh_CN": "大小" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "primary", + "value": "primary" + }, + { + "label": "success", + "value": "success" + }, + { + "label": "info", + "value": "info" + }, + { + "label": "warning", + "value": "warning" + }, + { + "label": "danger", + "value": "danger" + }, + { + "label": "text", + "value": "text" + } + ] + } + }, + "description": { + "zh_CN": "设置不同的主题样式" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "round", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆角按钮" + }, + "labelPosition": "left" + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "labelPosition": "left" + }, + { + "property": "reset-time", + "label": { + "text": { + "zh_CN": "禁用时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置禁用时间,防止重复提交,单位毫秒" + } + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆形按钮" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否默认聚焦" + }, + "labelPosition": "left" + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "加载中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否展示位加载中样式" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "TinyInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Input", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "textarea", + "value": "textarea" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "password", + "value": "password" + } + ] + } + }, + "description": { + "zh_CN": "设置input框的type属性" + } + }, + { + "property": "rows", + "label": { + "text": { + "zh_CN": "行数" + } + }, + "widget": { + "component": "MetaNumber" + }, + "description": { + "zh_CN": "输入框行数,只对 type='textarea' 有效" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "前置内容" + } + }, + "suffix": { + "label": { + "zh_CN": "后置内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "radio", + "name": { + "zh_CN": "单选" + }, + "component": "TinyRadio", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Radio", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "单选框的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "label": { + "zh_CN": "其他" + }, + "description": { + "zh_CN": "" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "显示边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "单选框的尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生 name 属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": "绑定值变化时触发的事件" + } + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "select", + "name": { + "zh_CN": "下拉框" + }, + "component": "TinySelect", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 8, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "searchable", + "label": { + "text": { + "zh_CN": "下拉面板可搜索" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "下拉面板是否可搜索" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "下拉数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "配置 Select 下拉数据项" + }, + "labelPosition": "left" + }, + { + "property": "multiple", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许输入框输入或选择多个项" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "multiple-limit", + "label": { + "text": { + "zh_CN": "最大可选值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "多选时用户最多可以选择的项目数,为 0 则不限制" + }, + "labelPosition": "left" + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "下拉框的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置下拉框自定义的类名" + }, + "labelPosition": "left" + }, + { + "property": "collapse-tags", + "label": { + "text": { + "zh_CN": "多选展示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "多选时是否将选中值按文字的形式展示" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在下拉框值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "下拉框选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onRemoveTag": { + "label": { + "zh_CN": "多选模式下移除tag时触发" + }, + "description": { + "zh_CN": "多选模式下移除tag时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "被移除Tag对应数据项的值字段" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "onBeforeMount": "console.log('table on load'); this.options = source.data" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["multiple", "options"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "switch", + "name": { + "zh_CN": "开关" + }, + "component": "TinySwitch", + "description": "Switch 在两种状态间切换选择", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Switch", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 9, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定默认值" + } + }, + { + "property": "true-value", + "label": { + "text": { + "zh_CN": "打开时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置打开时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "false-value", + "label": { + "text": { + "zh_CN": "关闭时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置关闭时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示为 mini 模式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "开关的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的开关状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "search", + "name": { + "zh_CN": "搜索框" + }, + "component": "TinySearch", + "description": "指定条件对象进行搜索数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Search", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "默认值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的默认搜索值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框内的提示占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清空按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置显示清空图标按钮" + }, + "labelPosition": "left" + }, + { + "property": "isEnterSearch", + "label": { + "text": { + "zh_CN": "是否Enter键触发search事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在按下键盘Enter键的时候触发search事件" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他配置" + }, + "content": [ + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "迷你模式,配置为true时,搜索默认显示为一个带图标的圆形按钮,点击后展开" + }, + "labelPosition": "left" + }, + { + "property": "transparent", + "label": { + "text": { + "zh_CN": "透明模式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "配置为true时,边框变为透明且收缩后半透明显示,一般用在带有背景的场景,默认 false" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "输入完成时触发" + }, + "description": { + "zh_CN": "在 input 框中输入完成时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onSearch": { + "label": { + "zh_CN": "点击搜索按钮时触发" + }, + "description": { + "zh_CN": "展开状态点击搜索按钮时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["clearable", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkbox", + "name": { + "zh_CN": "复选框" + }, + "component": "TinyCheckbox", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Checkbox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "复选框的文本" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示边框" + } + }, + { + "property": "false-label", + "label": { + "text": { + "zh_CN": "未选中的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "没有选中时的值" + } + }, + { + "property": "true-label", + "label": { + "text": { + "zh_CN": "选择时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "选中时的值" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["border", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxbutton", + "name": { + "zh_CN": "复选按钮" + }, + "component": "TinyCheckboxButton", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "按钮文本" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxgroup", + "name": { + "zh_CN": "复选按钮组" + }, + "component": "TinyCheckboxGroup", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "dataType": "Array" + } + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "数据列表" + } + }, + "defaultValue": [ + { + "label": "标签2" + }, + { + "label": "标签2" + } + ], + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "checkbox组件列表" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "button", + "value": "button" + }, + { + "label": "checkbox", + "value": "checkbox" + } + ] + } + }, + "description": { + "zh_CN": "checkbox组件类型(button/checkbox),该属性的默认值为 checkbox,配合 options 属性一起使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "type"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "dialogbox", + "name": { + "zh_CN": "对话框" + }, + "component": "TinyDialogBox", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DialogBox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框标题" + }, + "labelPosition": "left" + }, + { + "property": "visible", + "label": { + "text": { + "zh_CN": "显示与隐藏" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "控制弹出框显示与关闭" + }, + "labelPosition": "left" + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "弹出框的宽度" + }, + "labelPosition": "left" + }, + { + "property": "draggable", + "label": { + "text": { + "zh_CN": "可拖拽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否开启弹窗的拖拽功能,默认值为 false 。" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "弹出框的头部与底部内容会自动居中" + }, + "labelPosition": "left" + }, + { + "property": "dialog-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义配置弹窗类名" + }, + "labelPosition": "left" + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "插入到 Body " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "DialogBox 本身是否插入到 body 上,嵌套的 Dialog 必须指定该属性并赋值为 true" + }, + "labelPosition": "left" + }, + { + "property": "show-close", + "label": { + "text": { + "zh_CN": "关闭按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示关闭按钮,默认值为 true 。" + } + } + ] + } + ], + "selector": ".TinyDialogBox", + "events": { + "onClose": { + "label": { + "zh_CN": "关闭弹窗时触发" + }, + "description": { + "zh_CN": "Dialog 关闭的回调" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:visible": { + "label": { + "zh_CN": "双向绑定的状态改变时触发" + }, + "description": { + "zh_CN": "显示或隐藏的状态值,发生改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的显示或隐藏的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "title": { + "label": { + "zh_CN": "标题区" + }, + "description": { + "zh_CN": "Dialog 标题区的内容" + } + }, + "footer": { + "label": { + "zh_CN": "按钮操作区" + }, + "description": { + "zh_CN": "Dialog 按钮操作区的内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": ".tiny-dialog-box", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabs", + "name": { + "zh_CN": "标签页" + }, + "component": "TinyTabs", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tabs", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 10, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "showEditIcon", + "label": { + "text": { + "zh_CN": "显示编辑ICON " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示标题后编辑 ICON" + }, + "labelPosition": "left" + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "绑定值,选中选项卡的 name" + }, + "labelPosition": "left" + }, + { + "property": "with-add", + "label": { + "text": { + "zh_CN": "可新增" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可增加" + }, + "labelPosition": "left" + }, + { + "property": "with-close", + "label": { + "text": { + "zh_CN": "可关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可关闭" + }, + "labelPosition": "left" + }, + { + "property": "tab-style", + "label": { + "text": { + "zh_CN": "标签页样式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "card", + "value": "card" + }, + { + "label": "border-card", + "value": "border-card" + } + ] + } + }, + "description": { + "zh_CN": "标签页样式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击页签时触发事件" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "component", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前点击的页签对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onEdit": { + "label": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "description": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "tab", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的页签对象" + } + }, + { + "name": "type", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的类型(remove || add || edit)" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "关闭页签时触发" + }, + "description": { + "zh_CN": "关闭页签时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "name", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "页签名称" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyTabItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["size", "tab-style"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabitem", + "name": { + "zh_CN": "tab页签" + }, + "component": "TinyTabItem", + "description": "tab 标签页", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TabItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一表示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一表示" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyTab"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["name", "title"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑" + }, + "component": "TinyBreadcrumb", + "description": "告诉访问者他们目前在网站中的位置以及如何返回", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "separator", + "label": { + "text": { + "zh_CN": "分隔符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "自定义分隔符" + }, + "labelPosition": "left" + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "options" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "textField", + "label": { + "text": { + "zh_CN": "textField" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "description": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyBreadcrumbItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["separator"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑项" + }, + "component": "TinyBreadcrumbItem", + "description": "", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "BreadcrumbItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "to", + "label": { + "text": { + "zh_CN": "路由路径" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面包屑项" + } + } + ] + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "面包屑项标签" + }, + "description": { + "zh_CN": "面包屑项" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyBreadcrumb"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["to"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapse", + "name": { + "zh_CN": "折叠面板" + }, + "component": "TinyCollapse", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Collapse", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "当前激活的面板" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定当前激活的面板" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "激活面板改变时触发" + }, + "description": { + "zh_CN": "当前激活面板改变时触发(如果是手风琴模式,参数 activeNames 类型为string,否则为array)" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前激活面板的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前激活面板的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapseitem", + "name": { + "zh_CN": "折叠面板项" + }, + "component": "TinyCollapseItem", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CollapseItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一标志符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "唯一标志符;String | Number" + }, + "labelPosition": "left" + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "面板标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "面板标题" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "grid", + "name": { + "zh_CN": "表格" + }, + "component": "TinyGrid", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Grid", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础属性" + }, + "description": { + "zh_CN": "基础属性" + }, + "collapse": { + "number": 15, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "onChange": "this.delProp('fetchData')", + "description": { + "zh_CN": "设置表格的数据" + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列标题" + } + }, + "widget": { + "component": "MetaBindI18n", + "props": {} + } + }, + { + "property": "field", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列键值" + } + }, + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "sortable", + "type": "boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "width", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列宽" + } + }, + "widget": { + "component": "MetaNumber", + "props": {} + } + }, + { + "property": "formatText", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "内置渲染器" + } + }, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "整数", + "value": "integer" + }, + { + "label": "小数", + "value": "number" + }, + { + "label": "金额", + "value": "money" + }, + { + "label": "百分比", + "value": "rate" + }, + { + "label": "布尔", + "value": "boole" + }, + { + "label": "年月日", + "value": "date" + }, + { + "label": "年月日时分", + "value": "dateTime" + }, + { + "label": "时间", + "value": "time" + }, + { + "label": "省略", + "value": "ellipsis" + } + ] + } + } + }, + { + "property": "renderer", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSFunction" + } + } + }, + { + "property": "slots", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "插槽" + } + }, + "labelPosition": "none", + "widget": { + "component": "MetaJsSlot", + "props": { + "slots": ["header", "default"] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "列类型" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "索引列", + "value": "index" + }, + { + "label": "单选列", + "value": "radio" + }, + { + "label": "多选列", + "value": "selection" + }, + { + "label": "展开列", + "value": "expand" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)" + }, + "labelPosition": "left" + }, + { + "property": "editor", + "label": { + "text": { + "zh_CN": "编辑配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "单元格编辑渲染配置项,也可以是函数 Function(h, params)" + }, + "labelPosition": "left" + }, + { + "property": "filter", + "label": { + "text": { + "zh_CN": "筛选配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "设置表格列的筛选配置信息。默认值为 false 不配置筛选信息" + } + }, + { + "property": "showOverflow", + "label": { + "text": { + "zh_CN": "内容超出部分省略号配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "只显示省略号", + "value": "ellipsis" + }, + { + "label": "显示为原生 title", + "value": "title" + }, + { + "label": "显示为 tooltip 提示", + "value": "tooltip" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)" + }, + "labelPosition": "left" + } + ] + } + ], + "widget": { + "component": "MetaArrayItem", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "fetchData", + "label": { + "text": { + "zh_CN": "服务端数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "onChange": "this.delProp('data')", + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "fetchData", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "服务端数据查询方法" + } + }, + { + "property": "pager", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": { + "attrs": { + "currentPage": 1 + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "pager", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "分页配置" + } + }, + { + "property": "resizable", + "label": { + "text": { + "zh_CN": "调整列宽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许调整列宽" + }, + "labelPosition": "left" + }, + { + "property": "row-id", + "label": { + "text": { + "zh_CN": "行数据唯一标识的字段名" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "placeholder": "比如:id" + } + }, + "description": { + "zh_CN": "行数据唯一标识的字段名" + }, + "labelPosition": "left" + }, + { + "property": "select-config", + "label": { + "text": { + "zh_CN": "复选框配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "表格行数据复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格校验规则配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-config", + "label": { + "text": { + "zh_CN": "编辑配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格编辑配置项" + } + }, + { + "property": "expand-config", + "label": { + "text": { + "zh_CN": "复选框配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "sortable", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + } + ] + }, + { + "label": { + "zh_CN": "其他属性" + }, + "description": { + "zh_CN": "其他属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "auto-resize", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "labelPosition": "left" + }, + { + "property": "seq-serial", + "label": { + "text": { + "zh_CN": "行号连续" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置行序号是否连续,开启分页时有效,该属性的默认值为 false" + }, + "labelPosition": "left" + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "高亮当前行" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "高亮当前行" + }, + "labelPosition": "left" + }, + { + "property": "highlight-hover-row", + "label": { + "text": { + "zh_CN": "hover 时候高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "鼠标移到行是否要高亮显示" + }, + "labelPosition": "left" + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})" + }, + "labelPosition": "left" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "最大高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "设置表格内容区域(不含表格头部,底部)的最大高度。" + }, + "labelPosition": "left" + }, + { + "property": "row-span", + "label": { + "text": { + "zh_CN": "行合并" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onFilterChange": { + "label": { + "zh_CN": "筛选条件改变时触发改事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSortChange": { + "label": { + "zh_CN": "点击列头,执行数据排序前触发的事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectAll": { + "label": { + "zh_CN": "当手动勾选全选时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选全选时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 包含 table 实例对象" + } + }, + { + "name": "checked", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "勾选状态" + } + }, + { + "name": "selction", + "type": "Array", + "defaultValue": "", + "description": { + "zh_CN": "选中的表格数据数组" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectChange": { + "label": { + "zh_CN": "手动勾选并且值发生改变时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " table 实例对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onToggleExpandChange": { + "label": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "description": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onCurrentChange": { + "label": { + "zh_CN": "行点击时触发" + }, + "description": { + "zh_CN": "行点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contentMenu": { + "actions": ["create symbol"] + }, + "onBeforeMount": "console.log('table on load'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "分页" + }, + "component": "TinyPager", + "icon": "pager", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Pager", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "currentPage", + "label": { + "text": { + "zh_CN": "当前页数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "当前页数,支持 .sync 修饰符" + }, + "labelPosition": "left" + }, + { + "property": "pageSize", + "label": { + "text": { + "zh_CN": "每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "每页显示条目个数" + }, + "labelPosition": "left" + }, + { + "property": "pageSizes", + "label": { + "text": { + "zh_CN": "可选每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置可选择的每页显示条数" + } + }, + { + "property": "total", + "label": { + "text": { + "zh_CN": "总条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "数据总条数" + }, + "labelPosition": "left" + }, + { + "property": "layout", + "label": { + "text": { + "zh_CN": "布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": "total,sizes,prev, pager, next", + "widget": { + "component": "MetaInput", + "props": { + "type": "textarea" + } + }, + "description": { + "zh_CN": "组件布局,子组件名用逗号分隔" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onCurrentChange ": { + "label": { + "zh_CN": "切换页码时触发" + }, + "description": { + "zh_CN": "切换页码时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前页的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onPrevClick ": { + "label": { + "zh_CN": "点击上一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNextClick": { + "label": { + "zh_CN": "点击下一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["currentPage", "total"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "component": "TinyPopeditor", + "icon": "popEditor", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "PopEditor", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 6, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "show-clear-btn", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板的宽度(单位像素)" + }, + "labelPosition": "left" + }, + { + "property": "conditions", + "label": { + "text": { + "zh_CN": "过滤条件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "当弹出面板配置的是表格时,设置弹出面板中的过滤条件" + }, + "labelPosition": "left" + }, + { + "property": "grid-op", + "label": { + "text": { + "zh_CN": "表格配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中表格组件的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "pager-op", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出编辑框中分页配置" + }, + "labelPosition": "left" + }, + { + "property": "multi", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中的数据是否可多选" + }, + "labelPosition": "left" + }, + { + "property": "show-pager", + "label": { + "text": { + "zh_CN": "启用分页" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "选中值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项的值" + } + }, + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中对象" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "弹框关闭时触发的事件" + }, + "description": { + "zh_CN": "弹框关闭时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onPageChange": { + "label": { + "zh_CN": "分页切换事件" + }, + "description": { + "zh_CN": "表格模式下分页切换事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页码数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["modelValue", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tree", + "name": { + "zh_CN": "树" + }, + "component": "TinyTree", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tree", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "show-checkbox", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置接口是否可以多选" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1" + } + ] + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "可配置静态数据源和动态数据源" + } + }, + { + "property": "node-key", + "label": { + "text": { + "zh_CN": "唯一标识" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "节点唯一标识属性名称" + }, + "labelPosition": "left" + }, + { + "property": "render-content", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "disabled": true, + "placeholder": "请使用变量绑定来绑定函数" + } + }, + "description": { + "zh_CN": "树节点的内容区的渲染函数" + } + }, + { + "property": "icon-trigger-click-node", + "label": { + "text": { + "zh_CN": "触发NodeClick 事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "点击图标展开节点时是否触发 node-click 事件" + }, + "labelPosition": "left" + }, + { + "property": "expand-icon", + "label": { + "text": { + "zh_CN": "展开图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点展开图标" + }, + "labelPosition": "left" + }, + { + "property": "shrink-icon", + "label": { + "text": { + "zh_CN": "收缩图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点收缩的图标" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "check-on-click-node", + "label": { + "text": { + "zh_CN": "点击节点选中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点" + }, + "labelPosition": "left" + }, + { + "property": "filter-node-method", + "label": { + "text": { + "zh_CN": "筛选函数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点筛选函数" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onCheck": { + "label": { + "zh_CN": "勾选节点后的事件" + }, + "description": { + "zh_CN": "勾选节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "currentNode", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNodeClick": { + "label": { + "zh_CN": "点击节点后的事件" + }, + "description": { + "zh_CN": "点击节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "node", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + }, + { + "name": "vm", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件实例" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["data", "show-checkbox"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "timeline", + "name": { + "zh_CN": "时间线" + }, + "component": "TinyTimeLine", + "description": "TimeLine 时间线", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TimeLine", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "horizontal", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "水平布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字横向布局" + } + }, + { + "property": "vertical", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "垂直布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "垂直布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字垂直布局" + } + }, + { + "property": "active", + "label": { + "text": { + "zh_CN": "选中值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "步骤条的选中步骤值" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "name": "配置基本信息", + "status": "ready" + }, + { + "name": "配置报价", + "status": "wait" + }, + { + "name": "完成报价", + "status": "wait" + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "时间线步骤条数据" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "节点的点击时触发" + }, + "description": { + "zh_CN": "节点的点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "点击节点的下标" + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前节点对象:{ name: 节点名称, time: 时间 }" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["active", "data"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tooltip", + "name": { + "zh_CN": "文字提示框" + }, + "component": "TinyTooltip", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tooltip", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 11, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 20, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "placement", + "label": { + "text": { + "zh_CN": "提示位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "Tooltip 的出现位置" + }, + "labelPosition": "left" + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "提示信息", + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot#content 传入 DOM" + } + }, + { + "property": "render-content", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": { + "disabled": true, + "placeholder": "请使用变量绑定来绑定函数" + } + }, + "description": { + "zh_CN": "自定义渲染函数,返回需要渲染的节点内容" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "是否可见" + } + }, + "defaultValue": true, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "状态是否可见" + } + }, + { + "property": "manual", + "label": { + "text": { + "zh_CN": "手动控制" + } + }, + "defaultValue": true, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "手动控制模式,设置为 true 后,mouseenter 和 mouseleave 事件将不会生效" + } + } + ] + } + ], + "events": {}, + "slots": { + "content": { + "label": { + "zh_CN": "提示内容" + }, + "description": { + "zh_CN": "自定义提示内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "content"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "popover", + "name": { + "zh_CN": "提示框" + }, + "component": "TinyPopover", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popover", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,手动控制是否可见的状态值" + }, + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "left" + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { + "label": "click", + "value": "click" + }, + { + "label": "focus", + "value": "focus" + }, + { + "label": "hover", + "value": "hover" + }, + { + "label": "manual", + "value": "manual" + } + ] + } + }, + "description": { + "zh_CN": "触发方式,该属性的可选值为 click / focus / hover / manual,该属性的默认值为 click" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "为 popper 添加类名" + }, + "labelPosition": "left" + }, + { + "property": "visible-arrow", + "label": { + "text": { + "zh_CN": "显示箭头" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示 Tooltip 箭头" + } + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "添加到body上" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover弹窗是否添加到body上" + } + }, + { + "property": "arrow-offset", + "label": { + "text": { + "zh_CN": "箭头的位置偏移" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "箭头的位置偏移,该属性的默认值为 0" + } + }, + { + "property": "close-delay", + "label": { + "text": { + "zh_CN": "隐藏延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的隐藏延迟,单位为毫秒" + } + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "显示的内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot 传入 DOM" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover 是否可用" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "位置偏移量" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "出现位置的偏移量" + } + }, + { + "property": "open-delay", + "label": { + "text": { + "zh_CN": "显示延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的显示延迟,单位为毫秒" + } + }, + { + "property": "popper-options", + "label": { + "text": { + "zh_CN": "popper.js的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "popper.js 的参数" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "transform-origin", + "label": { + "text": { + "zh_CN": "旋转中心点" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "组件的旋转中心点,组件的旋转中心点" + } + }, + { + "property": "transition", + "label": { + "text": { + "zh_CN": "定义渐变动画" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaInput", + "props": {} + }, + "description": { + "zh_CN": "该属性的默认值为 fade-in-linear" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "宽度" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "手动控制是否可见的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的可见状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + } + ], + "blocks": [], + "snippets": [ + { + "group": "element-plus", + "children": [ + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "ElInput", + "schema": {} + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "ElButton", + "schema": { + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文本" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "ElForm", + "schema": { + "children": [ + { + "componentName": "ElFormItem", + "props": { + "label": "账号", + "prop": "account" + }, + "children": [ + { + "componentName": "ElInput", + "props": { + "modelValue": "", + "placeholder": "请输入账号" + } + } + ] + }, + { + "componentName": "ElFormItem", + "props": { + "label": "密码", + "prop": "password" + }, + "children": [ + { + "componentName": "ElInput", + "props": { + "modelValue": "", + "placeholder": "请输入密码", + "type": "password" + } + } + ] + }, + { + "componentName": "ElFormItem", + "props": {}, + "children": [ + { + "componentName": "ElButton", + "props": { + "type": "primary", + "style": "margin-right: 10px" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "提交" + } + } + ] + }, + { + "componentName": "ElButton", + "props": { + "type": "primary" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "重置" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "ElTable", + "schema": { + "props": { + "data": [ + { + "date": "2016-05-03", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-02", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-04", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-01", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + } + ], + "columns": [ + { + "type": "index" + }, + { + "label": "Date", + "prop": "date" + }, + { + "label": "Name", + "prop": "name" + }, + { + "label": "Address", + "prop": "address" + } + ] + } + } + } + ] + }, + { + "group": "html", + "children": [ + { + "name": { + "zh_CN": "段落" + }, + "icon": "paragraph", + "screenshot": "", + "snippetName": "p", + "schema": { + "componentName": "p", + "children": "TinyEngine 前端可视化设计器致力于通过友好的用户交互提升业务应用的开发效率。" + } + }, + { + "name": { + "zh_CN": "链接" + }, + "icon": "link", + "screenshot": "", + "snippetName": "a", + "schema": { + "componentName": "a", + "children": "链接" + } + }, + { + "name": { + "zh_CN": "分隔线" + }, + "icon": "hr", + "screenshot": "", + "snippetName": "hr", + "schema": {} + }, + { + "name": { + "zh_CN": "标题" + }, + "icon": "h16", + "screenshot": "", + "snippetName": "h1", + "schema": { + "componentName": "h1", + "props": {}, + "children": "Heading" + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "input", + "schema": { + "componentName": "input", + "props": { + "type": "text", + "placeholder": "请输入" + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "icon": "video", + "screenshot": "", + "snippetName": "video", + "schema": { + "componentName": "video", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100", + "style": "border:1px solid #ccc" + } + } + }, + { + "name": { + "zh_CN": "图片" + }, + "icon": "Image", + "screenshot": "", + "snippetName": "img", + "schema": { + "componentName": "img", + "props": { + "src": "https://images.unsplash.com/photo-1588345921523-c2dcdb7f1dcd?w=200&h=100&dpr=2&q=80", + "width": "200", + "height": "100" + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "button", + "schema": { + "componentName": "button", + "props": {}, + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文案" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "table", + "screenshot": "", + "snippetName": "table", + "schema": { + "componentName": "table", + "props": { + "border": "1" + }, + "children": [ + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": [ + { + "componentName": "p", + "children": "Month" + } + ] + }, + { + "componentName": "td", + "children": [ + { + "componentName": "p", + "children": "Savings" + } + ] + } + ] + }, + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": [ + { + "componentName": "p", + "children": "January" + } + ] + }, + { + "componentName": "td", + "children": [ + { + "componentName": "p", + "children": "100" + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "form", + "schema": { + "componentName": "form", + "props": { + "action": "action" + }, + "children": [ + { + "componentName": "label", + "props": { + "for": "male" + }, + "children": "male" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + }, + { + "componentName": "br" + }, + { + "componentName": "label", + "props": { + "for": "Female" + }, + "children": "Female" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + } + ] + } + } + ] + }, + { + "group": "content", + "children": [ + { + "name": { + "zh_CN": "走马灯" + }, + "screenshot": "", + "snippetName": "TinyCarousel", + "icon": "carousel", + "schema": { + "componentName": "TinyCarousel", + "props": { + "height": "180px" + }, + "children": [ + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "screenshot": "", + "snippetName": "tiny-form", + "icon": "form", + "schema": { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "人员" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "密码" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "type": "password" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "" + }, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": "margin-right: 10px" + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "type": "primary" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "下拉框" + }, + "icon": "select", + "screenshot": "", + "snippetName": "TinySelect", + "schema": { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + } + } + }, + { + "name": { + "zh_CN": "开关" + }, + "icon": "switch", + "screenshot": "", + "snippetName": "TinySwitch", + "schema": { + "componentName": "TinySwitch", + "props": { + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "复选框组" + }, + "icon": "checkboxs", + "screenshot": "", + "snippetName": "TinyCheckboxGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": ["name1", "name2"], + "type": "checkbox", + "options": [ + { + "text": "复选框1", + "label": "name1" + }, + { + "text": "复选框2", + "label": "name2" + }, + { + "text": "复选框3", + "label": "name3" + } + ] + } + } + }, + { + "name": { + "zh_CN": "复选框拖拽按钮组" + }, + "icon": "checkboxgroup", + "screenshot": "", + "snippetName": "TinyCheckboxbuttonGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": [] + }, + "children": [ + { + "componentName": "TinyCheckboxButton", + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "对话框" + }, + "screenshot": "", + "snippetName": "TinyDialogBox", + "icon": "dialogbox", + "schema": { + "componentName": "TinyDialogBox", + "props": { + "visible": true, + "show-close": true, + "title": "dialogBox title" + }, + "children": [ + { + "componentName": "div" + } + ] + } + }, + { + "name": { + "zh_CN": "标签页" + }, + "icon": "tabs", + "screenshot": "", + "group": true, + "snippetName": "TinyTabs", + "schema": { + "componentName": "TinyTabs", + "props": { + "modelValue": "first" + }, + "children": [ + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页1", + "name": "first" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页2", + "name": "second" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "折叠面板" + }, + "screenshot": "", + "snippetName": "TinyCollapse", + "icon": "collapse", + "schema": { + "componentName": "TinyCollapse", + "props": { + "modelValue": "collapse1" + }, + "children": [ + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse1", + "title": "折叠项1" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse2", + "title": "折叠项2" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse3", + "title": "折叠项3" + }, + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "tinyGrid", + "schema": { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "index", + "width": 60 + }, + { + "type": "selection", + "width": 60 + }, + { + "field": "employees", + "title": "员工数" + }, + { + "field": "created_date", + "title": "创建日期" + }, + { + "field": "city", + "title": "城市" + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "icon": "popeditor", + "screenshot": "", + "snippetName": "TinyPopeditor", + "schema": { + "componentName": "TinyPopeditor", + "props": { + "modelValue": "", + "placeholder": "请选择", + "gridOp": { + "columns": [ + { + "field": "id", + "title": "ID", + "width": 40 + }, + { + "field": "name", + "title": "名称", + "showOverflow": "tooltip" + }, + { + "field": "province", + "title": "省份", + "width": 80 + }, + { + "field": "city", + "title": "城市", + "width": 80 + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司", + "city": "福州", + "province": "福建" + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "province": "广东" + }, + { + "id": "3", + "name": "RFV有限责任公司", + "city": "中山", + "province": "广东" + }, + { + "id": "4", + "name": "TGB科技有限公司", + "city": "龙岩", + "province": "福建" + }, + { + "id": "5", + "name": "YHN科技有限公司", + "city": "韶关", + "province": "广东" + }, + { + "id": "6", + "name": "WSX科技有限公司", + "city": "黄冈", + "province": "武汉" + } + ] + } + } + } + }, + { + "name": { + "zh_CN": "树" + }, + "icon": "tree", + "screenshot": "", + "snippetName": "TinyTree", + "schema": { + "componentName": "TinyTree", + "props": { + "data": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1", + "children": [ + { + "label": "三级 1-1-1" + } + ] + } + ] + }, + { + "label": "一级 2", + "children": [ + { + "label": "二级 2-1", + "children": [ + { + "label": "三级 2-1-1" + } + ] + }, + { + "label": "二级 2-2", + "children": [ + { + "label": "三级 2-2-1" + } + ] + } + ] + } + ] + } + } + }, + { + "name": { + "zh_CN": "文字提示框" + }, + "icon": "tooltip", + "screenshot": "", + "snippetName": "TinyTooltip", + "schema": { + "componentName": "TinyTooltip", + "props": { + "content": "Top Left 提示文字", + "placement": "top-start", + "manual": true, + "modelValue": true + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": {} + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "content" + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "提示框" + }, + "icon": "popover", + "screenshot": "", + "snippetName": "TinyPopover", + "schema": { + "componentName": "TinyPopover", + "props": { + "width": 200, + "title": "弹框标题", + "trigger": "manual", + "modelValue": true + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": "reference" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "default" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "分页" + }, + "icon": "pager", + "screenshot": "", + "snippetName": "TinyPager", + "schema": { + "componentName": "TinyPager", + "props": { + "layout": "total, sizes, prev, pager, next", + "total": 100, + "pageSize": 10, + "currentPage": 1 + } + } + }, + { + "name": { + "zh_CN": "面包屑" + }, + "icon": "breadcrumb", + "screenshot": "", + "snippetName": "TinyBreadcrumb", + "schema": { + "componentName": "TinyBreadcrumb", + "props": { + "options": [ + { + "to": "{ path: '/' }", + "label": "首页" + }, + { + "to": "{ path: '/breadcrumb' }", + "label": "产品" + }, + { + "replace": "true", + "label": "软件" + } + ] + } + } + } + ] + }, + { + "group": "general", + "children": [ + { + "name": { + "zh_CN": "Row" + }, + "icon": "row", + "screenshot": "", + "snippetName": "TinyRow", + "schema": { + "componentName": "TinyRow", + "props": {}, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + } + ] + } + }, + { + "name": { + "zh_CN": "Col" + }, + "icon": "col", + "screenshot": "", + "snippetName": "TinyCol", + "schema": { + "componentName": "TinyCol", + "props": { + "span": 12, + "style": { + "height": "30px", + "border": "1px solid #ccc" + } + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "TinyButton", + "schema": { + "componentName": "TinyButton", + "props": { + "text": "按钮文案" + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtons", + "screenshot": "", + "schema": { + "componentName": "div", + "props": {}, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "取消" + } + } + ] + }, + "configure": { + "isContainer": true + } + }, + { + "name": { + "zh_CN": "互斥按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtonGroup", + "screenshot": "", + "schema": { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "Button1", + "value": "1" + }, + { + "text": "Button2", + "value": "2" + }, + { + "text": "Button3", + "value": "3" + } + ], + "modelValue": "1" + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "TinyInput", + "schema": { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "单选" + }, + "icon": "radio", + "screenshot": "", + "snippetName": "TinyRadio", + "schema": { + "componentName": "TinyRadio", + "props": { + "label": "1", + "text": "单选文本" + } + } + }, + { + "name": { + "zh_CN": "复选框" + }, + "icon": "checkbox", + "screenshot": "", + "snippetName": "TinyCheckbox", + "schema": { + "componentName": "TinyCheckbox", + "props": { + "text": "复选框文案" + } + } + } + ] + }, + { + "group": "navigation", + "children": [ + { + "name": { + "zh_CN": "搜索框" + }, + "icon": "search", + "screenshot": "", + "snippetName": "TinySearch", + "schema": { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + } + } + }, + { + "name": { + "zh_CN": "时间线" + }, + "icon": "timeline", + "screenshot": "", + "snippetName": "TinyTimeLine", + "schema": { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "已下单" + }, + { + "name": "运输中" + }, + { + "name": "已签收" + } + ] + } + } + } + ] + } + ] + } + } +} diff --git a/packages/plugins/ai/scripts/generate-prompt.js b/packages/plugins/ai/scripts/generate-prompt.js new file mode 100644 index 000000000..6f141b495 --- /dev/null +++ b/packages/plugins/ai/scripts/generate-prompt.js @@ -0,0 +1,77 @@ +import fs from "node:fs"; +import url from "node:url"; +import path from "node:path"; + +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); + +const { + data: { + materials: { components, snippets }, + }, +} = JSON.parse( + fs.readFileSync(path.resolve(__dirname, "./bundle.json"), "utf8") +); + +const whitelist = [ + "TinyCollapse", + "TinyDialogBox", + "Img", + "TinyBreadcrumb", + "TinyButton", + "TinyCarousel", + "TinyCheckbox", + "table", + "TinyInput", + "TinyRadio", + "TinySelect", + "TinySwitch", + "TinyGrid", + "TinyTabs", + "TinyTree", + "TinyPager", + "TinyRow", + "TinyTimeLine" +]; +const results = {}; + +for (const v of components) { + if (whitelist.includes(v.component) && !results[v.component]) { + let snippet; + for (const subS of snippets) { + for (const s of subS.children) { + if (s.snippetName.toLowerCase() === v.component.toLowerCase()) { + snippet = s; + } + } + } + results[v.component] = { + schema: v.schema, + snippet, + }; + } +} + +const schemaPromptHeader = fs.readFileSync( + path.resolve(__dirname, "./schema.system.base.md"), + "utf8" +); +await fs.writeFileSync( + path.resolve(__dirname, "../src/prompts/schema.system.md"), + schemaPromptHeader + + Object.keys(results) + .map((key) => { + const { snippet } = results[key]; + return ` +### 组件 ${key} + +使用适例: + +\`\`\`json +${JSON.stringify(snippet.schema, null, 2)} +\`\`\` +`; + }) + .join("") +); + +// console.log(whitelist.length, Object.keys(results).length) diff --git a/packages/plugins/ai/scripts/schema.system.base.md b/packages/plugins/ai/scripts/schema.system.base.md new file mode 100644 index 000000000..c5a66fd1e --- /dev/null +++ b/packages/plugins/ai/scripts/schema.system.base.md @@ -0,0 +1,31 @@ +# 任务描述 + +- 作为一个低代码工具专家,输出符合 TinyEngine 低代码工具的 Typescript Interface IPageSchema 的 JSON 数据,实现应用布局和逻辑 +- 不需要在代码中包含注释 +- 不需要回答你的思路等文字描述,仅仅输出代码即可 +- 尽量多使用 `IPageSchema['css']` 和 `IComponentSchema['props']['style']` 设置美观的样式,任何合法的 CSS 都是可用的 +- 如果使用任何 image,请从 Unsplash 加载它们或使用纯色矩形作为占位符。 +- 只对 div 组件设置 padding 和 margin 用于布局 +- TinyEngine 低代码工具的 Typescript Interface 如下: + +```ts +interface IPageSchema { // 页面 或 区块 schema + css?: string; // 页面全局样式 + children?: Array< IComponentSchema > | string; // 子组件列表 或 文本字符串 +} + +interface IComponentSchema { // 组件 schema + componentName?: string; // 组件名称 + id: string; // 一个语义化的组件 ID,保持唯一 + props?: { // 组件绑定的属性 + style?: string; // 组件 CSS 样式 + className?: string // 组件 class name,与 CSS 联动 + [prop:string]?: any; // 组件 props schema 具体参考以下组件使用文档 + }; + children?: Array< IComponentSchema >; // 嵌套 children,形成树状页面结构 +} +``` + +## 组件使用文档 + +每个 IComponentSchema 的 componentName 为以下列出组件之一,props 数据需符合为组件对应的 props schema diff --git a/packages/plugins/ai/src/components/business/ApiConfigSteps.tsx b/packages/plugins/ai/src/components/business/ApiConfigSteps.tsx new file mode 100644 index 000000000..85ae68478 --- /dev/null +++ b/packages/plugins/ai/src/components/business/ApiConfigSteps.tsx @@ -0,0 +1,94 @@ +import { useEffect, useState } from "react"; +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +import { EyeOff, Eye } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { ApiConfig } from "@/plugins/fetch-llm"; + +export type ComponentProps = { + apiConfig: ApiConfig; + onClose: () => void; +}; + +export default function ApiConfigSteps(props: { + Component: React.FC; + Trigger: React.FC; +}) { + const [open, setOpen] = useState(false); + + const [step, setStep] = useState(0); + const [apiKey, setApiKey] = useState(localStorage.getItem("api-key") || ""); + const [apiProxy, setApiProxy] = useState( + localStorage.getItem("api-proxy") || "" + ); + useEffect(() => { + localStorage.setItem("api-key", apiKey); + }, [apiKey]); + useEffect(() => { + localStorage.setItem("api-proxy", apiProxy); + }, [apiProxy]); + + const [apiKeyVisible, setApiKeyVisible] = useState(false); + const toggleApiKeyVisibility = () => setApiKeyVisible(!apiKeyVisible); + + const steps = [ + <> + + 填写 LLM API 信息 + +
+
+ +
+ setApiKey(evt.currentTarget.value)} + /> + +
+
+
+ + setApiProxy(evt.currentTarget.value)} + /> +
+ +
+ , + setOpen(false)} + />, + ]; + + return ( + + {} + {steps[step]} + + ); +} diff --git a/packages/plugins/ai/src/components/ui/aspect-ratio.tsx b/packages/plugins/ai/src/components/ui/aspect-ratio.tsx new file mode 100644 index 000000000..c4abbf37f --- /dev/null +++ b/packages/plugins/ai/src/components/ui/aspect-ratio.tsx @@ -0,0 +1,5 @@ +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" + +const AspectRatio = AspectRatioPrimitive.Root + +export { AspectRatio } diff --git a/packages/plugins/ai/src/components/ui/button.tsx b/packages/plugins/ai/src/components/ui/button.tsx new file mode 100644 index 000000000..0ba427735 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/packages/plugins/ai/src/components/ui/card.tsx b/packages/plugins/ai/src/components/ui/card.tsx new file mode 100644 index 000000000..afa13ecfa --- /dev/null +++ b/packages/plugins/ai/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/packages/plugins/ai/src/components/ui/dialog.tsx b/packages/plugins/ai/src/components/ui/dialog.tsx new file mode 100644 index 000000000..5b3b3a516 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/dialog.tsx @@ -0,0 +1,120 @@ +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Dialog = DialogPrimitive.Root; + +const DialogTrigger = DialogPrimitive.Trigger; + +const DialogPortal = DialogPrimitive.Portal; + +const DialogClose = DialogPrimitive.Close; + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DialogHeader.displayName = "DialogHeader"; + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DialogFooter.displayName = "DialogFooter"; + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +}; diff --git a/packages/plugins/ai/src/components/ui/input.tsx b/packages/plugins/ai/src/components/ui/input.tsx new file mode 100644 index 000000000..677d05fd6 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/input.tsx @@ -0,0 +1,25 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/packages/plugins/ai/src/components/ui/label.tsx b/packages/plugins/ai/src/components/ui/label.tsx new file mode 100644 index 000000000..683faa793 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/label.tsx @@ -0,0 +1,24 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/packages/plugins/ai/src/components/ui/radio-group.tsx b/packages/plugins/ai/src/components/ui/radio-group.tsx new file mode 100644 index 000000000..43b43b48b --- /dev/null +++ b/packages/plugins/ai/src/components/ui/radio-group.tsx @@ -0,0 +1,42 @@ +import * as React from "react" +import * as RadioGroupPrimitive from "@radix-ui/react-radio-group" +import { Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const RadioGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + return ( + + ) +}) +RadioGroup.displayName = RadioGroupPrimitive.Root.displayName + +const RadioGroupItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + return ( + + + + + + ) +}) +RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName + +export { RadioGroup, RadioGroupItem } diff --git a/packages/plugins/ai/src/components/ui/scroll-area.tsx b/packages/plugins/ai/src/components/ui/scroll-area.tsx new file mode 100644 index 000000000..cf253cf17 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/scroll-area.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" + +import { cn } from "@/lib/utils" + +const ScrollArea = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + {children} + + + + +)) +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName + +const ScrollBar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = "vertical", ...props }, ref) => ( + + + +)) +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName + +export { ScrollArea, ScrollBar } diff --git a/packages/plugins/ai/src/components/ui/switch.tsx b/packages/plugins/ai/src/components/ui/switch.tsx new file mode 100644 index 000000000..aa58baa29 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/switch.tsx @@ -0,0 +1,27 @@ +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/lib/utils" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } diff --git a/packages/plugins/ai/src/components/ui/textarea.tsx b/packages/plugins/ai/src/components/ui/textarea.tsx new file mode 100644 index 000000000..9f9a6dc56 --- /dev/null +++ b/packages/plugins/ai/src/components/ui/textarea.tsx @@ -0,0 +1,24 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +export interface TextareaProps + extends React.TextareaHTMLAttributes {} + +const Textarea = React.forwardRef( + ({ className, ...props }, ref) => { + return ( +

O&78~ym&3Y$1mYxa+G+ZtWg$o~KU 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