@consumidor-positivo/aurora 0.11.1 → 1.0.0

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 (217) hide show
  1. package/dist/{BadgeWhite-DwzVEF3U.js → BadgeWhite-CkZPPGmT.js} +43 -42
  2. package/dist/BadgeWhite-CkZPPGmT.js.map +1 -0
  3. package/dist/components/AdBox/index.d.ts +7 -0
  4. package/dist/components/AdBox/index.es.js +22 -0
  5. package/dist/components/AdBox/index.es.js.map +1 -0
  6. package/dist/components/AdBox/styles.css +1 -0
  7. package/dist/components/Alert/index.d.ts +8 -2
  8. package/dist/components/Alert/index.es.js +18 -4
  9. package/dist/components/Alert/index.es.js.map +1 -1
  10. package/dist/components/Alert/styles.css +1 -1
  11. package/dist/components/BadgeInfo/index.d.ts +2 -5
  12. package/dist/components/BadgeInfo/index.es.js +5 -3
  13. package/dist/components/BadgeInfo/index.es.js.map +1 -1
  14. package/dist/components/BadgeState/index.d.ts +3 -2
  15. package/dist/components/BadgeState/index.es.js +10 -3
  16. package/dist/components/BadgeState/index.es.js.map +1 -1
  17. package/dist/components/BadgeState/styles.css +1 -1
  18. package/dist/components/Button/index.d.ts +9 -0
  19. package/dist/components/Button/index.es.js.map +1 -1
  20. package/dist/components/Button/styles.css +1 -1
  21. package/dist/components/Calendar/index.es.js +2 -2
  22. package/dist/components/CalendarHeader/index.es.js +3 -2
  23. package/dist/components/CalendarHeader/index.es.js.map +1 -1
  24. package/dist/components/Card/Container/index.d.ts +2 -1
  25. package/dist/components/Card/Emphasis/index.d.ts +2 -1
  26. package/dist/components/Card/Image/index.d.ts +2 -1
  27. package/dist/components/Card/Root/index.d.ts +2 -1
  28. package/dist/components/Card/Tag/index.d.ts +2 -1
  29. package/dist/components/Card/index.es.js +2 -2
  30. package/dist/components/Card/index.es.js.map +1 -1
  31. package/dist/components/Carousel/index.es.js +3 -2
  32. package/dist/components/Carousel/index.es.js.map +1 -1
  33. package/dist/components/Checkbox/index.es.js +4 -3
  34. package/dist/components/Checkbox/index.es.js.map +1 -1
  35. package/dist/components/Chip/index.d.ts +4 -3
  36. package/dist/components/Chip/index.es.js +13 -5
  37. package/dist/components/Chip/index.es.js.map +1 -1
  38. package/dist/components/Chip/styles.css +1 -1
  39. package/dist/components/ChipBanner/ChipBanner.test.d.ts +1 -0
  40. package/dist/components/ChipBanner/index.d.ts +12 -0
  41. package/dist/components/ChipBanner/index.es.js +99 -0
  42. package/dist/components/ChipBanner/index.es.js.map +1 -0
  43. package/dist/components/ChipBanner/styles.css +1 -0
  44. package/dist/components/Container/index.d.ts +2 -1
  45. package/dist/components/Container/index.es.js +13 -2
  46. package/dist/components/Container/index.es.js.map +1 -1
  47. package/dist/components/Datepicker/index.es.js +4 -4
  48. package/dist/components/Divider/index.d.ts +6 -0
  49. package/dist/components/Divider/index.es.js +17 -0
  50. package/dist/components/Divider/index.es.js.map +1 -0
  51. package/dist/components/Divider/styles.css +1 -0
  52. package/dist/components/Drawer/index.d.ts +8 -1
  53. package/dist/components/Drawer/index.es.js +7 -2
  54. package/dist/components/Drawer/index.es.js.map +1 -1
  55. package/dist/components/Drawer/styles.css +1 -1
  56. package/dist/components/Emphasis/index.es.js +3 -2
  57. package/dist/components/Emphasis/index.es.js.map +1 -1
  58. package/dist/components/Footer/index.d.ts +1 -1
  59. package/dist/components/Footer/index.es.js +5 -3
  60. package/dist/components/Footer/index.es.js.map +1 -1
  61. package/dist/components/Footer/types.d.ts +1 -0
  62. package/dist/components/Group/index.es.js +3 -2
  63. package/dist/components/Group/index.es.js.map +1 -1
  64. package/dist/components/Header/index.es.js +54 -17
  65. package/dist/components/Header/index.es.js.map +1 -1
  66. package/dist/components/Header/parts/HeaderActions.d.ts +2 -1
  67. package/dist/components/Header/parts/HeaderBadges.d.ts +2 -1
  68. package/dist/components/Header/parts/HeaderButton.d.ts +2 -1
  69. package/dist/components/Header/parts/HeaderHamburger.d.ts +2 -1
  70. package/dist/components/Header/parts/HeaderLogo.d.ts +2 -1
  71. package/dist/components/Header/parts/HeaderNavbar.d.ts +2 -1
  72. package/dist/components/Header/parts/HeaderNavigation.d.ts +2 -1
  73. package/dist/components/Header/parts/HeaderProfile.d.ts +2 -1
  74. package/dist/components/Header/parts/HeaderWrap.d.ts +2 -1
  75. package/dist/components/Header/types.d.ts +1 -0
  76. package/dist/components/Icon/index.es.js +17 -3
  77. package/dist/components/Icon/index.es.js.map +1 -1
  78. package/dist/components/Image/index.es.js +1 -1
  79. package/dist/components/Label/index.es.js +2 -1
  80. package/dist/components/Label/index.es.js.map +1 -1
  81. package/dist/components/LazyImage/index.d.ts +2 -1
  82. package/dist/components/LazyImage/index.es.js +4 -2
  83. package/dist/components/LazyImage/index.es.js.map +1 -1
  84. package/dist/components/LazyImage/types.d.ts +1 -0
  85. package/dist/components/LinkButton/LinkButton.test.d.ts +1 -0
  86. package/dist/components/LinkButton/index.d.ts +27 -0
  87. package/dist/components/LinkButton/index.es.js +56 -0
  88. package/dist/components/LinkButton/index.es.js.map +1 -0
  89. package/dist/components/LinkButton/styles.css +1 -0
  90. package/dist/components/Logo/Logo.d.ts +6 -1
  91. package/dist/components/Logo/ac/BadgeFullWhite.d.ts +2 -1
  92. package/dist/components/Logo/ac/BadgeWhite.d.ts +2 -1
  93. package/dist/components/Logo/ac/BadgeWhiteStroke.d.ts +2 -1
  94. package/dist/components/Logo/ac/BadgeWhiteStrokeDefault.d.ts +2 -1
  95. package/dist/components/Logo/ac/Badget.d.ts +2 -1
  96. package/dist/components/Logo/ac/Primary.d.ts +2 -1
  97. package/dist/components/Logo/ac/PrimaryFillWhite.d.ts +2 -1
  98. package/dist/components/Logo/ac/PrimaryFullWhite.d.ts +2 -1
  99. package/dist/components/Logo/ac/PrimaryNegative.d.ts +2 -1
  100. package/dist/components/Logo/ac/PrimaryWhite.d.ts +2 -1
  101. package/dist/components/Logo/ac/Tertiary.d.ts +2 -1
  102. package/dist/components/Logo/ac/TertiaryWhite.d.ts +2 -1
  103. package/dist/components/Logo/cp/BadgeWhiteStroke.d.ts +2 -1
  104. package/dist/components/Logo/cp/Badget.d.ts +2 -1
  105. package/dist/components/Logo/cp/Primary.d.ts +2 -1
  106. package/dist/components/Logo/cp/PrimaryFillWhite.d.ts +2 -1
  107. package/dist/components/Logo/cp/PrimaryFullWhite.d.ts +2 -1
  108. package/dist/components/Logo/cp/PrimaryLogoWhite.d.ts +2 -1
  109. package/dist/components/Logo/cp/PrimaryNegative.d.ts +2 -1
  110. package/dist/components/Logo/cp/PrimaryWhite.d.ts +2 -1
  111. package/dist/components/Logo/index.es.js +1 -1
  112. package/dist/components/Modal/index.d.ts +4 -1
  113. package/dist/components/Modal/index.es.js +11 -1
  114. package/dist/components/Modal/index.es.js.map +1 -1
  115. package/dist/components/NavbarVertical/index.d.ts +4 -2
  116. package/dist/components/NavbarVertical/index.es.js +6 -3
  117. package/dist/components/NavbarVertical/index.es.js.map +1 -1
  118. package/dist/components/NotificationsBar/index.d.ts +9 -6
  119. package/dist/components/NotificationsBar/index.es.js +21 -9
  120. package/dist/components/NotificationsBar/index.es.js.map +1 -1
  121. package/dist/components/PartnerBanner/PartnerBanner.test.d.ts +1 -0
  122. package/dist/components/PartnerBanner/index.d.ts +11 -0
  123. package/dist/components/PartnerBanner/index.es.js +45 -0
  124. package/dist/components/PartnerBanner/index.es.js.map +1 -0
  125. package/dist/components/PartnerBanner/styles.css +1 -0
  126. package/dist/components/PortalHolder/index.es.js +1 -1
  127. package/dist/components/ProfileNav/index.d.ts +2 -1
  128. package/dist/components/ProfileNav/index.es.js +6 -2
  129. package/dist/components/ProfileNav/index.es.js.map +1 -1
  130. package/dist/components/ProgressBar/index.d.ts +1 -0
  131. package/dist/components/ProgressBar/index.es.js +3 -1
  132. package/dist/components/ProgressBar/index.es.js.map +1 -1
  133. package/dist/components/Prototype/Carousel/index.d.ts +1 -1
  134. package/dist/components/Prototype/Carousel/types.d.ts +1 -0
  135. package/dist/components/Pure/index.es.js +3 -2
  136. package/dist/components/Pure/index.es.js.map +1 -1
  137. package/dist/components/Segment/index.es.js +2 -1
  138. package/dist/components/Segment/index.es.js.map +1 -1
  139. package/dist/components/SelectField/index.es.js +4 -2
  140. package/dist/components/SelectField/index.es.js.map +1 -1
  141. package/dist/components/SelectField/styles.css +1 -1
  142. package/dist/components/Skeleton/Skeleton.stories.d.ts +2 -0
  143. package/dist/components/Skeleton/index.d.ts +2 -1
  144. package/dist/components/Skeleton/index.es.js +3 -2
  145. package/dist/components/Skeleton/index.es.js.map +1 -1
  146. package/dist/components/SpecialButton/SpecialButton.test.d.ts +1 -0
  147. package/dist/components/SpecialButton/index.d.ts +38 -0
  148. package/dist/components/SpecialButton/index.es.js +193 -0
  149. package/dist/components/SpecialButton/index.es.js.map +1 -0
  150. package/dist/components/SpecialButton/styles.css +1 -0
  151. package/dist/components/Spinner/index.d.ts +10 -5
  152. package/dist/components/Spinner/index.es.js +28 -13
  153. package/dist/components/Spinner/index.es.js.map +1 -1
  154. package/dist/components/SubHeader/index.d.ts +2 -1
  155. package/dist/components/SubHeader/index.es.js +4 -1
  156. package/dist/components/SubHeader/index.es.js.map +1 -1
  157. package/dist/components/Switch/Card/types.d.ts +1 -0
  158. package/dist/components/Switch/Pure/types.d.ts +1 -0
  159. package/dist/components/Tabs/index.d.ts +4 -4
  160. package/dist/components/Tabs/index.es.js +81 -83
  161. package/dist/components/Tabs/index.es.js.map +1 -1
  162. package/dist/components/Tabs/styles.css +1 -1
  163. package/dist/components/Tag/index.es.js +10 -87
  164. package/dist/components/Tag/index.es.js.map +1 -1
  165. package/dist/components/Text/styles.css +1 -1
  166. package/dist/components/Text/types.d.ts +1 -1
  167. package/dist/components/TextareaField/index.es.js.map +1 -1
  168. package/dist/components/TokenField/index.es.js +3 -2
  169. package/dist/components/TokenField/index.es.js.map +1 -1
  170. package/dist/components/Tooltip/index.d.ts +2 -1
  171. package/dist/components/Tooltip/index.es.js +3 -2
  172. package/dist/components/Tooltip/index.es.js.map +1 -1
  173. package/dist/components/Transition/Transition.test.d.ts +1 -0
  174. package/dist/components/Transition/hooks.d.ts +11 -0
  175. package/dist/components/Transition/index.d.ts +11 -0
  176. package/dist/components/Transition/index.es.js +131 -0
  177. package/dist/components/Transition/index.es.js.map +1 -0
  178. package/dist/components/Transition/styles.css +1 -0
  179. package/dist/components/dataTestId.test.d.ts +1 -0
  180. package/dist/components/default/index.es.js +4 -0
  181. package/dist/components/default/index.es.js.map +1 -1
  182. package/dist/components/form/Checkbox/Group/index.d.ts +1 -1
  183. package/dist/components/form/Checkbox/types.d.ts +1 -0
  184. package/dist/components/form/Radio/Group/index.d.ts +1 -1
  185. package/dist/components/form/Radio/types.d.ts +1 -0
  186. package/dist/components/form/SelectField/index.d.ts +1 -1
  187. package/dist/components/form/SelectField/types.d.ts +2 -0
  188. package/dist/components/form/TextareaField/index.d.ts +1 -0
  189. package/dist/components/form/TokenField/index.d.ts +2 -1
  190. package/dist/components/icons/Icon.d.ts +1 -0
  191. package/dist/components/icons/Icon.test/index.es.js +23 -5
  192. package/dist/components/icons/Icon.test/index.es.js.map +1 -1
  193. package/dist/components/icons/IconCollapseClose/index.es.js +16 -0
  194. package/dist/components/icons/IconCollapseClose/index.es.js.map +1 -0
  195. package/dist/components/icons/IconCollapseOpen/index.es.js +16 -0
  196. package/dist/components/icons/IconCollapseOpen/index.es.js.map +1 -0
  197. package/dist/components/icons/default/IconCollapseClose.d.ts +2 -0
  198. package/dist/components/icons/default/IconCollapseOpen.d.ts +2 -0
  199. package/dist/components/icons/default/index.d.ts +2 -0
  200. package/dist/components/icons/index.es.js +4 -0
  201. package/dist/components/icons/index.es.js.map +1 -1
  202. package/dist/{index-vsYzka4t.js → index-BgBOcVUP.js} +3 -3
  203. package/dist/{index-vsYzka4t.js.map → index-BgBOcVUP.js.map} +1 -1
  204. package/dist/{index-NIxlEyxx.js → index-DHwXRotU.js} +3 -3
  205. package/dist/{index-NIxlEyxx.js.map → index-DHwXRotU.js.map} +1 -1
  206. package/dist/{index-BvQw_Wgb.js → index-DnQGzfVW.js} +3 -3
  207. package/dist/{index-BvQw_Wgb.js.map → index-DnQGzfVW.js.map} +1 -1
  208. package/dist/main.d.ts +9 -2
  209. package/dist/main.es.js +80 -68
  210. package/dist/main.es.js.map +1 -1
  211. package/dist/{tokens-eEtvWiuX.js → tokens-C4yCunfz.js} +45 -45
  212. package/dist/{tokens-eEtvWiuX.js.map → tokens-C4yCunfz.js.map} +1 -1
  213. package/package.json +3 -3
  214. package/dist/BadgeWhite-DwzVEF3U.js.map +0 -1
  215. package/dist/components/Tag/index.d.ts +0 -21
  216. package/dist/components/Tag/styles.css +0 -1
  217. /package/dist/components/{Tag/Tag.test.d.ts → AdBox/AdBox.test.d.ts} +0 -0
@@ -0,0 +1,193 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { c as classNames } from "../../index-C6Q03EyZ.js";
3
+ import { useRef, useState, useEffect } from "react";
4
+ import "../Icon/index.es.js";
5
+ import { IconArrowRight } from "../icons/IconArrowRight/index.es.js";
6
+ import { IconCheck } from "../icons/IconCheck/index.es.js";
7
+ import { IconLoader } from "../icons/IconLoader/index.es.js";
8
+ import { IconSlash } from "../icons/IconSlash/index.es.js";
9
+ import { Conditional } from "../Conditional/index.es.js";
10
+ import './styles.css';const KNOB_SIZE = 40;
11
+ const TRACK_PADDING = 4;
12
+ const CONFIRM_THRESHOLD = 0.85;
13
+ const _PressButton = ({
14
+ children = "Hold to confirm",
15
+ onConfirm,
16
+ holdDuration = 1500,
17
+ disabled = false,
18
+ loading = false,
19
+ success = false,
20
+ expand,
21
+ "data-testid": dataTestId
22
+ }) => {
23
+ const [holding, setHolding] = useState(false);
24
+ const [confirmed, setConfirmed] = useState(false);
25
+ const timerRef = useRef();
26
+ const isSuccess = success || confirmed;
27
+ const isInteractive = !disabled && !loading && !isSuccess;
28
+ useEffect(() => () => window.clearTimeout(timerRef.current), []);
29
+ function _startHold() {
30
+ if (!isInteractive || holding) return;
31
+ setHolding(true);
32
+ timerRef.current = window.setTimeout(() => {
33
+ setHolding(false);
34
+ setConfirmed(true);
35
+ if (onConfirm) onConfirm();
36
+ }, holdDuration);
37
+ }
38
+ function _cancelHold() {
39
+ if (!holding) return;
40
+ window.clearTimeout(timerRef.current);
41
+ setHolding(false);
42
+ }
43
+ function handleKeyDown(event) {
44
+ if ((event.key === "Enter" || event.key === " ") && !event.repeat) {
45
+ event.preventDefault();
46
+ _startHold();
47
+ }
48
+ }
49
+ function handleKeyUp(event) {
50
+ if (event.key === "Enter" || event.key === " ") _cancelHold();
51
+ }
52
+ const classes = classNames("au-special-button", "au-special-button--type-press", {
53
+ "au-special-button--holding": holding,
54
+ "au-special-button--disabled": disabled,
55
+ "au-special-button--loading": loading,
56
+ "au-special-button--success": isSuccess,
57
+ [`au-special-button--expand-${expand}`]: !!expand
58
+ });
59
+ return /* @__PURE__ */ jsxs(
60
+ "button",
61
+ {
62
+ type: "button",
63
+ className: classes,
64
+ style: {
65
+ "--au-special-button-duration": `${holdDuration}ms`
66
+ },
67
+ disabled: disabled || loading,
68
+ "aria-busy": loading,
69
+ onPointerDown: _startHold,
70
+ onPointerUp: _cancelHold,
71
+ onPointerLeave: _cancelHold,
72
+ onPointerCancel: _cancelHold,
73
+ onKeyDown: handleKeyDown,
74
+ onKeyUp: handleKeyUp,
75
+ "data-testid": dataTestId,
76
+ children: [
77
+ /* @__PURE__ */ jsx("span", { className: "au-special-button__fill", "aria-hidden": "true" }),
78
+ /* @__PURE__ */ jsx(
79
+ Conditional,
80
+ {
81
+ condition: loading,
82
+ renderIf: /* @__PURE__ */ jsx(IconLoader, {}),
83
+ renderElse: /* @__PURE__ */ jsxs("span", { className: "au-special-button__label", children: [
84
+ disabled && /* @__PURE__ */ jsx(IconSlash, { "aria-hidden": "true" }),
85
+ children
86
+ ] })
87
+ }
88
+ )
89
+ ]
90
+ }
91
+ );
92
+ };
93
+ const _SliderButton = ({
94
+ children = "Slide to action",
95
+ onConfirm,
96
+ variant = "primary",
97
+ disabled = false,
98
+ loading = false,
99
+ success = false,
100
+ skeleton = false,
101
+ knobAriaLabel = "Arraste para confirmar",
102
+ "data-testid": dataTestId
103
+ }) => {
104
+ const containerRef = useRef(null);
105
+ const startXRef = useRef(0);
106
+ const [dragging, setDragging] = useState(false);
107
+ const [dragX, setDragX] = useState(0);
108
+ const [confirmed, setConfirmed] = useState(false);
109
+ const isSuccess = success || confirmed;
110
+ const isInteractive = !disabled && !loading && !isSuccess && !skeleton;
111
+ function _maxDrag() {
112
+ const container = containerRef.current;
113
+ if (!container) return 0;
114
+ return container.clientWidth - KNOB_SIZE - TRACK_PADDING * 2;
115
+ }
116
+ function _confirm() {
117
+ setConfirmed(true);
118
+ if (onConfirm) onConfirm();
119
+ }
120
+ function handlePointerDown(event) {
121
+ var _a, _b;
122
+ if (!isInteractive) return;
123
+ setDragging(true);
124
+ startXRef.current = event.clientX;
125
+ (_b = (_a = event.currentTarget).setPointerCapture) == null ? void 0 : _b.call(_a, event.pointerId);
126
+ }
127
+ function handlePointerMove(event) {
128
+ if (!dragging) return;
129
+ const delta = event.clientX - startXRef.current;
130
+ setDragX(Math.min(Math.max(delta, 0), _maxDrag()));
131
+ }
132
+ function handlePointerEnd() {
133
+ if (!dragging) return;
134
+ setDragging(false);
135
+ const max = _maxDrag();
136
+ if (max > 0 && dragX >= max * CONFIRM_THRESHOLD) _confirm();
137
+ setDragX(0);
138
+ }
139
+ function handleKeyDown(event) {
140
+ if (!isInteractive) return;
141
+ if (event.key === "Enter" || event.key === " ") {
142
+ event.preventDefault();
143
+ _confirm();
144
+ }
145
+ }
146
+ const classes = classNames(
147
+ "au-special-button",
148
+ "au-special-button--type-slider",
149
+ {
150
+ [`au-special-button--variant-${variant}`]: !!variant,
151
+ "au-special-button--dragging": dragging,
152
+ "au-special-button--disabled": disabled,
153
+ "au-special-button--loading": loading,
154
+ "au-special-button--success": isSuccess,
155
+ "au-special-button--skeleton": skeleton
156
+ }
157
+ );
158
+ function _renderKnobIcon() {
159
+ if (isSuccess) return /* @__PURE__ */ jsx(IconCheck, { "aria-hidden": "true" });
160
+ if (disabled) return /* @__PURE__ */ jsx(IconSlash, { "aria-hidden": "true" });
161
+ return /* @__PURE__ */ jsx(IconArrowRight, { "aria-hidden": "true" });
162
+ }
163
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: classes, "data-testid": dataTestId, children: [
164
+ loading && /* @__PURE__ */ jsx(IconLoader, {}),
165
+ !loading && !skeleton && /* @__PURE__ */ jsxs(Fragment, { children: [
166
+ /* @__PURE__ */ jsx("span", { className: "au-special-button__label", children }),
167
+ /* @__PURE__ */ jsx(
168
+ "button",
169
+ {
170
+ type: "button",
171
+ className: "au-special-button__knob",
172
+ "aria-label": knobAriaLabel,
173
+ disabled,
174
+ style: dragX > 0 ? { transform: `translateX(${dragX}px)` } : void 0,
175
+ onPointerDown: handlePointerDown,
176
+ onPointerMove: handlePointerMove,
177
+ onPointerUp: handlePointerEnd,
178
+ onPointerCancel: handlePointerEnd,
179
+ onKeyDown: handleKeyDown,
180
+ children: _renderKnobIcon()
181
+ }
182
+ )
183
+ ] })
184
+ ] });
185
+ };
186
+ const SpecialButton = ({ type = "press", ...props }) => {
187
+ if (type === "slider") return /* @__PURE__ */ jsx(_SliderButton, { ...props });
188
+ return /* @__PURE__ */ jsx(_PressButton, { ...props });
189
+ };
190
+ export {
191
+ SpecialButton
192
+ };
193
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../../lib/components/SpecialButton/index.tsx"],"sourcesContent":["import classNames from 'classnames'\nimport React, { ReactNode, useEffect, useRef, useState } from 'react'\nimport {\n IconArrowRight,\n IconCheck,\n IconLoader,\n IconSlash,\n} from '../icons/default'\nimport { Conditional } from '../misc/Conditional'\nimport './styles.scss'\n\nconst KNOB_SIZE = 40\nconst TRACK_PADDING = 4\nconst CONFIRM_THRESHOLD = 0.85\n\nexport type SpecialButtonProps = {\n /**\n * Interaction mode: 'press' is hold-to-confirm (Figma: Press Button),\n * 'slider' is swipe-to-confirm (Figma: Swipe Button).\n * @default 'press'\n */\n type?: 'press' | 'slider'\n children?: ReactNode\n /** Called once when the interaction completes (hold finished / knob dragged to the end). */\n onConfirm?: () => void\n disabled?: boolean\n loading?: boolean\n /**\n * Controlled success state. The component also enters success on its own\n * right after a completed interaction.\n */\n success?: boolean\n /**\n * Press only — time in milliseconds the user must keep pressing to confirm.\n * @default 1500\n */\n holdDuration?: number\n /** Press only — stretches the button to fill the container width. */\n expand?: 'x'\n /** Slider only — visual variant (Figma: Swipe Button, ◇ Type Primary | Secondary). */\n variant?: 'primary' | 'secondary'\n /** Slider only — renders an empty skeleton placeholder. */\n skeleton?: boolean\n /**\n * Slider only — accessible label for the draggable knob. Pressing Enter or\n * Space on the focused knob confirms directly (keyboard alternative to the\n * swipe gesture).\n */\n knobAriaLabel?: string\n 'data-testid'?: string\n}\n\nconst _PressButton = ({\n children = 'Hold to confirm',\n onConfirm,\n holdDuration = 1500,\n disabled = false,\n loading = false,\n success = false,\n expand,\n 'data-testid': dataTestId,\n}: SpecialButtonProps) => {\n const [holding, setHolding] = useState(false)\n const [confirmed, setConfirmed] = useState(false)\n const timerRef = useRef<number>()\n\n const isSuccess = success || confirmed\n const isInteractive = !disabled && !loading && !isSuccess\n\n useEffect(() => () => window.clearTimeout(timerRef.current), [])\n\n function _startHold() {\n if (!isInteractive || holding) return\n setHolding(true)\n timerRef.current = window.setTimeout(() => {\n setHolding(false)\n setConfirmed(true)\n if (onConfirm) onConfirm()\n }, holdDuration)\n }\n\n function _cancelHold() {\n if (!holding) return\n window.clearTimeout(timerRef.current)\n setHolding(false)\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLButtonElement>) {\n if ((event.key === 'Enter' || event.key === ' ') && !event.repeat) {\n event.preventDefault()\n _startHold()\n }\n }\n\n function handleKeyUp(event: React.KeyboardEvent<HTMLButtonElement>) {\n if (event.key === 'Enter' || event.key === ' ') _cancelHold()\n }\n\n const classes = classNames('au-special-button', 'au-special-button--type-press', {\n 'au-special-button--holding': holding,\n 'au-special-button--disabled': disabled,\n 'au-special-button--loading': loading,\n 'au-special-button--success': isSuccess,\n [`au-special-button--expand-${expand}`]: !!expand,\n })\n\n return (\n <button\n type=\"button\"\n className={classes}\n style={\n {\n '--au-special-button-duration': `${holdDuration}ms`,\n } as React.CSSProperties\n }\n disabled={disabled || loading}\n aria-busy={loading}\n onPointerDown={_startHold}\n onPointerUp={_cancelHold}\n onPointerLeave={_cancelHold}\n onPointerCancel={_cancelHold}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n data-testid={dataTestId}>\n <span className=\"au-special-button__fill\" aria-hidden=\"true\" />\n <Conditional\n condition={loading}\n renderIf={<IconLoader />}\n renderElse={\n <span className=\"au-special-button__label\">\n {disabled && <IconSlash aria-hidden=\"true\" />}\n {children}\n </span>\n }\n />\n </button>\n )\n}\n\nconst _SliderButton = ({\n children = 'Slide to action',\n onConfirm,\n variant = 'primary',\n disabled = false,\n loading = false,\n success = false,\n skeleton = false,\n knobAriaLabel = 'Arraste para confirmar',\n 'data-testid': dataTestId,\n}: SpecialButtonProps) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const startXRef = useRef(0)\n const [dragging, setDragging] = useState(false)\n const [dragX, setDragX] = useState(0)\n const [confirmed, setConfirmed] = useState(false)\n\n const isSuccess = success || confirmed\n const isInteractive = !disabled && !loading && !isSuccess && !skeleton\n\n function _maxDrag() {\n const container = containerRef.current\n if (!container) return 0\n return container.clientWidth - KNOB_SIZE - TRACK_PADDING * 2\n }\n\n function _confirm() {\n setConfirmed(true)\n if (onConfirm) onConfirm()\n }\n\n function handlePointerDown(event: React.PointerEvent<HTMLButtonElement>) {\n if (!isInteractive) return\n setDragging(true)\n startXRef.current = event.clientX\n event.currentTarget.setPointerCapture?.(event.pointerId)\n }\n\n function handlePointerMove(event: React.PointerEvent<HTMLButtonElement>) {\n if (!dragging) return\n const delta = event.clientX - startXRef.current\n setDragX(Math.min(Math.max(delta, 0), _maxDrag()))\n }\n\n function handlePointerEnd() {\n if (!dragging) return\n setDragging(false)\n const max = _maxDrag()\n if (max > 0 && dragX >= max * CONFIRM_THRESHOLD) _confirm()\n setDragX(0)\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLButtonElement>) {\n if (!isInteractive) return\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n _confirm()\n }\n }\n\n const classes = classNames(\n 'au-special-button',\n 'au-special-button--type-slider',\n {\n [`au-special-button--variant-${variant}`]: !!variant,\n 'au-special-button--dragging': dragging,\n 'au-special-button--disabled': disabled,\n 'au-special-button--loading': loading,\n 'au-special-button--success': isSuccess,\n 'au-special-button--skeleton': skeleton,\n },\n )\n\n function _renderKnobIcon() {\n if (isSuccess) return <IconCheck aria-hidden=\"true\" />\n if (disabled) return <IconSlash aria-hidden=\"true\" />\n return <IconArrowRight aria-hidden=\"true\" />\n }\n\n return (\n <div ref={containerRef} className={classes} data-testid={dataTestId}>\n {loading && <IconLoader />}\n {!loading && !skeleton && (\n <>\n <span className=\"au-special-button__label\">{children}</span>\n <button\n type=\"button\"\n className=\"au-special-button__knob\"\n aria-label={knobAriaLabel}\n disabled={disabled}\n style={\n dragX > 0 ? { transform: `translateX(${dragX}px)` } : undefined\n }\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerEnd}\n onPointerCancel={handlePointerEnd}\n onKeyDown={handleKeyDown}>\n {_renderKnobIcon()}\n </button>\n </>\n )}\n </div>\n )\n}\n\nexport const SpecialButton = ({ type = 'press', ...props }: SpecialButtonProps) => {\n if (type === 'slider') return <_SliderButton {...props} />\n return <_PressButton {...props} />\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ .au-special-button{position:relative;display:flex;align-items:center;justify-content:center;height:48px;border-radius:48px;overflow:hidden;background-color:#0048db;color:#fff;font-family:"Source Sans 3",sans-serif;font-size:16px;font-weight:600;-webkit-user-select:none;user-select:none}.au-special-button--type-press{display:inline-flex;gap:8px;padding:8px 16px;border:none;text-align:center;cursor:pointer;touch-action:none;-webkit-tap-highlight-color:transparent}.au-special-button--type-press .au-icon,.au-special-button--type-press .au-icon>svg{width:20px;height:20px;color:#fff}.au-special-button__fill{position:absolute;top:0;left:0;bottom:0;width:0;background-color:#18256c;transition:width .2s ease}.au-special-button__label{position:relative;display:inline-flex;align-items:center;gap:8px}.au-special-button--holding .au-special-button__fill{width:100%;transition:width var(--au-special-button-duration, 1.5s) linear}.au-special-button--type-press.au-special-button--success .au-special-button__fill,.au-special-button--type-press.au-special-button--loading .au-special-button__fill{width:100%;transition:width .3s ease}.au-special-button--type-press.au-special-button--disabled{background-color:#e2e4e9;color:#c4c9d4;cursor:not-allowed}.au-special-button--type-press.au-special-button--disabled .au-icon,.au-special-button--type-press.au-special-button--disabled .au-icon>svg{width:16px;height:16px;color:#c4c9d4}.au-special-button--type-press.au-special-button--loading{cursor:progress}.au-special-button--type-press.au-special-button--loading .au-icon{position:relative;animation:au-special-button-spin 1s infinite linear}.au-special-button--expand-x{width:100%}.au-special-button__knob{position:absolute;top:4px;left:4px;display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:50%;background-color:#fff;box-shadow:0 24px 56px #7686ad14,0 12px 12px #0048db0a;cursor:grab;touch-action:none;transition:transform .2s ease}.au-special-button__knob .au-icon,.au-special-button__knob .au-icon>svg{width:24px;height:24px;color:#0048db}.au-special-button--dragging .au-special-button__knob{cursor:grabbing;transition:none}.au-special-button--type-slider .au-special-button__label{padding:8px 48px}.au-special-button--variant-secondary{background-color:#fff;border:1px solid #0048db;color:#0048db}.au-special-button--type-slider.au-special-button--disabled{background-color:#f6f7fa;border:none;color:#c4c9d4}.au-special-button--type-slider.au-special-button--disabled .au-special-button__knob{background-color:#e2e4e9;box-shadow:none;cursor:not-allowed}.au-special-button--type-slider.au-special-button--disabled .au-special-button__knob .au-icon,.au-special-button--type-slider.au-special-button--disabled .au-special-button__knob .au-icon>svg{color:#c4c9d4}.au-special-button--type-slider.au-special-button--success{background-color:#138040;border:none;color:#fff}.au-special-button--type-slider.au-special-button--success .au-special-button__knob{left:auto;right:4px;cursor:default}.au-special-button--type-slider.au-special-button--success .au-special-button__knob .au-icon,.au-special-button--type-slider.au-special-button--success .au-special-button__knob .au-icon>svg{color:#138040}.au-special-button--variant-secondary.au-special-button--success{background-color:#fff;border:1px solid #10593b;color:#10593b}.au-special-button--variant-secondary.au-special-button--success .au-special-button__knob .au-icon,.au-special-button--variant-secondary.au-special-button--success .au-special-button__knob .au-icon>svg{color:#10593b}.au-special-button--type-slider.au-special-button--loading{background-color:#10593b;border:none;cursor:progress}.au-special-button--type-slider.au-special-button--loading .au-icon{animation:au-special-button-spin 1s infinite linear}.au-special-button--type-slider.au-special-button--loading .au-icon,.au-special-button--type-slider.au-special-button--loading .au-icon>svg{width:20px;height:20px;color:#fff}.au-special-button--skeleton{background-color:#f6f7fa;border:none;animation:au-special-button-pulse 1.5s ease-in-out infinite}@keyframes au-special-button-spin{to{transform:rotate(360deg)}}@keyframes au-special-button-pulse{0%,to{opacity:1}50%{opacity:.6}}
@@ -1,6 +1,11 @@
1
- type SpinnerProps = {
2
- size: number;
3
- color: string;
1
+ export type SpinnerProps = {
2
+ /**
3
+ * Token size (Figma: Spinner, ↕ Size). small = 16px, medium = 20px, large = 32px.
4
+ * @default 'medium'
5
+ */
6
+ size?: 'small' | 'medium' | 'large';
7
+ /** White spinner for colored backgrounds (Figma: Negative). */
8
+ negative?: boolean;
9
+ 'data-testid'?: string;
4
10
  };
5
- export declare const Spinner: React.FC<SpinnerProps>;
6
- export {};
11
+ export declare const Spinner: ({ size, negative, "data-testid": dataTestId, }: SpinnerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,27 +1,48 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import './styles.css';const Spinner = ({ size, color }) => {
2
+ import { useId } from "react";
3
+ import { c as classNames } from "../../index-C6Q03EyZ.js";
4
+ import { i as COLOR_NEUTRAL_00, j as COLOR_BRAND_BLUE_40 } from "../../tokens-C4yCunfz.js";
5
+ import './styles.css';const SIZE_MAP = {
6
+ small: 16,
7
+ medium: 20,
8
+ large: 32
9
+ };
10
+ const Spinner = ({
11
+ size = "medium",
12
+ negative = false,
13
+ "data-testid": dataTestId
14
+ }) => {
15
+ const uid = useId().replace(/[^a-zA-Z0-9]/g, "");
16
+ const gradientId = `au-spinner-gradient-${uid}`;
17
+ const px = SIZE_MAP[size];
18
+ const color = negative ? COLOR_NEUTRAL_00 : COLOR_BRAND_BLUE_40;
19
+ const classes = classNames("au-spinner", {
20
+ [`au-spinner--size-${size}`]: !!size,
21
+ "au-spinner--negative": negative
22
+ });
3
23
  return /* @__PURE__ */ jsx(
4
24
  "div",
5
25
  {
6
- className: "au-spinner",
7
- style: { width: size, height: size },
26
+ className: classes,
27
+ style: { width: px, height: px },
8
28
  role: "status",
9
29
  "aria-live": "polite",
10
30
  "aria-label": "Carregando",
31
+ "data-testid": dataTestId,
11
32
  children: /* @__PURE__ */ jsxs(
12
33
  "svg",
13
34
  {
14
35
  "aria-hidden": "true",
15
36
  xmlns: "http://www.w3.org/2000/svg",
16
37
  viewBox: "0 0 64 64",
17
- width: size,
18
- height: size,
38
+ width: px,
39
+ height: px,
19
40
  color,
20
41
  children: [
21
42
  /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
22
43
  "linearGradient",
23
44
  {
24
- id: `au-loading-${color}`,
45
+ id: gradientId,
25
46
  gradientUnits: "objectBoundingBox",
26
47
  x1: "10%",
27
48
  y1: "0%",
@@ -35,13 +56,7 @@ import './styles.css';const Spinner = ({ size, color }) => {
35
56
  ) }),
36
57
  /* @__PURE__ */ jsxs("g", { strokeWidth: "7", strokeLinecap: "round", fill: "none", children: [
37
58
  /* @__PURE__ */ jsx("path", { stroke: color, d: "M60,32 A28,28 0 1 1 4,32" }),
38
- /* @__PURE__ */ jsx(
39
- "path",
40
- {
41
- d: "M60,32 A28,28.5 0 1 0 4,32",
42
- stroke: `url(#au-loading-${color})`
43
- }
44
- )
59
+ /* @__PURE__ */ jsx("path", { d: "M60,32 A28,28.5 0 1 0 4,32", stroke: `url(#${gradientId})` })
45
60
  ] })
46
61
  ]
47
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../lib/components/Spinner/index.tsx"],"sourcesContent":["import './styles.scss'\n\ntype SpinnerProps = {\n size: number\n color: string\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ size, color }) => {\n return (\n <div\n className=\"au-spinner\"\n style={{ width: size, height: size }}\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Carregando\">\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 64 64\"\n width={size}\n height={size}\n color={color}>\n <defs>\n <linearGradient\n id={`au-loading-${color}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"10%\"\n y1=\"0%\"\n x2=\"90%\"\n y2=\"10%\">\n <stop offset=\"0\" stopColor={color} stopOpacity=\"1\" />\n <stop offset=\"1\" stopColor={color} stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <g strokeWidth=\"7\" strokeLinecap=\"round\" fill=\"none\">\n <path stroke={color} d=\"M60,32 A28,28 0 1 1 4,32\" />\n\n <path\n d=\"M60,32 A28,28.5 0 1 0 4,32\"\n stroke={`url(#au-loading-${color})`}\n />\n </g>\n </svg>\n </div>\n )\n}\n"],"names":[],"mappings":";AAOO,MAAM,UAAkC,CAAC,EAAE,MAAM,YAAY;AAClE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAA;AAAA,MAC9B,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAW;AAAA,MACX,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR;AAAA,UACA,UAAA;AAAA,YAAA,oBAAC,QAAA,EACC,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAI,cAAc,KAAK;AAAA,gBACvB,eAAc;AAAA,gBACd,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,UAAA;AAAA,kBAAA,oBAAC,UAAK,QAAO,KAAI,WAAW,OAAO,aAAY,KAAI;AAAA,sCAClD,QAAA,EAAK,QAAO,KAAI,WAAW,OAAO,aAAY,IAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAEvD;AAAA,iCACC,KAAA,EAAE,aAAY,KAAI,eAAc,SAAQ,MAAK,QAC5C,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,QAAQ,OAAO,GAAE,4BAA2B;AAAA,cAElD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,GAAE;AAAA,kBACF,QAAQ,mBAAmB,KAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClC,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../lib/components/Spinner/index.tsx"],"sourcesContent":["import { useId } from 'react'\nimport classNames from 'classnames'\nimport { COLOR_BRAND_BLUE_40, COLOR_NEUTRAL_00 } from '@core/tokens'\nimport './styles.scss'\n\nconst SIZE_MAP = {\n small: 16,\n medium: 20,\n large: 32,\n}\n\nexport type SpinnerProps = {\n /**\n * Token size (Figma: Spinner, ↕ Size). small = 16px, medium = 20px, large = 32px.\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large'\n /** White spinner for colored backgrounds (Figma: Negative). */\n negative?: boolean\n 'data-testid'?: string\n}\n\nexport const Spinner = ({\n size = 'medium',\n negative = false,\n 'data-testid': dataTestId,\n}: SpinnerProps) => {\n const uid = useId().replace(/[^a-zA-Z0-9]/g, '')\n const gradientId = `au-spinner-gradient-${uid}`\n const px = SIZE_MAP[size]\n const color = negative ? COLOR_NEUTRAL_00 : COLOR_BRAND_BLUE_40\n\n const classes = classNames('au-spinner', {\n [`au-spinner--size-${size}`]: !!size,\n 'au-spinner--negative': negative,\n })\n\n return (\n <div\n className={classes}\n style={{ width: px, height: px }}\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Carregando\"\n data-testid={dataTestId}>\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 64 64\"\n width={px}\n height={px}\n color={color}>\n <defs>\n <linearGradient\n id={gradientId}\n gradientUnits=\"objectBoundingBox\"\n x1=\"10%\"\n y1=\"0%\"\n x2=\"90%\"\n y2=\"10%\">\n <stop offset=\"0\" stopColor={color} stopOpacity=\"1\" />\n <stop offset=\"1\" stopColor={color} stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <g strokeWidth=\"7\" strokeLinecap=\"round\" fill=\"none\">\n <path stroke={color} d=\"M60,32 A28,28 0 1 1 4,32\" />\n\n <path d=\"M60,32 A28,28.5 0 1 0 4,32\" stroke={`url(#${gradientId})`} />\n </g>\n </svg>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;AAKA,MAAM,WAAW;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAaO,MAAM,UAAU,CAAC;AAAA,EACtB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,eAAe;AACjB,MAAoB;AAClB,QAAM,MAAM,MAAA,EAAQ,QAAQ,iBAAiB,EAAE;AAC/C,QAAM,aAAa,uBAAuB,GAAG;AAC7C,QAAM,KAAK,SAAS,IAAI;AACxB,QAAM,QAAQ,WAAW,mBAAmB;AAE5C,QAAM,UAAU,WAAW,cAAc;AAAA,IACvC,CAAC,oBAAoB,IAAI,EAAE,GAAG,CAAC,CAAC;AAAA,IAChC,wBAAwB;AAAA,EAAA,CACzB;AAED,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,MAC5B,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAW;AAAA,MACX,eAAa;AAAA,MACb,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR;AAAA,UACA,UAAA;AAAA,YAAA,oBAAC,QAAA,EACC,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,gBACJ,eAAc;AAAA,gBACd,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,UAAA;AAAA,kBAAA,oBAAC,UAAK,QAAO,KAAI,WAAW,OAAO,aAAY,KAAI;AAAA,sCAClD,QAAA,EAAK,QAAO,KAAI,WAAW,OAAO,aAAY,IAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAEvD;AAAA,iCACC,KAAA,EAAE,aAAY,KAAI,eAAc,SAAQ,MAAK,QAC5C,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,QAAQ,OAAO,GAAE,4BAA2B;AAAA,kCAEjD,QAAA,EAAK,GAAE,8BAA6B,QAAQ,QAAQ,UAAU,IAAA,CAAK;AAAA,YAAA,EAAA,CACtE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
@@ -2,6 +2,7 @@ type SubHeaderProps = {
2
2
  title: string;
3
3
  handleReturn: () => void;
4
4
  handleHelpInfo?: () => void;
5
+ 'data-testid'?: string;
5
6
  };
6
- export declare const SubHeader: ({ title, handleReturn, handleHelpInfo, }: SubHeaderProps) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const SubHeader: ({ title, handleReturn, handleHelpInfo, "data-testid": dataTestId, }: SubHeaderProps) => import("react/jsx-runtime").JSX.Element;
7
8
  export {};
@@ -1,5 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c as classNames } from "../../index-C6Q03EyZ.js";
3
+ import "react";
3
4
  import "../Icon/index.es.js";
4
5
  import { IconChevronLeft } from "../icons/IconChevronLeft/index.es.js";
5
6
  import { IconHelpCircle } from "../icons/IconHelpCircle/index.es.js";
@@ -9,7 +10,8 @@ import { Button } from "../Button/index.es.js";
9
10
  import './styles.css';const SubHeader = ({
10
11
  title,
11
12
  handleReturn,
12
- handleHelpInfo
13
+ handleHelpInfo,
14
+ "data-testid": dataTestId
13
15
  }) => {
14
16
  return /* @__PURE__ */ jsx(
15
17
  "div",
@@ -17,6 +19,7 @@ import './styles.css';const SubHeader = ({
17
19
  className: classNames("au-sub-header", {
18
20
  "au-sub-header--with-help": handleHelpInfo
19
21
  }),
22
+ "data-testid": dataTestId,
20
23
  children: /* @__PURE__ */ jsxs(Container, { customClass: "au-sub-header__container", children: [
21
24
  /* @__PURE__ */ jsx(
22
25
  Button,
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../lib/components/SubHeader/index.tsx"],"sourcesContent":["import { IconChevronLeft, IconHelpCircle } from '../icons/default'\n\nimport { Container } from '@components/Container'\nimport { Text } from '@components/Text'\nimport { Button } from '@components/Button'\n\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\ntype SubHeaderProps = {\n title: string\n handleReturn: () => void\n handleHelpInfo?: () => void\n}\n\nexport const SubHeader = ({\n title,\n handleReturn,\n handleHelpInfo,\n}: SubHeaderProps) => {\n return (\n <div\n className={classNames('au-sub-header', {\n 'au-sub-header--with-help': handleHelpInfo,\n })}>\n <Container customClass=\"au-sub-header__container\">\n <Button\n className=\"au-sub-header__button\"\n onClick={handleReturn}\n type=\"ghost\"\n aria-label=\"Voltar\">\n <IconChevronLeft aria-hidden=\"true\" />\n </Button>\n <Text\n className=\"au-sub-header__title\"\n variant=\"heading-micro\"\n variantDesk=\"heading-small\"\n weight=\"bold\"\n as=\"div\">\n {title}\n </Text>\n {handleHelpInfo && (\n <Button\n className=\"au-sub-header__button\"\n onClick={handleHelpInfo}\n type=\"ghost\"\n aria-label=\"Ajuda\">\n <IconHelpCircle aria-hidden=\"true\" />\n </Button>\n )}\n </Container>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;;AAgBO,MAAM,YAAY,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,MAAsB;AACpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,iBAAiB;AAAA,QACrC,4BAA4B;AAAA,MAAA,CAC7B;AAAA,MACD,UAAA,qBAAC,WAAA,EAAU,aAAY,4BACrB,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAA,oBAAC,iBAAA,EAAgB,eAAY,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEtC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,aAAY;AAAA,YACZ,QAAO;AAAA,YACP,IAAG;AAAA,YACF,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,kBACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAA,oBAAC,gBAAA,EAAe,eAAY,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACrC,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../lib/components/SubHeader/index.tsx"],"sourcesContent":["import { IconChevronLeft, IconHelpCircle } from '../icons/default'\n\nimport { Container } from '@components/Container'\nimport { Text } from '@components/Text'\nimport { Button } from '@components/Button'\n\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\ntype SubHeaderProps = {\n title: string\n handleReturn: () => void\n handleHelpInfo?: () => void\n 'data-testid'?: string\n}\n\nexport const SubHeader = ({\n title,\n handleReturn,\n handleHelpInfo,\n 'data-testid': dataTestId,\n}: SubHeaderProps) => {\n return (\n <div\n className={classNames('au-sub-header', {\n 'au-sub-header--with-help': handleHelpInfo,\n })}\n data-testid={dataTestId}>\n <Container customClass=\"au-sub-header__container\">\n <Button\n className=\"au-sub-header__button\"\n onClick={handleReturn}\n type=\"ghost\"\n aria-label=\"Voltar\">\n <IconChevronLeft aria-hidden=\"true\" />\n </Button>\n <Text\n className=\"au-sub-header__title\"\n variant=\"heading-micro\"\n variantDesk=\"heading-small\"\n weight=\"bold\"\n as=\"div\">\n {title}\n </Text>\n {handleHelpInfo && (\n <Button\n className=\"au-sub-header__button\"\n onClick={handleHelpInfo}\n type=\"ghost\"\n aria-label=\"Ajuda\">\n <IconHelpCircle aria-hidden=\"true\" />\n </Button>\n )}\n </Container>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;AAiBO,MAAM,YAAY,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,MAAsB;AACpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,iBAAiB;AAAA,QACrC,4BAA4B;AAAA,MAAA,CAC7B;AAAA,MACD,eAAa;AAAA,MACb,UAAA,qBAAC,WAAA,EAAU,aAAY,4BACrB,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAA,oBAAC,iBAAA,EAAgB,eAAY,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEtC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,aAAY;AAAA,YACZ,QAAO;AAAA,YACP,IAAG;AAAA,YACF,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,kBACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAA,oBAAC,gBAAA,EAAe,eAAY,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACrC,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -7,4 +7,5 @@ export type CardSwitchProps = {
7
7
  deactivateCallBack?: () => void;
8
8
  shouldFadeOutAfterActivate?: boolean;
9
9
  fadeOutDelayInSeconds?: number;
10
+ 'data-testid'?: string;
10
11
  };
@@ -5,4 +5,5 @@ export type SwitchProps = {
5
5
  disabled: boolean;
6
6
  activateCallBack: () => void;
7
7
  deactivateCallBack?: () => void;
8
+ 'data-testid'?: string;
8
9
  };
@@ -1,17 +1,17 @@
1
1
  export type TabsProps = {
2
2
  tabs: TabItemProps[];
3
- type?: 1 | 2;
3
+ /** Hides the tab bar and renders only the active panel. Not mapped in Figma. */
4
4
  areTabsHidden?: boolean;
5
5
  initialTab?: string;
6
- withLabel?: boolean;
6
+ /** Content rendered at the right side of the tab bar. Not mapped in Figma. */
7
7
  rightSlotChildren?: React.ReactNode;
8
8
  onClick?: (value: string) => void;
9
+ 'data-testid'?: string;
9
10
  };
10
11
  export type TabItemProps = {
11
12
  tab: string;
12
13
  title: string;
13
14
  children?: React.ReactElement;
14
- icon?: React.ReactNode;
15
15
  };
16
- export declare const Tabs: ({ tabs, type, initialTab, onClick, areTabsHidden, rightSlotChildren, withLabel, }: TabsProps) => import("react/jsx-runtime").JSX.Element;
16
+ export declare const Tabs: ({ tabs, initialTab, onClick, areTabsHidden, rightSlotChildren, "data-testid": dataTestId, }: TabsProps) => import("react/jsx-runtime").JSX.Element;
17
17
  export default Tabs;
@@ -1,20 +1,16 @@
1
1
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect } from "react";
3
- import { W as When, S as Switch, C as Case } from "../../react-if.esm-Cozt8l48.js";
4
- import { Text } from "../Text/index.es.js";
5
- import { Chip } from "../Chip/index.es.js";
3
+ import { W as When } from "../../react-if.esm-Cozt8l48.js";
6
4
  import { c as classNames } from "../../index-C6Q03EyZ.js";
7
5
  import './styles.css';const Tabs = ({
8
6
  tabs,
9
- type = 1,
10
7
  initialTab,
11
8
  onClick,
12
9
  areTabsHidden,
13
10
  rightSlotChildren,
14
- withLabel = false
11
+ "data-testid": dataTestId
15
12
  }) => {
16
- const [isClicked, setIsClicked] = useState(false);
17
- const [currButton, setCurrButton] = useState(initialTab ?? "");
13
+ var _a;
18
14
  const [activeTab, setActiveTab] = useState(initialTab);
19
15
  const [indicatorStyle, setIndicatorStyle] = useState({ left: 0, width: 0 });
20
16
  const tabsRef = useRef(null);
@@ -22,96 +18,98 @@ import './styles.css';const Tabs = ({
22
18
  setActiveTab(initialTab);
23
19
  }, [initialTab]);
24
20
  useEffect(() => {
25
- if (activeTab && type === 2) {
26
- const container = tabsRef.current;
27
- if (container) {
28
- const activeElement = container.querySelector(
29
- ".au-tabs__btns-option--active"
30
- );
31
- if (activeElement) {
32
- setIndicatorStyle({
33
- left: activeElement.offsetLeft,
34
- width: activeElement.offsetWidth
35
- });
36
- }
21
+ const container = tabsRef.current;
22
+ if (activeTab && container) {
23
+ const activeElement = container.querySelector(
24
+ ".au-tabs__btns-option--active"
25
+ );
26
+ if (activeElement) {
27
+ setIndicatorStyle({
28
+ left: activeElement.offsetLeft,
29
+ width: activeElement.offsetWidth
30
+ });
37
31
  }
38
32
  }
39
- }, [activeTab, tabs, type]);
33
+ }, [activeTab, tabs]);
40
34
  const handleClick = (item) => {
41
35
  onClick && onClick(item.tab);
42
- setCurrButton(item.tab);
43
36
  setActiveTab(item.tab);
44
- setIsClicked(true);
45
37
  };
38
+ const handleKeyDown = (event) => {
39
+ var _a2;
40
+ if (!["ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) return;
41
+ const container = tabsRef.current;
42
+ if (!container) return;
43
+ const tabButtons = Array.from(
44
+ container.querySelectorAll('[role="tab"]')
45
+ );
46
+ const currentIndex = tabButtons.indexOf(
47
+ document.activeElement
48
+ );
49
+ if (currentIndex === -1) return;
50
+ event.preventDefault();
51
+ const lastIndex = tabButtons.length - 1;
52
+ const nextIndex = {
53
+ ArrowLeft: currentIndex === 0 ? lastIndex : currentIndex - 1,
54
+ ArrowRight: currentIndex === lastIndex ? 0 : currentIndex + 1,
55
+ Home: 0,
56
+ End: lastIndex
57
+ }[event.key];
58
+ (_a2 = tabButtons[nextIndex]) == null ? void 0 : _a2.focus();
59
+ };
60
+ const focusableTab = activeTab ?? ((_a = tabs[0]) == null ? void 0 : _a.tab);
46
61
  return /* @__PURE__ */ jsxs(Fragment, { children: [
47
- /* @__PURE__ */ jsx(When, { condition: !areTabsHidden, children: /* @__PURE__ */ jsx(
48
- "div",
49
- {
50
- className: classNames("au-tabs", {
51
- [`au-tabs--type-${type}`]: !!type
52
- }),
53
- children: /* @__PURE__ */ jsxs("div", { className: "au-tabs__container", children: [
54
- /* @__PURE__ */ jsxs("div", { className: "au-tabs__left-panel", children: [
55
- /* @__PURE__ */ jsx(When, { condition: !!withLabel, children: /* @__PURE__ */ jsxs(
56
- Text,
62
+ /* @__PURE__ */ jsx(When, { condition: !areTabsHidden, children: /* @__PURE__ */ jsx("div", { className: "au-tabs", "data-testid": dataTestId, children: /* @__PURE__ */ jsxs("div", { className: "au-tabs__container", children: [
63
+ /* @__PURE__ */ jsxs(
64
+ "div",
65
+ {
66
+ className: "au-tabs__btns",
67
+ role: "tablist",
68
+ ref: tabsRef,
69
+ onKeyDown: handleKeyDown,
70
+ children: [
71
+ tabs.map((item) => /* @__PURE__ */ jsx(
72
+ "button",
57
73
  {
58
- color: "secondary",
59
- variant: "body-small",
60
- className: "au-tabs__label",
61
- children: [
62
- "Filtrar por:",
63
- " "
64
- ]
65
- }
66
- ) }),
67
- /* @__PURE__ */ jsxs("div", { className: "au-tabs__btns", ref: tabsRef, children: [
68
- tabs.map((item) => {
69
- return /* @__PURE__ */ jsxs(Switch, { children: [
70
- /* @__PURE__ */ jsx(Case, { condition: type === 1, children: /* @__PURE__ */ jsx(
71
- Chip,
72
- {
73
- label: item.title,
74
- icon: item.icon,
75
- isActive: isClicked && item.tab === currButton || activeTab === item.tab,
76
- onClick: () => handleClick(item)
77
- }
78
- ) }),
79
- /* @__PURE__ */ jsx(Case, { condition: type === 2, children: /* @__PURE__ */ jsx(
80
- "button",
81
- {
82
- type: "button",
83
- className: classNames("au-tabs__btns-option", {
84
- "au-tabs__btns-option--active": activeTab === item.tab
85
- }),
86
- onClick: () => handleClick(item),
87
- children: item.title
88
- }
89
- ) })
90
- ] }, item.tab);
91
- }),
92
- /* @__PURE__ */ jsx(When, { condition: type === 2, children: /* @__PURE__ */ jsx(
93
- "div",
94
- {
95
- className: "au-tabs__btns-indicator",
96
- "aria-hidden": "true",
97
- style: {
98
- left: `${indicatorStyle.left}px`,
99
- width: `${indicatorStyle.width}px`
100
- }
74
+ type: "button",
75
+ role: "tab",
76
+ id: `au-tab-${item.tab}`,
77
+ "aria-selected": activeTab === item.tab,
78
+ "aria-controls": `au-tabpanel-${item.tab}`,
79
+ tabIndex: item.tab === focusableTab ? 0 : -1,
80
+ className: classNames("au-tabs__btns-option", {
81
+ "au-tabs__btns-option--active": activeTab === item.tab
82
+ }),
83
+ onClick: () => handleClick(item),
84
+ children: item.title
85
+ },
86
+ item.tab
87
+ )),
88
+ /* @__PURE__ */ jsx(
89
+ "div",
90
+ {
91
+ className: "au-tabs__btns-indicator",
92
+ "aria-hidden": "true",
93
+ style: {
94
+ left: `${indicatorStyle.left}px`,
95
+ width: `${indicatorStyle.width}px`
101
96
  }
102
- ) })
103
- ] })
104
- ] }),
105
- /* @__PURE__ */ jsx(When, { condition: !!rightSlotChildren, children: rightSlotChildren })
106
- ] })
107
- }
108
- ) }),
97
+ }
98
+ )
99
+ ]
100
+ }
101
+ ),
102
+ /* @__PURE__ */ jsx(When, { condition: !!rightSlotChildren, children: rightSlotChildren })
103
+ ] }) }) }),
109
104
  tabs.map(({ children, tab }) => {
110
105
  return /* @__PURE__ */ jsx(
111
106
  "div",
112
107
  {
108
+ role: "tabpanel",
109
+ id: `au-tabpanel-${tab}`,
110
+ "aria-labelledby": `au-tab-${tab}`,
113
111
  className: `au-tabs__children children-${tab}`,
114
- children: /* @__PURE__ */ jsx(When, { condition: currButton === tab || activeTab === tab, children })
112
+ children: /* @__PURE__ */ jsx(When, { condition: activeTab === tab, children })
115
113
  },
116
114
  `au-tabs-${tab}`
117
115
  );