@easy-editor/materials-dashboard-button 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/component.min.js +1 -2
- package/dist/index.min.js +1 -2
- package/dist/meta.min.js +1 -2
- package/easypack.config.ts +10 -0
- package/package.json +4 -8
- package/src/component.tsx +139 -80
- package/src/configure.ts +136 -258
- package/src/index.tsx +7 -7
- package/src/meta.ts +26 -28
- package/src/snippets.ts +54 -49
- package/tsconfig.json +20 -9
- package/.vite/plugins/vite-plugin-external-deps.ts +0 -224
- package/.vite/plugins/vite-plugin-material-dev.ts +0 -218
- package/dist/component.esm.js +0 -97
- package/dist/component.esm.js.map +0 -1
- package/dist/component.js +0 -106
- package/dist/component.js.map +0 -1
- package/dist/component.min.js.map +0 -1
- package/dist/index.cjs +0 -394
- package/dist/index.cjs.map +0 -1
- package/dist/index.esm.js +0 -391
- package/dist/index.esm.js.map +0 -1
- package/dist/index.js +0 -399
- package/dist/index.js.map +0 -1
- package/dist/index.min.js.map +0 -1
- package/dist/meta.esm.js +0 -298
- package/dist/meta.esm.js.map +0 -1
- package/dist/meta.js +0 -309
- package/dist/meta.js.map +0 -1
- package/dist/meta.min.js.map +0 -1
- package/dist/src/component.d.ts +0 -26
- package/dist/src/configure.d.ts +0 -7
- package/dist/src/constants.d.ts +0 -16
- package/dist/src/index.d.ts +0 -6
- package/dist/src/meta.d.ts +0 -7
- package/dist/src/snippets.d.ts +0 -7
- package/rollup.config.js +0 -222
- package/tsconfig.build.json +0 -12
- package/tsconfig.test.json +0 -7
- package/vite.config.ts +0 -54
package/CHANGELOG.md
CHANGED
package/dist/component.min.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
!function(e,
|
|
2
|
-
//# sourceMappingURL=component.min.js.map
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("react/jsx-runtime")):"function"==typeof define&&define.amd?define(["exports","react","react/jsx-runtime"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).EasyEditorMaterialsButtonComponent={},e.React,e.jsxRuntime)}(this,function(e,t,o){"use strict";function n(...e){const t=[];for(const o of e)if(o)if("string"==typeof o||"number"==typeof o)t.push(String(o));else if(Array.isArray(o)){const e=n(...o);e&&t.push(e)}else if("object"==typeof o)for(const[e,n]of Object.entries(o))n&&t.push(e);return t.join(" ")}const r=(e,t)=>{if(!t)return e;const o=t.split(".");let n=e;for(const e of o){if(null==n)return;if("object"!=typeof n)return;n=n[e]}return n},a=e=>void 0===e?[]:Array.isArray(e)?e:e&&"object"==typeof e?[e]:[],i=(e,t)=>{const o=((e,t)=>{if(!e)return[];if("static"===e.sourceType)return Array.isArray(e.staticData)?e.staticData:[];if("global"===e.sourceType&&e.datasourceId){const o=t?.page?.[e.datasourceId];return a(o)}if("datasource"===e.sourceType&&e.datasourceId){const o=t?.component?.[e.datasourceId];return a(o)}return[]})(e,t);return((e,t)=>t&&0!==t.length?e.map(e=>{const o={};for(const{componentField:n,sourceField:a}of t)n&&a&&(o[n]=r(e,a));return o}):e)(o,e?.fieldMappings)};const s=(e,t,o)=>({type:"group",title:e,setter:{componentName:"CollapseSetter",props:{icon:!1,...o}},items:t});s("基础配置",[{name:"title",title:"标题",setter:"StringSetter",extraProps:{getValue:e=>e.getExtraPropValue("title"),setValue(e,t){e.setExtraPropValue("title",t)}}},{name:"rect",title:"位置尺寸",setter:"RectSetter",extraProps:{getValue:e=>e.getExtraPropValue("$dashboard.rect"),setValue(e,t){e.setExtraPropValue("$dashboard.rect",t)}}},{name:"rotation",title:"旋转角度",setter:{componentName:"SliderSetter",props:{min:0,max:360,suffix:"°"}},extraProps:{defaultValue:0}},{name:"opacity",title:"不透明度",setter:{componentName:"SliderSetter",props:{min:0,max:100,suffix:"%"}},extraProps:{defaultValue:100}},{name:"background",title:"背景颜色",setter:"ColorSetter",extraProps:{defaultValue:"transparent"}}]);const l=[{title:"点击事件",children:[{label:"点击",value:"onClick",description:"鼠标点击时触发"},{label:"双击",value:"onDoubleClick",description:"鼠标双击时触发"}]},{title:"鼠标事件",children:[{label:"鼠标进入",value:"onMouseEnter",description:"鼠标进入时触发"},{label:"鼠标离开",value:"onMouseLeave",description:"鼠标离开时触发"}]}];((e=l)=>{s("事件绑定",[{name:"events",title:"事件",setter:{componentName:"EventSetter",props:{events:e}},extraProps:{label:!1}}])})(),s("高级配置",[{title:"条件渲染",setter:"SwitchSetter",extraProps:{supportVariable:!0,getValue:e=>e.getNode().getExtraPropValue("condition"),setValue(e,t){e.getNode().setExtraProp("condition",t)}}}]);var d="component-module__button___Fmad4",u="component-module__sizeSmall___pu9QB",c="component-module__sizeMedium___YP7-2",_="component-module__sizeLarge___VQtJb",p="component-module__variantPrimary___Bk92-",m="component-module__variantSecondary___y8OzM",f="component-module__variantOutline___ozyNM",b="component-module__variantGhost___nLyDj",x="component-module__variantDanger___5iQMR",g="component-module__glow___deXRv";!function(e,t){void 0===t&&(t={});var o=t.insertAt;if("undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===o&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}(".component-module__button___Fmad4{align-items:center;border:none;cursor:pointer;display:inline-flex;font-weight:500;gap:8px;height:100%;justify-content:center;transition:all .2s ease;user-select:none;white-space:nowrap;width:100%}.component-module__button___Fmad4:disabled{cursor:not-allowed;opacity:.5}.component-module__sizeSmall___pu9QB{border-radius:4px;font-size:14px;padding:0 12px}.component-module__sizeMedium___YP7-2{border-radius:6px;font-size:14px;padding:0 16px}.component-module__sizeLarge___VQtJb{border-radius:8px;font-size:16px;padding:0 24px}.component-module__variantPrimary___Bk92-{background:linear-gradient(135deg,#00d4ff,#09c);box-shadow:0 2px 8px rgba(0,212,255,.3);color:#fff}.component-module__variantPrimary___Bk92-:hover:not(:disabled){box-shadow:0 4px 12px rgba(0,212,255,.4);transform:translateY(-1px)}.component-module__variantPrimary___Bk92-:active:not(:disabled){transform:translateY(0)}.component-module__variantSecondary___y8OzM{background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);color:#fff}.component-module__variantSecondary___y8OzM:hover:not(:disabled){background:hsla(0,0%,100%,.15);border-color:hsla(0,0%,100%,.3)}.component-module__variantOutline___ozyNM{background:transparent;border:1px solid #00d4ff;color:#00d4ff}.component-module__variantOutline___ozyNM:hover:not(:disabled){background:rgba(0,212,255,.1)}.component-module__variantGhost___nLyDj{background:transparent;color:#fff}.component-module__variantGhost___nLyDj:hover:not(:disabled){background:hsla(0,0%,100%,.1)}.component-module__variantDanger___5iQMR{background:linear-gradient(135deg,#ff4d4f,#c33);box-shadow:0 2px 8px rgba(255,77,79,.3);color:#fff}.component-module__variantDanger___5iQMR:hover:not(:disabled){box-shadow:0 4px 12px rgba(255,77,79,.4);transform:translateY(-1px)}.component-module__glow___deXRv{animation:component-module__buttonGlow___xuuYr 2s ease-in-out infinite}@keyframes component-module__buttonGlow___xuuYr{0%,to{box-shadow:0 0 5px currentColor,0 0 10px currentColor}50%{box-shadow:0 0 10px currentColor,0 0 20px currentColor}}");const y=({ref:e,$data:r,__dataSource:a,variant:s="primary",size:l="medium",disabled:y=!1,glowEnable:h=!1,href:v,target:k="_blank",loading:M=!1,loadingText:S="加载中...",rotation:w=0,opacity:P=100,background:C,onClick:V,onDoubleClick:j,onMouseEnter:z,onMouseLeave:E,style:N})=>{const D=function(e,o){return t.useMemo(()=>i(e,o),[e,o])}(r,a),B=t.useMemo(()=>D.length>0&&D[0]?.text?String(D[0].text):"",[D]),T=n(d,(e=>{switch(e){case"small":return u;case"medium":default:return c;case"large":return _}})(l),(e=>{switch(e){case"primary":default:return p;case"secondary":return m;case"outline":return f;case"ghost":return b;case"danger":return x}})(s),h&&g),L=M?S:B,O={transform:0!==w?`rotate(${w}deg)`:void 0,opacity:P/100,backgroundColor:C,...N};return o.jsx("button",{className:T,disabled:y||M,onClick:e=>{y||M||(v&&window.open(v,k),V?.(e))},onDoubleClick:j,onMouseEnter:z,onMouseLeave:E,ref:e,style:O,type:"button",children:L?o.jsx("span",{children:L}):null})};e.Button=y,e.default=y,Object.defineProperty(e,"__esModule",{value:!0})});
|
package/dist/index.min.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react/jsx-runtime")):"function"==typeof define&&define.amd?define(["exports","react/jsx-runtime"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).EasyEditorMaterialsButton={},e.jsxRuntime)}(this,function(e,t){"use strict";function
|
|
2
|
-
//# sourceMappingURL=index.min.js.map
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("react/jsx-runtime")):"function"==typeof define&&define.amd?define(["exports","react","react/jsx-runtime"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).EasyEditorMaterialsButton={},e.React,e.jsxRuntime)}(this,function(e,t,o){"use strict";function r(...e){const t=[];for(const o of e)if(o)if("string"==typeof o||"number"==typeof o)t.push(String(o));else if(Array.isArray(o)){const e=r(...o);e&&t.push(e)}else if("object"==typeof o)for(const[e,r]of Object.entries(o))r&&t.push(e);return t.join(" ")}const a=(e,t)=>{if(!t)return e;const o=t.split(".");let r=e;for(const e of o){if(null==r)return;if("object"!=typeof r)return;r=r[e]}return r},n=e=>void 0===e?[]:Array.isArray(e)?e:e&&"object"==typeof e?[e]:[],i=(e,t)=>{const o=((e,t)=>{if(!e)return[];if("static"===e.sourceType)return Array.isArray(e.staticData)?e.staticData:[];if("global"===e.sourceType&&e.datasourceId){const o=t?.page?.[e.datasourceId];return n(o)}if("datasource"===e.sourceType&&e.datasourceId){const o=t?.component?.[e.datasourceId];return n(o)}return[]})(e,t);return((e,t)=>t&&0!==t.length?e.map(e=>{const o={};for(const{componentField:r,sourceField:n}of t)r&&n&&(o[r]=a(e,n));return o}):e)(o,e?.fieldMappings)};const l=(e,t)=>{const o=Array.isArray(e)?e:[e],r=o[0]||{};return{sourceType:"static",staticData:o,fieldMappings:Object.keys(r).map(e=>({componentField:e,sourceField:e}))}},s=(e,t,o)=>({type:"group",title:e,setter:{componentName:"CollapseSetter",props:{icon:!1,...o}},items:t}),d={name:"nodeInfo",title:"节点信息",setter:"NodeInfoSetter",extraProps:{label:!1}},p=s("基础配置",[{name:"title",title:"标题",setter:"StringSetter",extraProps:{getValue:e=>e.getExtraPropValue("title"),setValue(e,t){e.setExtraPropValue("title",t)}}},{name:"rect",title:"位置尺寸",setter:"RectSetter",extraProps:{getValue:e=>e.getExtraPropValue("$dashboard.rect"),setValue(e,t){e.setExtraPropValue("$dashboard.rect",t)}}},{name:"rotation",title:"旋转角度",setter:{componentName:"SliderSetter",props:{min:0,max:360,suffix:"°"}},extraProps:{defaultValue:0}},{name:"opacity",title:"不透明度",setter:{componentName:"SliderSetter",props:{min:0,max:100,suffix:"%"}},extraProps:{defaultValue:100}},{name:"background",title:"背景颜色",setter:"ColorSetter",extraProps:{defaultValue:"transparent"}}]),u=[{title:"点击事件",children:[{label:"点击",value:"onClick",description:"鼠标点击时触发"},{label:"双击",value:"onDoubleClick",description:"鼠标双击时触发"}]},{title:"鼠标事件",children:[{label:"鼠标进入",value:"onMouseEnter",description:"鼠标进入时触发"},{label:"鼠标离开",value:"onMouseLeave",description:"鼠标离开时触发"}]}],c=((e=u)=>s("事件绑定",[{name:"events",title:"事件",setter:{componentName:"EventSetter",props:{events:e}},extraProps:{label:!1}}]))(),m=s("高级配置",[{title:"条件渲染",setter:"SwitchSetter",extraProps:{supportVariable:!0,getValue:e=>e.getNode().getExtraPropValue("condition"),setValue(e,t){e.getNode().setExtraProp("condition",t)}}}]);var _="component-module__button___Fmad4",f="component-module__sizeSmall___pu9QB",b="component-module__sizeMedium___YP7-2",g="component-module__sizeLarge___VQtJb",x="component-module__variantPrimary___Bk92-",y="component-module__variantSecondary___y8OzM",h="component-module__variantOutline___ozyNM",v="component-module__variantGhost___nLyDj",S="component-module__variantDanger___5iQMR",k="component-module__glow___deXRv";!function(e,t){void 0===t&&(t={});var o=t.insertAt;if("undefined"!=typeof document){var r=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css","top"===o&&r.firstChild?r.insertBefore(a,r.firstChild):r.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}}(".component-module__button___Fmad4{align-items:center;border:none;cursor:pointer;display:inline-flex;font-weight:500;gap:8px;height:100%;justify-content:center;transition:all .2s ease;user-select:none;white-space:nowrap;width:100%}.component-module__button___Fmad4:disabled{cursor:not-allowed;opacity:.5}.component-module__sizeSmall___pu9QB{border-radius:4px;font-size:14px;padding:0 12px}.component-module__sizeMedium___YP7-2{border-radius:6px;font-size:14px;padding:0 16px}.component-module__sizeLarge___VQtJb{border-radius:8px;font-size:16px;padding:0 24px}.component-module__variantPrimary___Bk92-{background:linear-gradient(135deg,#00d4ff,#09c);box-shadow:0 2px 8px rgba(0,212,255,.3);color:#fff}.component-module__variantPrimary___Bk92-:hover:not(:disabled){box-shadow:0 4px 12px rgba(0,212,255,.4);transform:translateY(-1px)}.component-module__variantPrimary___Bk92-:active:not(:disabled){transform:translateY(0)}.component-module__variantSecondary___y8OzM{background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);color:#fff}.component-module__variantSecondary___y8OzM:hover:not(:disabled){background:hsla(0,0%,100%,.15);border-color:hsla(0,0%,100%,.3)}.component-module__variantOutline___ozyNM{background:transparent;border:1px solid #00d4ff;color:#00d4ff}.component-module__variantOutline___ozyNM:hover:not(:disabled){background:rgba(0,212,255,.1)}.component-module__variantGhost___nLyDj{background:transparent;color:#fff}.component-module__variantGhost___nLyDj:hover:not(:disabled){background:hsla(0,0%,100%,.1)}.component-module__variantDanger___5iQMR{background:linear-gradient(135deg,#ff4d4f,#c33);box-shadow:0 2px 8px rgba(255,77,79,.3);color:#fff}.component-module__variantDanger___5iQMR:hover:not(:disabled){box-shadow:0 4px 12px rgba(255,77,79,.4);transform:translateY(-1px)}.component-module__glow___deXRv{animation:component-module__buttonGlow___xuuYr 2s ease-in-out infinite}@keyframes component-module__buttonGlow___xuuYr{0%,to{box-shadow:0 0 5px currentColor,0 0 10px currentColor}50%{box-shadow:0 0 10px currentColor,0 0 20px currentColor}}");const w="EasyEditorMaterialsButton";const P=((e,t)=>({props:[{type:"group",title:"属性",setter:"TabSetter",items:[{type:"group",key:"config",title:"配置",items:[d,p,e]},{type:"group",key:"data",title:"数据",items:[d,t]},{type:"group",key:"advanced",title:"高级",items:[d,c,m]}]}],component:{},supports:{},advanced:{}}))(s("组件配置",[{type:"group",title:"组件配置",setter:"SubTabSetter",items:[{type:"group",key:"style",title:"样式",items:[{name:"variant",title:"变体",setter:{componentName:"SelectSetter",props:{options:[{label:"主要",value:"primary"},{label:"次要",value:"secondary"},{label:"轮廓",value:"outline"},{label:"幽灵",value:"ghost"},{label:"危险",value:"danger"}]}},extraProps:{defaultValue:"primary"}},{name:"size",title:"尺寸",setter:{componentName:"SegmentedSetter",props:{options:[{label:"小",value:"small"},{label:"中",value:"medium"},{label:"大",value:"large"}]}},extraProps:{defaultValue:"medium"}},{name:"glowEnable",title:"发光效果",setter:"SwitchSetter",extraProps:{defaultValue:!1}}]},{type:"group",key:"behavior",title:"行为",items:[{name:"href",title:"链接地址",setter:"StringSetter"},{name:"target",title:"打开方式",setter:{componentName:"SegmentedSetter",props:{options:[{label:"新窗口",value:"_blank"},{label:"当前窗口",value:"_self"}]}},extraProps:{defaultValue:"_blank"}},{name:"disabled",title:"禁用",setter:"SwitchSetter",extraProps:{defaultValue:!1}},{name:"loading",title:"加载中",setter:"SwitchSetter",extraProps:{defaultValue:!1}},{name:"loadingText",title:"加载文本",setter:"StringSetter",extraProps:{defaultValue:"加载中..."}}]}]}],{padding:"6px 16px 12px"}),{name:"$data",title:"数据配置",setter:{componentName:"DataSetter",props:{expectedFields:[{name:"text",label:"text",type:"string",required:!0,description:"按钮文本"}],showPreview:!0,previewLimit:10}},extraProps:{label:!1}});const M={componentName:w,title:"按钮",group:"interaction",devMode:"proCode",npm:{package:"@easy-editor/materials-dashboard-button",version:"0.0.3",globalName:w,componentName:w},snippets:[{title:"主要按钮",screenshot:"",schema:{componentName:w,title:"主要按钮",props:{$data:l({text:"主要按钮"}),variant:"primary",size:"medium",rotation:0,opacity:100},$dashboard:{rect:{width:120,height:40}}}},{title:"发光按钮",screenshot:"",schema:{componentName:w,title:"发光按钮",props:{$data:l({text:"发光按钮"}),variant:"outline",size:"large",glowEnable:!0,rotation:0,opacity:100},$dashboard:{rect:{width:140,height:48}}}}],configure:P};e.component=({ref:e,$data:a,__dataSource:n,variant:l="primary",size:s="medium",disabled:d=!1,glowEnable:p=!1,href:u,target:c="_blank",loading:m=!1,loadingText:w="加载中...",rotation:P=0,opacity:M=100,background:V,onClick:N,onDoubleClick:z,onMouseEnter:E,onMouseLeave:C,style:j})=>{const D=function(e,o){return t.useMemo(()=>i(e,o),[e,o])}(a,n),T=t.useMemo(()=>D.length>0&&D[0]?.text?String(D[0].text):"",[D]),B=r(_,(e=>{switch(e){case"small":return f;case"medium":default:return b;case"large":return g}})(s),(e=>{switch(e){case"primary":default:return x;case"secondary":return y;case"outline":return h;case"ghost":return v;case"danger":return S}})(l),p&&k),A=m?w:T,L={transform:0!==P?`rotate(${P}deg)`:void 0,opacity:M/100,backgroundColor:V,...j};return o.jsx("button",{className:B,disabled:d||m,onClick:e=>{d||m||(u&&window.open(u,c),N?.(e))},onDoubleClick:z,onMouseEnter:E,onMouseLeave:C,ref:e,style:L,type:"button",children:A?o.jsx("span",{children:A}):null})},e.meta=M});
|
package/dist/meta.min.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).EasyEditorMaterialsButtonMeta={})}(this,function(e){"use strict";const t=
|
|
2
|
-
//# sourceMappingURL=meta.min.js.map
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).EasyEditorMaterialsButtonMeta={})}(this,function(e){"use strict";const t=(e,t)=>{const a=Array.isArray(e)?e:[e],r=a[0]||{};return{sourceType:"static",staticData:a,fieldMappings:Object.keys(r).map(e=>({componentField:e,sourceField:e}))}},a=(e,t,a)=>({type:"group",title:e,setter:{componentName:"CollapseSetter",props:{icon:!1,...a}},items:t}),r={name:"nodeInfo",title:"节点信息",setter:"NodeInfoSetter",extraProps:{label:!1}},o=a("基础配置",[{name:"title",title:"标题",setter:"StringSetter",extraProps:{getValue:e=>e.getExtraPropValue("title"),setValue(e,t){e.setExtraPropValue("title",t)}}},{name:"rect",title:"位置尺寸",setter:"RectSetter",extraProps:{getValue:e=>e.getExtraPropValue("$dashboard.rect"),setValue(e,t){e.setExtraPropValue("$dashboard.rect",t)}}},{name:"rotation",title:"旋转角度",setter:{componentName:"SliderSetter",props:{min:0,max:360,suffix:"°"}},extraProps:{defaultValue:0}},{name:"opacity",title:"不透明度",setter:{componentName:"SliderSetter",props:{min:0,max:100,suffix:"%"}},extraProps:{defaultValue:100}},{name:"background",title:"背景颜色",setter:"ColorSetter",extraProps:{defaultValue:"transparent"}}]),l=[{title:"点击事件",children:[{label:"点击",value:"onClick",description:"鼠标点击时触发"},{label:"双击",value:"onDoubleClick",description:"鼠标双击时触发"}]},{title:"鼠标事件",children:[{label:"鼠标进入",value:"onMouseEnter",description:"鼠标进入时触发"},{label:"鼠标离开",value:"onMouseLeave",description:"鼠标离开时触发"}]}],i=((e=l)=>a("事件绑定",[{name:"events",title:"事件",setter:{componentName:"EventSetter",props:{events:e}},extraProps:{label:!1}}]))(),n=a("高级配置",[{title:"条件渲染",setter:"SwitchSetter",extraProps:{supportVariable:!0,getValue:e=>e.getNode().getExtraPropValue("condition"),setValue(e,t){e.getNode().setExtraProp("condition",t)}}}]),s="EasyEditorMaterialsButton";const p=((e,t)=>({props:[{type:"group",title:"属性",setter:"TabSetter",items:[{type:"group",key:"config",title:"配置",items:[r,o,e]},{type:"group",key:"data",title:"数据",items:[r,t]},{type:"group",key:"advanced",title:"高级",items:[r,i,n]}]}],component:{},supports:{},advanced:{}}))(a("组件配置",[{type:"group",title:"组件配置",setter:"SubTabSetter",items:[{type:"group",key:"style",title:"样式",items:[{name:"variant",title:"变体",setter:{componentName:"SelectSetter",props:{options:[{label:"主要",value:"primary"},{label:"次要",value:"secondary"},{label:"轮廓",value:"outline"},{label:"幽灵",value:"ghost"},{label:"危险",value:"danger"}]}},extraProps:{defaultValue:"primary"}},{name:"size",title:"尺寸",setter:{componentName:"SegmentedSetter",props:{options:[{label:"小",value:"small"},{label:"中",value:"medium"},{label:"大",value:"large"}]}},extraProps:{defaultValue:"medium"}},{name:"glowEnable",title:"发光效果",setter:"SwitchSetter",extraProps:{defaultValue:!1}}]},{type:"group",key:"behavior",title:"行为",items:[{name:"href",title:"链接地址",setter:"StringSetter"},{name:"target",title:"打开方式",setter:{componentName:"SegmentedSetter",props:{options:[{label:"新窗口",value:"_blank"},{label:"当前窗口",value:"_self"}]}},extraProps:{defaultValue:"_blank"}},{name:"disabled",title:"禁用",setter:"SwitchSetter",extraProps:{defaultValue:!1}},{name:"loading",title:"加载中",setter:"SwitchSetter",extraProps:{defaultValue:!1}},{name:"loadingText",title:"加载文本",setter:"StringSetter",extraProps:{defaultValue:"加载中..."}}]}]}],{padding:"6px 16px 12px"}),{name:"$data",title:"数据配置",setter:{componentName:"DataSetter",props:{expectedFields:[{name:"text",label:"text",type:"string",required:!0,description:"按钮文本"}],showPreview:!0,previewLimit:10}},extraProps:{label:!1}});const u={componentName:s,title:"按钮",group:"interaction",devMode:"proCode",npm:{package:"@easy-editor/materials-dashboard-button",version:"0.0.3",globalName:s,componentName:s},snippets:[{title:"主要按钮",screenshot:"",schema:{componentName:s,title:"主要按钮",props:{$data:t({text:"主要按钮"}),variant:"primary",size:"medium",rotation:0,opacity:100},$dashboard:{rect:{width:120,height:40}}}},{title:"发光按钮",screenshot:"",schema:{componentName:s,title:"发光按钮",props:{$data:t({text:"发光按钮"}),variant:"outline",size:"large",glowEnable:!0,rotation:0,opacity:100},$dashboard:{rect:{width:140,height:48}}}}],configure:p};e.meta=u});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easy-editor/materials-dashboard-button",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Button component for EasyEditor dashboard",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -45,19 +45,15 @@
|
|
|
45
45
|
"@types/react-dom": "^18 || ^19"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@easy-editor/materials-shared": "0.0.
|
|
48
|
+
"@easy-editor/materials-shared": "0.0.1"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
|
-
"dev": "
|
|
51
|
+
"dev": "easypack dev",
|
|
52
52
|
"format": "biome format --write .",
|
|
53
53
|
"lint": "biome check .",
|
|
54
54
|
"build": "npm-run-all -nl build:*",
|
|
55
55
|
"build:clean": "rimraf dist/",
|
|
56
|
-
"build:js": "
|
|
57
|
-
"build:types": "pnpm types",
|
|
58
|
-
"types": "npm-run-all -nl types:*",
|
|
59
|
-
"types:src": "tsc --project tsconfig.build.json",
|
|
60
|
-
"test-types": "tsc --project tsconfig.test.json"
|
|
56
|
+
"build:js": "easypack build"
|
|
61
57
|
},
|
|
62
58
|
"module": "dist/index.esm.js",
|
|
63
59
|
"unpkg": "dist/index.min.js"
|
package/src/component.tsx
CHANGED
|
@@ -1,80 +1,139 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Button Component
|
|
3
|
-
* 按钮组件
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
-
import { cn } from '@easy-editor/materials-shared'
|
|
8
|
-
import styles from './component.module.css'
|
|
9
|
-
|
|
10
|
-
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
|
|
11
|
-
export type ButtonSize = 'small' | 'medium' | 'large'
|
|
12
|
-
|
|
13
|
-
export interface ButtonProps {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
case '
|
|
47
|
-
return styles.
|
|
48
|
-
|
|
49
|
-
return styles.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Button Component
|
|
3
|
+
* 按钮组件 - 支持数据源绑定和事件交互
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { useMemo, type CSSProperties, type MouseEvent } from 'react'
|
|
7
|
+
import { cn, type MaterialComponet, useDataSource } from '@easy-editor/materials-shared'
|
|
8
|
+
import styles from './component.module.css'
|
|
9
|
+
|
|
10
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
|
|
11
|
+
export type ButtonSize = 'small' | 'medium' | 'large'
|
|
12
|
+
|
|
13
|
+
export interface ButtonProps extends MaterialComponet<HTMLButtonElement> {
|
|
14
|
+
/** 按钮变体 */
|
|
15
|
+
variant?: ButtonVariant
|
|
16
|
+
/** 按钮尺寸 */
|
|
17
|
+
size?: ButtonSize
|
|
18
|
+
/** 是否禁用 */
|
|
19
|
+
disabled?: boolean
|
|
20
|
+
/** 是否显示发光效果 */
|
|
21
|
+
glowEnable?: boolean
|
|
22
|
+
/** 链接地址 */
|
|
23
|
+
href?: string
|
|
24
|
+
/** 链接打开方式 */
|
|
25
|
+
target?: '_blank' | '_self'
|
|
26
|
+
/** 是否加载中 */
|
|
27
|
+
loading?: boolean
|
|
28
|
+
/** 加载文本 */
|
|
29
|
+
loadingText?: string
|
|
30
|
+
/** 点击事件 */
|
|
31
|
+
onClick?: (e: MouseEvent<HTMLButtonElement>) => void
|
|
32
|
+
/** 双击事件 */
|
|
33
|
+
onDoubleClick?: (e: MouseEvent<HTMLButtonElement>) => void
|
|
34
|
+
/** 鼠标进入 */
|
|
35
|
+
onMouseEnter?: (e: MouseEvent<HTMLButtonElement>) => void
|
|
36
|
+
/** 鼠标离开 */
|
|
37
|
+
onMouseLeave?: (e: MouseEvent<HTMLButtonElement>) => void
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const getSizeClass = (size: ButtonSize): string => {
|
|
41
|
+
switch (size) {
|
|
42
|
+
case 'small':
|
|
43
|
+
return styles.sizeSmall
|
|
44
|
+
case 'medium':
|
|
45
|
+
return styles.sizeMedium
|
|
46
|
+
case 'large':
|
|
47
|
+
return styles.sizeLarge
|
|
48
|
+
default:
|
|
49
|
+
return styles.sizeMedium
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const getVariantClass = (variant: ButtonVariant): string => {
|
|
54
|
+
switch (variant) {
|
|
55
|
+
case 'primary':
|
|
56
|
+
return styles.variantPrimary
|
|
57
|
+
case 'secondary':
|
|
58
|
+
return styles.variantSecondary
|
|
59
|
+
case 'outline':
|
|
60
|
+
return styles.variantOutline
|
|
61
|
+
case 'ghost':
|
|
62
|
+
return styles.variantGhost
|
|
63
|
+
case 'danger':
|
|
64
|
+
return styles.variantDanger
|
|
65
|
+
default:
|
|
66
|
+
return styles.variantPrimary
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const Button: React.FC<ButtonProps> = ({
|
|
71
|
+
ref,
|
|
72
|
+
$data,
|
|
73
|
+
__dataSource,
|
|
74
|
+
variant = 'primary',
|
|
75
|
+
size = 'medium',
|
|
76
|
+
disabled = false,
|
|
77
|
+
glowEnable = false,
|
|
78
|
+
href,
|
|
79
|
+
target = '_blank',
|
|
80
|
+
loading = false,
|
|
81
|
+
loadingText = '加载中...',
|
|
82
|
+
rotation = 0,
|
|
83
|
+
opacity = 100,
|
|
84
|
+
background,
|
|
85
|
+
onClick,
|
|
86
|
+
onDoubleClick,
|
|
87
|
+
onMouseEnter,
|
|
88
|
+
onMouseLeave,
|
|
89
|
+
style: externalStyle,
|
|
90
|
+
}) => {
|
|
91
|
+
const dataSource = useDataSource($data, __dataSource)
|
|
92
|
+
const data = useMemo<string>(() => {
|
|
93
|
+
if (dataSource.length > 0 && dataSource[0]?.text) {
|
|
94
|
+
return String(dataSource[0].text)
|
|
95
|
+
}
|
|
96
|
+
return ''
|
|
97
|
+
}, [dataSource])
|
|
98
|
+
|
|
99
|
+
const buttonClass = cn(styles.button, getSizeClass(size), getVariantClass(variant), glowEnable && styles.glow)
|
|
100
|
+
|
|
101
|
+
const displayText = loading ? loadingText : data
|
|
102
|
+
|
|
103
|
+
const buttonStyle: CSSProperties = {
|
|
104
|
+
transform: rotation !== 0 ? `rotate(${rotation}deg)` : undefined,
|
|
105
|
+
opacity: opacity / 100,
|
|
106
|
+
backgroundColor: background,
|
|
107
|
+
...externalStyle,
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const handleClick = (e: MouseEvent<HTMLButtonElement>) => {
|
|
111
|
+
if (disabled || loading) {
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (href) {
|
|
116
|
+
window.open(href, target)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
onClick?.(e)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<button
|
|
124
|
+
className={buttonClass}
|
|
125
|
+
disabled={disabled || loading}
|
|
126
|
+
onClick={handleClick}
|
|
127
|
+
onDoubleClick={onDoubleClick}
|
|
128
|
+
onMouseEnter={onMouseEnter}
|
|
129
|
+
onMouseLeave={onMouseLeave}
|
|
130
|
+
ref={ref}
|
|
131
|
+
style={buttonStyle}
|
|
132
|
+
type='button'
|
|
133
|
+
>
|
|
134
|
+
{displayText ? <span>{displayText}</span> : null}
|
|
135
|
+
</button>
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export default Button
|