infinity-ui-elements 1.14.9 → 1.14.11
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/components/SearchableDropdown/SearchableDropdown.d.ts +5 -0
- package/dist/components/SearchableDropdown/SearchableDropdown.d.ts.map +1 -1
- package/dist/components/SearchableDropdown/SearchableDropdown.stories.d.ts +11 -0
- package/dist/components/SearchableDropdown/SearchableDropdown.stories.d.ts.map +1 -1
- package/dist/components/SelectTextField/SelectTextField.d.ts +12 -0
- package/dist/components/SelectTextField/SelectTextField.d.ts.map +1 -1
- package/dist/index.esm.js +30 -14
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +29 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -111,6 +111,11 @@ export interface SearchableDropdownProps extends Omit<TextFieldProps, "onChange"
|
|
|
111
111
|
* @default true
|
|
112
112
|
*/
|
|
113
113
|
showAddNewIfDoesNotMatch?: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Label for the "Add New" option (e.g., "Client", "User", "Company")
|
|
116
|
+
* Used when showAddNew is true and showAddNewIfDoesNotMatch is false
|
|
117
|
+
*/
|
|
118
|
+
addNewLabel?: string;
|
|
114
119
|
/**
|
|
115
120
|
* Callback when "Add New" option is clicked
|
|
116
121
|
* @param value - The search text that the user typed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchableDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/SearchableDropdown/SearchableDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;IAClD;;OAEG;IACH,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACzC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1E;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,sBAAsB,GAAG,SAAS,KACrC,IAAI,CAAC;CACX;AAaD,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SearchableDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/SearchableDropdown/SearchableDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;IAClD;;OAEG;IACH,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACzC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1E;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,sBAAsB,GAAG,SAAS,KACrC,IAAI,CAAC;CACX;AAaD,eAAO,MAAM,kBAAkB,kGA2hB9B,CAAC"}
|
|
@@ -36,6 +36,7 @@ declare const meta: {
|
|
|
36
36
|
showOnFocus?: boolean | undefined;
|
|
37
37
|
showAddNew?: boolean | undefined;
|
|
38
38
|
showAddNewIfDoesNotMatch?: boolean | undefined;
|
|
39
|
+
addNewLabel?: string | undefined;
|
|
39
40
|
onAddNew?: ((value: string) => void) | undefined;
|
|
40
41
|
value?: string | number | undefined;
|
|
41
42
|
defaultValue?: string | number | undefined;
|
|
@@ -392,6 +393,14 @@ declare const meta: {
|
|
|
392
393
|
control: "boolean";
|
|
393
394
|
description: string;
|
|
394
395
|
};
|
|
396
|
+
showAddNewIfDoesNotMatch: {
|
|
397
|
+
control: "boolean";
|
|
398
|
+
description: string;
|
|
399
|
+
};
|
|
400
|
+
addNewLabel: {
|
|
401
|
+
control: "text";
|
|
402
|
+
description: string;
|
|
403
|
+
};
|
|
395
404
|
};
|
|
396
405
|
};
|
|
397
406
|
export default meta;
|
|
@@ -416,6 +425,8 @@ export declare const WithCustomFilter: Story;
|
|
|
416
425
|
export declare const WithFooterActions: Story;
|
|
417
426
|
export declare const MultipleSearchableDropdowns: Story;
|
|
418
427
|
export declare const WithAddNew: Story;
|
|
428
|
+
export declare const WithAddNewAlwaysVisible: Story;
|
|
429
|
+
export declare const WithAddNewCustomLabel: Story;
|
|
419
430
|
export declare const WithDefaultValue: Story;
|
|
420
431
|
export declare const ControlledWithValue: Story;
|
|
421
432
|
//# sourceMappingURL=SearchableDropdown.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchableDropdown.stories.d.ts","sourceRoot":"","sources":["../../../src/components/SearchableDropdown/SearchableDropdown.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"SearchableDropdown.stories.d.ts","sourceRoot":"","sources":["../../../src/components/SearchableDropdown/SearchableDropdown.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+LnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAOnC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAQtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAQtB,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,KAiC/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAiB9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAmB/B,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KA4BzC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KA4CxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KA6CrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAqCnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KA4CjC,CAAC"}
|
|
@@ -67,6 +67,18 @@ export interface SelectTextFieldProps extends Omit<TextFieldProps, "suffix" | "o
|
|
|
67
67
|
* @default "suffix"
|
|
68
68
|
*/
|
|
69
69
|
position?: "prefix" | "suffix";
|
|
70
|
+
/**
|
|
71
|
+
* Whether the select dropdown is disabled (independent of text field)
|
|
72
|
+
* When true, only the select portion is disabled. Use `isDisabled` to disable both.
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
isSelectDisabled?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Whether the text field is disabled (independent of select)
|
|
78
|
+
* When true, only the text field portion is disabled. Use `isDisabled` to disable both.
|
|
79
|
+
* @default false
|
|
80
|
+
*/
|
|
81
|
+
isTextFieldDisabled?: boolean;
|
|
70
82
|
}
|
|
71
83
|
declare const selectTriggerVariants: (props?: ({
|
|
72
84
|
size?: "medium" | "large" | "small" | null | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTextField.d.ts","sourceRoot":"","sources":["../../../src/components/SelectTextField/SelectTextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectTextField.d.ts","sourceRoot":"","sources":["../../../src/components/SelectTextField/SelectTextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAI9C,MAAM,WAAW,oBACf,SAAQ,IAAI,CACV,cAAc,EACd,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,CACjD;IACD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACxE;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3C;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,QAAA,MAAM,qBAAqB;;;;mFAyB1B,CAAC;AAEF,eAAO,MAAM,eAAe,+FA2Z3B,CAAC;AAIF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Slot } from '@radix-ui/react-slot';
|
|
|
5
5
|
import { PulseLoader, ClipLoader } from 'react-spinners';
|
|
6
6
|
import { clsx } from 'clsx';
|
|
7
7
|
import { twMerge } from 'tailwind-merge';
|
|
8
|
-
import { ExternalLink, Calendar, X, ChevronLeft, ChevronRight, Loader2, Search
|
|
8
|
+
import { ExternalLink, Calendar, X, ChevronLeft, ChevronRight, Loader2, Search } from 'lucide-react';
|
|
9
9
|
import { createPortal } from 'react-dom';
|
|
10
10
|
import Calendar$1 from 'react-calendar';
|
|
11
11
|
import 'react-calendar/dist/Calendar.css';
|
|
@@ -4284,7 +4284,7 @@ const defaultFilter = (item, query) => {
|
|
|
4284
4284
|
return (item.label?.toLowerCase()?.includes(searchQuery) ||
|
|
4285
4285
|
(item.description?.toLowerCase()?.includes(searchQuery) ?? false));
|
|
4286
4286
|
};
|
|
4287
|
-
const SearchableDropdown = React.forwardRef(({ className, items = [], sectionHeading, isLoading = false, emptyTitle = "No Search Results Found", emptyDescription = "Add description of what the user can search for here.", emptyLinkText = "Link to support site", onEmptyLinkClick, primaryButtonText, secondaryButtonText, onPrimaryClick, onSecondaryClick, dropdownWidth = "full", showChevron = false, emptyIcon, disableFooter = false, footerLayout = "horizontal", onSearchChange, onItemSelect, filterFunction = defaultFilter, searchValue: controlledSearchValue, defaultSearchValue = "", dropdownClassName, minSearchLength = 0, showOnFocus = true, showAddNew = false, showAddNewIfDoesNotMatch = true, onAddNew, containerClassName, value: controlledValue, defaultValue, onChange, ...textFieldProps }, ref) => {
|
|
4287
|
+
const SearchableDropdown = React.forwardRef(({ className, items = [], sectionHeading, isLoading = false, emptyTitle = "No Search Results Found", emptyDescription = "Add description of what the user can search for here.", emptyLinkText = "Link to support site", onEmptyLinkClick, primaryButtonText, secondaryButtonText, onPrimaryClick, onSecondaryClick, dropdownWidth = "full", showChevron = false, emptyIcon, disableFooter = false, footerLayout = "horizontal", onSearchChange, onItemSelect, filterFunction = defaultFilter, searchValue: controlledSearchValue, defaultSearchValue = "", dropdownClassName, minSearchLength = 0, showOnFocus = true, showAddNew = false, showAddNewIfDoesNotMatch = true, addNewLabel = "Item", onAddNew, containerClassName, value: controlledValue, defaultValue, onChange, ...textFieldProps }, ref) => {
|
|
4288
4288
|
// Find the selected item based on value/defaultValue
|
|
4289
4289
|
const findSelectedItem = React.useCallback((val) => {
|
|
4290
4290
|
if (val === undefined || val === "")
|
|
@@ -4475,12 +4475,23 @@ const SearchableDropdown = React.forwardRef(({ className, items = [], sectionHea
|
|
|
4475
4475
|
}, [items, searchValue, filterFunction]);
|
|
4476
4476
|
// Add "Add New" option based on showAddNew and showAddNewIfDoesNotMatch props
|
|
4477
4477
|
const itemsWithAddNew = React.useMemo(() => {
|
|
4478
|
-
if (!showAddNew
|
|
4478
|
+
if (!showAddNew) {
|
|
4479
4479
|
return filteredItems;
|
|
4480
4480
|
}
|
|
4481
|
+
// When showAddNewIfDoesNotMatch is false, show "Add New" even without search value
|
|
4482
|
+
const shouldShowAddNew = showAddNewIfDoesNotMatch
|
|
4483
|
+
? searchValue.length > 0
|
|
4484
|
+
: true;
|
|
4485
|
+
if (!shouldShowAddNew) {
|
|
4486
|
+
return filteredItems;
|
|
4487
|
+
}
|
|
4488
|
+
// Determine the label for "Add New" option
|
|
4489
|
+
const addNewDisplayLabel = searchValue
|
|
4490
|
+
? `+ Add "${searchValue}"`
|
|
4491
|
+
: `+ Add New ${addNewLabel}`;
|
|
4481
4492
|
const addNewItem = {
|
|
4482
|
-
value: searchValue
|
|
4483
|
-
label:
|
|
4493
|
+
value: searchValue || `new-${addNewLabel}`,
|
|
4494
|
+
label: addNewDisplayLabel,
|
|
4484
4495
|
variant: "primary",
|
|
4485
4496
|
onClick: () => {
|
|
4486
4497
|
if (onAddNew) {
|
|
@@ -4515,6 +4526,7 @@ const SearchableDropdown = React.forwardRef(({ className, items = [], sectionHea
|
|
|
4515
4526
|
}, [
|
|
4516
4527
|
showAddNew,
|
|
4517
4528
|
showAddNewIfDoesNotMatch,
|
|
4529
|
+
addNewLabel,
|
|
4518
4530
|
searchValue,
|
|
4519
4531
|
filteredItems,
|
|
4520
4532
|
onItemSelect,
|
|
@@ -4761,7 +4773,7 @@ const Skeleton = React.forwardRef(({ className, containerClassName, containerSty
|
|
|
4761
4773
|
});
|
|
4762
4774
|
Skeleton.displayName = "Skeleton";
|
|
4763
4775
|
|
|
4764
|
-
const selectTriggerVariants = cva("flex items-center gap-
|
|
4776
|
+
const selectTriggerVariants = cva("flex items-center gap-2 transition-all font-functional font-size-100 leading-100", {
|
|
4765
4777
|
variants: {
|
|
4766
4778
|
size: {
|
|
4767
4779
|
small: "px-2 text-xs",
|
|
@@ -4784,7 +4796,7 @@ const selectTriggerVariants = cva("flex items-center gap-1 transition-all font-f
|
|
|
4784
4796
|
isDisabled: false,
|
|
4785
4797
|
},
|
|
4786
4798
|
});
|
|
4787
|
-
const SelectTextField = React.forwardRef(({ textValue: controlledTextValue, defaultTextValue, onTextChange, selectOptions = [], selectValue: controlledSelectValue, defaultSelectValue, onSelectChange, selectPlaceholder = "Select", selectTriggerClassName, selectMenuClassName, selectMenuWidth = "auto", selectSectionHeading, selectEmptyTitle = "No options available", selectEmptyDescription = "There are no options to select from.", selectEmptyIcon, position = "suffix", label, helperText, errorText, successText, validationState = "none", isDisabled = false, isRequired = false, isOptional = false, size = "medium", containerClassName, labelClassName, inputClassName, className, ...textFieldProps }, ref) => {
|
|
4799
|
+
const SelectTextField = React.forwardRef(({ textValue: controlledTextValue, defaultTextValue, onTextChange, selectOptions = [], selectValue: controlledSelectValue, defaultSelectValue, onSelectChange, selectPlaceholder = "Select", selectTriggerClassName, selectMenuClassName, selectMenuWidth = "auto", selectSectionHeading, selectEmptyTitle = "No options available", selectEmptyDescription = "There are no options to select from.", selectEmptyIcon, position = "suffix", isSelectDisabled = false, isTextFieldDisabled = false, label, helperText, errorText, successText, validationState = "none", isDisabled = false, isRequired = false, isOptional = false, size = "medium", containerClassName, labelClassName, inputClassName, className, ...textFieldProps }, ref) => {
|
|
4788
4800
|
const [uncontrolledTextValue, setUncontrolledTextValue] = React.useState(defaultTextValue || "");
|
|
4789
4801
|
const [uncontrolledSelectValue, setUncontrolledSelectValue] = React.useState(defaultSelectValue);
|
|
4790
4802
|
const [isSelectOpen, setIsSelectOpen] = React.useState(false);
|
|
@@ -4810,6 +4822,10 @@ const SelectTextField = React.forwardRef(({ textValue: controlledTextValue, defa
|
|
|
4810
4822
|
const selectValue = controlledSelectValue !== undefined
|
|
4811
4823
|
? controlledSelectValue
|
|
4812
4824
|
: uncontrolledSelectValue;
|
|
4825
|
+
// Compute effective disabled states
|
|
4826
|
+
// isDisabled disables both; individual props allow disabling each independently
|
|
4827
|
+
const effectiveSelectDisabled = isDisabled || isSelectDisabled;
|
|
4828
|
+
const effectiveTextFieldDisabled = isDisabled || isTextFieldDisabled;
|
|
4813
4829
|
// Find the selected option
|
|
4814
4830
|
const selectedOption = selectOptions.find((opt) => opt.value === selectValue);
|
|
4815
4831
|
// Determine which helper text to show
|
|
@@ -4829,7 +4845,7 @@ const SelectTextField = React.forwardRef(({ textValue: controlledTextValue, defa
|
|
|
4829
4845
|
}
|
|
4830
4846
|
};
|
|
4831
4847
|
const handleSelectOpenChange = (newOpen) => {
|
|
4832
|
-
if (!
|
|
4848
|
+
if (!effectiveSelectDisabled) {
|
|
4833
4849
|
setIsSelectOpen(newOpen);
|
|
4834
4850
|
}
|
|
4835
4851
|
};
|
|
@@ -4957,27 +4973,27 @@ const SelectTextField = React.forwardRef(({ textValue: controlledTextValue, defa
|
|
|
4957
4973
|
const selectComponent = (jsxs("div", { className: cn("relative flex items-stretch h-full"), children: [jsxs("div", { ref: selectRef, className: cn(selectTriggerVariants({
|
|
4958
4974
|
size,
|
|
4959
4975
|
validationState: currentValidationState,
|
|
4960
|
-
isDisabled,
|
|
4976
|
+
isDisabled: effectiveSelectDisabled,
|
|
4961
4977
|
}), "h-full flex items-center self-stretch", position === "prefix"
|
|
4962
4978
|
? "border-r border-action-outline-neutral-faded"
|
|
4963
|
-
: "border-l border-action-outline-neutral-faded", selectTriggerClassName, position === "prefix" ? "pr-4" : "pl-4"), onClick: !
|
|
4979
|
+
: "border-l border-action-outline-neutral-faded", selectTriggerClassName, position === "prefix" ? "pr-4" : "pl-4"), onClick: !effectiveSelectDisabled ? toggleSelectOpen : undefined, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": isSelectOpen, "aria-disabled": effectiveSelectDisabled, children: [jsx("span", { className: cn("text-left truncate max-w-[120px] whitespace-nowrap", !selectedOption && "text-surface-ink-neutral-muted", effectiveSelectDisabled && "text-surface-ink-neutral-disabled", selectedOption && 'text-surface-ink-neutral-normal'), children: selectedOption?.label || selectPlaceholder }), jsx(Icon, { name: 'chevronDown', className: cn("shrink-0 transition-transform mt-1", size === "small"
|
|
4964
4980
|
? "w-3 h-3"
|
|
4965
4981
|
: size === "medium"
|
|
4966
4982
|
? "w-3.5 h-3.5"
|
|
4967
|
-
: "w-4 h-4",
|
|
4983
|
+
: "w-4 h-4", effectiveSelectDisabled
|
|
4968
4984
|
? "text-surface-ink-neutral-disabled"
|
|
4969
4985
|
: currentValidationState === "positive"
|
|
4970
4986
|
? "text-feedback-ink-positive-intense"
|
|
4971
4987
|
: currentValidationState === "negative"
|
|
4972
4988
|
? "text-feedback-ink-negative-subtle"
|
|
4973
|
-
: "text-surface-ink-neutral-muted", isSelectOpen && "transform rotate-180") })] }), isSelectOpen && !
|
|
4989
|
+
: "text-surface-ink-neutral-muted", isSelectOpen && "transform rotate-180") })] }), isSelectOpen && !effectiveSelectDisabled && (isMobile ? (jsx(BottomSheet, { isOpen: isSelectOpen, onClose: () => handleSelectOpenChange(false), title: selectSectionHeading || label, variant: "default", showDragHandle: true, closeOnOverlayClick: true, closeOnEscape: true, closeOnSwipeDown: true, children: renderDropdownContent() })) : (jsx("div", { ref: dropdownContainerRef, className: cn("absolute z-50", position === "prefix" ? "left-[-12px]" : "right-[-12px]", dropdownPlacement === "bottom"
|
|
4974
4990
|
? "top-[30px] mt-1"
|
|
4975
4991
|
: "bottom-full mb-1"), children: renderDropdownContent() })))] }));
|
|
4976
4992
|
return (jsxs("div", { ref: componentRef, className: cn("w-full flex flex-col", sizeConfig[size].gap, containerClassName), children: [label && (jsx(FormHeader, { label: label, size: size, isRequired: isRequired, isOptional: isOptional, infoHeading: textFieldProps.infoHeading, infoDescription: textFieldProps.infoDescription, LinkComponent: textFieldProps.LinkComponent, linkText: textFieldProps.linkText, linkHref: textFieldProps.linkHref, onLinkClick: textFieldProps.onLinkClick, htmlFor: textFieldProps.id, className: "mb-2", labelClassName: labelClassName })), jsx(TextField, { ref: ref, value: textValue, onChange: handleTextChange, ...(position === "prefix"
|
|
4977
4993
|
? { prefix: selectComponent }
|
|
4978
|
-
: { suffix: selectComponent }), size: size, validationState: currentValidationState, isDisabled:
|
|
4994
|
+
: { suffix: selectComponent }), size: size, validationState: currentValidationState, isDisabled: effectiveTextFieldDisabled, isRequired: isRequired, isOptional: isOptional, containerClassName: "gap-0", className: className, inputClassName: inputClassName, ...textFieldProps }), jsx(FormFooter, { helperText: displayHelperText, validationState: currentValidationState === "none"
|
|
4979
4995
|
? "default"
|
|
4980
|
-
: currentValidationState, size: size, isDisabled:
|
|
4996
|
+
: currentValidationState, size: size, isDisabled: effectiveSelectDisabled && effectiveTextFieldDisabled, className: "mt-1" })] }));
|
|
4981
4997
|
});
|
|
4982
4998
|
SelectTextField.displayName = "SelectTextField";
|
|
4983
4999
|
|