@pie-lib/tools 0.9.36-next.0 → 0.11.0-beta.0

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/lib/__tests__/anchor-utils.test.js +228 -0
  4. package/lib/__tests__/rotatable.test.js +255 -0
  5. package/lib/__tests__/transform-origin.test.js +63 -0
  6. package/lib/anchor-utils.js +1 -1
  7. package/lib/anchor.js +1 -1
  8. package/lib/index.js +1 -1
  9. package/lib/protractor/__tests__/graphic.test.js +27 -0
  10. package/lib/protractor/__tests__/index.test.js +23 -0
  11. package/lib/protractor/graphic.js +1 -1
  12. package/lib/protractor/index.js +1 -1
  13. package/lib/rotatable.js +1 -1
  14. package/lib/ruler/__tests__/graphic.test.js +31 -0
  15. package/lib/ruler/__tests__/index.test.js +51 -0
  16. package/lib/ruler/__tests__/unit-type.test.js +24 -0
  17. package/lib/ruler/__tests__/unit.test.js +30 -0
  18. package/lib/ruler/graphic.js +1 -1
  19. package/lib/ruler/index.js +1 -1
  20. package/lib/ruler/unit-type.js +1 -1
  21. package/lib/ruler/unit.js +1 -1
  22. package/lib/style-utils.js +1 -1
  23. package/lib/transform-origin.js +1 -1
  24. package/package.json +3 -3
  25. package/src/__tests__/__snapshots__/rotatable.test.jsx.snap +37 -0
  26. package/src/__tests__/anchor-utils.test.js +131 -0
  27. package/src/__tests__/rotatable.test.jsx +220 -0
  28. package/src/__tests__/transform-origin.test.jsx +24 -0
  29. package/src/index.js +1 -0
  30. package/src/protractor/__tests__/__snapshots__/graphic.test.jsx.snap +1234 -0
  31. package/src/protractor/__tests__/__snapshots__/index.test.jsx.snap +40 -0
  32. package/src/protractor/__tests__/graphic.test.jsx +13 -0
  33. package/src/protractor/__tests__/index.test.jsx +13 -0
  34. package/src/ruler/__tests__/__snapshots__/graphic.test.jsx.snap +160 -0
  35. package/src/ruler/__tests__/__snapshots__/index.test.jsx.snap +45 -0
  36. package/src/ruler/__tests__/__snapshots__/unit-type.test.jsx.snap +12 -0
  37. package/src/ruler/__tests__/__snapshots__/unit.test.jsx.snap +30 -0
  38. package/src/ruler/__tests__/graphic.test.jsx +23 -0
  39. package/src/ruler/__tests__/index.test.jsx +28 -0
  40. package/src/ruler/__tests__/unit-type.test.jsx +13 -0
  41. package/src/ruler/__tests__/unit.test.jsx +15 -0
  42. package/lib/anchor-utils.js.map +0 -1
  43. package/lib/anchor.js.map +0 -1
  44. package/lib/index.js.map +0 -1
  45. package/lib/protractor/graphic.js.map +0 -1
  46. package/lib/protractor/index.js.map +0 -1
  47. package/lib/rotatable.js.map +0 -1
  48. package/lib/ruler/graphic.js.map +0 -1
  49. package/lib/ruler/index.js.map +0 -1
  50. package/lib/ruler/unit-type.js.map +0 -1
  51. package/lib/ruler/unit.js.map +0 -1
  52. package/lib/style-utils.js.map +0 -1
  53. package/lib/transform-origin.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`protractor snapshot renders 1`] = `
4
+ <WithStyles(Rotatable)
5
+ handle={
6
+ Array [
7
+ Object {
8
+ "class": "leftAnchor",
9
+ "origin": "222.75px 220.5px",
10
+ },
11
+ Object {
12
+ "class": "rightAnchor",
13
+ "origin": "222.75px 220.5px",
14
+ },
15
+ ]
16
+ }
17
+ startPosition={
18
+ Object {
19
+ "left": 0,
20
+ "top": 0,
21
+ }
22
+ }
23
+ >
24
+ <div
25
+ style={
26
+ Object {
27
+ "width": "450px",
28
+ }
29
+ }
30
+ >
31
+ <WithStyles(Graphic) />
32
+ <WithStyles(Component)
33
+ className="leftAnchor"
34
+ />
35
+ <WithStyles(Component)
36
+ className="rightAnchor"
37
+ />
38
+ </div>
39
+ </WithStyles(Rotatable)>
40
+ `;
@@ -0,0 +1,13 @@
1
+ import toJson from 'enzyme-to-json';
2
+ import { shallow } from 'enzyme';
3
+ import { Graphic } from '../graphic';
4
+ import React from 'react';
5
+
6
+ describe('graphic', () => {
7
+ describe('snapshot', () => {
8
+ it('renders', () => {
9
+ const wrapper = shallow(<Graphic classes={{ path: 'path', line: 'line', circle: 'circle' }} />);
10
+ expect(toJson(wrapper)).toMatchSnapshot();
11
+ });
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import toJson from 'enzyme-to-json';
2
+ import { shallow } from 'enzyme';
3
+ import { Protractor } from '../index';
4
+ import React from 'react';
5
+
6
+ describe('protractor', () => {
7
+ describe('snapshot', () => {
8
+ it('renders', () => {
9
+ const wrapper = shallow(<Protractor classes={{}} />);
10
+ expect(toJson(wrapper)).toMatchSnapshot();
11
+ });
12
+ });
13
+ });
@@ -0,0 +1,160 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`graphic snapshot renders 1`] = `
4
+ <svg
5
+ viewBox="0 0 300 100"
6
+ >
7
+ <Bg
8
+ className="bg"
9
+ height={100}
10
+ width={300}
11
+ />
12
+ <WithStyles(UnitType)
13
+ label="in"
14
+ />
15
+ <WithStyles(Unit)
16
+ config={
17
+ Object {
18
+ "type": "in",
19
+ }
20
+ }
21
+ height={100}
22
+ index={1}
23
+ key="1"
24
+ last={false}
25
+ width={25}
26
+ />
27
+ <WithStyles(Unit)
28
+ config={
29
+ Object {
30
+ "type": "in",
31
+ }
32
+ }
33
+ height={100}
34
+ index={2}
35
+ key="2"
36
+ last={false}
37
+ width={25}
38
+ />
39
+ <WithStyles(Unit)
40
+ config={
41
+ Object {
42
+ "type": "in",
43
+ }
44
+ }
45
+ height={100}
46
+ index={3}
47
+ key="3"
48
+ last={false}
49
+ width={25}
50
+ />
51
+ <WithStyles(Unit)
52
+ config={
53
+ Object {
54
+ "type": "in",
55
+ }
56
+ }
57
+ height={100}
58
+ index={4}
59
+ key="4"
60
+ last={false}
61
+ width={25}
62
+ />
63
+ <WithStyles(Unit)
64
+ config={
65
+ Object {
66
+ "type": "in",
67
+ }
68
+ }
69
+ height={100}
70
+ index={5}
71
+ key="5"
72
+ last={false}
73
+ width={25}
74
+ />
75
+ <WithStyles(Unit)
76
+ config={
77
+ Object {
78
+ "type": "in",
79
+ }
80
+ }
81
+ height={100}
82
+ index={6}
83
+ key="6"
84
+ last={false}
85
+ width={25}
86
+ />
87
+ <WithStyles(Unit)
88
+ config={
89
+ Object {
90
+ "type": "in",
91
+ }
92
+ }
93
+ height={100}
94
+ index={7}
95
+ key="7"
96
+ last={false}
97
+ width={25}
98
+ />
99
+ <WithStyles(Unit)
100
+ config={
101
+ Object {
102
+ "type": "in",
103
+ }
104
+ }
105
+ height={100}
106
+ index={8}
107
+ key="8"
108
+ last={false}
109
+ width={25}
110
+ />
111
+ <WithStyles(Unit)
112
+ config={
113
+ Object {
114
+ "type": "in",
115
+ }
116
+ }
117
+ height={100}
118
+ index={9}
119
+ key="9"
120
+ last={false}
121
+ width={25}
122
+ />
123
+ <WithStyles(Unit)
124
+ config={
125
+ Object {
126
+ "type": "in",
127
+ }
128
+ }
129
+ height={100}
130
+ index={10}
131
+ key="10"
132
+ last={false}
133
+ width={25}
134
+ />
135
+ <WithStyles(Unit)
136
+ config={
137
+ Object {
138
+ "type": "in",
139
+ }
140
+ }
141
+ height={100}
142
+ index={11}
143
+ key="11"
144
+ last={false}
145
+ width={25}
146
+ />
147
+ <WithStyles(Unit)
148
+ config={
149
+ Object {
150
+ "type": "in",
151
+ }
152
+ }
153
+ height={100}
154
+ index={12}
155
+ key="12"
156
+ last={true}
157
+ width={25}
158
+ />
159
+ </svg>
160
+ `;
@@ -0,0 +1,45 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ruler snapshot renders 1`] = `
4
+ <WithStyles(Rotatable)
5
+ handle={
6
+ Array [
7
+ Object {
8
+ "class": "leftAnchor",
9
+ "origin": "bottom right",
10
+ },
11
+ Object {
12
+ "class": "rightAnchor",
13
+ "origin": "bottom left",
14
+ },
15
+ ]
16
+ }
17
+ >
18
+ <div
19
+ style={
20
+ Object {
21
+ "height": "60px",
22
+ "width": "480px",
23
+ }
24
+ }
25
+ >
26
+ <WithStyles(Graphic)
27
+ height={60}
28
+ unit={
29
+ Object {
30
+ "ticks": 16,
31
+ "type": undefined,
32
+ }
33
+ }
34
+ units={12}
35
+ width={480}
36
+ />
37
+ <WithStyles(Component)
38
+ className="leftAnchor"
39
+ />
40
+ <WithStyles(Component)
41
+ className="rightAnchor"
42
+ />
43
+ </div>
44
+ </WithStyles(Rotatable)>
45
+ `;
@@ -0,0 +1,12 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`unit-type snapshot renders 1`] = `
4
+ <text
5
+ fontSize={11}
6
+ stroke="none"
7
+ x={8}
8
+ y={14}
9
+ >
10
+ cm
11
+ </text>
12
+ `;
@@ -0,0 +1,30 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`unit snapshot renders 1`] = `
4
+ <g
5
+ style={
6
+ Object {
7
+ "transform": "translate(30px, 0px)",
8
+ }
9
+ }
10
+ >
11
+ <line
12
+ x1={30}
13
+ x2={30}
14
+ y1={0}
15
+ y2={20}
16
+ />
17
+ <Ticks
18
+ count={10}
19
+ height={20}
20
+ width={30}
21
+ />
22
+ <text
23
+ width={30}
24
+ x={25}
25
+ y={15}
26
+ >
27
+ 2
28
+ </text>
29
+ </g>
30
+ `;
@@ -0,0 +1,23 @@
1
+ import toJson from 'enzyme-to-json';
2
+ import { shallow } from 'enzyme';
3
+ import { Graphic } from '../graphic';
4
+ import React from 'react';
5
+
6
+ describe('graphic', () => {
7
+ describe('snapshot', () => {
8
+ it('renders', () => {
9
+ const wrapper = shallow(
10
+ <Graphic
11
+ width={300}
12
+ height={100}
13
+ units={12}
14
+ unit={{
15
+ type: 'in',
16
+ }}
17
+ classes={{ bg: 'bg' }}
18
+ />,
19
+ );
20
+ expect(toJson(wrapper)).toMatchSnapshot();
21
+ });
22
+ });
23
+ });
@@ -0,0 +1,28 @@
1
+ import toJson from 'enzyme-to-json';
2
+ import { shallow } from 'enzyme';
3
+ import { Ruler } from '../index';
4
+ import RulerGraphic from '../graphic';
5
+ import React from 'react';
6
+
7
+ describe('ruler', () => {
8
+ describe('snapshot', () => {
9
+ it('renders', () => {
10
+ const wrapper = shallow(<Ruler classes={{}} />);
11
+ expect(toJson(wrapper)).toMatchSnapshot();
12
+ });
13
+ });
14
+
15
+ describe('logic', () => {
16
+ it('sets unit for imperial', () => {
17
+ const wrapper = shallow(<Ruler measure={'imperial'} classes={{}} label={'in'} />);
18
+ const r = wrapper.find(RulerGraphic);
19
+ expect(r.prop('unit')).toEqual({ ticks: 16, type: 'in' });
20
+ });
21
+
22
+ it('sets unit for metric', () => {
23
+ const wrapper = shallow(<Ruler measure={'metric'} classes={{}} label={'cm'} />);
24
+ const r = wrapper.find(RulerGraphic);
25
+ expect(r.prop('unit')).toEqual({ ticks: 10, type: 'cm' });
26
+ });
27
+ });
28
+ });
@@ -0,0 +1,13 @@
1
+ import toJson from 'enzyme-to-json';
2
+ import { shallow } from 'enzyme';
3
+ import { UnitType } from '../unit-type';
4
+ import React from 'react';
5
+
6
+ describe('unit-type', () => {
7
+ describe('snapshot', () => {
8
+ it('renders', () => {
9
+ const wrapper = shallow(<UnitType classes={{}} label={'cm'} />);
10
+ expect(toJson(wrapper)).toMatchSnapshot();
11
+ });
12
+ });
13
+ });
@@ -0,0 +1,15 @@
1
+ import toJson from 'enzyme-to-json';
2
+ import { shallow } from 'enzyme';
3
+ import { Unit } from '../unit';
4
+ import React from 'react';
5
+
6
+ describe('unit', () => {
7
+ describe('snapshot', () => {
8
+ it('renders', () => {
9
+ const wrapper = shallow(
10
+ <Unit index={2} width={30} height={20} last={false} config={{ ticks: 10 }} classes={{}} />,
11
+ );
12
+ expect(toJson(wrapper)).toMatchSnapshot();
13
+ });
14
+ });
15
+ });
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/anchor-utils.js"],"names":["log","toDegrees","radians","Math","PI","toRadians","degrees","normalizeAngle","a","toPoint","rect","edge","out","Point","x","y","distanceBetween","from","to","center","width","height","fromCenter","rotateAround","toCenter","diff","sub","getXAndY","corner","point","arctangent","atan2","getAngleAndHypotenuse","hypotenuse","sqrt","pow","getPosition","side","angle","calcAngle","points","anglePoints","key","ra","t","angles","sides","getTop","abs","getLeft","getAnchor","Error","top","left"],"mappings":"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","sourcesContent":["import { trigCalculator } from 'trigonometry-calculator';\nimport Point from '@mapbox/point-geometry';\nimport debug from 'debug';\nimport { parse as parseOrigin } from './transform-origin';\nconst log = debug('@pie-lib:tools:anchor-utils');\n\nexport const toDegrees = (radians) => radians * (180 / Math.PI);\nexport const toRadians = (degrees) => degrees * (Math.PI / 180);\n\nexport const normalizeAngle = (a) => {\n if (a > 360) {\n return a % 360;\n } else if (a < 0) {\n return 360 + (a % 360);\n }\n return a;\n};\n\nexport const toPoint = (rect, edge) => {\n const out = parseOrigin(rect, edge);\n return new Point(out.x, out.y);\n};\n\n/**\n * Get the distance between to anchor points in a rect.\n * @param {{width: number, height: number}} rect - the rect\n * @param {number} degrees - the degrees\n * @param {string} from - from anchor\n * @param {string} to - to anchor\n * @returns {Point} point - the distance as a Point\n */\nexport const distanceBetween = (rect, degrees, from, to) => {\n const center = new Point(rect.width / 2, rect.height / 2);\n const radians = toRadians(degrees);\n const fromCenter = center.rotateAround(radians, toPoint(rect, from));\n const toCenter = center.rotateAround(radians, toPoint(rect, to));\n const diff = fromCenter.sub(toCenter);\n return diff;\n};\n\n/**\n * For a corner string, a point and a rect, return a relative x,y from that point to a corner.\n * Note that the y value descends as it goes down (unlike for a screen's y value), so this is only really useful for math functions.\n * @example\n * ```\n * getXAndY('top-left', {width: 100, height: 100}, 10, 10) //=> {x:10, y: -90}\n * ```\n * @param {*} corner\n * @param {*} rect\n * @param {*} point\n */\nexport const getXAndY = (corner, rect, point) => {\n if (corner === 'top-left') {\n const x = point.x * -1;\n const y = point.y;\n return { x, y };\n } else if (corner === 'bottom-left') {\n const x = point.x * -1;\n const y = point.y - rect.height;\n return { x, y };\n } else if (corner === 'top-right') {\n const x = rect.width - point.x;\n const y = point.y;\n return { x, y };\n } else if (corner === 'bottom-right') {\n const x = rect.width - point.x;\n const y = point.y - rect.height;\n return { x, y };\n }\n};\n\nexport const arctangent = (x, y) => toDegrees(Math.atan2(x, y));\n\nexport const getAngleAndHypotenuse = (corner, rect, point) => {\n const { x, y } = getXAndY(corner, rect, point);\n const degrees = arctangent(x, y);\n const hypotenuse = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n return { x, y, degrees, hypotenuse };\n};\n\nconst getPosition = (side, rect, point, angle, calcAngle) => {\n if (angle === 0) {\n return side === 'left' ? point.x : point.y;\n }\n const points = anglePoints(angle);\n const key = points[side];\n\n const { degrees, hypotenuse } = getAngleAndHypotenuse(key, rect, point);\n\n const ra = calcAngle(degrees);\n\n if (ra === 0) {\n return hypotenuse;\n }\n\n const t = {\n angles: { 0: ra, 1: 90 },\n sides: { 1: hypotenuse },\n };\n const out = trigCalculator(t);\n return out.sides[2];\n};\n\nexport const getTop = (rect, point, angle) => {\n return getPosition('top', rect, point, angle, (degrees) => {\n return Math.abs(angle + degrees);\n });\n};\n\nexport const getLeft = (rect, point, angle) => {\n return getPosition('left', rect, point, angle, (degrees) => {\n return Math.abs(angle + degrees + 90);\n });\n};\n\n/**\n * Calculate the position of an anchor within a bounding rect, if the source rect has been rotated by an angle.\n * It does this by finding the appropriate corner of the src rect, that touches the bounding rect, calculates\n * the hypotenuse (h) of that anchor to that point. Then using that plus the rotation it calculates\n * the sides of the triangle and returns the length of the side that touches the bounding rect.\n * @param {{width: number, height: number}} rect - the rect which contains the point\n * @param {{x:number, y: number}} point - the point within the rect\n * @param {number} angle - the angle in degrees that the rect has rotated.\n * @returns {{left: number, top: number}} position\n */\nexport const getAnchor = (rect, point, angle) => {\n log('[getAnchor] rect: ', rect, 'point:', point, 'angle: ', angle);\n if (point.x > rect.width) {\n throw new Error(`x: ${point.x} cannot be greater than width: ${rect.width}`);\n }\n if (point.y > rect.height) {\n throw new Error(`y: ${point.y} cannot be greater than height: ${rect.height}`);\n }\n const a = normalizeAngle(angle);\n const top = getTop(rect, point, a);\n const left = getLeft(rect, point, a);\n\n log('[getAnchor] top: ', top, 'left: ', left);\n return { top, left };\n};\n\nconst anglePoints = (angle) => {\n if (angle <= 90) {\n return { top: 'top-left', left: 'bottom-left' };\n } else if (angle > 90 && angle <= 180) {\n return { top: 'bottom-left', left: 'bottom-right' };\n } else if (angle > 180 && angle <= 270) {\n return { top: 'bottom-right', left: 'top-right' };\n } else if (angle > 270 && angle < 360) {\n return { top: 'top-right', left: 'top-left' };\n }\n};\n"],"file":"anchor-utils.js"}
package/lib/anchor.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/anchor.jsx"],"names":["Anchor","theme","anchor","cursor","width","height","position","borderRadius","backgroundColor","palette","primary","contrastText","transition","border","dark","light","classes","className"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,MAAM,GAAG,wBAAW,UAACC,KAAD;AAAA,SAAY;AACpCC,IAAAA,MAAM,EAAE;AACNC,MAAAA,MAAM,EAAE,SADF;AAENC,MAAAA,KAAK,EAAE,MAFD;AAGNC,MAAAA,MAAM,EAAE,MAHF;AAINC,MAAAA,QAAQ,EAAE,UAJJ;AAKNC,MAAAA,YAAY,EAAE,MALR;AAMNC,MAAAA,eAAe,4BAAqBP,KAAK,CAACQ,OAAN,CAAcC,OAAd,CAAsBC,YAA3C,MANT;AAONC,MAAAA,UAAU,EAAE,gCAPN;AAQNC,MAAAA,MAAM,0CAAmCZ,KAAK,CAACQ,OAAN,CAAcC,OAAd,CAAsBI,IAAzD,MARA;AASN,iBAAW;AACTN,QAAAA,eAAe,kCAA2BP,KAAK,CAACQ,OAAN,CAAcC,OAAd,CAAsBK,KAAjD;AADN;AATL;AAD4B,GAAZ;AAAA,CAAX,EAcX;AAAA,MAAGC,OAAH,QAAGA,OAAH;AAAA,MAAYC,SAAZ,QAAYA,SAAZ;AAAA,sBAA4B;AAAK,IAAA,SAAS,EAAE,4BAAWD,OAAO,CAACd,MAAnB,EAA2Be,SAA3B;AAAhB,IAA5B;AAAA,CAdW,CAAf;eAgBejB,M","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nconst Anchor = withStyles((theme) => ({\n anchor: {\n cursor: 'pointer',\n width: '20px',\n height: '20px',\n position: 'absolute',\n borderRadius: '10px',\n backgroundColor: `var(--ruler-bg, ${theme.palette.primary.contrastText})`,\n transition: 'background-color 200ms ease-in',\n border: `solid 1px var(--ruler-stroke, ${theme.palette.primary.dark})`,\n '&:hover': {\n backgroundColor: `var(--ruler-bg-hover, ${theme.palette.primary.light})`,\n },\n },\n}))(({ classes, className }) => <div className={classNames(classes.anchor, className)} />);\n\nexport default Anchor;\n"],"file":"anchor.js"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA","sourcesContent":["import Protractor from './protractor';\nimport Ruler from './ruler';\nimport Rotatable from './rotatable';\nimport * as utils from './anchor-utils';\nexport { Protractor, Ruler, Rotatable, utils };\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/protractor/graphic.jsx"],"names":["Line","theme","line","strokeWidth","stroke","angle","classes","major","minor","Spike","Text","text","fontSize","textAnchor","fill","Graphic","props","path","map","r","circle","React","PureComponent","PropTypes","object","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport range from 'lodash/range';\nimport PropTypes from 'prop-types';\nimport { strokeColor, noSelect } from '../style-utils';\n\nconst Line = withStyles((theme) => ({\n line: {\n strokeWidth: '0.2',\n stroke: strokeColor(theme),\n },\n}))(({ angle, classes, major, minor }) => (\n <line\n transform={`rotate(${angle}, 50.5,50)`}\n className={classes.line}\n style={{}}\n x1=\"1\"\n x2={major ? 10 : minor ? 6 : 3}\n y1=\"50\"\n y2=\"50\"\n />\n));\n\nconst Spike = withStyles((theme) => ({\n line: {\n strokeWidth: '0.2',\n stroke: strokeColor(theme),\n },\n}))(({ angle, classes }) => (\n <line transform={`rotate(${angle}, 50.5,50)`} className={classes.line} style={{}} x1=\"15\" x2={'46'} y1=\"50\" y2=\"50\" />\n));\n\nconst Text = withStyles((theme) => ({\n text: {\n fontSize: '2.5px',\n textAnchor: 'middle',\n fill: strokeColor(theme),\n ...noSelect(),\n },\n}))(({ angle, classes }) => (\n <text transform={`rotate(${angle - 90}, 50.5, 50)`} className={classes.text} x=\"50\" y=\"12.5\">\n {angle}\n </text>\n));\n\nexport class Graphic extends React.PureComponent {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n };\n\n render() {\n const { classes } = this.props;\n return (\n <svg viewBox=\"0 0 102 61\">\n <path className={classes.path} d=\"M 1,50 A 1,1 0 0 1 100,50 L 100,60 L 1,60 Z\" fill=\"none\" />\n {range(0, 181).map((r) => (\n <Line minor={r % 5 === 0} major={r % 10 === 0} angle={r} key={r} />\n ))}\n {range(0, 181, 10).map((r) => (\n <React.Fragment key={r}>\n <Spike angle={r} />\n <Text angle={r} />\n </React.Fragment>\n ))}\n <circle r=\"4\" cx=\"50.5\" cy=\"50\" className={classes.circle} />\n <line className={classes.line} x1=\"48.5\" x2=\"52.5\" y1=\"50\" y2=\"50\" />\n <line className={classes.line} transform={'rotate(90 50.5 50)'} x1=\"48.5\" x2=\"52.5\" y1=\"50\" y2=\"50\" />\n </svg>\n );\n }\n}\n\nexport default withStyles((theme) => ({\n path: {\n strokeWidth: '0.2',\n stroke: strokeColor(theme),\n },\n line: {\n strokeWidth: '0.2',\n stroke: strokeColor(theme),\n },\n circle: {\n strokeWidth: '0.2',\n stroke: strokeColor(theme),\n fill: 'none',\n },\n}))(Graphic);\n"],"file":"graphic.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/protractor/index.jsx"],"names":["Protractor","props","classes","width","className","startPosition","origin","protractor","leftAnchor","rightAnchor","React","Component","PropTypes","object","isRequired","number","string","shape","left","top","position","bottom","right"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,U;;;;;;;;;;;;WAgBX,kBAAS;AACP,wBAAqD,KAAKC,KAA1D;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,KAAjB,eAAiBA,KAAjB;AAAA,UAAwBC,SAAxB,eAAwBA,SAAxB;AAAA,UAAmCC,aAAnC,eAAmCA,aAAnC;AACA,0BACE,gCAAC,qBAAD;AACE,QAAA,SAAS,EAAED,SADb;AAEE,QAAA,aAAa,EAAEC,aAFjB;AAGE,QAAA,MAAM,EAAE,CACN;AACE,mBAAO,YADT;AAEEC,UAAAA,MAAM,YAAKH,KAAK,GAAG,KAAb,gBAAwBA,KAAK,GAAG,IAAhC;AAFR,SADM,EAKN;AACE,mBAAO,aADT;AAEEG,UAAAA,MAAM,YAAKH,KAAK,GAAG,KAAb,gBAAwBA,KAAK,GAAG,IAAhC;AAFR,SALM;AAHV,sBAcE;AAAK,QAAA,SAAS,EAAED,OAAO,CAACK,UAAxB;AAAoC,QAAA,KAAK,EAAE;AAAEJ,UAAAA,KAAK,YAAKA,KAAL;AAAP;AAA3C,sBACE,gCAAC,mBAAD,OADF,eAGE,gCAAC,kBAAD;AAAQ,QAAA,SAAS,EAAE,4BAAW,YAAX,EAAyBD,OAAO,CAACM,UAAjC;AAAnB,QAHF,eAIE,gCAAC,kBAAD;AAAQ,QAAA,SAAS,EAAE,4BAAW,aAAX,EAA0BN,OAAO,CAACO,WAAlC;AAAnB,QAJF,CAdF,CADF;AAuBD;;;EAzC6BC,kBAAMC,S;;;iCAAzBX,U,eACQ;AACjBE,EAAAA,OAAO,EAAEU,sBAAUC,MAAV,CAAiBC,UADT;AAEjBX,EAAAA,KAAK,EAAES,sBAAUG,MAAV,CAAiBD,UAFP;AAGjBV,EAAAA,SAAS,EAAEQ,sBAAUI,MAHJ;AAIjBX,EAAAA,aAAa,EAAEO,sBAAUK,KAAV,CAAgB;AAC7BC,IAAAA,IAAI,EAAEN,sBAAUG,MADa;AAE7BI,IAAAA,GAAG,EAAEP,sBAAUG;AAFc,GAAhB;AAJE,C;iCADRf,U,kBAWW;AACpBG,EAAAA,KAAK,EAAE,GADa;AAEpBE,EAAAA,aAAa,EAAE;AAAEa,IAAAA,IAAI,EAAE,CAAR;AAAWC,IAAAA,GAAG,EAAE;AAAhB;AAFK,C;;eAiCT,wBAAW;AAAA,SAAO;AAC/BZ,IAAAA,UAAU,EAAE;AAAEa,MAAAA,QAAQ,EAAE;AAAZ,KADmB;AAE/BZ,IAAAA,UAAU,EAAE;AACVY,MAAAA,QAAQ,EAAE,UADA;AAEVF,MAAAA,IAAI,EAAE,CAFI;AAGVG,MAAAA,MAAM,EAAE;AAHE,KAFmB;AAO/BZ,IAAAA,WAAW,EAAE;AACXW,MAAAA,QAAQ,EAAE,UADC;AAEXE,MAAAA,KAAK,EAAE,CAFI;AAGXD,MAAAA,MAAM,EAAE;AAHG;AAPkB,GAAP;AAAA,CAAX,EAYXrB,UAZW,C","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport Graphic from './graphic';\nimport Anchor from '../anchor';\nimport Rotatable from '../rotatable';\nimport classNames from 'classnames';\n\nexport class Protractor extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n width: PropTypes.number.isRequired,\n className: PropTypes.string,\n startPosition: PropTypes.shape({\n left: PropTypes.number,\n top: PropTypes.number,\n }),\n };\n\n static defaultProps = {\n width: 450,\n startPosition: { left: 0, top: 0 },\n };\n\n render() {\n const { classes, width, className, startPosition } = this.props;\n return (\n <Rotatable\n className={className}\n startPosition={startPosition}\n handle={[\n {\n class: 'leftAnchor',\n origin: `${width * 0.495}px ${width * 0.49}px`,\n },\n {\n class: 'rightAnchor',\n origin: `${width * 0.495}px ${width * 0.49}px`,\n },\n ]}\n >\n <div className={classes.protractor} style={{ width: `${width}px` }}>\n <Graphic />\n\n <Anchor className={classNames('leftAnchor', classes.leftAnchor)} />\n <Anchor className={classNames('rightAnchor', classes.rightAnchor)} />\n </div>\n </Rotatable>\n );\n }\n}\n\nexport default withStyles(() => ({\n protractor: { position: 'relative' },\n leftAnchor: {\n position: 'absolute',\n left: 0,\n bottom: 0,\n },\n rightAnchor: {\n position: 'absolute',\n right: 0,\n bottom: 0,\n },\n}))(Protractor);\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/rotatable.jsx"],"names":["Anchor","anchor","position","zIndex","width","height","classes","left","top","color","fill","Rotatable","props","handle","Array","isArray","handles","forEach","h","el","rotatable","querySelector","mousedownHandler","rotateStart","origin","addEventListener","rotateStop","push","document","clientWidth","clientHeight","rotation","state","getBoundingClientRect","xy","originToXY","anchorTop","anchorLeft","e","isRotating","preventDefault","getAnchor","getAngle","startAngle","angle","diff","x","y","setState","rotate","current","removeEventListener","drag","computedAnchor","find","target","dragStart","dragPoint","Point","pageX","pageY","translate","sub","lastPosition","startPosition","addMouseUpHandler","initHandles","clientX","clientY","children","showAnchor","className","t","style","transformOrigin","transform","r","mouseDown","mouseUp","React","Component","PropTypes","object","isRequired","oneOfType","arrayOf","node","bool","shape","string","number","display","cursor"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,MAAM,GAAG,wBAAW;AACxBC,EAAAA,MAAM,EAAE;AACNC,IAAAA,QAAQ,EAAE,UADJ;AAENC,IAAAA,MAAM,EAAE,GAFF;AAGNC,IAAAA,KAAK,EAAE,OAHD;AAINC,IAAAA,MAAM,EAAE;AAJF;AADgB,CAAX,EAOZ,gBAAyC;AAAA,MAAtCC,OAAsC,QAAtCA,OAAsC;AAAA,MAA7BC,IAA6B,QAA7BA,IAA6B;AAAA,MAAvBC,GAAuB,QAAvBA,GAAuB;AAAA,MAAlBC,KAAkB,QAAlBA,KAAkB;AAAA,MAAXC,IAAW,QAAXA,IAAW;AAC1CD,EAAAA,KAAK,GAAGA,KAAK,IAAI,OAAjB;AACAC,EAAAA,IAAI,GAAGA,IAAI,IAAI,OAAf;AACA,sBACE,gCAAC,mBAAD,qBACE;AACE,IAAA,SAAS,EAAEJ,OAAO,CAACL,MADrB;AAEE,IAAA,KAAK,EAAE;AACLM,MAAAA,IAAI,EAAEA,IAAI,GAAG,EADR;AAELC,MAAAA,GAAG,EAAEA,GAAG,GAAG;AAFN;AAFT,kBAOE;AAAQ,IAAA,EAAE,EAAE,EAAZ;AAAgB,IAAA,EAAE,EAAE,EAApB;AAAwB,IAAA,CAAC,EAAE,CAA3B;AAA8B,IAAA,WAAW,EAAE,CAA3C;AAA8C,IAAA,MAAM,EAAEC,KAAtD;AAA6D,IAAA,IAAI,EAAEC;AAAnE,IAPF,CADF,CADF;AAaD,CAvBc,CAAf;AAyBA;AACA;AACA;AACA;;IACaC,S;;;;;AAuBX,qBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,oGA8BL,YAAM;AAClB,UAAQC,MAAR,GAAmB,MAAKD,KAAxB,CAAQC,MAAR;;AAEA,UAAIC,KAAK,CAACC,OAAN,CAAcF,MAAd,CAAJ,EAA2B;AACzB,cAAKG,OAAL,GAAe,EAAf;AACAH,QAAAA,MAAM,CAACI,OAAP,CAAe,UAACC,CAAD,EAAO;AACpB,cAAMC,EAAE,GAAG,MAAKC,SAAL,CAAeC,aAAf,YAAiCH,CAAC,SAAlC,EAAX;;AAEA,cAAIC,EAAJ,EAAQ;AACN,gBAAMG,gBAAgB,GAAG,MAAKC,WAAL,CAAiBL,CAAC,CAACM,MAAnB,CAAzB;;AACAL,YAAAA,EAAE,CAACM,gBAAH,CAAoB,WAApB,EAAiCH,gBAAjC;AACAH,YAAAA,EAAE,CAACM,gBAAH,CAAoB,SAApB,EAA+B,MAAKC,UAApC;;AACA,kBAAKV,OAAL,CAAaW,IAAb,CAAkB;AAAER,cAAAA,EAAE,EAAFA,EAAF;AAAMG,cAAAA,gBAAgB,EAAhBA;AAAN,aAAlB;AACD;AACF,SATD;AAUD;AACF,KA9CkB;AAAA,0GAgDC,YAAM;AACxBM,MAAAA,QAAQ,CAACH,gBAAT,CAA0B,SAA1B,EAAqC,MAAKC,UAA1C;AACD,KAlDkB;AAAA,mGAoDN,UAACF,MAAD,EAAY;AACvB,4BAAqD,MAAKJ,SAA1D;AAAA,UAAqBhB,KAArB,mBAAQyB,WAAR;AAAA,UAA0CxB,MAA1C,mBAA4ByB,YAA5B;AACA,aAAO,4BAAY;AAAE1B,QAAAA,KAAK,EAALA,KAAF;AAASC,QAAAA,MAAM,EAANA;AAAT,OAAZ,EAA+BmB,MAA/B,CAAP;AACD,KAvDkB;AAAA,kGA6DP,UAACA,MAAD,EAAY;AACtB,UAAQO,QAAR,GAAqB,MAAKC,KAA1B,CAAQD,QAAR;AACA,6BAAsC,MAAKX,SAA3C;AAAA,UAAQS,WAAR,oBAAQA,WAAR;AAAA,UAAqBC,YAArB,oBAAqBA,YAArB;;AACA,kCAAsB,MAAKV,SAAL,CAAea,qBAAf,EAAtB;AAAA,UAAQzB,GAAR,yBAAQA,GAAR;AAAA,UAAaD,IAAb,yBAAaA,IAAb;;AACA,UAAM2B,EAAE,GAAG,MAAKC,UAAL,CAAgBX,MAAhB,CAAX;;AACA,wBAA6C,4BAC3C;AACEpB,QAAAA,KAAK,EAAEyB,WADT;AAEExB,QAAAA,MAAM,EAAEyB;AAFV,OAD2C,EAK3CI,EAL2C,EAM3CH,QAN2C,CAA7C;AAAA,UAAaK,SAAb,eAAQ5B,GAAR;AAAA,UAA8B6B,UAA9B,eAAwB9B,IAAxB;;AASA,aAAO;AACLC,QAAAA,GAAG,EAAEA,GAAG,GAAG4B,SADN;AAEL7B,QAAAA,IAAI,EAAEA,IAAI,GAAG8B;AAFR,OAAP;AAID,KA/EkB;AAAA,oGAiFL,UAACb,MAAD;AAAA,aAAY,UAACc,CAAD,EAAO;AAC/B,YAAQC,UAAR,GAAuB,MAAKP,KAA5B,CAAQO,UAAR;;AACA,YAAIA,UAAJ,EAAgB;AACd;AACD;;AAEDD,QAAAA,CAAC,CAACE,cAAF;;AAEA,YAAMvC,MAAM,GAAG,MAAKwC,SAAL,CAAejB,MAAf,CAAf;;AACA,YAAQO,QAAR,GAAqB,MAAKC,KAA1B,CAAQD,QAAR;;AACA,6BAA8B,MAAKW,QAAL,CAAczC,MAAd,EAAsBqC,CAAtB,CAA9B;AAAA,YAAeK,UAAf,kBAAQC,KAAR;;AAEA,YAAIC,IAAI,GAAG;AAAEC,UAAAA,CAAC,EAAE,CAAL;AAAQC,UAAAA,CAAC,EAAE;AAAX,SAAX;;AACA,YAAIvB,MAAM,KAAK,MAAKQ,KAAL,CAAWR,MAA1B,EAAkC;AAChC,iCAAqD,MAAKJ,SAA1D;AAAA,cAAqBhB,KAArB,oBAAQyB,WAAR;AAAA,cAA0CxB,MAA1C,oBAA4ByB,YAA5B;AACAe,UAAAA,IAAI,GAAG,kCAAgB;AAAEzC,YAAAA,KAAK,EAALA,KAAF;AAASC,YAAAA,MAAM,EAANA;AAAT,WAAhB,EAAmC0B,QAAnC,EAA6C,MAAKC,KAAL,CAAWR,MAAxD,EAAgEA,MAAhE,CAAP;AACD;;AAED,cAAKwB,QAAL,CACE;AACExB,UAAAA,MAAM,EAANA,MADF;AAEEe,UAAAA,UAAU,EAAE,IAFd;AAGEI,UAAAA,UAAU,EAAVA,UAHF;AAIE1C,UAAAA,MAAM,EAANA,MAJF;AAKEC,UAAAA,QAAQ,EAAE;AACRK,YAAAA,IAAI,EAAE,MAAKyB,KAAL,CAAW9B,QAAX,CAAoBK,IAApB,GAA2BsC,IAAI,CAACC,CAD9B;AAERtC,YAAAA,GAAG,EAAE,MAAKwB,KAAL,CAAW9B,QAAX,CAAoBM,GAApB,GAA0BqC,IAAI,CAACE;AAF5B;AALZ,SADF,EAWE,YAAM;AACJnB,UAAAA,QAAQ,CAACH,gBAAT,CAA0B,WAA1B,EAAuC,MAAKwB,MAA5C;AACD,SAbH;AAeD,OAjCa;AAAA,KAjFK;AAAA,mGAoHN,UAACX,CAAD,EAAO;AAClB,UAAQC,UAAR,GAAuB,MAAKP,KAA5B,CAAQO,UAAR;;AAEA,UAAI,CAACA,UAAL,EAAiB;AACf;AACD;;AAEDD,MAAAA,CAAC,CAACE,cAAF;;AAEA,YAAKQ,QAAL,CACE;AACET,QAAAA,UAAU,EAAE,KADd;AAEEK,QAAAA,KAAK,EAAE,MAAKZ,KAAL,CAAWD,QAFpB;AAGE9B,QAAAA,MAAM,EAAE,IAHV;AAIEiD,QAAAA,OAAO,EAAE;AAJX,OADF,EAOE,YAAM;AACJtB,QAAAA,QAAQ,CAACuB,mBAAT,CAA6B,WAA7B,EAA0C,MAAKF,MAA/C;AACArB,QAAAA,QAAQ,CAACuB,mBAAT,CAA6B,WAA7B,EAA0C,MAAKC,IAA/C;AACD,OAVH;AAYD,KAzIkB;AAAA,+FAiJV,UAACd,CAAD,EAAO;AACd,UAAQC,UAAR,GAAuB,MAAKP,KAA5B,CAAQO,UAAR;;AACA,UAAI,CAACA,UAAL,EAAiB;AACf;AACD;;AAEDD,MAAAA,CAAC,CAACE,cAAF;AAEA,wBAAsC,MAAKR,KAA3C;AAAA,UAAQW,UAAR,eAAQA,UAAR;AAAA,UAAoBC,KAApB,eAAoBA,KAApB;AAAA,UAA2B3C,MAA3B,eAA2BA,MAA3B;;AACA,4BAAiC,MAAKyC,QAAL,CAAczC,MAAd,EAAsBqC,CAAtB,CAAjC;AAAA,UAAeY,OAAf,mBAAQN,KAAR;AAAA,UAAwBE,CAAxB,mBAAwBA,CAAxB;AAAA,UAA2BC,CAA3B,mBAA2BA,CAA3B;;AACA,UAAMM,cAAc,GAAG;AAAEP,QAAAA,CAAC,EAADA,CAAF;AAAKC,QAAAA,CAAC,EAADA;AAAL,OAAvB;AACA,UAAMF,IAAI,GAAGK,OAAO,GAAGP,UAAvB;AACA,UAAMZ,QAAQ,GAAGa,KAAK,GAAGC,IAAzB;;AACA,YAAKG,QAAL,CAAc;AAAEjB,QAAAA,QAAQ,EAARA,QAAF;AAAYc,QAAAA,IAAI,EAAJA,IAAZ;AAAkBK,QAAAA,OAAO,EAAPA,OAAlB;AAA2BG,QAAAA,cAAc,EAAdA;AAA3B,OAAd;AACD,KA/JkB;AAAA,kGAiKP,UAACf,CAAD,EAAO;AACjB,UAAMzB,MAAM,GAAG,MAAKG,OAAL,CAAasC,IAAb,CAAkB,UAACpC,CAAD;AAAA,eAAOA,CAAC,CAACC,EAAF,KAASmB,CAAC,CAACiB,MAAlB;AAAA,OAAlB,CAAf;;AAEA,UAAI,CAAC1C,MAAL,EAAa;AACX,cAAK2C,SAAL,CAAelB,CAAf;AACD;AACF,KAvKkB;AAAA,kGAyKP,UAACA,CAAD,EAAO;AACjB,UAAMmB,SAAS,GAAG,IAAIC,yBAAJ,CAAUpB,CAAC,CAACqB,KAAZ,EAAmBrB,CAAC,CAACsB,KAArB,CAAlB;;AACA,YAAKZ,QAAL,CAAc;AAAES,QAAAA,SAAS,EAATA;AAAF,OAAd,EAA6B,YAAM;AACjC7B,QAAAA,QAAQ,CAACH,gBAAT,CAA0B,WAA1B,EAAuC,MAAK2B,IAA5C;AACD,OAFD;AAGD,KA9KkB;AAAA,6FAgLZ,UAACd,CAAD,EAAO;AACZA,MAAAA,CAAC,CAACE,cAAF;AACA,UAAMU,OAAO,GAAG,IAAIQ,yBAAJ,CAAUpB,CAAC,CAACqB,KAAZ,EAAmBrB,CAAC,CAACsB,KAArB,CAAhB;AACA,UAAMC,SAAS,GAAGX,OAAO,CAACY,GAAR,CAAY,MAAK9B,KAAL,CAAWyB,SAAvB,CAAlB;;AACA,YAAKT,QAAL,CAAc;AAAEa,QAAAA,SAAS,EAATA;AAAF,OAAd;AACD,KArLkB;AAAA,gGAuLT,YAAM;AACd,UAAI,CAAC,MAAK7B,KAAL,CAAW6B,SAAhB,EAA2B;AACzB;AACD;;AAED,yBAA8C,MAAK7B,KAAnD;AAAA,UAAkB+B,YAAlB,gBAAQ7D,QAAR;AAAA,UAAgC2D,SAAhC,gBAAgCA,SAAhC;AAEA,UAAM3D,QAAQ,GAAG;AACfK,QAAAA,IAAI,EAAEwD,YAAY,CAACxD,IAAb,GAAoBsD,SAAS,CAACf,CADrB;AAEftC,QAAAA,GAAG,EAAEuD,YAAY,CAACvD,GAAb,GAAmBqD,SAAS,CAACd;AAFnB,OAAjB;AAKAnB,MAAAA,QAAQ,CAACuB,mBAAT,CAA6B,WAA7B,EAA0C,MAAKC,IAA/C;;AACA,YAAKJ,QAAL,CAAc;AAAE9C,QAAAA,QAAQ,EAARA,QAAF;AAAYuD,QAAAA,SAAS,EAAE,IAAvB;AAA6BI,QAAAA,SAAS,EAAE;AAAxC,OAAd;AACD,KArMkB;AAEjB,UAAK7B,KAAL,GAAa;AACXO,MAAAA,UAAU,EAAE,KADD;AAEXR,MAAAA,QAAQ,EAAE,CAFC;AAGXY,MAAAA,UAAU,EAAE,CAHD;AAIXC,MAAAA,KAAK,EAAE,CAJI;AAKX1C,MAAAA,QAAQ,EAAE;AACRK,QAAAA,IAAI,EAAEK,KAAK,CAACoD,aAAN,CAAoBzD,IADlB;AAERC,QAAAA,GAAG,EAAEI,KAAK,CAACoD,aAAN,CAAoBxD;AAFjB;AALC,KAAb;AAFiB;AAYlB;;;;WAED,gCAAuB;AAAA;;AACrBoB,MAAAA,QAAQ,CAACuB,mBAAT,CAA6B,SAA7B,EAAwC,KAAKzB,UAA7C;AACAE,MAAAA,QAAQ,CAACuB,mBAAT,CAA6B,WAA7B,EAA0C,KAAKC,IAA/C;AACAxB,MAAAA,QAAQ,CAACuB,mBAAT,CAA6B,WAA7B,EAA0C,KAAKF,MAA/C;AAEA,WAAKjC,OAAL,CAAaC,OAAb,CAAqB,UAACC,CAAD,EAAO;AAC1BA,QAAAA,CAAC,CAACC,EAAF,CAAKgC,mBAAL,CAAyB,WAAzB,EAAsCjC,CAAC,CAACI,gBAAxC;AACAJ,QAAAA,CAAC,CAACC,EAAF,CAAKgC,mBAAL,CAAyB,SAAzB,EAAoC,MAAI,CAACzB,UAAzC;AACD,OAHD;AAID;;;WAED,6BAAoB;AAClB,WAAKuC,iBAAL;AACA,WAAKC,WAAL;AACD;;;WA+GD,kBAASjE,MAAT,EAAiBqC,CAAjB,EAAoB;AAClB,UAAMQ,CAAC,GAAGR,CAAC,CAAC6B,OAAF,GAAYlE,MAAM,CAACM,IAA7B;AACA,UAAMwC,CAAC,GAAG,CAACT,CAAC,CAAC8B,OAAF,GAAYnE,MAAM,CAACO,GAApB,IAA2B,CAAC,CAAtC;AACA,aAAO;AAAEoC,QAAAA,KAAK,EAAE,6BAAWE,CAAX,EAAcC,CAAd,CAAT;AAA2BD,QAAAA,CAAC,EAADA,CAA3B;AAA8BC,QAAAA,CAAC,EAADA;AAA9B,OAAP;AACD;;;WAwDD,kBAAS;AAAA;;AACP,wBAAqD,KAAKnC,KAA1D;AAAA,UAAQyD,QAAR,eAAQA,QAAR;AAAA,UAAkB/D,OAAlB,eAAkBA,OAAlB;AAAA,UAA2BgE,UAA3B,eAA2BA,UAA3B;AAAA,UAAuCC,SAAvC,eAAuCA,SAAvC;AACA,yBAA0D,KAAKvC,KAA/D;AAAA,UAAQD,QAAR,gBAAQA,QAAR;AAAA,UAAkB9B,MAAlB,gBAAkBA,MAAlB;AAAA,UAA0BuB,MAA1B,gBAA0BA,MAA1B;AAAA,UAAkCqC,SAAlC,gBAAkCA,SAAlC;AAAA,UAA6C3D,QAA7C,gBAA6CA,QAA7C;AAEA,UAAMsE,CAAC,GAAGX,SAAS,uBAAgBA,SAAS,CAACf,CAA1B,iBAAkCe,SAAS,CAACd,CAA5C,WAAqD,EAAxE;AAEA,UAAM0B,KAAK,GAAG;AACZlE,QAAAA,IAAI,EAAEL,QAAQ,CAACK,IADH;AAEZC,QAAAA,GAAG,EAAEN,QAAQ,CAACM,GAFF;AAGZkE,QAAAA,eAAe,EAAElD,MAHL;AAIZmD,QAAAA,SAAS,YAAKH,CAAL,qBAAiBzC,QAAjB;AAJG,OAAd;AAOA,0BACE;AACE,QAAA,SAAS,EAAE,4BAAWzB,OAAO,CAACc,SAAnB,EAA8BmD,SAA9B,CADb;AAEE,QAAA,KAAK,EAAEE,KAFT;AAGE,QAAA,GAAG,EAAE,aAACG,CAAD;AAAA,iBAAQ,MAAI,CAACxD,SAAL,GAAiBwD,CAAzB;AAAA,SAHP;AAIE,QAAA,WAAW,EAAE,KAAKC,SAJpB;AAKE,QAAA,SAAS,EAAE,KAAKC;AALlB,SAOG7E,MAAM,IAAIqE,UAAV,iBAAwB,gCAAC,MAAD,EAAYrE,MAAZ,CAP3B,EAQGoE,QARH,CADF;AAYD;;;EAvP4BU,kBAAMC,S;;;iCAAxBrE,S,eACQ;AACjBL,EAAAA,OAAO,EAAE2E,sBAAUC,MAAV,CAAiBC,UADT;AAEjBd,EAAAA,QAAQ,EAAEY,sBAAUG,SAAV,CAAoB,CAACH,sBAAUI,OAAV,CAAkBJ,sBAAUK,IAA5B,CAAD,EAAoCL,sBAAUK,IAA9C,CAApB,EAAyEH,UAFlE;AAGjBb,EAAAA,UAAU,EAAEW,sBAAUM,IAHL;AAIjB1E,EAAAA,MAAM,EAAEoE,sBAAUI,OAAV,CACNJ,sBAAUO,KAAV,CAAgB;AACd,aAAOP,sBAAUQ,MAAV,CAAiBN,UADV;AAEd3D,IAAAA,MAAM,EAAEyD,sBAAUQ;AAFJ,GAAhB,CADM,CAJS;AAUjBlB,EAAAA,SAAS,EAAEU,sBAAUQ,MAVJ;AAWjBzB,EAAAA,aAAa,EAAEiB,sBAAUO,KAAV,CAAgB;AAC7BjF,IAAAA,IAAI,EAAE0E,sBAAUS,MADa;AAE7BlF,IAAAA,GAAG,EAAEyE,sBAAUS;AAFc,GAAhB;AAXE,C;iCADR/E,S,kBAkBW;AACpB2D,EAAAA,UAAU,EAAE,KADQ;AAEpBN,EAAAA,aAAa,EAAE;AAAEzD,IAAAA,IAAI,EAAE,CAAR;AAAWC,IAAAA,GAAG,EAAE;AAAhB;AAFK,C;;eAwOT,wBAAW;AACxBY,EAAAA,SAAS,EAAE;AACTlB,IAAAA,QAAQ,EAAE,UADD;AAETyF,IAAAA,OAAO,EAAE,cAFA;AAGTC,IAAAA,MAAM,EAAE;AAHC;AADa,CAAX,EAMZjF,SANY,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { getAnchor as calcAnchor, distanceBetween, arctangent } from './anchor-utils';\nimport { Portal } from 'react-portal';\nimport Point from '@mapbox/point-geometry';\nimport { parse as parseOrigin } from './transform-origin';\nimport classNames from 'classnames';\n\nconst Anchor = withStyles({\n anchor: {\n position: 'absolute',\n zIndex: 100,\n width: '200px',\n height: '80px',\n },\n})(({ classes, left, top, color, fill }) => {\n color = color || 'green';\n fill = fill || 'white';\n return (\n <Portal>\n <svg\n className={classes.anchor}\n style={{\n left: left - 10,\n top: top - 10,\n }}\n >\n <circle cx={10} cy={10} r={8} strokeWidth={1} stroke={color} fill={fill} />\n </svg>\n </Portal>\n );\n});\n\n/**\n * Tip o' the hat to:\n * https://bl.ocks.org/joyrexus/7207044\n */\nexport class Rotatable extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n showAnchor: PropTypes.bool,\n handle: PropTypes.arrayOf(\n PropTypes.shape({\n class: PropTypes.string.isRequired,\n origin: PropTypes.string,\n }),\n ),\n className: PropTypes.string,\n startPosition: PropTypes.shape({\n left: PropTypes.number,\n top: PropTypes.number,\n }),\n };\n\n static defaultProps = {\n showAnchor: false,\n startPosition: { left: 0, top: 0 },\n };\n\n constructor(props) {\n super(props);\n this.state = {\n isRotating: false,\n rotation: 0,\n startAngle: 0,\n angle: 0,\n position: {\n left: props.startPosition.left,\n top: props.startPosition.top,\n },\n };\n }\n\n componentWillUnmount() {\n document.removeEventListener('mouseup', this.rotateStop);\n document.removeEventListener('mousemove', this.drag);\n document.removeEventListener('mousemove', this.rotate);\n\n this.handles.forEach((h) => {\n h.el.removeEventListener('mousedown', h.mousedownHandler);\n h.el.removeEventListener('mouseup', this.rotateStop);\n });\n }\n\n componentDidMount() {\n this.addMouseUpHandler();\n this.initHandles();\n }\n\n initHandles = () => {\n const { handle } = this.props;\n\n if (Array.isArray(handle)) {\n this.handles = [];\n handle.forEach((h) => {\n const el = this.rotatable.querySelector(`.${h.class}`);\n\n if (el) {\n const mousedownHandler = this.rotateStart(h.origin);\n el.addEventListener('mousedown', mousedownHandler);\n el.addEventListener('mouseup', this.rotateStop);\n this.handles.push({ el, mousedownHandler });\n }\n });\n }\n };\n\n addMouseUpHandler = () => {\n document.addEventListener('mouseup', this.rotateStop);\n };\n\n originToXY = (origin) => {\n const { clientWidth: width, clientHeight: height } = this.rotatable;\n return parseOrigin({ width, height }, origin);\n };\n\n /**\n * Get the anchor point for the given element, origin and rotation.\n * @returns {{left:number, top: number}} - the co-ordinates of the anchor point relative to the whole page.\n */\n getAnchor = (origin) => {\n const { rotation } = this.state;\n const { clientWidth, clientHeight } = this.rotatable;\n const { top, left } = this.rotatable.getBoundingClientRect();\n const xy = this.originToXY(origin);\n const { top: anchorTop, left: anchorLeft } = calcAnchor(\n {\n width: clientWidth,\n height: clientHeight,\n },\n xy,\n rotation,\n );\n\n return {\n top: top + anchorTop,\n left: left + anchorLeft,\n };\n };\n\n rotateStart = (origin) => (e) => {\n const { isRotating } = this.state;\n if (isRotating) {\n return;\n }\n\n e.preventDefault();\n\n const anchor = this.getAnchor(origin);\n const { rotation } = this.state;\n const { angle: startAngle } = this.getAngle(anchor, e);\n\n let diff = { x: 0, y: 0 };\n if (origin !== this.state.origin) {\n const { clientWidth: width, clientHeight: height } = this.rotatable;\n diff = distanceBetween({ width, height }, rotation, this.state.origin, origin);\n }\n\n this.setState(\n {\n origin,\n isRotating: true,\n startAngle,\n anchor,\n position: {\n left: this.state.position.left + diff.x,\n top: this.state.position.top + diff.y,\n },\n },\n () => {\n document.addEventListener('mousemove', this.rotate);\n },\n );\n };\n\n rotateStop = (e) => {\n const { isRotating } = this.state;\n\n if (!isRotating) {\n return;\n }\n\n e.preventDefault();\n\n this.setState(\n {\n isRotating: false,\n angle: this.state.rotation,\n anchor: null,\n current: null,\n },\n () => {\n document.removeEventListener('mousemove', this.rotate);\n document.removeEventListener('mousemove', this.drag);\n },\n );\n };\n\n getAngle(anchor, e) {\n const x = e.clientX - anchor.left;\n const y = (e.clientY - anchor.top) * -1;\n return { angle: arctangent(x, y), x, y };\n }\n\n rotate = (e) => {\n const { isRotating } = this.state;\n if (!isRotating) {\n return;\n }\n\n e.preventDefault();\n\n const { startAngle, angle, anchor } = this.state;\n const { angle: current, x, y } = this.getAngle(anchor, e);\n const computedAnchor = { x, y };\n const diff = current - startAngle;\n const rotation = angle + diff;\n this.setState({ rotation, diff, current, computedAnchor });\n };\n\n mouseDown = (e) => {\n const handle = this.handles.find((h) => h.el === e.target);\n\n if (!handle) {\n this.dragStart(e);\n }\n };\n\n dragStart = (e) => {\n const dragPoint = new Point(e.pageX, e.pageY);\n this.setState({ dragPoint }, () => {\n document.addEventListener('mousemove', this.drag);\n });\n };\n\n drag = (e) => {\n e.preventDefault();\n const current = new Point(e.pageX, e.pageY);\n const translate = current.sub(this.state.dragPoint);\n this.setState({ translate });\n };\n\n mouseUp = () => {\n if (!this.state.translate) {\n return;\n }\n\n const { position: lastPosition, translate } = this.state;\n\n const position = {\n left: lastPosition.left + translate.x,\n top: lastPosition.top + translate.y,\n };\n\n document.removeEventListener('mousemove', this.drag);\n this.setState({ position, dragPoint: null, translate: null });\n };\n\n render() {\n const { children, classes, showAnchor, className } = this.props;\n const { rotation, anchor, origin, translate, position } = this.state;\n\n const t = translate ? `translate(${translate.x}px, ${translate.y}px)` : '';\n\n const style = {\n left: position.left,\n top: position.top,\n transformOrigin: origin,\n transform: `${t} rotate(${rotation}deg)`,\n };\n\n return (\n <div\n className={classNames(classes.rotatable, className)}\n style={style}\n ref={(r) => (this.rotatable = r)}\n onMouseDown={this.mouseDown}\n onMouseUp={this.mouseUp}\n >\n {anchor && showAnchor && <Anchor {...anchor} />}\n {children}\n </div>\n );\n }\n}\n\nexport default withStyles({\n rotatable: {\n position: 'relative',\n display: 'inline-block',\n cursor: 'move',\n },\n})(Rotatable);\n"],"file":"rotatable.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ruler/graphic.jsx"],"names":["Bg","width","height","className","propTypes","PropTypes","number","isRequired","string","Graphic","props","classes","units","unit","viewBox","unitWidth","unitHeight","bg","type","map","r","React","PureComponent","object","styles","theme","stroke","strokeWidth","fill"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,EAAE,GAAG,SAALA,EAAK;AAAA,MAAGC,KAAH,QAAGA,KAAH;AAAA,MAAUC,MAAV,QAAUA,MAAV;AAAA,MAAkBC,SAAlB,QAAkBA,SAAlB;AAAA,sBAAkC;AAAM,IAAA,KAAK,EAAEF,KAAb;AAAoB,IAAA,MAAM,EAAEC,MAA5B;AAAoC,IAAA,EAAE,EAAE,CAAxC;AAA2C,IAAA,EAAE,EAAE,CAA/C;AAAkD,IAAA,SAAS,EAAEC;AAA7D,IAAlC;AAAA,CAAX;;AAEAH,EAAE,CAACI,SAAH,GAAe;AACbH,EAAAA,KAAK,EAAEI,sBAAUC,MAAV,CAAiBC,UADX;AAEbL,EAAAA,MAAM,EAAEG,sBAAUC,MAAV,CAAiBC,UAFZ;AAGbJ,EAAAA,SAAS,EAAEE,sBAAUG,MAAV,CAAiBD;AAHf,CAAf;;IAMaE,O;;;;;;;;;;;;WASX,kBAAS;AACP,wBAAgD,KAAKC,KAArD;AAAA,UAAQT,KAAR,eAAQA,KAAR;AAAA,UAAeC,MAAf,eAAeA,MAAf;AAAA,UAAuBS,OAAvB,eAAuBA,OAAvB;AAAA,UAAgCC,KAAhC,eAAgCA,KAAhC;AAAA,UAAuCC,IAAvC,eAAuCA,IAAvC;AACA,UAAMC,OAAO,iBAAUb,KAAV,cAAmBC,MAAnB,CAAb;AACA,UAAMa,SAAS,GAAGd,KAAK,GAAGW,KAA1B;AACA,UAAMI,UAAU,GAAGd,MAAnB;AAEA,0BACE;AAAK,QAAA,OAAO,EAAEY;AAAd,sBACE,gCAAC,EAAD;AAAI,QAAA,KAAK,EAAEb,KAAX;AAAkB,QAAA,MAAM,EAAEC,MAA1B;AAAkC,QAAA,SAAS,EAAES,OAAO,CAACM;AAArD,QADF,eAEE,gCAAC,oBAAD;AAAU,QAAA,KAAK,EAAEJ,IAAI,CAACK;AAAtB,QAFF,EAGG,uBAAM,CAAN,EAASN,KAAK,GAAG,CAAjB,EAAoBO,GAApB,CAAwB,UAACC,CAAD;AAAA,4BACvB,gCAAC,gBAAD;AAAM,UAAA,KAAK,EAAEL,SAAb;AAAwB,UAAA,MAAM,EAAEC,UAAhC;AAA4C,UAAA,GAAG,EAAEI,CAAjD;AAAoD,UAAA,KAAK,EAAEA,CAA3D;AAA8D,UAAA,MAAM,EAAEP,IAAtE;AAA4E,UAAA,IAAI,EAAEO,CAAC,KAAKR;AAAxF,UADuB;AAAA,OAAxB,CAHH,CADF;AASD;;;EAxB0BS,kBAAMC,a;;;iCAAtBb,O,eACQ;AACjBR,EAAAA,KAAK,EAAEI,sBAAUC,MAAV,CAAiBC,UADP;AAEjBL,EAAAA,MAAM,EAAEG,sBAAUC,MAAV,CAAiBC,UAFR;AAGjBK,EAAAA,KAAK,EAAEP,sBAAUC,MAAV,CAAiBC,UAHP;AAIjBM,EAAAA,IAAI,EAAER,sBAAUkB,MAAV,CAAiBhB,UAJN;AAKjBI,EAAAA,OAAO,EAAEN,sBAAUkB,MAAV,CAAiBhB;AALT,C;;AAyBrB,IAAMiB,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBR,IAAAA,EAAE,EAAE;AACFS,MAAAA,MAAM,EAAE,6BAAYD,KAAZ,CADN;AAEFE,MAAAA,WAAW,EAAE,KAFX;AAGFC,MAAAA,IAAI,EAAE,2BAAUH,KAAV;AAHJ;AADqB,GAAZ;AAAA,CAAf;;eAQe,wBAAWD,MAAX,EAAmBf,OAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport UnitType from './unit-type';\nimport range from 'lodash/range';\nimport Unit from './unit';\nimport { strokeColor, fillColor } from '../style-utils';\n\nconst Bg = ({ width, height, className }) => <rect width={width} height={height} cx={0} cy={0} className={className} />;\n\nBg.propTypes = {\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n className: PropTypes.string.isRequired,\n};\n\nexport class Graphic extends React.PureComponent {\n static propTypes = {\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n units: PropTypes.number.isRequired,\n unit: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n };\n\n render() {\n const { width, height, classes, units, unit } = this.props;\n const viewBox = `0 0 ${width} ${height}`;\n const unitWidth = width / units;\n const unitHeight = height;\n\n return (\n <svg viewBox={viewBox}>\n <Bg width={width} height={height} className={classes.bg} />\n <UnitType label={unit.type} />\n {range(1, units + 1).map((r) => (\n <Unit width={unitWidth} height={unitHeight} key={r} index={r} config={unit} last={r === units} />\n ))}\n </svg>\n );\n }\n}\nconst styles = (theme) => ({\n bg: {\n stroke: strokeColor(theme),\n strokeWidth: '2px',\n fill: fillColor(theme),\n },\n});\n\nexport default withStyles(styles)(Graphic);\n"],"file":"graphic.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ruler/index.jsx"],"names":["Ruler","props","classes","width","height","units","measure","className","startPosition","label","tickCount","unit","type","ticks","origin","ruler","leftAnchor","rightAnchor","React","Component","PropTypes","number","isRequired","oneOf","object","string","shape","left","top","styles","theme","cursor","position","backgroundColor","palette","secondary","light","opacity","border","primary","main","right"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Rotatable from '../rotatable';\nimport classNames from 'classnames';\nimport RulerGraphic from './graphic';\nimport PropTypes from 'prop-types';\nimport Anchor from '../anchor';\n\nexport class Ruler extends React.Component {\n static propTypes = {\n width: PropTypes.number,\n height: PropTypes.number,\n units: PropTypes.number.isRequired,\n measure: PropTypes.oneOf(['imperial', 'metric']).isRequired,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n startPosition: PropTypes.shape({\n left: PropTypes.number.isRequired,\n top: PropTypes.number.isRequired,\n }),\n label: PropTypes.string,\n tickCount: PropTypes.number,\n };\n\n static defaultProps = {\n width: 480,\n height: 60,\n measure: 'imperial',\n units: 12,\n };\n\n render() {\n const { classes, width, height, units, measure, className, startPosition, label, tickCount } = this.props;\n\n const unit =\n measure === 'imperial'\n ? {\n type: label,\n ticks: tickCount && tickCount % 4 === 0 ? tickCount : 16,\n }\n : {\n type: label,\n ticks: 10,\n };\n return (\n <Rotatable\n className={className}\n startPosition={startPosition}\n handle={[\n { class: 'leftAnchor', origin: 'bottom right' },\n { class: 'rightAnchor', origin: 'bottom left' },\n ]}\n >\n <div className={classes.ruler} style={{ width: `${width}px`, height: `${height}px` }}>\n <RulerGraphic width={width} height={height} units={units} unit={unit} />\n <Anchor className={classNames('leftAnchor', classes.leftAnchor)} />\n <Anchor className={classNames('rightAnchor', classes.rightAnchor)} />\n </div>\n </Rotatable>\n );\n }\n}\nconst styles = (theme) => ({\n ruler: {\n cursor: 'move',\n position: 'relative',\n backgroundColor: theme.palette.secondary.light,\n opacity: 1.0,\n border: `solid 0px ${theme.palette.primary.main}`,\n },\n leftAnchor: {\n left: '-10px',\n top: '40%',\n },\n rightAnchor: {\n right: '-10px',\n top: '40%',\n },\n});\n\nexport default withStyles(styles)(Ruler);\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ruler/unit-type.jsx"],"names":["UnitType","props","classes","label","x","y","textAlign","fill","fontSize","stroke","unitType","propTypes","PropTypes","object","isRequired","string","number","defaultProps","textAnchor","theme"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAEO,IAAMA,QAAQ,GAAG,SAAXA,QAAW,CAACC,KAAD,EAAW;AACjC,MAAQC,OAAR,GAAoED,KAApE,CAAQC,OAAR;AAAA,MAAiBC,KAAjB,GAAoEF,KAApE,CAAiBE,KAAjB;AAAA,MAAwBC,CAAxB,GAAoEH,KAApE,CAAwBG,CAAxB;AAAA,MAA2BC,CAA3B,GAAoEJ,KAApE,CAA2BI,CAA3B;AAAA,MAA8BC,SAA9B,GAAoEL,KAApE,CAA8BK,SAA9B;AAAA,MAAyCC,IAAzC,GAAoEN,KAApE,CAAyCM,IAAzC;AAAA,MAA+CC,QAA/C,GAAoEP,KAApE,CAA+CO,QAA/C;AAAA,MAAyDC,MAAzD,GAAoER,KAApE,CAAyDQ,MAAzD;AAEA,sBACE;AACE,IAAA,SAAS,EAAEP,OAAO,CAACQ,QADrB;AAEE,IAAA,CAAC,EAAEN,CAFL;AAGE,IAAA,CAAC,EAAEC,CAHL;AAIE,IAAA,UAAU,EAAEC,SAJd;AAKE,IAAA,MAAM,EAAEG,MALV;AAME,IAAA,IAAI,EAAEF,IANR;AAOE,IAAA,QAAQ,EAAEC;AAPZ,KASGL,KATH,CADF;AAaD,CAhBM;;;AAkBPH,QAAQ,CAACW,SAAT,GAAqB;AACnBT,EAAAA,OAAO,EAAEU,sBAAUC,MAAV,CAAiBC,UADP;AAEnBX,EAAAA,KAAK,EAAES,sBAAUG,MAAV,CAAiBD,UAFL;AAGnBV,EAAAA,CAAC,EAAEQ,sBAAUI,MAHM;AAInBX,EAAAA,CAAC,EAAEO,sBAAUI,MAJM;AAKnBV,EAAAA,SAAS,EAAEM,sBAAUG,MALF;AAMnBR,EAAAA,IAAI,EAAEK,sBAAUG,MANG;AAOnBP,EAAAA,QAAQ,EAAEI,sBAAUI,MAPD;AAQnBP,EAAAA,MAAM,EAAEG,sBAAUG;AARC,CAArB;AAWAf,QAAQ,CAACiB,YAAT,GAAwB;AACtBC,EAAAA,UAAU,EAAE,OADU;AAEtBV,EAAAA,QAAQ,EAAE,EAFY;AAGtBC,EAAAA,MAAM,EAAE,MAHc;AAItBL,EAAAA,CAAC,EAAE,CAJmB;AAKtBC,EAAAA,CAAC,EAAE;AALmB,CAAxB;;eAQe,wBAAW,UAACc,KAAD;AAAA,SAAY;AACpCT,IAAAA,QAAQ,kCAAO,2BAAP;AAAmBH,MAAAA,IAAI,EAAE,6BAAYY,KAAZ;AAAzB;AAD4B,GAAZ;AAAA,CAAX,EAEXnB,QAFW,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { noSelect, strokeColor } from '../style-utils';\nimport { withStyles } from '@material-ui/core/styles';\n\nexport const UnitType = (props) => {\n const { classes, label, x, y, textAlign, fill, fontSize, stroke } = props;\n\n return (\n <text\n className={classes.unitType}\n x={x}\n y={y}\n textAnchor={textAlign}\n stroke={stroke}\n fill={fill}\n fontSize={fontSize}\n >\n {label}\n </text>\n );\n};\n\nUnitType.propTypes = {\n classes: PropTypes.object.isRequired,\n label: PropTypes.string.isRequired,\n x: PropTypes.number,\n y: PropTypes.number,\n textAlign: PropTypes.string,\n fill: PropTypes.string,\n fontSize: PropTypes.number,\n stroke: PropTypes.string,\n};\n\nUnitType.defaultProps = {\n textAnchor: 'start',\n fontSize: 11,\n stroke: 'none',\n x: 8,\n y: 14,\n};\n\nexport default withStyles((theme) => ({\n unitType: { ...noSelect(), fill: strokeColor(theme) },\n}))(UnitType);\n"],"file":"unit-type.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ruler/unit.jsx"],"names":["Tick","theme","tick","stroke","x","height","bottom","classes","major","minor","y1","Ticks","count","width","map","r","propTypes","PropTypes","number","isRequired","Unit","props","index","last","config","style","transform","endTick","ticks","label","React","Component","object","bool","strokeWidth","textAnchor","fontSize","fill","base"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { noSelect, strokeColor } from '../style-utils';\nimport range from 'lodash/range';\n\nconst Tick = withStyles((theme) => ({\n tick: {\n stroke: strokeColor(theme),\n },\n}))(({ x, height, bottom, classes, major, minor }) => {\n const y1 = major ? bottom - height * 2 : minor ? bottom - height * 1.5 : bottom - height;\n\n return <line y1={y1} y2={bottom} x1={x} x2={x} className={classes.tick} />;\n});\n\nconst Ticks = ({ count, width, height }) => {\n return (\n <React.Fragment>\n {range(1, count).map((r) => {\n return (\n <Tick\n key={r}\n value={r}\n x={r * (width / count)}\n major={r % (count / 2) === 0}\n minor={r % (count / 4) === 0}\n bottom={height}\n height={10}\n />\n );\n })}\n </React.Fragment>\n );\n};\n\nTicks.propTypes = {\n count: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n};\n\nexport class Unit extends React.Component {\n static propTypes = {\n index: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n classes: PropTypes.object.isRequired,\n last: PropTypes.bool.isRequired,\n config: PropTypes.object.isRequired,\n };\n\n render() {\n const { index, width, height, classes, last, config } = this.props;\n\n const style = {\n transform: `translate(${width * (index - 1)}px, 0px)`,\n };\n return (\n <g style={style}>\n {!last && <line x1={width} y1={0} x2={width} y2={height} className={classes.endTick} />}\n\n <Ticks count={config.ticks} width={width} height={height} />\n <text width={width} className={classes.label} x={width - 5} y={15}>\n {index}\n </text>\n </g>\n );\n }\n}\n\nexport default withStyles((theme) => ({\n endTick: {\n stroke: strokeColor(theme),\n strokeWidth: 1,\n },\n label: {\n textAnchor: 'end',\n fontSize: '12px',\n fill: strokeColor(theme),\n ...noSelect(),\n },\n base: {\n fill: 'none',\n stroke: 'red',\n },\n}))(Unit);\n"],"file":"unit.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/style-utils.js"],"names":["strokeColor","theme","palette","primary","main","fillColor","contrastText"],"mappings":";;;;;;;;;;;;;;AAAA;;AAIO,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD;AAAA,uCAAkCA,KAAK,CAACC,OAAN,CAAcC,OAAd,CAAsBC,IAAxD;AAAA,CAApB;;;;AAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAACJ,KAAD;AAAA,mCAA8BA,KAAK,CAACC,OAAN,CAAcC,OAAd,CAAsBG,YAApD;AAAA,CAAlB","sourcesContent":["import { noSelect } from '@pie-lib/style-utils';\n\nexport { noSelect };\n\nexport const strokeColor = (theme) => `var(--ruler-stroke, ${theme.palette.primary.main})`;\n\nexport const fillColor = (theme) => `var(--ruler-bg, ${theme.palette.primary.contrastText})`;\n"],"file":"style-utils.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/transform-origin.jsx"],"names":["keyWordToPercent","v","endsWith","parseFloat","getValue","s","length","normalize","a","parse","rect","value","x","width","y","height","arr","split","sorted","Error"],"mappings":"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","sourcesContent":["const keyWordToPercent = (v) => {\n if (v === 'left' || v === 'top') {\n return 0;\n } else if (v === 'right' || v === 'bottom') {\n return 100;\n } else if (v === 'center') {\n return 50;\n } else if (v.endsWith('%')) {\n return parseFloat(v);\n } else {\n return v;\n }\n};\n\nconst getValue = (s, length) => {\n if (s.endsWith('px')) {\n return parseFloat(s);\n } else {\n s = keyWordToPercent(s);\n const v = length * (s / 100);\n return v;\n }\n};\n\nconst normalize = (a) => {\n if (a[0] === 'bottom' || a[0] === 'top' || a[1] === 'left' || a[1] === 'right') {\n return [a[1], a[0]];\n } else {\n return a;\n }\n};\n\n/**\n * Parse a transform origin string to x/y values.\n * @param {{width: number, height: number}} rect\n * @param {string} value\n * @returns {x:number, y:number}\n */\nexport const parse = (rect, value) => {\n if (!value) {\n return {\n x: rect.width / 2,\n y: rect.height / 2,\n };\n }\n const arr = value.split(' ');\n if (arr.length === 1) {\n //1 val\n const x = getValue(arr[0], rect.width);\n const y = getValue('50%', rect.height);\n return { x, y };\n } else if (arr.length === 2) {\n const sorted = normalize(arr);\n const x = getValue(sorted[0], rect.width);\n const y = getValue(sorted[1], rect.height);\n return { x, y };\n } else if (arr.length === 3) {\n throw new Error('transform-origin values with 3 fields not supported.');\n }\n};\n"],"file":"transform-origin.js"}