@etus/ui 0.4.0-beta.21 → 0.4.0-beta.22
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/{chunk-KBU4KJKC.js → chunk-2DFFIU44.js} +4 -4
- package/dist/{chunk-KBU4KJKC.js.map → chunk-2DFFIU44.js.map} +1 -1
- package/dist/{chunk-MR6RUPVT.js → chunk-2JDLQ4VR.js} +3 -3
- package/dist/{chunk-MR6RUPVT.js.map → chunk-2JDLQ4VR.js.map} +1 -1
- package/dist/{chunk-JE46MFMN.js → chunk-2LVRSLWI.js} +4 -4
- package/dist/{chunk-JE46MFMN.js.map → chunk-2LVRSLWI.js.map} +1 -1
- package/dist/{chunk-GRODCJS4.js → chunk-2VOKY2TU.js} +4 -4
- package/dist/{chunk-GRODCJS4.js.map → chunk-2VOKY2TU.js.map} +1 -1
- package/dist/{chunk-UC5J6GWG.js → chunk-3TRT6TKW.js} +6 -6
- package/dist/chunk-3TRT6TKW.js.map +1 -0
- package/dist/{chunk-UZZCEQH4.js → chunk-3XVOI4HK.js} +3 -3
- package/dist/{chunk-UZZCEQH4.js.map → chunk-3XVOI4HK.js.map} +1 -1
- package/dist/{chunk-WGKOYZRI.js → chunk-4S6CPTSO.js} +5 -5
- package/dist/chunk-4S6CPTSO.js.map +1 -0
- package/dist/{chunk-GVNG5ME6.js → chunk-6CO3FRGG.js} +201 -17
- package/dist/chunk-6CO3FRGG.js.map +1 -0
- package/dist/chunk-7MJS37Q4.js +135 -0
- package/dist/chunk-7MJS37Q4.js.map +1 -0
- package/dist/{chunk-QXET2TML.js → chunk-A33MLHXO.js} +3 -3
- package/dist/{chunk-QXET2TML.js.map → chunk-A33MLHXO.js.map} +1 -1
- package/dist/{chunk-STADVFL2.js → chunk-A6BDDZ27.js} +3 -3
- package/dist/{chunk-STADVFL2.js.map → chunk-A6BDDZ27.js.map} +1 -1
- package/dist/{chunk-WSDWJX4Y.js → chunk-AGXEGVSY.js} +3 -3
- package/dist/{chunk-WSDWJX4Y.js.map → chunk-AGXEGVSY.js.map} +1 -1
- package/dist/{chunk-R42LSLJL.js → chunk-AOLVER6U.js} +3 -3
- package/dist/{chunk-R42LSLJL.js.map → chunk-AOLVER6U.js.map} +1 -1
- package/dist/{chunk-YMQDTTO7.js → chunk-CEUARW3D.js} +3 -3
- package/dist/{chunk-YMQDTTO7.js.map → chunk-CEUARW3D.js.map} +1 -1
- package/dist/{chunk-LDK6ADKM.js → chunk-DZV32N5V.js} +4 -4
- package/dist/{chunk-LDK6ADKM.js.map → chunk-DZV32N5V.js.map} +1 -1
- package/dist/{chunk-2SUZS6GZ.js → chunk-E5UFATRY.js} +11 -3
- package/dist/chunk-E5UFATRY.js.map +1 -0
- package/dist/{chunk-RQBYBBMP.js → chunk-EINYBB7T.js} +5 -5
- package/dist/{chunk-RQBYBBMP.js.map → chunk-EINYBB7T.js.map} +1 -1
- package/dist/{chunk-4LZ53BAG.js → chunk-EKKJXJX7.js} +4 -2
- package/dist/chunk-EKKJXJX7.js.map +1 -0
- package/dist/{chunk-4OWRNWHW.js → chunk-FCVFYUCL.js} +14 -5
- package/dist/chunk-FCVFYUCL.js.map +1 -0
- package/dist/{chunk-6QVXMYKH.js → chunk-FGTYI4ZG.js} +3 -3
- package/dist/{chunk-6QVXMYKH.js.map → chunk-FGTYI4ZG.js.map} +1 -1
- package/dist/{chunk-6G5QK3SU.js → chunk-FLXU5LWR.js} +44 -4
- package/dist/chunk-FLXU5LWR.js.map +1 -0
- package/dist/{chunk-P4WMDGAQ.js → chunk-G5JO3Q3K.js} +3 -3
- package/dist/{chunk-P4WMDGAQ.js.map → chunk-G5JO3Q3K.js.map} +1 -1
- package/dist/{chunk-RMJVCJ6U.js → chunk-GKG2LRGY.js} +6 -6
- package/dist/chunk-GKG2LRGY.js.map +1 -0
- package/dist/{chunk-N7VMQWM3.js → chunk-GN6B4W3G.js} +4 -4
- package/dist/{chunk-N7VMQWM3.js.map → chunk-GN6B4W3G.js.map} +1 -1
- package/dist/chunk-GX2VJT7D.js +136 -0
- package/dist/chunk-GX2VJT7D.js.map +1 -0
- package/dist/{chunk-MNYU5MHO.js → chunk-H4KC2YSL.js} +5 -5
- package/dist/{chunk-MNYU5MHO.js.map → chunk-H4KC2YSL.js.map} +1 -1
- package/dist/{chunk-GLHKHYJY.js → chunk-IARO2PPN.js} +55 -15
- package/dist/chunk-IARO2PPN.js.map +1 -0
- package/dist/{chunk-ELRIFGMN.js → chunk-JWXZFGNT.js} +30 -6
- package/dist/chunk-JWXZFGNT.js.map +1 -0
- package/dist/{chunk-Y4FEW7SR.js → chunk-K5RHYIFF.js} +16 -6
- package/dist/chunk-K5RHYIFF.js.map +1 -0
- package/dist/{chunk-T3LWBCVR.js → chunk-LKCOHB3C.js} +36 -3
- package/dist/chunk-LKCOHB3C.js.map +1 -0
- package/dist/{chunk-7PX3WBR3.js → chunk-LWIIO75I.js} +5 -3
- package/dist/chunk-LWIIO75I.js.map +1 -0
- package/dist/{chunk-U7TPJMGY.js → chunk-MR3IPJAO.js} +6 -2
- package/dist/chunk-MR3IPJAO.js.map +1 -0
- package/dist/chunk-MVL4DVRW.js +177 -0
- package/dist/chunk-MVL4DVRW.js.map +1 -0
- package/dist/{chunk-L4OQ6BJ5.js → chunk-N3DBRKUS.js} +3 -3
- package/dist/{chunk-L4OQ6BJ5.js.map → chunk-N3DBRKUS.js.map} +1 -1
- package/dist/{chunk-TIPKU427.js → chunk-N7DAU4LE.js} +3 -3
- package/dist/{chunk-TIPKU427.js.map → chunk-N7DAU4LE.js.map} +1 -1
- package/dist/{chunk-ZVSMLMMS.js → chunk-NORI6ECA.js} +44 -4
- package/dist/chunk-NORI6ECA.js.map +1 -0
- package/dist/{chunk-7MLRRVOX.js → chunk-NT4GLWNR.js} +3 -3
- package/dist/{chunk-7MLRRVOX.js.map → chunk-NT4GLWNR.js.map} +1 -1
- package/dist/{chunk-7AR5QRRX.js → chunk-NZNAR4HJ.js} +27 -11
- package/dist/chunk-NZNAR4HJ.js.map +1 -0
- package/dist/{chunk-TNSMTINE.js → chunk-OJIFG4LW.js} +3 -3
- package/dist/{chunk-TNSMTINE.js.map → chunk-OJIFG4LW.js.map} +1 -1
- package/dist/{chunk-PTXC4KPQ.js → chunk-OSHGYI2O.js} +4 -4
- package/dist/{chunk-PTXC4KPQ.js.map → chunk-OSHGYI2O.js.map} +1 -1
- package/dist/chunk-OW5R4KST.js +108 -0
- package/dist/chunk-OW5R4KST.js.map +1 -0
- package/dist/{chunk-QJOWG2D4.js → chunk-PVF23ZX2.js} +3 -3
- package/dist/{chunk-QJOWG2D4.js.map → chunk-PVF23ZX2.js.map} +1 -1
- package/dist/{chunk-KHCHATTD.js → chunk-PYCQBP4O.js} +4 -4
- package/dist/{chunk-KHCHATTD.js.map → chunk-PYCQBP4O.js.map} +1 -1
- package/dist/{chunk-KDNTSZF5.js → chunk-Q4E7OG7J.js} +3 -3
- package/dist/{chunk-KDNTSZF5.js.map → chunk-Q4E7OG7J.js.map} +1 -1
- package/dist/{chunk-KLFYTLF3.js → chunk-Q7MAQ7MO.js} +3 -3
- package/dist/{chunk-KLFYTLF3.js.map → chunk-Q7MAQ7MO.js.map} +1 -1
- package/dist/{chunk-S6BREP2G.js → chunk-QMCQIOCP.js} +21 -7
- package/dist/chunk-QMCQIOCP.js.map +1 -0
- package/dist/{chunk-SSKSWSVO.js → chunk-R2Z64IC3.js} +4 -4
- package/dist/{chunk-SSKSWSVO.js.map → chunk-R2Z64IC3.js.map} +1 -1
- package/dist/{chunk-UNHPLKMR.js → chunk-RK27HS7W.js} +3 -3
- package/dist/{chunk-UNHPLKMR.js.map → chunk-RK27HS7W.js.map} +1 -1
- package/dist/{chunk-IKLFWGFS.js → chunk-RTSAERFS.js} +7 -7
- package/dist/{chunk-IKLFWGFS.js.map → chunk-RTSAERFS.js.map} +1 -1
- package/dist/{chunk-EO4NGM5W.js → chunk-S7HXZ5T3.js} +65 -16
- package/dist/chunk-S7HXZ5T3.js.map +1 -0
- package/dist/{chunk-I5RDX6O3.js → chunk-TBPPBA3S.js} +31 -25
- package/dist/chunk-TBPPBA3S.js.map +1 -0
- package/dist/{chunk-TDANAN5A.js → chunk-TD2EFGHO.js} +7 -3
- package/dist/chunk-TD2EFGHO.js.map +1 -0
- package/dist/{chunk-3R6MY3YJ.js → chunk-TVAIT3F5.js} +3 -3
- package/dist/{chunk-3R6MY3YJ.js.map → chunk-TVAIT3F5.js.map} +1 -1
- package/dist/{chunk-VHJ6ALIE.js → chunk-TX4GUAZ6.js} +11 -3
- package/dist/chunk-TX4GUAZ6.js.map +1 -0
- package/dist/{chunk-7XJQYAGY.js → chunk-U55YU7DB.js} +22 -6
- package/dist/chunk-U55YU7DB.js.map +1 -0
- package/dist/{chunk-5GV4LDX7.js → chunk-VI3QWOII.js} +4 -2
- package/dist/chunk-VI3QWOII.js.map +1 -0
- package/dist/{chunk-PXR6CZIL.js → chunk-VYCXCOUH.js} +3 -3
- package/dist/{chunk-PXR6CZIL.js.map → chunk-VYCXCOUH.js.map} +1 -1
- package/dist/{chunk-SKI25Q7O.js → chunk-W72PXQDH.js} +4 -4
- package/dist/{chunk-SKI25Q7O.js.map → chunk-W72PXQDH.js.map} +1 -1
- package/dist/{chunk-4SFBDK4E.js → chunk-WTKHA2NF.js} +3 -3
- package/dist/{chunk-4SFBDK4E.js.map → chunk-WTKHA2NF.js.map} +1 -1
- package/dist/{chunk-KXJ3SEW7.js → chunk-YNZ6T4IU.js} +13 -5
- package/dist/chunk-YNZ6T4IU.js.map +1 -0
- package/dist/{chunk-7QEFKWUR.js → chunk-YZBCJDYO.js} +4 -4
- package/dist/{chunk-7QEFKWUR.js.map → chunk-YZBCJDYO.js.map} +1 -1
- package/dist/{chunk-PVIIIQJI.js → chunk-ZTD3QXLY.js} +4 -4
- package/dist/{chunk-PVIIIQJI.js.map → chunk-ZTD3QXLY.js.map} +1 -1
- package/dist/{chunk-HHWUROMA.js → chunk-ZZFCKHE2.js} +4 -4
- package/dist/{chunk-HHWUROMA.js.map → chunk-ZZFCKHE2.js.map} +1 -1
- package/dist/components/advanced/Calendar/index.js +3 -3
- package/dist/components/advanced/Command/index.js +2 -2
- package/dist/components/advanced/EventCalendar/index.js +3 -3
- package/dist/components/advanced/FilterBuilder/index.js +5 -5
- package/dist/components/advanced/MarkdownEditor/index.js +2 -2
- package/dist/components/advanced/ReportBuilder/index.js +4 -4
- package/dist/components/advanced/index.js +12 -12
- package/dist/components/data-display/Banner/index.js +1 -1
- package/dist/components/data-display/BarChart/index.js +1 -1
- package/dist/components/data-display/Carousel/index.js +3 -3
- package/dist/components/data-display/DataTable/FilterBuilder/index.js +5 -5
- package/dist/components/data-display/DataTable/index.js +9 -9
- package/dist/components/data-display/ImageGallery/index.js +4 -4
- package/dist/components/data-display/Item/index.js +1 -1
- package/dist/components/data-display/KPICard/index.js +1 -1
- package/dist/components/data-display/List/index.js +2 -2
- package/dist/components/data-display/RadarChart/index.js +1 -1
- package/dist/components/data-display/RadialChart/index.js +1 -1
- package/dist/components/data-display/index.js +35 -35
- package/dist/components/feedback/AlertDialog/index.js +3 -3
- package/dist/components/feedback/ConfirmModal/index.js +4 -4
- package/dist/components/feedback/Dialog/index.js +1 -1
- package/dist/components/feedback/ErrorPage/index.js +1 -1
- package/dist/components/feedback/Notification/index.js +2 -2
- package/dist/components/feedback/index.js +9 -9
- package/dist/components/forms/DatePicker/index.js +4 -4
- package/dist/components/forms/DateRangePicker/index.js +5 -5
- package/dist/components/forms/EmailInput/index.js +3 -3
- package/dist/components/forms/InputGroup/index.js +5 -5
- package/dist/components/forms/NumberInput/index.js +2 -2
- package/dist/components/forms/PasswordInput/index.js +3 -3
- package/dist/components/forms/PaymentInput/index.js +1 -1
- package/dist/components/forms/PhoneInput/index.js +1 -1
- package/dist/components/forms/RadioGroup/index.js +1 -1
- package/dist/components/forms/Rating/index.js +1 -1
- package/dist/components/forms/SearchInput/index.js +3 -3
- package/dist/components/forms/Switch/index.js +1 -1
- package/dist/components/forms/TagsInput/index.js +1 -1
- package/dist/components/forms/TextInput/index.js +2 -2
- package/dist/components/forms/URLInput/index.js +3 -3
- package/dist/components/forms/index.js +25 -25
- package/dist/components/index.js +137 -137
- package/dist/components/layout/Collapsible/index.js +1 -1
- package/dist/components/layout/index.js +4 -4
- package/dist/components/navigation/AccountSwitch/index.js +3 -3
- package/dist/components/navigation/Breadcrumb/index.js +1 -1
- package/dist/components/navigation/ContextMenu/index.js +1 -1
- package/dist/components/navigation/DropdownMenu/index.js +1 -1
- package/dist/components/navigation/Pagination/index.js +3 -3
- package/dist/components/navigation/Sidebar/index.js +8 -7
- package/dist/components/navigation/index.js +17 -16
- package/dist/components/primitives/Avatar/index.js +1 -1
- package/dist/components/primitives/Button/index.js +2 -2
- package/dist/components/primitives/ButtonGroup/index.js +1 -1
- package/dist/components/primitives/ConfirmButton/index.js +4 -4
- package/dist/components/primitives/Icon/index.js +1 -1
- package/dist/components/primitives/Kbd/index.js +1 -1
- package/dist/components/primitives/Link/index.js +1 -1
- package/dist/components/primitives/ProgressCircle/index.js +1 -1
- package/dist/components/primitives/SplitButton/index.js +2 -2
- package/dist/components/primitives/Text/index.js +1 -1
- package/dist/components/primitives/index.js +16 -16
- package/dist/components/workflow/ApprovalFlow/index.js +4 -4
- package/dist/components/workflow/CommentSystem/index.js +4 -4
- package/dist/components/workflow/Dashboard/index.js +3 -3
- package/dist/components/workflow/DashboardBuilder/index.js +5 -5
- package/dist/components/workflow/KanbanBoard/index.js +4 -4
- package/dist/components/workflow/ReportGenerator/index.js +3 -3
- package/dist/components/workflow/TaskStatus/index.js +2 -2
- package/dist/components/workflow/Wizard/index.js +3 -3
- package/dist/components/workflow/index.js +16 -16
- package/dist/hooks/index.js +1 -1
- package/dist/index.d.ts +303 -42
- package/dist/index.js +137 -137
- package/dist/styles.css +27 -8
- package/package.json +2 -2
- package/dist/chunk-2SUZS6GZ.js.map +0 -1
- package/dist/chunk-4LZ53BAG.js.map +0 -1
- package/dist/chunk-4OWRNWHW.js.map +0 -1
- package/dist/chunk-5GV4LDX7.js.map +0 -1
- package/dist/chunk-6G5QK3SU.js.map +0 -1
- package/dist/chunk-6VEQLD2P.js +0 -75
- package/dist/chunk-6VEQLD2P.js.map +0 -1
- package/dist/chunk-7AR5QRRX.js.map +0 -1
- package/dist/chunk-7PX3WBR3.js.map +0 -1
- package/dist/chunk-7XJQYAGY.js.map +0 -1
- package/dist/chunk-ELRIFGMN.js.map +0 -1
- package/dist/chunk-EO4NGM5W.js.map +0 -1
- package/dist/chunk-GLHKHYJY.js.map +0 -1
- package/dist/chunk-GVNG5ME6.js.map +0 -1
- package/dist/chunk-I5RDX6O3.js.map +0 -1
- package/dist/chunk-JUZ4JQWH.js +0 -69
- package/dist/chunk-JUZ4JQWH.js.map +0 -1
- package/dist/chunk-K4UCALQQ.js +0 -67
- package/dist/chunk-K4UCALQQ.js.map +0 -1
- package/dist/chunk-KXJ3SEW7.js.map +0 -1
- package/dist/chunk-RMJVCJ6U.js.map +0 -1
- package/dist/chunk-S6BREP2G.js.map +0 -1
- package/dist/chunk-T3LWBCVR.js.map +0 -1
- package/dist/chunk-TDANAN5A.js.map +0 -1
- package/dist/chunk-U7TPJMGY.js.map +0 -1
- package/dist/chunk-UC5J6GWG.js.map +0 -1
- package/dist/chunk-VHJ6ALIE.js.map +0 -1
- package/dist/chunk-WGKOYZRI.js.map +0 -1
- package/dist/chunk-WUS45IZW.js +0 -36
- package/dist/chunk-WUS45IZW.js.map +0 -1
- package/dist/chunk-Y4FEW7SR.js.map +0 -1
- package/dist/chunk-ZVSMLMMS.js.map +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { inputCompositionVariants, inputVariants, inputWrapperVariants, inputIconVariants } from './chunk-LKCOHB3C.js';
|
|
2
|
+
import { cn } from './chunk-RVAYDRMA.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function TextInput({
|
|
7
|
+
className,
|
|
8
|
+
type = "text",
|
|
9
|
+
size = "md",
|
|
10
|
+
variant,
|
|
11
|
+
leadingIcon,
|
|
12
|
+
trailingIcon,
|
|
13
|
+
leadingIconInteractive,
|
|
14
|
+
trailingIconInteractive,
|
|
15
|
+
leadingText,
|
|
16
|
+
trailingDropdown,
|
|
17
|
+
...props
|
|
18
|
+
}) {
|
|
19
|
+
const hasLeadingIcon = !!leadingIcon;
|
|
20
|
+
const hasTrailingIcon = !!trailingIcon;
|
|
21
|
+
const hasIcons = hasLeadingIcon || hasTrailingIcon;
|
|
22
|
+
if (leadingText || trailingDropdown) {
|
|
23
|
+
return /* @__PURE__ */ jsxs(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
"aria-invalid": props["aria-invalid"],
|
|
27
|
+
className: cn(inputCompositionVariants({ size, variant }), className),
|
|
28
|
+
"data-slot": "input-composition",
|
|
29
|
+
children: [
|
|
30
|
+
leadingIcon && /* @__PURE__ */ jsx(
|
|
31
|
+
"span",
|
|
32
|
+
{
|
|
33
|
+
"aria-hidden": "true",
|
|
34
|
+
className: "flex shrink-0 items-center text-[color:var(--input-fg-icon)]",
|
|
35
|
+
"data-slot": "input-leading-icon",
|
|
36
|
+
children: leadingIcon
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
leadingText && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
40
|
+
/* @__PURE__ */ jsx(
|
|
41
|
+
"span",
|
|
42
|
+
{
|
|
43
|
+
className: "shrink-0 text-[color:var(--input-fg-placeholder)]",
|
|
44
|
+
"data-slot": "input-leading-text",
|
|
45
|
+
children: leadingText
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
"aria-hidden": "true",
|
|
52
|
+
className: "h-4 w-px shrink-0 bg-[color:var(--input-border-default)]",
|
|
53
|
+
"data-slot": "input-leading-text-divider"
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
] }),
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
"input",
|
|
59
|
+
{
|
|
60
|
+
className: "h-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-[color:var(--input-fg-placeholder)] disabled:cursor-not-allowed",
|
|
61
|
+
"data-slot": "input",
|
|
62
|
+
type,
|
|
63
|
+
...props
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
trailingIcon && /* @__PURE__ */ jsx(
|
|
67
|
+
"span",
|
|
68
|
+
{
|
|
69
|
+
className: cn(
|
|
70
|
+
"flex shrink-0 items-center text-[color:var(--input-fg-icon)]",
|
|
71
|
+
!trailingIconInteractive && "pointer-events-none"
|
|
72
|
+
),
|
|
73
|
+
"data-slot": "input-trailing-icon",
|
|
74
|
+
children: trailingIcon
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
trailingDropdown && /* @__PURE__ */ jsx(
|
|
78
|
+
"div",
|
|
79
|
+
{
|
|
80
|
+
className: "flex shrink-0 items-center gap-1 text-sm",
|
|
81
|
+
"data-slot": "input-trailing-dropdown",
|
|
82
|
+
children: trailingDropdown
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
const inputElement = /* @__PURE__ */ jsx(
|
|
90
|
+
"input",
|
|
91
|
+
{
|
|
92
|
+
className: cn(
|
|
93
|
+
"peer",
|
|
94
|
+
inputVariants({ size, variant, hasLeadingIcon, hasTrailingIcon }),
|
|
95
|
+
className
|
|
96
|
+
),
|
|
97
|
+
"data-slot": "input",
|
|
98
|
+
type,
|
|
99
|
+
...props
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
if (!hasIcons) {
|
|
103
|
+
return inputElement;
|
|
104
|
+
}
|
|
105
|
+
return /* @__PURE__ */ jsxs("div", { className: inputWrapperVariants(), "data-slot": "input-wrapper", children: [
|
|
106
|
+
hasLeadingIcon && /* @__PURE__ */ jsx(
|
|
107
|
+
"div",
|
|
108
|
+
{
|
|
109
|
+
className: inputIconVariants({
|
|
110
|
+
position: "leading",
|
|
111
|
+
size,
|
|
112
|
+
interactive: leadingIconInteractive
|
|
113
|
+
}),
|
|
114
|
+
"data-slot": "input-leading-icon",
|
|
115
|
+
children: leadingIcon
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
inputElement,
|
|
119
|
+
hasTrailingIcon && /* @__PURE__ */ jsx(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
className: inputIconVariants({
|
|
123
|
+
position: "trailing",
|
|
124
|
+
size,
|
|
125
|
+
interactive: trailingIconInteractive
|
|
126
|
+
}),
|
|
127
|
+
"data-slot": "input-trailing-icon",
|
|
128
|
+
children: trailingIcon
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
] });
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { TextInput };
|
|
135
|
+
//# sourceMappingURL=chunk-GX2VJT7D.js.map
|
|
136
|
+
//# sourceMappingURL=chunk-GX2VJT7D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/forms/TextInput/TextInput.tsx"],"names":[],"mappings":"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","file":"chunk-GX2VJT7D.js","sourcesContent":["import type { TextInputProps } from \"./TextInput.types\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n inputCompositionVariants,\n inputIconVariants,\n inputVariants,\n inputWrapperVariants,\n} from \"./TextInput.variants\"\n\nfunction TextInput({\n className,\n type = \"text\",\n size = \"md\",\n variant,\n leadingIcon,\n trailingIcon,\n leadingIconInteractive,\n trailingIconInteractive,\n leadingText,\n trailingDropdown,\n ...props\n}: TextInputProps) {\n const hasLeadingIcon = !!leadingIcon\n const hasTrailingIcon = !!trailingIcon\n const hasIcons = hasLeadingIcon || hasTrailingIcon\n\n // Figma Input Types \"Leading Text\" / \"Trailing Dropdown\" (1384:8287):\n // border no container (focus-within), input interno unstyled\n if (leadingText || trailingDropdown) {\n return (\n <div\n aria-invalid={props[\"aria-invalid\"]}\n className={cn(inputCompositionVariants({ size, variant }), className)}\n data-slot=\"input-composition\"\n >\n {leadingIcon && (\n <span\n aria-hidden=\"true\"\n className=\"flex shrink-0 items-center text-[color:var(--input-fg-icon)]\"\n data-slot=\"input-leading-icon\"\n >\n {leadingIcon}\n </span>\n )}\n {leadingText && (\n <>\n <span\n className=\"shrink-0 text-[color:var(--input-fg-placeholder)]\"\n data-slot=\"input-leading-text\"\n >\n {leadingText}\n </span>\n <span\n aria-hidden=\"true\"\n // Figma desenha 17px; h-4 (16) é o vizinho na escala de spacing\n className=\"h-4 w-px shrink-0 bg-[color:var(--input-border-default)]\"\n data-slot=\"input-leading-text-divider\"\n />\n </>\n )}\n <input\n className=\"h-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-[color:var(--input-fg-placeholder)] disabled:cursor-not-allowed\"\n data-slot=\"input\"\n type={type}\n {...props}\n />\n {trailingIcon && (\n <span\n className={cn(\n \"flex shrink-0 items-center text-[color:var(--input-fg-icon)]\",\n !trailingIconInteractive && \"pointer-events-none\"\n )}\n data-slot=\"input-trailing-icon\"\n >\n {trailingIcon}\n </span>\n )}\n {trailingDropdown && (\n <div\n className=\"flex shrink-0 items-center gap-1 text-sm\"\n data-slot=\"input-trailing-dropdown\"\n >\n {trailingDropdown}\n </div>\n )}\n </div>\n )\n }\n\n const inputElement = (\n <input\n className={cn(\n \"peer\",\n inputVariants({ size, variant, hasLeadingIcon, hasTrailingIcon }),\n className\n )}\n data-slot=\"input\"\n type={type}\n {...props}\n />\n )\n\n // Return plain input if no icons\n if (!hasIcons) {\n return inputElement\n }\n\n // Wrap with icons container\n return (\n <div className={inputWrapperVariants()} data-slot=\"input-wrapper\">\n {hasLeadingIcon && (\n <div\n className={inputIconVariants({\n position: \"leading\",\n size,\n interactive: leadingIconInteractive,\n })}\n data-slot=\"input-leading-icon\"\n >\n {leadingIcon}\n </div>\n )}\n {inputElement}\n {hasTrailingIcon && (\n <div\n className={inputIconVariants({\n position: \"trailing\",\n size,\n interactive: trailingIconInteractive,\n })}\n data-slot=\"input-trailing-icon\"\n >\n {trailingIcon}\n </div>\n )}\n </div>\n )\n}\n\nexport { TextInput }\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Calendar } from './chunk-
|
|
2
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './chunk-TIPKU427.js';
|
|
1
|
+
import { Calendar } from './chunk-OJIFG4LW.js';
|
|
3
2
|
import { Popover, PopoverTrigger, PopoverContent } from './chunk-EQ4YAADN.js';
|
|
4
|
-
import { Button } from './chunk-
|
|
3
|
+
import { Button } from './chunk-N3DBRKUS.js';
|
|
4
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './chunk-N7DAU4LE.js';
|
|
5
5
|
import { cn } from './chunk-RVAYDRMA.js';
|
|
6
6
|
import { endOfWeek, startOfWeek, endOfDay, startOfDay, endOfMonth, startOfMonth, endOfYear, startOfYear, subDays, subMonths, subYears, isBefore, isAfter, format, parse, isValid } from 'date-fns';
|
|
7
7
|
import { XIcon, CalendarIcon, ArrowRightIcon } from 'lucide-react';
|
|
@@ -696,5 +696,5 @@ function DateRangeInput({
|
|
|
696
696
|
}
|
|
697
697
|
|
|
698
698
|
export { DateRangeInput, DateRangePicker, DateRangePresets, dateRangeInputContainerVariants, dateRangeInputFieldVariants, dateRangePickerFooterVariants, dateRangePickerTriggerVariants, dateRangePresetVariants, dateRangePresetsContainerVariants, defaultPresets };
|
|
699
|
-
//# sourceMappingURL=chunk-
|
|
700
|
-
//# sourceMappingURL=chunk-
|
|
699
|
+
//# sourceMappingURL=chunk-H4KC2YSL.js.map
|
|
700
|
+
//# sourceMappingURL=chunk-H4KC2YSL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/forms/DateRangePicker/DateRangePicker.variants.ts","../src/components/forms/DateRangePicker/DateRangePresets.tsx","../src/components/forms/DateRangePicker/presets.ts","../src/components/forms/DateRangePicker/DateRangePicker.tsx","../src/components/forms/DateRangePicker/DateRangeInput.tsx"],"names":["format","startOfMonth","formatDate","startOfDay","jsx","React2","jsxs"],"mappings":"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","file":"chunk-MNYU5MHO.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DateRangePicker trigger variant styles using CVA\n */\nexport const dateRangePickerTriggerVariants = cva(\n // Base styles\n [\n \"inline-flex w-full items-center justify-between gap-2 rounded-[var(--date-picker-trigger-radius)] border bg-transparent font-normal transition-[color,box-shadow] outline-none\",\n \"text-left\",\n \"placeholder:text-muted-foreground\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"data-[state=open]:border-ring data-[state=open]:ring-ring/50 data-[state=open]:ring-[3px]\",\n \"min-w-[var(--date-range-picker-trigger-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--date-picker-trigger-height-sm)] px-[var(--date-picker-trigger-padding-x-sm)] py-[var(--date-picker-trigger-padding-y-sm)] text-[length:var(--date-picker-trigger-text-sm)]\",\n md: \"h-[var(--date-picker-trigger-height-md)] px-[var(--date-picker-trigger-padding-x-md)] py-[var(--date-picker-trigger-padding-y-md)] text-[length:var(--date-picker-trigger-text-md)]\",\n lg: \"h-[var(--date-picker-trigger-height-lg)] px-[var(--date-picker-trigger-padding-x-lg)] py-[var(--date-picker-trigger-padding-y-lg)] text-[length:var(--date-picker-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs dark:bg-input/30\",\n outline: \"border-input bg-transparent\",\n ghost: \"border-transparent hover:bg-accent\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\nexport type DateRangePickerTriggerVariantProps = VariantProps<typeof dateRangePickerTriggerVariants>\n\n/**\n * Preset item styles - horizontal scrollable tabs on mobile, vertical list on desktop\n */\nexport const dateRangePresetVariants = cva(\n [\n // Base - works for both orientations\n \"text-sm rounded-md transition-colors whitespace-nowrap\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[selected=true]:bg-primary/10 data-[selected=true]:text-primary data-[selected=true]:font-medium\",\n // Mobile: pill-like compact tabs\n \"px-3 py-1.5 flex-shrink-0\",\n // Desktop (sm+): full-width list items\n \"sm:w-full sm:text-left sm:py-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\nexport type DateRangePresetVariantProps = VariantProps<typeof dateRangePresetVariants>\n\n/**\n * Presets container styles - horizontal scrollable on mobile, vertical sidebar on desktop\n */\nexport const dateRangePresetsContainerVariants = cva(\n [\n // Mobile: horizontal scrollable tabs\n \"flex flex-row gap-1 p-2 overflow-x-auto\",\n \"border-b border-border\",\n \"-webkit-overflow-scrolling-touch scrollbar-hide\",\n // Desktop (sm+): vertical sidebar\n \"sm:flex-col sm:overflow-x-visible sm:border-b-0 sm:border-r\",\n \"sm:min-w-[var(--date-picker-preset-min-width)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Footer container styles (for Apply/Cancel buttons)\n */\nexport const dateRangePickerFooterVariants = cva(\n [\n \"flex items-center justify-end gap-2 border-t border-border\",\n \"p-[var(--date-picker-footer-padding)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input container styles\n */\nexport const dateRangeInputContainerVariants = cva(\n [\n \"flex items-center gap-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input field styles\n */\nexport const dateRangeInputFieldVariants = cva(\n [\n \"flex-1 min-w-0 rounded-md border border-input bg-transparent px-2 py-1 text-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-9 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type DateRangeInputFieldVariantProps = VariantProps<typeof dateRangeInputFieldVariants>\n","import type { DateRangePresetsProps } from \"./DateRangePicker.types\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangePresetsContainerVariants,\n dateRangePresetVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangePresets component displays a list of quick-select preset date ranges\n */\nfunction DateRangePresets({\n presets,\n selectedPreset,\n onSelect,\n}: DateRangePresetsProps) {\n return (\n <div\n aria-label=\"Date range presets\"\n className={cn(dateRangePresetsContainerVariants())}\n data-slot=\"date-range-presets\"\n role=\"listbox\"\n >\n {presets.map((preset) => {\n const isSelected = selectedPreset === preset.label\n return (\n <button\n key={preset.label}\n aria-selected={isSelected}\n className={cn(dateRangePresetVariants())}\n data-selected={isSelected || undefined}\n role=\"option\"\n type=\"button\"\n onClick={() => { onSelect(preset.getValue(), preset.label); }}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport { DateRangePresets }\n","import type { DateRangePreset } from \"./DateRangePicker.types\"\n\nimport {\n endOfDay,\n endOfMonth,\n endOfWeek,\n endOfYear,\n startOfDay,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subDays,\n subMonths,\n subYears,\n} from \"date-fns\"\n\n/**\n * Default preset options for quick date range selection.\n *\n * Each preset carries a canonical `key`; the visible label is resolved per locale via\n * {@link resolvePresetLabel} (DES-1263 — locale-driven, not hardcoded). The English `label`\n * here is the fallback. `custom` (pt: \"Fixo\") clears the range for manual selection.\n */\nexport const defaultPresets: DateRangePreset[] = [\n {\n key: \"today\",\n label: \"Today\",\n getValue: () => {\n const today = startOfDay(new Date())\n return { from: today, to: endOfDay(today) }\n },\n },\n {\n key: \"yesterday\",\n label: \"Yesterday\",\n getValue: () => {\n const yesterday = subDays(new Date(), 1)\n return { from: startOfDay(yesterday), to: endOfDay(yesterday) }\n },\n },\n {\n key: \"thisWeek\",\n label: \"This week\",\n getValue: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 0 }),\n to: endOfWeek(new Date(), { weekStartsOn: 0 }),\n }),\n },\n {\n key: \"last7Days\",\n label: \"Last 7 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 6)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last14Days\",\n label: \"Last 14 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 13)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last30Days\",\n label: \"Last 30 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 29)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"thisMonth\",\n label: \"This month\",\n getValue: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n key: \"lastMonth\",\n label: \"Last month\",\n getValue: () => {\n const lastMonth = subMonths(new Date(), 1)\n return {\n from: startOfMonth(lastMonth),\n to: endOfMonth(lastMonth),\n }\n },\n },\n {\n key: \"thisYear\",\n label: \"This year\",\n getValue: () => ({\n from: startOfYear(new Date()),\n to: endOfYear(new Date()),\n }),\n },\n {\n key: \"lastYear\",\n label: \"Last year\",\n getValue: () => {\n const lastYear = subYears(new Date(), 1)\n return {\n from: startOfYear(lastYear),\n to: endOfYear(lastYear),\n }\n },\n },\n {\n key: \"allTime\",\n label: \"All time\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n {\n key: \"custom\",\n label: \"Custom\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n]\n\n/**\n * Preset label translations (DES-1263). Keyed by language code (locale.code split on \"-\").\n * English labels live on the presets themselves and act as the fallback.\n */\nconst presetLabels: Record<string, Record<string, string>> = {\n pt: {\n today: \"Hoje\",\n yesterday: \"Ontem\",\n thisWeek: \"Esta semana\",\n last7Days: \"Últimos 7 dias\",\n last14Days: \"Últimos 14 dias\",\n last30Days: \"Últimos 30 dias\",\n thisMonth: \"Este mês\",\n lastMonth: \"Mês passado\",\n thisYear: \"Este ano\",\n lastYear: \"Ano passado\",\n allTime: \"Todo o período\",\n custom: \"Fixo\",\n },\n}\n\n/**\n * Resolves a preset's display label for the given locale code (e.g. \"pt-BR\").\n * Falls back to the preset's own English `label` when no translation exists.\n */\nexport function resolvePresetLabel(preset: DateRangePreset, localeCode?: string): string {\n const lang = localeCode?.split(\"-\")[0]\n const translated = lang && preset.key ? presetLabels[lang]?.[preset.key] : undefined\n return translated ?? preset.label\n}\n","import type { DateRange } from \"../../advanced/Calendar\"\nimport type { DateRangePickerProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isAfter, isBefore, startOfDay, startOfMonth } from \"date-fns\"\nimport { CalendarIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Calendar } from \"../../advanced/Calendar\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../feedback/Dialog\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../feedback/Popover\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n dateRangePickerFooterVariants,\n dateRangePickerTriggerVariants,\n} from \"./DateRangePicker.variants\"\nimport { DateRangePresets } from \"./DateRangePresets\"\nimport { defaultPresets, resolvePresetLabel } from \"./presets\"\n\n/**\n * DateRangePicker component for selecting a date range with optional presets\n */\nfunction DateRangePicker({\n ref,\n className,\n value,\n defaultValue,\n placeholder = \"Select date range\",\n disabled = false,\n disabledDates,\n readOnly = false,\n minDate,\n maxDate,\n format = \"PP\",\n locale,\n onChange,\n onOpenChange,\n onClear,\n size = \"md\",\n variant = \"default\",\n displayMode = \"popover\",\n modalTitle = \"Select Date Range\",\n required = false,\n invalid = false,\n clearable = false,\n numberOfMonths = 2,\n presets = defaultPresets,\n showPresets = true,\n requireConfirmation = false,\n showTodayButton = true,\n activeDates,\n calendarProps,\n id,\n name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ...props\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [internalRange, setInternalRange] = React.useState<DateRange | undefined>(defaultValue)\n const [pendingRange, setPendingRange] = React.useState<DateRange | undefined>()\n const [selectedPreset, setSelectedPreset] = React.useState<string>()\n const [month, setMonth] = React.useState<Date | undefined>()\n\n // Use controlled value if provided, otherwise use internal state\n const selectedRange = value ?? internalRange\n\n // For confirmation mode, show pending changes until applied\n const displayRange = requireConfirmation && open ? (pendingRange ?? selectedRange) : selectedRange\n\n // Initialize pending range when opening in confirmation mode\n /* eslint-disable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n React.useEffect(() => {\n if (open && requireConfirmation) {\n setPendingRange(selectedRange)\n }\n }, [open, requireConfirmation, selectedRange])\n /* eslint-enable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n // Clear preset selection when manually selecting\n setSelectedPreset(undefined)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n }\n }\n\n const handlePresetSelect = (range: DateRange, label: string) => {\n setSelectedPreset(label)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n setOpen(false)\n }\n }\n\n const handleApply = () => {\n if (pendingRange) {\n if (value === undefined) {\n setInternalRange(pendingRange)\n }\n onChange?.(pendingRange)\n }\n setPendingRange(undefined)\n setOpen(false)\n }\n\n const handleCancel = () => {\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n setOpen(false)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n // Don't open if readOnly\n if (readOnly && isOpen) return\n\n if (!isOpen && requireConfirmation) {\n // Cancel pending changes when closing without applying\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n }\n\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) {\n setInternalRange(undefined)\n }\n onChange?.()\n setSelectedPreset(undefined)\n onClear?.()\n }\n\n const handleTodayClick = () => {\n setMonth(startOfMonth(new Date()))\n }\n\n // Format display value\n const formatRange = (range: DateRange | undefined): null | string => {\n if (!range?.from) return null\n\n const formatOptions = locale ? { locale } : undefined\n const formattedFrom = formatDate(range.from, format, formatOptions)\n\n if (!range.to) {\n return formattedFrom\n }\n\n const formattedTo = formatDate(range.to, format, formatOptions)\n return `${formattedFrom} - ${formattedTo}`\n }\n\n const displayValue = formatRange(selectedRange)\n const showClearButton = clearable && selectedRange?.from && !disabled && !readOnly\n\n // Combined date disabled check\n const isDateDisabled = React.useCallback(\n (date: Date): boolean => {\n const normalizedDate = startOfDay(date)\n if (minDate && isBefore(normalizedDate, startOfDay(minDate))) return true\n if (maxDate && isAfter(normalizedDate, startOfDay(maxDate))) return true\n if (disabledDates?.(date)) return true\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Compute displayed month for calendar (controlled or derived from selection)\n const calendarMonth = month ?? displayRange?.from ?? minDate\n\n // Resolve preset labels for the active locale (DES-1263 — locale-driven, not hardcoded)\n const localizedPresets = presets.map((preset) => ({\n ...preset,\n label: resolvePresetLabel(preset, locale?.code),\n }))\n\n // Shared calendar content for both popover and modal modes\n const calendarContent = (\n <div className=\"flex flex-col sm:flex-row\">\n {showPresets && presets.length > 0 && (\n <DateRangePresets\n presets={localizedPresets}\n selectedPreset={selectedPreset}\n onSelect={handlePresetSelect}\n />\n )}\n <div className=\"flex flex-col\">\n {showTodayButton && (\n <div className=\"flex justify-end border-b px-3 py-2\" data-slot=\"date-range-picker-header\">\n <Button\n className=\"h-[var(--date-range-picker-today-button-height)] text-[length:var(--date-range-picker-today-button-text-size)]\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleTodayClick}\n >\n Today\n </Button>\n </div>\n )}\n <Calendar\n autoFocus\n activeDates={activeDates}\n className=\"gap-[var(--date-range-picker-calendar-gap)]\"\n disabled={isDateDisabled}\n locale={locale}\n mode=\"range\"\n month={calendarMonth}\n numberOfMonths={numberOfMonths}\n selected={displayRange}\n onMonthChange={setMonth}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n {...calendarProps}\n />\n {requireConfirmation && (\n <div className={cn(dateRangePickerFooterVariants())} data-slot=\"date-range-picker-footer\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n disabled={!pendingRange?.from}\n size=\"sm\"\n variant=\"primary\"\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n\n // Trigger button shared between modes\n const triggerButton = (\n <button\n ref={ref}\n className={cn(\n dateRangePickerTriggerVariants({ size, variant }),\n !displayValue && \"text-muted-foreground\"\n )}\n aria-describedby={ariaDescribedby}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={readOnly}\n aria-required={required}\n data-readonly={readOnly || undefined}\n data-size={size}\n data-slot=\"date-range-picker-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={variant}\n disabled={disabled}\n id={id}\n role=\"combobox\"\n type=\"button\"\n onClick={displayMode === \"modal\" ? () => { handleOpenChange(true); } : undefined}\n >\n <span className=\"flex-1 truncate\">\n {displayValue ?? placeholder}\n </span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {showClearButton && (\n <span\n aria-label=\"Clear date range\"\n className=\"rounded-sm opacity-50 hover:opacity-100 focus:outline-none\"\n data-slot=\"date-range-picker-clear\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n handleClear(e as unknown as React.MouseEvent)\n }\n }}\n >\n <XIcon className=\"size-4\" />\n </span>\n )}\n <CalendarIcon className=\"size-4 opacity-50\" />\n </span>\n </button>\n )\n\n // Hidden inputs for form submission\n const hiddenInputs = (\n <>\n {name && (\n <input\n name={`${name}-from`}\n type=\"hidden\"\n value={selectedRange?.from?.toISOString() ?? \"\"}\n />\n )}\n {name && (\n <input\n name={`${name}-to`}\n type=\"hidden\"\n value={selectedRange?.to?.toISOString() ?? \"\"}\n />\n )}\n </>\n )\n\n // Modal mode\n if (displayMode === \"modal\") {\n return (\n <div className={cn(\"relative\", className)} data-mode=\"modal\" data-slot=\"date-range-picker\" {...props}>\n {triggerButton}\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n className=\"max-w-fit p-0\"\n data-slot=\"date-range-picker-content\"\n >\n <DialogHeader className=\"border-b px-4 py-3\">\n <DialogTitle>{modalTitle}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Use the calendar to select a start and end date for your range\n </DialogDescription>\n </DialogHeader>\n <div className=\"p-0\">\n {calendarContent}\n </div>\n </DialogContent>\n </Dialog>\n {hiddenInputs}\n </div>\n )\n }\n\n // Popover mode (default)\n return (\n <div className={cn(\"relative\", className)} data-mode=\"popover\" data-slot=\"date-range-picker\" {...props}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n {triggerButton}\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-auto p-0\"\n data-slot=\"date-range-picker-content\"\n >\n {calendarContent}\n </PopoverContent>\n </Popover>\n {hiddenInputs}\n </div>\n )\n}\n\nexport { DateRangePicker }\n","import type { DateRangeInputProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isValid, parse } from \"date-fns\"\nimport { ArrowRightIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangeInputContainerVariants,\n dateRangeInputFieldVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangeInput component provides editable text inputs for date range entry\n */\nfunction DateRangeInput({\n value,\n format,\n locale,\n onChange,\n disabled = false,\n readOnly = false,\n startPlaceholder = \"Start date\",\n endPlaceholder = \"End date\",\n}: DateRangeInputProps) {\n const [startInput, setStartInput] = React.useState(\"\")\n const [endInput, setEndInput] = React.useState(\"\")\n\n // Sync input values with prop value\n /* eslint-disable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- Intentional: controlled input sync requires useEffect to maintain input state separate from date state for partial input handling */\n React.useEffect(() => {\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }, [value, format, locale])\n /* eslint-enable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n const parseDate = (input: string): Date | undefined => {\n if (!input.trim()) return undefined\n try {\n const parsed = parse(input, format, new Date(), locale ? { locale } : undefined)\n return isValid(parsed) ? parsed : undefined\n } catch {\n return undefined\n }\n }\n\n const handleStartBlur = () => {\n const parsedStart = parseDate(startInput)\n const currentEnd = value?.to\n\n if (parsedStart || !startInput.trim()) {\n onChange({\n from: parsedStart,\n to: currentEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n }\n }\n\n const handleEndBlur = () => {\n const parsedEnd = parseDate(endInput)\n const currentStart = value?.from\n\n if (parsedEnd || !endInput.trim()) {\n onChange({\n from: currentStart,\n to: parsedEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }\n }\n\n const handleStartKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleStartBlur()\n }\n }\n\n const handleEndKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleEndBlur()\n }\n }\n\n return (\n <div\n className={cn(dateRangeInputContainerVariants())}\n data-slot=\"date-range-input\"\n >\n <input\n aria-label=\"Start date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-start\"\n disabled={disabled}\n placeholder={startPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={startInput}\n onBlur={handleStartBlur}\n onChange={(e) => { setStartInput(e.target.value); }}\n onKeyDown={handleStartKeyDown}\n />\n <ArrowRightIcon aria-hidden=\"true\" className=\"size-4 text-muted-foreground shrink-0\" />\n <input\n aria-label=\"End date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-end\"\n disabled={disabled}\n placeholder={endPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={endInput}\n onBlur={handleEndBlur}\n onChange={(e) => { setEndInput(e.target.value); }}\n onKeyDown={handleEndKeyDown}\n />\n </div>\n )\n}\n\nexport { DateRangeInput }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/forms/DateRangePicker/DateRangePicker.variants.ts","../src/components/forms/DateRangePicker/DateRangePresets.tsx","../src/components/forms/DateRangePicker/presets.ts","../src/components/forms/DateRangePicker/DateRangePicker.tsx","../src/components/forms/DateRangePicker/DateRangeInput.tsx"],"names":["format","startOfMonth","formatDate","startOfDay","jsx","React2","jsxs"],"mappings":"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","file":"chunk-H4KC2YSL.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DateRangePicker trigger variant styles using CVA\n */\nexport const dateRangePickerTriggerVariants = cva(\n // Base styles\n [\n \"inline-flex w-full items-center justify-between gap-2 rounded-[var(--date-picker-trigger-radius)] border bg-transparent font-normal transition-[color,box-shadow] outline-none\",\n \"text-left\",\n \"placeholder:text-muted-foreground\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"data-[state=open]:border-ring data-[state=open]:ring-ring/50 data-[state=open]:ring-[3px]\",\n \"min-w-[var(--date-range-picker-trigger-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--date-picker-trigger-height-sm)] px-[var(--date-picker-trigger-padding-x-sm)] py-[var(--date-picker-trigger-padding-y-sm)] text-[length:var(--date-picker-trigger-text-sm)]\",\n md: \"h-[var(--date-picker-trigger-height-md)] px-[var(--date-picker-trigger-padding-x-md)] py-[var(--date-picker-trigger-padding-y-md)] text-[length:var(--date-picker-trigger-text-md)]\",\n lg: \"h-[var(--date-picker-trigger-height-lg)] px-[var(--date-picker-trigger-padding-x-lg)] py-[var(--date-picker-trigger-padding-y-lg)] text-[length:var(--date-picker-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs dark:bg-input/30\",\n outline: \"border-input bg-transparent\",\n ghost: \"border-transparent hover:bg-accent\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\nexport type DateRangePickerTriggerVariantProps = VariantProps<typeof dateRangePickerTriggerVariants>\n\n/**\n * Preset item styles - horizontal scrollable tabs on mobile, vertical list on desktop\n */\nexport const dateRangePresetVariants = cva(\n [\n // Base - works for both orientations\n \"text-sm rounded-md transition-colors whitespace-nowrap\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[selected=true]:bg-primary/10 data-[selected=true]:text-primary data-[selected=true]:font-medium\",\n // Mobile: pill-like compact tabs\n \"px-3 py-1.5 flex-shrink-0\",\n // Desktop (sm+): full-width list items\n \"sm:w-full sm:text-left sm:py-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\nexport type DateRangePresetVariantProps = VariantProps<typeof dateRangePresetVariants>\n\n/**\n * Presets container styles - horizontal scrollable on mobile, vertical sidebar on desktop\n */\nexport const dateRangePresetsContainerVariants = cva(\n [\n // Mobile: horizontal scrollable tabs\n \"flex flex-row gap-1 p-2 overflow-x-auto\",\n \"border-b border-border\",\n \"-webkit-overflow-scrolling-touch scrollbar-hide\",\n // Desktop (sm+): vertical sidebar\n \"sm:flex-col sm:overflow-x-visible sm:border-b-0 sm:border-r\",\n \"sm:min-w-[var(--date-picker-preset-min-width)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Footer container styles (for Apply/Cancel buttons)\n */\nexport const dateRangePickerFooterVariants = cva(\n [\n \"flex items-center justify-end gap-2 border-t border-border\",\n \"p-[var(--date-picker-footer-padding)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input container styles\n */\nexport const dateRangeInputContainerVariants = cva(\n [\n \"flex items-center gap-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input field styles\n */\nexport const dateRangeInputFieldVariants = cva(\n [\n \"flex-1 min-w-0 rounded-md border border-input bg-transparent px-2 py-1 text-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-9 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type DateRangeInputFieldVariantProps = VariantProps<typeof dateRangeInputFieldVariants>\n","import type { DateRangePresetsProps } from \"./DateRangePicker.types\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangePresetsContainerVariants,\n dateRangePresetVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangePresets component displays a list of quick-select preset date ranges\n */\nfunction DateRangePresets({\n presets,\n selectedPreset,\n onSelect,\n}: DateRangePresetsProps) {\n return (\n <div\n aria-label=\"Date range presets\"\n className={cn(dateRangePresetsContainerVariants())}\n data-slot=\"date-range-presets\"\n role=\"listbox\"\n >\n {presets.map((preset) => {\n const isSelected = selectedPreset === preset.label\n return (\n <button\n key={preset.label}\n aria-selected={isSelected}\n className={cn(dateRangePresetVariants())}\n data-selected={isSelected || undefined}\n role=\"option\"\n type=\"button\"\n onClick={() => { onSelect(preset.getValue(), preset.label); }}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport { DateRangePresets }\n","import type { DateRangePreset } from \"./DateRangePicker.types\"\n\nimport {\n endOfDay,\n endOfMonth,\n endOfWeek,\n endOfYear,\n startOfDay,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subDays,\n subMonths,\n subYears,\n} from \"date-fns\"\n\n/**\n * Default preset options for quick date range selection.\n *\n * Each preset carries a canonical `key`; the visible label is resolved per locale via\n * {@link resolvePresetLabel} (DES-1263 — locale-driven, not hardcoded). The English `label`\n * here is the fallback. `custom` (pt: \"Fixo\") clears the range for manual selection.\n */\nexport const defaultPresets: DateRangePreset[] = [\n {\n key: \"today\",\n label: \"Today\",\n getValue: () => {\n const today = startOfDay(new Date())\n return { from: today, to: endOfDay(today) }\n },\n },\n {\n key: \"yesterday\",\n label: \"Yesterday\",\n getValue: () => {\n const yesterday = subDays(new Date(), 1)\n return { from: startOfDay(yesterday), to: endOfDay(yesterday) }\n },\n },\n {\n key: \"thisWeek\",\n label: \"This week\",\n getValue: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 0 }),\n to: endOfWeek(new Date(), { weekStartsOn: 0 }),\n }),\n },\n {\n key: \"last7Days\",\n label: \"Last 7 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 6)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last14Days\",\n label: \"Last 14 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 13)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last30Days\",\n label: \"Last 30 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 29)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"thisMonth\",\n label: \"This month\",\n getValue: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n key: \"lastMonth\",\n label: \"Last month\",\n getValue: () => {\n const lastMonth = subMonths(new Date(), 1)\n return {\n from: startOfMonth(lastMonth),\n to: endOfMonth(lastMonth),\n }\n },\n },\n {\n key: \"thisYear\",\n label: \"This year\",\n getValue: () => ({\n from: startOfYear(new Date()),\n to: endOfYear(new Date()),\n }),\n },\n {\n key: \"lastYear\",\n label: \"Last year\",\n getValue: () => {\n const lastYear = subYears(new Date(), 1)\n return {\n from: startOfYear(lastYear),\n to: endOfYear(lastYear),\n }\n },\n },\n {\n key: \"allTime\",\n label: \"All time\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n {\n key: \"custom\",\n label: \"Custom\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n]\n\n/**\n * Preset label translations (DES-1263). Keyed by language code (locale.code split on \"-\").\n * English labels live on the presets themselves and act as the fallback.\n */\nconst presetLabels: Record<string, Record<string, string>> = {\n pt: {\n today: \"Hoje\",\n yesterday: \"Ontem\",\n thisWeek: \"Esta semana\",\n last7Days: \"Últimos 7 dias\",\n last14Days: \"Últimos 14 dias\",\n last30Days: \"Últimos 30 dias\",\n thisMonth: \"Este mês\",\n lastMonth: \"Mês passado\",\n thisYear: \"Este ano\",\n lastYear: \"Ano passado\",\n allTime: \"Todo o período\",\n custom: \"Fixo\",\n },\n}\n\n/**\n * Resolves a preset's display label for the given locale code (e.g. \"pt-BR\").\n * Falls back to the preset's own English `label` when no translation exists.\n */\nexport function resolvePresetLabel(preset: DateRangePreset, localeCode?: string): string {\n const lang = localeCode?.split(\"-\")[0]\n const translated = lang && preset.key ? presetLabels[lang]?.[preset.key] : undefined\n return translated ?? preset.label\n}\n","import type { DateRange } from \"../../advanced/Calendar\"\nimport type { DateRangePickerProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isAfter, isBefore, startOfDay, startOfMonth } from \"date-fns\"\nimport { CalendarIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Calendar } from \"../../advanced/Calendar\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../feedback/Dialog\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../feedback/Popover\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n dateRangePickerFooterVariants,\n dateRangePickerTriggerVariants,\n} from \"./DateRangePicker.variants\"\nimport { DateRangePresets } from \"./DateRangePresets\"\nimport { defaultPresets, resolvePresetLabel } from \"./presets\"\n\n/**\n * DateRangePicker component for selecting a date range with optional presets\n */\nfunction DateRangePicker({\n ref,\n className,\n value,\n defaultValue,\n placeholder = \"Select date range\",\n disabled = false,\n disabledDates,\n readOnly = false,\n minDate,\n maxDate,\n format = \"PP\",\n locale,\n onChange,\n onOpenChange,\n onClear,\n size = \"md\",\n variant = \"default\",\n displayMode = \"popover\",\n modalTitle = \"Select Date Range\",\n required = false,\n invalid = false,\n clearable = false,\n numberOfMonths = 2,\n presets = defaultPresets,\n showPresets = true,\n requireConfirmation = false,\n showTodayButton = true,\n activeDates,\n calendarProps,\n id,\n name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ...props\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [internalRange, setInternalRange] = React.useState<DateRange | undefined>(defaultValue)\n const [pendingRange, setPendingRange] = React.useState<DateRange | undefined>()\n const [selectedPreset, setSelectedPreset] = React.useState<string>()\n const [month, setMonth] = React.useState<Date | undefined>()\n\n // Use controlled value if provided, otherwise use internal state\n const selectedRange = value ?? internalRange\n\n // For confirmation mode, show pending changes until applied\n const displayRange = requireConfirmation && open ? (pendingRange ?? selectedRange) : selectedRange\n\n // Initialize pending range when opening in confirmation mode\n /* eslint-disable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n React.useEffect(() => {\n if (open && requireConfirmation) {\n setPendingRange(selectedRange)\n }\n }, [open, requireConfirmation, selectedRange])\n /* eslint-enable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n // Clear preset selection when manually selecting\n setSelectedPreset(undefined)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n }\n }\n\n const handlePresetSelect = (range: DateRange, label: string) => {\n setSelectedPreset(label)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n setOpen(false)\n }\n }\n\n const handleApply = () => {\n if (pendingRange) {\n if (value === undefined) {\n setInternalRange(pendingRange)\n }\n onChange?.(pendingRange)\n }\n setPendingRange(undefined)\n setOpen(false)\n }\n\n const handleCancel = () => {\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n setOpen(false)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n // Don't open if readOnly\n if (readOnly && isOpen) return\n\n if (!isOpen && requireConfirmation) {\n // Cancel pending changes when closing without applying\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n }\n\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) {\n setInternalRange(undefined)\n }\n onChange?.()\n setSelectedPreset(undefined)\n onClear?.()\n }\n\n const handleTodayClick = () => {\n setMonth(startOfMonth(new Date()))\n }\n\n // Format display value\n const formatRange = (range: DateRange | undefined): null | string => {\n if (!range?.from) return null\n\n const formatOptions = locale ? { locale } : undefined\n const formattedFrom = formatDate(range.from, format, formatOptions)\n\n if (!range.to) {\n return formattedFrom\n }\n\n const formattedTo = formatDate(range.to, format, formatOptions)\n return `${formattedFrom} - ${formattedTo}`\n }\n\n const displayValue = formatRange(selectedRange)\n const showClearButton = clearable && selectedRange?.from && !disabled && !readOnly\n\n // Combined date disabled check\n const isDateDisabled = React.useCallback(\n (date: Date): boolean => {\n const normalizedDate = startOfDay(date)\n if (minDate && isBefore(normalizedDate, startOfDay(minDate))) return true\n if (maxDate && isAfter(normalizedDate, startOfDay(maxDate))) return true\n if (disabledDates?.(date)) return true\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Compute displayed month for calendar (controlled or derived from selection)\n const calendarMonth = month ?? displayRange?.from ?? minDate\n\n // Resolve preset labels for the active locale (DES-1263 — locale-driven, not hardcoded)\n const localizedPresets = presets.map((preset) => ({\n ...preset,\n label: resolvePresetLabel(preset, locale?.code),\n }))\n\n // Shared calendar content for both popover and modal modes\n const calendarContent = (\n <div className=\"flex flex-col sm:flex-row\">\n {showPresets && presets.length > 0 && (\n <DateRangePresets\n presets={localizedPresets}\n selectedPreset={selectedPreset}\n onSelect={handlePresetSelect}\n />\n )}\n <div className=\"flex flex-col\">\n {showTodayButton && (\n <div className=\"flex justify-end border-b px-3 py-2\" data-slot=\"date-range-picker-header\">\n <Button\n className=\"h-[var(--date-range-picker-today-button-height)] text-[length:var(--date-range-picker-today-button-text-size)]\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleTodayClick}\n >\n Today\n </Button>\n </div>\n )}\n <Calendar\n autoFocus\n activeDates={activeDates}\n className=\"gap-[var(--date-range-picker-calendar-gap)]\"\n disabled={isDateDisabled}\n locale={locale}\n mode=\"range\"\n month={calendarMonth}\n numberOfMonths={numberOfMonths}\n selected={displayRange}\n onMonthChange={setMonth}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n {...calendarProps}\n />\n {requireConfirmation && (\n <div className={cn(dateRangePickerFooterVariants())} data-slot=\"date-range-picker-footer\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n disabled={!pendingRange?.from}\n size=\"sm\"\n variant=\"primary\"\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n\n // Trigger button shared between modes\n const triggerButton = (\n <button\n ref={ref}\n className={cn(\n dateRangePickerTriggerVariants({ size, variant }),\n !displayValue && \"text-muted-foreground\"\n )}\n aria-describedby={ariaDescribedby}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={readOnly}\n aria-required={required}\n data-readonly={readOnly || undefined}\n data-size={size}\n data-slot=\"date-range-picker-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={variant}\n disabled={disabled}\n id={id}\n role=\"combobox\"\n type=\"button\"\n onClick={displayMode === \"modal\" ? () => { handleOpenChange(true); } : undefined}\n >\n <span className=\"flex-1 truncate\">\n {displayValue ?? placeholder}\n </span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {showClearButton && (\n <span\n aria-label=\"Clear date range\"\n className=\"rounded-sm opacity-50 hover:opacity-100 focus:outline-none\"\n data-slot=\"date-range-picker-clear\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n handleClear(e as unknown as React.MouseEvent)\n }\n }}\n >\n <XIcon className=\"size-4\" />\n </span>\n )}\n <CalendarIcon className=\"size-4 opacity-50\" />\n </span>\n </button>\n )\n\n // Hidden inputs for form submission\n const hiddenInputs = (\n <>\n {name && (\n <input\n name={`${name}-from`}\n type=\"hidden\"\n value={selectedRange?.from?.toISOString() ?? \"\"}\n />\n )}\n {name && (\n <input\n name={`${name}-to`}\n type=\"hidden\"\n value={selectedRange?.to?.toISOString() ?? \"\"}\n />\n )}\n </>\n )\n\n // Modal mode\n if (displayMode === \"modal\") {\n return (\n <div className={cn(\"relative\", className)} data-mode=\"modal\" data-slot=\"date-range-picker\" {...props}>\n {triggerButton}\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n className=\"max-w-fit p-0\"\n data-slot=\"date-range-picker-content\"\n >\n <DialogHeader className=\"border-b px-4 py-3\">\n <DialogTitle>{modalTitle}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Use the calendar to select a start and end date for your range\n </DialogDescription>\n </DialogHeader>\n <div className=\"p-0\">\n {calendarContent}\n </div>\n </DialogContent>\n </Dialog>\n {hiddenInputs}\n </div>\n )\n }\n\n // Popover mode (default)\n return (\n <div className={cn(\"relative\", className)} data-mode=\"popover\" data-slot=\"date-range-picker\" {...props}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n {triggerButton}\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-auto p-0\"\n data-slot=\"date-range-picker-content\"\n >\n {calendarContent}\n </PopoverContent>\n </Popover>\n {hiddenInputs}\n </div>\n )\n}\n\nexport { DateRangePicker }\n","import type { DateRangeInputProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isValid, parse } from \"date-fns\"\nimport { ArrowRightIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangeInputContainerVariants,\n dateRangeInputFieldVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangeInput component provides editable text inputs for date range entry\n */\nfunction DateRangeInput({\n value,\n format,\n locale,\n onChange,\n disabled = false,\n readOnly = false,\n startPlaceholder = \"Start date\",\n endPlaceholder = \"End date\",\n}: DateRangeInputProps) {\n const [startInput, setStartInput] = React.useState(\"\")\n const [endInput, setEndInput] = React.useState(\"\")\n\n // Sync input values with prop value\n /* eslint-disable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- Intentional: controlled input sync requires useEffect to maintain input state separate from date state for partial input handling */\n React.useEffect(() => {\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }, [value, format, locale])\n /* eslint-enable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n const parseDate = (input: string): Date | undefined => {\n if (!input.trim()) return undefined\n try {\n const parsed = parse(input, format, new Date(), locale ? { locale } : undefined)\n return isValid(parsed) ? parsed : undefined\n } catch {\n return undefined\n }\n }\n\n const handleStartBlur = () => {\n const parsedStart = parseDate(startInput)\n const currentEnd = value?.to\n\n if (parsedStart || !startInput.trim()) {\n onChange({\n from: parsedStart,\n to: currentEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n }\n }\n\n const handleEndBlur = () => {\n const parsedEnd = parseDate(endInput)\n const currentStart = value?.from\n\n if (parsedEnd || !endInput.trim()) {\n onChange({\n from: currentStart,\n to: parsedEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }\n }\n\n const handleStartKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleStartBlur()\n }\n }\n\n const handleEndKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleEndBlur()\n }\n }\n\n return (\n <div\n className={cn(dateRangeInputContainerVariants())}\n data-slot=\"date-range-input\"\n >\n <input\n aria-label=\"Start date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-start\"\n disabled={disabled}\n placeholder={startPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={startInput}\n onBlur={handleStartBlur}\n onChange={(e) => { setStartInput(e.target.value); }}\n onKeyDown={handleStartKeyDown}\n />\n <ArrowRightIcon aria-hidden=\"true\" className=\"size-4 text-muted-foreground shrink-0\" />\n <input\n aria-label=\"End date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-end\"\n disabled={disabled}\n placeholder={endPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={endInput}\n onBlur={handleEndBlur}\n onChange={(e) => { setEndInput(e.target.value); }}\n onKeyDown={handleEndKeyDown}\n />\n </div>\n )\n}\n\nexport { DateRangeInput }\n"]}
|
|
@@ -38,6 +38,7 @@ function KPICard({
|
|
|
38
38
|
deltaLabel,
|
|
39
39
|
trend,
|
|
40
40
|
sparkline,
|
|
41
|
+
chartType = "bar",
|
|
41
42
|
icon,
|
|
42
43
|
featuredIcon,
|
|
43
44
|
dropdownIcon,
|
|
@@ -57,6 +58,7 @@ function KPICard({
|
|
|
57
58
|
const trendColor = trendColors[computedTrend];
|
|
58
59
|
const sizeStyles = sizeConfig[size];
|
|
59
60
|
const sparklineColor = computedTrend === "up" ? "var(--kpi-card-sparkline-up)" : computedTrend === "down" ? "var(--kpi-card-sparkline-down)" : "var(--kpi-card-sparkline-neutral)";
|
|
61
|
+
const chartSlots = getKpiChartSlots(chartType, sparklineColor, sparkline);
|
|
60
62
|
const variantStyles = {
|
|
61
63
|
default: "",
|
|
62
64
|
ghost: "border-none shadow-none bg-transparent",
|
|
@@ -165,20 +167,9 @@ function KPICard({
|
|
|
165
167
|
}
|
|
166
168
|
)
|
|
167
169
|
] }),
|
|
168
|
-
|
|
169
|
-
Sparkline,
|
|
170
|
-
{
|
|
171
|
-
"aria-hidden": "true",
|
|
172
|
-
color: sparklineColor,
|
|
173
|
-
data: sparkline,
|
|
174
|
-
"data-slot": "kpi-card-sparkline",
|
|
175
|
-
height: 32,
|
|
176
|
-
style: { opacity: "var(--kpi-card-sparkline-opacity)" },
|
|
177
|
-
variant: "bar",
|
|
178
|
-
width: 96
|
|
179
|
-
}
|
|
180
|
-
)
|
|
170
|
+
chartSlots.compact
|
|
181
171
|
] }),
|
|
172
|
+
chartSlots.wide,
|
|
182
173
|
progressBar !== void 0 && /* @__PURE__ */ jsx("div", { className: "mt-3", "data-slot": "kpi-card-progress", children: typeof progressBar === "number" ? /* @__PURE__ */ jsx(ProgressBar, { value: progressBar }) : progressBar })
|
|
183
174
|
] }),
|
|
184
175
|
/* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
@@ -220,7 +211,56 @@ function KPICardGroup({
|
|
|
220
211
|
}
|
|
221
212
|
);
|
|
222
213
|
}
|
|
214
|
+
function getKpiChartSlots(chartType, color, sparkline) {
|
|
215
|
+
if (!sparkline || sparkline.length === 0) {
|
|
216
|
+
return { compact: null, wide: null };
|
|
217
|
+
}
|
|
218
|
+
if (chartType === "area-wide") {
|
|
219
|
+
return { compact: null, wide: /* @__PURE__ */ jsx(KpiWideChart, { color, data: sparkline }) };
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
compact: /* @__PURE__ */ jsx(KpiCompactChart, { chartType, color, data: sparkline }),
|
|
223
|
+
wide: null
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function KpiCompactChart({
|
|
227
|
+
chartType,
|
|
228
|
+
color,
|
|
229
|
+
data
|
|
230
|
+
}) {
|
|
231
|
+
const variant = chartType === "area" || chartType === "area-wide" ? "area" : chartType;
|
|
232
|
+
return /* @__PURE__ */ jsx(
|
|
233
|
+
Sparkline,
|
|
234
|
+
{
|
|
235
|
+
"aria-hidden": "true",
|
|
236
|
+
color,
|
|
237
|
+
data,
|
|
238
|
+
"data-slot": "kpi-card-sparkline",
|
|
239
|
+
fill: variant === "area" ? "gradient" : "none",
|
|
240
|
+
height: 32,
|
|
241
|
+
style: { opacity: "var(--kpi-card-sparkline-opacity)" },
|
|
242
|
+
variant,
|
|
243
|
+
width: 96
|
|
244
|
+
}
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
function KpiWideChart({ color, data }) {
|
|
248
|
+
return /* @__PURE__ */ jsx("div", { className: "mt-3", "data-slot": "kpi-card-chart-wide", children: /* @__PURE__ */ jsx(
|
|
249
|
+
Sparkline,
|
|
250
|
+
{
|
|
251
|
+
"aria-hidden": "true",
|
|
252
|
+
className: "h-16 w-full",
|
|
253
|
+
color,
|
|
254
|
+
data,
|
|
255
|
+
fill: "gradient",
|
|
256
|
+
height: 64,
|
|
257
|
+
style: { opacity: "var(--kpi-card-sparkline-opacity)" },
|
|
258
|
+
variant: "area",
|
|
259
|
+
width: 356
|
|
260
|
+
}
|
|
261
|
+
) });
|
|
262
|
+
}
|
|
223
263
|
|
|
224
264
|
export { KPICard, KPICardGroup };
|
|
225
|
-
//# sourceMappingURL=chunk-
|
|
226
|
-
//# sourceMappingURL=chunk-
|
|
265
|
+
//# sourceMappingURL=chunk-IARO2PPN.js.map
|
|
266
|
+
//# sourceMappingURL=chunk-IARO2PPN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/KPICard/KPICard.tsx"],"names":[],"mappings":"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","file":"chunk-IARO2PPN.js","sourcesContent":["import type {\n KPICardGroupProps,\n KPICardProps,\n KPICardTrend,\n} from \"./KPICard.types\"\n\nimport { ArrowDown, ArrowUp, Minus } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"../../layout/Card\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { ProgressBar } from \"../../primitives/ProgressBar\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport { Sparkline } from \"../Sparkline\"\n\n/**\n * Size configuration for typography\n */\nconst sizeConfig = {\n sm: {\n value: \"text-[length:var(--kpi-card-value-size-sm)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-4\",\n },\n md: {\n value: \"text-[length:var(--kpi-card-value-size-md)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n lg: {\n value: \"text-[length:var(--kpi-card-value-size-lg)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n} as const\n\n/**\n * Trend icons mapping\n */\nconst TrendIcons = {\n up: ArrowUp,\n down: ArrowDown,\n neutral: Minus,\n} as const\n\n/**\n * Trend colors mapping using design tokens\n */\nconst trendColors = {\n up: \"text-success\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n} as const\n\n/**\n * KPICard - Key Performance Indicator Card\n *\n * Dashboard component that displays important metrics prominently.\n * Combines main value, comparison/delta, mini chart, and contextual metadata\n * in a layout optimized for quick visualization.\n *\n * @example\n * ```tsx\n * <KPICard\n * title=\"Revenue\"\n * value=\"$45,231.89\"\n * delta={20.1}\n * deltaLabel=\"from last month\"\n * />\n * ```\n */\nfunction KPICard({\n title,\n value,\n delta,\n deltaLabel,\n trend,\n sparkline,\n chartType = \"bar\",\n icon,\n featuredIcon,\n dropdownIcon,\n helpText,\n progressBar,\n swap,\n showBadge = true,\n action,\n variant = \"default\",\n size = \"md\",\n loading = false,\n className,\n ...props\n}: KPICardProps) {\n // Auto-detect trend direction if not provided\n const computedTrend: KPICardTrend = trend ?? (delta !== undefined\n ? delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"neutral\"\n : \"neutral\")\n\n const TrendIcon = TrendIcons[computedTrend]\n const trendColor = trendColors[computedTrend]\n const sizeStyles = sizeConfig[size]\n const sparklineColor =\n computedTrend === \"up\"\n ? \"var(--kpi-card-sparkline-up)\"\n : computedTrend === \"down\"\n ? \"var(--kpi-card-sparkline-down)\"\n : \"var(--kpi-card-sparkline-neutral)\"\n\n const chartSlots = getKpiChartSlots(chartType, sparklineColor, sparkline)\n\n // Variant styles\n const variantStyles = {\n default: \"\",\n ghost: \"border-none shadow-none bg-transparent\",\n highlight: \"border-primary/50 bg-primary/5\",\n }\n\n if (loading) {\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <SkeletonLoader className=\"h-4 w-24\" />\n <SkeletonLoader className=\"size-4\" />\n </CardHeader>\n <CardContent>\n <SkeletonLoader className=\"mb-2 h-8 w-32\" />\n <SkeletonLoader className=\"h-4 w-20\" />\n </CardContent>\n </Card>\n )\n }\n\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <div className=\"flex items-center gap-1.5\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </CardTitle>\n {helpText && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-slot=\"kpi-card-help-text\"\n >\n {helpText}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {featuredIcon && (\n <span\n className=\"inline-flex size-10 items-center justify-center rounded-full bg-primary/10 text-primary [&_svg]:size-5\"\n data-slot=\"kpi-card-featured-icon\"\n >\n {featuredIcon}\n </span>\n )}\n {icon && !featuredIcon && (\n <span className=\"text-muted-foreground\" data-slot=\"kpi-card-icon\">\n {icon}\n </span>\n )}\n {dropdownIcon && (\n <span\n className=\"text-muted-foreground\"\n data-slot=\"kpi-card-dropdown-icon\"\n >\n {dropdownIcon}\n </span>\n )}\n {action && !icon && !featuredIcon && !dropdownIcon && (\n <span data-slot=\"kpi-card-action\">{action}</span>\n )}\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-end justify-between\">\n <div>\n <div\n className={cn(sizeStyles.value, \"tabular-nums\")}\n data-slot=\"kpi-card-value\"\n >\n {value}\n </div>\n {delta !== undefined && (\n <div\n className={cn(\"mt-1 flex items-center gap-2\", trendColor)}\n data-slot=\"kpi-card-delta\"\n data-trend={computedTrend}\n >\n {showBadge ? (\n <Badge\n color={\n computedTrend === \"up\"\n ? \"success\"\n : computedTrend === \"down\"\n ? \"destructive\"\n : \"muted\"\n }\n leadingIcon={<TrendIcon aria-hidden=\"true\" />}\n size=\"sm\"\n type=\"pill-color\"\n >\n {Math.abs(delta)}%\n </Badge>\n ) : (\n <span className={cn(\"flex items-center text-xs\", trendColor)}>\n <TrendIcon aria-hidden=\"true\" className=\"mr-1 size-3\" />\n <span className=\"font-medium\">{Math.abs(delta)}%</span>\n </span>\n )}\n {deltaLabel && (\n <span className=\"text-xs text-muted-foreground\">\n {deltaLabel}\n </span>\n )}\n {swap && (\n <span className=\"ml-auto\" data-slot=\"kpi-card-swap\">\n {swap}\n </span>\n )}\n </div>\n )}\n </div>\n {chartSlots.compact}\n </div>\n {chartSlots.wide}\n {progressBar !== undefined && (\n <div className=\"mt-3\" data-slot=\"kpi-card-progress\">\n {typeof progressBar === \"number\" ? (\n <ProgressBar value={progressBar} />\n ) : (\n progressBar\n )}\n </div>\n )}\n </CardContent>\n {/* Screen reader summary */}\n <span className=\"sr-only\">\n {title}: {value}\n {delta !== undefined && `, ${computedTrend === \"up\" ? \"up\" : computedTrend === \"down\" ? \"down\" : \"unchanged\"} ${String(Math.abs(delta))}%`}\n {deltaLabel && ` ${deltaLabel}`}\n </span>\n </Card>\n )\n}\n\n/**\n * KPICardGroup — Multiple KPIs composition (Figma Type=Multiple KPIs)\n *\n * Wrapper que diagramra múltiplos `KPICard` em layout horizontal ou vertical.\n *\n * @example\n * ```tsx\n * <KPICardGroup orientation=\"horizontal\" gap=\"md\">\n * <KPICard title=\"Revenue\" value=\"$45k\" delta={12} />\n * <KPICard title=\"Orders\" value={1240} delta={-3} />\n * <KPICard title=\"Users\" value={892} delta={8} />\n * </KPICardGroup>\n * ```\n */\nfunction KPICardGroup({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n className,\n ...props\n}: KPICardGroupProps) {\n const gapClasses = {\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n } as const\n\n return (\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\"\n ? \"flex-row [&>*]:flex-1\"\n : \"flex-col\",\n gapClasses[gap],\n className\n )}\n data-orientation={orientation}\n data-slot=\"kpi-card-group\"\n {...props}\n >\n {children}\n </div>\n )\n}\n\n// Decide os slots de gráfico do card (Figma Chart 01/02/03) fora do\n// componente principal — mantém o KPICard abaixo do limite de complexidade\nfunction getKpiChartSlots(\n chartType: \"area\" | \"area-wide\" | \"bar\" | \"line\",\n color: string,\n sparkline?: number[]\n): { compact: React.ReactNode; wide: React.ReactNode } {\n if (!sparkline || sparkline.length === 0) {\n return { compact: null, wide: null }\n }\n if (chartType === \"area-wide\") {\n return { compact: null, wide: <KpiWideChart color={color} data={sparkline} /> }\n }\n return {\n compact: <KpiCompactChart chartType={chartType} color={color} data={sparkline} />,\n wide: null,\n }\n}\n\n// Figma Chart 01/02 (1138:9740): line/área compactas no slot do sparkline\nfunction KpiCompactChart({\n chartType,\n color,\n data,\n}: {\n chartType: \"area\" | \"area-wide\" | \"bar\" | \"line\"\n color: string\n data: number[]\n}) {\n const variant = chartType === \"area\" || chartType === \"area-wide\" ? \"area\" : chartType\n return (\n <Sparkline\n aria-hidden=\"true\"\n color={color}\n data={data}\n data-slot=\"kpi-card-sparkline\"\n fill={variant === \"area\" ? \"gradient\" : \"none\"}\n height={32}\n style={{ opacity: \"var(--kpi-card-sparkline-opacity)\" }}\n variant={variant}\n width={96}\n />\n )\n}\n\n// Figma Chart 03 (1138:9789): área full-width abaixo do bloco principal\nfunction KpiWideChart({ color, data }: { color: string; data: number[] }) {\n return (\n <div className=\"mt-3\" data-slot=\"kpi-card-chart-wide\">\n <Sparkline\n aria-hidden=\"true\"\n className=\"h-16 w-full\"\n color={color}\n data={data}\n fill=\"gradient\"\n height={64}\n style={{ opacity: \"var(--kpi-card-sparkline-opacity)\" }}\n variant=\"area\"\n width={356}\n />\n </div>\n )\n}\n\nexport { KPICard, KPICardGroup }\n"]}
|
|
@@ -19,26 +19,48 @@ var buttonGroupVariants = cva(
|
|
|
19
19
|
primary: "border border-[color:var(--button-group-root-border-color-primary)] bg-[color:var(--button-group-root-bg-primary)] text-[color:var(--button-group-root-fg-primary)] rounded-[var(--button-group-root-radius)] shadow-[var(--button-group-root-shadow)] overflow-clip isolate [&>*:not(:first-child)]:rounded-none [&>*:first-child]:rounded-l-[var(--button-group-root-radius)] [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-r-[var(--button-group-root-radius)] [&>*:last-child]:rounded-l-none"
|
|
20
20
|
},
|
|
21
21
|
orientation: {
|
|
22
|
-
horizontal: "
|
|
23
|
-
vertical: "flex-col
|
|
22
|
+
horizontal: "",
|
|
23
|
+
vertical: "flex-col"
|
|
24
|
+
},
|
|
25
|
+
// Figma "Type" (1265:2984): Segmented = colado (fusão de bordas, o
|
|
26
|
+
// attached de hoje); Default = botões SOLTOS com gap de 4px e radius
|
|
27
|
+
// próprio ("detached"). O visual do style (Default/Primary) no
|
|
28
|
+
// detached vem dos próprios filhos (ex.: Button variant="primary")
|
|
29
|
+
type: {
|
|
30
|
+
attached: "",
|
|
31
|
+
detached: "gap-1"
|
|
24
32
|
}
|
|
25
33
|
},
|
|
26
34
|
compoundVariants: [
|
|
35
|
+
// Fusão de bordas/radius entre filhos — só no attached
|
|
36
|
+
{
|
|
37
|
+
orientation: "horizontal",
|
|
38
|
+
type: "attached",
|
|
39
|
+
className: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
orientation: "vertical",
|
|
43
|
+
type: "attached",
|
|
44
|
+
className: "[&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"
|
|
45
|
+
},
|
|
27
46
|
// Segmented variant removes default border handling (items have their own dividers)
|
|
28
47
|
{
|
|
29
48
|
variant: "segmented",
|
|
30
49
|
orientation: "horizontal",
|
|
50
|
+
type: "attached",
|
|
31
51
|
className: "[&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:border-r [&>*:not(:last-child)]:border-border"
|
|
32
52
|
},
|
|
33
53
|
{
|
|
34
54
|
variant: "segmented",
|
|
35
55
|
orientation: "vertical",
|
|
56
|
+
type: "attached",
|
|
36
57
|
className: "[&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:border-b [&>*:not(:last-child)]:border-border"
|
|
37
58
|
}
|
|
38
59
|
],
|
|
39
60
|
defaultVariants: {
|
|
40
61
|
variant: "default",
|
|
41
|
-
orientation: "horizontal"
|
|
62
|
+
orientation: "horizontal",
|
|
63
|
+
type: "attached"
|
|
42
64
|
}
|
|
43
65
|
}
|
|
44
66
|
);
|
|
@@ -88,6 +110,7 @@ function ButtonGroup({
|
|
|
88
110
|
className,
|
|
89
111
|
orientation,
|
|
90
112
|
variant,
|
|
113
|
+
type,
|
|
91
114
|
size,
|
|
92
115
|
buttonVariant,
|
|
93
116
|
disabled,
|
|
@@ -101,9 +124,10 @@ function ButtonGroup({
|
|
|
101
124
|
return /* @__PURE__ */ jsx(ButtonGroupContext, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
102
125
|
"div",
|
|
103
126
|
{
|
|
104
|
-
className: cn(buttonGroupVariants({ orientation, variant }), className),
|
|
127
|
+
className: cn(buttonGroupVariants({ orientation, variant, type }), className),
|
|
105
128
|
"data-orientation": orientation,
|
|
106
129
|
"data-slot": "button-group",
|
|
130
|
+
"data-type": type,
|
|
107
131
|
"data-variant": variant,
|
|
108
132
|
role: "group",
|
|
109
133
|
...props,
|
|
@@ -194,5 +218,5 @@ function ButtonGroupItem({
|
|
|
194
218
|
}
|
|
195
219
|
|
|
196
220
|
export { ButtonGroup, ButtonGroupContext, ButtonGroupItem, ButtonGroupSeparator, ButtonGroupText, buttonGroupItemVariants, buttonGroupVariants, useButtonGroup };
|
|
197
|
-
//# sourceMappingURL=chunk-
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
221
|
+
//# sourceMappingURL=chunk-JWXZFGNT.js.map
|
|
222
|
+
//# sourceMappingURL=chunk-JWXZFGNT.js.map
|