@chekinapp/ui 0.0.91 → 0.0.93
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 +1128 -636
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +133 -12
- package/dist/index.d.ts +133 -12
- package/dist/index.js +1159 -660
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1707,6 +1707,25 @@ function toCssSize(size) {
|
|
|
1707
1707
|
return size;
|
|
1708
1708
|
}
|
|
1709
1709
|
}
|
|
1710
|
+
function getCanvasBlob(canvas) {
|
|
1711
|
+
return new Promise((resolve) => {
|
|
1712
|
+
canvas.toBlob((blob) => {
|
|
1713
|
+
resolve(blob);
|
|
1714
|
+
});
|
|
1715
|
+
});
|
|
1716
|
+
}
|
|
1717
|
+
function toBase64(file) {
|
|
1718
|
+
return new Promise((resolve, reject) => {
|
|
1719
|
+
const reader = new FileReader();
|
|
1720
|
+
reader.readAsDataURL(file);
|
|
1721
|
+
reader.onload = () => resolve(String(reader.result));
|
|
1722
|
+
reader.onerror = () => reject(new Error("Failed to read file as base64"));
|
|
1723
|
+
});
|
|
1724
|
+
}
|
|
1725
|
+
function getFileSizeMB(file) {
|
|
1726
|
+
if (!file) return;
|
|
1727
|
+
return file.size / Math.pow(1024, 2);
|
|
1728
|
+
}
|
|
1710
1729
|
|
|
1711
1730
|
// src/tooltip/Tooltip.tsx
|
|
1712
1731
|
import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
@@ -2643,7 +2662,7 @@ function useCombinedRef(...refs) {
|
|
|
2643
2662
|
import { useEffect as useEffect6, useState as useState6 } from "react";
|
|
2644
2663
|
var MOBILE_BREAKPOINT = 768;
|
|
2645
2664
|
function useIsMobile({ breakpoint = MOBILE_BREAKPOINT } = {}) {
|
|
2646
|
-
const [
|
|
2665
|
+
const [isMobile3, setIsMobile] = useState6(void 0);
|
|
2647
2666
|
useEffect6(() => {
|
|
2648
2667
|
const mediaQuery = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
|
|
2649
2668
|
const onChange = () => {
|
|
@@ -2655,7 +2674,7 @@ function useIsMobile({ breakpoint = MOBILE_BREAKPOINT } = {}) {
|
|
|
2655
2674
|
mediaQuery.removeEventListener("change", onChange);
|
|
2656
2675
|
};
|
|
2657
2676
|
}, [breakpoint]);
|
|
2658
|
-
return !!
|
|
2677
|
+
return !!isMobile3;
|
|
2659
2678
|
}
|
|
2660
2679
|
|
|
2661
2680
|
// src/hooks/use-is-mounted.ts
|
|
@@ -2803,7 +2822,11 @@ function useModalWithHistoryControls({
|
|
|
2803
2822
|
}, [resetHash]);
|
|
2804
2823
|
const toggleModal = useCallback7(() => {
|
|
2805
2824
|
setIsOpen(!isOpen);
|
|
2806
|
-
|
|
2825
|
+
if (isOpen) {
|
|
2826
|
+
resetHash();
|
|
2827
|
+
} else {
|
|
2828
|
+
addHash();
|
|
2829
|
+
}
|
|
2807
2830
|
}, [addHash, isOpen, resetHash]);
|
|
2808
2831
|
useEffect10(() => {
|
|
2809
2832
|
const targetWindow = getWindow();
|
|
@@ -3004,7 +3027,7 @@ function useScrollFrameIntoView(active, options = {}) {
|
|
|
3004
3027
|
}
|
|
3005
3028
|
|
|
3006
3029
|
// src/hooks/use-scrollable-area.ts
|
|
3007
|
-
import {
|
|
3030
|
+
import { useEffect as useEffect13, useRef as useRef9, useState as useState9 } from "react";
|
|
3008
3031
|
var SCROLL_THRESHOLD = 1;
|
|
3009
3032
|
function getScrollableAreaState(element) {
|
|
3010
3033
|
const { scrollTop, scrollHeight, clientHeight } = element;
|
|
@@ -3016,17 +3039,15 @@ function useScrollableArea(options = {}) {
|
|
|
3016
3039
|
const internalRef = useRef9(null);
|
|
3017
3040
|
const ref = options.ref ?? internalRef;
|
|
3018
3041
|
const [state, setState] = useState9({ canScrollUp: false, canScrollDown: false });
|
|
3019
|
-
const updateState = useCallback10(() => {
|
|
3020
|
-
const element = ref.current;
|
|
3021
|
-
if (!element) return;
|
|
3022
|
-
const newState = getScrollableAreaState(element);
|
|
3023
|
-
setState(
|
|
3024
|
-
(prev) => prev.canScrollUp !== newState.canScrollUp || prev.canScrollDown !== newState.canScrollDown ? newState : prev
|
|
3025
|
-
);
|
|
3026
|
-
}, [ref]);
|
|
3027
3042
|
useEffect13(() => {
|
|
3028
3043
|
const element = ref.current;
|
|
3029
3044
|
if (!element) return;
|
|
3045
|
+
const updateState = () => {
|
|
3046
|
+
const newState = getScrollableAreaState(element);
|
|
3047
|
+
setState(
|
|
3048
|
+
(prev) => prev.canScrollUp !== newState.canScrollUp || prev.canScrollDown !== newState.canScrollDown ? newState : prev
|
|
3049
|
+
);
|
|
3050
|
+
};
|
|
3030
3051
|
updateState();
|
|
3031
3052
|
const resizeObserver = new ResizeObserver(updateState);
|
|
3032
3053
|
resizeObserver.observe(element);
|
|
@@ -3035,7 +3056,7 @@ function useScrollableArea(options = {}) {
|
|
|
3035
3056
|
resizeObserver.disconnect();
|
|
3036
3057
|
element.removeEventListener("scroll", updateState);
|
|
3037
3058
|
};
|
|
3038
|
-
}, [ref
|
|
3059
|
+
}, [ref]);
|
|
3039
3060
|
return {
|
|
3040
3061
|
ref,
|
|
3041
3062
|
...state
|
|
@@ -3062,12 +3083,12 @@ function useDebounce(value, delayMs = 1e3, handleChange) {
|
|
|
3062
3083
|
}
|
|
3063
3084
|
|
|
3064
3085
|
// src/hooks/use-debounced-function.ts
|
|
3065
|
-
import { useCallback as
|
|
3086
|
+
import { useCallback as useCallback10, useRef as useRef10 } from "react";
|
|
3066
3087
|
function useDebouncedFunction(callback, delay) {
|
|
3067
3088
|
const timerRef = useRef10();
|
|
3068
3089
|
const immediateCalling = useRef10(false);
|
|
3069
3090
|
const callbackFn = useEvent(callback);
|
|
3070
|
-
const throttled =
|
|
3091
|
+
const throttled = useCallback10(
|
|
3071
3092
|
(...args) => {
|
|
3072
3093
|
clearTimeout(timerRef.current);
|
|
3073
3094
|
if (immediateCalling.current) {
|
|
@@ -3082,7 +3103,7 @@ function useDebouncedFunction(callback, delay) {
|
|
|
3082
3103
|
},
|
|
3083
3104
|
[callbackFn, delay]
|
|
3084
3105
|
);
|
|
3085
|
-
const immediate =
|
|
3106
|
+
const immediate = useCallback10(() => {
|
|
3086
3107
|
immediateCalling.current = true;
|
|
3087
3108
|
}, []);
|
|
3088
3109
|
return { throttled, immediate };
|
|
@@ -3099,7 +3120,7 @@ function usePrevious(value, defaultValue) {
|
|
|
3099
3120
|
}
|
|
3100
3121
|
|
|
3101
3122
|
// src/hooks/use-pagination.ts
|
|
3102
|
-
import { useCallback as
|
|
3123
|
+
import { useCallback as useCallback11, useEffect as useEffect16, useMemo, useState as useState11 } from "react";
|
|
3103
3124
|
|
|
3104
3125
|
// src/storage/AbstractStorage.ts
|
|
3105
3126
|
var AbstractStorage = class {
|
|
@@ -3202,14 +3223,14 @@ function usePagination(config) {
|
|
|
3202
3223
|
return Math.min(state.page * state.pageSize, state.totalItems);
|
|
3203
3224
|
}, [state.page, state.pageSize, state.totalItems]);
|
|
3204
3225
|
const isEmpty = useMemo(() => state.totalItems === 0, [state.totalItems]);
|
|
3205
|
-
const setPage =
|
|
3226
|
+
const setPage = useCallback11(
|
|
3206
3227
|
(page) => {
|
|
3207
3228
|
const clampedPage = Math.max(1, Math.min(page, pages || 1));
|
|
3208
3229
|
setState((prev) => ({ ...prev, page: clampedPage }));
|
|
3209
3230
|
},
|
|
3210
3231
|
[pages]
|
|
3211
3232
|
);
|
|
3212
|
-
const setPageSize =
|
|
3233
|
+
const setPageSize = useCallback11((pageSize) => {
|
|
3213
3234
|
const validPageSize = Math.max(1, pageSize);
|
|
3214
3235
|
setState((prev) => {
|
|
3215
3236
|
const currentFirstItem = (prev.page - 1) * prev.pageSize + 1;
|
|
@@ -3221,7 +3242,7 @@ function usePagination(config) {
|
|
|
3221
3242
|
};
|
|
3222
3243
|
});
|
|
3223
3244
|
}, []);
|
|
3224
|
-
const setTotalItems =
|
|
3245
|
+
const setTotalItems = useCallback11((totalItems) => {
|
|
3225
3246
|
const validTotalItems = Math.max(0, totalItems);
|
|
3226
3247
|
setState((prev) => {
|
|
3227
3248
|
const newPages = validTotalItems > 0 ? Math.ceil(validTotalItems / prev.pageSize) : 0;
|
|
@@ -3233,19 +3254,19 @@ function usePagination(config) {
|
|
|
3233
3254
|
};
|
|
3234
3255
|
});
|
|
3235
3256
|
}, []);
|
|
3236
|
-
const nextPage =
|
|
3257
|
+
const nextPage = useCallback11(() => {
|
|
3237
3258
|
setPage(state.page + 1);
|
|
3238
3259
|
}, [setPage, state.page]);
|
|
3239
|
-
const previousPage =
|
|
3260
|
+
const previousPage = useCallback11(() => {
|
|
3240
3261
|
setPage(state.page - 1);
|
|
3241
3262
|
}, [setPage, state.page]);
|
|
3242
|
-
const goToFirstPage =
|
|
3263
|
+
const goToFirstPage = useCallback11(() => {
|
|
3243
3264
|
setPage(1);
|
|
3244
3265
|
}, [setPage]);
|
|
3245
|
-
const goToLastPage =
|
|
3266
|
+
const goToLastPage = useCallback11(() => {
|
|
3246
3267
|
setPage(pages);
|
|
3247
3268
|
}, [setPage, pages]);
|
|
3248
|
-
const reset =
|
|
3269
|
+
const reset = useCallback11(() => {
|
|
3249
3270
|
setState({
|
|
3250
3271
|
page: defaultPage,
|
|
3251
3272
|
pageSize: defaultPageSize,
|
|
@@ -3274,11 +3295,11 @@ function usePagination(config) {
|
|
|
3274
3295
|
}
|
|
3275
3296
|
|
|
3276
3297
|
// src/hooks/use-search-input.ts
|
|
3277
|
-
import { useCallback as
|
|
3298
|
+
import { useCallback as useCallback12, useState as useState12 } from "react";
|
|
3278
3299
|
function useSearchInput({ value, onChange }) {
|
|
3279
3300
|
const [innerValue, setInnerValue] = useState12(value || "");
|
|
3280
3301
|
const [, setDebouncedValue] = useDebounce(innerValue, 600, onChange);
|
|
3281
|
-
const handleChange =
|
|
3302
|
+
const handleChange = useCallback12(
|
|
3282
3303
|
(event) => {
|
|
3283
3304
|
if (event.target.value === "") {
|
|
3284
3305
|
setDebouncedValue("");
|
|
@@ -3328,7 +3349,7 @@ function useStickyStuck(ref) {
|
|
|
3328
3349
|
}
|
|
3329
3350
|
|
|
3330
3351
|
// src/hooks/use-switch-section-active.ts
|
|
3331
|
-
import { useCallback as
|
|
3352
|
+
import { useCallback as useCallback13, useEffect as useEffect18, useLayoutEffect as useLayoutEffect3, useState as useState14 } from "react";
|
|
3332
3353
|
function useSwitchSectionActive(preloadedSectionActive, { canToggle, onToggle, onSectionActiveChange, onTouched } = {}) {
|
|
3333
3354
|
const [isSectionActive, setIsSectionActive] = useState14(false);
|
|
3334
3355
|
const [preloadedIsSendingEnabled, setPreloadedIsSendingEnabled] = useState14(null);
|
|
@@ -3346,7 +3367,7 @@ function useSwitchSectionActive(preloadedSectionActive, { canToggle, onToggle, o
|
|
|
3346
3367
|
},
|
|
3347
3368
|
[preloadedSectionActive]
|
|
3348
3369
|
);
|
|
3349
|
-
const toggleIsSectionActive =
|
|
3370
|
+
const toggleIsSectionActive = useCallback13(() => {
|
|
3350
3371
|
const isTogglingDisabled = canToggle && !canToggle(isSectionActive);
|
|
3351
3372
|
if (isTogglingDisabled) {
|
|
3352
3373
|
return;
|
|
@@ -3433,13 +3454,13 @@ function useTimeout(callback, ms = 0) {
|
|
|
3433
3454
|
}
|
|
3434
3455
|
|
|
3435
3456
|
// src/hooks/use-hover.ts
|
|
3436
|
-
import { useCallback as
|
|
3457
|
+
import { useCallback as useCallback14, useState as useState16 } from "react";
|
|
3437
3458
|
function useHover() {
|
|
3438
3459
|
const [isHovering, setIsHovering] = useState16(false);
|
|
3439
|
-
const handleMouseEnter =
|
|
3460
|
+
const handleMouseEnter = useCallback14(() => {
|
|
3440
3461
|
setIsHovering(true);
|
|
3441
3462
|
}, []);
|
|
3442
|
-
const handleMouseLeave =
|
|
3463
|
+
const handleMouseLeave = useCallback14(() => {
|
|
3443
3464
|
setIsHovering(false);
|
|
3444
3465
|
}, []);
|
|
3445
3466
|
return {
|
|
@@ -3450,7 +3471,7 @@ function useHover() {
|
|
|
3450
3471
|
}
|
|
3451
3472
|
|
|
3452
3473
|
// src/hooks/use-key-down.ts
|
|
3453
|
-
import { useCallback as
|
|
3474
|
+
import { useCallback as useCallback15, useEffect as useEffect21 } from "react";
|
|
3454
3475
|
function useKeyDown({
|
|
3455
3476
|
key,
|
|
3456
3477
|
cb,
|
|
@@ -3464,7 +3485,7 @@ function useKeyDown({
|
|
|
3464
3485
|
altKey = false
|
|
3465
3486
|
} = options ?? {};
|
|
3466
3487
|
const handleCallback = useEvent(cb);
|
|
3467
|
-
const handleKeyDown =
|
|
3488
|
+
const handleKeyDown = useCallback15(
|
|
3468
3489
|
(event) => {
|
|
3469
3490
|
const keys = Array.isArray(key) ? key : [key];
|
|
3470
3491
|
const isKeyMatch = keys.includes(event.key);
|
|
@@ -4518,7 +4539,7 @@ ExternalLink.displayName = "ExternalLink";
|
|
|
4518
4539
|
|
|
4519
4540
|
// src/expandable-content/ExpandableContent.tsx
|
|
4520
4541
|
import {
|
|
4521
|
-
useCallback as
|
|
4542
|
+
useCallback as useCallback17,
|
|
4522
4543
|
useEffect as useEffect24,
|
|
4523
4544
|
useRef as useRef16,
|
|
4524
4545
|
useState as useState19
|
|
@@ -4555,7 +4576,7 @@ function ExpandableContent({
|
|
|
4555
4576
|
const [internalOpen, setInternalOpen] = useState19(defaultOpen);
|
|
4556
4577
|
const isOpen = open ?? internalOpen;
|
|
4557
4578
|
const isOverflowing = contentHeight > heightLimit;
|
|
4558
|
-
const measureContent =
|
|
4579
|
+
const measureContent = useCallback17(() => {
|
|
4559
4580
|
const nextHeight = contentRef.current?.getBoundingClientRect().height ?? 0;
|
|
4560
4581
|
setContentHeight(nextHeight);
|
|
4561
4582
|
}, []);
|
|
@@ -4614,7 +4635,7 @@ function ExpandableContent({
|
|
|
4614
4635
|
// src/file-input-button/FileInputButton.tsx
|
|
4615
4636
|
import {
|
|
4616
4637
|
forwardRef as forwardRef24,
|
|
4617
|
-
useCallback as
|
|
4638
|
+
useCallback as useCallback18
|
|
4618
4639
|
} from "react";
|
|
4619
4640
|
import { Upload } from "lucide-react";
|
|
4620
4641
|
import { jsx as jsx54, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
@@ -4630,7 +4651,7 @@ var FileInputButton = forwardRef24(
|
|
|
4630
4651
|
size = "default",
|
|
4631
4652
|
...props
|
|
4632
4653
|
}, ref) => {
|
|
4633
|
-
const handleChange =
|
|
4654
|
+
const handleChange = useCallback18(
|
|
4634
4655
|
(event) => {
|
|
4635
4656
|
onChange?.(event);
|
|
4636
4657
|
event.target.value = "";
|
|
@@ -5049,7 +5070,7 @@ function extractDigits(str) {
|
|
|
5049
5070
|
}
|
|
5050
5071
|
|
|
5051
5072
|
// src/input-otp/useInputOTP.ts
|
|
5052
|
-
import { useCallback as
|
|
5073
|
+
import { useCallback as useCallback19, useEffect as useEffect25, useMemo as useMemo3, useRef as useRef17, useState as useState22 } from "react";
|
|
5053
5074
|
function useInputOTP({
|
|
5054
5075
|
maxLength,
|
|
5055
5076
|
value,
|
|
@@ -5074,7 +5095,7 @@ function useInputOTP({
|
|
|
5074
5095
|
return nextSlots;
|
|
5075
5096
|
}, [value, maxLength]);
|
|
5076
5097
|
slotsRef.current = slots;
|
|
5077
|
-
const emitValue =
|
|
5098
|
+
const emitValue = useCallback19(
|
|
5078
5099
|
(newSlots) => {
|
|
5079
5100
|
let lastFilledIndex = -1;
|
|
5080
5101
|
for (let index = newSlots.length - 1; index >= 0; index -= 1) {
|
|
@@ -5100,7 +5121,7 @@ function useInputOTP({
|
|
|
5100
5121
|
inputRefs.current[0].focus();
|
|
5101
5122
|
}
|
|
5102
5123
|
}, [autoFocus]);
|
|
5103
|
-
const handleContainerFocusIn =
|
|
5124
|
+
const handleContainerFocusIn = useCallback19((event) => {
|
|
5104
5125
|
clearTimeout(blurTimeoutRef.current);
|
|
5105
5126
|
const target = event.target;
|
|
5106
5127
|
const slotIndex = inputRefs.current.indexOf(target);
|
|
@@ -5108,7 +5129,7 @@ function useInputOTP({
|
|
|
5108
5129
|
setActiveIndex(slotIndex);
|
|
5109
5130
|
}
|
|
5110
5131
|
}, []);
|
|
5111
|
-
const handleContainerFocusOut =
|
|
5132
|
+
const handleContainerFocusOut = useCallback19(() => {
|
|
5112
5133
|
clearTimeout(blurTimeoutRef.current);
|
|
5113
5134
|
blurTimeoutRef.current = setTimeout(() => {
|
|
5114
5135
|
if (!containerRef.current?.contains(document.activeElement)) {
|
|
@@ -5117,7 +5138,7 @@ function useInputOTP({
|
|
|
5117
5138
|
}, 0);
|
|
5118
5139
|
}, []);
|
|
5119
5140
|
useEffect25(() => () => clearTimeout(blurTimeoutRef.current), []);
|
|
5120
|
-
const handleDigitInput =
|
|
5141
|
+
const handleDigitInput = useCallback19(
|
|
5121
5142
|
(index, digit) => {
|
|
5122
5143
|
if (!DIGIT_REGEX.test(digit)) return;
|
|
5123
5144
|
const newSlots = [...slotsRef.current];
|
|
@@ -5131,7 +5152,7 @@ function useInputOTP({
|
|
|
5131
5152
|
},
|
|
5132
5153
|
[maxLength, emitValue]
|
|
5133
5154
|
);
|
|
5134
|
-
const handleDelete =
|
|
5155
|
+
const handleDelete = useCallback19(
|
|
5135
5156
|
(index) => {
|
|
5136
5157
|
const newSlots = [...slotsRef.current];
|
|
5137
5158
|
if (newSlots[index]) {
|
|
@@ -5146,7 +5167,7 @@ function useInputOTP({
|
|
|
5146
5167
|
},
|
|
5147
5168
|
[emitValue]
|
|
5148
5169
|
);
|
|
5149
|
-
const handlePaste =
|
|
5170
|
+
const handlePaste = useCallback19(
|
|
5150
5171
|
(text) => {
|
|
5151
5172
|
const digits = extractDigits(text).slice(0, maxLength);
|
|
5152
5173
|
if (digits.length > 0) {
|
|
@@ -5196,7 +5217,7 @@ function useInputOTP({
|
|
|
5196
5217
|
|
|
5197
5218
|
// src/input-otp/useInputOTPSlot.ts
|
|
5198
5219
|
import {
|
|
5199
|
-
useCallback as
|
|
5220
|
+
useCallback as useCallback20
|
|
5200
5221
|
} from "react";
|
|
5201
5222
|
function useInputOTPSlot(index) {
|
|
5202
5223
|
const {
|
|
@@ -5267,13 +5288,13 @@ function useInputOTPSlot(index) {
|
|
|
5267
5288
|
event.preventDefault();
|
|
5268
5289
|
handlePaste(event.clipboardData.getData("text/plain"));
|
|
5269
5290
|
};
|
|
5270
|
-
const setInputRef =
|
|
5291
|
+
const setInputRef = useCallback20(
|
|
5271
5292
|
(element) => {
|
|
5272
5293
|
inputRefs.current[index] = element;
|
|
5273
5294
|
},
|
|
5274
5295
|
[index, inputRefs]
|
|
5275
5296
|
);
|
|
5276
|
-
const focusSlot =
|
|
5297
|
+
const focusSlot = useCallback20(() => {
|
|
5277
5298
|
inputRefs.current[index]?.focus();
|
|
5278
5299
|
}, [index, inputRefs]);
|
|
5279
5300
|
return {
|
|
@@ -5598,7 +5619,23 @@ var translation_default2 = {
|
|
|
5598
5619
|
past_dates: "Date cannot be before {{minDate}}",
|
|
5599
5620
|
future_dates: "Date cannot be after {{maxDate}}",
|
|
5600
5621
|
signature_placeholder_text: "Sign inside this box.<br/> Use your finger.<br/> Tap to start.",
|
|
5622
|
+
open_devices_camera: "Open device's camera",
|
|
5623
|
+
place_document_inside_frame: "Place your document inside the frame",
|
|
5624
|
+
close_other_application_that_may_be_using_your_camera: "Close other applications that may be using your camera",
|
|
5625
|
+
if_you_use_external_camera_disconnect_and_reconnect: "If you use an external camera, disconnect and reconnect it",
|
|
5626
|
+
close_the_browser_re_open_it: "Close the browser and reopen it",
|
|
5601
5627
|
camera_permissions_denied: "The camera doesn't open? Make sure to allow the browser permission to use the camera.",
|
|
5628
|
+
camera_errors: {
|
|
5629
|
+
experiencing_camera_issues: "Experiencing camera issues?",
|
|
5630
|
+
chekin_cant_use_your_camera: "Chekin can't use your camera",
|
|
5631
|
+
please_try_a_different_browser: "Your camera doesn't work in this browser. Please, try to open the link in a different browser.",
|
|
5632
|
+
permissions_denied: "Permission denied",
|
|
5633
|
+
camera_permissions_denied: "The camera doesn't open? Make sure to allow the browser permission to use the camera.",
|
|
5634
|
+
no_camera_device_found: "No camera device found. Please connect a camera.",
|
|
5635
|
+
constraints_camera_error: "Constraints cannot be satisfied by available devices.",
|
|
5636
|
+
safari_camera_error: "Safari could not satisfy the camera requirements",
|
|
5637
|
+
try_chrome_or_firefox: "Please try Chrome or Firefox"
|
|
5638
|
+
},
|
|
5602
5639
|
clear: "Clear",
|
|
5603
5640
|
show_less: "Show less",
|
|
5604
5641
|
show_more: "Show more"
|
|
@@ -6721,7 +6758,7 @@ var LegacyMultiSelect = forwardRef33(LegacyMultiSelectInner);
|
|
|
6721
6758
|
|
|
6722
6759
|
// src/legacy-fields/select/InfinitySelect.tsx
|
|
6723
6760
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
6724
|
-
import { useCallback as
|
|
6761
|
+
import { useCallback as useCallback21, useEffect as useEffect26, useId as useId7, useRef as useRef19, useState as useState27 } from "react";
|
|
6725
6762
|
import { jsx as jsx79, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
6726
6763
|
function LegacyInfinitySelect({
|
|
6727
6764
|
label,
|
|
@@ -6745,7 +6782,7 @@ function LegacyInfinitySelect({
|
|
|
6745
6782
|
estimateSize: () => itemHeight,
|
|
6746
6783
|
overscan: 5
|
|
6747
6784
|
});
|
|
6748
|
-
const loadMore =
|
|
6785
|
+
const loadMore = useCallback21(() => {
|
|
6749
6786
|
if (hasNextPage && !isFetchingNextPage) {
|
|
6750
6787
|
fetchNextPage();
|
|
6751
6788
|
}
|
|
@@ -7113,11 +7150,11 @@ var RadioGroupItem = React25.forwardRef(({ className, size = "default", ...props
|
|
|
7113
7150
|
RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
|
|
7114
7151
|
|
|
7115
7152
|
// src/radio/useRadioOptions.ts
|
|
7116
|
-
import { useCallback as
|
|
7153
|
+
import { useCallback as useCallback22, useState as useState28 } from "react";
|
|
7117
7154
|
function useRadioOptions({ options, defaultValue, onChange }) {
|
|
7118
7155
|
const initialValue = (typeof defaultValue === "string" ? options.find((option) => option.value === defaultValue) : defaultValue) || "";
|
|
7119
7156
|
const [selectedValue, setSelectedValue] = useState28(initialValue);
|
|
7120
|
-
const handleValueChange =
|
|
7157
|
+
const handleValueChange = useCallback22(
|
|
7121
7158
|
(value) => {
|
|
7122
7159
|
setSelectedValue(value);
|
|
7123
7160
|
const selectedOption = options.find((option) => option.value === value) || "";
|
|
@@ -8208,7 +8245,7 @@ var SidebarProvider = React28.forwardRef(
|
|
|
8208
8245
|
stateName = SIDEBAR_COOKIE_NAME_DEFAULT,
|
|
8209
8246
|
...props
|
|
8210
8247
|
}, ref) => {
|
|
8211
|
-
const
|
|
8248
|
+
const isMobile3 = useIsMobile({ breakpoint: 641 });
|
|
8212
8249
|
const [openMobile, setOpenMobile] = React28.useState(false);
|
|
8213
8250
|
const [_open, _setOpen] = React28.useState(defaultOpen);
|
|
8214
8251
|
const open = openProp ?? _open;
|
|
@@ -8225,8 +8262,8 @@ var SidebarProvider = React28.forwardRef(
|
|
|
8225
8262
|
[setOpenProp, open, stateName]
|
|
8226
8263
|
);
|
|
8227
8264
|
const toggleSidebar = React28.useCallback(() => {
|
|
8228
|
-
return
|
|
8229
|
-
}, [
|
|
8265
|
+
return isMobile3 ? setOpenMobile((value) => !value) : setOpen((value) => !value);
|
|
8266
|
+
}, [isMobile3, setOpen]);
|
|
8230
8267
|
React28.useEffect(() => {
|
|
8231
8268
|
const handleKeyDown = (event) => {
|
|
8232
8269
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
@@ -8243,12 +8280,12 @@ var SidebarProvider = React28.forwardRef(
|
|
|
8243
8280
|
state,
|
|
8244
8281
|
open,
|
|
8245
8282
|
setOpen,
|
|
8246
|
-
isMobile:
|
|
8283
|
+
isMobile: isMobile3,
|
|
8247
8284
|
openMobile,
|
|
8248
8285
|
setOpenMobile,
|
|
8249
8286
|
toggleSidebar
|
|
8250
8287
|
}),
|
|
8251
|
-
[state, open, setOpen,
|
|
8288
|
+
[state, open, setOpen, isMobile3, openMobile, setOpenMobile, toggleSidebar]
|
|
8252
8289
|
);
|
|
8253
8290
|
return /* @__PURE__ */ jsx105(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx105(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx105(
|
|
8254
8291
|
"div",
|
|
@@ -8275,7 +8312,7 @@ var Sidebar = React28.forwardRef(
|
|
|
8275
8312
|
children,
|
|
8276
8313
|
...props
|
|
8277
8314
|
}, ref) => {
|
|
8278
|
-
const { isMobile:
|
|
8315
|
+
const { isMobile: isMobile3, state, openMobile, setOpenMobile } = useSidebar();
|
|
8279
8316
|
if (collapsible === "none") {
|
|
8280
8317
|
return /* @__PURE__ */ jsx105(
|
|
8281
8318
|
"div",
|
|
@@ -8290,7 +8327,7 @@ var Sidebar = React28.forwardRef(
|
|
|
8290
8327
|
}
|
|
8291
8328
|
);
|
|
8292
8329
|
}
|
|
8293
|
-
if (
|
|
8330
|
+
if (isMobile3) {
|
|
8294
8331
|
return /* @__PURE__ */ jsx105(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs64(
|
|
8295
8332
|
SheetContent,
|
|
8296
8333
|
{
|
|
@@ -8361,7 +8398,7 @@ var Sidebar = React28.forwardRef(
|
|
|
8361
8398
|
);
|
|
8362
8399
|
Sidebar.displayName = "Sidebar";
|
|
8363
8400
|
var SidebarTrigger = React28.forwardRef(({ className, onClick, icon, ...props }, ref) => {
|
|
8364
|
-
const { toggleSidebar, open, isMobile:
|
|
8401
|
+
const { toggleSidebar, open, isMobile: isMobile3, openMobile } = useSidebar();
|
|
8365
8402
|
return /* @__PURE__ */ jsxs64(
|
|
8366
8403
|
Button,
|
|
8367
8404
|
{
|
|
@@ -8380,7 +8417,7 @@ var SidebarTrigger = React28.forwardRef(({ className, onClick, icon, ...props },
|
|
|
8380
8417
|
},
|
|
8381
8418
|
...props,
|
|
8382
8419
|
children: [
|
|
8383
|
-
icon || (
|
|
8420
|
+
icon || (isMobile3 ? openMobile : open) ? icon || /* @__PURE__ */ jsx105(ArrowLeftFromLineIcon, {}) : /* @__PURE__ */ jsx105(ArrowRightFromLineIcon, {}),
|
|
8384
8421
|
/* @__PURE__ */ jsx105("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
8385
8422
|
]
|
|
8386
8423
|
}
|
|
@@ -8600,7 +8637,7 @@ var SidebarMenuButton = React28.forwardRef(
|
|
|
8600
8637
|
...props
|
|
8601
8638
|
}, ref) => {
|
|
8602
8639
|
const Comp = asChild ? Slot4 : "button";
|
|
8603
|
-
const { isMobile:
|
|
8640
|
+
const { isMobile: isMobile3, state } = useSidebar();
|
|
8604
8641
|
const button = /* @__PURE__ */ jsx105(
|
|
8605
8642
|
Comp,
|
|
8606
8643
|
{
|
|
@@ -8624,7 +8661,7 @@ var SidebarMenuButton = React28.forwardRef(
|
|
|
8624
8661
|
{
|
|
8625
8662
|
side: "right",
|
|
8626
8663
|
align: "center",
|
|
8627
|
-
hidden: state !== "collapsed" ||
|
|
8664
|
+
hidden: state !== "collapsed" || isMobile3,
|
|
8628
8665
|
className: "capitalize",
|
|
8629
8666
|
variant: "dark",
|
|
8630
8667
|
...tooltipProps
|
|
@@ -8653,8 +8690,8 @@ var SidebarMenuAction = React28.forwardRef(({ className, asChild = false, showOn
|
|
|
8653
8690
|
SidebarMenuAction.displayName = "SidebarMenuAction";
|
|
8654
8691
|
var SidebarMenuBadge = React28.forwardRef(
|
|
8655
8692
|
({ className, ...props }, ref) => {
|
|
8656
|
-
const { open, isMobile:
|
|
8657
|
-
const isOpen =
|
|
8693
|
+
const { open, isMobile: isMobile3, openMobile } = useSidebar();
|
|
8694
|
+
const isOpen = isMobile3 ? openMobile : open;
|
|
8658
8695
|
return /* @__PURE__ */ jsx105(
|
|
8659
8696
|
"div",
|
|
8660
8697
|
{
|
|
@@ -9895,11 +9932,11 @@ function TimelineDescription({ className, asChild, ...props }) {
|
|
|
9895
9932
|
import { Toaster, toast as toast2 } from "sonner";
|
|
9896
9933
|
|
|
9897
9934
|
// src/toaster/useUpdateToast.ts
|
|
9898
|
-
import { useCallback as
|
|
9935
|
+
import { useCallback as useCallback25, useRef as useRef22 } from "react";
|
|
9899
9936
|
import { toast } from "sonner";
|
|
9900
9937
|
function useUpdateToast({ id }) {
|
|
9901
9938
|
const toastIdRef = useRef22("");
|
|
9902
|
-
const getToastOptions =
|
|
9939
|
+
const getToastOptions = useCallback25(
|
|
9903
9940
|
(options) => ({
|
|
9904
9941
|
id: toastIdRef.current,
|
|
9905
9942
|
dismissible: false,
|
|
@@ -10141,7 +10178,7 @@ function TogglesInternal({
|
|
|
10141
10178
|
var Toggles = forwardRef53(TogglesInternal);
|
|
10142
10179
|
|
|
10143
10180
|
// src/three-dots-loader/ThreeDotsLoader.tsx
|
|
10144
|
-
import { Fragment as
|
|
10181
|
+
import { Fragment as Fragment11, jsx as jsx131, jsxs as jsxs79 } from "react/jsx-runtime";
|
|
10145
10182
|
function Dots({
|
|
10146
10183
|
height,
|
|
10147
10184
|
width,
|
|
@@ -10197,10 +10234,10 @@ function ThreeDotsLoader({
|
|
|
10197
10234
|
className
|
|
10198
10235
|
),
|
|
10199
10236
|
role: "progressbar",
|
|
10200
|
-
children: labelPlacement === "right" ? /* @__PURE__ */ jsxs79(
|
|
10237
|
+
children: labelPlacement === "right" ? /* @__PURE__ */ jsxs79(Fragment11, { children: [
|
|
10201
10238
|
dots,
|
|
10202
10239
|
/* @__PURE__ */ jsx131("div", { children: label })
|
|
10203
|
-
] }) : /* @__PURE__ */ jsxs79(
|
|
10240
|
+
] }) : /* @__PURE__ */ jsxs79(Fragment11, { children: [
|
|
10204
10241
|
/* @__PURE__ */ jsx131("div", { children: label }),
|
|
10205
10242
|
dots
|
|
10206
10243
|
] })
|
|
@@ -10429,7 +10466,7 @@ import {
|
|
|
10429
10466
|
VolumeX,
|
|
10430
10467
|
X as X8
|
|
10431
10468
|
} from "lucide-react";
|
|
10432
|
-
import { Fragment as
|
|
10469
|
+
import { Fragment as Fragment12, jsx as jsx135, jsxs as jsxs83 } from "react/jsx-runtime";
|
|
10433
10470
|
function VideoPlayer({
|
|
10434
10471
|
src,
|
|
10435
10472
|
poster,
|
|
@@ -10625,7 +10662,7 @@ function VideoPlayer({
|
|
|
10625
10662
|
onLoad: () => setIsLoading(false),
|
|
10626
10663
|
title: title || "Vimeo video player"
|
|
10627
10664
|
}
|
|
10628
|
-
) : /* @__PURE__ */ jsxs83(
|
|
10665
|
+
) : /* @__PURE__ */ jsxs83(Fragment12, { children: [
|
|
10629
10666
|
/* @__PURE__ */ jsxs83(
|
|
10630
10667
|
"video",
|
|
10631
10668
|
{
|
|
@@ -10731,147 +10768,619 @@ function VideoPlayer({
|
|
|
10731
10768
|
}
|
|
10732
10769
|
|
|
10733
10770
|
// src/webcam/Webcam.tsx
|
|
10734
|
-
import {
|
|
10735
|
-
|
|
10736
|
-
|
|
10771
|
+
import {
|
|
10772
|
+
forwardRef as forwardRef54,
|
|
10773
|
+
memo as memo7,
|
|
10774
|
+
useCallback as useCallback27,
|
|
10775
|
+
useImperativeHandle,
|
|
10776
|
+
useMemo as useMemo7,
|
|
10777
|
+
useRef as useRef25,
|
|
10778
|
+
useState as useState35
|
|
10779
|
+
} from "react";
|
|
10780
|
+
import { isFirefox, isMobile as isMobile2 } from "react-device-detect";
|
|
10737
10781
|
import ReactWebcam from "react-webcam";
|
|
10738
10782
|
|
|
10739
|
-
// src/
|
|
10740
|
-
|
|
10741
|
-
|
|
10783
|
+
// src/lib/compression.ts
|
|
10784
|
+
var IDENTITY_VERIFICATION_PHOTOS_MAX_SIZE_MB = 6;
|
|
10785
|
+
var IDENTITY_VERIFICATION_PHOTOS_QUALITY = 0.8;
|
|
10786
|
+
async function compressFile(file, { convertSize }) {
|
|
10787
|
+
const { default: Compressor } = await import("compressorjs");
|
|
10788
|
+
return new Promise((resolve, reject) => {
|
|
10789
|
+
new Compressor(file, {
|
|
10790
|
+
convertSize: convertSize ? convertSize * 1e6 : void 0,
|
|
10791
|
+
quality: 1,
|
|
10792
|
+
success: (result) => resolve(result),
|
|
10793
|
+
error: reject
|
|
10794
|
+
});
|
|
10795
|
+
});
|
|
10796
|
+
}
|
|
10797
|
+
async function compressImage(image) {
|
|
10798
|
+
const { default: Compressor } = await import("compressorjs");
|
|
10799
|
+
const parsedImage = new File([image], image.name, { type: image.type });
|
|
10800
|
+
return new Promise((resolve, reject) => {
|
|
10801
|
+
new Compressor(parsedImage, {
|
|
10802
|
+
convertSize: IDENTITY_VERIFICATION_PHOTOS_MAX_SIZE_MB * 1e6,
|
|
10803
|
+
quality: IDENTITY_VERIFICATION_PHOTOS_QUALITY,
|
|
10804
|
+
success: (compressedResult) => {
|
|
10805
|
+
toBase64(compressedResult).then((result) => {
|
|
10806
|
+
console.log(
|
|
10807
|
+
"Before: ",
|
|
10808
|
+
getFileSizeMB(image)?.toFixed(2),
|
|
10809
|
+
"MB",
|
|
10810
|
+
"After: ",
|
|
10811
|
+
getFileSizeMB(compressedResult)?.toFixed(2),
|
|
10812
|
+
"MB"
|
|
10813
|
+
);
|
|
10814
|
+
resolve(result);
|
|
10815
|
+
}, reject);
|
|
10816
|
+
},
|
|
10817
|
+
error: (error) => {
|
|
10818
|
+
if (error.message.includes("Failed to load the image")) {
|
|
10819
|
+
reject(new Error("Unable to process the selected image. Please try a different image."));
|
|
10820
|
+
return;
|
|
10821
|
+
}
|
|
10822
|
+
reject(error);
|
|
10823
|
+
}
|
|
10824
|
+
});
|
|
10825
|
+
});
|
|
10742
10826
|
}
|
|
10743
10827
|
|
|
10744
|
-
// src/webcam/
|
|
10745
|
-
import {
|
|
10746
|
-
|
|
10747
|
-
|
|
10748
|
-
|
|
10749
|
-
|
|
10750
|
-
|
|
10751
|
-
height: { ideal: 2160 }
|
|
10752
|
-
}
|
|
10753
|
-
};
|
|
10828
|
+
// src/webcam/useErrorHandler.ts
|
|
10829
|
+
import { useCallback as useCallback26 } from "react";
|
|
10830
|
+
import { useTranslation as useTranslation23 } from "react-i18next";
|
|
10831
|
+
import { isSafari as isSafari2 } from "react-device-detect";
|
|
10832
|
+
|
|
10833
|
+
// src/webcam/utils.ts
|
|
10834
|
+
import { isMobile, isSafari, isTablet } from "react-device-detect";
|
|
10754
10835
|
var isMobileOrTablet = () => isMobile || isTablet;
|
|
10755
|
-
|
|
10836
|
+
var getLivenessOptimizedConstraints = (deviceId, additional) => {
|
|
10837
|
+
const additionalConstraints = typeof additional === "object" && additional !== null ? additional : {};
|
|
10838
|
+
const baseConstraints = {
|
|
10839
|
+
deviceId: deviceId ? { exact: deviceId } : void 0,
|
|
10840
|
+
facingMode: { ideal: "user" },
|
|
10841
|
+
width: { min: 320, ideal: 800 },
|
|
10842
|
+
height: { min: 240, ideal: 600 },
|
|
10843
|
+
frameRate: { ideal: 24 },
|
|
10844
|
+
resizeMode: "crop-and-scale",
|
|
10845
|
+
aspectRatio: { ideal: 1.333 },
|
|
10846
|
+
...additionalConstraints
|
|
10847
|
+
};
|
|
10756
10848
|
if (isMobileOrTablet()) {
|
|
10757
10849
|
return {
|
|
10758
|
-
|
|
10759
|
-
|
|
10760
|
-
|
|
10761
|
-
|
|
10762
|
-
}
|
|
10850
|
+
...baseConstraints,
|
|
10851
|
+
width: { min: 320, ideal: 640 },
|
|
10852
|
+
height: { min: 240, ideal: 480 },
|
|
10853
|
+
aspectRatio: { ideal: 1 },
|
|
10854
|
+
facingMode: { ideal: "environment" },
|
|
10855
|
+
...additionalConstraints
|
|
10763
10856
|
};
|
|
10764
10857
|
}
|
|
10858
|
+
return baseConstraints;
|
|
10859
|
+
};
|
|
10860
|
+
function getReducedVideoConstraints({
|
|
10861
|
+
deviceId,
|
|
10862
|
+
facingMode,
|
|
10863
|
+
additional
|
|
10864
|
+
}) {
|
|
10865
|
+
const additionalConstraints = typeof additional === "object" ? additional : {};
|
|
10765
10866
|
return {
|
|
10766
|
-
|
|
10867
|
+
deviceId: deviceId ? { exact: deviceId } : void 0,
|
|
10868
|
+
facingMode: { ideal: facingMode || "user" },
|
|
10869
|
+
width: { min: 320, ideal: 640 },
|
|
10870
|
+
height: { min: 240, ideal: 480 },
|
|
10871
|
+
...additionalConstraints
|
|
10767
10872
|
};
|
|
10768
10873
|
}
|
|
10769
|
-
|
|
10770
|
-
|
|
10771
|
-
|
|
10772
|
-
|
|
10773
|
-
|
|
10774
|
-
|
|
10775
|
-
|
|
10776
|
-
|
|
10777
|
-
|
|
10778
|
-
|
|
10779
|
-
|
|
10780
|
-
|
|
10781
|
-
|
|
10782
|
-
|
|
10783
|
-
|
|
10784
|
-
|
|
10785
|
-
|
|
10786
|
-
|
|
10787
|
-
|
|
10874
|
+
function getMobileOrDesktopVideoConstraints({
|
|
10875
|
+
deviceId,
|
|
10876
|
+
facingMode,
|
|
10877
|
+
additional,
|
|
10878
|
+
optimizedForLiveness = false
|
|
10879
|
+
}) {
|
|
10880
|
+
const additionalConstraints = typeof additional === "object" ? additional : {};
|
|
10881
|
+
if (optimizedForLiveness) {
|
|
10882
|
+
return getLivenessOptimizedConstraints(deviceId, additionalConstraints);
|
|
10883
|
+
}
|
|
10884
|
+
const initialConstraints = {
|
|
10885
|
+
deviceId: deviceId ? { exact: deviceId } : void 0,
|
|
10886
|
+
facingMode: { ideal: facingMode || "user" },
|
|
10887
|
+
width: isSafari ? { min: 320, ideal: 1920 } : { min: 320, ideal: 4096, max: 4096 },
|
|
10888
|
+
height: isSafari ? { min: 240, ideal: 1080 } : { min: 240, ideal: 2160, max: 2160 },
|
|
10889
|
+
frameRate: { ideal: 30 },
|
|
10890
|
+
resizeMode: "none",
|
|
10891
|
+
aspectRatio: { ideal: 1.777 },
|
|
10892
|
+
...additionalConstraints
|
|
10893
|
+
};
|
|
10894
|
+
if (isMobileOrTablet()) {
|
|
10895
|
+
return {
|
|
10896
|
+
...initialConstraints,
|
|
10897
|
+
aspectRatio: { ideal: 1 },
|
|
10898
|
+
facingMode: { ideal: "environment" },
|
|
10899
|
+
...additionalConstraints
|
|
10900
|
+
};
|
|
10901
|
+
}
|
|
10902
|
+
if (isSafari && !isMobile) {
|
|
10903
|
+
return {
|
|
10904
|
+
deviceId: deviceId ? { ideal: deviceId } : void 0,
|
|
10905
|
+
width: { min: 320, ideal: 1920 },
|
|
10906
|
+
height: { min: 240, ideal: 1080 },
|
|
10907
|
+
...additionalConstraints
|
|
10908
|
+
};
|
|
10909
|
+
}
|
|
10910
|
+
return initialConstraints;
|
|
10911
|
+
}
|
|
10912
|
+
function isDOMException(error) {
|
|
10913
|
+
return error instanceof DOMException && Boolean(error?.name);
|
|
10914
|
+
}
|
|
10915
|
+
function getPhotoCanvas({
|
|
10916
|
+
player,
|
|
10917
|
+
container,
|
|
10918
|
+
scanArea,
|
|
10919
|
+
canvas,
|
|
10920
|
+
cropToScanArea
|
|
10921
|
+
}) {
|
|
10922
|
+
if (!canvas) return;
|
|
10923
|
+
const playerWidth = player?.videoWidth ?? 1280;
|
|
10924
|
+
const playerHeight = player?.videoHeight ?? 720;
|
|
10925
|
+
const playerAR = playerWidth / playerHeight;
|
|
10926
|
+
const canvasWidth = container?.offsetWidth ?? 1280;
|
|
10927
|
+
const canvasHeight = container?.offsetHeight ?? 1280;
|
|
10928
|
+
const canvasAR = canvasWidth / canvasHeight;
|
|
10929
|
+
let sourceX;
|
|
10930
|
+
let sourceY;
|
|
10931
|
+
let sourceWidth;
|
|
10932
|
+
let sourceHeight;
|
|
10933
|
+
if (playerAR > canvasAR) {
|
|
10934
|
+
sourceHeight = playerHeight;
|
|
10935
|
+
sourceWidth = playerHeight * canvasAR;
|
|
10936
|
+
sourceX = (playerWidth - sourceWidth) / 2;
|
|
10937
|
+
sourceY = 0;
|
|
10938
|
+
} else {
|
|
10939
|
+
sourceWidth = playerWidth;
|
|
10940
|
+
sourceHeight = playerWidth / canvasAR;
|
|
10941
|
+
sourceX = 0;
|
|
10942
|
+
sourceY = (playerHeight - sourceHeight) / 2;
|
|
10943
|
+
}
|
|
10944
|
+
if (cropToScanArea && scanArea && player) {
|
|
10945
|
+
const scanAreaRect = scanArea.getBoundingClientRect();
|
|
10946
|
+
const scaleY = playerHeight / player.clientHeight;
|
|
10947
|
+
const offsetX = (playerWidth - player.clientWidth * scaleY) / 2;
|
|
10948
|
+
const offsetY = (playerHeight - player.clientHeight * scaleY) / 2;
|
|
10949
|
+
const cropX = offsetX + (player.clientWidth - scanAreaRect.width) / 2 * scaleY;
|
|
10950
|
+
const cropY = offsetY + (player.clientHeight - scanAreaRect.height) / 2 * scaleY;
|
|
10951
|
+
const cropWidth = scanAreaRect.width * scaleY;
|
|
10952
|
+
const cropHeight = scanAreaRect.height * scaleY;
|
|
10953
|
+
canvas.width = cropWidth;
|
|
10954
|
+
canvas.height = cropHeight;
|
|
10955
|
+
const context2 = canvas.getContext("2d");
|
|
10956
|
+
if (context2) {
|
|
10957
|
+
context2.drawImage(
|
|
10958
|
+
player,
|
|
10959
|
+
cropX,
|
|
10960
|
+
cropY,
|
|
10961
|
+
cropWidth,
|
|
10962
|
+
cropHeight,
|
|
10963
|
+
0,
|
|
10964
|
+
0,
|
|
10965
|
+
cropWidth,
|
|
10966
|
+
cropHeight
|
|
10967
|
+
);
|
|
10968
|
+
}
|
|
10969
|
+
return canvas;
|
|
10970
|
+
}
|
|
10971
|
+
canvas.width = sourceWidth;
|
|
10972
|
+
canvas.height = sourceHeight;
|
|
10973
|
+
const context = canvas.getContext("2d");
|
|
10974
|
+
if (context && player) {
|
|
10975
|
+
context.drawImage(
|
|
10976
|
+
player,
|
|
10977
|
+
sourceX,
|
|
10978
|
+
sourceY,
|
|
10979
|
+
sourceWidth,
|
|
10980
|
+
sourceHeight,
|
|
10981
|
+
0,
|
|
10982
|
+
0,
|
|
10983
|
+
sourceWidth,
|
|
10984
|
+
sourceHeight
|
|
10788
10985
|
);
|
|
10789
|
-
|
|
10790
|
-
|
|
10791
|
-
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
|
|
10796
|
-
|
|
10797
|
-
|
|
10798
|
-
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
|
|
10802
|
-
if (
|
|
10803
|
-
|
|
10804
|
-
|
|
10805
|
-
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
|
|
10810
|
-
|
|
10811
|
-
|
|
10812
|
-
|
|
10813
|
-
|
|
10814
|
-
|
|
10815
|
-
|
|
10816
|
-
|
|
10986
|
+
}
|
|
10987
|
+
return canvas;
|
|
10988
|
+
}
|
|
10989
|
+
|
|
10990
|
+
// src/webcam/useErrorHandler.ts
|
|
10991
|
+
var GET_USER_MEDIA_ERROR = "getUserMedia is not implemented in this browser";
|
|
10992
|
+
function useErrorHandler({ onError }) {
|
|
10993
|
+
const { t } = useTranslation23();
|
|
10994
|
+
const handleError = useEvent(onError);
|
|
10995
|
+
const handleUserMediaError = useCallback26(
|
|
10996
|
+
(error) => {
|
|
10997
|
+
console.error(error);
|
|
10998
|
+
let errorText = "";
|
|
10999
|
+
if (error?.message === GET_USER_MEDIA_ERROR) {
|
|
11000
|
+
errorText = t("camera_errors.chekin_cant_use_your_camera");
|
|
11001
|
+
handleError({
|
|
11002
|
+
title: errorText,
|
|
11003
|
+
message: t("camera_errors.please_try_a_different_browser")
|
|
11004
|
+
});
|
|
11005
|
+
} else if (isDOMException(error)) {
|
|
11006
|
+
switch (error.name) {
|
|
11007
|
+
case "PermissionDeniedError":
|
|
11008
|
+
case "NotAllowedError":
|
|
11009
|
+
errorText = `${t("camera_errors.permissions_denied")}. ${t(
|
|
11010
|
+
"camera_errors.camera_permissions_denied"
|
|
11011
|
+
)}`;
|
|
11012
|
+
toast2.error(errorText);
|
|
11013
|
+
break;
|
|
11014
|
+
case "NotFoundError":
|
|
11015
|
+
errorText = t("camera_errors.no_camera_device_found");
|
|
11016
|
+
toast2.error(errorText);
|
|
11017
|
+
break;
|
|
11018
|
+
case "NotReadableError":
|
|
11019
|
+
case "AbortError":
|
|
11020
|
+
errorText = t("camera_errors.chekin_cant_use_your_camera");
|
|
11021
|
+
handleError({
|
|
11022
|
+
title: errorText,
|
|
11023
|
+
message: `${t("close_other_application_that_may_be_using_your_camera")}.
|
|
11024
|
+
${t("if_you_use_external_camera_disconnect_and_reconnect")}.
|
|
11025
|
+
${t("close_the_browser_re_open_it")}.`
|
|
11026
|
+
});
|
|
11027
|
+
break;
|
|
11028
|
+
case "OverconstrainedError":
|
|
11029
|
+
errorText = t("camera_errors.constraints_camera_error");
|
|
11030
|
+
if (isSafari2) {
|
|
11031
|
+
handleError({
|
|
11032
|
+
title: errorText,
|
|
11033
|
+
message: `${t("camera_errors.safari_camera_error")}. ${t(
|
|
11034
|
+
"camera_errors.try_chrome_or_firefox"
|
|
11035
|
+
)}.`
|
|
11036
|
+
});
|
|
11037
|
+
} else {
|
|
11038
|
+
toast2.error(errorText);
|
|
10817
11039
|
}
|
|
10818
|
-
|
|
10819
|
-
|
|
10820
|
-
|
|
10821
|
-
|
|
11040
|
+
break;
|
|
11041
|
+
default:
|
|
11042
|
+
errorText = t("camera_errors.chekin_cant_use_your_camera");
|
|
11043
|
+
handleError({
|
|
11044
|
+
title: errorText,
|
|
11045
|
+
message: `${t("camera_errors.please_try_a_different_browser")} ${error}`
|
|
11046
|
+
});
|
|
10822
11047
|
}
|
|
11048
|
+
} else {
|
|
11049
|
+
errorText = t("camera_errors.chekin_cant_use_your_camera");
|
|
11050
|
+
handleError({
|
|
11051
|
+
title: errorText,
|
|
11052
|
+
message: `${t("camera_errors.please_try_a_different_browser")} ${error}`
|
|
11053
|
+
});
|
|
10823
11054
|
}
|
|
10824
|
-
},
|
|
10825
|
-
|
|
10826
|
-
|
|
10827
|
-
|
|
10828
|
-
|
|
10829
|
-
|
|
10830
|
-
|
|
11055
|
+
},
|
|
11056
|
+
[handleError, t]
|
|
11057
|
+
);
|
|
11058
|
+
return { handleUserMediaError };
|
|
11059
|
+
}
|
|
11060
|
+
|
|
11061
|
+
// src/webcam/Webcam.tsx
|
|
11062
|
+
import { Fragment as Fragment13, jsx as jsx136, jsxs as jsxs84 } from "react/jsx-runtime";
|
|
11063
|
+
var SCREENSHOT_FORMAT = "image/jpeg";
|
|
11064
|
+
var mirroredTransformStyle = { transform: "rotateY(180deg)" };
|
|
11065
|
+
var Webcam = memo7(
|
|
11066
|
+
forwardRef54(
|
|
11067
|
+
({
|
|
11068
|
+
onUserMedia,
|
|
11069
|
+
onDisabled,
|
|
11070
|
+
imageSmoothing,
|
|
11071
|
+
videoConstraints,
|
|
11072
|
+
additionalConstraints,
|
|
11073
|
+
hideScanArea,
|
|
11074
|
+
roundedScanArea,
|
|
11075
|
+
cropToScanArea,
|
|
11076
|
+
className,
|
|
11077
|
+
mirrored,
|
|
11078
|
+
children,
|
|
11079
|
+
isLoading,
|
|
11080
|
+
placeholderImage,
|
|
11081
|
+
screenshotMaxSize,
|
|
11082
|
+
minScreenshotH,
|
|
11083
|
+
minScreenshotW,
|
|
11084
|
+
videoSourceDeviceId,
|
|
11085
|
+
screenshotQuality = 1,
|
|
11086
|
+
compression,
|
|
11087
|
+
onError,
|
|
11088
|
+
...props
|
|
11089
|
+
}, ref) => {
|
|
11090
|
+
const [minScreenshotHeight, setMinScreenshotHeight] = useState35();
|
|
11091
|
+
const [minScreenshotWidth, setMinScreenshotWidth] = useState35();
|
|
11092
|
+
const [useReducedConstraints, setUseReducedConstraints] = useState35(false);
|
|
11093
|
+
const [numberOfCameras, setNumberOfCameras] = useState35(0);
|
|
11094
|
+
const constraints = useMemo7(() => {
|
|
11095
|
+
if (videoConstraints) {
|
|
11096
|
+
return videoConstraints;
|
|
10831
11097
|
}
|
|
10832
|
-
|
|
10833
|
-
|
|
10834
|
-
|
|
10835
|
-
|
|
10836
|
-
|
|
10837
|
-
|
|
11098
|
+
if (useReducedConstraints) {
|
|
11099
|
+
return getReducedVideoConstraints({
|
|
11100
|
+
deviceId: videoSourceDeviceId,
|
|
11101
|
+
additional: additionalConstraints
|
|
11102
|
+
});
|
|
11103
|
+
}
|
|
11104
|
+
return getMobileOrDesktopVideoConstraints({
|
|
11105
|
+
deviceId: videoSourceDeviceId,
|
|
11106
|
+
additional: additionalConstraints
|
|
11107
|
+
});
|
|
11108
|
+
}, [
|
|
11109
|
+
additionalConstraints,
|
|
11110
|
+
useReducedConstraints,
|
|
11111
|
+
videoConstraints,
|
|
11112
|
+
videoSourceDeviceId
|
|
11113
|
+
]);
|
|
11114
|
+
const isMirroredInCSS = mirrored === void 0 && !isMobileOrTablet();
|
|
11115
|
+
const webcamRef = useRef25(null);
|
|
11116
|
+
const scanAreaRef = useRef25(null);
|
|
11117
|
+
const canvasRef = useRef25(null);
|
|
11118
|
+
const containerRef = useRef25(null);
|
|
11119
|
+
const { handleUserMediaError } = useErrorHandler({
|
|
11120
|
+
onError: (errorDetails) => {
|
|
11121
|
+
onDisabled?.(true);
|
|
11122
|
+
onError(errorDetails);
|
|
11123
|
+
}
|
|
11124
|
+
});
|
|
11125
|
+
const handleUserMediaErrorWithFallback = useCallback27(
|
|
11126
|
+
(error) => {
|
|
11127
|
+
if (error instanceof DOMException && error.name === "OverconstrainedError" && !useReducedConstraints && !videoConstraints) {
|
|
11128
|
+
console.warn("Camera constraints failed, trying reduced constraints:", error);
|
|
11129
|
+
setUseReducedConstraints(true);
|
|
11130
|
+
return;
|
|
11131
|
+
}
|
|
11132
|
+
handleUserMediaError(error);
|
|
11133
|
+
},
|
|
11134
|
+
[handleUserMediaError, useReducedConstraints, videoConstraints]
|
|
11135
|
+
);
|
|
11136
|
+
const compressImage2 = async (canvas) => {
|
|
11137
|
+
if (!canvas) return;
|
|
11138
|
+
const blobImage = await getCanvasBlob(canvas);
|
|
11139
|
+
if (!blobImage) return;
|
|
11140
|
+
const compressedFile = await compressFile(blobImage, {
|
|
11141
|
+
convertSize: screenshotMaxSize
|
|
11142
|
+
});
|
|
11143
|
+
console.log(
|
|
11144
|
+
"Before: ",
|
|
11145
|
+
getFileSizeMB(blobImage)?.toFixed(2),
|
|
11146
|
+
"MB",
|
|
11147
|
+
"After: ",
|
|
11148
|
+
getFileSizeMB(compressedFile)?.toFixed(2),
|
|
11149
|
+
"MB"
|
|
11150
|
+
);
|
|
11151
|
+
return toBase64(compressedFile);
|
|
11152
|
+
};
|
|
11153
|
+
const handleTakePhoto = () => {
|
|
11154
|
+
const takenPhotoCanvas = getPhotoCanvas({
|
|
11155
|
+
player: webcamRef.current?.video,
|
|
11156
|
+
container: containerRef.current,
|
|
11157
|
+
canvas: canvasRef.current,
|
|
11158
|
+
scanArea: scanAreaRef.current,
|
|
11159
|
+
cropToScanArea
|
|
11160
|
+
});
|
|
11161
|
+
if (!takenPhotoCanvas) return;
|
|
11162
|
+
if (compression) return compressImage2(takenPhotoCanvas);
|
|
11163
|
+
return Promise.resolve(
|
|
11164
|
+
takenPhotoCanvas.toDataURL(SCREENSHOT_FORMAT, screenshotQuality)
|
|
11165
|
+
);
|
|
11166
|
+
};
|
|
11167
|
+
useImperativeHandle(
|
|
11168
|
+
ref,
|
|
11169
|
+
() => ({
|
|
11170
|
+
takePhoto: handleTakePhoto,
|
|
11171
|
+
numberOfCameras,
|
|
11172
|
+
...webcamRef.current
|
|
11173
|
+
})
|
|
11174
|
+
);
|
|
11175
|
+
const handleUserMediaSuccess = useCallback27(
|
|
11176
|
+
(stream) => {
|
|
11177
|
+
if (!isMobile2) {
|
|
11178
|
+
const track = stream.getVideoTracks()[0];
|
|
11179
|
+
const capabilities = !isFirefox && track?.getCapabilities();
|
|
11180
|
+
if (capabilities) {
|
|
11181
|
+
setMinScreenshotHeight(capabilities.height?.max);
|
|
11182
|
+
setMinScreenshotWidth(capabilities.width?.max);
|
|
11183
|
+
}
|
|
11184
|
+
} else {
|
|
11185
|
+
setMinScreenshotWidth(minScreenshotW);
|
|
11186
|
+
setMinScreenshotHeight(minScreenshotH);
|
|
11187
|
+
}
|
|
11188
|
+
navigator.mediaDevices.enumerateDevices().then((devices) => {
|
|
11189
|
+
setNumberOfCameras(
|
|
11190
|
+
devices.filter((device) => device.kind === "videoinput").length
|
|
11191
|
+
);
|
|
11192
|
+
}).catch((error) => {
|
|
11193
|
+
console.warn("Failed to enumerate devices:", error);
|
|
11194
|
+
setNumberOfCameras(1);
|
|
11195
|
+
});
|
|
11196
|
+
onUserMedia?.();
|
|
11197
|
+
},
|
|
11198
|
+
[minScreenshotH, minScreenshotW, onUserMedia]
|
|
11199
|
+
);
|
|
11200
|
+
return /* @__PURE__ */ jsxs84(
|
|
10838
11201
|
"div",
|
|
10839
11202
|
{
|
|
11203
|
+
ref: containerRef,
|
|
10840
11204
|
className: cn(
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
|
|
11205
|
+
className,
|
|
11206
|
+
"webcam relative z-[1] mx-auto flex h-[222px] w-[332px] items-center justify-center overflow-hidden rounded-[6px] text-center",
|
|
11207
|
+
"kiosko:h-[620px] kiosko:max-h-[620px] kiosko:w-[890px] kiosko:max-w-[890px]"
|
|
10844
11208
|
),
|
|
10845
|
-
|
|
10846
|
-
|
|
11209
|
+
style: isMirroredInCSS ? mirroredTransformStyle : void 0,
|
|
11210
|
+
children: [
|
|
11211
|
+
!hideScanArea && /* @__PURE__ */ jsxs84(
|
|
11212
|
+
"div",
|
|
11213
|
+
{
|
|
11214
|
+
ref: scanAreaRef,
|
|
11215
|
+
className: cn(
|
|
11216
|
+
"webcam__scan-area absolute inset-0 z-[2] m-auto flex w-[calc(100%-32px)] items-center justify-center shadow-[0_0_0_9999em_rgb(0_0_0_/_60%)]",
|
|
11217
|
+
"h-[200px] rounded-[15px] min-[479px]:h-[calc(100%-32px)]",
|
|
11218
|
+
roundedScanArea && "h-[197px] w-[165px] rounded-[45%] border-[3px] border-white shadow-[0_0_8px_#fff,inset_0_0_0_#fff,0_0_0_9999em_rgb(0_0_0_/_60%)]",
|
|
11219
|
+
"kiosko:h-[calc(100%-170px)] kiosko:w-[345px]"
|
|
11220
|
+
),
|
|
11221
|
+
style: isMirroredInCSS ? mirroredTransformStyle : void 0,
|
|
11222
|
+
children: [
|
|
11223
|
+
!roundedScanArea && /* @__PURE__ */ jsxs84(Fragment13, { children: [
|
|
11224
|
+
/* @__PURE__ */ jsx136("div", { className: "absolute left-[-2px] top-[-2px] h-[45px] w-[45px] rounded-tl-[15px] border-[4px] border-b-0 border-r-0 border-white" }),
|
|
11225
|
+
/* @__PURE__ */ jsx136("div", { className: "absolute right-[-2px] top-[-2px] h-[45px] w-[45px] rounded-tr-[15px] border-[4px] border-b-0 border-l-0 border-white" }),
|
|
11226
|
+
/* @__PURE__ */ jsx136("div", { className: "absolute bottom-[-2px] right-[-2px] h-[45px] w-[45px] rounded-br-[15px] border-[4px] border-l-0 border-t-0 border-white" }),
|
|
11227
|
+
/* @__PURE__ */ jsx136("div", { className: "absolute bottom-[-2px] left-[-2px] h-[45px] w-[45px] rounded-bl-[15px] border-[4px] border-r-0 border-t-0 border-white" })
|
|
11228
|
+
] }),
|
|
11229
|
+
placeholderImage
|
|
11230
|
+
]
|
|
11231
|
+
}
|
|
11232
|
+
),
|
|
11233
|
+
/* @__PURE__ */ jsx136("canvas", { ref: canvasRef, className: "hidden" }),
|
|
11234
|
+
isLoading ? /* @__PURE__ */ jsx136("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsx136("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/30 border-t-white" }) }) : /* @__PURE__ */ jsx136(
|
|
11235
|
+
ReactWebcam,
|
|
11236
|
+
{
|
|
11237
|
+
ref: webcamRef,
|
|
11238
|
+
mirrored: !!mirrored,
|
|
11239
|
+
width: props.width,
|
|
11240
|
+
height: props.height,
|
|
11241
|
+
videoConstraints: constraints,
|
|
11242
|
+
imageSmoothing: !!imageSmoothing,
|
|
11243
|
+
screenshotFormat: SCREENSHOT_FORMAT,
|
|
11244
|
+
onUserMedia: handleUserMediaSuccess,
|
|
11245
|
+
screenshotQuality,
|
|
11246
|
+
onUserMediaError: handleUserMediaErrorWithFallback,
|
|
11247
|
+
minScreenshotWidth,
|
|
11248
|
+
minScreenshotHeight,
|
|
11249
|
+
className: "webcam__video z-[1] h-full w-full bg-[#e2e2e2] object-cover",
|
|
11250
|
+
audio: false,
|
|
11251
|
+
disablePictureInPicture: false,
|
|
11252
|
+
forceScreenshotSourceSize: false
|
|
11253
|
+
}
|
|
11254
|
+
),
|
|
11255
|
+
children
|
|
11256
|
+
]
|
|
11257
|
+
}
|
|
11258
|
+
);
|
|
11259
|
+
}
|
|
11260
|
+
)
|
|
11261
|
+
);
|
|
11262
|
+
Webcam.displayName = "Webcam";
|
|
11263
|
+
|
|
11264
|
+
// src/mobile-webcam/MobileWebcam.tsx
|
|
11265
|
+
import { Camera, ChevronLeft as ChevronLeft4 } from "lucide-react";
|
|
11266
|
+
import { forwardRef as forwardRef55, useCallback as useCallback29 } from "react";
|
|
11267
|
+
import { createPortal } from "react-dom";
|
|
11268
|
+
import { useTranslation as useTranslation25 } from "react-i18next";
|
|
11269
|
+
|
|
11270
|
+
// src/mobile-webcam/DeviceCamera/DeviceCamera.tsx
|
|
11271
|
+
import { useCallback as useCallback28 } from "react";
|
|
11272
|
+
import { useTranslation as useTranslation24 } from "react-i18next";
|
|
11273
|
+
import { jsx as jsx137, jsxs as jsxs85 } from "react/jsx-runtime";
|
|
11274
|
+
function DeviceCamera({ onChange, facingMode, className }) {
|
|
11275
|
+
const { t } = useTranslation24();
|
|
11276
|
+
const handleNativeScreenshot = useCallback28(
|
|
11277
|
+
(event) => {
|
|
11278
|
+
const file = event.target.files?.[0];
|
|
11279
|
+
onChange(file ? compressImage(file) : void 0);
|
|
11280
|
+
},
|
|
11281
|
+
[onChange]
|
|
11282
|
+
);
|
|
11283
|
+
return /* @__PURE__ */ jsxs85(
|
|
11284
|
+
"div",
|
|
11285
|
+
{
|
|
11286
|
+
className: cn(
|
|
11287
|
+
"mobile-webcam-device-camera flex flex-col items-center gap-3 rounded-xl bg-[#1c1b1f] p-4 text-sm text-white",
|
|
11288
|
+
className
|
|
11289
|
+
),
|
|
11290
|
+
children: [
|
|
11291
|
+
/* @__PURE__ */ jsx137("div", { children: t("camera_errors.experiencing_camera_issues") }),
|
|
11292
|
+
/* @__PURE__ */ jsxs85("label", { className: "text-[16px] font-semibold uppercase leading-6 text-[var(--text-button-color)]", children: [
|
|
11293
|
+
t("open_devices_camera"),
|
|
11294
|
+
/* @__PURE__ */ jsx137(
|
|
11295
|
+
"input",
|
|
10847
11296
|
{
|
|
10848
|
-
|
|
10849
|
-
|
|
10850
|
-
|
|
10851
|
-
|
|
10852
|
-
|
|
10853
|
-
imageSmoothing,
|
|
10854
|
-
mirrored,
|
|
10855
|
-
screenshotQuality,
|
|
10856
|
-
videoConstraints: constraints,
|
|
10857
|
-
screenshotFormat: SCREENSHOT_FORMAT,
|
|
10858
|
-
minScreenshotHeight,
|
|
10859
|
-
minScreenshotWidth
|
|
11297
|
+
className: "sr-only",
|
|
11298
|
+
type: "file",
|
|
11299
|
+
accept: "image/*",
|
|
11300
|
+
capture: facingMode || "environment",
|
|
11301
|
+
onChange: handleNativeScreenshot
|
|
10860
11302
|
}
|
|
10861
11303
|
)
|
|
10862
|
-
}
|
|
10863
|
-
|
|
10864
|
-
|
|
10865
|
-
|
|
11304
|
+
] })
|
|
11305
|
+
]
|
|
11306
|
+
}
|
|
11307
|
+
);
|
|
11308
|
+
}
|
|
11309
|
+
|
|
11310
|
+
// src/mobile-webcam/MobileWebcam.tsx
|
|
11311
|
+
import { jsx as jsx138, jsxs as jsxs86 } from "react/jsx-runtime";
|
|
11312
|
+
var webcamClasses = "fixed left-0 top-0 z-[6] h-full w-full rounded-none";
|
|
11313
|
+
var scanAreaClasses = String.raw`[&_.webcam\_\_scan-area]:h-full [&_.webcam\_\_scan-area]:max-h-[209px] landscape:[&_.webcam\_\_scan-area]:h-[80%] landscape:[&_.webcam\_\_scan-area]:max-h-full md:[&_.webcam\_\_scan-area]:h-auto md:[&_.webcam\_\_scan-area]:max-h-none md:[&_.webcam\_\_scan-area]:aspect-[2/1]`;
|
|
11314
|
+
var roundedWebcamClasses = String.raw`[&_.webcam\_\_scan-area]:top-[-60px] [&_.webcam\_\_scan-area]:h-full [&_.webcam\_\_scan-area]:w-full [&_.webcam\_\_scan-area]:max-h-[55%] [&_.webcam\_\_scan-area]:max-w-[80%] max-[375px]:[&_.webcam\_\_scan-area]:max-h-[369px] max-[375px]:[&_.webcam\_\_scan-area]:max-w-[261px] max-[320px]:[&_.webcam\_\_scan-area]:max-h-[318px] max-[320px]:[&_.webcam\_\_scan-area]:max-w-[220px] landscape:[&_.webcam\_\_scan-area]:h-full landscape:[&_.webcam\_\_scan-area]:w-full landscape:[&_.webcam\_\_scan-area]:max-h-[90%] landscape:[&_.webcam\_\_scan-area]:max-w-[261px] md:[&_.webcam\_\_scan-area]:aspect-square`;
|
|
11315
|
+
function getAndMapFacingMode(constraints) {
|
|
11316
|
+
if (typeof constraints === "boolean" || !constraints) return;
|
|
11317
|
+
if (constraints.facingMode === "user") return "user";
|
|
11318
|
+
if (constraints.facingMode === "environment") return "environment";
|
|
11319
|
+
}
|
|
11320
|
+
var MobileWebcam = forwardRef55(
|
|
11321
|
+
({ onScreenshot, onBack, title, text, disabled, className, ...props }, ref) => {
|
|
11322
|
+
const rootElement = getDocument()?.body;
|
|
11323
|
+
const { t } = useTranslation25();
|
|
11324
|
+
const handleNativeScreenshot = useCallback29(
|
|
11325
|
+
(photo) => onScreenshot({ isNative: true, photo }),
|
|
11326
|
+
[onScreenshot]
|
|
11327
|
+
);
|
|
11328
|
+
return createPortal(
|
|
11329
|
+
/* @__PURE__ */ jsxs86("div", { className: "mobile-camera flex justify-center", children: [
|
|
11330
|
+
/* @__PURE__ */ jsx138(
|
|
11331
|
+
"button",
|
|
11332
|
+
{
|
|
11333
|
+
type: "button",
|
|
11334
|
+
onClick: onBack,
|
|
11335
|
+
className: "mobile-camera__back-btn fixed left-7 top-9 z-[7] flex border-0 bg-transparent p-0 landscape:left-[50px] landscape:top-[70px]",
|
|
11336
|
+
children: /* @__PURE__ */ jsx138(ChevronLeft4, { size: 32, strokeWidth: 3, className: "text-white" })
|
|
11337
|
+
}
|
|
11338
|
+
),
|
|
11339
|
+
title && /* @__PURE__ */ jsx138("div", { className: "mobile-camera__title fixed left-1/2 top-8 z-[7] -translate-x-1/2 whitespace-nowrap text-[18px] font-bold text-white landscape:top-[5px]", children: title }),
|
|
11340
|
+
text ? /* @__PURE__ */ jsx138("p", { className: "mobile-camera__subtitle fixed top-[76px] z-[7] mx-auto my-0 px-6 text-center text-white landscape:hidden [@media(min-height:838px)]:top-28", children: text }) : /* @__PURE__ */ jsx138("p", { className: "mobile-camera__helper fixed top-[88px] z-[7] mx-auto my-0 px-6 text-center text-xs text-white landscape:hidden [@media(min-height:700px)]:[font-size:inherit]", children: t("place_document_inside_frame") }),
|
|
11341
|
+
/* @__PURE__ */ jsx138(
|
|
11342
|
+
Webcam,
|
|
11343
|
+
{
|
|
11344
|
+
ref,
|
|
11345
|
+
...props,
|
|
11346
|
+
className: cn(
|
|
11347
|
+
className,
|
|
11348
|
+
webcamClasses,
|
|
11349
|
+
props.roundedScanArea ? roundedWebcamClasses : scanAreaClasses
|
|
11350
|
+
)
|
|
11351
|
+
}
|
|
11352
|
+
),
|
|
11353
|
+
/* @__PURE__ */ jsxs86("div", { className: "fixed bottom-5 z-[7] flex w-[calc(100%-32px)] flex-col justify-between gap-5 self-center landscape:inset-y-0 landscape:right-10 landscape:my-auto landscape:h-auto landscape:w-auto landscape:justify-normal landscape:[&_.mobile-webcam-device-camera]:hidden", children: [
|
|
11354
|
+
/* @__PURE__ */ jsx138(
|
|
11355
|
+
"button",
|
|
11356
|
+
{
|
|
11357
|
+
type: "button",
|
|
11358
|
+
disabled,
|
|
11359
|
+
onClick: () => onScreenshot({ isNative: false }),
|
|
11360
|
+
className: "mobile-camera__take-btn relative flex h-[75px] w-[75px] items-center justify-center self-center rounded-full border-0 bg-white p-[10px] shadow-[0_0_10px_#ffffff] hover:opacity-80 disabled:cursor-default disabled:opacity-60 disabled:hover:opacity-60",
|
|
11361
|
+
children: /* @__PURE__ */ jsx138(Camera, { size: 26, className: "text-[var(--primary)]" })
|
|
11362
|
+
}
|
|
11363
|
+
),
|
|
11364
|
+
/* @__PURE__ */ jsx138(
|
|
11365
|
+
DeviceCamera,
|
|
11366
|
+
{
|
|
11367
|
+
onChange: handleNativeScreenshot,
|
|
11368
|
+
facingMode: getAndMapFacingMode(props.additionalConstraints)
|
|
11369
|
+
}
|
|
11370
|
+
)
|
|
11371
|
+
] })
|
|
11372
|
+
] }),
|
|
11373
|
+
rootElement
|
|
11374
|
+
);
|
|
10866
11375
|
}
|
|
10867
11376
|
);
|
|
10868
|
-
|
|
11377
|
+
MobileWebcam.displayName = "MobileWebcam";
|
|
10869
11378
|
|
|
10870
11379
|
// src/wide-button/WideButton.tsx
|
|
10871
|
-
import { forwardRef as
|
|
10872
|
-
import { jsx as
|
|
10873
|
-
var WideButton =
|
|
10874
|
-
({ className, disabled, ...props }, ref) => /* @__PURE__ */
|
|
11380
|
+
import { forwardRef as forwardRef56 } from "react";
|
|
11381
|
+
import { jsx as jsx139 } from "react/jsx-runtime";
|
|
11382
|
+
var WideButton = forwardRef56(
|
|
11383
|
+
({ className, disabled, ...props }, ref) => /* @__PURE__ */ jsx139(
|
|
10875
11384
|
Button,
|
|
10876
11385
|
{
|
|
10877
11386
|
ref,
|
|
@@ -10893,22 +11402,22 @@ WideButton.displayName = "WideButton";
|
|
|
10893
11402
|
import * as React42 from "react";
|
|
10894
11403
|
import * as DialogPrimitive2 from "@radix-ui/react-dialog";
|
|
10895
11404
|
import Draggable from "react-draggable";
|
|
10896
|
-
import { jsx as
|
|
11405
|
+
import { jsx as jsx140, jsxs as jsxs87 } from "react/jsx-runtime";
|
|
10897
11406
|
var DRAWER_CLOSE_THRESHOLD = 72;
|
|
10898
11407
|
var DRAWER_MIN_OVERLAY_OPACITY = 0.1;
|
|
10899
11408
|
function Drawer({ ...props }) {
|
|
10900
|
-
return /* @__PURE__ */
|
|
11409
|
+
return /* @__PURE__ */ jsx140(DialogPrimitive2.Root, { "data-slot": "drawer", ...props });
|
|
10901
11410
|
}
|
|
10902
11411
|
function DrawerTrigger({ ...props }) {
|
|
10903
|
-
return /* @__PURE__ */
|
|
11412
|
+
return /* @__PURE__ */ jsx140(DialogPrimitive2.Trigger, { "data-slot": "drawer-trigger", ...props });
|
|
10904
11413
|
}
|
|
10905
11414
|
function DrawerPortal({ ...props }) {
|
|
10906
|
-
return /* @__PURE__ */
|
|
11415
|
+
return /* @__PURE__ */ jsx140(DialogPrimitive2.Portal, { "data-slot": "drawer-portal", ...props });
|
|
10907
11416
|
}
|
|
10908
11417
|
function DrawerClose({ ...props }) {
|
|
10909
|
-
return /* @__PURE__ */
|
|
11418
|
+
return /* @__PURE__ */ jsx140(DialogPrimitive2.Close, { "data-slot": "drawer-close", ...props });
|
|
10910
11419
|
}
|
|
10911
|
-
var DrawerOverlay = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
11420
|
+
var DrawerOverlay = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx140(
|
|
10912
11421
|
DialogPrimitive2.Overlay,
|
|
10913
11422
|
{
|
|
10914
11423
|
ref,
|
|
@@ -10958,14 +11467,14 @@ var DrawerContent = React42.forwardRef(
|
|
|
10958
11467
|
},
|
|
10959
11468
|
[onClose]
|
|
10960
11469
|
);
|
|
10961
|
-
return /* @__PURE__ */
|
|
10962
|
-
lockScroll ? /* @__PURE__ */
|
|
11470
|
+
return /* @__PURE__ */ jsxs87(DrawerPortal, { container: finalContainer, children: [
|
|
11471
|
+
lockScroll ? /* @__PURE__ */ jsx140(
|
|
10963
11472
|
DrawerOverlay,
|
|
10964
11473
|
{
|
|
10965
11474
|
style: { opacity: overlayOpacity },
|
|
10966
11475
|
onClick: closeOnOverlayClick ? onClose : void 0
|
|
10967
11476
|
}
|
|
10968
|
-
) : /* @__PURE__ */
|
|
11477
|
+
) : /* @__PURE__ */ jsx140(
|
|
10969
11478
|
"div",
|
|
10970
11479
|
{
|
|
10971
11480
|
className: cn(DrawerOverlayClasses),
|
|
@@ -10973,7 +11482,7 @@ var DrawerContent = React42.forwardRef(
|
|
|
10973
11482
|
onClick: closeOnOverlayClick ? onClose : void 0
|
|
10974
11483
|
}
|
|
10975
11484
|
),
|
|
10976
|
-
/* @__PURE__ */
|
|
11485
|
+
/* @__PURE__ */ jsx140(
|
|
10977
11486
|
DialogPrimitive2.Content,
|
|
10978
11487
|
{
|
|
10979
11488
|
asChild: true,
|
|
@@ -10989,7 +11498,7 @@ var DrawerContent = React42.forwardRef(
|
|
|
10989
11498
|
}
|
|
10990
11499
|
},
|
|
10991
11500
|
...props,
|
|
10992
|
-
children: /* @__PURE__ */
|
|
11501
|
+
children: /* @__PURE__ */ jsx140("div", { className: "fixed inset-x-0 bottom-0 top-auto z-50 outline-none", children: /* @__PURE__ */ jsx140(
|
|
10993
11502
|
Draggable,
|
|
10994
11503
|
{
|
|
10995
11504
|
axis: "y",
|
|
@@ -11000,7 +11509,7 @@ var DrawerContent = React42.forwardRef(
|
|
|
11000
11509
|
onDrag: handleDrag,
|
|
11001
11510
|
onStop: handleStop,
|
|
11002
11511
|
position: { x: 0, y: dragOffsetY },
|
|
11003
|
-
children: /* @__PURE__ */
|
|
11512
|
+
children: /* @__PURE__ */ jsxs87(
|
|
11004
11513
|
"div",
|
|
11005
11514
|
{
|
|
11006
11515
|
ref: nodeRef,
|
|
@@ -11009,7 +11518,7 @@ var DrawerContent = React42.forwardRef(
|
|
|
11009
11518
|
className
|
|
11010
11519
|
),
|
|
11011
11520
|
children: [
|
|
11012
|
-
showHandle && /* @__PURE__ */
|
|
11521
|
+
showHandle && /* @__PURE__ */ jsx140(
|
|
11013
11522
|
"div",
|
|
11014
11523
|
{
|
|
11015
11524
|
"data-drawer-handle": true,
|
|
@@ -11017,10 +11526,10 @@ var DrawerContent = React42.forwardRef(
|
|
|
11017
11526
|
"mx-auto flex h-8 w-24 touch-none items-center justify-center",
|
|
11018
11527
|
disableDrag ? "cursor-default" : "cursor-grab active:cursor-grabbing"
|
|
11019
11528
|
),
|
|
11020
|
-
children: /* @__PURE__ */
|
|
11529
|
+
children: /* @__PURE__ */ jsx140("span", { className: "block h-1.5 w-12 rounded-full bg-[#D9D7D3]" })
|
|
11021
11530
|
}
|
|
11022
11531
|
),
|
|
11023
|
-
/* @__PURE__ */
|
|
11532
|
+
/* @__PURE__ */ jsx140("div", { className: "min-h-0 flex-1 overflow-y-auto", children })
|
|
11024
11533
|
]
|
|
11025
11534
|
}
|
|
11026
11535
|
)
|
|
@@ -11032,7 +11541,7 @@ var DrawerContent = React42.forwardRef(
|
|
|
11032
11541
|
}
|
|
11033
11542
|
);
|
|
11034
11543
|
DrawerContent.displayName = DialogPrimitive2.Content.displayName;
|
|
11035
|
-
var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */
|
|
11544
|
+
var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */ jsx140(
|
|
11036
11545
|
"div",
|
|
11037
11546
|
{
|
|
11038
11547
|
className: cn("flex flex-col gap-2 px-5 pt-2 text-center", className),
|
|
@@ -11040,9 +11549,9 @@ var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */ jsx138(
|
|
|
11040
11549
|
}
|
|
11041
11550
|
);
|
|
11042
11551
|
DrawerHeader.displayName = "DrawerHeader";
|
|
11043
|
-
var DrawerFooter = ({ className, ...props }) => /* @__PURE__ */
|
|
11552
|
+
var DrawerFooter = ({ className, ...props }) => /* @__PURE__ */ jsx140("div", { className: cn("flex flex-col gap-2 p-5", className), ...props });
|
|
11044
11553
|
DrawerFooter.displayName = "DrawerFooter";
|
|
11045
|
-
var DrawerTitle = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
11554
|
+
var DrawerTitle = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx140(
|
|
11046
11555
|
DialogPrimitive2.Title,
|
|
11047
11556
|
{
|
|
11048
11557
|
ref,
|
|
@@ -11052,7 +11561,7 @@ var DrawerTitle = React42.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
11052
11561
|
}
|
|
11053
11562
|
));
|
|
11054
11563
|
DrawerTitle.displayName = DialogPrimitive2.Title.displayName;
|
|
11055
|
-
var DrawerDescription = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
11564
|
+
var DrawerDescription = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx140(
|
|
11056
11565
|
DialogPrimitive2.Description,
|
|
11057
11566
|
{
|
|
11058
11567
|
ref,
|
|
@@ -11079,7 +11588,7 @@ var DEVICE = {
|
|
|
11079
11588
|
};
|
|
11080
11589
|
|
|
11081
11590
|
// src/responsive-sheet/ResponsiveSheet.tsx
|
|
11082
|
-
import { jsx as
|
|
11591
|
+
import { jsx as jsx141, jsxs as jsxs88 } from "react/jsx-runtime";
|
|
11083
11592
|
function ResponsiveSheet({
|
|
11084
11593
|
open,
|
|
11085
11594
|
onClose,
|
|
@@ -11098,8 +11607,8 @@ function ResponsiveSheet({
|
|
|
11098
11607
|
closeOnEscape = true,
|
|
11099
11608
|
disableDrag = false
|
|
11100
11609
|
}) {
|
|
11101
|
-
const { isMatch:
|
|
11102
|
-
const isMobileMode =
|
|
11610
|
+
const { isMatch: isMobile3 } = useScreenResize(DEVICE.tablet);
|
|
11611
|
+
const isMobileMode = isMobile3 && isMobileModalModeAvailable();
|
|
11103
11612
|
const handleOpenChange = (nextOpen) => {
|
|
11104
11613
|
if (!nextOpen) {
|
|
11105
11614
|
onClose();
|
|
@@ -11115,7 +11624,7 @@ function ResponsiveSheet({
|
|
|
11115
11624
|
event.preventDefault();
|
|
11116
11625
|
}
|
|
11117
11626
|
};
|
|
11118
|
-
const content = /* @__PURE__ */
|
|
11627
|
+
const content = /* @__PURE__ */ jsxs88(
|
|
11119
11628
|
"div",
|
|
11120
11629
|
{
|
|
11121
11630
|
className: cn(
|
|
@@ -11123,7 +11632,7 @@ function ResponsiveSheet({
|
|
|
11123
11632
|
contentClassName
|
|
11124
11633
|
),
|
|
11125
11634
|
children: [
|
|
11126
|
-
title ? /* @__PURE__ */
|
|
11635
|
+
title ? /* @__PURE__ */ jsx141(
|
|
11127
11636
|
"div",
|
|
11128
11637
|
{
|
|
11129
11638
|
"aria-hidden": "true",
|
|
@@ -11134,7 +11643,7 @@ function ResponsiveSheet({
|
|
|
11134
11643
|
children: title
|
|
11135
11644
|
}
|
|
11136
11645
|
) : null,
|
|
11137
|
-
description ? /* @__PURE__ */
|
|
11646
|
+
description ? /* @__PURE__ */ jsx141(
|
|
11138
11647
|
"p",
|
|
11139
11648
|
{
|
|
11140
11649
|
"aria-hidden": "true",
|
|
@@ -11150,7 +11659,7 @@ function ResponsiveSheet({
|
|
|
11150
11659
|
}
|
|
11151
11660
|
);
|
|
11152
11661
|
if (isMobileMode) {
|
|
11153
|
-
return /* @__PURE__ */
|
|
11662
|
+
return /* @__PURE__ */ jsx141(Drawer, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs88(
|
|
11154
11663
|
DrawerContent,
|
|
11155
11664
|
{
|
|
11156
11665
|
onClose,
|
|
@@ -11161,14 +11670,14 @@ function ResponsiveSheet({
|
|
|
11161
11670
|
onEscapeKeyDown: handleEscapeKeyDown,
|
|
11162
11671
|
className: cn(className, drawerClassName),
|
|
11163
11672
|
children: [
|
|
11164
|
-
title ? /* @__PURE__ */
|
|
11165
|
-
description ? /* @__PURE__ */
|
|
11673
|
+
title ? /* @__PURE__ */ jsx141(DrawerTitle, { className: "sr-only", children: title }) : null,
|
|
11674
|
+
description ? /* @__PURE__ */ jsx141(DrawerDescription, { className: "sr-only", children: description }) : null,
|
|
11166
11675
|
content
|
|
11167
11676
|
]
|
|
11168
11677
|
}
|
|
11169
11678
|
) });
|
|
11170
11679
|
}
|
|
11171
|
-
return /* @__PURE__ */
|
|
11680
|
+
return /* @__PURE__ */ jsx141(Dialog, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs88(
|
|
11172
11681
|
DialogContent,
|
|
11173
11682
|
{
|
|
11174
11683
|
showCloseButton,
|
|
@@ -11178,8 +11687,8 @@ function ResponsiveSheet({
|
|
|
11178
11687
|
className: cn("max-w-[560px] border-0 p-0 shadow-xl", className, dialogClassName),
|
|
11179
11688
|
lockScroll: false,
|
|
11180
11689
|
children: [
|
|
11181
|
-
title ? /* @__PURE__ */
|
|
11182
|
-
description ? /* @__PURE__ */
|
|
11690
|
+
title ? /* @__PURE__ */ jsx141(DialogTitle, { className: "sr-only", children: title }) : null,
|
|
11691
|
+
description ? /* @__PURE__ */ jsx141(DialogDescription, { className: "sr-only", children: description }) : null,
|
|
11183
11692
|
content
|
|
11184
11693
|
]
|
|
11185
11694
|
}
|
|
@@ -11188,7 +11697,7 @@ function ResponsiveSheet({
|
|
|
11188
11697
|
|
|
11189
11698
|
// src/responsive-dropdown/ResponsiveDropdown.tsx
|
|
11190
11699
|
import * as React43 from "react";
|
|
11191
|
-
import { Fragment as
|
|
11700
|
+
import { Fragment as Fragment14, jsx as jsx142, jsxs as jsxs89 } from "react/jsx-runtime";
|
|
11192
11701
|
function ResponsiveDropdown({
|
|
11193
11702
|
trigger,
|
|
11194
11703
|
options,
|
|
@@ -11201,8 +11710,8 @@ function ResponsiveDropdown({
|
|
|
11201
11710
|
dropdownClassName,
|
|
11202
11711
|
drawerClassName
|
|
11203
11712
|
}) {
|
|
11204
|
-
const { isMatch:
|
|
11205
|
-
const isMobileMode =
|
|
11713
|
+
const { isMatch: isMobile3 } = useScreenResize(DEVICE.mobileXL);
|
|
11714
|
+
const isMobileMode = isMobile3 && isMobileModalModeAvailable();
|
|
11206
11715
|
const [open, setOpen] = React43.useState(false);
|
|
11207
11716
|
const visibleOptions = options?.filter((option) => !option.hidden) ?? [];
|
|
11208
11717
|
const renderTrigger = (isOpen) => typeof trigger === "function" ? trigger(isOpen) : trigger;
|
|
@@ -11220,8 +11729,8 @@ function ResponsiveDropdown({
|
|
|
11220
11729
|
setOpen(false);
|
|
11221
11730
|
};
|
|
11222
11731
|
if (isMobileMode) {
|
|
11223
|
-
return /* @__PURE__ */
|
|
11224
|
-
/* @__PURE__ */
|
|
11732
|
+
return /* @__PURE__ */ jsxs89(Fragment14, { children: [
|
|
11733
|
+
/* @__PURE__ */ jsx142(
|
|
11225
11734
|
"div",
|
|
11226
11735
|
{
|
|
11227
11736
|
className: "responsive-dropdown__mobile-trigger",
|
|
@@ -11229,16 +11738,16 @@ function ResponsiveDropdown({
|
|
|
11229
11738
|
children: renderTrigger(open)
|
|
11230
11739
|
}
|
|
11231
11740
|
),
|
|
11232
|
-
/* @__PURE__ */
|
|
11741
|
+
/* @__PURE__ */ jsx142(Drawer, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs89(
|
|
11233
11742
|
DrawerContent,
|
|
11234
11743
|
{
|
|
11235
11744
|
onClose: () => setOpen(false),
|
|
11236
11745
|
lockScroll: false,
|
|
11237
11746
|
className: cn("px-0 pb-2", className, drawerClassName),
|
|
11238
11747
|
children: [
|
|
11239
|
-
title ? /* @__PURE__ */
|
|
11240
|
-
/* @__PURE__ */
|
|
11241
|
-
visibleOptions.map((option) => /* @__PURE__ */
|
|
11748
|
+
title ? /* @__PURE__ */ jsx142(DrawerTitle, { className: "sr-only", children: title }) : null,
|
|
11749
|
+
/* @__PURE__ */ jsxs89("div", { className: "flex flex-col", children: [
|
|
11750
|
+
visibleOptions.map((option) => /* @__PURE__ */ jsx142(
|
|
11242
11751
|
"div",
|
|
11243
11752
|
{
|
|
11244
11753
|
role: "button",
|
|
@@ -11260,16 +11769,16 @@ function ResponsiveDropdown({
|
|
|
11260
11769
|
) })
|
|
11261
11770
|
] });
|
|
11262
11771
|
}
|
|
11263
|
-
return /* @__PURE__ */
|
|
11264
|
-
/* @__PURE__ */
|
|
11265
|
-
/* @__PURE__ */
|
|
11772
|
+
return /* @__PURE__ */ jsxs89(DropdownMenu, { open, onOpenChange: handleOpenChange, children: [
|
|
11773
|
+
/* @__PURE__ */ jsx142(DropdownMenuTrigger, { asChild: true, disabled, children: renderTrigger(open) }),
|
|
11774
|
+
/* @__PURE__ */ jsxs89(
|
|
11266
11775
|
DropdownMenuContent,
|
|
11267
11776
|
{
|
|
11268
11777
|
side,
|
|
11269
11778
|
align,
|
|
11270
11779
|
className: cn("min-w-[295px]", className, dropdownClassName),
|
|
11271
11780
|
children: [
|
|
11272
|
-
visibleOptions.map((option) => /* @__PURE__ */
|
|
11781
|
+
visibleOptions.map((option) => /* @__PURE__ */ jsx142(
|
|
11273
11782
|
DropdownMenuItem,
|
|
11274
11783
|
{
|
|
11275
11784
|
disabled: option.disabled,
|
|
@@ -11288,10 +11797,10 @@ function ResponsiveDropdown({
|
|
|
11288
11797
|
// src/dashboard/input/Input.tsx
|
|
11289
11798
|
import * as React44 from "react";
|
|
11290
11799
|
import { Eye, Minus as Minus4, Plus as Plus3, X as X9 } from "lucide-react";
|
|
11291
|
-
import { useTranslation as
|
|
11800
|
+
import { useTranslation as useTranslation26 } from "react-i18next";
|
|
11292
11801
|
|
|
11293
11802
|
// src/dashboard/_fieldset/Fieldset.tsx
|
|
11294
|
-
import { Fragment as
|
|
11803
|
+
import { Fragment as Fragment15, jsx as jsx143, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
11295
11804
|
function Fieldset({
|
|
11296
11805
|
isActivated,
|
|
11297
11806
|
isFocused,
|
|
@@ -11311,8 +11820,8 @@ function Fieldset({
|
|
|
11311
11820
|
}) {
|
|
11312
11821
|
const showLegendText = Boolean(legend || typeof label === "string");
|
|
11313
11822
|
const raised = !isEmpty || isFocused;
|
|
11314
|
-
return /* @__PURE__ */
|
|
11315
|
-
/* @__PURE__ */
|
|
11823
|
+
return /* @__PURE__ */ jsxs90(Fragment15, { children: [
|
|
11824
|
+
/* @__PURE__ */ jsxs90(
|
|
11316
11825
|
"div",
|
|
11317
11826
|
{
|
|
11318
11827
|
onClick,
|
|
@@ -11328,7 +11837,7 @@ function Fieldset({
|
|
|
11328
11837
|
labelClassName
|
|
11329
11838
|
),
|
|
11330
11839
|
children: [
|
|
11331
|
-
/* @__PURE__ */
|
|
11840
|
+
/* @__PURE__ */ jsx143(
|
|
11332
11841
|
"label",
|
|
11333
11842
|
{
|
|
11334
11843
|
id: labelId,
|
|
@@ -11340,7 +11849,7 @@ function Fieldset({
|
|
|
11340
11849
|
children: label
|
|
11341
11850
|
}
|
|
11342
11851
|
),
|
|
11343
|
-
tooltip && /* @__PURE__ */
|
|
11852
|
+
tooltip && /* @__PURE__ */ jsx143("span", { className: "ml-1 inline-flex", children: /* @__PURE__ */ jsx143(
|
|
11344
11853
|
HelpTooltip,
|
|
11345
11854
|
{
|
|
11346
11855
|
content: tooltip,
|
|
@@ -11351,7 +11860,7 @@ function Fieldset({
|
|
|
11351
11860
|
]
|
|
11352
11861
|
}
|
|
11353
11862
|
),
|
|
11354
|
-
/* @__PURE__ */
|
|
11863
|
+
/* @__PURE__ */ jsx143(
|
|
11355
11864
|
"fieldset",
|
|
11356
11865
|
{
|
|
11357
11866
|
"aria-hidden": "true",
|
|
@@ -11363,7 +11872,7 @@ function Fieldset({
|
|
|
11363
11872
|
invalid && "border-[var(--error-message-color)]",
|
|
11364
11873
|
className
|
|
11365
11874
|
),
|
|
11366
|
-
children: /* @__PURE__ */
|
|
11875
|
+
children: /* @__PURE__ */ jsxs90(
|
|
11367
11876
|
"legend",
|
|
11368
11877
|
{
|
|
11369
11878
|
className: cn(
|
|
@@ -11373,8 +11882,8 @@ function Fieldset({
|
|
|
11373
11882
|
!label && "w-0"
|
|
11374
11883
|
),
|
|
11375
11884
|
children: [
|
|
11376
|
-
showLegendText && /* @__PURE__ */
|
|
11377
|
-
tooltip && /* @__PURE__ */
|
|
11885
|
+
showLegendText && /* @__PURE__ */ jsx143("span", { className: "visible inline-block pr-[6px] text-[14px] font-medium opacity-0", children: legend || label }),
|
|
11886
|
+
tooltip && /* @__PURE__ */ jsx143("span", { className: "visible inline-block w-[20px] opacity-0", children: /* @__PURE__ */ jsx143("span", { className: "inline-block h-4 w-4" }) })
|
|
11378
11887
|
]
|
|
11379
11888
|
}
|
|
11380
11889
|
)
|
|
@@ -11384,7 +11893,7 @@ function Fieldset({
|
|
|
11384
11893
|
}
|
|
11385
11894
|
|
|
11386
11895
|
// src/dashboard/input/Input.tsx
|
|
11387
|
-
import { jsx as
|
|
11896
|
+
import { jsx as jsx144, jsxs as jsxs91 } from "react/jsx-runtime";
|
|
11388
11897
|
var checkIfEmpty = ({
|
|
11389
11898
|
empty,
|
|
11390
11899
|
defaultValue,
|
|
@@ -11435,7 +11944,7 @@ var DashboardInput = React44.forwardRef(
|
|
|
11435
11944
|
const generatedId = React44.useId();
|
|
11436
11945
|
const inputId = id ?? name ?? generatedId;
|
|
11437
11946
|
const errorId = `${inputId}-error`;
|
|
11438
|
-
const { t } =
|
|
11947
|
+
const { t } = useTranslation26();
|
|
11439
11948
|
const isEmpty = checkIfEmpty({ empty, value, defaultValue });
|
|
11440
11949
|
const [inputType, setInputType] = React44.useState(type);
|
|
11441
11950
|
const [isPasswordRevealed, setIsPasswordRevealed] = React44.useState(false);
|
|
@@ -11475,18 +11984,18 @@ var DashboardInput = React44.forwardRef(
|
|
|
11475
11984
|
};
|
|
11476
11985
|
const showRightPaddingForReset = Boolean(onReset);
|
|
11477
11986
|
const showRightPaddingForReveal = isPasswordReveal;
|
|
11478
|
-
return /* @__PURE__ */
|
|
11987
|
+
return /* @__PURE__ */ jsxs91(
|
|
11479
11988
|
"div",
|
|
11480
11989
|
{
|
|
11481
11990
|
className: cn(
|
|
11482
|
-
"relative block min-h-[68px] max-w-[var(--dashboard-input-max-width,none)]",
|
|
11991
|
+
"relative block w-full min-h-[68px] max-w-[var(--dashboard-input-max-width,none)]",
|
|
11483
11992
|
disabled && "cursor-not-allowed opacity-50",
|
|
11484
11993
|
loading && "cursor-progress opacity-50",
|
|
11485
11994
|
wrapperClassName,
|
|
11486
11995
|
className
|
|
11487
11996
|
),
|
|
11488
11997
|
children: [
|
|
11489
|
-
topLabel && /* @__PURE__ */
|
|
11998
|
+
topLabel && /* @__PURE__ */ jsx144(
|
|
11490
11999
|
"label",
|
|
11491
12000
|
{
|
|
11492
12001
|
htmlFor: inputId,
|
|
@@ -11494,7 +12003,7 @@ var DashboardInput = React44.forwardRef(
|
|
|
11494
12003
|
children: topLabel
|
|
11495
12004
|
}
|
|
11496
12005
|
),
|
|
11497
|
-
/* @__PURE__ */
|
|
12006
|
+
/* @__PURE__ */ jsxs91(
|
|
11498
12007
|
"div",
|
|
11499
12008
|
{
|
|
11500
12009
|
className: cn(
|
|
@@ -11503,8 +12012,8 @@ var DashboardInput = React44.forwardRef(
|
|
|
11503
12012
|
fieldClassName
|
|
11504
12013
|
),
|
|
11505
12014
|
children: [
|
|
11506
|
-
/* @__PURE__ */
|
|
11507
|
-
/* @__PURE__ */
|
|
12015
|
+
/* @__PURE__ */ jsxs91("div", { className: cn("relative w-full cursor-text", contentClassName), children: [
|
|
12016
|
+
/* @__PURE__ */ jsx144(
|
|
11508
12017
|
Fieldset,
|
|
11509
12018
|
{
|
|
11510
12019
|
isFocused: isFocused && !readOnly,
|
|
@@ -11525,8 +12034,8 @@ var DashboardInput = React44.forwardRef(
|
|
|
11525
12034
|
})
|
|
11526
12035
|
}
|
|
11527
12036
|
),
|
|
11528
|
-
leftIcon && /* @__PURE__ */
|
|
11529
|
-
/* @__PURE__ */
|
|
12037
|
+
leftIcon && /* @__PURE__ */ jsx144("span", { className: "pointer-events-none absolute left-0 top-0 flex h-full max-w-10 items-center justify-center text-[var(--chekin-color-gray-2)]", children: /* @__PURE__ */ jsx144("span", { className: "flex h-full w-10 items-center justify-center", children: leftIcon }) }),
|
|
12038
|
+
/* @__PURE__ */ jsx144(
|
|
11530
12039
|
"input",
|
|
11531
12040
|
{
|
|
11532
12041
|
...props,
|
|
@@ -11563,9 +12072,9 @@ var DashboardInput = React44.forwardRef(
|
|
|
11563
12072
|
)
|
|
11564
12073
|
}
|
|
11565
12074
|
),
|
|
11566
|
-
sign && /* @__PURE__ */
|
|
11567
|
-
trailingAdornment && /* @__PURE__ */
|
|
11568
|
-
onReset && !isEmpty && /* @__PURE__ */
|
|
12075
|
+
sign && /* @__PURE__ */ jsx144("span", { className: "pointer-events-none absolute right-[14px] top-0 flex h-full items-center text-[18px] font-medium leading-6 text-[var(--chekin-color-brand-navy)]", children: sign }),
|
|
12076
|
+
trailingAdornment && /* @__PURE__ */ jsx144("span", { className: "pointer-events-none absolute right-[14px] top-0 flex h-full items-center", children: trailingAdornment }),
|
|
12077
|
+
onReset && !isEmpty && /* @__PURE__ */ jsx144(
|
|
11569
12078
|
"button",
|
|
11570
12079
|
{
|
|
11571
12080
|
type: "button",
|
|
@@ -11573,17 +12082,17 @@ var DashboardInput = React44.forwardRef(
|
|
|
11573
12082
|
disabled,
|
|
11574
12083
|
className: "absolute right-0 top-0 flex h-full w-10 items-center justify-center border-0 bg-transparent p-0 text-[#9696b9] hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50",
|
|
11575
12084
|
"aria-label": "Reset",
|
|
11576
|
-
children: /* @__PURE__ */
|
|
12085
|
+
children: /* @__PURE__ */ jsx144(X9, { size: 14 })
|
|
11577
12086
|
}
|
|
11578
12087
|
),
|
|
11579
|
-
isPasswordReveal && /* @__PURE__ */
|
|
12088
|
+
isPasswordReveal && /* @__PURE__ */ jsx144(
|
|
11580
12089
|
"button",
|
|
11581
12090
|
{
|
|
11582
12091
|
type: "button",
|
|
11583
12092
|
onClick: togglePasswordReveal,
|
|
11584
12093
|
className: "absolute right-[14px] top-[18px] flex h-[13px] w-[21px] cursor-pointer items-center justify-center border-0 bg-transparent p-0 hover:opacity-85",
|
|
11585
12094
|
"aria-label": isPasswordRevealed ? "Hide password" : "Show password",
|
|
11586
|
-
children: /* @__PURE__ */
|
|
12095
|
+
children: /* @__PURE__ */ jsx144(
|
|
11587
12096
|
Eye,
|
|
11588
12097
|
{
|
|
11589
12098
|
size: 20,
|
|
@@ -11595,32 +12104,32 @@ var DashboardInput = React44.forwardRef(
|
|
|
11595
12104
|
}
|
|
11596
12105
|
)
|
|
11597
12106
|
] }),
|
|
11598
|
-
type === "number" && showNumberButtons && /* @__PURE__ */
|
|
11599
|
-
/* @__PURE__ */
|
|
12107
|
+
type === "number" && showNumberButtons && /* @__PURE__ */ jsxs91("div", { className: "absolute right-[18px] top-[13px] inline-flex items-center text-right", children: [
|
|
12108
|
+
/* @__PURE__ */ jsx144(
|
|
11600
12109
|
"button",
|
|
11601
12110
|
{
|
|
11602
12111
|
type: "button",
|
|
11603
12112
|
onClick: onDecrement,
|
|
11604
12113
|
className: "mr-2 inline-flex h-[23px] w-8 cursor-pointer items-center justify-center rounded-[3px] border-0 bg-[var(--chekin-color-brand-blue)] p-0 text-[20px] font-bold text-white outline-none hover:opacity-90 active:opacity-100",
|
|
11605
12114
|
"aria-label": "Decrement",
|
|
11606
|
-
children: /* @__PURE__ */
|
|
12115
|
+
children: /* @__PURE__ */ jsx144(Minus4, { size: 16, strokeWidth: 3, "aria-hidden": true })
|
|
11607
12116
|
}
|
|
11608
12117
|
),
|
|
11609
|
-
/* @__PURE__ */
|
|
12118
|
+
/* @__PURE__ */ jsx144(
|
|
11610
12119
|
"button",
|
|
11611
12120
|
{
|
|
11612
12121
|
type: "button",
|
|
11613
12122
|
onClick: onIncrement,
|
|
11614
12123
|
className: "inline-flex h-[23px] w-8 cursor-pointer items-center justify-center rounded-[3px] border-0 bg-[var(--chekin-color-brand-blue)] p-0 text-[20px] font-bold text-white outline-none hover:opacity-90 active:opacity-100",
|
|
11615
12124
|
"aria-label": "Increment",
|
|
11616
|
-
children: /* @__PURE__ */
|
|
12125
|
+
children: /* @__PURE__ */ jsx144(Plus3, { size: 16, strokeWidth: 3, "aria-hidden": true })
|
|
11617
12126
|
}
|
|
11618
12127
|
)
|
|
11619
12128
|
] })
|
|
11620
12129
|
]
|
|
11621
12130
|
}
|
|
11622
12131
|
),
|
|
11623
|
-
!errorMessage && optional && /* @__PURE__ */
|
|
12132
|
+
!errorMessage && optional && /* @__PURE__ */ jsx144(
|
|
11624
12133
|
"span",
|
|
11625
12134
|
{
|
|
11626
12135
|
"data-testid": `${name}-optional`,
|
|
@@ -11628,8 +12137,8 @@ var DashboardInput = React44.forwardRef(
|
|
|
11628
12137
|
children: typeof optional === "string" ? optional : t("optional")
|
|
11629
12138
|
}
|
|
11630
12139
|
),
|
|
11631
|
-
!errorMessage && helperText && /* @__PURE__ */
|
|
11632
|
-
errorMessage && renderErrorMessage && /* @__PURE__ */
|
|
12140
|
+
!errorMessage && helperText && /* @__PURE__ */ jsx144("span", { className: "mt-[1px] block text-[12px] font-normal text-[var(--chekin-color-gray-1)]", children: helperText }),
|
|
12141
|
+
errorMessage && renderErrorMessage && /* @__PURE__ */ jsx144(
|
|
11633
12142
|
FieldErrorMessage,
|
|
11634
12143
|
{
|
|
11635
12144
|
id: errorId,
|
|
@@ -11648,11 +12157,11 @@ DashboardInput.displayName = "DashboardInput";
|
|
|
11648
12157
|
|
|
11649
12158
|
// src/dashboard/select/Select.tsx
|
|
11650
12159
|
import * as React48 from "react";
|
|
11651
|
-
import { useTranslation as
|
|
12160
|
+
import { useTranslation as useTranslation30 } from "react-i18next";
|
|
11652
12161
|
|
|
11653
12162
|
// src/dashboard/_select-internals/SelectFieldShell.tsx
|
|
11654
|
-
import { useTranslation as
|
|
11655
|
-
import { jsx as
|
|
12163
|
+
import { useTranslation as useTranslation27 } from "react-i18next";
|
|
12164
|
+
import { jsx as jsx145, jsxs as jsxs92 } from "react/jsx-runtime";
|
|
11656
12165
|
function SelectFieldShell({
|
|
11657
12166
|
containerRef,
|
|
11658
12167
|
className,
|
|
@@ -11671,9 +12180,9 @@ function SelectFieldShell({
|
|
|
11671
12180
|
onBlur,
|
|
11672
12181
|
children
|
|
11673
12182
|
}) {
|
|
11674
|
-
const { t } =
|
|
12183
|
+
const { t } = useTranslation27();
|
|
11675
12184
|
const wrapperWidth = toCssSize(width);
|
|
11676
|
-
return /* @__PURE__ */
|
|
12185
|
+
return /* @__PURE__ */ jsxs92(
|
|
11677
12186
|
"div",
|
|
11678
12187
|
{
|
|
11679
12188
|
ref: containerRef,
|
|
@@ -11686,9 +12195,9 @@ function SelectFieldShell({
|
|
|
11686
12195
|
),
|
|
11687
12196
|
style: wrapperWidth ? { width: wrapperWidth } : void 0,
|
|
11688
12197
|
children: [
|
|
11689
|
-
name && /* @__PURE__ */
|
|
11690
|
-
/* @__PURE__ */
|
|
11691
|
-
topLabel && /* @__PURE__ */
|
|
12198
|
+
name && /* @__PURE__ */ jsx145("input", { type: "hidden", name, value: hiddenValue ?? "" }),
|
|
12199
|
+
/* @__PURE__ */ jsxs92("div", { className: "relative min-h-[68px] w-full", children: [
|
|
12200
|
+
topLabel && /* @__PURE__ */ jsx145(
|
|
11692
12201
|
"label",
|
|
11693
12202
|
{
|
|
11694
12203
|
htmlFor: triggerId,
|
|
@@ -11696,10 +12205,10 @@ function SelectFieldShell({
|
|
|
11696
12205
|
children: topLabel
|
|
11697
12206
|
}
|
|
11698
12207
|
),
|
|
11699
|
-
/* @__PURE__ */
|
|
11700
|
-
!errorMessage && optional && /* @__PURE__ */
|
|
11701
|
-
!errorMessage && helperText && /* @__PURE__ */
|
|
11702
|
-
errorMessage && !hideErrorMessage && /* @__PURE__ */
|
|
12208
|
+
/* @__PURE__ */ jsx145("div", { className: "relative w-full", children }),
|
|
12209
|
+
!errorMessage && optional && /* @__PURE__ */ jsx145("span", { className: "mt-[1px] block text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: typeof optional === "string" ? optional : t("optional") }),
|
|
12210
|
+
!errorMessage && helperText && /* @__PURE__ */ jsx145("span", { className: "mt-[1px] block text-[12px] font-normal text-[var(--chekin-color-gray-1)]", children: helperText }),
|
|
12211
|
+
errorMessage && !hideErrorMessage && /* @__PURE__ */ jsx145(
|
|
11703
12212
|
FieldErrorMessage,
|
|
11704
12213
|
{
|
|
11705
12214
|
id: errorId,
|
|
@@ -11714,7 +12223,7 @@ function SelectFieldShell({
|
|
|
11714
12223
|
}
|
|
11715
12224
|
|
|
11716
12225
|
// src/dashboard/_select-internals/SelectMenu.tsx
|
|
11717
|
-
import { useTranslation as
|
|
12226
|
+
import { useTranslation as useTranslation28 } from "react-i18next";
|
|
11718
12227
|
|
|
11719
12228
|
// src/dashboard/_select-internals/utils.ts
|
|
11720
12229
|
function getOptionIndex(options, option) {
|
|
@@ -11745,7 +12254,7 @@ function isOptionSelected(option, selectedValue, selectedValues) {
|
|
|
11745
12254
|
}
|
|
11746
12255
|
|
|
11747
12256
|
// src/dashboard/_select-internals/SelectMenu.tsx
|
|
11748
|
-
import { jsx as
|
|
12257
|
+
import { jsx as jsx146, jsxs as jsxs93 } from "react/jsx-runtime";
|
|
11749
12258
|
function SelectMenu({
|
|
11750
12259
|
id,
|
|
11751
12260
|
options,
|
|
@@ -11767,10 +12276,10 @@ function SelectMenu({
|
|
|
11767
12276
|
emptyContent,
|
|
11768
12277
|
footer
|
|
11769
12278
|
}) {
|
|
11770
|
-
const { t } =
|
|
12279
|
+
const { t } = useTranslation28();
|
|
11771
12280
|
const emptyMessage = noOptionsMessage?.() ?? t("no_options");
|
|
11772
12281
|
const hasOptions = options.length > 0;
|
|
11773
|
-
return /* @__PURE__ */
|
|
12282
|
+
return /* @__PURE__ */ jsxs93(
|
|
11774
12283
|
"div",
|
|
11775
12284
|
{
|
|
11776
12285
|
id,
|
|
@@ -11787,13 +12296,13 @@ function SelectMenu({
|
|
|
11787
12296
|
menuClassName
|
|
11788
12297
|
),
|
|
11789
12298
|
children: [
|
|
11790
|
-
!hasOptions && (emptyContent ?? /* @__PURE__ */
|
|
12299
|
+
!hasOptions && (emptyContent ?? /* @__PURE__ */ jsx146("div", { className: "mt-[10px] text-left text-[16px] text-[var(--chekin-color-brand-navy)]", children: emptyMessage })),
|
|
11791
12300
|
options.map((option, index) => {
|
|
11792
12301
|
const isSelected = isOptionSelected(option, selectedValue, selectedValues);
|
|
11793
12302
|
const isHighlighted = index === highlightedIndex;
|
|
11794
12303
|
const optionKey = `${String(option.value)}-${index}`;
|
|
11795
12304
|
const isOptionDisabled = Boolean(disabled || option.isDisabled);
|
|
11796
|
-
return /* @__PURE__ */
|
|
12305
|
+
return /* @__PURE__ */ jsxs93(
|
|
11797
12306
|
"button",
|
|
11798
12307
|
{
|
|
11799
12308
|
id: getOptionId2(index),
|
|
@@ -11816,8 +12325,8 @@ function SelectMenu({
|
|
|
11816
12325
|
isOptionDisabled && "cursor-default opacity-30"
|
|
11817
12326
|
),
|
|
11818
12327
|
children: [
|
|
11819
|
-
/* @__PURE__ */
|
|
11820
|
-
option.description && /* @__PURE__ */
|
|
12328
|
+
/* @__PURE__ */ jsx146("span", { className: "block break-words", children: option.label }),
|
|
12329
|
+
option.description && /* @__PURE__ */ jsx146("span", { className: "ml-2 mt-[3px] shrink-0 text-[12px] font-bold italic text-[#777e91]", children: option.description })
|
|
11821
12330
|
]
|
|
11822
12331
|
},
|
|
11823
12332
|
optionKey
|
|
@@ -11830,11 +12339,11 @@ function SelectMenu({
|
|
|
11830
12339
|
}
|
|
11831
12340
|
|
|
11832
12341
|
// src/dashboard/_select-internals/SelectMenuPanel.tsx
|
|
11833
|
-
import { useTranslation as
|
|
11834
|
-
import { jsx as
|
|
12342
|
+
import { useTranslation as useTranslation29 } from "react-i18next";
|
|
12343
|
+
import { jsx as jsx147, jsxs as jsxs94 } from "react/jsx-runtime";
|
|
11835
12344
|
function SelectMenuPanel({
|
|
11836
12345
|
isOpen,
|
|
11837
|
-
isMobile:
|
|
12346
|
+
isMobile: isMobile3,
|
|
11838
12347
|
onClose,
|
|
11839
12348
|
title,
|
|
11840
12349
|
description,
|
|
@@ -11843,29 +12352,29 @@ function SelectMenuPanel({
|
|
|
11843
12352
|
drawerContentClassName,
|
|
11844
12353
|
children
|
|
11845
12354
|
}) {
|
|
11846
|
-
const { t } =
|
|
12355
|
+
const { t } = useTranslation29();
|
|
11847
12356
|
if (!isOpen) return null;
|
|
11848
|
-
if (
|
|
12357
|
+
if (isMobile3) {
|
|
11849
12358
|
const fallbackTitle = t("select_option");
|
|
11850
12359
|
const titleText = typeof title === "string" || typeof title === "number" ? String(title) : fallbackTitle;
|
|
11851
12360
|
const descriptionText = typeof description === "string" || typeof description === "number" ? String(description) : titleText;
|
|
11852
|
-
return /* @__PURE__ */
|
|
12361
|
+
return /* @__PURE__ */ jsx147(
|
|
11853
12362
|
Drawer,
|
|
11854
12363
|
{
|
|
11855
12364
|
open: isOpen,
|
|
11856
12365
|
onOpenChange: (next) => {
|
|
11857
12366
|
if (!next) onClose();
|
|
11858
12367
|
},
|
|
11859
|
-
children: /* @__PURE__ */
|
|
12368
|
+
children: /* @__PURE__ */ jsxs94(
|
|
11860
12369
|
DrawerContent,
|
|
11861
12370
|
{
|
|
11862
12371
|
onClose,
|
|
11863
12372
|
lockScroll: false,
|
|
11864
12373
|
className: cn("max-h-[calc(100vh-1rem)]", drawerClassName),
|
|
11865
12374
|
children: [
|
|
11866
|
-
/* @__PURE__ */
|
|
11867
|
-
/* @__PURE__ */
|
|
11868
|
-
/* @__PURE__ */
|
|
12375
|
+
/* @__PURE__ */ jsx147(DrawerTitle, { className: "sr-only", children: titleText }),
|
|
12376
|
+
/* @__PURE__ */ jsx147(DrawerDescription, { className: "sr-only", children: descriptionText }),
|
|
12377
|
+
/* @__PURE__ */ jsx147(
|
|
11869
12378
|
"div",
|
|
11870
12379
|
{
|
|
11871
12380
|
className: cn(
|
|
@@ -11881,7 +12390,7 @@ function SelectMenuPanel({
|
|
|
11881
12390
|
}
|
|
11882
12391
|
);
|
|
11883
12392
|
}
|
|
11884
|
-
return /* @__PURE__ */
|
|
12393
|
+
return /* @__PURE__ */ jsx147(
|
|
11885
12394
|
"div",
|
|
11886
12395
|
{
|
|
11887
12396
|
className: cn(
|
|
@@ -11894,7 +12403,7 @@ function SelectMenuPanel({
|
|
|
11894
12403
|
}
|
|
11895
12404
|
|
|
11896
12405
|
// src/dashboard/_select-internals/SelectSearchInput.tsx
|
|
11897
|
-
import { jsx as
|
|
12406
|
+
import { jsx as jsx148 } from "react/jsx-runtime";
|
|
11898
12407
|
function SelectSearchInput({
|
|
11899
12408
|
inputRef,
|
|
11900
12409
|
value,
|
|
@@ -11904,7 +12413,7 @@ function SelectSearchInput({
|
|
|
11904
12413
|
onChange,
|
|
11905
12414
|
onKeyDown
|
|
11906
12415
|
}) {
|
|
11907
|
-
return /* @__PURE__ */
|
|
12416
|
+
return /* @__PURE__ */ jsx148("div", { className: "border-b border-[#f2f4f8] px-4 pb-2 pt-3", children: /* @__PURE__ */ jsx148(
|
|
11908
12417
|
"input",
|
|
11909
12418
|
{
|
|
11910
12419
|
ref: inputRef,
|
|
@@ -11923,7 +12432,7 @@ function SelectSearchInput({
|
|
|
11923
12432
|
|
|
11924
12433
|
// src/dashboard/_select-internals/SelectTrigger.tsx
|
|
11925
12434
|
import { ChevronDown as ChevronDown2 } from "lucide-react";
|
|
11926
|
-
import { jsx as
|
|
12435
|
+
import { jsx as jsx149, jsxs as jsxs95 } from "react/jsx-runtime";
|
|
11927
12436
|
function SelectTrigger({
|
|
11928
12437
|
triggerRef,
|
|
11929
12438
|
triggerId,
|
|
@@ -11944,7 +12453,7 @@ function SelectTrigger({
|
|
|
11944
12453
|
onBlur
|
|
11945
12454
|
}) {
|
|
11946
12455
|
const isEmpty = !hasValue;
|
|
11947
|
-
return /* @__PURE__ */
|
|
12456
|
+
return /* @__PURE__ */ jsxs95(
|
|
11948
12457
|
"button",
|
|
11949
12458
|
{
|
|
11950
12459
|
id: triggerId,
|
|
@@ -11968,10 +12477,10 @@ function SelectTrigger({
|
|
|
11968
12477
|
loading && "cursor-progress"
|
|
11969
12478
|
),
|
|
11970
12479
|
children: [
|
|
11971
|
-
/* @__PURE__ */
|
|
11972
|
-
/* @__PURE__ */
|
|
11973
|
-
loading && /* @__PURE__ */
|
|
11974
|
-
/* @__PURE__ */
|
|
12480
|
+
/* @__PURE__ */ jsx149("span", { id: valueId, className: "block min-w-0 flex-1 truncate text-left", children: valueLabel ?? (isOpen ? placeholder : null) }),
|
|
12481
|
+
/* @__PURE__ */ jsxs95("span", { className: "pointer-events-none flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: [
|
|
12482
|
+
loading && /* @__PURE__ */ jsx149(ThreeDotsLoader, { height: 18, width: 18 }),
|
|
12483
|
+
/* @__PURE__ */ jsx149(
|
|
11975
12484
|
ChevronDown2,
|
|
11976
12485
|
{
|
|
11977
12486
|
size: 16,
|
|
@@ -12026,7 +12535,7 @@ function useSelectIds({
|
|
|
12026
12535
|
import * as React46 from "react";
|
|
12027
12536
|
function useSelectMenuState({
|
|
12028
12537
|
isBlocked,
|
|
12029
|
-
isMobile:
|
|
12538
|
+
isMobile: isMobile3,
|
|
12030
12539
|
onOutsideClick
|
|
12031
12540
|
}) {
|
|
12032
12541
|
const containerRef = React46.useRef(null);
|
|
@@ -12047,7 +12556,7 @@ function useSelectMenuState({
|
|
|
12047
12556
|
setIsOpen(false);
|
|
12048
12557
|
onOutsideClick?.();
|
|
12049
12558
|
},
|
|
12050
|
-
isDisabled: !isOpen ||
|
|
12559
|
+
isDisabled: !isOpen || isMobile3
|
|
12051
12560
|
});
|
|
12052
12561
|
React46.useEffect(() => {
|
|
12053
12562
|
if (isBlocked) setIsOpen(false);
|
|
@@ -12072,7 +12581,7 @@ function useSelectSearch({
|
|
|
12072
12581
|
}
|
|
12073
12582
|
|
|
12074
12583
|
// src/dashboard/select/Select.tsx
|
|
12075
|
-
import { jsx as
|
|
12584
|
+
import { jsx as jsx150, jsxs as jsxs96 } from "react/jsx-runtime";
|
|
12076
12585
|
function DashboardSelectInternal({
|
|
12077
12586
|
options = [],
|
|
12078
12587
|
value,
|
|
@@ -12106,8 +12615,8 @@ function DashboardSelectInternal({
|
|
|
12106
12615
|
const listRef = React48.useRef(null);
|
|
12107
12616
|
const optionRefs = React48.useRef([]);
|
|
12108
12617
|
const [highlightedIndex, setHighlightedIndex] = React48.useState(-1);
|
|
12109
|
-
const
|
|
12110
|
-
const { t } =
|
|
12618
|
+
const isMobile3 = useIsMobile();
|
|
12619
|
+
const { t } = useTranslation30();
|
|
12111
12620
|
const resolvedSearchPlaceholder = searchPlaceholder ?? t("search_placeholder");
|
|
12112
12621
|
const hasValue = Boolean(value);
|
|
12113
12622
|
const isBlocked = Boolean(disabled) || Boolean(loading);
|
|
@@ -12117,7 +12626,7 @@ function DashboardSelectInternal({
|
|
|
12117
12626
|
const valueLabel = value ? getValueLabel?.(value) ?? String(value.label) : void 0;
|
|
12118
12627
|
const { containerRef, isOpen, closeMenu, toggleMenu, setIsOpen } = useSelectMenuState({
|
|
12119
12628
|
isBlocked,
|
|
12120
|
-
isMobile:
|
|
12629
|
+
isMobile: isMobile3
|
|
12121
12630
|
});
|
|
12122
12631
|
const { triggerId, labelId, valueId, listboxId, describedErrorId, errorId, getOptionId: getOptionId2 } = useSelectIds({ name, hasValue, error, hideErrorMessage });
|
|
12123
12632
|
const { searchValue, setSearchValue, filteredOptions } = useSelectSearch({
|
|
@@ -12196,7 +12705,7 @@ function DashboardSelectInternal({
|
|
|
12196
12705
|
setIsOpen(false);
|
|
12197
12706
|
}
|
|
12198
12707
|
};
|
|
12199
|
-
return /* @__PURE__ */
|
|
12708
|
+
return /* @__PURE__ */ jsxs96(
|
|
12200
12709
|
SelectFieldShell,
|
|
12201
12710
|
{
|
|
12202
12711
|
containerRef,
|
|
@@ -12214,7 +12723,7 @@ function DashboardSelectInternal({
|
|
|
12214
12723
|
name,
|
|
12215
12724
|
hiddenValue: value ? String(value.value) : "",
|
|
12216
12725
|
children: [
|
|
12217
|
-
/* @__PURE__ */
|
|
12726
|
+
/* @__PURE__ */ jsx150(
|
|
12218
12727
|
SelectTrigger,
|
|
12219
12728
|
{
|
|
12220
12729
|
triggerRef,
|
|
@@ -12236,7 +12745,7 @@ function DashboardSelectInternal({
|
|
|
12236
12745
|
onBlur
|
|
12237
12746
|
}
|
|
12238
12747
|
),
|
|
12239
|
-
/* @__PURE__ */
|
|
12748
|
+
/* @__PURE__ */ jsx150(
|
|
12240
12749
|
Fieldset,
|
|
12241
12750
|
{
|
|
12242
12751
|
isFocused: isOpen,
|
|
@@ -12253,17 +12762,17 @@ function DashboardSelectInternal({
|
|
|
12253
12762
|
onClick: !isBlocked ? toggleMenu : void 0
|
|
12254
12763
|
}
|
|
12255
12764
|
),
|
|
12256
|
-
/* @__PURE__ */
|
|
12765
|
+
/* @__PURE__ */ jsxs96(
|
|
12257
12766
|
SelectMenuPanel,
|
|
12258
12767
|
{
|
|
12259
12768
|
isOpen,
|
|
12260
|
-
isMobile:
|
|
12769
|
+
isMobile: isMobile3,
|
|
12261
12770
|
onClose: closeMenu,
|
|
12262
12771
|
title: typeof label === "string" ? label : void 0,
|
|
12263
12772
|
className: dropdownClassName,
|
|
12264
12773
|
drawerClassName,
|
|
12265
12774
|
children: [
|
|
12266
|
-
searchable && /* @__PURE__ */
|
|
12775
|
+
searchable && /* @__PURE__ */ jsx150(
|
|
12267
12776
|
SelectSearchInput,
|
|
12268
12777
|
{
|
|
12269
12778
|
inputRef: searchInputRef,
|
|
@@ -12275,7 +12784,7 @@ function DashboardSelectInternal({
|
|
|
12275
12784
|
onKeyDown: handleSearchKeyDown
|
|
12276
12785
|
}
|
|
12277
12786
|
),
|
|
12278
|
-
/* @__PURE__ */
|
|
12787
|
+
/* @__PURE__ */ jsx150(
|
|
12279
12788
|
SelectMenu,
|
|
12280
12789
|
{
|
|
12281
12790
|
id: listboxId,
|
|
@@ -12310,22 +12819,22 @@ var DashboardSelect = React48.forwardRef(
|
|
|
12310
12819
|
// src/dashboard/multi-select/MultiSelect.tsx
|
|
12311
12820
|
import * as React49 from "react";
|
|
12312
12821
|
import { SquareX as SquareX3 } from "lucide-react";
|
|
12313
|
-
import { useTranslation as
|
|
12822
|
+
import { useTranslation as useTranslation32 } from "react-i18next";
|
|
12314
12823
|
|
|
12315
12824
|
// src/dashboard/multi-select/MultiSelectChip.tsx
|
|
12316
12825
|
import { SquareX as SquareX2 } from "lucide-react";
|
|
12317
|
-
import { useTranslation as
|
|
12318
|
-
import { jsx as
|
|
12826
|
+
import { useTranslation as useTranslation31 } from "react-i18next";
|
|
12827
|
+
import { jsx as jsx151, jsxs as jsxs97 } from "react/jsx-runtime";
|
|
12319
12828
|
function MultiSelectChip({
|
|
12320
12829
|
option,
|
|
12321
12830
|
readOnly,
|
|
12322
12831
|
onRemove
|
|
12323
12832
|
}) {
|
|
12324
|
-
const { t } =
|
|
12833
|
+
const { t } = useTranslation31();
|
|
12325
12834
|
const labelText = typeof option.label === "string" ? option.label : String(option.value);
|
|
12326
|
-
return /* @__PURE__ */
|
|
12327
|
-
/* @__PURE__ */
|
|
12328
|
-
!readOnly && /* @__PURE__ */
|
|
12835
|
+
return /* @__PURE__ */ jsxs97("span", { className: "inline-flex items-center gap-2 rounded-[4px] border border-[#acacd5] bg-[#f0f0f8] py-[2px] pl-[10px] pr-1 text-[12px] font-medium text-[var(--chekin-color-brand-navy)]", children: [
|
|
12836
|
+
/* @__PURE__ */ jsx151("span", { className: "whitespace-nowrap", children: option.label }),
|
|
12837
|
+
!readOnly && /* @__PURE__ */ jsx151(
|
|
12329
12838
|
"button",
|
|
12330
12839
|
{
|
|
12331
12840
|
type: "button",
|
|
@@ -12335,14 +12844,14 @@ function MultiSelectChip({
|
|
|
12335
12844
|
},
|
|
12336
12845
|
className: "flex h-[15px] w-[15px] items-center justify-center rounded-[3px] border-0 bg-transparent p-0 text-[#9696b9] hover:shadow-[0_3px_3px_#0f477734]",
|
|
12337
12846
|
"aria-label": t("remove_item", { label: labelText }),
|
|
12338
|
-
children: /* @__PURE__ */
|
|
12847
|
+
children: /* @__PURE__ */ jsx151(SquareX2, { size: 15, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
12339
12848
|
}
|
|
12340
12849
|
)
|
|
12341
12850
|
] });
|
|
12342
12851
|
}
|
|
12343
12852
|
|
|
12344
12853
|
// src/dashboard/multi-select/MultiSelect.tsx
|
|
12345
|
-
import { jsx as
|
|
12854
|
+
import { jsx as jsx152, jsxs as jsxs98 } from "react/jsx-runtime";
|
|
12346
12855
|
var isValueSelected = (selected, option) => selected.some((item) => item.value === option.value);
|
|
12347
12856
|
function DashboardMultiSelectInternal({
|
|
12348
12857
|
options = [],
|
|
@@ -12382,8 +12891,8 @@ function DashboardMultiSelectInternal({
|
|
|
12382
12891
|
const optionRefs = React49.useRef([]);
|
|
12383
12892
|
const [isFocused, setIsFocused] = React49.useState(false);
|
|
12384
12893
|
const [highlightedIndex, setHighlightedIndex] = React49.useState(-1);
|
|
12385
|
-
const
|
|
12386
|
-
const { t } =
|
|
12894
|
+
const isMobile3 = useIsMobile();
|
|
12895
|
+
const { t } = useTranslation32();
|
|
12387
12896
|
const selectedValues = React49.useMemo(() => value ?? [], [value]);
|
|
12388
12897
|
const hasValue = selectedValues.length > 0;
|
|
12389
12898
|
const isEmpty = !hasValue;
|
|
@@ -12393,7 +12902,7 @@ function DashboardMultiSelectInternal({
|
|
|
12393
12902
|
const errorMessage = typeof error === "string" ? error : void 0;
|
|
12394
12903
|
const { containerRef, isOpen, closeMenu, setIsOpen } = useSelectMenuState({
|
|
12395
12904
|
isBlocked,
|
|
12396
|
-
isMobile:
|
|
12905
|
+
isMobile: isMobile3,
|
|
12397
12906
|
onOutsideClick: () => setIsFocused(false)
|
|
12398
12907
|
});
|
|
12399
12908
|
const { triggerId, labelId, valueId, listboxId, describedErrorId, errorId, getOptionId: getOptionId2 } = useSelectIds({ name, hasValue, error, hideErrorMessage });
|
|
@@ -12435,12 +12944,12 @@ function DashboardMultiSelectInternal({
|
|
|
12435
12944
|
});
|
|
12436
12945
|
}, [isOpen, filteredOptions]);
|
|
12437
12946
|
React49.useEffect(() => {
|
|
12438
|
-
if (!isOpen || !
|
|
12947
|
+
if (!isOpen || !isMobile3) return;
|
|
12439
12948
|
const frame = window.requestAnimationFrame(
|
|
12440
12949
|
() => mobileSearchInputRef.current?.focus()
|
|
12441
12950
|
);
|
|
12442
12951
|
return () => window.cancelAnimationFrame(frame);
|
|
12443
|
-
}, [isOpen,
|
|
12952
|
+
}, [isOpen, isMobile3]);
|
|
12444
12953
|
const openMenu = () => {
|
|
12445
12954
|
if (isBlocked) return;
|
|
12446
12955
|
setIsOpen(true);
|
|
@@ -12537,7 +13046,7 @@ function DashboardMultiSelectInternal({
|
|
|
12537
13046
|
setIsFocused(false);
|
|
12538
13047
|
onBlur?.(event);
|
|
12539
13048
|
};
|
|
12540
|
-
return /* @__PURE__ */
|
|
13049
|
+
return /* @__PURE__ */ jsxs98(
|
|
12541
13050
|
SelectFieldShell,
|
|
12542
13051
|
{
|
|
12543
13052
|
containerRef,
|
|
@@ -12556,7 +13065,7 @@ function DashboardMultiSelectInternal({
|
|
|
12556
13065
|
hiddenValue: selectedValues.map((item) => String(item.value)).join(","),
|
|
12557
13066
|
onBlur: handleInputBlur,
|
|
12558
13067
|
children: [
|
|
12559
|
-
/* @__PURE__ */
|
|
13068
|
+
/* @__PURE__ */ jsxs98(
|
|
12560
13069
|
"div",
|
|
12561
13070
|
{
|
|
12562
13071
|
id: triggerId,
|
|
@@ -12579,7 +13088,7 @@ function DashboardMultiSelectInternal({
|
|
|
12579
13088
|
),
|
|
12580
13089
|
children: [
|
|
12581
13090
|
selectedValues.map(
|
|
12582
|
-
(option) => renderChip ? /* @__PURE__ */
|
|
13091
|
+
(option) => renderChip ? /* @__PURE__ */ jsx152(React49.Fragment, { children: renderChip(option, () => removeOption(option)) }, String(option.value)) : /* @__PURE__ */ jsx152(
|
|
12583
13092
|
MultiSelectChip,
|
|
12584
13093
|
{
|
|
12585
13094
|
option,
|
|
@@ -12589,7 +13098,7 @@ function DashboardMultiSelectInternal({
|
|
|
12589
13098
|
String(option.value)
|
|
12590
13099
|
)
|
|
12591
13100
|
),
|
|
12592
|
-
/* @__PURE__ */
|
|
13101
|
+
/* @__PURE__ */ jsx152(
|
|
12593
13102
|
"input",
|
|
12594
13103
|
{
|
|
12595
13104
|
ref: inputRef,
|
|
@@ -12618,9 +13127,9 @@ function DashboardMultiSelectInternal({
|
|
|
12618
13127
|
"aria-activedescendant": isOpen && highlightedIndex >= 0 ? getOptionId2(highlightedIndex) : void 0
|
|
12619
13128
|
}
|
|
12620
13129
|
),
|
|
12621
|
-
/* @__PURE__ */
|
|
12622
|
-
loading && /* @__PURE__ */
|
|
12623
|
-
hasValue && !readOnly && /* @__PURE__ */
|
|
13130
|
+
/* @__PURE__ */ jsxs98("span", { className: "ml-auto flex items-center gap-2 pl-2 text-[var(--chekin-color-gray-2)]", children: [
|
|
13131
|
+
loading && /* @__PURE__ */ jsx152(ThreeDotsLoader, { height: 18, width: 18 }),
|
|
13132
|
+
hasValue && !readOnly && /* @__PURE__ */ jsx152(
|
|
12624
13133
|
"button",
|
|
12625
13134
|
{
|
|
12626
13135
|
type: "button",
|
|
@@ -12630,10 +13139,10 @@ function DashboardMultiSelectInternal({
|
|
|
12630
13139
|
},
|
|
12631
13140
|
className: "flex h-5 w-5 items-center justify-center rounded-[3px] border-0 bg-transparent p-0 text-[#9696b9] hover:shadow-[0_3px_3px_#0f477734]",
|
|
12632
13141
|
"aria-label": t("clear_all"),
|
|
12633
|
-
children: /* @__PURE__ */
|
|
13142
|
+
children: /* @__PURE__ */ jsx152(SquareX3, { size: 15, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
12634
13143
|
}
|
|
12635
13144
|
),
|
|
12636
|
-
/* @__PURE__ */
|
|
13145
|
+
/* @__PURE__ */ jsx152(
|
|
12637
13146
|
RotateArrow,
|
|
12638
13147
|
{
|
|
12639
13148
|
shouldRotate: isOpen,
|
|
@@ -12646,7 +13155,7 @@ function DashboardMultiSelectInternal({
|
|
|
12646
13155
|
]
|
|
12647
13156
|
}
|
|
12648
13157
|
),
|
|
12649
|
-
/* @__PURE__ */
|
|
13158
|
+
/* @__PURE__ */ jsx152(
|
|
12650
13159
|
Fieldset,
|
|
12651
13160
|
{
|
|
12652
13161
|
isFocused: isFocused || isOpen,
|
|
@@ -12664,11 +13173,11 @@ function DashboardMultiSelectInternal({
|
|
|
12664
13173
|
onClick: handleContainerClick
|
|
12665
13174
|
}
|
|
12666
13175
|
),
|
|
12667
|
-
/* @__PURE__ */
|
|
13176
|
+
/* @__PURE__ */ jsxs98(
|
|
12668
13177
|
SelectMenuPanel,
|
|
12669
13178
|
{
|
|
12670
13179
|
isOpen,
|
|
12671
|
-
isMobile:
|
|
13180
|
+
isMobile: isMobile3,
|
|
12672
13181
|
onClose: () => {
|
|
12673
13182
|
closeMenu();
|
|
12674
13183
|
setIsFocused(false);
|
|
@@ -12677,7 +13186,7 @@ function DashboardMultiSelectInternal({
|
|
|
12677
13186
|
className: dropdownClassName,
|
|
12678
13187
|
drawerClassName,
|
|
12679
13188
|
children: [
|
|
12680
|
-
|
|
13189
|
+
isMobile3 && /* @__PURE__ */ jsx152("div", { className: "border-b border-[#f2f4f8] px-4 pb-2 pt-3", children: /* @__PURE__ */ jsx152(
|
|
12681
13190
|
"input",
|
|
12682
13191
|
{
|
|
12683
13192
|
ref: mobileSearchInputRef,
|
|
@@ -12692,7 +13201,7 @@ function DashboardMultiSelectInternal({
|
|
|
12692
13201
|
className: "m-0 box-border h-9 w-full rounded-md border border-[var(--chekin-color-gray-3)] bg-white px-3 text-[16px] font-medium text-[var(--chekin-color-brand-navy)] outline-none transition-colors placeholder:text-[var(--chekin-color-gray-1)] focus:border-[var(--chekin-color-brand-blue)]"
|
|
12693
13202
|
}
|
|
12694
13203
|
) }),
|
|
12695
|
-
/* @__PURE__ */
|
|
13204
|
+
/* @__PURE__ */ jsx152(
|
|
12696
13205
|
SelectMenu,
|
|
12697
13206
|
{
|
|
12698
13207
|
id: listboxId,
|
|
@@ -12714,7 +13223,7 @@ function DashboardMultiSelectInternal({
|
|
|
12714
13223
|
isMulti: true
|
|
12715
13224
|
}
|
|
12716
13225
|
),
|
|
12717
|
-
canCreateNewOption && /* @__PURE__ */
|
|
13226
|
+
canCreateNewOption && /* @__PURE__ */ jsx152(
|
|
12718
13227
|
"button",
|
|
12719
13228
|
{
|
|
12720
13229
|
type: "button",
|
|
@@ -12736,20 +13245,20 @@ var DashboardMultiSelect = React49.forwardRef(
|
|
|
12736
13245
|
|
|
12737
13246
|
// src/dashboard/creatable-multi-select/CreatableMultiSelect.tsx
|
|
12738
13247
|
import * as React50 from "react";
|
|
12739
|
-
import { jsx as
|
|
13248
|
+
import { jsx as jsx153 } from "react/jsx-runtime";
|
|
12740
13249
|
var DashboardCreatableMultiSelect = React50.forwardRef(
|
|
12741
13250
|
function DashboardCreatableMultiSelect2(props, ref) {
|
|
12742
|
-
return /* @__PURE__ */
|
|
13251
|
+
return /* @__PURE__ */ jsx153(DashboardMultiSelect, { ref, ...props, isCreatable: true });
|
|
12743
13252
|
}
|
|
12744
13253
|
);
|
|
12745
13254
|
|
|
12746
13255
|
// src/dashboard/infinite-scroll-select/InfiniteScrollSelect.tsx
|
|
12747
13256
|
import * as React51 from "react";
|
|
12748
13257
|
import { useVirtualizer as useVirtualizer2 } from "@tanstack/react-virtual";
|
|
12749
|
-
import { useTranslation as
|
|
13258
|
+
import { useTranslation as useTranslation33 } from "react-i18next";
|
|
12750
13259
|
|
|
12751
13260
|
// src/dashboard/infinite-scroll-select/InfiniteScrollList.tsx
|
|
12752
|
-
import { jsx as
|
|
13261
|
+
import { jsx as jsx154, jsxs as jsxs99 } from "react/jsx-runtime";
|
|
12753
13262
|
function InfiniteScrollList({
|
|
12754
13263
|
scrollRef,
|
|
12755
13264
|
listboxId,
|
|
@@ -12770,13 +13279,13 @@ function InfiniteScrollList({
|
|
|
12770
13279
|
onHighlight
|
|
12771
13280
|
}) {
|
|
12772
13281
|
const virtualItems = virtualizer.getVirtualItems();
|
|
12773
|
-
return /* @__PURE__ */
|
|
13282
|
+
return /* @__PURE__ */ jsx154(
|
|
12774
13283
|
"div",
|
|
12775
13284
|
{
|
|
12776
13285
|
ref: scrollRef,
|
|
12777
13286
|
className: cn("overflow-y-auto", menuClassName),
|
|
12778
13287
|
style: { height: `${height}px` },
|
|
12779
|
-
children: /* @__PURE__ */
|
|
13288
|
+
children: /* @__PURE__ */ jsx154(
|
|
12780
13289
|
"div",
|
|
12781
13290
|
{
|
|
12782
13291
|
id: listboxId,
|
|
@@ -12793,7 +13302,7 @@ function InfiniteScrollList({
|
|
|
12793
13302
|
const isSelected = !isLoaderRow && option ? option.value === value?.value : false;
|
|
12794
13303
|
const isHighlighted = virtualItem.index === highlightedIndex;
|
|
12795
13304
|
const isOptionDisabled = Boolean(isBlocked || option?.isDisabled);
|
|
12796
|
-
return /* @__PURE__ */
|
|
13305
|
+
return /* @__PURE__ */ jsx154(
|
|
12797
13306
|
"div",
|
|
12798
13307
|
{
|
|
12799
13308
|
"data-index": virtualItem.index,
|
|
@@ -12802,10 +13311,10 @@ function InfiniteScrollList({
|
|
|
12802
13311
|
height: `${virtualItem.size}px`,
|
|
12803
13312
|
transform: `translateY(${virtualItem.start}px)`
|
|
12804
13313
|
},
|
|
12805
|
-
children: isLoaderRow ? /* @__PURE__ */
|
|
12806
|
-
/* @__PURE__ */
|
|
12807
|
-
/* @__PURE__ */
|
|
12808
|
-
] }) : /* @__PURE__ */
|
|
13314
|
+
children: isLoaderRow ? /* @__PURE__ */ jsxs99("div", { className: "flex h-full items-center justify-center gap-2 px-4 text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: [
|
|
13315
|
+
/* @__PURE__ */ jsx154(ThreeDotsLoader, { height: 36, width: 36 }),
|
|
13316
|
+
/* @__PURE__ */ jsx154("span", { children: loadingMoreText })
|
|
13317
|
+
] }) : /* @__PURE__ */ jsxs99(
|
|
12809
13318
|
"button",
|
|
12810
13319
|
{
|
|
12811
13320
|
id: getOptionId2(virtualItem.index),
|
|
@@ -12824,8 +13333,8 @@ function InfiniteScrollList({
|
|
|
12824
13333
|
isOptionDisabled && "cursor-default opacity-30"
|
|
12825
13334
|
),
|
|
12826
13335
|
children: [
|
|
12827
|
-
/* @__PURE__ */
|
|
12828
|
-
option?.description && /* @__PURE__ */
|
|
13336
|
+
/* @__PURE__ */ jsx154("span", { className: "block break-words", children: option?.label }),
|
|
13337
|
+
option?.description && /* @__PURE__ */ jsx154("span", { className: "ml-2 mt-[3px] shrink-0 text-[12px] font-bold italic text-[#777e91]", children: option.description })
|
|
12829
13338
|
]
|
|
12830
13339
|
}
|
|
12831
13340
|
)
|
|
@@ -12840,7 +13349,7 @@ function InfiniteScrollList({
|
|
|
12840
13349
|
}
|
|
12841
13350
|
|
|
12842
13351
|
// src/dashboard/infinite-scroll-select/InfiniteScrollSelect.tsx
|
|
12843
|
-
import { jsx as
|
|
13352
|
+
import { jsx as jsx155, jsxs as jsxs100 } from "react/jsx-runtime";
|
|
12844
13353
|
var DEFAULT_ITEM_HEIGHT = 60;
|
|
12845
13354
|
var DEFAULT_LIST_HEIGHT = 322;
|
|
12846
13355
|
var DEFAULT_OVERSCAN = 5;
|
|
@@ -12888,8 +13397,8 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
12888
13397
|
const previousHighlightedIndexRef = React51.useRef(-1);
|
|
12889
13398
|
const lastLoadMoreOptionsLengthRef = React51.useRef(null);
|
|
12890
13399
|
const [highlightedIndex, setHighlightedIndex] = React51.useState(-1);
|
|
12891
|
-
const
|
|
12892
|
-
const { t } =
|
|
13400
|
+
const isMobile3 = useIsMobile();
|
|
13401
|
+
const { t } = useTranslation33();
|
|
12893
13402
|
const resolvedSearchPlaceholder = searchPlaceholder ?? t("search_placeholder");
|
|
12894
13403
|
const resolvedLoadingMoreText = loadingMoreText ?? t("loading_more");
|
|
12895
13404
|
const hasValue = Boolean(value);
|
|
@@ -12900,7 +13409,7 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
12900
13409
|
const valueLabel = value ? getValueLabel?.(value) ?? String(value.label) : void 0;
|
|
12901
13410
|
const { containerRef, isOpen, closeMenu, toggleMenu, setIsOpen } = useSelectMenuState({
|
|
12902
13411
|
isBlocked,
|
|
12903
|
-
isMobile:
|
|
13412
|
+
isMobile: isMobile3
|
|
12904
13413
|
});
|
|
12905
13414
|
const { triggerId, labelId, valueId, listboxId, describedErrorId, errorId, getOptionId: getOptionId2 } = useSelectIds({ name, hasValue, error, hideErrorMessage });
|
|
12906
13415
|
const { searchValue, setSearchValue, filteredOptions } = useSelectSearch({
|
|
@@ -13013,7 +13522,7 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
13013
13522
|
const totalSize = virtualizer.getTotalSize();
|
|
13014
13523
|
const measuredListHeight = Math.min(listHeight, Math.max(totalSize, itemHeight));
|
|
13015
13524
|
const activeOptionId = highlightedIndex >= 0 ? getOptionId2(highlightedIndex) : void 0;
|
|
13016
|
-
return /* @__PURE__ */
|
|
13525
|
+
return /* @__PURE__ */ jsxs100(
|
|
13017
13526
|
SelectFieldShell,
|
|
13018
13527
|
{
|
|
13019
13528
|
containerRef,
|
|
@@ -13031,7 +13540,7 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
13031
13540
|
name,
|
|
13032
13541
|
hiddenValue: value ? String(value.value) : "",
|
|
13033
13542
|
children: [
|
|
13034
|
-
/* @__PURE__ */
|
|
13543
|
+
/* @__PURE__ */ jsx155(
|
|
13035
13544
|
SelectTrigger,
|
|
13036
13545
|
{
|
|
13037
13546
|
triggerRef,
|
|
@@ -13053,7 +13562,7 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
13053
13562
|
onBlur
|
|
13054
13563
|
}
|
|
13055
13564
|
),
|
|
13056
|
-
/* @__PURE__ */
|
|
13565
|
+
/* @__PURE__ */ jsx155(
|
|
13057
13566
|
Fieldset,
|
|
13058
13567
|
{
|
|
13059
13568
|
isFocused: isOpen,
|
|
@@ -13070,17 +13579,17 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
13070
13579
|
onClick: !isBlocked ? toggleMenu : void 0
|
|
13071
13580
|
}
|
|
13072
13581
|
),
|
|
13073
|
-
/* @__PURE__ */
|
|
13582
|
+
/* @__PURE__ */ jsxs100(
|
|
13074
13583
|
SelectMenuPanel,
|
|
13075
13584
|
{
|
|
13076
13585
|
isOpen,
|
|
13077
|
-
isMobile:
|
|
13586
|
+
isMobile: isMobile3,
|
|
13078
13587
|
onClose: closeMenu,
|
|
13079
13588
|
title: typeof label === "string" ? label : void 0,
|
|
13080
13589
|
className: dropdownClassName,
|
|
13081
13590
|
drawerClassName,
|
|
13082
13591
|
children: [
|
|
13083
|
-
searchable && /* @__PURE__ */
|
|
13592
|
+
searchable && /* @__PURE__ */ jsx155(
|
|
13084
13593
|
SelectSearchInput,
|
|
13085
13594
|
{
|
|
13086
13595
|
inputRef: searchInputRef,
|
|
@@ -13092,10 +13601,10 @@ function DashboardInfiniteScrollSelectInternal({
|
|
|
13092
13601
|
onKeyDown: handleSearchKeyDown
|
|
13093
13602
|
}
|
|
13094
13603
|
),
|
|
13095
|
-
filteredOptions.length === 0 && isLoadingMore ? /* @__PURE__ */
|
|
13096
|
-
/* @__PURE__ */
|
|
13097
|
-
/* @__PURE__ */
|
|
13098
|
-
] }) : filteredOptions.length === 0 ? /* @__PURE__ */
|
|
13604
|
+
filteredOptions.length === 0 && isLoadingMore ? /* @__PURE__ */ jsxs100("div", { className: "flex items-center justify-center gap-2 px-4 py-[20px] text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: [
|
|
13605
|
+
/* @__PURE__ */ jsx155(ThreeDotsLoader, { height: 18, width: 18 }),
|
|
13606
|
+
/* @__PURE__ */ jsx155("span", { children: resolvedLoadingMoreText })
|
|
13607
|
+
] }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx155("div", { className: "px-4 py-[20px] text-left text-[16px] text-[var(--chekin-color-brand-navy)]", children: emptyMessage ?? t("no_options") }) : /* @__PURE__ */ jsx155(
|
|
13099
13608
|
InfiniteScrollList,
|
|
13100
13609
|
{
|
|
13101
13610
|
scrollRef,
|
|
@@ -13130,8 +13639,8 @@ var DashboardInfiniteScrollSelect = React51.forwardRef(
|
|
|
13130
13639
|
|
|
13131
13640
|
// src/dashboard/textarea/Textarea.tsx
|
|
13132
13641
|
import * as React52 from "react";
|
|
13133
|
-
import { useTranslation as
|
|
13134
|
-
import { jsx as
|
|
13642
|
+
import { useTranslation as useTranslation34 } from "react-i18next";
|
|
13643
|
+
import { jsx as jsx156, jsxs as jsxs101 } from "react/jsx-runtime";
|
|
13135
13644
|
var LINE_HEIGHT = 20;
|
|
13136
13645
|
var VERTICAL_PADDING = 32;
|
|
13137
13646
|
function getEmptyState(empty, value, defaultValue) {
|
|
@@ -13167,7 +13676,7 @@ var DashboardTextarea = React52.forwardRef(
|
|
|
13167
13676
|
const combinedRef = useCombinedRef(ref, innerRef);
|
|
13168
13677
|
const reactId = React52.useId();
|
|
13169
13678
|
const textareaId = id ?? name ?? `dash-textarea-${reactId}`;
|
|
13170
|
-
const { t } =
|
|
13679
|
+
const { t } = useTranslation34();
|
|
13171
13680
|
const isInvalid = Boolean(invalid || error);
|
|
13172
13681
|
const isEmpty = getEmptyState(empty, value, defaultValue);
|
|
13173
13682
|
const isBlocked = Boolean(disabled);
|
|
@@ -13188,7 +13697,7 @@ var DashboardTextarea = React52.forwardRef(
|
|
|
13188
13697
|
resize();
|
|
13189
13698
|
onInput?.(event);
|
|
13190
13699
|
};
|
|
13191
|
-
return /* @__PURE__ */
|
|
13700
|
+
return /* @__PURE__ */ jsxs101(
|
|
13192
13701
|
"div",
|
|
13193
13702
|
{
|
|
13194
13703
|
className: cn(
|
|
@@ -13198,18 +13707,18 @@ var DashboardTextarea = React52.forwardRef(
|
|
|
13198
13707
|
className
|
|
13199
13708
|
),
|
|
13200
13709
|
children: [
|
|
13201
|
-
label && /* @__PURE__ */
|
|
13710
|
+
label && /* @__PURE__ */ jsxs101(
|
|
13202
13711
|
"label",
|
|
13203
13712
|
{
|
|
13204
13713
|
htmlFor: textareaId,
|
|
13205
13714
|
className: "mb-2 flex select-none items-center text-[16px] font-medium text-[var(--chekin-color-brand-navy)]",
|
|
13206
13715
|
children: [
|
|
13207
13716
|
label,
|
|
13208
|
-
tooltip && /* @__PURE__ */
|
|
13717
|
+
tooltip && /* @__PURE__ */ jsx156("span", { className: "ml-1 inline-flex", children: /* @__PURE__ */ jsx156(HelpTooltip, { content: tooltip, size: 16 }) })
|
|
13209
13718
|
]
|
|
13210
13719
|
}
|
|
13211
13720
|
),
|
|
13212
|
-
/* @__PURE__ */
|
|
13721
|
+
/* @__PURE__ */ jsx156(
|
|
13213
13722
|
"textarea",
|
|
13214
13723
|
{
|
|
13215
13724
|
ref: combinedRef,
|
|
@@ -13238,7 +13747,7 @@ var DashboardTextarea = React52.forwardRef(
|
|
|
13238
13747
|
...textareaProps
|
|
13239
13748
|
}
|
|
13240
13749
|
),
|
|
13241
|
-
error && /* @__PURE__ */
|
|
13750
|
+
error && /* @__PURE__ */ jsx156(
|
|
13242
13751
|
FieldErrorMessage,
|
|
13243
13752
|
{
|
|
13244
13753
|
id: `${textareaId}-error`,
|
|
@@ -13246,8 +13755,8 @@ var DashboardTextarea = React52.forwardRef(
|
|
|
13246
13755
|
className: "mt-[1px] text-[14px]"
|
|
13247
13756
|
}
|
|
13248
13757
|
),
|
|
13249
|
-
!error && optional && /* @__PURE__ */
|
|
13250
|
-
!error && helperText && /* @__PURE__ */
|
|
13758
|
+
!error && optional && /* @__PURE__ */ jsx156("span", { className: "mt-[1px] block text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: typeof optional === "string" ? optional : t("optional") }),
|
|
13759
|
+
!error && helperText && /* @__PURE__ */ jsx156("span", { className: "mt-[1px] block text-[12px] font-normal text-[var(--chekin-color-gray-1)]", children: helperText })
|
|
13251
13760
|
]
|
|
13252
13761
|
}
|
|
13253
13762
|
);
|
|
@@ -13257,7 +13766,7 @@ var DashboardTextarea = React52.forwardRef(
|
|
|
13257
13766
|
// src/dashboard/datepicker/Datepicker.tsx
|
|
13258
13767
|
import * as React54 from "react";
|
|
13259
13768
|
import { ChevronDown as ChevronDown3 } from "lucide-react";
|
|
13260
|
-
import { useTranslation as
|
|
13769
|
+
import { useTranslation as useTranslation35 } from "react-i18next";
|
|
13261
13770
|
|
|
13262
13771
|
// src/airbnb-fields/datepicker/useDatePickerWheel.ts
|
|
13263
13772
|
import * as React53 from "react";
|
|
@@ -13681,7 +14190,7 @@ function useDatePickerWheel({
|
|
|
13681
14190
|
}
|
|
13682
14191
|
|
|
13683
14192
|
// src/airbnb-fields/datepicker/DatePickerWheelColumn.tsx
|
|
13684
|
-
import { jsx as
|
|
14193
|
+
import { jsx as jsx157, jsxs as jsxs102 } from "react/jsx-runtime";
|
|
13685
14194
|
var spacerHeight = DATE_PICKER_OPTION_HEIGHT * DATE_PICKER_WHEEL_BUFFER_OPTIONS;
|
|
13686
14195
|
function AirbnbDatePickerWheelColumn({
|
|
13687
14196
|
id,
|
|
@@ -13695,7 +14204,7 @@ function AirbnbDatePickerWheelColumn({
|
|
|
13695
14204
|
onOptionSelect,
|
|
13696
14205
|
column
|
|
13697
14206
|
}) {
|
|
13698
|
-
return /* @__PURE__ */
|
|
14207
|
+
return /* @__PURE__ */ jsx157("div", { className: "relative z-10 min-w-0", children: /* @__PURE__ */ jsxs102(
|
|
13699
14208
|
"div",
|
|
13700
14209
|
{
|
|
13701
14210
|
id,
|
|
@@ -13712,14 +14221,14 @@ function AirbnbDatePickerWheelColumn({
|
|
|
13712
14221
|
WebkitOverflowScrolling: "touch"
|
|
13713
14222
|
},
|
|
13714
14223
|
children: [
|
|
13715
|
-
/* @__PURE__ */
|
|
14224
|
+
/* @__PURE__ */ jsx157("div", { style: { height: `${spacerHeight}px` } }),
|
|
13716
14225
|
items.map((item, index) => {
|
|
13717
14226
|
const { style } = getWheelOptionStyles(
|
|
13718
14227
|
index,
|
|
13719
14228
|
scrollTop,
|
|
13720
14229
|
DATE_PICKER_OPTION_HEIGHT
|
|
13721
14230
|
);
|
|
13722
|
-
return /* @__PURE__ */
|
|
14231
|
+
return /* @__PURE__ */ jsx157(
|
|
13723
14232
|
"button",
|
|
13724
14233
|
{
|
|
13725
14234
|
id: `${id}-option-${index}`,
|
|
@@ -13735,14 +14244,14 @@ function AirbnbDatePickerWheelColumn({
|
|
|
13735
14244
|
`${column}-${item}-${index}`
|
|
13736
14245
|
);
|
|
13737
14246
|
}),
|
|
13738
|
-
/* @__PURE__ */
|
|
14247
|
+
/* @__PURE__ */ jsx157("div", { style: { height: `${spacerHeight}px` } })
|
|
13739
14248
|
]
|
|
13740
14249
|
}
|
|
13741
14250
|
) });
|
|
13742
14251
|
}
|
|
13743
14252
|
|
|
13744
14253
|
// src/airbnb-fields/datepicker/DatePickerContent.tsx
|
|
13745
|
-
import { jsx as
|
|
14254
|
+
import { jsx as jsx158, jsxs as jsxs103 } from "react/jsx-runtime";
|
|
13746
14255
|
function AirbnbDatePickerBody({
|
|
13747
14256
|
baseId,
|
|
13748
14257
|
label,
|
|
@@ -13764,19 +14273,19 @@ function AirbnbDatePickerBody({
|
|
|
13764
14273
|
onOptionSelect,
|
|
13765
14274
|
onDone
|
|
13766
14275
|
}) {
|
|
13767
|
-
return /* @__PURE__ */
|
|
13768
|
-
/* @__PURE__ */
|
|
13769
|
-
/* @__PURE__ */
|
|
13770
|
-
/* @__PURE__ */
|
|
13771
|
-
/* @__PURE__ */
|
|
14276
|
+
return /* @__PURE__ */ jsxs103("div", { className: "px-6 pb-4 pt-1 bg-white", children: [
|
|
14277
|
+
/* @__PURE__ */ jsxs103("div", { className: "relative overflow-hidden rounded-[24px]", children: [
|
|
14278
|
+
/* @__PURE__ */ jsx158("div", { className: "pointer-events-none absolute inset-x-0 top-0 z-20 h-16 bg-gradient-to-b from-white via-white/80 to-transparent" }),
|
|
14279
|
+
/* @__PURE__ */ jsx158("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 z-20 h-16 bg-gradient-to-t from-white via-white/80 to-transparent" }),
|
|
14280
|
+
/* @__PURE__ */ jsx158(
|
|
13772
14281
|
"div",
|
|
13773
14282
|
{
|
|
13774
14283
|
"aria-hidden": true,
|
|
13775
14284
|
className: "pointer-events-none absolute inset-x-0 top-1/2 z-0 h-8 -translate-y-1/2 rounded-[12px] bg-black/[0.04]"
|
|
13776
14285
|
}
|
|
13777
14286
|
),
|
|
13778
|
-
/* @__PURE__ */
|
|
13779
|
-
/* @__PURE__ */
|
|
14287
|
+
/* @__PURE__ */ jsxs103("div", { className: "relative grid grid-cols-[1.35fr_0.7fr_1fr] gap-1", children: [
|
|
14288
|
+
/* @__PURE__ */ jsx158(
|
|
13780
14289
|
AirbnbDatePickerWheelColumn,
|
|
13781
14290
|
{
|
|
13782
14291
|
id: `${baseId}-month`,
|
|
@@ -13791,7 +14300,7 @@ function AirbnbDatePickerBody({
|
|
|
13791
14300
|
onOptionSelect
|
|
13792
14301
|
}
|
|
13793
14302
|
),
|
|
13794
|
-
/* @__PURE__ */
|
|
14303
|
+
/* @__PURE__ */ jsx158(
|
|
13795
14304
|
AirbnbDatePickerWheelColumn,
|
|
13796
14305
|
{
|
|
13797
14306
|
id: `${baseId}-day`,
|
|
@@ -13806,7 +14315,7 @@ function AirbnbDatePickerBody({
|
|
|
13806
14315
|
onOptionSelect
|
|
13807
14316
|
}
|
|
13808
14317
|
),
|
|
13809
|
-
/* @__PURE__ */
|
|
14318
|
+
/* @__PURE__ */ jsx158(
|
|
13810
14319
|
AirbnbDatePickerWheelColumn,
|
|
13811
14320
|
{
|
|
13812
14321
|
id: `${baseId}-year`,
|
|
@@ -13823,13 +14332,13 @@ function AirbnbDatePickerBody({
|
|
|
13823
14332
|
)
|
|
13824
14333
|
] })
|
|
13825
14334
|
] }),
|
|
13826
|
-
/* @__PURE__ */
|
|
14335
|
+
/* @__PURE__ */ jsx158(Button, { type: "button", onClick: onDone, className: "mt-4 h-12 mb-8 w-full", children: doneLabel })
|
|
13827
14336
|
] });
|
|
13828
14337
|
}
|
|
13829
14338
|
function AirbnbDatePickerContent({
|
|
13830
14339
|
baseId,
|
|
13831
14340
|
open,
|
|
13832
|
-
isMobile:
|
|
14341
|
+
isMobile: isMobile3,
|
|
13833
14342
|
label,
|
|
13834
14343
|
title,
|
|
13835
14344
|
doneLabel,
|
|
@@ -13851,7 +14360,7 @@ function AirbnbDatePickerContent({
|
|
|
13851
14360
|
onColumnKeyDown,
|
|
13852
14361
|
onOptionSelect
|
|
13853
14362
|
}) {
|
|
13854
|
-
const body = /* @__PURE__ */
|
|
14363
|
+
const body = /* @__PURE__ */ jsx158(
|
|
13855
14364
|
AirbnbDatePickerBody,
|
|
13856
14365
|
{
|
|
13857
14366
|
baseId,
|
|
@@ -13875,28 +14384,28 @@ function AirbnbDatePickerContent({
|
|
|
13875
14384
|
onDone
|
|
13876
14385
|
}
|
|
13877
14386
|
);
|
|
13878
|
-
if (
|
|
13879
|
-
return /* @__PURE__ */
|
|
14387
|
+
if (isMobile3) {
|
|
14388
|
+
return /* @__PURE__ */ jsx158(Drawer, { open, onOpenChange, children: /* @__PURE__ */ jsxs103(
|
|
13880
14389
|
DrawerContent,
|
|
13881
14390
|
{
|
|
13882
14391
|
onClose: () => onOpenChange(false),
|
|
13883
14392
|
className: "rounded-none rounded-t-[32px] border-0 p-0",
|
|
13884
14393
|
children: [
|
|
13885
|
-
/* @__PURE__ */
|
|
13886
|
-
/* @__PURE__ */
|
|
14394
|
+
/* @__PURE__ */ jsx158(DrawerTitle, { className: "sr-only", children: title }),
|
|
14395
|
+
/* @__PURE__ */ jsx158(DrawerDescription, { className: "sr-only", children: label }),
|
|
13887
14396
|
body
|
|
13888
14397
|
]
|
|
13889
14398
|
}
|
|
13890
14399
|
) });
|
|
13891
14400
|
}
|
|
13892
|
-
return /* @__PURE__ */
|
|
14401
|
+
return /* @__PURE__ */ jsx158(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs103(
|
|
13893
14402
|
DialogContent,
|
|
13894
14403
|
{
|
|
13895
14404
|
className: "max-w-[520px] rounded-[28px] border-0 p-0 shadow-xl",
|
|
13896
14405
|
showCloseButton: false,
|
|
13897
14406
|
children: [
|
|
13898
|
-
/* @__PURE__ */
|
|
13899
|
-
/* @__PURE__ */
|
|
14407
|
+
/* @__PURE__ */ jsx158(DialogTitle, { className: "sr-only", children: title }),
|
|
14408
|
+
/* @__PURE__ */ jsx158(DialogDescription, { className: "sr-only", children: label }),
|
|
13900
14409
|
body
|
|
13901
14410
|
]
|
|
13902
14411
|
}
|
|
@@ -13904,7 +14413,7 @@ function AirbnbDatePickerContent({
|
|
|
13904
14413
|
}
|
|
13905
14414
|
|
|
13906
14415
|
// src/dashboard/datepicker/Datepicker.tsx
|
|
13907
|
-
import { jsx as
|
|
14416
|
+
import { jsx as jsx159, jsxs as jsxs104 } from "react/jsx-runtime";
|
|
13908
14417
|
var MONTHS_IN_YEAR2 = 12;
|
|
13909
14418
|
function getMonthLabels2(locale) {
|
|
13910
14419
|
const formatter = new Intl.DateTimeFormat(locale, { month: "long" });
|
|
@@ -13981,7 +14490,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
13981
14490
|
const yearId = `${baseId}-year`;
|
|
13982
14491
|
const labelId = `${baseId}-label`;
|
|
13983
14492
|
const errorId = `${baseId}-error`;
|
|
13984
|
-
const { t } =
|
|
14493
|
+
const { t } = useTranslation35();
|
|
13985
14494
|
const resolvedMonthLabels = React54.useMemo(
|
|
13986
14495
|
() => monthLabels ?? getMonthLabels2(locale),
|
|
13987
14496
|
[locale, monthLabels]
|
|
@@ -14004,7 +14513,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14004
14513
|
const [focusedField, setFocusedField] = React54.useState(null);
|
|
14005
14514
|
const [monthInputValue, setMonthInputValue] = React54.useState("");
|
|
14006
14515
|
const [monthHighlightIndex, setMonthHighlightIndex] = React54.useState(-1);
|
|
14007
|
-
const
|
|
14516
|
+
const isMobile3 = useIsMobile();
|
|
14008
14517
|
React54.useImperativeHandle(ref, () => dayInputRef.current, []);
|
|
14009
14518
|
React54.useEffect(() => {
|
|
14010
14519
|
if (!isControlled) return;
|
|
@@ -14054,7 +14563,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14054
14563
|
useOutsideClick({
|
|
14055
14564
|
elementRef: containerRef,
|
|
14056
14565
|
onOutsideClick: () => setIsMonthOpen(false),
|
|
14057
|
-
isDisabled: !isMonthOpen ||
|
|
14566
|
+
isDisabled: !isMonthOpen || isMobile3
|
|
14058
14567
|
});
|
|
14059
14568
|
const emitChange = React54.useCallback(
|
|
14060
14569
|
(nextDay, nextMonth, nextYear) => {
|
|
@@ -14163,8 +14672,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14163
14672
|
setIsWheelOpen(false);
|
|
14164
14673
|
mobileTriggerRef.current?.focus();
|
|
14165
14674
|
}, []);
|
|
14166
|
-
const
|
|
14167
|
-
const showCoverage = isEmpty && !isFocused && !isMobile2;
|
|
14675
|
+
const showCoverage = isEmpty && !isFocused && !isMobile3;
|
|
14168
14676
|
const wheel = useDatePickerWheel({
|
|
14169
14677
|
isOpen: isWheelOpen,
|
|
14170
14678
|
value: currentDate,
|
|
@@ -14188,7 +14696,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14188
14696
|
const triggerText = currentDate ? (formatValue ?? defaultFormatValue)(currentDate) : void 0;
|
|
14189
14697
|
const monthListboxId = `${monthId}-listbox`;
|
|
14190
14698
|
const getMonthOptionId = (index) => `${monthId}-option-${index}`;
|
|
14191
|
-
const monthPanelContent = filteredMonths.length === 0 ? /* @__PURE__ */
|
|
14699
|
+
const monthPanelContent = filteredMonths.length === 0 ? /* @__PURE__ */ jsx159("div", { className: "px-4 py-3 text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: t("no_options") }) : /* @__PURE__ */ jsx159(
|
|
14192
14700
|
"ul",
|
|
14193
14701
|
{
|
|
14194
14702
|
ref: monthListRef,
|
|
@@ -14199,7 +14707,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14199
14707
|
children: filteredMonths.map((option, position) => {
|
|
14200
14708
|
const isSelected = option.index === monthIndex;
|
|
14201
14709
|
const isHighlighted = position === monthHighlightIndex;
|
|
14202
|
-
return /* @__PURE__ */
|
|
14710
|
+
return /* @__PURE__ */ jsx159("li", { role: "presentation", children: /* @__PURE__ */ jsx159(
|
|
14203
14711
|
"button",
|
|
14204
14712
|
{
|
|
14205
14713
|
id: getMonthOptionId(option.index),
|
|
@@ -14226,7 +14734,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14226
14734
|
isBlocked && "cursor-not-allowed",
|
|
14227
14735
|
loading && "cursor-progress"
|
|
14228
14736
|
);
|
|
14229
|
-
return /* @__PURE__ */
|
|
14737
|
+
return /* @__PURE__ */ jsx159(
|
|
14230
14738
|
"div",
|
|
14231
14739
|
{
|
|
14232
14740
|
ref: containerRef,
|
|
@@ -14237,9 +14745,9 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14237
14745
|
className
|
|
14238
14746
|
),
|
|
14239
14747
|
style: wrapperWidth ? { width: wrapperWidth } : void 0,
|
|
14240
|
-
children: /* @__PURE__ */
|
|
14241
|
-
/* @__PURE__ */
|
|
14242
|
-
|
|
14748
|
+
children: /* @__PURE__ */ jsxs104("div", { className: "relative min-h-[68px] w-full", children: [
|
|
14749
|
+
/* @__PURE__ */ jsxs104("div", { className: "relative w-full", children: [
|
|
14750
|
+
isMobile3 ? /* @__PURE__ */ jsxs104(
|
|
14243
14751
|
"button",
|
|
14244
14752
|
{
|
|
14245
14753
|
ref: mobileTriggerRef,
|
|
@@ -14258,10 +14766,10 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14258
14766
|
(isBlocked || readOnly) && "cursor-not-allowed"
|
|
14259
14767
|
),
|
|
14260
14768
|
children: [
|
|
14261
|
-
/* @__PURE__ */
|
|
14262
|
-
/* @__PURE__ */
|
|
14263
|
-
loading && /* @__PURE__ */
|
|
14264
|
-
/* @__PURE__ */
|
|
14769
|
+
/* @__PURE__ */ jsx159("span", { className: "block min-w-0 flex-1 truncate text-left", children: triggerText ?? (isWheelOpen ? mobilePlaceholder : null) }),
|
|
14770
|
+
/* @__PURE__ */ jsxs104("span", { className: "pointer-events-none flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: [
|
|
14771
|
+
loading && /* @__PURE__ */ jsx159(ThreeDotsLoader, { height: 18, width: 18 }),
|
|
14772
|
+
/* @__PURE__ */ jsx159(
|
|
14265
14773
|
ChevronDown3,
|
|
14266
14774
|
{
|
|
14267
14775
|
size: 16,
|
|
@@ -14274,14 +14782,14 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14274
14782
|
] })
|
|
14275
14783
|
]
|
|
14276
14784
|
}
|
|
14277
|
-
) : /* @__PURE__ */
|
|
14785
|
+
) : /* @__PURE__ */ jsxs104(
|
|
14278
14786
|
"div",
|
|
14279
14787
|
{
|
|
14280
14788
|
className: cn(
|
|
14281
14789
|
"relative box-border grid h-12 w-full grid-cols-[minmax(0,1fr)_minmax(96px,140px)_minmax(0,1fr)] items-center rounded-[6px] text-[16px] font-medium text-[var(--chekin-color-brand-navy)]"
|
|
14282
14790
|
),
|
|
14283
14791
|
children: [
|
|
14284
|
-
/* @__PURE__ */
|
|
14792
|
+
/* @__PURE__ */ jsx159("div", { className: "flex h-full min-w-0 items-center px-2 sm:px-4", children: /* @__PURE__ */ jsx159(
|
|
14285
14793
|
"input",
|
|
14286
14794
|
{
|
|
14287
14795
|
ref: dayInputRef,
|
|
@@ -14303,8 +14811,8 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14303
14811
|
className: subInputClass
|
|
14304
14812
|
}
|
|
14305
14813
|
) }),
|
|
14306
|
-
/* @__PURE__ */
|
|
14307
|
-
/* @__PURE__ */
|
|
14814
|
+
/* @__PURE__ */ jsxs104("div", { className: "relative flex h-full min-w-0 items-center gap-1 border-x border-[var(--chekin-color-gray-3)] px-2 sm:px-3", children: [
|
|
14815
|
+
/* @__PURE__ */ jsx159(
|
|
14308
14816
|
"input",
|
|
14309
14817
|
{
|
|
14310
14818
|
ref: monthInputRef,
|
|
@@ -14347,7 +14855,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14347
14855
|
)
|
|
14348
14856
|
}
|
|
14349
14857
|
),
|
|
14350
|
-
/* @__PURE__ */
|
|
14858
|
+
/* @__PURE__ */ jsx159(
|
|
14351
14859
|
ChevronDown3,
|
|
14352
14860
|
{
|
|
14353
14861
|
size: 14,
|
|
@@ -14364,8 +14872,8 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14364
14872
|
}
|
|
14365
14873
|
)
|
|
14366
14874
|
] }),
|
|
14367
|
-
/* @__PURE__ */
|
|
14368
|
-
/* @__PURE__ */
|
|
14875
|
+
/* @__PURE__ */ jsxs104("div", { className: "flex h-full min-w-0 items-center px-2 sm:px-4", children: [
|
|
14876
|
+
/* @__PURE__ */ jsx159(
|
|
14369
14877
|
"input",
|
|
14370
14878
|
{
|
|
14371
14879
|
ref: yearInputRef,
|
|
@@ -14387,7 +14895,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14387
14895
|
className: subInputClass
|
|
14388
14896
|
}
|
|
14389
14897
|
),
|
|
14390
|
-
loading && /* @__PURE__ */
|
|
14898
|
+
loading && /* @__PURE__ */ jsx159(
|
|
14391
14899
|
ThreeDotsLoader,
|
|
14392
14900
|
{
|
|
14393
14901
|
height: 18,
|
|
@@ -14399,7 +14907,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14399
14907
|
]
|
|
14400
14908
|
}
|
|
14401
14909
|
),
|
|
14402
|
-
showCoverage && /* @__PURE__ */
|
|
14910
|
+
showCoverage && /* @__PURE__ */ jsx159(
|
|
14403
14911
|
"div",
|
|
14404
14912
|
{
|
|
14405
14913
|
className: "absolute inset-0 cursor-text rounded-[6px] bg-[var(--chekin-color-surface-input-empty)]",
|
|
@@ -14407,7 +14915,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14407
14915
|
"aria-hidden": "true"
|
|
14408
14916
|
}
|
|
14409
14917
|
),
|
|
14410
|
-
/* @__PURE__ */
|
|
14918
|
+
/* @__PURE__ */ jsx159(
|
|
14411
14919
|
Fieldset,
|
|
14412
14920
|
{
|
|
14413
14921
|
isFocused,
|
|
@@ -14422,12 +14930,12 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14422
14930
|
legend: label,
|
|
14423
14931
|
label,
|
|
14424
14932
|
tooltip,
|
|
14425
|
-
onClick:
|
|
14933
|
+
onClick: isMobile3 ? openWheel : showCoverage ? focusDayInput : void 0
|
|
14426
14934
|
}
|
|
14427
14935
|
),
|
|
14428
|
-
isMonthOpen && !
|
|
14936
|
+
isMonthOpen && !isMobile3 && /* @__PURE__ */ jsx159("div", { className: "absolute left-0 right-0 top-full z-30 mx-auto mt-1 w-full max-w-[260px] overflow-hidden rounded-md bg-white shadow-[0_30px_30px_0_rgba(33,72,255,0.2)] sm:left-1/2 sm:right-auto sm:-translate-x-1/2", children: monthPanelContent })
|
|
14429
14937
|
] }),
|
|
14430
|
-
|
|
14938
|
+
isMobile3 && /* @__PURE__ */ jsx159(
|
|
14431
14939
|
AirbnbDatePickerContent,
|
|
14432
14940
|
{
|
|
14433
14941
|
baseId: wheelBaseId,
|
|
@@ -14455,9 +14963,9 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14455
14963
|
onOptionSelect: wheel.handleOptionSelect
|
|
14456
14964
|
}
|
|
14457
14965
|
),
|
|
14458
|
-
!error && optional && /* @__PURE__ */
|
|
14459
|
-
!error && helperText && /* @__PURE__ */
|
|
14460
|
-
error && !hideErrorMessage && /* @__PURE__ */
|
|
14966
|
+
!error && optional && /* @__PURE__ */ jsx159("span", { className: "mt-[1px] block text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: typeof optional === "string" ? optional : t("optional") }),
|
|
14967
|
+
!error && helperText && /* @__PURE__ */ jsx159("span", { className: "mt-[1px] block text-[12px] font-normal text-[var(--chekin-color-gray-1)]", children: helperText }),
|
|
14968
|
+
error && !hideErrorMessage && /* @__PURE__ */ jsx159(
|
|
14461
14969
|
FieldErrorMessage,
|
|
14462
14970
|
{
|
|
14463
14971
|
id: errorId,
|
|
@@ -14473,7 +14981,7 @@ var DashboardDatepicker = React54.forwardRef(
|
|
|
14473
14981
|
|
|
14474
14982
|
// src/dashboard/date-range-picker/DateRangePicker.tsx
|
|
14475
14983
|
import * as React58 from "react";
|
|
14476
|
-
import { useTranslation as
|
|
14984
|
+
import { useTranslation as useTranslation36 } from "react-i18next";
|
|
14477
14985
|
|
|
14478
14986
|
// src/dashboard/date-range-picker/isDayBlocked.ts
|
|
14479
14987
|
import { differenceInDays, isAfter, isBefore, isSameDay } from "date-fns";
|
|
@@ -14616,7 +15124,7 @@ function useRangeTextInputs({
|
|
|
14616
15124
|
}
|
|
14617
15125
|
setFromText(value?.from ? format2(value.from) : "");
|
|
14618
15126
|
return void 0;
|
|
14619
|
-
}, [format2, fromText, onBlur, onCommit, parse3, value
|
|
15127
|
+
}, [format2, fromText, onBlur, onCommit, parse3, value]);
|
|
14620
15128
|
const handleToBlur = React56.useCallback(() => {
|
|
14621
15129
|
if (!toText) {
|
|
14622
15130
|
const next = { from: value?.from, to: void 0 };
|
|
@@ -14632,7 +15140,7 @@ function useRangeTextInputs({
|
|
|
14632
15140
|
return;
|
|
14633
15141
|
}
|
|
14634
15142
|
setToText(value?.to ? format2(value.to) : "");
|
|
14635
|
-
}, [format2, onBlur, onCommit, parse3, toText, value
|
|
15143
|
+
}, [format2, onBlur, onCommit, parse3, toText, value]);
|
|
14636
15144
|
return {
|
|
14637
15145
|
fromText,
|
|
14638
15146
|
toText,
|
|
@@ -14684,7 +15192,7 @@ function resolveRangeSelection({
|
|
|
14684
15192
|
|
|
14685
15193
|
// src/dashboard/date-range-picker/components/DateRangeInputs.tsx
|
|
14686
15194
|
import { CalendarDays, SquareX as SquareX4 } from "lucide-react";
|
|
14687
|
-
import { jsx as
|
|
15195
|
+
import { jsx as jsx160, jsxs as jsxs105 } from "react/jsx-runtime";
|
|
14688
15196
|
var DEFAULT_PLACEHOLDER = "00-00-0000";
|
|
14689
15197
|
var inputBaseClass = "m-0 box-border h-full w-full min-w-0 border-0 bg-transparent text-[16px] font-medium leading-5 text-[var(--chekin-color-brand-navy)] outline-none placeholder:text-[var(--chekin-color-gray-1)]";
|
|
14690
15198
|
var iconButtonClass = "flex h-5 w-5 items-center justify-center rounded-[3px] border-0 bg-transparent p-0 text-[#9696b9] outline-none hover:shadow-[0_3px_3px_#0f477734] disabled:cursor-not-allowed";
|
|
@@ -14726,7 +15234,7 @@ function DateRangeInputs({
|
|
|
14726
15234
|
isBlocked && "cursor-not-allowed",
|
|
14727
15235
|
loading && "cursor-progress"
|
|
14728
15236
|
);
|
|
14729
|
-
return /* @__PURE__ */
|
|
15237
|
+
return /* @__PURE__ */ jsxs105(
|
|
14730
15238
|
"div",
|
|
14731
15239
|
{
|
|
14732
15240
|
className: cn(
|
|
@@ -14735,7 +15243,7 @@ function DateRangeInputs({
|
|
|
14735
15243
|
),
|
|
14736
15244
|
onClick: onRowClick,
|
|
14737
15245
|
children: [
|
|
14738
|
-
/* @__PURE__ */
|
|
15246
|
+
/* @__PURE__ */ jsx160(
|
|
14739
15247
|
"input",
|
|
14740
15248
|
{
|
|
14741
15249
|
ref: fromInputRef,
|
|
@@ -14759,7 +15267,7 @@ function DateRangeInputs({
|
|
|
14759
15267
|
)
|
|
14760
15268
|
}
|
|
14761
15269
|
),
|
|
14762
|
-
/* @__PURE__ */
|
|
15270
|
+
/* @__PURE__ */ jsx160(
|
|
14763
15271
|
"span",
|
|
14764
15272
|
{
|
|
14765
15273
|
"aria-hidden": "true",
|
|
@@ -14770,7 +15278,7 @@ function DateRangeInputs({
|
|
|
14770
15278
|
children: "\u2192"
|
|
14771
15279
|
}
|
|
14772
15280
|
),
|
|
14773
|
-
/* @__PURE__ */
|
|
15281
|
+
/* @__PURE__ */ jsx160(
|
|
14774
15282
|
"input",
|
|
14775
15283
|
{
|
|
14776
15284
|
ref: toInputRef,
|
|
@@ -14794,9 +15302,9 @@ function DateRangeInputs({
|
|
|
14794
15302
|
)
|
|
14795
15303
|
}
|
|
14796
15304
|
),
|
|
14797
|
-
/* @__PURE__ */
|
|
14798
|
-
loading && /* @__PURE__ */
|
|
14799
|
-
!readOnly && !hideClearDates && !isEmpty && /* @__PURE__ */
|
|
15305
|
+
/* @__PURE__ */ jsxs105("span", { className: "ml-auto flex shrink-0 items-center gap-2 pl-2 text-[var(--chekin-color-gray-2)]", children: [
|
|
15306
|
+
loading && /* @__PURE__ */ jsx160(ThreeDotsLoader, { height: 18, width: 18 }),
|
|
15307
|
+
!readOnly && !hideClearDates && !isEmpty && /* @__PURE__ */ jsx160(
|
|
14800
15308
|
"button",
|
|
14801
15309
|
{
|
|
14802
15310
|
type: "button",
|
|
@@ -14804,10 +15312,10 @@ function DateRangeInputs({
|
|
|
14804
15312
|
onClick: onReset,
|
|
14805
15313
|
className: iconButtonClass,
|
|
14806
15314
|
"aria-label": clearLabel,
|
|
14807
|
-
children: /* @__PURE__ */
|
|
15315
|
+
children: /* @__PURE__ */ jsx160(SquareX4, { size: 16, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
14808
15316
|
}
|
|
14809
15317
|
),
|
|
14810
|
-
!readOnly && !hideCalendarIcon && /* @__PURE__ */
|
|
15318
|
+
!readOnly && !hideCalendarIcon && /* @__PURE__ */ jsx160(
|
|
14811
15319
|
"button",
|
|
14812
15320
|
{
|
|
14813
15321
|
type: "button",
|
|
@@ -14819,7 +15327,7 @@ function DateRangeInputs({
|
|
|
14819
15327
|
focusedInput !== null || isOpen ? "text-[var(--chekin-color-brand-blue)]" : "text-[var(--chekin-color-gray-2)]"
|
|
14820
15328
|
),
|
|
14821
15329
|
"aria-label": openCalendarLabel,
|
|
14822
|
-
children: /* @__PURE__ */
|
|
15330
|
+
children: /* @__PURE__ */ jsx160(CalendarDays, { size: 18 })
|
|
14823
15331
|
}
|
|
14824
15332
|
)
|
|
14825
15333
|
] })
|
|
@@ -14829,7 +15337,7 @@ function DateRangeInputs({
|
|
|
14829
15337
|
}
|
|
14830
15338
|
|
|
14831
15339
|
// src/dashboard/date-range-picker/components/DateRangeCalendar.tsx
|
|
14832
|
-
import { jsx as
|
|
15340
|
+
import { jsx as jsx161 } from "react/jsx-runtime";
|
|
14833
15341
|
function DateRangeCalendar({
|
|
14834
15342
|
value,
|
|
14835
15343
|
month,
|
|
@@ -14845,7 +15353,7 @@ function DateRangeCalendar({
|
|
|
14845
15353
|
components,
|
|
14846
15354
|
...dayPickerProps
|
|
14847
15355
|
}) {
|
|
14848
|
-
return /* @__PURE__ */
|
|
15356
|
+
return /* @__PURE__ */ jsx161(
|
|
14849
15357
|
Calendar,
|
|
14850
15358
|
{
|
|
14851
15359
|
mode: "range",
|
|
@@ -14868,10 +15376,10 @@ function DateRangeCalendar({
|
|
|
14868
15376
|
}
|
|
14869
15377
|
|
|
14870
15378
|
// src/dashboard/date-range-picker/components/DateRangePopover.tsx
|
|
14871
|
-
import { jsx as
|
|
15379
|
+
import { jsx as jsx162, jsxs as jsxs106 } from "react/jsx-runtime";
|
|
14872
15380
|
function DateRangePopover({
|
|
14873
15381
|
isOpen,
|
|
14874
|
-
isMobile:
|
|
15382
|
+
isMobile: isMobile3,
|
|
14875
15383
|
openDirection,
|
|
14876
15384
|
drawerTitle,
|
|
14877
15385
|
drawerDescription,
|
|
@@ -14879,31 +15387,31 @@ function DateRangePopover({
|
|
|
14879
15387
|
children
|
|
14880
15388
|
}) {
|
|
14881
15389
|
if (!isOpen) return null;
|
|
14882
|
-
if (
|
|
14883
|
-
return /* @__PURE__ */
|
|
15390
|
+
if (isMobile3) {
|
|
15391
|
+
return /* @__PURE__ */ jsx162(
|
|
14884
15392
|
Drawer,
|
|
14885
15393
|
{
|
|
14886
15394
|
open: isOpen,
|
|
14887
15395
|
onOpenChange: (next) => {
|
|
14888
15396
|
if (!next) onClose();
|
|
14889
15397
|
},
|
|
14890
|
-
children: /* @__PURE__ */
|
|
15398
|
+
children: /* @__PURE__ */ jsxs106(
|
|
14891
15399
|
DrawerContent,
|
|
14892
15400
|
{
|
|
14893
15401
|
onClose,
|
|
14894
15402
|
lockScroll: false,
|
|
14895
15403
|
className: "max-h-[calc(100vh-1rem)]",
|
|
14896
15404
|
children: [
|
|
14897
|
-
/* @__PURE__ */
|
|
14898
|
-
/* @__PURE__ */
|
|
14899
|
-
/* @__PURE__ */
|
|
15405
|
+
/* @__PURE__ */ jsx162(DrawerTitle, { className: "sr-only", children: drawerTitle }),
|
|
15406
|
+
/* @__PURE__ */ jsx162(DrawerDescription, { className: "sr-only", children: drawerDescription }),
|
|
15407
|
+
/* @__PURE__ */ jsx162("div", { className: "flex items-start justify-center overflow-x-auto px-2 pb-4 pt-1", children })
|
|
14900
15408
|
]
|
|
14901
15409
|
}
|
|
14902
15410
|
)
|
|
14903
15411
|
}
|
|
14904
15412
|
);
|
|
14905
15413
|
}
|
|
14906
|
-
return /* @__PURE__ */
|
|
15414
|
+
return /* @__PURE__ */ jsx162(
|
|
14907
15415
|
"div",
|
|
14908
15416
|
{
|
|
14909
15417
|
className: cn(
|
|
@@ -14916,7 +15424,7 @@ function DateRangePopover({
|
|
|
14916
15424
|
}
|
|
14917
15425
|
|
|
14918
15426
|
// src/dashboard/date-range-picker/DateRangePicker.tsx
|
|
14919
|
-
import { jsx as
|
|
15427
|
+
import { jsx as jsx163, jsxs as jsxs107 } from "react/jsx-runtime";
|
|
14920
15428
|
var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePicker2({
|
|
14921
15429
|
label,
|
|
14922
15430
|
value: externalValue,
|
|
@@ -14989,8 +15497,8 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
14989
15497
|
const [isOpen, setIsOpen] = React58.useState(false);
|
|
14990
15498
|
const [focusedInput, setFocusedInput] = React58.useState(null);
|
|
14991
15499
|
const [autoFocus, setAutoFocus] = React58.useState(false);
|
|
14992
|
-
const
|
|
14993
|
-
const { t } =
|
|
15500
|
+
const isMobile3 = useIsMobile();
|
|
15501
|
+
const { t } = useTranslation36();
|
|
14994
15502
|
const drawerTitle = label ?? t("select_dates");
|
|
14995
15503
|
const drawerDescription = label ?? t("pick_date_range");
|
|
14996
15504
|
const isEmpty = !value?.from && !value?.to;
|
|
@@ -14998,7 +15506,7 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
14998
15506
|
const isInvalid = Boolean(invalid || error);
|
|
14999
15507
|
const isFocused = focusedInput !== null || isOpen;
|
|
15000
15508
|
const wrapperWidth = toCssSize(width);
|
|
15001
|
-
const monthsToShow = numberOfMonths ?? (
|
|
15509
|
+
const monthsToShow = numberOfMonths ?? (isMobile3 ? 1 : 2);
|
|
15002
15510
|
const closeCalendar = React58.useCallback(() => {
|
|
15003
15511
|
setIsOpen(false);
|
|
15004
15512
|
setFocusedInput(null);
|
|
@@ -15012,7 +15520,7 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15012
15520
|
useOutsideClick({
|
|
15013
15521
|
elementRef: containerRef,
|
|
15014
15522
|
onOutsideClick: closeCalendar,
|
|
15015
|
-
isDisabled: !isOpen ||
|
|
15523
|
+
isDisabled: !isOpen || isMobile3
|
|
15016
15524
|
});
|
|
15017
15525
|
const handlePickerChange = React58.useCallback(
|
|
15018
15526
|
(range, pickedDate) => {
|
|
@@ -15077,7 +15585,7 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15077
15585
|
syncMonthToValue
|
|
15078
15586
|
]
|
|
15079
15587
|
);
|
|
15080
|
-
return /* @__PURE__ */
|
|
15588
|
+
return /* @__PURE__ */ jsx163(
|
|
15081
15589
|
"div",
|
|
15082
15590
|
{
|
|
15083
15591
|
ref: containerRef,
|
|
@@ -15088,9 +15596,9 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15088
15596
|
className
|
|
15089
15597
|
),
|
|
15090
15598
|
style: wrapperWidth ? { width: wrapperWidth } : void 0,
|
|
15091
|
-
children: /* @__PURE__ */
|
|
15092
|
-
/* @__PURE__ */
|
|
15093
|
-
/* @__PURE__ */
|
|
15599
|
+
children: /* @__PURE__ */ jsxs107("div", { className: "relative min-h-[68px] w-full", children: [
|
|
15600
|
+
/* @__PURE__ */ jsxs107("div", { className: "relative w-full", children: [
|
|
15601
|
+
/* @__PURE__ */ jsx163(
|
|
15094
15602
|
DateRangeInputs,
|
|
15095
15603
|
{
|
|
15096
15604
|
fromId,
|
|
@@ -15141,7 +15649,7 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15141
15649
|
onToggleCalendar: toggleCalendar
|
|
15142
15650
|
}
|
|
15143
15651
|
),
|
|
15144
|
-
/* @__PURE__ */
|
|
15652
|
+
/* @__PURE__ */ jsx163(
|
|
15145
15653
|
Fieldset,
|
|
15146
15654
|
{
|
|
15147
15655
|
isFocused,
|
|
@@ -15158,16 +15666,16 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15158
15666
|
tooltip
|
|
15159
15667
|
}
|
|
15160
15668
|
),
|
|
15161
|
-
/* @__PURE__ */
|
|
15669
|
+
/* @__PURE__ */ jsx163(
|
|
15162
15670
|
DateRangePopover,
|
|
15163
15671
|
{
|
|
15164
|
-
isOpen: isOpen && !
|
|
15672
|
+
isOpen: isOpen && !isMobile3,
|
|
15165
15673
|
isMobile: false,
|
|
15166
15674
|
openDirection,
|
|
15167
15675
|
drawerTitle,
|
|
15168
15676
|
drawerDescription,
|
|
15169
15677
|
onClose: closeCalendar,
|
|
15170
|
-
children: /* @__PURE__ */
|
|
15678
|
+
children: /* @__PURE__ */ jsx163(
|
|
15171
15679
|
DateRangeCalendar,
|
|
15172
15680
|
{
|
|
15173
15681
|
value,
|
|
@@ -15188,16 +15696,16 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15188
15696
|
}
|
|
15189
15697
|
)
|
|
15190
15698
|
] }),
|
|
15191
|
-
/* @__PURE__ */
|
|
15699
|
+
/* @__PURE__ */ jsx163(
|
|
15192
15700
|
DateRangePopover,
|
|
15193
15701
|
{
|
|
15194
|
-
isOpen: isOpen &&
|
|
15702
|
+
isOpen: isOpen && isMobile3,
|
|
15195
15703
|
isMobile: true,
|
|
15196
15704
|
openDirection,
|
|
15197
15705
|
drawerTitle,
|
|
15198
15706
|
drawerDescription,
|
|
15199
15707
|
onClose: closeCalendar,
|
|
15200
|
-
children: /* @__PURE__ */
|
|
15708
|
+
children: /* @__PURE__ */ jsx163(
|
|
15201
15709
|
DateRangeCalendar,
|
|
15202
15710
|
{
|
|
15203
15711
|
value,
|
|
@@ -15217,9 +15725,9 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15217
15725
|
)
|
|
15218
15726
|
}
|
|
15219
15727
|
),
|
|
15220
|
-
!error && optional && /* @__PURE__ */
|
|
15221
|
-
!error && helperText && /* @__PURE__ */
|
|
15222
|
-
error && !hideErrorMessage && /* @__PURE__ */
|
|
15728
|
+
!error && optional && /* @__PURE__ */ jsx163("span", { className: "mt-[1px] block text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: typeof optional === "string" ? optional : t("optional") }),
|
|
15729
|
+
!error && helperText && /* @__PURE__ */ jsx163("span", { className: "mt-[1px] block text-[12px] font-normal text-[var(--chekin-color-gray-1)]", children: helperText }),
|
|
15730
|
+
error && !hideErrorMessage && /* @__PURE__ */ jsx163(
|
|
15223
15731
|
FieldErrorMessage,
|
|
15224
15732
|
{
|
|
15225
15733
|
id: errorId,
|
|
@@ -15234,7 +15742,7 @@ var DashboardDateRangePicker = React58.forwardRef(function DashboardDateRangePic
|
|
|
15234
15742
|
|
|
15235
15743
|
// src/dashboard/date-range-picker/useValidateDates.ts
|
|
15236
15744
|
import * as React59 from "react";
|
|
15237
|
-
import { useTranslation as
|
|
15745
|
+
import { useTranslation as useTranslation37 } from "react-i18next";
|
|
15238
15746
|
import { differenceInDays as differenceInDays2, isAfter as isAfter2, isBefore as isBefore3 } from "date-fns";
|
|
15239
15747
|
import {
|
|
15240
15748
|
dateMatchModifiers,
|
|
@@ -15256,7 +15764,7 @@ function useValidateDates({
|
|
|
15256
15764
|
onSuccess,
|
|
15257
15765
|
displayFormat
|
|
15258
15766
|
}) {
|
|
15259
|
-
const { t } =
|
|
15767
|
+
const { t } = useTranslation37();
|
|
15260
15768
|
const handleError = useEvent(onError);
|
|
15261
15769
|
const handleSuccess = useEvent(onSuccess);
|
|
15262
15770
|
const errorFormatter = React59.useMemo(
|
|
@@ -15315,7 +15823,7 @@ function useValidateDates({
|
|
|
15315
15823
|
// src/dashboard/time-picker/TimePicker.tsx
|
|
15316
15824
|
import * as React60 from "react";
|
|
15317
15825
|
import { addDays, addHours, addMinutes, format, parse as parse2 } from "date-fns";
|
|
15318
|
-
import { jsx as
|
|
15826
|
+
import { jsx as jsx164 } from "react/jsx-runtime";
|
|
15319
15827
|
var SHORT_TIME_FORMAT = "HH:mm";
|
|
15320
15828
|
function parseTime(value) {
|
|
15321
15829
|
return parse2(value, SHORT_TIME_FORMAT, /* @__PURE__ */ new Date());
|
|
@@ -15364,24 +15872,15 @@ var DashboardTimePicker = React60.forwardRef(
|
|
|
15364
15872
|
const settings = timeSettings ?? FORMAT_SETTINGS[formatName];
|
|
15365
15873
|
return buildOptions(settings);
|
|
15366
15874
|
}, [formatName, options, timeSettings]);
|
|
15367
|
-
return /* @__PURE__ */
|
|
15875
|
+
return /* @__PURE__ */ jsx164(DashboardSelect, { ref, ...selectProps, options: resolvedOptions });
|
|
15368
15876
|
}
|
|
15369
15877
|
);
|
|
15370
15878
|
|
|
15371
15879
|
// src/dashboard/file-input/FileInput.tsx
|
|
15372
15880
|
import * as React61 from "react";
|
|
15373
15881
|
import { Download, Paperclip, SquareX as SquareX5 } from "lucide-react";
|
|
15374
|
-
import { useTranslation as
|
|
15375
|
-
import { jsx as
|
|
15376
|
-
function defaultFileNameFromUrl(url) {
|
|
15377
|
-
try {
|
|
15378
|
-
const parsed = new URL(url);
|
|
15379
|
-
const segments = parsed.pathname.split("/");
|
|
15380
|
-
return decodeURIComponent(segments[segments.length - 1] ?? url);
|
|
15381
|
-
} catch {
|
|
15382
|
-
return url;
|
|
15383
|
-
}
|
|
15384
|
-
}
|
|
15882
|
+
import { useTranslation as useTranslation38 } from "react-i18next";
|
|
15883
|
+
import { jsx as jsx165, jsxs as jsxs108 } from "react/jsx-runtime";
|
|
15385
15884
|
function defaultDownload(url) {
|
|
15386
15885
|
window.open(url, "_blank", "noopener,noreferrer");
|
|
15387
15886
|
}
|
|
@@ -15406,12 +15905,11 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15406
15905
|
hideErrorMessage,
|
|
15407
15906
|
className,
|
|
15408
15907
|
width,
|
|
15409
|
-
downloadLabel
|
|
15410
|
-
fileNameFromUrl = defaultFileNameFromUrl
|
|
15908
|
+
downloadLabel
|
|
15411
15909
|
}, ref) {
|
|
15412
15910
|
const internalRef = React61.useRef(null);
|
|
15413
15911
|
const inputRef = useCombinedRef(ref, internalRef);
|
|
15414
|
-
const { t } =
|
|
15912
|
+
const { t } = useTranslation38();
|
|
15415
15913
|
const resolvedLabel = label ?? t("upload_file");
|
|
15416
15914
|
const resolvedDownloadLabel = downloadLabel ?? t("download_attachment");
|
|
15417
15915
|
const reactId = React61.useId();
|
|
@@ -15440,7 +15938,7 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15440
15938
|
event.stopPropagation();
|
|
15441
15939
|
if (isUrl) onDownload(value);
|
|
15442
15940
|
};
|
|
15443
|
-
return /* @__PURE__ */
|
|
15941
|
+
return /* @__PURE__ */ jsxs108(
|
|
15444
15942
|
"label",
|
|
15445
15943
|
{
|
|
15446
15944
|
htmlFor: inputId,
|
|
@@ -15453,7 +15951,7 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15453
15951
|
),
|
|
15454
15952
|
style: wrapperWidth ? { width: wrapperWidth } : void 0,
|
|
15455
15953
|
children: [
|
|
15456
|
-
/* @__PURE__ */
|
|
15954
|
+
/* @__PURE__ */ jsx165(
|
|
15457
15955
|
"input",
|
|
15458
15956
|
{
|
|
15459
15957
|
ref: inputRef,
|
|
@@ -15469,9 +15967,9 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15469
15967
|
"aria-invalid": isInvalid
|
|
15470
15968
|
}
|
|
15471
15969
|
),
|
|
15472
|
-
/* @__PURE__ */
|
|
15473
|
-
/* @__PURE__ */
|
|
15474
|
-
/* @__PURE__ */
|
|
15970
|
+
/* @__PURE__ */ jsxs108("div", { className: "relative min-h-[68px] w-full", children: [
|
|
15971
|
+
/* @__PURE__ */ jsxs108("div", { className: "relative w-full", children: [
|
|
15972
|
+
/* @__PURE__ */ jsxs108(
|
|
15475
15973
|
"div",
|
|
15476
15974
|
{
|
|
15477
15975
|
className: cn(
|
|
@@ -15479,25 +15977,25 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15479
15977
|
isEmpty && "bg-[var(--chekin-color-surface-input-empty)]"
|
|
15480
15978
|
),
|
|
15481
15979
|
children: [
|
|
15482
|
-
hasFileChip ? /* @__PURE__ */
|
|
15980
|
+
hasFileChip ? /* @__PURE__ */ jsxs108(
|
|
15483
15981
|
"div",
|
|
15484
15982
|
{
|
|
15485
15983
|
className: "inline-flex h-6 max-w-[85%] items-center rounded-[4px] border border-[#acacd5] bg-[#f0f0f8] pl-[10px] pr-1",
|
|
15486
15984
|
onClick: (event) => event.preventDefault(),
|
|
15487
15985
|
children: [
|
|
15488
|
-
isUrl ? /* @__PURE__ */
|
|
15986
|
+
isUrl ? /* @__PURE__ */ jsxs108(
|
|
15489
15987
|
"button",
|
|
15490
15988
|
{
|
|
15491
15989
|
type: "button",
|
|
15492
15990
|
onClick: handleDownload,
|
|
15493
15991
|
className: "inline-flex items-center gap-[7px] truncate border-0 bg-transparent p-0 text-[14px] font-medium text-[var(--chekin-color-brand-navy)] outline-none",
|
|
15494
15992
|
children: [
|
|
15495
|
-
/* @__PURE__ */
|
|
15496
|
-
/* @__PURE__ */
|
|
15993
|
+
/* @__PURE__ */ jsx165("span", { className: "truncate", children: resolvedDownloadLabel }),
|
|
15994
|
+
/* @__PURE__ */ jsx165(Download, { size: 15 })
|
|
15497
15995
|
]
|
|
15498
15996
|
}
|
|
15499
|
-
) : /* @__PURE__ */
|
|
15500
|
-
/* @__PURE__ */
|
|
15997
|
+
) : /* @__PURE__ */ jsx165("span", { className: "truncate text-[14px] font-medium text-[var(--chekin-color-brand-navy)]", children: value.name }),
|
|
15998
|
+
/* @__PURE__ */ jsx165(
|
|
15501
15999
|
"button",
|
|
15502
16000
|
{
|
|
15503
16001
|
type: "button",
|
|
@@ -15505,20 +16003,20 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15505
16003
|
onClick: handleClear,
|
|
15506
16004
|
className: "ml-2 flex h-[15px] w-[15px] items-center justify-center rounded-[3px] border-0 bg-transparent p-0 text-[#9696b9] outline-none hover:shadow-[0_3px_3px_#0f477734]",
|
|
15507
16005
|
"aria-label": t("remove_file"),
|
|
15508
|
-
children: /* @__PURE__ */
|
|
16006
|
+
children: /* @__PURE__ */ jsx165(SquareX5, { size: 15, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
15509
16007
|
}
|
|
15510
16008
|
)
|
|
15511
16009
|
]
|
|
15512
16010
|
}
|
|
15513
|
-
) : /* @__PURE__ */
|
|
15514
|
-
/* @__PURE__ */
|
|
15515
|
-
loading && /* @__PURE__ */
|
|
15516
|
-
/* @__PURE__ */
|
|
16011
|
+
) : /* @__PURE__ */ jsx165("span", { className: "block min-w-0 flex-1 truncate text-left text-[var(--chekin-color-gray-1)]", children: placeholder ?? "" }),
|
|
16012
|
+
/* @__PURE__ */ jsxs108("span", { className: "ml-auto flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: [
|
|
16013
|
+
loading && /* @__PURE__ */ jsx165(ThreeDotsLoader, { height: 18, width: 18 }),
|
|
16014
|
+
/* @__PURE__ */ jsx165(Paperclip, { size: 20 })
|
|
15517
16015
|
] })
|
|
15518
16016
|
]
|
|
15519
16017
|
}
|
|
15520
16018
|
),
|
|
15521
|
-
/* @__PURE__ */
|
|
16019
|
+
/* @__PURE__ */ jsx165(
|
|
15522
16020
|
Fieldset,
|
|
15523
16021
|
{
|
|
15524
16022
|
isFocused: false,
|
|
@@ -15536,9 +16034,9 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15536
16034
|
}
|
|
15537
16035
|
)
|
|
15538
16036
|
] }),
|
|
15539
|
-
!error && optional && /* @__PURE__ */
|
|
15540
|
-
!error && helperText && /* @__PURE__ */
|
|
15541
|
-
error && !hideErrorMessage && /* @__PURE__ */
|
|
16037
|
+
!error && optional && /* @__PURE__ */ jsx165("span", { className: "mt-[1px] block text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: typeof optional === "string" ? optional : t("optional") }),
|
|
16038
|
+
!error && helperText && /* @__PURE__ */ jsx165("span", { className: "mt-[1px] block text-[12px] font-normal text-[var(--chekin-color-gray-1)]", children: helperText }),
|
|
16039
|
+
error && !hideErrorMessage && /* @__PURE__ */ jsx165(
|
|
15542
16040
|
FieldErrorMessage,
|
|
15543
16041
|
{
|
|
15544
16042
|
id: errorId,
|
|
@@ -15555,7 +16053,7 @@ var DashboardFileInput = React61.forwardRef(
|
|
|
15555
16053
|
|
|
15556
16054
|
// src/dashboard/select-icons-box/SelectIconsBox.tsx
|
|
15557
16055
|
import * as React62 from "react";
|
|
15558
|
-
import { jsx as
|
|
16056
|
+
import { jsx as jsx166, jsxs as jsxs109 } from "react/jsx-runtime";
|
|
15559
16057
|
function DashboardSelectIconsBox({
|
|
15560
16058
|
children,
|
|
15561
16059
|
icons,
|
|
@@ -15591,7 +16089,7 @@ function DashboardSelectIconsBox({
|
|
|
15591
16089
|
onSelect(iconName);
|
|
15592
16090
|
setOpen(false);
|
|
15593
16091
|
};
|
|
15594
|
-
return /* @__PURE__ */
|
|
16092
|
+
return /* @__PURE__ */ jsxs109(
|
|
15595
16093
|
"div",
|
|
15596
16094
|
{
|
|
15597
16095
|
ref: containerRef,
|
|
@@ -15599,7 +16097,7 @@ function DashboardSelectIconsBox({
|
|
|
15599
16097
|
className: cn("relative inline-block", className),
|
|
15600
16098
|
children: [
|
|
15601
16099
|
children,
|
|
15602
|
-
isOpen && /* @__PURE__ */
|
|
16100
|
+
isOpen && /* @__PURE__ */ jsx166(
|
|
15603
16101
|
"div",
|
|
15604
16102
|
{
|
|
15605
16103
|
className: cn(
|
|
@@ -15610,7 +16108,7 @@ function DashboardSelectIconsBox({
|
|
|
15610
16108
|
boxClassName
|
|
15611
16109
|
),
|
|
15612
16110
|
style: { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` },
|
|
15613
|
-
children: icons.map((iconName) => /* @__PURE__ */
|
|
16111
|
+
children: icons.map((iconName) => /* @__PURE__ */ jsx166(
|
|
15614
16112
|
"button",
|
|
15615
16113
|
{
|
|
15616
16114
|
type: "button",
|
|
@@ -15691,14 +16189,14 @@ function getErrorMessage(error) {
|
|
|
15691
16189
|
|
|
15692
16190
|
// src/lib/toastResponseError.tsx
|
|
15693
16191
|
import i18next from "i18next";
|
|
15694
|
-
import { jsx as
|
|
16192
|
+
import { jsx as jsx167, jsxs as jsxs110 } from "react/jsx-runtime";
|
|
15695
16193
|
function addSupportEmailToMessage(message, prefixText) {
|
|
15696
16194
|
if (typeof message !== "string") {
|
|
15697
16195
|
return message;
|
|
15698
16196
|
}
|
|
15699
16197
|
const builtMessage = `${prefixText ? `${prefixText} ` : ""}${message}`;
|
|
15700
|
-
return /* @__PURE__ */
|
|
15701
|
-
/* @__PURE__ */
|
|
16198
|
+
return /* @__PURE__ */ jsxs110("div", { children: [
|
|
16199
|
+
/* @__PURE__ */ jsx167("div", { children: builtMessage }),
|
|
15702
16200
|
i18next.t("reach_us_at_email")
|
|
15703
16201
|
] });
|
|
15704
16202
|
}
|
|
@@ -15713,13 +16211,13 @@ function toastResponseError(error, options = {}) {
|
|
|
15713
16211
|
}
|
|
15714
16212
|
|
|
15715
16213
|
// src/legacy-fields/textarea/Textarea.tsx
|
|
15716
|
-
import { forwardRef as
|
|
15717
|
-
import { jsx as
|
|
15718
|
-
var LegacyTextarea =
|
|
16214
|
+
import { forwardRef as forwardRef68, useId as useId15 } from "react";
|
|
16215
|
+
import { jsx as jsx168, jsxs as jsxs111 } from "react/jsx-runtime";
|
|
16216
|
+
var LegacyTextarea = forwardRef68(
|
|
15719
16217
|
({ className, textareaClassName, label, disabled, name, invalid, ...textareaProps }, ref) => {
|
|
15720
16218
|
const inputId = useId15();
|
|
15721
|
-
return /* @__PURE__ */
|
|
15722
|
-
/* @__PURE__ */
|
|
16219
|
+
return /* @__PURE__ */ jsxs111("div", { className: cn("relative", className), children: [
|
|
16220
|
+
/* @__PURE__ */ jsx168(
|
|
15723
16221
|
"textarea",
|
|
15724
16222
|
{
|
|
15725
16223
|
ref,
|
|
@@ -15735,7 +16233,7 @@ var LegacyTextarea = forwardRef67(
|
|
|
15735
16233
|
...textareaProps
|
|
15736
16234
|
}
|
|
15737
16235
|
),
|
|
15738
|
-
label && /* @__PURE__ */
|
|
16236
|
+
label && /* @__PURE__ */ jsx168(
|
|
15739
16237
|
"label",
|
|
15740
16238
|
{
|
|
15741
16239
|
htmlFor: inputId,
|
|
@@ -15759,8 +16257,8 @@ import { Calendar as Calendar2 } from "lucide-react";
|
|
|
15759
16257
|
// src/airbnb-fields/field-trigger/FieldTrigger.tsx
|
|
15760
16258
|
import * as React63 from "react";
|
|
15761
16259
|
import { Loader2 as Loader24 } from "lucide-react";
|
|
15762
|
-
import { useTranslation as
|
|
15763
|
-
import { Fragment as
|
|
16260
|
+
import { useTranslation as useTranslation39 } from "react-i18next";
|
|
16261
|
+
import { Fragment as Fragment17, jsx as jsx169, jsxs as jsxs112 } from "react/jsx-runtime";
|
|
15764
16262
|
var AirbnbFieldTrigger = React63.forwardRef(
|
|
15765
16263
|
({
|
|
15766
16264
|
as = "button",
|
|
@@ -15792,20 +16290,20 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15792
16290
|
onKeyDown,
|
|
15793
16291
|
...props
|
|
15794
16292
|
}, ref) => {
|
|
15795
|
-
const { t } =
|
|
16293
|
+
const { t } = useTranslation39();
|
|
15796
16294
|
const hasValue = Boolean(valueText);
|
|
15797
16295
|
const isRaised = hasValue || forceFloatingLabel;
|
|
15798
16296
|
const optionalLabel = optional ? typeof optional === "string" ? optional : t("optional") : void 0;
|
|
15799
16297
|
const visibleLabelText = labelText ?? label;
|
|
15800
16298
|
const hasLabelMeta = Boolean(optionalLabel) || Boolean(tooltip);
|
|
15801
|
-
const resolvedLabelText = visibleLabelText && hasLabelMeta ? /* @__PURE__ */
|
|
15802
|
-
/* @__PURE__ */
|
|
15803
|
-
optionalLabel && /* @__PURE__ */
|
|
16299
|
+
const resolvedLabelText = visibleLabelText && hasLabelMeta ? /* @__PURE__ */ jsxs112("span", { className: "inline-flex max-w-full items-center gap-1.5 align-middle", children: [
|
|
16300
|
+
/* @__PURE__ */ jsx169("span", { className: "min-w-0 truncate", children: visibleLabelText }),
|
|
16301
|
+
optionalLabel && /* @__PURE__ */ jsxs112("span", { className: "shrink-0 text-[12px] relative top-[1px] font-normal leading-4 text-current opacity-70", children: [
|
|
15804
16302
|
"(",
|
|
15805
16303
|
optionalLabel,
|
|
15806
16304
|
")"
|
|
15807
16305
|
] }),
|
|
15808
|
-
tooltip && /* @__PURE__ */
|
|
16306
|
+
tooltip && /* @__PURE__ */ jsx169(
|
|
15809
16307
|
HelpTooltip,
|
|
15810
16308
|
{
|
|
15811
16309
|
content: tooltip,
|
|
@@ -15821,9 +16319,9 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15821
16319
|
const hasInvalidState = Boolean(error);
|
|
15822
16320
|
const errorMessage = typeof error === "string" ? error : void 0;
|
|
15823
16321
|
const isBlocked = Boolean(disabled) || Boolean(loading);
|
|
15824
|
-
const resolvedTrailingAdornment = loading || trailingAdornment ? /* @__PURE__ */
|
|
16322
|
+
const resolvedTrailingAdornment = loading || trailingAdornment ? /* @__PURE__ */ jsxs112("span", { className: "flex items-center gap-2", children: [
|
|
15825
16323
|
trailingAdornment,
|
|
15826
|
-
loading && /* @__PURE__ */
|
|
16324
|
+
loading && /* @__PURE__ */ jsx169(
|
|
15827
16325
|
Loader24,
|
|
15828
16326
|
{
|
|
15829
16327
|
"aria-hidden": "true",
|
|
@@ -15839,8 +16337,8 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15839
16337
|
disabled ? "cursor-not-allowed opacity-50" : loading ? "cursor-progress" : isAirbnbVariant ? "cursor-pointer" : "cursor-text",
|
|
15840
16338
|
className
|
|
15841
16339
|
);
|
|
15842
|
-
const sharedContent = /* @__PURE__ */
|
|
15843
|
-
/* @__PURE__ */
|
|
16340
|
+
const sharedContent = /* @__PURE__ */ jsxs112(Fragment17, { children: [
|
|
16341
|
+
/* @__PURE__ */ jsxs112(
|
|
15844
16342
|
"span",
|
|
15845
16343
|
{
|
|
15846
16344
|
className: cn(
|
|
@@ -15849,7 +16347,7 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15849
16347
|
contentClassName
|
|
15850
16348
|
),
|
|
15851
16349
|
children: [
|
|
15852
|
-
/* @__PURE__ */
|
|
16350
|
+
/* @__PURE__ */ jsx169(
|
|
15853
16351
|
"span",
|
|
15854
16352
|
{
|
|
15855
16353
|
id: labelId,
|
|
@@ -15862,7 +16360,7 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15862
16360
|
children: animatedLabel
|
|
15863
16361
|
}
|
|
15864
16362
|
),
|
|
15865
|
-
children ? children : hasValue ? /* @__PURE__ */
|
|
16363
|
+
children ? children : hasValue ? /* @__PURE__ */ jsx169(
|
|
15866
16364
|
"span",
|
|
15867
16365
|
{
|
|
15868
16366
|
id: valueId,
|
|
@@ -15873,11 +16371,11 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15873
16371
|
),
|
|
15874
16372
|
children: valueText
|
|
15875
16373
|
}
|
|
15876
|
-
) : /* @__PURE__ */
|
|
16374
|
+
) : /* @__PURE__ */ jsx169("span", { id: helperTextId, className: "sr-only", children: placeholder ?? label })
|
|
15877
16375
|
]
|
|
15878
16376
|
}
|
|
15879
16377
|
),
|
|
15880
|
-
resolvedTrailingAdornment && /* @__PURE__ */
|
|
16378
|
+
resolvedTrailingAdornment && /* @__PURE__ */ jsx169(
|
|
15881
16379
|
"span",
|
|
15882
16380
|
{
|
|
15883
16381
|
"aria-hidden": "true",
|
|
@@ -15889,9 +16387,9 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15889
16387
|
}
|
|
15890
16388
|
)
|
|
15891
16389
|
] });
|
|
15892
|
-
return /* @__PURE__ */
|
|
15893
|
-
topLabel && /* @__PURE__ */
|
|
15894
|
-
as === "button" ? /* @__PURE__ */
|
|
16390
|
+
return /* @__PURE__ */ jsxs112("div", { className: "w-full", children: [
|
|
16391
|
+
topLabel && /* @__PURE__ */ jsx169("p", { className: "mb-3 text-[16px] font-semibold leading-5 text-[#222222]", children: topLabel }),
|
|
16392
|
+
as === "button" ? /* @__PURE__ */ jsx169(
|
|
15895
16393
|
"button",
|
|
15896
16394
|
{
|
|
15897
16395
|
id,
|
|
@@ -15908,7 +16406,7 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15908
16406
|
...props,
|
|
15909
16407
|
children: sharedContent
|
|
15910
16408
|
}
|
|
15911
|
-
) : /* @__PURE__ */
|
|
16409
|
+
) : /* @__PURE__ */ jsx169(
|
|
15912
16410
|
"div",
|
|
15913
16411
|
{
|
|
15914
16412
|
id,
|
|
@@ -15925,14 +16423,14 @@ var AirbnbFieldTrigger = React63.forwardRef(
|
|
|
15925
16423
|
children: sharedContent
|
|
15926
16424
|
}
|
|
15927
16425
|
),
|
|
15928
|
-
errorMessage && !hideErrorMessage && /* @__PURE__ */
|
|
16426
|
+
errorMessage && !hideErrorMessage && /* @__PURE__ */ jsx169(FieldErrorMessage, { id: errorId, message: errorMessage })
|
|
15929
16427
|
] });
|
|
15930
16428
|
}
|
|
15931
16429
|
);
|
|
15932
16430
|
AirbnbFieldTrigger.displayName = "AirbnbFieldTrigger";
|
|
15933
16431
|
|
|
15934
16432
|
// src/airbnb-fields/datepicker/DatePicker.tsx
|
|
15935
|
-
import { jsx as
|
|
16433
|
+
import { jsx as jsx170, jsxs as jsxs113 } from "react/jsx-runtime";
|
|
15936
16434
|
var DEFAULT_MIN_DATE = new Date(1920, 0, 1);
|
|
15937
16435
|
var AirbnbDatePicker = React64.forwardRef(
|
|
15938
16436
|
({
|
|
@@ -15959,7 +16457,7 @@ var AirbnbDatePicker = React64.forwardRef(
|
|
|
15959
16457
|
doneLabel = "Done",
|
|
15960
16458
|
formatValue = formatDateValue
|
|
15961
16459
|
}, ref) => {
|
|
15962
|
-
const { isMatch:
|
|
16460
|
+
const { isMatch: isMobile3 } = useScreenResize(DEVICE.mobileXL);
|
|
15963
16461
|
const [isOpen, setIsOpen] = React64.useState(false);
|
|
15964
16462
|
const triggerId = React64.useId();
|
|
15965
16463
|
const pickerId = React64.useId();
|
|
@@ -16049,8 +16547,8 @@ var AirbnbDatePicker = React64.forwardRef(
|
|
|
16049
16547
|
setIsOpen(false);
|
|
16050
16548
|
}
|
|
16051
16549
|
}, [isBlocked]);
|
|
16052
|
-
return /* @__PURE__ */
|
|
16053
|
-
name && /* @__PURE__ */
|
|
16550
|
+
return /* @__PURE__ */ jsxs113("div", { className: cn("relative w-full max-w-[var(--max-field-width)]", className), children: [
|
|
16551
|
+
name && /* @__PURE__ */ jsx170(
|
|
16054
16552
|
"input",
|
|
16055
16553
|
{
|
|
16056
16554
|
type: "hidden",
|
|
@@ -16058,7 +16556,7 @@ var AirbnbDatePicker = React64.forwardRef(
|
|
|
16058
16556
|
value: resolvedValue ? formatDateInputValue(resolvedValue) : ""
|
|
16059
16557
|
}
|
|
16060
16558
|
),
|
|
16061
|
-
/* @__PURE__ */
|
|
16559
|
+
/* @__PURE__ */ jsx170(
|
|
16062
16560
|
AirbnbFieldTrigger,
|
|
16063
16561
|
{
|
|
16064
16562
|
id: triggerId,
|
|
@@ -16085,15 +16583,15 @@ var AirbnbDatePicker = React64.forwardRef(
|
|
|
16085
16583
|
onClick: handleTriggerClick,
|
|
16086
16584
|
onKeyDown: handleTriggerKeyDown,
|
|
16087
16585
|
onBlur,
|
|
16088
|
-
trailingAdornment: /* @__PURE__ */
|
|
16586
|
+
trailingAdornment: /* @__PURE__ */ jsx170(Calendar2, { className: "h-5 w-5 text-[#1F1F1B]", strokeWidth: 2 })
|
|
16089
16587
|
}
|
|
16090
16588
|
),
|
|
16091
|
-
/* @__PURE__ */
|
|
16589
|
+
/* @__PURE__ */ jsx170(
|
|
16092
16590
|
AirbnbDatePickerContent,
|
|
16093
16591
|
{
|
|
16094
16592
|
baseId: pickerId,
|
|
16095
16593
|
open: isOpen,
|
|
16096
|
-
isMobile:
|
|
16594
|
+
isMobile: isMobile3,
|
|
16097
16595
|
label,
|
|
16098
16596
|
title: mobileTitle ?? label,
|
|
16099
16597
|
doneLabel,
|
|
@@ -16123,7 +16621,7 @@ AirbnbDatePicker.displayName = "AirbnbDatePicker";
|
|
|
16123
16621
|
|
|
16124
16622
|
// src/airbnb-fields/input/Input.tsx
|
|
16125
16623
|
import * as React65 from "react";
|
|
16126
|
-
import { jsx as
|
|
16624
|
+
import { jsx as jsx171 } from "react/jsx-runtime";
|
|
16127
16625
|
var getInputValue = (value) => value != null ? String(value) : "";
|
|
16128
16626
|
var AirbnbInput = React65.forwardRef(
|
|
16129
16627
|
({
|
|
@@ -16206,7 +16704,7 @@ var AirbnbInput = React65.forwardRef(
|
|
|
16206
16704
|
setIsFocused(false);
|
|
16207
16705
|
onBlur?.(event);
|
|
16208
16706
|
};
|
|
16209
|
-
return /* @__PURE__ */
|
|
16707
|
+
return /* @__PURE__ */ jsx171("div", { className: cn("w-full max-w-[var(--max-field-width)]", wrapperClassName), children: /* @__PURE__ */ jsx171(
|
|
16210
16708
|
AirbnbFieldTrigger,
|
|
16211
16709
|
{
|
|
16212
16710
|
as: "div",
|
|
@@ -16238,7 +16736,7 @@ var AirbnbInput = React65.forwardRef(
|
|
|
16238
16736
|
forceFloatingLabel: shouldShowLabel,
|
|
16239
16737
|
forceLabelText: hasLabelMeta,
|
|
16240
16738
|
hideErrorMessage: !renderErrorMessage,
|
|
16241
|
-
children: /* @__PURE__ */
|
|
16739
|
+
children: /* @__PURE__ */ jsx171(
|
|
16242
16740
|
"input",
|
|
16243
16741
|
{
|
|
16244
16742
|
...props,
|
|
@@ -16281,7 +16779,7 @@ import { ChevronDown as ChevronDown5 } from "lucide-react";
|
|
|
16281
16779
|
import * as React70 from "react";
|
|
16282
16780
|
|
|
16283
16781
|
// src/airbnb-fields/select/SelectDesktopMenu.tsx
|
|
16284
|
-
import { jsx as
|
|
16782
|
+
import { jsx as jsx172, jsxs as jsxs114 } from "react/jsx-runtime";
|
|
16285
16783
|
function AirbnbSelectDesktopMenu({
|
|
16286
16784
|
id,
|
|
16287
16785
|
options,
|
|
@@ -16300,7 +16798,7 @@ function AirbnbSelectDesktopMenu({
|
|
|
16300
16798
|
noOptionsMessage
|
|
16301
16799
|
}) {
|
|
16302
16800
|
const emptyMessage = noOptionsMessage?.();
|
|
16303
|
-
return /* @__PURE__ */
|
|
16801
|
+
return /* @__PURE__ */ jsxs114(
|
|
16304
16802
|
"div",
|
|
16305
16803
|
{
|
|
16306
16804
|
id,
|
|
@@ -16313,12 +16811,12 @@ function AirbnbSelectDesktopMenu({
|
|
|
16313
16811
|
onKeyDown,
|
|
16314
16812
|
className: cn("max-h-[280px] overflow-y-auto p-2 outline-none", menuClassName),
|
|
16315
16813
|
children: [
|
|
16316
|
-
options.length === 0 && emptyMessage ? /* @__PURE__ */
|
|
16814
|
+
options.length === 0 && emptyMessage ? /* @__PURE__ */ jsx172("div", { className: "px-4 py-3 text-base leading-6 text-[#6C6C6C]", children: emptyMessage }) : null,
|
|
16317
16815
|
options.map((option, index) => {
|
|
16318
16816
|
const isSelected = selectedValue?.value === option.value;
|
|
16319
16817
|
const isHighlighted = index === highlightedIndex;
|
|
16320
16818
|
const optionKey = `${String(option.value)}-${index}`;
|
|
16321
|
-
return /* @__PURE__ */
|
|
16819
|
+
return /* @__PURE__ */ jsx172(
|
|
16322
16820
|
"button",
|
|
16323
16821
|
{
|
|
16324
16822
|
id: getOptionId2(index),
|
|
@@ -16350,7 +16848,7 @@ function AirbnbSelectDesktopMenu({
|
|
|
16350
16848
|
}
|
|
16351
16849
|
|
|
16352
16850
|
// src/airbnb-fields/select/SelectDesktopContent.tsx
|
|
16353
|
-
import { jsx as
|
|
16851
|
+
import { jsx as jsx173 } from "react/jsx-runtime";
|
|
16354
16852
|
function AirbnbSelectDesktopContent({
|
|
16355
16853
|
isOpen,
|
|
16356
16854
|
listboxId,
|
|
@@ -16371,14 +16869,14 @@ function AirbnbSelectDesktopContent({
|
|
|
16371
16869
|
noOptionsMessage
|
|
16372
16870
|
}) {
|
|
16373
16871
|
if (!isOpen) return null;
|
|
16374
|
-
return /* @__PURE__ */
|
|
16872
|
+
return /* @__PURE__ */ jsx173(
|
|
16375
16873
|
"div",
|
|
16376
16874
|
{
|
|
16377
16875
|
className: cn(
|
|
16378
16876
|
"absolute left-0 right-0 top-[calc(100%+8px)] z-20 overflow-hidden rounded-[20px] border border-[#DEDAD2] bg-white shadow-[0_14px_30px_rgba(18,18,18,0.08)]",
|
|
16379
16877
|
dropdownClassName
|
|
16380
16878
|
),
|
|
16381
|
-
children: /* @__PURE__ */
|
|
16879
|
+
children: /* @__PURE__ */ jsx173(
|
|
16382
16880
|
AirbnbSelectDesktopMenu,
|
|
16383
16881
|
{
|
|
16384
16882
|
id: listboxId,
|
|
@@ -16476,7 +16974,7 @@ function getMobileOptionStyles(index, scrollTop) {
|
|
|
16476
16974
|
}
|
|
16477
16975
|
|
|
16478
16976
|
// src/airbnb-fields/select/SelectMobileWheel.tsx
|
|
16479
|
-
import { jsx as
|
|
16977
|
+
import { jsx as jsx174, jsxs as jsxs115 } from "react/jsx-runtime";
|
|
16480
16978
|
function AirbnbSelectMobileWheel({
|
|
16481
16979
|
id,
|
|
16482
16980
|
options,
|
|
@@ -16495,7 +16993,7 @@ function AirbnbSelectMobileWheel({
|
|
|
16495
16993
|
}) {
|
|
16496
16994
|
const spacerHeight2 = getWheelSpacerHeight();
|
|
16497
16995
|
const emptyMessage = noOptionsMessage?.();
|
|
16498
|
-
return /* @__PURE__ */
|
|
16996
|
+
return /* @__PURE__ */ jsxs115(
|
|
16499
16997
|
"div",
|
|
16500
16998
|
{
|
|
16501
16999
|
id,
|
|
@@ -16507,10 +17005,10 @@ function AirbnbSelectMobileWheel({
|
|
|
16507
17005
|
onKeyDown,
|
|
16508
17006
|
className: cn("relative overflow-hidden outline-none", menuClassName),
|
|
16509
17007
|
children: [
|
|
16510
|
-
options.length === 0 && emptyMessage ? /* @__PURE__ */
|
|
16511
|
-
/* @__PURE__ */
|
|
16512
|
-
/* @__PURE__ */
|
|
16513
|
-
/* @__PURE__ */
|
|
17008
|
+
options.length === 0 && emptyMessage ? /* @__PURE__ */ jsx174("div", { className: "flex min-h-[160px] items-center justify-center px-4 text-center text-base leading-6 text-[#6C6C6C]", children: emptyMessage }) : null,
|
|
17009
|
+
/* @__PURE__ */ jsx174("div", { className: "pointer-events-none absolute inset-x-0 top-0 h-16 bg-gradient-to-b from-white via-white/80 to-transparent" }),
|
|
17010
|
+
/* @__PURE__ */ jsx174("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-white via-white/80 to-transparent" }),
|
|
17011
|
+
/* @__PURE__ */ jsx174(
|
|
16514
17012
|
"div",
|
|
16515
17013
|
{
|
|
16516
17014
|
"aria-hidden": true,
|
|
@@ -16520,7 +17018,7 @@ function AirbnbSelectMobileWheel({
|
|
|
16520
17018
|
)
|
|
16521
17019
|
}
|
|
16522
17020
|
),
|
|
16523
|
-
/* @__PURE__ */
|
|
17021
|
+
/* @__PURE__ */ jsxs115(
|
|
16524
17022
|
"div",
|
|
16525
17023
|
{
|
|
16526
17024
|
ref: listRef,
|
|
@@ -16535,11 +17033,11 @@ function AirbnbSelectMobileWheel({
|
|
|
16535
17033
|
WebkitOverflowScrolling: "touch"
|
|
16536
17034
|
},
|
|
16537
17035
|
children: [
|
|
16538
|
-
/* @__PURE__ */
|
|
17036
|
+
/* @__PURE__ */ jsx174("div", { style: { height: `${spacerHeight2}px` } }),
|
|
16539
17037
|
options.map((option, index) => {
|
|
16540
17038
|
const { distance, style } = getMobileOptionStyles(index, scrollTop);
|
|
16541
17039
|
const optionKey = `${String(option.value)}-${index}`;
|
|
16542
|
-
return /* @__PURE__ */
|
|
17040
|
+
return /* @__PURE__ */ jsx174(
|
|
16543
17041
|
"button",
|
|
16544
17042
|
{
|
|
16545
17043
|
id: getOptionId2(index),
|
|
@@ -16560,7 +17058,7 @@ function AirbnbSelectMobileWheel({
|
|
|
16560
17058
|
optionKey
|
|
16561
17059
|
);
|
|
16562
17060
|
}),
|
|
16563
|
-
/* @__PURE__ */
|
|
17061
|
+
/* @__PURE__ */ jsx174("div", { style: { height: `${spacerHeight2}px` } })
|
|
16564
17062
|
]
|
|
16565
17063
|
}
|
|
16566
17064
|
)
|
|
@@ -16570,7 +17068,7 @@ function AirbnbSelectMobileWheel({
|
|
|
16570
17068
|
}
|
|
16571
17069
|
|
|
16572
17070
|
// src/airbnb-fields/select/SelectMobileContent.tsx
|
|
16573
|
-
import { jsx as
|
|
17071
|
+
import { jsx as jsx175, jsxs as jsxs116 } from "react/jsx-runtime";
|
|
16574
17072
|
function AirbnbSelectMobileContent({
|
|
16575
17073
|
open,
|
|
16576
17074
|
onOpenChange,
|
|
@@ -16594,11 +17092,11 @@ function AirbnbSelectMobileContent({
|
|
|
16594
17092
|
getOptionId: getOptionId2,
|
|
16595
17093
|
noOptionsMessage
|
|
16596
17094
|
}) {
|
|
16597
|
-
return /* @__PURE__ */
|
|
16598
|
-
/* @__PURE__ */
|
|
16599
|
-
/* @__PURE__ */
|
|
16600
|
-
/* @__PURE__ */
|
|
16601
|
-
/* @__PURE__ */
|
|
17095
|
+
return /* @__PURE__ */ jsx175(Drawer, { open, onOpenChange, children: /* @__PURE__ */ jsxs116(DrawerContent, { onClose, lockScroll: false, children: [
|
|
17096
|
+
/* @__PURE__ */ jsx175(DrawerTitle, { className: "sr-only", children: mobileTitle ?? label }),
|
|
17097
|
+
/* @__PURE__ */ jsx175(DrawerDescription, { className: "sr-only", children: label }),
|
|
17098
|
+
/* @__PURE__ */ jsxs116("div", { className: "px-6 pb-4 pt-1", children: [
|
|
17099
|
+
/* @__PURE__ */ jsx175(
|
|
16602
17100
|
AirbnbSelectMobileWheel,
|
|
16603
17101
|
{
|
|
16604
17102
|
id: listboxId,
|
|
@@ -16617,7 +17115,7 @@ function AirbnbSelectMobileContent({
|
|
|
16617
17115
|
noOptionsMessage
|
|
16618
17116
|
}
|
|
16619
17117
|
),
|
|
16620
|
-
/* @__PURE__ */
|
|
17118
|
+
/* @__PURE__ */ jsx175(Button, { type: "button", onClick: onDone, className: "mt-4 h-12 mb-8 w-full", children: doneLabel })
|
|
16621
17119
|
] })
|
|
16622
17120
|
] }) });
|
|
16623
17121
|
}
|
|
@@ -16625,7 +17123,7 @@ function AirbnbSelectMobileContent({
|
|
|
16625
17123
|
// src/airbnb-fields/select/SelectTrigger.tsx
|
|
16626
17124
|
import * as React66 from "react";
|
|
16627
17125
|
import { ChevronDown as ChevronDown4 } from "lucide-react";
|
|
16628
|
-
import { jsx as
|
|
17126
|
+
import { jsx as jsx176 } from "react/jsx-runtime";
|
|
16629
17127
|
var AirbnbSelectTrigger = React66.forwardRef(
|
|
16630
17128
|
({
|
|
16631
17129
|
id,
|
|
@@ -16651,7 +17149,7 @@ var AirbnbSelectTrigger = React66.forwardRef(
|
|
|
16651
17149
|
onKeyDown,
|
|
16652
17150
|
onBlur
|
|
16653
17151
|
}, ref) => {
|
|
16654
|
-
return /* @__PURE__ */
|
|
17152
|
+
return /* @__PURE__ */ jsx176(
|
|
16655
17153
|
AirbnbFieldTrigger,
|
|
16656
17154
|
{
|
|
16657
17155
|
id,
|
|
@@ -16680,7 +17178,7 @@ var AirbnbSelectTrigger = React66.forwardRef(
|
|
|
16680
17178
|
onClick,
|
|
16681
17179
|
onKeyDown,
|
|
16682
17180
|
onBlur,
|
|
16683
|
-
trailingAdornment: /* @__PURE__ */
|
|
17181
|
+
trailingAdornment: /* @__PURE__ */ jsx176(
|
|
16684
17182
|
ChevronDown4,
|
|
16685
17183
|
{
|
|
16686
17184
|
className: open ? "h-6 w-6 rotate-180 text-[#1F1F1B] transition-transform" : "h-6 w-6 text-[#1F1F1B] transition-transform"
|
|
@@ -16695,7 +17193,7 @@ AirbnbSelectTrigger.displayName = "AirbnbSelectTrigger";
|
|
|
16695
17193
|
// src/airbnb-fields/select/useDesktopSelect.ts
|
|
16696
17194
|
import * as React67 from "react";
|
|
16697
17195
|
function useDesktopSelect({
|
|
16698
|
-
isMobile:
|
|
17196
|
+
isMobile: isMobile3,
|
|
16699
17197
|
isOpen,
|
|
16700
17198
|
options,
|
|
16701
17199
|
value,
|
|
@@ -16708,7 +17206,7 @@ function useDesktopSelect({
|
|
|
16708
17206
|
const optionRefs = React67.useRef([]);
|
|
16709
17207
|
const selectedIndex = getOptionIndex2(options, value);
|
|
16710
17208
|
React67.useEffect(() => {
|
|
16711
|
-
if (!isOpen ||
|
|
17209
|
+
if (!isOpen || isMobile3) return;
|
|
16712
17210
|
setHighlightedIndex((currentIndex) => {
|
|
16713
17211
|
if (currentIndex >= 0) {
|
|
16714
17212
|
return currentIndex;
|
|
@@ -16721,13 +17219,13 @@ function useDesktopSelect({
|
|
|
16721
17219
|
return () => {
|
|
16722
17220
|
window.cancelAnimationFrame(frameId);
|
|
16723
17221
|
};
|
|
16724
|
-
}, [
|
|
17222
|
+
}, [isMobile3, isOpen, options, selectedIndex]);
|
|
16725
17223
|
React67.useEffect(() => {
|
|
16726
|
-
if (!isOpen ||
|
|
17224
|
+
if (!isOpen || isMobile3 || highlightedIndex < 0) return;
|
|
16727
17225
|
optionRefs.current[highlightedIndex]?.scrollIntoView({
|
|
16728
17226
|
block: "nearest"
|
|
16729
17227
|
});
|
|
16730
|
-
}, [highlightedIndex,
|
|
17228
|
+
}, [highlightedIndex, isMobile3, isOpen]);
|
|
16731
17229
|
React67.useEffect(() => {
|
|
16732
17230
|
if (isOpen) return;
|
|
16733
17231
|
setHighlightedIndex(-1);
|
|
@@ -16845,7 +17343,7 @@ function useDesktopSelect({
|
|
|
16845
17343
|
|
|
16846
17344
|
// src/airbnb-fields/select/useMobileSelectWheel.ts
|
|
16847
17345
|
import * as React68 from "react";
|
|
16848
|
-
function useMobileSelectWheel({ isMobile:
|
|
17346
|
+
function useMobileSelectWheel({ isMobile: isMobile3, isOpen, options, value, disabled }) {
|
|
16849
17347
|
const [pendingValue, setPendingValue] = React68.useState(
|
|
16850
17348
|
value ?? null
|
|
16851
17349
|
);
|
|
@@ -16900,14 +17398,14 @@ function useMobileSelectWheel({ isMobile: isMobile2, isOpen, options, value, dis
|
|
|
16900
17398
|
setPendingValue(value ?? null);
|
|
16901
17399
|
}, [value]);
|
|
16902
17400
|
React68.useLayoutEffect(() => {
|
|
16903
|
-
if (!
|
|
17401
|
+
if (!isMobile3 || !isOpen) return;
|
|
16904
17402
|
const frameId = window.requestAnimationFrame(() => {
|
|
16905
17403
|
syncScrollPosition(value ?? null, "instant");
|
|
16906
17404
|
});
|
|
16907
17405
|
return () => {
|
|
16908
17406
|
window.cancelAnimationFrame(frameId);
|
|
16909
17407
|
};
|
|
16910
|
-
}, [
|
|
17408
|
+
}, [isMobile3, isOpen, syncScrollPosition, value]);
|
|
16911
17409
|
const settleScroll = React68.useCallback(() => {
|
|
16912
17410
|
if (!mobileListRef.current) return;
|
|
16913
17411
|
const nextIndex = Math.round(mobileListRef.current.scrollTop / MOBILE_OPTION_HEIGHT);
|
|
@@ -17042,7 +17540,7 @@ function useSelectIds2({ name, hasValue, error, hideErrorMessage }) {
|
|
|
17042
17540
|
}
|
|
17043
17541
|
|
|
17044
17542
|
// src/airbnb-fields/select/Select.tsx
|
|
17045
|
-
import { jsx as
|
|
17543
|
+
import { jsx as jsx177, jsxs as jsxs117 } from "react/jsx-runtime";
|
|
17046
17544
|
var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
17047
17545
|
options = [],
|
|
17048
17546
|
value,
|
|
@@ -17069,7 +17567,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17069
17567
|
name,
|
|
17070
17568
|
noOptionsMessage
|
|
17071
17569
|
}, ref) {
|
|
17072
|
-
const { isMatch:
|
|
17570
|
+
const { isMatch: isMobile3 } = useScreenResize(DEVICE.mobileXL);
|
|
17073
17571
|
const [isOpen, setIsOpen] = React70.useState(false);
|
|
17074
17572
|
const containerRef = React70.useRef(null);
|
|
17075
17573
|
const hasValue = Boolean(value);
|
|
@@ -17100,7 +17598,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17100
17598
|
moveByStep,
|
|
17101
17599
|
moveToBoundary
|
|
17102
17600
|
} = useMobileSelectWheel({
|
|
17103
|
-
isMobile:
|
|
17601
|
+
isMobile: isMobile3,
|
|
17104
17602
|
isOpen,
|
|
17105
17603
|
options,
|
|
17106
17604
|
value,
|
|
@@ -17117,7 +17615,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17117
17615
|
handleMenuKeyDown,
|
|
17118
17616
|
handleTriggerKeyDown
|
|
17119
17617
|
} = useDesktopSelect({
|
|
17120
|
-
isMobile:
|
|
17618
|
+
isMobile: isMobile3,
|
|
17121
17619
|
isOpen,
|
|
17122
17620
|
options,
|
|
17123
17621
|
value,
|
|
@@ -17130,7 +17628,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17130
17628
|
useOutsideClick({
|
|
17131
17629
|
elementRef: containerRef,
|
|
17132
17630
|
onOutsideClick: () => setIsOpen(false),
|
|
17133
|
-
isDisabled: !isOpen ||
|
|
17631
|
+
isDisabled: !isOpen || isMobile3
|
|
17134
17632
|
});
|
|
17135
17633
|
React70.useEffect(() => {
|
|
17136
17634
|
if (isBlocked) {
|
|
@@ -17173,14 +17671,14 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17173
17671
|
if (isBlocked) return;
|
|
17174
17672
|
setIsOpen((prev) => {
|
|
17175
17673
|
const nextOpen = !prev;
|
|
17176
|
-
if (
|
|
17674
|
+
if (isMobile3) {
|
|
17177
17675
|
syncPendingValue(value ?? null);
|
|
17178
17676
|
}
|
|
17179
17677
|
return nextOpen;
|
|
17180
17678
|
});
|
|
17181
|
-
}, [isBlocked,
|
|
17679
|
+
}, [isBlocked, isMobile3, syncPendingValue, value]);
|
|
17182
17680
|
const handleRootTriggerKeyDown = (event) => {
|
|
17183
|
-
if (
|
|
17681
|
+
if (isMobile3) {
|
|
17184
17682
|
if (isBlocked) return;
|
|
17185
17683
|
if (event.key === "ArrowDown" || event.key === "ArrowUp" || event.key === "Enter" || event.key === " ") {
|
|
17186
17684
|
event.preventDefault();
|
|
@@ -17222,13 +17720,13 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17222
17720
|
handleMobileOpenChange(false);
|
|
17223
17721
|
}
|
|
17224
17722
|
};
|
|
17225
|
-
return /* @__PURE__ */
|
|
17723
|
+
return /* @__PURE__ */ jsxs117(
|
|
17226
17724
|
"div",
|
|
17227
17725
|
{
|
|
17228
17726
|
ref: containerRef,
|
|
17229
17727
|
className: cn("relative w-full max-w-[var(--max-field-width)]", className),
|
|
17230
17728
|
children: [
|
|
17231
|
-
name && /* @__PURE__ */
|
|
17729
|
+
name && /* @__PURE__ */ jsx177("input", { type: "hidden", name, value: value ? String(value.value) : "" }),
|
|
17232
17730
|
renderTrigger ? renderTrigger({
|
|
17233
17731
|
id: triggerId,
|
|
17234
17732
|
open: isOpen,
|
|
@@ -17250,7 +17748,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17250
17748
|
onClick: handleTriggerClick,
|
|
17251
17749
|
onKeyDown: handleRootTriggerKeyDown,
|
|
17252
17750
|
onBlur
|
|
17253
|
-
}) : /* @__PURE__ */
|
|
17751
|
+
}) : /* @__PURE__ */ jsx177(
|
|
17254
17752
|
AirbnbSelectTrigger,
|
|
17255
17753
|
{
|
|
17256
17754
|
id: triggerId,
|
|
@@ -17278,7 +17776,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17278
17776
|
onBlur
|
|
17279
17777
|
}
|
|
17280
17778
|
),
|
|
17281
|
-
|
|
17779
|
+
isMobile3 ? /* @__PURE__ */ jsx177(
|
|
17282
17780
|
AirbnbSelectMobileContent,
|
|
17283
17781
|
{
|
|
17284
17782
|
open: isOpen,
|
|
@@ -17303,7 +17801,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17303
17801
|
getOptionId: getOptionId2,
|
|
17304
17802
|
noOptionsMessage
|
|
17305
17803
|
}
|
|
17306
|
-
) : /* @__PURE__ */
|
|
17804
|
+
) : /* @__PURE__ */ jsx177(
|
|
17307
17805
|
AirbnbSelectDesktopContent,
|
|
17308
17806
|
{
|
|
17309
17807
|
isOpen,
|
|
@@ -17337,7 +17835,7 @@ var AirbnbSelect = React70.forwardRef(function AirbnbSelect2({
|
|
|
17337
17835
|
});
|
|
17338
17836
|
|
|
17339
17837
|
// src/airbnb-fields/phone-field/PhoneField.tsx
|
|
17340
|
-
import { jsx as
|
|
17838
|
+
import { jsx as jsx178, jsxs as jsxs118 } from "react/jsx-runtime";
|
|
17341
17839
|
function formatPhoneCodeOptionLabel(option) {
|
|
17342
17840
|
const label = String(option.label);
|
|
17343
17841
|
const value = String(option.value);
|
|
@@ -17384,9 +17882,9 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17384
17882
|
const hasInvalidState = Boolean(error) || Boolean(invalid);
|
|
17385
17883
|
const isBlocked = Boolean(disabled) || Boolean(loading);
|
|
17386
17884
|
const isCodeBlocked = isBlocked || Boolean(codeReadOnly);
|
|
17387
|
-
return /* @__PURE__ */
|
|
17388
|
-
name && /* @__PURE__ */
|
|
17389
|
-
codeName && /* @__PURE__ */
|
|
17885
|
+
return /* @__PURE__ */ jsxs118("div", { className: cn("w-full max-w-[var(--max-field-width)]", className), children: [
|
|
17886
|
+
name && /* @__PURE__ */ jsx178("input", { type: "hidden", name, value: combinedValue, disabled }),
|
|
17887
|
+
codeName && /* @__PURE__ */ jsx178(
|
|
17390
17888
|
"input",
|
|
17391
17889
|
{
|
|
17392
17890
|
type: "hidden",
|
|
@@ -17395,7 +17893,7 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17395
17893
|
disabled
|
|
17396
17894
|
}
|
|
17397
17895
|
),
|
|
17398
|
-
numberName && /* @__PURE__ */
|
|
17896
|
+
numberName && /* @__PURE__ */ jsx178(
|
|
17399
17897
|
"input",
|
|
17400
17898
|
{
|
|
17401
17899
|
type: "hidden",
|
|
@@ -17404,7 +17902,7 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17404
17902
|
disabled
|
|
17405
17903
|
}
|
|
17406
17904
|
),
|
|
17407
|
-
topLabel && /* @__PURE__ */
|
|
17905
|
+
topLabel && /* @__PURE__ */ jsx178(
|
|
17408
17906
|
"label",
|
|
17409
17907
|
{
|
|
17410
17908
|
htmlFor: inputId,
|
|
@@ -17412,8 +17910,8 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17412
17910
|
children: topLabel
|
|
17413
17911
|
}
|
|
17414
17912
|
),
|
|
17415
|
-
/* @__PURE__ */
|
|
17416
|
-
/* @__PURE__ */
|
|
17913
|
+
/* @__PURE__ */ jsxs118("div", { className: "flex items-stretch", children: [
|
|
17914
|
+
/* @__PURE__ */ jsx178(
|
|
17417
17915
|
AirbnbSelect,
|
|
17418
17916
|
{
|
|
17419
17917
|
ref,
|
|
@@ -17444,7 +17942,7 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17444
17942
|
onClick,
|
|
17445
17943
|
onKeyDown,
|
|
17446
17944
|
valueLabel
|
|
17447
|
-
}) => /* @__PURE__ */
|
|
17945
|
+
}) => /* @__PURE__ */ jsxs118(
|
|
17448
17946
|
"button",
|
|
17449
17947
|
{
|
|
17450
17948
|
id,
|
|
@@ -17466,8 +17964,8 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17466
17964
|
triggerDisabled ? "cursor-not-allowed opacity-50" : triggerLoading ? "cursor-progress" : "cursor-pointer"
|
|
17467
17965
|
),
|
|
17468
17966
|
children: [
|
|
17469
|
-
/* @__PURE__ */
|
|
17470
|
-
/* @__PURE__ */
|
|
17967
|
+
/* @__PURE__ */ jsx178("span", { children: valueLabel ?? codePlaceholder }),
|
|
17968
|
+
/* @__PURE__ */ jsx178(
|
|
17471
17969
|
ChevronDown5,
|
|
17472
17970
|
{
|
|
17473
17971
|
className: cn("h-5 w-5 transition-transform", open ? "rotate-180" : ""),
|
|
@@ -17479,7 +17977,7 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17479
17977
|
)
|
|
17480
17978
|
}
|
|
17481
17979
|
),
|
|
17482
|
-
/* @__PURE__ */
|
|
17980
|
+
/* @__PURE__ */ jsx178(
|
|
17483
17981
|
AirbnbInput,
|
|
17484
17982
|
{
|
|
17485
17983
|
id: inputId,
|
|
@@ -17511,7 +18009,7 @@ var AirbnbPhoneField = React71.forwardRef(
|
|
|
17511
18009
|
}
|
|
17512
18010
|
)
|
|
17513
18011
|
] }),
|
|
17514
|
-
error && /* @__PURE__ */
|
|
18012
|
+
error && /* @__PURE__ */ jsx178(FieldErrorMessage, { message: error })
|
|
17515
18013
|
] });
|
|
17516
18014
|
}
|
|
17517
18015
|
);
|
|
@@ -17521,8 +18019,8 @@ AirbnbPhoneField.displayName = "AirbnbPhoneField";
|
|
|
17521
18019
|
import * as React72 from "react";
|
|
17522
18020
|
import { ChevronDown as ChevronDown6, Search as Search3 } from "lucide-react";
|
|
17523
18021
|
import { useVirtualizer as useVirtualizer3 } from "@tanstack/react-virtual";
|
|
17524
|
-
import { useCallback as
|
|
17525
|
-
import { jsx as
|
|
18022
|
+
import { useCallback as useCallback49 } from "react";
|
|
18023
|
+
import { jsx as jsx179, jsxs as jsxs119 } from "react/jsx-runtime";
|
|
17526
18024
|
var ROW_HEIGHT = 48;
|
|
17527
18025
|
var DESKTOP_LIST_HEIGHT = 280;
|
|
17528
18026
|
var MOBILE_LIST_HEIGHT = 420;
|
|
@@ -17562,7 +18060,7 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17562
18060
|
noOptionsMessage,
|
|
17563
18061
|
loadingMessage
|
|
17564
18062
|
}, ref) => {
|
|
17565
|
-
const { isMatch:
|
|
18063
|
+
const { isMatch: isMobile3 } = useScreenResize(DEVICE.mobileXL);
|
|
17566
18064
|
const reactId = React72.useId();
|
|
17567
18065
|
const [open, setOpen] = React72.useState(false);
|
|
17568
18066
|
const [internalSearchValue, setInternalSearchValue] = React72.useState("");
|
|
@@ -17597,10 +18095,10 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17597
18095
|
useOutsideClick({
|
|
17598
18096
|
elementRef: containerRef,
|
|
17599
18097
|
onOutsideClick: () => closeSelect(),
|
|
17600
|
-
isDisabled: !open ||
|
|
18098
|
+
isDisabled: !open || isMobile3
|
|
17601
18099
|
});
|
|
17602
18100
|
const handleOnOpenChange = useEvent(onOpenChange);
|
|
17603
|
-
const setSelectOpen =
|
|
18101
|
+
const setSelectOpen = useCallback49(
|
|
17604
18102
|
(nextOpen, options2) => {
|
|
17605
18103
|
setOpen(nextOpen);
|
|
17606
18104
|
handleOnOpenChange?.(nextOpen);
|
|
@@ -17691,7 +18189,7 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17691
18189
|
}
|
|
17692
18190
|
}
|
|
17693
18191
|
}
|
|
17694
|
-
const content = /* @__PURE__ */
|
|
18192
|
+
const content = /* @__PURE__ */ jsx179(
|
|
17695
18193
|
AirbnbSearchableSelectContent,
|
|
17696
18194
|
{
|
|
17697
18195
|
inputId: searchInputId,
|
|
@@ -17710,7 +18208,7 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17710
18208
|
menuClassName,
|
|
17711
18209
|
noOptionsMessage,
|
|
17712
18210
|
loadingMessage,
|
|
17713
|
-
height:
|
|
18211
|
+
height: isMobile3 ? MOBILE_LIST_HEIGHT : DESKTOP_LIST_HEIGHT,
|
|
17714
18212
|
idPrefix: reactId,
|
|
17715
18213
|
onSearchChange: handleSearchChange,
|
|
17716
18214
|
onSearchKeyDown: handleSearchKeyDown,
|
|
@@ -17719,9 +18217,9 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17719
18217
|
}
|
|
17720
18218
|
);
|
|
17721
18219
|
React72.useImperativeHandle(ref, () => triggerRef.current, []);
|
|
17722
|
-
return /* @__PURE__ */
|
|
17723
|
-
name && /* @__PURE__ */
|
|
17724
|
-
/* @__PURE__ */
|
|
18220
|
+
return /* @__PURE__ */ jsxs119("div", { ref: containerRef, className: cn("relative w-full max-w-[425px]", className), children: [
|
|
18221
|
+
name && /* @__PURE__ */ jsx179("input", { type: "hidden", name, value: value ? String(value.value) : "" }),
|
|
18222
|
+
/* @__PURE__ */ jsx179(
|
|
17725
18223
|
AirbnbFieldTrigger,
|
|
17726
18224
|
{
|
|
17727
18225
|
id: `${reactId}-trigger`,
|
|
@@ -17756,7 +18254,7 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17756
18254
|
},
|
|
17757
18255
|
onKeyDown: handleTriggerKeyDown,
|
|
17758
18256
|
onBlur,
|
|
17759
|
-
trailingAdornment: /* @__PURE__ */
|
|
18257
|
+
trailingAdornment: /* @__PURE__ */ jsx179(
|
|
17760
18258
|
ChevronDown6,
|
|
17761
18259
|
{
|
|
17762
18260
|
className: cn(
|
|
@@ -17767,7 +18265,7 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17767
18265
|
)
|
|
17768
18266
|
}
|
|
17769
18267
|
),
|
|
17770
|
-
|
|
18268
|
+
isMobile3 ? /* @__PURE__ */ jsx179(
|
|
17771
18269
|
Drawer,
|
|
17772
18270
|
{
|
|
17773
18271
|
open,
|
|
@@ -17779,13 +18277,13 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
17779
18277
|
}
|
|
17780
18278
|
closeSelect();
|
|
17781
18279
|
},
|
|
17782
|
-
children: /* @__PURE__ */
|
|
17783
|
-
/* @__PURE__ */
|
|
17784
|
-
/* @__PURE__ */
|
|
17785
|
-
/* @__PURE__ */
|
|
18280
|
+
children: /* @__PURE__ */ jsxs119(DrawerContent, { onClose: closeSelect, lockScroll: false, children: [
|
|
18281
|
+
/* @__PURE__ */ jsx179(DrawerTitle, { className: "sr-only", children: mobileTitle ?? label }),
|
|
18282
|
+
/* @__PURE__ */ jsx179(DrawerDescription, { className: "sr-only", children: label }),
|
|
18283
|
+
/* @__PURE__ */ jsx179("div", { className: "px-5 pb-5 pt-1", children: content })
|
|
17786
18284
|
] })
|
|
17787
18285
|
}
|
|
17788
|
-
) : open ? /* @__PURE__ */
|
|
18286
|
+
) : open ? /* @__PURE__ */ jsx179(
|
|
17789
18287
|
"div",
|
|
17790
18288
|
{
|
|
17791
18289
|
className: cn(
|
|
@@ -17852,16 +18350,16 @@ function AirbnbSearchableSelectContent({
|
|
|
17852
18350
|
virtualizer.scrollToIndex(highlightedIndex, { align: "auto" });
|
|
17853
18351
|
}
|
|
17854
18352
|
}, [highlightedIndex, virtualizer]);
|
|
17855
|
-
return /* @__PURE__ */
|
|
17856
|
-
/* @__PURE__ */
|
|
17857
|
-
/* @__PURE__ */
|
|
18353
|
+
return /* @__PURE__ */ jsxs119("div", { className: "p-2", children: [
|
|
18354
|
+
/* @__PURE__ */ jsxs119("div", { className: "relative mb-2", children: [
|
|
18355
|
+
/* @__PURE__ */ jsx179(
|
|
17858
18356
|
Search3,
|
|
17859
18357
|
{
|
|
17860
18358
|
"aria-hidden": "true",
|
|
17861
18359
|
className: "absolute left-4 top-1/2 h-5 w-5 -translate-y-1/2 text-[#9696B9]"
|
|
17862
18360
|
}
|
|
17863
18361
|
),
|
|
17864
|
-
/* @__PURE__ */
|
|
18362
|
+
/* @__PURE__ */ jsx179(
|
|
17865
18363
|
"input",
|
|
17866
18364
|
{
|
|
17867
18365
|
id: inputId,
|
|
@@ -17880,7 +18378,7 @@ function AirbnbSearchableSelectContent({
|
|
|
17880
18378
|
}
|
|
17881
18379
|
)
|
|
17882
18380
|
] }),
|
|
17883
|
-
loading && options.length === 0 ? /* @__PURE__ */
|
|
18381
|
+
loading && options.length === 0 ? /* @__PURE__ */ jsx179("div", { className: "px-4 py-5 text-center text-base leading-6 text-[#6C6C6C]", children: loadingText }) : options.length === 0 ? /* @__PURE__ */ jsx179("div", { className: "px-4 py-5 text-center text-base leading-6 text-[#6C6C6C]", children: emptyMessage }) : /* @__PURE__ */ jsx179(
|
|
17884
18382
|
"div",
|
|
17885
18383
|
{
|
|
17886
18384
|
id: listboxId,
|
|
@@ -17889,7 +18387,7 @@ function AirbnbSearchableSelectContent({
|
|
|
17889
18387
|
"aria-labelledby": labelId,
|
|
17890
18388
|
className: cn("overflow-y-auto outline-none", menuClassName),
|
|
17891
18389
|
style: { height: Math.min(height, rowCount * ROW_HEIGHT) },
|
|
17892
|
-
children: /* @__PURE__ */
|
|
18390
|
+
children: /* @__PURE__ */ jsx179(
|
|
17893
18391
|
"div",
|
|
17894
18392
|
{
|
|
17895
18393
|
className: "relative w-full",
|
|
@@ -17897,7 +18395,7 @@ function AirbnbSearchableSelectContent({
|
|
|
17897
18395
|
children: virtualItems.map((virtualItem) => {
|
|
17898
18396
|
const option = options[virtualItem.index];
|
|
17899
18397
|
if (!option) {
|
|
17900
|
-
return /* @__PURE__ */
|
|
18398
|
+
return /* @__PURE__ */ jsx179(
|
|
17901
18399
|
"div",
|
|
17902
18400
|
{
|
|
17903
18401
|
className: "absolute left-0 top-0 flex w-full items-center px-4 text-base leading-6 text-[#6C6C6C]",
|
|
@@ -17912,7 +18410,7 @@ function AirbnbSearchableSelectContent({
|
|
|
17912
18410
|
}
|
|
17913
18411
|
const isSelected = value?.value === option.value;
|
|
17914
18412
|
const isHighlighted = virtualItem.index === highlightedIndex;
|
|
17915
|
-
return /* @__PURE__ */
|
|
18413
|
+
return /* @__PURE__ */ jsx179(
|
|
17916
18414
|
"button",
|
|
17917
18415
|
{
|
|
17918
18416
|
id: getOptionId(idPrefix, virtualItem.index),
|
|
@@ -17934,7 +18432,7 @@ function AirbnbSearchableSelectContent({
|
|
|
17934
18432
|
height: `${virtualItem.size}px`,
|
|
17935
18433
|
transform: `translateY(${virtualItem.start}px)`
|
|
17936
18434
|
},
|
|
17937
|
-
children: /* @__PURE__ */
|
|
18435
|
+
children: /* @__PURE__ */ jsx179("span", { className: "truncate text-center", children: String(option.label) })
|
|
17938
18436
|
},
|
|
17939
18437
|
`${String(option.value)}-${virtualItem.index}`
|
|
17940
18438
|
);
|
|
@@ -17964,15 +18462,15 @@ function getNextEnabledIndex(options, startIndex, step) {
|
|
|
17964
18462
|
|
|
17965
18463
|
// src/airbnb-fields/search-input/SearchInput.tsx
|
|
17966
18464
|
import * as React73 from "react";
|
|
17967
|
-
import { useTranslation as
|
|
18465
|
+
import { useTranslation as useTranslation40 } from "react-i18next";
|
|
17968
18466
|
import { Search as Search4, X as X10 } from "lucide-react";
|
|
17969
|
-
import { jsx as
|
|
18467
|
+
import { jsx as jsx180, jsxs as jsxs120 } from "react/jsx-runtime";
|
|
17970
18468
|
var AirbnbSearchInput = React73.forwardRef(({ onReset, placeholder, wrapperClassName, ...props }, ref) => {
|
|
17971
|
-
const { t } =
|
|
18469
|
+
const { t } = useTranslation40();
|
|
17972
18470
|
const placeholderText = placeholder || t("search_property") + "...";
|
|
17973
|
-
return /* @__PURE__ */
|
|
17974
|
-
/* @__PURE__ */
|
|
17975
|
-
/* @__PURE__ */
|
|
18471
|
+
return /* @__PURE__ */ jsxs120("div", { className: cn("input-wrapper relative", wrapperClassName), children: [
|
|
18472
|
+
/* @__PURE__ */ jsx180(Search4, { className: "absolute left-4 top-1/2 h-5 w-5 -translate-y-1/2 transform text-[#9696B9]" }),
|
|
18473
|
+
/* @__PURE__ */ jsx180(
|
|
17976
18474
|
"input",
|
|
17977
18475
|
{
|
|
17978
18476
|
...props,
|
|
@@ -17991,13 +18489,13 @@ var AirbnbSearchInput = React73.forwardRef(({ onReset, placeholder, wrapperClass
|
|
|
17991
18489
|
)
|
|
17992
18490
|
}
|
|
17993
18491
|
),
|
|
17994
|
-
onReset && /* @__PURE__ */
|
|
18492
|
+
onReset && /* @__PURE__ */ jsx180(
|
|
17995
18493
|
Button,
|
|
17996
18494
|
{
|
|
17997
18495
|
variant: "ghost",
|
|
17998
18496
|
onClick: onReset,
|
|
17999
18497
|
className: "absolute right-0 top-1/2 h-5 w-5 -translate-y-1/2 transform text-[#9696B9]",
|
|
18000
|
-
children: /* @__PURE__ */
|
|
18498
|
+
children: /* @__PURE__ */ jsx180(X10, { className: "h-5 w-5" })
|
|
18001
18499
|
}
|
|
18002
18500
|
)
|
|
18003
18501
|
] });
|
|
@@ -18177,6 +18675,7 @@ export {
|
|
|
18177
18675
|
LegacyTextarea,
|
|
18178
18676
|
Link,
|
|
18179
18677
|
LoadingBar,
|
|
18678
|
+
MobileWebcam,
|
|
18180
18679
|
Modal,
|
|
18181
18680
|
ModalButton,
|
|
18182
18681
|
ModalLoader,
|