@react-xp/design-system 1.0.0-beta.1 → 1.0.0-beta.2

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.
Files changed (169) hide show
  1. package/dist/cjs/components/button/button.native.js +31 -0
  2. package/dist/cjs/components/button/button.shared.js +59 -0
  3. package/dist/cjs/{styles/buttons.js → components/button/button.styles.js} +24 -13
  4. package/dist/cjs/components/button/button.types.js +2 -0
  5. package/dist/cjs/components/button/button.web.js +46 -0
  6. package/dist/cjs/components/button/index.js +18 -0
  7. package/dist/cjs/components/index.js +17 -0
  8. package/dist/cjs/helpers/styles.js +18 -2
  9. package/dist/cjs/index.js +3 -1
  10. package/dist/cjs/showcase/buttons/buttons.web.js +10 -0
  11. package/dist/cjs/showcase/buttons/index.js +17 -0
  12. package/dist/cjs/showcase/index.js +17 -0
  13. package/dist/cjs/showcase/themeWrapper.native.js +40 -0
  14. package/dist/cjs/showcase/themeWrapper.web.js +42 -0
  15. package/dist/cjs/styles/index.js +0 -1
  16. package/dist/cjs/theme/index.js +19 -0
  17. package/dist/cjs/theme/themeContext.js +5 -0
  18. package/dist/cjs/theme/themeProvider.js +9 -0
  19. package/dist/cjs/theme/useTheme.js +13 -0
  20. package/dist/cjs/theme/useTokens.js +6 -0
  21. package/dist/cjs/types/states.js +1 -4
  22. package/dist/esm/components/button/button.native.js +27 -0
  23. package/dist/esm/components/button/button.shared.js +54 -0
  24. package/dist/esm/{styles/buttons.js → components/button/button.styles.js} +24 -13
  25. package/dist/esm/components/button/button.types.js +1 -0
  26. package/dist/esm/components/button/button.web.js +42 -0
  27. package/dist/esm/components/button/index.js +2 -0
  28. package/dist/esm/components/index.js +1 -0
  29. package/dist/esm/helpers/styles.js +16 -2
  30. package/dist/esm/index.js +3 -1
  31. package/dist/esm/showcase/buttons/buttons.web.js +6 -0
  32. package/dist/esm/showcase/buttons/index.js +1 -0
  33. package/dist/esm/showcase/index.js +1 -0
  34. package/dist/esm/showcase/themeWrapper.native.js +36 -0
  35. package/dist/esm/showcase/themeWrapper.web.js +38 -0
  36. package/dist/esm/styles/cards.js +1 -1
  37. package/dist/esm/styles/checkboxes.js +1 -1
  38. package/dist/esm/styles/chips.js +1 -1
  39. package/dist/esm/styles/datePickers.js +1 -1
  40. package/dist/esm/styles/index.js +0 -1
  41. package/dist/esm/styles/inputs.js +1 -1
  42. package/dist/esm/styles/listItems.js +1 -1
  43. package/dist/esm/styles/popovers.js +1 -1
  44. package/dist/esm/styles/radios.js +1 -1
  45. package/dist/esm/styles/selects.js +1 -1
  46. package/dist/esm/styles/steppers.js +1 -1
  47. package/dist/esm/styles/switches.js +1 -1
  48. package/dist/esm/styles/tabs.js +1 -1
  49. package/dist/esm/styles/toasts.js +1 -1
  50. package/dist/esm/styles/tooltips.js +1 -1
  51. package/dist/esm/theme/index.js +3 -0
  52. package/dist/esm/theme/themeContext.js +2 -0
  53. package/dist/esm/theme/themeProvider.js +5 -0
  54. package/dist/esm/theme/useTheme.js +9 -0
  55. package/dist/esm/theme/useTokens.js +2 -0
  56. package/dist/esm/types/states.js +0 -2
  57. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  58. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  59. package/dist/types/components/button/button.native.d.ts +3 -0
  60. package/dist/types/components/button/button.native.d.ts.map +1 -0
  61. package/dist/types/components/button/button.shared.d.ts +27 -0
  62. package/dist/types/components/button/button.shared.d.ts.map +1 -0
  63. package/dist/types/components/button/button.styles.d.ts +20 -0
  64. package/dist/types/components/button/button.styles.d.ts.map +1 -0
  65. package/dist/types/components/button/button.types.d.ts +19 -0
  66. package/dist/types/components/button/button.types.d.ts.map +1 -0
  67. package/dist/types/components/button/button.web.d.ts +3 -0
  68. package/dist/types/components/button/button.web.d.ts.map +1 -0
  69. package/dist/types/components/button/index.d.ts +3 -0
  70. package/dist/types/components/button/index.d.ts.map +1 -0
  71. package/dist/types/components/index.d.ts +2 -0
  72. package/dist/types/components/index.d.ts.map +1 -0
  73. package/dist/types/helpers/a11y.d.ts +5 -5
  74. package/dist/types/helpers/a11y.d.ts.map +1 -1
  75. package/dist/types/helpers/styles.d.ts +12 -9
  76. package/dist/types/helpers/styles.d.ts.map +1 -1
  77. package/dist/types/index.d.ts +3 -1
  78. package/dist/types/index.d.ts.map +1 -1
  79. package/dist/types/showcase/buttons/buttons.web.d.ts +2 -0
  80. package/dist/types/showcase/buttons/buttons.web.d.ts.map +1 -0
  81. package/dist/types/showcase/buttons/index.d.ts +2 -0
  82. package/dist/types/showcase/buttons/index.d.ts.map +1 -0
  83. package/dist/types/showcase/index.d.ts +2 -0
  84. package/dist/types/showcase/index.d.ts.map +1 -0
  85. package/dist/types/showcase/themeWrapper.native.d.ts +5 -0
  86. package/dist/types/showcase/themeWrapper.native.d.ts.map +1 -0
  87. package/dist/types/showcase/themeWrapper.web.d.ts +5 -0
  88. package/dist/types/showcase/themeWrapper.web.d.ts.map +1 -0
  89. package/dist/types/styles/avatars.d.ts +2 -2
  90. package/dist/types/styles/avatars.d.ts.map +1 -1
  91. package/dist/types/styles/badges.d.ts +2 -2
  92. package/dist/types/styles/badges.d.ts.map +1 -1
  93. package/dist/types/styles/bottomSheets.d.ts +2 -2
  94. package/dist/types/styles/bottomSheets.d.ts.map +1 -1
  95. package/dist/types/styles/cards.d.ts +2 -2
  96. package/dist/types/styles/cards.d.ts.map +1 -1
  97. package/dist/types/styles/checkboxes.d.ts +2 -2
  98. package/dist/types/styles/checkboxes.d.ts.map +1 -1
  99. package/dist/types/styles/chips.d.ts +2 -2
  100. package/dist/types/styles/chips.d.ts.map +1 -1
  101. package/dist/types/styles/datePickers.d.ts +3 -3
  102. package/dist/types/styles/datePickers.d.ts.map +1 -1
  103. package/dist/types/styles/dividers.d.ts +2 -2
  104. package/dist/types/styles/dividers.d.ts.map +1 -1
  105. package/dist/types/styles/emptyStates.d.ts +2 -2
  106. package/dist/types/styles/emptyStates.d.ts.map +1 -1
  107. package/dist/types/styles/forms.d.ts +2 -2
  108. package/dist/types/styles/forms.d.ts.map +1 -1
  109. package/dist/types/styles/headers.d.ts +2 -2
  110. package/dist/types/styles/headers.d.ts.map +1 -1
  111. package/dist/types/styles/index.d.ts +0 -1
  112. package/dist/types/styles/index.d.ts.map +1 -1
  113. package/dist/types/styles/inputs.d.ts +2 -2
  114. package/dist/types/styles/inputs.d.ts.map +1 -1
  115. package/dist/types/styles/listItems.d.ts +2 -2
  116. package/dist/types/styles/listItems.d.ts.map +1 -1
  117. package/dist/types/styles/modals.d.ts +2 -2
  118. package/dist/types/styles/modals.d.ts.map +1 -1
  119. package/dist/types/styles/pagination.d.ts +2 -2
  120. package/dist/types/styles/pagination.d.ts.map +1 -1
  121. package/dist/types/styles/popovers.d.ts +2 -2
  122. package/dist/types/styles/popovers.d.ts.map +1 -1
  123. package/dist/types/styles/progress.d.ts +4 -4
  124. package/dist/types/styles/progress.d.ts.map +1 -1
  125. package/dist/types/styles/radios.d.ts +2 -2
  126. package/dist/types/styles/radios.d.ts.map +1 -1
  127. package/dist/types/styles/selects.d.ts +2 -2
  128. package/dist/types/styles/selects.d.ts.map +1 -1
  129. package/dist/types/styles/skeletons.d.ts +3 -3
  130. package/dist/types/styles/skeletons.d.ts.map +1 -1
  131. package/dist/types/styles/steppers.d.ts +3 -3
  132. package/dist/types/styles/steppers.d.ts.map +1 -1
  133. package/dist/types/styles/switches.d.ts +2 -2
  134. package/dist/types/styles/switches.d.ts.map +1 -1
  135. package/dist/types/styles/tables.d.ts +2 -2
  136. package/dist/types/styles/tables.d.ts.map +1 -1
  137. package/dist/types/styles/tabs.d.ts +3 -3
  138. package/dist/types/styles/tabs.d.ts.map +1 -1
  139. package/dist/types/styles/toasts.d.ts +3 -3
  140. package/dist/types/styles/toasts.d.ts.map +1 -1
  141. package/dist/types/styles/tooltips.d.ts +2 -2
  142. package/dist/types/styles/tooltips.d.ts.map +1 -1
  143. package/dist/types/theme/index.d.ts +4 -0
  144. package/dist/types/theme/index.d.ts.map +1 -0
  145. package/dist/types/theme/themeContext.d.ts +6 -0
  146. package/dist/types/theme/themeContext.d.ts.map +1 -0
  147. package/dist/types/theme/themeProvider.d.ts +6 -0
  148. package/dist/types/theme/themeProvider.d.ts.map +1 -0
  149. package/dist/types/theme/themes/corporate/colors.d.ts.map +1 -0
  150. package/dist/types/theme/themes/corporate/index.d.ts.map +1 -0
  151. package/dist/types/theme/useTheme.d.ts +2 -0
  152. package/dist/types/theme/useTheme.d.ts.map +1 -0
  153. package/dist/types/theme/useTokens.d.ts +2 -0
  154. package/dist/types/theme/useTokens.d.ts.map +1 -0
  155. package/dist/types/types/states.d.ts +3 -9
  156. package/dist/types/types/states.d.ts.map +1 -1
  157. package/dist/types/types/tokens.d.ts +5 -6
  158. package/dist/types/types/tokens.d.ts.map +1 -1
  159. package/package.json +5 -3
  160. package/dist/types/styles/buttons.d.ts +0 -22
  161. package/dist/types/styles/buttons.d.ts.map +0 -1
  162. package/dist/types/themes/corporate/colors.d.ts.map +0 -1
  163. package/dist/types/themes/corporate/index.d.ts.map +0 -1
  164. /package/dist/cjs/{themes → theme/themes}/corporate/colors.js +0 -0
  165. /package/dist/cjs/{themes → theme/themes}/corporate/index.js +0 -0
  166. /package/dist/esm/{themes → theme/themes}/corporate/colors.js +0 -0
  167. /package/dist/esm/{themes → theme/themes}/corporate/index.js +0 -0
  168. /package/dist/types/{themes → theme/themes}/corporate/colors.d.ts +0 -0
  169. /package/dist/types/{themes → theme/themes}/corporate/index.d.ts +0 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Button = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const aeiou_1 = require("@react-xp/aeiou");
6
+ // src/button/Button.native.tsx
7
+ const react_native_1 = require("react-native");
8
+ const theme_1 = require("../../theme");
9
+ const button_shared_1 = require("./button.shared");
10
+ const Button = (props) => {
11
+ const tokens = (0, theme_1.useTokens)();
12
+ const { children, variant = 'primary', size = 'md', disabled, loading, fullWidth, leftIcon, rightIcon, onClick, onPress, accessibilityLabel, testId, } = props;
13
+ const isDisabled = Boolean(disabled || loading);
14
+ const st = (0, button_shared_1.resolveButtonStyles)({
15
+ platform: 'native',
16
+ tokens,
17
+ variant,
18
+ size,
19
+ props,
20
+ });
21
+ const content = ((0, jsx_runtime_1.jsxs)(aeiou_1.A, { testId: testId, accessibilityRole: "button", accessibilityLabel: accessibilityLabel, accessibilityState: { disabled: isDisabled, busy: !!loading }, disabled: isDisabled, onPress: onPress, style: st.style.container, onClick: onClick, children: [(0, button_shared_1.applyIconStyle)(leftIcon, st.style.icon), (0, jsx_runtime_1.jsx)(aeiou_1.T, { style: st.style.label, children: children }), (0, button_shared_1.applyIconStyle)(rightIcon, st.style.icon), loading ? ((0, jsx_runtime_1.jsx)(aeiou_1.E, { style: { marginLeft: 8 }, children: (0, jsx_runtime_1.jsx)(react_native_1.ActivityIndicator, {}) })) : null] }));
22
+ // focus wrapper (RN) – quando focused, coloca ring + gap
23
+ // if (!st.focusWrapper || !st.focusRing) return content;
24
+ // return (
25
+ // <E style={st.focusWrapper as TAny}>
26
+ // <E style={st.focusRing as TAny}>{content}</E>
27
+ // </E>
28
+ // );
29
+ return content;
30
+ };
31
+ exports.Button = Button;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyIconStyle = exports.resolveButtonStyles = void 0;
4
+ const react_1 = require("react");
5
+ const helpers_1 = require("../../helpers");
6
+ const button_styles_1 = require("./button.styles");
7
+ const resolveButtonStyles = ({ platform, tokens, variant, size, props, }) => {
8
+ const parts = (0, button_styles_1.getButtonParts)(tokens, {
9
+ variant,
10
+ size,
11
+ props,
12
+ });
13
+ // foco: wrapper + ring cross-platform (para ser consistente)
14
+ const radius = parts.container.borderRadius;
15
+ // filtra props web-only/native-only e normaliza px->number no native
16
+ const container = (0, helpers_1.normalizeSxForPlatform)(platform, (0, helpers_1.pickSxForPlatform)(platform, parts.container));
17
+ const label = (0, helpers_1.normalizeSxForPlatform)(platform, (0, helpers_1.pickSxForPlatform)(platform, parts.label));
18
+ const icon = (0, helpers_1.normalizeSxForPlatform)(platform, (0, helpers_1.pickSxForPlatform)(platform, parts.icon));
19
+ return {
20
+ interactionStyle: {
21
+ focusRing: {
22
+ focused: (0, helpers_1.normalizeSxForPlatform)(platform, (0, helpers_1.pickSxForPlatform)(platform, (0, helpers_1.getFocusRingSx)(tokens, platform, {
23
+ borderRadius: radius,
24
+ }))),
25
+ },
26
+ focusWrapper: {
27
+ focused: (0, helpers_1.normalizeSxForPlatform)(platform, (0, helpers_1.pickSxForPlatform)(platform, (0, helpers_1.getFocusWrapperSx)(tokens, platform, {
28
+ borderRadius: radius,
29
+ }))),
30
+ },
31
+ },
32
+ style: {
33
+ container,
34
+ label,
35
+ icon,
36
+ },
37
+ };
38
+ };
39
+ exports.resolveButtonStyles = resolveButtonStyles;
40
+ const applyIconStyle = (node, iconSx) => {
41
+ if (!node)
42
+ return null;
43
+ // Se for ReactElement, tentamos clonar com props/style
44
+ if (typeof node === 'object' && node && 'type' in node) {
45
+ const el = node;
46
+ const prevStyle = el.props?.style;
47
+ return (0, react_1.cloneElement)(el, {
48
+ ...el.props,
49
+ style: Array.isArray(prevStyle)
50
+ ? [...prevStyle, iconSx]
51
+ : prevStyle
52
+ ? [prevStyle, iconSx]
53
+ : iconSx,
54
+ });
55
+ }
56
+ // Se for string/number/etc, devolve como está
57
+ return node;
58
+ };
59
+ exports.applyIconStyle = applyIconStyle;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getButtonParts = void 0;
4
4
  // styles/buttons.ts
5
- const tokens_1 = require("../types/tokens");
5
+ const tokens_1 = require("../../types/tokens");
6
6
  const variantStyles = (t) => ({
7
7
  primary: {
8
8
  container: {
@@ -77,10 +77,11 @@ const sizeStyles = (t) => ({
77
77
  },
78
78
  },
79
79
  });
80
- const getButtonParts = (t, opts = {}) => {
80
+ const getButtonParts = (t, opts = { props: {} }) => {
81
81
  const variant = opts.variant ?? 'primary';
82
82
  const size = opts.size ?? 'md';
83
- const isDisabled = Boolean(opts.disabled || opts.loading);
83
+ const disabled = opts.props.disabled ?? false;
84
+ const fullWidth = opts.props.fullWidth ?? false;
84
85
  const baseContainer = {
85
86
  borderWidth: (0, tokens_1.tok)(t, 'border-width-default'),
86
87
  borderRadius: (0, tokens_1.tok)(t, 'radius-3'),
@@ -109,21 +110,31 @@ const getButtonParts = (t, opts = {}) => {
109
110
  label: { color: (0, tokens_1.tok)(t, 'color-state-disabled-fg') },
110
111
  };
111
112
  const interaction = {
112
- hovered: { container: { opacity: 0.96 } },
113
- pressed: { container: { opacity: (0, tokens_1.tok)(t, 'opacity-pressed') } },
113
+ hovered: { container: { opacity: 0.7 } },
114
+ pressed: {
115
+ container: { opacity: (0, tokens_1.tok)(t, 'opacity-pressed') },
116
+ },
114
117
  fullWidth: { container: { alignSelf: 'stretch' } },
115
118
  };
116
119
  const v = variantStyles(t)[variant];
117
120
  const s = sizeStyles(t)[size];
118
121
  return {
119
- container: (0, tokens_1.merge)(baseContainer, s.container, v.container, opts.fullWidth && interaction.fullWidth.container, opts.hovered && interaction.hovered.container, opts.pressed && interaction.pressed.container, isDisabled && disabledStyles.container),
120
- label: (0, tokens_1.merge)(baseLabel, s.label, v.label, isDisabled && disabledStyles.label),
121
- icon: (0, tokens_1.merge)(s.icon, {
122
- color: (isDisabled
123
- ? disabledStyles.label.color
124
- : v.label.color),
125
- }),
126
- focusRing: (0, tokens_1.merge)(opts.focused ? focusRing : undefined),
122
+ container: {
123
+ ...(0, tokens_1.merge)(baseContainer, s.container, v.container, fullWidth && interaction.fullWidth.container, disabled && disabledStyles.container),
124
+ $hovered: interaction.hovered.container,
125
+ $pressed: interaction.pressed.container,
126
+ },
127
+ focusRing: {
128
+ $focused: focusRing,
129
+ },
130
+ icon: {
131
+ ...(0, tokens_1.merge)(s.icon, { color: v.label.color }),
132
+ $disabled: { color: disabledStyles.label.color },
133
+ },
134
+ label: {
135
+ ...(0, tokens_1.merge)(baseLabel, s.label, v.label),
136
+ $disabled: disabled && disabledStyles.label,
137
+ },
127
138
  };
128
139
  };
129
140
  exports.getButtonParts = getButtonParts;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Button = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const aeiou_1 = require("@react-xp/aeiou");
6
+ const theme_1 = require("../../theme");
7
+ const button_shared_1 = require("./button.shared");
8
+ const Button = (props) => {
9
+ const tokens = (0, theme_1.useTokens)();
10
+ const { children, variant = 'primary', size = 'md', disabled, loading, fullWidth, leftIcon, rightIcon, type = 'button', onClick, onPress, accessibilityLabel, testId, } = props;
11
+ const isDisabled = Boolean(disabled || loading);
12
+ const st = (0, button_shared_1.resolveButtonStyles)({
13
+ platform: 'web',
14
+ tokens,
15
+ variant,
16
+ size,
17
+ props,
18
+ });
19
+ // wrapper + ring (para "gap" + outline consistente)
20
+ const Wrapper = ({ children }) => {
21
+ // if (!st.focusWrapper || !st.focusRing) return <>{children}</>;
22
+ return (
23
+ // <span style={st.focusWrapper as TAny}>
24
+ // <span style={st.focusRing as TAny}>{children}</span>
25
+ // </span>
26
+ (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children }));
27
+ };
28
+ console.log('button web render', {
29
+ isDisabled,
30
+ loading,
31
+ st,
32
+ });
33
+ return ((0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsxs)(aeiou_1.A, { disabled: isDisabled, loading: loading, accessibilityLabel: accessibilityLabel, testId: testId, style: st.style.container, onClick: onClick, onPress: onPress, children: [(0, button_shared_1.applyIconStyle)(leftIcon, st.style.icon), (0, jsx_runtime_1.jsx)("span", { style: st.style.label, children: children }), (0, button_shared_1.applyIconStyle)(rightIcon, st.style.icon), loading ? ((0, jsx_runtime_1.jsx)("span", { "aria-hidden": "true", style: {
34
+ marginLeft: 8,
35
+ display: 'inline-flex',
36
+ alignItems: 'center',
37
+ justifyContent: 'center',
38
+ }, children: (0, jsx_runtime_1.jsx)("span", { style: {
39
+ width: 14,
40
+ height: 14,
41
+ borderRadius: 9999,
42
+ border: '2px solid currentColor',
43
+ borderTopColor: 'transparent',
44
+ } }) })) : null] }) }));
45
+ };
46
+ exports.Button = Button;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./button.shared"), exports);
18
+ __exportStar(require("./button.types"), exports);
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./button"), exports);
@@ -6,8 +6,7 @@
6
6
  // - mapear shadow tokens (CSS box-shadow) para RN shadow props
7
7
  // - focus ring cross-platform (wrapper approach)
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.getFocusWrapperSx = exports.getFocusRingSx = exports.resolveShadow = exports.pickSxForPlatform = exports.getFocusRingGap = exports.getTapTargetMin = exports.getBorderWidthFocus = exports.getBorderWidthDefault = exports.normalizeValueForPlatform = exports.toPx = exports.toNumber = void 0;
10
- // Nota: aqui não dependemos das tuas primitives — isto é “infra” para o teu runtime/binding.
9
+ exports.mergeSx = exports.normalizeSxForPlatform = exports.getFocusWrapperSx = exports.getFocusRingSx = exports.resolveShadow = exports.pickSxForPlatform = exports.getFocusRingGap = exports.getTapTargetMin = exports.getBorderWidthFocus = exports.getBorderWidthDefault = exports.normalizeValueForPlatform = exports.toPx = exports.toNumber = void 0;
11
10
  const types_1 = require("../types");
12
11
  /**
13
12
  * Tokens utilitários são string com px (ex.: "1px", "44px")
@@ -170,3 +169,20 @@ const getFocusWrapperSx = (t, platform, opts) => ({
170
169
  borderRadius: opts?.borderRadius,
171
170
  });
172
171
  exports.getFocusWrapperSx = getFocusWrapperSx;
172
+ const isPx = (v) => typeof v === 'string' && v.trim().endsWith('px');
173
+ const pxToNumber = (v) => Number.parseFloat(v);
174
+ const normalizeSxForPlatform = (platform, sx) => {
175
+ if (platform === 'web')
176
+ return sx;
177
+ // native: converter strings "Npx" -> number
178
+ const out = {};
179
+ for (const [k, v] of Object.entries(sx)) {
180
+ if (v === undefined)
181
+ continue;
182
+ out[k] = isPx(v) ? pxToNumber(v) : v;
183
+ }
184
+ return out;
185
+ };
186
+ exports.normalizeSxForPlatform = normalizeSxForPlatform;
187
+ const mergeSx = (...styles) => Object.assign({}, ...styles.filter(Boolean));
188
+ exports.mergeSx = mergeSx;
package/dist/cjs/index.js CHANGED
@@ -14,7 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./components"), exports);
17
18
  __exportStar(require("./helpers"), exports);
19
+ __exportStar(require("./showcase"), exports);
18
20
  __exportStar(require("./styles"), exports);
19
- __exportStar(require("./themes/corporate"), exports);
21
+ __exportStar(require("./theme"), exports);
20
22
  __exportStar(require("./types"), exports);
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ButtonsShowcase = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const button_web_1 = require("../../components/button/button.web");
6
+ const themeWrapper_web_1 = require("../themeWrapper.web");
7
+ const ButtonsShowcase = () => {
8
+ return ((0, jsx_runtime_1.jsx)(themeWrapper_web_1.ThemeWrapper, { children: (0, jsx_runtime_1.jsx)(button_web_1.Button, { children: "Button example" }) }));
9
+ };
10
+ exports.ButtonsShowcase = ButtonsShowcase;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./buttons.web"), exports);
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./buttons"), exports);
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const styleguide_1 = require("@react-xp/styleguide");
6
+ const react_1 = require("react");
7
+ const button_native_1 = require("../components/button/button.native");
8
+ const theme_1 = require("../theme");
9
+ const corporate_1 = require("../theme/themes/corporate");
10
+ const ThemeWrapper = ({ children }) => {
11
+ const [currentTheme, setCurrentTheme] = (0, react_1.useState)('corporate');
12
+ const [currentThemeMode, setCurrentThemeMode] = (0, react_1.useState)('light');
13
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
14
+ const themeTokens = (() => {
15
+ switch (currentTheme) {
16
+ case 'corporate':
17
+ return currentThemeMode === 'light'
18
+ ? corporate_1.themeCorporateColors.light
19
+ : corporate_1.themeCorporateColors.dark;
20
+ }
21
+ })();
22
+ return ((0, jsx_runtime_1.jsxs)(theme_1.ThemeProvider, { tokens: {
23
+ ...styleguide_1.styleguideBreakpoints,
24
+ ...styleguide_1.styleguideComponentPadding,
25
+ ...styleguide_1.styleguideLayoutGrid,
26
+ ...styleguide_1.styleguideMotionDuration,
27
+ ...styleguide_1.styleguideMotionEasing,
28
+ ...styleguide_1.styleguideMotionPreset,
29
+ ...styleguide_1.styleguideRadius,
30
+ ...styleguide_1.styleguideShadows,
31
+ ...styleguide_1.styleguideSpaceX,
32
+ ...styleguide_1.styleguideSpaceY,
33
+ ...styleguide_1.styleguideSpacing,
34
+ ...styleguide_1.styleguideTypography,
35
+ ...styleguide_1.styleguideUtils,
36
+ ...styleguide_1.styleguideZIndex,
37
+ ...themeTokens,
38
+ }, children: [(0, jsx_runtime_1.jsx)(button_native_1.Button, { onClick: () => setCurrentThemeMode(currentThemeMode === 'light' ? 'dark' : 'light'), children: "Toggle Theme Mode" }), children] }));
39
+ };
40
+ exports.ThemeWrapper = ThemeWrapper;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const styleguide_1 = require("@react-xp/styleguide");
6
+ const react_1 = require("react");
7
+ const button_web_1 = require("../components/button/button.web");
8
+ const theme_1 = require("../theme");
9
+ const corporate_1 = require("../theme/themes/corporate");
10
+ const ThemeWrapper = ({ children }) => {
11
+ const [currentTheme, setCurrentTheme] = (0, react_1.useState)('corporate');
12
+ const [currentThemeMode, setCurrentThemeMode] = (0, react_1.useState)('light');
13
+ const themeTokens = (() => {
14
+ switch (currentTheme) {
15
+ case 'corporate':
16
+ return currentThemeMode === 'light'
17
+ ? corporate_1.themeCorporateColors.light
18
+ : corporate_1.themeCorporateColors.dark;
19
+ }
20
+ })();
21
+ console.log('themeTokens', themeTokens);
22
+ console.log('currentThemeMode', currentThemeMode);
23
+ return ((0, jsx_runtime_1.jsx)(theme_1.ThemeProvider, { tokens: {
24
+ ...styleguide_1.styleguideBreakpoints,
25
+ ...styleguide_1.styleguideComponentPadding,
26
+ ...styleguide_1.styleguideLayoutGrid,
27
+ ...styleguide_1.styleguideMotionDuration,
28
+ ...styleguide_1.styleguideMotionEasing,
29
+ ...styleguide_1.styleguideMotionPreset,
30
+ ...styleguide_1.styleguideRadius,
31
+ ...styleguide_1.styleguideShadows,
32
+ ...styleguide_1.styleguideSpaceX,
33
+ ...styleguide_1.styleguideSpaceY,
34
+ ...styleguide_1.styleguideSpacing,
35
+ ...styleguide_1.styleguideTypography,
36
+ ...styleguide_1.styleguideUtils,
37
+ ...styleguide_1.styleguideZIndex,
38
+ ...themeTokens,
39
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
40
+ }, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex m-4", style: { backgroundColor: themeTokens['color-bg-default'] }, children: [(0, jsx_runtime_1.jsx)(button_web_1.Button, { onClick: () => setCurrentThemeMode(currentThemeMode === 'light' ? 'dark' : 'light'), children: "Toggle Theme Mode" }), children] }) }));
41
+ };
42
+ exports.ThemeWrapper = ThemeWrapper;
@@ -17,7 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./avatars"), exports);
18
18
  __exportStar(require("./badges"), exports);
19
19
  __exportStar(require("./bottomSheets"), exports);
20
- __exportStar(require("./buttons"), exports);
21
20
  __exportStar(require("./cards"), exports);
22
21
  __exportStar(require("./checkboxes"), exports);
23
22
  __exportStar(require("./chips"), exports);
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./themeProvider"), exports);
18
+ __exportStar(require("./useTheme"), exports);
19
+ __exportStar(require("./useTokens"), exports);
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeContext = void 0;
4
+ const react_1 = require("react");
5
+ exports.ThemeContext = (0, react_1.createContext)(null);
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeProvider = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const themeContext_1 = require("./themeContext");
6
+ const ThemeProvider = ({ children, tokens, }) => {
7
+ return ((0, jsx_runtime_1.jsx)(themeContext_1.ThemeContext.Provider, { value: { tokens }, children: children }));
8
+ };
9
+ exports.ThemeProvider = ThemeProvider;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTheme = void 0;
4
+ const react_1 = require("react");
5
+ const themeContext_1 = require("./themeContext");
6
+ const useTheme = () => {
7
+ const ctx = (0, react_1.useContext)(themeContext_1.ThemeContext);
8
+ if (!ctx) {
9
+ throw new Error('useTheme must be used within <ThemeProvider>');
10
+ }
11
+ return ctx;
12
+ };
13
+ exports.useTheme = useTheme;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTokens = void 0;
4
+ const useTheme_1 = require("./useTheme");
5
+ const useTokens = () => (0, useTheme_1.useTheme)().tokens;
6
+ exports.useTokens = useTokens;
@@ -1,8 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isInvalid = exports.isDisabled = void 0;
4
- // Helpers pequenos (opcionais)
5
- const isDisabled = (s) => Boolean(s?.disabled || s?.loading);
6
- exports.isDisabled = isDisabled;
3
+ exports.isInvalid = void 0;
7
4
  const isInvalid = (s) => Boolean(s?.error || s?.invalid);
8
5
  exports.isInvalid = isInvalid;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { A, E, T } from '@react-xp/aeiou';
3
+ // src/button/Button.native.tsx
4
+ import { ActivityIndicator } from 'react-native';
5
+ import { useTokens } from '../../theme';
6
+ import { applyIconStyle, resolveButtonStyles } from './button.shared';
7
+ export const Button = (props) => {
8
+ const tokens = useTokens();
9
+ const { children, variant = 'primary', size = 'md', disabled, loading, fullWidth, leftIcon, rightIcon, onClick, onPress, accessibilityLabel, testId, } = props;
10
+ const isDisabled = Boolean(disabled || loading);
11
+ const st = resolveButtonStyles({
12
+ platform: 'native',
13
+ tokens,
14
+ variant,
15
+ size,
16
+ props,
17
+ });
18
+ const content = (_jsxs(A, { testId: testId, accessibilityRole: "button", accessibilityLabel: accessibilityLabel, accessibilityState: { disabled: isDisabled, busy: !!loading }, disabled: isDisabled, onPress: onPress, style: st.style.container, onClick: onClick, children: [applyIconStyle(leftIcon, st.style.icon), _jsx(T, { style: st.style.label, children: children }), applyIconStyle(rightIcon, st.style.icon), loading ? (_jsx(E, { style: { marginLeft: 8 }, children: _jsx(ActivityIndicator, {}) })) : null] }));
19
+ // focus wrapper (RN) – quando focused, coloca ring + gap
20
+ // if (!st.focusWrapper || !st.focusRing) return content;
21
+ // return (
22
+ // <E style={st.focusWrapper as TAny}>
23
+ // <E style={st.focusRing as TAny}>{content}</E>
24
+ // </E>
25
+ // );
26
+ return content;
27
+ };
@@ -0,0 +1,54 @@
1
+ import { cloneElement } from 'react';
2
+ import { getFocusRingSx, getFocusWrapperSx, normalizeSxForPlatform, pickSxForPlatform, } from '../../helpers';
3
+ import { getButtonParts } from './button.styles';
4
+ export const resolveButtonStyles = ({ platform, tokens, variant, size, props, }) => {
5
+ const parts = getButtonParts(tokens, {
6
+ variant,
7
+ size,
8
+ props,
9
+ });
10
+ // foco: wrapper + ring cross-platform (para ser consistente)
11
+ const radius = parts.container.borderRadius;
12
+ // filtra props web-only/native-only e normaliza px->number no native
13
+ const container = normalizeSxForPlatform(platform, pickSxForPlatform(platform, parts.container));
14
+ const label = normalizeSxForPlatform(platform, pickSxForPlatform(platform, parts.label));
15
+ const icon = normalizeSxForPlatform(platform, pickSxForPlatform(platform, parts.icon));
16
+ return {
17
+ interactionStyle: {
18
+ focusRing: {
19
+ focused: normalizeSxForPlatform(platform, pickSxForPlatform(platform, getFocusRingSx(tokens, platform, {
20
+ borderRadius: radius,
21
+ }))),
22
+ },
23
+ focusWrapper: {
24
+ focused: normalizeSxForPlatform(platform, pickSxForPlatform(platform, getFocusWrapperSx(tokens, platform, {
25
+ borderRadius: radius,
26
+ }))),
27
+ },
28
+ },
29
+ style: {
30
+ container,
31
+ label,
32
+ icon,
33
+ },
34
+ };
35
+ };
36
+ export const applyIconStyle = (node, iconSx) => {
37
+ if (!node)
38
+ return null;
39
+ // Se for ReactElement, tentamos clonar com props/style
40
+ if (typeof node === 'object' && node && 'type' in node) {
41
+ const el = node;
42
+ const prevStyle = el.props?.style;
43
+ return cloneElement(el, {
44
+ ...el.props,
45
+ style: Array.isArray(prevStyle)
46
+ ? [...prevStyle, iconSx]
47
+ : prevStyle
48
+ ? [prevStyle, iconSx]
49
+ : iconSx,
50
+ });
51
+ }
52
+ // Se for string/number/etc, devolve como está
53
+ return node;
54
+ };