@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.
@@ -1,2 +1,8 @@
1
- import { Shape } from './Toggle.type';
1
+ import { ViewProps } from 'app-studio';
2
+ import { Shape, Variant } from './Toggle.type';
2
3
  export declare const ToggleShapes: Record<Shape, number | string>;
4
+ /**
5
+ * Generate toggle variants with proper color combinations based on main color and contrast
6
+ * Similar to Button's getButtonVariants function
7
+ */
8
+ export declare const getToggleVariants: (color: string, isLight: boolean) => Record<Variant, ViewProps>;
@@ -5,6 +5,9 @@ interface Props extends ToggleViewProps {
5
5
  views?: {
6
6
  container?: ViewProps;
7
7
  };
8
+ backgroundColor?: string;
9
+ color?: string;
10
+ themeMode?: 'light' | 'dark';
8
11
  }
9
12
  declare const ToggleView: React.FC<Props>;
10
13
  export default ToggleView;
@@ -17036,8 +17036,78 @@ var useToggleState = defaultToggled => {
17036
17036
  };
17037
17037
  };
17038
17038
 
17039
- var _excluded$T = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views"];
17039
+ var ToggleShapes = {
17040
+ sharp: 0,
17041
+ rounded: 4,
17042
+ pillShaped: 24
17043
+ };
17044
+ /**
17045
+ * Generate toggle variants with proper color combinations based on main color and contrast
17046
+ * Similar to Button's getButtonVariants function
17047
+ */
17048
+ var getToggleVariants = (color, isLight) => ({
17049
+ outline: {
17050
+ backgroundColor: 'transparent',
17051
+ color: color,
17052
+ borderWidth: 1,
17053
+ borderStyle: 'solid',
17054
+ borderColor: color,
17055
+ _hover: {
17056
+ backgroundColor: color,
17057
+ color: isLight ? 'color.black' : 'color.white',
17058
+ transform: 'translateY(-1px)'
17059
+ },
17060
+ _active: {
17061
+ backgroundColor: color,
17062
+ color: isLight ? 'color.black' : 'color.white',
17063
+ transform: 'translateY(0)'
17064
+ },
17065
+ transition: 'all 0.2s ease'
17066
+ },
17067
+ ghost: {
17068
+ backgroundColor: 'transparent',
17069
+ color: color,
17070
+ borderWidth: 0,
17071
+ borderStyle: 'none',
17072
+ borderColor: 'transparent',
17073
+ _hover: {
17074
+ backgroundColor: color,
17075
+ color: isLight ? 'color.black' : 'color.white',
17076
+ transform: 'translateY(-1px)'
17077
+ },
17078
+ _active: {
17079
+ backgroundColor: color,
17080
+ color: isLight ? 'color.black' : 'color.white',
17081
+ transform: 'translateY(0)'
17082
+ },
17083
+ transition: 'all 0.2s ease'
17084
+ },
17085
+ link: {
17086
+ backgroundColor: 'transparent',
17087
+ color: color,
17088
+ borderWidth: 1,
17089
+ borderStyle: 'solid',
17090
+ borderColor: 'transparent',
17091
+ textDecoration: 'underline',
17092
+ textUnderlineOffset: '1px',
17093
+ textDecorationThickness: '1px',
17094
+ _hover: {
17095
+ borderColor: color,
17096
+ textDecorationThickness: '2px',
17097
+ transform: 'translateY(-1px)'
17098
+ },
17099
+ _active: {
17100
+ borderColor: color,
17101
+ textDecorationThickness: '2px',
17102
+ transform: 'translateY(0)'
17103
+ },
17104
+ transition: 'all 0.2s ease'
17105
+ }
17106
+ });
17107
+
17108
+ var _excluded$T = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views", "backgroundColor", "color", "themeMode"];
17040
17109
  var ToggleView = _ref => {
17110
+ var _ref2;
17041
17111
  var {
17042
17112
  children,
17043
17113
  shape = 'rounded',
@@ -17048,25 +17118,30 @@ var ToggleView = _ref => {
17048
17118
  isToggle,
17049
17119
  setIsToggled,
17050
17120
  onToggle,
17051
- views
17121
+ views,
17122
+ backgroundColor,
17123
+ // primary candidate for main color
17124
+ color,
17125
+ // 2nd candidate for main color
17126
+ themeMode: elementMode
17052
17127
  } = _ref,
17053
17128
  props = _objectWithoutPropertiesLoose(_ref, _excluded$T);
17054
- var toggleColor = !isDisabled ? 'color.trueGray.400' : 'theme.disabled';
17129
+ /* theme helpers */
17130
+ var {
17131
+ getColor,
17132
+ themeMode
17133
+ } = appStudio.useTheme();
17134
+ var mode = elementMode != null ? elementMode : themeMode;
17135
+ /* MAIN COLOR – determines the entire palette */
17136
+ var mainColorKey = (_ref2 = backgroundColor != null ? backgroundColor : color) != null ? _ref2 : 'theme.primary';
17137
+ var mainTone = getColor(isDisabled ? 'theme.disabled' : mainColorKey, {
17138
+ themeMode: mode
17139
+ });
17140
+ var tone = contrast(mainTone);
17141
+ /* variant palette */
17142
+ var palette = React.useMemo(() => getToggleVariants(mainTone, tone === 'light'), [mainTone, tone]);
17143
+ var base = palette[variant];
17055
17144
  var isActive = !!(isToggle || isHovered);
17056
- var toggleVariants = {
17057
- outline: {
17058
- borderWidth: 1,
17059
- borderStyle: 'solid',
17060
- borderColor: 'color.trueGray.400'
17061
- },
17062
- link: {
17063
- borderWidth: 1,
17064
- borderStyle: 'solid',
17065
- borderColor: isActive ? toggleColor : 'transparent',
17066
- textDecoration: 'underline'
17067
- },
17068
- ghost: {}
17069
- };
17070
17145
  var handleHover = () => setIsHovered(!isHovered);
17071
17146
  var handleToggle = () => {
17072
17147
  if (!isDisabled) {
@@ -17083,14 +17158,15 @@ var ToggleView = _ref => {
17083
17158
  role: "Toggle",
17084
17159
  padding: shape === 'pillShaped' ? '10px 12px' : '8px',
17085
17160
  width: "fit-content",
17086
- color: isActive ? 'color.white' : toggleColor,
17087
- backgroundColor: isActive ? toggleColor : 'transparent',
17088
- onMouseEnter: handleHover,
17089
- onMouseLeave: () => setIsHovered(false),
17090
17161
  cursor: isDisabled ? 'not-allowed' : 'pointer',
17091
- borderRadius: shape === 'pillShaped' ? '50px' : '8px',
17092
- onClick: handleToggle
17093
- }, toggleVariants[variant], props, views == null ? void 0 : views.container), children);
17162
+ borderRadius: ToggleShapes[shape],
17163
+ onClick: handleToggle,
17164
+ onMouseEnter: handleHover,
17165
+ onMouseLeave: () => setIsHovered(false)
17166
+ }, base, isActive && {
17167
+ backgroundColor: mainTone,
17168
+ color: tone === 'light' ? 'color.black' : 'color.white'
17169
+ }, props, views == null ? void 0 : views.container), children);
17094
17170
  };
17095
17171
 
17096
17172
  var _excluded$U = ["children", "shape", "variant", "isDisabled", "isToggled", "onToggle"];