@app-studio/web 0.9.63 → 0.9.66

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.
@@ -3062,14 +3062,14 @@
3062
3062
  ,
3063
3063
  lineHeight: "24px",
3064
3064
  color: themes[variant].content.color,
3065
- bgColor: themes[variant].container.backgroundColor
3065
+ backgroundColor: themes[variant].container.backgroundColor
3066
3066
  }, views == null ? void 0 : views.title), title), /*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
3067
3067
  fontSize: "14px",
3068
3068
  fontWeight: "400" // Regular
3069
3069
  ,
3070
3070
  lineHeight: "20px",
3071
3071
  color: themes[variant].content.color,
3072
- bgColor: themes[variant].container.backgroundColor
3072
+ backgroundColor: themes[variant].container.backgroundColor
3073
3073
  }, views == null ? void 0 : views.description), description || children)));
3074
3074
  };
3075
3075
 
@@ -3392,16 +3392,16 @@
3392
3392
  }, /*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
3393
3393
  size: "md",
3394
3394
  weight: "semiBold",
3395
- bgColor: Theme[variant].container.backgroundColor
3395
+ backgroundColor: Theme[variant].container.backgroundColor
3396
3396
  }, views == null ? void 0 : views.title), title), subtitle && (/*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
3397
3397
  size: "sm",
3398
- bgColor: Theme[variant].container.backgroundColor
3398
+ backgroundColor: Theme[variant].container.backgroundColor
3399
3399
  }, views == null ? void 0 : views.subtitle), subtitle))), showAction && (/*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
3400
3400
  marginRight: 10,
3401
3401
  onClick: action,
3402
3402
  padding: "6px 10px",
3403
3403
  whiteSpace: "nowrap",
3404
- bgColor: Theme[variant].container.backgroundColor
3404
+ backgroundColor: Theme[variant].container.backgroundColor
3405
3405
  }, containerStyle, views == null ? void 0 : views.actionText), actionText)), isClosable && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
3406
3406
  position: "absolute",
3407
3407
  zIndex: 10000,
@@ -4759,6 +4759,11 @@
4759
4759
  views
4760
4760
  } = _ref4,
4761
4761
  props = _objectWithoutPropertiesLoose(_ref4, _excluded4$2);
4762
+ var {
4763
+ getColor
4764
+ } = appStudio.useTheme();
4765
+ loaderColor = getColor(loaderColor || props.color || 'theme.loading');
4766
+ textColor = getColor(textColor || props.color || 'theme.loading');
4762
4767
  var style = {
4763
4768
  size,
4764
4769
  speed,
@@ -4872,12 +4877,19 @@
4872
4877
  padding: 14
4873
4878
  }
4874
4879
  };
4875
- var getButtonVariants = function getButtonVariants(color, isLight, isThemeLight) {
4880
+ var getButtonVariants = function getButtonVariants(color, isLight, reversed) {
4881
+ if (reversed === void 0) {
4882
+ reversed = false;
4883
+ }
4876
4884
  var textColor = isLight ? '#000000' : '#FFFFFF';
4885
+ // Determine effective colors based on reversed state
4886
+ var effectiveBg = reversed ? textColor : color;
4887
+ var effectiveContent = reversed ? color : textColor;
4888
+ var effectiveBorder = reversed ? textColor : color;
4877
4889
  return {
4878
4890
  filled: {
4879
- backgroundColor: color,
4880
- color: textColor,
4891
+ backgroundColor: effectiveBg,
4892
+ color: effectiveContent,
4881
4893
  borderWidth: 1,
4882
4894
  borderStyle: 'solid',
4883
4895
  borderColor: 'transparent',
@@ -4889,57 +4901,57 @@
4889
4901
  },
4890
4902
  _focusVisible: {
4891
4903
  outline: 'none',
4892
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4904
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBg
4893
4905
  },
4894
4906
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4895
4907
  },
4896
- reversed: {
4897
- backgroundColor: textColor,
4898
- color: color,
4908
+ empty: {
4909
+ backgroundColor: 'transparent',
4910
+ color: effectiveBorder,
4899
4911
  borderWidth: 1,
4900
4912
  borderStyle: 'solid',
4901
- borderColor: textColor,
4913
+ borderColor: effectiveBorder,
4902
4914
  _hover: {
4903
4915
  opacity: 0.9
4904
4916
  },
4905
4917
  _active: {
4906
4918
  opacity: 0.95
4907
4919
  },
4920
+ _focusVisible: {
4921
+ outline: 'none',
4922
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
4923
+ },
4908
4924
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4909
4925
  },
4910
4926
  outline: {
4911
4927
  backgroundColor: 'transparent',
4912
- color: color,
4928
+ color: effectiveBorder,
4913
4929
  borderWidth: 1,
4914
4930
  borderStyle: 'solid',
4915
- borderColor: color,
4931
+ borderColor: effectiveBorder,
4916
4932
  _hover: {
4917
- backgroundColor: color,
4918
- color: textColor,
4919
4933
  opacity: 0.9
4920
4934
  },
4921
4935
  _active: {
4922
- backgroundColor: color,
4923
- color: textColor,
4924
4936
  opacity: 0.95
4925
4937
  },
4926
4938
  _focusVisible: {
4927
4939
  outline: 'none',
4928
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4940
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
4929
4941
  },
4930
4942
  transition: 'background-color 0.2s ease, color 0.2s ease, opacity 0.2s ease'
4931
4943
  },
4932
4944
  ghost: {
4933
4945
  backgroundColor: 'transparent',
4934
- color: color,
4946
+ color: effectiveBorder,
4935
4947
  borderWidth: 1,
4936
4948
  borderStyle: 'solid',
4937
4949
  borderColor: 'transparent',
4938
4950
  _hover: {
4939
4951
  borderWidth: 1,
4940
4952
  borderStyle: 'solid',
4941
- borderColor: color,
4942
- color: color,
4953
+ borderColor: effectiveBorder,
4954
+ color: effectiveBorder,
4943
4955
  opacity: 0.9
4944
4956
  },
4945
4957
  _active: {
@@ -4947,20 +4959,20 @@
4947
4959
  },
4948
4960
  _focusVisible: {
4949
4961
  outline: 'none',
4950
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4962
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
4951
4963
  },
4952
4964
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4953
4965
  },
4954
4966
  link: {
4955
4967
  backgroundColor: 'transparent',
4956
- color: color,
4968
+ color: effectiveBorder,
4957
4969
  borderWidth: 0,
4958
4970
  borderStyle: 'none',
4959
4971
  borderColor: 'transparent',
4960
4972
  textDecoration: 'underline',
4961
4973
  textUnderlineOffset: '2px',
4962
4974
  textDecorationThickness: '1px',
4963
- textDecorationColor: color,
4975
+ textDecorationColor: effectiveBorder,
4964
4976
  _hover: {
4965
4977
  opacity: 0.8
4966
4978
  },
@@ -4969,83 +4981,35 @@
4969
4981
  },
4970
4982
  _focusVisible: {
4971
4983
  outline: 'none',
4972
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4973
- },
4974
- transition: 'opacity 0.2s ease'
4975
- },
4976
- borderMoving: {
4977
- position: 'relative',
4978
- backgroundColor: 'black',
4979
- color: textColor,
4980
- overflow: 'hidden',
4981
- borderWidth: 0,
4982
- borderStyle: 'none',
4983
- borderColor: 'transparent',
4984
- _hover: {
4985
- color: textColor
4986
- },
4987
- _active: {
4988
- color: textColor
4989
- },
4990
- _focusVisible: {
4991
- outline: 'none',
4992
- boxShadow: '0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px rgba(0, 0, 0, 0.8)'
4993
- },
4994
- transition: 'opacity 0.2s ease'
4995
- },
4996
- animatedStroke: {
4997
- display: 'inline-block',
4998
- margin: '0 auto',
4999
- textAlign: 'center',
5000
- textDecoration: 'none',
5001
- position: 'relative',
5002
- cursor: 'pointer',
5003
- backgroundColor: 'transparent',
5004
- color: color,
5005
- borderWidth: 0,
5006
- borderStyle: 'none',
5007
- borderColor: 'transparent',
5008
- _hover: {
5009
- color: color
5010
- },
5011
- _active: {
5012
- color: color
5013
- },
5014
- _focusVisible: {
5015
- outline: 'none',
5016
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4984
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
5017
4985
  },
5018
4986
  transition: 'opacity 0.2s ease'
5019
4987
  },
5020
4988
  subtle: {
5021
- backgroundColor: 'white',
5022
- color: color,
4989
+ backgroundColor: reversed ? "color-mix(in srgb, " + effectiveBorder + " 20%, transparent)" : "color-mix(in srgb, " + effectiveBorder + " 5%, transparent)",
4990
+ color: effectiveBorder,
5023
4991
  borderWidth: 1,
5024
4992
  borderStyle: 'solid',
5025
- borderColor: color,
5026
- paddingHorizontal: 12,
5027
- paddingVertical: 6,
5028
- borderRadius: 6,
5029
- fontWeight: 500,
4993
+ borderColor: effectiveBorder,
5030
4994
  _hover: {
5031
- backgroundColor: 'rgba(0, 0, 0, 0.05)'
4995
+ backgroundColor: reversed ? "color-mix(in srgb, " + effectiveBorder + " 40%, transparent)" : "color-mix(in srgb, " + effectiveBorder + " 15%, transparent)"
5032
4996
  },
5033
4997
  _active: {
5034
- backgroundColor: 'rgba(0, 0, 0, 0.1)'
4998
+ backgroundColor: reversed ? 'rgba(255, 255, 255, 0.3)' : 'rgba(0, 0, 0, 0.15)'
5035
4999
  },
5036
5000
  _focusVisible: {
5037
5001
  outline: 'none',
5038
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
5002
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
5039
5003
  },
5040
5004
  transition: 'all 0.2s ease'
5041
5005
  }
5042
5006
  };
5043
5007
  };
5044
5008
 
5045
- var _excluded$d = ["shape", "size", "isDisabled", "onClick", "views", "mainTone", "tone", "borderMovingGradientColors", "borderMovingDuration", "content", "shadow"],
5046
- _excluded2$3 = ["to", "onClick", "views", "children", "size", "accentColor", "textColor", "getColor", "shadow"],
5047
- _excluded3$3 = ["variant", "to", "isDisabled", "isLoading", "isAuto", "isFilled", "isExternal", "shape", "shadow", "onClick", "views", "baseStyles", "sizeStyles", "iconPad", "resolvedTextColor", "content", "size"],
5048
- _excluded4$3 = ["variant", "size", "shape", "iconPosition", "loaderPosition", "backgroundColor", "color", "isAuto", "isFilled", "isDisabled", "isLoading", "isIconRounded", "icon", "children", "to", "isExternal", "shadow", "onClick", "views", "themeMode", "borderMovingDuration", "borderMovingGradientColors", "animatedStrokeAccentColor", "animatedStrokeTextColor"];
5009
+ var _excluded$d = ["asComponent", "isDisabled", "isLoading", "isWrapped", "borderRadius", "width", "height", "baseStyles", "sizeStyles", "iconPad", "mainTone", "resolvedTextColor", "children", "borderWidth"],
5010
+ _excluded2$3 = ["shape", "isDisabled", "onClick", "shadow", "borderWidth", "isAuto", "isFilled", "views", "children"],
5011
+ _excluded3$3 = ["variant", "animation", "to", "isDisabled", "isLoading", "isAuto", "isFilled", "isExternal", "shape", "shadow", "onClick", "views", "baseStyles", "sizeStyles", "iconPad", "resolvedTextColor", "content", "size", "mainTone", "tone", "borderMovingDuration", "borderMovingGradientColors", "animatedStrokeAccentColor", "animatedStrokeTextColor", "getColor"],
5012
+ _excluded4$3 = ["variant", "size", "shape", "iconPosition", "loaderPosition", "backgroundColor", "color", "scheme", "reversed", "isAuto", "isFilled", "isDisabled", "isLoading", "isIconRounded", "icon", "children", "to", "isExternal", "shadow", "onClick", "views", "borderMovingDuration", "borderMovingGradientColors", "animatedStrokeAccentColor", "animatedStrokeTextColor"];
5049
5013
  // --- Helper: Button Content ---
5050
5014
  // Renders the inner content: Loader, Icon, and Children.
5051
5015
  var ButtonContent = _ref => {
@@ -5069,176 +5033,95 @@
5069
5033
  justifyContent: "center"
5070
5034
  }, sizeStyles, iconPad, views == null ? void 0 : views.content), isLoading && loaderPosition === 'left' && (/*#__PURE__*/React__default.createElement(Loader, Object.assign({
5071
5035
  size: size === 'xs' || size === 'sm' ? 'sm' : 'md',
5072
- color: 'currentColor'
5036
+ color: resolvedTextColor
5073
5037
  }, views == null ? void 0 : views.loader))), icon && ['left', 'top'].includes(iconPosition) && !isLoading && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
5074
- color: 'currentColor'
5038
+ color: resolvedTextColor
5075
5039
  }, views == null ? void 0 : views.icon), icon)), children, icon && ['right', 'bottom'].includes(iconPosition) && !isLoading && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
5076
- color: 'currentColor'
5040
+ color: resolvedTextColor
5077
5041
  }, views == null ? void 0 : views.icon), icon)), isLoading && loaderPosition === 'right' && (/*#__PURE__*/React__default.createElement(Loader, Object.assign({
5078
5042
  size: size === 'xs' || size === 'sm' ? 'sm' : 'md',
5079
- color: 'currentColor'
5043
+ color: resolvedTextColor
5080
5044
  }, views == null ? void 0 : views.loader))));
5081
5045
  };
5082
- // --- Variant: Border Moving ---
5083
- var BorderMovingButton = _ref2 => {
5084
- var {
5085
- shape = 'rounded',
5086
- size = 'md',
5046
+ // --- Animation Logic moved to StandardButton ---
5047
+ // --- Variant: Standard Button ---
5048
+ // --- Helpers ---
5049
+ // Helper to calculate numeric border radius
5050
+ var getNumericBorderRadius = shape => {
5051
+ var shapeValue = ButtonShapes[shape];
5052
+ if (typeof shapeValue === 'number') return shapeValue;
5053
+ if (typeof shapeValue === 'string') return parseInt(shapeValue, 10) || 0;
5054
+ return 0;
5055
+ };
5056
+ // Common Inner Button Surface
5057
+ var InnerButton = _ref2 => {
5058
+ var {
5059
+ asComponent,
5087
5060
  isDisabled,
5088
- onClick,
5089
- views,
5061
+ isLoading,
5062
+ isWrapped = false,
5063
+ borderRadius,
5064
+ width,
5065
+ height,
5066
+ baseStyles,
5067
+ sizeStyles,
5068
+ iconPad,
5090
5069
  mainTone,
5091
- tone,
5092
- borderMovingGradientColors,
5093
- borderMovingDuration,
5094
- content,
5095
- shadow
5070
+ resolvedTextColor,
5071
+ children,
5072
+ borderWidth = 0
5096
5073
  } = _ref2,
5097
5074
  props = _objectWithoutPropertiesLoose(_ref2, _excluded$d);
5098
- var sizeStyles = ButtonSizes[size];
5099
- var borderWidth = 3;
5100
- var numericWidth = typeof sizeStyles.width === 'number' ? sizeStyles.width : 300;
5101
- var numericHeight = typeof sizeStyles.height === 'number' ? sizeStyles.height : 64;
5102
- var numericBorderRadius = (() => {
5103
- var shapeValue = ButtonShapes[shape];
5104
- if (typeof shapeValue === 'number') {
5105
- return shapeValue;
5106
- }
5107
- if (typeof shapeValue === 'string') {
5108
- return parseInt(shapeValue, 10) || 50;
5109
- }
5110
- return 50;
5111
- })();
5112
- var containerBg = mainTone;
5113
- // Use high contrast text color for this variant
5114
- var borderMovingTextColor = tone === 'light' ? '#000000' : '#FFFFFF';
5115
- // Create gradient string for border animation
5116
- var gradientColors = borderMovingGradientColors.join(', ');
5117
- // Animation sequence for the moving border effect
5118
- var borderAnimation = {
5119
- from: {
5120
- backgroundPosition: '0% 50%'
5121
- },
5122
- to: {
5123
- backgroundPosition: '200% 50%'
5124
- },
5125
- duration: borderMovingDuration + "s",
5126
- timingFunction: 'linear',
5127
- iterationCount: 'infinite'
5128
- };
5129
5075
  return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({
5130
- position: "relative",
5131
- display: "inline-flex",
5076
+ as: asComponent,
5077
+ disabled: Boolean(isDisabled || isLoading),
5078
+ display: isWrapped ? 'flex' : 'inline-flex',
5132
5079
  alignItems: "center",
5133
5080
  justifyContent: "center",
5134
- borderRadius: ButtonShapes[shape],
5135
- cursor: isDisabled ? 'default' : 'pointer',
5136
- onClick: onClick,
5137
- boxShadow: shadow,
5138
- padding: borderWidth,
5139
- background: "linear-gradient(90deg, " + borderMovingGradientColors[0] + ", " + borderMovingGradientColors[1] + ", " + borderMovingGradientColors[2] + ", " + borderMovingGradientColors[0] + ")",
5140
- backgroundSize: "200% 100%",
5141
- animate: borderAnimation
5142
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, {
5143
- display: "flex",
5144
- alignItems: "center",
5145
- justifyContent: "center",
5146
- backgroundColor: containerBg,
5147
- borderRadius: Math.max(0, numericBorderRadius - borderWidth),
5148
- width: "100%",
5149
- height: "100%",
5150
- minWidth: numericWidth - borderWidth * 2,
5151
- minHeight: numericHeight - borderWidth * 2,
5152
- color: borderMovingTextColor,
5153
- fontSize: 14,
5154
- cursor: "pointer"
5155
- }, content));
5081
+ borderRadius: borderRadius,
5082
+ width: width,
5083
+ height: height
5084
+ }, baseStyles, sizeStyles, iconPad, {
5085
+ // Ensure background is solid for wrapped buttons if baseStyles doesn't provide it
5086
+ backgroundColor: (baseStyles == null ? void 0 : baseStyles.backgroundColor) || (isWrapped ? mainTone : undefined),
5087
+ color: resolvedTextColor,
5088
+ borderWidth: isWrapped ? 0 : undefined,
5089
+ cursor: isDisabled ? 'default' : 'pointer'
5090
+ }, props), children);
5156
5091
  };
5157
- // --- Variant: Animated Stroke ---
5158
- var AnimatedStrokeButton = _ref3 => {
5092
+ // Common Header for Border Animations
5093
+ var BorderWrapper = _ref3 => {
5159
5094
  var {
5160
- to,
5095
+ shape,
5096
+ isDisabled,
5161
5097
  onClick,
5098
+ shadow,
5099
+ borderWidth,
5100
+ isAuto,
5101
+ isFilled,
5162
5102
  views,
5163
- children,
5164
- size = 'md',
5165
- accentColor,
5166
- textColor,
5167
- getColor,
5168
- shadow
5103
+ children
5169
5104
  } = _ref3,
5170
5105
  props = _objectWithoutPropertiesLoose(_ref3, _excluded2$3);
5171
- var resolvedAccentColor = getColor(accentColor);
5172
- var resolvedTextColor = getColor(textColor);
5173
- var sizeStyles = ButtonSizes[size];
5174
- var numericWidth = typeof sizeStyles.width === 'number' ? sizeStyles.width : 300;
5175
- var numericHeight = typeof sizeStyles.height === 'number' ? sizeStyles.height : 60;
5176
- var strokeAnimation = {
5177
- from: {
5178
- strokeWidth: '8px',
5179
- strokeDasharray: '0 500',
5180
- strokeDashoffset: -454
5181
- },
5182
- to: {
5183
- strokeWidth: '3px',
5184
- strokeDasharray: '760',
5185
- strokeDashoffset: 0
5186
- },
5187
- duration: '0.9s',
5188
- timingFunction: 'ease-in',
5189
- fillMode: 'forwards'
5190
- };
5191
5106
  return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({
5192
- as: to ? 'a' : 'div',
5193
- href: to ? to : undefined,
5194
- onClick: onClick,
5195
- display: "inline-block",
5196
- maxWidth: "20rem",
5197
- margin: "0 auto",
5198
- textAlign: "center",
5199
- textDecoration: "none",
5107
+ as: "div",
5200
5108
  position: "relative",
5201
- cursor: "pointer",
5202
- boxShadow: shadow
5203
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, {
5204
- as: "svg",
5205
- display: "block",
5206
- height: numericHeight,
5207
- width: numericWidth,
5208
- xmlns: "http://www.w3.org/2000/svg"
5209
- }, /*#__PURE__*/React__default.createElement(appStudio.View, {
5210
- as: "rect",
5211
- height: numericHeight,
5212
- width: numericWidth,
5213
- fill: "transparent",
5214
- stroke: resolvedAccentColor,
5215
- strokeWidth: "8px",
5216
- strokeDasharray: "0 500",
5217
- strokeDashoffset: -454,
5218
- on: {
5219
- hover: {
5220
- animate: strokeAnimation
5221
- }
5222
- }
5223
- })), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
5224
- position: "absolute",
5225
- top: 0,
5226
- right: 0,
5227
- bottom: 0,
5228
- left: 0,
5229
- display: "flex",
5109
+ display: "inline-flex",
5230
5110
  alignItems: "center",
5231
5111
  justifyContent: "center",
5232
- textAlign: "center",
5233
- pointerEvents: "none",
5234
- userSelect: "none",
5235
- color: resolvedTextColor
5236
- }, sizeStyles), children));
5112
+ borderRadius: ButtonShapes[shape],
5113
+ cursor: isDisabled ? 'default' : 'pointer',
5114
+ onClick: onClick,
5115
+ boxShadow: shadow,
5116
+ padding: borderWidth,
5117
+ width: isAuto ? 'fit-content' : isFilled ? '100%' : undefined
5118
+ }, views == null ? void 0 : views.container, props), children);
5237
5119
  };
5238
5120
  // --- Variant: Standard Button ---
5239
5121
  var StandardButton = _ref4 => {
5240
5122
  var {
5241
5123
  variant,
5124
+ animation,
5242
5125
  to,
5243
5126
  isDisabled,
5244
5127
  isLoading,
@@ -5252,9 +5135,220 @@
5252
5135
  baseStyles,
5253
5136
  sizeStyles,
5254
5137
  iconPad,
5255
- content // Destructure size to avoid passing it to Element
5138
+ resolvedTextColor,
5139
+ content,
5140
+ mainTone,
5141
+ borderMovingDuration = 2,
5142
+ borderMovingGradientColors = ['#705CFF', '#FF5C97', '#FFC75C'],
5143
+ animatedStrokeAccentColor = '#705CFF',
5144
+ animatedStrokeTextColor = '#333333',
5145
+ getColor = c => c
5256
5146
  } = _ref4,
5257
5147
  props = _objectWithoutPropertiesLoose(_ref4, _excluded3$3);
5148
+ // --- Common Helpers ---
5149
+ var numericBorderRadius = getNumericBorderRadius(shape);
5150
+ var linkOrContent = to ? (/*#__PURE__*/React__default.createElement(Link, Object.assign({
5151
+ to: to,
5152
+ isExternal: isExternal,
5153
+ color: "currentColor",
5154
+ textDecoration: "inherit",
5155
+ _hover: {
5156
+ color: 'currentColor'
5157
+ }
5158
+ }, views == null ? void 0 : views.link), content)) : content;
5159
+ var innerProps = {
5160
+ isDisabled,
5161
+ isLoading,
5162
+ baseStyles,
5163
+ sizeStyles,
5164
+ iconPad,
5165
+ resolvedTextColor,
5166
+ mainTone,
5167
+ children: linkOrContent
5168
+ };
5169
+ // --- Animation: Border Moving ---
5170
+ if (animation === 'borderMoving' && borderMovingGradientColors) {
5171
+ var borderWidth = 3;
5172
+ var borderAnimation = {
5173
+ from: {
5174
+ backgroundPosition: '0% 50%'
5175
+ },
5176
+ to: {
5177
+ backgroundPosition: '200% 50%'
5178
+ },
5179
+ duration: borderMovingDuration + "s",
5180
+ timingFunction: 'linear',
5181
+ iterationCount: 'infinite'
5182
+ };
5183
+ return /*#__PURE__*/React__default.createElement(BorderWrapper, Object.assign({
5184
+ shape: shape,
5185
+ isDisabled: isDisabled,
5186
+ onClick: onClick,
5187
+ shadow: shadow,
5188
+ borderWidth: borderWidth,
5189
+ isAuto: isAuto,
5190
+ isFilled: isFilled,
5191
+ views: views,
5192
+ background: "linear-gradient(90deg, " + borderMovingGradientColors[0] + ", " + borderMovingGradientColors[1] + ", " + borderMovingGradientColors[2] + ", " + borderMovingGradientColors[0] + ")",
5193
+ backgroundSize: "200% 100%",
5194
+ animate: borderAnimation
5195
+ }, props), /*#__PURE__*/React__default.createElement(InnerButton, Object.assign({
5196
+ asComponent: to ? 'div' : 'button',
5197
+ isWrapped: true,
5198
+ borderRadius: Math.max(0, numericBorderRadius - borderWidth),
5199
+ width: "100%",
5200
+ height: "100%"
5201
+ }, innerProps)));
5202
+ }
5203
+ // --- Animation: Animated Stroke ---
5204
+ if (animation === 'animatedStroke') {
5205
+ var _views$container;
5206
+ var resolvedAccentColor = getColor(animatedStrokeAccentColor);
5207
+ var resolvedStrokeTextColor = getColor(animatedStrokeTextColor);
5208
+ var strokePathLength = 1000;
5209
+ var strokeAnimation = {
5210
+ from: {
5211
+ strokeWidth: '8px',
5212
+ strokeDasharray: "0 " + strokePathLength,
5213
+ strokeDashoffset: -Math.round(strokePathLength * 0.63)
5214
+ },
5215
+ to: {
5216
+ strokeWidth: '3px',
5217
+ strokeDasharray: "" + strokePathLength,
5218
+ strokeDashoffset: 0
5219
+ },
5220
+ duration: '0.9s',
5221
+ timingFunction: 'ease-in',
5222
+ fillMode: 'forwards'
5223
+ };
5224
+ var mergedClassName = ['group', views == null || (_views$container = views.container) == null ? void 0 : _views$container.className, props == null ? void 0 : props.className].filter(Boolean).join(' ');
5225
+ return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({
5226
+ as: to ? 'div' : 'button',
5227
+ type: to ? undefined : 'button',
5228
+ disabled: Boolean(!to && (isDisabled || isLoading)),
5229
+ onClick: onClick,
5230
+ position: "relative",
5231
+ display: "inline-flex",
5232
+ alignItems: "center",
5233
+ justifyContent: "center",
5234
+ width: isAuto ? 'fit-content' : isFilled ? '100%' : undefined,
5235
+ borderRadius: ButtonShapes[shape],
5236
+ boxShadow: shadow,
5237
+ transition: "all 0.2s ease",
5238
+ cursor: isDisabled ? 'default' : 'pointer',
5239
+ color: resolvedStrokeTextColor,
5240
+ backgroundColor: "transparent",
5241
+ borderWidth: 0
5242
+ }, views == null ? void 0 : views.container, props, {
5243
+ className: mergedClassName
5244
+ }), /*#__PURE__*/React__default.createElement(appStudio.View, {
5245
+ as: "svg",
5246
+ position: "absolute",
5247
+ top: 0,
5248
+ right: 0,
5249
+ bottom: 0,
5250
+ left: 0,
5251
+ width: "100%",
5252
+ height: "100%",
5253
+ xmlns: "http://www.w3.org/2000/svg",
5254
+ pointerEvents: "none",
5255
+ zIndex: 1,
5256
+ "aria-hidden": "true"
5257
+ }, /*#__PURE__*/React__default.createElement(appStudio.View, {
5258
+ as: "rect",
5259
+ x: "0",
5260
+ y: "0",
5261
+ height: "100%",
5262
+ width: "100%",
5263
+ rx: numericBorderRadius,
5264
+ ry: numericBorderRadius,
5265
+ fill: "transparent",
5266
+ stroke: resolvedAccentColor,
5267
+ strokeWidth: "8px",
5268
+ strokeDasharray: "0 " + strokePathLength,
5269
+ strokeDashoffset: -Math.round(strokePathLength * 0.63),
5270
+ pathLength: strokePathLength,
5271
+ on: {
5272
+ groupHover: {
5273
+ animate: strokeAnimation
5274
+ }
5275
+ }
5276
+ })), /*#__PURE__*/React__default.createElement(appStudio.View, {
5277
+ position: "relative",
5278
+ zIndex: 0
5279
+ }, linkOrContent));
5280
+ }
5281
+ // --- Animation: Border Reveal ---
5282
+ if (animation === 'borderReveal') {
5283
+ var _borderWidth = 3;
5284
+ // Use the first color from gradient colors or fall back to mainTone
5285
+ var activeColor = (borderMovingGradientColors == null ? void 0 : borderMovingGradientColors[0]) || mainTone || '#000000';
5286
+ // Sides duration
5287
+ // The default duration (2s) is too slow for a hover interaction.
5288
+ // We scale it by 0.25 to make it responsive (0.5s total).
5289
+ var effectiveDuration = borderMovingDuration * 0.75;
5290
+ var sideDuration = effectiveDuration / 4;
5291
+ // Gradients for each side (color 50%, transparent 50%)
5292
+ var topGrad = "linear-gradient(90deg, " + activeColor + " 50%, transparent 50%)";
5293
+ var rightGrad = "linear-gradient(180deg, " + activeColor + " 50%, transparent 50%)";
5294
+ var bottomGrad = "linear-gradient(270deg, " + activeColor + " 50%, transparent 50%)";
5295
+ var leftGrad = "linear-gradient(0deg, " + activeColor + " 50%, transparent 50%)";
5296
+ // Coordinates:
5297
+ // Top (L->R): 100% 0 -> 0 0
5298
+ // Right (T->B): 100% 100% -> 100% 0
5299
+ // Bottom (R->L): 0 100% -> 100% 100%
5300
+ // Left (B->T): 0 0 -> 0 100%
5301
+ var bgPosStart = "100% 0, 100% 100%, 0 100%, 0 0";
5302
+ var bgPosEnd = "0 0, 100% 0, 100% 100%, 0 100%";
5303
+ // Delays:
5304
+ // Enter (Forward): Top(0), Right(1), Bottom(2), Left(3)
5305
+ var delayEnter = "0s, " + sideDuration + "s, " + sideDuration * 2 + "s, " + sideDuration * 2 + "s";
5306
+ // Exit (Reverse): Top(3), Right(2), Bottom(1), Left(0)
5307
+ var delayExit = sideDuration * 2 + "s, " + sideDuration * 2 + "s, " + sideDuration + "s, 0s";
5308
+ // Use slightly larger gradient size to overlap with button content (avoid gaps)
5309
+ var gradientSize = _borderWidth + 1;
5310
+ return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({
5311
+ as: "div",
5312
+ position: "relative",
5313
+ display: "inline-flex",
5314
+ alignItems: "center",
5315
+ justifyContent: "center",
5316
+ borderRadius: ButtonShapes[shape],
5317
+ cursor: isDisabled ? 'default' : 'pointer',
5318
+ onClick: onClick,
5319
+ boxShadow: shadow,
5320
+ padding: _borderWidth,
5321
+ background: "\n " + topGrad + " no-repeat,\n " + rightGrad + " no-repeat,\n " + bottomGrad + " no-repeat,\n " + leftGrad + " no-repeat\n ",
5322
+ backgroundSize: "200% " + gradientSize + "px, " + gradientSize + "px 200%, 200% " + gradientSize + "px, " + gradientSize + "px 200%",
5323
+ // Default State (Hidden)
5324
+ backgroundPosition: bgPosStart,
5325
+ transitionProperty: "background-position",
5326
+ transitionDuration: sideDuration + "s",
5327
+ transitionTimingFunction: "linear",
5328
+ transitionDelay: delayExit,
5329
+ // Hover State (Visible)
5330
+ _hover: {
5331
+ backgroundPosition: bgPosEnd,
5332
+ transitionDelay: delayEnter
5333
+ },
5334
+ width: isAuto ? 'fit-content' : isFilled ? '100%' : undefined
5335
+ }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
5336
+ as: to ? 'div' : 'button',
5337
+ disabled: Boolean(isDisabled || isLoading),
5338
+ display: "flex",
5339
+ alignItems: "center",
5340
+ justifyContent: "center",
5341
+ borderRadius: Math.max(0, numericBorderRadius - _borderWidth),
5342
+ width: "100%",
5343
+ height: "100%"
5344
+ }, baseStyles, sizeStyles, iconPad, {
5345
+ backgroundColor: (baseStyles == null ? void 0 : baseStyles.backgroundColor) || mainTone,
5346
+ color: resolvedTextColor,
5347
+ borderWidth: 0,
5348
+ cursor: isDisabled ? 'default' : 'pointer'
5349
+ }), linkOrContent));
5350
+ }
5351
+ // --- Default: Standard Button ---
5258
5352
  return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({
5259
5353
  as: variant === 'link' && to ? 'div' : 'button',
5260
5354
  type: variant === 'link' && to ? undefined : 'button',
@@ -5270,19 +5364,12 @@
5270
5364
  transition: "all 0.2s ease",
5271
5365
  cursor: isDisabled ? 'default' : 'pointer',
5272
5366
  onClick: onClick
5273
- }, baseStyles, views == null ? void 0 : views.container, props), to ? (/*#__PURE__*/React__default.createElement(Link, Object.assign({
5274
- to: to,
5275
- isExternal: isExternal,
5276
- color: "currentColor",
5277
- textDecoration: "inherit",
5278
- _hover: {
5279
- color: 'currentColor'
5280
- }
5281
- }, views == null ? void 0 : views.link), content)) : content);
5367
+ }, baseStyles, views == null ? void 0 : views.container, props), linkOrContent);
5282
5368
  };
5283
5369
  // --- Main Component ---
5370
+ // --- Main Component ---
5284
5371
  var ButtonView = _ref5 => {
5285
- var _ref6, _base$color;
5372
+ var _ref6, _ref7, _base$color;
5286
5373
  var {
5287
5374
  /* behaviour */
5288
5375
  variant = 'filled',
@@ -5294,6 +5381,10 @@
5294
5381
  // primary candidate for main color
5295
5382
  color,
5296
5383
  // 2nd candidate for main color (NOT text‑color)
5384
+ scheme,
5385
+ // New scheme prop
5386
+ reversed = false,
5387
+ // New reversed prop
5297
5388
  isAuto = true,
5298
5389
  isFilled,
5299
5390
  isDisabled,
@@ -5309,7 +5400,6 @@
5309
5400
  shadow,
5310
5401
  onClick,
5311
5402
  views = {},
5312
- themeMode: elementMode,
5313
5403
  /* effect props */
5314
5404
  borderMovingDuration = 2,
5315
5405
  borderMovingGradientColors = ['#705CFF', '#FF5C97', '#FFC75C'],
@@ -5319,20 +5409,22 @@
5319
5409
  props = _objectWithoutPropertiesLoose(_ref5, _excluded4$3);
5320
5410
  /* theme helpers */
5321
5411
  var {
5322
- getColor,
5412
+ getColorHex,
5323
5413
  themeMode
5324
5414
  } = appStudio.useTheme();
5325
- var mode = elementMode != null ? elementMode : themeMode;
5326
5415
  /* MAIN COLOR – determines the entire palette */
5327
- var mainColorKey = (_ref6 = backgroundColor != null ? backgroundColor : color) != null ? _ref6 : 'theme.primary';
5328
- var mainTone = getColor(isDisabled ? 'theme.disabled' : mainColorKey, {
5329
- themeMode: mode
5330
- });
5416
+ var mainColorKey = (_ref6 = (_ref7 = backgroundColor != null ? backgroundColor : color) != null ? _ref7 : scheme) != null ? _ref6 : 'theme.primary';
5417
+ var mainTone = getColorHex(isDisabled ? 'theme.disabled' : mainColorKey);
5331
5418
  var tone = contrast(mainTone);
5332
5419
  /* text color with mixBlendMode for maximum visibility */
5333
- var textColor = tone === 'light' ? '#000000' : '#FFFFFF';
5420
+ var textColor;
5421
+ if (tone === 'light') {
5422
+ textColor = '#000000';
5423
+ } else {
5424
+ textColor = '#FFFFFF';
5425
+ }
5334
5426
  /* variant palette */
5335
- var palette = React.useMemo(() => getButtonVariants(mainTone, tone === 'light'), [mainTone, tone, mode]);
5427
+ var palette = React.useMemo(() => getButtonVariants(mainTone, tone === 'light', reversed), [mainTone, tone, reversed]);
5336
5428
  var base = palette[variant];
5337
5429
  var resolvedTextColor = (_base$color = base == null ? void 0 : base.color) != null ? _base$color : textColor;
5338
5430
  // Render content logic safely
@@ -5346,39 +5438,12 @@
5346
5438
  isIconRounded: isIconRounded,
5347
5439
  views: views
5348
5440
  }, children);
5349
- // Dispatch to the correct variant component
5350
- if (variant === 'borderMoving') {
5351
- return /*#__PURE__*/React__default.createElement(BorderMovingButton, Object.assign({
5352
- variant: variant,
5353
- shape: shape,
5354
- size: size,
5355
- isDisabled: isDisabled,
5356
- onClick: onClick,
5357
- views: views,
5358
- mainTone: mainTone,
5359
- tone: tone,
5360
- borderMovingGradientColors: borderMovingGradientColors,
5361
- borderMovingDuration: borderMovingDuration,
5362
- content: content
5363
- }, props));
5364
- }
5365
- if (variant === 'animatedStroke') {
5366
- return /*#__PURE__*/React__default.createElement(AnimatedStrokeButton, Object.assign({
5367
- variant: variant,
5368
- to: to,
5369
- onClick: onClick,
5370
- views: views,
5371
- size: size,
5372
- accentColor: animatedStrokeAccentColor,
5373
- textColor: animatedStrokeTextColor,
5374
- getColor: getColor
5375
- }, props), children);
5376
- }
5377
5441
  // Standard variants (filled, outline, ghost, link)
5378
5442
  var sizeStyles = ButtonSizes[size];
5379
5443
  var iconPad = isIconRounded ? IconSizes$1[size] : {};
5380
5444
  return /*#__PURE__*/React__default.createElement(StandardButton, Object.assign({
5381
5445
  variant: variant,
5446
+ animation: props.animation,
5382
5447
  to: to,
5383
5448
  isDisabled: isDisabled,
5384
5449
  isLoading: isLoading,
@@ -5394,7 +5459,14 @@
5394
5459
  iconPad: iconPad,
5395
5460
  resolvedTextColor: resolvedTextColor,
5396
5461
  content: content,
5397
- size: size
5462
+ size: size,
5463
+ mainTone: mainTone,
5464
+ tone: tone,
5465
+ borderMovingDuration: borderMovingDuration,
5466
+ borderMovingGradientColors: borderMovingGradientColors,
5467
+ animatedStrokeAccentColor: animatedStrokeAccentColor,
5468
+ animatedStrokeTextColor: animatedStrokeTextColor,
5469
+ getColor: getColorHex
5398
5470
  }, props));
5399
5471
  };
5400
5472
 
@@ -9604,7 +9676,7 @@
9604
9676
  var isSelected = value === option.value;
9605
9677
  var borderColor = getColor('color.gray.200');
9606
9678
  var textColor = getColor('color.gray.500');
9607
- var bgColor = 'transparent';
9679
+ var backgroundColor = 'transparent';
9608
9680
  if (isSelected) {
9609
9681
  if (option.color) {
9610
9682
  // We need a way to get related colors (50, 500, 700 etc) from a base color if we want full fidelity.
@@ -9615,13 +9687,13 @@
9615
9687
  // Simplification: if color provided, use it for border/text.
9616
9688
  // Background is hard to derive without more specific props.
9617
9689
  // Let's try to use a very light opacity of the color for background.
9618
- bgColor = 'rgba(0,0,0,0.05)'; // Generic active background
9690
+ backgroundColor = 'rgba(0,0,0,0.05)'; // Generic active background
9619
9691
  } else {
9620
9692
  // Default active style
9621
9693
  var primary = getColor('theme.primary');
9622
9694
  borderColor = primary;
9623
9695
  textColor = primary;
9624
- bgColor = 'color.gray.50';
9696
+ backgroundColor = 'color.gray.50';
9625
9697
  }
9626
9698
  // Specific overrides based on user request "ComplexitySelector" style
9627
9699
  // If the values match 'High', 'Medium', 'Low' we can hardcode for *demo* fidelity if generic logic fails.
@@ -9631,12 +9703,12 @@
9631
9703
  // Fallback for customized options
9632
9704
  borderColor = getColor(option.color);
9633
9705
  textColor = getColor(option.color);
9634
- bgColor = 'transparent';
9706
+ backgroundColor = 'transparent';
9635
9707
  } else {
9636
9708
  // Default fallback
9637
9709
  borderColor = getColor('theme.primary');
9638
9710
  textColor = getColor('theme.primary');
9639
- bgColor = 'transparent';
9711
+ backgroundColor = 'transparent';
9640
9712
  }
9641
9713
  }
9642
9714
  return /*#__PURE__*/React__default.createElement(Button, Object.assign({
@@ -9656,7 +9728,7 @@
9656
9728
  borderBottom: "1px solid " + (isSelected ? borderColor : getColor('color.gray.200')),
9657
9729
  borderLeft: "1px solid " + (isSelected ? borderColor : getColor('color.gray.200')),
9658
9730
  borderRight: index === arr.length - 1 || isSelected ? "1px solid " + (isSelected ? borderColor : getColor('color.gray.200')) : 'none',
9659
- backgroundColor: bgColor,
9731
+ backgroundColor: backgroundColor,
9660
9732
  color: textColor,
9661
9733
  borderRadius: index === 0 ? '6px 0 0 6px' : index === arr.length - 1 ? '0 6px 6px 0' : '0',
9662
9734
  zIndex: isSelected ? 1 : 0,
@@ -16585,16 +16657,16 @@
16585
16657
  } = _ref,
16586
16658
  props = _objectWithoutPropertiesLoose(_ref, _excluded$S);
16587
16659
  var {
16588
- getColor,
16660
+ getColorHex,
16589
16661
  themeMode
16590
16662
  } = appStudio.useTheme();
16591
- var themeColor = getColor(backgroundColor, {
16663
+ var themeColor = getColorHex(backgroundColor, {
16592
16664
  themeMode: elementMode || themeMode
16593
16665
  });
16594
- var disabledColor = getColor('theme.disabled', {
16666
+ var disabledColor = getColorHex('theme.disabled', {
16595
16667
  themeMode: elementMode || themeMode
16596
16668
  });
16597
- var trackColor = getColor(SliderVariants[variant].backgroundColor, {
16669
+ var trackColor = getColorHex(SliderVariants[variant].backgroundColor, {
16598
16670
  themeMode: elementMode || themeMode
16599
16671
  });
16600
16672
  var isVertical = orientation === 'vertical';
@@ -16766,7 +16838,7 @@
16766
16838
  height: thumbSize + "px",
16767
16839
  borderRadius: "50%",
16768
16840
  backgroundColor: isDisabled ? disabledColor : themeColor,
16769
- border: "2px solid " + getColor('color.white'),
16841
+ border: "2px solid color.white",
16770
16842
  boxShadow: "0 1px 3px rgba(0, 0, 0, 0.2)",
16771
16843
  cursor: isDisabled ? 'not-allowed' : 'grab',
16772
16844
  transform: isVertical ? 'translateX(-50%)' : 'translateY(-50%)',
@@ -16785,8 +16857,8 @@
16785
16857
  }, views == null ? void 0 : views.thumb), showTooltip && (isHovered || isDragging) && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
16786
16858
  position: "absolute",
16787
16859
  padding: "4px 8px",
16788
- backgroundColor: getColor('color.black'),
16789
- color: getColor('color.white'),
16860
+ backgroundColor: 'color.black',
16861
+ color: 'color.white',
16790
16862
  borderRadius: "4px",
16791
16863
  whiteSpace: "nowrap",
16792
16864
  zIndex: 3
@@ -19197,7 +19269,7 @@
19197
19269
  })
19198
19270
  };
19199
19271
 
19200
- var _excluded$Z = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "as"];
19272
+ var _excluded$Z = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "textComponent", "as"];
19201
19273
  /**
19202
19274
  * A component that creates a typewriter effect for text
19203
19275
  */
@@ -19209,9 +19281,11 @@
19209
19281
  onComplete,
19210
19282
  showCursor = true,
19211
19283
  cursorColor = 'currentColor',
19212
- textStyle
19284
+ textStyle,
19285
+ textComponent
19213
19286
  } = _ref,
19214
19287
  props = _objectWithoutPropertiesLoose(_ref, _excluded$Z);
19288
+ var TextComponent = textComponent || appStudio.Text;
19215
19289
  // Convert text to array if it's a string
19216
19290
  var textArray = Array.isArray(text) ? text : [text];
19217
19291
  // State for the currently displayed text
@@ -19264,7 +19338,7 @@
19264
19338
  }, [textArray, currentTextIndex, charIndex, isComplete, onComplete, pauseTime, typingSpeed]);
19265
19339
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, displayedText.map((text, index) => (/*#__PURE__*/React__default.createElement(React__default.Fragment, {
19266
19340
  key: index
19267
- }, text, showCursor && index === currentTextIndex && !isComplete && (/*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
19341
+ }, text, showCursor && index === currentTextIndex && !isComplete && (/*#__PURE__*/React__default.createElement(TextComponent, Object.assign({
19268
19342
  as: "span",
19269
19343
  display: "inline-block",
19270
19344
  width: "0.1em",
@@ -19277,7 +19351,7 @@
19277
19351
  }, textStyle))))))));
19278
19352
  };
19279
19353
 
19280
- var _excluded$_ = ["text", "duration", "direction", "stagger", "sequential", "textStyle", "as", "wordProps"],
19354
+ var _excluded$_ = ["text", "duration", "direction", "stagger", "sequential", "textStyle", "as", "wordProps", "textComponent"],
19281
19355
  _excluded2$g = ["style"];
19282
19356
  var SlideEffect = _ref => {
19283
19357
  var {
@@ -19287,12 +19361,14 @@
19287
19361
  stagger = 50,
19288
19362
  sequential = false,
19289
19363
  textStyle,
19290
- wordProps
19364
+ wordProps,
19365
+ textComponent
19291
19366
  } = _ref,
19292
19367
  props = _objectWithoutPropertiesLoose(_ref, _excluded$_);
19293
19368
  var [displayedText, setDisplayedText] = React.useState(text);
19294
19369
  var [phase, setPhase] = React.useState('entering');
19295
19370
  var [animKey, setAnimKey] = React.useState(0);
19371
+ var TextComponent = textComponent || appStudio.Text;
19296
19372
  var pendingTextRef = React.useRef(null);
19297
19373
  var timeoutRef = React.useRef(null);
19298
19374
  // Handle text changes
@@ -19446,7 +19522,7 @@
19446
19522
  transform: phase === 'visible' ? 'translateY(0)' : undefined,
19447
19523
  opacity: phase === 'visible' ? 1 : undefined
19448
19524
  });
19449
- return /*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
19525
+ return /*#__PURE__*/React__default.createElement(TextComponent, Object.assign({
19450
19526
  key: animKey + "-" + index,
19451
19527
  as: "span",
19452
19528
  animate: wordAnimation
@@ -19454,7 +19530,7 @@
19454
19530
  })));
19455
19531
  };
19456
19532
 
19457
- var _excluded$$ = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration", "highlightSlide", "highlightSlideDuration", "highlightSlideStagger", "highlightSlideSequential", "themeMode"];
19533
+ var _excluded$$ = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration", "highlightSlide", "highlightSlideDuration", "highlightSlideStagger", "highlightSlideSequential", "themeMode", "textComponent"];
19458
19534
  function escapeRegExp(string) {
19459
19535
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
19460
19536
  }
@@ -19478,7 +19554,8 @@
19478
19554
  highlightSlideDuration = 500,
19479
19555
  highlightSlideStagger = 50,
19480
19556
  highlightSlideSequential = true,
19481
- themeMode: elementMode
19557
+ themeMode: elementMode,
19558
+ textComponent
19482
19559
  } = _ref,
19483
19560
  props = _objectWithoutPropertiesLoose(_ref, _excluded$$);
19484
19561
  var {
@@ -19532,6 +19609,7 @@
19532
19609
  highlightSlideStagger,
19533
19610
  highlightSlideSequential
19534
19611
  }, props));
19612
+ var TextComponent = textComponent || appStudio.Text;
19535
19613
  // Common style calculations
19536
19614
  var useResponsive = responsive && !props.media;
19537
19615
  var fontSize = TitleSizes[size];
@@ -19580,8 +19658,8 @@
19580
19658
  return /*#__PURE__*/React__default.createElement(TypewriterEffect, Object.assign({
19581
19659
  text: content,
19582
19660
  typingSpeed: Math.max(30, highlightTypewriterDuration / (content.length * 10)),
19583
- showCursor: true,
19584
- cursorColor: "currentColor"
19661
+ cursorColor: "currentColor",
19662
+ textComponent: TextComponent
19585
19663
  }, highlightProps));
19586
19664
  }
19587
19665
  if (highlightSlide) {
@@ -19593,7 +19671,8 @@
19593
19671
  direction: "up",
19594
19672
  fontSize: useResponsive ? undefined : fontSize,
19595
19673
  fontWeight: useResponsive ? responsiveStyles == null ? void 0 : responsiveStyles.fontWeight : 'bold',
19596
- wordProps: highlightProps
19674
+ wordProps: highlightProps,
19675
+ textComponent: TextComponent
19597
19676
  });
19598
19677
  }
19599
19678
  return content;
@@ -19613,7 +19692,7 @@
19613
19692
  lastIndex = match.index + match[0].length;
19614
19693
  }
19615
19694
  if (lastIndex < text.length) parts.push(text.substring(lastIndex));
19616
- return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), parts.map((part, idx) => typeof part === 'string' ? part : (/*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
19695
+ return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), parts.map((part, idx) => typeof part === 'string' ? part : (/*#__PURE__*/React__default.createElement(TextComponent, Object.assign({
19617
19696
  key: "highlight-" + idx,
19618
19697
  as: "span",
19619
19698
  display: "inline",
@@ -19623,7 +19702,7 @@
19623
19702
  }
19624
19703
  // Case 2: Has highlight style but no highlight target - apply style to entire title
19625
19704
  if (highlightStyle && !activeHighlightTarget) {
19626
- return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
19705
+ return /*#__PURE__*/React__default.createElement(appStudio.Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(TextComponent, Object.assign({
19627
19706
  as: "span",
19628
19707
  fontSize: fontSize,
19629
19708
  display: "inline",
@@ -19631,7 +19710,7 @@
19631
19710
  }, !highlightSlide ? highlightProps : {}, views == null ? void 0 : views.highlight), renderHighlightedContent(text)));
19632
19711
  }
19633
19712
  // Case 3: Default - no highlighting
19634
- return /*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), text);
19713
+ return /*#__PURE__*/React__default.createElement(TextComponent, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), text);
19635
19714
  };
19636
19715
 
19637
19716
  /**
@@ -26164,13 +26243,13 @@
26164
26243
  fontWeight: "600" // Semi-bold for better readability
26165
26244
  ,
26166
26245
  color: Theme[variant].content.color,
26167
- bgColor: Theme[variant].container.backgroundColor
26246
+ backgroundColor: Theme[variant].container.backgroundColor
26168
26247
  }, views == null ? void 0 : views.title), title), description && (/*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
26169
26248
  size: "sm",
26170
26249
  color: Theme[variant].content.color,
26171
26250
  fontWeight: "400" // Regular weight
26172
26251
  ,
26173
- bgColor: Theme[variant].container.backgroundColor
26252
+ backgroundColor: Theme[variant].container.backgroundColor
26174
26253
  }, views == null ? void 0 : views.description), description)), action && actionText && (/*#__PURE__*/React__default.createElement(appStudio.Text, Object.assign({
26175
26254
  size: "sm",
26176
26255
  fontWeight: "600" // Semi-bold for better readability
@@ -26179,7 +26258,7 @@
26179
26258
  ,
26180
26259
  cursor: "pointer",
26181
26260
  color: Theme[variant].content.color,
26182
- bgColor: Theme[variant].container.backgroundColor,
26261
+ backgroundColor: Theme[variant].container.backgroundColor,
26183
26262
  onClick: e => {
26184
26263
  e.stopPropagation();
26185
26264
  action();