@tonyarbor/components 0.2.0 → 0.4.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/Avatar.d.mts +42 -0
- package/dist/Avatar.d.ts +42 -0
- package/dist/Avatar.js +158 -0
- package/dist/Avatar.js.map +1 -0
- package/dist/Avatar.mjs +7 -0
- package/dist/Avatar.mjs.map +1 -0
- package/dist/Banner.d.mts +59 -0
- package/dist/Banner.d.ts +59 -0
- package/dist/Banner.js +222 -0
- package/dist/Banner.js.map +1 -0
- package/dist/Banner.mjs +7 -0
- package/dist/Banner.mjs.map +1 -0
- package/dist/Breadcrumbs.d.mts +51 -0
- package/dist/Breadcrumbs.d.ts +51 -0
- package/dist/Breadcrumbs.js +276 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.mjs +7 -0
- package/dist/Breadcrumbs.mjs.map +1 -0
- package/dist/Checkbox.d.mts +4 -0
- package/dist/Checkbox.d.ts +4 -0
- package/dist/Checkbox.js +45 -16
- package/dist/Checkbox.js.map +1 -1
- package/dist/Checkbox.mjs +1 -1
- package/dist/DatePicker.d.mts +68 -0
- package/dist/DatePicker.d.ts +68 -0
- package/dist/DatePicker.js +490 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DatePicker.mjs +7 -0
- package/dist/DatePicker.mjs.map +1 -0
- package/dist/Pagination.d.mts +36 -0
- package/dist/Pagination.d.ts +36 -0
- package/dist/Pagination.js +301 -0
- package/dist/Pagination.js.map +1 -0
- package/dist/Pagination.mjs +7 -0
- package/dist/Pagination.mjs.map +1 -0
- package/dist/Radio.js +32 -12
- package/dist/Radio.js.map +1 -1
- package/dist/Radio.mjs +1 -1
- package/dist/SearchGlobal.d.mts +45 -0
- package/dist/SearchGlobal.d.ts +45 -0
- package/dist/SearchGlobal.js +209 -0
- package/dist/SearchGlobal.js.map +1 -0
- package/dist/SearchGlobal.mjs +7 -0
- package/dist/SearchGlobal.mjs.map +1 -0
- package/dist/SearchOnPage.d.mts +45 -0
- package/dist/SearchOnPage.d.ts +45 -0
- package/dist/SearchOnPage.js +171 -0
- package/dist/SearchOnPage.js.map +1 -0
- package/dist/SearchOnPage.mjs +7 -0
- package/dist/SearchOnPage.mjs.map +1 -0
- package/dist/Table.d.mts +80 -0
- package/dist/Table.d.ts +80 -0
- package/dist/Table.js +347 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.mjs +8 -0
- package/dist/Table.mjs.map +1 -0
- package/dist/TableControls.d.mts +76 -0
- package/dist/TableControls.d.ts +76 -0
- package/dist/TableControls.js +461 -0
- package/dist/TableControls.js.map +1 -0
- package/dist/TableControls.mjs +7 -0
- package/dist/TableControls.mjs.map +1 -0
- package/dist/TableFooterPagination.d.mts +56 -0
- package/dist/TableFooterPagination.d.ts +56 -0
- package/dist/TableFooterPagination.js +499 -0
- package/dist/TableFooterPagination.js.map +1 -0
- package/dist/TableFooterPagination.mjs +7 -0
- package/dist/TableFooterPagination.mjs.map +1 -0
- package/dist/Tabs.d.mts +50 -0
- package/dist/Tabs.d.ts +50 -0
- package/dist/Tabs.js +187 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.mjs +7 -0
- package/dist/Tabs.mjs.map +1 -0
- package/dist/TextArea.d.mts +64 -0
- package/dist/TextArea.d.ts +64 -0
- package/dist/TextArea.js +171 -0
- package/dist/TextArea.js.map +1 -0
- package/dist/TextArea.mjs +7 -0
- package/dist/TextArea.mjs.map +1 -0
- package/dist/Toast.d.mts +48 -0
- package/dist/Toast.d.ts +48 -0
- package/dist/Toast.js +169 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.mjs +7 -0
- package/dist/Toast.mjs.map +1 -0
- package/dist/Toggle.d.mts +48 -0
- package/dist/Toggle.d.ts +48 -0
- package/dist/Toggle.js +291 -0
- package/dist/Toggle.js.map +1 -0
- package/dist/Toggle.mjs +7 -0
- package/dist/Toggle.mjs.map +1 -0
- package/dist/Tooltip.d.mts +32 -0
- package/dist/Tooltip.d.ts +32 -0
- package/dist/Tooltip.js +109 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.mjs +7 -0
- package/dist/Tooltip.mjs.map +1 -0
- package/dist/chunk-52TG3BFX.mjs +463 -0
- package/dist/chunk-52TG3BFX.mjs.map +1 -0
- package/dist/chunk-AI2U34CF.mjs +159 -0
- package/dist/chunk-AI2U34CF.mjs.map +1 -0
- package/dist/chunk-B7RX3TPX.mjs +135 -0
- package/dist/chunk-B7RX3TPX.mjs.map +1 -0
- package/dist/chunk-C25FFMRQ.mjs +255 -0
- package/dist/chunk-C25FFMRQ.mjs.map +1 -0
- package/dist/{chunk-BCYJIUQX.mjs → chunk-CUTYEIFE.mjs} +47 -18
- package/dist/chunk-CUTYEIFE.mjs.map +1 -0
- package/dist/chunk-DULH2KRW.mjs +133 -0
- package/dist/chunk-DULH2KRW.mjs.map +1 -0
- package/dist/chunk-G5NVKF2G.mjs +434 -0
- package/dist/chunk-G5NVKF2G.mjs.map +1 -0
- package/dist/chunk-JSG27ZZS.mjs +122 -0
- package/dist/chunk-JSG27ZZS.mjs.map +1 -0
- package/dist/{chunk-ARBHNHO7.mjs → chunk-M6DVBEEL.mjs} +33 -13
- package/dist/chunk-M6DVBEEL.mjs.map +1 -0
- package/dist/chunk-MBUMR2XJ.mjs +135 -0
- package/dist/chunk-MBUMR2XJ.mjs.map +1 -0
- package/dist/chunk-MNH2TGUX.mjs +73 -0
- package/dist/chunk-MNH2TGUX.mjs.map +1 -0
- package/dist/chunk-RQP6ZGD7.mjs +240 -0
- package/dist/chunk-RQP6ZGD7.mjs.map +1 -0
- package/dist/chunk-RRMG2SSZ.mjs +265 -0
- package/dist/chunk-RRMG2SSZ.mjs.map +1 -0
- package/dist/chunk-U4JXKZZG.mjs +186 -0
- package/dist/chunk-U4JXKZZG.mjs.map +1 -0
- package/dist/chunk-UPBHDBAK.mjs +173 -0
- package/dist/chunk-UPBHDBAK.mjs.map +1 -0
- package/dist/chunk-W55QJIAN.mjs +467 -0
- package/dist/chunk-W55QJIAN.mjs.map +1 -0
- package/dist/chunk-YV4OXFIM.mjs +151 -0
- package/dist/chunk-YV4OXFIM.mjs.map +1 -0
- package/dist/index.d.mts +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +3414 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +63 -3
- package/package.json +78 -1
- package/dist/chunk-ARBHNHO7.mjs.map +0 -1
- package/dist/chunk-BCYJIUQX.mjs.map +0 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface DatePickerProps {
|
|
4
|
+
/**
|
|
5
|
+
* The selected date value
|
|
6
|
+
*/
|
|
7
|
+
value?: Date;
|
|
8
|
+
/**
|
|
9
|
+
* Callback when date changes
|
|
10
|
+
*/
|
|
11
|
+
onChange?: (date: Date | undefined) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Label for the input
|
|
14
|
+
*/
|
|
15
|
+
label?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Placeholder text
|
|
18
|
+
*/
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Helper text below the input
|
|
22
|
+
*/
|
|
23
|
+
helperText?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Error message
|
|
26
|
+
*/
|
|
27
|
+
error?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Success state
|
|
30
|
+
*/
|
|
31
|
+
state?: 'default' | 'success' | 'error';
|
|
32
|
+
/**
|
|
33
|
+
* Whether the input is disabled
|
|
34
|
+
*/
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Custom className
|
|
38
|
+
*/
|
|
39
|
+
className?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Custom style
|
|
42
|
+
*/
|
|
43
|
+
style?: React.CSSProperties;
|
|
44
|
+
/**
|
|
45
|
+
* Test ID for testing
|
|
46
|
+
*/
|
|
47
|
+
'data-testid'?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Minimum selectable date
|
|
50
|
+
*/
|
|
51
|
+
minDate?: Date;
|
|
52
|
+
/**
|
|
53
|
+
* Maximum selectable date
|
|
54
|
+
*/
|
|
55
|
+
maxDate?: Date;
|
|
56
|
+
/**
|
|
57
|
+
* Date format string (default: dd/MM/yyyy)
|
|
58
|
+
*/
|
|
59
|
+
dateFormat?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* DatePicker component - Arbor Design System
|
|
63
|
+
*
|
|
64
|
+
* A date picker with calendar popup for selecting dates.
|
|
65
|
+
*/
|
|
66
|
+
declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLInputElement>>;
|
|
67
|
+
|
|
68
|
+
export { DatePicker, type DatePickerProps };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface DatePickerProps {
|
|
4
|
+
/**
|
|
5
|
+
* The selected date value
|
|
6
|
+
*/
|
|
7
|
+
value?: Date;
|
|
8
|
+
/**
|
|
9
|
+
* Callback when date changes
|
|
10
|
+
*/
|
|
11
|
+
onChange?: (date: Date | undefined) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Label for the input
|
|
14
|
+
*/
|
|
15
|
+
label?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Placeholder text
|
|
18
|
+
*/
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Helper text below the input
|
|
22
|
+
*/
|
|
23
|
+
helperText?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Error message
|
|
26
|
+
*/
|
|
27
|
+
error?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Success state
|
|
30
|
+
*/
|
|
31
|
+
state?: 'default' | 'success' | 'error';
|
|
32
|
+
/**
|
|
33
|
+
* Whether the input is disabled
|
|
34
|
+
*/
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Custom className
|
|
38
|
+
*/
|
|
39
|
+
className?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Custom style
|
|
42
|
+
*/
|
|
43
|
+
style?: React.CSSProperties;
|
|
44
|
+
/**
|
|
45
|
+
* Test ID for testing
|
|
46
|
+
*/
|
|
47
|
+
'data-testid'?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Minimum selectable date
|
|
50
|
+
*/
|
|
51
|
+
minDate?: Date;
|
|
52
|
+
/**
|
|
53
|
+
* Maximum selectable date
|
|
54
|
+
*/
|
|
55
|
+
maxDate?: Date;
|
|
56
|
+
/**
|
|
57
|
+
* Date format string (default: dd/MM/yyyy)
|
|
58
|
+
*/
|
|
59
|
+
dateFormat?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* DatePicker component - Arbor Design System
|
|
63
|
+
*
|
|
64
|
+
* A date picker with calendar popup for selecting dates.
|
|
65
|
+
*/
|
|
66
|
+
declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLInputElement>>;
|
|
67
|
+
|
|
68
|
+
export { DatePicker, type DatePickerProps };
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/DatePicker/index.ts
|
|
31
|
+
var DatePicker_exports = {};
|
|
32
|
+
__export(DatePicker_exports, {
|
|
33
|
+
DatePicker: () => DatePicker
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(DatePicker_exports);
|
|
36
|
+
|
|
37
|
+
// src/DatePicker/DatePicker.tsx
|
|
38
|
+
var React = __toESM(require("react"));
|
|
39
|
+
var import_clsx = require("clsx");
|
|
40
|
+
var Popover = __toESM(require("@radix-ui/react-popover"));
|
|
41
|
+
var import_lucide_react = require("lucide-react");
|
|
42
|
+
var import_date_fns = require("date-fns");
|
|
43
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
44
|
+
var wrapperStyles = {
|
|
45
|
+
display: "flex",
|
|
46
|
+
flexDirection: "column",
|
|
47
|
+
gap: "4px"
|
|
48
|
+
};
|
|
49
|
+
var labelStyles = {
|
|
50
|
+
fontSize: "11px",
|
|
51
|
+
fontWeight: 600,
|
|
52
|
+
color: "#2f2f2f",
|
|
53
|
+
textTransform: "uppercase",
|
|
54
|
+
letterSpacing: "0.5px",
|
|
55
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
56
|
+
};
|
|
57
|
+
var inputContainerStyles = {
|
|
58
|
+
position: "relative",
|
|
59
|
+
display: "flex",
|
|
60
|
+
alignItems: "center"
|
|
61
|
+
};
|
|
62
|
+
var inputStyles = {
|
|
63
|
+
width: "100%",
|
|
64
|
+
height: "36px",
|
|
65
|
+
padding: "0 36px 0 12px",
|
|
66
|
+
fontSize: "13px",
|
|
67
|
+
border: "1px solid #d1d1d1",
|
|
68
|
+
borderRadius: "8px",
|
|
69
|
+
outline: "none",
|
|
70
|
+
transition: "all 0.2s ease-in-out",
|
|
71
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
72
|
+
backgroundColor: "#ffffff",
|
|
73
|
+
color: "#2f2f2f"
|
|
74
|
+
};
|
|
75
|
+
var iconButtonStyles = {
|
|
76
|
+
position: "absolute",
|
|
77
|
+
right: "8px",
|
|
78
|
+
display: "flex",
|
|
79
|
+
alignItems: "center",
|
|
80
|
+
justifyContent: "center",
|
|
81
|
+
padding: "4px",
|
|
82
|
+
cursor: "pointer",
|
|
83
|
+
color: "#595959",
|
|
84
|
+
backgroundColor: "transparent",
|
|
85
|
+
border: "none"
|
|
86
|
+
};
|
|
87
|
+
var helperTextStyles = {
|
|
88
|
+
fontSize: "11px",
|
|
89
|
+
color: "#595959",
|
|
90
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
91
|
+
};
|
|
92
|
+
var calendarPopoverStyles = {
|
|
93
|
+
backgroundColor: "#ffffff",
|
|
94
|
+
border: "1px solid #efefef",
|
|
95
|
+
borderRadius: "8px",
|
|
96
|
+
padding: "16px",
|
|
97
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
98
|
+
minWidth: "320px",
|
|
99
|
+
zIndex: 1e3
|
|
100
|
+
};
|
|
101
|
+
var calendarHeaderStyles = {
|
|
102
|
+
display: "flex",
|
|
103
|
+
alignItems: "center",
|
|
104
|
+
justifyContent: "space-between",
|
|
105
|
+
marginBottom: "16px",
|
|
106
|
+
gap: "8px"
|
|
107
|
+
};
|
|
108
|
+
var monthYearContainerStyles = {
|
|
109
|
+
display: "flex",
|
|
110
|
+
gap: "8px",
|
|
111
|
+
flex: 1
|
|
112
|
+
};
|
|
113
|
+
var selectStyles = {
|
|
114
|
+
padding: "6px 8px",
|
|
115
|
+
fontSize: "13px",
|
|
116
|
+
border: "1px solid #d1d1d1",
|
|
117
|
+
borderRadius: "6px",
|
|
118
|
+
backgroundColor: "#ffffff",
|
|
119
|
+
color: "#2f2f2f",
|
|
120
|
+
cursor: "pointer",
|
|
121
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
122
|
+
outline: "none"
|
|
123
|
+
};
|
|
124
|
+
var navButtonStyles = {
|
|
125
|
+
display: "flex",
|
|
126
|
+
alignItems: "center",
|
|
127
|
+
justifyContent: "center",
|
|
128
|
+
width: "28px",
|
|
129
|
+
height: "28px",
|
|
130
|
+
border: "none",
|
|
131
|
+
backgroundColor: "transparent",
|
|
132
|
+
cursor: "pointer",
|
|
133
|
+
borderRadius: "4px",
|
|
134
|
+
color: "#2f2f2f",
|
|
135
|
+
transition: "background-color 0.2s"
|
|
136
|
+
};
|
|
137
|
+
var weekDaysStyles = {
|
|
138
|
+
display: "grid",
|
|
139
|
+
gridTemplateColumns: "repeat(7, 1fr)",
|
|
140
|
+
gap: "4px",
|
|
141
|
+
marginBottom: "8px"
|
|
142
|
+
};
|
|
143
|
+
var weekDayStyles = {
|
|
144
|
+
fontSize: "11px",
|
|
145
|
+
fontWeight: 600,
|
|
146
|
+
color: "#7e7e7e",
|
|
147
|
+
textAlign: "center",
|
|
148
|
+
padding: "4px",
|
|
149
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
150
|
+
};
|
|
151
|
+
var daysGridStyles = {
|
|
152
|
+
display: "grid",
|
|
153
|
+
gridTemplateColumns: "repeat(7, 1fr)",
|
|
154
|
+
gap: "4px"
|
|
155
|
+
};
|
|
156
|
+
var dayButtonStyles = {
|
|
157
|
+
width: "36px",
|
|
158
|
+
height: "36px",
|
|
159
|
+
display: "flex",
|
|
160
|
+
alignItems: "center",
|
|
161
|
+
justifyContent: "center",
|
|
162
|
+
border: "none",
|
|
163
|
+
backgroundColor: "transparent",
|
|
164
|
+
borderRadius: "50%",
|
|
165
|
+
cursor: "pointer",
|
|
166
|
+
fontSize: "13px",
|
|
167
|
+
color: "#2f2f2f",
|
|
168
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
169
|
+
transition: "all 0.2s"
|
|
170
|
+
};
|
|
171
|
+
var footerStyles = {
|
|
172
|
+
display: "flex",
|
|
173
|
+
justifyContent: "flex-end",
|
|
174
|
+
marginTop: "12px",
|
|
175
|
+
paddingTop: "12px",
|
|
176
|
+
borderTop: "1px solid #efefef"
|
|
177
|
+
};
|
|
178
|
+
var todayButtonStyles = {
|
|
179
|
+
padding: "6px 12px",
|
|
180
|
+
fontSize: "13px",
|
|
181
|
+
fontWeight: 500,
|
|
182
|
+
color: "#16a33d",
|
|
183
|
+
backgroundColor: "transparent",
|
|
184
|
+
border: "none",
|
|
185
|
+
cursor: "pointer",
|
|
186
|
+
borderRadius: "6px",
|
|
187
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
188
|
+
transition: "background-color 0.2s"
|
|
189
|
+
};
|
|
190
|
+
var MONTHS = [
|
|
191
|
+
"January",
|
|
192
|
+
"February",
|
|
193
|
+
"March",
|
|
194
|
+
"April",
|
|
195
|
+
"May",
|
|
196
|
+
"June",
|
|
197
|
+
"July",
|
|
198
|
+
"August",
|
|
199
|
+
"September",
|
|
200
|
+
"October",
|
|
201
|
+
"November",
|
|
202
|
+
"December"
|
|
203
|
+
];
|
|
204
|
+
var WEEKDAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
|
|
205
|
+
var DatePicker = React.forwardRef(
|
|
206
|
+
({
|
|
207
|
+
value,
|
|
208
|
+
onChange,
|
|
209
|
+
label,
|
|
210
|
+
placeholder = "DD/MM/YYYY",
|
|
211
|
+
helperText,
|
|
212
|
+
error,
|
|
213
|
+
state = "default",
|
|
214
|
+
disabled = false,
|
|
215
|
+
className,
|
|
216
|
+
style,
|
|
217
|
+
"data-testid": dataTestId,
|
|
218
|
+
minDate,
|
|
219
|
+
maxDate,
|
|
220
|
+
dateFormat = "dd/MM/yyyy"
|
|
221
|
+
}, ref) => {
|
|
222
|
+
const [open, setOpen] = React.useState(false);
|
|
223
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
224
|
+
const [viewDate, setViewDate] = React.useState(value || /* @__PURE__ */ new Date());
|
|
225
|
+
const inputId = React.useId();
|
|
226
|
+
React.useEffect(() => {
|
|
227
|
+
if (value && (0, import_date_fns.isValid)(value)) {
|
|
228
|
+
setInputValue((0, import_date_fns.format)(value, dateFormat));
|
|
229
|
+
} else {
|
|
230
|
+
setInputValue("");
|
|
231
|
+
}
|
|
232
|
+
}, [value, dateFormat]);
|
|
233
|
+
React.useEffect(() => {
|
|
234
|
+
if (value && (0, import_date_fns.isValid)(value)) {
|
|
235
|
+
setViewDate(value);
|
|
236
|
+
}
|
|
237
|
+
}, [value]);
|
|
238
|
+
const handleInputChange = (e) => {
|
|
239
|
+
const newValue = e.target.value;
|
|
240
|
+
setInputValue(newValue);
|
|
241
|
+
const parsedDate = (0, import_date_fns.parse)(newValue, dateFormat, /* @__PURE__ */ new Date());
|
|
242
|
+
if ((0, import_date_fns.isValid)(parsedDate)) {
|
|
243
|
+
onChange?.(parsedDate);
|
|
244
|
+
setViewDate(parsedDate);
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
const handleInputBlur = () => {
|
|
248
|
+
if (value && (0, import_date_fns.isValid)(value)) {
|
|
249
|
+
setInputValue((0, import_date_fns.format)(value, dateFormat));
|
|
250
|
+
} else if (!inputValue) {
|
|
251
|
+
onChange?.(void 0);
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
const handleDateSelect = (date) => {
|
|
255
|
+
onChange?.(date);
|
|
256
|
+
setOpen(false);
|
|
257
|
+
};
|
|
258
|
+
const handleTodayClick = () => {
|
|
259
|
+
const today = /* @__PURE__ */ new Date();
|
|
260
|
+
onChange?.(today);
|
|
261
|
+
setViewDate(today);
|
|
262
|
+
setOpen(false);
|
|
263
|
+
};
|
|
264
|
+
const handleMonthChange = (e) => {
|
|
265
|
+
const newMonth = parseInt(e.target.value, 10);
|
|
266
|
+
const newDate = new Date(viewDate);
|
|
267
|
+
newDate.setMonth(newMonth);
|
|
268
|
+
setViewDate(newDate);
|
|
269
|
+
};
|
|
270
|
+
const handleYearChange = (e) => {
|
|
271
|
+
const newYear = parseInt(e.target.value, 10);
|
|
272
|
+
const newDate = new Date(viewDate);
|
|
273
|
+
newDate.setFullYear(newYear);
|
|
274
|
+
setViewDate(newDate);
|
|
275
|
+
};
|
|
276
|
+
const handlePrevMonth = () => {
|
|
277
|
+
setViewDate((0, import_date_fns.subMonths)(viewDate, 1));
|
|
278
|
+
};
|
|
279
|
+
const handleNextMonth = () => {
|
|
280
|
+
setViewDate((0, import_date_fns.addMonths)(viewDate, 1));
|
|
281
|
+
};
|
|
282
|
+
const monthStart = (0, import_date_fns.startOfMonth)(viewDate);
|
|
283
|
+
const monthEnd = (0, import_date_fns.endOfMonth)(viewDate);
|
|
284
|
+
const startDate = (0, import_date_fns.startOfWeek)(monthStart, { weekStartsOn: 1 });
|
|
285
|
+
const endDate = (0, import_date_fns.endOfWeek)(monthEnd, { weekStartsOn: 1 });
|
|
286
|
+
const days = (0, import_date_fns.eachDayOfInterval)({ start: startDate, end: endDate });
|
|
287
|
+
const isDateDisabled = (date) => {
|
|
288
|
+
if (minDate && date < minDate) return true;
|
|
289
|
+
if (maxDate && date > maxDate) return true;
|
|
290
|
+
return false;
|
|
291
|
+
};
|
|
292
|
+
const currentYear = viewDate.getFullYear();
|
|
293
|
+
const yearOptions = Array.from({ length: 201 }, (_, i) => currentYear - 100 + i);
|
|
294
|
+
const currentState = error ? "error" : state;
|
|
295
|
+
const getInputStyles = () => {
|
|
296
|
+
const styles = { ...inputStyles };
|
|
297
|
+
if (disabled) {
|
|
298
|
+
styles.backgroundColor = "#f8f8f8";
|
|
299
|
+
styles.borderColor = "#efefef";
|
|
300
|
+
styles.color = "#7e7e7e";
|
|
301
|
+
styles.cursor = "not-allowed";
|
|
302
|
+
} else if (currentState === "error") {
|
|
303
|
+
styles.borderColor = "#e02f1d";
|
|
304
|
+
} else if (currentState === "success") {
|
|
305
|
+
styles.borderColor = "#16a33d";
|
|
306
|
+
}
|
|
307
|
+
return styles;
|
|
308
|
+
};
|
|
309
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
310
|
+
"div",
|
|
311
|
+
{
|
|
312
|
+
className: (0, import_clsx.clsx)("arbor-datepicker-wrapper", className),
|
|
313
|
+
style: { ...wrapperStyles, ...style },
|
|
314
|
+
"data-testid": dataTestId,
|
|
315
|
+
children: [
|
|
316
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { htmlFor: inputId, style: labelStyles, children: label }),
|
|
317
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Popover.Root, { open, onOpenChange: setOpen, children: [
|
|
318
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: inputContainerStyles, children: [
|
|
319
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
320
|
+
"input",
|
|
321
|
+
{
|
|
322
|
+
ref,
|
|
323
|
+
id: inputId,
|
|
324
|
+
type: "text",
|
|
325
|
+
value: inputValue,
|
|
326
|
+
onChange: handleInputChange,
|
|
327
|
+
onBlur: handleInputBlur,
|
|
328
|
+
placeholder,
|
|
329
|
+
disabled,
|
|
330
|
+
style: getInputStyles(),
|
|
331
|
+
"aria-label": label || "Date picker"
|
|
332
|
+
}
|
|
333
|
+
),
|
|
334
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Popover.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
335
|
+
"button",
|
|
336
|
+
{
|
|
337
|
+
type: "button",
|
|
338
|
+
style: {
|
|
339
|
+
...iconButtonStyles,
|
|
340
|
+
cursor: disabled ? "not-allowed" : "pointer"
|
|
341
|
+
},
|
|
342
|
+
disabled,
|
|
343
|
+
"aria-label": "Open calendar",
|
|
344
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Calendar, { size: 16 })
|
|
345
|
+
}
|
|
346
|
+
) })
|
|
347
|
+
] }),
|
|
348
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
349
|
+
Popover.Content,
|
|
350
|
+
{
|
|
351
|
+
align: "start",
|
|
352
|
+
sideOffset: 4,
|
|
353
|
+
style: calendarPopoverStyles,
|
|
354
|
+
children: [
|
|
355
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: calendarHeaderStyles, children: [
|
|
356
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
357
|
+
"button",
|
|
358
|
+
{
|
|
359
|
+
type: "button",
|
|
360
|
+
onClick: handlePrevMonth,
|
|
361
|
+
style: navButtonStyles,
|
|
362
|
+
onMouseEnter: (e) => {
|
|
363
|
+
e.currentTarget.style.backgroundColor = "#f8f8f8";
|
|
364
|
+
},
|
|
365
|
+
onMouseLeave: (e) => {
|
|
366
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
367
|
+
},
|
|
368
|
+
"aria-label": "Previous month",
|
|
369
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronLeft, { size: 16 })
|
|
370
|
+
}
|
|
371
|
+
),
|
|
372
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: monthYearContainerStyles, children: [
|
|
373
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
374
|
+
"select",
|
|
375
|
+
{
|
|
376
|
+
value: viewDate.getMonth(),
|
|
377
|
+
onChange: handleMonthChange,
|
|
378
|
+
style: selectStyles,
|
|
379
|
+
"aria-label": "Select month",
|
|
380
|
+
children: MONTHS.map((month, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: index, children: month }, month))
|
|
381
|
+
}
|
|
382
|
+
),
|
|
383
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
384
|
+
"select",
|
|
385
|
+
{
|
|
386
|
+
value: viewDate.getFullYear(),
|
|
387
|
+
onChange: handleYearChange,
|
|
388
|
+
style: selectStyles,
|
|
389
|
+
"aria-label": "Select year",
|
|
390
|
+
children: yearOptions.map((year) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: year, children: year }, year))
|
|
391
|
+
}
|
|
392
|
+
)
|
|
393
|
+
] }),
|
|
394
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
395
|
+
"button",
|
|
396
|
+
{
|
|
397
|
+
type: "button",
|
|
398
|
+
onClick: handleNextMonth,
|
|
399
|
+
style: navButtonStyles,
|
|
400
|
+
onMouseEnter: (e) => {
|
|
401
|
+
e.currentTarget.style.backgroundColor = "#f8f8f8";
|
|
402
|
+
},
|
|
403
|
+
onMouseLeave: (e) => {
|
|
404
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
405
|
+
},
|
|
406
|
+
"aria-label": "Next month",
|
|
407
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronRight, { size: 16 })
|
|
408
|
+
}
|
|
409
|
+
)
|
|
410
|
+
] }),
|
|
411
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: weekDaysStyles, children: WEEKDAYS.map((day) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: weekDayStyles, children: day }, day)) }),
|
|
412
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: daysGridStyles, children: days.map((day) => {
|
|
413
|
+
const isCurrentMonth = day.getMonth() === viewDate.getMonth();
|
|
414
|
+
const isSelected = value && (0, import_date_fns.isSameDay)(day, value);
|
|
415
|
+
const isTodayDate = (0, import_date_fns.isToday)(day);
|
|
416
|
+
const isDayDisabled = isDateDisabled(day);
|
|
417
|
+
const getDayButtonStyles = () => {
|
|
418
|
+
const styles = { ...dayButtonStyles };
|
|
419
|
+
if (!isCurrentMonth) {
|
|
420
|
+
styles.color = "#d1d1d1";
|
|
421
|
+
}
|
|
422
|
+
if (isDayDisabled) {
|
|
423
|
+
styles.color = "#d1d1d1";
|
|
424
|
+
styles.cursor = "not-allowed";
|
|
425
|
+
}
|
|
426
|
+
if (isSelected) {
|
|
427
|
+
styles.backgroundColor = "#3cad51";
|
|
428
|
+
styles.color = "#ffffff";
|
|
429
|
+
} else if (isTodayDate && !isDayDisabled) {
|
|
430
|
+
styles.fontWeight = 600;
|
|
431
|
+
styles.color = "#16a33d";
|
|
432
|
+
}
|
|
433
|
+
return styles;
|
|
434
|
+
};
|
|
435
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
436
|
+
"button",
|
|
437
|
+
{
|
|
438
|
+
type: "button",
|
|
439
|
+
onClick: () => !isDayDisabled && handleDateSelect(day),
|
|
440
|
+
disabled: isDayDisabled,
|
|
441
|
+
style: getDayButtonStyles(),
|
|
442
|
+
onMouseEnter: (e) => {
|
|
443
|
+
if (!isSelected && !isDayDisabled && isCurrentMonth) {
|
|
444
|
+
e.currentTarget.style.backgroundColor = "#f8f8f8";
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
onMouseLeave: (e) => {
|
|
448
|
+
if (!isSelected) {
|
|
449
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
"aria-label": (0, import_date_fns.format)(day, "MMMM d, yyyy"),
|
|
453
|
+
"aria-selected": isSelected,
|
|
454
|
+
children: (0, import_date_fns.format)(day, "d")
|
|
455
|
+
},
|
|
456
|
+
day.toISOString()
|
|
457
|
+
);
|
|
458
|
+
}) }),
|
|
459
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: footerStyles, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
460
|
+
"button",
|
|
461
|
+
{
|
|
462
|
+
type: "button",
|
|
463
|
+
onClick: handleTodayClick,
|
|
464
|
+
style: todayButtonStyles,
|
|
465
|
+
onMouseEnter: (e) => {
|
|
466
|
+
e.currentTarget.style.backgroundColor = "#f8f8f8";
|
|
467
|
+
},
|
|
468
|
+
onMouseLeave: (e) => {
|
|
469
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
470
|
+
},
|
|
471
|
+
children: "Today"
|
|
472
|
+
}
|
|
473
|
+
) })
|
|
474
|
+
]
|
|
475
|
+
}
|
|
476
|
+
) })
|
|
477
|
+
] }),
|
|
478
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { ...helperTextStyles, color: "#e02f1d" }, children: error }),
|
|
479
|
+
!error && helperText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: helperTextStyles, children: helperText })
|
|
480
|
+
]
|
|
481
|
+
}
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
);
|
|
485
|
+
DatePicker.displayName = "DatePicker";
|
|
486
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
487
|
+
0 && (module.exports = {
|
|
488
|
+
DatePicker
|
|
489
|
+
});
|
|
490
|
+
//# sourceMappingURL=DatePicker.js.map
|