@app-studio/web 0.9.62 → 0.9.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/web.esm.js CHANGED
@@ -4790,6 +4790,11 @@ var LoaderView = _ref4 => {
4790
4790
  views
4791
4791
  } = _ref4,
4792
4792
  props = _objectWithoutPropertiesLoose(_ref4, _excluded4$2);
4793
+ var {
4794
+ getColor
4795
+ } = useTheme();
4796
+ loaderColor = getColor(loaderColor || props.color || 'theme.loading');
4797
+ textColor = getColor(textColor || props.color || 'theme.loading');
4793
4798
  var style = {
4794
4799
  size,
4795
4800
  speed,
@@ -4903,12 +4908,19 @@ var IconSizes$1 = {
4903
4908
  padding: 14
4904
4909
  }
4905
4910
  };
4906
- var getButtonVariants = function getButtonVariants(color, isLight, isThemeLight) {
4911
+ var getButtonVariants = function getButtonVariants(color, isLight, reversed) {
4912
+ if (reversed === void 0) {
4913
+ reversed = false;
4914
+ }
4907
4915
  var textColor = isLight ? '#000000' : '#FFFFFF';
4916
+ // Determine effective colors based on reversed state
4917
+ var effectiveBg = reversed ? textColor : color;
4918
+ var effectiveContent = reversed ? color : textColor;
4919
+ var effectiveBorder = reversed ? textColor : color;
4908
4920
  return {
4909
4921
  filled: {
4910
- backgroundColor: color,
4911
- color: textColor,
4922
+ backgroundColor: effectiveBg,
4923
+ color: effectiveContent,
4912
4924
  borderWidth: 1,
4913
4925
  borderStyle: 'solid',
4914
4926
  borderColor: 'transparent',
@@ -4920,57 +4932,57 @@ var getButtonVariants = function getButtonVariants(color, isLight, isThemeLight)
4920
4932
  },
4921
4933
  _focusVisible: {
4922
4934
  outline: 'none',
4923
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4935
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBg
4924
4936
  },
4925
4937
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4926
4938
  },
4927
- reversed: {
4928
- backgroundColor: textColor,
4929
- color: color,
4939
+ empty: {
4940
+ backgroundColor: 'transparent',
4941
+ color: effectiveBorder,
4930
4942
  borderWidth: 1,
4931
4943
  borderStyle: 'solid',
4932
- borderColor: textColor,
4944
+ borderColor: effectiveBorder,
4933
4945
  _hover: {
4934
4946
  opacity: 0.9
4935
4947
  },
4936
4948
  _active: {
4937
4949
  opacity: 0.95
4938
4950
  },
4951
+ _focusVisible: {
4952
+ outline: 'none',
4953
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
4954
+ },
4939
4955
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4940
4956
  },
4941
4957
  outline: {
4942
4958
  backgroundColor: 'transparent',
4943
- color: color,
4959
+ color: effectiveBorder,
4944
4960
  borderWidth: 1,
4945
4961
  borderStyle: 'solid',
4946
- borderColor: color,
4962
+ borderColor: effectiveBorder,
4947
4963
  _hover: {
4948
- backgroundColor: color,
4949
- color: textColor,
4950
4964
  opacity: 0.9
4951
4965
  },
4952
4966
  _active: {
4953
- backgroundColor: color,
4954
- color: textColor,
4955
4967
  opacity: 0.95
4956
4968
  },
4957
4969
  _focusVisible: {
4958
4970
  outline: 'none',
4959
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4971
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
4960
4972
  },
4961
4973
  transition: 'background-color 0.2s ease, color 0.2s ease, opacity 0.2s ease'
4962
4974
  },
4963
4975
  ghost: {
4964
4976
  backgroundColor: 'transparent',
4965
- color: color,
4977
+ color: effectiveBorder,
4966
4978
  borderWidth: 1,
4967
4979
  borderStyle: 'solid',
4968
4980
  borderColor: 'transparent',
4969
4981
  _hover: {
4970
4982
  borderWidth: 1,
4971
4983
  borderStyle: 'solid',
4972
- borderColor: color,
4973
- color: color,
4984
+ borderColor: effectiveBorder,
4985
+ color: effectiveBorder,
4974
4986
  opacity: 0.9
4975
4987
  },
4976
4988
  _active: {
@@ -4978,20 +4990,20 @@ var getButtonVariants = function getButtonVariants(color, isLight, isThemeLight)
4978
4990
  },
4979
4991
  _focusVisible: {
4980
4992
  outline: 'none',
4981
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4993
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
4982
4994
  },
4983
4995
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4984
4996
  },
4985
4997
  link: {
4986
4998
  backgroundColor: 'transparent',
4987
- color: color,
4999
+ color: effectiveBorder,
4988
5000
  borderWidth: 0,
4989
5001
  borderStyle: 'none',
4990
5002
  borderColor: 'transparent',
4991
5003
  textDecoration: 'underline',
4992
5004
  textUnderlineOffset: '2px',
4993
5005
  textDecorationThickness: '1px',
4994
- textDecorationColor: color,
5006
+ textDecorationColor: effectiveBorder,
4995
5007
  _hover: {
4996
5008
  opacity: 0.8
4997
5009
  },
@@ -5000,83 +5012,35 @@ var getButtonVariants = function getButtonVariants(color, isLight, isThemeLight)
5000
5012
  },
5001
5013
  _focusVisible: {
5002
5014
  outline: 'none',
5003
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
5004
- },
5005
- transition: 'opacity 0.2s ease'
5006
- },
5007
- borderMoving: {
5008
- position: 'relative',
5009
- backgroundColor: 'black',
5010
- color: textColor,
5011
- overflow: 'hidden',
5012
- borderWidth: 0,
5013
- borderStyle: 'none',
5014
- borderColor: 'transparent',
5015
- _hover: {
5016
- color: textColor
5017
- },
5018
- _active: {
5019
- color: textColor
5020
- },
5021
- _focusVisible: {
5022
- outline: 'none',
5023
- boxShadow: '0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px rgba(0, 0, 0, 0.8)'
5024
- },
5025
- transition: 'opacity 0.2s ease'
5026
- },
5027
- animatedStroke: {
5028
- display: 'inline-block',
5029
- margin: '0 auto',
5030
- textAlign: 'center',
5031
- textDecoration: 'none',
5032
- position: 'relative',
5033
- cursor: 'pointer',
5034
- backgroundColor: 'transparent',
5035
- color: color,
5036
- borderWidth: 0,
5037
- borderStyle: 'none',
5038
- borderColor: 'transparent',
5039
- _hover: {
5040
- color: color
5041
- },
5042
- _active: {
5043
- color: color
5044
- },
5045
- _focusVisible: {
5046
- outline: 'none',
5047
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
5015
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
5048
5016
  },
5049
5017
  transition: 'opacity 0.2s ease'
5050
5018
  },
5051
5019
  subtle: {
5052
- backgroundColor: 'white',
5053
- color: color,
5020
+ backgroundColor: reversed ? "color-mix(in srgb, " + effectiveBorder + " 20%, transparent)" : "color-mix(in srgb, " + effectiveBorder + " 5%, transparent)",
5021
+ color: effectiveBorder,
5054
5022
  borderWidth: 1,
5055
5023
  borderStyle: 'solid',
5056
- borderColor: color,
5057
- paddingHorizontal: 12,
5058
- paddingVertical: 6,
5059
- borderRadius: 6,
5060
- fontWeight: 500,
5024
+ borderColor: effectiveBorder,
5061
5025
  _hover: {
5062
- backgroundColor: 'rgba(0, 0, 0, 0.05)'
5026
+ backgroundColor: reversed ? "color-mix(in srgb, " + effectiveBorder + " 40%, transparent)" : "color-mix(in srgb, " + effectiveBorder + " 15%, transparent)"
5063
5027
  },
5064
5028
  _active: {
5065
- backgroundColor: 'rgba(0, 0, 0, 0.1)'
5029
+ backgroundColor: reversed ? 'rgba(255, 255, 255, 0.3)' : 'rgba(0, 0, 0, 0.15)'
5066
5030
  },
5067
5031
  _focusVisible: {
5068
5032
  outline: 'none',
5069
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
5033
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + effectiveBorder
5070
5034
  },
5071
5035
  transition: 'all 0.2s ease'
5072
5036
  }
5073
5037
  };
5074
5038
  };
5075
5039
 
5076
- var _excluded$d = ["shape", "size", "isDisabled", "onClick", "views", "mainTone", "tone", "borderMovingGradientColors", "borderMovingDuration", "content", "shadow"],
5077
- _excluded2$3 = ["to", "onClick", "views", "children", "size", "accentColor", "textColor", "getColor", "shadow"],
5078
- _excluded3$3 = ["variant", "to", "isDisabled", "isLoading", "isAuto", "isFilled", "isExternal", "shape", "shadow", "onClick", "views", "baseStyles", "sizeStyles", "iconPad", "resolvedTextColor", "content", "size"],
5079
- _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"];
5040
+ var _excluded$d = ["asComponent", "isDisabled", "isLoading", "isWrapped", "borderRadius", "width", "height", "baseStyles", "sizeStyles", "iconPad", "mainTone", "resolvedTextColor", "children", "borderWidth"],
5041
+ _excluded2$3 = ["shape", "isDisabled", "onClick", "shadow", "borderWidth", "isAuto", "isFilled", "views", "children"],
5042
+ _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"],
5043
+ _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"];
5080
5044
  // --- Helper: Button Content ---
5081
5045
  // Renders the inner content: Loader, Icon, and Children.
5082
5046
  var ButtonContent = _ref => {
@@ -5100,176 +5064,95 @@ var ButtonContent = _ref => {
5100
5064
  justifyContent: "center"
5101
5065
  }, sizeStyles, iconPad, views == null ? void 0 : views.content), isLoading && loaderPosition === 'left' && (/*#__PURE__*/React.createElement(Loader, Object.assign({
5102
5066
  size: size === 'xs' || size === 'sm' ? 'sm' : 'md',
5103
- color: 'currentColor'
5067
+ color: resolvedTextColor
5104
5068
  }, views == null ? void 0 : views.loader))), icon && ['left', 'top'].includes(iconPosition) && !isLoading && (/*#__PURE__*/React.createElement(View, Object.assign({
5105
- color: 'currentColor'
5069
+ color: resolvedTextColor
5106
5070
  }, views == null ? void 0 : views.icon), icon)), children, icon && ['right', 'bottom'].includes(iconPosition) && !isLoading && (/*#__PURE__*/React.createElement(View, Object.assign({
5107
- color: 'currentColor'
5071
+ color: resolvedTextColor
5108
5072
  }, views == null ? void 0 : views.icon), icon)), isLoading && loaderPosition === 'right' && (/*#__PURE__*/React.createElement(Loader, Object.assign({
5109
5073
  size: size === 'xs' || size === 'sm' ? 'sm' : 'md',
5110
- color: 'currentColor'
5074
+ color: resolvedTextColor
5111
5075
  }, views == null ? void 0 : views.loader))));
5112
5076
  };
5113
- // --- Variant: Border Moving ---
5114
- var BorderMovingButton = _ref2 => {
5115
- var {
5116
- shape = 'rounded',
5117
- size = 'md',
5077
+ // --- Animation Logic moved to StandardButton ---
5078
+ // --- Variant: Standard Button ---
5079
+ // --- Helpers ---
5080
+ // Helper to calculate numeric border radius
5081
+ var getNumericBorderRadius = shape => {
5082
+ var shapeValue = ButtonShapes[shape];
5083
+ if (typeof shapeValue === 'number') return shapeValue;
5084
+ if (typeof shapeValue === 'string') return parseInt(shapeValue, 10) || 0;
5085
+ return 0;
5086
+ };
5087
+ // Common Inner Button Surface
5088
+ var InnerButton = _ref2 => {
5089
+ var {
5090
+ asComponent,
5118
5091
  isDisabled,
5119
- onClick,
5120
- views,
5092
+ isLoading,
5093
+ isWrapped = false,
5094
+ borderRadius,
5095
+ width,
5096
+ height,
5097
+ baseStyles,
5098
+ sizeStyles,
5099
+ iconPad,
5121
5100
  mainTone,
5122
- tone,
5123
- borderMovingGradientColors,
5124
- borderMovingDuration,
5125
- content,
5126
- shadow
5101
+ resolvedTextColor,
5102
+ children,
5103
+ borderWidth = 0
5127
5104
  } = _ref2,
5128
5105
  props = _objectWithoutPropertiesLoose(_ref2, _excluded$d);
5129
- var sizeStyles = ButtonSizes[size];
5130
- var borderWidth = 3;
5131
- var numericWidth = typeof sizeStyles.width === 'number' ? sizeStyles.width : 300;
5132
- var numericHeight = typeof sizeStyles.height === 'number' ? sizeStyles.height : 64;
5133
- var numericBorderRadius = (() => {
5134
- var shapeValue = ButtonShapes[shape];
5135
- if (typeof shapeValue === 'number') {
5136
- return shapeValue;
5137
- }
5138
- if (typeof shapeValue === 'string') {
5139
- return parseInt(shapeValue, 10) || 50;
5140
- }
5141
- return 50;
5142
- })();
5143
- var containerBg = mainTone;
5144
- // Use high contrast text color for this variant
5145
- var borderMovingTextColor = tone === 'light' ? '#000000' : '#FFFFFF';
5146
- // Create gradient string for border animation
5147
- var gradientColors = borderMovingGradientColors.join(', ');
5148
- // Animation sequence for the moving border effect
5149
- var borderAnimation = {
5150
- from: {
5151
- backgroundPosition: '0% 50%'
5152
- },
5153
- to: {
5154
- backgroundPosition: '200% 50%'
5155
- },
5156
- duration: borderMovingDuration + "s",
5157
- timingFunction: 'linear',
5158
- iterationCount: 'infinite'
5159
- };
5160
5106
  return /*#__PURE__*/React.createElement(Element, Object.assign({
5161
- position: "relative",
5162
- display: "inline-flex",
5107
+ as: asComponent,
5108
+ disabled: Boolean(isDisabled || isLoading),
5109
+ display: isWrapped ? 'flex' : 'inline-flex',
5163
5110
  alignItems: "center",
5164
5111
  justifyContent: "center",
5165
- borderRadius: ButtonShapes[shape],
5166
- cursor: isDisabled ? 'default' : 'pointer',
5167
- onClick: onClick,
5168
- boxShadow: shadow,
5169
- padding: borderWidth,
5170
- background: "linear-gradient(90deg, " + borderMovingGradientColors[0] + ", " + borderMovingGradientColors[1] + ", " + borderMovingGradientColors[2] + ", " + borderMovingGradientColors[0] + ")",
5171
- backgroundSize: "200% 100%",
5172
- animate: borderAnimation
5173
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React.createElement(View, {
5174
- display: "flex",
5175
- alignItems: "center",
5176
- justifyContent: "center",
5177
- backgroundColor: containerBg,
5178
- borderRadius: Math.max(0, numericBorderRadius - borderWidth),
5179
- width: "100%",
5180
- height: "100%",
5181
- minWidth: numericWidth - borderWidth * 2,
5182
- minHeight: numericHeight - borderWidth * 2,
5183
- color: borderMovingTextColor,
5184
- fontSize: 14,
5185
- cursor: "pointer"
5186
- }, content));
5112
+ borderRadius: borderRadius,
5113
+ width: width,
5114
+ height: height
5115
+ }, baseStyles, sizeStyles, iconPad, {
5116
+ // Ensure background is solid for wrapped buttons if baseStyles doesn't provide it
5117
+ backgroundColor: (baseStyles == null ? void 0 : baseStyles.backgroundColor) || (isWrapped ? mainTone : undefined),
5118
+ color: resolvedTextColor,
5119
+ borderWidth: isWrapped ? 0 : undefined,
5120
+ cursor: isDisabled ? 'default' : 'pointer'
5121
+ }, props), children);
5187
5122
  };
5188
- // --- Variant: Animated Stroke ---
5189
- var AnimatedStrokeButton = _ref3 => {
5123
+ // Common Header for Border Animations
5124
+ var BorderWrapper = _ref3 => {
5190
5125
  var {
5191
- to,
5126
+ shape,
5127
+ isDisabled,
5192
5128
  onClick,
5129
+ shadow,
5130
+ borderWidth,
5131
+ isAuto,
5132
+ isFilled,
5193
5133
  views,
5194
- children,
5195
- size = 'md',
5196
- accentColor,
5197
- textColor,
5198
- getColor,
5199
- shadow
5134
+ children
5200
5135
  } = _ref3,
5201
5136
  props = _objectWithoutPropertiesLoose(_ref3, _excluded2$3);
5202
- var resolvedAccentColor = getColor(accentColor);
5203
- var resolvedTextColor = getColor(textColor);
5204
- var sizeStyles = ButtonSizes[size];
5205
- var numericWidth = typeof sizeStyles.width === 'number' ? sizeStyles.width : 300;
5206
- var numericHeight = typeof sizeStyles.height === 'number' ? sizeStyles.height : 60;
5207
- var strokeAnimation = {
5208
- from: {
5209
- strokeWidth: '8px',
5210
- strokeDasharray: '0 500',
5211
- strokeDashoffset: -454
5212
- },
5213
- to: {
5214
- strokeWidth: '3px',
5215
- strokeDasharray: '760',
5216
- strokeDashoffset: 0
5217
- },
5218
- duration: '0.9s',
5219
- timingFunction: 'ease-in',
5220
- fillMode: 'forwards'
5221
- };
5222
5137
  return /*#__PURE__*/React.createElement(Element, Object.assign({
5223
- as: to ? 'a' : 'div',
5224
- href: to ? to : undefined,
5225
- onClick: onClick,
5226
- display: "inline-block",
5227
- maxWidth: "20rem",
5228
- margin: "0 auto",
5229
- textAlign: "center",
5230
- textDecoration: "none",
5138
+ as: "div",
5231
5139
  position: "relative",
5232
- cursor: "pointer",
5233
- boxShadow: shadow
5234
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React.createElement(View, {
5235
- as: "svg",
5236
- display: "block",
5237
- height: numericHeight,
5238
- width: numericWidth,
5239
- xmlns: "http://www.w3.org/2000/svg"
5240
- }, /*#__PURE__*/React.createElement(View, {
5241
- as: "rect",
5242
- height: numericHeight,
5243
- width: numericWidth,
5244
- fill: "transparent",
5245
- stroke: resolvedAccentColor,
5246
- strokeWidth: "8px",
5247
- strokeDasharray: "0 500",
5248
- strokeDashoffset: -454,
5249
- on: {
5250
- hover: {
5251
- animate: strokeAnimation
5252
- }
5253
- }
5254
- })), /*#__PURE__*/React.createElement(View, Object.assign({
5255
- position: "absolute",
5256
- top: 0,
5257
- right: 0,
5258
- bottom: 0,
5259
- left: 0,
5260
- display: "flex",
5140
+ display: "inline-flex",
5261
5141
  alignItems: "center",
5262
5142
  justifyContent: "center",
5263
- textAlign: "center",
5264
- pointerEvents: "none",
5265
- userSelect: "none",
5266
- color: resolvedTextColor
5267
- }, sizeStyles), children));
5143
+ borderRadius: ButtonShapes[shape],
5144
+ cursor: isDisabled ? 'default' : 'pointer',
5145
+ onClick: onClick,
5146
+ boxShadow: shadow,
5147
+ padding: borderWidth,
5148
+ width: isAuto ? 'fit-content' : isFilled ? '100%' : undefined
5149
+ }, views == null ? void 0 : views.container, props), children);
5268
5150
  };
5269
5151
  // --- Variant: Standard Button ---
5270
5152
  var StandardButton = _ref4 => {
5271
5153
  var {
5272
5154
  variant,
5155
+ animation,
5273
5156
  to,
5274
5157
  isDisabled,
5275
5158
  isLoading,
@@ -5283,9 +5166,220 @@ var StandardButton = _ref4 => {
5283
5166
  baseStyles,
5284
5167
  sizeStyles,
5285
5168
  iconPad,
5286
- content // Destructure size to avoid passing it to Element
5169
+ resolvedTextColor,
5170
+ content,
5171
+ mainTone,
5172
+ borderMovingDuration = 2,
5173
+ borderMovingGradientColors = ['#705CFF', '#FF5C97', '#FFC75C'],
5174
+ animatedStrokeAccentColor = '#705CFF',
5175
+ animatedStrokeTextColor = '#333333',
5176
+ getColor = c => c
5287
5177
  } = _ref4,
5288
5178
  props = _objectWithoutPropertiesLoose(_ref4, _excluded3$3);
5179
+ // --- Common Helpers ---
5180
+ var numericBorderRadius = getNumericBorderRadius(shape);
5181
+ var linkOrContent = to ? (/*#__PURE__*/React.createElement(Link, Object.assign({
5182
+ to: to,
5183
+ isExternal: isExternal,
5184
+ color: "currentColor",
5185
+ textDecoration: "inherit",
5186
+ _hover: {
5187
+ color: 'currentColor'
5188
+ }
5189
+ }, views == null ? void 0 : views.link), content)) : content;
5190
+ var innerProps = {
5191
+ isDisabled,
5192
+ isLoading,
5193
+ baseStyles,
5194
+ sizeStyles,
5195
+ iconPad,
5196
+ resolvedTextColor,
5197
+ mainTone,
5198
+ children: linkOrContent
5199
+ };
5200
+ // --- Animation: Border Moving ---
5201
+ if (animation === 'borderMoving' && borderMovingGradientColors) {
5202
+ var borderWidth = 3;
5203
+ var borderAnimation = {
5204
+ from: {
5205
+ backgroundPosition: '0% 50%'
5206
+ },
5207
+ to: {
5208
+ backgroundPosition: '200% 50%'
5209
+ },
5210
+ duration: borderMovingDuration + "s",
5211
+ timingFunction: 'linear',
5212
+ iterationCount: 'infinite'
5213
+ };
5214
+ return /*#__PURE__*/React.createElement(BorderWrapper, Object.assign({
5215
+ shape: shape,
5216
+ isDisabled: isDisabled,
5217
+ onClick: onClick,
5218
+ shadow: shadow,
5219
+ borderWidth: borderWidth,
5220
+ isAuto: isAuto,
5221
+ isFilled: isFilled,
5222
+ views: views,
5223
+ background: "linear-gradient(90deg, " + borderMovingGradientColors[0] + ", " + borderMovingGradientColors[1] + ", " + borderMovingGradientColors[2] + ", " + borderMovingGradientColors[0] + ")",
5224
+ backgroundSize: "200% 100%",
5225
+ animate: borderAnimation
5226
+ }, props), /*#__PURE__*/React.createElement(InnerButton, Object.assign({
5227
+ asComponent: to ? 'div' : 'button',
5228
+ isWrapped: true,
5229
+ borderRadius: Math.max(0, numericBorderRadius - borderWidth),
5230
+ width: "100%",
5231
+ height: "100%"
5232
+ }, innerProps)));
5233
+ }
5234
+ // --- Animation: Animated Stroke ---
5235
+ if (animation === 'animatedStroke') {
5236
+ var _views$container;
5237
+ var resolvedAccentColor = getColor(animatedStrokeAccentColor);
5238
+ var resolvedStrokeTextColor = getColor(animatedStrokeTextColor);
5239
+ var strokePathLength = 1000;
5240
+ var strokeAnimation = {
5241
+ from: {
5242
+ strokeWidth: '8px',
5243
+ strokeDasharray: "0 " + strokePathLength,
5244
+ strokeDashoffset: -Math.round(strokePathLength * 0.63)
5245
+ },
5246
+ to: {
5247
+ strokeWidth: '3px',
5248
+ strokeDasharray: "" + strokePathLength,
5249
+ strokeDashoffset: 0
5250
+ },
5251
+ duration: '0.9s',
5252
+ timingFunction: 'ease-in',
5253
+ fillMode: 'forwards'
5254
+ };
5255
+ var mergedClassName = ['group', views == null || (_views$container = views.container) == null ? void 0 : _views$container.className, props == null ? void 0 : props.className].filter(Boolean).join(' ');
5256
+ return /*#__PURE__*/React.createElement(Element, Object.assign({
5257
+ as: to ? 'div' : 'button',
5258
+ type: to ? undefined : 'button',
5259
+ disabled: Boolean(!to && (isDisabled || isLoading)),
5260
+ onClick: onClick,
5261
+ position: "relative",
5262
+ display: "inline-flex",
5263
+ alignItems: "center",
5264
+ justifyContent: "center",
5265
+ width: isAuto ? 'fit-content' : isFilled ? '100%' : undefined,
5266
+ borderRadius: ButtonShapes[shape],
5267
+ boxShadow: shadow,
5268
+ transition: "all 0.2s ease",
5269
+ cursor: isDisabled ? 'default' : 'pointer',
5270
+ color: resolvedStrokeTextColor,
5271
+ backgroundColor: "transparent",
5272
+ borderWidth: 0
5273
+ }, views == null ? void 0 : views.container, props, {
5274
+ className: mergedClassName
5275
+ }), /*#__PURE__*/React.createElement(View, {
5276
+ as: "svg",
5277
+ position: "absolute",
5278
+ top: 0,
5279
+ right: 0,
5280
+ bottom: 0,
5281
+ left: 0,
5282
+ width: "100%",
5283
+ height: "100%",
5284
+ xmlns: "http://www.w3.org/2000/svg",
5285
+ pointerEvents: "none",
5286
+ zIndex: 1,
5287
+ "aria-hidden": "true"
5288
+ }, /*#__PURE__*/React.createElement(View, {
5289
+ as: "rect",
5290
+ x: "0",
5291
+ y: "0",
5292
+ height: "100%",
5293
+ width: "100%",
5294
+ rx: numericBorderRadius,
5295
+ ry: numericBorderRadius,
5296
+ fill: "transparent",
5297
+ stroke: resolvedAccentColor,
5298
+ strokeWidth: "8px",
5299
+ strokeDasharray: "0 " + strokePathLength,
5300
+ strokeDashoffset: -Math.round(strokePathLength * 0.63),
5301
+ pathLength: strokePathLength,
5302
+ on: {
5303
+ groupHover: {
5304
+ animate: strokeAnimation
5305
+ }
5306
+ }
5307
+ })), /*#__PURE__*/React.createElement(View, {
5308
+ position: "relative",
5309
+ zIndex: 0
5310
+ }, linkOrContent));
5311
+ }
5312
+ // --- Animation: Border Reveal ---
5313
+ if (animation === 'borderReveal') {
5314
+ var _borderWidth = 3;
5315
+ // Use the first color from gradient colors or fall back to mainTone
5316
+ var activeColor = (borderMovingGradientColors == null ? void 0 : borderMovingGradientColors[0]) || mainTone || '#000000';
5317
+ // Sides duration
5318
+ // The default duration (2s) is too slow for a hover interaction.
5319
+ // We scale it by 0.25 to make it responsive (0.5s total).
5320
+ var effectiveDuration = borderMovingDuration * 0.75;
5321
+ var sideDuration = effectiveDuration / 4;
5322
+ // Gradients for each side (color 50%, transparent 50%)
5323
+ var topGrad = "linear-gradient(90deg, " + activeColor + " 50%, transparent 50%)";
5324
+ var rightGrad = "linear-gradient(180deg, " + activeColor + " 50%, transparent 50%)";
5325
+ var bottomGrad = "linear-gradient(270deg, " + activeColor + " 50%, transparent 50%)";
5326
+ var leftGrad = "linear-gradient(0deg, " + activeColor + " 50%, transparent 50%)";
5327
+ // Coordinates:
5328
+ // Top (L->R): 100% 0 -> 0 0
5329
+ // Right (T->B): 100% 100% -> 100% 0
5330
+ // Bottom (R->L): 0 100% -> 100% 100%
5331
+ // Left (B->T): 0 0 -> 0 100%
5332
+ var bgPosStart = "100% 0, 100% 100%, 0 100%, 0 0";
5333
+ var bgPosEnd = "0 0, 100% 0, 100% 100%, 0 100%";
5334
+ // Delays:
5335
+ // Enter (Forward): Top(0), Right(1), Bottom(2), Left(3)
5336
+ var delayEnter = "0s, " + sideDuration + "s, " + sideDuration * 2 + "s, " + sideDuration * 2 + "s";
5337
+ // Exit (Reverse): Top(3), Right(2), Bottom(1), Left(0)
5338
+ var delayExit = sideDuration * 2 + "s, " + sideDuration * 2 + "s, " + sideDuration + "s, 0s";
5339
+ // Use slightly larger gradient size to overlap with button content (avoid gaps)
5340
+ var gradientSize = _borderWidth + 1;
5341
+ return /*#__PURE__*/React.createElement(Element, Object.assign({
5342
+ as: "div",
5343
+ position: "relative",
5344
+ display: "inline-flex",
5345
+ alignItems: "center",
5346
+ justifyContent: "center",
5347
+ borderRadius: ButtonShapes[shape],
5348
+ cursor: isDisabled ? 'default' : 'pointer',
5349
+ onClick: onClick,
5350
+ boxShadow: shadow,
5351
+ padding: _borderWidth,
5352
+ background: "\n " + topGrad + " no-repeat,\n " + rightGrad + " no-repeat,\n " + bottomGrad + " no-repeat,\n " + leftGrad + " no-repeat\n ",
5353
+ backgroundSize: "200% " + gradientSize + "px, " + gradientSize + "px 200%, 200% " + gradientSize + "px, " + gradientSize + "px 200%",
5354
+ // Default State (Hidden)
5355
+ backgroundPosition: bgPosStart,
5356
+ transitionProperty: "background-position",
5357
+ transitionDuration: sideDuration + "s",
5358
+ transitionTimingFunction: "linear",
5359
+ transitionDelay: delayExit,
5360
+ // Hover State (Visible)
5361
+ _hover: {
5362
+ backgroundPosition: bgPosEnd,
5363
+ transitionDelay: delayEnter
5364
+ },
5365
+ width: isAuto ? 'fit-content' : isFilled ? '100%' : undefined
5366
+ }, views == null ? void 0 : views.container, props), /*#__PURE__*/React.createElement(View, Object.assign({
5367
+ as: to ? 'div' : 'button',
5368
+ disabled: Boolean(isDisabled || isLoading),
5369
+ display: "flex",
5370
+ alignItems: "center",
5371
+ justifyContent: "center",
5372
+ borderRadius: Math.max(0, numericBorderRadius - _borderWidth),
5373
+ width: "100%",
5374
+ height: "100%"
5375
+ }, baseStyles, sizeStyles, iconPad, {
5376
+ backgroundColor: (baseStyles == null ? void 0 : baseStyles.backgroundColor) || mainTone,
5377
+ color: resolvedTextColor,
5378
+ borderWidth: 0,
5379
+ cursor: isDisabled ? 'default' : 'pointer'
5380
+ }), linkOrContent));
5381
+ }
5382
+ // --- Default: Standard Button ---
5289
5383
  return /*#__PURE__*/React.createElement(Element, Object.assign({
5290
5384
  as: variant === 'link' && to ? 'div' : 'button',
5291
5385
  type: variant === 'link' && to ? undefined : 'button',
@@ -5301,19 +5395,12 @@ var StandardButton = _ref4 => {
5301
5395
  transition: "all 0.2s ease",
5302
5396
  cursor: isDisabled ? 'default' : 'pointer',
5303
5397
  onClick: onClick
5304
- }, baseStyles, views == null ? void 0 : views.container, props), to ? (/*#__PURE__*/React.createElement(Link, Object.assign({
5305
- to: to,
5306
- isExternal: isExternal,
5307
- color: "currentColor",
5308
- textDecoration: "inherit",
5309
- _hover: {
5310
- color: 'currentColor'
5311
- }
5312
- }, views == null ? void 0 : views.link), content)) : content);
5398
+ }, baseStyles, views == null ? void 0 : views.container, props), linkOrContent);
5313
5399
  };
5314
5400
  // --- Main Component ---
5401
+ // --- Main Component ---
5315
5402
  var ButtonView = _ref5 => {
5316
- var _ref6, _base$color;
5403
+ var _ref6, _ref7, _base$color;
5317
5404
  var {
5318
5405
  /* behaviour */
5319
5406
  variant = 'filled',
@@ -5325,6 +5412,10 @@ var ButtonView = _ref5 => {
5325
5412
  // primary candidate for main color
5326
5413
  color,
5327
5414
  // 2nd candidate for main color (NOT text‑color)
5415
+ scheme,
5416
+ // New scheme prop
5417
+ reversed = false,
5418
+ // New reversed prop
5328
5419
  isAuto = true,
5329
5420
  isFilled,
5330
5421
  isDisabled,
@@ -5340,7 +5431,6 @@ var ButtonView = _ref5 => {
5340
5431
  shadow,
5341
5432
  onClick,
5342
5433
  views = {},
5343
- themeMode: elementMode,
5344
5434
  /* effect props */
5345
5435
  borderMovingDuration = 2,
5346
5436
  borderMovingGradientColors = ['#705CFF', '#FF5C97', '#FFC75C'],
@@ -5350,20 +5440,22 @@ var ButtonView = _ref5 => {
5350
5440
  props = _objectWithoutPropertiesLoose(_ref5, _excluded4$3);
5351
5441
  /* theme helpers */
5352
5442
  var {
5353
- getColor,
5443
+ getColorHex,
5354
5444
  themeMode
5355
5445
  } = useTheme();
5356
- var mode = elementMode != null ? elementMode : themeMode;
5357
5446
  /* MAIN COLOR – determines the entire palette */
5358
- var mainColorKey = (_ref6 = backgroundColor != null ? backgroundColor : color) != null ? _ref6 : 'theme.primary';
5359
- var mainTone = getColor(isDisabled ? 'theme.disabled' : mainColorKey, {
5360
- themeMode: mode
5361
- });
5447
+ var mainColorKey = (_ref6 = (_ref7 = backgroundColor != null ? backgroundColor : color) != null ? _ref7 : scheme) != null ? _ref6 : 'theme.primary';
5448
+ var mainTone = getColorHex(isDisabled ? 'theme.disabled' : mainColorKey);
5362
5449
  var tone = contrast(mainTone);
5363
5450
  /* text color with mixBlendMode for maximum visibility */
5364
- var textColor = tone === 'light' ? '#000000' : '#FFFFFF';
5451
+ var textColor;
5452
+ if (tone === 'light') {
5453
+ textColor = '#000000';
5454
+ } else {
5455
+ textColor = '#FFFFFF';
5456
+ }
5365
5457
  /* variant palette */
5366
- var palette = useMemo(() => getButtonVariants(mainTone, tone === 'light'), [mainTone, tone, mode]);
5458
+ var palette = useMemo(() => getButtonVariants(mainTone, tone === 'light', reversed), [mainTone, tone, reversed]);
5367
5459
  var base = palette[variant];
5368
5460
  var resolvedTextColor = (_base$color = base == null ? void 0 : base.color) != null ? _base$color : textColor;
5369
5461
  // Render content logic safely
@@ -5377,39 +5469,12 @@ var ButtonView = _ref5 => {
5377
5469
  isIconRounded: isIconRounded,
5378
5470
  views: views
5379
5471
  }, children);
5380
- // Dispatch to the correct variant component
5381
- if (variant === 'borderMoving') {
5382
- return /*#__PURE__*/React.createElement(BorderMovingButton, Object.assign({
5383
- variant: variant,
5384
- shape: shape,
5385
- size: size,
5386
- isDisabled: isDisabled,
5387
- onClick: onClick,
5388
- views: views,
5389
- mainTone: mainTone,
5390
- tone: tone,
5391
- borderMovingGradientColors: borderMovingGradientColors,
5392
- borderMovingDuration: borderMovingDuration,
5393
- content: content
5394
- }, props));
5395
- }
5396
- if (variant === 'animatedStroke') {
5397
- return /*#__PURE__*/React.createElement(AnimatedStrokeButton, Object.assign({
5398
- variant: variant,
5399
- to: to,
5400
- onClick: onClick,
5401
- views: views,
5402
- size: size,
5403
- accentColor: animatedStrokeAccentColor,
5404
- textColor: animatedStrokeTextColor,
5405
- getColor: getColor
5406
- }, props), children);
5407
- }
5408
5472
  // Standard variants (filled, outline, ghost, link)
5409
5473
  var sizeStyles = ButtonSizes[size];
5410
5474
  var iconPad = isIconRounded ? IconSizes$1[size] : {};
5411
5475
  return /*#__PURE__*/React.createElement(StandardButton, Object.assign({
5412
5476
  variant: variant,
5477
+ animation: props.animation,
5413
5478
  to: to,
5414
5479
  isDisabled: isDisabled,
5415
5480
  isLoading: isLoading,
@@ -5425,7 +5490,14 @@ var ButtonView = _ref5 => {
5425
5490
  iconPad: iconPad,
5426
5491
  resolvedTextColor: resolvedTextColor,
5427
5492
  content: content,
5428
- size: size
5493
+ size: size,
5494
+ mainTone: mainTone,
5495
+ tone: tone,
5496
+ borderMovingDuration: borderMovingDuration,
5497
+ borderMovingGradientColors: borderMovingGradientColors,
5498
+ animatedStrokeAccentColor: animatedStrokeAccentColor,
5499
+ animatedStrokeTextColor: animatedStrokeTextColor,
5500
+ getColor: getColorHex
5429
5501
  }, props));
5430
5502
  };
5431
5503
 
@@ -16616,16 +16688,16 @@ var SliderView = _ref => {
16616
16688
  } = _ref,
16617
16689
  props = _objectWithoutPropertiesLoose(_ref, _excluded$S);
16618
16690
  var {
16619
- getColor,
16691
+ getColorHex,
16620
16692
  themeMode
16621
16693
  } = useTheme();
16622
- var themeColor = getColor(backgroundColor, {
16694
+ var themeColor = getColorHex(backgroundColor, {
16623
16695
  themeMode: elementMode || themeMode
16624
16696
  });
16625
- var disabledColor = getColor('theme.disabled', {
16697
+ var disabledColor = getColorHex('theme.disabled', {
16626
16698
  themeMode: elementMode || themeMode
16627
16699
  });
16628
- var trackColor = getColor(SliderVariants[variant].backgroundColor, {
16700
+ var trackColor = getColorHex(SliderVariants[variant].backgroundColor, {
16629
16701
  themeMode: elementMode || themeMode
16630
16702
  });
16631
16703
  var isVertical = orientation === 'vertical';
@@ -16797,7 +16869,7 @@ var SliderView = _ref => {
16797
16869
  height: thumbSize + "px",
16798
16870
  borderRadius: "50%",
16799
16871
  backgroundColor: isDisabled ? disabledColor : themeColor,
16800
- border: "2px solid " + getColor('color.white'),
16872
+ border: "2px solid color.white",
16801
16873
  boxShadow: "0 1px 3px rgba(0, 0, 0, 0.2)",
16802
16874
  cursor: isDisabled ? 'not-allowed' : 'grab',
16803
16875
  transform: isVertical ? 'translateX(-50%)' : 'translateY(-50%)',
@@ -16816,8 +16888,8 @@ var SliderView = _ref => {
16816
16888
  }, views == null ? void 0 : views.thumb), showTooltip && (isHovered || isDragging) && (/*#__PURE__*/React.createElement(View, Object.assign({
16817
16889
  position: "absolute",
16818
16890
  padding: "4px 8px",
16819
- backgroundColor: getColor('color.black'),
16820
- color: getColor('color.white'),
16891
+ backgroundColor: 'color.black',
16892
+ color: 'color.white',
16821
16893
  borderRadius: "4px",
16822
16894
  whiteSpace: "nowrap",
16823
16895
  zIndex: 3
@@ -19115,20 +19187,16 @@ var ResponsiveTypography = {
19115
19187
  // xl maps to H1 - Largest heading
19116
19188
  xl: {
19117
19189
  fontWeight: 500,
19118
- marginBottom: 20,
19119
19190
  letterSpacing: 1.25,
19120
19191
  media: {
19121
19192
  mobile: {
19122
- fontSize: 42,
19123
- width: '100%'
19193
+ fontSize: 60
19124
19194
  },
19125
19195
  tablet: {
19126
- fontSize: 50,
19127
- width: '100%'
19196
+ fontSize: 60
19128
19197
  },
19129
19198
  desktop: {
19130
- fontSize: 58,
19131
- minWidth: '60%'
19199
+ fontSize: 96
19132
19200
  }
19133
19201
  }
19134
19202
  },
@@ -19137,13 +19205,13 @@ var ResponsiveTypography = {
19137
19205
  fontWeight: 500,
19138
19206
  media: {
19139
19207
  mobile: {
19140
- fontSize: 32
19208
+ fontSize: 48
19141
19209
  },
19142
19210
  tablet: {
19143
- fontSize: 40
19211
+ fontSize: 48
19144
19212
  },
19145
19213
  desktop: {
19146
- fontSize: 48
19214
+ fontSize: 70
19147
19215
  }
19148
19216
  }
19149
19217
  },
@@ -19152,13 +19220,13 @@ var ResponsiveTypography = {
19152
19220
  fontWeight: 500,
19153
19221
  media: {
19154
19222
  mobile: {
19155
- fontSize: 20
19223
+ fontSize: 32
19156
19224
  },
19157
19225
  tablet: {
19158
- fontSize: 30
19226
+ fontSize: 40
19159
19227
  },
19160
19228
  desktop: {
19161
- fontSize: 40
19229
+ fontSize: 56
19162
19230
  }
19163
19231
  }
19164
19232
  },
@@ -19168,10 +19236,10 @@ var ResponsiveTypography = {
19168
19236
  letterSpacing: -0.2,
19169
19237
  media: {
19170
19238
  mobile: {
19171
- fontSize: 16
19239
+ fontSize: 20
19172
19240
  },
19173
19241
  tablet: {
19174
- fontSize: 28
19242
+ fontSize: 24
19175
19243
  },
19176
19244
  desktop: {
19177
19245
  fontSize: 32
@@ -19184,13 +19252,13 @@ var ResponsiveTypography = {
19184
19252
  letterSpacing: -0.2,
19185
19253
  media: {
19186
19254
  mobile: {
19187
- fontSize: 12
19255
+ fontSize: 14
19188
19256
  },
19189
19257
  tablet: {
19190
19258
  fontSize: 18
19191
19259
  },
19192
19260
  desktop: {
19193
- fontSize: 24
19261
+ fontSize: 20
19194
19262
  }
19195
19263
  }
19196
19264
  }
@@ -19232,7 +19300,7 @@ var HighlightStyles = {
19232
19300
  })
19233
19301
  };
19234
19302
 
19235
- var _excluded$Z = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "as"];
19303
+ var _excluded$Z = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "textComponent", "as"];
19236
19304
  /**
19237
19305
  * A component that creates a typewriter effect for text
19238
19306
  */
@@ -19244,9 +19312,11 @@ var TypewriterEffect = _ref => {
19244
19312
  onComplete,
19245
19313
  showCursor = true,
19246
19314
  cursorColor = 'currentColor',
19247
- textStyle
19315
+ textStyle,
19316
+ textComponent
19248
19317
  } = _ref,
19249
19318
  props = _objectWithoutPropertiesLoose(_ref, _excluded$Z);
19319
+ var TextComponent = textComponent || Text;
19250
19320
  // Convert text to array if it's a string
19251
19321
  var textArray = Array.isArray(text) ? text : [text];
19252
19322
  // State for the currently displayed text
@@ -19299,7 +19369,7 @@ var TypewriterEffect = _ref => {
19299
19369
  }, [textArray, currentTextIndex, charIndex, isComplete, onComplete, pauseTime, typingSpeed]);
19300
19370
  return /*#__PURE__*/React.createElement(React.Fragment, null, displayedText.map((text, index) => (/*#__PURE__*/React.createElement(React.Fragment, {
19301
19371
  key: index
19302
- }, text, showCursor && index === currentTextIndex && !isComplete && (/*#__PURE__*/React.createElement(Text, Object.assign({
19372
+ }, text, showCursor && index === currentTextIndex && !isComplete && (/*#__PURE__*/React.createElement(TextComponent, Object.assign({
19303
19373
  as: "span",
19304
19374
  display: "inline-block",
19305
19375
  width: "0.1em",
@@ -19312,7 +19382,7 @@ var TypewriterEffect = _ref => {
19312
19382
  }, textStyle))))))));
19313
19383
  };
19314
19384
 
19315
- var _excluded$_ = ["text", "duration", "direction", "stagger", "sequential", "textStyle", "as", "wordProps"],
19385
+ var _excluded$_ = ["text", "duration", "direction", "stagger", "sequential", "textStyle", "as", "wordProps", "textComponent"],
19316
19386
  _excluded2$g = ["style"];
19317
19387
  var SlideEffect = _ref => {
19318
19388
  var {
@@ -19322,12 +19392,14 @@ var SlideEffect = _ref => {
19322
19392
  stagger = 50,
19323
19393
  sequential = false,
19324
19394
  textStyle,
19325
- wordProps
19395
+ wordProps,
19396
+ textComponent
19326
19397
  } = _ref,
19327
19398
  props = _objectWithoutPropertiesLoose(_ref, _excluded$_);
19328
19399
  var [displayedText, setDisplayedText] = useState(text);
19329
19400
  var [phase, setPhase] = useState('entering');
19330
19401
  var [animKey, setAnimKey] = useState(0);
19402
+ var TextComponent = textComponent || Text;
19331
19403
  var pendingTextRef = useRef(null);
19332
19404
  var timeoutRef = useRef(null);
19333
19405
  // Handle text changes
@@ -19481,7 +19553,7 @@ var SlideEffect = _ref => {
19481
19553
  transform: phase === 'visible' ? 'translateY(0)' : undefined,
19482
19554
  opacity: phase === 'visible' ? 1 : undefined
19483
19555
  });
19484
- return /*#__PURE__*/React.createElement(Text, Object.assign({
19556
+ return /*#__PURE__*/React.createElement(TextComponent, Object.assign({
19485
19557
  key: animKey + "-" + index,
19486
19558
  as: "span",
19487
19559
  animate: wordAnimation
@@ -19489,7 +19561,7 @@ var SlideEffect = _ref => {
19489
19561
  })));
19490
19562
  };
19491
19563
 
19492
- var _excluded$$ = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration", "highlightSlide", "highlightSlideDuration", "highlightSlideStagger", "highlightSlideSequential", "themeMode"];
19564
+ var _excluded$$ = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration", "highlightSlide", "highlightSlideDuration", "highlightSlideStagger", "highlightSlideSequential", "themeMode", "textComponent"];
19493
19565
  function escapeRegExp(string) {
19494
19566
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
19495
19567
  }
@@ -19513,7 +19585,8 @@ var TitleView = _ref => {
19513
19585
  highlightSlideDuration = 500,
19514
19586
  highlightSlideStagger = 50,
19515
19587
  highlightSlideSequential = true,
19516
- themeMode: elementMode
19588
+ themeMode: elementMode,
19589
+ textComponent
19517
19590
  } = _ref,
19518
19591
  props = _objectWithoutPropertiesLoose(_ref, _excluded$$);
19519
19592
  var {
@@ -19567,6 +19640,7 @@ var TitleView = _ref => {
19567
19640
  highlightSlideStagger,
19568
19641
  highlightSlideSequential
19569
19642
  }, props));
19643
+ var TextComponent = textComponent || Text;
19570
19644
  // Common style calculations
19571
19645
  var useResponsive = responsive && !props.media;
19572
19646
  var fontSize = TitleSizes[size];
@@ -19615,8 +19689,8 @@ var TitleView = _ref => {
19615
19689
  return /*#__PURE__*/React.createElement(TypewriterEffect, Object.assign({
19616
19690
  text: content,
19617
19691
  typingSpeed: Math.max(30, highlightTypewriterDuration / (content.length * 10)),
19618
- showCursor: true,
19619
- cursorColor: "currentColor"
19692
+ cursorColor: "currentColor",
19693
+ textComponent: TextComponent
19620
19694
  }, highlightProps));
19621
19695
  }
19622
19696
  if (highlightSlide) {
@@ -19628,7 +19702,8 @@ var TitleView = _ref => {
19628
19702
  direction: "up",
19629
19703
  fontSize: useResponsive ? undefined : fontSize,
19630
19704
  fontWeight: useResponsive ? responsiveStyles == null ? void 0 : responsiveStyles.fontWeight : 'bold',
19631
- wordProps: highlightProps
19705
+ wordProps: highlightProps,
19706
+ textComponent: TextComponent
19632
19707
  });
19633
19708
  }
19634
19709
  return content;
@@ -19648,7 +19723,7 @@ var TitleView = _ref => {
19648
19723
  lastIndex = match.index + match[0].length;
19649
19724
  }
19650
19725
  if (lastIndex < text.length) parts.push(text.substring(lastIndex));
19651
- return /*#__PURE__*/React.createElement(Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), parts.map((part, idx) => typeof part === 'string' ? part : (/*#__PURE__*/React.createElement(Text, Object.assign({
19726
+ return /*#__PURE__*/React.createElement(Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), parts.map((part, idx) => typeof part === 'string' ? part : (/*#__PURE__*/React.createElement(TextComponent, Object.assign({
19652
19727
  key: "highlight-" + idx,
19653
19728
  as: "span",
19654
19729
  display: "inline",
@@ -19658,7 +19733,7 @@ var TitleView = _ref => {
19658
19733
  }
19659
19734
  // Case 2: Has highlight style but no highlight target - apply style to entire title
19660
19735
  if (highlightStyle && !activeHighlightTarget) {
19661
- return /*#__PURE__*/React.createElement(Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), /*#__PURE__*/React.createElement(Text, Object.assign({
19736
+ return /*#__PURE__*/React.createElement(Element, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), /*#__PURE__*/React.createElement(TextComponent, Object.assign({
19662
19737
  as: "span",
19663
19738
  fontSize: fontSize,
19664
19739
  display: "inline",
@@ -19666,7 +19741,7 @@ var TitleView = _ref => {
19666
19741
  }, !highlightSlide ? highlightProps : {}, views == null ? void 0 : views.highlight), renderHighlightedContent(text)));
19667
19742
  }
19668
19743
  // Case 3: Default - no highlighting
19669
- return /*#__PURE__*/React.createElement(Text, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), text);
19744
+ return /*#__PURE__*/React.createElement(TextComponent, Object.assign({}, containerProps, views == null ? void 0 : views.container, props), text);
19670
19745
  };
19671
19746
 
19672
19747
  /**