@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.
- package/dist/{BadgeWhite-DwzVEF3U.js → BadgeWhite-CkZPPGmT.js} +43 -42
- package/dist/BadgeWhite-CkZPPGmT.js.map +1 -0
- package/dist/components/AdBox/index.d.ts +7 -0
- package/dist/components/AdBox/index.es.js +22 -0
- package/dist/components/AdBox/index.es.js.map +1 -0
- package/dist/components/AdBox/styles.css +1 -0
- package/dist/components/Alert/index.d.ts +8 -2
- package/dist/components/Alert/index.es.js +18 -4
- package/dist/components/Alert/index.es.js.map +1 -1
- package/dist/components/Alert/styles.css +1 -1
- package/dist/components/BadgeInfo/index.d.ts +2 -5
- package/dist/components/BadgeInfo/index.es.js +5 -3
- package/dist/components/BadgeInfo/index.es.js.map +1 -1
- package/dist/components/BadgeState/index.d.ts +3 -2
- package/dist/components/BadgeState/index.es.js +10 -3
- package/dist/components/BadgeState/index.es.js.map +1 -1
- package/dist/components/BadgeState/styles.css +1 -1
- package/dist/components/Button/index.d.ts +9 -0
- package/dist/components/Button/index.es.js.map +1 -1
- package/dist/components/Button/styles.css +1 -1
- package/dist/components/Calendar/index.es.js +2 -2
- package/dist/components/CalendarHeader/index.es.js +3 -2
- package/dist/components/CalendarHeader/index.es.js.map +1 -1
- package/dist/components/Card/Container/index.d.ts +2 -1
- package/dist/components/Card/Emphasis/index.d.ts +2 -1
- package/dist/components/Card/Image/index.d.ts +2 -1
- package/dist/components/Card/Root/index.d.ts +2 -1
- package/dist/components/Card/Tag/index.d.ts +2 -1
- package/dist/components/Card/index.es.js +2 -2
- package/dist/components/Card/index.es.js.map +1 -1
- package/dist/components/Carousel/index.es.js +3 -2
- package/dist/components/Carousel/index.es.js.map +1 -1
- package/dist/components/Checkbox/index.es.js +4 -3
- package/dist/components/Checkbox/index.es.js.map +1 -1
- package/dist/components/Chip/index.d.ts +4 -3
- package/dist/components/Chip/index.es.js +13 -5
- package/dist/components/Chip/index.es.js.map +1 -1
- package/dist/components/Chip/styles.css +1 -1
- package/dist/components/ChipBanner/ChipBanner.test.d.ts +1 -0
- package/dist/components/ChipBanner/index.d.ts +12 -0
- package/dist/components/ChipBanner/index.es.js +99 -0
- package/dist/components/ChipBanner/index.es.js.map +1 -0
- package/dist/components/ChipBanner/styles.css +1 -0
- package/dist/components/Container/index.d.ts +2 -1
- package/dist/components/Container/index.es.js +13 -2
- package/dist/components/Container/index.es.js.map +1 -1
- package/dist/components/Datepicker/index.es.js +4 -4
- package/dist/components/Divider/index.d.ts +6 -0
- package/dist/components/Divider/index.es.js +17 -0
- package/dist/components/Divider/index.es.js.map +1 -0
- package/dist/components/Divider/styles.css +1 -0
- package/dist/components/Drawer/index.d.ts +8 -1
- package/dist/components/Drawer/index.es.js +7 -2
- package/dist/components/Drawer/index.es.js.map +1 -1
- package/dist/components/Drawer/styles.css +1 -1
- package/dist/components/Emphasis/index.es.js +3 -2
- package/dist/components/Emphasis/index.es.js.map +1 -1
- package/dist/components/Footer/index.d.ts +1 -1
- package/dist/components/Footer/index.es.js +5 -3
- package/dist/components/Footer/index.es.js.map +1 -1
- package/dist/components/Footer/types.d.ts +1 -0
- package/dist/components/Group/index.es.js +3 -2
- package/dist/components/Group/index.es.js.map +1 -1
- package/dist/components/Header/index.es.js +54 -17
- package/dist/components/Header/index.es.js.map +1 -1
- package/dist/components/Header/parts/HeaderActions.d.ts +2 -1
- package/dist/components/Header/parts/HeaderBadges.d.ts +2 -1
- package/dist/components/Header/parts/HeaderButton.d.ts +2 -1
- package/dist/components/Header/parts/HeaderHamburger.d.ts +2 -1
- package/dist/components/Header/parts/HeaderLogo.d.ts +2 -1
- package/dist/components/Header/parts/HeaderNavbar.d.ts +2 -1
- package/dist/components/Header/parts/HeaderNavigation.d.ts +2 -1
- package/dist/components/Header/parts/HeaderProfile.d.ts +2 -1
- package/dist/components/Header/parts/HeaderWrap.d.ts +2 -1
- package/dist/components/Header/types.d.ts +1 -0
- package/dist/components/Icon/index.es.js +17 -3
- package/dist/components/Icon/index.es.js.map +1 -1
- package/dist/components/Image/index.es.js +1 -1
- package/dist/components/Label/index.es.js +2 -1
- package/dist/components/Label/index.es.js.map +1 -1
- package/dist/components/LazyImage/index.d.ts +2 -1
- package/dist/components/LazyImage/index.es.js +4 -2
- package/dist/components/LazyImage/index.es.js.map +1 -1
- package/dist/components/LazyImage/types.d.ts +1 -0
- package/dist/components/LinkButton/LinkButton.test.d.ts +1 -0
- package/dist/components/LinkButton/index.d.ts +27 -0
- package/dist/components/LinkButton/index.es.js +56 -0
- package/dist/components/LinkButton/index.es.js.map +1 -0
- package/dist/components/LinkButton/styles.css +1 -0
- package/dist/components/Logo/Logo.d.ts +6 -1
- package/dist/components/Logo/ac/BadgeFullWhite.d.ts +2 -1
- package/dist/components/Logo/ac/BadgeWhite.d.ts +2 -1
- package/dist/components/Logo/ac/BadgeWhiteStroke.d.ts +2 -1
- package/dist/components/Logo/ac/BadgeWhiteStrokeDefault.d.ts +2 -1
- package/dist/components/Logo/ac/Badget.d.ts +2 -1
- package/dist/components/Logo/ac/Primary.d.ts +2 -1
- package/dist/components/Logo/ac/PrimaryFillWhite.d.ts +2 -1
- package/dist/components/Logo/ac/PrimaryFullWhite.d.ts +2 -1
- package/dist/components/Logo/ac/PrimaryNegative.d.ts +2 -1
- package/dist/components/Logo/ac/PrimaryWhite.d.ts +2 -1
- package/dist/components/Logo/ac/Tertiary.d.ts +2 -1
- package/dist/components/Logo/ac/TertiaryWhite.d.ts +2 -1
- package/dist/components/Logo/cp/BadgeWhiteStroke.d.ts +2 -1
- package/dist/components/Logo/cp/Badget.d.ts +2 -1
- package/dist/components/Logo/cp/Primary.d.ts +2 -1
- package/dist/components/Logo/cp/PrimaryFillWhite.d.ts +2 -1
- package/dist/components/Logo/cp/PrimaryFullWhite.d.ts +2 -1
- package/dist/components/Logo/cp/PrimaryLogoWhite.d.ts +2 -1
- package/dist/components/Logo/cp/PrimaryNegative.d.ts +2 -1
- package/dist/components/Logo/cp/PrimaryWhite.d.ts +2 -1
- package/dist/components/Logo/index.es.js +1 -1
- package/dist/components/Modal/index.d.ts +4 -1
- package/dist/components/Modal/index.es.js +11 -1
- package/dist/components/Modal/index.es.js.map +1 -1
- package/dist/components/NavbarVertical/index.d.ts +4 -2
- package/dist/components/NavbarVertical/index.es.js +6 -3
- package/dist/components/NavbarVertical/index.es.js.map +1 -1
- package/dist/components/NotificationsBar/index.d.ts +9 -6
- package/dist/components/NotificationsBar/index.es.js +21 -9
- package/dist/components/NotificationsBar/index.es.js.map +1 -1
- package/dist/components/PartnerBanner/PartnerBanner.test.d.ts +1 -0
- package/dist/components/PartnerBanner/index.d.ts +11 -0
- package/dist/components/PartnerBanner/index.es.js +45 -0
- package/dist/components/PartnerBanner/index.es.js.map +1 -0
- package/dist/components/PartnerBanner/styles.css +1 -0
- package/dist/components/PortalHolder/index.es.js +1 -1
- package/dist/components/ProfileNav/index.d.ts +2 -1
- package/dist/components/ProfileNav/index.es.js +6 -2
- package/dist/components/ProfileNav/index.es.js.map +1 -1
- package/dist/components/ProgressBar/index.d.ts +1 -0
- package/dist/components/ProgressBar/index.es.js +3 -1
- package/dist/components/ProgressBar/index.es.js.map +1 -1
- package/dist/components/Prototype/Carousel/index.d.ts +1 -1
- package/dist/components/Prototype/Carousel/types.d.ts +1 -0
- package/dist/components/Pure/index.es.js +3 -2
- package/dist/components/Pure/index.es.js.map +1 -1
- package/dist/components/Segment/index.es.js +2 -1
- package/dist/components/Segment/index.es.js.map +1 -1
- package/dist/components/SelectField/index.es.js +4 -2
- package/dist/components/SelectField/index.es.js.map +1 -1
- package/dist/components/SelectField/styles.css +1 -1
- package/dist/components/Skeleton/Skeleton.stories.d.ts +2 -0
- package/dist/components/Skeleton/index.d.ts +2 -1
- package/dist/components/Skeleton/index.es.js +3 -2
- package/dist/components/Skeleton/index.es.js.map +1 -1
- package/dist/components/SpecialButton/SpecialButton.test.d.ts +1 -0
- package/dist/components/SpecialButton/index.d.ts +38 -0
- package/dist/components/SpecialButton/index.es.js +193 -0
- package/dist/components/SpecialButton/index.es.js.map +1 -0
- package/dist/components/SpecialButton/styles.css +1 -0
- package/dist/components/Spinner/index.d.ts +10 -5
- package/dist/components/Spinner/index.es.js +28 -13
- package/dist/components/Spinner/index.es.js.map +1 -1
- package/dist/components/SubHeader/index.d.ts +2 -1
- package/dist/components/SubHeader/index.es.js +4 -1
- package/dist/components/SubHeader/index.es.js.map +1 -1
- package/dist/components/Switch/Card/types.d.ts +1 -0
- package/dist/components/Switch/Pure/types.d.ts +1 -0
- package/dist/components/Tabs/index.d.ts +4 -4
- package/dist/components/Tabs/index.es.js +81 -83
- package/dist/components/Tabs/index.es.js.map +1 -1
- package/dist/components/Tabs/styles.css +1 -1
- package/dist/components/Tag/index.es.js +10 -87
- package/dist/components/Tag/index.es.js.map +1 -1
- package/dist/components/Text/styles.css +1 -1
- package/dist/components/Text/types.d.ts +1 -1
- package/dist/components/TextareaField/index.es.js.map +1 -1
- package/dist/components/TokenField/index.es.js +3 -2
- package/dist/components/TokenField/index.es.js.map +1 -1
- package/dist/components/Tooltip/index.d.ts +2 -1
- package/dist/components/Tooltip/index.es.js +3 -2
- package/dist/components/Tooltip/index.es.js.map +1 -1
- package/dist/components/Transition/Transition.test.d.ts +1 -0
- package/dist/components/Transition/hooks.d.ts +11 -0
- package/dist/components/Transition/index.d.ts +11 -0
- package/dist/components/Transition/index.es.js +131 -0
- package/dist/components/Transition/index.es.js.map +1 -0
- package/dist/components/Transition/styles.css +1 -0
- package/dist/components/dataTestId.test.d.ts +1 -0
- package/dist/components/default/index.es.js +4 -0
- package/dist/components/default/index.es.js.map +1 -1
- package/dist/components/form/Checkbox/Group/index.d.ts +1 -1
- package/dist/components/form/Checkbox/types.d.ts +1 -0
- package/dist/components/form/Radio/Group/index.d.ts +1 -1
- package/dist/components/form/Radio/types.d.ts +1 -0
- package/dist/components/form/SelectField/index.d.ts +1 -1
- package/dist/components/form/SelectField/types.d.ts +2 -0
- package/dist/components/form/TextareaField/index.d.ts +1 -0
- package/dist/components/form/TokenField/index.d.ts +2 -1
- package/dist/components/icons/Icon.d.ts +1 -0
- package/dist/components/icons/Icon.test/index.es.js +23 -5
- package/dist/components/icons/Icon.test/index.es.js.map +1 -1
- package/dist/components/icons/IconCollapseClose/index.es.js +16 -0
- package/dist/components/icons/IconCollapseClose/index.es.js.map +1 -0
- package/dist/components/icons/IconCollapseOpen/index.es.js +16 -0
- package/dist/components/icons/IconCollapseOpen/index.es.js.map +1 -0
- package/dist/components/icons/default/IconCollapseClose.d.ts +2 -0
- package/dist/components/icons/default/IconCollapseOpen.d.ts +2 -0
- package/dist/components/icons/default/index.d.ts +2 -0
- package/dist/components/icons/index.es.js +4 -0
- package/dist/components/icons/index.es.js.map +1 -1
- package/dist/{index-vsYzka4t.js → index-BgBOcVUP.js} +3 -3
- package/dist/{index-vsYzka4t.js.map → index-BgBOcVUP.js.map} +1 -1
- package/dist/{index-NIxlEyxx.js → index-DHwXRotU.js} +3 -3
- package/dist/{index-NIxlEyxx.js.map → index-DHwXRotU.js.map} +1 -1
- package/dist/{index-BvQw_Wgb.js → index-DnQGzfVW.js} +3 -3
- package/dist/{index-BvQw_Wgb.js.map → index-DnQGzfVW.js.map} +1 -1
- package/dist/main.d.ts +9 -2
- package/dist/main.es.js +80 -68
- package/dist/main.es.js.map +1 -1
- package/dist/{tokens-eEtvWiuX.js → tokens-C4yCunfz.js} +45 -45
- package/dist/{tokens-eEtvWiuX.js.map → tokens-C4yCunfz.js.map} +1 -1
- package/package.json +3 -3
- package/dist/BadgeWhite-DwzVEF3U.js.map +0 -1
- package/dist/components/Tag/index.d.ts +0 -21
- package/dist/components/Tag/styles.css +0 -1
- /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
|
-
|
|
3
|
-
|
|
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:
|
|
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
|
|
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:
|
|
7
|
-
style: { width:
|
|
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:
|
|
18
|
-
height:
|
|
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:
|
|
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\
|
|
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":"
|
|
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;"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export type TabsProps = {
|
|
2
2
|
tabs: TabItemProps[];
|
|
3
|
-
|
|
3
|
+
/** Hides the tab bar and renders only the active panel. Not mapped in Figma. */
|
|
4
4
|
areTabsHidden?: boolean;
|
|
5
5
|
initialTab?: string;
|
|
6
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
11
|
+
"data-testid": dataTestId
|
|
15
12
|
}) => {
|
|
16
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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:
|
|
112
|
+
children: /* @__PURE__ */ jsx(When, { condition: activeTab === tab, children })
|
|
115
113
|
},
|
|
116
114
|
`au-tabs-${tab}`
|
|
117
115
|
);
|