@ecohouse/ui 0.1.39 → 0.1.41

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/index.cjs CHANGED
@@ -30306,40 +30306,6 @@ function AmenityIcon({ name, size = 20, color = colors.primary }) {
30306
30306
  )) });
30307
30307
  }
30308
30308
 
30309
- // src/icons/ArrowLeft/arrowLeftPath.ts
30310
- var ARROW_LEFT_PATH = "M10.1972 6.59961L4.80078 11.9994L10.1972 17.3996M4.80078 11.9965H19.202";
30311
- function ArrowLeftIcon({ size = 24, color = colors.white, strokeWidth = 1.35 }) {
30312
- return /* @__PURE__ */ jsxRuntime.jsx(Svg21__default.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
30313
- Svg21.Path,
30314
- {
30315
- d: ARROW_LEFT_PATH,
30316
- stroke: color,
30317
- strokeWidth,
30318
- strokeLinecap: "round",
30319
- strokeLinejoin: "round"
30320
- }
30321
- ) });
30322
- }
30323
-
30324
- // src/icons/CurrentLocation/currentLocationPath.ts
30325
- var CURRENT_LOCATION_PATH = "M17.4167 9.08333H14.0833M4.08333 9.08333H0.75M9.08333 4.08333V0.75M9.08333 17.4167V14.0833M15.75 9.08333C15.75 12.7652 12.7652 15.75 9.08333 15.75C5.40144 15.75 2.41667 12.7652 2.41667 9.08333C2.41667 5.40144 5.40144 2.41667 9.08333 2.41667C12.7652 2.41667 15.75 5.40144 15.75 9.08333ZM11.5833 9.08333C11.5833 10.464 10.464 11.5833 9.08333 11.5833C7.70262 11.5833 6.58333 10.464 6.58333 9.08333C6.58333 7.70262 7.70262 6.58333 9.08333 6.58333C10.464 6.58333 11.5833 7.70262 11.5833 9.08333Z";
30326
- function CurrentLocationIcon({
30327
- size = 19,
30328
- color = colors.primary,
30329
- strokeWidth = 1.5
30330
- }) {
30331
- return /* @__PURE__ */ jsxRuntime.jsx(Svg21__default.default, { width: size, height: size, viewBox: "0 0 19 19", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
30332
- Svg21.Path,
30333
- {
30334
- d: CURRENT_LOCATION_PATH,
30335
- stroke: color,
30336
- strokeWidth,
30337
- strokeLinecap: "round",
30338
- strokeLinejoin: "round"
30339
- }
30340
- ) });
30341
- }
30342
-
30343
30309
  // src/utils/mergeRefs.ts
30344
30310
  function mergeRefs(internalRef, forwardedRef) {
30345
30311
  return (node) => {
@@ -32115,7 +32081,7 @@ var styles15 = reactNative.StyleSheet.create({
32115
32081
  });
32116
32082
  var DESKTOP_MIN_WIDTH3 = 1024;
32117
32083
  var CHEVRON_SIZE3 = 24;
32118
- var Accordion = react.forwardRef(function Accordion2({
32084
+ react.forwardRef(function Accordion2({
32119
32085
  title,
32120
32086
  children,
32121
32087
  open: openProp,
@@ -32456,7 +32422,7 @@ var styles18 = reactNative.StyleSheet.create({
32456
32422
  flex: 1
32457
32423
  }
32458
32424
  });
32459
- var QuantityInput = react.forwardRef(
32425
+ react.forwardRef(
32460
32426
  function QuantityInput2({
32461
32427
  label,
32462
32428
  icon: Icon2,
@@ -34270,9 +34236,10 @@ var styles26 = reactNative.StyleSheet.create({
34270
34236
  },
34271
34237
  rangeValueRow: {
34272
34238
  minWidth: 0,
34239
+ width: "100%",
34273
34240
  flexDirection: "row",
34274
34241
  alignItems: "center",
34275
- justifyContent: "flex-start",
34242
+ justifyContent: "space-between",
34276
34243
  flexWrap: "nowrap",
34277
34244
  gap: 10
34278
34245
  },
@@ -34617,38 +34584,16 @@ var styles28 = reactNative.StyleSheet.create({
34617
34584
  var import_react_dom2 = __toESM(require_react_dom());
34618
34585
  var BACKDROP_COLOR2 = "#09090933";
34619
34586
  var DEFAULT_WIDTH2 = 652;
34587
+ var DEFAULT_DURATION = 320;
34620
34588
  var WEB_Z_INDEX2 = 500;
34621
34589
  var CLOSE_ICON_SIZE = 24;
34622
- var webBackdropDomStyle2 = {
34623
- position: "absolute",
34624
- top: 0,
34625
- right: 0,
34626
- bottom: 0,
34627
- left: 0,
34628
- backgroundColor: BACKDROP_COLOR2,
34629
- backdropFilter: "blur(18px)",
34630
- WebkitBackdropFilter: "blur(18px)",
34631
- border: "none",
34632
- padding: 0,
34633
- margin: 0,
34634
- cursor: "pointer"
34635
- };
34636
- var webRootDomStyle2 = {
34637
- position: "fixed",
34638
- top: 0,
34639
- right: 0,
34640
- bottom: 0,
34641
- left: 0,
34642
- zIndex: WEB_Z_INDEX2,
34643
- display: "flex",
34644
- justifyContent: "flex-end"
34645
- };
34646
34590
  var Drawer = react.forwardRef(function Drawer2({
34647
34591
  open,
34648
34592
  onClose,
34649
34593
  children,
34650
34594
  title,
34651
34595
  width = DEFAULT_WIDTH2,
34596
+ animationDuration = DEFAULT_DURATION,
34652
34597
  closeOnBackdropPress = true,
34653
34598
  backdropAccessibilityLabel = "Close",
34654
34599
  closeAccessibilityLabel = "Close",
@@ -34658,9 +34603,14 @@ var Drawer = react.forwardRef(function Drawer2({
34658
34603
  const panelRef = react.useRef(null);
34659
34604
  const setPanelRef = react.useMemo(() => mergeRefs(panelRef, forwardedRef), [forwardedRef]);
34660
34605
  const resolvedClassName = className?.trim() || void 0;
34661
- useApplyWebClassName(panelRef, resolvedClassName, open && reactNative.Platform.OS === "web");
34606
+ const closeTimeoutRef = react.useRef(null);
34607
+ const [mounted, setMounted] = react.useState(open);
34608
+ const [entered, setEntered] = react.useState(false);
34609
+ const animatedWidth = react.useRef(new reactNative.Animated.Value(open ? width : 0)).current;
34610
+ const animatedBackdrop = react.useRef(new reactNative.Animated.Value(open ? 1 : 0)).current;
34611
+ useApplyWebClassName(panelRef, resolvedClassName, mounted && reactNative.Platform.OS === "web");
34662
34612
  react.useEffect(() => {
34663
- if (!open || reactNative.Platform.OS !== "web") return void 0;
34613
+ if (!mounted || reactNative.Platform.OS !== "web") return void 0;
34664
34614
  const previousOverflow = document.body.style.overflow;
34665
34615
  document.body.style.overflow = "hidden";
34666
34616
  const onKeyDown = (event) => {
@@ -34671,7 +34621,84 @@ var Drawer = react.forwardRef(function Drawer2({
34671
34621
  document.body.style.overflow = previousOverflow;
34672
34622
  document.removeEventListener("keydown", onKeyDown);
34673
34623
  };
34674
- }, [open, onClose]);
34624
+ }, [mounted, onClose]);
34625
+ react.useEffect(() => {
34626
+ if (reactNative.Platform.OS !== "web") return void 0;
34627
+ if (closeTimeoutRef.current) {
34628
+ clearTimeout(closeTimeoutRef.current);
34629
+ closeTimeoutRef.current = null;
34630
+ }
34631
+ if (open) {
34632
+ setMounted(true);
34633
+ const frame = requestAnimationFrame(() => {
34634
+ requestAnimationFrame(() => setEntered(true));
34635
+ });
34636
+ return () => cancelAnimationFrame(frame);
34637
+ }
34638
+ setEntered(false);
34639
+ closeTimeoutRef.current = setTimeout(() => {
34640
+ setMounted(false);
34641
+ closeTimeoutRef.current = null;
34642
+ }, animationDuration + 50);
34643
+ return () => {
34644
+ if (closeTimeoutRef.current) {
34645
+ clearTimeout(closeTimeoutRef.current);
34646
+ closeTimeoutRef.current = null;
34647
+ }
34648
+ };
34649
+ }, [open, animationDuration]);
34650
+ react.useEffect(() => {
34651
+ if (reactNative.Platform.OS === "web") return void 0;
34652
+ if (open) {
34653
+ setMounted(true);
34654
+ reactNative.Animated.parallel([
34655
+ reactNative.Animated.timing(animatedWidth, {
34656
+ toValue: width,
34657
+ duration: animationDuration,
34658
+ easing: reactNative.Easing.out(reactNative.Easing.cubic),
34659
+ useNativeDriver: false
34660
+ }),
34661
+ reactNative.Animated.timing(animatedBackdrop, {
34662
+ toValue: 1,
34663
+ duration: animationDuration,
34664
+ easing: reactNative.Easing.out(reactNative.Easing.cubic),
34665
+ useNativeDriver: true
34666
+ })
34667
+ ]).start();
34668
+ return void 0;
34669
+ }
34670
+ reactNative.Animated.parallel([
34671
+ reactNative.Animated.timing(animatedWidth, {
34672
+ toValue: 0,
34673
+ duration: animationDuration,
34674
+ easing: reactNative.Easing.in(reactNative.Easing.cubic),
34675
+ useNativeDriver: false
34676
+ }),
34677
+ reactNative.Animated.timing(animatedBackdrop, {
34678
+ toValue: 0,
34679
+ duration: animationDuration,
34680
+ easing: reactNative.Easing.in(reactNative.Easing.cubic),
34681
+ useNativeDriver: true
34682
+ })
34683
+ ]).start(({ finished }) => {
34684
+ if (finished) setMounted(false);
34685
+ });
34686
+ return void 0;
34687
+ }, [open, width, animationDuration, animatedWidth, animatedBackdrop]);
34688
+ const handleWebTransitionEnd = react.useCallback(
34689
+ (event) => {
34690
+ if (event.target !== event.currentTarget) return;
34691
+ if (event.propertyName !== "width") return;
34692
+ if (!open) {
34693
+ if (closeTimeoutRef.current) {
34694
+ clearTimeout(closeTimeoutRef.current);
34695
+ closeTimeoutRef.current = null;
34696
+ }
34697
+ setMounted(false);
34698
+ }
34699
+ },
34700
+ [open]
34701
+ );
34675
34702
  const header = title != null && title !== "" ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles29.header, children: [
34676
34703
  /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles29.title, numberOfLines: 1, children: title }),
34677
34704
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -34686,12 +34713,12 @@ var Drawer = react.forwardRef(function Drawer2({
34686
34713
  }
34687
34714
  )
34688
34715
  ] }) : null;
34689
- const panel = /* @__PURE__ */ jsxRuntime.jsxs(
34716
+ const panelContent = /* @__PURE__ */ jsxRuntime.jsxs(
34690
34717
  reactNative.View,
34691
34718
  {
34692
34719
  ref: setPanelRef,
34693
34720
  accessibilityViewIsModal: true,
34694
- style: [styles29.panel, { width }, style],
34721
+ style: [styles29.panelInner, { width }, style],
34695
34722
  onStartShouldSetResponder: () => true,
34696
34723
  children: [
34697
34724
  header,
@@ -34700,45 +34727,103 @@ var Drawer = react.forwardRef(function Drawer2({
34700
34727
  }
34701
34728
  );
34702
34729
  if (reactNative.Platform.OS === "web") {
34703
- if (!open || typeof document === "undefined") return null;
34730
+ if (!mounted || typeof document === "undefined") return null;
34704
34731
  return (0, import_react_dom2.createPortal)(
34705
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: webRootDomStyle2, role: "presentation", children: [
34706
- /* @__PURE__ */ jsxRuntime.jsx(
34707
- "button",
34708
- {
34709
- type: "button",
34710
- "aria-label": backdropAccessibilityLabel,
34711
- disabled: !closeOnBackdropPress,
34712
- onClick: closeOnBackdropPress ? onClose : void 0,
34713
- style: webBackdropDomStyle2
34714
- }
34715
- ),
34716
- /* @__PURE__ */ jsxRuntime.jsx(
34717
- "div",
34718
- {
34719
- style: {
34720
- position: "relative",
34721
- zIndex: 1,
34722
- height: "100%",
34723
- maxWidth: "100%",
34724
- display: "flex"
34725
- },
34726
- children: panel
34727
- }
34728
- )
34729
- ] }),
34732
+ /* @__PURE__ */ jsxRuntime.jsxs(
34733
+ "div",
34734
+ {
34735
+ style: {
34736
+ position: "fixed",
34737
+ top: 0,
34738
+ right: 0,
34739
+ bottom: 0,
34740
+ left: 0,
34741
+ zIndex: WEB_Z_INDEX2,
34742
+ display: "flex",
34743
+ justifyContent: "flex-end",
34744
+ pointerEvents: "auto"
34745
+ },
34746
+ role: "presentation",
34747
+ children: [
34748
+ /* @__PURE__ */ jsxRuntime.jsx(
34749
+ "button",
34750
+ {
34751
+ type: "button",
34752
+ "aria-label": backdropAccessibilityLabel,
34753
+ disabled: !closeOnBackdropPress,
34754
+ onClick: closeOnBackdropPress ? onClose : void 0,
34755
+ style: {
34756
+ position: "absolute",
34757
+ top: 0,
34758
+ right: 0,
34759
+ bottom: 0,
34760
+ left: 0,
34761
+ backgroundColor: BACKDROP_COLOR2,
34762
+ backdropFilter: "blur(18px)",
34763
+ WebkitBackdropFilter: "blur(18px)",
34764
+ border: "none",
34765
+ padding: 0,
34766
+ margin: 0,
34767
+ cursor: closeOnBackdropPress ? "pointer" : "default",
34768
+ opacity: entered ? 1 : 0,
34769
+ transition: `opacity ${animationDuration}ms ease`
34770
+ }
34771
+ }
34772
+ ),
34773
+ /* @__PURE__ */ jsxRuntime.jsx(
34774
+ "div",
34775
+ {
34776
+ onTransitionEnd: handleWebTransitionEnd,
34777
+ style: {
34778
+ position: "relative",
34779
+ zIndex: 1,
34780
+ height: "100%",
34781
+ width: entered ? Math.min(width, typeof window !== "undefined" ? window.innerWidth : width) : 0,
34782
+ minWidth: 0,
34783
+ maxWidth: "100%",
34784
+ overflow: "hidden",
34785
+ transition: `width ${animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1)`,
34786
+ willChange: "width",
34787
+ boxSizing: "border-box"
34788
+ },
34789
+ children: /* @__PURE__ */ jsxRuntime.jsx(
34790
+ "div",
34791
+ {
34792
+ style: {
34793
+ width,
34794
+ maxWidth: "100%",
34795
+ height: "100%",
34796
+ marginLeft: "auto",
34797
+ display: "flex",
34798
+ flexDirection: "column"
34799
+ },
34800
+ children: panelContent
34801
+ }
34802
+ )
34803
+ }
34804
+ )
34805
+ ]
34806
+ }
34807
+ ),
34730
34808
  document.body
34731
34809
  );
34732
34810
  }
34811
+ if (!mounted) return null;
34733
34812
  return /* @__PURE__ */ jsxRuntime.jsx(
34734
34813
  reactNative.Modal,
34735
34814
  {
34736
- visible: open,
34815
+ visible: mounted,
34737
34816
  transparent: true,
34738
- animationType: "slide",
34817
+ animationType: "none",
34739
34818
  onRequestClose: onClose,
34740
34819
  statusBarTranslucent: true,
34741
34820
  children: /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles29.root, accessibilityViewIsModal: true, children: [
34821
+ /* @__PURE__ */ jsxRuntime.jsx(
34822
+ reactNative.Animated.View,
34823
+ {
34824
+ style: [styles29.backdrop, { opacity: animatedBackdrop, pointerEvents: "none" }]
34825
+ }
34826
+ ),
34742
34827
  /* @__PURE__ */ jsxRuntime.jsx(
34743
34828
  reactNative.Pressable,
34744
34829
  {
@@ -34746,10 +34831,10 @@ var Drawer = react.forwardRef(function Drawer2({
34746
34831
  accessibilityLabel: backdropAccessibilityLabel,
34747
34832
  disabled: !closeOnBackdropPress,
34748
34833
  onPress: closeOnBackdropPress ? onClose : void 0,
34749
- style: styles29.backdrop
34834
+ style: reactNative.StyleSheet.absoluteFill
34750
34835
  }
34751
34836
  ),
34752
- panel
34837
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Animated.View, { style: [styles29.panelShell, { width: animatedWidth }], children: panelContent })
34753
34838
  ] })
34754
34839
  }
34755
34840
  );
@@ -34764,11 +34849,19 @@ var styles29 = reactNative.StyleSheet.create({
34764
34849
  ...reactNative.StyleSheet.absoluteFillObject,
34765
34850
  backgroundColor: BACKDROP_COLOR2
34766
34851
  },
34767
- panel: {
34852
+ panelShell: {
34768
34853
  zIndex: 1,
34769
34854
  height: "100%",
34770
34855
  maxWidth: "100%",
34771
- backgroundColor: colors.grey800
34856
+ overflow: "hidden",
34857
+ alignItems: "flex-end",
34858
+ minWidth: 0
34859
+ },
34860
+ panelInner: {
34861
+ height: "100%",
34862
+ maxWidth: "100%",
34863
+ backgroundColor: colors.grey800,
34864
+ flexShrink: 0
34772
34865
  },
34773
34866
  header: {
34774
34867
  height: 65,
@@ -34787,10 +34880,11 @@ var styles29 = reactNative.StyleSheet.create({
34787
34880
  fontFamily: fonts.sans,
34788
34881
  fontSize: 16,
34789
34882
  fontWeight: "600",
34790
- lineHeight: 16,
34883
+ lineHeight: 22,
34791
34884
  letterSpacing: 0,
34792
34885
  color: colors.white,
34793
- marginRight: 12
34886
+ marginRight: 12,
34887
+ overflow: "visible"
34794
34888
  },
34795
34889
  closeButton: {
34796
34890
  width: CLOSE_ICON_SIZE,
@@ -35094,7 +35188,7 @@ var MENU_MAX_HEIGHT = 248;
35094
35188
  var BLUR_CLOSE_DELAY_MS = 120;
35095
35189
  var AUTOCOMPLETE_ROOT_Z_INDEX = 1100;
35096
35190
  var AUTOCOMPLETE_MENU_Z_INDEX = 1101;
35097
- var AutocompleteInput = react.forwardRef(
35191
+ react.forwardRef(
35098
35192
  function AutocompleteInput2({
35099
35193
  value,
35100
35194
  options,
@@ -35607,7 +35701,7 @@ function MultiValueChips({ options, disabled, onRemove }) {
35607
35701
  setEllipsisWidth((current) => current === next ? current : next);
35608
35702
  };
35609
35703
  return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles33.multiValueRoot, children: [
35610
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style: styles33.measureRow, children: [
35704
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles33.measureRow, { pointerEvents: "none" }], children: [
35611
35705
  options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
35612
35706
  reactNative.View,
35613
35707
  {
@@ -36007,7 +36101,7 @@ var Select = react.forwardRef(
36007
36101
  }
36008
36102
  ],
36009
36103
  children: [
36010
- multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles33.itemCheckbox, children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
36104
+ multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles33.itemCheckbox, { pointerEvents: "none" }], children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
36011
36105
  /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles33.itemLabel, numberOfLines: 1, children: option.label })
36012
36106
  ]
36013
36107
  },
@@ -37669,7 +37763,6 @@ react-dom/cjs/react-dom.development.js:
37669
37763
  *)
37670
37764
  */
37671
37765
 
37672
- exports.Accordion = Accordion;
37673
37766
  exports.AccordionItem = AccordionItem;
37674
37767
  exports.AccountHeader = AccountHeader;
37675
37768
  exports.AlertTriangleIcon = AlertTriangleIcon;
@@ -37677,9 +37770,7 @@ exports.Amenity = Amenity;
37677
37770
  exports.AmenityIcon = AmenityIcon;
37678
37771
  exports.AppleIcon = AppleIcon;
37679
37772
  exports.AreaExpandIcon = AreaExpandIcon;
37680
- exports.ArrowLeftIcon = ArrowLeftIcon;
37681
37773
  exports.ArrowRightIcon = ArrowRightIcon;
37682
- exports.AutocompleteInput = AutocompleteInput;
37683
37774
  exports.Avatar = Avatar;
37684
37775
  exports.AvatarSimple = AvatarSimple;
37685
37776
  exports.BRAND_LOGO_COLORS = BRAND_LOGO_COLORS;
@@ -37713,7 +37804,6 @@ exports.CommentCard = CommentCard;
37713
37804
  exports.ContactInfoCard = ContactInfoCard;
37714
37805
  exports.CopyIcon = CopyIcon;
37715
37806
  exports.Counter = Counter;
37716
- exports.CurrentLocationIcon = CurrentLocationIcon;
37717
37807
  exports.DatePicker = DatePicker;
37718
37808
  exports.DownloadIcon = DownloadIcon;
37719
37809
  exports.Drawer = Drawer;
@@ -37763,7 +37853,6 @@ exports.PawIcon = PawIcon;
37763
37853
  exports.PhoneIcon = PhoneIcon;
37764
37854
  exports.PlusIcon = PlusIcon;
37765
37855
  exports.QrCodeIcon = QrCodeIcon;
37766
- exports.QuantityInput = QuantityInput;
37767
37856
  exports.QuietHoursIcon = QuietHoursIcon;
37768
37857
  exports.Range = Range;
37769
37858
  exports.RatingInput = RatingInput;