@chekinapp/ui 0.0.113 → 0.0.115
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 +234 -144
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +212 -122
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -12796,6 +12796,7 @@ var import_react_i18next33 = require("react-i18next");
|
|
|
12796
12796
|
// src/dashboard/_select-internals/SelectFieldShell.tsx
|
|
12797
12797
|
var import_react_i18next27 = require("react-i18next");
|
|
12798
12798
|
var import_jsx_runtime146 = require("react/jsx-runtime");
|
|
12799
|
+
var FOCUSABLE_TRIGGER_SELECTOR = 'input:not([type="hidden"]):not([disabled]):not([readonly]), button:not([disabled])';
|
|
12799
12800
|
function SelectFieldShell({
|
|
12800
12801
|
containerRef,
|
|
12801
12802
|
className,
|
|
@@ -12816,13 +12817,22 @@ function SelectFieldShell({
|
|
|
12816
12817
|
}) {
|
|
12817
12818
|
const { t } = (0, import_react_i18next27.useTranslation)();
|
|
12818
12819
|
const wrapperWidth = toCssSize(width);
|
|
12820
|
+
const handleContainerFocus = (event) => {
|
|
12821
|
+
if (event.target !== event.currentTarget) return;
|
|
12822
|
+
const focusable = event.currentTarget.querySelector(
|
|
12823
|
+
FOCUSABLE_TRIGGER_SELECTOR
|
|
12824
|
+
);
|
|
12825
|
+
focusable?.focus();
|
|
12826
|
+
};
|
|
12819
12827
|
return /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)(
|
|
12820
12828
|
"div",
|
|
12821
12829
|
{
|
|
12822
12830
|
ref: containerRef,
|
|
12831
|
+
tabIndex: -1,
|
|
12823
12832
|
onBlur,
|
|
12833
|
+
onFocus: handleContainerFocus,
|
|
12824
12834
|
className: cn(
|
|
12825
|
-
"relative w-full max-w-[var(--field-max-width,296px)]",
|
|
12835
|
+
"relative w-full max-w-[var(--field-max-width,296px)] outline-none",
|
|
12826
12836
|
disabled && !loading && "cursor-not-allowed opacity-50",
|
|
12827
12837
|
loading && "cursor-progress opacity-50",
|
|
12828
12838
|
className
|
|
@@ -12894,6 +12904,7 @@ function defaultIsOptionSelected(option, selectValue) {
|
|
|
12894
12904
|
}
|
|
12895
12905
|
|
|
12896
12906
|
// src/dashboard/_select-internals/slots/DefaultOption.tsx
|
|
12907
|
+
var import_lucide_react43 = require("lucide-react");
|
|
12897
12908
|
var import_jsx_runtime147 = require("react/jsx-runtime");
|
|
12898
12909
|
function DefaultOption(props) {
|
|
12899
12910
|
const {
|
|
@@ -12902,7 +12913,7 @@ function DefaultOption(props) {
|
|
|
12902
12913
|
isSelected,
|
|
12903
12914
|
isHighlighted,
|
|
12904
12915
|
isDisabled,
|
|
12905
|
-
|
|
12916
|
+
isMulti,
|
|
12906
12917
|
id,
|
|
12907
12918
|
onClick,
|
|
12908
12919
|
onHover,
|
|
@@ -12930,15 +12941,26 @@ function DefaultOption(props) {
|
|
|
12930
12941
|
onClick: () => onClick(option),
|
|
12931
12942
|
onMouseMove: () => onHover(index),
|
|
12932
12943
|
className: cn(
|
|
12933
|
-
"flex w-full items-start justify-between
|
|
12934
|
-
|
|
12935
|
-
isHighlighted && !
|
|
12936
|
-
isSelected && "
|
|
12937
|
-
isDisabled && "cursor-
|
|
12944
|
+
"group relative flex w-full items-start justify-between gap-2 rounded-md border-0 bg-transparent px-3 py-2.5 text-left text-[15px] font-medium leading-5 text-[var(--chekin-color-brand-navy)] outline-none transition-colors duration-100",
|
|
12945
|
+
!isDisabled && "cursor-pointer hover:bg-[var(--chekin-color-surface-pressed)]",
|
|
12946
|
+
isHighlighted && !isDisabled && "bg-[var(--chekin-color-surface-pressed)]",
|
|
12947
|
+
isSelected && "bg-[var(--chekin-color-surface-autocomplete)] font-semibold text-[var(--chekin-color-brand-blue)]",
|
|
12948
|
+
isDisabled && "cursor-not-allowed text-[var(--chekin-color-gray-2)]"
|
|
12938
12949
|
),
|
|
12939
12950
|
children: [
|
|
12940
|
-
/* @__PURE__ */ (0, import_jsx_runtime147.jsx)("span", { className: "block break-words", children: labelContent }),
|
|
12941
|
-
option.description && /* @__PURE__ */ (0, import_jsx_runtime147.jsx)("span", { className: "ml-
|
|
12951
|
+
/* @__PURE__ */ (0, import_jsx_runtime147.jsx)("span", { className: "block min-w-0 break-words", children: labelContent }),
|
|
12952
|
+
option.description && /* @__PURE__ */ (0, import_jsx_runtime147.jsx)("span", { className: "ml-auto shrink-0 self-center text-[12px] font-medium italic text-[var(--chekin-color-gray-1)]", children: option.description }),
|
|
12953
|
+
isSelected && /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(
|
|
12954
|
+
import_lucide_react43.Check,
|
|
12955
|
+
{
|
|
12956
|
+
"aria-hidden": "true",
|
|
12957
|
+
className: cn(
|
|
12958
|
+
"shrink-0 text-[var(--chekin-color-brand-blue)]",
|
|
12959
|
+
isMulti ? "ml-1 mt-0.5 h-3.5 w-3.5" : "ml-2 mt-0.5 h-4 w-4"
|
|
12960
|
+
),
|
|
12961
|
+
strokeWidth: 2.5
|
|
12962
|
+
}
|
|
12963
|
+
)
|
|
12942
12964
|
]
|
|
12943
12965
|
}
|
|
12944
12966
|
);
|
|
@@ -12970,7 +12992,8 @@ function SelectMenu({
|
|
|
12970
12992
|
components,
|
|
12971
12993
|
inputValue = "",
|
|
12972
12994
|
formatOptionLabel,
|
|
12973
|
-
isOptionSelected: isOptionSelected2
|
|
12995
|
+
isOptionSelected: isOptionSelected2,
|
|
12996
|
+
onMenuScrollToBottom
|
|
12974
12997
|
}) {
|
|
12975
12998
|
const { t } = (0, import_react_i18next28.useTranslation)();
|
|
12976
12999
|
const emptyMessage = noOptionsMessage?.() ?? t("no_options");
|
|
@@ -12981,6 +13004,19 @@ function SelectMenu({
|
|
|
12981
13004
|
() => selectedValues ?? (selectedValue ? [selectedValue] : []),
|
|
12982
13005
|
[selectedValues, selectedValue]
|
|
12983
13006
|
);
|
|
13007
|
+
const wasAtBottomRef = React45.useRef(false);
|
|
13008
|
+
const handleScroll = React45.useCallback(
|
|
13009
|
+
(event) => {
|
|
13010
|
+
if (!onMenuScrollToBottom) return;
|
|
13011
|
+
const target = event.currentTarget;
|
|
13012
|
+
const atBottom = target.scrollHeight - target.scrollTop - target.clientHeight <= 1;
|
|
13013
|
+
if (atBottom && !wasAtBottomRef.current) {
|
|
13014
|
+
onMenuScrollToBottom(event);
|
|
13015
|
+
}
|
|
13016
|
+
wasAtBottomRef.current = atBottom;
|
|
13017
|
+
},
|
|
13018
|
+
[onMenuScrollToBottom]
|
|
13019
|
+
);
|
|
12984
13020
|
return /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(
|
|
12985
13021
|
"div",
|
|
12986
13022
|
{
|
|
@@ -12993,12 +13029,14 @@ function SelectMenu({
|
|
|
12993
13029
|
"aria-multiselectable": isMulti,
|
|
12994
13030
|
"aria-activedescendant": highlightedIndex !== void 0 && highlightedIndex >= 0 ? getOptionId2(highlightedIndex) : void 0,
|
|
12995
13031
|
onKeyDown,
|
|
13032
|
+
onScroll: onMenuScrollToBottom ? handleScroll : void 0,
|
|
12996
13033
|
className: cn(
|
|
12997
|
-
"
|
|
13034
|
+
"max-h-[300px] overflow-y-auto overscroll-contain p-1.5 outline-none",
|
|
13035
|
+
"[scrollbar-color:var(--chekin-color-gray-3)_transparent] [scrollbar-width:thin] [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-[var(--chekin-color-gray-3)] [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar]:w-1.5",
|
|
12998
13036
|
menuClassName
|
|
12999
13037
|
),
|
|
13000
13038
|
children: [
|
|
13001
|
-
!hasOptions && (emptyContent ?? /* @__PURE__ */ (0, import_jsx_runtime148.jsx)("div", { className: "
|
|
13039
|
+
!hasOptions && (emptyContent ?? /* @__PURE__ */ (0, import_jsx_runtime148.jsx)("div", { className: "px-3 py-3 text-left text-[14px] font-medium text-[var(--chekin-color-gray-1)]", children: emptyMessage })),
|
|
13002
13040
|
options.map((option, index) => {
|
|
13003
13041
|
const isSelected = isOptionSelected2 ? isOptionSelected2(option, selectedList) : isOptionSelected(option, selectedValue, selectedValues);
|
|
13004
13042
|
const isHighlighted = index === highlightedIndex;
|
|
@@ -13088,7 +13126,7 @@ function SelectMenuPanel({
|
|
|
13088
13126
|
"div",
|
|
13089
13127
|
{
|
|
13090
13128
|
className: cn(
|
|
13091
|
-
"absolute left-0 right-0 top-full z-
|
|
13129
|
+
"absolute left-0 right-0 top-full z-50 mt-1.5 overflow-hidden rounded-lg border border-[var(--chekin-color-gray-3)] bg-white shadow-[0_4px_8px_-2px_rgba(22,22,67,0.06),0_16px_32px_-12px_rgba(33,72,255,0.18)] ring-1 ring-black/[0.02] animate-in fade-in-0 zoom-in-95 slide-in-from-top-1 duration-150",
|
|
13092
13130
|
className
|
|
13093
13131
|
),
|
|
13094
13132
|
children
|
|
@@ -13097,7 +13135,7 @@ function SelectMenuPanel({
|
|
|
13097
13135
|
}
|
|
13098
13136
|
|
|
13099
13137
|
// src/dashboard/_select-internals/SelectSearchInput.tsx
|
|
13100
|
-
var
|
|
13138
|
+
var import_lucide_react44 = require("lucide-react");
|
|
13101
13139
|
var import_jsx_runtime150 = require("react/jsx-runtime");
|
|
13102
13140
|
function SelectSearchInput({
|
|
13103
13141
|
inputRef,
|
|
@@ -13108,12 +13146,12 @@ function SelectSearchInput({
|
|
|
13108
13146
|
onChange,
|
|
13109
13147
|
onKeyDown
|
|
13110
13148
|
}) {
|
|
13111
|
-
return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("div", { className: "border-b border-[
|
|
13149
|
+
return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("div", { className: "border-b border-[var(--chekin-color-gray-3)] bg-white p-2", children: /* @__PURE__ */ (0, import_jsx_runtime150.jsxs)("div", { className: "relative", children: [
|
|
13112
13150
|
/* @__PURE__ */ (0, import_jsx_runtime150.jsx)(
|
|
13113
|
-
|
|
13151
|
+
import_lucide_react44.Search,
|
|
13114
13152
|
{
|
|
13115
13153
|
"aria-hidden": "true",
|
|
13116
|
-
className: "pointer-events-none absolute left-
|
|
13154
|
+
className: "pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-[var(--chekin-color-gray-2)]"
|
|
13117
13155
|
}
|
|
13118
13156
|
),
|
|
13119
13157
|
/* @__PURE__ */ (0, import_jsx_runtime150.jsx)(
|
|
@@ -13128,14 +13166,14 @@ function SelectSearchInput({
|
|
|
13128
13166
|
autoComplete: "off",
|
|
13129
13167
|
"aria-controls": listboxId,
|
|
13130
13168
|
"aria-activedescendant": activeOptionId,
|
|
13131
|
-
className: "m-0 box-border h-9 w-full rounded-md border border-[var(--chekin-color-gray-3)] bg-white
|
|
13169
|
+
className: "m-0 box-border h-9 w-full rounded-md border border-[var(--chekin-color-gray-3)] bg-white pl-8 pr-3 text-[14px] font-medium text-[var(--chekin-color-brand-navy)] outline-none transition-colors placeholder:text-[var(--chekin-color-gray-2)] hover:border-[var(--chekin-color-gray-2)] focus:border-[var(--chekin-color-brand-blue)] focus:ring-2 focus:ring-[var(--chekin-color-brand-blue)]/15"
|
|
13132
13170
|
}
|
|
13133
13171
|
)
|
|
13134
13172
|
] }) });
|
|
13135
13173
|
}
|
|
13136
13174
|
|
|
13137
13175
|
// src/dashboard/_select-internals/SelectTrigger.tsx
|
|
13138
|
-
var
|
|
13176
|
+
var import_lucide_react45 = require("lucide-react");
|
|
13139
13177
|
var import_jsx_runtime151 = require("react/jsx-runtime");
|
|
13140
13178
|
function SelectTrigger({
|
|
13141
13179
|
triggerRef,
|
|
@@ -13152,6 +13190,7 @@ function SelectTrigger({
|
|
|
13152
13190
|
invalid,
|
|
13153
13191
|
placeholder,
|
|
13154
13192
|
valueLabel,
|
|
13193
|
+
leftIcon,
|
|
13155
13194
|
onClick,
|
|
13156
13195
|
onKeyDown,
|
|
13157
13196
|
onBlur
|
|
@@ -13175,15 +13214,17 @@ function SelectTrigger({
|
|
|
13175
13214
|
onKeyDown,
|
|
13176
13215
|
onBlur,
|
|
13177
13216
|
className: cn(
|
|
13178
|
-
"relative m-0 box-border flex h-12 w-full cursor-pointer items-center justify-between gap-2 rounded-[6px] border-0
|
|
13217
|
+
"relative m-0 box-border flex h-12 w-full cursor-pointer items-center justify-between gap-2 rounded-[6px] border-0 pr-4 text-left text-[16px] font-medium leading-5 outline-none transition-colors duration-200",
|
|
13218
|
+
leftIcon ? "pl-10" : "pl-4",
|
|
13179
13219
|
isEmpty ? "bg-[var(--empty-field-background)] text-[var(--chekin-color-gray-1)]" : "bg-transparent text-[var(--chekin-color-brand-navy)]",
|
|
13180
13220
|
disabled && !loading && "cursor-not-allowed opacity-50",
|
|
13181
13221
|
loading && "!cursor-progress"
|
|
13182
13222
|
),
|
|
13183
13223
|
children: [
|
|
13224
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)("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__ */ (0, import_jsx_runtime151.jsx)("span", { className: "flex h-full w-10 items-center justify-center", children: leftIcon }) }),
|
|
13184
13225
|
/* @__PURE__ */ (0, import_jsx_runtime151.jsx)("span", { id: valueId, className: "block min-w-0 flex-1 truncate text-left", children: valueLabel ?? (isOpen ? placeholder : null) }),
|
|
13185
13226
|
/* @__PURE__ */ (0, import_jsx_runtime151.jsx)("span", { className: "pointer-events-none flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(
|
|
13186
|
-
|
|
13227
|
+
import_lucide_react45.ChevronDown,
|
|
13187
13228
|
{
|
|
13188
13229
|
size: 16,
|
|
13189
13230
|
className: cn(
|
|
@@ -13198,7 +13239,7 @@ function SelectTrigger({
|
|
|
13198
13239
|
}
|
|
13199
13240
|
|
|
13200
13241
|
// src/dashboard/_select-internals/ComboboxTrigger.tsx
|
|
13201
|
-
var
|
|
13242
|
+
var import_lucide_react46 = require("lucide-react");
|
|
13202
13243
|
var import_react_i18next30 = require("react-i18next");
|
|
13203
13244
|
var import_jsx_runtime152 = require("react/jsx-runtime");
|
|
13204
13245
|
function ComboboxTrigger({
|
|
@@ -13230,6 +13271,7 @@ function ComboboxTrigger({
|
|
|
13230
13271
|
onClear,
|
|
13231
13272
|
clearLabel,
|
|
13232
13273
|
leadingContent,
|
|
13274
|
+
leftIcon,
|
|
13233
13275
|
containerClassName,
|
|
13234
13276
|
inputClassName,
|
|
13235
13277
|
hideIndicator,
|
|
@@ -13260,11 +13302,13 @@ function ComboboxTrigger({
|
|
|
13260
13302
|
containerClassName
|
|
13261
13303
|
),
|
|
13262
13304
|
children: [
|
|
13305
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime152.jsx)("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__ */ (0, import_jsx_runtime152.jsx)("span", { className: "flex h-full w-10 items-center justify-center", children: leftIcon }) }),
|
|
13263
13306
|
/* @__PURE__ */ (0, import_jsx_runtime152.jsxs)(
|
|
13264
13307
|
"div",
|
|
13265
13308
|
{
|
|
13266
13309
|
className: cn(
|
|
13267
|
-
"flex min-w-0 flex-1 items-center gap-2 py-[10px]
|
|
13310
|
+
"flex min-w-0 flex-1 items-center gap-2 py-[10px]",
|
|
13311
|
+
leftIcon ? "pl-10" : "pl-4",
|
|
13268
13312
|
isMulti && "flex-wrap"
|
|
13269
13313
|
),
|
|
13270
13314
|
children: [
|
|
@@ -13307,7 +13351,7 @@ function ComboboxTrigger({
|
|
|
13307
13351
|
onClick: onClear,
|
|
13308
13352
|
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]",
|
|
13309
13353
|
"aria-label": clearLabel,
|
|
13310
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime152.jsx)(
|
|
13354
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime152.jsx)(import_lucide_react46.SquareX, { size: 15, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
13311
13355
|
}
|
|
13312
13356
|
),
|
|
13313
13357
|
!hideIndicator && /* @__PURE__ */ (0, import_jsx_runtime152.jsx)(
|
|
@@ -13763,7 +13807,7 @@ function useSelectState(params) {
|
|
|
13763
13807
|
}
|
|
13764
13808
|
|
|
13765
13809
|
// src/dashboard/_select-internals/slots/DefaultMultiValueChip.tsx
|
|
13766
|
-
var
|
|
13810
|
+
var import_lucide_react47 = require("lucide-react");
|
|
13767
13811
|
var import_react_i18next31 = require("react-i18next");
|
|
13768
13812
|
var import_jsx_runtime153 = require("react/jsx-runtime");
|
|
13769
13813
|
function DefaultMultiValueChip({
|
|
@@ -13773,8 +13817,8 @@ function DefaultMultiValueChip({
|
|
|
13773
13817
|
}) {
|
|
13774
13818
|
const { t } = (0, import_react_i18next31.useTranslation)();
|
|
13775
13819
|
const labelText = typeof option.label === "string" ? option.label : String(option.value);
|
|
13776
|
-
return /* @__PURE__ */ (0, import_jsx_runtime153.jsxs)("span", { className: "inline-flex items-center gap-
|
|
13777
|
-
/* @__PURE__ */ (0, import_jsx_runtime153.jsx)("span", { className: "whitespace-nowrap", children: option.label }),
|
|
13820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime153.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-md border border-[var(--chekin-color-gray-3)] bg-[var(--chekin-color-surface-pressed)] py-0.5 pl-2 pr-1 text-[13px] font-medium text-[var(--chekin-color-brand-navy)] transition-colors", children: [
|
|
13821
|
+
/* @__PURE__ */ (0, import_jsx_runtime153.jsx)("span", { className: "whitespace-nowrap leading-5", children: option.label }),
|
|
13778
13822
|
!readOnly && /* @__PURE__ */ (0, import_jsx_runtime153.jsx)(
|
|
13779
13823
|
"button",
|
|
13780
13824
|
{
|
|
@@ -13783,9 +13827,9 @@ function DefaultMultiValueChip({
|
|
|
13783
13827
|
event.stopPropagation();
|
|
13784
13828
|
onRemove();
|
|
13785
13829
|
},
|
|
13786
|
-
className: "flex h-
|
|
13830
|
+
className: "flex h-4 w-4 items-center justify-center rounded-sm border-0 bg-transparent p-0 text-[var(--chekin-color-gray-1)] outline-none transition-colors hover:bg-white/70 hover:text-[var(--chekin-color-brand-navy)] focus-visible:ring-2 focus-visible:ring-[var(--chekin-color-brand-blue)]/30",
|
|
13787
13831
|
"aria-label": t("remove_item", { label: labelText }),
|
|
13788
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime153.jsx)(
|
|
13832
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime153.jsx)(import_lucide_react47.X, { size: 12, strokeWidth: 2.5 })
|
|
13789
13833
|
}
|
|
13790
13834
|
)
|
|
13791
13835
|
] });
|
|
@@ -13826,6 +13870,7 @@ function DefaultControl(props) {
|
|
|
13826
13870
|
clearLabel,
|
|
13827
13871
|
hideIndicator,
|
|
13828
13872
|
autoFocus,
|
|
13873
|
+
leftIcon,
|
|
13829
13874
|
components
|
|
13830
13875
|
} = props;
|
|
13831
13876
|
const Chip = components.MultiValueChip ?? DefaultMultiValueChip;
|
|
@@ -13863,6 +13908,7 @@ function DefaultControl(props) {
|
|
|
13863
13908
|
clearLabel,
|
|
13864
13909
|
hideIndicator,
|
|
13865
13910
|
autoFocus,
|
|
13911
|
+
leftIcon,
|
|
13866
13912
|
leadingContent: isMulti ? selectedOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(
|
|
13867
13913
|
Chip,
|
|
13868
13914
|
{
|
|
@@ -13893,7 +13939,8 @@ function StaticControl(props) {
|
|
|
13893
13939
|
disabled,
|
|
13894
13940
|
valueLabel,
|
|
13895
13941
|
placeholder,
|
|
13896
|
-
onContainerClick
|
|
13942
|
+
onContainerClick,
|
|
13943
|
+
leftIcon
|
|
13897
13944
|
} = props;
|
|
13898
13945
|
return /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(
|
|
13899
13946
|
SelectTrigger,
|
|
@@ -13911,6 +13958,7 @@ function StaticControl(props) {
|
|
|
13911
13958
|
invalid,
|
|
13912
13959
|
placeholder,
|
|
13913
13960
|
valueLabel,
|
|
13961
|
+
leftIcon,
|
|
13914
13962
|
onClick: onContainerClick,
|
|
13915
13963
|
onKeyDown: () => void 0
|
|
13916
13964
|
}
|
|
@@ -13942,7 +13990,8 @@ function DefaultMenuList(props) {
|
|
|
13942
13990
|
components,
|
|
13943
13991
|
inputValue,
|
|
13944
13992
|
formatOptionLabel,
|
|
13945
|
-
isOptionSelected: isOptionSelected2
|
|
13993
|
+
isOptionSelected: isOptionSelected2,
|
|
13994
|
+
onMenuScrollToBottom
|
|
13946
13995
|
} = props;
|
|
13947
13996
|
return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(
|
|
13948
13997
|
SelectMenu,
|
|
@@ -13969,7 +14018,8 @@ function DefaultMenuList(props) {
|
|
|
13969
14018
|
components,
|
|
13970
14019
|
inputValue,
|
|
13971
14020
|
formatOptionLabel,
|
|
13972
|
-
isOptionSelected: isOptionSelected2
|
|
14021
|
+
isOptionSelected: isOptionSelected2,
|
|
14022
|
+
onMenuScrollToBottom
|
|
13973
14023
|
}
|
|
13974
14024
|
);
|
|
13975
14025
|
}
|
|
@@ -14059,7 +14109,9 @@ function SelectInternal(props, ref) {
|
|
|
14059
14109
|
components: userComponents,
|
|
14060
14110
|
onInputChange,
|
|
14061
14111
|
searchPosition = "trigger",
|
|
14062
|
-
menuHeader
|
|
14112
|
+
menuHeader,
|
|
14113
|
+
onMenuScrollToBottom,
|
|
14114
|
+
leftIcon
|
|
14063
14115
|
} = props;
|
|
14064
14116
|
const isSearchInDropdown = searchPosition === "dropdown";
|
|
14065
14117
|
const isMulti = props.isMulti === true;
|
|
@@ -14181,6 +14233,7 @@ function SelectInternal(props, ref) {
|
|
|
14181
14233
|
clearLabel: isMulti ? t("clear_all") : t("clear"),
|
|
14182
14234
|
hideIndicator,
|
|
14183
14235
|
autoFocus,
|
|
14236
|
+
leftIcon,
|
|
14184
14237
|
components
|
|
14185
14238
|
}
|
|
14186
14239
|
),
|
|
@@ -14199,7 +14252,8 @@ function SelectInternal(props, ref) {
|
|
|
14199
14252
|
legend: resolvedLabel,
|
|
14200
14253
|
label: resolvedLabel,
|
|
14201
14254
|
tooltip,
|
|
14202
|
-
onClick: state.handleContainerClick
|
|
14255
|
+
onClick: state.handleContainerClick,
|
|
14256
|
+
labelClassName: leftIcon ? "pl-[28px]" : void 0
|
|
14203
14257
|
}
|
|
14204
14258
|
),
|
|
14205
14259
|
/* @__PURE__ */ (0, import_jsx_runtime158.jsxs)(
|
|
@@ -14250,7 +14304,8 @@ function SelectInternal(props, ref) {
|
|
|
14250
14304
|
components,
|
|
14251
14305
|
inputValue: state.inputValue,
|
|
14252
14306
|
formatOptionLabel,
|
|
14253
|
-
isOptionSelected: isOptionSelected2
|
|
14307
|
+
isOptionSelected: isOptionSelected2,
|
|
14308
|
+
onMenuScrollToBottom
|
|
14254
14309
|
}
|
|
14255
14310
|
),
|
|
14256
14311
|
state.canCreateNewOption && /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(
|
|
@@ -14314,7 +14369,8 @@ function VirtualMenuList(props) {
|
|
|
14314
14369
|
components,
|
|
14315
14370
|
inputValue = "",
|
|
14316
14371
|
formatOptionLabel,
|
|
14317
|
-
isOptionSelected: isOptionSelectedProp
|
|
14372
|
+
isOptionSelected: isOptionSelectedProp,
|
|
14373
|
+
onMenuScrollToBottom
|
|
14318
14374
|
} = props;
|
|
14319
14375
|
const {
|
|
14320
14376
|
canLoadMore,
|
|
@@ -14362,6 +14418,19 @@ function VirtualMenuList(props) {
|
|
|
14362
14418
|
const lastOptionIndex = options.length - 1;
|
|
14363
14419
|
const emptyMessage = noOptionsMessage?.() ?? t("no_options");
|
|
14364
14420
|
const isOptionSelected2 = (option) => isOptionSelectedProp ? isOptionSelectedProp(option, selectedOptions) : selectedOptions.some((s) => s.value === option.value);
|
|
14421
|
+
const wasAtBottomRef = React51.useRef(false);
|
|
14422
|
+
const handleScroll = React51.useCallback(
|
|
14423
|
+
(event) => {
|
|
14424
|
+
if (!onMenuScrollToBottom) return;
|
|
14425
|
+
const target = event.currentTarget;
|
|
14426
|
+
const atBottom = target.scrollHeight - target.scrollTop - target.clientHeight <= 1;
|
|
14427
|
+
if (atBottom && !wasAtBottomRef.current) {
|
|
14428
|
+
onMenuScrollToBottom(event);
|
|
14429
|
+
}
|
|
14430
|
+
wasAtBottomRef.current = atBottom;
|
|
14431
|
+
},
|
|
14432
|
+
[onMenuScrollToBottom]
|
|
14433
|
+
);
|
|
14365
14434
|
if (options.length === 0) {
|
|
14366
14435
|
return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)("div", { className: "min-h-[75px] px-4 pb-[19px] pt-[17px]", children: isLoadingMore ? /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)(
|
|
14367
14436
|
"div",
|
|
@@ -14390,6 +14459,7 @@ function VirtualMenuList(props) {
|
|
|
14390
14459
|
ref: scrollRef,
|
|
14391
14460
|
className: cn("overflow-y-auto", menuClassName),
|
|
14392
14461
|
style: { height: `${measuredListHeight}px` },
|
|
14462
|
+
onScroll: onMenuScrollToBottom ? handleScroll : void 0,
|
|
14393
14463
|
children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(
|
|
14394
14464
|
"div",
|
|
14395
14465
|
{
|
|
@@ -14871,7 +14941,6 @@ function SelectCheckboxOption(props) {
|
|
|
14871
14941
|
isSelected,
|
|
14872
14942
|
isHighlighted,
|
|
14873
14943
|
isDisabled,
|
|
14874
|
-
isLast,
|
|
14875
14944
|
id,
|
|
14876
14945
|
onClick,
|
|
14877
14946
|
onHover,
|
|
@@ -14891,11 +14960,11 @@ function SelectCheckboxOption(props) {
|
|
|
14891
14960
|
onClick: () => onClick(option),
|
|
14892
14961
|
onMouseMove: () => onHover(index),
|
|
14893
14962
|
className: cn(
|
|
14894
|
-
"flex w-full items-center gap-3
|
|
14895
|
-
|
|
14963
|
+
"flex w-full items-center gap-3 rounded-md border-0 bg-transparent px-3 py-2 text-left text-[15px] font-medium leading-5 text-[var(--chekin-color-brand-navy)] outline-none transition-colors duration-100",
|
|
14964
|
+
!isDisabled && "cursor-pointer hover:bg-[var(--chekin-color-surface-pressed)]",
|
|
14896
14965
|
isHighlighted && !isDisabled && "bg-[var(--chekin-color-surface-pressed)]",
|
|
14897
|
-
isSelected && "font-
|
|
14898
|
-
isDisabled && "cursor-
|
|
14966
|
+
isSelected && "bg-[var(--chekin-color-surface-autocomplete)] font-semibold text-[var(--chekin-color-brand-blue)]",
|
|
14967
|
+
isDisabled && "cursor-not-allowed text-[var(--chekin-color-gray-2)]"
|
|
14899
14968
|
),
|
|
14900
14969
|
children: [
|
|
14901
14970
|
/* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
|
|
@@ -14908,9 +14977,9 @@ function SelectCheckboxOption(props) {
|
|
|
14908
14977
|
className: "pointer-events-none shrink-0"
|
|
14909
14978
|
}
|
|
14910
14979
|
),
|
|
14911
|
-
/* @__PURE__ */ (0, import_jsx_runtime167.jsxs)("span", { className: "flex min-w-0 flex-1 items-
|
|
14980
|
+
/* @__PURE__ */ (0, import_jsx_runtime167.jsxs)("span", { className: "flex min-w-0 flex-1 items-center justify-between gap-2", children: [
|
|
14912
14981
|
/* @__PURE__ */ (0, import_jsx_runtime167.jsx)("span", { className: "block break-words", children: option.label }),
|
|
14913
|
-
option.description && /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("span", { className: "shrink-0 text-[12px] font-
|
|
14982
|
+
option.description && /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("span", { className: "shrink-0 text-[12px] font-medium italic text-[var(--chekin-color-gray-1)]", children: option.description })
|
|
14914
14983
|
] })
|
|
14915
14984
|
]
|
|
14916
14985
|
}
|
|
@@ -14918,7 +14987,7 @@ function SelectCheckboxOption(props) {
|
|
|
14918
14987
|
}
|
|
14919
14988
|
|
|
14920
14989
|
// src/dashboard/select-checkboxes/CountTrigger.tsx
|
|
14921
|
-
var
|
|
14990
|
+
var import_lucide_react48 = require("lucide-react");
|
|
14922
14991
|
var import_react_i18next36 = require("react-i18next");
|
|
14923
14992
|
var import_jsx_runtime168 = require("react/jsx-runtime");
|
|
14924
14993
|
function createCountTrigger(opts) {
|
|
@@ -14939,7 +15008,8 @@ function createCountTrigger(opts) {
|
|
|
14939
15008
|
disabled,
|
|
14940
15009
|
placeholder,
|
|
14941
15010
|
selectedOptions,
|
|
14942
|
-
onContainerClick
|
|
15011
|
+
onContainerClick,
|
|
15012
|
+
leftIcon
|
|
14943
15013
|
} = props;
|
|
14944
15014
|
const count = selectedOptions.length;
|
|
14945
15015
|
const total = totalCount ?? count;
|
|
@@ -14961,15 +15031,17 @@ function createCountTrigger(opts) {
|
|
|
14961
15031
|
disabled: isBlocked,
|
|
14962
15032
|
onClick: onContainerClick,
|
|
14963
15033
|
className: cn(
|
|
14964
|
-
"relative m-0 box-border flex h-12 w-full cursor-pointer items-center justify-between gap-2 rounded-[6px] border-0
|
|
15034
|
+
"relative m-0 box-border flex h-12 w-full cursor-pointer items-center justify-between gap-2 rounded-[6px] border-0 pr-4 text-left text-[16px] font-medium leading-5 outline-none transition-colors duration-200",
|
|
15035
|
+
leftIcon ? "pl-10" : "pl-4",
|
|
14965
15036
|
isEmpty ? "bg-[var(--empty-field-background)] text-[var(--chekin-color-gray-1)]" : "bg-transparent text-[var(--chekin-color-brand-navy)]",
|
|
14966
15037
|
disabled && !loading && "cursor-not-allowed opacity-50",
|
|
14967
15038
|
loading && "!cursor-progress"
|
|
14968
15039
|
),
|
|
14969
15040
|
children: [
|
|
15041
|
+
leftIcon && /* @__PURE__ */ (0, import_jsx_runtime168.jsx)("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__ */ (0, import_jsx_runtime168.jsx)("span", { className: "flex h-full w-10 items-center justify-center", children: leftIcon }) }),
|
|
14970
15042
|
/* @__PURE__ */ (0, import_jsx_runtime168.jsx)("span", { id: valueId, className: "block min-w-0 flex-1 truncate text-left", children: display }),
|
|
14971
15043
|
/* @__PURE__ */ (0, import_jsx_runtime168.jsx)("span", { className: "pointer-events-none flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: /* @__PURE__ */ (0, import_jsx_runtime168.jsx)(
|
|
14972
|
-
|
|
15044
|
+
import_lucide_react48.ChevronDown,
|
|
14973
15045
|
{
|
|
14974
15046
|
size: 16,
|
|
14975
15047
|
className: cn(
|
|
@@ -15355,7 +15427,7 @@ var Textarea = React61.forwardRef(function Textarea2({
|
|
|
15355
15427
|
|
|
15356
15428
|
// src/dashboard/datepicker/Datepicker.tsx
|
|
15357
15429
|
var React63 = __toESM(require("react"), 1);
|
|
15358
|
-
var
|
|
15430
|
+
var import_lucide_react49 = require("lucide-react");
|
|
15359
15431
|
var import_react_i18next39 = require("react-i18next");
|
|
15360
15432
|
|
|
15361
15433
|
// src/airbnb-fields/datepicker/useDatePickerWheel.ts
|
|
@@ -16104,7 +16176,11 @@ var Datepicker = React63.forwardRef(
|
|
|
16104
16176
|
const [monthInputValue, setMonthInputValue] = React63.useState("");
|
|
16105
16177
|
const [monthHighlightIndex, setMonthHighlightIndex] = React63.useState(-1);
|
|
16106
16178
|
const isMobile3 = useIsMobile();
|
|
16107
|
-
React63.useImperativeHandle(
|
|
16179
|
+
React63.useImperativeHandle(
|
|
16180
|
+
ref,
|
|
16181
|
+
() => dayInputRef.current ?? mobileTriggerRef.current,
|
|
16182
|
+
[isMobile3]
|
|
16183
|
+
);
|
|
16108
16184
|
React63.useEffect(() => {
|
|
16109
16185
|
if (!isControlled) return;
|
|
16110
16186
|
const next = partsFromDate(value ?? null);
|
|
@@ -16358,7 +16434,7 @@ var Datepicker = React63.forwardRef(
|
|
|
16358
16434
|
children: [
|
|
16359
16435
|
/* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { className: "block min-w-0 flex-1 truncate text-left", children: triggerText ?? (isWheelOpen ? mobilePlaceholder : null) }),
|
|
16360
16436
|
/* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { className: "pointer-events-none flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
16361
|
-
|
|
16437
|
+
import_lucide_react49.ChevronDown,
|
|
16362
16438
|
{
|
|
16363
16439
|
size: 16,
|
|
16364
16440
|
className: cn(
|
|
@@ -16443,7 +16519,7 @@ var Datepicker = React63.forwardRef(
|
|
|
16443
16519
|
}
|
|
16444
16520
|
),
|
|
16445
16521
|
/* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
16446
|
-
|
|
16522
|
+
import_lucide_react49.ChevronDown,
|
|
16447
16523
|
{
|
|
16448
16524
|
size: 14,
|
|
16449
16525
|
onMouseDown: (event) => {
|
|
@@ -16768,7 +16844,7 @@ function resolveRangeSelection({
|
|
|
16768
16844
|
}
|
|
16769
16845
|
|
|
16770
16846
|
// src/dashboard/date-range-picker/components/DateRangeInputs.tsx
|
|
16771
|
-
var
|
|
16847
|
+
var import_lucide_react50 = require("lucide-react");
|
|
16772
16848
|
var import_jsx_runtime175 = require("react/jsx-runtime");
|
|
16773
16849
|
var DEFAULT_PLACEHOLDER = "00-00-0000";
|
|
16774
16850
|
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)]";
|
|
@@ -16888,7 +16964,7 @@ function DateRangeInputs({
|
|
|
16888
16964
|
onClick: onReset,
|
|
16889
16965
|
className: iconButtonClass,
|
|
16890
16966
|
"aria-label": clearLabel,
|
|
16891
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime175.jsx)(
|
|
16967
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime175.jsx)(import_lucide_react50.SquareX, { size: 16, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
16892
16968
|
}
|
|
16893
16969
|
),
|
|
16894
16970
|
!readOnly && !hideCalendarIcon && /* @__PURE__ */ (0, import_jsx_runtime175.jsx)(
|
|
@@ -16903,7 +16979,7 @@ function DateRangeInputs({
|
|
|
16903
16979
|
focusedInput !== null || isOpen ? "text-[var(--chekin-color-brand-blue)]" : "text-[var(--chekin-color-gray-2)]"
|
|
16904
16980
|
),
|
|
16905
16981
|
"aria-label": openCalendarLabel,
|
|
16906
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime175.jsx)(
|
|
16982
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime175.jsx)(import_lucide_react50.CalendarDays, { size: 18 })
|
|
16907
16983
|
}
|
|
16908
16984
|
)
|
|
16909
16985
|
] })
|
|
@@ -17449,7 +17525,7 @@ var TimePicker = React69.forwardRef(function TimePicker2({ format: formatName =
|
|
|
17449
17525
|
|
|
17450
17526
|
// src/dashboard/file-input/FileInput.tsx
|
|
17451
17527
|
var React70 = __toESM(require("react"), 1);
|
|
17452
|
-
var
|
|
17528
|
+
var import_lucide_react51 = require("lucide-react");
|
|
17453
17529
|
var import_react_i18next42 = require("react-i18next");
|
|
17454
17530
|
var import_jsx_runtime180 = require("react/jsx-runtime");
|
|
17455
17531
|
function defaultDownload(url) {
|
|
@@ -17561,7 +17637,7 @@ var FileInput = React70.forwardRef(function FileInput2({
|
|
|
17561
17637
|
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",
|
|
17562
17638
|
children: [
|
|
17563
17639
|
/* @__PURE__ */ (0, import_jsx_runtime180.jsx)("span", { className: "truncate", children: resolvedDownloadLabel }),
|
|
17564
|
-
/* @__PURE__ */ (0, import_jsx_runtime180.jsx)(
|
|
17640
|
+
/* @__PURE__ */ (0, import_jsx_runtime180.jsx)(import_lucide_react51.Download, { size: 15 })
|
|
17565
17641
|
]
|
|
17566
17642
|
}
|
|
17567
17643
|
) : /* @__PURE__ */ (0, import_jsx_runtime180.jsx)("span", { className: "truncate text-[14px] font-medium text-[var(--chekin-color-brand-navy)]", children: value.name }),
|
|
@@ -17573,13 +17649,13 @@ var FileInput = React70.forwardRef(function FileInput2({
|
|
|
17573
17649
|
onClick: handleClear,
|
|
17574
17650
|
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]",
|
|
17575
17651
|
"aria-label": t("remove_file"),
|
|
17576
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)(
|
|
17652
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)(import_lucide_react51.SquareX, { size: 15, fill: "#9696b9", color: "#f8f8f8", strokeWidth: 1.8 })
|
|
17577
17653
|
}
|
|
17578
17654
|
)
|
|
17579
17655
|
]
|
|
17580
17656
|
}
|
|
17581
17657
|
) : /* @__PURE__ */ (0, import_jsx_runtime180.jsx)("span", { className: "block min-w-0 flex-1 truncate text-left text-[var(--chekin-color-gray-1)]", children: placeholder ?? "" }),
|
|
17582
|
-
/* @__PURE__ */ (0, import_jsx_runtime180.jsx)("span", { className: "ml-auto flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)(
|
|
17658
|
+
/* @__PURE__ */ (0, import_jsx_runtime180.jsx)("span", { className: "ml-auto flex items-center gap-2 text-[var(--chekin-color-gray-2)]", children: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)(import_lucide_react51.Paperclip, { size: 20 }) })
|
|
17583
17659
|
]
|
|
17584
17660
|
}
|
|
17585
17661
|
),
|
|
@@ -17620,78 +17696,92 @@ var FileInput = React70.forwardRef(function FileInput2({
|
|
|
17620
17696
|
// src/dashboard/select-icons-box/SelectIconsBox.tsx
|
|
17621
17697
|
var React71 = __toESM(require("react"), 1);
|
|
17622
17698
|
var import_jsx_runtime181 = require("react/jsx-runtime");
|
|
17623
|
-
|
|
17624
|
-
|
|
17625
|
-
|
|
17626
|
-
|
|
17627
|
-
|
|
17628
|
-
|
|
17629
|
-
|
|
17630
|
-
|
|
17631
|
-
|
|
17632
|
-
|
|
17633
|
-
|
|
17634
|
-
|
|
17635
|
-
|
|
17636
|
-
|
|
17637
|
-
|
|
17638
|
-
|
|
17639
|
-
|
|
17640
|
-
|
|
17641
|
-
|
|
17642
|
-
|
|
17643
|
-
|
|
17644
|
-
|
|
17645
|
-
|
|
17646
|
-
|
|
17647
|
-
|
|
17648
|
-
|
|
17649
|
-
|
|
17650
|
-
|
|
17651
|
-
|
|
17652
|
-
|
|
17653
|
-
|
|
17654
|
-
|
|
17655
|
-
|
|
17656
|
-
|
|
17657
|
-
|
|
17658
|
-
|
|
17659
|
-
|
|
17660
|
-
|
|
17661
|
-
|
|
17662
|
-
|
|
17663
|
-
|
|
17664
|
-
|
|
17665
|
-
|
|
17666
|
-
|
|
17667
|
-
|
|
17668
|
-
|
|
17669
|
-
|
|
17670
|
-
|
|
17671
|
-
|
|
17672
|
-
|
|
17673
|
-
|
|
17674
|
-
|
|
17675
|
-
|
|
17676
|
-
|
|
17677
|
-
|
|
17678
|
-
|
|
17679
|
-
|
|
17680
|
-
|
|
17681
|
-
|
|
17682
|
-
|
|
17683
|
-
|
|
17684
|
-
"
|
|
17685
|
-
|
|
17686
|
-
|
|
17687
|
-
|
|
17688
|
-
|
|
17689
|
-
|
|
17690
|
-
|
|
17691
|
-
|
|
17692
|
-
|
|
17693
|
-
|
|
17694
|
-
|
|
17699
|
+
var FOCUSABLE_TRIGGER_SELECTOR2 = 'input:not([type="hidden"]):not([disabled]):not([readonly]), button:not([disabled])';
|
|
17700
|
+
var SelectIconsBox = React71.forwardRef(
|
|
17701
|
+
function SelectIconsBox2({
|
|
17702
|
+
children,
|
|
17703
|
+
icons,
|
|
17704
|
+
renderIcon,
|
|
17705
|
+
onSelect,
|
|
17706
|
+
columns = 4,
|
|
17707
|
+
iconsColor = "#6B6B95",
|
|
17708
|
+
isOpen: controlledOpen,
|
|
17709
|
+
defaultOpen = false,
|
|
17710
|
+
onOpenChange,
|
|
17711
|
+
position = "left",
|
|
17712
|
+
className,
|
|
17713
|
+
boxClassName
|
|
17714
|
+
}, ref) {
|
|
17715
|
+
const containerRef = React71.useRef(null);
|
|
17716
|
+
const combinedContainerRef = useCombinedRef(containerRef, ref);
|
|
17717
|
+
const isControlled = controlledOpen !== void 0;
|
|
17718
|
+
const [internalOpen, setInternalOpen] = React71.useState(defaultOpen);
|
|
17719
|
+
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
17720
|
+
const setOpen = (next) => {
|
|
17721
|
+
if (!isControlled) setInternalOpen(next);
|
|
17722
|
+
onOpenChange?.(next);
|
|
17723
|
+
};
|
|
17724
|
+
const handleToggle = (event) => {
|
|
17725
|
+
if (event.target.closest("[data-icon-box-item]")) return;
|
|
17726
|
+
setOpen(!isOpen);
|
|
17727
|
+
};
|
|
17728
|
+
useOutsideClick({
|
|
17729
|
+
elementRef: containerRef,
|
|
17730
|
+
onOutsideClick: () => setOpen(false),
|
|
17731
|
+
isDisabled: !isOpen
|
|
17732
|
+
});
|
|
17733
|
+
const handlePick = (iconName) => {
|
|
17734
|
+
onSelect(iconName);
|
|
17735
|
+
setOpen(false);
|
|
17736
|
+
};
|
|
17737
|
+
const handleContainerFocus = (event) => {
|
|
17738
|
+
if (event.target !== event.currentTarget) return;
|
|
17739
|
+
const focusable = event.currentTarget.querySelector(
|
|
17740
|
+
FOCUSABLE_TRIGGER_SELECTOR2
|
|
17741
|
+
);
|
|
17742
|
+
focusable?.focus();
|
|
17743
|
+
};
|
|
17744
|
+
return /* @__PURE__ */ (0, import_jsx_runtime181.jsxs)(
|
|
17745
|
+
"div",
|
|
17746
|
+
{
|
|
17747
|
+
ref: combinedContainerRef,
|
|
17748
|
+
tabIndex: -1,
|
|
17749
|
+
onFocus: handleContainerFocus,
|
|
17750
|
+
onClick: handleToggle,
|
|
17751
|
+
className: cn("relative inline-block outline-none", className),
|
|
17752
|
+
children: [
|
|
17753
|
+
children,
|
|
17754
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime181.jsx)(
|
|
17755
|
+
"div",
|
|
17756
|
+
{
|
|
17757
|
+
className: cn(
|
|
17758
|
+
"absolute top-full z-30 mt-1 grid max-h-[192px] overflow-y-auto rounded-[6px] bg-white p-6 shadow-[0_15px_15px_0_rgba(33,72,255,0.2)]",
|
|
17759
|
+
position === "left" && "left-0",
|
|
17760
|
+
position === "right" && "right-0",
|
|
17761
|
+
position === "center" && "left-1/2 -translate-x-1/2",
|
|
17762
|
+
boxClassName
|
|
17763
|
+
),
|
|
17764
|
+
style: { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` },
|
|
17765
|
+
children: icons.map((iconName) => /* @__PURE__ */ (0, import_jsx_runtime181.jsx)(
|
|
17766
|
+
"button",
|
|
17767
|
+
{
|
|
17768
|
+
type: "button",
|
|
17769
|
+
"data-icon-box-item": true,
|
|
17770
|
+
onClick: () => handlePick(iconName),
|
|
17771
|
+
className: "relative flex h-10 w-10 cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 outline-none hover:bg-[#f4f6f8]",
|
|
17772
|
+
"aria-label": iconName,
|
|
17773
|
+
children: renderIcon(iconName, iconsColor)
|
|
17774
|
+
},
|
|
17775
|
+
iconName
|
|
17776
|
+
))
|
|
17777
|
+
}
|
|
17778
|
+
)
|
|
17779
|
+
]
|
|
17780
|
+
}
|
|
17781
|
+
);
|
|
17782
|
+
}
|
|
17783
|
+
);
|
|
17784
|
+
SelectIconsBox.displayName = "SelectIconsBox";
|
|
17695
17785
|
|
|
17696
17786
|
// src/lib/breakpoints.ts
|
|
17697
17787
|
var DEVICE_BREAKPOINTS = {
|
|
@@ -17818,11 +17908,11 @@ LegacyTextarea.displayName = "LegacyTextarea";
|
|
|
17818
17908
|
|
|
17819
17909
|
// src/airbnb-fields/datepicker/DatePicker.tsx
|
|
17820
17910
|
var React73 = __toESM(require("react"), 1);
|
|
17821
|
-
var
|
|
17911
|
+
var import_lucide_react53 = require("lucide-react");
|
|
17822
17912
|
|
|
17823
17913
|
// src/airbnb-fields/field-trigger/FieldTrigger.tsx
|
|
17824
17914
|
var React72 = __toESM(require("react"), 1);
|
|
17825
|
-
var
|
|
17915
|
+
var import_lucide_react52 = require("lucide-react");
|
|
17826
17916
|
var import_react_i18next43 = require("react-i18next");
|
|
17827
17917
|
var import_jsx_runtime184 = require("react/jsx-runtime");
|
|
17828
17918
|
var AirbnbFieldTrigger = React72.forwardRef(
|
|
@@ -17888,7 +17978,7 @@ var AirbnbFieldTrigger = React72.forwardRef(
|
|
|
17888
17978
|
const resolvedTrailingAdornment = loading || trailingAdornment ? /* @__PURE__ */ (0, import_jsx_runtime184.jsxs)("span", { className: "flex items-center gap-2", children: [
|
|
17889
17979
|
trailingAdornment,
|
|
17890
17980
|
loading && /* @__PURE__ */ (0, import_jsx_runtime184.jsx)(
|
|
17891
|
-
|
|
17981
|
+
import_lucide_react52.Loader2,
|
|
17892
17982
|
{
|
|
17893
17983
|
"aria-hidden": "true",
|
|
17894
17984
|
className: "h-5 w-5 animate-spin text-[var(--chekin-color-gray-1)]"
|
|
@@ -18149,7 +18239,7 @@ var AirbnbDatePicker = React73.forwardRef(
|
|
|
18149
18239
|
onClick: handleTriggerClick,
|
|
18150
18240
|
onKeyDown: handleTriggerKeyDown,
|
|
18151
18241
|
onBlur,
|
|
18152
|
-
trailingAdornment: /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
|
|
18242
|
+
trailingAdornment: /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(import_lucide_react53.Calendar, { className: "h-5 w-5 text-[#1F1F1B]", strokeWidth: 2 })
|
|
18153
18243
|
}
|
|
18154
18244
|
),
|
|
18155
18245
|
/* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
|
|
@@ -18339,7 +18429,7 @@ AirbnbInput.displayName = "AirbnbInput";
|
|
|
18339
18429
|
|
|
18340
18430
|
// src/airbnb-fields/phone-field/PhoneField.tsx
|
|
18341
18431
|
var React80 = __toESM(require("react"), 1);
|
|
18342
|
-
var
|
|
18432
|
+
var import_lucide_react55 = require("lucide-react");
|
|
18343
18433
|
|
|
18344
18434
|
// src/airbnb-fields/select/Select.tsx
|
|
18345
18435
|
var React79 = __toESM(require("react"), 1);
|
|
@@ -18688,7 +18778,7 @@ function AirbnbSelectMobileContent({
|
|
|
18688
18778
|
|
|
18689
18779
|
// src/airbnb-fields/select/SelectTrigger.tsx
|
|
18690
18780
|
var React75 = __toESM(require("react"), 1);
|
|
18691
|
-
var
|
|
18781
|
+
var import_lucide_react54 = require("lucide-react");
|
|
18692
18782
|
var import_jsx_runtime191 = require("react/jsx-runtime");
|
|
18693
18783
|
var AirbnbSelectTrigger = React75.forwardRef(
|
|
18694
18784
|
({
|
|
@@ -18745,7 +18835,7 @@ var AirbnbSelectTrigger = React75.forwardRef(
|
|
|
18745
18835
|
onKeyDown,
|
|
18746
18836
|
onBlur,
|
|
18747
18837
|
trailingAdornment: /* @__PURE__ */ (0, import_jsx_runtime191.jsx)(
|
|
18748
|
-
|
|
18838
|
+
import_lucide_react54.ChevronDown,
|
|
18749
18839
|
{
|
|
18750
18840
|
className: open ? "h-6 w-6 rotate-180 text-[#1F1F1B] transition-transform" : "h-6 w-6 text-[#1F1F1B] transition-transform"
|
|
18751
18841
|
}
|
|
@@ -19532,7 +19622,7 @@ var AirbnbPhoneField = React80.forwardRef(
|
|
|
19532
19622
|
children: [
|
|
19533
19623
|
/* @__PURE__ */ (0, import_jsx_runtime193.jsx)("span", { children: valueLabel ?? codePlaceholder }),
|
|
19534
19624
|
/* @__PURE__ */ (0, import_jsx_runtime193.jsx)(
|
|
19535
|
-
|
|
19625
|
+
import_lucide_react55.ChevronDown,
|
|
19536
19626
|
{
|
|
19537
19627
|
className: cn("h-5 w-5 transition-transform", open ? "rotate-180" : ""),
|
|
19538
19628
|
strokeWidth: 2
|
|
@@ -19583,7 +19673,7 @@ AirbnbPhoneField.displayName = "AirbnbPhoneField";
|
|
|
19583
19673
|
|
|
19584
19674
|
// src/airbnb-fields/searchable-select/SearchableSelect.tsx
|
|
19585
19675
|
var React81 = __toESM(require("react"), 1);
|
|
19586
|
-
var
|
|
19676
|
+
var import_lucide_react56 = require("lucide-react");
|
|
19587
19677
|
var import_react_virtual3 = require("@tanstack/react-virtual");
|
|
19588
19678
|
var import_react90 = require("react");
|
|
19589
19679
|
var import_jsx_runtime194 = require("react/jsx-runtime");
|
|
@@ -19821,7 +19911,7 @@ var AirbnbSearchableSelectInternal = ({
|
|
|
19821
19911
|
onKeyDown: handleTriggerKeyDown,
|
|
19822
19912
|
onBlur,
|
|
19823
19913
|
trailingAdornment: /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(
|
|
19824
|
-
|
|
19914
|
+
import_lucide_react56.ChevronDown,
|
|
19825
19915
|
{
|
|
19826
19916
|
className: cn(
|
|
19827
19917
|
"h-6 w-6 text-[#1F1F1B] transition-transform",
|
|
@@ -19919,7 +20009,7 @@ function AirbnbSearchableSelectContent({
|
|
|
19919
20009
|
return /* @__PURE__ */ (0, import_jsx_runtime194.jsxs)("div", { className: "p-2", children: [
|
|
19920
20010
|
/* @__PURE__ */ (0, import_jsx_runtime194.jsxs)("div", { className: "relative mb-2", children: [
|
|
19921
20011
|
/* @__PURE__ */ (0, import_jsx_runtime194.jsx)(
|
|
19922
|
-
|
|
20012
|
+
import_lucide_react56.Search,
|
|
19923
20013
|
{
|
|
19924
20014
|
"aria-hidden": "true",
|
|
19925
20015
|
className: "absolute left-4 top-1/2 h-5 w-5 -translate-y-1/2 text-[#9696B9]"
|
|
@@ -20029,13 +20119,13 @@ function getNextEnabledIndex(options, startIndex, step) {
|
|
|
20029
20119
|
// src/airbnb-fields/search-input/SearchInput.tsx
|
|
20030
20120
|
var React82 = __toESM(require("react"), 1);
|
|
20031
20121
|
var import_react_i18next44 = require("react-i18next");
|
|
20032
|
-
var
|
|
20122
|
+
var import_lucide_react57 = require("lucide-react");
|
|
20033
20123
|
var import_jsx_runtime195 = require("react/jsx-runtime");
|
|
20034
20124
|
var AirbnbSearchInput = React82.forwardRef(({ onReset, placeholder, wrapperClassName, ...props }, ref) => {
|
|
20035
20125
|
const { t } = (0, import_react_i18next44.useTranslation)();
|
|
20036
20126
|
const placeholderText = placeholder || t("search_property") + "...";
|
|
20037
20127
|
return /* @__PURE__ */ (0, import_jsx_runtime195.jsxs)("div", { className: cn("input-wrapper relative", wrapperClassName), children: [
|
|
20038
|
-
/* @__PURE__ */ (0, import_jsx_runtime195.jsx)(
|
|
20128
|
+
/* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_lucide_react57.Search, { className: "absolute left-4 top-1/2 h-5 w-5 -translate-y-1/2 transform text-[#9696B9]" }),
|
|
20039
20129
|
/* @__PURE__ */ (0, import_jsx_runtime195.jsx)(
|
|
20040
20130
|
"input",
|
|
20041
20131
|
{
|
|
@@ -20061,7 +20151,7 @@ var AirbnbSearchInput = React82.forwardRef(({ onReset, placeholder, wrapperClass
|
|
|
20061
20151
|
variant: "ghost",
|
|
20062
20152
|
onClick: onReset,
|
|
20063
20153
|
className: "absolute right-0 top-1/2 h-5 w-5 -translate-y-1/2 transform text-[#9696B9]",
|
|
20064
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(
|
|
20154
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_lucide_react57.X, { className: "h-5 w-5" })
|
|
20065
20155
|
}
|
|
20066
20156
|
)
|
|
20067
20157
|
] });
|