@pie-lib/plot 3.1.0-next.0 → 3.1.0-next.25
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 +40 -0
- package/NEXT.CHANGELOG.json +16 -1
- package/lib/draggable.js +9 -1
- package/lib/draggable.js.map +1 -1
- package/lib/graph-props.js +4 -1
- package/lib/graph-props.js.map +1 -1
- package/lib/grid-draggable.js +14 -5
- package/lib/grid-draggable.js.map +1 -1
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/label.js +15 -1
- package/lib/label.js.map +1 -1
- package/lib/root.js +32 -3
- package/lib/root.js.map +1 -1
- package/lib/trig.js +5 -1
- package/lib/trig.js.map +1 -1
- package/lib/types.js +2 -1
- package/lib/types.js.map +1 -1
- package/lib/utils.js +18 -1
- package/lib/utils.js.map +1 -1
- package/package.json +8 -8
- package/src/__tests__/grid-draggable.test.jsx +4 -4
- package/src/__tests__/root.test.jsx +22 -19
- package/src/__tests__/utils.test.js +1 -2
- package/src/grid-draggable.jsx +2 -2
- package/src/root.jsx +3 -3
- package/lib/__tests__/draggable.test.js +0 -48
- package/lib/__tests__/grid-draggable.test.js +0 -773
- package/lib/__tests__/root.test.js +0 -265
- package/lib/__tests__/trig.test.js +0 -168
- package/lib/__tests__/utils.test.js +0 -300
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_invariant","_interopRequireDefault","require","_range","_pointGeometry","_head","_tail","_isEqual","xy","exports","x","y","buildSizeArray","size","padding","Number","isFinite","Math","max","invariant","half","round","tickCount","min","step","abs","getInterval","domain","ticks","major","minor","Error","concat","distance","minorTicks","normalizedMajor","isNaN","divider","raw","parseFloat","toFixed","mkRange","interval","range","splice","length","snapTo","value","rng","filter","v","reduce","prev","curr","currentDistance","previousDistance","buildTickModel","scaleFn","map","r","index","isMajor","polygonToArea","points","h","head","area","left","top","bottom","right","tail","a","p","lineToArea","from","to","bounds","point","o","Point","getDelta","sub","bandKey","d","label","isDomainRangeEqual","graphProps","nextGraphProps","isEqual","findLongestWord","longestWord","replace","split","sort","b","amountToIncreaseWidth","extractTextFromHTML","htmlString","_doc$body","parser","DOMParser","doc","parseFromString","body","textContent","isEmptyObject","obj","Object","keys","constructor","isEmptyString","str","trim"],"sources":["../src/utils.js"],"sourcesContent":["import invariant from 'invariant';\nimport range from 'lodash/range';\nimport Point from '@mapbox/point-geometry';\nimport head from 'lodash/head';\nimport tail from 'lodash/tail';\nimport isEqual from 'lodash/isEqual';\n\nexport const xy = (x, y) => ({ x, y });\n\nexport const buildSizeArray = (size, padding) => {\n padding = Number.isFinite(padding) ? Math.max(padding, 0) : 0;\n invariant(padding < size, 'padding must be less than size');\n const half = Math.round(padding * 0.5);\n return [half, size - half];\n};\n\nexport const tickCount = (min, max, step) => {\n invariant(min < max, 'min must be less than max');\n const size = Math.abs(min - max);\n return Math.round(size / step);\n};\n\nexport function getInterval(domain, ticks) {\n const { min, max } = domain;\n const { major, minor } = ticks;\n\n if (min >= max) {\n throw new Error(`min is > max: ${min} > ${max}`);\n }\n\n const distance = max - min;\n const minorTicks = minor > 0 ? minor + 1 : 1;\n const normalizedMajor = major - 1;\n\n if (isNaN(normalizedMajor)) {\n throw new Error('Tick Frequency must be 2 or higher');\n }\n\n if (normalizedMajor <= 0) {\n throw new Error('Tick Frequency must be 2 or higher');\n }\n\n const divider = normalizedMajor * minorTicks;\n const raw = distance / divider;\n return parseFloat(Number(raw).toFixed(4));\n}\n\nconst mkRange = (min, max, interval) => {\n const raw = range(min, max, interval);\n /* Fix the last step due to rounding errors */\n raw.splice(raw.length, 1, max);\n return raw;\n};\n\nexport function snapTo(min, max, interval, value) {\n if (value >= max) {\n return max;\n }\n\n if (value <= min) {\n return min;\n }\n\n let rng = mkRange(min, max, interval);\n\n rng = rng.filter((v) => {\n return Math.abs(value - v) <= interval;\n });\n\n return (\n rng.length &&\n rng.reduce((prev, curr) => {\n const currentDistance = Math.abs(curr - value);\n const previousDistance = Math.abs(prev - value);\n return currentDistance <= previousDistance ? curr : prev;\n })\n );\n}\n\nexport function buildTickModel(domain, ticks, interval, scaleFn) {\n const rng = mkRange(domain.min, domain.max, interval);\n\n return rng.map((r, index) => {\n const isMajor = index % (ticks.minor + 1) === 0;\n\n return {\n value: r,\n major: isMajor,\n x: scaleFn(r),\n };\n });\n}\n\nexport const polygonToArea = (points) => {\n const h = head(points);\n const area = {\n left: h.x,\n top: h.y,\n bottom: h.y,\n right: h.x,\n };\n return tail(points).reduce((a, p) => {\n a.left = Math.min(a.left, p.x);\n a.top = Math.max(a.top, p.y);\n a.bottom = Math.min(a.bottom, p.y);\n a.right = Math.max(a.right, p.x);\n return a;\n }, area);\n};\n\nexport const lineToArea = (from, to) => {\n const left = Math.min(from.x, to.x);\n const top = Math.max(from.y, to.y);\n const bottom = Math.min(from.y, to.y);\n const right = Math.max(from.x, to.x);\n return { left, top, bottom, right };\n};\n\nexport const bounds = (area, domain, range) => {\n return {\n left: domain.min - area.left,\n right: Math.abs(area.right - domain.max),\n top: Math.abs(area.top - range.max),\n bottom: range.min - area.bottom,\n };\n};\n\nexport const point = (o) => new Point(o.x, o.y);\nexport const getDelta = (from, to) => {\n return point(to).sub(point(from));\n};\n\nexport const bandKey = (d, index) => `${index}-${d.label || '-'}`;\n\nexport const isDomainRangeEqual = (graphProps, nextGraphProps) => {\n return isEqual(graphProps.domain, nextGraphProps.domain) && isEqual(graphProps.range, nextGraphProps.range);\n};\n\n// findLongestWord is also used in graphing\nexport const findLongestWord = (label) => {\n let longestWord = (label || '')\n .replace(/<[^>]+>/g, '')\n .split(' ')\n .sort((a, b) => b.length - a.length);\n\n return longestWord[0].length;\n};\n\n// amountToIncreaseWidth is also used in graphing\nexport const amountToIncreaseWidth = (longestWord) => {\n if (!longestWord) {\n return 0;\n }\n\n return longestWord * 20;\n};\n\nexport const extractTextFromHTML = (htmlString) => {\n const parser = new DOMParser();\n const doc = parser?.parseFromString(htmlString, 'text/html');\n return doc?.body?.textContent || '';\n};\n\nexport const isEmptyObject = (obj) => {\n return obj && Object.keys(obj).length === 0 && obj.constructor === Object;\n};\n\nexport const isEmptyString = (str) => {\n return typeof str === 'string' && str.trim() === '';\n};\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,KAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,KAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AAEO,IAAMM,EAAE,GAAAC,OAAA,CAAAD,EAAA,GAAG,SAALA,EAAEA,CAAIE,CAAC,EAAEC,CAAC;EAAA,OAAM;IAAED,CAAC,EAADA,CAAC;IAAEC,CAAC,EAADA;EAAE,CAAC;AAAA,CAAC;AAE/B,IAAMC,cAAc,GAAAH,OAAA,CAAAG,cAAA,GAAG,SAAjBA,cAAcA,CAAIC,IAAI,EAAEC,OAAO,EAAK;EAC/CA,OAAO,GAAGC,MAAM,CAACC,QAAQ,CAACF,OAAO,CAAC,GAAGG,IAAI,CAACC,GAAG,CAACJ,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;EAC7D,IAAAK,qBAAS,EAACL,OAAO,GAAGD,IAAI,EAAE,gCAAgC,CAAC;EAC3D,IAAMO,IAAI,GAAGH,IAAI,CAACI,KAAK,CAACP,OAAO,GAAG,GAAG,CAAC;EACtC,OAAO,CAACM,IAAI,EAAEP,IAAI,GAAGO,IAAI,CAAC;AAC5B,CAAC;AAEM,IAAME,SAAS,GAAAb,OAAA,CAAAa,SAAA,GAAG,SAAZA,SAASA,CAAIC,GAAG,EAAEL,GAAG,EAAEM,IAAI,EAAK;EAC3C,IAAAL,qBAAS,EAACI,GAAG,GAAGL,GAAG,EAAE,2BAA2B,CAAC;EACjD,IAAML,IAAI,GAAGI,IAAI,CAACQ,GAAG,CAACF,GAAG,GAAGL,GAAG,CAAC;EAChC,OAAOD,IAAI,CAACI,KAAK,CAACR,IAAI,GAAGW,IAAI,CAAC;AAChC,CAAC;AAEM,SAASE,WAAWA,CAACC,MAAM,EAAEC,KAAK,EAAE;EACzC,IAAQL,GAAG,GAAUI,MAAM,CAAnBJ,GAAG;IAAEL,GAAG,GAAKS,MAAM,CAAdT,GAAG;EAChB,IAAQW,KAAK,GAAYD,KAAK,CAAtBC,KAAK;IAAEC,KAAK,GAAKF,KAAK,CAAfE,KAAK;EAEpB,IAAIP,GAAG,IAAIL,GAAG,EAAE;IACd,MAAM,IAAIa,KAAK,kBAAAC,MAAA,CAAkBT,GAAG,SAAAS,MAAA,CAAMd,GAAG,CAAE,CAAC;EAClD;EAEA,IAAMe,QAAQ,GAAGf,GAAG,GAAGK,GAAG;EAC1B,IAAMW,UAAU,GAAGJ,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAAC,GAAG,CAAC;EAC5C,IAAMK,eAAe,GAAGN,KAAK,GAAG,CAAC;EAEjC,IAAIO,KAAK,CAACD,eAAe,CAAC,EAAE;IAC1B,MAAM,IAAIJ,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,IAAII,eAAe,IAAI,CAAC,EAAE;IACxB,MAAM,IAAIJ,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,IAAMM,OAAO,GAAGF,eAAe,GAAGD,UAAU;EAC5C,IAAMI,GAAG,GAAGL,QAAQ,GAAGI,OAAO;EAC9B,OAAOE,UAAU,CAACxB,MAAM,CAACuB,GAAG,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3C;AAEA,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIlB,GAAG,EAAEL,GAAG,EAAEwB,QAAQ,EAAK;EACtC,IAAMJ,GAAG,GAAG,IAAAK,iBAAK,EAACpB,GAAG,EAAEL,GAAG,EAAEwB,QAAQ,CAAC;EACrC;EACAJ,GAAG,CAACM,MAAM,CAACN,GAAG,CAACO,MAAM,EAAE,CAAC,EAAE3B,GAAG,CAAC;EAC9B,OAAOoB,GAAG;AACZ,CAAC;AAEM,SAASQ,MAAMA,CAACvB,GAAG,EAAEL,GAAG,EAAEwB,QAAQ,EAAEK,KAAK,EAAE;EAChD,IAAIA,KAAK,IAAI7B,GAAG,EAAE;IAChB,OAAOA,GAAG;EACZ;EAEA,IAAI6B,KAAK,IAAIxB,GAAG,EAAE;IAChB,OAAOA,GAAG;EACZ;EAEA,IAAIyB,GAAG,GAAGP,OAAO,CAAClB,GAAG,EAAEL,GAAG,EAAEwB,QAAQ,CAAC;EAErCM,GAAG,GAAGA,GAAG,CAACC,MAAM,CAAC,UAACC,CAAC,EAAK;IACtB,OAAOjC,IAAI,CAACQ,GAAG,CAACsB,KAAK,GAAGG,CAAC,CAAC,IAAIR,QAAQ;EACxC,CAAC,CAAC;EAEF,OACEM,GAAG,CAACH,MAAM,IACVG,GAAG,CAACG,MAAM,CAAC,UAACC,IAAI,EAAEC,IAAI,EAAK;IACzB,IAAMC,eAAe,GAAGrC,IAAI,CAACQ,GAAG,CAAC4B,IAAI,GAAGN,KAAK,CAAC;IAC9C,IAAMQ,gBAAgB,GAAGtC,IAAI,CAACQ,GAAG,CAAC2B,IAAI,GAAGL,KAAK,CAAC;IAC/C,OAAOO,eAAe,IAAIC,gBAAgB,GAAGF,IAAI,GAAGD,IAAI;EAC1D,CAAC,CAAC;AAEN;AAEO,SAASI,cAAcA,CAAC7B,MAAM,EAAEC,KAAK,EAAEc,QAAQ,EAAEe,OAAO,EAAE;EAC/D,IAAMT,GAAG,GAAGP,OAAO,CAACd,MAAM,CAACJ,GAAG,EAAEI,MAAM,CAACT,GAAG,EAAEwB,QAAQ,CAAC;EAErD,OAAOM,GAAG,CAACU,GAAG,CAAC,UAACC,CAAC,EAAEC,KAAK,EAAK;IAC3B,IAAMC,OAAO,GAAGD,KAAK,IAAIhC,KAAK,CAACE,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAE/C,OAAO;MACLiB,KAAK,EAAEY,CAAC;MACR9B,KAAK,EAAEgC,OAAO;MACdnD,CAAC,EAAE+C,OAAO,CAACE,CAAC;IACd,CAAC;EACH,CAAC,CAAC;AACJ;AAEO,IAAMG,aAAa,GAAArD,OAAA,CAAAqD,aAAA,GAAG,SAAhBA,aAAaA,CAAIC,MAAM,EAAK;EACvC,IAAMC,CAAC,GAAG,IAAAC,gBAAI,EAACF,MAAM,CAAC;EACtB,IAAMG,IAAI,GAAG;IACXC,IAAI,EAAEH,CAAC,CAACtD,CAAC;IACT0D,GAAG,EAAEJ,CAAC,CAACrD,CAAC;IACR0D,MAAM,EAAEL,CAAC,CAACrD,CAAC;IACX2D,KAAK,EAAEN,CAAC,CAACtD;EACX,CAAC;EACD,OAAO,IAAA6D,gBAAI,EAACR,MAAM,CAAC,CAACZ,MAAM,CAAC,UAACqB,CAAC,EAAEC,CAAC,EAAK;IACnCD,CAAC,CAACL,IAAI,GAAGlD,IAAI,CAACM,GAAG,CAACiD,CAAC,CAACL,IAAI,EAAEM,CAAC,CAAC/D,CAAC,CAAC;IAC9B8D,CAAC,CAACJ,GAAG,GAAGnD,IAAI,CAACC,GAAG,CAACsD,CAAC,CAACJ,GAAG,EAAEK,CAAC,CAAC9D,CAAC,CAAC;IAC5B6D,CAAC,CAACH,MAAM,GAAGpD,IAAI,CAACM,GAAG,CAACiD,CAAC,CAACH,MAAM,EAAEI,CAAC,CAAC9D,CAAC,CAAC;IAClC6D,CAAC,CAACF,KAAK,GAAGrD,IAAI,CAACC,GAAG,CAACsD,CAAC,CAACF,KAAK,EAAEG,CAAC,CAAC/D,CAAC,CAAC;IAChC,OAAO8D,CAAC;EACV,CAAC,EAAEN,IAAI,CAAC;AACV,CAAC;AAEM,IAAMQ,UAAU,GAAAjE,OAAA,CAAAiE,UAAA,GAAG,SAAbA,UAAUA,CAAIC,IAAI,EAAEC,EAAE,EAAK;EACtC,IAAMT,IAAI,GAAGlD,IAAI,CAACM,GAAG,CAACoD,IAAI,CAACjE,CAAC,EAAEkE,EAAE,CAAClE,CAAC,CAAC;EACnC,IAAM0D,GAAG,GAAGnD,IAAI,CAACC,GAAG,CAACyD,IAAI,CAAChE,CAAC,EAAEiE,EAAE,CAACjE,CAAC,CAAC;EAClC,IAAM0D,MAAM,GAAGpD,IAAI,CAACM,GAAG,CAACoD,IAAI,CAAChE,CAAC,EAAEiE,EAAE,CAACjE,CAAC,CAAC;EACrC,IAAM2D,KAAK,GAAGrD,IAAI,CAACC,GAAG,CAACyD,IAAI,CAACjE,CAAC,EAAEkE,EAAE,CAAClE,CAAC,CAAC;EACpC,OAAO;IAAEyD,IAAI,EAAJA,IAAI;IAAEC,GAAG,EAAHA,GAAG;IAAEC,MAAM,EAANA,MAAM;IAAEC,KAAK,EAALA;EAAM,CAAC;AACrC,CAAC;AAEM,IAAMO,MAAM,GAAApE,OAAA,CAAAoE,MAAA,GAAG,SAATA,MAAMA,CAAIX,IAAI,EAAEvC,MAAM,EAAEgB,KAAK,EAAK;EAC7C,OAAO;IACLwB,IAAI,EAAExC,MAAM,CAACJ,GAAG,GAAG2C,IAAI,CAACC,IAAI;IAC5BG,KAAK,EAAErD,IAAI,CAACQ,GAAG,CAACyC,IAAI,CAACI,KAAK,GAAG3C,MAAM,CAACT,GAAG,CAAC;IACxCkD,GAAG,EAAEnD,IAAI,CAACQ,GAAG,CAACyC,IAAI,CAACE,GAAG,GAAGzB,KAAK,CAACzB,GAAG,CAAC;IACnCmD,MAAM,EAAE1B,KAAK,CAACpB,GAAG,GAAG2C,IAAI,CAACG;EAC3B,CAAC;AACH,CAAC;AAEM,IAAMS,KAAK,GAAArE,OAAA,CAAAqE,KAAA,GAAG,SAARA,KAAKA,CAAIC,CAAC;EAAA,OAAK,IAAIC,yBAAK,CAACD,CAAC,CAACrE,CAAC,EAAEqE,CAAC,CAACpE,CAAC,CAAC;AAAA;AACxC,IAAMsE,QAAQ,GAAAxE,OAAA,CAAAwE,QAAA,GAAG,SAAXA,QAAQA,CAAIN,IAAI,EAAEC,EAAE,EAAK;EACpC,OAAOE,KAAK,CAACF,EAAE,CAAC,CAACM,GAAG,CAACJ,KAAK,CAACH,IAAI,CAAC,CAAC;AACnC,CAAC;AAEM,IAAMQ,OAAO,GAAA1E,OAAA,CAAA0E,OAAA,GAAG,SAAVA,OAAOA,CAAIC,CAAC,EAAExB,KAAK;EAAA,UAAA5B,MAAA,CAAQ4B,KAAK,OAAA5B,MAAA,CAAIoD,CAAC,CAACC,KAAK,IAAI,GAAG;AAAA,CAAE;AAE1D,IAAMC,kBAAkB,GAAA7E,OAAA,CAAA6E,kBAAA,GAAG,SAArBA,kBAAkBA,CAAIC,UAAU,EAAEC,cAAc,EAAK;EAChE,OAAO,IAAAC,mBAAO,EAACF,UAAU,CAAC5D,MAAM,EAAE6D,cAAc,CAAC7D,MAAM,CAAC,IAAI,IAAA8D,mBAAO,EAACF,UAAU,CAAC5C,KAAK,EAAE6C,cAAc,CAAC7C,KAAK,CAAC;AAC7G,CAAC;;AAED;AACO,IAAM+C,eAAe,GAAAjF,OAAA,CAAAiF,eAAA,GAAG,SAAlBA,eAAeA,CAAIL,KAAK,EAAK;EACxC,IAAIM,WAAW,GAAG,CAACN,KAAK,IAAI,EAAE,EAC3BO,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CACvBC,KAAK,CAAC,GAAG,CAAC,CACVC,IAAI,CAAC,UAACtB,CAAC,EAAEuB,CAAC;IAAA,OAAKA,CAAC,CAAClD,MAAM,GAAG2B,CAAC,CAAC3B,MAAM;EAAA,EAAC;EAEtC,OAAO8C,WAAW,CAAC,CAAC,CAAC,CAAC9C,MAAM;AAC9B,CAAC;;AAED;AACO,IAAMmD,qBAAqB,GAAAvF,OAAA,CAAAuF,qBAAA,GAAG,SAAxBA,qBAAqBA,CAAIL,WAAW,EAAK;EACpD,IAAI,CAACA,WAAW,EAAE;IAChB,OAAO,CAAC;EACV;EAEA,OAAOA,WAAW,GAAG,EAAE;AACzB,CAAC;AAEM,IAAMM,mBAAmB,GAAAxF,OAAA,CAAAwF,mBAAA,GAAG,SAAtBA,mBAAmBA,CAAIC,UAAU,EAAK;EAAA,IAAAC,SAAA;EACjD,IAAMC,MAAM,GAAG,IAAIC,SAAS,CAAC,CAAC;EAC9B,IAAMC,GAAG,GAAGF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,eAAe,CAACL,UAAU,EAAE,WAAW,CAAC;EAC5D,OAAO,CAAAI,GAAG,aAAHA,GAAG,gBAAAH,SAAA,GAAHG,GAAG,CAAEE,IAAI,cAAAL,SAAA,uBAATA,SAAA,CAAWM,WAAW,KAAI,EAAE;AACrC,CAAC;AAEM,IAAMC,aAAa,GAAAjG,OAAA,CAAAiG,aAAA,GAAG,SAAhBA,aAAaA,CAAIC,GAAG,EAAK;EACpC,OAAOA,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC9D,MAAM,KAAK,CAAC,IAAI8D,GAAG,CAACG,WAAW,KAAKF,MAAM;AAC3E,CAAC;AAEM,IAAMG,aAAa,GAAAtG,OAAA,CAAAsG,aAAA,GAAG,SAAhBA,aAAaA,CAAIC,GAAG,EAAK;EACpC,OAAO,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE;AACrD,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_invariant","_interopRequireDefault","require","_range","_pointGeometry","_head","_tail","_isEqual","xy","exports","x","y","buildSizeArray","size","padding","Number","isFinite","Math","max","invariant","half","round","tickCount","min","step","abs","getInterval","domain","ticks","major","minor","Error","concat","distance","minorTicks","normalizedMajor","isNaN","divider","raw","parseFloat","toFixed","mkRange","interval","range","splice","length","snapTo","value","rng","filter","v","reduce","prev","curr","currentDistance","previousDistance","buildTickModel","scaleFn","map","r","index","isMajor","polygonToArea","points","h","head","area","left","top","bottom","right","tail","a","p","lineToArea","from","to","bounds","point","o","Point","getDelta","sub","bandKey","d","label","isDomainRangeEqual","graphProps","nextGraphProps","isEqual","findLongestWord","longestWord","replace","split","sort","b","amountToIncreaseWidth","extractTextFromHTML","htmlString","_doc$body","parser","DOMParser","doc","parseFromString","body","textContent","isEmptyObject","obj","Object","keys","constructor","isEmptyString","str","trim"],"sources":["../src/utils.js"],"sourcesContent":["import invariant from 'invariant';\nimport range from 'lodash/range';\nimport Point from '@mapbox/point-geometry';\nimport head from 'lodash/head';\nimport tail from 'lodash/tail';\nimport isEqual from 'lodash/isEqual';\n\nexport const xy = (x, y) => ({ x, y });\n\nexport const buildSizeArray = (size, padding) => {\n padding = Number.isFinite(padding) ? Math.max(padding, 0) : 0;\n invariant(padding < size, 'padding must be less than size');\n const half = Math.round(padding * 0.5);\n return [half, size - half];\n};\n\nexport const tickCount = (min, max, step) => {\n invariant(min < max, 'min must be less than max');\n const size = Math.abs(min - max);\n return Math.round(size / step);\n};\n\nexport function getInterval(domain, ticks) {\n const { min, max } = domain;\n const { major, minor } = ticks;\n\n if (min >= max) {\n throw new Error(`min is > max: ${min} > ${max}`);\n }\n\n const distance = max - min;\n const minorTicks = minor > 0 ? minor + 1 : 1;\n const normalizedMajor = major - 1;\n\n if (isNaN(normalizedMajor)) {\n throw new Error('Tick Frequency must be 2 or higher');\n }\n\n if (normalizedMajor <= 0) {\n throw new Error('Tick Frequency must be 2 or higher');\n }\n\n const divider = normalizedMajor * minorTicks;\n const raw = distance / divider;\n return parseFloat(Number(raw).toFixed(4));\n}\n\nconst mkRange = (min, max, interval) => {\n const raw = range(min, max, interval);\n /* Fix the last step due to rounding errors */\n raw.splice(raw.length, 1, max);\n return raw;\n};\n\nexport function snapTo(min, max, interval, value) {\n if (value >= max) {\n return max;\n }\n\n if (value <= min) {\n return min;\n }\n\n let rng = mkRange(min, max, interval);\n\n rng = rng.filter((v) => {\n return Math.abs(value - v) <= interval;\n });\n\n return (\n rng.length &&\n rng.reduce((prev, curr) => {\n const currentDistance = Math.abs(curr - value);\n const previousDistance = Math.abs(prev - value);\n return currentDistance <= previousDistance ? curr : prev;\n })\n );\n}\n\nexport function buildTickModel(domain, ticks, interval, scaleFn) {\n const rng = mkRange(domain.min, domain.max, interval);\n\n return rng.map((r, index) => {\n const isMajor = index % (ticks.minor + 1) === 0;\n\n return {\n value: r,\n major: isMajor,\n x: scaleFn(r),\n };\n });\n}\n\nexport const polygonToArea = (points) => {\n const h = head(points);\n const area = {\n left: h.x,\n top: h.y,\n bottom: h.y,\n right: h.x,\n };\n return tail(points).reduce((a, p) => {\n a.left = Math.min(a.left, p.x);\n a.top = Math.max(a.top, p.y);\n a.bottom = Math.min(a.bottom, p.y);\n a.right = Math.max(a.right, p.x);\n return a;\n }, area);\n};\n\nexport const lineToArea = (from, to) => {\n const left = Math.min(from.x, to.x);\n const top = Math.max(from.y, to.y);\n const bottom = Math.min(from.y, to.y);\n const right = Math.max(from.x, to.x);\n return { left, top, bottom, right };\n};\n\nexport const bounds = (area, domain, range) => {\n return {\n left: domain.min - area.left,\n right: Math.abs(area.right - domain.max),\n top: Math.abs(area.top - range.max),\n bottom: range.min - area.bottom,\n };\n};\n\nexport const point = (o) => new Point(o.x, o.y);\nexport const getDelta = (from, to) => {\n return point(to).sub(point(from));\n};\n\nexport const bandKey = (d, index) => `${index}-${d.label || '-'}`;\n\nexport const isDomainRangeEqual = (graphProps, nextGraphProps) => {\n return isEqual(graphProps.domain, nextGraphProps.domain) && isEqual(graphProps.range, nextGraphProps.range);\n};\n\n// findLongestWord is also used in graphing\nexport const findLongestWord = (label) => {\n let longestWord = (label || '')\n .replace(/<[^>]+>/g, '')\n .split(' ')\n .sort((a, b) => b.length - a.length);\n\n return longestWord[0].length;\n};\n\n// amountToIncreaseWidth is also used in graphing\nexport const amountToIncreaseWidth = (longestWord) => {\n if (!longestWord) {\n return 0;\n }\n\n return longestWord * 20;\n};\n\nexport const extractTextFromHTML = (htmlString) => {\n const parser = new DOMParser();\n const doc = parser?.parseFromString(htmlString, 'text/html');\n return doc?.body?.textContent || '';\n};\n\nexport const isEmptyObject = (obj) => {\n return obj && Object.keys(obj).length === 0 && obj.constructor === Object;\n};\n\nexport const isEmptyString = (str) => {\n return typeof str === 'string' && str.trim() === '';\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "3.1.0-next.
|
|
6
|
+
"version": "3.1.0-next.25+f2061663",
|
|
7
7
|
"description": "Some underlying components for building charts/graphs",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"react",
|
|
@@ -18,26 +18,26 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@emotion/react": "^11.14.0",
|
|
20
20
|
"@emotion/style": "^0.8.0",
|
|
21
|
-
"@mapbox/point-geometry": "^
|
|
21
|
+
"@mapbox/point-geometry": "^1.1.0",
|
|
22
22
|
"@mui/icons-material": "^7.3.4",
|
|
23
23
|
"@mui/material": "^7.3.4",
|
|
24
|
-
"@pie-lib/editable-html-tip-tap": "1.1.0-next.
|
|
25
|
-
"@pie-lib/render-ui": "5.1.0-next.
|
|
24
|
+
"@pie-lib/editable-html-tip-tap": "^1.1.0-next.5",
|
|
25
|
+
"@pie-lib/render-ui": "^5.1.0-next.5",
|
|
26
26
|
"assert": "^1.4.1",
|
|
27
|
-
"d3-scale": "^
|
|
28
|
-
"d3-selection": "^
|
|
27
|
+
"d3-scale": "^4.0.2",
|
|
28
|
+
"d3-selection": "^3.0.0",
|
|
29
29
|
"debug": "^4.1.1",
|
|
30
30
|
"invariant": "^2.2.4",
|
|
31
31
|
"lodash": "^4.17.11",
|
|
32
32
|
"prop-types": "^15.7.2",
|
|
33
33
|
"react": "^18.2.0",
|
|
34
|
-
"react-draggable": "^3.
|
|
34
|
+
"react-draggable": "^3.3.0",
|
|
35
35
|
"react-redux": "^6.0.0",
|
|
36
36
|
"redux": "^4.0.1"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"react": "^18.2.0"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "f2061663eb6709a72ae0e97277216e2a9409da15",
|
|
42
42
|
"scripts": {}
|
|
43
43
|
}
|
|
@@ -2,10 +2,10 @@ import { render } from '@testing-library/react';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { gridDraggable } from '../grid-draggable';
|
|
4
4
|
import { getDelta } from '../utils';
|
|
5
|
-
import {
|
|
5
|
+
import { pointer } from 'd3-selection';
|
|
6
6
|
|
|
7
7
|
jest.mock('d3-selection', () => ({
|
|
8
|
-
|
|
8
|
+
pointer: jest.fn().mockReturnValue([0, 0]),
|
|
9
9
|
}));
|
|
10
10
|
|
|
11
11
|
let mockDraggableCoreProps;
|
|
@@ -438,7 +438,7 @@ describe('gridDraggable', () => {
|
|
|
438
438
|
const onDragStop = jest.fn();
|
|
439
439
|
const props = { ...defaultProps, onClick, onDragStop };
|
|
440
440
|
|
|
441
|
-
|
|
441
|
+
pointer.mockReturnValue([0, 0]);
|
|
442
442
|
|
|
443
443
|
const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);
|
|
444
444
|
render(<Comp {...props} />);
|
|
@@ -460,7 +460,7 @@ describe('gridDraggable', () => {
|
|
|
460
460
|
graphProps.snap.x = jest.fn().mockReturnValue(2);
|
|
461
461
|
graphProps.snap.y = jest.fn().mockReturnValue(2);
|
|
462
462
|
|
|
463
|
-
|
|
463
|
+
pointer.mockReturnValue([1.7, 2.3]);
|
|
464
464
|
|
|
465
465
|
const propsWithGraphProps = { ...props, graphProps };
|
|
466
466
|
const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { render, cleanup } from '@testing-library/react';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Root } from '../root';
|
|
4
|
-
import { select,
|
|
4
|
+
import { select, pointer } from 'd3-selection';
|
|
5
5
|
|
|
6
6
|
jest.mock('d3-selection', () => ({
|
|
7
7
|
select: jest.fn(),
|
|
8
|
-
|
|
8
|
+
pointer: jest.fn(),
|
|
9
9
|
}));
|
|
10
10
|
|
|
11
11
|
const scaleMock = () => {
|
|
@@ -48,7 +48,7 @@ describe('root', () => {
|
|
|
48
48
|
select.mockReturnValue({
|
|
49
49
|
on: mockOn,
|
|
50
50
|
});
|
|
51
|
-
|
|
51
|
+
pointer.mockReturnValue([0, 0]);
|
|
52
52
|
|
|
53
53
|
defaultProps = {
|
|
54
54
|
classes: {},
|
|
@@ -62,9 +62,7 @@ describe('root', () => {
|
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
it('renders with children', () => {
|
|
65
|
-
const { container, getByText } = render(
|
|
66
|
-
<Root {...defaultProps}>hi</Root>
|
|
67
|
-
);
|
|
65
|
+
const { container, getByText } = render(<Root {...defaultProps}>hi</Root>);
|
|
68
66
|
expect(container.firstChild).toBeInTheDocument();
|
|
69
67
|
expect(getByText('hi')).toBeInTheDocument();
|
|
70
68
|
});
|
|
@@ -100,7 +98,7 @@ describe('root', () => {
|
|
|
100
98
|
});
|
|
101
99
|
|
|
102
100
|
describe('mouseMove function', () => {
|
|
103
|
-
it('calls
|
|
101
|
+
it('calls pointer with correct arguments', () => {
|
|
104
102
|
const onMouseMove = jest.fn();
|
|
105
103
|
const gp = graphProps();
|
|
106
104
|
const props = {
|
|
@@ -110,6 +108,7 @@ describe('root', () => {
|
|
|
110
108
|
};
|
|
111
109
|
|
|
112
110
|
const mockNode = document.createElement('div');
|
|
111
|
+
const mockEvent = { clientX: 10, clientY: 20 };
|
|
113
112
|
const mockSelection = {
|
|
114
113
|
_groups: [[mockNode]],
|
|
115
114
|
node: () => mockNode,
|
|
@@ -122,17 +121,17 @@ describe('root', () => {
|
|
|
122
121
|
mockOn(event, handler);
|
|
123
122
|
// When 'mousemove' is registered, immediately test it
|
|
124
123
|
if (event === 'mousemove' && handler) {
|
|
125
|
-
|
|
126
|
-
// Handler is bound with mockSelection as first arg, so call with
|
|
127
|
-
handler();
|
|
124
|
+
pointer.mockReturnValue([10, 20]);
|
|
125
|
+
// Handler is bound with mockSelection as first arg, so call with event
|
|
126
|
+
handler(mockEvent);
|
|
128
127
|
}
|
|
129
128
|
},
|
|
130
129
|
});
|
|
131
130
|
|
|
132
131
|
render(<Root {...props}>hi</Root>);
|
|
133
132
|
|
|
134
|
-
// Verify
|
|
135
|
-
expect(
|
|
133
|
+
// Verify pointer was called with the event and correct node
|
|
134
|
+
expect(pointer).toHaveBeenCalledWith(mockEvent, mockNode);
|
|
136
135
|
});
|
|
137
136
|
|
|
138
137
|
it('calls scale.x.invert and scale.y.invert', () => {
|
|
@@ -145,6 +144,7 @@ describe('root', () => {
|
|
|
145
144
|
};
|
|
146
145
|
|
|
147
146
|
const mockNode = document.createElement('div');
|
|
147
|
+
const mockEvent = { clientX: 15, clientY: 25 };
|
|
148
148
|
const mockSelection = {
|
|
149
149
|
_groups: [[mockNode]],
|
|
150
150
|
node: () => mockNode,
|
|
@@ -155,8 +155,8 @@ describe('root', () => {
|
|
|
155
155
|
on: (event, handler) => {
|
|
156
156
|
mockOn(event, handler);
|
|
157
157
|
if (event === 'mousemove' && handler) {
|
|
158
|
-
|
|
159
|
-
handler();
|
|
158
|
+
pointer.mockReturnValue([15, 25]);
|
|
159
|
+
handler(mockEvent);
|
|
160
160
|
}
|
|
161
161
|
},
|
|
162
162
|
});
|
|
@@ -179,6 +179,7 @@ describe('root', () => {
|
|
|
179
179
|
};
|
|
180
180
|
|
|
181
181
|
const mockNode = document.createElement('div');
|
|
182
|
+
const mockEvent = { clientX: 100, clientY: 200 };
|
|
182
183
|
const mockSelection = {
|
|
183
184
|
_groups: [[mockNode]],
|
|
184
185
|
node: () => mockNode,
|
|
@@ -189,7 +190,7 @@ describe('root', () => {
|
|
|
189
190
|
on: (event, handler) => {
|
|
190
191
|
mockOn(event, handler);
|
|
191
192
|
if (event === 'mousemove' && handler) {
|
|
192
|
-
|
|
193
|
+
pointer.mockReturnValue([100, 200]);
|
|
193
194
|
handler();
|
|
194
195
|
}
|
|
195
196
|
},
|
|
@@ -216,6 +217,7 @@ describe('root', () => {
|
|
|
216
217
|
};
|
|
217
218
|
|
|
218
219
|
const mockNode = document.createElement('div');
|
|
220
|
+
const mockEvent = { clientX: 100, clientY: 200 };
|
|
219
221
|
const mockSelection = {
|
|
220
222
|
_groups: [[mockNode]],
|
|
221
223
|
node: () => mockNode,
|
|
@@ -226,8 +228,8 @@ describe('root', () => {
|
|
|
226
228
|
on: (event, handler) => {
|
|
227
229
|
mockOn(event, handler);
|
|
228
230
|
if (event === 'mousemove' && handler) {
|
|
229
|
-
|
|
230
|
-
handler();
|
|
231
|
+
pointer.mockReturnValue([100, 200]);
|
|
232
|
+
handler(mockEvent);
|
|
231
233
|
}
|
|
232
234
|
},
|
|
233
235
|
});
|
|
@@ -245,6 +247,7 @@ describe('root', () => {
|
|
|
245
247
|
};
|
|
246
248
|
|
|
247
249
|
const mockNode = document.createElement('div');
|
|
250
|
+
const mockEvent = { clientX: 100, clientY: 200 };
|
|
248
251
|
const mockSelection = {
|
|
249
252
|
_groups: [[mockNode]],
|
|
250
253
|
node: () => mockNode,
|
|
@@ -255,9 +258,9 @@ describe('root', () => {
|
|
|
255
258
|
on: (event, handler) => {
|
|
256
259
|
mockOn(event, handler);
|
|
257
260
|
if (event === 'mousemove' && handler) {
|
|
258
|
-
|
|
261
|
+
pointer.mockReturnValue([100, 200]);
|
|
259
262
|
// Should not throw error when onMouseMove is not provided
|
|
260
|
-
expect(() => handler()).not.toThrow();
|
|
263
|
+
expect(() => handler(mockEvent)).not.toThrow();
|
|
261
264
|
}
|
|
262
265
|
},
|
|
263
266
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AssertionError } from 'assert';
|
|
2
1
|
import * as utils from '../utils';
|
|
3
2
|
|
|
4
3
|
const xy = utils.xy;
|
|
@@ -53,7 +52,7 @@ describe('utils', () => {
|
|
|
53
52
|
let scaleFn;
|
|
54
53
|
|
|
55
54
|
beforeEach(() => {
|
|
56
|
-
scaleFn = jest.fn(function(v) {
|
|
55
|
+
scaleFn = jest.fn(function (v) {
|
|
57
56
|
return v;
|
|
58
57
|
});
|
|
59
58
|
});
|
package/src/grid-draggable.jsx
CHANGED
|
@@ -6,7 +6,7 @@ import debug from 'debug';
|
|
|
6
6
|
import * as utils from './utils';
|
|
7
7
|
import isFunction from 'lodash/isFunction';
|
|
8
8
|
import invariant from 'invariant';
|
|
9
|
-
import {
|
|
9
|
+
import { pointer } from 'd3-selection';
|
|
10
10
|
|
|
11
11
|
const log = debug('pie-lib:plot:grid-draggable');
|
|
12
12
|
|
|
@@ -235,7 +235,7 @@ export const gridDraggable = (opts) => (Comp) => {
|
|
|
235
235
|
this.setState({ startX: null });
|
|
236
236
|
const { graphProps } = this.props;
|
|
237
237
|
const { scale, snap } = graphProps;
|
|
238
|
-
const [rawX, rawY] =
|
|
238
|
+
const [rawX, rawY] = pointer(e, e.target);
|
|
239
239
|
let x = scale.x.invert(rawX);
|
|
240
240
|
let y = scale.y.invert(rawY);
|
|
241
241
|
x = snap.x(x);
|
package/src/root.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { styled } from '@mui/material/styles';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { select,
|
|
4
|
+
import { select, pointer } from 'd3-selection';
|
|
5
5
|
|
|
6
6
|
import { color, Readable } from '@pie-lib/render-ui';
|
|
7
7
|
import EditableHtml from '@pie-lib/editable-html-tip-tap';
|
|
@@ -126,7 +126,7 @@ export class Root extends React.Component {
|
|
|
126
126
|
labelsCharactersLimit: PropTypes.number,
|
|
127
127
|
};
|
|
128
128
|
|
|
129
|
-
mouseMove = (g) => {
|
|
129
|
+
mouseMove = (g, event) => {
|
|
130
130
|
const { graphProps, onMouseMove } = this.props;
|
|
131
131
|
|
|
132
132
|
if (!onMouseMove) {
|
|
@@ -134,7 +134,7 @@ export class Root extends React.Component {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
const { scale, snap } = graphProps;
|
|
137
|
-
const coords =
|
|
137
|
+
const coords = pointer(event, g.node());
|
|
138
138
|
const x = scale.x.invert(coords[0]);
|
|
139
139
|
const y = scale.y.invert(coords[1]);
|
|
140
140
|
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _react = _interopRequireDefault(require("react"));
|
|
5
|
-
var _react2 = require("@testing-library/react");
|
|
6
|
-
var _draggable = _interopRequireDefault(require("../draggable"));
|
|
7
|
-
describe('draggable', function () {
|
|
8
|
-
it('renders with children', function () {
|
|
9
|
-
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_draggable["default"], null, /*#__PURE__*/_react["default"].createElement("div", null, "hellow"))),
|
|
10
|
-
container = _render.container;
|
|
11
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
12
|
-
});
|
|
13
|
-
describe('local', function () {
|
|
14
|
-
it('resets position state when receiving new props', function () {
|
|
15
|
-
// Render with initial props
|
|
16
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_draggable["default"], {
|
|
17
|
-
position: {
|
|
18
|
-
x: 100,
|
|
19
|
-
y: 100
|
|
20
|
-
}
|
|
21
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
22
|
-
"data-testid": "draggable-child"
|
|
23
|
-
}, "content"))),
|
|
24
|
-
rerender = _render2.rerender,
|
|
25
|
-
container = _render2.container;
|
|
26
|
-
|
|
27
|
-
// Verify initial render
|
|
28
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
29
|
-
|
|
30
|
-
// Update props - this triggers componentWillReceiveProps
|
|
31
|
-
// which should reset internal x/y state to 0
|
|
32
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_draggable["default"], {
|
|
33
|
-
position: {
|
|
34
|
-
x: 200,
|
|
35
|
-
y: 200
|
|
36
|
-
}
|
|
37
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
38
|
-
"data-testid": "draggable-child"
|
|
39
|
-
}, "content")));
|
|
40
|
-
|
|
41
|
-
// The component should still render correctly after prop change
|
|
42
|
-
// The internal state reset is tested by ensuring no errors occur
|
|
43
|
-
// and the component continues to function properly
|
|
44
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfZHJhZ2dhYmxlIiwiZGVzY3JpYmUiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50IiwiX3JlbmRlcjIiLCJwb3NpdGlvbiIsIngiLCJ5IiwicmVyZW5kZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2RyYWdnYWJsZS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgRHJhZ2dhYmxlIGZyb20gJy4uL2RyYWdnYWJsZSc7XG5cbmRlc2NyaWJlKCdkcmFnZ2FibGUnLCAoKSA9PiB7XG4gIGl0KCdyZW5kZXJzIHdpdGggY2hpbGRyZW4nLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgIDxEcmFnZ2FibGU+XG4gICAgICAgIDxkaXY+aGVsbG93PC9kaXY+XG4gICAgICA8L0RyYWdnYWJsZT4sXG4gICAgKTtcbiAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2NhbCcsICgpID0+IHtcbiAgICBpdCgncmVzZXRzIHBvc2l0aW9uIHN0YXRlIHdoZW4gcmVjZWl2aW5nIG5ldyBwcm9wcycsICgpID0+IHtcbiAgICAgIC8vIFJlbmRlciB3aXRoIGluaXRpYWwgcHJvcHNcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIsIGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8RHJhZ2dhYmxlIHBvc2l0aW9uPXt7IHg6IDEwMCwgeTogMTAwIH19PlxuICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnZ2FibGUtY2hpbGRcIj5jb250ZW50PC9kaXY+XG4gICAgICAgIDwvRHJhZ2dhYmxlPlxuICAgICAgKTtcblxuICAgICAgLy8gVmVyaWZ5IGluaXRpYWwgcmVuZGVyXG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBwcm9wcyAtIHRoaXMgdHJpZ2dlcnMgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xuICAgICAgLy8gd2hpY2ggc2hvdWxkIHJlc2V0IGludGVybmFsIHgveSBzdGF0ZSB0byAwXG4gICAgICByZXJlbmRlcihcbiAgICAgICAgPERyYWdnYWJsZSBwb3NpdGlvbj17eyB4OiAyMDAsIHk6IDIwMCB9fT5cbiAgICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZ2dhYmxlLWNoaWxkXCI+Y29udGVudDwvZGl2PlxuICAgICAgICA8L0RyYWdnYWJsZT5cbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBjb21wb25lbnQgc2hvdWxkIHN0aWxsIHJlbmRlciBjb3JyZWN0bHkgYWZ0ZXIgcHJvcCBjaGFuZ2VcbiAgICAgIC8vIFRoZSBpbnRlcm5hbCBzdGF0ZSByZXNldCBpcyB0ZXN0ZWQgYnkgZW5zdXJpbmcgbm8gZXJyb3JzIG9jY3VyXG4gICAgICAvLyBhbmQgdGhlIGNvbXBvbmVudCBjb250aW51ZXMgdG8gZnVuY3Rpb24gcHJvcGVybHlcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsWUFBTTtFQUMxQkMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFlBQU07SUFDaEMsSUFBQUMsT0FBQSxHQUFzQixJQUFBQyxjQUFNLGVBQzFCUixNQUFBLFlBQUFTLGFBQUEsQ0FBQ0wsVUFBQSxXQUFTLHFCQUNSSixNQUFBLFlBQUFTLGFBQUEsY0FBSyxRQUFXLENBQ1AsQ0FDYixDQUFDO01BSk9DLFNBQVMsR0FBQUgsT0FBQSxDQUFURyxTQUFTO0lBS2pCQyxNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7RUFDbEQsQ0FBQyxDQUFDO0VBRUZSLFFBQVEsQ0FBQyxPQUFPLEVBQUUsWUFBTTtJQUN0QkMsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLFlBQU07TUFDekQ7TUFDQSxJQUFBUSxRQUFBLEdBQWdDLElBQUFOLGNBQU0sZUFDcENSLE1BQUEsWUFBQVMsYUFBQSxDQUFDTCxVQUFBLFdBQVM7VUFBQ1csUUFBUSxFQUFFO1lBQUVDLENBQUMsRUFBRSxHQUFHO1lBQUVDLENBQUMsRUFBRTtVQUFJO1FBQUUsZ0JBQ3RDakIsTUFBQSxZQUFBUyxhQUFBO1VBQUssZUFBWTtRQUFpQixHQUFDLFNBQVksQ0FDdEMsQ0FDYixDQUFDO1FBSk9TLFFBQVEsR0FBQUosUUFBQSxDQUFSSSxRQUFRO1FBQUVSLFNBQVMsR0FBQUksUUFBQSxDQUFUSixTQUFTOztNQU0zQjtNQUNBQyxNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7O01BRWhEO01BQ0E7TUFDQUssUUFBUSxjQUNObEIsTUFBQSxZQUFBUyxhQUFBLENBQUNMLFVBQUEsV0FBUztRQUFDVyxRQUFRLEVBQUU7VUFBRUMsQ0FBQyxFQUFFLEdBQUc7VUFBRUMsQ0FBQyxFQUFFO1FBQUk7TUFBRSxnQkFDdENqQixNQUFBLFlBQUFTLGFBQUE7UUFBSyxlQUFZO01BQWlCLEdBQUMsU0FBWSxDQUN0QyxDQUNiLENBQUM7O01BRUQ7TUFDQTtNQUNBO01BQ0FFLE1BQU0sQ0FBQ0QsU0FBUyxDQUFDRSxVQUFVLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|