vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 5.06 kB
Source Map (JSON)
{"version":3,"file":"cursor.mjs","sources":["../../../../../src/composables/useInputMask/cursor.ts"],"sourcesContent":["import { MaskToken } from './mask'\n\nexport enum CursorPosition {\n BeforeChar = -1,\n Any = 0,\n AfterChar = 1\n}\n\nexport class Cursor<Token extends MaskToken> extends Number {\n constructor (public position: number, private tokens: Token[], private reversed: boolean = false) {\n super(position)\n }\n\n private move (direction: -1 | 1, amount: number, cursorPosition = CursorPosition.Any) {\n if (this.tokens.every((t) => t.static)) {\n if (direction === 1) {\n this.position = this.tokens.length\n return this.position\n } else {\n this.position = 0\n return this.position\n }\n }\n\n for (let i = this.position; i <= this.tokens.length && i >= -1; i += direction) {\n const current = this.tokens[i]\n const next = this.tokens[i + direction] as MaskToken || undefined\n const prev = this.tokens[i - direction] as MaskToken || undefined\n\n if (amount === 0) {\n this.position = i\n return this.position\n }\n\n if (next === undefined && current === undefined) {\n this.position = i\n return this.position\n }\n\n if (cursorPosition === CursorPosition.AfterChar) {\n if (current && !current.static && direction > 0) {\n amount--\n continue\n }\n if (!next?.static && direction < 0 && i !== this.position) {\n amount--\n if (amount === 0) {\n this.position = i\n return this.position\n }\n continue\n }\n }\n if (cursorPosition === CursorPosition.BeforeChar) {\n if (!next?.static) {\n amount--\n continue\n }\n }\n\n if (cursorPosition === CursorPosition.Any) {\n if ((!current?.static || !next?.static) && direction > 0) {\n amount--\n continue\n }\n\n if (direction < 0) {\n if (next && !next.static) {\n amount--\n if (i !== this.position) {\n this.position = i\n return this.position\n }\n }\n }\n }\n }\n\n return this.position\n }\n\n moveBack (amount: number, cursorPosition = CursorPosition.Any) {\n return this.move(-1, amount, cursorPosition)\n }\n\n moveForward (amount: number, cursorPosition = CursorPosition.Any) {\n return this.move(1, amount, cursorPosition)\n }\n\n updateTokens (newTokens: Token[], fromEnd: boolean = false) {\n if (fromEnd) {\n // When reversed, we need to update position from the end\n this.position = this.tokens.length - this.position\n this.tokens = newTokens\n this.position = this.tokens.length - this.position\n } else {\n this.tokens = newTokens\n }\n }\n\n valueOf () {\n if (this.position < 0) {\n return 0\n }\n\n if (this.position > this.tokens.length) {\n return this.tokens.length\n }\n\n return this.position\n }\n}\n"],"names":["CursorPosition"],"mappings":"AAEY,IAAA,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,gBAAa,EAAb,IAAA;AACAA,kBAAAA,gBAAA,SAAM,CAAN,IAAA;AACAA,kBAAAA,gBAAA,eAAY,CAAZ,IAAA;AAHUA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAML,MAAM,eAAwC,OAAO;AAAA,EAC1D,YAAoB,UAA0B,QAAyB,WAAoB,OAAO;AAChG,UAAM,QAAQ;AADI,SAAA,WAAA;AAA0B,SAAA,SAAA;AAAyB,SAAA,WAAA;AAAA,EAEvE;AAAA,EAEQ,KAAM,WAAmB,QAAgB,iBAAiB,GAAoB;AACpF,QAAI,KAAK,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;AACtC,UAAI,cAAc,GAAG;AACd,aAAA,WAAW,KAAK,OAAO;AAC5B,eAAO,KAAK;AAAA,MAAA,OACP;AACL,aAAK,WAAW;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAES,aAAA,IAAI,KAAK,UAAU,KAAK,KAAK,OAAO,UAAU,KAAK,IAAI,KAAK,WAAW;AACxE,YAAA,UAAU,KAAK,OAAO,CAAC;AAC7B,YAAM,OAAO,KAAK,OAAO,IAAI,SAAS,KAAkB;AAC3C,WAAK,OAAO,IAAI,SAAS,KAAkB;AAExD,UAAI,WAAW,GAAG;AAChB,aAAK,WAAW;AAChB,eAAO,KAAK;AAAA,MACd;AAEI,UAAA,SAAS,UAAa,YAAY,QAAW;AAC/C,aAAK,WAAW;AAChB,eAAO,KAAK;AAAA,MACd;AAEA,UAAI,mBAAmB,GAA0B;AAC/C,YAAI,WAAW,CAAC,QAAQ,UAAU,YAAY,GAAG;AAC/C;AACA;AAAA,QACF;AACA,YAAI,EAAC,6BAAM,WAAU,YAAY,KAAK,MAAM,KAAK,UAAU;AACzD;AACA,cAAI,WAAW,GAAG;AAChB,iBAAK,WAAW;AAChB,mBAAO,KAAK;AAAA,UACd;AACA;AAAA,QACF;AAAA,MACF;AACA,UAAI,mBAAmB,IAA2B;AAC5C,YAAA,EAAC,6BAAM,SAAQ;AACjB;AACA;AAAA,QACF;AAAA,MACF;AAEA,UAAI,mBAAmB,GAAoB;AACzC,aAAK,EAAC,mCAAS,WAAU,EAAC,6BAAM,YAAW,YAAY,GAAG;AACxD;AACA;AAAA,QACF;AAEA,YAAI,YAAY,GAAG;AACb,cAAA,QAAQ,CAAC,KAAK,QAAQ;AACxB;AACI,gBAAA,MAAM,KAAK,UAAU;AACvB,mBAAK,WAAW;AAChB,qBAAO,KAAK;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAU,QAAgB,iBAAiB,GAAoB;AAC7D,WAAO,KAAK,KAAK,IAAI,QAAQ,cAAc;AAAA,EAC7C;AAAA,EAEA,YAAa,QAAgB,iBAAiB,GAAoB;AAChE,WAAO,KAAK,KAAK,GAAG,QAAQ,cAAc;AAAA,EAC5C;AAAA,EAEA,aAAc,WAAoB,UAAmB,OAAO;AAC1D,QAAI,SAAS;AAEX,WAAK,WAAW,KAAK,OAAO,SAAS,KAAK;AAC1C,WAAK,SAAS;AACd,WAAK,WAAW,KAAK,OAAO,SAAS,KAAK;AAAA,IAAA,OACrC;AACL,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,UAAW;AACL,QAAA,KAAK,WAAW,GAAG;AACd,aAAA;AAAA,IACT;AAEA,QAAI,KAAK,WAAW,KAAK,OAAO,QAAQ;AACtC,aAAO,KAAK,OAAO;AAAA,IACrB;AAEA,WAAO,KAAK;AAAA,EACd;AACF;"}