sag_components 2.0.0-beta314 → 2.0.0-beta316

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -36225,19 +36225,15 @@ const ToggleInput = styled__default["default"].input`
36225
36225
  const ToggleSlider = styled__default["default"].span`
36226
36226
  display: block;
36227
36227
  position: relative;
36228
- background: ${_ref => {
36229
- let {
36230
- checked,
36231
- disabled
36232
- } = _ref;
36233
- return checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0";
36234
- }};
36228
+ background: ${({
36229
+ checked,
36230
+ disabled
36231
+ }) => checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0"};
36235
36232
  border-radius: 999px;
36236
36233
  transition: background 0.2s;
36237
- ${_ref2 => {
36238
- let {
36239
- size
36240
- } = _ref2;
36234
+ ${({
36235
+ size
36236
+ }) => {
36241
36237
  switch (size) {
36242
36238
  case "s":
36243
36239
  return styled.css`width: 40px; height: 20px;`;
@@ -36253,18 +36249,14 @@ const ToggleSlider = styled__default["default"].span`
36253
36249
  left: 3px;
36254
36250
  top: 50%;
36255
36251
  transform: translateY(-50%);
36256
- background: ${_ref3 => {
36257
- let {
36258
- disabled
36259
- } = _ref3;
36260
- return disabled ? "#D0D0D0" : "#fff";
36261
- }};
36252
+ background: ${({
36253
+ disabled
36254
+ }) => disabled ? "#D0D0D0" : "#fff"};
36262
36255
  border-radius: 50%;
36263
36256
  transition: left 0.2s, width 0.2s, height 0.2s;
36264
- ${_ref4 => {
36265
- let {
36266
- size
36267
- } = _ref4;
36257
+ ${({
36258
+ size
36259
+ }) => {
36268
36260
  switch (size) {
36269
36261
  case "s":
36270
36262
  return styled.css`width: 14px; height: 14px;`;
@@ -36274,11 +36266,10 @@ const ToggleSlider = styled__default["default"].span`
36274
36266
  return styled.css`width: 20px; height: 20px;`;
36275
36267
  }
36276
36268
  }}
36277
- left: ${_ref5 => {
36278
- let {
36279
- checked,
36280
- size
36281
- } = _ref5;
36269
+ left: ${({
36270
+ checked,
36271
+ size
36272
+ }) => {
36282
36273
  if (!checked) return "3px";
36283
36274
  switch (size) {
36284
36275
  case "s":
@@ -36292,9 +36283,9 @@ const ToggleSlider = styled__default["default"].span`
36292
36283
  }
36293
36284
  `;
36294
36285
 
36295
- /**
36296
- * ToggleSwitch component for on/off states.
36297
- * Supports small/large sizes and disabled state.
36286
+ /**
36287
+ * ToggleSwitch component for on/off states.
36288
+ * Supports small/large sizes and disabled state.
36298
36289
  */
36299
36290
  function ToggleSwitch(_ref) {
36300
36291
  let {
@@ -42659,6 +42650,16 @@ const DropdownButton$1 = styled__default["default"].button`
42659
42650
  white-space: nowrap;
42660
42651
  text-align: left;
42661
42652
  flex: 1;
42653
+
42654
+ /* Map --cell-* variables (set by Dropdown.jsx) to --tooltip-* variables (expected by tooltipStyles) */
42655
+ --tooltip-top: var(--cell-top);
42656
+ --tooltip-left: var(--cell-left);
42657
+ --tooltip-width: var(--cell-width);
42658
+ --tooltip-offset: calc(var(--cell-offset) + 20px); /* Add 20px to move tooltip up */
42659
+ --tooltip-height: var(--cell-height);
42660
+
42661
+ /* Import shared tooltip styles from TableBody */
42662
+ ${tooltipStyles$1}
42662
42663
  }
42663
42664
  `;
42664
42665
  const DropdownIcon = styled__default["default"].div`
@@ -42780,10 +42781,19 @@ const Dropdown = ({
42780
42781
  showSelectAll = true // New prop to show/hide "Select All" option
42781
42782
  }) => {
42782
42783
  const [isDropdownHovered, setIsDropdownHovered] = React$1.useState(false);
42784
+ const displayTextRef = React$1.useRef(null);
42783
42785
 
42784
42786
  // Normalize selectedValue to always be an array for consistency
42785
42787
  const selectedValues = Array.isArray(selectedValue) ? selectedValue : selectedValue ? [selectedValue] : [];
42786
42788
 
42789
+ // Generate display text based on selections
42790
+ const getDisplayText = () => {
42791
+ if (selectedValues.length === 0) {
42792
+ return placeholder;
42793
+ }
42794
+ return `${selectedValues.map(val => options.find(opt => opt.value === val).label).join(', ')}`;
42795
+ };
42796
+
42787
42797
  // Reset dropdown hover state when dropdown closes
42788
42798
  React$1.useEffect(() => {
42789
42799
  if (!isOpen) {
@@ -42791,6 +42801,46 @@ const Dropdown = ({
42791
42801
  }
42792
42802
  }, [isOpen]);
42793
42803
 
42804
+ // Apply tooltip when text overflows
42805
+ React$1.useEffect(() => {
42806
+ const element = displayTextRef.current;
42807
+ if (element) {
42808
+ const fullText = displayText || getDisplayText();
42809
+
42810
+ // Check if text overflows
42811
+ if (element.scrollWidth > element.clientWidth && fullText && fullText.trim() !== "") {
42812
+ try {
42813
+ const rect = element.getBoundingClientRect();
42814
+ if (rect.width > 0 && rect.height > 0) {
42815
+ const tooltipInfo = calculateTooltipOffset(fullText, true);
42816
+ if (tooltipInfo) {
42817
+ const {
42818
+ offset,
42819
+ height
42820
+ } = tooltipInfo;
42821
+ element.style.setProperty("--cell-top", `${rect.top}px`);
42822
+ element.style.setProperty("--cell-left", `${rect.left}px`);
42823
+ element.style.setProperty("--cell-width", `${rect.width}px`);
42824
+ element.style.setProperty("--cell-offset", `${offset}px`);
42825
+ element.style.setProperty("--cell-height", `${height}px`);
42826
+ element.setAttribute("data-tooltip", fullText);
42827
+ }
42828
+ }
42829
+ } catch (e) {
42830
+ console.warn("Error applying dropdown tooltip:", e);
42831
+ }
42832
+ } else {
42833
+ // Remove tooltip if text doesn't overflow
42834
+ element.removeAttribute("data-tooltip");
42835
+ element.style.removeProperty("--cell-top");
42836
+ element.style.removeProperty("--cell-left");
42837
+ element.style.removeProperty("--cell-width");
42838
+ element.style.removeProperty("--cell-offset");
42839
+ element.style.removeProperty("--cell-height");
42840
+ }
42841
+ }
42842
+ }, [displayText, selectedValues, options, placeholder]);
42843
+
42794
42844
  // Check if an option is selected
42795
42845
  const isOptionSelected = optionValue => {
42796
42846
  return selectedValues.includes(optionValue);
@@ -42833,20 +42883,6 @@ const Dropdown = ({
42833
42883
  }, e);
42834
42884
  }
42835
42885
  };
42836
-
42837
- // Generate display text based on selections
42838
- const getDisplayText = () => {
42839
- if (selectedValues.length === 0) {
42840
- return placeholder;
42841
- }
42842
-
42843
- // if (selectedValues.length === 1) {
42844
- // const selectedOption = options.find(opt => opt.value === selectedValues[0]);
42845
- // return selectedOption ? selectedOption.label : displayText;
42846
- // }
42847
-
42848
- return `${selectedValues.map(val => options.find(opt => opt.value === val).label).join(', ')}`;
42849
- };
42850
42886
  return /*#__PURE__*/React__default["default"].createElement(DropdownContainer$1, {
42851
42887
  onMouseEnter: () => setIsDropdownHovered(true),
42852
42888
  onMouseLeave: () => setIsDropdownHovered(false)
@@ -42856,7 +42892,9 @@ const Dropdown = ({
42856
42892
  $isRowFocused: isRowFocused,
42857
42893
  $isRowHovered: isRowHovered,
42858
42894
  $selectedColor: selectedColor
42859
- }, /*#__PURE__*/React__default["default"].createElement("span", null, displayText || getDisplayText()), /*#__PURE__*/React__default["default"].createElement(DropdownIcon, {
42895
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
42896
+ ref: displayTextRef
42897
+ }, displayText || getDisplayText()), /*#__PURE__*/React__default["default"].createElement(DropdownIcon, {
42860
42898
  $isOpen: isOpen,
42861
42899
  $isRowFocused: isRowFocused,
42862
42900
  $isRowHovered: isRowHovered,
@@ -48002,23 +48040,19 @@ const NewItemList = ({
48002
48040
  // - When searching with external/server-side search: show searchResults (can change length)
48003
48041
  // - When searching with internal search: filter itemAndPackage locally
48004
48042
  const filteredItems = React$1.useMemo(() => {
48005
- // Safety check
48006
48043
  if (!itemAndPackage || !Array.isArray(itemAndPackage)) {
48007
48044
  return [];
48008
48045
  }
48009
-
48010
- // No search value = show static itemAndPackage list
48011
48046
  if (!currentSearchValue) {
48012
48047
  return itemAndPackage;
48013
48048
  }
48014
-
48015
- // Has search value - determine which source to use
48016
- if (isExternalSearch && serverSearchResults !== null) {
48017
- // Server-side search: use separate searchResults array (can have different length)
48018
- return serverSearchResults;
48049
+ if (isExternalSearch) {
48050
+ if (serverSearchResults !== null) {
48051
+ return serverSearchResults;
48052
+ } else {
48053
+ return [];
48054
+ }
48019
48055
  }
48020
-
48021
- // Internal/client-side filtering of itemAndPackage
48022
48056
  const searchLower = currentSearchValue.toLowerCase();
48023
48057
  const results = [];
48024
48058
  const startsWithResults = [];
@@ -48030,7 +48064,8 @@ const NewItemList = ({
48030
48064
  results.push(itemAndPackage[i]);
48031
48065
  }
48032
48066
  }
48033
- return [...startsWithResults, ...results];
48067
+ const finalResults = [...startsWithResults, ...results];
48068
+ return finalResults;
48034
48069
  }, [currentSearchValue, itemAndPackage, serverSearchResults, isExternalSearch]);
48035
48070
 
48036
48071
  // ONLY ONE scroll detection useEffect
@@ -48104,7 +48139,7 @@ const NewItemList = ({
48104
48139
  type: "search",
48105
48140
  placeholder: "Search",
48106
48141
  onChange: handleSearchChange
48107
- }), /*#__PURE__*/React__default["default"].createElement(VendorSearchResult, null, isSearchLoading ? "Searching..." : currentSearchValue !== "" ? `${filteredItems.length === 0 ? "No" : filteredItems.length} Vendors Found` : " ")), /*#__PURE__*/React__default["default"].createElement(VendorListWrapper$1, {
48142
+ }), /*#__PURE__*/React__default["default"].createElement(VendorSearchResult, null, currentSearchValue === "" ? " " : isSearchLoading ? "Searching..." : serverSearchResults === null ? "..." : `${filteredItems.length === 0 ? "No" : filteredItems.length} Vendors Found`)), /*#__PURE__*/React__default["default"].createElement(VendorListWrapper$1, {
48108
48143
  ref: scrollWrapperRef,
48109
48144
  headerHeight: headerHeight
48110
48145
  }, FixedSizeList ? /*#__PURE__*/React__default["default"].createElement(FixedSizeList, {