sag_components 2.0.0-beta275 → 2.0.0-beta277

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
@@ -9302,7 +9302,6 @@ const Label$7 = styled__default["default"].label`
9302
9302
  return props.isFocused || props.hasValue ? '0px' : `${height / 2 - 4}px`;
9303
9303
  }};
9304
9304
  left: ${props => props.isFocused || props.hasValue ? '23px' : '10px'};
9305
- font-family: Poppins;
9306
9305
  transform: translateY(-50%);
9307
9306
  transition: ${props => props.showLabelOnTop ? 'top 0.3s ease, font-size 0.3s ease, color 0.3s ease' : ''} ;
9308
9307
  display: flex;
@@ -24553,7 +24552,6 @@ const OptionsContainer$1 = styled__default["default"].div`
24553
24552
  width: 100%;
24554
24553
  background-color: #fff;
24555
24554
  display: ${props => props.showoptions && props.filteredoptions?.length > 0 ? 'block' : 'none'};
24556
-
24557
24555
  `;
24558
24556
  const OptionsSubContainer = styled__default["default"].ul`
24559
24557
  list-style: none;
@@ -24565,7 +24563,6 @@ const OptionsSubContainer = styled__default["default"].ul`
24565
24563
  left: 0;
24566
24564
  z-index: 101;
24567
24565
  width: calc(100% - 23px);
24568
- font-family: Poppins;
24569
24566
  border-radius: 4px;
24570
24567
  background-color: #fff;
24571
24568
  display: ${props => props.showoptions && props.filteredoptions?.length > 0 ? 'block' : 'none'};
@@ -24576,13 +24573,10 @@ const OptionsSubContainer = styled__default["default"].ul`
24576
24573
  const OptionItem = styled__default["default"].li`
24577
24574
  display: flex;
24578
24575
  align-items: center;
24579
- gap: 8px;
24580
24576
  padding: 10px;
24581
24577
  cursor: pointer;
24582
24578
  color: #212121;
24583
- font-family: Poppins;
24584
24579
  font-size: 14px;
24585
- font-style: normal;
24586
24580
  font-weight: 400;
24587
24581
  transition: background-color 0.3s;
24588
24582
 
@@ -24597,7 +24591,6 @@ const ErrorMessage$1 = styled__default["default"].div`
24597
24591
  `;
24598
24592
  const SelectedOptionsContainer = styled__default["default"].div`
24599
24593
  display: flex;
24600
- flex-direction: row;
24601
24594
  align-items: center;
24602
24595
  gap: 4px;
24603
24596
  flex-wrap: nowrap;
@@ -24646,7 +24639,8 @@ const SelectedOptionCount = styled__default["default"].div`
24646
24639
  const IconContainer$2 = styled__default["default"].div`
24647
24640
  display: flex;
24648
24641
  padding: 2px;
24649
- cursor: pointer;
24642
+ margin-right: 8px;
24643
+ cursor: pointer;
24650
24644
  `;
24651
24645
 
24652
24646
  const QuickFilterDropdownMultiSelection = _ref => {
@@ -35697,7 +35691,7 @@ const Label$3 = styled__default["default"].label`
35697
35691
  if (props.multiline) {
35698
35692
  return props.isFocused || props.hasValue ? '0px' : '20px';
35699
35693
  }
35700
- return props.isFocused || props.hasValue ? '0px' : props.size === 'medium' ? '27px' : '17px';
35694
+ return props.isFocused || props.hasValue ? '0px' : props.size === 'medium' ? '50%' : '17px';
35701
35695
  }};
35702
35696
  left: ${props => {
35703
35697
  if (props.multiline) {
@@ -35705,7 +35699,6 @@ const Label$3 = styled__default["default"].label`
35705
35699
  }
35706
35700
  return props.isFocused || props.hasValue ? '23px' : props.leftIcon && props.leftIcon !== 'none' ? '42px' : '16px';
35707
35701
  }};
35708
- font-family: Poppins;
35709
35702
  transform: translateY(-50%);
35710
35703
  transition: top 0.3s ease, font-size 0.3s ease, color 0.3s ease;
35711
35704
  display: flex;
@@ -37438,8 +37431,8 @@ const ColumnContent = styled__default["default"].div`
37438
37431
  min-height: 20px;
37439
37432
  `;
37440
37433
  const ColumnCheckbox = styled__default["default"].input`
37441
- width: 16px;
37442
- height: 16px;
37434
+ width: 18px;
37435
+ height: 18px;
37443
37436
  cursor: pointer;
37444
37437
  margin: 0;
37445
37438
  `;
@@ -40423,6 +40416,7 @@ const Radio = styled__default["default"].input`
40423
40416
  `;
40424
40417
  const Actions$1 = styled__default["default"].div`
40425
40418
  display: flex;
40419
+ align-items: center;
40426
40420
  justify-content: space-between;
40427
40421
  padding-top: 12px;
40428
40422
  `;
@@ -41351,14 +41345,7 @@ const TableHeader = ({
41351
41345
  onChange: e => handleHeaderCheckboxClick(column.key, e),
41352
41346
  "data-column": column.key,
41353
41347
  style: {
41354
- width: '18px',
41355
- height: '18px',
41356
- marginLeft: '10px',
41357
- cursor: 'pointer',
41358
- accentColor: '#066768',
41359
- display: 'flex',
41360
- alignItems: 'center',
41361
- justifyContent: 'center'
41348
+ accentColor: '#066768'
41362
41349
  }
41363
41350
  }), column.title && /*#__PURE__*/React__default["default"].createElement(ColumnLabel, null, column.title), (column.filter || column.sort) && /*#__PURE__*/React__default["default"].createElement(ColumnActions, null, column.sort && /*#__PURE__*/React__default["default"].createElement(IconButton, {
41364
41351
  ref: el => iconRefs.current[`sort-${column.key}`] = el,
@@ -42116,6 +42103,18 @@ styled__default["default"].div`
42116
42103
  }
42117
42104
  `}
42118
42105
  `;
42106
+ const CheckboxInput = styled__default["default"].input`
42107
+ width: 18px;
42108
+ height: 18px;
42109
+ margin: 0;
42110
+ accent-color: ${props => props.buttonColor || '#066768'};
42111
+ cursor: pointer;
42112
+
42113
+ &:disabled {
42114
+ cursor: not-allowed;
42115
+ opacity: 0.5;
42116
+ }
42117
+ `;
42119
42118
  const HeroButton = styled__default["default"].button`
42120
42119
  display: flex;
42121
42120
  align-items: center;
@@ -42759,6 +42758,7 @@ const TableBody = /*#__PURE__*/React$1.forwardRef(({
42759
42758
  onDropdownSelected = () => {},
42760
42759
  onCheckboxClick = () => {},
42761
42760
  onHeaderCheckboxClick = () => {},
42761
+ disableCheckboxTooltipText = "",
42762
42762
  onHeroClick = () => {},
42763
42763
  onEditableClick = () => {},
42764
42764
  isEditMode = false,
@@ -43162,12 +43162,12 @@ const TableBody = /*#__PURE__*/React$1.forwardRef(({
43162
43162
  hoverTextColor: "#B1B1B1",
43163
43163
  hoverBackgroundColor: "#E6F0F0",
43164
43164
  hoverBorderColor: "#D9D9D9",
43165
+ disabled: true,
43165
43166
  disabledTextColor: "#B1B1B1",
43166
- disabledBackgroundColor: focusedRowIndex === rowIndex ? "#D1E7E7" : hoveredRowIndex === rowIndex ? "#E6F0F0" : "#FFF",
43167
43167
  disabledBorderColor: "#D9D9D9",
43168
+ disabledBackgroundColor: focusedRowIndex === rowIndex ? "#D1E7E7" : hoveredRowIndex === rowIndex ? "#E6F0F0" : "#FFF",
43168
43169
  width: "100px",
43169
- height: "32px",
43170
- disabled: true
43170
+ height: "32px"
43171
43171
  }));
43172
43172
  } else if (lowerValue === "draft") {
43173
43173
  return /*#__PURE__*/React__default["default"].createElement(ButtonWrapper, {
@@ -43389,24 +43389,15 @@ const TableBody = /*#__PURE__*/React$1.forwardRef(({
43389
43389
  return /*#__PURE__*/React__default["default"].createElement("div", {
43390
43390
  style: {
43391
43391
  display: "flex",
43392
- alignItems: "center",
43393
- justifyContent: "center",
43394
- width: "100%",
43395
- height: "100%"
43392
+ alignItems: "center"
43396
43393
  }
43397
- }, /*#__PURE__*/React__default["default"].createElement("input", {
43394
+ }, /*#__PURE__*/React__default["default"].createElement(CheckboxInput, {
43398
43395
  type: "checkbox",
43399
43396
  checked: isChecked,
43400
43397
  disabled: isDisabled,
43398
+ buttonColor: buttonColor,
43401
43399
  onChange: e => handleCheckboxClick(row, column.key, e),
43402
- onClick: e => e.stopPropagation(),
43403
- style: {
43404
- width: "18px",
43405
- height: "18px",
43406
- cursor: isDisabled ? "not-allowed" : "pointer",
43407
- accentColor: buttonColor,
43408
- opacity: isDisabled ? 0.5 : 1
43409
- }
43400
+ onClick: e => e.stopPropagation()
43410
43401
  }));
43411
43402
  } catch (e) {
43412
43403
  console.warn('Error formatting checkbox:', e);
@@ -47036,6 +47027,7 @@ const Table = props => {
47036
47027
  onCheckboxClick = () => {},
47037
47028
  onHeaderCheckboxClick = () => {},
47038
47029
  headerCheckboxStates = {},
47030
+ disableCheckboxTooltipText = "",
47039
47031
  onHeroClick = () => {},
47040
47032
  dotIndicatorColor = '#34D399',
47041
47033
  onEditableClick = () => {},
@@ -47180,6 +47172,7 @@ const Table = props => {
47180
47172
  onDropdownSelected: onDropdownSelected,
47181
47173
  onCheckboxClick: onCheckboxClick,
47182
47174
  onHeaderCheckboxClick: onHeaderCheckboxClick,
47175
+ disableCheckboxTooltipText: disableCheckboxTooltipText,
47183
47176
  onHeroClick: onHeroClick,
47184
47177
  onEditableClick: onEditableClick,
47185
47178
  isEditMode: isEditMode,
@@ -47613,25 +47606,52 @@ styled__default["default"].span`
47613
47606
  font-weight: 600;
47614
47607
  `;
47615
47608
 
47609
+ let FixedSizeList = null;
47610
+ try {
47611
+ FixedSizeList = require('react-window').FixedSizeList;
47612
+ } catch (e) {
47613
+ console.error('react-window not found:', e);
47614
+ }
47615
+ const VENDOR_ITEM_HEIGHT = 72;
47616
47616
  const NewItemList = ({
47617
47617
  onBack,
47618
47618
  onVendorClick,
47619
47619
  itemAndPackage
47620
47620
  }) => {
47621
- const [search, setSearch] = React$1.useState("");
47621
+ const [debouncedSearch, setDebouncedSearch] = React$1.useState("");
47622
47622
  const [headerHeight, setHeaderHeight] = React$1.useState(0);
47623
47623
  const headerRef = React$1.useRef(null);
47624
+ const searchInputRef = React$1.useRef(null);
47625
+ const timerRef = React$1.useRef(null);
47624
47626
  React$1.useEffect(() => {
47625
47627
  if (headerRef.current) {
47626
47628
  setHeaderHeight(headerRef.current.offsetHeight);
47627
47629
  }
47628
47630
  }, []);
47629
- const searchLower = search.toLowerCase();
47630
- const startsWithMatches = itemAndPackage.filter(i => i.name.toLowerCase().startsWith(searchLower));
47631
- const includesMatches = itemAndPackage.filter(i => !i.name.toLowerCase().startsWith(searchLower) && i.name.toLowerCase().includes(searchLower));
47632
- const filteredItems = [...startsWithMatches, ...includesMatches];
47633
-
47634
- // Helper to highlight matched portions
47631
+ const handleSearchChange = e => {
47632
+ const value = e.target.value;
47633
+ if (timerRef.current) {
47634
+ clearTimeout(timerRef.current);
47635
+ }
47636
+ timerRef.current = setTimeout(() => {
47637
+ setDebouncedSearch(value);
47638
+ }, 100);
47639
+ };
47640
+ const filteredItems = React$1.useMemo(() => {
47641
+ if (!debouncedSearch) return itemAndPackage;
47642
+ const searchLower = debouncedSearch.toLowerCase();
47643
+ const results = [];
47644
+ const startsWithResults = [];
47645
+ for (let i = 0; i < itemAndPackage.length; i++) {
47646
+ const nameLower = itemAndPackage[i].name.toLowerCase();
47647
+ if (nameLower.startsWith(searchLower)) {
47648
+ startsWithResults.push(itemAndPackage[i]);
47649
+ } else if (nameLower.includes(searchLower)) {
47650
+ results.push(itemAndPackage[i]);
47651
+ }
47652
+ }
47653
+ return [...startsWithResults, ...results];
47654
+ }, [debouncedSearch, itemAndPackage]);
47635
47655
  const highlightMatch = (text, query) => {
47636
47656
  if (!query) return text;
47637
47657
  const regex = new RegExp(`(${query})`, "ig");
@@ -47641,18 +47661,51 @@ const NewItemList = ({
47641
47661
  };
47642
47662
  const hasValidStatus = pkg => pkg.hasOwnProperty("status") && pkg.status != null && pkg.status !== undefined && pkg.status !== "";
47643
47663
  const draftPackages = pkg => pkg.status === 1;
47664
+ const VendorRow = ({
47665
+ index,
47666
+ style
47667
+ }) => {
47668
+ const item = filteredItems[index];
47669
+ let packagesLength = 0;
47670
+ let sentPackagesLength = 0;
47671
+ if (item.packages !== null) {
47672
+ packagesLength = item.packages.length;
47673
+ sentPackagesLength = item.packages.filter(pkg => hasValidStatus(pkg) && !draftPackages(pkg)).length;
47674
+ }
47675
+ return /*#__PURE__*/React__default["default"].createElement("div", {
47676
+ style: style
47677
+ }, /*#__PURE__*/React__default["default"].createElement(VendorItem, {
47678
+ onClick: e => {
47679
+ if (onVendorClick) {
47680
+ onVendorClick(item);
47681
+ }
47682
+ }
47683
+ }, /*#__PURE__*/React__default["default"].createElement(VendorNameAndPackagesContainer, null, /*#__PURE__*/React__default["default"].createElement(VendorName$1, null, highlightMatch(item.name, debouncedSearch.toLowerCase())), packagesLength > 0 && /*#__PURE__*/React__default["default"].createElement(VendorPackages, null, (() => {
47684
+ const noPackagesSent = sentPackagesLength === 0;
47685
+ if (noPackagesSent) {
47686
+ return `0/${packagesLength} Packages Sent`;
47687
+ } else {
47688
+ return `${sentPackagesLength}/${packagesLength} Packages Sent`;
47689
+ }
47690
+ })())), /*#__PURE__*/React__default["default"].createElement(VendorChevron, null, /*#__PURE__*/React__default["default"].createElement(ArrowRightFullIcon, null))));
47691
+ };
47644
47692
  return /*#__PURE__*/React__default["default"].createElement(VendorSelectionContainer, null, /*#__PURE__*/React__default["default"].createElement(VendorHeader$1, {
47645
47693
  ref: headerRef
47646
47694
  }, /*#__PURE__*/React__default["default"].createElement(VendorRoute, null, /*#__PURE__*/React__default["default"].createElement(VendorBackButton, {
47647
47695
  onClick: onBack
47648
47696
  }, /*#__PURE__*/React__default["default"].createElement(ArrowLeftIcon, null)), /*#__PURE__*/React__default["default"].createElement(VendorBackTitle, null, "Selected Vendors")), /*#__PURE__*/React__default["default"].createElement(VendorSelectionTitle, null, "Add New Vendor"), /*#__PURE__*/React__default["default"].createElement(VendorSearch, {
47697
+ ref: searchInputRef,
47649
47698
  type: "search",
47650
47699
  placeholder: "Search",
47651
- value: search,
47652
- onChange: e => setSearch(e.target.value)
47653
- }), /*#__PURE__*/React__default["default"].createElement(VendorSearchResult, null, search !== "" ? `${filteredItems.length === 0 ? "No" : filteredItems.length} Vendors Found` : " ")), /*#__PURE__*/React__default["default"].createElement(VendorListWrapper$1, {
47700
+ onChange: handleSearchChange
47701
+ }), /*#__PURE__*/React__default["default"].createElement(VendorSearchResult, null, debouncedSearch !== "" ? `${filteredItems.length === 0 ? "No" : filteredItems.length} Vendors Found` : " ")), /*#__PURE__*/React__default["default"].createElement(VendorListWrapper$1, {
47654
47702
  headerHeight: headerHeight
47655
- }, /*#__PURE__*/React__default["default"].createElement(VendorList$1, null, filteredItems.map((item, idx) => {
47703
+ }, FixedSizeList ? /*#__PURE__*/React__default["default"].createElement(FixedSizeList, {
47704
+ height: window.innerHeight - headerHeight - 48,
47705
+ itemCount: filteredItems.length,
47706
+ itemSize: VENDOR_ITEM_HEIGHT,
47707
+ width: "100%"
47708
+ }, VendorRow) : /*#__PURE__*/React__default["default"].createElement(VendorList$1, null, filteredItems.map((item, idx) => {
47656
47709
  let packagesLength = 0;
47657
47710
  let sentPackagesLength = 0;
47658
47711
  if (item.packages !== null) {
@@ -47662,12 +47715,11 @@ const NewItemList = ({
47662
47715
  return /*#__PURE__*/React__default["default"].createElement(VendorItem, {
47663
47716
  key: idx,
47664
47717
  onClick: e => {
47665
- // Always call onVendorClick - it will handle the conversion from null to []
47666
47718
  if (onVendorClick) {
47667
47719
  onVendorClick(item);
47668
47720
  }
47669
47721
  }
47670
- }, /*#__PURE__*/React__default["default"].createElement(VendorNameAndPackagesContainer, null, /*#__PURE__*/React__default["default"].createElement(VendorName$1, null, highlightMatch(item.name, searchLower)), packagesLength > 0 && /*#__PURE__*/React__default["default"].createElement(VendorPackages, null, (() => {
47722
+ }, /*#__PURE__*/React__default["default"].createElement(VendorNameAndPackagesContainer, null, /*#__PURE__*/React__default["default"].createElement(VendorName$1, null, highlightMatch(item.name, debouncedSearch.toLowerCase())), packagesLength > 0 && /*#__PURE__*/React__default["default"].createElement(VendorPackages, null, (() => {
47671
47723
  const noPackagesSent = sentPackagesLength === 0;
47672
47724
  if (noPackagesSent) {
47673
47725
  return `0/${packagesLength} Packages Sent`;
@@ -57808,27 +57860,32 @@ OverlayTemplateDialog.propTypes = {
57808
57860
  // Main Component
57809
57861
  const OverlayDropdown = _ref => {
57810
57862
  let {
57863
+ // Data / selection
57811
57864
  data = [],
57812
57865
  value,
57813
57866
  onSelectClick,
57867
+ // Label / placeholder
57868
+ label,
57869
+ labelEmptyValue,
57870
+ showLabelOnTop,
57871
+ labelColor,
57872
+ placeHolder,
57873
+ placeHolderColor,
57874
+ // Behavior
57875
+ required = false,
57814
57876
  disabled = false,
57815
57877
  isDarkerBackground = false,
57816
- required = false,
57878
+ editableDigitalCoupon = false,
57879
+ // Appearance
57817
57880
  selectedColor = "#066768",
57818
57881
  hoverColor = "#E6F0F0",
57819
- dropdownMaxHeight = "600px",
57882
+ // Sizing
57820
57883
  width = "100%",
57821
57884
  minWidth = "unset",
57885
+ dropdownWidth = "100%",
57886
+ dropdownMaxHeight = "600px",
57822
57887
  height = "auto",
57823
- label,
57824
- labelEmptyValue,
57825
- showLabelOnTop,
57826
- placeHolder,
57827
- labelColor,
57828
- placeHolderColor,
57829
57888
  margin = "8px",
57830
- dropdownWidth = "100%",
57831
- editableDigitalCoupon = false,
57832
57889
  ...props
57833
57890
  } = _ref;
57834
57891
  const [open, setOpen] = React$1.useState(false);