@ecohouse/ui 0.1.4 → 0.1.5
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/README.md +33 -13
- package/dist/index.cjs +805 -149
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -10
- package/dist/index.d.ts +113 -10
- package/dist/index.js +802 -151
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Avatar/Avatar.tsx +19 -71
- package/src/components/DatePicker/DatePicker.stories.tsx +172 -0
- package/src/components/DatePicker/DatePicker.tsx +628 -0
- package/src/components/DatePicker/index.ts +7 -0
- package/src/components/index.ts +8 -0
- package/src/icons/CalendarOutline/CalendarOutlineIcon.tsx +25 -0
- package/src/icons/CalendarOutline/CalendarOutlineIcon.web.tsx +31 -0
- package/src/icons/CalendarOutline/calendarOutlinePath.ts +3 -0
- package/src/icons/CalendarOutline/index.ts +1 -0
- package/src/icons/ChevronLeft/ChevronLeftIcon.tsx +21 -0
- package/src/icons/ChevronLeft/ChevronLeftIcon.web.tsx +27 -0
- package/src/icons/ChevronLeft/chevronLeftPath.ts +2 -0
- package/src/icons/ChevronLeft/index.ts +1 -0
- package/src/icons/index.ts +2 -0
- package/src/icons/registry.ts +17 -2
- package/src/index.ts +20 -1
- package/src/primitives/MenuItem/MenuItem.stories.tsx +98 -0
- package/src/primitives/MenuItem/MenuItem.tsx +138 -0
- package/src/primitives/MenuItem/index.ts +2 -0
- package/src/primitives/index.ts +2 -0
- package/src/theme/colors.ts +1 -0
- package/src/theme/index.ts +1 -0
- package/src/theme/typography.ts +40 -0
- package/src/utils/dateUtils.ts +86 -0
package/dist/index.cjs
CHANGED
|
@@ -40,6 +40,7 @@ var colors = {
|
|
|
40
40
|
red: "#A63E3E",
|
|
41
41
|
lightGrey: "#B7B7B7",
|
|
42
42
|
primaryMuted: "#B464360F",
|
|
43
|
+
primaryHover: "#B4643633",
|
|
43
44
|
redMuted: "#A63E3E0F",
|
|
44
45
|
redHover: "#A63E3E33",
|
|
45
46
|
grey0: grey["0"],
|
|
@@ -148,6 +149,38 @@ var avatarTypography = {
|
|
|
148
149
|
letterSpacing: 0
|
|
149
150
|
}
|
|
150
151
|
};
|
|
152
|
+
var datePickerTypography = {
|
|
153
|
+
field: {
|
|
154
|
+
fontFamily: fonts.sans,
|
|
155
|
+
fontSize: 12,
|
|
156
|
+
fontWeight: "400",
|
|
157
|
+
lineHeight: 12,
|
|
158
|
+
letterSpacing: 0.36
|
|
159
|
+
},
|
|
160
|
+
/** Calendar month/year heading — Bold, centered, White. */
|
|
161
|
+
monthHeading: {
|
|
162
|
+
fontFamily: fonts.sans,
|
|
163
|
+
fontSize: 14,
|
|
164
|
+
fontWeight: "700",
|
|
165
|
+
lineHeight: 14,
|
|
166
|
+
letterSpacing: 0
|
|
167
|
+
},
|
|
168
|
+
/** Weekday header (ԵՐ, ԵՔ, ...) — Regular, uppercase, centered, Grey/300. */
|
|
169
|
+
weekday: {
|
|
170
|
+
fontFamily: fonts.sans,
|
|
171
|
+
fontSize: 12,
|
|
172
|
+
fontWeight: "400",
|
|
173
|
+
lineHeight: 12,
|
|
174
|
+
letterSpacing: 0
|
|
175
|
+
},
|
|
176
|
+
day: {
|
|
177
|
+
fontFamily: fonts.sans,
|
|
178
|
+
fontSize: 14,
|
|
179
|
+
fontWeight: "400",
|
|
180
|
+
lineHeight: 14,
|
|
181
|
+
letterSpacing: 0
|
|
182
|
+
}
|
|
183
|
+
};
|
|
151
184
|
var textareaTypography = {
|
|
152
185
|
label: {
|
|
153
186
|
fontFamily: fonts.sans,
|
|
@@ -248,6 +281,25 @@ function CalendarIcon({ size = 20, color = colors.primary, strokeWidth = 1.5 })
|
|
|
248
281
|
) });
|
|
249
282
|
}
|
|
250
283
|
|
|
284
|
+
// src/icons/CalendarOutline/calendarOutlinePath.ts
|
|
285
|
+
var CALENDAR_OUTLINE_PATH = "M10.6667 1.33334V4.00001M5.33333 1.33334V4.00001M2 6.66668H14M5.2 2.66668H10.8C11.9201 2.66668 12.4802 2.66668 12.908 2.88466C13.2843 3.07641 13.5903 3.38237 13.782 3.7587C14 4.18652 14 4.74657 14 5.86668V11.4667C14 12.5868 14 13.1468 13.782 13.5747C13.5903 13.951 13.2843 14.2569 12.908 14.4487C12.4802 14.6667 11.9201 14.6667 10.8 14.6667H5.2C4.0799 14.6667 3.51984 14.6667 3.09202 14.4487C2.71569 14.2569 2.40973 13.951 2.21799 13.5747C2 13.1468 2 12.5868 2 11.4667V5.86668C2 4.74657 2 4.18652 2.21799 3.7587C2.40973 3.38237 2.71569 3.07641 3.09202 2.88466C3.51984 2.66668 4.0799 2.66668 5.2 2.66668Z";
|
|
286
|
+
function CalendarOutlineIcon({
|
|
287
|
+
size = 20,
|
|
288
|
+
color = colors.primary,
|
|
289
|
+
strokeWidth = 1.5
|
|
290
|
+
}) {
|
|
291
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Svg__default.default, { width: size, height: size, viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
292
|
+
Svg.Path,
|
|
293
|
+
{
|
|
294
|
+
d: CALENDAR_OUTLINE_PATH,
|
|
295
|
+
stroke: color,
|
|
296
|
+
strokeWidth,
|
|
297
|
+
strokeLinecap: "round",
|
|
298
|
+
strokeLinejoin: "round"
|
|
299
|
+
}
|
|
300
|
+
) });
|
|
301
|
+
}
|
|
302
|
+
|
|
251
303
|
// src/icons/Camera/cameraPath.ts
|
|
252
304
|
var CAMERA_PATH = "M9.48898 7H6.2002C5.08009 7 4.51962 7 4.0918 7.21799C3.71547 7.40973 3.40973 7.71547 3.21799 8.0918C3 8.51962 3 9.08009 3 10.2002V15.8002C3 16.9203 3 17.4796 3.21799 17.9074C3.40973 18.2837 3.71547 18.5905 4.0918 18.7822C4.5192 19 5.07899 19 6.19691 19H17.8031C18.921 19 19.48 19 19.9074 18.7822C20.2837 18.5905 20.5905 18.2837 20.7822 17.9074C21 17.48 21 16.921 21 15.8031V10.1969C21 9.07899 21 8.5192 20.7822 8.0918C20.5905 7.71547 20.2837 7.40973 19.9074 7.21799C19.4796 7 18.9203 7 17.8002 7H14.5108M9.48898 7H9.55078M9.48898 7C9.50151 7.00001 9.51468 7 9.52857 7L9.55078 7M9.48898 7C9.38286 6.99995 9.32339 6.99941 9.27637 6.99414C8.68878 6.92835 8.28578 6.36908 8.40918 5.79084C8.42066 5.73703 8.44336 5.66894 8.4883 5.53412L8.49023 5.52841C8.54156 5.37443 8.56723 5.29743 8.59558 5.22949C8.88586 4.53389 9.54322 4.06083 10.2949 4.00541C10.3683 4 10.449 4 10.6113 4H13.3886C13.5509 4 13.6322 4 13.7057 4.00541C14.4574 4.06083 15.114 4.53389 15.4043 5.22949C15.4326 5.29743 15.4584 5.37434 15.5098 5.52832C15.556 5.66699 15.5791 5.73636 15.5908 5.79093C15.7142 6.36917 15.3118 6.92835 14.7242 6.99414C14.6772 6.99941 14.6171 6.99995 14.5108 7M9.55078 7H14.449M14.449 7H14.5108M14.449 7L14.4712 7C14.4851 7 14.4983 7.00001 14.5108 7M12 16C10.3431 16 9 14.6569 9 13C9 11.3431 10.3431 10 12 10C13.6569 10 15 11.3431 15 13C15 14.6569 13.6569 16 12 16Z";
|
|
253
305
|
function CameraIcon({ size = 24, color = colors.primary, strokeWidth = 2 }) {
|
|
@@ -312,6 +364,21 @@ function ChevronDownIcon({
|
|
|
312
364
|
) });
|
|
313
365
|
}
|
|
314
366
|
|
|
367
|
+
// src/icons/ChevronLeft/chevronLeftPath.ts
|
|
368
|
+
var CHEVRON_LEFT_PATH = "M12.5 15L7.5 10L12.5 5";
|
|
369
|
+
function ChevronLeftIcon({ size = 20, color = colors.primary, strokeWidth = 2 }) {
|
|
370
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Svg__default.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
371
|
+
Svg.Path,
|
|
372
|
+
{
|
|
373
|
+
d: CHEVRON_LEFT_PATH,
|
|
374
|
+
stroke: color,
|
|
375
|
+
strokeWidth,
|
|
376
|
+
strokeLinecap: "round",
|
|
377
|
+
strokeLinejoin: "round"
|
|
378
|
+
}
|
|
379
|
+
) });
|
|
380
|
+
}
|
|
381
|
+
|
|
315
382
|
// src/icons/Clock/clockPath.ts
|
|
316
383
|
var CLOCK_PATH = "M12 7V12H17M12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21Z";
|
|
317
384
|
function ClockIcon({ size = 24, color = colors.primary, strokeWidth = 2 }) {
|
|
@@ -606,10 +673,12 @@ var icons = {
|
|
|
606
673
|
bell: BellIcon,
|
|
607
674
|
building: BuildingIcon,
|
|
608
675
|
calendar: CalendarIcon,
|
|
676
|
+
calendarOutline: CalendarOutlineIcon,
|
|
609
677
|
camera: CameraIcon,
|
|
610
678
|
check: CheckIcon,
|
|
611
679
|
checkBadge: CheckBadgeIcon,
|
|
612
680
|
chevronDown: ChevronDownIcon,
|
|
681
|
+
chevronLeft: ChevronLeftIcon,
|
|
613
682
|
clock: ClockIcon,
|
|
614
683
|
facebook: FacebookIcon,
|
|
615
684
|
heart: HeartIcon,
|
|
@@ -631,8 +700,19 @@ var icons = {
|
|
|
631
700
|
};
|
|
632
701
|
var iconNames = Object.keys(icons);
|
|
633
702
|
var iconGroups = {
|
|
634
|
-
navigation: ["arrowRight", "chevronDown", "home", "navigate"],
|
|
635
|
-
actions: [
|
|
703
|
+
navigation: ["arrowRight", "chevronDown", "chevronLeft", "home", "navigate"],
|
|
704
|
+
actions: [
|
|
705
|
+
"show",
|
|
706
|
+
"bell",
|
|
707
|
+
"camera",
|
|
708
|
+
"key",
|
|
709
|
+
"check",
|
|
710
|
+
"checkBadge",
|
|
711
|
+
"search",
|
|
712
|
+
"calendar",
|
|
713
|
+
"calendarOutline",
|
|
714
|
+
"heart"
|
|
715
|
+
],
|
|
636
716
|
objects: ["bag", "building", "clock", "user", "video"],
|
|
637
717
|
communication: ["mail", "phone"],
|
|
638
718
|
social: ["facebook", "instagram", "linkedin"],
|
|
@@ -698,13 +778,104 @@ function useApplyWebClassName(ref, className, enabled = true) {
|
|
|
698
778
|
};
|
|
699
779
|
}, [ref, className, enabled]);
|
|
700
780
|
}
|
|
781
|
+
var ITEM_RADIUS = 12;
|
|
782
|
+
var ICON_SIZE = 16;
|
|
783
|
+
var MenuItem = react.forwardRef(function MenuItem2({
|
|
784
|
+
icon,
|
|
785
|
+
label,
|
|
786
|
+
onPress,
|
|
787
|
+
disabled = false,
|
|
788
|
+
backgroundColor,
|
|
789
|
+
hoverColor,
|
|
790
|
+
style,
|
|
791
|
+
labelStyle,
|
|
792
|
+
className,
|
|
793
|
+
accessibilityLabel,
|
|
794
|
+
hitSlop = 4,
|
|
795
|
+
onHoverIn,
|
|
796
|
+
onHoverOut,
|
|
797
|
+
onPressIn,
|
|
798
|
+
onPressOut,
|
|
799
|
+
...rest
|
|
800
|
+
}, forwardedRef) {
|
|
801
|
+
const containerRef = react.useRef(null);
|
|
802
|
+
const setContainerRef = react.useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
|
|
803
|
+
const [hovered, setHovered] = react.useState(false);
|
|
804
|
+
useApplyWebClassName(containerRef, className);
|
|
805
|
+
const resolvedBackground = hovered ? hoverColor ?? colors.grey600 : backgroundColor ?? "transparent";
|
|
806
|
+
const resolvedAccessibilityLabel = accessibilityLabel ?? label;
|
|
807
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
808
|
+
reactNative.Pressable,
|
|
809
|
+
{
|
|
810
|
+
...rest,
|
|
811
|
+
ref: setContainerRef,
|
|
812
|
+
onPress,
|
|
813
|
+
disabled,
|
|
814
|
+
hitSlop,
|
|
815
|
+
onHoverIn: (event) => {
|
|
816
|
+
setHovered(true);
|
|
817
|
+
onHoverIn?.(event);
|
|
818
|
+
},
|
|
819
|
+
onHoverOut: (event) => {
|
|
820
|
+
setHovered(false);
|
|
821
|
+
onHoverOut?.(event);
|
|
822
|
+
},
|
|
823
|
+
onPressIn: (event) => {
|
|
824
|
+
setHovered(true);
|
|
825
|
+
onPressIn?.(event);
|
|
826
|
+
},
|
|
827
|
+
onPressOut: (event) => {
|
|
828
|
+
setHovered(false);
|
|
829
|
+
onPressOut?.(event);
|
|
830
|
+
},
|
|
831
|
+
accessibilityRole: "menuitem",
|
|
832
|
+
accessibilityLabel: resolvedAccessibilityLabel,
|
|
833
|
+
accessibilityState: { disabled },
|
|
834
|
+
style: [
|
|
835
|
+
styles.root,
|
|
836
|
+
{ backgroundColor: resolvedBackground },
|
|
837
|
+
disabled && styles.disabled,
|
|
838
|
+
style
|
|
839
|
+
],
|
|
840
|
+
children: [
|
|
841
|
+
icon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles.iconSlot, children: icon }) : null,
|
|
842
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles.label, labelStyle], numberOfLines: 1, children: label })
|
|
843
|
+
]
|
|
844
|
+
}
|
|
845
|
+
);
|
|
846
|
+
});
|
|
847
|
+
var styles = reactNative.StyleSheet.create({
|
|
848
|
+
root: {
|
|
849
|
+
minHeight: 40,
|
|
850
|
+
borderRadius: ITEM_RADIUS,
|
|
851
|
+
paddingVertical: 12,
|
|
852
|
+
paddingHorizontal: 12,
|
|
853
|
+
flexDirection: "row",
|
|
854
|
+
alignItems: "center",
|
|
855
|
+
gap: 8,
|
|
856
|
+
alignSelf: "stretch"
|
|
857
|
+
},
|
|
858
|
+
disabled: {
|
|
859
|
+
opacity: 0.5
|
|
860
|
+
},
|
|
861
|
+
iconSlot: {
|
|
862
|
+
width: ICON_SIZE,
|
|
863
|
+
height: ICON_SIZE,
|
|
864
|
+
alignItems: "center",
|
|
865
|
+
justifyContent: "center",
|
|
866
|
+
flexShrink: 0
|
|
867
|
+
},
|
|
868
|
+
label: {
|
|
869
|
+
...avatarTypography.menuItem,
|
|
870
|
+
color: colors.white,
|
|
871
|
+
flex: 1
|
|
872
|
+
}
|
|
873
|
+
});
|
|
701
874
|
var IMAGE_SIZE = 48;
|
|
702
875
|
var CONTAINER_RADIUS = 71;
|
|
703
876
|
var CHEVRON_SIZE = 20;
|
|
704
877
|
var FALLBACK_ICON_SIZE = 20;
|
|
705
878
|
var MENU_RADIUS = 16;
|
|
706
|
-
var MENU_ITEM_RADIUS = 12;
|
|
707
|
-
var MENU_ITEM_ICON_SIZE = 16;
|
|
708
879
|
var Avatar = react.forwardRef(function Avatar2({
|
|
709
880
|
name,
|
|
710
881
|
email,
|
|
@@ -727,8 +898,8 @@ var Avatar = react.forwardRef(function Avatar2({
|
|
|
727
898
|
const containerRef = react.useRef(null);
|
|
728
899
|
const setContainerRef = react.useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
|
|
729
900
|
const [imageFailed, setImageFailed] = react.useState(false);
|
|
730
|
-
const
|
|
731
|
-
const hasMenu =
|
|
901
|
+
const resolvedMenuItems = menuItems ?? [];
|
|
902
|
+
const hasMenu = resolvedMenuItems.length > 0;
|
|
732
903
|
const isInteractive = onPress != null || hasMenu;
|
|
733
904
|
const isOpenControlled = typeof openProp === "boolean";
|
|
734
905
|
const [uncontrolledOpen, setUncontrolledOpen] = react.useState(defaultOpen);
|
|
@@ -738,7 +909,6 @@ var Avatar = react.forwardRef(function Avatar2({
|
|
|
738
909
|
(next) => {
|
|
739
910
|
if (!isOpenControlled) setUncontrolledOpen(next);
|
|
740
911
|
onOpenChange?.(next);
|
|
741
|
-
if (!next) setHoveredKey(null);
|
|
742
912
|
},
|
|
743
913
|
[isOpenControlled, onOpenChange]
|
|
744
914
|
);
|
|
@@ -791,7 +961,7 @@ var Avatar = react.forwardRef(function Avatar2({
|
|
|
791
961
|
}, [isOpen, closeAndFocusTrigger]);
|
|
792
962
|
const hasImage = Boolean(imageUrl) && !imageFailed;
|
|
793
963
|
const resolvedAccessibilityLabel = accessibilityLabel ?? [name, email].filter(Boolean).join(", ");
|
|
794
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: wrapperRef, style: [
|
|
964
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: wrapperRef, style: [styles2.wrapper, isOpen && styles2.wrapperOpen], children: [
|
|
795
965
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
796
966
|
reactNative.Pressable,
|
|
797
967
|
{
|
|
@@ -803,55 +973,42 @@ var Avatar = react.forwardRef(function Avatar2({
|
|
|
803
973
|
accessibilityRole: isInteractive ? "button" : void 0,
|
|
804
974
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
805
975
|
accessibilityState: isInteractive ? { disabled, expanded: hasMenu ? isOpen : void 0 } : void 0,
|
|
806
|
-
style: [
|
|
976
|
+
style: [styles2.root, disabled && styles2.disabled, style],
|
|
807
977
|
children: [
|
|
808
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
978
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles2.imageWrap, children: hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
809
979
|
reactNative.Image,
|
|
810
980
|
{
|
|
811
981
|
source: { uri: imageUrl ?? void 0 },
|
|
812
|
-
style:
|
|
982
|
+
style: styles2.image,
|
|
813
983
|
onError: () => setImageFailed(true)
|
|
814
984
|
}
|
|
815
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
816
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
817
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
818
|
-
email ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
985
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles2.imageFallback, children: /* @__PURE__ */ jsxRuntime.jsx(UserIcon, { size: FALLBACK_ICON_SIZE, color: colors.primary }) }) }),
|
|
986
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles2.textColumn, children: [
|
|
987
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles2.name, numberOfLines: 1, children: name }),
|
|
988
|
+
email ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles2.email, numberOfLines: 1, children: email }) : null
|
|
819
989
|
] }),
|
|
820
|
-
showChevron ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [
|
|
990
|
+
showChevron ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles2.chevronSlot, isOpen && styles2.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: CHEVRON_SIZE, color: isOpen ? colors.primary : colors.grey100 }) }) : null
|
|
821
991
|
]
|
|
822
992
|
}
|
|
823
993
|
),
|
|
824
|
-
hasMenu && isOpen ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [
|
|
994
|
+
hasMenu && isOpen ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles2.menu, menuWidth != null && { right: void 0, width: menuWidth }], children: resolvedMenuItems.map((item) => {
|
|
825
995
|
const itemKey = item.key ?? item.label;
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
829
|
-
reactNative.Pressable,
|
|
996
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
997
|
+
MenuItem,
|
|
830
998
|
{
|
|
831
|
-
|
|
999
|
+
icon: item.icon,
|
|
1000
|
+
label: item.label,
|
|
832
1001
|
disabled: item.disabled,
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
onPressOut: () => setHoveredKey((current) => current === itemKey ? null : current),
|
|
837
|
-
accessibilityRole: "menuitem",
|
|
838
|
-
accessibilityState: { disabled: item.disabled },
|
|
839
|
-
style: [
|
|
840
|
-
styles.menuItem,
|
|
841
|
-
{ backgroundColor },
|
|
842
|
-
item.disabled && styles.menuItemDisabled
|
|
843
|
-
],
|
|
844
|
-
children: [
|
|
845
|
-
item.icon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles.menuItemIcon, children: item.icon }) : null,
|
|
846
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles.menuItemLabel, numberOfLines: 1, children: item.label })
|
|
847
|
-
]
|
|
1002
|
+
backgroundColor: item.backgroundColor,
|
|
1003
|
+
hoverColor: item.hoverColor,
|
|
1004
|
+
onPress: () => handleItemPress(item)
|
|
848
1005
|
},
|
|
849
1006
|
itemKey
|
|
850
1007
|
);
|
|
851
1008
|
}) }) : null
|
|
852
1009
|
] });
|
|
853
1010
|
});
|
|
854
|
-
var
|
|
1011
|
+
var styles2 = reactNative.StyleSheet.create({
|
|
855
1012
|
wrapper: {
|
|
856
1013
|
position: "relative",
|
|
857
1014
|
alignSelf: "flex-start"
|
|
@@ -934,30 +1091,6 @@ var styles = reactNative.StyleSheet.create({
|
|
|
934
1091
|
elevation: 8
|
|
935
1092
|
}
|
|
936
1093
|
})
|
|
937
|
-
},
|
|
938
|
-
menuItem: {
|
|
939
|
-
minHeight: 40,
|
|
940
|
-
borderRadius: MENU_ITEM_RADIUS,
|
|
941
|
-
paddingVertical: 12,
|
|
942
|
-
paddingHorizontal: 12,
|
|
943
|
-
flexDirection: "row",
|
|
944
|
-
alignItems: "center",
|
|
945
|
-
gap: 8
|
|
946
|
-
},
|
|
947
|
-
menuItemDisabled: {
|
|
948
|
-
opacity: 0.5
|
|
949
|
-
},
|
|
950
|
-
menuItemIcon: {
|
|
951
|
-
width: MENU_ITEM_ICON_SIZE,
|
|
952
|
-
height: MENU_ITEM_ICON_SIZE,
|
|
953
|
-
alignItems: "center",
|
|
954
|
-
justifyContent: "center",
|
|
955
|
-
flexShrink: 0
|
|
956
|
-
},
|
|
957
|
-
menuItemLabel: {
|
|
958
|
-
...avatarTypography.menuItem,
|
|
959
|
-
color: colors.white,
|
|
960
|
-
flex: 1
|
|
961
1094
|
}
|
|
962
1095
|
});
|
|
963
1096
|
var variantConfig = {
|
|
@@ -1032,7 +1165,7 @@ var Button = react.forwardRef(
|
|
|
1032
1165
|
useApplyWebClassName(textRef, textClassName);
|
|
1033
1166
|
const iconNode = customIcon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRightIcon, { size: metrics.iconSize, color: preset.iconColor });
|
|
1034
1167
|
const containerStyle = [
|
|
1035
|
-
|
|
1168
|
+
styles3.base,
|
|
1036
1169
|
{
|
|
1037
1170
|
minHeight: metrics.minHeight,
|
|
1038
1171
|
borderRadius: metrics.borderRadius,
|
|
@@ -1043,15 +1176,15 @@ var Button = react.forwardRef(
|
|
|
1043
1176
|
paddingRight: hasIcon ? metrics.paddingRightWithIcon : metrics.paddingRight,
|
|
1044
1177
|
gap: hasIcon ? metrics.gap : 0
|
|
1045
1178
|
},
|
|
1046
|
-
disabled &&
|
|
1179
|
+
disabled && styles3.disabled,
|
|
1047
1180
|
style
|
|
1048
1181
|
];
|
|
1049
1182
|
const labelStyle = [
|
|
1050
|
-
|
|
1183
|
+
styles3.label,
|
|
1051
1184
|
metrics.text,
|
|
1052
1185
|
{ color: preset.textColor },
|
|
1053
|
-
reactNative.Platform.OS === "android" ?
|
|
1054
|
-
!hasIcon &&
|
|
1186
|
+
reactNative.Platform.OS === "android" ? styles3.labelAndroid : null,
|
|
1187
|
+
!hasIcon && styles3.labelCentered,
|
|
1055
1188
|
textStyle
|
|
1056
1189
|
];
|
|
1057
1190
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1072,7 +1205,7 @@ var Button = react.forwardRef(
|
|
|
1072
1205
|
reactNative.View,
|
|
1073
1206
|
{
|
|
1074
1207
|
style: [
|
|
1075
|
-
|
|
1208
|
+
styles3.iconContainer,
|
|
1076
1209
|
{
|
|
1077
1210
|
width: metrics.iconContainerSize,
|
|
1078
1211
|
height: metrics.iconContainerSize,
|
|
@@ -1088,7 +1221,7 @@ var Button = react.forwardRef(
|
|
|
1088
1221
|
);
|
|
1089
1222
|
}
|
|
1090
1223
|
);
|
|
1091
|
-
var
|
|
1224
|
+
var styles3 = reactNative.StyleSheet.create({
|
|
1092
1225
|
base: {
|
|
1093
1226
|
flexDirection: "row",
|
|
1094
1227
|
alignItems: "center",
|
|
@@ -1166,13 +1299,13 @@ var Checkbox = react.forwardRef(function Checkbox2({
|
|
|
1166
1299
|
accessibilityRole: "checkbox",
|
|
1167
1300
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
1168
1301
|
accessibilityState: { checked: isActive, disabled },
|
|
1169
|
-
style: [
|
|
1302
|
+
style: [styles4.root, disabled && styles4.disabled, style],
|
|
1170
1303
|
children: [
|
|
1171
1304
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1172
1305
|
reactNative.View,
|
|
1173
1306
|
{
|
|
1174
1307
|
style: [
|
|
1175
|
-
|
|
1308
|
+
styles4.box,
|
|
1176
1309
|
{
|
|
1177
1310
|
backgroundColor: chrome.backgroundColor,
|
|
1178
1311
|
borderColor: chrome.borderColor
|
|
@@ -1181,12 +1314,12 @@ var Checkbox = react.forwardRef(function Checkbox2({
|
|
|
1181
1314
|
children: isActive ? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { size: CHECK_SIZE, color: colors.primary, strokeWidth: CHECK_STROKE }) : null
|
|
1182
1315
|
}
|
|
1183
1316
|
),
|
|
1184
|
-
labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
1317
|
+
labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles4.label, labelStyle], children: labelContent }) : labelContent : null
|
|
1185
1318
|
]
|
|
1186
1319
|
}
|
|
1187
1320
|
);
|
|
1188
1321
|
});
|
|
1189
|
-
var
|
|
1322
|
+
var styles4 = reactNative.StyleSheet.create({
|
|
1190
1323
|
root: {
|
|
1191
1324
|
flexDirection: "row",
|
|
1192
1325
|
alignItems: "center",
|
|
@@ -1210,7 +1343,525 @@ var styles3 = reactNative.StyleSheet.create({
|
|
|
1210
1343
|
color: colors.white
|
|
1211
1344
|
}
|
|
1212
1345
|
});
|
|
1213
|
-
|
|
1346
|
+
|
|
1347
|
+
// src/utils/dateUtils.ts
|
|
1348
|
+
function startOfDay(date) {
|
|
1349
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
1350
|
+
}
|
|
1351
|
+
function isSameDay(a, b) {
|
|
1352
|
+
if (a == null || b == null) return false;
|
|
1353
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
1354
|
+
}
|
|
1355
|
+
function isSameMonth(a, b) {
|
|
1356
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
|
|
1357
|
+
}
|
|
1358
|
+
function addMonths(date, amount) {
|
|
1359
|
+
return new Date(date.getFullYear(), date.getMonth() + amount, 1);
|
|
1360
|
+
}
|
|
1361
|
+
function isBefore(a, b) {
|
|
1362
|
+
return startOfDay(a).getTime() < startOfDay(b).getTime();
|
|
1363
|
+
}
|
|
1364
|
+
function isAfter(a, b) {
|
|
1365
|
+
return startOfDay(a).getTime() > startOfDay(b).getTime();
|
|
1366
|
+
}
|
|
1367
|
+
function isWithinRange(date, start, end) {
|
|
1368
|
+
const time = startOfDay(date).getTime();
|
|
1369
|
+
return time >= startOfDay(start).getTime() && time <= startOfDay(end).getTime();
|
|
1370
|
+
}
|
|
1371
|
+
function isDateDisabled(date, min, max) {
|
|
1372
|
+
if (min && isBefore(date, min)) return true;
|
|
1373
|
+
if (max && isAfter(date, max)) return true;
|
|
1374
|
+
return false;
|
|
1375
|
+
}
|
|
1376
|
+
function formatDate(date) {
|
|
1377
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
1378
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
1379
|
+
return `${day}.${month}.${date.getFullYear()}`;
|
|
1380
|
+
}
|
|
1381
|
+
function getMonthMatrix(monthDate, weekStartsOn = 1) {
|
|
1382
|
+
const year = monthDate.getFullYear();
|
|
1383
|
+
const month = monthDate.getMonth();
|
|
1384
|
+
const firstOfMonth = new Date(year, month, 1);
|
|
1385
|
+
const firstWeekday = firstOfMonth.getDay();
|
|
1386
|
+
const leadingDays = (firstWeekday - weekStartsOn + 7) % 7;
|
|
1387
|
+
const gridStart = new Date(year, month, 1 - leadingDays);
|
|
1388
|
+
const weeks = [];
|
|
1389
|
+
let cursor = gridStart;
|
|
1390
|
+
for (let week = 0; week < 6; week += 1) {
|
|
1391
|
+
const days = [];
|
|
1392
|
+
for (let day = 0; day < 7; day += 1) {
|
|
1393
|
+
days.push(cursor);
|
|
1394
|
+
cursor = new Date(cursor.getFullYear(), cursor.getMonth(), cursor.getDate() + 1);
|
|
1395
|
+
}
|
|
1396
|
+
weeks.push(days);
|
|
1397
|
+
}
|
|
1398
|
+
return weeks;
|
|
1399
|
+
}
|
|
1400
|
+
var DEFAULT_MONTH_NAMES = [
|
|
1401
|
+
"\u0540\u0578\u0582\u0576\u057E\u0561\u0580",
|
|
1402
|
+
"\u0553\u0565\u057F\u0580\u057E\u0561\u0580",
|
|
1403
|
+
"\u0544\u0561\u0580\u057F",
|
|
1404
|
+
"\u0531\u057A\u0580\u056B\u056C",
|
|
1405
|
+
"\u0544\u0561\u0575\u056B\u057D",
|
|
1406
|
+
"\u0540\u0578\u0582\u0576\u056B\u057D",
|
|
1407
|
+
"\u0540\u0578\u0582\u056C\u056B\u057D",
|
|
1408
|
+
"\u0555\u0563\u0578\u057D\u057F\u0578\u057D",
|
|
1409
|
+
"\u054D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580",
|
|
1410
|
+
"\u0540\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580",
|
|
1411
|
+
"\u0546\u0578\u0575\u0565\u0574\u0562\u0565\u0580",
|
|
1412
|
+
"\u0534\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580"
|
|
1413
|
+
];
|
|
1414
|
+
var DEFAULT_WEEKDAY_LABELS = ["\u0535\u0550", "\u0535\u0554", "\u0549\u0550", "\u0540\u0546", "\u0548\u0552\u0550", "\u0547\u0532", "\u053F\u0550"];
|
|
1415
|
+
var EMPTY_RANGE = { start: null, end: null };
|
|
1416
|
+
var DEFAULT_WIDTH = 380;
|
|
1417
|
+
var TRIGGER_HEIGHT = 44;
|
|
1418
|
+
var TRIGGER_RADIUS = 60;
|
|
1419
|
+
var MENU_RADIUS2 = 20;
|
|
1420
|
+
var ICON_SIZE2 = 20;
|
|
1421
|
+
var NAV_ICON_SIZE = 20;
|
|
1422
|
+
var DAY_CELL_HEIGHT = 44;
|
|
1423
|
+
var DAY_CIRCLE_SIZE = 44;
|
|
1424
|
+
var DatePicker = react.forwardRef(
|
|
1425
|
+
function DatePicker2(props, forwardedRef) {
|
|
1426
|
+
const {
|
|
1427
|
+
placeholder = "Select date",
|
|
1428
|
+
open: openProp,
|
|
1429
|
+
defaultOpen = false,
|
|
1430
|
+
onOpenChange,
|
|
1431
|
+
disabled = false,
|
|
1432
|
+
closeOnSelect = true,
|
|
1433
|
+
minDate,
|
|
1434
|
+
maxDate,
|
|
1435
|
+
defaultVisibleMonth,
|
|
1436
|
+
monthNames = DEFAULT_MONTH_NAMES,
|
|
1437
|
+
weekdayLabels = DEFAULT_WEEKDAY_LABELS,
|
|
1438
|
+
formatValue = formatDate,
|
|
1439
|
+
weekStartsOn = 1,
|
|
1440
|
+
style,
|
|
1441
|
+
className,
|
|
1442
|
+
accessibilityLabel,
|
|
1443
|
+
// Pulled out only to keep them off `rest` (which is spread onto the root View);
|
|
1444
|
+
// the real values are read from `props` directly below to preserve discriminated typing.
|
|
1445
|
+
range: _range,
|
|
1446
|
+
value: _value,
|
|
1447
|
+
defaultValue: _defaultValue,
|
|
1448
|
+
onValueChange: _onValueChange,
|
|
1449
|
+
...rest
|
|
1450
|
+
} = props;
|
|
1451
|
+
const isRange = props.range === true;
|
|
1452
|
+
const valueProp = props.value;
|
|
1453
|
+
const rootRef = react.useRef(null);
|
|
1454
|
+
const triggerRef = react.useRef(null);
|
|
1455
|
+
const setRootRef = react.useMemo(() => mergeRefs(rootRef, forwardedRef), [forwardedRef]);
|
|
1456
|
+
const isOpenControlled = typeof openProp === "boolean";
|
|
1457
|
+
const isValueControlled = valueProp !== void 0;
|
|
1458
|
+
const [uncontrolledSingle, setUncontrolledSingle] = react.useState(
|
|
1459
|
+
!isRange ? props.defaultValue ?? null : null
|
|
1460
|
+
);
|
|
1461
|
+
const [uncontrolledRange, setUncontrolledRange] = react.useState(
|
|
1462
|
+
isRange ? props.defaultValue ?? EMPTY_RANGE : EMPTY_RANGE
|
|
1463
|
+
);
|
|
1464
|
+
const [uncontrolledOpen, setUncontrolledOpen] = react.useState(defaultOpen);
|
|
1465
|
+
const [hoveredDayKey, setHoveredDayKey] = react.useState(null);
|
|
1466
|
+
const rangeValue = isRange ? isValueControlled ? valueProp ?? EMPTY_RANGE : uncontrolledRange : EMPTY_RANGE;
|
|
1467
|
+
const singleValue = !isRange ? isValueControlled ? valueProp ?? null : uncontrolledSingle : null;
|
|
1468
|
+
const isOpen = isOpenControlled ? openProp : uncontrolledOpen;
|
|
1469
|
+
const [visibleMonth, setVisibleMonth] = react.useState(() => {
|
|
1470
|
+
const anchor = defaultVisibleMonth ?? (isRange ? rangeValue.start : singleValue) ?? /* @__PURE__ */ new Date();
|
|
1471
|
+
return new Date(anchor.getFullYear(), anchor.getMonth(), 1);
|
|
1472
|
+
});
|
|
1473
|
+
useApplyWebClassName(rootRef, className);
|
|
1474
|
+
const setOpen = react.useCallback(
|
|
1475
|
+
(next) => {
|
|
1476
|
+
if (!isOpenControlled) setUncontrolledOpen(next);
|
|
1477
|
+
onOpenChange?.(next);
|
|
1478
|
+
if (next) {
|
|
1479
|
+
const anchor = (isRange ? rangeValue.start : singleValue) ?? /* @__PURE__ */ new Date();
|
|
1480
|
+
setVisibleMonth(new Date(anchor.getFullYear(), anchor.getMonth(), 1));
|
|
1481
|
+
} else {
|
|
1482
|
+
setHoveredDayKey(null);
|
|
1483
|
+
}
|
|
1484
|
+
},
|
|
1485
|
+
[isOpenControlled, isRange, onOpenChange, rangeValue.start, singleValue]
|
|
1486
|
+
);
|
|
1487
|
+
react.useEffect(() => {
|
|
1488
|
+
if (reactNative.Platform.OS !== "web" || !isOpen) return;
|
|
1489
|
+
const handlePointerDown = (event) => {
|
|
1490
|
+
const root = rootRef.current;
|
|
1491
|
+
const target = event.target;
|
|
1492
|
+
if (root?.contains && target instanceof Node && !root.contains(target)) {
|
|
1493
|
+
setOpen(false);
|
|
1494
|
+
}
|
|
1495
|
+
};
|
|
1496
|
+
document.addEventListener("mousedown", handlePointerDown);
|
|
1497
|
+
document.addEventListener("touchstart", handlePointerDown);
|
|
1498
|
+
return () => {
|
|
1499
|
+
document.removeEventListener("mousedown", handlePointerDown);
|
|
1500
|
+
document.removeEventListener("touchstart", handlePointerDown);
|
|
1501
|
+
};
|
|
1502
|
+
}, [isOpen, setOpen]);
|
|
1503
|
+
const focusTrigger = react.useCallback(() => {
|
|
1504
|
+
const node = triggerRef.current;
|
|
1505
|
+
node?.focus?.();
|
|
1506
|
+
}, []);
|
|
1507
|
+
const closeAndFocusTrigger = react.useCallback(() => {
|
|
1508
|
+
setOpen(false);
|
|
1509
|
+
focusTrigger();
|
|
1510
|
+
}, [focusTrigger, setOpen]);
|
|
1511
|
+
react.useEffect(() => {
|
|
1512
|
+
if (reactNative.Platform.OS !== "web" || !isOpen) return;
|
|
1513
|
+
const handleKeyDown = (event) => {
|
|
1514
|
+
if (event.key === "Escape") {
|
|
1515
|
+
event.preventDefault();
|
|
1516
|
+
closeAndFocusTrigger();
|
|
1517
|
+
}
|
|
1518
|
+
};
|
|
1519
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
1520
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
1521
|
+
}, [isOpen, closeAndFocusTrigger]);
|
|
1522
|
+
const handleTriggerPress = () => {
|
|
1523
|
+
if (disabled) return;
|
|
1524
|
+
setOpen(!isOpen);
|
|
1525
|
+
};
|
|
1526
|
+
const handleDayPress = react.useCallback(
|
|
1527
|
+
(day) => {
|
|
1528
|
+
if (disabled || isDateDisabled(day, minDate, maxDate)) return;
|
|
1529
|
+
const picked = startOfDay(day);
|
|
1530
|
+
if (!isRange) {
|
|
1531
|
+
if (!isValueControlled) setUncontrolledSingle(picked);
|
|
1532
|
+
props.onValueChange?.(picked);
|
|
1533
|
+
if (closeOnSelect) setOpen(false);
|
|
1534
|
+
return;
|
|
1535
|
+
}
|
|
1536
|
+
const { start, end } = rangeValue;
|
|
1537
|
+
const startingNewRange = !start || start && end;
|
|
1538
|
+
const nextRange = startingNewRange ? { start: picked, end: null } : isBefore(picked, start) ? { start: picked, end: null } : { start, end: picked };
|
|
1539
|
+
if (!isValueControlled) setUncontrolledRange(nextRange);
|
|
1540
|
+
props.onValueChange?.(nextRange);
|
|
1541
|
+
if (closeOnSelect && nextRange.start && nextRange.end) setOpen(false);
|
|
1542
|
+
},
|
|
1543
|
+
[
|
|
1544
|
+
closeOnSelect,
|
|
1545
|
+
disabled,
|
|
1546
|
+
isRange,
|
|
1547
|
+
isValueControlled,
|
|
1548
|
+
maxDate,
|
|
1549
|
+
minDate,
|
|
1550
|
+
props,
|
|
1551
|
+
rangeValue,
|
|
1552
|
+
setOpen
|
|
1553
|
+
]
|
|
1554
|
+
);
|
|
1555
|
+
const handlePrevMonth = () => setVisibleMonth((current) => addMonths(current, -1));
|
|
1556
|
+
const handleNextMonth = () => setVisibleMonth((current) => addMonths(current, 1));
|
|
1557
|
+
const weeks = react.useMemo(
|
|
1558
|
+
() => getMonthMatrix(visibleMonth, weekStartsOn),
|
|
1559
|
+
[visibleMonth, weekStartsOn]
|
|
1560
|
+
);
|
|
1561
|
+
const today = react.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
|
|
1562
|
+
const hasValue = isRange ? rangeValue.start != null : singleValue != null;
|
|
1563
|
+
const triggerLabel = isRange ? rangeValue.start && rangeValue.end ? `${formatValue(rangeValue.start)} - ${formatValue(rangeValue.end)}` : rangeValue.start ? `${formatValue(rangeValue.start)} - ...` : placeholder : singleValue ? formatValue(singleValue) : placeholder;
|
|
1564
|
+
const triggerBorderColor = isOpen ? colors.primaryMuted : colors.grey700;
|
|
1565
|
+
const triggerTextColor = hasValue ? colors.white : colors.grey100;
|
|
1566
|
+
const resolvedAccessibilityLabel = accessibilityLabel ?? placeholder;
|
|
1567
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1568
|
+
reactNative.View,
|
|
1569
|
+
{
|
|
1570
|
+
...rest,
|
|
1571
|
+
ref: setRootRef,
|
|
1572
|
+
style: [styles5.root, isOpen && styles5.rootOpen, disabled && styles5.disabled, style],
|
|
1573
|
+
accessibilityState: { disabled, expanded: isOpen },
|
|
1574
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles5.triggerWrap, isOpen && styles5.triggerWrapOpen], children: [
|
|
1575
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1576
|
+
reactNative.Pressable,
|
|
1577
|
+
{
|
|
1578
|
+
ref: triggerRef,
|
|
1579
|
+
onPress: handleTriggerPress,
|
|
1580
|
+
disabled,
|
|
1581
|
+
accessibilityRole: "button",
|
|
1582
|
+
accessibilityLabel: resolvedAccessibilityLabel,
|
|
1583
|
+
accessibilityState: { disabled, expanded: isOpen },
|
|
1584
|
+
style: [
|
|
1585
|
+
styles5.trigger,
|
|
1586
|
+
{ borderColor: triggerBorderColor, backgroundColor: colors.grey700 }
|
|
1587
|
+
],
|
|
1588
|
+
children: [
|
|
1589
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles5.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: triggerLabel }),
|
|
1590
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles5.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(CalendarOutlineIcon, { size: ICON_SIZE2, color: colors.grey100 }) })
|
|
1591
|
+
]
|
|
1592
|
+
}
|
|
1593
|
+
),
|
|
1594
|
+
isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles5.menu, children: [
|
|
1595
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles5.calendarHeader, children: [
|
|
1596
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1597
|
+
reactNative.Pressable,
|
|
1598
|
+
{
|
|
1599
|
+
onPress: handlePrevMonth,
|
|
1600
|
+
hitSlop: 8,
|
|
1601
|
+
accessibilityRole: "button",
|
|
1602
|
+
accessibilityLabel: "Previous month",
|
|
1603
|
+
style: styles5.navButton,
|
|
1604
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, { size: NAV_ICON_SIZE, color: colors.white })
|
|
1605
|
+
}
|
|
1606
|
+
),
|
|
1607
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.Text, { style: styles5.monthHeading, children: [
|
|
1608
|
+
monthNames[visibleMonth.getMonth()],
|
|
1609
|
+
" ",
|
|
1610
|
+
visibleMonth.getFullYear()
|
|
1611
|
+
] }),
|
|
1612
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1613
|
+
reactNative.Pressable,
|
|
1614
|
+
{
|
|
1615
|
+
onPress: handleNextMonth,
|
|
1616
|
+
hitSlop: 8,
|
|
1617
|
+
accessibilityRole: "button",
|
|
1618
|
+
accessibilityLabel: "Next month",
|
|
1619
|
+
style: styles5.navButton,
|
|
1620
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles5.navIconMirror, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, { size: NAV_ICON_SIZE, color: colors.white }) })
|
|
1621
|
+
}
|
|
1622
|
+
)
|
|
1623
|
+
] }),
|
|
1624
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { children: [
|
|
1625
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles5.weekdayRow, children: weekdayLabels.map((weekdayLabel, index) => /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles5.dayCellWrap, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles5.weekdayText, children: weekdayLabel }) }, `${weekdayLabel}-${index}`)) }),
|
|
1626
|
+
weeks.map((week, weekIndex) => {
|
|
1627
|
+
let rangeHighlightStyle = null;
|
|
1628
|
+
if (isRange && rangeValue.start && rangeValue.end) {
|
|
1629
|
+
const rangeIndices = week.reduce((acc, day, index) => {
|
|
1630
|
+
if (isWithinRange(day, rangeValue.start, rangeValue.end)) {
|
|
1631
|
+
acc.push(index);
|
|
1632
|
+
}
|
|
1633
|
+
return acc;
|
|
1634
|
+
}, []);
|
|
1635
|
+
if (rangeIndices.length > 0) {
|
|
1636
|
+
const first = rangeIndices[0];
|
|
1637
|
+
const last = rangeIndices[rangeIndices.length - 1];
|
|
1638
|
+
const startsHere = isSameDay(week[first], rangeValue.start);
|
|
1639
|
+
const endsHere = isSameDay(week[last], rangeValue.end);
|
|
1640
|
+
const cellPct = 100 / 7;
|
|
1641
|
+
const halfCellPct = cellPct / 2;
|
|
1642
|
+
let leftPct = first * cellPct;
|
|
1643
|
+
let widthPct = (last - first + 1) * cellPct;
|
|
1644
|
+
if (startsHere) {
|
|
1645
|
+
leftPct += halfCellPct;
|
|
1646
|
+
widthPct -= halfCellPct;
|
|
1647
|
+
}
|
|
1648
|
+
if (endsHere) {
|
|
1649
|
+
widthPct -= halfCellPct;
|
|
1650
|
+
}
|
|
1651
|
+
if (widthPct > 0) {
|
|
1652
|
+
rangeHighlightStyle = {
|
|
1653
|
+
left: `${leftPct}%`,
|
|
1654
|
+
width: `${widthPct}%`
|
|
1655
|
+
};
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
}
|
|
1659
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1660
|
+
reactNative.View,
|
|
1661
|
+
{
|
|
1662
|
+
style: [styles5.weekRow, weekIndex > 0 && styles5.weekRowSpaced],
|
|
1663
|
+
children: [
|
|
1664
|
+
rangeHighlightStyle ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1665
|
+
reactNative.View,
|
|
1666
|
+
{
|
|
1667
|
+
pointerEvents: "none",
|
|
1668
|
+
style: [styles5.rangeHighlight, rangeHighlightStyle]
|
|
1669
|
+
}
|
|
1670
|
+
) : null,
|
|
1671
|
+
week.map((day, dayIndex) => {
|
|
1672
|
+
const inCurrentMonth = isSameMonth(day, visibleMonth);
|
|
1673
|
+
const isToday = isSameDay(day, today);
|
|
1674
|
+
const isSelectedSingle = !isRange && isSameDay(day, singleValue);
|
|
1675
|
+
const isRangeStart = isRange && isSameDay(day, rangeValue.start);
|
|
1676
|
+
const isRangeEnd = isRange && isSameDay(day, rangeValue.end);
|
|
1677
|
+
const isSelectedEndpoint = isSelectedSingle || isRangeStart || isRangeEnd;
|
|
1678
|
+
const dayDisabled = disabled || isDateDisabled(day, minDate, maxDate);
|
|
1679
|
+
const dayKey = startOfDay(day).getTime();
|
|
1680
|
+
const isHovered = !dayDisabled && !isSelectedEndpoint && hoveredDayKey === dayKey;
|
|
1681
|
+
const dayTextColor = isSelectedEndpoint ? colors.white : dayDisabled ? colors.grey400 : isToday ? colors.primary : !inCurrentMonth ? colors.grey300 : colors.white;
|
|
1682
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1683
|
+
reactNative.Pressable,
|
|
1684
|
+
{
|
|
1685
|
+
onPress: () => handleDayPress(day),
|
|
1686
|
+
disabled: dayDisabled,
|
|
1687
|
+
onHoverIn: () => setHoveredDayKey(dayKey),
|
|
1688
|
+
onHoverOut: () => setHoveredDayKey((current) => current === dayKey ? null : current),
|
|
1689
|
+
onPressIn: () => setHoveredDayKey(dayKey),
|
|
1690
|
+
onPressOut: () => setHoveredDayKey((current) => current === dayKey ? null : current),
|
|
1691
|
+
style: styles5.dayCellWrap,
|
|
1692
|
+
accessibilityRole: "button",
|
|
1693
|
+
accessibilityLabel: formatValue(day),
|
|
1694
|
+
accessibilityState: {
|
|
1695
|
+
disabled: dayDisabled,
|
|
1696
|
+
selected: isSelectedEndpoint
|
|
1697
|
+
},
|
|
1698
|
+
children: [
|
|
1699
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1700
|
+
reactNative.View,
|
|
1701
|
+
{
|
|
1702
|
+
style: [
|
|
1703
|
+
styles5.dayCircle,
|
|
1704
|
+
isSelectedEndpoint && styles5.dayCircleSelected,
|
|
1705
|
+
isHovered && styles5.dayCircleHovered
|
|
1706
|
+
],
|
|
1707
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles5.dayText, { color: dayTextColor }], children: day.getDate() })
|
|
1708
|
+
}
|
|
1709
|
+
),
|
|
1710
|
+
isToday && !isSelectedEndpoint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles5.todayDot }) : null
|
|
1711
|
+
]
|
|
1712
|
+
},
|
|
1713
|
+
dayIndex
|
|
1714
|
+
);
|
|
1715
|
+
})
|
|
1716
|
+
]
|
|
1717
|
+
},
|
|
1718
|
+
weekIndex
|
|
1719
|
+
);
|
|
1720
|
+
})
|
|
1721
|
+
] })
|
|
1722
|
+
] }) : null
|
|
1723
|
+
] })
|
|
1724
|
+
}
|
|
1725
|
+
);
|
|
1726
|
+
}
|
|
1727
|
+
);
|
|
1728
|
+
var styles5 = reactNative.StyleSheet.create({
|
|
1729
|
+
root: {
|
|
1730
|
+
width: DEFAULT_WIDTH,
|
|
1731
|
+
gap: 8,
|
|
1732
|
+
alignSelf: "flex-start"
|
|
1733
|
+
},
|
|
1734
|
+
rootOpen: {
|
|
1735
|
+
zIndex: 30
|
|
1736
|
+
},
|
|
1737
|
+
disabled: {
|
|
1738
|
+
opacity: 0.6
|
|
1739
|
+
},
|
|
1740
|
+
triggerWrap: {
|
|
1741
|
+
position: "relative",
|
|
1742
|
+
zIndex: 1
|
|
1743
|
+
},
|
|
1744
|
+
triggerWrapOpen: {
|
|
1745
|
+
zIndex: 20
|
|
1746
|
+
},
|
|
1747
|
+
trigger: {
|
|
1748
|
+
height: TRIGGER_HEIGHT,
|
|
1749
|
+
borderRadius: TRIGGER_RADIUS,
|
|
1750
|
+
borderWidth: 1,
|
|
1751
|
+
paddingVertical: 10,
|
|
1752
|
+
paddingHorizontal: 16,
|
|
1753
|
+
flexDirection: "row",
|
|
1754
|
+
alignItems: "center",
|
|
1755
|
+
gap: 10,
|
|
1756
|
+
overflow: "hidden"
|
|
1757
|
+
},
|
|
1758
|
+
triggerText: {
|
|
1759
|
+
...datePickerTypography.field,
|
|
1760
|
+
flex: 1,
|
|
1761
|
+
minWidth: 0
|
|
1762
|
+
},
|
|
1763
|
+
iconSlot: {
|
|
1764
|
+
width: ICON_SIZE2,
|
|
1765
|
+
height: ICON_SIZE2,
|
|
1766
|
+
alignItems: "center",
|
|
1767
|
+
justifyContent: "center",
|
|
1768
|
+
flexShrink: 0
|
|
1769
|
+
},
|
|
1770
|
+
menu: {
|
|
1771
|
+
position: "absolute",
|
|
1772
|
+
top: "100%",
|
|
1773
|
+
left: 0,
|
|
1774
|
+
right: 0,
|
|
1775
|
+
marginTop: 8,
|
|
1776
|
+
zIndex: 10,
|
|
1777
|
+
borderRadius: MENU_RADIUS2,
|
|
1778
|
+
padding: 12,
|
|
1779
|
+
gap: 0,
|
|
1780
|
+
backgroundColor: colors.grey700,
|
|
1781
|
+
...reactNative.Platform.select({
|
|
1782
|
+
web: {
|
|
1783
|
+
boxShadow: `0 8px 24px ${colors.black}73`
|
|
1784
|
+
},
|
|
1785
|
+
default: {
|
|
1786
|
+
elevation: 8
|
|
1787
|
+
}
|
|
1788
|
+
})
|
|
1789
|
+
},
|
|
1790
|
+
calendarHeader: {
|
|
1791
|
+
height: 36,
|
|
1792
|
+
flexDirection: "row",
|
|
1793
|
+
alignItems: "center",
|
|
1794
|
+
justifyContent: "space-between"
|
|
1795
|
+
},
|
|
1796
|
+
navButton: {
|
|
1797
|
+
width: 36,
|
|
1798
|
+
height: 36,
|
|
1799
|
+
alignItems: "center",
|
|
1800
|
+
justifyContent: "center"
|
|
1801
|
+
},
|
|
1802
|
+
navIconMirror: {
|
|
1803
|
+
transform: [{ scaleX: -1 }]
|
|
1804
|
+
},
|
|
1805
|
+
monthHeading: {
|
|
1806
|
+
...datePickerTypography.monthHeading,
|
|
1807
|
+
color: colors.white,
|
|
1808
|
+
textAlign: "center"
|
|
1809
|
+
},
|
|
1810
|
+
weekdayRow: {
|
|
1811
|
+
flexDirection: "row"
|
|
1812
|
+
},
|
|
1813
|
+
weekdayText: {
|
|
1814
|
+
...datePickerTypography.weekday,
|
|
1815
|
+
color: colors.grey300,
|
|
1816
|
+
textAlign: "center",
|
|
1817
|
+
textTransform: "uppercase"
|
|
1818
|
+
},
|
|
1819
|
+
weekRow: {
|
|
1820
|
+
flexDirection: "row",
|
|
1821
|
+
position: "relative"
|
|
1822
|
+
},
|
|
1823
|
+
weekRowSpaced: {
|
|
1824
|
+
marginTop: 8
|
|
1825
|
+
},
|
|
1826
|
+
rangeHighlight: {
|
|
1827
|
+
position: "absolute",
|
|
1828
|
+
top: (DAY_CELL_HEIGHT - DAY_CIRCLE_SIZE) / 2,
|
|
1829
|
+
bottom: (DAY_CELL_HEIGHT - DAY_CIRCLE_SIZE) / 2,
|
|
1830
|
+
borderRadius: DAY_CIRCLE_SIZE / 2,
|
|
1831
|
+
backgroundColor: colors.primaryHover
|
|
1832
|
+
},
|
|
1833
|
+
dayCellWrap: {
|
|
1834
|
+
flex: 1,
|
|
1835
|
+
height: DAY_CELL_HEIGHT,
|
|
1836
|
+
alignItems: "center",
|
|
1837
|
+
justifyContent: "center"
|
|
1838
|
+
},
|
|
1839
|
+
dayCircle: {
|
|
1840
|
+
width: DAY_CIRCLE_SIZE,
|
|
1841
|
+
height: DAY_CIRCLE_SIZE,
|
|
1842
|
+
borderRadius: DAY_CIRCLE_SIZE / 2,
|
|
1843
|
+
alignItems: "center",
|
|
1844
|
+
justifyContent: "center"
|
|
1845
|
+
},
|
|
1846
|
+
dayCircleSelected: {
|
|
1847
|
+
backgroundColor: colors.primary
|
|
1848
|
+
},
|
|
1849
|
+
dayCircleHovered: {
|
|
1850
|
+
backgroundColor: colors.grey600
|
|
1851
|
+
},
|
|
1852
|
+
dayText: {
|
|
1853
|
+
...datePickerTypography.day
|
|
1854
|
+
},
|
|
1855
|
+
todayDot: {
|
|
1856
|
+
position: "absolute",
|
|
1857
|
+
bottom: 2,
|
|
1858
|
+
width: 4,
|
|
1859
|
+
height: 4,
|
|
1860
|
+
borderRadius: 2,
|
|
1861
|
+
backgroundColor: colors.primary
|
|
1862
|
+
}
|
|
1863
|
+
});
|
|
1864
|
+
var DEFAULT_WIDTH2 = 308;
|
|
1214
1865
|
var sizeConfig2 = {
|
|
1215
1866
|
lg: {
|
|
1216
1867
|
height: 44,
|
|
@@ -1334,13 +1985,13 @@ var Input = react.forwardRef(function Input2({
|
|
|
1334
1985
|
const rightIconNode = rightIcon ?? /* @__PURE__ */ jsxRuntime.jsx(ShowIcon, { size: metrics.iconSize, color: chrome.rightIconColor });
|
|
1335
1986
|
useApplyWebClassName(rootRef, className);
|
|
1336
1987
|
useApplyWebClassName(inputRef, inputClassName);
|
|
1337
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [
|
|
1338
|
-
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
1988
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles6.root, disabled && styles6.disabled, style], children: [
|
|
1989
|
+
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles6.label, { color: chrome.labelColor }], children: label }) : null,
|
|
1339
1990
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1340
1991
|
reactNative.View,
|
|
1341
1992
|
{
|
|
1342
1993
|
style: [
|
|
1343
|
-
|
|
1994
|
+
styles6.field,
|
|
1344
1995
|
{
|
|
1345
1996
|
height: metrics.height,
|
|
1346
1997
|
borderRadius: metrics.borderRadius,
|
|
@@ -1355,7 +2006,7 @@ var Input = react.forwardRef(function Input2({
|
|
|
1355
2006
|
fieldStyle
|
|
1356
2007
|
],
|
|
1357
2008
|
children: [
|
|
1358
|
-
hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [
|
|
2009
|
+
hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles6.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }], children: leftIconNode }) : null,
|
|
1359
2010
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1360
2011
|
reactNative.TextInput,
|
|
1361
2012
|
{
|
|
@@ -1379,11 +2030,11 @@ var Input = react.forwardRef(function Input2({
|
|
|
1379
2030
|
onBlur?.(event);
|
|
1380
2031
|
},
|
|
1381
2032
|
style: [
|
|
1382
|
-
|
|
2033
|
+
styles6.input,
|
|
1383
2034
|
metrics.text,
|
|
1384
2035
|
{ color: chrome.textColor },
|
|
1385
|
-
reactNative.Platform.OS === "web" ?
|
|
1386
|
-
reactNative.Platform.OS === "android" ?
|
|
2036
|
+
reactNative.Platform.OS === "web" ? styles6.inputWeb : null,
|
|
2037
|
+
reactNative.Platform.OS === "android" ? styles6.inputAndroid : null,
|
|
1387
2038
|
inputStyle
|
|
1388
2039
|
],
|
|
1389
2040
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
@@ -1395,22 +2046,22 @@ var Input = react.forwardRef(function Input2({
|
|
|
1395
2046
|
{
|
|
1396
2047
|
onPress: onRightIconPress,
|
|
1397
2048
|
disabled,
|
|
1398
|
-
style: [
|
|
2049
|
+
style: [styles6.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }],
|
|
1399
2050
|
accessibilityRole: "button",
|
|
1400
2051
|
accessibilityLabel: rightIconAccessibilityLabel,
|
|
1401
2052
|
hitSlop: 8,
|
|
1402
2053
|
children: rightIconNode
|
|
1403
2054
|
}
|
|
1404
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [
|
|
2055
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles6.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }], children: rightIconNode }) : null
|
|
1405
2056
|
]
|
|
1406
2057
|
}
|
|
1407
2058
|
),
|
|
1408
|
-
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
2059
|
+
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles6.hint, { color: chrome.hintColor }], children: hint }) : null
|
|
1409
2060
|
] });
|
|
1410
2061
|
});
|
|
1411
|
-
var
|
|
2062
|
+
var styles6 = reactNative.StyleSheet.create({
|
|
1412
2063
|
root: {
|
|
1413
|
-
width:
|
|
2064
|
+
width: DEFAULT_WIDTH2,
|
|
1414
2065
|
gap: 8,
|
|
1415
2066
|
alignSelf: "flex-start"
|
|
1416
2067
|
},
|
|
@@ -1445,13 +2096,13 @@ var styles4 = reactNative.StyleSheet.create({
|
|
|
1445
2096
|
...inputTypography.hint
|
|
1446
2097
|
}
|
|
1447
2098
|
});
|
|
1448
|
-
var
|
|
1449
|
-
var
|
|
1450
|
-
var
|
|
1451
|
-
var
|
|
2099
|
+
var DEFAULT_WIDTH3 = 308;
|
|
2100
|
+
var TRIGGER_HEIGHT2 = 44;
|
|
2101
|
+
var TRIGGER_RADIUS2 = 60;
|
|
2102
|
+
var MENU_RADIUS3 = 24;
|
|
1452
2103
|
var MENU_MAX_LIST_HEIGHT = 248;
|
|
1453
|
-
var
|
|
1454
|
-
var
|
|
2104
|
+
var ITEM_RADIUS2 = 12;
|
|
2105
|
+
var ICON_SIZE3 = 20;
|
|
1455
2106
|
var CHIP_GAP = 6;
|
|
1456
2107
|
var FALLBACK_ELLIPSIS_WIDTH = 20;
|
|
1457
2108
|
function itemBackground(state) {
|
|
@@ -1524,25 +2175,25 @@ function MultiValueChips({ options, disabled, onRemove }) {
|
|
|
1524
2175
|
const next = Math.ceil(event.nativeEvent.layout.width);
|
|
1525
2176
|
setEllipsisWidth((current) => current === next ? current : next);
|
|
1526
2177
|
};
|
|
1527
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
1528
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style:
|
|
2178
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles7.multiValueRoot, children: [
|
|
2179
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style: styles7.measureRow, children: [
|
|
1529
2180
|
options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1530
2181
|
reactNative.View,
|
|
1531
2182
|
{
|
|
1532
|
-
style:
|
|
2183
|
+
style: styles7.chip,
|
|
1533
2184
|
onLayout: (event) => handleChipLayout(option.value, event),
|
|
1534
2185
|
children: [
|
|
1535
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
1536
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
2186
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.chipLabel, numberOfLines: 1, children: option.label }),
|
|
2187
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.chipRemove, children: "\xD7" })
|
|
1537
2188
|
]
|
|
1538
2189
|
},
|
|
1539
2190
|
`measure-${option.value}`
|
|
1540
2191
|
)),
|
|
1541
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
2192
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.ellipsis, onLayout: handleEllipsisLayout, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.ellipsisText, children: "..." }) })
|
|
1542
2193
|
] }),
|
|
1543
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
1544
|
-
visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
1545
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
2194
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles7.chipsRow, onLayout: handleContainerLayout, children: [
|
|
2195
|
+
visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles7.chip, children: [
|
|
2196
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.chipLabel, numberOfLines: 1, children: option.label }),
|
|
1546
2197
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1547
2198
|
reactNative.Pressable,
|
|
1548
2199
|
{
|
|
@@ -1554,11 +2205,11 @@ function MultiValueChips({ options, disabled, onRemove }) {
|
|
|
1554
2205
|
hitSlop: 6,
|
|
1555
2206
|
accessibilityRole: "button",
|
|
1556
2207
|
accessibilityLabel: `Remove ${option.label}`,
|
|
1557
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
2208
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.chipRemove, children: "\xD7" })
|
|
1558
2209
|
}
|
|
1559
2210
|
)
|
|
1560
2211
|
] }, option.value)),
|
|
1561
|
-
hasOverflow ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
2212
|
+
hasOverflow ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.ellipsis, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.ellipsisText, children: "..." }) }) : null
|
|
1562
2213
|
] })
|
|
1563
2214
|
] });
|
|
1564
2215
|
}
|
|
@@ -1769,7 +2420,7 @@ var Select = react.forwardRef(
|
|
|
1769
2420
|
const leftIconNode = leftIcon ?? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1770
2421
|
UserIcon,
|
|
1771
2422
|
{
|
|
1772
|
-
size:
|
|
2423
|
+
size: ICON_SIZE3,
|
|
1773
2424
|
color: error ? colors.red : isOpen ? colors.primary : colors.grey100
|
|
1774
2425
|
}
|
|
1775
2426
|
);
|
|
@@ -1785,11 +2436,11 @@ var Select = react.forwardRef(
|
|
|
1785
2436
|
{
|
|
1786
2437
|
...rest,
|
|
1787
2438
|
ref: setRootRef,
|
|
1788
|
-
style: [
|
|
2439
|
+
style: [styles7.root, isOpen && styles7.rootOpen, disabled && styles7.disabled, style],
|
|
1789
2440
|
accessibilityState: { disabled, expanded: isOpen },
|
|
1790
2441
|
children: [
|
|
1791
|
-
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
1792
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [
|
|
2442
|
+
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles7.label, { color: labelColor }], children: label }) : null,
|
|
2443
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles7.triggerWrap, isOpen && styles7.triggerWrapOpen], children: [
|
|
1793
2444
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1794
2445
|
reactNative.Pressable,
|
|
1795
2446
|
{
|
|
@@ -1800,29 +2451,29 @@ var Select = react.forwardRef(
|
|
|
1800
2451
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
1801
2452
|
accessibilityState: { disabled, expanded: isOpen },
|
|
1802
2453
|
style: [
|
|
1803
|
-
|
|
2454
|
+
styles7.trigger,
|
|
1804
2455
|
{
|
|
1805
2456
|
borderColor: triggerBorderColor,
|
|
1806
2457
|
backgroundColor: colors.grey700
|
|
1807
2458
|
}
|
|
1808
2459
|
],
|
|
1809
2460
|
children: [
|
|
1810
|
-
hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
1811
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
2461
|
+
hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.iconSlot, children: leftIconNode }) : null,
|
|
2462
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.triggerContent, children: multiple && hasValue ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1812
2463
|
MultiValueChips,
|
|
1813
2464
|
{
|
|
1814
2465
|
options: selectedOptions,
|
|
1815
2466
|
disabled,
|
|
1816
2467
|
onRemove: handleRemoveChip
|
|
1817
2468
|
}
|
|
1818
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
1819
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [
|
|
2469
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles7.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: multiple ? placeholder : singleLabel }) }),
|
|
2470
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles7.iconSlot, isOpen && styles7.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: ICON_SIZE3, color: isOpen ? colors.primary : colors.grey100 }) })
|
|
1820
2471
|
]
|
|
1821
2472
|
}
|
|
1822
2473
|
),
|
|
1823
|
-
isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
1824
|
-
showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
1825
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
2474
|
+
isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles7.menu, children: [
|
|
2475
|
+
showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles7.searchField, children: [
|
|
2476
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: ICON_SIZE3, color: colors.grey100 }) }),
|
|
1826
2477
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1827
2478
|
reactNative.TextInput,
|
|
1828
2479
|
{
|
|
@@ -1833,9 +2484,9 @@ var Select = react.forwardRef(
|
|
|
1833
2484
|
placeholder: searchPlaceholder,
|
|
1834
2485
|
placeholderTextColor: colors.grey100,
|
|
1835
2486
|
style: [
|
|
1836
|
-
|
|
1837
|
-
reactNative.Platform.OS === "web" ?
|
|
1838
|
-
reactNative.Platform.OS === "android" ?
|
|
2487
|
+
styles7.searchInput,
|
|
2488
|
+
reactNative.Platform.OS === "web" ? styles7.searchInputWeb : null,
|
|
2489
|
+
reactNative.Platform.OS === "android" ? styles7.searchInputAndroid : null
|
|
1839
2490
|
],
|
|
1840
2491
|
accessibilityLabel: searchPlaceholder
|
|
1841
2492
|
}
|
|
@@ -1844,12 +2495,12 @@ var Select = react.forwardRef(
|
|
|
1844
2495
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1845
2496
|
reactNative.ScrollView,
|
|
1846
2497
|
{
|
|
1847
|
-
style:
|
|
1848
|
-
contentContainerStyle:
|
|
2498
|
+
style: styles7.optionList,
|
|
2499
|
+
contentContainerStyle: styles7.optionListContent,
|
|
1849
2500
|
keyboardShouldPersistTaps: "handled",
|
|
1850
2501
|
showsVerticalScrollIndicator: false,
|
|
1851
2502
|
children: [
|
|
1852
|
-
loading ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
2503
|
+
loading ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.statusText, children: "Loading..." }) }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles7.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.statusText, children: emptyText }) }) : null,
|
|
1853
2504
|
!loading && filteredOptions.map((option) => {
|
|
1854
2505
|
const isSelected = selectedValues.includes(option.value);
|
|
1855
2506
|
const isHovered = hoveredValue === option.value;
|
|
@@ -1866,14 +2517,14 @@ var Select = react.forwardRef(
|
|
|
1866
2517
|
accessibilityRole: multiple ? "checkbox" : "button",
|
|
1867
2518
|
accessibilityState: { selected: isSelected, checked: isSelected, disabled },
|
|
1868
2519
|
style: [
|
|
1869
|
-
|
|
2520
|
+
styles7.item,
|
|
1870
2521
|
{
|
|
1871
2522
|
backgroundColor: itemBackground(visualState)
|
|
1872
2523
|
}
|
|
1873
2524
|
],
|
|
1874
2525
|
children: [
|
|
1875
|
-
multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style:
|
|
1876
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
2526
|
+
multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles7.itemCheckbox, children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
|
|
2527
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.itemLabel, numberOfLines: 1, children: option.label })
|
|
1877
2528
|
]
|
|
1878
2529
|
},
|
|
1879
2530
|
option.value
|
|
@@ -1884,15 +2535,15 @@ var Select = react.forwardRef(
|
|
|
1884
2535
|
)
|
|
1885
2536
|
] }) : null
|
|
1886
2537
|
] }),
|
|
1887
|
-
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
2538
|
+
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles7.hint, { color: hintColor }], children: hint }) : null
|
|
1888
2539
|
]
|
|
1889
2540
|
}
|
|
1890
2541
|
);
|
|
1891
2542
|
}
|
|
1892
2543
|
);
|
|
1893
|
-
var
|
|
2544
|
+
var styles7 = reactNative.StyleSheet.create({
|
|
1894
2545
|
root: {
|
|
1895
|
-
width:
|
|
2546
|
+
width: DEFAULT_WIDTH3,
|
|
1896
2547
|
gap: 8,
|
|
1897
2548
|
alignSelf: "flex-start"
|
|
1898
2549
|
},
|
|
@@ -1913,8 +2564,8 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
1913
2564
|
zIndex: 20
|
|
1914
2565
|
},
|
|
1915
2566
|
trigger: {
|
|
1916
|
-
height:
|
|
1917
|
-
borderRadius:
|
|
2567
|
+
height: TRIGGER_HEIGHT2,
|
|
2568
|
+
borderRadius: TRIGGER_RADIUS2,
|
|
1918
2569
|
borderWidth: 1,
|
|
1919
2570
|
paddingVertical: 12,
|
|
1920
2571
|
paddingHorizontal: 16,
|
|
@@ -1980,8 +2631,8 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
1980
2631
|
lineHeight: 16
|
|
1981
2632
|
},
|
|
1982
2633
|
iconSlot: {
|
|
1983
|
-
width:
|
|
1984
|
-
height:
|
|
2634
|
+
width: ICON_SIZE3,
|
|
2635
|
+
height: ICON_SIZE3,
|
|
1985
2636
|
alignItems: "center",
|
|
1986
2637
|
justifyContent: "center",
|
|
1987
2638
|
flexShrink: 0
|
|
@@ -1996,7 +2647,7 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
1996
2647
|
right: 0,
|
|
1997
2648
|
marginTop: 8,
|
|
1998
2649
|
zIndex: 10,
|
|
1999
|
-
borderRadius:
|
|
2650
|
+
borderRadius: MENU_RADIUS3,
|
|
2000
2651
|
padding: 12,
|
|
2001
2652
|
gap: 8,
|
|
2002
2653
|
backgroundColor: colors.grey700,
|
|
@@ -2026,7 +2677,7 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
2026
2677
|
},
|
|
2027
2678
|
searchField: {
|
|
2028
2679
|
height: 40,
|
|
2029
|
-
borderRadius:
|
|
2680
|
+
borderRadius: ITEM_RADIUS2,
|
|
2030
2681
|
paddingHorizontal: 12,
|
|
2031
2682
|
flexDirection: "row",
|
|
2032
2683
|
alignItems: "center",
|
|
@@ -2048,7 +2699,7 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
2048
2699
|
},
|
|
2049
2700
|
item: {
|
|
2050
2701
|
minHeight: 43,
|
|
2051
|
-
borderRadius:
|
|
2702
|
+
borderRadius: ITEM_RADIUS2,
|
|
2052
2703
|
padding: 12,
|
|
2053
2704
|
flexDirection: "row",
|
|
2054
2705
|
alignItems: "center",
|
|
@@ -2066,7 +2717,7 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
2066
2717
|
...selectTypography.hint
|
|
2067
2718
|
}
|
|
2068
2719
|
});
|
|
2069
|
-
var
|
|
2720
|
+
var DEFAULT_WIDTH4 = 308;
|
|
2070
2721
|
var FIELD_HEIGHT = 100;
|
|
2071
2722
|
var FIELD_RADIUS = 16;
|
|
2072
2723
|
var FIELD_PADDING_VERTICAL = 12;
|
|
@@ -2152,13 +2803,13 @@ var Textarea = react.forwardRef(function Textarea2({
|
|
|
2152
2803
|
const resolvedAccessibilityLabel = accessibilityLabel ?? (showLabel ? void 0 : label);
|
|
2153
2804
|
useApplyWebClassName(rootRef, className);
|
|
2154
2805
|
useApplyWebClassName(inputRef, inputClassName);
|
|
2155
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [
|
|
2156
|
-
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
2806
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles8.root, disabled && styles8.disabled, style], children: [
|
|
2807
|
+
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles8.label, { color: chrome.labelColor }], children: label }) : null,
|
|
2157
2808
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2158
2809
|
reactNative.View,
|
|
2159
2810
|
{
|
|
2160
2811
|
style: [
|
|
2161
|
-
|
|
2812
|
+
styles8.field,
|
|
2162
2813
|
{
|
|
2163
2814
|
borderColor: chrome.borderColor,
|
|
2164
2815
|
backgroundColor: chrome.backgroundColor
|
|
@@ -2190,11 +2841,11 @@ var Textarea = react.forwardRef(function Textarea2({
|
|
|
2190
2841
|
onBlur?.(event);
|
|
2191
2842
|
},
|
|
2192
2843
|
style: [
|
|
2193
|
-
|
|
2844
|
+
styles8.input,
|
|
2194
2845
|
textareaTypography.field,
|
|
2195
2846
|
{ color: chrome.textColor },
|
|
2196
|
-
reactNative.Platform.OS === "web" ?
|
|
2197
|
-
reactNative.Platform.OS === "android" ?
|
|
2847
|
+
reactNative.Platform.OS === "web" ? styles8.inputWeb : null,
|
|
2848
|
+
reactNative.Platform.OS === "android" ? styles8.inputAndroid : null,
|
|
2198
2849
|
inputStyle
|
|
2199
2850
|
],
|
|
2200
2851
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
@@ -2203,12 +2854,12 @@ var Textarea = react.forwardRef(function Textarea2({
|
|
|
2203
2854
|
)
|
|
2204
2855
|
}
|
|
2205
2856
|
),
|
|
2206
|
-
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
2857
|
+
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles8.hint, { color: chrome.hintColor }], children: hint }) : null
|
|
2207
2858
|
] });
|
|
2208
2859
|
});
|
|
2209
|
-
var
|
|
2860
|
+
var styles8 = reactNative.StyleSheet.create({
|
|
2210
2861
|
root: {
|
|
2211
|
-
width:
|
|
2862
|
+
width: DEFAULT_WIDTH4,
|
|
2212
2863
|
gap: 8,
|
|
2213
2864
|
alignSelf: "flex-start"
|
|
2214
2865
|
},
|
|
@@ -2306,13 +2957,13 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
2306
2957
|
accessibilityRole: "switch",
|
|
2307
2958
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
2308
2959
|
accessibilityState: { checked: isActive, disabled },
|
|
2309
|
-
style: [
|
|
2960
|
+
style: [styles9.pressable, disabled && styles9.disabled, style],
|
|
2310
2961
|
children: [
|
|
2311
2962
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2312
2963
|
reactNative.Animated.View,
|
|
2313
2964
|
{
|
|
2314
2965
|
style: [
|
|
2315
|
-
|
|
2966
|
+
styles9.track,
|
|
2316
2967
|
{
|
|
2317
2968
|
backgroundColor: trackBackgroundColor
|
|
2318
2969
|
}
|
|
@@ -2321,7 +2972,7 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
2321
2972
|
reactNative.Animated.View,
|
|
2322
2973
|
{
|
|
2323
2974
|
style: [
|
|
2324
|
-
|
|
2975
|
+
styles9.thumb,
|
|
2325
2976
|
{
|
|
2326
2977
|
transform: [{ translateX: thumbTranslateX }]
|
|
2327
2978
|
}
|
|
@@ -2330,12 +2981,12 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
2330
2981
|
)
|
|
2331
2982
|
}
|
|
2332
2983
|
),
|
|
2333
|
-
labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
2984
|
+
labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles9.label, labelStyle], children: labelContent }) : labelContent : null
|
|
2334
2985
|
]
|
|
2335
2986
|
}
|
|
2336
2987
|
);
|
|
2337
2988
|
});
|
|
2338
|
-
var
|
|
2989
|
+
var styles9 = reactNative.StyleSheet.create({
|
|
2339
2990
|
pressable: {
|
|
2340
2991
|
flexDirection: "row",
|
|
2341
2992
|
alignItems: "center",
|
|
@@ -2371,12 +3022,15 @@ exports.BellIcon = BellIcon;
|
|
|
2371
3022
|
exports.BuildingIcon = BuildingIcon;
|
|
2372
3023
|
exports.Button = Button;
|
|
2373
3024
|
exports.CalendarIcon = CalendarIcon;
|
|
3025
|
+
exports.CalendarOutlineIcon = CalendarOutlineIcon;
|
|
2374
3026
|
exports.CameraIcon = CameraIcon;
|
|
2375
3027
|
exports.CheckBadgeIcon = CheckBadgeIcon;
|
|
2376
3028
|
exports.CheckIcon = CheckIcon;
|
|
2377
3029
|
exports.Checkbox = Checkbox;
|
|
2378
3030
|
exports.ChevronDownIcon = ChevronDownIcon;
|
|
3031
|
+
exports.ChevronLeftIcon = ChevronLeftIcon;
|
|
2379
3032
|
exports.ClockIcon = ClockIcon;
|
|
3033
|
+
exports.DatePicker = DatePicker;
|
|
2380
3034
|
exports.FacebookIcon = FacebookIcon;
|
|
2381
3035
|
exports.HeartIcon = HeartIcon;
|
|
2382
3036
|
exports.HelpCircleIcon = HelpCircleIcon;
|
|
@@ -2389,6 +3043,7 @@ exports.LayoutGridIcon = LayoutGridIcon;
|
|
|
2389
3043
|
exports.LinkedInIcon = LinkedInIcon;
|
|
2390
3044
|
exports.LogOutIcon = LogOutIcon;
|
|
2391
3045
|
exports.MailIcon = MailIcon;
|
|
3046
|
+
exports.MenuItem = MenuItem;
|
|
2392
3047
|
exports.NavigateIcon = NavigateIcon;
|
|
2393
3048
|
exports.PhoneIcon = PhoneIcon;
|
|
2394
3049
|
exports.SearchIcon = SearchIcon;
|
|
@@ -2402,6 +3057,7 @@ exports.VideoIcon = VideoIcon;
|
|
|
2402
3057
|
exports.avatarTypography = avatarTypography;
|
|
2403
3058
|
exports.buttonTypography = buttonTypography;
|
|
2404
3059
|
exports.colors = colors;
|
|
3060
|
+
exports.datePickerTypography = datePickerTypography;
|
|
2405
3061
|
exports.fonts = fonts;
|
|
2406
3062
|
exports.getIconsByGroup = getIconsByGroup;
|
|
2407
3063
|
exports.grey = grey;
|