@xpyjs/gantt-core 0.0.1-alpha.0 → 0.0.1-alpha.1

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/dist/x-gantt.js CHANGED
@@ -5,7 +5,7 @@ import D from "dayjs";
5
5
  import { default as Be } from "dayjs";
6
6
  import { merge as Q, isArray as N, isString as F, isFunction as z, cloneDeep as B, isObject as gt, isNumber as At, omit as rt, throttle as ht, isBoolean as V, debounce as It } from "lodash-es";
7
7
  import S from "konva";
8
- const ft = "0.0.1-alpha.0";
8
+ const ft = "0.0.1-alpha.1";
9
9
  function Rt() {
10
10
  const g = "#eca710", t = "#ffffff", e = "#e7209e", i = "#ffffff", s = "#1c42e8";
11
11
  [
@@ -1,4 +1,4 @@
1
- (function(R,D){typeof exports=="object"&&typeof module<"u"?D(exports,require("dayjs"),require("lodash-es"),require("konva")):typeof define=="function"&&define.amd?define(["exports","dayjs","lodash-es","konva"],D):(R=typeof globalThis<"u"?globalThis:R||self,D(R.XGantt={},R.dayjs,R._,R.Konva))})(this,function(R,D,E,S){"use strict";var Oe=Object.defineProperty;var De=(R,D,E)=>D in R?Oe(R,D,{enumerable:!0,configurable:!0,writable:!0,value:E}):R[D]=E;var r=(R,D,E)=>De(R,typeof D!="symbol"?D+"":D,E);const it="0.0.1-alpha.0";function vt(){const f="#eca710",t="#ffffff",e="#e7209e",i="#ffffff",s="#1c42e8";[" __ __ _____ _____ _____ _____ _____ ","| | || __|| _ || | ||_ _||_ _|","|- -|| | || || | | | | | | | ","|__|__||_____||__|__||_|___| |_| |_| "].forEach(o=>{console.log(`%c${o}`,`color: ${f}; font-weight: bold; font-family: monospace;`)}),console.log(`%c 🚀 欢迎使用 XGantt %c Version: ${it} `,`background-color: ${e}; color: ${t}; padding: 2px 4px; border-radius: 6px 0 0 6px; font-weight: bold; margin: 4px 0;`,`background-color: ${s}; color: ${i}; padding: 2px 4px; border-radius: 0 6px 6px 0; font-weight: normal; margin: 4px 0;`)}const W=class W{static setOptions(t){W.options={...W.options,...t}}static getLevel(){return W.options.level}static debug(...t){W.logWithLevel(1,console.debug,...t)}static info(...t){W.logWithLevel(2,console.info,...t)}static warn(...t){W.logWithLevel(3,console.warn,...t)}static error(...t){W.logWithLevel(4,console.error,...t)}static assert(t,...e){if(!t&&W.options.level<=4){const i=W.formatArgs("Assertion failed:",...e);console.error(...i)}}static getMessage(...t){return W.formatArgs(...t).join("")}static exception(...t){return new Error(W.getMessage(...t))}static logWithLevel(t,e,...i){if(W.options.level<=t){const s=W.formatArgs(...i);e(...s)}}static formatArgs(...t){const e=[W.Prefix];return W.options.showTimestamp&&e.unshift(`[${D().format("YYYY-MM-DD HH:mm:ss.SSS")}]`),[e.join(""),...t]}};r(W,"Prefix","[XGantt]"),r(W,"options",{level:2,showTimestamp:!1});let C=W;const V=()=>({data:[],links:{show:!1,key:"id",data:[],distance:20,dash:[6,3],width:1,gap:5,arrow:{width:6,height:8},radius:3,create:{enabled:!1,mode:"hover",radius:3,width:2,from:!0,to:!0}},fields:{id:"id",startTime:"startTime",endTime:"endTime",name:"name",progress:"progress",children:"children"},selection:{enabled:!1,includeSelf:!0},expand:{show:!0,enabled:!0},dateFormat:"YYYY-MM-DD HH:mm:ss",locale:"en",unit:"day",table:{width:100,ellipsis:!0,align:"center",headerAlign:"center",emptyText:"-"},chart:{autoCellWidth:!1,cellWidth:"normal"},primaryColor:"#eca710",border:{color:"#e5e5e5"},header:{height:80,color:"#000",fontSize:14,fontWeight:600,fontFamily:"Arial"},row:{height:30,indent:16,hover:{backgroundColor:"#000",opacity:.05},select:{backgroundColor:"#000",opacity:.1}},bar:{height:20,move:{byUnit:!1,link:{child:"none",parent:"none"}}},today:{show:!0,type:"line",backgroundColor:"lightblue",opacity:1,width:1},weekend:{show:!0,backgroundColor:"#c9c9c9",opacity:.1},holiday:{opacity:.1}});class St{constructor(){r(this,"options",V())}getOptions(){return this.options}setOptions(t,e={merge:!0}){var i;this.options=e.merge?E.merge(V(),this.options,t):E.merge(V(),t),E.isArray((i=t.links)==null?void 0:i.data)&&(this.options.links.data=t.links.data)}update(t){this.setOptions(t)}getRowBackgroundColor(t){var s;let e="";const i=(s=this.options.row)==null?void 0:s.backgroundColor;return E.isString(i)?e=i:E.isArray(i)&&i.length>0?e=i[t.level]:E.isFunction(i)&&(e=i(t.getEmitData())),e}}class kt{constructor(){r(this,"events",new Map)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}off(t,e){var i;this.events.has(t)&&this.events.set(t,((i=this.events.get(t))==null?void 0:i.filter(s=>s!==e))||[])}offAll(){this.events.clear()}}var b=(f=>(f.COLUMN_WIDTH_CHANGE="column-width-change",f.MOVE_GUIDELINE="move-guideline",f.SHOW_GUIDELINE="show-guideline",f.HIDE_GUIDELINE="hide-guideline",f.SCROLL="scroll",f.CHART_OFFSET_CHANGE="chart_offset_change",f.DATA_UPDATE="data-update",f.VIEW_UPDATE="view-update",f.UPDATE_TABLE_HEADER="update_table_header",f.UPDATE_TABLE_BODY="update_table_body",f.UPDATE_CHART_HEADER="update_chart_header",f.UPDATE_TASK="update_task",f.UPDATE_LINK="update_link",f.CREATE_LINK="create_link",f.TASK_SELECTED="task_selected",f.TASK_UNSELECTED="task_unselected",f.SELECT_LINK="select_link",f.CHECK_TASK="check_task",f.ROW_CLICK="row-click",f.ROW_DBL_CLICK="row-dbl-click",f.ROW_CONTEXTMENU="row-contextmenu",f.SLIDER_CLICK="slider-click",f.SLIDER_DBL_CLICK="slider-dbl-click",f.SLIDER_CONTEXTMENU="slider-contextmenu",f.ROW_HIGHLIGHT="row-highlight",f.ROW_UNHIGHLIGHT="row-unhighlight",f.TASK_DRAG_START="task-drag-start",f.TASK_DRAG_MOVE="task-drag-move",f.TASK_DRAG_END="task-drag-end",f.ERROR="error",f))(b||{}),N=(f=>(f.LINK_NOT_ALLOWED="link:not-allowed",f.LINK_SAME="link:same",f.LINK_EXIST="link:exist",f))(N||{});function U(){return Math.random().toString(36).substring(2,15)}class q{constructor(t,e,i,s,n){r(this,"__key__",U());r(this,"id");r(this,"name");r(this,"startTime");r(this,"endTime");r(this,"progress");r(this,"expanded");r(this,"children");r(this,"parent");r(this,"level");r(this,"flatIndex");r(this,"data");r(this,"fields");this.store=t,this.event=e,this.fields=this.store.getOptionManager().getOptions().fields,this.id=n||i[this.fields.id]||U(),this.data=i,this.name=i[this.fields.name]||"";const o=i[this.fields.startTime];this.startTime=o?D(o):void 0;const h=i[this.fields.endTime];this.endTime=h?D(h):void 0,this.progress=i[this.fields.progress],this.expanded=this.store.getOptionManager().getOptions().expand.show?this.store.getOptionManager().getOptions().expand.enabled:!0,this.children=[],this.level=s&&s.level!==void 0?s.level+1:0,this.parent=s,this.flatIndex=0,this.store.updateTime(this.startTime,this.endTime)}getField(t){if(!t||E.isString(t)&&t.trim()==="")return;if(!t.includes("."))return this.data[t];const e=t.split(".");let i=this.data;for(let s=0;s<e.length;s++){const n=e[s];if(i==null||typeof i!="object"||!(n in i))return;i=i[n]}return E.isObject(i)?E.cloneDeep(i):i}updateData(t){this.data=t,t[this.fields.name]&&(this.name=t[this.fields.name]),t[this.fields.startTime]&&(this.startTime=D(t[this.fields.startTime])),t[this.fields.endTime]&&(this.endTime=D(t[this.fields.endTime])),t[this.fields.progress]!==void 0&&(this.progress=t[this.fields.progress]),this.event.emit(b.UPDATE_TASK,this)}updateTime(t,e){var s,n;this.startTime=t,this.endTime=e;const i=(n=(s=this.store)==null?void 0:s.getOptionManager().getOptions())==null?void 0:n.dateFormat;this.data[this.fields.startTime||"startTime"]=this.startTime.format(i),this.data[this.fields.endTime||"endTime"]=this.endTime.format(i),this.event.emit(b.UPDATE_TASK,this)}clone(){return new q(this.store,this.event,E.cloneDeep(this.data),this.parent,this.id)}getEmitData(){return{data:this.data,$index:this.flatIndex,level:this.level+1}}getAllChildren(){const t=[],e=i=>{i.forEach(s=>{t.push(s),E.isArray(s.children)&&s.children.length>0&&e(s.children)})};return e(this.children),t}}class Lt{constructor(t,e){r(this,"rawData",[]);r(this,"tasks",[]);r(this,"taskMap",new Map);r(this,"visibleTasksCache",[]);r(this,"isDirty",!0);r(this,"collapsedTaskIds",new Set);r(this,"selectedTaskId",null);r(this,"checkedList",[]);r(this,"dataLevel",0);this.store=t,this.event=e}setData(t,e=!1){this.rawData=t,this.initTasks(e),this.invalidateCache(),this.event.emit(b.DATA_UPDATE)}initTasks(t=!1){this.dataLevel=0,t?(this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))})):this.updateTask(this.rawData,this.tasks)}createTask(t,e){const i=this.store.getOptionManager().getOptions().fields,s=new q(this.store,this.event,t,e);return Array.isArray(t[i.children])&&(s.children=t[i.children].map(n=>this.createTask(n,s))),this.taskMap.set(s.id,s),this.dataLevel=Math.max(this.dataLevel,s.level),s}updateTask(t,e,i){let s=0;for(;s<t.length;){const n=t[s],o=e[s];if(n&&!o){const h=this.createTask(n,i);e.push(h),this.taskMap.set(h.id,h),this.dataLevel=Math.max(this.dataLevel,h.level)}else!n&&o?(this.taskMap.delete(o.id),e.splice(s,1)):n&&o&&(n[this.store.getOptionManager().getOptions().fields.id]===o.id?(o.updateData(n),this.dataLevel=Math.max(this.dataLevel,o.level)):(this.taskMap.delete(o.id),e[s]=this.createTask(n,o.parent),this.taskMap.set(e[s].id,e[s]),this.dataLevel=Math.max(this.dataLevel,e[s].level)));if(n[this.store.getOptionManager().getOptions().fields.children]){const h=n[this.store.getOptionManager().getOptions().fields.children];if(o&&o.children)this.updateTask(h,o.children,o.parent);else{const a=h.map(d=>this.createTask(d,e[s]));e[s].children=a}}else o&&o.children&&(o.children=[]);s++}}getData(){return this.rawData}getTasks(t=!0){return t?this.tasks:Array.from(this.taskMap.values())}getTaskById(t){return this.taskMap.get(t)}expandTask(t,e=!1){const i=this.getTaskById(t);return i?(i.expanded=!i.expanded,i.expanded?this.collapsedTaskIds.delete(i.id):this.collapsedTaskIds.add(i.id),e&&i.children&&i.children.length>0&&i.children.forEach(s=>{this.expandTask(s.id,e)}),this.invalidateCache(),this.event.emit(b.VIEW_UPDATE),!0):!1}getVisibleTasks(){if(!this.isDirty&&this.visibleTasksCache.length>0)return this.visibleTasksCache;const t=[];let e=0;const i=(s,n)=>{this.collapsedTaskIds.has(s.id)&&s.expanded&&(s.expanded=!1),s.flatIndex=e++,t.push(s),s.expanded&&s.children&&s.children.length>0&&s.children.forEach(o=>i(o))};return this.tasks.forEach(s=>i(s)),this.visibleTasksCache=t,this.isDirty=!1,t}getVisibleSize(){return this.getVisibleTasks().length}isTaskVisible(t){return this.getVisibleTasks().some(e=>e.id===t.id)}clear(){this.rawData=[],this.tasks=[],this.taskMap.clear(),this.visibleTasksCache=[],this.isDirty=!0,this.collapsedTaskIds.clear(),this.event.emit(b.DATA_UPDATE)}invalidateCache(){this.isDirty=!0}selectTask(t){const e=this.getTaskById(t);return e?(this.selectedTaskId===t||(this.unselectTask(),this.selectedTaskId=t,this.event.emit(b.TASK_SELECTED,e)),!0):!1}unselectTask(){if(this.selectedTaskId){const t=this.selectedTaskId;this.selectedTaskId=null,this.event.emit(b.TASK_UNSELECTED,t)}}isTaskSelected(t){return this.selectedTaskId===t}getSelectedTask(){return this.selectedTaskId?this.getTaskById(this.selectedTaskId):void 0}getCheckedList(){return this.checkedList}updateCheckedList(t,e){const i=this.checkedList.findIndex(s=>s.id===e.id);t?i===-1?this.checkedList.push(e):this.checkedList.splice(i,1,e):i!==-1&&this.checkedList.splice(i,1)}toggleAllChecked(t){t?this.checkedList=this.getVisibleTasks().slice():this.checkedList=[]}isTaskChecked(t){return this.checkedList.findIndex(e=>e.id===t.id)!==-1}updateTaskTime(t,e,i,s,n=[]){let o=e,h=i;const a=this.store.getOptionManager().getOptions().bar.move.link.child,d=this.store.getOptionManager().getOptions().bar.move.link.parent,u=this.store.getTimeAxis().getCellUnit();let l=t.parent;for(;d!=="none"&&l;){if(d==="expand"){let p=l.startTime||o,m=l.endTime||h;(!l.startTime||o.isBefore(l.startTime))&&(p=o),(!l.endTime||h.isAfter(l.endTime))&&(m=h),(l.startTime===void 0||l.endTime===void 0||!p.isSame(l.startTime)||!m.isSame(l.endTime))&&(n.findIndex(g=>g.id===l.id)===-1&&n.push(l.clone()),l.updateTime(p,m))}else d==="strict"&&(l.startTime&&o.isBefore(l.startTime)&&(o=l.startTime,h.isSameOrBefore(o)&&(h=o.add(1,u))),l.endTime&&h.isAfter(l.endTime)&&(h=l.endTime,o.isAfter(h)&&(o=h.subtract(1,u))));l=l.parent}let c=t.children||[];for(;a!=="none"&&c.length>0;){const p=[];c.forEach(m=>{let g=m.startTime||o,x=m.endTime||h,T=o.diff(t.startTime),v=h.diff(t.endTime);a==="scale"?s==="both"?(n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g.add(T),x.add(v))):s==="left"?(g=g.add(T),g.isSameOrAfter(x.subtract(1,u))&&(x.isBefore(t.endTime)?x=g.add(1,u):g=x.subtract(1,u),g.isSameOrBefore(o)&&(o=g)),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x)):s==="right"&&(x=x.add(v),x.isSameOrBefore(g.add(1,u))&&(g.isAfter(t.startTime)?g=x.subtract(1,u):x=g.add(1,u)),x.isSameOrAfter(h)&&(h=x),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x)):a==="fixed"&&(s==="both"?(n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g.add(T),x.add(v))):s==="left"?g.isSameOrBefore(o)&&(g=o,g.isSameOrAfter(x.subtract(1,u))&&(x.isBefore(t.endTime)?x=g.add(1,u):g=x.subtract(1,u),g.isSameOrBefore(o)&&(o=g)),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x)):s==="right"&&x.isSameOrAfter(h)&&(x=h,x.isSameOrBefore(g.add(1,u))&&(g.isAfter(t.startTime)?g=x.subtract(1,u):x=g.add(1,u)),x.isSameOrAfter(h)&&(h=x),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x))),m.children&&m.children.length>0&&p.push(...m.children)}),c=p}n.findIndex(p=>p.id===t.id)===-1&&n.push(t.clone()),t.updateTime(o,h)}}function A(f,t,e){if(!Number.isFinite(f)||!Number.isFinite(t)||!Number.isFinite(e))return Number.isFinite(t)?t:0;const i=Math.min(t,e),s=Math.max(t,e);return Math.min(Math.max(i,f),s)}function st(f,t){let e=f;return E.isString(e)&&(/%$/.test(e)?e=t*parseFloat(e)/100:e=parseFloat(e)),isNaN(e)?0:e}function nt(f,t){if(t===0)throw new Error("基准值不能为0");if(Math.abs(f)<=t/2)return 0;const e=Math.floor(f/t),i=Math.ceil(f/t),s=e*t,n=i*t,o=Math.abs(f-s),h=Math.abs(f-n);return o<=h?s:n}function Q(f,t=4){return typeof f=="number"?[f,f,f,f]:Array.isArray(f)?[f[0]??t,f[1]??t,f[2]??t,f[3]??t]:[t,t,t,t]}function Et(f,t=100){if(!Number.isFinite(f)||!Number.isFinite(t)||t===0||f<0)return 0;const e=f/Math.abs(t);return Math.min(e,1)}function Mt(f,t=2,e=!1){const i=f.toFixed(t);return e?i:i.replace(/\.?0+$/,"")}function Ct(f){var s;if(typeof f=="object"&&f!==null)return{r:A(f.r??0,0,255),g:A(f.g??0,0,255),b:A(f.b??0,0,255),a:A(f.a??1,0,1)};if(typeof f!="string")return C.warn(`Invalid color value type: ${typeof f}`),null;let t=f.trim();const e=(s=document==null?void 0:document.createElement("canvas"))==null?void 0:s.getContext("2d");if(e&&(e.fillStyle=t,t=e.fillStyle),t.startsWith("#")){const n=t.slice(1);let o,h,a,d,u=1;try{o=parseInt(n,16)}catch{return C.warn(`Invalid hex color: ${f}`),null}if(n.length===3)h=(o>>8&15)*17,a=(o>>4&15)*17,d=(o&15)*17;else if(n.length===6)h=o>>16&255,a=o>>8&255,d=o&255;else if(n.length===8)h=o>>24&255,a=o>>16&255,d=o>>8&255,u=(o&255)/255;else return C.warn(`Invalid hex color length: ${f}`),null;return{r:h,g:a,b:d,a:u}}let i=t.match(/rgba?\(\s*(\d+%?)\s*,\s*(\d+%?)\s*,\s*(\d+%?)\s*(?:,\s*([\d.]+)\s*)?\)/i);if(i){const n=o=>o.endsWith("%")?A(parseFloat(o)/100*255,0,255):A(parseInt(o,10),0,255);return{r:n(i[1]),g:n(i[2]),b:n(i[3]),a:i[4]!==void 0?A(parseFloat(i[4]),0,1):1}}return C.warn(`Could not parse color: ${f}`),null}function Ot(f,t,e,i,s=!1,n=!1){const o=c=>{const p=Math.round(A(c,0,255)).toString(16);return p.length===1?"0"+p:p},h=o(f),a=o(t),d=o(e),u=o(i*255);if(s&&h[0]===h[1]&&a[0]===a[1]&&d[0]===d[1]&&i===1&&!n)return`#${h[0]}${a[0]}${d[0]}`;const l=`#${h}${a}${d}`;return n||i<1?`${l}${u}`:l}class X{constructor(t){r(this,"_r");r(this,"_g");r(this,"_b");r(this,"_a");const e=Ct(t);e===null?(C.error(`Failed to parse color: ${t}. Using default black.`),this._r=0,this._g=0,this._b=0,this._a=1):(this._r=Math.round(e.r),this._g=Math.round(e.g),this._b=Math.round(e.b),this._a=e.a)}get R(){return this._r}get G(){return this._g}get B(){return this._b}get A(){return this._a}red(t){return t===void 0?this._r:(this._r=Math.round(A(t,0,255)),this)}green(t){return t===void 0?this._g:(this._g=Math.round(A(t,0,255)),this)}blue(t){return t===void 0?this._b:(this._b=Math.round(A(t,0,255)),this)}alpha(t){return t===void 0?this._a:(this._a=A(t,0,1),this)}toHex(t=!1,e=!1){return Ot(this._r,this._g,this._b,this._a,t,e)}toRgb(){const t=Math.round(this._r),e=Math.round(this._g),i=Math.round(this._b);if(this._a===1)return`rgb(${t}, ${e}, ${i})`;{const s=parseFloat(this._a.toFixed(2));return`rgba(${t}, ${e}, ${i}, ${s})`}}toObject(){return{r:this._r,g:this._g,b:this._b,a:this._a}}toString(){return this.toRgb()}brighten(t=10){if(t<0)return this.darken(-t);const e=A(t,0,100)/100;return this._r=Math.round(A(this._r+(255-this._r)*e,0,255)),this._g=Math.round(A(this._g+(255-this._g)*e,0,255)),this._b=Math.round(A(this._b+(255-this._b)*e,0,255)),this}darken(t=10){if(t<0)return this.brighten(-t);const e=A(t,0,100)/100;return this._r=Math.round(A(this._r*(1-e),0,255)),this._g=Math.round(A(this._g*(1-e),0,255)),this._b=Math.round(A(this._b*(1-e),0,255)),this}isLight(){return(this._r*299+this._g*587+this._b*114)/1e3>128}isDark(){return!this.isLight()}mix(t,e=50){const i=A(e,0,100)/100,s=$(t);return this._r=Math.round(A(this._r*(1-i)+s.R*i,0,255)),this._g=Math.round(A(this._g*(1-i)+s.G*i,0,255)),this._b=Math.round(A(this._b*(1-i)+s.B*i,0,255)),this._a=A(this._a*(1-i)+s.A*i,0,1),this}clone(){return new X({r:this._r,g:this._g,b:this._b,a:this._a})}static extend(t,e){typeof t=="function"?t(e,X,$):C.warn("Invalid plugin provided to Colorjs.extend. Expected a function.")}}const $=f=>f instanceof X?f:new X(f);class ot{constructor(t,e,i){r(this,"element");r(this,"iconElement");r(this,"_state",0);r(this,"options");var o;this.context=t,this.container=e,this.task=i;const n=(this.task?this.context.store.getDataManager().isTaskChecked(this.task):!1)?1:0;this.options={initialState:n,size:14},this.element=document.createElement("div"),this.iconElement=document.createElement("div"),this._state=this.options.initialState,this.createElement(),this.updateIcon(),this.bindEvents(),this.registerEvents(),(o=this.container)==null||o.appendChild(this.element)}createElement(){this.element.className="x-gantt-checkbox",this.element.style.width=`${this.options.size}px`,this.element.style.height=`${this.options.size}px`,this.element.style.setProperty("border",`1px solid ${this.context.store.getOptionManager().getOptions().border.color}`,"important"),this.iconElement.className="x-gantt-checkbox__icon",this.iconElement.style.cssText=`
1
+ (function(R,D){typeof exports=="object"&&typeof module<"u"?D(exports,require("dayjs"),require("lodash-es"),require("konva")):typeof define=="function"&&define.amd?define(["exports","dayjs","lodash-es","konva"],D):(R=typeof globalThis<"u"?globalThis:R||self,D(R.XGantt={},R.dayjs,R._,R.Konva))})(this,function(R,D,E,S){"use strict";var Oe=Object.defineProperty;var De=(R,D,E)=>D in R?Oe(R,D,{enumerable:!0,configurable:!0,writable:!0,value:E}):R[D]=E;var r=(R,D,E)=>De(R,typeof D!="symbol"?D+"":D,E);const it="0.0.1-alpha.1";function vt(){const f="#eca710",t="#ffffff",e="#e7209e",i="#ffffff",s="#1c42e8";[" __ __ _____ _____ _____ _____ _____ ","| | || __|| _ || | ||_ _||_ _|","|- -|| | || || | | | | | | | ","|__|__||_____||__|__||_|___| |_| |_| "].forEach(o=>{console.log(`%c${o}`,`color: ${f}; font-weight: bold; font-family: monospace;`)}),console.log(`%c 🚀 欢迎使用 XGantt %c Version: ${it} `,`background-color: ${e}; color: ${t}; padding: 2px 4px; border-radius: 6px 0 0 6px; font-weight: bold; margin: 4px 0;`,`background-color: ${s}; color: ${i}; padding: 2px 4px; border-radius: 0 6px 6px 0; font-weight: normal; margin: 4px 0;`)}const W=class W{static setOptions(t){W.options={...W.options,...t}}static getLevel(){return W.options.level}static debug(...t){W.logWithLevel(1,console.debug,...t)}static info(...t){W.logWithLevel(2,console.info,...t)}static warn(...t){W.logWithLevel(3,console.warn,...t)}static error(...t){W.logWithLevel(4,console.error,...t)}static assert(t,...e){if(!t&&W.options.level<=4){const i=W.formatArgs("Assertion failed:",...e);console.error(...i)}}static getMessage(...t){return W.formatArgs(...t).join("")}static exception(...t){return new Error(W.getMessage(...t))}static logWithLevel(t,e,...i){if(W.options.level<=t){const s=W.formatArgs(...i);e(...s)}}static formatArgs(...t){const e=[W.Prefix];return W.options.showTimestamp&&e.unshift(`[${D().format("YYYY-MM-DD HH:mm:ss.SSS")}]`),[e.join(""),...t]}};r(W,"Prefix","[XGantt]"),r(W,"options",{level:2,showTimestamp:!1});let C=W;const V=()=>({data:[],links:{show:!1,key:"id",data:[],distance:20,dash:[6,3],width:1,gap:5,arrow:{width:6,height:8},radius:3,create:{enabled:!1,mode:"hover",radius:3,width:2,from:!0,to:!0}},fields:{id:"id",startTime:"startTime",endTime:"endTime",name:"name",progress:"progress",children:"children"},selection:{enabled:!1,includeSelf:!0},expand:{show:!0,enabled:!0},dateFormat:"YYYY-MM-DD HH:mm:ss",locale:"en",unit:"day",table:{width:100,ellipsis:!0,align:"center",headerAlign:"center",emptyText:"-"},chart:{autoCellWidth:!1,cellWidth:"normal"},primaryColor:"#eca710",border:{color:"#e5e5e5"},header:{height:80,color:"#000",fontSize:14,fontWeight:600,fontFamily:"Arial"},row:{height:30,indent:16,hover:{backgroundColor:"#000",opacity:.05},select:{backgroundColor:"#000",opacity:.1}},bar:{height:20,move:{byUnit:!1,link:{child:"none",parent:"none"}}},today:{show:!0,type:"line",backgroundColor:"lightblue",opacity:1,width:1},weekend:{show:!0,backgroundColor:"#c9c9c9",opacity:.1},holiday:{opacity:.1}});class St{constructor(){r(this,"options",V())}getOptions(){return this.options}setOptions(t,e={merge:!0}){var i;this.options=e.merge?E.merge(V(),this.options,t):E.merge(V(),t),E.isArray((i=t.links)==null?void 0:i.data)&&(this.options.links.data=t.links.data)}update(t){this.setOptions(t)}getRowBackgroundColor(t){var s;let e="";const i=(s=this.options.row)==null?void 0:s.backgroundColor;return E.isString(i)?e=i:E.isArray(i)&&i.length>0?e=i[t.level]:E.isFunction(i)&&(e=i(t.getEmitData())),e}}class kt{constructor(){r(this,"events",new Map)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}off(t,e){var i;this.events.has(t)&&this.events.set(t,((i=this.events.get(t))==null?void 0:i.filter(s=>s!==e))||[])}offAll(){this.events.clear()}}var b=(f=>(f.COLUMN_WIDTH_CHANGE="column-width-change",f.MOVE_GUIDELINE="move-guideline",f.SHOW_GUIDELINE="show-guideline",f.HIDE_GUIDELINE="hide-guideline",f.SCROLL="scroll",f.CHART_OFFSET_CHANGE="chart_offset_change",f.DATA_UPDATE="data-update",f.VIEW_UPDATE="view-update",f.UPDATE_TABLE_HEADER="update_table_header",f.UPDATE_TABLE_BODY="update_table_body",f.UPDATE_CHART_HEADER="update_chart_header",f.UPDATE_TASK="update_task",f.UPDATE_LINK="update_link",f.CREATE_LINK="create_link",f.TASK_SELECTED="task_selected",f.TASK_UNSELECTED="task_unselected",f.SELECT_LINK="select_link",f.CHECK_TASK="check_task",f.ROW_CLICK="row-click",f.ROW_DBL_CLICK="row-dbl-click",f.ROW_CONTEXTMENU="row-contextmenu",f.SLIDER_CLICK="slider-click",f.SLIDER_DBL_CLICK="slider-dbl-click",f.SLIDER_CONTEXTMENU="slider-contextmenu",f.ROW_HIGHLIGHT="row-highlight",f.ROW_UNHIGHLIGHT="row-unhighlight",f.TASK_DRAG_START="task-drag-start",f.TASK_DRAG_MOVE="task-drag-move",f.TASK_DRAG_END="task-drag-end",f.ERROR="error",f))(b||{}),N=(f=>(f.LINK_NOT_ALLOWED="link:not-allowed",f.LINK_SAME="link:same",f.LINK_EXIST="link:exist",f))(N||{});function U(){return Math.random().toString(36).substring(2,15)}class q{constructor(t,e,i,s,n){r(this,"__key__",U());r(this,"id");r(this,"name");r(this,"startTime");r(this,"endTime");r(this,"progress");r(this,"expanded");r(this,"children");r(this,"parent");r(this,"level");r(this,"flatIndex");r(this,"data");r(this,"fields");this.store=t,this.event=e,this.fields=this.store.getOptionManager().getOptions().fields,this.id=n||i[this.fields.id]||U(),this.data=i,this.name=i[this.fields.name]||"";const o=i[this.fields.startTime];this.startTime=o?D(o):void 0;const h=i[this.fields.endTime];this.endTime=h?D(h):void 0,this.progress=i[this.fields.progress],this.expanded=this.store.getOptionManager().getOptions().expand.show?this.store.getOptionManager().getOptions().expand.enabled:!0,this.children=[],this.level=s&&s.level!==void 0?s.level+1:0,this.parent=s,this.flatIndex=0,this.store.updateTime(this.startTime,this.endTime)}getField(t){if(!t||E.isString(t)&&t.trim()==="")return;if(!t.includes("."))return this.data[t];const e=t.split(".");let i=this.data;for(let s=0;s<e.length;s++){const n=e[s];if(i==null||typeof i!="object"||!(n in i))return;i=i[n]}return E.isObject(i)?E.cloneDeep(i):i}updateData(t){this.data=t,t[this.fields.name]&&(this.name=t[this.fields.name]),t[this.fields.startTime]&&(this.startTime=D(t[this.fields.startTime])),t[this.fields.endTime]&&(this.endTime=D(t[this.fields.endTime])),t[this.fields.progress]!==void 0&&(this.progress=t[this.fields.progress]),this.event.emit(b.UPDATE_TASK,this)}updateTime(t,e){var s,n;this.startTime=t,this.endTime=e;const i=(n=(s=this.store)==null?void 0:s.getOptionManager().getOptions())==null?void 0:n.dateFormat;this.data[this.fields.startTime||"startTime"]=this.startTime.format(i),this.data[this.fields.endTime||"endTime"]=this.endTime.format(i),this.event.emit(b.UPDATE_TASK,this)}clone(){return new q(this.store,this.event,E.cloneDeep(this.data),this.parent,this.id)}getEmitData(){return{data:this.data,$index:this.flatIndex,level:this.level+1}}getAllChildren(){const t=[],e=i=>{i.forEach(s=>{t.push(s),E.isArray(s.children)&&s.children.length>0&&e(s.children)})};return e(this.children),t}}class Lt{constructor(t,e){r(this,"rawData",[]);r(this,"tasks",[]);r(this,"taskMap",new Map);r(this,"visibleTasksCache",[]);r(this,"isDirty",!0);r(this,"collapsedTaskIds",new Set);r(this,"selectedTaskId",null);r(this,"checkedList",[]);r(this,"dataLevel",0);this.store=t,this.event=e}setData(t,e=!1){this.rawData=t,this.initTasks(e),this.invalidateCache(),this.event.emit(b.DATA_UPDATE)}initTasks(t=!1){this.dataLevel=0,t?(this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))})):this.updateTask(this.rawData,this.tasks)}createTask(t,e){const i=this.store.getOptionManager().getOptions().fields,s=new q(this.store,this.event,t,e);return Array.isArray(t[i.children])&&(s.children=t[i.children].map(n=>this.createTask(n,s))),this.taskMap.set(s.id,s),this.dataLevel=Math.max(this.dataLevel,s.level),s}updateTask(t,e,i){let s=0;for(;s<t.length;){const n=t[s],o=e[s];if(n&&!o){const h=this.createTask(n,i);e.push(h),this.taskMap.set(h.id,h),this.dataLevel=Math.max(this.dataLevel,h.level)}else!n&&o?(this.taskMap.delete(o.id),e.splice(s,1)):n&&o&&(n[this.store.getOptionManager().getOptions().fields.id]===o.id?(o.updateData(n),this.dataLevel=Math.max(this.dataLevel,o.level)):(this.taskMap.delete(o.id),e[s]=this.createTask(n,o.parent),this.taskMap.set(e[s].id,e[s]),this.dataLevel=Math.max(this.dataLevel,e[s].level)));if(n[this.store.getOptionManager().getOptions().fields.children]){const h=n[this.store.getOptionManager().getOptions().fields.children];if(o&&o.children)this.updateTask(h,o.children,o.parent);else{const a=h.map(d=>this.createTask(d,e[s]));e[s].children=a}}else o&&o.children&&(o.children=[]);s++}}getData(){return this.rawData}getTasks(t=!0){return t?this.tasks:Array.from(this.taskMap.values())}getTaskById(t){return this.taskMap.get(t)}expandTask(t,e=!1){const i=this.getTaskById(t);return i?(i.expanded=!i.expanded,i.expanded?this.collapsedTaskIds.delete(i.id):this.collapsedTaskIds.add(i.id),e&&i.children&&i.children.length>0&&i.children.forEach(s=>{this.expandTask(s.id,e)}),this.invalidateCache(),this.event.emit(b.VIEW_UPDATE),!0):!1}getVisibleTasks(){if(!this.isDirty&&this.visibleTasksCache.length>0)return this.visibleTasksCache;const t=[];let e=0;const i=(s,n)=>{this.collapsedTaskIds.has(s.id)&&s.expanded&&(s.expanded=!1),s.flatIndex=e++,t.push(s),s.expanded&&s.children&&s.children.length>0&&s.children.forEach(o=>i(o))};return this.tasks.forEach(s=>i(s)),this.visibleTasksCache=t,this.isDirty=!1,t}getVisibleSize(){return this.getVisibleTasks().length}isTaskVisible(t){return this.getVisibleTasks().some(e=>e.id===t.id)}clear(){this.rawData=[],this.tasks=[],this.taskMap.clear(),this.visibleTasksCache=[],this.isDirty=!0,this.collapsedTaskIds.clear(),this.event.emit(b.DATA_UPDATE)}invalidateCache(){this.isDirty=!0}selectTask(t){const e=this.getTaskById(t);return e?(this.selectedTaskId===t||(this.unselectTask(),this.selectedTaskId=t,this.event.emit(b.TASK_SELECTED,e)),!0):!1}unselectTask(){if(this.selectedTaskId){const t=this.selectedTaskId;this.selectedTaskId=null,this.event.emit(b.TASK_UNSELECTED,t)}}isTaskSelected(t){return this.selectedTaskId===t}getSelectedTask(){return this.selectedTaskId?this.getTaskById(this.selectedTaskId):void 0}getCheckedList(){return this.checkedList}updateCheckedList(t,e){const i=this.checkedList.findIndex(s=>s.id===e.id);t?i===-1?this.checkedList.push(e):this.checkedList.splice(i,1,e):i!==-1&&this.checkedList.splice(i,1)}toggleAllChecked(t){t?this.checkedList=this.getVisibleTasks().slice():this.checkedList=[]}isTaskChecked(t){return this.checkedList.findIndex(e=>e.id===t.id)!==-1}updateTaskTime(t,e,i,s,n=[]){let o=e,h=i;const a=this.store.getOptionManager().getOptions().bar.move.link.child,d=this.store.getOptionManager().getOptions().bar.move.link.parent,u=this.store.getTimeAxis().getCellUnit();let l=t.parent;for(;d!=="none"&&l;){if(d==="expand"){let p=l.startTime||o,m=l.endTime||h;(!l.startTime||o.isBefore(l.startTime))&&(p=o),(!l.endTime||h.isAfter(l.endTime))&&(m=h),(l.startTime===void 0||l.endTime===void 0||!p.isSame(l.startTime)||!m.isSame(l.endTime))&&(n.findIndex(g=>g.id===l.id)===-1&&n.push(l.clone()),l.updateTime(p,m))}else d==="strict"&&(l.startTime&&o.isBefore(l.startTime)&&(o=l.startTime,h.isSameOrBefore(o)&&(h=o.add(1,u))),l.endTime&&h.isAfter(l.endTime)&&(h=l.endTime,o.isAfter(h)&&(o=h.subtract(1,u))));l=l.parent}let c=t.children||[];for(;a!=="none"&&c.length>0;){const p=[];c.forEach(m=>{let g=m.startTime||o,x=m.endTime||h,T=o.diff(t.startTime),v=h.diff(t.endTime);a==="scale"?s==="both"?(n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g.add(T),x.add(v))):s==="left"?(g=g.add(T),g.isSameOrAfter(x.subtract(1,u))&&(x.isBefore(t.endTime)?x=g.add(1,u):g=x.subtract(1,u),g.isSameOrBefore(o)&&(o=g)),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x)):s==="right"&&(x=x.add(v),x.isSameOrBefore(g.add(1,u))&&(g.isAfter(t.startTime)?g=x.subtract(1,u):x=g.add(1,u)),x.isSameOrAfter(h)&&(h=x),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x)):a==="fixed"&&(s==="both"?(n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g.add(T),x.add(v))):s==="left"?g.isSameOrBefore(o)&&(g=o,g.isSameOrAfter(x.subtract(1,u))&&(x.isBefore(t.endTime)?x=g.add(1,u):g=x.subtract(1,u),g.isSameOrBefore(o)&&(o=g)),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x)):s==="right"&&x.isSameOrAfter(h)&&(x=h,x.isSameOrBefore(g.add(1,u))&&(g.isAfter(t.startTime)?g=x.subtract(1,u):x=g.add(1,u)),x.isSameOrAfter(h)&&(h=x),n.findIndex(y=>y.id===m.id)===-1&&n.push(m.clone()),m.updateTime(g,x))),m.children&&m.children.length>0&&p.push(...m.children)}),c=p}n.findIndex(p=>p.id===t.id)===-1&&n.push(t.clone()),t.updateTime(o,h)}}function A(f,t,e){if(!Number.isFinite(f)||!Number.isFinite(t)||!Number.isFinite(e))return Number.isFinite(t)?t:0;const i=Math.min(t,e),s=Math.max(t,e);return Math.min(Math.max(i,f),s)}function st(f,t){let e=f;return E.isString(e)&&(/%$/.test(e)?e=t*parseFloat(e)/100:e=parseFloat(e)),isNaN(e)?0:e}function nt(f,t){if(t===0)throw new Error("基准值不能为0");if(Math.abs(f)<=t/2)return 0;const e=Math.floor(f/t),i=Math.ceil(f/t),s=e*t,n=i*t,o=Math.abs(f-s),h=Math.abs(f-n);return o<=h?s:n}function Q(f,t=4){return typeof f=="number"?[f,f,f,f]:Array.isArray(f)?[f[0]??t,f[1]??t,f[2]??t,f[3]??t]:[t,t,t,t]}function Et(f,t=100){if(!Number.isFinite(f)||!Number.isFinite(t)||t===0||f<0)return 0;const e=f/Math.abs(t);return Math.min(e,1)}function Mt(f,t=2,e=!1){const i=f.toFixed(t);return e?i:i.replace(/\.?0+$/,"")}function Ct(f){var s;if(typeof f=="object"&&f!==null)return{r:A(f.r??0,0,255),g:A(f.g??0,0,255),b:A(f.b??0,0,255),a:A(f.a??1,0,1)};if(typeof f!="string")return C.warn(`Invalid color value type: ${typeof f}`),null;let t=f.trim();const e=(s=document==null?void 0:document.createElement("canvas"))==null?void 0:s.getContext("2d");if(e&&(e.fillStyle=t,t=e.fillStyle),t.startsWith("#")){const n=t.slice(1);let o,h,a,d,u=1;try{o=parseInt(n,16)}catch{return C.warn(`Invalid hex color: ${f}`),null}if(n.length===3)h=(o>>8&15)*17,a=(o>>4&15)*17,d=(o&15)*17;else if(n.length===6)h=o>>16&255,a=o>>8&255,d=o&255;else if(n.length===8)h=o>>24&255,a=o>>16&255,d=o>>8&255,u=(o&255)/255;else return C.warn(`Invalid hex color length: ${f}`),null;return{r:h,g:a,b:d,a:u}}let i=t.match(/rgba?\(\s*(\d+%?)\s*,\s*(\d+%?)\s*,\s*(\d+%?)\s*(?:,\s*([\d.]+)\s*)?\)/i);if(i){const n=o=>o.endsWith("%")?A(parseFloat(o)/100*255,0,255):A(parseInt(o,10),0,255);return{r:n(i[1]),g:n(i[2]),b:n(i[3]),a:i[4]!==void 0?A(parseFloat(i[4]),0,1):1}}return C.warn(`Could not parse color: ${f}`),null}function Ot(f,t,e,i,s=!1,n=!1){const o=c=>{const p=Math.round(A(c,0,255)).toString(16);return p.length===1?"0"+p:p},h=o(f),a=o(t),d=o(e),u=o(i*255);if(s&&h[0]===h[1]&&a[0]===a[1]&&d[0]===d[1]&&i===1&&!n)return`#${h[0]}${a[0]}${d[0]}`;const l=`#${h}${a}${d}`;return n||i<1?`${l}${u}`:l}class X{constructor(t){r(this,"_r");r(this,"_g");r(this,"_b");r(this,"_a");const e=Ct(t);e===null?(C.error(`Failed to parse color: ${t}. Using default black.`),this._r=0,this._g=0,this._b=0,this._a=1):(this._r=Math.round(e.r),this._g=Math.round(e.g),this._b=Math.round(e.b),this._a=e.a)}get R(){return this._r}get G(){return this._g}get B(){return this._b}get A(){return this._a}red(t){return t===void 0?this._r:(this._r=Math.round(A(t,0,255)),this)}green(t){return t===void 0?this._g:(this._g=Math.round(A(t,0,255)),this)}blue(t){return t===void 0?this._b:(this._b=Math.round(A(t,0,255)),this)}alpha(t){return t===void 0?this._a:(this._a=A(t,0,1),this)}toHex(t=!1,e=!1){return Ot(this._r,this._g,this._b,this._a,t,e)}toRgb(){const t=Math.round(this._r),e=Math.round(this._g),i=Math.round(this._b);if(this._a===1)return`rgb(${t}, ${e}, ${i})`;{const s=parseFloat(this._a.toFixed(2));return`rgba(${t}, ${e}, ${i}, ${s})`}}toObject(){return{r:this._r,g:this._g,b:this._b,a:this._a}}toString(){return this.toRgb()}brighten(t=10){if(t<0)return this.darken(-t);const e=A(t,0,100)/100;return this._r=Math.round(A(this._r+(255-this._r)*e,0,255)),this._g=Math.round(A(this._g+(255-this._g)*e,0,255)),this._b=Math.round(A(this._b+(255-this._b)*e,0,255)),this}darken(t=10){if(t<0)return this.brighten(-t);const e=A(t,0,100)/100;return this._r=Math.round(A(this._r*(1-e),0,255)),this._g=Math.round(A(this._g*(1-e),0,255)),this._b=Math.round(A(this._b*(1-e),0,255)),this}isLight(){return(this._r*299+this._g*587+this._b*114)/1e3>128}isDark(){return!this.isLight()}mix(t,e=50){const i=A(e,0,100)/100,s=$(t);return this._r=Math.round(A(this._r*(1-i)+s.R*i,0,255)),this._g=Math.round(A(this._g*(1-i)+s.G*i,0,255)),this._b=Math.round(A(this._b*(1-i)+s.B*i,0,255)),this._a=A(this._a*(1-i)+s.A*i,0,1),this}clone(){return new X({r:this._r,g:this._g,b:this._b,a:this._a})}static extend(t,e){typeof t=="function"?t(e,X,$):C.warn("Invalid plugin provided to Colorjs.extend. Expected a function.")}}const $=f=>f instanceof X?f:new X(f);class ot{constructor(t,e,i){r(this,"element");r(this,"iconElement");r(this,"_state",0);r(this,"options");var o;this.context=t,this.container=e,this.task=i;const n=(this.task?this.context.store.getDataManager().isTaskChecked(this.task):!1)?1:0;this.options={initialState:n,size:14},this.element=document.createElement("div"),this.iconElement=document.createElement("div"),this._state=this.options.initialState,this.createElement(),this.updateIcon(),this.bindEvents(),this.registerEvents(),(o=this.container)==null||o.appendChild(this.element)}createElement(){this.element.className="x-gantt-checkbox",this.element.style.width=`${this.options.size}px`,this.element.style.height=`${this.options.size}px`,this.element.style.setProperty("border",`1px solid ${this.context.store.getOptionManager().getOptions().border.color}`,"important"),this.iconElement.className="x-gantt-checkbox__icon",this.iconElement.style.cssText=`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  justify-content: center;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xpyjs/gantt-core",
3
3
  "private": false,
4
- "version": "0.0.1-alpha.0",
4
+ "version": "0.0.1-alpha.1",
5
5
  "description": "A powerful and flexible Gantt chart component library for modern web applications with TypeScript support",
6
6
  "type": "module",
7
7
  "main": "./dist/x-gantt.umd.cjs",
@@ -23,19 +23,6 @@
23
23
  "README.md",
24
24
  "LICENSE"
25
25
  ],
26
- "scripts": {
27
- "dev": "vite build --watch",
28
- "build": "npm run build:lib && npm run build:types",
29
- "build:lib": "vite build",
30
- "build:types": "rimraf types && tsc && npm run copy:types",
31
- "copy:types": "node scripts/build-types.js",
32
- "preview": "vite preview",
33
- "test": "vitest",
34
- "test:coverage": "vitest run --coverage",
35
- "clean": "rimraf dist types",
36
- "prepublishOnly": "npm run clean && npm run build && vitest --watch=false",
37
- "publish": "npm publish"
38
- },
39
26
  "dependencies": {
40
27
  "dayjs": "^1.11.11",
41
28
  "konva": "^9.3.6",
@@ -74,5 +61,17 @@
74
61
  "sideEffects": [
75
62
  "**/*.css",
76
63
  "**/*.scss"
77
- ]
78
- }
64
+ ],
65
+ "scripts": {
66
+ "dev": "vite build --watch",
67
+ "build": "npm run build:lib && npm run build:types",
68
+ "build:lib": "vite build",
69
+ "build:types": "rimraf types && tsc && npm run copy:types",
70
+ "copy:types": "node scripts/build-types.js",
71
+ "preview": "vite preview",
72
+ "test": "vitest",
73
+ "test:coverage": "vitest run --coverage",
74
+ "clean": "rimraf dist types",
75
+ "release": "pnpm publish --access public --no-git-checks"
76
+ }
77
+ }