victory-core 36.4.1 → 36.5.2
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/victory-core.js +14463 -11478
- package/dist/victory-core.min.js +1 -1
- package/dist/victory-core.min.js.LICENSE.txt +19 -0
- package/es/index.d.ts +18 -941
- package/es/index.js +18 -73
- package/es/types/callbacks.d.ts +37 -0
- package/es/types/callbacks.js +2 -0
- package/es/types/prop-types.d.ts +130 -0
- package/es/types/prop-types.js +2 -0
- package/es/victory-accessible-group/victory-accessible-group.d.ts +26 -0
- package/es/victory-accessible-group/victory-accessible-group.js +9 -16
- package/es/victory-animation/util.d.ts +67 -0
- package/es/victory-animation/util.js +7 -4
- package/es/victory-animation/victory-animation.d.ts +70 -0
- package/es/victory-animation/victory-animation.js +60 -67
- package/es/victory-clip-container/victory-clip-container.d.ts +77 -0
- package/es/victory-clip-container/victory-clip-container.js +16 -21
- package/es/victory-container/victory-container.d.ts +100 -0
- package/es/victory-container/victory-container.js +32 -31
- package/es/victory-label/victory-label.d.ts +62 -0
- package/es/victory-label/victory-label.js +14 -9
- package/es/victory-portal/portal-context.d.ts +12 -0
- package/es/victory-portal/portal-context.js +3 -3
- package/es/victory-portal/portal.d.ts +29 -0
- package/es/victory-portal/portal.js +26 -33
- package/es/victory-portal/victory-portal.d.ts +32 -0
- package/es/victory-portal/victory-portal.js +24 -22
- package/es/victory-primitives/arc.d.ts +50 -0
- package/es/victory-primitives/arc.js +4 -5
- package/es/victory-primitives/background.d.ts +51 -0
- package/es/victory-primitives/background.js +5 -6
- package/es/victory-primitives/border.d.ts +44 -0
- package/es/victory-primitives/border.js +4 -5
- package/es/victory-primitives/circle.d.ts +3 -0
- package/es/victory-primitives/circle.js +11 -7
- package/es/victory-primitives/clip-path.d.ts +15 -0
- package/es/victory-primitives/clip-path.js +6 -5
- package/es/victory-primitives/index.d.ts +15 -0
- package/es/victory-primitives/index.js +15 -0
- package/es/victory-primitives/line-segment.d.ts +46 -0
- package/es/victory-primitives/line-segment.js +4 -5
- package/es/victory-primitives/line.d.ts +3 -0
- package/es/victory-primitives/line.js +11 -7
- package/es/victory-primitives/path.d.ts +3 -0
- package/es/victory-primitives/path.js +9 -5
- package/es/victory-primitives/point.d.ts +49 -0
- package/es/victory-primitives/point.js +10 -19
- package/es/victory-primitives/rect.d.ts +3 -0
- package/es/victory-primitives/rect.js +11 -7
- package/es/victory-primitives/text.d.ts +17 -0
- package/es/victory-primitives/text.js +7 -5
- package/es/victory-primitives/tspan.d.ts +3 -0
- package/es/victory-primitives/tspan.js +7 -5
- package/es/victory-primitives/types.d.ts +8 -0
- package/es/victory-primitives/types.js +2 -0
- package/es/victory-primitives/whisker.d.ts +59 -0
- package/es/victory-primitives/whisker.js +4 -5
- package/es/victory-state/defaults.d.ts +3 -0
- package/es/victory-state/defaults.js +3 -0
- package/es/victory-state/helpers/get-axis-data.d.ts +3 -0
- package/es/victory-state/helpers/get-axis-data.js +15 -0
- package/es/victory-state/helpers/get-data.d.ts +15 -0
- package/es/victory-state/helpers/get-data.js +88 -0
- package/es/victory-state/helpers/get-domain.d.ts +6 -0
- package/es/victory-state/helpers/get-domain.js +68 -0
- package/es/victory-state/helpers/get-range.d.ts +6 -0
- package/es/victory-state/helpers/get-range.js +37 -0
- package/es/victory-state/helpers/get-scale.d.ts +6 -0
- package/es/victory-state/helpers/get-scale.js +59 -0
- package/es/victory-state/index.d.ts +3 -0
- package/es/victory-state/index.js +3 -0
- package/es/victory-state/types.d.ts +24 -0
- package/es/victory-state/types.js +2 -0
- package/es/victory-state/victory-provider.d.ts +19 -0
- package/es/victory-state/victory-provider.js +118 -0
- package/es/victory-theme/grayscale.d.ts +3 -0
- package/es/victory-theme/grayscale.js +3 -2
- package/es/victory-theme/material.d.ts +3 -0
- package/es/victory-theme/material.js +3 -2
- package/es/victory-theme/types.d.ts +239 -0
- package/es/victory-theme/types.js +2 -0
- package/es/victory-theme/victory-theme.d.ts +6 -0
- package/es/victory-theme/victory-theme.js +8 -6
- package/es/victory-transition/victory-transition.d.ts +60 -0
- package/es/victory-transition/victory-transition.js +20 -23
- package/es/victory-util/add-events.d.ts +106 -0
- package/es/victory-util/add-events.js +44 -34
- package/es/victory-util/axis.d.ts +51 -0
- package/es/victory-util/axis.js +9 -8
- package/es/victory-util/collection.d.ts +9 -0
- package/es/victory-util/collection.js +6 -6
- package/es/victory-util/common-props.d.ts +84 -0
- package/es/victory-util/common-props.js +29 -12
- package/es/victory-util/data.d.ts +75 -0
- package/es/victory-util/data.js +2 -3
- package/es/victory-util/default-transitions.d.ts +5 -0
- package/es/victory-util/default-transitions.js +2 -2
- package/es/victory-util/domain.d.ts +91 -0
- package/es/victory-util/domain.js +6 -4
- package/es/victory-util/events.d.ts +65 -0
- package/es/victory-util/events.js +13 -8
- package/es/victory-util/helpers.d.ts +61 -0
- package/es/victory-util/helpers.js +8 -6
- package/es/victory-util/hooks/index.d.ts +3 -0
- package/es/victory-util/hooks/index.js +2 -1
- package/es/victory-util/hooks/use-animation-state.js +2 -1
- package/es/victory-util/hooks/use-previous-props.d.ts +2 -0
- package/es/victory-util/hooks/use-previous-props.js +4 -3
- package/es/victory-util/immutable.d.ts +12 -0
- package/es/victory-util/immutable.js +5 -5
- package/es/victory-util/index.d.ts +29 -0
- package/es/victory-util/index.js +48 -0
- package/es/victory-util/label-helpers.d.ts +27 -0
- package/es/victory-util/label-helpers.js +2 -3
- package/es/victory-util/line-helpers.d.ts +5 -0
- package/es/victory-util/line-helpers.js +24 -6
- package/es/victory-util/log.d.ts +2 -0
- package/es/victory-util/log.js +2 -2
- package/es/victory-util/point-path-helpers.d.ts +10 -0
- package/es/victory-util/point-path-helpers.js +60 -61
- package/es/victory-util/prop-types.d.ts +51 -0
- package/es/victory-util/prop-types.js +35 -44
- package/es/victory-util/scale.d.ts +10 -0
- package/es/victory-util/scale.js +14 -6
- package/es/victory-util/selection.d.ts +25 -0
- package/es/victory-util/selection.js +25 -16
- package/es/victory-util/style.d.ts +19 -0
- package/es/victory-util/style.js +2 -3
- package/es/victory-util/textsize.d.ts +37 -0
- package/es/victory-util/textsize.js +9 -6
- package/es/victory-util/timer-context.d.ts +12 -0
- package/es/victory-util/timer-context.js +2 -1
- package/es/victory-util/timer.d.ts +17 -0
- package/es/victory-util/timer.js +15 -9
- package/es/victory-util/transitions.d.ts +49 -0
- package/es/victory-util/transitions.js +5 -4
- package/es/victory-util/type-helpers.d.ts +10 -0
- package/es/victory-util/type-helpers.js +28 -0
- package/es/victory-util/user-props.d.ts +21 -0
- package/es/victory-util/user-props.js +6 -5
- package/es/victory-util/with-container.d.ts +5 -0
- package/es/victory-util/with-container.js +32 -0
- package/es/victory-util/wrapper.d.ts +38 -0
- package/es/victory-util/wrapper.js +4 -3
- package/lib/index.d.ts +18 -941
- package/lib/index.js +224 -311
- package/lib/types/callbacks.d.ts +37 -0
- package/lib/types/callbacks.js +2 -0
- package/lib/types/prop-types.d.ts +130 -0
- package/lib/types/prop-types.js +2 -0
- package/lib/victory-accessible-group/victory-accessible-group.d.ts +26 -0
- package/lib/victory-accessible-group/victory-accessible-group.js +10 -15
- package/lib/victory-animation/util.d.ts +67 -0
- package/lib/victory-animation/util.js +7 -4
- package/lib/victory-animation/victory-animation.d.ts +70 -0
- package/lib/victory-animation/victory-animation.js +61 -65
- package/lib/victory-clip-container/victory-clip-container.d.ts +77 -0
- package/lib/victory-clip-container/victory-clip-container.js +20 -22
- package/lib/victory-container/victory-container.d.ts +100 -0
- package/lib/victory-container/victory-container.js +35 -31
- package/lib/victory-label/victory-label.d.ts +62 -0
- package/lib/victory-label/victory-label.js +20 -14
- package/lib/victory-portal/portal-context.d.ts +12 -0
- package/lib/victory-portal/portal-context.js +3 -3
- package/lib/victory-portal/portal.d.ts +29 -0
- package/lib/victory-portal/portal.js +27 -31
- package/lib/victory-portal/victory-portal.d.ts +32 -0
- package/lib/victory-portal/victory-portal.js +25 -20
- package/lib/victory-primitives/arc.d.ts +50 -0
- package/lib/victory-primitives/arc.js +7 -7
- package/lib/victory-primitives/background.d.ts +51 -0
- package/lib/victory-primitives/background.js +9 -9
- package/lib/victory-primitives/border.d.ts +44 -0
- package/lib/victory-primitives/border.js +7 -7
- package/lib/victory-primitives/circle.d.ts +3 -0
- package/lib/victory-primitives/circle.js +12 -6
- package/lib/victory-primitives/clip-path.d.ts +15 -0
- package/lib/victory-primitives/clip-path.js +7 -4
- package/lib/victory-primitives/index.d.ts +15 -0
- package/lib/victory-primitives/index.js +188 -0
- package/lib/victory-primitives/line-segment.d.ts +46 -0
- package/lib/victory-primitives/line-segment.js +7 -7
- package/lib/victory-primitives/line.d.ts +3 -0
- package/lib/victory-primitives/line.js +12 -6
- package/lib/victory-primitives/path.d.ts +3 -0
- package/lib/victory-primitives/path.js +10 -4
- package/lib/victory-primitives/point.d.ts +49 -0
- package/lib/victory-primitives/point.js +15 -22
- package/lib/victory-primitives/rect.d.ts +3 -0
- package/lib/victory-primitives/rect.js +12 -6
- package/lib/victory-primitives/text.d.ts +17 -0
- package/lib/victory-primitives/text.js +8 -4
- package/lib/victory-primitives/tspan.d.ts +3 -0
- package/lib/victory-primitives/tspan.js +8 -4
- package/lib/victory-primitives/types.d.ts +8 -0
- package/lib/victory-primitives/types.js +2 -0
- package/lib/victory-primitives/whisker.d.ts +59 -0
- package/lib/victory-primitives/whisker.js +7 -7
- package/lib/victory-state/defaults.d.ts +3 -0
- package/lib/victory-state/defaults.js +11 -0
- package/lib/victory-state/helpers/get-axis-data.d.ts +3 -0
- package/lib/victory-state/helpers/get-axis-data.js +23 -0
- package/lib/victory-state/helpers/get-data.d.ts +15 -0
- package/lib/victory-state/helpers/get-data.js +99 -0
- package/lib/victory-state/helpers/get-domain.d.ts +6 -0
- package/lib/victory-state/helpers/get-domain.js +82 -0
- package/lib/victory-state/helpers/get-range.d.ts +6 -0
- package/lib/victory-state/helpers/get-range.js +46 -0
- package/lib/victory-state/helpers/get-scale.d.ts +6 -0
- package/lib/victory-state/helpers/get-scale.js +74 -0
- package/lib/victory-state/index.d.ts +3 -0
- package/lib/victory-state/index.js +32 -0
- package/lib/victory-state/types.d.ts +24 -0
- package/lib/victory-state/types.js +2 -0
- package/lib/victory-state/victory-provider.d.ts +19 -0
- package/lib/victory-state/victory-provider.js +144 -0
- package/lib/victory-theme/grayscale.d.ts +3 -0
- package/lib/victory-theme/grayscale.js +4 -3
- package/lib/victory-theme/material.d.ts +3 -0
- package/lib/victory-theme/material.js +4 -3
- package/lib/victory-theme/types.d.ts +239 -0
- package/lib/victory-theme/types.js +2 -0
- package/lib/victory-theme/victory-theme.d.ts +6 -0
- package/lib/victory-theme/victory-theme.js +23 -8
- package/lib/victory-transition/victory-transition.d.ts +60 -0
- package/lib/victory-transition/victory-transition.js +22 -23
- package/lib/victory-util/add-events.d.ts +106 -0
- package/lib/victory-util/add-events.js +48 -40
- package/lib/victory-util/axis.d.ts +51 -0
- package/lib/victory-util/axis.js +8 -6
- package/lib/victory-util/collection.d.ts +9 -0
- package/lib/victory-util/collection.js +6 -6
- package/lib/victory-util/common-props.d.ts +84 -0
- package/lib/victory-util/common-props.js +27 -12
- package/lib/victory-util/data.d.ts +75 -0
- package/lib/victory-util/data.js +2 -1
- package/lib/victory-util/default-transitions.d.ts +5 -0
- package/lib/victory-util/default-transitions.js +2 -2
- package/lib/victory-util/domain.d.ts +91 -0
- package/lib/victory-util/domain.js +6 -2
- package/lib/victory-util/events.d.ts +65 -0
- package/lib/victory-util/events.js +13 -9
- package/lib/victory-util/helpers.d.ts +61 -0
- package/lib/victory-util/helpers.js +8 -6
- package/lib/victory-util/hooks/index.d.ts +3 -0
- package/lib/victory-util/hooks/index.js +2 -1
- package/lib/victory-util/hooks/use-animation-state.js +2 -1
- package/lib/victory-util/hooks/use-previous-props.d.ts +2 -0
- package/lib/victory-util/hooks/use-previous-props.js +5 -6
- package/lib/victory-util/immutable.d.ts +12 -0
- package/lib/victory-util/immutable.js +5 -6
- package/lib/victory-util/index.d.ts +29 -0
- package/lib/victory-util/index.js +181 -0
- package/lib/victory-util/label-helpers.d.ts +27 -0
- package/lib/victory-util/label-helpers.js +2 -3
- package/lib/victory-util/line-helpers.d.ts +5 -0
- package/lib/victory-util/line-helpers.js +28 -7
- package/lib/victory-util/log.d.ts +2 -0
- package/lib/victory-util/log.js +2 -2
- package/lib/victory-util/point-path-helpers.d.ts +10 -0
- package/lib/victory-util/point-path-helpers.js +87 -73
- package/lib/victory-util/prop-types.d.ts +51 -0
- package/lib/victory-util/prop-types.js +36 -44
- package/lib/victory-util/scale.d.ts +10 -0
- package/lib/victory-util/scale.js +14 -5
- package/lib/victory-util/selection.d.ts +25 -0
- package/lib/victory-util/selection.js +25 -21
- package/lib/victory-util/style.d.ts +19 -0
- package/lib/victory-util/style.js +2 -3
- package/lib/victory-util/textsize.d.ts +37 -0
- package/lib/victory-util/textsize.js +9 -6
- package/lib/victory-util/timer-context.d.ts +12 -0
- package/lib/victory-util/timer-context.js +2 -1
- package/lib/victory-util/timer.d.ts +17 -0
- package/lib/victory-util/timer.js +15 -9
- package/lib/victory-util/transitions.d.ts +49 -0
- package/lib/victory-util/transitions.js +5 -4
- package/lib/victory-util/type-helpers.d.ts +10 -0
- package/lib/victory-util/type-helpers.js +45 -0
- package/lib/victory-util/user-props.d.ts +21 -0
- package/lib/victory-util/user-props.js +6 -5
- package/lib/victory-util/with-container.d.ts +5 -0
- package/lib/victory-util/with-container.js +44 -0
- package/lib/victory-util/wrapper.d.ts +38 -0
- package/lib/victory-util/wrapper.js +4 -3
- package/package.json +4 -4
- package/src/index.ts +17 -0
- package/src/types/callbacks.ts +53 -0
- package/src/types/prop-types.ts +195 -0
- package/src/victory-accessible-group/{victory-accessible-group.js → victory-accessible-group.tsx} +13 -6
- package/src/victory-animation/{util.js → util.ts} +6 -4
- package/src/victory-animation/{victory-animation.js → victory-animation.tsx} +100 -23
- package/src/victory-clip-container/{victory-clip-container.js → victory-clip-container.tsx} +52 -28
- package/src/victory-container/{victory-container.js → victory-container.tsx} +86 -42
- package/src/victory-label/{victory-label.js → victory-label.tsx} +108 -49
- package/src/victory-portal/portal-context.ts +14 -0
- package/src/victory-portal/{portal.js → portal.tsx} +24 -13
- package/src/victory-portal/{victory-portal.js → victory-portal.tsx} +24 -9
- package/src/victory-primitives/{arc.js → arc.tsx} +22 -10
- package/src/victory-primitives/{background.js → background.tsx} +24 -12
- package/src/victory-primitives/{border.js → border.tsx} +19 -10
- package/src/victory-primitives/{circle.js → circle.tsx} +4 -3
- package/src/victory-primitives/clip-path.tsx +25 -0
- package/src/victory-primitives/index.ts +14 -0
- package/src/victory-primitives/{line-segment.js → line-segment.tsx} +20 -10
- package/src/victory-primitives/{line.js → line.tsx} +4 -3
- package/src/victory-primitives/{path.js → path.tsx} +4 -3
- package/src/victory-primitives/{point.js → point.tsx} +33 -26
- package/src/victory-primitives/{rect.js → rect.tsx} +4 -2
- package/src/victory-primitives/{text.js → text.tsx} +10 -4
- package/src/victory-primitives/tspan.tsx +7 -0
- package/src/victory-primitives/types.ts +19 -0
- package/src/victory-primitives/{whisker.js → whisker.tsx} +34 -19
- package/src/victory-state/defaults.ts +2 -0
- package/src/victory-state/helpers/get-axis-data.ts +14 -0
- package/src/victory-state/helpers/get-data.ts +79 -0
- package/src/victory-state/helpers/get-domain.ts +62 -0
- package/src/victory-state/helpers/get-range.ts +39 -0
- package/src/victory-state/helpers/get-scale.ts +64 -0
- package/src/victory-state/index.ts +2 -0
- package/src/victory-state/types.ts +32 -0
- package/src/victory-state/victory-provider.tsx +116 -0
- package/src/victory-theme/{grayscale.js → grayscale.tsx} +63 -62
- package/src/victory-theme/{material.js → material.tsx} +68 -67
- package/src/victory-theme/types.ts +257 -0
- package/src/victory-theme/victory-theme.tsx +5 -0
- package/src/victory-transition/{victory-transition.js → victory-transition.tsx} +82 -33
- package/src/victory-util/{add-events.js → add-events.tsx} +142 -60
- package/src/victory-util/{axis.js → axis.tsx} +17 -19
- package/src/victory-util/{collection.js → collection.tsx} +14 -11
- package/src/victory-util/common-props.tsx +307 -0
- package/src/victory-util/{data.js → data.ts} +14 -11
- package/src/victory-util/{default-transitions.js → default-transitions.ts} +20 -19
- package/src/victory-util/{domain.js → domain.ts} +26 -24
- package/src/victory-util/{events.js → events.ts} +83 -32
- package/src/victory-util/{helpers.js → helpers.ts} +41 -23
- package/src/victory-util/hooks/{index.js → index.ts} +0 -0
- package/src/victory-util/hooks/use-animation-state.js +10 -10
- package/src/victory-util/hooks/use-previous-props.ts +9 -0
- package/src/victory-util/{immutable.js → immutable.ts} +14 -11
- package/src/victory-util/index.ts +28 -0
- package/src/victory-util/{label-helpers.js → label-helpers.ts} +7 -8
- package/src/victory-util/line-helpers.ts +104 -0
- package/src/victory-util/{log.js → log.ts} +1 -2
- package/src/victory-util/point-path-helpers.ts +119 -0
- package/src/victory-util/{prop-types.js → prop-types.ts} +103 -102
- package/src/victory-util/{scale.js → scale.ts} +29 -17
- package/src/victory-util/selection.ts +158 -0
- package/src/victory-util/{style.js → style.ts} +3 -4
- package/src/victory-util/{textsize.js → textsize.ts} +32 -17
- package/src/victory-util/{timer-context.js → timer-context.ts} +1 -1
- package/src/victory-util/{timer.js → timer.ts} +16 -6
- package/src/victory-util/{transitions.js → transitions.ts} +50 -23
- package/src/victory-util/type-helpers.ts +50 -0
- package/src/victory-util/{user-props.js → user-props.ts} +16 -11
- package/src/victory-util/with-container.tsx +41 -0
- package/src/victory-util/{wrapper.js → wrapper.tsx} +38 -34
- package/src/index.d.ts +0 -941
- package/src/index.js +0 -51
- package/src/victory-portal/portal-context.js +0 -10
- package/src/victory-primitives/clip-path.js +0 -18
- package/src/victory-primitives/tspan.js +0 -5
- package/src/victory-theme/victory-theme.js +0 -7
- package/src/victory-util/common-props.js +0 -197
- package/src/victory-util/hooks/use-previous-props.js +0 -9
- package/src/victory-util/line-helpers.js +0 -54
- package/src/victory-util/point-path-helpers.js +0 -121
- package/src/victory-util/selection.js +0 -99
|
@@ -120,23 +120,23 @@ const absoluteMeasurementUnitsToPixels = {
|
|
|
120
120
|
pt: 1.33,
|
|
121
121
|
pc: 16,
|
|
122
122
|
in: 96,
|
|
123
|
-
px: 1
|
|
123
|
+
px: 1,
|
|
124
124
|
};
|
|
125
125
|
const relativeMeasurementUnitsCoef = {
|
|
126
126
|
em: 1,
|
|
127
|
-
ex: 0.5
|
|
127
|
+
ex: 0.5,
|
|
128
128
|
};
|
|
129
129
|
|
|
130
130
|
const coefficients = {
|
|
131
131
|
heightOverlapCoef: 1.05, // Coefficient for height value to prevent overlap.
|
|
132
|
-
lineCapitalCoef: 1.15 // Coefficient for height value. Reserve space for capital chars.
|
|
132
|
+
lineCapitalCoef: 1.15, // Coefficient for height value. Reserve space for capital chars.
|
|
133
133
|
};
|
|
134
134
|
const defaultStyle = {
|
|
135
135
|
lineHeight: 1,
|
|
136
136
|
letterSpacing: "0px",
|
|
137
137
|
fontSize: 0,
|
|
138
138
|
angle: 0,
|
|
139
|
-
fontFamily: ""
|
|
139
|
+
fontFamily: "",
|
|
140
140
|
};
|
|
141
141
|
|
|
142
142
|
const _degreeToRadian = (angle) => (angle * Math.PI) / 180;
|
|
@@ -147,7 +147,7 @@ const _getFontData = (fontFamily) => {
|
|
|
147
147
|
return fonts[fontMatch];
|
|
148
148
|
};
|
|
149
149
|
|
|
150
|
-
const _splitToLines = (text) => {
|
|
150
|
+
const _splitToLines = (text: string | string[]) => {
|
|
151
151
|
return Array.isArray(text) ? text : text.toString().split(/\r\n|\r|\n/g);
|
|
152
152
|
};
|
|
153
153
|
|
|
@@ -165,9 +165,12 @@ const _getSizeWithRotate = (axisSize, dependentSize, angle) => {
|
|
|
165
165
|
* @param {number} fontSize Current text font-size.
|
|
166
166
|
* @returns {number} Approximate Css length in pixels.
|
|
167
167
|
*/
|
|
168
|
-
export const convertLengthToPixels = (
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
export const convertLengthToPixels = (
|
|
169
|
+
length: string,
|
|
170
|
+
fontSize?: number,
|
|
171
|
+
): number => {
|
|
172
|
+
const attribute = length.match(/[a-zA-Z%]+/)?.[0];
|
|
173
|
+
const value = Number(length.match(/[0-9.,]+/));
|
|
171
174
|
let result;
|
|
172
175
|
if (!attribute) {
|
|
173
176
|
result = value || 0;
|
|
@@ -195,11 +198,11 @@ const _prepareParams = (inputStyle, index) => {
|
|
|
195
198
|
fontSize:
|
|
196
199
|
typeof style.fontSize === "number"
|
|
197
200
|
? style.fontSize
|
|
198
|
-
: convertLengthToPixels(String(style.fontSize))
|
|
201
|
+
: convertLengthToPixels(String(style.fontSize)),
|
|
199
202
|
});
|
|
200
203
|
};
|
|
201
204
|
|
|
202
|
-
const _approximateTextWidthInternal = (text, style) => {
|
|
205
|
+
const _approximateTextWidthInternal = (text: string | string[], style) => {
|
|
203
206
|
if (text === undefined || text === "" || text === null) {
|
|
204
207
|
return 0;
|
|
205
208
|
}
|
|
@@ -208,7 +211,7 @@ const _approximateTextWidthInternal = (text, style) => {
|
|
|
208
211
|
const len = line.toString().length;
|
|
209
212
|
const { fontSize, letterSpacing, fontFamily } = _prepareParams(
|
|
210
213
|
style,
|
|
211
|
-
index
|
|
214
|
+
index,
|
|
212
215
|
);
|
|
213
216
|
const fontData = _getFontData(fontFamily);
|
|
214
217
|
const width =
|
|
@@ -226,7 +229,7 @@ const _approximateTextWidthInternal = (text, style) => {
|
|
|
226
229
|
return Math.max(...widths);
|
|
227
230
|
};
|
|
228
231
|
|
|
229
|
-
const _approximateTextHeightInternal = (text, style) => {
|
|
232
|
+
const _approximateTextHeightInternal = (text: string | string[], style) => {
|
|
230
233
|
if (text === undefined || text === "" || text === null) {
|
|
231
234
|
return 0;
|
|
232
235
|
}
|
|
@@ -240,9 +243,18 @@ const _approximateTextHeightInternal = (text, style) => {
|
|
|
240
243
|
}, 0);
|
|
241
244
|
};
|
|
242
245
|
|
|
246
|
+
export interface TextSizeStyleInterface {
|
|
247
|
+
angle?: number;
|
|
248
|
+
characterConstant?: string;
|
|
249
|
+
fontFamily?: string;
|
|
250
|
+
fontSize?: number | string;
|
|
251
|
+
letterSpacing?: string;
|
|
252
|
+
lineHeight?: number;
|
|
253
|
+
}
|
|
254
|
+
|
|
243
255
|
// Stubbable implementation.
|
|
244
256
|
export const _approximateTextSizeInternal = {
|
|
245
|
-
impl: (text, style) => {
|
|
257
|
+
impl: (text: string | string[], style?: TextSizeStyleInterface) => {
|
|
246
258
|
const angle = Array.isArray(style)
|
|
247
259
|
? style[0] && style[0].angle
|
|
248
260
|
: style && style.angle;
|
|
@@ -256,14 +268,14 @@ export const _approximateTextSizeInternal = {
|
|
|
256
268
|
: height;
|
|
257
269
|
return {
|
|
258
270
|
width: widthWithRotate,
|
|
259
|
-
height: heightWithRotate * coefficients.heightOverlapCoef
|
|
271
|
+
height: heightWithRotate * coefficients.heightOverlapCoef,
|
|
260
272
|
};
|
|
261
|
-
}
|
|
273
|
+
},
|
|
262
274
|
};
|
|
263
275
|
|
|
264
276
|
/**
|
|
265
277
|
* Predict text size by font params.
|
|
266
|
-
* @param {string} text Content for width calculation.
|
|
278
|
+
* @param {string|string[]} text Content for width calculation.
|
|
267
279
|
* @param {Object} style Text styles, ,fontFamily, fontSize, etc.
|
|
268
280
|
* @param {string} style.fontFamily Text fontFamily.
|
|
269
281
|
* @param {(number|string)} style.fontSize Text fontSize.
|
|
@@ -272,5 +284,8 @@ export const _approximateTextSizeInternal = {
|
|
|
272
284
|
* @param {number} style.lineHeight Line height coefficient.
|
|
273
285
|
* @returns {number} Approximate text label height.
|
|
274
286
|
*/
|
|
275
|
-
export const approximateTextSize = (
|
|
287
|
+
export const approximateTextSize = (
|
|
288
|
+
text: string | string[],
|
|
289
|
+
style?: TextSizeStyleInterface,
|
|
290
|
+
): { width: number; height: number } =>
|
|
276
291
|
_approximateTextSizeInternal.impl(text, style);
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import { timer, now } from "victory-vendor/d3-timer";
|
|
1
|
+
import { timer, now, Timer as D3Timer } from "victory-vendor/d3-timer";
|
|
2
|
+
|
|
3
|
+
type TimerCallback = (elapsed: number, duration: number) => void;
|
|
2
4
|
|
|
3
5
|
export default class Timer {
|
|
6
|
+
private shouldAnimate: boolean;
|
|
7
|
+
private readonly subscribers: Array<{
|
|
8
|
+
callback: TimerCallback;
|
|
9
|
+
startTime: number;
|
|
10
|
+
duration: number;
|
|
11
|
+
}>;
|
|
12
|
+
private activeSubscriptions: number;
|
|
13
|
+
private timer: D3Timer | null;
|
|
14
|
+
|
|
4
15
|
constructor() {
|
|
5
16
|
this.shouldAnimate = true;
|
|
6
17
|
this.subscribers = [];
|
|
7
|
-
this.loop = this.loop.bind(this);
|
|
8
18
|
this.timer = null;
|
|
9
19
|
this.activeSubscriptions = 0;
|
|
10
20
|
}
|
|
@@ -17,11 +27,11 @@ export default class Timer {
|
|
|
17
27
|
this.shouldAnimate = true;
|
|
18
28
|
}
|
|
19
29
|
|
|
20
|
-
loop() {
|
|
30
|
+
loop = () => {
|
|
21
31
|
this.subscribers.forEach((s) => {
|
|
22
32
|
s.callback(now() - s.startTime, s.duration);
|
|
23
33
|
});
|
|
24
|
-
}
|
|
34
|
+
};
|
|
25
35
|
|
|
26
36
|
start() {
|
|
27
37
|
if (!this.timer) {
|
|
@@ -36,12 +46,12 @@ export default class Timer {
|
|
|
36
46
|
}
|
|
37
47
|
}
|
|
38
48
|
|
|
39
|
-
subscribe(callback, duration) {
|
|
49
|
+
subscribe(callback: TimerCallback, duration: number) {
|
|
40
50
|
duration = this.shouldAnimate ? duration : 0;
|
|
41
51
|
const subscriptionID = this.subscribers.push({
|
|
42
52
|
startTime: now(),
|
|
43
53
|
callback,
|
|
44
|
-
duration
|
|
54
|
+
duration,
|
|
45
55
|
});
|
|
46
56
|
this.activeSubscriptions++;
|
|
47
57
|
this.start();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/* eslint-disable func-style */
|
|
2
1
|
import { assign, defaults, identity, keys } from "lodash";
|
|
3
2
|
import React from "react";
|
|
3
|
+
import { AnimatePropTypeInterface } from "../types/prop-types";
|
|
4
4
|
|
|
5
5
|
function getDatumKey(datum, idx) {
|
|
6
6
|
return (datum.key || idx).toString();
|
|
@@ -47,7 +47,7 @@ function getNodeTransitions(oldData, nextData) {
|
|
|
47
47
|
entering:
|
|
48
48
|
oldDataKeyed && getKeyedDataDifference(nextDataKeyed, oldDataKeyed),
|
|
49
49
|
exiting:
|
|
50
|
-
nextDataKeyed && getKeyedDataDifference(oldDataKeyed, nextDataKeyed)
|
|
50
|
+
nextDataKeyed && getKeyedDataDifference(oldDataKeyed, nextDataKeyed),
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -60,7 +60,7 @@ function getChildData(child) {
|
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* If a parent component has animation enabled, calculate the transitions
|
|
63
|
-
* for any data of any child component that supports data transitions
|
|
63
|
+
* for any data of any child component that supports data transitions.
|
|
64
64
|
* Data transitions are defined as any two datasets where data nodes exist
|
|
65
65
|
* in the first set and not the second, in the second and not the first,
|
|
66
66
|
* or both.
|
|
@@ -96,7 +96,7 @@ export function getInitialTransitionState(oldChildren, nextChildren) {
|
|
|
96
96
|
if (child && child.props && child.props.children && next[idx]) {
|
|
97
97
|
return getTransitionsFromChildren(
|
|
98
98
|
React.Children.toArray(old[idx].props.children),
|
|
99
|
-
React.Children.toArray(next[idx].props.children)
|
|
99
|
+
React.Children.toArray(next[idx].props.children),
|
|
100
100
|
);
|
|
101
101
|
}
|
|
102
102
|
// get Transition entering and exiting nodes
|
|
@@ -106,7 +106,7 @@ export function getInitialTransitionState(oldChildren, nextChildren) {
|
|
|
106
106
|
|
|
107
107
|
const childrenTransitions = getTransitionsFromChildren(
|
|
108
108
|
React.Children.toArray(oldChildren),
|
|
109
|
-
React.Children.toArray(nextChildren)
|
|
109
|
+
React.Children.toArray(nextChildren),
|
|
110
110
|
);
|
|
111
111
|
return {
|
|
112
112
|
nodesWillExit,
|
|
@@ -117,20 +117,26 @@ export function getInitialTransitionState(oldChildren, nextChildren) {
|
|
|
117
117
|
// is a perfect match for the previous data and domain except
|
|
118
118
|
// for new nodes. In this case, we wouldn't want a delay before
|
|
119
119
|
// the new nodes appear.
|
|
120
|
-
nodesShouldEnter: false
|
|
120
|
+
nodesShouldEnter: false,
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
type TransitionProps = {
|
|
125
|
+
data;
|
|
126
|
+
animate?: AnimatePropTypeInterface;
|
|
127
|
+
clipWidth?: number;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
function getInitialChildProps(animate, data): TransitionProps {
|
|
125
131
|
const after =
|
|
126
132
|
animate.onEnter && animate.onEnter.after ? animate.onEnter.after : identity;
|
|
127
133
|
return {
|
|
128
|
-
data: data.map((datum, idx) => assign({}, datum, after(datum, idx, data)))
|
|
134
|
+
data: data.map((datum, idx) => assign({}, datum, after(datum, idx, data))),
|
|
129
135
|
};
|
|
130
136
|
}
|
|
131
137
|
|
|
132
138
|
// eslint-disable-next-line max-params
|
|
133
|
-
function getChildBeforeLoad(animate, child, data, cb) {
|
|
139
|
+
function getChildBeforeLoad(animate, child, data, cb): TransitionProps {
|
|
134
140
|
animate = assign({}, animate, { onEnd: cb });
|
|
135
141
|
if (animate && animate.onLoad && !animate.onLoad.duration) {
|
|
136
142
|
return { animate, data };
|
|
@@ -146,7 +152,7 @@ function getChildBeforeLoad(animate, child, data, cb) {
|
|
|
146
152
|
}
|
|
147
153
|
|
|
148
154
|
// eslint-disable-next-line max-params
|
|
149
|
-
function getChildOnLoad(animate, data, cb) {
|
|
155
|
+
function getChildOnLoad(animate, data, cb): TransitionProps {
|
|
150
156
|
animate = assign({}, animate, { onEnd: cb });
|
|
151
157
|
if (animate && animate.onLoad && !animate.onLoad.duration) {
|
|
152
158
|
return { animate, data };
|
|
@@ -162,7 +168,13 @@ function getChildOnLoad(animate, data, cb) {
|
|
|
162
168
|
}
|
|
163
169
|
|
|
164
170
|
// eslint-disable-next-line max-params, max-len
|
|
165
|
-
function getChildPropsOnExit(
|
|
171
|
+
function getChildPropsOnExit(
|
|
172
|
+
animate,
|
|
173
|
+
child,
|
|
174
|
+
data,
|
|
175
|
+
exitingNodes,
|
|
176
|
+
cb,
|
|
177
|
+
): TransitionProps {
|
|
166
178
|
// Whether or not _this_ child has exiting nodes, we want the exit-
|
|
167
179
|
// transition for all children to have the same duration, delay, etc.
|
|
168
180
|
const onExit = animate && animate.onExit;
|
|
@@ -170,7 +182,7 @@ function getChildPropsOnExit(animate, child, data, exitingNodes, cb) {
|
|
|
170
182
|
|
|
171
183
|
if (exitingNodes) {
|
|
172
184
|
// After the exit transition occurs, trigger the animations for
|
|
173
|
-
// nodes that are neither exiting
|
|
185
|
+
// nodes that are neither exiting nor entering.
|
|
174
186
|
animate.onEnd = cb;
|
|
175
187
|
const before =
|
|
176
188
|
animate.onExit && animate.onExit.before
|
|
@@ -189,7 +201,13 @@ function getChildPropsOnExit(animate, child, data, exitingNodes, cb) {
|
|
|
189
201
|
}
|
|
190
202
|
|
|
191
203
|
// eslint-disable-next-line max-params,max-len
|
|
192
|
-
function getChildPropsBeforeEnter(
|
|
204
|
+
function getChildPropsBeforeEnter(
|
|
205
|
+
animate,
|
|
206
|
+
child,
|
|
207
|
+
data,
|
|
208
|
+
enteringNodes,
|
|
209
|
+
cb,
|
|
210
|
+
): TransitionProps {
|
|
193
211
|
if (enteringNodes) {
|
|
194
212
|
// Perform a normal animation here, except - when it finishes - trigger
|
|
195
213
|
// the transition for entering nodes.
|
|
@@ -213,7 +231,12 @@ function getChildPropsBeforeEnter(animate, child, data, enteringNodes, cb) {
|
|
|
213
231
|
}
|
|
214
232
|
|
|
215
233
|
// eslint-disable-next-line max-params, max-len
|
|
216
|
-
function getChildPropsOnEnter(
|
|
234
|
+
function getChildPropsOnEnter(
|
|
235
|
+
animate,
|
|
236
|
+
data,
|
|
237
|
+
enteringNodes,
|
|
238
|
+
cb,
|
|
239
|
+
): TransitionProps {
|
|
217
240
|
// Whether or not _this_ child has entering nodes, we want the entering-
|
|
218
241
|
// transition for all children to have the same duration, delay, etc.
|
|
219
242
|
const onEnter = animate && animate.onEnter;
|
|
@@ -244,7 +267,7 @@ function getChildPropsOnEnter(animate, data, enteringNodes, cb) {
|
|
|
244
267
|
* and its index in the parent's children array.
|
|
245
268
|
*
|
|
246
269
|
* In particular, this will include an `animate` object that is set appropriately
|
|
247
|
-
* so that each child will be
|
|
270
|
+
* so that each child will be synchronized for each stage of a transition
|
|
248
271
|
* animation. It will also include a transformed `data` object, where each datum
|
|
249
272
|
* is transformed by `animate.onExit` and `animate.onEnter` `before` and `after`
|
|
250
273
|
* functions.
|
|
@@ -270,7 +293,7 @@ export function getTransitionPropsFactory(props, state, setState) {
|
|
|
270
293
|
props.animate && props.animate.onExit && props.animate.onExit.duration,
|
|
271
294
|
load:
|
|
272
295
|
props.animate && props.animate.onLoad && props.animate.onLoad.duration,
|
|
273
|
-
move: props.animate && props.animate.duration
|
|
296
|
+
move: props.animate && props.animate.duration,
|
|
274
297
|
};
|
|
275
298
|
|
|
276
299
|
const onLoad = (child, data, animate) => {
|
|
@@ -325,9 +348,13 @@ export function getTransitionPropsFactory(props, state, setState) {
|
|
|
325
348
|
};
|
|
326
349
|
|
|
327
350
|
// eslint-disable-next-line max-statements, complexity, max-len
|
|
328
|
-
return function getTransitionProps(child, index) {
|
|
351
|
+
return function getTransitionProps(child, index): TransitionProps {
|
|
329
352
|
const data = getChildData(child) || [];
|
|
330
|
-
const animate = defaults(
|
|
353
|
+
const animate: AnimatePropTypeInterface = defaults(
|
|
354
|
+
{},
|
|
355
|
+
props.animate,
|
|
356
|
+
child.props.animate,
|
|
357
|
+
);
|
|
331
358
|
const defaultTransitions = child.props.polar
|
|
332
359
|
? child.type.defaultPolarTransitions || child.type.defaultTransitions
|
|
333
360
|
: child.type.defaultTransitions;
|
|
@@ -335,17 +362,17 @@ export function getTransitionPropsFactory(props, state, setState) {
|
|
|
335
362
|
animate.onExit = defaults(
|
|
336
363
|
{},
|
|
337
364
|
animate.onExit,
|
|
338
|
-
defaultTransitions && defaultTransitions.onExit
|
|
365
|
+
defaultTransitions && defaultTransitions.onExit,
|
|
339
366
|
);
|
|
340
367
|
animate.onEnter = defaults(
|
|
341
368
|
{},
|
|
342
369
|
animate.onEnter,
|
|
343
|
-
defaultTransitions && defaultTransitions.onEnter
|
|
370
|
+
defaultTransitions && defaultTransitions.onEnter,
|
|
344
371
|
);
|
|
345
372
|
animate.onLoad = defaults(
|
|
346
373
|
{},
|
|
347
374
|
animate.onLoad,
|
|
348
|
-
defaultTransitions && defaultTransitions.onLoad
|
|
375
|
+
defaultTransitions && defaultTransitions.onLoad,
|
|
349
376
|
);
|
|
350
377
|
|
|
351
378
|
const childTransitions =
|
|
@@ -378,13 +405,13 @@ export function getTransitionPropsFactory(props, state, setState) {
|
|
|
378
405
|
? transitionDurations.move
|
|
379
406
|
: child.props.animate && child.props.animate.duration;
|
|
380
407
|
const animation = {
|
|
381
|
-
duration: nodesShouldEnter && enteringNodes ? enter : move
|
|
408
|
+
duration: nodesShouldEnter && enteringNodes ? enter : move,
|
|
382
409
|
};
|
|
383
410
|
return onEnter(
|
|
384
411
|
enteringNodes,
|
|
385
412
|
child,
|
|
386
413
|
data,
|
|
387
|
-
assign({}, animate, animation)
|
|
414
|
+
assign({}, animate, animation),
|
|
388
415
|
);
|
|
389
416
|
} else if (!state && animate && animate.onExit) {
|
|
390
417
|
// This is the initial render, and nodes may enter when props change. Because
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ForAxes,
|
|
3
|
+
AxisType,
|
|
4
|
+
Tuple,
|
|
5
|
+
Datum,
|
|
6
|
+
DatumValue,
|
|
7
|
+
} from "../types/prop-types";
|
|
8
|
+
|
|
9
|
+
export function hasValueForAxis<T = unknown>(
|
|
10
|
+
value: unknown | ForAxes<T>,
|
|
11
|
+
axis: AxisType,
|
|
12
|
+
): value is ForAxes<T> {
|
|
13
|
+
if (typeof value === "object" && value !== null) {
|
|
14
|
+
return axis in value;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function isTuple<T = unknown>(value: unknown): value is Tuple<T> {
|
|
20
|
+
return Array.isArray(value) && value.length === 2;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getValueForAxis<T = unknown>(
|
|
24
|
+
value: T | ForAxes<T> | undefined,
|
|
25
|
+
axis: AxisType,
|
|
26
|
+
): T | undefined {
|
|
27
|
+
if (hasValueForAxis<T>(value, axis)) {
|
|
28
|
+
return value[axis] as T;
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
34
|
+
export function isFunction<T = Function>(func?: unknown): func is T {
|
|
35
|
+
return typeof func === "function";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function isDate(value: unknown): value is Date {
|
|
39
|
+
return value instanceof Date;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function isKeyValueObject(
|
|
43
|
+
datum: Datum,
|
|
44
|
+
): datum is { [key: string]: DatumValue } {
|
|
45
|
+
return (
|
|
46
|
+
typeof datum === "object" &&
|
|
47
|
+
!Array.isArray(datum) &&
|
|
48
|
+
!(datum instanceof Date)
|
|
49
|
+
);
|
|
50
|
+
}
|
|
@@ -2,15 +2,17 @@ import * as React from "react";
|
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
USER_PROPS_SAFELIST is to contain any string deemed safe for user props.
|
|
5
|
-
The startsWidth array will contain the start of any accepted user-prop that
|
|
5
|
+
The startsWidth array will contain the start of any accepted user-prop that
|
|
6
6
|
starts with these characters.
|
|
7
7
|
The exactMatch will contain a list of exact prop names that are accepted.
|
|
8
8
|
*/
|
|
9
9
|
const USER_PROPS_SAFELIST = {
|
|
10
|
-
startsWith: ["data-", "aria-"],
|
|
11
|
-
exactMatch: []
|
|
10
|
+
startsWith: ["data-", "aria-"] as const,
|
|
11
|
+
exactMatch: [] as string[],
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
+
type SafeAttribute = `data-${string}` | `aria-${string}`;
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
* doesPropStartWith: Function that takes a prop's key and runs it against all
|
|
16
18
|
* options in the USER_PROPS_SAFELIST and checks to see if it starts with any
|
|
@@ -19,7 +21,7 @@ const USER_PROPS_SAFELIST = {
|
|
|
19
21
|
* @returns {Boolean}: returns true if the key starts with an option or false if
|
|
20
22
|
* otherwise
|
|
21
23
|
*/
|
|
22
|
-
const doesPropStartWith = (key) => {
|
|
24
|
+
const doesPropStartWith = (key: string): key is SafeAttribute => {
|
|
23
25
|
let startsWith = false;
|
|
24
26
|
|
|
25
27
|
USER_PROPS_SAFELIST.startsWith.forEach((starterString) => {
|
|
@@ -38,14 +40,15 @@ const doesPropStartWith = (key) => {
|
|
|
38
40
|
* @returns {Boolean}: return true if whitelist contains that key, otherwise
|
|
39
41
|
* returns false.
|
|
40
42
|
*/
|
|
41
|
-
const isExactMatch = (key) =>
|
|
43
|
+
const isExactMatch = (key: string): key is SafeAttribute =>
|
|
44
|
+
USER_PROPS_SAFELIST.exactMatch.includes(key);
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
47
|
* testIfSafeProp: tests prop's key against both startsWith and exactMatch values
|
|
45
48
|
* @param {String} key: prop key to be tested against the whitelist
|
|
46
49
|
* @returns {Boolean}: returns true if found in whitelist, otherwise returns false
|
|
47
50
|
*/
|
|
48
|
-
const testIfSafeProp = (key) => {
|
|
51
|
+
const testIfSafeProp = (key: string): key is SafeAttribute => {
|
|
49
52
|
if (doesPropStartWith(key) || isExactMatch(key)) return true;
|
|
50
53
|
return false;
|
|
51
54
|
};
|
|
@@ -71,24 +74,26 @@ const getValue = (value, props) => {
|
|
|
71
74
|
* @param {Object} props: props to be filtered against USER_PROPS_SAFELIST
|
|
72
75
|
* @returns {Object}: object containing remaining acceptable props
|
|
73
76
|
*/
|
|
74
|
-
export const getSafeUserProps = (
|
|
77
|
+
export const getSafeUserProps = <T>(
|
|
78
|
+
props: T,
|
|
79
|
+
): Record<SafeAttribute, string> => {
|
|
75
80
|
const propsToFilter = { ...props };
|
|
76
81
|
return Object.fromEntries(
|
|
77
82
|
Object.entries(propsToFilter)
|
|
78
83
|
.filter(([key]) => testIfSafeProp(key))
|
|
79
84
|
.map(([key, value]) => {
|
|
80
85
|
return [key, getValue(value, props)];
|
|
81
|
-
})
|
|
86
|
+
}),
|
|
82
87
|
);
|
|
83
88
|
};
|
|
84
89
|
|
|
85
90
|
/**
|
|
86
91
|
* Wraps a component and adds safe user props
|
|
87
92
|
*
|
|
88
|
-
* @param {
|
|
93
|
+
* @param {ReactElement} component: parent component
|
|
89
94
|
* @param {Object} props: props to be filtered
|
|
90
|
-
* @returns {
|
|
95
|
+
* @returns {ReactElement} modified component
|
|
91
96
|
*/
|
|
92
|
-
export const withSafeUserProps = (component, props) => {
|
|
97
|
+
export const withSafeUserProps = (component: React.ReactElement, props) => {
|
|
93
98
|
return React.cloneElement(component, getSafeUserProps(props));
|
|
94
99
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
VictoryProvider,
|
|
4
|
+
VictoryProviderProps,
|
|
5
|
+
VictoryContainer,
|
|
6
|
+
} from "victory-core";
|
|
7
|
+
import { VictoryCommonProps } from "./common-props";
|
|
8
|
+
|
|
9
|
+
const defaultProviderProps = {
|
|
10
|
+
width: 450,
|
|
11
|
+
height: 300,
|
|
12
|
+
padding: 50,
|
|
13
|
+
data: [],
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export function withContainer<Props extends VictoryCommonProps>(
|
|
17
|
+
WrappedComponent: (props: Props) => React.ReactElement,
|
|
18
|
+
initialProviderProps: Partial<VictoryProviderProps> = {},
|
|
19
|
+
) {
|
|
20
|
+
return (props: Props) => {
|
|
21
|
+
const providerProps = {
|
|
22
|
+
...defaultProviderProps,
|
|
23
|
+
...initialProviderProps,
|
|
24
|
+
...props,
|
|
25
|
+
};
|
|
26
|
+
const { standalone = true, containerComponent = <VictoryContainer /> } =
|
|
27
|
+
props;
|
|
28
|
+
if (standalone) {
|
|
29
|
+
return (
|
|
30
|
+
<VictoryProvider {...providerProps}>
|
|
31
|
+
{React.cloneElement(
|
|
32
|
+
containerComponent,
|
|
33
|
+
providerProps,
|
|
34
|
+
<WrappedComponent {...props} />,
|
|
35
|
+
)}
|
|
36
|
+
</VictoryProvider>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return <WrappedComponent {...props} />;
|
|
40
|
+
};
|
|
41
|
+
}
|