fis-component 0.0.50 → 0.0.52

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/esm/index.js CHANGED
@@ -61548,7 +61548,7 @@ function ExitIcon(props) {
61548
61548
  }
61549
61549
 
61550
61550
  function InfoIcon(props) {
61551
- return (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [jsx("g", { "clip-path": "url(#clip0_6263_11228)", children: jsx("path", { d: "M7.99967 10.6667V8.00004M7.99967 5.33337H8.00634M14.6663 8.00004C14.6663 11.6819 11.6816 14.6667 7.99967 14.6667C4.31778 14.6667 1.33301 11.6819 1.33301 8.00004C1.33301 4.31814 4.31778 1.33337 7.99967 1.33337C11.6816 1.33337 14.6663 4.31814 14.6663 8.00004Z", stroke: "currentColor", "stroke-linecap": "round", "stroke-linejoin": "round" }) }), jsx("defs", { children: jsx("clipPath", { id: "clip0_6263_11228", children: jsx("rect", { width: "16", height: "16", fill: "white" }) }) })] }));
61551
+ return (jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M7.99996 0.666626C3.94987 0.666626 0.666626 3.94987 0.666626 7.99996C0.666626 12.05 3.94987 15.3333 7.99996 15.3333C12.05 15.3333 15.3333 12.05 15.3333 7.99996C15.3333 3.94987 12.05 0.666626 7.99996 0.666626ZM7.99996 4.66663C7.63177 4.66663 7.33329 4.9651 7.33329 5.33329C7.33329 5.70148 7.63177 5.99996 7.99996 5.99996H8.00663C8.37482 5.99996 8.67329 5.70148 8.67329 5.33329C8.67329 4.9651 8.37482 4.66663 8.00663 4.66663H7.99996ZM8.66663 7.99996C8.66663 7.63177 8.36815 7.33329 7.99996 7.33329C7.63177 7.33329 7.33329 7.63177 7.33329 7.99996V10.6666C7.33329 11.0348 7.63177 11.3333 7.99996 11.3333C8.36815 11.3333 8.66663 11.0348 8.66663 10.6666V7.99996Z", fill: "#0055C2" }) }));
61552
61552
  }
61553
61553
 
61554
61554
  function CheckIcon(props) {
@@ -61558,12 +61558,17 @@ function CheckIcon(props) {
61558
61558
 
61559
61559
  function WarningIcon(props) {
61560
61560
  const { width = 16, height = 16, ...rest } = props;
61561
- return (jsx("svg", { width: width, height: height, viewBox: "0 0 17 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...rest, children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M8.80013 0.666626C4.75004 0.666626 1.4668 3.94987 1.4668 7.99996C1.4668 12.05 4.75004 15.3333 8.80013 15.3333C12.8502 15.3333 16.1335 12.05 16.1335 7.99996C16.1335 3.94987 12.8502 0.666626 8.80013 0.666626ZM9.4668 5.33329C9.4668 4.9651 9.16832 4.66663 8.80013 4.66663C8.43194 4.66663 8.13346 4.9651 8.13346 5.33329V7.99996C8.13346 8.36815 8.43194 8.66663 8.80013 8.66663C9.16832 8.66663 9.4668 8.36815 9.4668 7.99996V5.33329ZM8.80013 9.99996C8.43194 9.99996 8.13346 10.2984 8.13346 10.6666C8.13346 11.0348 8.43194 11.3333 8.80013 11.3333H8.8068C9.17499 11.3333 9.47346 11.0348 9.47346 10.6666C9.47346 10.2984 9.17499 9.99996 8.8068 9.99996H8.80013Z", fill: "#BC6300" }) }));
61561
+ return (jsx("svg", { width: width, height: height, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...rest, children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M7.99996 0.666626C3.94987 0.666626 0.666626 3.94987 0.666626 7.99996C0.666626 12.05 3.94987 15.3333 7.99996 15.3333C12.05 15.3333 15.3333 12.05 15.3333 7.99996C15.3333 3.94987 12.05 0.666626 7.99996 0.666626ZM8.66663 5.33329C8.66663 4.9651 8.36815 4.66663 7.99996 4.66663C7.63177 4.66663 7.33329 4.9651 7.33329 5.33329V7.99996C7.33329 8.36815 7.63177 8.66663 7.99996 8.66663C8.36815 8.66663 8.66663 8.36815 8.66663 7.99996V5.33329ZM7.99996 9.99996C7.63177 9.99996 7.33329 10.2984 7.33329 10.6666C7.33329 11.0348 7.63177 11.3333 7.99996 11.3333H8.00663C8.37482 11.3333 8.67329 11.0348 8.67329 10.6666C8.67329 10.2984 8.37482 9.99996 8.00663 9.99996H7.99996Z", fill: "#893700" }) }));
61562
61562
  }
61563
61563
 
61564
61564
  function ErrorIcon(props) {
61565
61565
  const { width = 16, height = 16, ...rest } = props;
61566
- return (jsx("svg", { width: width, height: height, viewBox: "0 0 17 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...rest, children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M8.40023 0.666626C4.35014 0.666626 1.06689 3.94987 1.06689 7.99996C1.06689 12.05 4.35014 15.3333 8.40023 15.3333C12.4503 15.3333 15.7336 12.05 15.7336 7.99996C15.7336 3.94987 12.4503 0.666626 8.40023 0.666626ZM9.06689 5.33329C9.06689 4.9651 8.76842 4.66663 8.40023 4.66663C8.03204 4.66663 7.73356 4.9651 7.73356 5.33329V7.99996C7.73356 8.36815 8.03204 8.66663 8.40023 8.66663C8.76842 8.66663 9.06689 8.36815 9.06689 7.99996V5.33329ZM8.40023 9.99996C8.03204 9.99996 7.73356 10.2984 7.73356 10.6666C7.73356 11.0348 8.03204 11.3333 8.40023 11.3333H8.40689C8.77508 11.3333 9.07356 11.0348 9.07356 10.6666C9.07356 10.2984 8.77508 9.99996 8.40689 9.99996H8.40023Z", fill: "#D8473C" }) }));
61566
+ return (jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M7.99996 0.666626C3.94987 0.666626 0.666626 3.94987 0.666626 7.99996C0.666626 12.05 3.94987 15.3333 7.99996 15.3333C12.05 15.3333 15.3333 12.05 15.3333 7.99996C15.3333 3.94987 12.05 0.666626 7.99996 0.666626ZM8.66663 5.33329C8.66663 4.9651 8.36815 4.66663 7.99996 4.66663C7.63177 4.66663 7.33329 4.9651 7.33329 5.33329V7.99996C7.33329 8.36815 7.63177 8.66663 7.99996 8.66663C8.36815 8.66663 8.66663 8.36815 8.66663 7.99996V5.33329ZM7.99996 9.99996C7.63177 9.99996 7.33329 10.2984 7.33329 10.6666C7.33329 11.0348 7.63177 11.3333 7.99996 11.3333H8.00663C8.37482 11.3333 8.67329 11.0348 8.67329 10.6666C8.67329 10.2984 8.37482 9.99996 8.00663 9.99996H7.99996Z", fill: "#A80A12" }) }));
61567
+ }
61568
+
61569
+ function PositiveIcon(props) {
61570
+ const { width = 16, height = 16, ...rest } = props;
61571
+ return (jsx("svg", { width: width, height: height, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M7.99996 0.666626C3.94987 0.666626 0.666626 3.94987 0.666626 7.99996C0.666626 12.05 3.94987 15.3333 7.99996 15.3333C12.05 15.3333 15.3333 12.05 15.3333 7.99996C15.3333 3.94987 12.05 0.666626 7.99996 0.666626ZM11.4714 6.47136C11.7317 6.21101 11.7317 5.7889 11.4714 5.52855C11.211 5.26821 10.7889 5.26821 10.5286 5.52855L6.99996 9.05715L5.47136 7.52855C5.21101 7.2682 4.7889 7.2682 4.52855 7.52855C4.26821 7.7889 4.26821 8.21101 4.52855 8.47136L6.52855 10.4714C6.7889 10.7317 7.21101 10.7317 7.47136 10.4714L11.4714 6.47136Z", fill: "#00652A" }) }));
61567
61572
  }
61568
61573
 
61569
61574
  function ArrowDownIcon(props) {
@@ -62513,7 +62518,7 @@ const FISDivider = (props) => {
62513
62518
 
62514
62519
  const themeIcons = {
62515
62520
  info: jsx(InfoIcon, {}),
62516
- positive: jsx(CheckIcon, {}),
62521
+ positive: jsx(PositiveIcon, {}),
62517
62522
  caution: jsx(WarningIcon, {}),
62518
62523
  negative: jsx(ErrorIcon, {}),
62519
62524
  };
@@ -64210,6 +64215,7 @@ const InputSC$2 = styled.input `
64210
64215
  border: none;
64211
64216
  background: transparent;
64212
64217
  outline: none;
64218
+ cursor: ${(props) => (props.$isPointer ? "pointer" : "text")};
64213
64219
  padding-right: calc(
64214
64220
  ${getTheme("com/input/field/size-md/label/sub-spacing")} +
64215
64221
  ${getTheme("com/input/field/right-padding")}
@@ -64566,32 +64572,41 @@ const DivContainerSC$7 = styled.div `
64566
64572
  pointer-events: auto;
64567
64573
  }
64568
64574
 
64569
- &:has(${InputSC$2}:disabled),
64570
- &:has(${InputSC$2}:read-only) {
64575
+ &:has(${InputSC$2}:disabled) {
64571
64576
  outline-color: ${getTheme("com/input/field/disable/stroke-color")};
64572
64577
  background-color: ${getTheme("com/input/field/disable/background-color")};
64573
64578
  cursor: not-allowed;
64574
64579
 
64580
+ ${InputSC$2} {
64581
+ cursor: not-allowed;
64582
+ }
64583
+
64575
64584
  ${DivIconSC$2} {
64576
64585
  color: ${getTheme("com/input/field/disable/icon-color")};
64586
+ cursor: not-allowed;
64577
64587
  }
64578
64588
  ${DivIconSuffixSC$1} {
64579
64589
  color: ${getTheme("com/input/field/disable/icon-color")};
64590
+ cursor: not-allowed;
64580
64591
  }
64581
64592
  ${DivIconPrefixSC$1} {
64582
64593
  color: ${getTheme("com/input/field/disable/icon-color")};
64594
+ cursor: not-allowed;
64583
64595
  }
64584
64596
 
64585
64597
  .icon-suffix {
64586
64598
  pointer-events: none;
64587
64599
  color: ${getTheme("com/button/disable/icon-color")};
64600
+ cursor: not-allowed;
64588
64601
  }
64589
64602
 
64590
64603
  ${SpanTextPrefixSC} {
64591
64604
  color: ${getTheme("com/input/field/disable/label-color")};
64605
+ cursor: not-allowed;
64592
64606
  }
64593
64607
  ${SpanTextSuffixSC} {
64594
64608
  color: ${getTheme("com/input/field/disable/label-color")};
64609
+ cursor: not-allowed;
64595
64610
  }
64596
64611
 
64597
64612
  &::placeholder {
@@ -64599,11 +64614,49 @@ const DivContainerSC$7 = styled.div `
64599
64614
  }
64600
64615
  }
64601
64616
 
64602
- &:has(${InputSC$2}:read-only) {
64617
+ &:has(${InputSC$2}:read-only):not(:has(${InputSC$2}:disabled)) {
64603
64618
  cursor: default;
64619
+ outline-color: ${getTheme("com/input/field/disable/stroke-color")};
64620
+ background-color: ${getTheme("com/input/field/disable/background-color")};
64621
+
64622
+ ${InputSC$2} {
64623
+ cursor: default;
64624
+ }
64625
+
64626
+ ${DivIconSC$2} {
64627
+ color: ${getTheme("com/input/field/disable/icon-color")};
64628
+ cursor: default;
64629
+ }
64630
+ ${DivIconSuffixSC$1} {
64631
+ color: ${getTheme("com/input/field/disable/icon-color")};
64632
+ cursor: default;
64633
+ }
64634
+ ${DivIconPrefixSC$1} {
64635
+ color: ${getTheme("com/input/field/disable/icon-color")};
64636
+ cursor: default;
64637
+ }
64638
+
64639
+ .icon-suffix {
64640
+ pointer-events: none;
64641
+ color: ${getTheme("com/button/disable/icon-color")};
64642
+ cursor: default;
64643
+ }
64644
+
64645
+ ${SpanTextPrefixSC} {
64646
+ color: ${getTheme("com/input/field/disable/label-color")};
64647
+ cursor: default;
64648
+ }
64649
+ ${SpanTextSuffixSC} {
64650
+ color: ${getTheme("com/input/field/disable/label-color")};
64651
+ cursor: default;
64652
+ }
64653
+
64654
+ &::placeholder {
64655
+ color: ${getTheme("com/input/field/disable/label-color")};
64656
+ }
64604
64657
  }
64605
64658
 
64606
- &:hover:not(.disabled):not(:has(.icon-suffix:hover)) {
64659
+ &:hover:not(:has(${InputSC$2}:disabled)):not(:has(.icon-suffix:hover)) {
64607
64660
  outline-color: ${getTheme("com/input/field/default/border/hover")};
64608
64661
  background-color: ${getTheme("com/input/field/default/background/hover")};
64609
64662
 
@@ -64673,7 +64726,7 @@ const FISInputField = forwardRef(({ onClickSuffix, onClickPrefix, ...props }, re
64673
64726
  "active-dropdown": activeDropdown,
64674
64727
  disabled: disabled,
64675
64728
  "input-text-lg": sizeInput === "lg",
64676
- }), onClick: onClickPrefix, children: [iconPrefix && jsx(DivIconDropSC, { children: iconPrefix }), labelPrefix && jsx(SpanTextDropSC, { children: labelPrefix }), jsx(DivIconPrefixSC$1, { children: jsx(DropdownIcon, {}) })] })), jsx(InputSC$2, { ...rest, ref: ref, disabled: disabled, className: classNames({
64729
+ }), onClick: onClickPrefix, children: [iconPrefix && jsx(DivIconDropSC, { children: iconPrefix }), labelPrefix && jsx(SpanTextDropSC, { children: labelPrefix }), jsx(DivIconPrefixSC$1, { children: jsx(DropdownIcon, {}) })] })), jsx(InputSC$2, { ...rest, ref: ref, disabled: disabled, "$isPointer": props.$isPointer, className: classNames({
64677
64730
  negative: negative,
64678
64731
  "input-text-lg": sizeInput === "lg",
64679
64732
  prefix: iconPrefix,
@@ -66294,7 +66347,7 @@ const PTitleSC$2 = styled.p `
66294
66347
  ${getTheme("Paragraph/Sm")}
66295
66348
  color: ${getTheme("com/menu/item/action/label/color-text/default")};
66296
66349
  `;
66297
- styled.div `
66350
+ const DivWrapperMenuSC = styled.div `
66298
66351
  display: flex;
66299
66352
  flex-direction: column;
66300
66353
  height: 100%;
@@ -67324,62 +67377,64 @@ const FISMenuSection = ({ label, withAction = false, actionText, actionLabel = f
67324
67377
  };
67325
67378
  FISMenuSection.displayName = "FISMenuSection";
67326
67379
 
67327
- const FISMenuSelect = ({ placeholder, groups, size = "md", multi = false, selectedValues = [], onChangeSelected, loading = false, noData = false, noResult = false, combobox, className, onClickMenu, loadingText = "Data loading...", noDataText = "No data", noResultText = "No result", removeSelectedText = "Remove selected", selectedGroupLabel = "Selected", }) => {
67328
- const [search, setSearch] = useState("");
67329
- const menuState = useMemo$1(() => {
67330
- const selectedItemsGroup = multi
67331
- ? {
67332
- groupLabel: selectedGroupLabel,
67333
- items: groups
67334
- .flatMap((group) => group.items)
67335
- .filter((item) => selectedValues?.includes(item.value) &&
67336
- item?.label?.toLowerCase().includes(search.toLowerCase())),
67337
- }
67338
- : null;
67339
- const otherGroups = groups
67340
- .map((group) => ({
67341
- groupLabel: group?.groupLabel,
67342
- items: group.items.filter((item) => (!multi || !selectedValues?.includes(item.value)) &&
67343
- item?.label?.toLowerCase().includes(search.toLowerCase())),
67344
- }))
67345
- .filter((group) => group.items.length > 0);
67346
- const filteredGroups = selectedItemsGroup && selectedItemsGroup.items.length > 0
67347
- ? [selectedItemsGroup, ...otherGroups]
67348
- : otherGroups;
67349
- const removeSelectedGroup = multi && selectedValues.length > 0
67350
- ? {
67351
- groupLabel: "",
67352
- items: [
67353
- {
67354
- label: removeSelectedText,
67355
- description: "",
67356
- value: "__remove_selected__",
67357
- },
67358
- ],
67359
- }
67360
- : null;
67380
+ const FISMenuSelect = ({ placeholder, groups, size = "md", multi = false, selectedValues = [], onChangeSelected, searchValue = "", onSearchChange, loading = false, noData = false, noResult = false, combobox, className, onClickMenu, loadingText = "Data loading...", noDataText = "No data", noResultText = "No result", removeSelectedText = "Remove selected", selectedGroupLabel = "Selected", }) => {
67381
+ const [localSearch, setLocalSearch] = useState(searchValue);
67382
+ useEffect(() => {
67383
+ setLocalSearch(searchValue);
67384
+ }, [searchValue]);
67385
+ const search = localSearch;
67386
+ const filteredGroups = useMemo$1(() => {
67387
+ let filteredItems = groups.map((group) => ({
67388
+ groupLabel: group.groupLabel,
67389
+ items: multi
67390
+ ? group.items.filter((item) => !selectedValues.includes(item.value))
67391
+ : group.items,
67392
+ }));
67393
+ if (search.trim()) {
67394
+ filteredItems = filteredItems.map((group) => ({
67395
+ ...group,
67396
+ items: group.items.filter((item) => item.label.toLowerCase().includes(search.toLowerCase())),
67397
+ }));
67398
+ }
67399
+ return filteredItems.filter((group) => group.items.length > 0);
67400
+ }, [groups, multi, selectedValues, search]);
67401
+ const selectedItemsGroup = useMemo$1(() => {
67402
+ if (!multi)
67403
+ return null;
67404
+ const selectedItems = groups
67405
+ .flatMap((g) => g.items)
67406
+ .filter((item) => selectedValues.includes(item.value));
67407
+ if (selectedItems.length === 0)
67408
+ return null;
67361
67409
  return {
67362
- search,
67363
- selectedItemsGroup,
67364
- otherGroups,
67365
- filteredGroups,
67366
- removeSelectedGroup,
67410
+ groupLabel: selectedGroupLabel,
67411
+ items: selectedItems,
67367
67412
  };
67368
- }, [
67369
- groups,
67370
- multi,
67371
- search,
67372
- selectedValues,
67373
- removeSelectedText,
67374
- selectedGroupLabel,
67375
- ]);
67413
+ }, [groups, multi, selectedValues, selectedGroupLabel]);
67414
+ const groupsToRender = selectedItemsGroup
67415
+ ? [selectedItemsGroup, ...filteredGroups]
67416
+ : filteredGroups;
67417
+ const removeSelectedGroup = multi && selectedValues.length > 0
67418
+ ? {
67419
+ groupLabel: "",
67420
+ items: [
67421
+ {
67422
+ label: removeSelectedText,
67423
+ description: "",
67424
+ value: "__remove_selected__",
67425
+ },
67426
+ ],
67427
+ }
67428
+ : null;
67376
67429
  const totalItems = groups.reduce((acc, group) => acc + group.items.length, 0);
67377
- const showInput = totalItems >= 7;
67378
67430
  const hasSearch = search.trim() !== "";
67379
- const hasFilteredResult = menuState.filteredGroups.length > 0;
67431
+ const showInput = totalItems >= 7 || hasSearch;
67432
+ const hasFilteredResult = groupsToRender.length > 0;
67380
67433
  const shouldShowNoResult = hasSearch && !hasFilteredResult;
67381
67434
  const handleSearchChange = (e) => {
67382
- setSearch(e.target.value);
67435
+ const value = e.target.value;
67436
+ setLocalSearch(value);
67437
+ onSearchChange?.(value);
67383
67438
  };
67384
67439
  const handleItemClick = (item) => {
67385
67440
  if (multi) {
@@ -67388,22 +67443,22 @@ const FISMenuSelect = ({ placeholder, groups, size = "md", multi = false, select
67388
67443
  return;
67389
67444
  }
67390
67445
  let newValues;
67391
- if (selectedValues?.includes(item.value)) {
67446
+ if (selectedValues.includes(item.value)) {
67392
67447
  newValues = selectedValues.filter((v) => v !== item.value);
67393
67448
  }
67394
67449
  else {
67395
- newValues = [...(selectedValues || []), item.value];
67450
+ newValues = [...selectedValues, item.value];
67396
67451
  }
67397
67452
  onChangeSelected?.(newValues);
67398
67453
  return;
67399
67454
  }
67400
67455
  else {
67401
- const newValues = selectedValues?.[0] === item.value ? [] : [item.value];
67456
+ const newValues = selectedValues[0] === item.value ? [] : [item.value];
67402
67457
  onChangeSelected?.(newValues);
67403
67458
  onClickMenu?.();
67404
67459
  }
67405
67460
  };
67406
- return (jsxs(DivContainerSC$4, { className: className, children: [showInput && !combobox && (jsx(DivSearchSC, { children: jsx(FISInputText, { iconPrefix: jsx(SearchIcon, {}), placeholder: placeholder, onChange: handleSearchChange }) })), (shouldShowNoResult || noResult) && (jsxs(DivLoaderSC, { children: [jsx(DivIconDataSC, { children: jsx(NoResultIcon, {}) }), jsx(PTitleSC$2, { children: noResultText })] })), noData && (jsxs(DivLoaderSC, { children: [jsx(DivIconDataSC, { children: jsx(NoDataIcon, {}) }), jsx(PTitleSC$2, { children: noDataText })] })), loading && (jsxs(DivLoaderSC, { children: [jsx(FISProgressCircular, { size: size, variant: "indeterminate" }), jsx(PTitleSC$2, { children: loadingText })] })), !shouldShowNoResult && (jsxs(Fragment, { children: [jsx(MenuContent, { "$removeSelectedGroup": !!menuState.removeSelectedGroup, children: menuState.filteredGroups.map((group, index) => (jsxs(DivWrapperSC$4, { children: [index !== 0 && jsx(FISMenuSection, { withDivider: true }), group?.groupLabel && (jsx(FISMenuSection, { label: group?.groupLabel })), group.items.map((item, idx) => (jsx(FISMenuItem, { title: item.label, description: item.description, size: size, onClickMenu: () => handleItemClick(item), selected: selectedValues?.includes(item.value), type: "select" }, idx)))] }, index))) }), menuState.removeSelectedGroup && (jsx(FixedBottomSection, { children: jsx(DivWrapperSC$4, { children: menuState.removeSelectedGroup.items.map((item, idx) => (jsx(FISMenuItem, { title: item.label, description: item.description, size: size, onClickMenu: () => onChangeSelected?.([]), type: "select", iconPrefix: jsx(RemoveIcon, {}), negative: true }, idx))) }) }))] }))] }));
67461
+ return (jsx(DivContainerSC$4, { className: className, children: jsxs(DivWrapperMenuSC, { children: [showInput && !combobox && (jsx(DivSearchSC, { children: jsx(FISInputText, { iconPrefix: jsx(SearchIcon, {}), placeholder: placeholder, value: search, onChange: handleSearchChange }) })), (shouldShowNoResult || noResult) && (jsxs(DivLoaderSC, { children: [jsx(DivIconDataSC, { children: jsx(NoResultIcon, {}) }), jsx(PTitleSC$2, { children: noResultText })] })), noData && (jsxs(DivLoaderSC, { children: [jsx(DivIconDataSC, { children: jsx(NoDataIcon, {}) }), jsx(PTitleSC$2, { children: noDataText })] })), loading && (jsxs(DivLoaderSC, { children: [jsx(FISProgressCircular, { size: size, variant: "indeterminate" }), jsx(PTitleSC$2, { children: loadingText })] })), !shouldShowNoResult && !noData && !loading && (jsxs(Fragment, { children: [jsx(MenuContent, { "$removeSelectedGroup": !!removeSelectedGroup, children: groupsToRender.map((group, index) => (jsxs(DivWrapperSC$4, { children: [index !== 0 && jsx(FISMenuSection, { withDivider: true }), jsx(FISMenuSection, { label: group?.groupLabel }), group.items.map((item, idx) => (jsx(FISMenuItem, { title: item.label, description: item.description, size: size, onClickMenu: () => handleItemClick(item), selected: selectedValues.includes(item.value), type: "select" }, idx)))] }, index))) }), removeSelectedGroup && (jsx(FixedBottomSection, { children: jsx(DivWrapperSC$4, { children: removeSelectedGroup.items.map((item, idx) => (jsx(FISMenuItem, { title: item.label, description: item.description, size: size, onClickMenu: () => onChangeSelected?.([]), type: "select", iconPrefix: jsx(RemoveIcon, {}), negative: true }, idx))) }) }))] }))] }) }));
67407
67462
  };
67408
67463
  FISMenuSelect.displayName = "FISMenuSelect";
67409
67464
 
@@ -69951,12 +70006,15 @@ function getDefaultContainer() {
69951
70006
  rootPortal.setAttribute("id", rootId);
69952
70007
  return document.body.appendChild(rootPortal);
69953
70008
  }
69954
- function Portal(props) {
70009
+ function Portal({ container, children, portal }) {
69955
70010
  const [mountNode, setMountNode] = useState(null);
69956
70011
  useLayoutEffect$2(() => {
69957
- setMountNode(props.container || getDefaultContainer());
69958
- }, [props.container]);
69959
- return mountNode ? createPortal(props.children, mountNode) : null;
70012
+ setMountNode(container || getDefaultContainer());
70013
+ }, [container]);
70014
+ if (!portal) {
70015
+ return children || null;
70016
+ }
70017
+ return mountNode ? createPortal(children, mountNode) : null;
69960
70018
  }
69961
70019
 
69962
70020
  const DivChipButtonWrapperSC = styled.div `
@@ -70801,7 +70859,7 @@ const FISCombobox = forwardRef(({ className, options, value, disabled = false, t
70801
70859
  }, [filteredOptions, searchValue]);
70802
70860
  return (jsxs(DivWrapperSC$3, { className: className, children: [(textLabel || iconLabel) && (jsx(FISInputLabel, { textLabel: textLabel, required: required, iconLabel: iconLabel, onClickIconLabel: onClickIconLabel })), jsx(DivInputWrapperSC$2, { ref: setReferenceElement, onClick: handleToggle, children: jsx(FISInputField, { ...restProps, ref: ref, iconSuffix: isOpen ? jsx(ArrowUpIcon, {}) : jsx(ArrowDownIcon, {}), value: isOpen && searchValue !== undefined
70803
70861
  ? searchValue
70804
- : computedDisplayValue, disabled: disabled, onClickSuffix: handleToggle, onChange: handleInputChange, onKeyDown: handleInputKeyDown }) }), message && (jsx(SpanHintSC$3, { className: classNames({ disabled, negative, positive }), children: message })), multi && value.length > 0 && (jsx(SelectedTagsWrapper$1, { children: jsx(MultipleValue, { options: selectedOptions, onRemove: handleOptionRemove }) })), isOpen && (jsx(Portal, { children: jsx(DivDropdownMenuSC$1, { ref: setPopperElement, style: { ...styles.popper, width: referenceElement?.offsetWidth }, ...attributes.popper, children: jsx(FISMenuSelect, { groups: filteredOptions, placeholder: placeholderSearch, loading: loading, multi: multi, combobox: true, noResult: hasNoResults, noResultText: noResultText, selectedValues: multi ? value : value ? [value] : [], onChangeSelected: (values) => {
70862
+ : computedDisplayValue, disabled: disabled, onClickSuffix: handleToggle, onChange: handleInputChange, onKeyDown: handleInputKeyDown, "$isPointer": true }) }), message && (jsx(SpanHintSC$3, { className: classNames({ disabled, negative, positive }), children: message })), multi && value.length > 0 && (jsx(SelectedTagsWrapper$1, { children: jsx(MultipleValue, { options: selectedOptions, onRemove: handleOptionRemove }) })), isOpen && (jsx(Portal, { children: jsx(DivDropdownMenuSC$1, { ref: setPopperElement, style: { ...styles.popper, width: referenceElement?.offsetWidth }, ...attributes.popper, children: jsx(FISMenuSelect, { groups: filteredOptions, placeholder: placeholderSearch, loading: loading, multi: multi, combobox: true, noResult: hasNoResults, noResultText: noResultText, selectedValues: multi ? value : value ? [value] : [], onChangeSelected: (values) => {
70805
70863
  if (multi) {
70806
70864
  onChange(values);
70807
70865
  }
@@ -71265,7 +71323,7 @@ const DivHeaderCellContainerSC = styled.div `
71265
71323
  `;
71266
71324
 
71267
71325
  const FISTableHeaderCell = forwardRef(({ className, label, description, rightComponent, disabled, hasRightDivider = true, hasTruncateLabel = false, onlyIcon = false, textAlign = "left", ...rest }, ref) => {
71268
- return (jsx(DivHeaderCellContainerSC, { ref: ref, className: classNames("header-cell-container", className), "$textAlign": textAlign, "$disabled": disabled, "$hasTruncateLabel": hasTruncateLabel, "$hasRightDivider": hasRightDivider, "$onlyIcon": onlyIcon, ...rest, children: jsxs("div", { className: "header-cell-content", children: [jsxs("div", { className: "cell-content title", children: [label && jsx("div", { className: "label", children: label }), rightComponent && (jsx("div", { className: "right-component-father", children: jsx("div", { className: "right-component-child", children: rightComponent }) }))] }), jsx("div", { className: "cell-content", children: description && jsx("div", { className: "description", children: description }) })] }) }));
71326
+ return (jsx(DivHeaderCellContainerSC, { ref: ref, className: classNames("header-cell-container", className), "$textAlign": textAlign, "$disabled": disabled, "$hasTruncateLabel": hasTruncateLabel, "$hasRightDivider": hasRightDivider, "$onlyIcon": onlyIcon, ...rest, children: jsxs("div", { className: "header-cell-content", children: [jsxs("div", { className: "cell-content title", children: [label && jsx("div", { className: "label", children: label }), rightComponent && (jsx("div", { className: "right-component-father", children: jsx("div", { className: "right-component-child", children: rightComponent }) }))] }), description && (jsx("div", { className: "cell-content", children: jsx("div", { className: "description", children: description }) }))] }) }));
71269
71327
  });
71270
71328
  FISTableHeaderCell.displayName = "FISTableHeaderCell";
71271
71329
 
@@ -72999,7 +73057,7 @@ const DivInputWrapperSC = styled.div `
72999
73057
  width: 100%;
73000
73058
  `;
73001
73059
  const DivDropdownMenuSC = styled.div `
73002
- margin-top: ${getTheme("com/select/vertical-gap")};
73060
+ /* margin-top: ${getTheme("com/select/vertical-gap")}; */
73003
73061
  `;
73004
73062
  const SelectedTagsWrapper = styled.div `
73005
73063
  display: flex;
@@ -73014,6 +73072,7 @@ const SelectedTagsWrapper = styled.div `
73014
73072
 
73015
73073
  const InputSC = styled.input `
73016
73074
  width: 100%;
73075
+ cursor: pointer;
73017
73076
  color: ${getTheme("com/select/field/default/label/color-text/inputed")};
73018
73077
  caret-color: ${getTheme("com/typing-cursor/default")};
73019
73078
  border: none;
@@ -73197,12 +73256,17 @@ const DivContainerSC = styled.div `
73197
73256
  `;
73198
73257
  }
73199
73258
  }}
73259
+ &:has(${InputSC}:read-only) {
73260
+ cursor: default;
73261
+ }
73262
+ &:has(${InputSC}:disabled) {
73263
+ cursor: not-allowed;
73264
+ }
73200
73265
 
73201
73266
  &:has(${InputSC}:disabled),
73202
73267
  &:has(${InputSC}:read-only) {
73203
73268
  outline-color: ${getTheme("com/select/field/disable/stroke-color")};
73204
73269
  background-color: ${getTheme("com/select/field/disable/background-color")};
73205
- cursor: not-allowed;
73206
73270
 
73207
73271
  ${DivIconPrefixSC} {
73208
73272
  color: ${getTheme("com/select/field/disable/color-icon")};
@@ -73216,11 +73280,7 @@ const DivContainerSC = styled.div `
73216
73280
  }
73217
73281
  }
73218
73282
 
73219
- &:has(${InputSC}:read-only) {
73220
- cursor: default;
73221
- }
73222
-
73223
- &:hover:not(:has(.icon-suffix:hover)) {
73283
+ &:hover:not(:has(.icon-suffix:hover)):not(:has(${InputSC}:disabled)) {
73224
73284
  outline-color: ${getTheme("com/select/field/default/border/hover")};
73225
73285
  background-color: ${getTheme("com/select/field/default/background/hover")};
73226
73286
 
@@ -73252,80 +73312,143 @@ function isMenuSize(value) {
73252
73312
  return value === "sm" || value === "md";
73253
73313
  }
73254
73314
 
73255
- const FISSelect = forwardRef(({ className, size = "md", options, value, disabled = false, textLabel = "", iconLabel, required, negative, message, positive, multi, placeholderSearch, loading, onChange, renderOption, onClickIconLabel, displayValue, multiDisplayText, ...restProps }, ref) => {
73315
+ const FISSelect = forwardRef(({ className, size = "md", options, value, disabled = false, textLabel = "", iconLabel, required, negative, message, positive, multi, placeholderSearch, loading, onChange, renderOption, onClickIconLabel, displayValue, multiDisplayText, searchValue, onSearchChange, portal, ...restProps }, ref) => {
73256
73316
  const [isOpen, setIsOpen] = useState(false);
73257
73317
  const [referenceElement, setReferenceElement] = useState(null);
73258
73318
  const [popperElement, setPopperElement] = useState(null);
73259
- const { styles, attributes } = usePopper(referenceElement, popperElement, {
73319
+ const popperOptions = useMemo$1(() => ({
73260
73320
  modifiers: [
73261
73321
  { name: "preventOverflow", options: { padding: 0, altAxis: true } },
73322
+ {
73323
+ name: "offset",
73324
+ options: {
73325
+ offset: [0, 4],
73326
+ },
73327
+ },
73262
73328
  ],
73263
73329
  placement: "bottom-start",
73264
73330
  strategy: "fixed",
73265
- });
73266
- const handleToggle = useCallback(() => {
73267
- if (!disabled)
73268
- setIsOpen((prev) => !prev);
73269
- }, [disabled]);
73331
+ }), []);
73332
+ const { styles, attributes } = usePopper(referenceElement, popperElement, popperOptions);
73333
+ const originalOptionsRef = useRef(options);
73270
73334
  useEffect(() => {
73271
- const handleClickOutside = (event) => {
73272
- if (referenceElement &&
73273
- !referenceElement.contains(event.target) &&
73274
- popperElement &&
73275
- !popperElement.contains(event.target)) {
73276
- setIsOpen(false);
73277
- }
73278
- };
73279
- document.addEventListener("mousedown", handleClickOutside);
73280
- return () => document.removeEventListener("mousedown", handleClickOutside);
73281
- }, [referenceElement, popperElement]);
73282
- const flatItems = useMemo$1(() => options.flatMap((group) => group.items), [options]);
73335
+ // Keep track of all items including selected ones
73336
+ const allItems = new Map();
73337
+ // Add items from current options
73338
+ options.forEach((group) => {
73339
+ group.items.forEach((item) => {
73340
+ allItems.set(item.value, item);
73341
+ });
73342
+ });
73343
+ // Add selected items that might not be in current options
73344
+ if (multi && Array.isArray(value)) {
73345
+ const selectedItems = originalOptionsRef.current
73346
+ .flatMap((group) => group.items)
73347
+ .filter((item) => value.includes(item.value));
73348
+ selectedItems.forEach((item) => {
73349
+ allItems.set(item.value, item);
73350
+ });
73351
+ }
73352
+ // Update originalOptionsRef with all items
73353
+ originalOptionsRef.current = [
73354
+ {
73355
+ items: Array.from(allItems.values()),
73356
+ },
73357
+ ];
73358
+ }, [options, value, multi]);
73359
+ const selectedItems = useMemo$1(() => {
73360
+ const allItems = originalOptionsRef.current.flatMap((group) => group.items);
73361
+ if (multi) {
73362
+ return allItems.filter((item) => value.includes(item.value));
73363
+ }
73364
+ else {
73365
+ const found = allItems.find((item) => item.value === value);
73366
+ return found ? [found] : [];
73367
+ }
73368
+ }, [value, multi]);
73283
73369
  const computedDisplayValue = useMemo$1(() => {
73284
73370
  if (multi) {
73285
- const selected = flatItems.filter((item) => value.includes(item.value));
73286
- const count = selected.length;
73371
+ const count = value.length;
73287
73372
  return multiDisplayText
73288
73373
  ? multiDisplayText(count)
73289
73374
  : `Selected ${count.toString().padStart(2, "0")} option${count !== 1 ? "s" : ""}`;
73290
73375
  }
73291
73376
  else {
73292
- const selected = flatItems.find((item) => item.value === value);
73293
- if (!selected)
73377
+ if (!selectedItems[0])
73294
73378
  return "";
73295
- return displayValue?.(selected) || selected.label;
73379
+ return (displayValue?.(selectedItems[0]) || selectedItems[0].label);
73296
73380
  }
73297
- }, [value, flatItems, multi, displayValue]);
73298
- const selectedOptions = useMemo$1(() => {
73299
- if (multi) {
73300
- return flatItems
73301
- .filter((item) => value.includes(item.value))
73302
- .map((item) => ({ label: item.label, value: item.value }));
73303
- }
73304
- return value
73305
- ? flatItems
73306
- .filter((item) => item.value === value)
73307
- .map((item) => ({ label: item.label, value: item.value }))
73308
- : [];
73309
- }, [flatItems, value, multi]);
73381
+ }, [value, multi, displayValue, multiDisplayText, selectedItems]);
73382
+ const handleToggle = useCallback(() => {
73383
+ if (!disabled)
73384
+ setIsOpen((prev) => !prev);
73385
+ }, [disabled]);
73310
73386
  const handleOptionRemove = useCallback((option) => {
73311
73387
  if (multi) {
73312
73388
  const newValues = value.filter((v) => v !== option.value);
73313
73389
  onChange(newValues);
73314
73390
  }
73315
73391
  }, [multi, onChange, value]);
73316
- return (jsxs(DivWrapperSC$1, { className: className, children: [(textLabel || iconLabel) && (jsx(FISInputLabel, { textLabel: textLabel, required: required, iconLabel: iconLabel, onClickIconLabel: onClickIconLabel })), jsx(DivInputWrapperSC, { ref: setReferenceElement, onClick: handleToggle, children: jsx(FISSelectItem, { ...restProps, ref: ref, size: size, iconSuffix: isOpen ? jsx(ArrowUpIcon, {}) : jsx(ArrowDownIcon, {}), value: computedDisplayValue, disabled: disabled, activeDropdown: isOpen }) }), message && (jsx(SpanHintSC$3, { className: classNames({ disabled, negative, positive }), children: message })), multi && value.length > 0 && (jsx(SelectedTagsWrapper, { children: jsx(MultipleValue, { options: selectedOptions, onRemove: handleOptionRemove }) })), isOpen && (jsx(Portal, { children: jsx(DivDropdownMenuSC, { ref: setPopperElement, style: { ...styles.popper, width: referenceElement?.offsetWidth }, ...attributes.popper, children: jsx(FISMenuSelect, { size: isMenuSize(size) ? size : "md", groups: options, placeholder: placeholderSearch, loading: loading, multi: multi, selectedValues: multi ? value : value ? [value] : [], onChangeSelected: (values) => {
73317
- if (multi) {
73318
- onChange(values);
73319
- }
73320
- else {
73321
- onChange(values?.[0]);
73322
- setIsOpen(false);
73323
- }
73324
- }, onClickMenu: () => {
73325
- if (!multi) {
73326
- setIsOpen(false);
73327
- }
73328
- }, ...restProps }) }) }))] }));
73392
+ const handleMenuChange = useCallback((values) => {
73393
+ if (multi) {
73394
+ onChange(values);
73395
+ }
73396
+ else {
73397
+ onChange(values[0]);
73398
+ setIsOpen(false);
73399
+ }
73400
+ }, [multi, onChange]);
73401
+ const handleMenuClick = useCallback(() => {
73402
+ if (!multi) {
73403
+ setIsOpen(false);
73404
+ }
73405
+ }, [multi]);
73406
+ const menuProps = useMemo$1(() => ({
73407
+ groups: options,
73408
+ placeholder: placeholderSearch,
73409
+ loading,
73410
+ multi,
73411
+ size: isMenuSize(size) ? size : "md",
73412
+ selectedValues: multi
73413
+ ? value
73414
+ : value
73415
+ ? [value]
73416
+ : [],
73417
+ onChangeSelected: handleMenuChange,
73418
+ onClickMenu: handleMenuClick,
73419
+ searchValue,
73420
+ onSearchChange,
73421
+ ...restProps,
73422
+ }), [
73423
+ options,
73424
+ placeholderSearch,
73425
+ loading,
73426
+ multi,
73427
+ size,
73428
+ value,
73429
+ handleMenuChange,
73430
+ handleMenuClick,
73431
+ searchValue,
73432
+ onSearchChange,
73433
+ restProps,
73434
+ ]);
73435
+ useEffect(() => {
73436
+ const handleClickOutside = (event) => {
73437
+ if (referenceElement &&
73438
+ !referenceElement.contains(event.target) &&
73439
+ popperElement &&
73440
+ !popperElement.contains(event.target)) {
73441
+ setIsOpen(false);
73442
+ }
73443
+ };
73444
+ document.addEventListener("mousedown", handleClickOutside);
73445
+ return () => document.removeEventListener("mousedown", handleClickOutside);
73446
+ }, [referenceElement, popperElement]);
73447
+ return (jsxs(DivWrapperSC$1, { className: className, children: [(textLabel || iconLabel) && (jsx(FISInputLabel, { textLabel: textLabel, required: required, iconLabel: iconLabel, onClickIconLabel: onClickIconLabel })), jsx(DivInputWrapperSC, { ref: setReferenceElement, onClick: handleToggle, children: jsx(FISSelectItem, { ...restProps, ref: ref, size: size, iconSuffix: isOpen ? jsx(ArrowUpIcon, {}) : jsx(ArrowDownIcon, {}), value: computedDisplayValue, disabled: disabled, activeDropdown: isOpen }) }), message && (jsx(SpanHintSC$3, { className: classNames({ disabled, negative, positive }), children: message })), multi && value.length > 0 && (jsx(SelectedTagsWrapper, { children: jsx(MultipleValue, { options: selectedItems, onRemove: handleOptionRemove }) })), isOpen && (jsx(Portal, { portal: portal, children: jsx(DivDropdownMenuSC, { ref: setPopperElement, style: {
73448
+ ...styles.popper,
73449
+ width: referenceElement?.offsetWidth,
73450
+ zIndex: 9999,
73451
+ }, ...attributes.popper, children: jsx(FISMenuSelect, { ...menuProps }) }) }))] }));
73329
73452
  });
73330
73453
  FISSelect.displayName = "FISSelect";
73331
73454