@andrilla/mado-ui 1.1.0 → 1.1.1
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/client/components/index.js +338 -171
- package/dist/client.js +344 -179
- package/dist/components/index.js +338 -171
- package/dist/components/search.d.ts +46 -4
- package/dist/components/select.d.ts +17 -7
- package/dist/hooks/create-fast-context.d.ts +8 -9
- package/dist/hooks/index.js +30 -35
- package/dist/hooks/use-form-status.d.ts +8 -10
- package/dist/index.js +344 -179
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -3,7 +3,7 @@ import { extendTailwindMerge, twJoin } from "tailwind-merge";
|
|
|
3
3
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { Button as Button$1, Checkbox as Checkbox$1, Combobox, ComboboxButton, ComboboxInput, ComboboxOption, ComboboxOptions, Description, Dialog, DialogBackdrop, DialogPanel, DialogTitle, Disclosure, DisclosureButton, DisclosurePanel, Field, Fieldset as Fieldset$1, Input as Input$1, Label, Legend, Listbox, ListboxButton, ListboxOption, ListboxOptions, ListboxSelectedOption, Menu, MenuButton, MenuHeading, MenuItem, MenuItems, MenuSection, MenuSeparator, Textarea as Textarea$1 } from "@headlessui/react";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import { Children,
|
|
6
|
+
import { Children, cloneElement, createContext, isValidElement, useCallback, useContext, useEffect, useEffectEvent, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
7
7
|
import * as ReactDOM from "react-dom";
|
|
8
8
|
import { createPortal } from "react-dom";
|
|
9
9
|
//#region src/utils/custom-tailwind-merge.ts
|
|
@@ -6733,39 +6733,37 @@ function Input({ children, className, description, descriptionProps: { className
|
|
|
6733
6733
|
}
|
|
6734
6734
|
//#endregion
|
|
6735
6735
|
//#region src/hooks/create-fast-context.tsx
|
|
6736
|
-
function createFastContext(
|
|
6737
|
-
function useStoreData(
|
|
6738
|
-
const store = useRef(initialState)
|
|
6739
|
-
const
|
|
6740
|
-
|
|
6741
|
-
else store.current = value;
|
|
6742
|
-
subscribers.current.forEach((callback) => callback());
|
|
6743
|
-
};
|
|
6744
|
-
const subscribe = (callback) => {
|
|
6745
|
-
subscribers.current.add(callback);
|
|
6746
|
-
return () => subscribers.current.delete(callback);
|
|
6747
|
-
};
|
|
6736
|
+
function createFastContext(initialState) {
|
|
6737
|
+
function useStoreData() {
|
|
6738
|
+
const store = useRef(initialState);
|
|
6739
|
+
const get = useCallback(() => store.current, []);
|
|
6740
|
+
const subscribers = useRef(/* @__PURE__ */ new Set());
|
|
6748
6741
|
return {
|
|
6749
6742
|
get,
|
|
6750
|
-
set
|
|
6751
|
-
|
|
6743
|
+
set: useCallback((value) => {
|
|
6744
|
+
store.current = {
|
|
6745
|
+
...store.current,
|
|
6746
|
+
...value
|
|
6747
|
+
};
|
|
6748
|
+
subscribers.current.forEach((callback) => callback());
|
|
6749
|
+
}, []),
|
|
6750
|
+
subscribe: useCallback((callback) => {
|
|
6751
|
+
subscribers.current.add(callback);
|
|
6752
|
+
return () => subscribers.current.delete(callback);
|
|
6753
|
+
}, [])
|
|
6752
6754
|
};
|
|
6753
6755
|
}
|
|
6754
6756
|
const StoreContext = createContext(null);
|
|
6755
|
-
function Provider({
|
|
6757
|
+
function Provider({ children }) {
|
|
6756
6758
|
return /* @__PURE__ */ jsx(StoreContext.Provider, {
|
|
6757
|
-
value: useStoreData(
|
|
6758
|
-
|
|
6759
|
+
value: useStoreData(),
|
|
6760
|
+
children
|
|
6759
6761
|
});
|
|
6760
6762
|
}
|
|
6761
|
-
function useStore(selector
|
|
6763
|
+
function useStore(selector) {
|
|
6762
6764
|
const store = useContext(StoreContext);
|
|
6763
|
-
if (!store)
|
|
6764
|
-
|
|
6765
|
-
const noOpSet = () => console.warn("Attempting to set store value outside of Provider");
|
|
6766
|
-
return [selectedValue, noOpSet];
|
|
6767
|
-
}
|
|
6768
|
-
return [useSyncExternalStore(store.subscribe, () => selector(store.get()), () => selector(initialValue !== void 0 ? initialValue : defaultInitialState)), store.set];
|
|
6765
|
+
if (!store) throw new Error("Store not found");
|
|
6766
|
+
return [useSyncExternalStore(store.subscribe, () => selector(store.get()), () => selector(initialState)), store.set];
|
|
6769
6767
|
}
|
|
6770
6768
|
return {
|
|
6771
6769
|
Provider,
|
|
@@ -6775,15 +6773,12 @@ function createFastContext(defaultInitialState) {
|
|
|
6775
6773
|
//#endregion
|
|
6776
6774
|
//#region src/hooks/use-form-status.tsx
|
|
6777
6775
|
const DEFAULT_STATUS = "incomplete";
|
|
6778
|
-
|
|
6779
|
-
|
|
6780
|
-
return
|
|
6781
|
-
|
|
6782
|
-
|
|
6783
|
-
}
|
|
6784
|
-
}
|
|
6785
|
-
function useFormStatus() {
|
|
6786
|
-
return useStore((store) => store);
|
|
6776
|
+
function useFormStatusContext(initialStatus = DEFAULT_STATUS) {
|
|
6777
|
+
const { Provider: FormStatusProvider, useStore: useFormStatus } = createFastContext(initialStatus);
|
|
6778
|
+
return {
|
|
6779
|
+
FormStatusProvider,
|
|
6780
|
+
useFormStatus
|
|
6781
|
+
};
|
|
6787
6782
|
}
|
|
6788
6783
|
//#endregion
|
|
6789
6784
|
//#region src/hooks/use-pointer-movement.ts
|
|
@@ -7031,17 +7026,11 @@ function ModalDialog({ dialogPanelProps: { className: dialogPanelClassName, styl
|
|
|
7031
7026
|
if (!setModalControls) return;
|
|
7032
7027
|
if (progressY >= DRAG_TO_CLOSE_PROGRESS && !readyToCloseRef.current) {
|
|
7033
7028
|
readyToCloseRef.current = true;
|
|
7034
|
-
setModalControls(
|
|
7035
|
-
...prev,
|
|
7036
|
-
readyToClose: true
|
|
7037
|
-
}));
|
|
7029
|
+
setModalControls({ readyToClose: true });
|
|
7038
7030
|
}
|
|
7039
7031
|
if (progressY < DRAG_TO_CLOSE_PROGRESS && readyToCloseRef.current) {
|
|
7040
7032
|
readyToCloseRef.current = false;
|
|
7041
|
-
setModalControls(
|
|
7042
|
-
...prev,
|
|
7043
|
-
readyToClose: false
|
|
7044
|
-
}));
|
|
7033
|
+
setModalControls({ readyToClose: false });
|
|
7045
7034
|
}
|
|
7046
7035
|
},
|
|
7047
7036
|
trigger: draggableTrigger
|
|
@@ -7178,11 +7167,10 @@ function ModalDisplay({ children, className, onClose, onOpen, place = "bottom" }
|
|
|
7178
7167
|
const closeFunctions = () => {
|
|
7179
7168
|
onClose?.();
|
|
7180
7169
|
modalControls?.pseudoContainerRef?.current?.remove();
|
|
7181
|
-
setModalControls?.(
|
|
7182
|
-
...previous,
|
|
7170
|
+
setModalControls?.({
|
|
7183
7171
|
pseudoContainerRef: { current: null },
|
|
7184
7172
|
readyToClose: false
|
|
7185
|
-
})
|
|
7173
|
+
});
|
|
7186
7174
|
};
|
|
7187
7175
|
const mobileAnimation = {
|
|
7188
7176
|
y: "100%",
|
|
@@ -7211,15 +7199,14 @@ function ModalDisplay({ children, className, onClose, onOpen, place = "bottom" }
|
|
|
7211
7199
|
});
|
|
7212
7200
|
};
|
|
7213
7201
|
useEffect(() => {
|
|
7214
|
-
setModalControls?.(
|
|
7215
|
-
...previous,
|
|
7202
|
+
setModalControls?.({
|
|
7216
7203
|
isOpen,
|
|
7217
7204
|
place,
|
|
7218
7205
|
className,
|
|
7219
7206
|
openModal,
|
|
7220
7207
|
closeModal,
|
|
7221
7208
|
dialogPanelRef: localDialogPanelRef
|
|
7222
|
-
})
|
|
7209
|
+
});
|
|
7223
7210
|
}, [
|
|
7224
7211
|
className,
|
|
7225
7212
|
closeModal,
|
|
@@ -7286,6 +7273,10 @@ function ChevronUpChevronDown({ weight = "regular", ...props }) {
|
|
|
7286
7273
|
}
|
|
7287
7274
|
//#endregion
|
|
7288
7275
|
//#region src/components/select.tsx
|
|
7276
|
+
const { Provider: SelectContextProvider, useStore: useSelectContext } = createFastContext({
|
|
7277
|
+
multiple: false,
|
|
7278
|
+
selectedOptionDisplayProps: {}
|
|
7279
|
+
});
|
|
7289
7280
|
/**
|
|
7290
7281
|
* ## Select Section Title
|
|
7291
7282
|
*
|
|
@@ -7300,48 +7291,32 @@ function SelectSectionTitle({ className, ...props }) {
|
|
|
7300
7291
|
/**
|
|
7301
7292
|
* ## SelectOption
|
|
7302
7293
|
*
|
|
7303
|
-
* @prop children - This is what is displayed in the drop down menu
|
|
7304
|
-
* @prop name - This is displayed in the trigger button
|
|
7305
|
-
* @prop value - This is used for FormData
|
|
7306
|
-
|
|
7307
|
-
|
|
7294
|
+
* @prop children - This is what is displayed in the drop down menu.
|
|
7295
|
+
* @prop name - This is displayed in the trigger button.
|
|
7296
|
+
* @prop value - This is used for FormData.
|
|
7297
|
+
* @prop selectedDisplayProps - This is used to customize the display of the selected option (takes priority over selectedOptionDisplayProps).
|
|
7298
|
+
*/
|
|
7299
|
+
function SelectOption({ children, className, name, selectedDisplayProps: { children: selectedDisplayChildren, className: selectedDisplayClassName, ...selectedDisplayProps } = {}, ...props }) {
|
|
7300
|
+
const [selectContext] = useSelectContext((store) => store), { multiple, selectedOptionDisplayProps } = selectContext || {};
|
|
7301
|
+
const { children: selectedOptionDisplayChildren, className: selectedOptionDisplayClassName } = selectedOptionDisplayProps || {};
|
|
7308
7302
|
return /* @__PURE__ */ jsx(ListboxOption, {
|
|
7309
7303
|
className: "group/option contents",
|
|
7310
7304
|
...props,
|
|
7311
7305
|
children: (bag) => bag.selectedOption ? /* @__PURE__ */ jsx("span", {
|
|
7312
|
-
|
|
7313
|
-
|
|
7306
|
+
...selectedOptionDisplayProps,
|
|
7307
|
+
...selectedDisplayProps,
|
|
7308
|
+
className: twMerge(!selectedDisplayClassName && !selectedOptionDisplayClassName && multiple && `before:content-[',_'] group-first-of-type/option:before:content-['']`, selectedOptionDisplayClassName, selectedDisplayClassName),
|
|
7309
|
+
children: selectedDisplayChildren ? typeof selectedDisplayChildren === "function" ? selectedDisplayChildren(name) : selectedDisplayChildren : selectedOptionDisplayChildren ? typeof selectedOptionDisplayChildren === "function" ? selectedOptionDisplayChildren(name) : selectedOptionDisplayChildren : name
|
|
7314
7310
|
}) : /* @__PURE__ */ jsxs("div", {
|
|
7315
|
-
className: twMerge("flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 transition-[background-color] duration-200 ease-exponential select-none [--theme-color:var(--base-theme-color)] corner-super-1.5 group-disabled/option:opacity-50 group-data-focus/option:bg-(--theme-color)/15 group-data-selected/option:
|
|
7316
|
-
children: [/* @__PURE__ */ jsx(Checkmark, { className: "
|
|
7311
|
+
className: twMerge("flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 transition-[background-color,color] duration-200 ease-exponential select-none [--theme-color:var(--base-theme-color)] corner-super-1.5 group-disabled/option:opacity-50 group-data-focus/option:bg-(--theme-color)/15 group-data-selected/option:text-(--theme-color) dark:group-data-focus/option:bg-(--theme-color)/15", !multiple && "group-data-selected/option:cursor-default group-data-focus/option:group-data-selected/option:bg-transparent", className),
|
|
7312
|
+
children: [/* @__PURE__ */ jsx(Checkmark, { className: "size-3.5 scale-70 opacity-0 transition-[opacity,scale] duration-200 ease-exponential group-data-selected/option:scale-100 group-data-selected/option:opacity-100" }), typeof children === "function" ? children(bag) : children]
|
|
7317
7313
|
})
|
|
7318
7314
|
});
|
|
7319
7315
|
}
|
|
7320
|
-
|
|
7321
|
-
* # Select
|
|
7322
|
-
*
|
|
7323
|
-
* A customizable select component intended to work very similar to HTML's `<select>` element.
|
|
7324
|
-
*
|
|
7325
|
-
* Use the `SelectOption` component to define the options.
|
|
7326
|
-
*
|
|
7327
|
-
* Use the `SelectSectionTitle` component to define titles.
|
|
7328
|
-
*
|
|
7329
|
-
* @prop label - The label for the select component.
|
|
7330
|
-
* @prop description - The description for the select component.
|
|
7331
|
-
* @prop placeholder - The placeholder for the select component.
|
|
7332
|
-
* @prop required - Whether the select component is required.
|
|
7333
|
-
* @prop invalid - Whether the select component is invalid.
|
|
7334
|
-
* @prop multiple - Whether the select component allows multiple selections.
|
|
7335
|
-
* @prop optionsProps - The props to be passed to each SelectOption component.
|
|
7336
|
-
* @prop selectedOptionProps - The props to be passed to the selected option component.
|
|
7337
|
-
* @prop fieldProps - The props to be passed to the parent field component.
|
|
7338
|
-
* @prop labelProps - The props to be passed to the label component.
|
|
7339
|
-
* @prop descriptionProps - The props to be passed to the description component.
|
|
7340
|
-
* @prop anchor - The anchor point for the drop down menu.
|
|
7341
|
-
*/
|
|
7342
|
-
function Select({ buttonProps, children, className, description, descriptionProps: { className: descriptionClassName, ...descriptionProps } = {}, fieldProps: { className: fieldClassName, ...fieldProps } = {}, invalid, label, labelProps: { className: labelClassName, ...labelProps } = {}, onChange, optionsProps: { anchor, className: optionsClassName, transition, ...optionsProps } = {}, placeholder, required, selectedOptionProps: { ...selectedOptionProps } = {}, ...props }) {
|
|
7316
|
+
function SelectField({ buttonProps, children, className, description, descriptionProps: { className: descriptionClassName, ...descriptionProps } = {}, fieldProps: { className: fieldClassName, ...fieldProps } = {}, invalid, label, labelProps: { className: labelClassName, ...labelProps } = {}, onChange, optionsProps: { anchor, className: optionsClassName, transition, ...optionsProps } = {}, placeholder, required, selectedOptionProps, selectedOptionDisplayProps, ...props }) {
|
|
7343
7317
|
const uniqueId = useId();
|
|
7344
|
-
const multiple = props.multiple;
|
|
7318
|
+
const multiple = Boolean(props.multiple);
|
|
7319
|
+
const [, setSelectContext] = useSelectContext((store) => store);
|
|
7345
7320
|
const selectOptionList = Children.toArray(children).filter((child) => isValidElement(child) && child.props && typeof child.props === "object" && "name" in child.props && "value" in child.props && "children" in child.props);
|
|
7346
7321
|
const listboxButtonRef = useRef(null);
|
|
7347
7322
|
const [isInvalid, setIsInvalid] = useState(invalid);
|
|
@@ -7353,6 +7328,15 @@ function Select({ buttonProps, children, className, description, descriptionProp
|
|
|
7353
7328
|
};
|
|
7354
7329
|
const handleInvalid = () => setIsInvalid(true);
|
|
7355
7330
|
const refocus = () => listboxButtonRef.current?.focus();
|
|
7331
|
+
const onVisible = useEffectEvent(() => {
|
|
7332
|
+
setSelectContext?.({
|
|
7333
|
+
multiple,
|
|
7334
|
+
selectedOptionDisplayProps
|
|
7335
|
+
});
|
|
7336
|
+
});
|
|
7337
|
+
useEffect(() => {
|
|
7338
|
+
onVisible();
|
|
7339
|
+
}, []);
|
|
7356
7340
|
return /* @__PURE__ */ jsxs(Field, {
|
|
7357
7341
|
...fieldProps,
|
|
7358
7342
|
className: (bag) => twMerge("grid gap-1", typeof fieldClassName === "function" ? fieldClassName(bag) : fieldClassName),
|
|
@@ -7409,6 +7393,32 @@ function Select({ buttonProps, children, className, description, descriptionProp
|
|
|
7409
7393
|
]
|
|
7410
7394
|
});
|
|
7411
7395
|
}
|
|
7396
|
+
/**
|
|
7397
|
+
* # Select
|
|
7398
|
+
*
|
|
7399
|
+
* A customizable select component intended to work very similar to HTML's `<select>` element.
|
|
7400
|
+
*
|
|
7401
|
+
* Use the `SelectOption` component to define the options.
|
|
7402
|
+
*
|
|
7403
|
+
* Use the `SelectSectionTitle` component to define titles.
|
|
7404
|
+
*
|
|
7405
|
+
* @prop label - The label for the select component.
|
|
7406
|
+
* @prop description - The description for the select component.
|
|
7407
|
+
* @prop placeholder - The placeholder for the select component.
|
|
7408
|
+
* @prop required - Whether the select component is required.
|
|
7409
|
+
* @prop invalid - Whether the select component is invalid.
|
|
7410
|
+
* @prop multiple - Whether the select component allows multiple selections.
|
|
7411
|
+
* @prop optionsProps - The props to be passed to each SelectOption component.
|
|
7412
|
+
* @prop selectedOptionProps - The props to be passed to the selected option component.
|
|
7413
|
+
* @prop selectedOptionDisplayProps - The props to be passed to each selected option in the selected option component.
|
|
7414
|
+
* @prop fieldProps - The props to be passed to the parent field component.
|
|
7415
|
+
* @prop labelProps - The props to be passed to the label component.
|
|
7416
|
+
* @prop descriptionProps - The props to be passed to the description component.
|
|
7417
|
+
* @prop anchor - The anchor point for the drop down menu.
|
|
7418
|
+
*/
|
|
7419
|
+
function Select(props) {
|
|
7420
|
+
return /* @__PURE__ */ jsx(SelectContextProvider, { children: /* @__PURE__ */ jsx(SelectField, { ...props }) });
|
|
7421
|
+
}
|
|
7412
7422
|
//#endregion
|
|
7413
7423
|
//#region src/symbols/plus.tsx
|
|
7414
7424
|
function Plus({ weight = "regular", ...props }) {
|
|
@@ -7462,6 +7472,23 @@ function Plus({ weight = "regular", ...props }) {
|
|
|
7462
7472
|
}
|
|
7463
7473
|
//#endregion
|
|
7464
7474
|
//#region src/components/search.tsx
|
|
7475
|
+
const { Provider: SearchContextProvider, useStore: useSearchContext } = createFastContext({
|
|
7476
|
+
multiple: false,
|
|
7477
|
+
query: "",
|
|
7478
|
+
selectedOptionDisplayProps: {},
|
|
7479
|
+
selectedOptionList: []
|
|
7480
|
+
});
|
|
7481
|
+
/**
|
|
7482
|
+
* ## Search Section Title
|
|
7483
|
+
*
|
|
7484
|
+
* Displays a simple title.
|
|
7485
|
+
*/
|
|
7486
|
+
function SearchSectionTitle({ className, ...props }) {
|
|
7487
|
+
return /* @__PURE__ */ jsx("div", {
|
|
7488
|
+
className: twMerge("sticky -top-1 z-10 -mx-1 bg-inherit mask-t-from-transparent mask-t-from-0 mask-t-to-white mask-t-to-1.5 pl-2 font-bold text-neutral-500/50 backdrop-blur-[2px] backdrop-brightness-101", className),
|
|
7489
|
+
...props
|
|
7490
|
+
});
|
|
7491
|
+
}
|
|
7465
7492
|
/**
|
|
7466
7493
|
* ## SearchOption
|
|
7467
7494
|
*
|
|
@@ -7469,8 +7496,17 @@ function Plus({ weight = "regular", ...props }) {
|
|
|
7469
7496
|
* @prop name - This is used for filtering by default
|
|
7470
7497
|
* @prop value - This is used as selected value and for FormData
|
|
7471
7498
|
*/
|
|
7472
|
-
function SearchOption({ children, className, name, value, ...props }) {
|
|
7473
|
-
|
|
7499
|
+
function SearchOption({ children, className, isInDisplay, name, selectedDisplayProps: { children: selectedDisplayChildren, className: selectedDisplayClassName, ...selectedDisplayProps } = {}, value, ...props }) {
|
|
7500
|
+
const [searchContext] = useSearchContext((store) => store);
|
|
7501
|
+
const { multiple, query, selectedOptionDisplayProps } = searchContext || {};
|
|
7502
|
+
if (!((query || "").trim() === "" || name.toLowerCase().includes((query || "").toLowerCase()) || isInDisplay)) return /* @__PURE__ */ jsx(Fragment, {});
|
|
7503
|
+
const { children: selectedOptionDisplayChildren, className: selectedOptionDisplayClassName } = selectedOptionDisplayProps || {};
|
|
7504
|
+
return isInDisplay ? /* @__PURE__ */ jsx("span", {
|
|
7505
|
+
...selectedOptionDisplayProps,
|
|
7506
|
+
...selectedDisplayProps,
|
|
7507
|
+
className: twMerge(!selectedDisplayClassName && !selectedOptionDisplayClassName && multiple && `after:content-[',_'] last-of-type:after:content-['']`, selectedOptionDisplayClassName, selectedDisplayClassName),
|
|
7508
|
+
children: selectedDisplayChildren ? typeof selectedDisplayChildren === "function" ? selectedDisplayChildren(name) : selectedDisplayChildren : selectedOptionDisplayChildren ? typeof selectedOptionDisplayChildren === "function" ? selectedOptionDisplayChildren(name) : selectedOptionDisplayChildren : name
|
|
7509
|
+
}) : /* @__PURE__ */ jsx(ComboboxOption, {
|
|
7474
7510
|
className: "group/option contents",
|
|
7475
7511
|
value: {
|
|
7476
7512
|
id: value,
|
|
@@ -7478,46 +7514,130 @@ function SearchOption({ children, className, name, value, ...props }) {
|
|
|
7478
7514
|
},
|
|
7479
7515
|
...props,
|
|
7480
7516
|
children: (bag) => /* @__PURE__ */ jsxs("div", {
|
|
7481
|
-
className: twMerge("flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 transition-[background-color] duration-200 ease-exponential select-none [--theme-color:var(--base-theme-color)] corner-super-1.5 group-disabled/option:opacity-50 group-data-focus/option:bg-(--theme-color)/15 group-data-selected/option:
|
|
7482
|
-
children: [/* @__PURE__ */ jsx(Checkmark, { className: "
|
|
7517
|
+
className: twMerge("flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 transition-[background-color,color] duration-200 ease-exponential select-none [--theme-color:var(--base-theme-color)] corner-super-1.5 group-disabled/option:opacity-50 group-data-focus/option:bg-(--theme-color)/15 group-data-selected/option:text-(--theme-color) dark:group-data-focus/option:bg-(--theme-color)/15", !multiple && "group-data-selected/option:cursor-default group-data-focus/option:group-data-selected/option:bg-transparent", className),
|
|
7518
|
+
children: [/* @__PURE__ */ jsx(Checkmark, { className: "size-3.5 scale-70 opacity-0 transition-[opacity,scale] duration-200 ease-exponential group-data-selected/option:scale-100 group-data-selected/option:opacity-100" }), typeof children === "function" ? children(bag) : children ?? name]
|
|
7483
7519
|
})
|
|
7484
7520
|
});
|
|
7485
7521
|
}
|
|
7486
|
-
|
|
7487
|
-
|
|
7488
|
-
|
|
7489
|
-
|
|
7490
|
-
|
|
7491
|
-
|
|
7492
|
-
|
|
7493
|
-
|
|
7522
|
+
function checkEquality(aOptionList, bOptionList) {
|
|
7523
|
+
if (aOptionList.length !== bOptionList.length) return false;
|
|
7524
|
+
for (let i = 0; i < aOptionList.length; i += 1) {
|
|
7525
|
+
const aOption = aOptionList[i], bOption = bOptionList[i];
|
|
7526
|
+
if (aOption?.id !== bOption?.id || aOption?.name !== bOption?.name) return false;
|
|
7527
|
+
}
|
|
7528
|
+
return true;
|
|
7529
|
+
}
|
|
7530
|
+
function SearchField({ allowCustom, buttonProps, children, className, defaultValue, description, descriptionProps: { className: descriptionClassName, ...descriptionProps } = {}, fieldProps: { className: fieldClassName, ...fieldProps } = {}, inputProps, invalid, label, labelProps: { className: labelClassName, ...labelProps } = {}, multiple, onChange, optionsProps: { anchor, className: optionsClassName, transition, ...optionsProps } = {}, placeholder, required = true, shelfProps: { className: shelfClassName, ...shelfProps } = {}, selectedOptionDisplayProps, singleDisplay, ...props }) {
|
|
7494
7531
|
const uniqueId = useId();
|
|
7495
|
-
const
|
|
7496
|
-
if (!isValidElement(child)) return [];
|
|
7497
|
-
const candidate = child;
|
|
7498
|
-
if (typeof candidate.props?.name !== "string") return [];
|
|
7499
|
-
if (typeof candidate.props?.value !== "string") return [];
|
|
7500
|
-
return [{
|
|
7501
|
-
name: candidate.props.name,
|
|
7502
|
-
value: candidate.props.value,
|
|
7503
|
-
element: child
|
|
7504
|
-
}];
|
|
7505
|
-
});
|
|
7506
|
-
const [query, setQuery] = useState("");
|
|
7532
|
+
const [searchContext, setSearchContext] = useSearchContext((store) => store), { query } = searchContext || {};
|
|
7507
7533
|
const [isInvalid, setIsInvalid] = useState(invalid);
|
|
7508
7534
|
const [selectedOptionSync, setSelectedOptionSync] = useState(() => {
|
|
7509
7535
|
if (multiple) return Array.isArray(defaultValue) ? defaultValue : [];
|
|
7510
7536
|
return typeof defaultValue === "string" ? defaultValue : null;
|
|
7511
7537
|
});
|
|
7512
7538
|
const comboboxInputRef = useRef(null);
|
|
7513
|
-
const
|
|
7539
|
+
const childOptionList = useMemo(() => Children.toArray(children).filter((child) => isValidElement(child) && !!child.props && "value" in child.props && "name" in child.props), [children]);
|
|
7540
|
+
const staticOptionList = useMemo(() => childOptionList.map((child) => ({
|
|
7541
|
+
id: child.props.value,
|
|
7542
|
+
name: child.props.name,
|
|
7543
|
+
selectedDisplayProps: child.props.selectedDisplayProps
|
|
7544
|
+
})), [childOptionList]);
|
|
7545
|
+
const [addedOptionList, setAddedOptionList] = useState([]);
|
|
7546
|
+
const customOptionFromQuery = useMemo(() => {
|
|
7547
|
+
const trimmedQuery = query.trim();
|
|
7548
|
+
if (!allowCustom || trimmedQuery.length === 0) return null;
|
|
7549
|
+
return {
|
|
7550
|
+
id: props.customOptionParams?.formatID?.(trimmedQuery) ?? toLowerCase(trimmedQuery, [" ", "_"]),
|
|
7551
|
+
name: trimmedQuery
|
|
7552
|
+
};
|
|
7553
|
+
}, [
|
|
7554
|
+
allowCustom,
|
|
7555
|
+
props.customOptionParams,
|
|
7556
|
+
query
|
|
7557
|
+
]);
|
|
7558
|
+
const optionLookupMap = useMemo(() => {
|
|
7559
|
+
const lookupMap = /* @__PURE__ */ new Map();
|
|
7560
|
+
for (const option of staticOptionList) lookupMap.set(option.id, option.name);
|
|
7561
|
+
for (const option of addedOptionList) lookupMap.set(option.id, option.name);
|
|
7562
|
+
return lookupMap;
|
|
7563
|
+
}, [addedOptionList, staticOptionList]);
|
|
7564
|
+
const saveCustomOption = useEffectEvent((option) => {
|
|
7565
|
+
if (!multiple) return;
|
|
7566
|
+
setAddedOptionList((prevOptionList) => {
|
|
7567
|
+
if (prevOptionList.some((prevOption) => prevOption.id === option.id)) return prevOptionList;
|
|
7568
|
+
return [...prevOptionList, option];
|
|
7569
|
+
});
|
|
7570
|
+
});
|
|
7514
7571
|
const handleChange = (selected) => {
|
|
7515
7572
|
setIsInvalid(false);
|
|
7573
|
+
if (multiple && Array.isArray(selected)) {
|
|
7574
|
+
const selectedValueList = selected.map((selectedValue) => {
|
|
7575
|
+
if (selectedValue && typeof selectedValue === "object" && "id" in selectedValue && "name" in selectedValue) {
|
|
7576
|
+
const option = {
|
|
7577
|
+
id: String(selectedValue.id),
|
|
7578
|
+
name: String(selectedValue.name)
|
|
7579
|
+
};
|
|
7580
|
+
saveCustomOption(option);
|
|
7581
|
+
return option.id;
|
|
7582
|
+
}
|
|
7583
|
+
return String(selectedValue);
|
|
7584
|
+
});
|
|
7585
|
+
setSelectedOptionSync(selectedValueList);
|
|
7586
|
+
onChange?.(selectedValueList);
|
|
7587
|
+
return;
|
|
7588
|
+
}
|
|
7589
|
+
if (!multiple) {
|
|
7590
|
+
const normalizedSelected = selected && typeof selected === "object" && !Array.isArray(selected) ? String(selected.id) : selected;
|
|
7591
|
+
setSelectedOptionSync(normalizedSelected);
|
|
7592
|
+
onChange?.(normalizedSelected);
|
|
7593
|
+
return;
|
|
7594
|
+
}
|
|
7516
7595
|
setSelectedOptionSync(selected);
|
|
7517
|
-
|
|
7596
|
+
};
|
|
7597
|
+
const formatSelectedDisplay = (name) => {
|
|
7598
|
+
const selectedOptionDisplayChildren = selectedOptionDisplayProps?.children;
|
|
7599
|
+
if (!selectedOptionDisplayChildren) return name;
|
|
7600
|
+
const selectedOptionDisplayValue = typeof selectedOptionDisplayChildren === "function" ? selectedOptionDisplayChildren(name) : selectedOptionDisplayChildren;
|
|
7601
|
+
return typeof selectedOptionDisplayValue === "string" ? selectedOptionDisplayValue : name;
|
|
7518
7602
|
};
|
|
7519
7603
|
const handleInvalid = () => setIsInvalid(true);
|
|
7520
7604
|
const refocus = () => comboboxInputRef.current?.focus();
|
|
7605
|
+
const onVisible = useEffectEvent(() => {
|
|
7606
|
+
setSearchContext?.({
|
|
7607
|
+
multiple,
|
|
7608
|
+
query: "",
|
|
7609
|
+
selectedOptionDisplayProps
|
|
7610
|
+
});
|
|
7611
|
+
});
|
|
7612
|
+
useEffect(() => {
|
|
7613
|
+
onVisible();
|
|
7614
|
+
}, []);
|
|
7615
|
+
useEffect(() => {
|
|
7616
|
+
const selectedOptionList = (Array.isArray(selectedOptionSync) ? selectedOptionSync : typeof selectedOptionSync === "string" ? [selectedOptionSync] : []).map((selectedId) => ({
|
|
7617
|
+
id: selectedId,
|
|
7618
|
+
name: optionLookupMap.get(selectedId) ?? selectedId
|
|
7619
|
+
}));
|
|
7620
|
+
if (!checkEquality(searchContext?.selectedOptionList ?? [], selectedOptionList)) setSearchContext?.({ selectedOptionList });
|
|
7621
|
+
}, [
|
|
7622
|
+
optionLookupMap,
|
|
7623
|
+
searchContext?.selectedOptionList,
|
|
7624
|
+
selectedOptionSync,
|
|
7625
|
+
setSearchContext
|
|
7626
|
+
]);
|
|
7627
|
+
const queryChange = (e) => {
|
|
7628
|
+
const { currentTarget } = e, { value } = currentTarget;
|
|
7629
|
+
setSearchContext?.({ query: value });
|
|
7630
|
+
};
|
|
7631
|
+
const handleClose = () => {
|
|
7632
|
+
setSearchContext?.({ query: "" });
|
|
7633
|
+
};
|
|
7634
|
+
const updateDisplayValue = (value) => {
|
|
7635
|
+
if (multiple && Array.isArray(value)) {
|
|
7636
|
+
if (singleDisplay) return value.map((v) => formatSelectedDisplay(v.name)).join(", ");
|
|
7637
|
+
}
|
|
7638
|
+
if (!multiple && value) return formatSelectedDisplay(value.name);
|
|
7639
|
+
return "";
|
|
7640
|
+
};
|
|
7521
7641
|
return /* @__PURE__ */ jsxs(Field, {
|
|
7522
7642
|
...fieldProps,
|
|
7523
7643
|
className: (bag) => twMerge("grid gap-1", typeof fieldClassName === "function" ? fieldClassName(bag) : fieldClassName),
|
|
@@ -7532,64 +7652,88 @@ function Search({ allowCustom, buttonProps, children, className, defaultValue, d
|
|
|
7532
7652
|
invalid: isInvalid || invalid,
|
|
7533
7653
|
multiple,
|
|
7534
7654
|
onChange: handleChange,
|
|
7535
|
-
onClose:
|
|
7536
|
-
value: selectedOptionSync || "",
|
|
7655
|
+
onClose: handleClose,
|
|
7537
7656
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
7538
|
-
|
|
7539
|
-
|
|
7540
|
-
|
|
7541
|
-
|
|
7542
|
-
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
7548
|
-
|
|
7549
|
-
|
|
7550
|
-
|
|
7551
|
-
|
|
7552
|
-
|
|
7553
|
-
|
|
7554
|
-
|
|
7555
|
-
|
|
7556
|
-
|
|
7557
|
-
|
|
7558
|
-
|
|
7559
|
-
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
|
|
7566
|
-
|
|
7567
|
-
|
|
7568
|
-
|
|
7657
|
+
...multiple ? { "data-multiple": "" } : {},
|
|
7658
|
+
className: "isolate contents data-multiple:grid",
|
|
7659
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
7660
|
+
className: "relative",
|
|
7661
|
+
children: [
|
|
7662
|
+
/* @__PURE__ */ jsx(ComboboxInput, {
|
|
7663
|
+
...inputProps,
|
|
7664
|
+
"aria-label": typeof label === "string" ? label : props.name,
|
|
7665
|
+
className: (bag) => twMerge("inline-block w-full overflow-clip rounded-xl border border-neutral-500/50 bg-neutral-100 py-1 pr-8 pl-2 text-left text-neutral-950 outline-offset-1 outline-blue-400/95 transition-[background-color] duration-300 ease-exponential corner-super-1.5 dark:bg-neutral-700 dark:text-neutral-50", "focus:outline-3 focus-visible:bg-neutral-50 focus-visible:outline-3 active:bg-neutral-200 dark:focus-visible:bg-neutral-600 dark:active:bg-neutral-800 pointer-fine:hover:bg-neutral-50 pointer-fine:active:bg-neutral-200 dark:pointer-fine:hover:bg-neutral-600 dark:pointer-fine:active:bg-neutral-800", "data-invalid:border-red-500 data-invalid:bg-[color-mix(in_oklch,var(--color-red-500)_5%,var(--color-neutral-100)_5%)] data-invalid:focus-visible:bg-[color-mix(in_oklch,var(--color-red-500)_1%,var(--color-neutral-100))] data-invalid:active:bg-[color-mix(in_oklch,var(--color-red-500)_5%,var(--color-neutral-100))] dark:data-invalid:bg-[color-mix(in_oklch,var(--color-red-500)_5%,var(--color-neutral-800)_5%)] dark:data-invalid:focus-visible:bg-[color-mix(in_oklch,var(--color-red-500)_1%,var(--color-neutral-800))] dark:data-invalid:active:bg-[color-mix(in_oklch,var(--color-red-500)_5%,var(--color-neutral-800)_5%)] data-invalid:pointer-fine:hover:bg-[color-mix(in_oklch,var(--color-red-500)_10%,var(--color-neutral-500)_5%)] data-invalid:pointer-fine:focus-visible:bg-[color-mix(in_oklch,var(--color-red-500)_1%,var(--color-neutral-100))] data-invalid:pointer-fine:active:bg-[color-mix(in_oklch,var(--color-red-500)_5%,var(--color-neutral-100))] dark:data-invalid:pointer-fine:hover:bg-[color-mix(in_oklch,var(--color-red-500)_10%,var(--color-neutral-800)_5%)] dark:data-invalid:pointer-fine:focus-visible:bg-[color-mix(in_oklch,var(--color-red-500)_1%,var(--color-neutral-800))] dark:data-invalid:pointer-fine:active:bg-[color-mix(in_oklch,var(--color-red-500)_5%,var(--color-neutral-800)_5%)]", typeof className === "function" ? className(bag) : className),
|
|
7666
|
+
displayValue: updateDisplayValue,
|
|
7667
|
+
name: props.name,
|
|
7668
|
+
onChange: queryChange,
|
|
7669
|
+
placeholder: placeholder || `${multiple ? "Choose Any" : "Choose One"}${allowCustom ? " or Create Your Own" : ""}`,
|
|
7670
|
+
ref: comboboxInputRef,
|
|
7671
|
+
required
|
|
7672
|
+
}),
|
|
7673
|
+
/* @__PURE__ */ jsx("input", {
|
|
7674
|
+
"aria-hidden": "true",
|
|
7675
|
+
className: "sr-only top-0 left-1/2",
|
|
7676
|
+
id: props.name + ":input:id" + uniqueId,
|
|
7677
|
+
name: props.name,
|
|
7678
|
+
onChange: () => {},
|
|
7679
|
+
onFocus: refocus,
|
|
7680
|
+
onInvalid: handleInvalid,
|
|
7681
|
+
required,
|
|
7682
|
+
tabIndex: -1,
|
|
7683
|
+
value: Array.isArray(selectedOptionSync) ? selectedOptionSync.join(", ") : selectedOptionSync ?? ""
|
|
7684
|
+
}),
|
|
7685
|
+
/* @__PURE__ */ jsx(ComboboxButton, {
|
|
7686
|
+
...buttonProps,
|
|
7687
|
+
className: "absolute top-1/2 right-1.5 -translate-y-1/2 rounded p-0.5",
|
|
7688
|
+
children: /* @__PURE__ */ jsx(ChevronUpChevronDown, { className: "size-3 fill-current/50" })
|
|
7689
|
+
})
|
|
7690
|
+
]
|
|
7691
|
+
}), multiple && !singleDisplay && /* @__PURE__ */ jsx("div", {
|
|
7692
|
+
...shelfProps,
|
|
7693
|
+
className: twMerge("flex min-h-8 flex-wrap gap-1 p-2 before:absolute before:inset-x-0 before:-top-4 before:bottom-0 before:-z-10 before:rounded-b-xl before:border before:border-t-0 before:border-neutral-500/50", shelfClassName),
|
|
7694
|
+
children: searchContext?.selectedOptionList?.length > 0 && [...staticOptionList, ...addedOptionList].filter((option, optionIndex, optionList) => {
|
|
7695
|
+
return optionList.findIndex((innerOption) => innerOption.id === option.id) === optionIndex;
|
|
7696
|
+
}).map((option) => {
|
|
7697
|
+
if (!searchContext.selectedOptionList.some(({ id }) => id === option.id)) return null;
|
|
7698
|
+
return /* @__PURE__ */ jsx(SearchOption, {
|
|
7699
|
+
name: option.name,
|
|
7700
|
+
value: option.id,
|
|
7701
|
+
selectedDisplayProps: option.selectedDisplayProps,
|
|
7702
|
+
isInDisplay: true,
|
|
7703
|
+
children: option.name
|
|
7704
|
+
}, option.id);
|
|
7705
|
+
}).filter(Boolean)
|
|
7706
|
+
})]
|
|
7569
7707
|
}), /* @__PURE__ */ jsxs(ComboboxOptions, {
|
|
7570
7708
|
...optionsProps,
|
|
7571
7709
|
anchor: anchor || "bottom start",
|
|
7572
|
-
className: (bag) => twMerge("z-50 w-(--input-width) origin-top rounded-xl border border-neutral-500/50 bg-neutral-50/95 p-1 backdrop-blur-sm backdrop-brightness-110 transition-[opacity,scale,translate] duration-300 ease-exponential
|
|
7710
|
+
className: (bag) => twMerge("z-50 w-(--input-width) origin-top rounded-xl border border-neutral-500/50 bg-neutral-50/95 p-1 backdrop-blur-sm backdrop-brightness-110 transition-[opacity,scale,translate] duration-300 ease-exponential corner-super-1.5 empty:invisible focus:outline-none data-closed:-translate-y-0.5 data-closed:scale-y-0 data-closed:opacity-0 data-[anchor*=top]:origin-bottom dark:bg-neutral-800/95", multiple && !singleDisplay ? "[--anchor-gap:--spacing(8)]" : "[--anchor-gap:--spacing(1)]", typeof optionsClassName === "function" ? optionsClassName(bag) : optionsClassName),
|
|
7573
7711
|
transition: transition ?? true,
|
|
7574
|
-
children: [
|
|
7575
|
-
|
|
7576
|
-
|
|
7577
|
-
|
|
7578
|
-
|
|
7579
|
-
|
|
7580
|
-
|
|
7581
|
-
|
|
7582
|
-
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7712
|
+
children: [
|
|
7713
|
+
allowCustom && query.length > 0 && customOptionFromQuery && !addedOptionList.some((addedOption) => addedOption.id === customOptionFromQuery.id) && /* @__PURE__ */ jsx(ComboboxOption, {
|
|
7714
|
+
value: customOptionFromQuery,
|
|
7715
|
+
className: "group/option contents",
|
|
7716
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
7717
|
+
className: "flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 transition-[background-color] duration-200 ease-exponential select-none [--theme-color:var(--base-theme-color)] corner-super-1.5 group-disabled/option:opacity-50 group-data-focus/option:bg-(--theme-color)/15 dark:group-data-focus/option:bg-(--theme-color)/15",
|
|
7718
|
+
children: [
|
|
7719
|
+
/* @__PURE__ */ jsx(Plus, { className: "size-3.5" }),
|
|
7720
|
+
"Use ",
|
|
7721
|
+
/* @__PURE__ */ jsxs("b", { children: [
|
|
7722
|
+
"\"",
|
|
7723
|
+
query,
|
|
7724
|
+
"\""
|
|
7725
|
+
] })
|
|
7726
|
+
]
|
|
7727
|
+
})
|
|
7728
|
+
}),
|
|
7729
|
+
children,
|
|
7730
|
+
multiple && addedOptionList.filter((addedOption) => !staticOptionList.some((staticOption) => staticOption.id === addedOption.id)).map((addedOption) => /* @__PURE__ */ jsx(SearchOption, {
|
|
7731
|
+
name: addedOption.name,
|
|
7732
|
+
value: addedOption.id,
|
|
7733
|
+
selectedDisplayProps: addedOption.selectedDisplayProps,
|
|
7734
|
+
children: addedOption.name
|
|
7735
|
+
}, "added:" + addedOption.id))
|
|
7736
|
+
]
|
|
7593
7737
|
})]
|
|
7594
7738
|
}),
|
|
7595
7739
|
description && /* @__PURE__ */ jsx(Description, {
|
|
@@ -7600,6 +7744,31 @@ function Search({ allowCustom, buttonProps, children, className, defaultValue, d
|
|
|
7600
7744
|
]
|
|
7601
7745
|
});
|
|
7602
7746
|
}
|
|
7747
|
+
/**
|
|
7748
|
+
* # Search
|
|
7749
|
+
*
|
|
7750
|
+
* A searchable select component built on top of Headless UI's `Combobox`.
|
|
7751
|
+
*
|
|
7752
|
+
* Use the `SearchOption` component to define options.
|
|
7753
|
+
*
|
|
7754
|
+
* Use the `SearchSectionTitle` component to define titles.
|
|
7755
|
+
*
|
|
7756
|
+
* @prop label - The label for the select component.
|
|
7757
|
+
* @prop description - The description for the select component.
|
|
7758
|
+
* @prop placeholder - The placeholder for the select component.
|
|
7759
|
+
* @prop required - Whether the select component is required.
|
|
7760
|
+
* @prop invalid - Whether the select component is invalid.
|
|
7761
|
+
* @prop multiple - Whether the select component allows multiple selections.
|
|
7762
|
+
* @prop optionsProps - The props to be passed to each SearchOption component.
|
|
7763
|
+
* @prop selectedOptionDisplayProps - The props to be passed to each selected option in the selected option component.
|
|
7764
|
+
* @prop fieldProps - The props to be passed to the parent field component.
|
|
7765
|
+
* @prop labelProps - The props to be passed to the label component.
|
|
7766
|
+
* @prop descriptionProps - The props to be passed to the description component.
|
|
7767
|
+
* @prop anchor - The anchor point for the drop down menu.
|
|
7768
|
+
*/
|
|
7769
|
+
function Search(props) {
|
|
7770
|
+
return /* @__PURE__ */ jsx(SearchContextProvider, { children: /* @__PURE__ */ jsx(SearchField, { ...props }) });
|
|
7771
|
+
}
|
|
7603
7772
|
//#endregion
|
|
7604
7773
|
//#region src/symbols/circle.fill.tsx
|
|
7605
7774
|
function CircleFill({ weight = "regular", ...props }) {
|
|
@@ -9602,25 +9771,21 @@ function TooltipDisplay({ anchor = "top", arrow: arrow$4, arrowClassName, childr
|
|
|
9602
9771
|
clearTimeout(timeoutRef.current);
|
|
9603
9772
|
};
|
|
9604
9773
|
}, []);
|
|
9605
|
-
const [, setTooltipContext] = useTooltipContext(() =>
|
|
9774
|
+
const [tooltipContext, setTooltipContext] = useTooltipContext(() => defaultTooltipContext);
|
|
9606
9775
|
useEffect(() => {
|
|
9607
|
-
|
|
9608
|
-
|
|
9609
|
-
|
|
9610
|
-
|
|
9611
|
-
|
|
9612
|
-
|
|
9613
|
-
|
|
9614
|
-
|
|
9615
|
-
|
|
9616
|
-
|
|
9617
|
-
|
|
9618
|
-
|
|
9619
|
-
|
|
9620
|
-
arrowRef,
|
|
9621
|
-
arrow: nextArrow,
|
|
9622
|
-
arrowClassName: nextArrowClassName
|
|
9623
|
-
};
|
|
9776
|
+
const nextArrow = arrow$4 || false, nextArrowClassName = arrowClassName || "";
|
|
9777
|
+
if (tooltipContext && tooltipContext.isOpen !== isOpen || tooltipContext.openTooltip !== openTooltip || tooltipContext.closeTooltip !== closeTooltip || tooltipContext.refs !== refs || tooltipContext.floatingStyles !== floatingStyles || tooltipContext.isPositioned !== isPositioned || tooltipContext.placement !== placement || tooltipContext.middlewareData !== middlewareData || tooltipContext.arrowRef !== arrowRef || tooltipContext.arrow !== nextArrow || tooltipContext.arrowClassName !== nextArrowClassName) setTooltipContext?.({
|
|
9778
|
+
isOpen,
|
|
9779
|
+
openTooltip,
|
|
9780
|
+
closeTooltip,
|
|
9781
|
+
refs,
|
|
9782
|
+
floatingStyles,
|
|
9783
|
+
isPositioned,
|
|
9784
|
+
placement,
|
|
9785
|
+
middlewareData,
|
|
9786
|
+
arrowRef,
|
|
9787
|
+
arrow: nextArrow,
|
|
9788
|
+
arrowClassName: nextArrowClassName
|
|
9624
9789
|
});
|
|
9625
9790
|
}, [
|
|
9626
9791
|
arrow$4,
|
|
@@ -10095,4 +10260,4 @@ function YouTubeLogo({ className, cutout = false, targets, ...props }) {
|
|
|
10095
10260
|
});
|
|
10096
10261
|
}
|
|
10097
10262
|
//#endregion
|
|
10098
|
-
export { Anchor, Button, Checkbox, Details, DetailsBody, DetailsSummary, DropDown, DropDownButton, DropDownItem, DropDownItems, DropDownSection, DropDownSeparator, FacebookLogo, Fieldset, Form,
|
|
10263
|
+
export { Anchor, Button, Checkbox, Details, DetailsBody, DetailsSummary, DropDown, DropDownButton, DropDownItem, DropDownItems, DropDownSection, DropDownSeparator, FacebookLogo, Fieldset, Form, Ghost, GoogleLogo, Heading, HumanVerification, IFrame, Input, InstagramLogo, Link, LinkedInLogo, Modal, ModalClose, ModalDialog, ModalTitle, ModalTrigger, Search, SearchOption, SearchSectionTitle, Select, SelectOption, SelectSectionTitle, SubmitButton, Textarea, TikTokLogo, Time, Tooltip, TooltipPanel, TooltipTrigger, XLogo, YouTubeLogo, addClass, createFastContext, currentMonthName, currentWeekdayName, daysInMonth, easeOutExpo, emailRegex, extendMadoTailwindMerge, firstOfMonth, formatPhoneNumber, generateHumanValidationToken, getDate, getHours, getHoursIn12, getLinkClasses, getLocalTime, getMeridianFromHour, getMilliseconds, getMinutes, getMonth, getMonthIndexFromName, getMonthName, getNextMonth, getPreviousMonth, getSeconds, getTimezone, getUserReadableDate, getUserReadableDateFromTimestampz, getWeekdayName, getYearsInRange, hasClass, isEmail, isPhoneNumber, monthNamesList, removeClass, splitCamelCase, telRegex, toCamelCase, toFullDateString, toLowerCase, toTitleCase, toggleClass, twMerge, useFormStatusContext, useMobileDevice, usePointerMovement, validateHuman, weekdayNamesList };
|