@app-studio/web 0.9.13 → 0.9.14

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.
@@ -17005,8 +17005,78 @@
17005
17005
  };
17006
17006
  };
17007
17007
 
17008
- var _excluded$T = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views"];
17008
+ var ToggleShapes = {
17009
+ sharp: 0,
17010
+ rounded: 4,
17011
+ pillShaped: 24
17012
+ };
17013
+ /**
17014
+ * Generate toggle variants with proper color combinations based on main color and contrast
17015
+ * Similar to Button's getButtonVariants function
17016
+ */
17017
+ var getToggleVariants = (color, isLight) => ({
17018
+ outline: {
17019
+ backgroundColor: 'transparent',
17020
+ color: color,
17021
+ borderWidth: 1,
17022
+ borderStyle: 'solid',
17023
+ borderColor: color,
17024
+ _hover: {
17025
+ backgroundColor: color,
17026
+ color: isLight ? 'color.black' : 'color.white',
17027
+ transform: 'translateY(-1px)'
17028
+ },
17029
+ _active: {
17030
+ backgroundColor: color,
17031
+ color: isLight ? 'color.black' : 'color.white',
17032
+ transform: 'translateY(0)'
17033
+ },
17034
+ transition: 'all 0.2s ease'
17035
+ },
17036
+ ghost: {
17037
+ backgroundColor: 'transparent',
17038
+ color: color,
17039
+ borderWidth: 0,
17040
+ borderStyle: 'none',
17041
+ borderColor: 'transparent',
17042
+ _hover: {
17043
+ backgroundColor: color,
17044
+ color: isLight ? 'color.black' : 'color.white',
17045
+ transform: 'translateY(-1px)'
17046
+ },
17047
+ _active: {
17048
+ backgroundColor: color,
17049
+ color: isLight ? 'color.black' : 'color.white',
17050
+ transform: 'translateY(0)'
17051
+ },
17052
+ transition: 'all 0.2s ease'
17053
+ },
17054
+ link: {
17055
+ backgroundColor: 'transparent',
17056
+ color: color,
17057
+ borderWidth: 1,
17058
+ borderStyle: 'solid',
17059
+ borderColor: 'transparent',
17060
+ textDecoration: 'underline',
17061
+ textUnderlineOffset: '1px',
17062
+ textDecorationThickness: '1px',
17063
+ _hover: {
17064
+ borderColor: color,
17065
+ textDecorationThickness: '2px',
17066
+ transform: 'translateY(-1px)'
17067
+ },
17068
+ _active: {
17069
+ borderColor: color,
17070
+ textDecorationThickness: '2px',
17071
+ transform: 'translateY(0)'
17072
+ },
17073
+ transition: 'all 0.2s ease'
17074
+ }
17075
+ });
17076
+
17077
+ var _excluded$T = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views", "backgroundColor", "color", "themeMode"];
17009
17078
  var ToggleView = _ref => {
17079
+ var _ref2;
17010
17080
  var {
17011
17081
  children,
17012
17082
  shape = 'rounded',
@@ -17017,25 +17087,30 @@
17017
17087
  isToggle,
17018
17088
  setIsToggled,
17019
17089
  onToggle,
17020
- views
17090
+ views,
17091
+ backgroundColor,
17092
+ // primary candidate for main color
17093
+ color,
17094
+ // 2nd candidate for main color
17095
+ themeMode: elementMode
17021
17096
  } = _ref,
17022
17097
  props = _objectWithoutPropertiesLoose(_ref, _excluded$T);
17023
- var toggleColor = !isDisabled ? 'color.trueGray.400' : 'theme.disabled';
17098
+ /* theme helpers */
17099
+ var {
17100
+ getColor,
17101
+ themeMode
17102
+ } = appStudio.useTheme();
17103
+ var mode = elementMode != null ? elementMode : themeMode;
17104
+ /* MAIN COLOR – determines the entire palette */
17105
+ var mainColorKey = (_ref2 = backgroundColor != null ? backgroundColor : color) != null ? _ref2 : 'theme.primary';
17106
+ var mainTone = getColor(isDisabled ? 'theme.disabled' : mainColorKey, {
17107
+ themeMode: mode
17108
+ });
17109
+ var tone = contrast(mainTone);
17110
+ /* variant palette */
17111
+ var palette = React.useMemo(() => getToggleVariants(mainTone, tone === 'light'), [mainTone, tone]);
17112
+ var base = palette[variant];
17024
17113
  var isActive = !!(isToggle || isHovered);
17025
- var toggleVariants = {
17026
- outline: {
17027
- borderWidth: 1,
17028
- borderStyle: 'solid',
17029
- borderColor: 'color.trueGray.400'
17030
- },
17031
- link: {
17032
- borderWidth: 1,
17033
- borderStyle: 'solid',
17034
- borderColor: isActive ? toggleColor : 'transparent',
17035
- textDecoration: 'underline'
17036
- },
17037
- ghost: {}
17038
- };
17039
17114
  var handleHover = () => setIsHovered(!isHovered);
17040
17115
  var handleToggle = () => {
17041
17116
  if (!isDisabled) {
@@ -17052,14 +17127,15 @@
17052
17127
  role: "Toggle",
17053
17128
  padding: shape === 'pillShaped' ? '10px 12px' : '8px',
17054
17129
  width: "fit-content",
17055
- color: isActive ? 'color.white' : toggleColor,
17056
- backgroundColor: isActive ? toggleColor : 'transparent',
17057
- onMouseEnter: handleHover,
17058
- onMouseLeave: () => setIsHovered(false),
17059
17130
  cursor: isDisabled ? 'not-allowed' : 'pointer',
17060
- borderRadius: shape === 'pillShaped' ? '50px' : '8px',
17061
- onClick: handleToggle
17062
- }, toggleVariants[variant], props, views == null ? void 0 : views.container), children);
17131
+ borderRadius: ToggleShapes[shape],
17132
+ onClick: handleToggle,
17133
+ onMouseEnter: handleHover,
17134
+ onMouseLeave: () => setIsHovered(false)
17135
+ }, base, isActive && {
17136
+ backgroundColor: mainTone,
17137
+ color: tone === 'light' ? 'color.black' : 'color.white'
17138
+ }, props, views == null ? void 0 : views.container), children);
17063
17139
  };
17064
17140
 
17065
17141
  var _excluded$U = ["children", "shape", "variant", "isDisabled", "isToggled", "onToggle"];