@pagopa/io-app-design-system 4.5.1 → 4.5.3
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/lib/commonjs/components/accordion/AccordionItem.js +1 -1
- package/lib/commonjs/components/accordion/AccordionItem.js.map +1 -1
- package/lib/commonjs/components/buttons/ButtonLink.js +25 -25
- package/lib/commonjs/components/buttons/ButtonLink.js.map +1 -1
- package/lib/commonjs/components/buttons/ButtonOutline.js +41 -97
- package/lib/commonjs/components/buttons/ButtonOutline.js.map +1 -1
- package/lib/commonjs/components/buttons/ButtonSolid.js +70 -63
- package/lib/commonjs/components/buttons/ButtonSolid.js.map +1 -1
- package/lib/commonjs/components/buttons/IconButton.js +29 -27
- package/lib/commonjs/components/buttons/IconButton.js.map +1 -1
- package/lib/commonjs/components/buttons/IconButtonSolid.js +27 -27
- package/lib/commonjs/components/buttons/IconButtonSolid.js.map +1 -1
- package/lib/commonjs/components/buttons/__test__/__snapshots__/button.test.tsx.snap +5 -7
- package/lib/commonjs/components/icons/svg/IconProductIOAppBlueBg.js +8 -20
- package/lib/commonjs/components/icons/svg/IconProductIOAppBlueBg.js.map +1 -1
- package/lib/commonjs/components/icons/svg/originals/IconProductIOAppBlueBg.svg +12 -9
- package/lib/commonjs/components/layout/HeaderFirstLevel.js +2 -2
- package/lib/commonjs/components/layout/HeaderFirstLevel.js.map +1 -1
- package/lib/commonjs/components/layout/HeaderSecondLevel.js +24 -14
- package/lib/commonjs/components/layout/HeaderSecondLevel.js.map +1 -1
- package/lib/commonjs/components/listitems/ListItemInfo.js +1 -1
- package/lib/commonjs/components/listitems/ListItemInfo.js.map +1 -1
- package/lib/commonjs/components/listitems/ListItemInfoCopy.js +1 -1
- package/lib/commonjs/components/listitems/ListItemInfoCopy.js.map +1 -1
- package/lib/commonjs/components/listitems/ListItemNav.js +4 -3
- package/lib/commonjs/components/listitems/ListItemNav.js.map +1 -1
- package/lib/commonjs/core/IOColors.js +17 -3
- package/lib/commonjs/core/IOColors.js.map +1 -1
- package/lib/module/components/accordion/AccordionItem.js +1 -1
- package/lib/module/components/accordion/AccordionItem.js.map +1 -1
- package/lib/module/components/buttons/ButtonLink.js +26 -26
- package/lib/module/components/buttons/ButtonLink.js.map +1 -1
- package/lib/module/components/buttons/ButtonOutline.js +42 -98
- package/lib/module/components/buttons/ButtonOutline.js.map +1 -1
- package/lib/module/components/buttons/ButtonSolid.js +73 -66
- package/lib/module/components/buttons/ButtonSolid.js.map +1 -1
- package/lib/module/components/buttons/IconButton.js +30 -28
- package/lib/module/components/buttons/IconButton.js.map +1 -1
- package/lib/module/components/buttons/IconButtonSolid.js +28 -28
- package/lib/module/components/buttons/IconButtonSolid.js.map +1 -1
- package/lib/module/components/buttons/__test__/__snapshots__/button.test.tsx.snap +5 -7
- package/lib/module/components/icons/svg/IconProductIOAppBlueBg.js +9 -21
- package/lib/module/components/icons/svg/IconProductIOAppBlueBg.js.map +1 -1
- package/lib/module/components/icons/svg/originals/IconProductIOAppBlueBg.svg +12 -9
- package/lib/module/components/layout/HeaderFirstLevel.js +2 -2
- package/lib/module/components/layout/HeaderFirstLevel.js.map +1 -1
- package/lib/module/components/layout/HeaderSecondLevel.js +26 -16
- package/lib/module/components/layout/HeaderSecondLevel.js.map +1 -1
- package/lib/module/components/listitems/ListItemInfo.js +1 -1
- package/lib/module/components/listitems/ListItemInfo.js.map +1 -1
- package/lib/module/components/listitems/ListItemInfoCopy.js +1 -1
- package/lib/module/components/listitems/ListItemInfoCopy.js.map +1 -1
- package/lib/module/components/listitems/ListItemNav.js +4 -3
- package/lib/module/components/listitems/ListItemNav.js.map +1 -1
- package/lib/module/core/IOColors.js +17 -3
- package/lib/module/core/IOColors.js.map +1 -1
- package/lib/typescript/components/buttons/ButtonLink.d.ts +1 -1
- package/lib/typescript/components/buttons/ButtonLink.d.ts.map +1 -1
- package/lib/typescript/components/buttons/ButtonOutline.d.ts +2 -2
- package/lib/typescript/components/buttons/ButtonOutline.d.ts.map +1 -1
- package/lib/typescript/components/buttons/ButtonSolid.d.ts +1 -1
- package/lib/typescript/components/buttons/ButtonSolid.d.ts.map +1 -1
- package/lib/typescript/components/buttons/IconButton.d.ts +2 -1
- package/lib/typescript/components/buttons/IconButton.d.ts.map +1 -1
- package/lib/typescript/components/buttons/IconButtonSolid.d.ts.map +1 -1
- package/lib/typescript/components/icons/svg/IconProductIOAppBlueBg.d.ts.map +1 -1
- package/lib/typescript/components/layout/HeaderFirstLevel.d.ts +2 -2
- package/lib/typescript/components/layout/HeaderFirstLevel.d.ts.map +1 -1
- package/lib/typescript/components/layout/HeaderSecondLevel.d.ts +1 -1
- package/lib/typescript/components/layout/HeaderSecondLevel.d.ts.map +1 -1
- package/lib/typescript/components/listitems/ListItemNav.d.ts.map +1 -1
- package/lib/typescript/core/IOColors.d.ts +1 -1
- package/lib/typescript/core/IOColors.d.ts.map +1 -1
- package/lib/typescript/core/IOStyles.d.ts +2 -2
- package/lib/typescript/utils/fonts.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/accordion/AccordionItem.tsx +1 -1
- package/src/components/buttons/ButtonLink.tsx +37 -30
- package/src/components/buttons/ButtonOutline.tsx +51 -108
- package/src/components/buttons/ButtonSolid.tsx +94 -78
- package/src/components/buttons/IconButton.tsx +45 -29
- package/src/components/buttons/IconButtonSolid.tsx +35 -31
- package/src/components/buttons/__test__/__snapshots__/button.test.tsx.snap +5 -7
- package/src/components/icons/svg/IconProductIOAppBlueBg.tsx +12 -13
- package/src/components/icons/svg/originals/IconProductIOAppBlueBg.svg +12 -9
- package/src/components/layout/HeaderFirstLevel.tsx +4 -4
- package/src/components/layout/HeaderSecondLevel.tsx +43 -23
- package/src/components/listitems/ListItemInfo.tsx +1 -1
- package/src/components/listitems/ListItemInfoCopy.tsx +1 -1
- package/src/components/listitems/ListItemNav.tsx +5 -4
- package/src/core/IOColors.ts +25 -4
- package/lib/commonjs/components/layout/BlockButtons.js +0 -85
- package/lib/commonjs/components/layout/BlockButtons.js.map +0 -1
- package/lib/module/components/layout/BlockButtons.js +0 -76
- package/lib/module/components/layout/BlockButtons.js.map +0 -1
- package/lib/typescript/components/layout/BlockButtons.d.ts +0 -54
- package/lib/typescript/components/layout/BlockButtons.d.ts.map +0 -1
- package/src/components/layout/BlockButtons.tsx +0 -143
|
@@ -1,40 +1,22 @@
|
|
|
1
1
|
import React, { forwardRef, useMemo } from "react";
|
|
2
2
|
import { Pressable } from "react-native";
|
|
3
3
|
import Animated, { interpolateColor, useAnimatedStyle, useReducedMotion } from "react-native-reanimated";
|
|
4
|
-
import { IOButtonStyles, IOColors, hexToRgba, useIOExperimentalDesign } from "../../core";
|
|
4
|
+
import { IOButtonStyles, IOColors, hexToRgba, useIOExperimentalDesign, useIOTheme } from "../../core";
|
|
5
5
|
import { useScaleAnimation } from "../../hooks";
|
|
6
6
|
import { AnimatedIcon, IconClassComponent } from "../icons";
|
|
7
7
|
import { IOText, buttonTextFontSize, buttonTextLineHeight } from "../typography";
|
|
8
|
-
const mapColorStates = {
|
|
9
|
-
// Primary button
|
|
10
|
-
primary: {
|
|
11
|
-
label: {
|
|
12
|
-
default: IOColors["blueIO-500"],
|
|
13
|
-
pressed: IOColors["blueIO-600"],
|
|
14
|
-
disabled: IOColors["grey-700"]
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
contrast: {
|
|
18
|
-
label: {
|
|
19
|
-
default: IOColors.white,
|
|
20
|
-
pressed: hexToRgba(IOColors.white, 0.85),
|
|
21
|
-
disabled: hexToRgba(IOColors.white, 0.5)
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
8
|
// TODO: Remove this when legacy look is deprecated https://pagopa.atlassian.net/browse/IOPLT-153
|
|
27
9
|
const mapLegacyColorStates = {
|
|
28
10
|
// Primary button
|
|
29
11
|
primary: {
|
|
30
|
-
|
|
12
|
+
foreground: {
|
|
31
13
|
default: IOColors["blue-500"],
|
|
32
14
|
pressed: IOColors["blue-600"],
|
|
33
15
|
disabled: IOColors["grey-700"]
|
|
34
16
|
}
|
|
35
17
|
},
|
|
36
18
|
contrast: {
|
|
37
|
-
|
|
19
|
+
foreground: {
|
|
38
20
|
default: IOColors.white,
|
|
39
21
|
pressed: hexToRgba(IOColors.white, 0.85),
|
|
40
22
|
disabled: hexToRgba(IOColors.white, 0.5)
|
|
@@ -57,6 +39,7 @@ export const ButtonLink = /*#__PURE__*/forwardRef(({
|
|
|
57
39
|
testID
|
|
58
40
|
}, ref) => {
|
|
59
41
|
var _colorMap$color, _colorMap$color2, _colorMap$color3;
|
|
42
|
+
const theme = useIOTheme();
|
|
60
43
|
const {
|
|
61
44
|
isExperimental
|
|
62
45
|
} = useIOExperimentalDesign();
|
|
@@ -67,10 +50,27 @@ export const ButtonLink = /*#__PURE__*/forwardRef(({
|
|
|
67
50
|
scaleAnimatedStyle
|
|
68
51
|
} = useScaleAnimation();
|
|
69
52
|
const reducedMotion = useReducedMotion();
|
|
70
|
-
const
|
|
53
|
+
const mapColorStates = useMemo(() => ({
|
|
54
|
+
// Primary button
|
|
55
|
+
primary: {
|
|
56
|
+
foreground: {
|
|
57
|
+
default: IOColors[theme["interactiveElem-default"]],
|
|
58
|
+
pressed: IOColors[theme["interactiveElem-pressed"]],
|
|
59
|
+
disabled: hexToRgba(IOColors[theme["interactiveElem-default"]], 0.75)
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
contrast: {
|
|
63
|
+
foreground: {
|
|
64
|
+
default: IOColors.white,
|
|
65
|
+
pressed: hexToRgba(IOColors.white, 0.85),
|
|
66
|
+
disabled: hexToRgba(IOColors.white, 0.5)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}), [theme]);
|
|
70
|
+
const colorMap = useMemo(() => isExperimental ? mapColorStates : mapLegacyColorStates, [isExperimental, mapColorStates]);
|
|
71
71
|
const AnimatedIOText = Animated.createAnimatedComponent(IOText);
|
|
72
72
|
const pressedColorAnimationStyle = useAnimatedStyle(() => ({
|
|
73
|
-
color: interpolateColor(progress.value, [0, 1], [colorMap[color].
|
|
73
|
+
color: interpolateColor(progress.value, [0, 1], [colorMap[color].foreground.default, colorMap[color].foreground.pressed])
|
|
74
74
|
}));
|
|
75
75
|
const AnimatedIconClassComponent = Animated.createAnimatedComponent(IconClassComponent);
|
|
76
76
|
|
|
@@ -116,12 +116,12 @@ export const ButtonLink = /*#__PURE__*/forwardRef(({
|
|
|
116
116
|
allowFontScaling: true,
|
|
117
117
|
name: icon,
|
|
118
118
|
animatedProps: pressedColorAnimationStyle,
|
|
119
|
-
color: (_colorMap$color = colorMap[color]) === null || _colorMap$color === void 0 || (_colorMap$color = _colorMap$color.
|
|
119
|
+
color: (_colorMap$color = colorMap[color]) === null || _colorMap$color === void 0 || (_colorMap$color = _colorMap$color.foreground) === null || _colorMap$color === void 0 ? void 0 : _colorMap$color.default,
|
|
120
120
|
size: iconSize
|
|
121
121
|
}) : /*#__PURE__*/React.createElement(AnimatedIcon, {
|
|
122
122
|
allowFontScaling: true,
|
|
123
123
|
name: icon,
|
|
124
|
-
color: (_colorMap$color2 = colorMap[color]) === null || _colorMap$color2 === void 0 || (_colorMap$color2 = _colorMap$color2.
|
|
124
|
+
color: (_colorMap$color2 = colorMap[color]) === null || _colorMap$color2 === void 0 || (_colorMap$color2 = _colorMap$color2.foreground) === null || _colorMap$color2 === void 0 ? void 0 : _colorMap$color2.disabled,
|
|
125
125
|
size: iconSize
|
|
126
126
|
})), /*#__PURE__*/React.createElement(AnimatedIOText, {
|
|
127
127
|
accessible: false,
|
|
@@ -132,7 +132,7 @@ export const ButtonLink = /*#__PURE__*/forwardRef(({
|
|
|
132
132
|
size: buttonTextFontSize,
|
|
133
133
|
lineHeight: buttonTextLineHeight,
|
|
134
134
|
style: [disabled ? {
|
|
135
|
-
color: (_colorMap$color3 = colorMap[color]) === null || _colorMap$color3 === void 0 || (_colorMap$color3 = _colorMap$color3.
|
|
135
|
+
color: (_colorMap$color3 = colorMap[color]) === null || _colorMap$color3 === void 0 || (_colorMap$color3 = _colorMap$color3.foreground) === null || _colorMap$color3 === void 0 ? void 0 : _colorMap$color3.disabled
|
|
136
136
|
} : {
|
|
137
137
|
...pressedColorAnimationStyle
|
|
138
138
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useMemo","Pressable","Animated","interpolateColor","useAnimatedStyle","useReducedMotion","IOButtonStyles","IOColors","hexToRgba","useIOExperimentalDesign","useScaleAnimation","AnimatedIcon","IconClassComponent","IOText","buttonTextFontSize","buttonTextLineHeight","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useMemo","Pressable","Animated","interpolateColor","useAnimatedStyle","useReducedMotion","IOButtonStyles","IOColors","hexToRgba","useIOExperimentalDesign","useIOTheme","useScaleAnimation","AnimatedIcon","IconClassComponent","IOText","buttonTextFontSize","buttonTextLineHeight","mapLegacyColorStates","primary","foreground","default","pressed","disabled","contrast","white","DISABLED_OPACITY","ICON_MARGIN","ButtonLink","color","label","icon","iconPosition","onPress","accessibilityLabel","accessibilityHint","numberOfLines","textAlign","testID","ref","_colorMap$color","_colorMap$color2","_colorMap$color3","theme","isExperimental","progress","onPressIn","onPressOut","scaleAnimatedStyle","reducedMotion","mapColorStates","colorMap","AnimatedIOText","createAnimatedComponent","pressedColorAnimationStyle","value","AnimatedIconClassComponent","iconSize","iconMargin","createElement","accessibilityRole","accessibilityState","onTouchEnd","accessible","hitSlop","top","right","bottom","left","style","dimensionsDefault","View","buttonLink","flexDirection","columnGap","opacity","allowFontScaling","name","animatedProps","size","accessibilityElementsHidden","importantForAccessibility","font","weight","lineHeight","ellipsizeMode"],"sourceRoot":"../../../../src","sources":["components/buttons/ButtonLink.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAClD,SAEEC,SAAS,QAGJ,cAAc;AACrB,OAAOC,QAAQ,IACbC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,QACX,yBAAyB;AAChC,SACEC,cAAc,EACdC,QAAQ,EAERC,SAAS,EACTC,uBAAuB,EACvBC,UAAU,QACL,YAAY;AACnB,SAASC,iBAAiB,QAAQ,aAAa;AAE/C,SACEC,YAAY,EAGZC,kBAAkB,QACb,UAAU;AACjB,SACEC,MAAM,EACNC,kBAAkB,EAClBC,oBAAoB,QACf,eAAe;AA4BtB;AACA,MAAMC,oBAGL,GAAG;EACF;EACAC,OAAO,EAAE;IACPC,UAAU,EAAE;MACVC,OAAO,EAAEb,QAAQ,CAAC,UAAU,CAAC;MAC7Bc,OAAO,EAAEd,QAAQ,CAAC,UAAU,CAAC;MAC7Be,QAAQ,EAAEf,QAAQ,CAAC,UAAU;IAC/B;EACF,CAAC;EACDgB,QAAQ,EAAE;IACRJ,UAAU,EAAE;MACVC,OAAO,EAAEb,QAAQ,CAACiB,KAAK;MACvBH,OAAO,EAAEb,SAAS,CAACD,QAAQ,CAACiB,KAAK,EAAE,IAAI,CAAC;MACxCF,QAAQ,EAAEd,SAAS,CAACD,QAAQ,CAACiB,KAAK,EAAE,GAAG;IACzC;EACF;AACF,CAAC;AAED,MAAMC,gBAAgB,GAAG,GAAG;AAC5B,MAAMC,WAAW,GAAG,CAAC;AAErB,OAAO,MAAMC,UAAU,gBAAG5B,UAAU,CAClC,CACE;EACE6B,KAAK,GAAG,SAAS;EACjBC,KAAK;EACLP,QAAQ,GAAG,KAAK;EAChBQ,IAAI;EACJC,YAAY,GAAG,OAAO;EACtBC,OAAO;EACPC,kBAAkB;EAClBC,iBAAiB;EACjBC,aAAa,GAAG,CAAC;EACjBC,SAAS,GAAG,MAAM;EAClBC;AACF,CAAC,EACDC,GAAG,KACA;EAAA,IAAAC,eAAA,EAAAC,gBAAA,EAAAC,gBAAA;EACH,MAAMC,KAAK,GAAGhC,UAAU,CAAC,CAAC;EAC1B,MAAM;IAAEiC;EAAe,CAAC,GAAGlC,uBAAuB,CAAC,CAAC;EACpD,MAAM;IAAEmC,QAAQ;IAAEC,SAAS;IAAEC,UAAU;IAAEC;EAAmB,CAAC,GAC3DpC,iBAAiB,CAAC,CAAC;EACrB,MAAMqC,aAAa,GAAG3C,gBAAgB,CAAC,CAAC;EAExC,MAAM4C,cAAc,GAAGjD,OAAO,CAG5B,OAAO;IACL;IACAkB,OAAO,EAAE;MACPC,UAAU,EAAE;QACVC,OAAO,EAAEb,QAAQ,CAACmC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACnDrB,OAAO,EAAEd,QAAQ,CAACmC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACnDpB,QAAQ,EAAEd,SAAS,CACjBD,QAAQ,CAACmC,KAAK,CAAC,yBAAyB,CAAC,CAAC,EAC1C,IACF;MACF;IACF,CAAC;IACDnB,QAAQ,EAAE;MACRJ,UAAU,EAAE;QACVC,OAAO,EAAEb,QAAQ,CAACiB,KAAK;QACvBH,OAAO,EAAEb,SAAS,CAACD,QAAQ,CAACiB,KAAK,EAAE,IAAI,CAAC;QACxCF,QAAQ,EAAEd,SAAS,CAACD,QAAQ,CAACiB,KAAK,EAAE,GAAG;MACzC;IACF;EACF,CAAC,CAAC,EACF,CAACkB,KAAK,CACR,CAAC;EAED,MAAMQ,QAAQ,GAAGlD,OAAO,CACtB,MAAO2C,cAAc,GAAGM,cAAc,GAAGhC,oBAAqB,EAC9D,CAAC0B,cAAc,EAAEM,cAAc,CACjC,CAAC;EAED,MAAME,cAAc,GAAGjD,QAAQ,CAACkD,uBAAuB,CAACtC,MAAM,CAAC;EAE/D,MAAMuC,0BAA0B,GAAGjD,gBAAgB,CAAC,OAAO;IACzDwB,KAAK,EAAEzB,gBAAgB,CACrByC,QAAQ,CAACU,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAACJ,QAAQ,CAACtB,KAAK,CAAC,CAACT,UAAU,CAACC,OAAO,EAAE8B,QAAQ,CAACtB,KAAK,CAAC,CAACT,UAAU,CAACE,OAAO,CACzE;EACF,CAAC,CAAC,CAAC;EAEH,MAAMkC,0BAA0B,GAC9BrD,QAAQ,CAACkD,uBAAuB,CAACvC,kBAAkB,CAAC;;EAEtD;EACA,MAAM2C,QAAyB,GAAG,EAAE;EACpC,MAAMC,UAA0B,GAAG,CAAC;EAEpC,oBACE3D,KAAA,CAAA4D,aAAA,CAACzD,SAAS;IACRqC,GAAG,EAAEA,GAAI;IACTL,kBAAkB,EAAEA,kBAAkB,IAAIJ,KAAM;IAChDK,iBAAiB,EAAEA,iBAAkB;IACrCyB,iBAAiB,EAAE,QAAS;IAC5BC,kBAAkB,EAAE;MAAEtC;IAAS,CAAE;IACjCe,MAAM,EAAEA,MAAO;IACfL,OAAO,EAAEA,OAAQ;IACjBa,SAAS,EAAEA,SAAU;IACrBC,UAAU,EAAEA,UAAW;IACvBe,UAAU,EAAEf,UAAW;IACvBgB,UAAU,EAAE,IAAK;IACjBxC,QAAQ,EAAEA,QAAS;IACnByC,OAAO,EAAE;MAAEC,GAAG,EAAE,EAAE;MAAEC,KAAK,EAAE,EAAE;MAAEC,MAAM,EAAE,EAAE;MAAEC,IAAI,EAAE;IAAG,CAAE;IACtDC,KAAK,EAAE9D,cAAc,CAAC+D;EAAkB,gBAExCvE,KAAA,CAAA4D,aAAA,CAACxD,QAAQ,CAACoE,IAAI;IACZF,KAAK,EAAE,CACL9D,cAAc,CAACiE,UAAU,EACzBxC,YAAY,KAAK,KAAK,IAAI;MAAEyC,aAAa,EAAE;IAAc,CAAC,EAC1D;MAAEC,SAAS,EAAEhB;IAAW,CAAC,EACzBnC,QAAQ,GAAG;MAAEoD,OAAO,EAAEjD;IAAiB,CAAC,GAAG,CAAC,CAAC,EAC7C;MAAEgD,SAAS,EAAE/C;IAAY,CAAC;IAC1B;AACZ;IACY,CAACJ,QAAQ,IAAI,CAAC0B,aAAa,IAAID,kBAAkB;EACjD,GAEDjB,IAAI,KACF,CAACR,QAAQ,gBACRxB,KAAA,CAAA4D,aAAA,CAACH,0BAA0B;IACzBoB,gBAAgB;IAChBC,IAAI,EAAE9C,IAAK;IACX+C,aAAa,EAAExB,0BAA2B;IAC1CzB,KAAK,GAAAW,eAAA,GAAEW,QAAQ,CAACtB,KAAK,CAAC,cAAAW,eAAA,gBAAAA,eAAA,GAAfA,eAAA,CAAiBpB,UAAU,cAAAoB,eAAA,uBAA3BA,eAAA,CAA6BnB,OAAQ;IAC5C0D,IAAI,EAAEtB;EAAS,CAChB,CAAC,gBAEF1D,KAAA,CAAA4D,aAAA,CAAC9C,YAAY;IACX+D,gBAAgB;IAChBC,IAAI,EAAE9C,IAAK;IACXF,KAAK,GAAAY,gBAAA,GAAEU,QAAQ,CAACtB,KAAK,CAAC,cAAAY,gBAAA,gBAAAA,gBAAA,GAAfA,gBAAA,CAAiBrB,UAAU,cAAAqB,gBAAA,uBAA3BA,gBAAA,CAA6BlB,QAAS;IAC7CwD,IAAI,EAAEtB;EAAS,CAChB,CACF,CAAC,eACJ1D,KAAA,CAAA4D,aAAA,CAACP,cAAc;IACbW,UAAU,EAAE,KAAM;IAClBiB,2BAA2B;IAC3BC,yBAAyB,EAAC,qBAAqB;IAC/CC,IAAI,EAAEtC,cAAc,GAAG,UAAU,GAAG,kBAAmB;IACvDuC,MAAM,EAAE,UAAW;IACnBJ,IAAI,EAAE/D,kBAAmB;IACzBoE,UAAU,EAAEnE,oBAAqB;IACjCoD,KAAK,EAAE,CACL9C,QAAQ,GACJ;MAAEM,KAAK,GAAAa,gBAAA,GAAES,QAAQ,CAACtB,KAAK,CAAC,cAAAa,gBAAA,gBAAAA,gBAAA,GAAfA,gBAAA,CAAiBtB,UAAU,cAAAsB,gBAAA,uBAA3BA,gBAAA,CAA6BnB;IAAS,CAAC,GAChD;MAAE,GAAG+B;IAA2B,CAAC,EACrC;MAAEjB;IAAU,CAAC,CACb;IACFD,aAAa,EAAEA,aAAc;IAC7BiD,aAAa,EAAC;EAAM,GAEnBvD,KACa,CACH,CACN,CAAC;AAEhB,CACF,CAAC;AAED,eAAeF,UAAU"}
|
|
@@ -1,90 +1,28 @@
|
|
|
1
1
|
import React, { forwardRef } from "react";
|
|
2
2
|
import { Pressable, StyleSheet } from "react-native";
|
|
3
3
|
import Animated, { interpolateColor, useAnimatedProps, useAnimatedStyle, useReducedMotion } from "react-native-reanimated";
|
|
4
|
-
import { IOButtonLegacyStyles, IOButtonStyles, IOColors, hexToRgba, useIOExperimentalDesign } from "../../core/";
|
|
4
|
+
import { IOButtonLegacyStyles, IOButtonStyles, IOColors, hexToRgba, useIOExperimentalDesign, useIOTheme } from "../../core/";
|
|
5
5
|
import { useScaleAnimation } from "../../hooks";
|
|
6
6
|
import { AnimatedIcon, IconClassComponent } from "../icons";
|
|
7
7
|
import { IOText, buttonTextFontSize } from "../typography";
|
|
8
|
-
const mapColorStates = {
|
|
9
|
-
// Primary button
|
|
10
|
-
primary: {
|
|
11
|
-
border: {
|
|
12
|
-
default: IOColors["blueIO-500"],
|
|
13
|
-
pressed: IOColors["blueIO-600"],
|
|
14
|
-
disabled: IOColors["grey-200"]
|
|
15
|
-
},
|
|
16
|
-
background: {
|
|
17
|
-
default: hexToRgba(IOColors["blueIO-50"], 0),
|
|
18
|
-
pressed: hexToRgba(IOColors["blueIO-50"], 1),
|
|
19
|
-
disabled: "transparent"
|
|
20
|
-
},
|
|
21
|
-
label: {
|
|
22
|
-
default: IOColors["blueIO-500"],
|
|
23
|
-
pressed: IOColors["blueIO-600"],
|
|
24
|
-
disabled: IOColors["grey-700"]
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
// Contrast button
|
|
28
|
-
contrast: {
|
|
29
|
-
border: {
|
|
30
|
-
default: IOColors.white,
|
|
31
|
-
pressed: IOColors.white,
|
|
32
|
-
disabled: IOColors["blueIO-200"]
|
|
33
|
-
},
|
|
34
|
-
background: {
|
|
35
|
-
default: hexToRgba(IOColors["blueIO-600"], 0),
|
|
36
|
-
pressed: IOColors["blueIO-600"],
|
|
37
|
-
disabled: "transparent"
|
|
38
|
-
},
|
|
39
|
-
label: {
|
|
40
|
-
default: IOColors.white,
|
|
41
|
-
pressed: IOColors.white,
|
|
42
|
-
disabled: IOColors["blueIO-200"]
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
// Danger button
|
|
46
|
-
danger: {
|
|
47
|
-
border: {
|
|
48
|
-
default: IOColors["error-600"],
|
|
49
|
-
pressed: IOColors["error-600"],
|
|
50
|
-
disabled: IOColors["grey-200"]
|
|
51
|
-
},
|
|
52
|
-
background: {
|
|
53
|
-
default: hexToRgba(IOColors["error-600"], 0),
|
|
54
|
-
pressed: hexToRgba(IOColors["error-600"], 0.15),
|
|
55
|
-
disabled: "transparent"
|
|
56
|
-
},
|
|
57
|
-
label: {
|
|
58
|
-
default: IOColors["error-600"],
|
|
59
|
-
pressed: IOColors["error-600"],
|
|
60
|
-
disabled: IOColors["grey-450"]
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
|
|
65
8
|
// TODO: Remove this when legacy look is deprecated https://pagopa.atlassian.net/browse/IOPLT-153
|
|
66
9
|
const mapLegacyColorStates = {
|
|
67
10
|
// Primary button
|
|
68
11
|
primary: {
|
|
69
|
-
|
|
12
|
+
foreground: {
|
|
70
13
|
default: IOColors["blue-500"],
|
|
71
14
|
pressed: IOColors["blue-500"],
|
|
72
|
-
disabled: IOColors["grey-
|
|
15
|
+
disabled: IOColors["grey-450"]
|
|
73
16
|
},
|
|
74
17
|
background: {
|
|
75
18
|
default: hexToRgba(IOColors["blue-500"], 0),
|
|
76
19
|
pressed: hexToRgba(IOColors["blue-500"], 0.15),
|
|
77
20
|
disabled: "transparent"
|
|
78
|
-
},
|
|
79
|
-
label: {
|
|
80
|
-
default: IOColors["blue-500"],
|
|
81
|
-
pressed: IOColors["blue-500"],
|
|
82
|
-
disabled: IOColors["grey-450"]
|
|
83
21
|
}
|
|
84
22
|
},
|
|
85
23
|
// Contrast button
|
|
86
24
|
contrast: {
|
|
87
|
-
|
|
25
|
+
foreground: {
|
|
88
26
|
default: IOColors.white,
|
|
89
27
|
pressed: IOColors.white,
|
|
90
28
|
disabled: hexToRgba(IOColors.white, 0.5)
|
|
@@ -93,29 +31,6 @@ const mapLegacyColorStates = {
|
|
|
93
31
|
default: hexToRgba(IOColors.white, 0),
|
|
94
32
|
pressed: hexToRgba(IOColors.white, 0.2),
|
|
95
33
|
disabled: "transparent"
|
|
96
|
-
},
|
|
97
|
-
label: {
|
|
98
|
-
default: IOColors.white,
|
|
99
|
-
pressed: IOColors.white,
|
|
100
|
-
disabled: hexToRgba(IOColors.white, 0.5)
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
// Danger button
|
|
104
|
-
danger: {
|
|
105
|
-
border: {
|
|
106
|
-
default: IOColors["error-600"],
|
|
107
|
-
pressed: IOColors["error-600"],
|
|
108
|
-
disabled: IOColors["grey-200"]
|
|
109
|
-
},
|
|
110
|
-
background: {
|
|
111
|
-
default: hexToRgba(IOColors["error-600"], 0),
|
|
112
|
-
pressed: hexToRgba(IOColors["error-600"], 0.15),
|
|
113
|
-
disabled: "transparent"
|
|
114
|
-
},
|
|
115
|
-
label: {
|
|
116
|
-
default: IOColors["error-600"],
|
|
117
|
-
pressed: IOColors["error-600"],
|
|
118
|
-
disabled: IOColors["grey-450"]
|
|
119
34
|
}
|
|
120
35
|
}
|
|
121
36
|
};
|
|
@@ -149,6 +64,7 @@ export const ButtonOutline = /*#__PURE__*/forwardRef(({
|
|
|
149
64
|
testID
|
|
150
65
|
}, ref) => {
|
|
151
66
|
var _colorMap$color, _colorMap$color2, _colorMap$color3, _colorMap$color4, _colorMap$color5, _colorMap$color6, _colorMap$color7;
|
|
67
|
+
const theme = useIOTheme();
|
|
152
68
|
const {
|
|
153
69
|
isExperimental
|
|
154
70
|
} = useIOExperimentalDesign();
|
|
@@ -160,7 +76,35 @@ export const ButtonOutline = /*#__PURE__*/forwardRef(({
|
|
|
160
76
|
} = useScaleAnimation();
|
|
161
77
|
const reducedMotion = useReducedMotion();
|
|
162
78
|
const AnimatedIOText = Animated.createAnimatedComponent(IOText);
|
|
163
|
-
const
|
|
79
|
+
const mapColorStates = React.useMemo(() => ({
|
|
80
|
+
// Primary button
|
|
81
|
+
primary: {
|
|
82
|
+
foreground: {
|
|
83
|
+
default: IOColors[theme["interactiveElem-default"]],
|
|
84
|
+
pressed: IOColors[theme["interactiveElem-pressed"]],
|
|
85
|
+
disabled: IOColors[theme["interactiveOutline-disabled"]]
|
|
86
|
+
},
|
|
87
|
+
background: {
|
|
88
|
+
default: hexToRgba(IOColors[theme["interactiveElem-pressed"]], 0),
|
|
89
|
+
pressed: hexToRgba(IOColors[theme["interactiveElem-pressed"]], 0.1),
|
|
90
|
+
disabled: "transparent"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
// Contrast button
|
|
94
|
+
contrast: {
|
|
95
|
+
foreground: {
|
|
96
|
+
default: IOColors.white,
|
|
97
|
+
pressed: IOColors.white,
|
|
98
|
+
disabled: IOColors["blueIO-200"]
|
|
99
|
+
},
|
|
100
|
+
background: {
|
|
101
|
+
default: hexToRgba(IOColors["blueIO-600"], 0),
|
|
102
|
+
pressed: hexToRgba(IOColors["blueIO-600"], 0.5),
|
|
103
|
+
disabled: "transparent"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}), [theme]);
|
|
107
|
+
const colorMap = React.useMemo(() => isExperimental ? mapColorStates : mapLegacyColorStates, [isExperimental, mapColorStates]);
|
|
164
108
|
const buttonStyles = React.useMemo(() => isExperimental ? IOButtonStyles : IOButtonLegacyStyles, [isExperimental]);
|
|
165
109
|
const buttonStylesLocal = React.useMemo(() => isExperimental ? IOButtonStylesLocal : IOButtonLegacyStylesLocal, [isExperimental]);
|
|
166
110
|
|
|
@@ -168,19 +112,19 @@ export const ButtonOutline = /*#__PURE__*/forwardRef(({
|
|
|
168
112
|
const pressedAnimationStyle = useAnimatedStyle(() => {
|
|
169
113
|
// Link color states to the pressed states
|
|
170
114
|
const backgroundColor = interpolateColor(progress.value, [0, 1], [colorMap[color].background.default, colorMap[color].background.pressed]);
|
|
171
|
-
const borderColor = interpolateColor(progress.value, [0, 1], [colorMap[color].
|
|
115
|
+
const borderColor = interpolateColor(progress.value, [0, 1], [colorMap[color].foreground.default, colorMap[color].foreground.pressed]);
|
|
172
116
|
return {
|
|
173
117
|
borderColor,
|
|
174
118
|
backgroundColor
|
|
175
119
|
};
|
|
176
120
|
});
|
|
177
121
|
const pressedColorLabelAnimationStyle = useAnimatedStyle(() => ({
|
|
178
|
-
color: interpolateColor(progress.value, [0, 1], [colorMap[color].
|
|
122
|
+
color: interpolateColor(progress.value, [0, 1], [colorMap[color].foreground.default, colorMap[color].foreground.pressed])
|
|
179
123
|
}));
|
|
180
124
|
|
|
181
125
|
// Animate the <Icon> color prop
|
|
182
126
|
const pressedColorIconAnimationStyle = useAnimatedProps(() => ({
|
|
183
|
-
color: interpolateColor(progress.value, [0, 1], [colorMap[color].
|
|
127
|
+
color: interpolateColor(progress.value, [0, 1], [colorMap[color].foreground.default, colorMap[color].foreground.pressed])
|
|
184
128
|
}));
|
|
185
129
|
const AnimatedIconClassComponent = Animated.createAnimatedComponent(IconClassComponent);
|
|
186
130
|
return /*#__PURE__*/React.createElement(Pressable, {
|
|
@@ -207,11 +151,11 @@ export const ButtonOutline = /*#__PURE__*/forwardRef(({
|
|
|
207
151
|
flexDirection: "row-reverse"
|
|
208
152
|
}, disabled ? {
|
|
209
153
|
backgroundColor: (_colorMap$color = colorMap[color]) === null || _colorMap$color === void 0 || (_colorMap$color = _colorMap$color.background) === null || _colorMap$color === void 0 ? void 0 : _colorMap$color.disabled,
|
|
210
|
-
borderColor: (_colorMap$color2 = colorMap[color]) === null || _colorMap$color2 === void 0 || (_colorMap$color2 = _colorMap$color2.
|
|
154
|
+
borderColor: (_colorMap$color2 = colorMap[color]) === null || _colorMap$color2 === void 0 || (_colorMap$color2 = _colorMap$color2.foreground) === null || _colorMap$color2 === void 0 ? void 0 : _colorMap$color2.disabled,
|
|
211
155
|
opacity: DISABLED_OPACITY
|
|
212
156
|
} : {
|
|
213
157
|
backgroundColor: (_colorMap$color3 = colorMap[color]) === null || _colorMap$color3 === void 0 || (_colorMap$color3 = _colorMap$color3.background) === null || _colorMap$color3 === void 0 ? void 0 : _colorMap$color3.default,
|
|
214
|
-
borderColor: (_colorMap$color4 = colorMap[color]) === null || _colorMap$color4 === void 0 ? void 0 : _colorMap$color4.
|
|
158
|
+
borderColor: (_colorMap$color4 = colorMap[color]) === null || _colorMap$color4 === void 0 ? void 0 : _colorMap$color4.foreground.default
|
|
215
159
|
},
|
|
216
160
|
/* Prevent Reanimated from overriding background colors
|
|
217
161
|
if button is disabled */
|
|
@@ -220,12 +164,12 @@ export const ButtonOutline = /*#__PURE__*/forwardRef(({
|
|
|
220
164
|
allowFontScaling: true,
|
|
221
165
|
name: icon,
|
|
222
166
|
animatedProps: pressedColorIconAnimationStyle,
|
|
223
|
-
color: (_colorMap$color5 = colorMap[color]) === null || _colorMap$color5 === void 0 || (_colorMap$color5 = _colorMap$color5.
|
|
167
|
+
color: (_colorMap$color5 = colorMap[color]) === null || _colorMap$color5 === void 0 || (_colorMap$color5 = _colorMap$color5.foreground) === null || _colorMap$color5 === void 0 ? void 0 : _colorMap$color5.default,
|
|
224
168
|
size: iconSize
|
|
225
169
|
}) : /*#__PURE__*/React.createElement(AnimatedIcon, {
|
|
226
170
|
allowFontScaling: true,
|
|
227
171
|
name: icon,
|
|
228
|
-
color: (_colorMap$color6 = colorMap[color]) === null || _colorMap$color6 === void 0 || (_colorMap$color6 = _colorMap$color6.
|
|
172
|
+
color: (_colorMap$color6 = colorMap[color]) === null || _colorMap$color6 === void 0 || (_colorMap$color6 = _colorMap$color6.foreground) === null || _colorMap$color6 === void 0 ? void 0 : _colorMap$color6.disabled,
|
|
229
173
|
size: iconSize
|
|
230
174
|
})), /*#__PURE__*/React.createElement(AnimatedIOText, {
|
|
231
175
|
font: isExperimental ? "Titillio" : "TitilliumSansPro",
|
|
@@ -237,7 +181,7 @@ export const ButtonOutline = /*#__PURE__*/forwardRef(({
|
|
|
237
181
|
numberOfLines: 1,
|
|
238
182
|
ellipsizeMode: "tail",
|
|
239
183
|
style: [buttonStyles.label, disabled ? {
|
|
240
|
-
color: (_colorMap$color7 = colorMap[color]) === null || _colorMap$color7 === void 0 || (_colorMap$color7 = _colorMap$color7.
|
|
184
|
+
color: (_colorMap$color7 = colorMap[color]) === null || _colorMap$color7 === void 0 || (_colorMap$color7 = _colorMap$color7.foreground) === null || _colorMap$color7 === void 0 ? void 0 : _colorMap$color7.disabled
|
|
241
185
|
} : {
|
|
242
186
|
...pressedColorLabelAnimationStyle
|
|
243
187
|
}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","Pressable","StyleSheet","Animated","interpolateColor","useAnimatedProps","useAnimatedStyle","useReducedMotion","IOButtonLegacyStyles","IOButtonStyles","IOColors","hexToRgba","useIOExperimentalDesign","useScaleAnimation","AnimatedIcon","IconClassComponent","IOText","buttonTextFontSize","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","Pressable","StyleSheet","Animated","interpolateColor","useAnimatedProps","useAnimatedStyle","useReducedMotion","IOButtonLegacyStyles","IOButtonStyles","IOColors","hexToRgba","useIOExperimentalDesign","useIOTheme","useScaleAnimation","AnimatedIcon","IconClassComponent","IOText","buttonTextFontSize","mapLegacyColorStates","primary","foreground","default","pressed","disabled","background","contrast","white","IOButtonLegacyStylesLocal","create","buttonWithBorder","borderWidth","iconSize","DISABLED_OPACITY","ICON_MARGIN","IOButtonStylesLocal","ButtonOutline","color","label","fullWidth","icon","iconPosition","onPress","accessibilityLabel","accessibilityHint","testID","ref","_colorMap$color","_colorMap$color2","_colorMap$color3","_colorMap$color4","_colorMap$color5","_colorMap$color6","_colorMap$color7","theme","isExperimental","progress","onPressIn","onPressOut","scaleAnimatedStyle","reducedMotion","AnimatedIOText","createAnimatedComponent","mapColorStates","useMemo","colorMap","buttonStyles","buttonStylesLocal","pressedAnimationStyle","backgroundColor","value","borderColor","pressedColorLabelAnimationStyle","pressedColorIconAnimationStyle","AnimatedIconClassComponent","createElement","accessibilityRole","accessibilityState","accessible","style","dimensionsDefault","View","button","paddingHorizontal","buttonSizeDefault","columnGap","flexDirection","opacity","allowFontScaling","name","animatedProps","size","font","weight","accessibilityElementsHidden","importantForAccessibility","numberOfLines","ellipsizeMode"],"sourceRoot":"../../../../src","sources":["components/buttons/ButtonOutline.tsx"],"mappings":"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"}
|
|
@@ -1,93 +1,57 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useRef } from "react";
|
|
2
|
-
import { Pressable
|
|
1
|
+
import React, { forwardRef, useCallback, useEffect, useMemo, useRef } from "react";
|
|
2
|
+
import { Pressable } from "react-native";
|
|
3
3
|
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
4
4
|
import Animated, { interpolateColor, useAnimatedStyle, useReducedMotion } from "react-native-reanimated";
|
|
5
|
-
import { IOButtonLegacyStyles, IOButtonStyles, IOColors, enterTransitionInnerContent, enterTransitionInnerContentSmall, exitTransitionInnerContent, useIOExperimentalDesign } from "../../core";
|
|
5
|
+
import { IOButtonLegacyStyles, IOButtonStyles, IOColors, enterTransitionInnerContent, enterTransitionInnerContentSmall, exitTransitionInnerContent, useIOExperimentalDesign, useIOTheme } from "../../core";
|
|
6
6
|
import { useScaleAnimation } from "../../hooks";
|
|
7
7
|
import { Icon } from "../icons";
|
|
8
8
|
import { LoadingSpinner } from "../loadingSpinner";
|
|
9
9
|
import { ButtonText } from "../typography/ButtonText";
|
|
10
|
-
// Disabled state
|
|
11
|
-
// TODO: Remove this when legacy look is deprecated https://pagopa.atlassian.net/browse/IOPLT-153
|
|
12
|
-
const colorPrimaryLegacyButtonDisabled = "grey-200";
|
|
13
|
-
const legacyStyles = StyleSheet.create({
|
|
14
|
-
backgroundDisabled: {
|
|
15
|
-
backgroundColor: IOColors[colorPrimaryLegacyButtonDisabled]
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
const colorPrimaryButtonDisabled = "grey-200";
|
|
19
10
|
const ICON_MARGIN = 8;
|
|
20
11
|
const DISABLED_OPACITY = 0.5;
|
|
21
12
|
|
|
22
13
|
// Icon size
|
|
23
14
|
const iconSize = 20;
|
|
24
|
-
const styles = StyleSheet.create({
|
|
25
|
-
backgroundDisabled: {
|
|
26
|
-
backgroundColor: IOColors[colorPrimaryButtonDisabled],
|
|
27
|
-
opacity: DISABLED_OPACITY
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
const mapColorStates = {
|
|
31
|
-
// Primary button
|
|
32
|
-
primary: {
|
|
33
|
-
default: IOColors["blueIO-500"],
|
|
34
|
-
pressed: IOColors["blueIO-600"],
|
|
35
|
-
label: {
|
|
36
|
-
default: "white",
|
|
37
|
-
disabled: "grey-700"
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
// Danger button
|
|
41
|
-
danger: {
|
|
42
|
-
default: IOColors["error-600"],
|
|
43
|
-
pressed: IOColors["error-500"],
|
|
44
|
-
label: {
|
|
45
|
-
default: "white",
|
|
46
|
-
disabled: "grey-700"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
// Contrast button
|
|
50
|
-
contrast: {
|
|
51
|
-
default: IOColors.white,
|
|
52
|
-
pressed: IOColors["blueIO-50"],
|
|
53
|
-
label: {
|
|
54
|
-
default: "blueIO-500",
|
|
55
|
-
disabled: "grey-700"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
|
|
60
15
|
// TODO: Remove this when legacy look is deprecated https://pagopa.atlassian.net/browse/IOPLT-153
|
|
61
16
|
const mapLegacyColorStates = {
|
|
62
17
|
// Primary button
|
|
63
18
|
primary: {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
19
|
+
background: {
|
|
20
|
+
default: IOColors["blue-500"],
|
|
21
|
+
pressed: IOColors["blue-600"],
|
|
22
|
+
disabled: IOColors["grey-200"]
|
|
23
|
+
},
|
|
24
|
+
foreground: {
|
|
67
25
|
default: "white",
|
|
68
26
|
disabled: "white"
|
|
69
27
|
}
|
|
70
28
|
},
|
|
71
29
|
// Danger button
|
|
72
30
|
danger: {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
31
|
+
background: {
|
|
32
|
+
default: IOColors["error-600"],
|
|
33
|
+
pressed: IOColors["error-500"],
|
|
34
|
+
disabled: IOColors["grey-200"]
|
|
35
|
+
},
|
|
36
|
+
foreground: {
|
|
76
37
|
default: "white",
|
|
77
38
|
disabled: "white"
|
|
78
39
|
}
|
|
79
40
|
},
|
|
80
41
|
// Contrast button
|
|
81
42
|
contrast: {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
43
|
+
background: {
|
|
44
|
+
default: IOColors.white,
|
|
45
|
+
pressed: IOColors["blue-50"],
|
|
46
|
+
disabled: IOColors["grey-200"]
|
|
47
|
+
},
|
|
48
|
+
foreground: {
|
|
85
49
|
default: "blue-500",
|
|
86
50
|
disabled: "white"
|
|
87
51
|
}
|
|
88
52
|
}
|
|
89
53
|
};
|
|
90
|
-
export const ButtonSolid = /*#__PURE__*/
|
|
54
|
+
export const ButtonSolid = /*#__PURE__*/forwardRef(({
|
|
91
55
|
color = "primary",
|
|
92
56
|
label,
|
|
93
57
|
fullWidth = false,
|
|
@@ -100,7 +64,8 @@ export const ButtonSolid = /*#__PURE__*/React.forwardRef(({
|
|
|
100
64
|
accessibilityHint,
|
|
101
65
|
testID
|
|
102
66
|
}, ref) => {
|
|
103
|
-
var _colorMap$color, _colorMap$color2, _colorMap$color3;
|
|
67
|
+
var _colorMap$color, _colorMap$color2, _colorMap$color3, _colorMap$color4;
|
|
68
|
+
const theme = useIOTheme();
|
|
104
69
|
const {
|
|
105
70
|
isExperimental
|
|
106
71
|
} = useIOExperimentalDesign();
|
|
@@ -111,8 +76,46 @@ export const ButtonSolid = /*#__PURE__*/React.forwardRef(({
|
|
|
111
76
|
scaleAnimatedStyle
|
|
112
77
|
} = useScaleAnimation();
|
|
113
78
|
const reducedMotion = useReducedMotion();
|
|
114
|
-
const
|
|
115
|
-
|
|
79
|
+
const mapColorStates = useMemo(() => ({
|
|
80
|
+
// Primary button
|
|
81
|
+
primary: {
|
|
82
|
+
background: {
|
|
83
|
+
default: IOColors[theme["interactiveElem-default"]],
|
|
84
|
+
pressed: IOColors[theme["interactiveElem-pressed"]],
|
|
85
|
+
disabled: IOColors[theme["interactiveElem-disabled"]]
|
|
86
|
+
},
|
|
87
|
+
foreground: {
|
|
88
|
+
default: theme["buttonText-default"],
|
|
89
|
+
disabled: theme["buttonText-disabled"]
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
// Danger button
|
|
93
|
+
danger: {
|
|
94
|
+
background: {
|
|
95
|
+
default: IOColors["error-600"],
|
|
96
|
+
pressed: IOColors["error-500"],
|
|
97
|
+
disabled: IOColors[theme["interactiveElem-disabled"]]
|
|
98
|
+
},
|
|
99
|
+
foreground: {
|
|
100
|
+
default: theme["buttonText-default"],
|
|
101
|
+
disabled: theme["buttonText-disabled"]
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
// Contrast button
|
|
105
|
+
contrast: {
|
|
106
|
+
background: {
|
|
107
|
+
default: IOColors.white,
|
|
108
|
+
pressed: IOColors["blueIO-50"],
|
|
109
|
+
disabled: IOColors["blueIO-50"]
|
|
110
|
+
},
|
|
111
|
+
foreground: {
|
|
112
|
+
default: "blueIO-500",
|
|
113
|
+
disabled: "blueIO-500"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}), [theme]);
|
|
117
|
+
const colorMap = useMemo(() => isExperimental ? mapColorStates : mapLegacyColorStates, [isExperimental, mapColorStates]);
|
|
118
|
+
const buttonStyles = useMemo(() => isExperimental ? IOButtonStyles : IOButtonLegacyStyles, [isExperimental]);
|
|
116
119
|
|
|
117
120
|
/* Prevent the component from triggering the `isEntering' transition
|
|
118
121
|
on the on the first render. Solution from this discussion:
|
|
@@ -127,7 +130,7 @@ export const ButtonSolid = /*#__PURE__*/React.forwardRef(({
|
|
|
127
130
|
// Interpolate animation values from `isPressed` values
|
|
128
131
|
const pressedAnimationStyle = useAnimatedStyle(() => {
|
|
129
132
|
// Link color states to the pressed states
|
|
130
|
-
const backgroundColor = interpolateColor(progress.value, [0, 1], [colorMap[color].default, colorMap[color].pressed]);
|
|
133
|
+
const backgroundColor = interpolateColor(progress.value, [0, 1], [colorMap[color].background.default, colorMap[color].background.pressed]);
|
|
131
134
|
return {
|
|
132
135
|
backgroundColor
|
|
133
136
|
};
|
|
@@ -142,8 +145,11 @@ export const ButtonSolid = /*#__PURE__*/React.forwardRef(({
|
|
|
142
145
|
onPress(event);
|
|
143
146
|
}, [loading, onPress]);
|
|
144
147
|
|
|
148
|
+
// Background
|
|
149
|
+
const backgroundColor = disabled ? (_colorMap$color = colorMap[color]) === null || _colorMap$color === void 0 || (_colorMap$color = _colorMap$color.background) === null || _colorMap$color === void 0 ? void 0 : _colorMap$color.disabled : (_colorMap$color2 = colorMap[color]) === null || _colorMap$color2 === void 0 || (_colorMap$color2 = _colorMap$color2.background) === null || _colorMap$color2 === void 0 ? void 0 : _colorMap$color2.default;
|
|
150
|
+
|
|
145
151
|
// Label & Icons colors
|
|
146
|
-
const foregroundColor = disabled ? (_colorMap$
|
|
152
|
+
const foregroundColor = disabled ? (_colorMap$color3 = colorMap[color]) === null || _colorMap$color3 === void 0 || (_colorMap$color3 = _colorMap$color3.foreground) === null || _colorMap$color3 === void 0 ? void 0 : _colorMap$color3.disabled : (_colorMap$color4 = colorMap[color]) === null || _colorMap$color4 === void 0 || (_colorMap$color4 = _colorMap$color4.foreground) === null || _colorMap$color4 === void 0 ? void 0 : _colorMap$color4.default;
|
|
147
153
|
return /*#__PURE__*/React.createElement(Pressable, {
|
|
148
154
|
testID: testID,
|
|
149
155
|
ref: ref,
|
|
@@ -164,12 +170,13 @@ export const ButtonSolid = /*#__PURE__*/React.forwardRef(({
|
|
|
164
170
|
style: !fullWidth ? IOButtonStyles.dimensionsDefault : {}
|
|
165
171
|
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
166
172
|
style: [buttonStyles.button, {
|
|
173
|
+
backgroundColor,
|
|
167
174
|
overflow: "hidden"
|
|
168
175
|
}, isExperimental && fullWidth && {
|
|
169
176
|
paddingHorizontal: 16
|
|
170
|
-
}, buttonStyles.buttonSizeDefault, disabled ?
|
|
171
|
-
|
|
172
|
-
},
|
|
177
|
+
}, buttonStyles.buttonSizeDefault, disabled ? {
|
|
178
|
+
opacity: DISABLED_OPACITY
|
|
179
|
+
} : {},
|
|
173
180
|
/* Prevent Reanimated from overriding background colors
|
|
174
181
|
if button is disabled */
|
|
175
182
|
!disabled && !reducedMotion && scaleAnimatedStyle, !disabled && pressedAnimationStyle]
|