UNPKG

tldraw

Version:

A tiny little drawing editor.

8 lines (7 loc) 3.38 kB
{ "version": 3, "sources": ["../../../../../src/lib/shapes/arrow/elbow/range.tsx"], "sourcesContent": ["import { assert, clamp } from '@tldraw/editor'\n\nexport interface Range {\n\tmin: number\n\tmax: number\n}\n\nexport function expandRange(range: Range, amount: number) {\n\tconst newRange: Range = {\n\t\tmin: range.min - amount,\n\t\tmax: range.max + amount,\n\t}\n\tif (newRange.min > newRange.max) {\n\t\treturn null\n\t}\n\treturn newRange\n}\n\nexport function clampToRange(value: number, range: Range) {\n\treturn clamp(value, range.min, range.max)\n}\n\n/**\n * Subtract the range b from the range a. If b is completely inside a, return the two ranges of a\n * that are outside of b. If b contains a, return []. Otherwise, return the range of a that is\n * outside of b.\n */\nexport function subtractRange(a: Range, b: Range): [] | [Range] | [Range, Range] {\n\tassert(a.min <= a.max && b.min <= b.max)\n\n\t// if b is completely inside a:\n\tif (a.min <= b.min && b.max <= a.max) {\n\t\treturn [\n\t\t\t{ min: a.min, max: b.min },\n\t\t\t{ min: b.max, max: a.max },\n\t\t]\n\t}\n\n\t// if b is completely outside of a:\n\tif (b.max <= a.min || b.min >= a.max) {\n\t\treturn [a]\n\t}\n\n\t// if b fully contains a:\n\tif (b.min <= a.min && a.max <= b.max) {\n\t\treturn []\n\t}\n\n\t// if b overlaps a on the low side:\n\tif (isWithinRange(a.min, b)) {\n\t\treturn [{ min: b.max, max: a.max }]\n\t}\n\n\t// if b overlaps a on the high side:\n\tif (isWithinRange(a.max, b)) {\n\t\treturn [{ min: a.min, max: b.min }]\n\t}\n\n\t// unreachable (?)\n\treturn []\n}\n\nexport function createRange(a: number, b: number) {\n\treturn { min: Math.min(a, b), max: Math.max(a, b) }\n}\n\nexport function doRangesOverlap(a: Range, b: Range) {\n\treturn a.min <= b.max && a.max >= b.min\n}\n\nexport function isWithinRange(value: number, range: Range) {\n\treturn value >= range.min && value <= range.max\n}\n\nexport function rangeSize(range: Range) {\n\treturn range.max - range.min\n}\n\nexport function rangeCenter(range: Range) {\n\treturn (range.min + range.max) / 2\n}\n"], "mappings": "AAAA,SAAS,QAAQ,aAAa;AAOvB,SAAS,YAAY,OAAc,QAAgB;AACzD,QAAM,WAAkB;AAAA,IACvB,KAAK,MAAM,MAAM;AAAA,IACjB,KAAK,MAAM,MAAM;AAAA,EAClB;AACA,MAAI,SAAS,MAAM,SAAS,KAAK;AAChC,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAEO,SAAS,aAAa,OAAe,OAAc;AACzD,SAAO,MAAM,OAAO,MAAM,KAAK,MAAM,GAAG;AACzC;AAOO,SAAS,cAAc,GAAU,GAAyC;AAChF,SAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG;AAGvC,MAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK;AACrC,WAAO;AAAA,MACN,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI;AAAA,MACzB,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI;AAAA,IAC1B;AAAA,EACD;AAGA,MAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK;AACrC,WAAO,CAAC,CAAC;AAAA,EACV;AAGA,MAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK;AACrC,WAAO,CAAC;AAAA,EACT;AAGA,MAAI,cAAc,EAAE,KAAK,CAAC,GAAG;AAC5B,WAAO,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI,CAAC;AAAA,EACnC;AAGA,MAAI,cAAc,EAAE,KAAK,CAAC,GAAG;AAC5B,WAAO,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI,CAAC;AAAA,EACnC;AAGA,SAAO,CAAC;AACT;AAEO,SAAS,YAAY,GAAW,GAAW;AACjD,SAAO,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,EAAE;AACnD;AAEO,SAAS,gBAAgB,GAAU,GAAU;AACnD,SAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AACrC;AAEO,SAAS,cAAc,OAAe,OAAc;AAC1D,SAAO,SAAS,MAAM,OAAO,SAAS,MAAM;AAC7C;AAEO,SAAS,UAAU,OAAc;AACvC,SAAO,MAAM,MAAM,MAAM;AAC1B;AAEO,SAAS,YAAY,OAAc;AACzC,UAAQ,MAAM,MAAM,MAAM,OAAO;AAClC;", "names": [] }