zds-pickers 3.9.18 → 3.10.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.
- package/dist/hooks/useComponentSize.js +28 -28
- package/dist/hooks/useStateWithDynamicDefault.js +5 -5
- package/dist/index.js +43 -42
- package/dist/midi/ccValues.js +8 -3
- package/dist/midi/statuses.js +18 -18
- package/dist/other/DefaultTooltip.js +5 -5
- package/dist/other/OctavePlayer.js +121 -0
- package/dist/other/SVGText.js +47 -47
- package/dist/other/SoundFontProvider.js +29 -29
- package/dist/other/utils.js +12 -12
- package/dist/pickers/CCPicker.js +14 -14
- package/dist/pickers/ChannelMappingPicker.js +42 -42
- package/dist/pickers/ChannelPicker.js +22 -22
- package/dist/pickers/Knob.js +22 -22
- package/dist/pickers/KnobPicker.js +42 -42
- package/dist/pickers/LatchPicker.js +12 -12
- package/dist/pickers/MappingPicker.js +36 -36
- package/dist/pickers/NotePicker.js +23 -23
- package/dist/pickers/PianoPicker.js +33 -33
- package/dist/pickers/PolarityPicker.js +13 -13
- package/dist/pickers/ResponseCurve.js +56 -56
- package/dist/pickers/ResponseCurvePicker.js +28 -28
- package/dist/pickers/Select.js +58 -58
- package/dist/pickers/StatusPicker.js +13 -13
- package/dist/pickers/ValuePicker.js +33 -33
- package/dist/pickers/knobSkin10.js +5 -5
- package/dist/shapes.js +8 -8
- package/dist/stories/assets/General MIDI.js +4 -3
- package/dist/stories/assets/mapper.js +11 -11
- package/dist/stories/assets/utils.js +3 -3
- package/dist/temp/acoustic_grand_piano-mp3.js +1 -1
- package/dist/utils.js +18 -18
- package/package.json +35 -28
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; /* eslint-disable consistent-return */
|
|
2
|
+
import { useCallback, useLayoutEffect, useState } from 'react';
|
|
3
3
|
|
|
4
4
|
var getSize = function getSize(el) {return el ?
|
|
5
5
|
{
|
|
@@ -12,43 +12,43 @@ var getSize = function getSize(el) {return el ?
|
|
|
12
12
|
};};
|
|
13
13
|
|
|
14
14
|
var useComponentSize = function useComponentSize(ref) {
|
|
15
|
-
var _useState =
|
|
15
|
+
var _useState = useState(getSize(ref ? ref.current : {})),_useState2 = _slicedToArray(_useState, 2),componentSize = _useState2[0],setComponentSize = _useState2[1];
|
|
16
16
|
|
|
17
|
-
var handleResize =
|
|
17
|
+
var handleResize = useCallback(function () {
|
|
18
18
|
if (ref.current) {
|
|
19
19
|
setComponentSize(getSize(ref.current));
|
|
20
20
|
}
|
|
21
21
|
}, [ref]);
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
useLayoutEffect(
|
|
24
|
+
function () {
|
|
25
|
+
if (!ref.current) return;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
handleResize();
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
if (typeof ResizeObserver === 'function') {
|
|
30
|
+
var resizeObserver = new ResizeObserver(function () {
|
|
31
|
+
handleResize();
|
|
32
|
+
});
|
|
33
|
+
resizeObserver.observe(ref.current);
|
|
34
|
+
|
|
35
|
+
return function () {
|
|
36
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
|
+
resizeObserver.disconnect(ref.current);
|
|
38
|
+
resizeObserver = null;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
window.addEventListener('resize', handleResize);
|
|
34
42
|
|
|
35
43
|
return function () {
|
|
36
|
-
|
|
37
|
-
resizeObserver.disconnect(ref.current);
|
|
38
|
-
resizeObserver = null;
|
|
44
|
+
window.removeEventListener('resize', handleResize);
|
|
39
45
|
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
window.removeEventListener('resize', handleResize);
|
|
45
|
-
};
|
|
46
|
-
},
|
|
47
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
|
-
[ref.current]);
|
|
49
|
-
|
|
46
|
+
},
|
|
47
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
|
+
[ref.current]
|
|
49
|
+
);
|
|
50
50
|
|
|
51
51
|
return componentSize;
|
|
52
|
-
};
|
|
52
|
+
};
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
export default useComponentSize;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";import { useEffect, useState } from 'react';
|
|
2
2
|
|
|
3
|
-
function
|
|
4
|
-
var _useState =
|
|
3
|
+
export default (function (defaultVal) {
|
|
4
|
+
var _useState = useState(defaultVal),_useState2 = _slicedToArray(_useState, 2),state = _useState2[0],setState = _useState2[1];
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
useEffect(function () {
|
|
7
7
|
setState(defaultVal);
|
|
8
8
|
}, [defaultVal]);
|
|
9
9
|
|
|
10
10
|
return [state, setState];
|
|
11
|
-
};
|
|
11
|
+
});
|
package/dist/index.js
CHANGED
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
// Pickers
|
|
2
|
+
export { default as CCPicker } from './pickers/CCPicker';
|
|
3
|
+
export { default as ChannelMappingPicker } from './pickers/ChannelMappingPicker';
|
|
4
|
+
export { default as ChannelPicker } from './pickers/ChannelPicker';
|
|
5
|
+
export { default as Knob } from './pickers/Knob';
|
|
6
|
+
export { default as KnobPicker } from './pickers/KnobPicker';
|
|
7
|
+
export { default as LatchPicker } from './pickers/LatchPicker';
|
|
8
|
+
export { default as MappingPicker } from './pickers/MappingPicker';
|
|
9
|
+
export { default as NotePicker } from './pickers/NotePicker';
|
|
10
|
+
export { default as OctavePlayer } from './other/OctavePlayer';
|
|
11
|
+
export { default as PianoPicker } from './pickers/PianoPicker';
|
|
12
|
+
export { default as PolarityPicker } from './pickers/PolarityPicker';
|
|
13
|
+
export { default as ResponseCurvePicker } from './pickers/ResponseCurvePicker';
|
|
14
|
+
export { default as Select } from './pickers/Select';
|
|
15
|
+
export { default as StatusPicker } from './pickers/StatusPicker';
|
|
16
|
+
export { default as SVGText } from './other/SVGText';
|
|
17
|
+
export { default as ValuePicker } from './pickers/ValuePicker';
|
|
18
|
+
|
|
19
|
+
// MIDI
|
|
20
|
+
export {
|
|
21
|
+
default as statuses,
|
|
22
|
+
getStatusLabel,
|
|
23
|
+
combineStatus,
|
|
24
|
+
extractStatus,
|
|
25
|
+
STATUS_NOTE_OFF,
|
|
26
|
+
STATUS_NOTE_ON,
|
|
27
|
+
STATUS_AFTER_TOUCH,
|
|
28
|
+
STATUS_CONTROL_CHANGE,
|
|
29
|
+
STATUS_PROGRAM_CHANGE,
|
|
30
|
+
STATUS_CHANNEL_PRESSURE,
|
|
31
|
+
STATUS_PITCH_WHEEL,
|
|
32
|
+
MASK_CHANNEL,
|
|
33
|
+
MASK_STATUS } from
|
|
34
|
+
'./midi/statuses';
|
|
35
|
+
|
|
36
|
+
export {
|
|
37
|
+
default as ResponseCurve,
|
|
38
|
+
RESPONSE_CURVES } from
|
|
39
|
+
'./pickers/ResponseCurve';
|
|
40
|
+
|
|
41
|
+
export { default as ccValues } from './midi/ccValues';
|
|
42
|
+
|
|
43
|
+
export { assertRange, memoize } from './utils';
|
package/dist/midi/ccValues.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
var CC_NAMES = [
|
|
2
2
|
'Bank Select',
|
|
3
3
|
'Modulation Wheel',
|
|
4
4
|
'Breath Controller',
|
|
@@ -127,6 +127,11 @@
|
|
|
127
127
|
'Omni Mode On',
|
|
128
128
|
'Mono Mode On',
|
|
129
129
|
'Poly Mode'].
|
|
130
|
-
map(function (label, value) {return {
|
|
130
|
+
map(function (label, value) {return {
|
|
131
|
+
label: String(label).length ? "".concat(
|
|
132
|
+
value, " - ").concat(label) :
|
|
133
|
+
value,
|
|
134
|
+
value: value
|
|
135
|
+
};});
|
|
131
136
|
|
|
132
|
-
|
|
137
|
+
export default CC_NAMES;
|
package/dist/midi/statuses.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var STATUS_NOTE_OFF = 8; // 1000
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var MASK_CHANNEL = 15; // 00001111
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
/* eslint-disable no-bitwise */
|
|
2
|
+
|
|
3
|
+
export var STATUS_NOTE_OFF = 8; // 1000
|
|
4
|
+
export var STATUS_NOTE_ON = 9; // 1001
|
|
5
|
+
export var STATUS_AFTER_TOUCH = 10; // 1010
|
|
6
|
+
export var STATUS_CONTROL_CHANGE = 11; // 1011
|
|
7
|
+
export var STATUS_PROGRAM_CHANGE = 12; // 1100
|
|
8
|
+
export var STATUS_CHANNEL_PRESSURE = 13; // 1101
|
|
9
|
+
export var STATUS_PITCH_WHEEL = 14; // 1110
|
|
10
|
+
|
|
11
|
+
export var MASK_CHANNEL = 15; // 00001111
|
|
12
|
+
export var MASK_STATUS = 240; // 01110000
|
|
13
|
+
|
|
14
14
|
var statuses = [
|
|
15
15
|
{ value: STATUS_NOTE_ON, label: 'Note On' },
|
|
16
16
|
{ value: STATUS_NOTE_OFF, label: 'Note Stack' },
|
|
@@ -21,13 +21,13 @@ var statuses = [
|
|
|
21
21
|
{ value: STATUS_PITCH_WHEEL, label: 'Pitch Wheel' }];
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
var getStatusLabel = function getStatusLabel(val) {var _statuses$filter$;return ((_statuses$filter$ = statuses.filter(function (_ref) {var value = _ref.value;return value === val;})[0]) === null || _statuses$filter$ === void 0 ? void 0 : _statuses$filter$.label) || '???';};
|
|
24
|
+
export var getStatusLabel = function getStatusLabel(val) {var _statuses$filter$;return ((_statuses$filter$ = statuses.filter(function (_ref) {var value = _ref.value;return value === val;})[0]) === null || _statuses$filter$ === void 0 ? void 0 : _statuses$filter$.label) || '???';};
|
|
25
25
|
|
|
26
|
-
var combineStatus = function combineStatus(channel, status) {return channel | status << 4;};
|
|
26
|
+
export var combineStatus = function combineStatus(channel, status) {return channel | status << 4;};
|
|
27
27
|
|
|
28
|
-
var extractStatus = function extractStatus(status) {return {
|
|
28
|
+
export var extractStatus = function extractStatus(status) {return {
|
|
29
29
|
status: (status & MASK_STATUS) >> 4 | 8,
|
|
30
30
|
channel: status & MASK_CHANNEL
|
|
31
|
-
};};
|
|
31
|
+
};};
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
export default statuses;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import { Fragment } from 'react';
|
|
3
3
|
|
|
4
|
-
var DefaultTooltip = function DefaultTooltip(_ref) {var children = _ref.children;return createElement(
|
|
4
|
+
var DefaultTooltip = function DefaultTooltip(_ref) {var children = _ref.children;return createElement(Fragment, null, children);};
|
|
5
5
|
|
|
6
|
-
DefaultTooltip.propTypes = { children:
|
|
6
|
+
DefaultTooltip.propTypes = { children: PropTypes.element.isRequired };
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
export default DefaultTooltip;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";var _excluded = ["octave", "height", "width"];import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { /* Midi, */Note } from 'tonal';
|
|
4
|
+
import { Piano as ReactPiano } from 'zds-react-piano';
|
|
5
|
+
import SoundfontProvider from './SoundFontProvider';
|
|
6
|
+
import DefaultTooltip from './DefaultTooltip';
|
|
7
|
+
|
|
8
|
+
var baseNotes = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'];
|
|
9
|
+
|
|
10
|
+
// const { midiToFreq, midiToNoteName } = Midi
|
|
11
|
+
|
|
12
|
+
// console.log(Note.names(), Note.midi('C4'))
|
|
13
|
+
|
|
14
|
+
// const firstNote = 21
|
|
15
|
+
// const lastNote = 108
|
|
16
|
+
var numNotes = 12;
|
|
17
|
+
|
|
18
|
+
var whiteNotes = numNotes * 0.7; // approx
|
|
19
|
+
|
|
20
|
+
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
|
|
21
|
+
|
|
22
|
+
var OctavePlayer = function OctavePlayer(_ref) {var octave = _ref.octave,height = _ref.height,width = _ref.width,rest = _objectWithoutProperties(_ref, _excluded);
|
|
23
|
+
var keyWidth = width / whiteNotes + 2;
|
|
24
|
+
var keyWidthToHeight = keyWidth / height;
|
|
25
|
+
|
|
26
|
+
var firstNote = Note.midi(baseNotes[0] + String(octave));
|
|
27
|
+
var lastNote = Note.midi(baseNotes[baseNotes.length - 1] + String(octave));
|
|
28
|
+
|
|
29
|
+
return /*#__PURE__*/(
|
|
30
|
+
React.createElement("div", null, /*#__PURE__*/
|
|
31
|
+
React.createElement(ReactPiano, _extends({
|
|
32
|
+
keyWidthToHeight: keyWidthToHeight,
|
|
33
|
+
noteRange: { first: firstNote, last: lastNote },
|
|
34
|
+
width: width },
|
|
35
|
+
rest)
|
|
36
|
+
)
|
|
37
|
+
));
|
|
38
|
+
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var WithProvider = function WithProvider(_ref2) {var
|
|
42
|
+
format = _ref2.format,
|
|
43
|
+
height = _ref2.height,
|
|
44
|
+
hostname = _ref2.hostname,
|
|
45
|
+
instrumentName = _ref2.instrumentName,
|
|
46
|
+
octave = _ref2.octave,
|
|
47
|
+
onChange = _ref2.onChange,
|
|
48
|
+
onClick = _ref2.onClick,
|
|
49
|
+
onDoubleClick = _ref2.onDoubleClick,
|
|
50
|
+
onKeyMouseEnter = _ref2.onKeyMouseEnter,
|
|
51
|
+
onKeyMouseLeave = _ref2.onKeyMouseLeave,
|
|
52
|
+
soundfont = _ref2.soundfont,
|
|
53
|
+
Tooltip = _ref2.Tooltip,
|
|
54
|
+
width = _ref2.width;return /*#__PURE__*/(
|
|
55
|
+
|
|
56
|
+
React.createElement(SoundfontProvider, {
|
|
57
|
+
|
|
58
|
+
audioContext: audioContext,
|
|
59
|
+
format: format,
|
|
60
|
+
hostname: hostname,
|
|
61
|
+
instrumentName: instrumentName,
|
|
62
|
+
onChange: onChange,
|
|
63
|
+
soundfont: soundfont,
|
|
64
|
+
|
|
65
|
+
render: function render(_ref3) {var isLoading = _ref3.isLoading,playNote = _ref3.playNote,stopNote = _ref3.stopNote;return /*#__PURE__*/(
|
|
66
|
+
React.createElement(OctavePlayer, {
|
|
67
|
+
disabled: isLoading,
|
|
68
|
+
|
|
69
|
+
height: height,
|
|
70
|
+
octave: octave,
|
|
71
|
+
onClick: onClick,
|
|
72
|
+
onDoubleClick: onDoubleClick,
|
|
73
|
+
onKeyMouseEnter: onKeyMouseEnter,
|
|
74
|
+
onKeyMouseLeave: onKeyMouseLeave,
|
|
75
|
+
playNote: playNote,
|
|
76
|
+
stopNote: stopNote,
|
|
77
|
+
Tooltip: Tooltip,
|
|
78
|
+
width: width }
|
|
79
|
+
|
|
80
|
+
));} }
|
|
81
|
+
|
|
82
|
+
));};
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
OctavePlayer.propTypes = {
|
|
86
|
+
height: PropTypes.number.isRequired,
|
|
87
|
+
octave: PropTypes.number.isRequired,
|
|
88
|
+
width: PropTypes.number.isRequired
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
WithProvider.propTypes = {
|
|
92
|
+
format: PropTypes.oneOf(['mp3', 'ogg']),
|
|
93
|
+
height: PropTypes.number.isRequired,
|
|
94
|
+
hostname: PropTypes.string,
|
|
95
|
+
instrumentName: PropTypes.string,
|
|
96
|
+
octave: PropTypes.number,
|
|
97
|
+
onChange: PropTypes.func,
|
|
98
|
+
onClick: PropTypes.func,
|
|
99
|
+
onDoubleClick: PropTypes.func,
|
|
100
|
+
onKeyMouseEnter: PropTypes.func,
|
|
101
|
+
onKeyMouseLeave: PropTypes.func,
|
|
102
|
+
soundfont: PropTypes.oneOf(['MusyngKite', 'FluidR3_GM']),
|
|
103
|
+
Tooltip: PropTypes.elementType,
|
|
104
|
+
width: PropTypes.number.isRequired
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
WithProvider.defaultProps = {
|
|
108
|
+
format: undefined, // 'mp3',
|
|
109
|
+
hostname: undefined,
|
|
110
|
+
instrumentName: undefined,
|
|
111
|
+
octave: 4,
|
|
112
|
+
onChange: undefined,
|
|
113
|
+
onClick: undefined,
|
|
114
|
+
onDoubleClick: undefined,
|
|
115
|
+
onKeyMouseEnter: undefined,
|
|
116
|
+
onKeyMouseLeave: undefined,
|
|
117
|
+
soundfont: undefined, // 'MusyngKite',
|
|
118
|
+
Tooltip: DefaultTooltip
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default WithProvider;
|
package/dist/other/SVGText.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";import _slicedToArray from "@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";var _excluded = ["children", "maxHeight", "maxWidth", "verticalAnchor"]; /* eslint-disable react/destructuring-assignment */
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { numberOrString } from '../shapes';
|
|
5
|
+
import { MEASUREMENT_ELEMENT_ID, calculateWordWidths, calculateWordsByLines } from './utils';
|
|
6
6
|
|
|
7
7
|
var Text = function Text(props) {
|
|
8
|
-
var children = props.children,maxHeight = props.maxHeight,maxWidth = props.maxWidth,verticalAnchor = props.verticalAnchor,rest = (
|
|
9
|
-
var _useState =
|
|
10
|
-
var _useState3 =
|
|
11
|
-
var _useState5 =
|
|
12
|
-
var measureRef =
|
|
13
|
-
var displayedLines =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var ref =
|
|
8
|
+
var children = props.children,maxHeight = props.maxHeight,maxWidth = props.maxWidth,verticalAnchor = props.verticalAnchor,rest = _objectWithoutProperties(props, _excluded);
|
|
9
|
+
var _useState = useState(),_useState2 = _slicedToArray(_useState, 2),wordWidths = _useState2[0],setWordWidths = _useState2[1];
|
|
10
|
+
var _useState3 = useState([]),_useState4 = _slicedToArray(_useState3, 2),textLines = _useState4[0],setTextLines = _useState4[1];
|
|
11
|
+
var _useState5 = useState(),_useState6 = _slicedToArray(_useState5, 2),style = _useState6[0],setComputedStyle = _useState6[1];
|
|
12
|
+
var measureRef = useRef();
|
|
13
|
+
var displayedLines = useMemo(
|
|
14
|
+
function () {return textLines.filter(function (_ref) {var showLine = _ref.showLine;return showLine;});},
|
|
15
|
+
[textLines]
|
|
16
|
+
);
|
|
17
|
+
var ref = useCallback(function (node) {
|
|
18
18
|
setComputedStyle(node !== null ? window.getComputedStyle(node) : '');
|
|
19
19
|
}, []);
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
var el = document.getElementById(
|
|
21
|
+
useEffect(function () {
|
|
22
|
+
var el = document.getElementById(MEASUREMENT_ELEMENT_ID);
|
|
23
23
|
if (el === null) {
|
|
24
24
|
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
25
|
-
svg.setAttribute('id',
|
|
25
|
+
svg.setAttribute('id', MEASUREMENT_ELEMENT_ID);
|
|
26
26
|
document.body.appendChild(svg);
|
|
27
27
|
svg.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'text'));
|
|
28
28
|
measureRef.current = svg;
|
|
@@ -32,19 +32,19 @@ var Text = function Text(props) {
|
|
|
32
32
|
return function () {return el && document.body.contains(el) ? document.body.removeChild(el) : null;};
|
|
33
33
|
}, []);
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
var wordWithWidths =
|
|
35
|
+
useEffect(function () {
|
|
36
|
+
var wordWithWidths = calculateWordWidths(style, measureRef.current.firstElementChild, children);
|
|
37
37
|
setWordWidths(wordWithWidths);
|
|
38
38
|
}, [children, style]);
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
useEffect(function () {
|
|
41
41
|
if (maxWidth && wordWidths) {
|
|
42
|
-
var lines =
|
|
42
|
+
var lines = calculateWordsByLines(children, wordWidths, maxWidth, maxHeight);
|
|
43
43
|
setTextLines(lines);
|
|
44
44
|
}
|
|
45
45
|
}, [maxHeight, maxWidth, wordWidths, children]);
|
|
46
46
|
|
|
47
|
-
var startDy =
|
|
47
|
+
var startDy = useMemo(function () {
|
|
48
48
|
if (wordWidths !== null && wordWidths !== void 0 && wordWidths.lineHeight) {
|
|
49
49
|
switch (verticalAnchor) {
|
|
50
50
|
case 'start':
|
|
@@ -54,53 +54,53 @@ var Text = function Text(props) {
|
|
|
54
54
|
return -((displayedLines.length - 1) * wordWidths.lineHeight / 2);
|
|
55
55
|
|
|
56
56
|
default:
|
|
57
|
-
return -(displayedLines.length - 1) * wordWidths.lineHeight;
|
|
58
|
-
|
|
57
|
+
return -(displayedLines.length - 1) * wordWidths.lineHeight;
|
|
58
|
+
}
|
|
59
59
|
} else {
|
|
60
60
|
return 0;
|
|
61
61
|
}
|
|
62
62
|
}, [displayedLines.length, verticalAnchor, wordWidths === null || wordWidths === void 0 ? void 0 : wordWidths.lineHeight]);
|
|
63
63
|
|
|
64
64
|
return /*#__PURE__*/(
|
|
65
|
-
|
|
65
|
+
React.createElement("text", _extends({
|
|
66
66
|
ref: ref },
|
|
67
67
|
rest),
|
|
68
68
|
|
|
69
69
|
textLines.length <= 1 ?
|
|
70
70
|
children : /*#__PURE__*/
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
React.createElement(React.Fragment, null,
|
|
73
73
|
displayedLines.map(function (line, idx) {return /*#__PURE__*/(
|
|
74
|
-
|
|
74
|
+
React.createElement("tspan", {
|
|
75
75
|
dx: props.x + props.dx,
|
|
76
76
|
dy: idx === 0 ? startDy + props.dy : wordWidths.lineHeight,
|
|
77
77
|
key: idx,
|
|
78
78
|
x: 0 },
|
|
79
79
|
|
|
80
|
-
line.words.join(' ')
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
line.words.join(' ')
|
|
81
|
+
));}
|
|
82
|
+
),
|
|
83
83
|
displayedLines.length !== textLines.length && /*#__PURE__*/
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
React.createElement(React.Fragment, null, /*#__PURE__*/
|
|
85
|
+
React.createElement("tspan", null, "..."), /*#__PURE__*/
|
|
86
|
+
React.createElement("title", null, children)
|
|
87
|
+
)
|
|
90
88
|
|
|
89
|
+
)
|
|
91
90
|
|
|
91
|
+
));
|
|
92
92
|
|
|
93
93
|
};
|
|
94
94
|
|
|
95
95
|
Text.propTypes = {
|
|
96
|
-
children:
|
|
97
|
-
dx:
|
|
98
|
-
dy:
|
|
99
|
-
maxHeight:
|
|
100
|
-
maxWidth:
|
|
101
|
-
verticalAnchor:
|
|
102
|
-
x:
|
|
103
|
-
y:
|
|
96
|
+
children: PropTypes.node.isRequired,
|
|
97
|
+
dx: PropTypes.number,
|
|
98
|
+
dy: PropTypes.number,
|
|
99
|
+
maxHeight: PropTypes.number,
|
|
100
|
+
maxWidth: PropTypes.number,
|
|
101
|
+
verticalAnchor: PropTypes.oneOf(['start', 'middle', 'end']),
|
|
102
|
+
x: numberOrString,
|
|
103
|
+
y: numberOrString
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
Text.defaultProps = {
|
|
@@ -111,6 +111,6 @@ Text.defaultProps = {
|
|
|
111
111
|
verticalAnchor: 'start',
|
|
112
112
|
x: '50%',
|
|
113
113
|
y: '50%'
|
|
114
|
-
};
|
|
114
|
+
};
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
export default Text;
|