@giddaa-housing/ui 3.1.0 → 3.3.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/css/generated/shared.css +1 -1
- package/css/giddaa.css +12 -3
- package/css/theme.css +4 -1
- package/dist/accordion.js +3 -2
- package/dist/activity-timeline.js +2 -2
- package/dist/alert.js +4 -4
- package/dist/breadcrumb.js +3 -3
- package/dist/button.js +8 -4
- package/dist/calendar.js +3 -3
- package/dist/call-card.js +1 -1
- package/dist/carousel.js +3 -3
- package/dist/chart.js +1 -1
- package/dist/chat.js +1 -1
- package/dist/checkbox.js +2 -2
- package/dist/combobox.js +6 -6
- package/dist/cta.js +3 -3
- package/dist/currency-selector.d.ts +10 -8
- package/dist/currency-selector.js +247 -28
- package/dist/data-table.js +2 -2
- package/dist/date-picker.js +6 -6
- package/dist/dialog.js +2 -2
- package/dist/dropdown-menu.js +20 -20
- package/dist/dropzone.js +1 -1
- package/dist/editorial-card.d.ts +20 -11
- package/dist/editorial-card.js +67 -2
- package/dist/file-upload.js +1 -1
- package/dist/filter.js +1 -1
- package/dist/footer.d.ts +8 -3
- package/dist/footer.js +16 -5
- package/dist/icons.d.ts +93 -0
- package/dist/icons.js +905 -0
- package/dist/infinite-scroll.js +1 -1
- package/dist/input-otp.js +2 -2
- package/dist/kpi-card.js +1 -1
- package/dist/match.js +1 -1
- package/dist/media-gallery-hero.js +4 -4
- package/dist/media-player.js +59 -48
- package/dist/message.js +1 -1
- package/dist/mobile-sidebar.js +4 -4
- package/dist/multi-step-form.js +2 -2
- package/dist/number-input.js +3 -3
- package/dist/pagination.js +4 -4
- package/dist/password-input.js +1 -1
- package/dist/phone-input.js +4 -4
- package/dist/photo-gallery.js +3 -3
- package/dist/price-tag.js +1 -1
- package/dist/property-listing-card.js +1 -1
- package/dist/rich-text-editor.js +4 -4
- package/dist/scroll-spy.d.ts +61 -0
- package/dist/scroll-spy.js +295 -0
- package/dist/search-input.js +1 -1
- package/dist/select.js +6 -6
- package/dist/sheet.js +2 -2
- package/dist/sidebar.js +1 -1
- package/dist/stepper.js +2 -2
- package/dist/styles.css +239 -26
- package/dist/tabs.d.ts +13 -1
- package/dist/tabs.js +9 -2
- package/dist/tag.js +1 -1
- package/dist/testimonial-block.js +1 -1
- package/dist/theme-switcher.d.ts +31 -0
- package/dist/theme-switcher.js +78 -0
- package/dist/time-picker.js +2 -2
- package/dist/toast.d.ts +38 -10
- package/dist/toast.js +56 -52
- package/dist/top-navbar.js +3 -3
- package/dist/video-player-dialog.d.ts +57 -0
- package/dist/video-player-dialog.js +188 -0
- package/package.json +17 -2
package/dist/infinite-scroll.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Loader2 } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
|
-
import { Loader2 } from "lucide-react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
6
6
|
//#region src/lib/use-intersection.ts
|
package/dist/input-otp.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Minus } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { InputSizeProvider, useInputComponentSize } from "./input-size-context.js";
|
|
4
|
-
import { MinusIcon } from "lucide-react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
import { cva } from "class-variance-authority";
|
|
7
7
|
import { OTPField } from "@base-ui/react/otp-field";
|
|
@@ -49,7 +49,7 @@ function InputOTPSeparator({ children, className, ...props }) {
|
|
|
49
49
|
"data-slot": "input-otp-separator",
|
|
50
50
|
className: cn("flex items-center justify-center px-1 text-fg-secondary [&_svg:not([class*='size-'])]:size-4", className),
|
|
51
51
|
...props,
|
|
52
|
-
children: children ?? /* @__PURE__ */ jsx(
|
|
52
|
+
children: children ?? /* @__PURE__ */ jsx(Minus, {})
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
//#endregion
|
package/dist/kpi-card.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { ArrowDown, ArrowUp, ArrowUpRight } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { Skeleton } from "./skeleton.js";
|
|
4
|
-
import { ArrowDown, ArrowUp, ArrowUpRight } from "lucide-react";
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
7
7
|
import { useRender } from "@base-ui/react/use-render";
|
package/dist/match.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { ChevronDown } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { CircularProgress } from "./progress.js";
|
|
4
|
-
import { ChevronDown } from "lucide-react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { cva } from "class-variance-authority";
|
|
7
7
|
//#region src/match.tsx
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Play } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { buttonVariants } from "./button.js";
|
|
4
5
|
import { Carousel, CarouselContent, CarouselItem, useCarousel } from "./carousel.js";
|
|
5
6
|
import { GalleryIndicator } from "./gallery-indicator.js";
|
|
6
7
|
import { ReviewBlock } from "./review-block.js";
|
|
7
|
-
import { Play } from "lucide-react";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
import { cva } from "class-variance-authority";
|
|
10
10
|
//#region src/media-gallery-hero.tsx
|
|
11
|
-
const mediaGalleryHeroVariants = cva("relative isolate h-[350px] w-full overflow-hidden rounded-[32px]
|
|
12
|
-
const mediaGalleryImagesVariants = cva("absolute inset-0 z-0 hidden size-full min-h-0 min-w-0
|
|
11
|
+
const mediaGalleryHeroVariants = cva("relative isolate h-[350px] w-full overflow-hidden rounded-[32px] md:h-[380px] md:rounded-[40px] lg:h-[480px]");
|
|
12
|
+
const mediaGalleryImagesVariants = cva("absolute inset-0 z-0 hidden size-full min-h-0 min-w-0 md:grid", {
|
|
13
13
|
variants: { imageCount: {
|
|
14
14
|
1: "",
|
|
15
15
|
2: "gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)]",
|
|
@@ -77,7 +77,7 @@ function MobileGalleryCounter({ total }) {
|
|
|
77
77
|
function MobileMediaCarousel({ currentMedia, images, mediaTotal, onMediaClick, renderMedia, showMobileIndicator }) {
|
|
78
78
|
const carouselImages = images.length > 0 ? images : [{}];
|
|
79
79
|
return /* @__PURE__ */ jsxs(Carousel, {
|
|
80
|
-
className: "absolute inset-0 z-0 block size-full rounded-[32px]
|
|
80
|
+
className: "absolute inset-0 z-0 block size-full rounded-[32px] md:hidden",
|
|
81
81
|
imageSize: "full",
|
|
82
82
|
opts: {
|
|
83
83
|
align: "start",
|
package/dist/media-player.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Captions, CaptionsOff, Maximize, Minimize, Pause, PictureInPicture2, Play, RefreshCcw, Repeat2, RotateCcw, RotateCw, Settings, TriangleAlert, Volume1, Volume2, VolumeX } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./dropdown-menu.js";
|
|
4
5
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip.js";
|
|
5
|
-
import { Captions, CaptionsOff, Maximize, Minimize, Pause, PictureInPicture2, Play, RefreshCcw, Repeat2, RotateCcw, RotateCw, Settings, TriangleAlert, Volume1, Volume2, VolumeX } from "lucide-react";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import * as React from "react";
|
|
8
8
|
import { Slider } from "@base-ui/react/slider";
|
|
@@ -20,6 +20,9 @@ const DEFAULT_PLAYBACK_RATES = [
|
|
|
20
20
|
];
|
|
21
21
|
const CONTROLS_HIDE_DELAY = 2500;
|
|
22
22
|
const SEEK_PREVIEW_WIDTH = 160;
|
|
23
|
+
const SEEK_CHAPTER_GAP = 3;
|
|
24
|
+
const SEEK_THUMB_SIZE = 14;
|
|
25
|
+
const SEEK_THUMB_INSET = SEEK_THUMB_SIZE / 2;
|
|
23
26
|
const MediaPlayerContext = React.createContext({
|
|
24
27
|
onMenuOpenChange: () => {},
|
|
25
28
|
portalContainer: null,
|
|
@@ -73,11 +76,8 @@ function clamp(value, min, max) {
|
|
|
73
76
|
}
|
|
74
77
|
function getSeekValueFromPointer(event, min, max) {
|
|
75
78
|
const rect = event.currentTarget.getBoundingClientRect();
|
|
76
|
-
const
|
|
77
|
-
return
|
|
78
|
-
percent: percent * 100,
|
|
79
|
-
value: min + percent * (max - min)
|
|
80
|
-
};
|
|
79
|
+
const travel = Math.max(rect.width - SEEK_THUMB_SIZE, 1);
|
|
80
|
+
return min + clamp((event.clientX - rect.left - SEEK_THUMB_INSET) / travel, 0, 1) * (max - min);
|
|
81
81
|
}
|
|
82
82
|
function MediaPlayer({ mediaStore, ...props }) {
|
|
83
83
|
const audio = props.audio ?? (hasAudioChild(props.children) ? true : void 0);
|
|
@@ -272,7 +272,7 @@ function MediaPlayerVideo({ className, ref, ...props }) {
|
|
|
272
272
|
setRef(ref, node);
|
|
273
273
|
}, [ref]),
|
|
274
274
|
"data-slot": "media-player-video",
|
|
275
|
-
className: cn("block aspect-video size-full object-cover", "group-data-[fullscreen]/media-player:aspect-auto group-data-[fullscreen]/media-player:object-contain", className),
|
|
275
|
+
className: cn("block aspect-video size-full rounded-[inherit] object-cover", "group-data-[fullscreen]/media-player:aspect-auto group-data-[fullscreen]/media-player:object-contain", className),
|
|
276
276
|
playsInline: true,
|
|
277
277
|
...props
|
|
278
278
|
});
|
|
@@ -646,24 +646,28 @@ function MediaPlayerSeek({ className, disabled, onValueChange, "aria-label": ari
|
|
|
646
646
|
detail: void 0
|
|
647
647
|
});
|
|
648
648
|
};
|
|
649
|
+
const toFraction = (value) => canSeek ? (clamp(value, min, max) - min) / (max - min) : 0;
|
|
650
|
+
const toTrackOffset = (fraction) => {
|
|
651
|
+
if (fraction <= 0) return "0px";
|
|
652
|
+
if (fraction >= 1) return "100%";
|
|
653
|
+
return `calc(${SEEK_THUMB_INSET}px + ${fraction} * (100% - ${SEEK_THUMB_SIZE}px))`;
|
|
654
|
+
};
|
|
649
655
|
const previewValue = dragValue ?? hoverValue;
|
|
650
|
-
const previewPercent = previewValue !== null && canSeek ? (clamp(previewValue, min, max) - min) / (max - min) * 100 : 0;
|
|
651
656
|
const previewChapter = previewValue !== null ? chapterCues?.find((cue) => previewValue >= cue.startTime && previewValue < cue.endTime) : void 0;
|
|
652
657
|
const previewCoordValues = previewCoords?.map(Number);
|
|
653
658
|
const hasSpriteCoords = previewCoordValues?.length === 4 && (previewCoordValues[2] ?? 0) > 0;
|
|
654
659
|
const previewScale = hasSpriteCoords ? SEEK_PREVIEW_WIDTH / (previewCoordValues?.[2] ?? 1) : 1;
|
|
655
660
|
const previewClampPx = previewImage ? 84 : 32;
|
|
656
661
|
const controlRect = withTime && previewValue !== null ? controlRef.current?.getBoundingClientRect() : void 0;
|
|
657
|
-
const previewLeft = controlRect ? clamp(controlRect.left +
|
|
658
|
-
const
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
}));
|
|
662
|
+
const previewLeft = controlRect ? clamp(controlRect.left + SEEK_THUMB_INSET + toFraction(previewValue ?? 0) * (controlRect.width - SEEK_THUMB_SIZE), controlRect.left + previewClampPx, controlRect.right - previewClampPx) : 0;
|
|
663
|
+
const playedFraction = toFraction(displayTime);
|
|
664
|
+
const chapterStops = canSeek ? (chapterCues ?? []).map((cue) => toFraction(cue.startTime)).filter((fraction) => fraction > 0 && fraction < 1).sort((a, b) => a - b).map(toTrackOffset) : [];
|
|
665
|
+
const trackMask = chapterStops.length ? `linear-gradient(to right, #000 0, ${chapterStops.flatMap((offset) => [
|
|
666
|
+
`#000 calc(${offset} - ${SEEK_CHAPTER_GAP / 2}px)`,
|
|
667
|
+
`transparent calc(${offset} - ${SEEK_CHAPTER_GAP / 2}px)`,
|
|
668
|
+
`transparent calc(${offset} + ${SEEK_CHAPTER_GAP / 2}px)`,
|
|
669
|
+
`#000 calc(${offset} + ${SEEK_CHAPTER_GAP / 2}px)`
|
|
670
|
+
]).join(", ")}, #000 100%)` : void 0;
|
|
667
671
|
return /* @__PURE__ */ jsxs(Slider.Root, {
|
|
668
672
|
thumbAlignment: "edge",
|
|
669
673
|
"data-slot": "media-player-seek",
|
|
@@ -735,45 +739,52 @@ function MediaPlayerSeek({ className, disabled, onValueChange, "aria-label": ari
|
|
|
735
739
|
]
|
|
736
740
|
}), portalContainer ?? document.body), /* @__PURE__ */ jsxs(Slider.Control, {
|
|
737
741
|
ref: controlRef,
|
|
738
|
-
className: "flex h-8 w-full items-center",
|
|
742
|
+
className: "relative flex h-8 w-full items-center",
|
|
739
743
|
onPointerLeave: () => {
|
|
740
744
|
if (dragValue === null) clearPreview();
|
|
741
745
|
},
|
|
742
746
|
onPointerMove: (event) => {
|
|
743
747
|
if (resolvedDisabled || dragValue !== null) return;
|
|
744
748
|
const next = getSeekValueFromPointer(event, min, max);
|
|
745
|
-
setHoverValue(next
|
|
746
|
-
previewAt(next
|
|
749
|
+
setHoverValue(next);
|
|
750
|
+
previewAt(next);
|
|
747
751
|
},
|
|
748
|
-
children: [/* @__PURE__ */
|
|
749
|
-
className: "relative
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
752
|
+
children: [/* @__PURE__ */ jsxs(Slider.Track, {
|
|
753
|
+
className: "relative h-2 w-full overflow-hidden rounded-full bg-line-subtle/65",
|
|
754
|
+
style: trackMask ? {
|
|
755
|
+
maskImage: trackMask,
|
|
756
|
+
WebkitMaskImage: trackMask
|
|
757
|
+
} : void 0,
|
|
758
|
+
children: [
|
|
759
|
+
canSeek && buffered?.map(([bufferStart, bufferEnd]) => /* @__PURE__ */ jsx("span", {
|
|
760
|
+
"data-slot": "media-player-seek-buffered",
|
|
761
|
+
className: "absolute inset-y-0 bg-fg-on-brand/25",
|
|
762
|
+
style: {
|
|
763
|
+
left: toTrackOffset(toFraction(bufferStart)),
|
|
764
|
+
right: `calc(100% - ${toTrackOffset(toFraction(bufferEnd))})`
|
|
765
|
+
}
|
|
766
|
+
}, `${bufferStart}-${bufferEnd}`)),
|
|
767
|
+
/* @__PURE__ */ jsx("span", {
|
|
768
|
+
"data-slot": "media-player-seek-progress",
|
|
769
|
+
className: "absolute inset-y-0 left-0 bg-surface-brand",
|
|
770
|
+
style: { width: SEEK_THUMB_INSET }
|
|
771
|
+
}),
|
|
772
|
+
/* @__PURE__ */ jsx("span", {
|
|
773
|
+
"data-slot": "media-player-seek-progress",
|
|
774
|
+
"data-dragging": dragValue !== null || void 0,
|
|
775
|
+
className: "absolute inset-y-0 origin-left bg-surface-brand transition-transform duration-200 ease-linear data-[dragging=true]:transition-none",
|
|
776
|
+
style: {
|
|
777
|
+
left: SEEK_THUMB_INSET,
|
|
778
|
+
transform: `scaleX(${playedFraction})`,
|
|
779
|
+
width: `calc(100% - ${SEEK_THUMB_SIZE}px)`
|
|
780
|
+
}
|
|
781
|
+
})
|
|
782
|
+
]
|
|
773
783
|
}), /* @__PURE__ */ jsx(Slider.Thumb, {
|
|
774
784
|
getAriaLabel: () => ariaLabel ?? "Media timeline",
|
|
775
785
|
getAriaValueText: (_formatted, value) => `${formatTime(value)} of ${formatTime(max)}`,
|
|
776
|
-
className: cn("
|
|
786
|
+
className: cn("group/seek-thumb size-[14px] rounded-full outline-none", "transition-[inset-inline-start] duration-200 ease-linear data-[dragging]:transition-none"),
|
|
787
|
+
children: /* @__PURE__ */ jsx("span", { className: cn("block size-full rounded-full border-2 border-surface-brand bg-surface-overlay shadow-2", "transition-[scale] duration-[var(--duration-motion-press)] ease-gdt-out group-data-[dragging]/seek-thumb:scale-125 motion-reduce:group-data-[dragging]/seek-thumb:scale-100", "group-has-[:focus-visible]/seek-thumb:[filter:drop-shadow(0_0_0.25rem_var(--color-line-focus))]") })
|
|
777
788
|
})]
|
|
778
789
|
})]
|
|
779
790
|
});
|
|
@@ -888,7 +899,7 @@ function MediaPlayerError({ children, className, ...props }) {
|
|
|
888
899
|
return /* @__PURE__ */ jsx("div", {
|
|
889
900
|
"data-slot": "media-player-error",
|
|
890
901
|
role: "alert",
|
|
891
|
-
className: cn("absolute inset-0 z-20 flex flex-col items-center justify-center gap-1 bg-canvas/85 px-6 text-center text-fg-primary backdrop-blur-sm
|
|
902
|
+
className: cn("absolute inset-0 z-20 flex flex-col items-center justify-center gap-1 rounded-[inherit] bg-canvas/85 px-6 text-center text-fg-primary backdrop-blur-sm", className),
|
|
892
903
|
...props,
|
|
893
904
|
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
894
905
|
/* @__PURE__ */ jsx(TriangleAlert, {
|
package/dist/message.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { CheckCheck } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
|
-
import { CheckCheck } from "lucide-react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
6
6
|
import { useRender } from "@base-ui/react/use-render";
|
package/dist/mobile-sidebar.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { ChevronDown, Menu, X } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./collapsible.js";
|
|
4
5
|
import { Sheet, SheetBody, SheetClose, SheetContent, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "./sheet.js";
|
|
5
|
-
import { ChevronDownIcon, MenuIcon, XIcon } from "lucide-react";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
8
8
|
import { useRender } from "@base-ui/react/use-render";
|
|
@@ -15,7 +15,7 @@ function MobileSidebarTrigger({ className, children, ...props }) {
|
|
|
15
15
|
"data-slot": "mobile-sidebar-trigger",
|
|
16
16
|
className: cn("inline-flex size-10 items-center justify-center rounded-lg text-fg-secondary outline-none transition-[background-color,color,translate] duration-(--duration-motion-press) ease-gdt-out hover:bg-surface hover:text-fg-primary focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] active:translate-y-px motion-reduce:active:translate-y-0", className),
|
|
17
17
|
...props,
|
|
18
|
-
children: children ?? /* @__PURE__ */ jsx(
|
|
18
|
+
children: children ?? /* @__PURE__ */ jsx(Menu, {
|
|
19
19
|
"aria-hidden": "true",
|
|
20
20
|
className: "size-6"
|
|
21
21
|
})
|
|
@@ -50,7 +50,7 @@ function MobileSidebarClose({ className, children, ...props }) {
|
|
|
50
50
|
"data-slot": "mobile-sidebar-close",
|
|
51
51
|
className: cn("inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-fg-primary outline-none transition-[background-color,translate] duration-(--duration-motion-press) ease-gdt-out hover:bg-surface focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] active:translate-y-px motion-reduce:active:translate-y-0", className),
|
|
52
52
|
...props,
|
|
53
|
-
children: children ?? /* @__PURE__ */ jsx(
|
|
53
|
+
children: children ?? /* @__PURE__ */ jsx(X, {
|
|
54
54
|
"aria-hidden": "true",
|
|
55
55
|
className: "size-5"
|
|
56
56
|
})
|
|
@@ -137,7 +137,7 @@ function MobileSidebarGroupTrigger({ active = false, icon, className, children,
|
|
|
137
137
|
className: "min-w-0 truncate",
|
|
138
138
|
children
|
|
139
139
|
})]
|
|
140
|
-
}), /* @__PURE__ */ jsx(
|
|
140
|
+
}), /* @__PURE__ */ jsx(ChevronDown, {
|
|
141
141
|
"aria-hidden": "true",
|
|
142
142
|
className: "size-4 shrink-0 text-current transition-transform duration-(--duration-motion-press) ease-gdt-out group-data-[panel-open]/collapsible-trigger:rotate-180 motion-reduce:transition-none"
|
|
143
143
|
})]
|
package/dist/multi-step-form.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Check } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { t as useUncontrolled } from "./use-uncontrolled-CLfM1XbB.js";
|
|
4
5
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./select.js";
|
|
5
6
|
import { Progress, ProgressIndicator, ProgressTrack } from "./progress.js";
|
|
6
|
-
import { CheckIcon } from "lucide-react";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import * as React from "react";
|
|
9
9
|
//#region src/multi-step-form.tsx
|
|
@@ -181,7 +181,7 @@ function MultiStepFormIndicator({ type = "stepper", progressValue, showNextLabel
|
|
|
181
181
|
children: [/* @__PURE__ */ jsx("span", {
|
|
182
182
|
className: "transition-opacity duration-[var(--duration-motion-press)] ease-gdt-out group-data-[state=complete]/multi-step-form-step:opacity-0",
|
|
183
183
|
children: index + 1
|
|
184
|
-
}), /* @__PURE__ */ jsx(
|
|
184
|
+
}), /* @__PURE__ */ jsx(Check, {
|
|
185
185
|
"aria-hidden": "true",
|
|
186
186
|
strokeWidth: 2.5,
|
|
187
187
|
className: "absolute inset-0 m-auto size-4.5 scale-95 opacity-0 transition-[opacity,scale] duration-[var(--duration-motion-press)] ease-gdt-out motion-reduce:scale-100 group-data-[state=complete]/multi-step-form-step:scale-100 group-data-[state=complete]/multi-step-form-step:opacity-100"
|
package/dist/number-input.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Minus, Plus } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { SizeProvider, useComponentSize } from "./size-context.js";
|
|
4
5
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "./input-group.js";
|
|
5
|
-
import { MinusIcon, PlusIcon } from "lucide-react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { NumberField } from "@base-ui/react/number-field";
|
|
8
8
|
//#region src/number-input.tsx
|
|
@@ -52,14 +52,14 @@ function NumberInputControl() {
|
|
|
52
52
|
children: [/* @__PURE__ */ jsx(NumberField.Increment, {
|
|
53
53
|
className: "w-full flex-1 rounded-none rounded-tr-full",
|
|
54
54
|
render: /* @__PURE__ */ jsx(InputGroupButton, { variant: "tertiary" }),
|
|
55
|
-
children: /* @__PURE__ */ jsx(
|
|
55
|
+
children: /* @__PURE__ */ jsx(Plus, { className: cn("size-1.5", {
|
|
56
56
|
"size-3": size === "md",
|
|
57
57
|
"size-3.5": size === "lg"
|
|
58
58
|
}) })
|
|
59
59
|
}), /* @__PURE__ */ jsx(NumberField.Decrement, {
|
|
60
60
|
className: "w-full flex-1 rounded-none rounded-br-full",
|
|
61
61
|
render: /* @__PURE__ */ jsx(InputGroupButton, { variant: "tertiary" }),
|
|
62
|
-
children: /* @__PURE__ */ jsx(
|
|
62
|
+
children: /* @__PURE__ */ jsx(Minus, { className: cn("size-1.5", {
|
|
63
63
|
"size-3": size === "md",
|
|
64
64
|
"size-3.5": size === "lg"
|
|
65
65
|
}) })
|
package/dist/pagination.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { ChevronLeft, ChevronRight, MoreHorizontal } from "./icons.js";
|
|
1
2
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
2
3
|
import { Button, ButtonLink } from "./button.js";
|
|
3
|
-
import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { cva } from "class-variance-authority";
|
|
6
6
|
//#region src/pagination.tsx
|
|
@@ -103,7 +103,7 @@ function PaginationPrevious({ className, showLabel = true, text = "Previous", ..
|
|
|
103
103
|
appearance: showLabel ? "control" : "icon",
|
|
104
104
|
className: cn(showLabel ? "pl-1.5!" : "", className),
|
|
105
105
|
...props,
|
|
106
|
-
children: [/* @__PURE__ */ jsx(
|
|
106
|
+
children: [/* @__PURE__ */ jsx(ChevronLeft, {
|
|
107
107
|
"data-icon": "inline-start",
|
|
108
108
|
className: "cn-rtl-flip"
|
|
109
109
|
}), showLabel ? /* @__PURE__ */ jsx("span", {
|
|
@@ -121,7 +121,7 @@ function PaginationNext({ className, showLabel = true, text = "Next", ...props }
|
|
|
121
121
|
children: [showLabel ? /* @__PURE__ */ jsx("span", {
|
|
122
122
|
className: "hidden sm:block",
|
|
123
123
|
children: text
|
|
124
|
-
}) : null, /* @__PURE__ */ jsx(
|
|
124
|
+
}) : null, /* @__PURE__ */ jsx(ChevronRight, {
|
|
125
125
|
"data-icon": "inline-end",
|
|
126
126
|
className: "cn-rtl-flip"
|
|
127
127
|
})]
|
|
@@ -133,7 +133,7 @@ function PaginationEllipsis({ className, ...props }) {
|
|
|
133
133
|
"data-slot": "pagination-ellipsis",
|
|
134
134
|
className: cn("flex size-8 items-center justify-center text-fg-secondary [&_svg:not([class*='size-'])]:size-4", className),
|
|
135
135
|
...props,
|
|
136
|
-
children: [/* @__PURE__ */ jsx(
|
|
136
|
+
children: [/* @__PURE__ */ jsx(MoreHorizontal, {}), /* @__PURE__ */ jsx("span", {
|
|
137
137
|
className: "sr-only",
|
|
138
138
|
children: "More pages"
|
|
139
139
|
})]
|
package/dist/password-input.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Eye, EyeOff } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "./input-group.js";
|
|
4
|
-
import { Eye, EyeOff } from "lucide-react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
//#region src/password-input.tsx
|
package/dist/phone-input.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Check, ChevronDown, Search } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { useComponentSize } from "./size-context.js";
|
|
4
5
|
import { Separator } from "./separator.js";
|
|
5
6
|
import { InputGroup, InputGroupAddon, InputGroupInput } from "./input-group.js";
|
|
6
7
|
import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
|
|
7
|
-
import { CheckIcon, ChevronDownIcon, SearchIcon } from "lucide-react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
import * as React from "react";
|
|
10
10
|
import { AsYouType, getCountries, getCountryCallingCode, parsePhoneNumber } from "libphonenumber-js";
|
|
@@ -109,7 +109,7 @@ function CountryList({ items, country, onSelect }) {
|
|
|
109
109
|
className: "shrink-0 text-fg-secondary",
|
|
110
110
|
children: ["+", entry.calling]
|
|
111
111
|
}),
|
|
112
|
-
selected && /* @__PURE__ */ jsx(
|
|
112
|
+
selected && /* @__PURE__ */ jsx(Check, { className: "size-4 shrink-0 text-fg-brand" })
|
|
113
113
|
]
|
|
114
114
|
}, entry.code);
|
|
115
115
|
})
|
|
@@ -147,7 +147,7 @@ function CountrySelect({ country, size, disabled, onSelect, finalFocusRef }) {
|
|
|
147
147
|
size
|
|
148
148
|
}),
|
|
149
149
|
/* @__PURE__ */ jsxs("span", { children: ["+", getCountryCallingCode(country)] }),
|
|
150
|
-
/* @__PURE__ */ jsx(
|
|
150
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: cn("text-fg-secondary transition-transform", open && "rotate-180", size === "lg" ? "size-4" : "size-3.5") })
|
|
151
151
|
]
|
|
152
152
|
}), /* @__PURE__ */ jsxs(PopoverContent, {
|
|
153
153
|
showArrow: false,
|
|
@@ -158,7 +158,7 @@ function CountrySelect({ country, size, disabled, onSelect, finalFocusRef }) {
|
|
|
158
158
|
className: "w-72 gap-0 overflow-hidden p-0",
|
|
159
159
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
160
160
|
className: "flex items-center gap-2 border-b border-line-subtle px-3.5 py-2.5",
|
|
161
|
-
children: [/* @__PURE__ */ jsx(
|
|
161
|
+
children: [/* @__PURE__ */ jsx(Search, { className: "size-4 shrink-0 text-fg-secondary" }), /* @__PURE__ */ jsx("input", {
|
|
162
162
|
ref: searchRef,
|
|
163
163
|
value: query,
|
|
164
164
|
onChange: (event) => setQuery(event.target.value),
|
package/dist/photo-gallery.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { ChevronLeft, ChevronRight, Fullscreen, X } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { Button } from "./button.js";
|
|
4
5
|
import { Carousel, CarouselContent, CarouselItem } from "./carousel.js";
|
|
5
|
-
import { ChevronLeftIcon, ChevronRightIcon, Fullscreen, XIcon } from "lucide-react";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import * as React from "react";
|
|
8
8
|
import { Dialog } from "@base-ui/react/dialog";
|
|
@@ -113,7 +113,7 @@ function GalleryButton({ className, variant = "ghost", ...rest }) {
|
|
|
113
113
|
}
|
|
114
114
|
/** Circular floating navigation button. Always present; the track loops. */
|
|
115
115
|
function GalleryArrow({ side, onClick, className }) {
|
|
116
|
-
const Icon = side === "prev" ?
|
|
116
|
+
const Icon = side === "prev" ? ChevronLeft : ChevronRight;
|
|
117
117
|
return /* @__PURE__ */ jsx(GalleryButton, {
|
|
118
118
|
type: "button",
|
|
119
119
|
"data-slot": `photo-gallery-${side}`,
|
|
@@ -272,7 +272,7 @@ function PhotoGalleryFullscreen({ images, open, onOpenChange, index, onIndexChan
|
|
|
272
272
|
"data-slot": "photo-gallery-fullscreen-close",
|
|
273
273
|
"aria-label": "Close gallery",
|
|
274
274
|
render: /* @__PURE__ */ jsx(GalleryButton, {}),
|
|
275
|
-
children: /* @__PURE__ */ jsx(
|
|
275
|
+
children: /* @__PURE__ */ jsx(X, { className: "size-4 sm:size-5" })
|
|
276
276
|
})]
|
|
277
277
|
}),
|
|
278
278
|
/* @__PURE__ */ jsxs(Carousel, {
|
package/dist/price-tag.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Check, ChevronDown } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
|
-
import { Check, ChevronDown } from "lucide-react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { cva } from "class-variance-authority";
|
|
6
6
|
import { Popover } from "@base-ui/react/popover";
|
|
@@ -62,7 +62,7 @@ function PropertyListingCardMediaTop({ className, ...props }) {
|
|
|
62
62
|
function PropertyListingCardOptionsBar({ className, render, ...props }) {
|
|
63
63
|
return useRender({
|
|
64
64
|
defaultTagName: "a",
|
|
65
|
-
props: mergeProps({ className: cn("absolute inset-x-0 bottom-0 z-10 flex min-h-9.5 items-center justify-center gap-1 bg-black/
|
|
65
|
+
props: mergeProps({ className: cn("absolute inset-x-0 bottom-0 z-10 flex min-h-9.5 items-center justify-center gap-1 bg-black/70 px-4 py-1.5 text-center text-gdt-subtext font-extrabold tracking-wide text-white uppercase transition-[background-color] hover:bg-black/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-line-focus", "supports-backdrop-filter:bg-black/40 supports-backdrop-filter:backdrop-blur-[15px] supports-backdrop-filter:hover:bg-black/55", className) }, props),
|
|
66
66
|
render,
|
|
67
67
|
state: { slot: "property-listing-card-options-bar" }
|
|
68
68
|
});
|
package/dist/rich-text-editor.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Baseline, Bold, ChevronDown, Code2, Image as Image$1, Italic, Link2, List, ListOrdered, Quote, Redo2, Underline, Undo2 } from "./icons.js";
|
|
2
3
|
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
4
|
import { useComponentSize } from "./size-context.js";
|
|
4
5
|
import { Button } from "./button.js";
|
|
5
6
|
import { Input } from "./input.js";
|
|
6
7
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger } from "./dropdown-menu.js";
|
|
7
8
|
import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
|
|
8
|
-
import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Baseline, Bold, ChevronDown, Code2, ImageIcon, Italic, Link2, List, ListOrdered, Quote, Redo2, Underline, Undo2 } from "lucide-react";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
import * as React from "react";
|
|
11
11
|
import { Color } from "@tiptap/extension-color";
|
|
12
|
-
import { Image
|
|
12
|
+
import { Image } from "@tiptap/extension-image";
|
|
13
13
|
import { Placeholder } from "@tiptap/extension-placeholder";
|
|
14
14
|
import { TextAlign } from "@tiptap/extension-text-align";
|
|
15
15
|
import { TextStyle } from "@tiptap/extension-text-style";
|
|
@@ -283,7 +283,7 @@ function ImageControl({ tokens, disabled, onInsert }) {
|
|
|
283
283
|
title: "Insert image",
|
|
284
284
|
onMouseDown: (event) => event.preventDefault(),
|
|
285
285
|
className: toolbarControlClass(tokens, false),
|
|
286
|
-
children: /* @__PURE__ */ jsx(
|
|
286
|
+
children: /* @__PURE__ */ jsx(Image$1, {})
|
|
287
287
|
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
288
288
|
showArrow: false,
|
|
289
289
|
align: "start",
|
|
@@ -387,7 +387,7 @@ const RichTextEditor = React.forwardRef(function RichTextEditor({ value, default
|
|
|
387
387
|
TextStyle,
|
|
388
388
|
Color,
|
|
389
389
|
TextAlign.configure({ types: ["heading", "paragraph"] }),
|
|
390
|
-
Image
|
|
390
|
+
Image.configure({
|
|
391
391
|
inline: false,
|
|
392
392
|
allowBase64: true
|
|
393
393
|
}),
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
|
|
2
|
+
import { TabsListVariant } from "./tabs.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
//#region src/scroll-spy.d.ts
|
|
5
|
+
type ScrollSpyProps = Omit<React.ComponentProps<"div">, "onChange"> & {
|
|
6
|
+
orientation?: "horizontal" | "vertical";
|
|
7
|
+
/** Controlled active section. */
|
|
8
|
+
value?: string;
|
|
9
|
+
/** Active section before the first scroll measurement lands. */
|
|
10
|
+
defaultValue?: string;
|
|
11
|
+
onValueChange?: (value: string) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Distance in px between the top of the scrollport and the line a section
|
|
14
|
+
* has to cross to become active. Set it to the height of a sticky header —
|
|
15
|
+
* it also becomes each section's `scroll-margin-top`, so scrolling lands
|
|
16
|
+
* the heading below the header rather than under it.
|
|
17
|
+
*/
|
|
18
|
+
scrollOffset?: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* `Tabs` for a page that shows everything at once: every section stays mounted
|
|
22
|
+
* and visible, the triggers scroll to their section, and the active trigger
|
|
23
|
+
* tracks whichever section the reader is currently on.
|
|
24
|
+
*
|
|
25
|
+
* The parts mirror the `Tabs` API — `ScrollSpy` / `ScrollSpyList` /
|
|
26
|
+
* `ScrollSpyTrigger` / `ScrollSpyContent`, matched by `value` — and the list
|
|
27
|
+
* takes the same `variant` and `size` as `TabsList`, so the two read as one
|
|
28
|
+
* family. Overflow ("More" dropdowns, per-breakpoint trigger counts) is the
|
|
29
|
+
* consuming app's job, exactly as it is with `Tabs`;
|
|
30
|
+
* `scrollSpyTriggerClassName` is exported so an overflow button can match the
|
|
31
|
+
* real triggers.
|
|
32
|
+
*/
|
|
33
|
+
declare function ScrollSpy({ className, orientation, value, defaultValue, onValueChange, scrollOffset, children, ...props }: ScrollSpyProps): React.JSX.Element;
|
|
34
|
+
type ScrollSpyListProps = React.ComponentProps<"nav"> & {
|
|
35
|
+
variant?: TabsListVariant;
|
|
36
|
+
size?: ComponentSize;
|
|
37
|
+
/**
|
|
38
|
+
* Keep the active trigger visible as the reader scrolls. Opt in when the
|
|
39
|
+
* list itself scrolls — without it, a strip narrower than its triggers looks
|
|
40
|
+
* frozen once the active one passes out of view. No-op when nothing
|
|
41
|
+
* overflows, and it never scrolls anything but the list.
|
|
42
|
+
*/
|
|
43
|
+
scrollActiveIntoView?: boolean;
|
|
44
|
+
};
|
|
45
|
+
declare function ScrollSpyList({ className, variant, size, children, scrollActiveIntoView, "aria-label": ariaLabel, ...props }: ScrollSpyListProps): React.JSX.Element;
|
|
46
|
+
/**
|
|
47
|
+
* Trigger styling, exported so an overflow "More" button outside the list can
|
|
48
|
+
* render the same look — the `Tabs` trigger classes verbatim, so the two
|
|
49
|
+
* components stay pixel-identical.
|
|
50
|
+
*/
|
|
51
|
+
declare const scrollSpyTriggerClassName: string;
|
|
52
|
+
type ScrollSpyTriggerProps = Omit<React.ComponentProps<"button">, "value"> & {
|
|
53
|
+
value: string;
|
|
54
|
+
};
|
|
55
|
+
declare function ScrollSpyTrigger({ className, value, type, onClick, ...props }: ScrollSpyTriggerProps): React.JSX.Element;
|
|
56
|
+
type ScrollSpyContentProps = Omit<React.ComponentProps<"section">, "value"> & {
|
|
57
|
+
value: string;
|
|
58
|
+
};
|
|
59
|
+
declare function ScrollSpyContent({ className, value, style, tabIndex, ...props }: ScrollSpyContentProps): React.JSX.Element;
|
|
60
|
+
//#endregion
|
|
61
|
+
export { ScrollSpy, ScrollSpyContent, type ScrollSpyContentProps, ScrollSpyList, type ScrollSpyListProps, type ScrollSpyProps, ScrollSpyTrigger, type ScrollSpyTriggerProps, scrollSpyTriggerClassName };
|