@cwellt_software/cwellt-reactjs-lib 1.0.3 → 1.0.4

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.
Files changed (43) hide show
  1. package/dist/content/icons/new-cw-icons/NewCwIcons.html +389 -6
  2. package/dist/content/icons/new-cw-icons/NewCwIcons.json +1 -1
  3. package/dist/content/icons/new-cw-icons/css/new-cw-icons.css +20 -7
  4. package/dist/content/icons/new-cw-icons/fonts/NewCwIcons.woff +0 -0
  5. package/dist/index.cjs.js +307 -158
  6. package/dist/index.css +2 -2
  7. package/dist/index.d.ts +141 -56
  8. package/dist/index.es.js +313 -157
  9. package/dist/src/common/functions/colorManipulation.d.ts.map +1 -1
  10. package/dist/src/components/control/action/button/CwButton.d.ts +3 -2
  11. package/dist/src/components/control/action/button/CwButton.d.ts.map +1 -1
  12. package/dist/src/components/control/action/buttons/CwButtons.d.ts +0 -7
  13. package/dist/src/components/control/action/buttons/CwButtons.d.ts.map +1 -1
  14. package/dist/src/components/control/action/contextmenu/CwContextMenu.d.ts +4 -0
  15. package/dist/src/components/control/action/contextmenu/CwContextMenu.d.ts.map +1 -1
  16. package/dist/src/components/control/action/search/CwSearch.d.ts +1 -1
  17. package/dist/src/components/control/action/search/CwSearch.d.ts.map +1 -1
  18. package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts +2 -2
  19. package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts.map +1 -1
  20. package/dist/src/components/control/choice/multi-filter/CwMultiFilter.d.ts +122 -33
  21. package/dist/src/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +1 -1
  22. package/dist/src/components/control/choice/toggle/CwToggle.d.ts +0 -4
  23. package/dist/src/components/control/choice/toggle/CwToggle.d.ts.map +1 -1
  24. package/dist/src/components/custom/scheduler/CwSchedulerComp.d.ts.map +1 -1
  25. package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -1
  26. package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +0 -1
  27. package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +1 -1
  28. package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +1 -1
  29. package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -1
  30. package/dist/src/components/display/data/accordion/CwAccordionContainer.d.ts.map +1 -1
  31. package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +1 -0
  32. package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +1 -1
  33. package/dist/src/components/display/data/table/CwTable.d.ts +2 -2
  34. package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
  35. package/dist/src/components/layout/dialog/CwDialog.d.ts +2 -2
  36. package/dist/src/components/layout/dialog/CwDialog.d.ts.map +1 -1
  37. package/dist/src/components/layout/modal/CwModalReportFunctional.d.ts +2 -2
  38. package/dist/src/components/layout/modal/CwModalReportFunctional.d.ts.map +1 -1
  39. package/dist/src/components/layout/tabs/CwTabs.d.ts +2 -1
  40. package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
  41. package/dist/src/index.d.ts +2 -2
  42. package/dist/src/index.d.ts.map +1 -1
  43. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -265,7 +265,7 @@ function CwLoadingSmall(CwelltLoadingAppointements) {
265
265
  jsxRuntime.jsx("div", { className: "cwellt_d_none" })) }));
266
266
  }
267
267
 
268
- var styles$a = {"cw-generic-tooltip":"cw-generic-tooltip-module_cw-generic-tooltip__Ij76M","cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si"};
268
+ var styles$b = {"cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si"};
269
269
 
270
270
  // Constants moved outside to prevent recreation
271
271
  const margin = 16;
@@ -370,23 +370,25 @@ const useTooltipPosition = (isVisible, containerRef, preferredPosition, tooltipC
370
370
  return tooltipState;
371
371
  };
372
372
  // Main component with optimizations
373
- const CwGenericTooltip = ({ children, content = null, position = defaultPosition, dissapearsWhenHover = false, overlayStyle = {}, showDelay = 0, }) => {
373
+ const CwGenericTooltip = ({ children, content = null, position = defaultPosition, dissapearsWhenHover = false, hide = false, overlayStyle = {}, showDelay = 0, }) => {
374
374
  const [isVisible, setIsVisible] = React.useState(false);
375
375
  const containerRef = React.useRef(null);
376
- const { setTooltipTimeout, clearTooltipTimeout } = useTooltipDelay(() => setIsVisible(true), showDelay);
377
- const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$a["cw-generic-tooltip-content"]);
376
+ const { setTooltipTimeout, clearTooltipTimeout } = useTooltipDelay(() => {
377
+ setIsVisible(true);
378
+ }, showDelay);
379
+ const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$b["cw-generic-tooltip-content"]);
378
380
  // Memoize tooltip content creation
379
381
  const tooltipContent = React.useMemo(() => {
380
- if (!isVisible || !content)
382
+ if (hide || !isVisible || !content)
381
383
  return null;
382
- return reactDom.createPortal(jsxRuntime.jsx("div", { className: styles$a["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, style: {
384
+ return reactDom.createPortal(jsxRuntime.jsx("div", { className: styles$b["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, style: {
383
385
  position: 'fixed',
384
386
  top: `${tooltipPosition.top}px`,
385
387
  left: `${tooltipPosition.left}px`,
386
388
  visibility: tooltipPosition.top === 0 && tooltipPosition.left === 0 ? 'hidden' : 'visible',
387
389
  ...overlayStyle
388
390
  }, onMouseEnter: () => dissapearsWhenHover && setIsVisible(false), children: content }), document.body);
389
- }, [isVisible, content, actualPosition, tooltipPosition, dissapearsWhenHover, overlayStyle]);
391
+ }, [isVisible, content, actualPosition, tooltipPosition, dissapearsWhenHover, overlayStyle, hide]);
390
392
  const handleMouseEnter = React.useCallback(() => {
391
393
  setTooltipTimeout();
392
394
  }, [setTooltipTimeout]);
@@ -394,7 +396,7 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
394
396
  clearTooltipTimeout();
395
397
  setIsVisible(false);
396
398
  }, [clearTooltipTimeout]);
397
- return (jsxRuntime.jsxs("div", { ref: containerRef, className: styles$a["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, children: [tooltipContent, children] }));
399
+ return (jsxRuntime.jsxs("div", { ref: containerRef, className: styles$b["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, children: [tooltipContent, children] }));
398
400
  };
399
401
 
400
402
  // Reference for draggable modal
@@ -513,11 +515,52 @@ class CwModalIframe extends React__namespace.Component {
513
515
  }
514
516
  }
515
517
 
516
- var styles$9 = {"cw-dialog-main":"cw-dialog-module_cw-dialog-main__cHxHt","cw-dialog-button-close":"cw-dialog-module_cw-dialog-button-close__9GRd8","cw-dialog-button-save":"cw-dialog-module_cw-dialog-button-save__eZ9SI"};
518
+ var styles$a = {"cw-dialog-main":"cw-dialog-module_cw-dialog-main__cHxHt","cw-dialog-button-close":"cw-dialog-module_cw-dialog-button-close__9GRd8"};
517
519
 
520
+ // Helper function to parse size values
521
+ const parseSize = (size) => {
522
+ if (typeof size === 'number')
523
+ return { value: size, unit: 'px' };
524
+ // Match numeric value and unit
525
+ const match = size.match(/^([\d.]+)(\D+)$/);
526
+ if (match) {
527
+ return { value: parseFloat(match[1]), unit: match[2] };
528
+ }
529
+ // Default to pixels if no unit specified
530
+ return { value: parseFloat(size), unit: 'px' };
531
+ };
532
+ // Helper to convert size to px for calculations
533
+ const convertToPx = (size) => {
534
+ if (size.unit === 'px')
535
+ return size.value;
536
+ if (size.unit === 'rem')
537
+ return size.value * 16; // Assuming 1rem = 16px
538
+ if (size.unit === 'vh')
539
+ return (window.innerHeight * size.value) / 100;
540
+ if (size.unit === 'vw')
541
+ return (window.innerWidth * size.value) / 100;
542
+ return size.value; // Default fallback
543
+ };
518
544
  const CwDialog = props => {
519
545
  const dialogRef = React.useRef(null);
520
- const initialDialogSize = { width: props.dialogSize?.width ?? 800, height: props.dialogSize?.height ?? 600 };
546
+ // Default width and height with units
547
+ const defaultWidth = 800;
548
+ const defaultHeight = 600;
549
+ // Parse width and height from props or use defaults
550
+ const initialWidth = props.dialogSize?.width !== undefined ? props.dialogSize.width : defaultWidth;
551
+ const initialHeight = props.dialogSize?.height !== undefined ? props.dialogSize.height : defaultHeight;
552
+ // Parse the sizes to separate value and unit
553
+ const parsedWidth = parseSize(initialWidth);
554
+ const parsedHeight = parseSize(initialHeight);
555
+ // Convert to px for internal calculations
556
+ const initialWidthPx = convertToPx(parsedWidth);
557
+ const initialHeightPx = convertToPx(parsedHeight);
558
+ const initialDialogSize = {
559
+ width: initialWidthPx,
560
+ height: initialHeightPx,
561
+ widthUnit: parsedWidth.unit,
562
+ heightUnit: parsedHeight.unit
563
+ };
521
564
  const [isDragging, setIsDragging] = React.useState(false);
522
565
  const [resizeDirection, setResizeDirection] = React.useState(null);
523
566
  const [position, setPosition] = React.useState({
@@ -526,6 +569,8 @@ const CwDialog = props => {
526
569
  });
527
570
  const [size, setSize] = React.useState(initialDialogSize);
528
571
  const [dragStart, setDragStart] = React.useState({ x: 0, y: 0 });
572
+ // scrim is true by default
573
+ const hasScrim = props.scrim !== false;
529
574
  React.useEffect(() => {
530
575
  const handleMouseMove = (e) => {
531
576
  if (isDragging) {
@@ -574,7 +619,11 @@ const CwDialog = props => {
574
619
  // Ensure the modal stays within bounds after resizing
575
620
  newX = Math.min(Math.max(newX, minVisiblePx - newWidth), parentRect.width - minVisiblePx);
576
621
  newY = Math.min(Math.max(newY, minVisiblePx - newHeight), parentRect.height - minVisiblePx);
577
- setSize({ width: newWidth, height: newHeight });
622
+ setSize({
623
+ ...size,
624
+ width: newWidth,
625
+ height: newHeight
626
+ });
578
627
  setPosition({ x: newX, y: newY });
579
628
  }
580
629
  }
@@ -599,9 +648,9 @@ const CwDialog = props => {
599
648
  e.stopPropagation();
600
649
  setResizeDirection(direction);
601
650
  };
602
- const header = (jsxRuntime.jsxs("header", { onMouseDown: handleMouseDown, children: [jsxRuntime.jsx("span", { children: props.headline }), props.customHeader || (jsxRuntime.jsx("button", { className: styles$9["cw-dialog-button-close"], onClick: props.onClose, children: "\u2A2F" }))] }));
651
+ const header = (jsxRuntime.jsxs("header", { onMouseDown: handleMouseDown, children: [jsxRuntime.jsx("span", { children: props.headline }), props.customHeader || (jsxRuntime.jsx("button", { className: styles$a["cw-dialog-button-close"], onClick: props.onClose, children: "\u2A2F" }))] }));
603
652
  const content = (jsxRuntime.jsx("section", { style: { flex: 1, overflowX: "auto", overflowY: "auto", width: "100%" }, children: props.children }));
604
- const footer = (jsxRuntime.jsx("footer", { style: { width: "100%" }, children: props.customFooter || (jsxRuntime.jsx("button", { className: styles$9["cw-dialog-button-save"], onClick: props.onSave, children: "\uD83D\uDDAB" })) }));
653
+ const footer = (jsxRuntime.jsx("footer", { style: { width: "100%" }, children: props.customFooter || (jsxRuntime.jsx("button", { className: "cw-button-icon cwi-save", onClick: props.onSave })) }));
605
654
  const resizeHandles = [
606
655
  jsxRuntime.jsx("div", { "data-handle-n": true, onMouseDown: handleResizeMouseDown("n") }, "handle-n"),
607
656
  jsxRuntime.jsx("div", { "data-handle-s": true, onMouseDown: handleResizeMouseDown("s") }, "handle-s"),
@@ -612,11 +661,14 @@ const CwDialog = props => {
612
661
  jsxRuntime.jsx("div", { "data-handle-se": true, onMouseDown: handleResizeMouseDown("se") }, "handle-se"),
613
662
  jsxRuntime.jsx("div", { "data-handle-sw": true, onMouseDown: handleResizeMouseDown("sw") }, "handle-sw")
614
663
  ];
615
- return (props.open && (jsxRuntime.jsx("div", { "data-has-scrim": props.scrim, className: styles$9["cw-dialog-main"], children: jsxRuntime.jsxs("dialog", { ...props, ref: dialogRef, style: {
664
+ // Prepare width and height with units for display
665
+ const displayWidth = `${size.width}${size.widthUnit === 'px' ? 'px' : size.widthUnit}`;
666
+ const displayHeight = `${size.height}${size.heightUnit === 'px' ? 'px' : size.heightUnit}`;
667
+ return (props.open && (jsxRuntime.jsx("div", { "data-has-scrim": hasScrim, className: styles$a["cw-dialog-main"], children: jsxRuntime.jsxs("dialog", { ...props, ref: dialogRef, style: {
616
668
  left: `${position.x}px`,
617
669
  top: `${position.y}px`,
618
- width: `${size.width}px`,
619
- height: `${size.height}px`,
670
+ width: displayWidth,
671
+ height: displayHeight,
620
672
  zIndex: props.zIndex,
621
673
  minWidth: "200px", // Set an appropriate minimum size
622
674
  minHeight: "200px", // Set an appropriate minimum size
@@ -767,6 +819,8 @@ class CwDialogManager {
767
819
  }
768
820
  }
769
821
 
822
+ var styles$9 = {"cw-accordion":"cw-accordion-module_cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module_cw-accordion-body__xlI8b"};
823
+
770
824
  /**
771
825
  *
772
826
  * @param CwelltAccordionContainerProps
@@ -782,11 +836,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
782
836
  setVisible_accordionBody(!isVisible_accordionBody);
783
837
  };
784
838
  // #endregion
785
- return (jsxRuntime.jsxs("div", { className: "cwellt_accordionContainer cwellt_flex cwellt_flex_column cwellt_justify_center cwellt_align_items_center", style: CwelltAccordionContainerProps.style, children: [jsxRuntime.jsxs("div", { className: "cwellt_flex cwelt_accordionHeader cwellt_align_items_center", onClick: () => showAccordionBody(), children: [jsxRuntime.jsx("div", { className: "cwellt_descAccordion cwellt_flex cwellt_align_items_center cwellt_justify_flex_start cwellt_flex_11", children: jsxRuntime.jsx("div", { className: "cwellt_desc_tex", children: CwelltAccordionContainerProps.desc_text }) }), jsxRuntime.jsx("div", { className: "cwellt_btnContent_expandCollapse cwellt_flex cwellt_align_items_center cwellt_justify_center cwellt_flex_1", children: jsxRuntime.jsx("button", { className: isVisible_accordionBody
786
- ? "cwellt_expandCollapse_active cwellt_flex cwellt_align_items_center cwellt_justify_center"
787
- : "cwellt_expandCollapse cwellt_flex cwellt_align_items_center cwellt_justify_center" }) })] }), jsxRuntime.jsx("div", { className: isVisible_accordionBody
788
- ? "cwellt_accordionBody cwellt_flex cwellt_flex_column cwellt_justify_flex_start"
789
- : "cwellt_accordionBody cwellt_display_none cwellt_flex_column cwellt_justify_flex_start", children: CwelltAccordionContainerProps.children })] }));
839
+ return (jsxRuntime.jsxs("div", { className: styles$9["cw-accordion"], style: CwelltAccordionContainerProps.style, "data-open": isVisible_accordionBody, children: [jsxRuntime.jsxs("header", { onClick: () => showAccordionBody(), children: [jsxRuntime.jsx("div", { children: CwelltAccordionContainerProps.desc_text }), jsxRuntime.jsx("button", { className: "cw-button-icon" })] }), jsxRuntime.jsx("div", { className: styles$9["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
790
840
  }
791
841
 
792
842
  /**
@@ -877,7 +927,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
877
927
  * />
878
928
  * @returns React component
879
929
  */
880
- function CwTable({ columns, data, pagination, itemsPerPage, expandedRowRender, onExpand, className, classNameHeader, classNameTr_row, style, classNameContainer, id, textNoData }) {
930
+ function CwTable({ columns, data, pagination, itemsPerPage, expandedRowRender, onExpand, className, classNameHeader, classNameRow, style, classNameContainer, id, textNoData }) {
881
931
  const [currentPage, setCurrentPage] = React.useState(1);
882
932
  const [expandedRowKey, setExpandedRowKey] = React.useState(null);
883
933
  const [sortConfig, setSortConfig] = React.useState({
@@ -944,7 +994,7 @@ function CwTable({ columns, data, pagination, itemsPerPage, expandedRowRender, o
944
994
  setCurrentPage(newPage);
945
995
  }
946
996
  };
947
- return (jsxRuntime.jsxs("div", { id: id, className: classNameContainer + " " + "cwTableComp", children: [jsxRuntime.jsxs("table", { className: className + " " + "cw_table", style: style, children: [jsxRuntime.jsx("thead", { className: `${classNameHeader} cw_thead`, children: jsxRuntime.jsxs("tr", { className: "cw_thead_tr", children: [expandedRowRender && jsxRuntime.jsx("th", { className: "cw_thead_th cw_thead_th_expand" }), columns.map(column => (jsxRuntime.jsx("th", { onClick: () => handleSort(column.dataIndex), className: `cw_thead_th ${column.className} ${sortConfig.key === column.dataIndex ? sortConfig.direction : ""}`, children: column.title }, column.key)))] }) }), jsxRuntime.jsx("tbody", { className: "cw_tbody", children: !paginatedData || paginatedData.length === 0 ? (jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: columns.length + (expandedRowRender ? 1 : 0), style: { textAlign: "center" }, children: textNoData !== undefined && textNoData !== "" ? textNoData : "No data" }) })) : (paginatedData.map(item => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsxs("tr", { className: `${classNameTr_row} cw_tbody_tr`, children: [expandedRowRender && (jsxRuntime.jsx("td", { className: "cw_tbody_td", children: jsxRuntime.jsx("button", { onClick: () => handleRowExpand(item), className: `cwellt_flex cwellt_justify_center cwellt_align_items_center cw_button_expanded_collapse ${expandedRowKey === item.key ? "cw_button_expanded" : "cw_button_collapse"}` }) })), columns.map(column => (jsxRuntime.jsx("td", { className: "cw_tbody_td", children: column.render ? column.render(item) : item[column.dataIndex] }, `${item.key}_${column.key}`)))] }), expandedRowKey === item.key && expandedRowRender && (jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: columns.length + 1, children: expandedRowRender(item) }) }))] }, item.key)))) })] }), pagination && totalPages > 1 && (jsxRuntime.jsxs("div", { className: "cw_table_pagination cwellt_flex cwellt_align-items-start cwellt_align_items_center", children: [jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1, className: "cw_tb_button_pag cw_tb_button_prev cwellt_flex cwellt_justify_center cwellt_align_items_center" }), jsxRuntime.jsxs("span", { className: "cw_table_pag_desc", children: ["Page ", currentPage, " of ", totalPages] }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages, className: "cw_tb_button_pag cw_tb_button_next cwellt_flex cwellt_justify_center cwellt_align_items_center" })] }))] }));
997
+ return (jsxRuntime.jsxs("div", { id: id, className: `cw-table-container ${classNameContainer || ""}`, children: [jsxRuntime.jsxs("table", { className: `cw-table ${className || ""}`, style: style, children: [jsxRuntime.jsx("thead", { className: `${classNameHeader || ""}`, children: jsxRuntime.jsxs("tr", { children: [expandedRowRender && jsxRuntime.jsx("th", {}), columns.map(column => (jsxRuntime.jsx("th", { onClick: () => handleSort(column.dataIndex), className: `${column.className || ""} ${sortConfig.key === column.dataIndex ? sortConfig.direction : ""}`.trim(), children: column.title }, column.key)))] }) }), jsxRuntime.jsx("tbody", { children: !paginatedData || paginatedData.length === 0 ? (jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: columns.length + (expandedRowRender ? 1 : 0), style: { textAlign: "center" }, className: "cw-table-cell-empty", children: textNoData !== undefined && textNoData !== "" ? textNoData : "No data available at the moment" }) })) : (paginatedData.map(item => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsxs("tr", { className: `${classNameRow || ""}`, children: [expandedRowRender && (jsxRuntime.jsx("td", { className: "cw-table-col-action cw-table-col-expand", children: jsxRuntime.jsx("button", { onClick: () => handleRowExpand(item), className: `cw-button-icon ${expandedRowKey === item.key ? "cwi-chevron-down" : "cwi-chevron-right"}` }) })), columns.map(column => (jsxRuntime.jsx("td", { className: column.className || "", children: column.render ? column.render(item) : item[column.dataIndex] }, `${item.key}_${column.key}`)))] }), expandedRowKey === item.key && expandedRowRender && (jsxRuntime.jsx("tr", { className: "cw-table-row-expanded", children: jsxRuntime.jsx("td", { colSpan: columns.length + 1, children: expandedRowRender(item) }) }))] }, item.key)))) })] }), pagination && totalPages > 1 && (jsxRuntime.jsxs("footer", { className: "cw-table-pagination", children: [jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1, className: "cw-button-icon cwi-chevron-left" }), jsxRuntime.jsxs("span", { children: ["Page ", currentPage, " of ", totalPages] }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages, className: "cw-button-icon cwi-chevron-right" })] }))] }));
948
998
  }
949
999
 
950
1000
  var styles$8 = {"cw-tabs":"cw-tabs-module_cw-tabs__1pmji","cw-tabs-content":"cw-tabs-module_cw-tabs-content__HTp8d"};
@@ -987,7 +1037,10 @@ function CwTabs(CwTabsProps) {
987
1037
  }
988
1038
  };
989
1039
  const position = CwTabsProps.tabsPosition || 'top';
990
- return (jsxRuntime.jsxs("div", { id: CwTabsProps.id, className: styles$8['cw-tabs'], "data-tabs-position": position, children: [jsxRuntime.jsx("ul", { children: CwTabsProps.tabs.map(tab => (jsxRuntime.jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsxRuntime.jsx(TabIcon, { icon: tab.icon }), tab.title] }, tab.key))) }), jsxRuntime.jsx("div", { className: styles$8['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
1040
+ const tabsListStyle = position === 'left' && CwTabsProps.tabsListWidth
1041
+ ? { minWidth: CwTabsProps.tabsListWidth }
1042
+ : undefined;
1043
+ return (jsxRuntime.jsxs("div", { id: CwTabsProps.id, className: styles$8['cw-tabs'], "data-tabs-position": position, children: [jsxRuntime.jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxRuntime.jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsxRuntime.jsx(TabIcon, { icon: tab.icon }), tab.title] }, tab.key))) }), jsxRuntime.jsx("div", { className: styles$8['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
991
1044
  }
992
1045
 
993
1046
  /**
@@ -1148,9 +1201,15 @@ function CwInput(CwInputProps) {
1148
1201
  jsxRuntime.jsx("button", { className: "cw_button_clear cwellt_flex cwellt_justify_center cwellt_align_items_center", onClick: handleClearClick }))] }));
1149
1202
  }
1150
1203
 
1151
- function CwButton(props) {
1152
- const { text, ...buttonProps } = props;
1153
- return (jsxRuntime.jsx("button", { type: "button", className: "cw-button", ...buttonProps, children: buttonProps.children ?? text }));
1204
+ function CwButton({ text, variant = 'solid', className = '', children, ...buttonProps }) {
1205
+ let buttonClass = "cw-button";
1206
+ if (variant === 'outline') {
1207
+ buttonClass += " cw-button-outline";
1208
+ }
1209
+ if (className) {
1210
+ buttonClass += ` ${className}`;
1211
+ }
1212
+ return (jsxRuntime.jsx("button", { type: "button", className: buttonClass, ...buttonProps, children: children ?? text }));
1154
1213
  }
1155
1214
 
1156
1215
  /**
@@ -1698,7 +1757,7 @@ class Weekdays {
1698
1757
  static WEEKDAYS_TO_USA_SHORT_FORMAT = new Map([
1699
1758
  ["M", "Mon"],
1700
1759
  ["T", "Tue"],
1701
- ["W", "Wen"],
1760
+ ["W", "Wed"],
1702
1761
  ["R", "Thu"],
1703
1762
  ["F", "Fri"],
1704
1763
  ["S", "Sat"],
@@ -1832,8 +1891,8 @@ function CwCheckbox(CwCheckboxProps) {
1832
1891
  * <CwToggle checked/>
1833
1892
  */
1834
1893
  function CwToggle(props) {
1835
- const { alignProps, labelProps, buttonProps, iconProps, ...inputProps } = props;
1836
- return (jsxRuntime.jsx("div", { className: "cw-toggle", children: jsxRuntime.jsxs(CwAlign, { ...alignProps, children: [labelProps && (jsxRuntime.jsxs(CwLabel, { ...labelProps, children: [iconProps && jsxRuntime.jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxRuntime.jsx("input", { className: "cw-toggle", type: "checkbox", ...inputProps }), buttonProps && jsxRuntime.jsx(CwButton, { ...buttonProps })] }) }));
1894
+ const { labelProps, buttonProps, iconProps, ...inputProps } = props;
1895
+ return (jsxRuntime.jsxs("div", { className: "cw-toggle", children: [labelProps && (jsxRuntime.jsxs(CwLabel, { ...labelProps, children: [iconProps && jsxRuntime.jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxRuntime.jsx("input", { className: "cw-toggle", type: "checkbox", ...inputProps }), buttonProps && jsxRuntime.jsx(CwButton, { ...buttonProps })] }));
1837
1896
  }
1838
1897
 
1839
1898
  /**
@@ -1902,9 +1961,9 @@ function CwDropdown(optionsProps) {
1902
1961
  ? "cwellt_flex cwellt_flex_row cwellt_align_items_center cwDropDownComp" + " " + optionsProps.className
1903
1962
  : optionsProps.labelPosition === "column"
1904
1963
  ? "cwellt_flex cwellt_flex_column cwellt_align-items_baseline cwDropDownComp" + " " + optionsProps.className
1905
- : "cwellt_flex cwellt_flex_row cwellt_align_items_center cwDropDownComp" + " " + optionsProps.className, style: optionsProps.style, children: [jsxRuntime.jsx("label", { className: optionsProps.disabled === true
1964
+ : "cwellt_flex cwellt_flex_row cwellt_align_items_center cwDropDownComp" + " " + optionsProps.className, style: optionsProps.style, id: optionsProps.id, children: [jsxRuntime.jsx("label", { className: optionsProps.disabled === true
1906
1965
  ? "cw_label_text cw_label_text_disabled" + " " + optionsProps.labelClassName
1907
- : "cw_label_text" + " " + optionsProps.labelClassName, children: optionsProps.labelName }), jsxRuntime.jsxs("select", { value: selectedOption, onChange: handleOptionSelect, className: "cw_select", style: optionsProps.styleSelect, disabled: optionsProps.disabled, children: [jsxRuntime.jsx("option", { value: "", className: "cw_option", children: optionsProps.placeholder }), optionsProps.selectList.map(option => (jsxRuntime.jsx("option", { value: option.id, className: "cw_option", style: optionsProps.styleOption, children: option.description }, option.id)))] })] }));
1966
+ : "cw_label_text" + " " + optionsProps.labelClassName, children: optionsProps.labelName }), jsxRuntime.jsx("select", { value: selectedOption, onChange: handleOptionSelect, className: "cw_select", style: optionsProps.styleSelect, disabled: optionsProps.disabled || optionsProps.selectList.length === 0, children: optionsProps.selectList.length === 0 ? (jsxRuntime.jsx("option", { value: "", className: "cw_option", disabled: true, children: "No data" })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("option", { value: "", className: "cw_option", children: optionsProps.placeholder }), optionsProps.selectList.map(option => (jsxRuntime.jsx("option", { value: option.id, className: "cw_option", style: optionsProps.styleOption, children: option.description }, option.id)))] })) })] }));
1908
1967
  }
1909
1968
 
1910
1969
  function CwDropdownContainer(dropDownContainerProps) {
@@ -2794,8 +2853,20 @@ const CwMultiFilterTag = props => {
2794
2853
  var styles$5 = {"cw-multi-filter-catalog-container":"cw-multi-filter-module_cw-multi-filter-catalog-container__S3nsq","cw-multi-filter":"cw-multi-filter-module_cw-multi-filter__zipBK","cw-multi-filter-search":"cw-multi-filter-module_cw-multi-filter-search__eyHr0"};
2795
2854
 
2796
2855
  /**
2797
- * A multiple filter selector, a MULTI-SELECT even.
2856
+ * A multiple filter selector, a MULTI-SELECT even. Allows users to select and filter items based on tags.
2798
2857
  * @remark
2858
+ * The CwMultiFilter component provides a user interface for selecting multiple filter options
2859
+ * organized by categories. Each filter option is represented as a clickable tag with customizable
2860
+ * colors. The component manages the selection state internally but reports changes via a callback.
2861
+ *
2862
+ * Filter tags should include the following properties:
2863
+ * - `Name`: Display name of the filter
2864
+ * - `Value`: Actual value used for filtering logic
2865
+ * - `Category`: Group the filter belongs to
2866
+ * - `ID`: Unique identifier for the filter
2867
+ * - `PrimaryColor`: Background color of the tag
2868
+ * - `OnPrimaryColor`: Text color of the tag
2869
+ *
2799
2870
  * ```
2800
2871
  * ╭───────────────────────────────────────────────────────────────╮
2801
2872
  * │ ╭──────────╮ ╭──────────╮ ╭──────────╮ │
@@ -2810,39 +2881,116 @@ var styles$5 = {"cw-multi-filter-catalog-container":"cw-multi-filter-module_cw-m
2810
2881
  * ╰─────────────────────────────────────────────────────────────╯
2811
2882
  * ```
2812
2883
  * @example
2813
- * ```
2814
- * /// Use setSelectedTags to set the initial selected tags or to add/remove them after an action.
2815
- * const [selectedTags, setSelectedTags] = useState(new Set<CwMultiFilterTagProps>());
2816
- * const [selectedCategory, setSelectedCategory] = useState("");
2884
+ * ```tsx
2885
+ * import { CwMultiFilter, type CwMultiFilterTagProps, type ICwMultiFilterTag } from "cwellt-reactjs-lib";
2886
+ * import { useCallback, useState } from "react";
2887
+ * import { hexToRGB } from "../common/functions/color";
2888
+ *
2889
+ * function FilterExample() {
2890
+ * // State to track selected filter tags
2891
+ * const [selectedTags, setSelectedTags] = useState(new Set<CwMultiFilterTagProps>());
2892
+ *
2893
+ * // Sample data to filter
2894
+ * const [users, setUsers] = useState([
2895
+ * { id: 1, name: "John", role: "admin", department: "IT" },
2896
+ * { id: 2, name: "Sarah", role: "user", department: "HR" },
2897
+ * // More users...
2898
+ * ]);
2817
2899
  *
2818
- * <CwMultiFilter
2819
- * id="multifilter"
2820
- * onChange={tags => { // Collection of currently active tags
2821
- * console.log("This will get called every time the selected filters change");
2822
- * }}
2823
- * selectedTags={selectedTags} // Selected filters, in case you want to modify them manually
2824
- * selectedCategory={selectedCategory}
2825
- * onChangeCategory={setSelectedCategory}
2826
- * allTags={
2827
- * new Set([
2828
- * {
2829
- * Name: "DEF", // The text displayed on the tag/filter/chip
2830
- * Value: "DEF", // Working value, used for whatever you need, it might be the CrewmemberID or the same as Name
2831
- * Category: "Crewmembers", // Category it belongs to (you don't need to define categories elsewhere)
2832
- * ID: "Crewmembers_DEF", // make sure each ID is unique
2833
- * OnPrimaryColor: hexToRGB("#2050a8"), // color for text and outline of the tag/filter/chip
2834
- * PrimaryColor: hexToRGB("#cedcff"), // background color for the tag/filter/chip
2835
- * },
2836
- * {
2837
- * Name: "ABC",
2838
- * Value: "ABC",
2839
- * Category: "Crewmembers",
2840
- * ID: "Crewmembers_ABC",
2841
- * OnPrimaryColor: hexToRGB("#2050a8"), // you can also do { r: 255, g: 128, b: 64 }
2842
- * PrimaryColor: hexToRGB("#cedcff")
2843
- * }
2844
- * ])
2845
- * }
2900
+ * // Filtered users based on selected tags
2901
+ * const [filteredUsers, setFilteredUsers] = useState(users);
2902
+ *
2903
+ * // Define filter options
2904
+ * const filterOptions = new Set([
2905
+ * {
2906
+ * Name: "Admin",
2907
+ * Value: "admin",
2908
+ * Category: "Roles",
2909
+ * ID: "Roles_admin",
2910
+ * OnPrimaryColor: hexToRGB("#2050a8"),
2911
+ * PrimaryColor: hexToRGB("#cedcff")
2912
+ * },
2913
+ * {
2914
+ * Name: "User",
2915
+ * Value: "user",
2916
+ * Category: "Roles",
2917
+ * ID: "Roles_user",
2918
+ * OnPrimaryColor: hexToRGB("#2050a8"),
2919
+ * PrimaryColor: hexToRGB("#cedcff")
2920
+ * },
2921
+ * {
2922
+ * Name: "IT",
2923
+ * Value: "IT",
2924
+ * Category: "Departments",
2925
+ * ID: "Departments_IT",
2926
+ * OnPrimaryColor: hexToRGB("#a82037"),
2927
+ * PrimaryColor: hexToRGB("#ffceda")
2928
+ * },
2929
+ * {
2930
+ * Name: "HR",
2931
+ * Value: "HR",
2932
+ * Category: "Departments",
2933
+ * ID: "Departments_HR",
2934
+ * OnPrimaryColor: hexToRGB("#a82037"),
2935
+ * PrimaryColor: hexToRGB("#ffceda")
2936
+ * }
2937
+ * ]);
2938
+ *
2939
+ * // Handle filter changes
2940
+ * const onChangeFilters = useCallback((tags: Set<ICwMultiFilterTag>) => {
2941
+ * setSelectedTags(tags);
2942
+ * const tagsArray = Array.from(tags);
2943
+ *
2944
+ * // Get values for each category
2945
+ * const roleValues = tagsArray
2946
+ * .filter(tag => tag.Category === "Roles")
2947
+ * .map(tag => tag.Value);
2948
+ *
2949
+ * const departmentValues = tagsArray
2950
+ * .filter(tag => tag.Category === "Departments")
2951
+ * .map(tag => tag.Value);
2952
+ *
2953
+ * // Apply filters
2954
+ * if (tagsArray.length === 0) {
2955
+ * // No filters applied
2956
+ * setFilteredUsers(users);
2957
+ * } else {
2958
+ * let filtered = users;
2959
+ *
2960
+ * if (roleValues.length > 0) {
2961
+ * filtered = filtered.filter(user => roleValues.includes(user.role));
2962
+ * }
2963
+ *
2964
+ * if (departmentValues.length > 0) {
2965
+ * filtered = filtered.filter(user => departmentValues.includes(user.department));
2966
+ * }
2967
+ *
2968
+ * setFilteredUsers(filtered);
2969
+ * }
2970
+ * }, [users]);
2971
+ *
2972
+ * return (
2973
+ * <div>
2974
+ * <h2>Filter Users</h2>
2975
+ * <div style={{ width: "50%" }}>
2976
+ * <CwMultiFilter
2977
+ * id="user-filter"
2978
+ * allTags={filterOptions}
2979
+ * onChangeSelectedTags={onChangeFilters}
2980
+ * selectedTags={selectedTags}
2981
+ * />
2982
+ * </div>
2983
+ * <div style={{ marginTop: "20px" }}>
2984
+ * <h3>Filtered Results ({filteredUsers.length})</h3>
2985
+ * <ul>
2986
+ * {filteredUsers.map(user => (
2987
+ * <li key={user.id}>{user.name} - {user.role} ({user.department})</li>
2988
+ * ))}
2989
+ * </ul>
2990
+ * </div>
2991
+ * </div>
2992
+ * );
2993
+ * }
2846
2994
  * ```
2847
2995
  * @param {CwMultiFilterProps} props
2848
2996
  * @returns Set the `onChange` callback to a function to check for changes in the selected filters
@@ -2950,7 +3098,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
2950
3098
  };
2951
3099
  return (jsxRuntime.jsxs("form", { ref: componentRef, id: id, className: styles$5["cw-multi-filter"], style: style, onSubmit: (e) => {
2952
3100
  e.preventDefault();
2953
- }, children: [jsxRuntime.jsxs("div", { onClick: handleDivClick, className: styles$5["cw-multi-filter-search"], style: isPanelOpen ? { outline: "1px solid var(--cw-color-primary)", outlineOffset: "-2px" } : {}, children: [jsxRuntime.jsxs("ul", { id: id + "_selected_filters", children: [Array.from(selectedTags).map(tag => (React.createElement(CwMultiFilterTag, { ...tag, key: tag.ID, Selectable: false, Removable: true, OnRemove: () => removeTag(tag.ID) }))), jsxRuntime.jsx("input", { type: "text", id: id + "_input", ref: inputRef, value: inputTextValue, spellCheck: false, onFocus: () => setIsPanelOpen(true), onChange: e => handleInputText(e.target.value), autoComplete: "off", onKeyDown: e => {
3101
+ }, children: [jsxRuntime.jsxs("div", { onClick: handleDivClick, className: styles$5["cw-multi-filter-search"], style: isPanelOpen ? { outline: "1px solid var(--cw-color-primary)", outlineOffset: "-2px" } : {}, children: [jsxRuntime.jsxs("ul", { id: id + "_selected_filters", children: [Array.from(selectedTags).map(tag => (React.createElement(CwMultiFilterTag, { ...tag, key: tag.ID, Selectable: false, Removable: true, OnRemove: () => removeTag(tag.ID) }))), jsxRuntime.jsx("input", { type: "text", id: id + "_input", ref: inputRef, value: inputTextValue, spellCheck: false, onFocus: () => setIsPanelOpen(true), onChange: e => handleInputText(e.target.value), autoComplete: "off", placeholder: "Write to filter", onKeyDown: e => {
2954
3102
  switch (e.key) {
2955
3103
  case "Enter":
2956
3104
  case "Tab":
@@ -3001,20 +3149,49 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3001
3149
  function CwSearchInput(optionsProps) {
3002
3150
  const [searchText, setSearchText] = React.useState("");
3003
3151
  const [filteredOptions, setFilteredOptions] = React.useState([]);
3152
+ const [_selectedOption, setSelectedOption] = React.useState(null);
3153
+ // Make default value selection when loading the component
3154
+ React.useEffect(() => {
3155
+ if (optionsProps.defaultValue && optionsProps.selectList && optionsProps.selectList.length > 0) {
3156
+ const defaultOption = optionsProps.selectList.find(option => option.id === optionsProps.defaultValue?.toString());
3157
+ if (defaultOption) {
3158
+ setSearchText(defaultOption.description);
3159
+ setSelectedOption(defaultOption);
3160
+ // Notify the parent component if there is a handleChange
3161
+ if (optionsProps.handleChange) {
3162
+ optionsProps.handleChange(defaultOption.id);
3163
+ }
3164
+ }
3165
+ }
3166
+ }, [optionsProps.defaultValue, optionsProps.selectList]);
3004
3167
  const handleInputChange = (event) => {
3005
3168
  const text = event.target.value;
3006
3169
  setSearchText(text);
3007
3170
  if (text === "") {
3008
3171
  setFilteredOptions([]);
3172
+ setSelectedOption(null);
3173
+ // Notify that there is no selection
3174
+ if (optionsProps.handleChange) {
3175
+ optionsProps.handleChange("");
3176
+ }
3009
3177
  }
3010
3178
  else {
3011
- // Filter options based on search text
3012
- const filtered = optionsProps.selectList.filter((option) => option.description.toLowerCase().includes(text.toLowerCase()));
3179
+ // Filter options based on search text in any text property
3180
+ const filtered = optionsProps.selectList.filter((option) => {
3181
+ // Search all properties of the object
3182
+ return Object.keys(option).some(key => {
3183
+ const value = option[key];
3184
+ // Verify that the value is a string or number and contains the search text
3185
+ return (typeof value === 'string' || typeof value === 'number') &&
3186
+ String(value).toLowerCase().includes(text.toLowerCase());
3187
+ });
3188
+ });
3013
3189
  setFilteredOptions(filtered);
3014
3190
  }
3015
3191
  };
3016
3192
  const handleOptionSelect = (option) => {
3017
3193
  setSearchText(option.description);
3194
+ setSelectedOption(option);
3018
3195
  if (optionsProps.handleChange) {
3019
3196
  optionsProps.handleChange(option.id);
3020
3197
  }
@@ -3024,14 +3201,15 @@ function CwSearchInput(optionsProps) {
3024
3201
  const handleClearClick = () => {
3025
3202
  setSearchText("");
3026
3203
  setFilteredOptions([]);
3204
+ setSelectedOption(null);
3027
3205
  };
3028
- return (jsxRuntime.jsxs("div", { className: "cwellt_flex cwellt_flex_row cwellt_flex_wrap cwellt_p_rel cwSearchInputComp", style: optionsProps.style, id: optionsProps.id, children: [jsxRuntime.jsxs("div", { className: optionsProps.labelPosition === "inline"
3029
- ? "cwellt_flex cwellt_flex_row "
3206
+ return (jsxRuntime.jsxs("div", { className: "cwSearchInputComp", style: optionsProps.style, id: optionsProps.id, children: [jsxRuntime.jsxs("div", { className: optionsProps.labelPosition === "inline"
3207
+ ? "cw-flex-row "
3030
3208
  : optionsProps.labelPosition === "column"
3031
- ? "cwellt_flex cwellt_flex_column"
3032
- : "cwellt_flex cwellt_flex_row ", children: [jsxRuntime.jsx("label", { className: optionsProps.disabled === true
3209
+ ? "cw-flex-column"
3210
+ : "cw-flex-row ", children: [optionsProps.labelName && (jsxRuntime.jsx("label", { className: optionsProps.disabled === true
3033
3211
  ? "cw_label_text cw_label_text_disabled" + " " + optionsProps.labelClassName
3034
- : "cw_label_text" + " " + optionsProps.labelClassName, children: optionsProps.labelName }), jsxRuntime.jsx("input", { type: "text", value: searchText, onChange: handleInputChange, placeholder: "Search...", className: "cw_input_search", disabled: optionsProps.disabled }), searchText && (jsxRuntime.jsx("button", { className: "cw_button_search_clear cwelt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_abs", onClick: handleClearClick }))] }), filteredOptions.length > 0 && (jsxRuntime.jsx("div", { className: "cw_searchInput_dropDown cwellt_p_abs", children: jsxRuntime.jsx("ul", { className: "cw_searchInput_listContainer", children: filteredOptions.map((option) => (jsxRuntime.jsx("li", { onClick: () => handleOptionSelect(option), className: "cw_searchInput_list cwellt_flex cwellt_align_items_center", children: option.description }, option.id))) }) }))] }));
3212
+ : "cw_label_text" + " " + optionsProps.labelClassName, children: optionsProps.labelName })), jsxRuntime.jsx("input", { type: "text", value: searchText, onChange: handleInputChange, placeholder: "Search...", className: "cw_input_search", disabled: optionsProps.disabled }), searchText && (jsxRuntime.jsx("button", { className: "cw-button-icon cwi-close cw-input-search-clear", onClick: handleClearClick }))] }), filteredOptions.length > 0 && (jsxRuntime.jsx("div", { className: "cw-input-search-dropdown", children: jsxRuntime.jsx("ul", { children: filteredOptions.map((option) => (jsxRuntime.jsx("li", { onClick: () => handleOptionSelect(option), children: option.description }, option.id))) }) }))] }));
3035
3213
  }
3036
3214
 
3037
3215
  var styles$4 = {"context-menu":"cw-context-menu-module_context-menu__dbxnO","context-menu-item":"cw-context-menu-module_context-menu-item__B2W-Q"};
@@ -3047,7 +3225,7 @@ var styles$4 = {"context-menu":"cw-context-menu-module_context-menu__dbxnO","con
3047
3225
  * <div>Right-click me!</div>
3048
3226
  * </ContextMenu>
3049
3227
  */
3050
- const CwContextMenu = ({ children, options, onSelect }) => {
3228
+ const CwContextMenu = ({ children, options, offset, onSelect }) => {
3051
3229
  const [isOpen, setIsOpen] = React.useState(false);
3052
3230
  const [position, setPosition] = React.useState({ x: 0, y: 0 });
3053
3231
  const menuRef = React.useRef(null);
@@ -3072,8 +3250,8 @@ const CwContextMenu = ({ children, options, onSelect }) => {
3072
3250
  };
3073
3251
  }, []);
3074
3252
  return (jsxRuntime.jsxs("div", { onContextMenu: handleContextMenu, children: [children, isOpen && (jsxRuntime.jsx("div", { ref: menuRef, className: styles$4["context-menu"], style: {
3075
- top: position.y,
3076
- left: position.x
3253
+ top: position.y + (offset?.y || 0),
3254
+ left: position.x + (offset?.x || 0),
3077
3255
  }, children: options.map(option => (jsxRuntime.jsx("div", { onClick: () => handleOptionClick(option), className: styles$4["context-menu-item"], children: option }, option))) }))] }));
3078
3256
  };
3079
3257
 
@@ -3153,47 +3331,11 @@ function CwFloatingButton() {
3153
3331
  };
3154
3332
  return jsxRuntime.jsx("button", { className: "cw_btnFloatingButton", onClick: cwShowElement, id: "cw_btnFloatingButton" });
3155
3333
  }
3156
- // Button for expand and collapase
3157
- function CwButtonExpandAndCollapse() {
3158
- const cwExpandCollapseButton = () => {
3159
- // cwellt_btnExpandCollapse
3160
- const cw_btnExpandCollapse = document.getElementById("cw_btnExpandCollapse");
3161
- cw_btnExpandCollapse?.classList.toggle("cw_btnExpandCollapseActive");
3162
- // text of tooltip
3163
- // Switches
3164
- const cwSwitches = document.getElementsByClassName("CwSwitches")[0];
3165
- cwSwitches.classList.toggle("cwSwitchesActive");
3166
- // ContentButton
3167
- };
3168
- return jsxRuntime.jsx("button", { className: "cw_btnExpandCollapse", onClick: cwExpandCollapseButton, id: "cw_btnExpandCollapse" });
3169
- }
3170
3334
  // Primary button => CwButtonDef
3171
3335
  // CwButtonDef
3172
3336
  function CwButtonDef({ cw_btn_desc, cw_btnOnclick, cw_btn_disabled }) {
3173
3337
  return (jsxRuntime.jsx("button", { className: "cw-button cw_btn_primary", onClick: cw_btnOnclick, disabled: cw_btn_disabled, children: cw_btn_desc }));
3174
3338
  }
3175
- // CwButtonDefOutline
3176
- function CwButtonDefOutline({ cw_btn_desc, cw_btnOnclick, cw_btn_disabled }) {
3177
- return (jsxRuntime.jsx("button", { className: "cw-button cw_btn_primaryOutline", onClick: cw_btnOnclick, disabled: cw_btn_disabled, children: cw_btn_desc }));
3178
- }
3179
- // Primary button => CwButtonSecondary
3180
- // CweButtonSec
3181
- function CwButtonSec({ cw_btn_desc, cw_btnOnclick, cw_btn_disabled }) {
3182
- return (jsxRuntime.jsx("button", { className: "cw-button cw_btn_secondary", onClick: cw_btnOnclick, disabled: cw_btn_disabled, children: cw_btn_desc }));
3183
- }
3184
- // CwButtonSecOutline
3185
- function CwButtonSecOutline({ cw_btn_desc, cw_btnOnclick, cw_btn_disabled }) {
3186
- return (jsxRuntime.jsx("button", { className: "cw-button cw_btn_secondaryOutline", onClick: cw_btnOnclick, disabled: cw_btn_disabled, children: cw_btn_desc }));
3187
- }
3188
- // Primary button => cwelltButton_danger
3189
- // CwButton_danger
3190
- function CwButtonDanger({ cw_btn_desc, cw_btnOnclick, cw_btn_disabled }) {
3191
- return (jsxRuntime.jsx("button", { className: "cw-button cw_btn_danger", onClick: cw_btnOnclick, disabled: cw_btn_disabled, children: cw_btn_desc }));
3192
- }
3193
- // CwButtonDangerOutline
3194
- function CwButtonDangerOutline({ cw_btn_desc, cw_btnOnclick, cw_btn_disabled }) {
3195
- return (jsxRuntime.jsx("button", { className: "cw-button cw_btn_dangerOutline", onClick: cw_btnOnclick, disabled: cw_btn_disabled, children: cw_btn_desc }));
3196
- }
3197
3339
  // Cw add button
3198
3340
  function CwBtnAdd({ cw_btnOnclick, cw_btn_disabled }) {
3199
3341
  return jsxRuntime.jsx("button", { onClick: cw_btnOnclick, className: "cw-button-icon cw_btn_add", disabled: cw_btn_disabled });
@@ -3262,10 +3404,6 @@ function CwBtnFiles({ cw_btnOnclick, cw_btn_disabled }) {
3262
3404
  function CwBtnAirport({ cw_btnOnclick, cw_btn_disabled }) {
3263
3405
  return jsxRuntime.jsx("button", { onClick: cw_btnOnclick, className: "cw-button-icon cw_btn_airport", disabled: cw_btn_disabled });
3264
3406
  }
3265
- // userFolder
3266
- function CwBtnUserFolder({ cw_btnOnclick, cw_btn_disabled }) {
3267
- return jsxRuntime.jsx("button", { onClick: cw_btnOnclick, className: "cw-button-icon cwi-icons cwi-folder-user", disabled: cw_btn_disabled });
3268
- }
3269
3407
  // DownLoadAllInfo
3270
3408
  function CwBtnDownLoadAllInfo({ cw_btnOnclick, cw_btn_disabled }) {
3271
3409
  return (jsxRuntime.jsx("button", { onClick: cw_btnOnclick, className: "cw-button-icon cwi-icons cwi-folder-download", disabled: cw_btn_disabled }));
@@ -5373,8 +5511,9 @@ const getTimeHeaders = (startDate, endDate) => {
5373
5511
  class CwScheduler extends React.Component {
5374
5512
  contentArea;
5375
5513
  calculateMaxPx = () => {
5376
- const mainRect = document.body.getBoundingClientRect();
5377
- return Math.floor(mainRect.width - 200);
5514
+ const mainElement = document.body;
5515
+ const mainRect = mainElement.getBoundingClientRect();
5516
+ return Math.floor(mainRect.width - 190);
5378
5517
  };
5379
5518
  constructor(props) {
5380
5519
  super(props);
@@ -5546,9 +5685,7 @@ class CwScheduler extends React.Component {
5546
5685
  const isPinnedTable = this.props.id.toLowerCase().includes("pinned");
5547
5686
  const schedulerHeight = heightScheduler(this.state.resources, this.props.height, this.props.id === "crewAssignmentsScheduler");
5548
5687
  return (jsxRuntime.jsx("div", { id: this.props.id, style: {
5549
- overflowY: "scroll",
5550
5688
  maxHeight: isPinnedTable ? "auto" : schedulerHeight,
5551
- minHeight: (this.state.resources.length === 1 || this.state.resources.length === 2) ? schedulerHeight + 10 : 0
5552
5689
  }, className: this.state.resources.length > 0 ? "cwellt_tb_con" : "cwellt_tb_con cw_tb_con_emptyValues", children: jsxRuntime.jsxs("table", { id: "cwelltTableScheduler", children: [this.props.id !== "crewAssignmentsScheduler" && (jsxRuntime.jsx(SchedulerHeader$1, { timelineProps: {
5553
5690
  maxPx: this.state.maxPx,
5554
5691
  hoursList: this.state.timeHeaders,
@@ -5557,8 +5694,8 @@ class CwScheduler extends React.Component {
5557
5694
  endDate: this.props.endDate,
5558
5695
  headerName: this.props.resourceName,
5559
5696
  }, descriptionColumn: this.props.descriptionColumn })), jsxRuntime.jsx("tbody", { style: {
5560
- overflow: "visible",
5561
- width: this.state.maxPx + 150
5697
+ width: this.state.maxPx + 150,
5698
+ maxHeight: isPinnedTable ? "auto" : schedulerHeight,
5562
5699
  }, className: isPinnedTable ? "fc-body cw-fc-body-pinned" : "fc-body", children: jsxRuntime.jsxs("tr", { className: "fc_body_row", children: [jsxRuntime.jsx(ResourcesTitleList, { resources: this.state.resources, canBePinned: this.props.canBePinned ?? false, includesPinned: this.props.id.toLowerCase().includes("pinned"), onCrewPinning: this.handleCrewPinning, onClickResourceContextMenu: (_e, resource) => {
5563
5700
  if (this.props.scheduler_handleOnClickResourceContextMenu) {
5564
5701
  this.props.scheduler_handleOnClickResourceContextMenu(_e, resource);
@@ -5823,13 +5960,40 @@ function getHSLColor(color, alpha = 1) {
5823
5960
  return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${alpha})`;
5824
5961
  }
5825
5962
  function getContrastColor(color) {
5963
+ if (color === null) {
5964
+ return '#000000';
5965
+ }
5826
5966
  const hsl = colorToHSL(color);
5827
- const contrastL = hsl.l > 50 ? 20 : 90;
5828
- return `hsl(${hsl.h}, ${hsl.s}%, ${contrastL}%)`;
5967
+ // Saturated greenyellow and cyan tones need lower luminance threshold (40-35)
5968
+ // Saturated mediumblue and blueviolet tones need higher luminance threshold (55-60)
5969
+ // Saturated orangered tones need lower luminance threshold (45)
5970
+ const isYellowGreen = (hsl.h >= 45 && hsl.h <= 180);
5971
+ const isBlueViolet = (hsl.h >= 210 && hsl.h <= 300);
5972
+ const isRedOrange = (hsl.h >= 0 && hsl.h <= 30) || (hsl.h >= 330 && hsl.h <= 360);
5973
+ let threshold = 50;
5974
+ if (isYellowGreen) {
5975
+ threshold = 40;
5976
+ if (hsl.s >= 70) {
5977
+ threshold = 35;
5978
+ }
5979
+ }
5980
+ else if (isBlueViolet) {
5981
+ threshold = 55;
5982
+ if (hsl.s >= 70) {
5983
+ threshold = 60;
5984
+ }
5985
+ }
5986
+ else if (isRedOrange && hsl.s >= 80) {
5987
+ threshold = 45;
5988
+ }
5989
+ const contrastL = hsl.l >= threshold ? 20 : 90;
5990
+ const contrastS = Math.min(hsl.s, 90);
5991
+ return `hsl(${hsl.h}, ${contrastS}%, ${contrastL}%)`;
5829
5992
  }
5830
5993
 
5994
+ var styles$2 = {"hide-scrollbar":"new-scheduler-module_hide-scrollbar__33GG9","scheduler-event":"new-scheduler-module_scheduler-event__gphwn","scheduler-event-container":"new-scheduler-module_scheduler-event-container__-h1xm","time-marker":"new-scheduler-module_time-marker__2BejU","scheduler-event-text":"new-scheduler-module_scheduler-event-text__zjvd7"};
5995
+
5831
5996
  const BackgroundEvent = ({ value, heightRem }) => {
5832
- const isVerticalText = value.isVerticalText ?? false;
5833
5997
  const backColor = getHSLColor(value.color, value.alpha ?? 0.5);
5834
5998
  const textColor = getContrastColor(value.color);
5835
5999
  return value.isVisible ? (jsxRuntime.jsx("div", { style: {
@@ -5837,6 +6001,7 @@ const BackgroundEvent = ({ value, heightRem }) => {
5837
6001
  width: `${value.width}%`,
5838
6002
  position: "absolute",
5839
6003
  height: `${heightRem}rem`,
6004
+ pointerEvents: "auto",
5840
6005
  }, children: jsxRuntime.jsx(CwGenericTooltip, { content: value.tooltip, position: "bottom", dissapearsWhenHover: true, showDelay: 200, children: jsxRuntime.jsx("div", { style: {
5841
6006
  overflow: "hidden",
5842
6007
  backgroundColor: backColor,
@@ -5848,28 +6013,21 @@ const BackgroundEvent = ({ value, heightRem }) => {
5848
6013
  contentVisibility: "auto",
5849
6014
  height: `${heightRem}rem`,
5850
6015
  }, children: jsxRuntime.jsxs("div", { style: {
5851
- flex: 1,
5852
- display: "flex",
5853
- flexDirection: "row",
5854
- alignItems: "center",
5855
- whiteSpace: "nowrap",
5856
- overflow: "hidden",
5857
6016
  width: value.width + "%",
5858
- fontSize: "var(--cw-font-size-smallest)"
5859
- }, children: [value.icons ? jsxRuntime.jsx("div", { style: {
6017
+ fontSize: "var(--cw-font-size-smallest)",
6018
+ padding: "0.25rem",
6019
+ color: textColor,
6020
+ alignItems: "flex-end"
6021
+ }, className: styles$2["scheduler-event-container"], children: [value.icons ? jsxRuntime.jsx("div", { style: {
5860
6022
  display: "flex",
5861
6023
  flexDirection: "row",
5862
6024
  alignItems: "center",
5863
6025
  whiteSpace: "nowrap",
5864
6026
  color: textColor,
5865
- }, children: value.icons }) : null, jsxRuntime.jsx("span", { style: {
5866
- color: textColor,
5867
- writingMode: isVerticalText ? "vertical-lr" : "initial",
5868
- textOrientation: isVerticalText ? "upright" : "initial"
5869
- }, children: value.name })] }) }) }) }) })) : null;
6027
+ }, children: value.icons }) : null, jsxRuntime.jsx("span", { className: styles$2["scheduler-event-text"], children: value.name })] }) }) }) }) })) : null;
5870
6028
  };
5871
6029
 
5872
- var styles$2 = {"scheduler-row-header":"scheduler-row-module_scheduler-row-header__S-iv4"};
6030
+ var styles$1 = {"scheduler-row-header":"scheduler-row-module_scheduler-row-header__S-iv4"};
5873
6031
 
5874
6032
  const DefaultRowHeader = ({ value, width, onEvent }) => {
5875
6033
  return (jsxRuntime.jsxs("div", { style: {
@@ -5877,7 +6035,7 @@ const DefaultRowHeader = ({ value, width, onEvent }) => {
5877
6035
  // background: color,
5878
6036
  }, onClick: (_) => {
5879
6037
  onEvent(new OnClickRowHeader(value.rowId));
5880
- }, className: styles$2["scheduler-row-header"], children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: value.title }), value.title2 && jsxRuntime.jsxs("span", { children: ["-", value.title2] }), value.title3 && jsxRuntime.jsxs("span", { className: styles$2["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] })] }), value.subtitle && jsxRuntime.jsxs("div", { style: { opacity: 0.5 }, children: [jsxRuntime.jsx("strong", { children: value.subtitle }), value.subtitle2 && jsxRuntime.jsxs("span", { children: ["-", value.subtitle2] })] })] }));
6038
+ }, className: styles$1["scheduler-row-header"], children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: value.title }), value.title2 && jsxRuntime.jsxs("span", { children: ["-", value.title2] }), " ", jsxRuntime.jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxRuntime.jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 && jsxRuntime.jsxs("span", { className: styles$1["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxRuntime.jsxs("span", { children: ["-", value.subtitle2] })] })] }));
5881
6039
  };
5882
6040
 
5883
6041
  function useSingleAndDoubleClicks(onClick, onDoubleClick) {
@@ -5907,8 +6065,6 @@ function useSingleAndDoubleClicks(onClick, onDoubleClick) {
5907
6065
  return { handleClick, handleDoubleClick };
5908
6066
  }
5909
6067
 
5910
- var styles$1 = {"hide-scrollbar":"new-scheduler-module_hide-scrollbar__33GG9","scheduler-event":"new-scheduler-module_scheduler-event__gphwn","scheduler-event-container":"new-scheduler-module_scheduler-event-container__-h1xm","time-marker":"new-scheduler-module_time-marker__2BejU"};
5911
-
5912
6068
  const EventSideDrag = ({ left = false, heightRem, onStartEvent }) => {
5913
6069
  return (jsxRuntime.jsx("span", { draggable: true, onDragStart: (e) => {
5914
6070
  e.stopPropagation();
@@ -5986,12 +6142,12 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
5986
6142
  e.stopPropagation();
5987
6143
  e.preventDefault();
5988
6144
  onEvent(new OnRightClickEvent(value.id));
5989
- }, children: jsxRuntime.jsx(CwGenericTooltip, { content: value.tooltip, position: "bottom", dissapearsWhenHover: true, showDelay: 200, children: jsxRuntime.jsxs("div", { style: {
6145
+ }, children: jsxRuntime.jsx(CwGenericTooltip, { content: value.tooltip, position: "bottom", hide: isOnDrag, dissapearsWhenHover: true, showDelay: 200, children: jsxRuntime.jsxs("div", { style: {
5990
6146
  border: value.selected ? "2px solid black" : "none",
5991
6147
  backgroundColor: backColor,
5992
6148
  height: `calc(${heightRem}rem - 4px)`,
5993
6149
  opacity: eventTransparent ? 0.5 : 1,
5994
- }, className: styles$1["scheduler-event"], children: [jsxRuntime.jsxs("div", { style: {
6150
+ }, className: styles$2["scheduler-event"], children: [jsxRuntime.jsxs("div", { style: {
5995
6151
  display: "flex",
5996
6152
  flexDirection: "row",
5997
6153
  alignItems: "stretch",
@@ -6000,7 +6156,7 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
6000
6156
  height: `calc(${heightRem}rem - 10px)`,
6001
6157
  }, children: [value.isResizable && (jsxRuntime.jsx(EventSideDrag, { left: true, heightRem: heightRem * 0.7, onStartEvent: () => {
6002
6158
  onEvent(new OnLeftDragStart(value.id));
6003
- } })), jsxRuntime.jsxs("div", { className: styles$1["scheduler-event-container"], children: [jsxRuntime.jsx("div", { style: {
6159
+ } })), jsxRuntime.jsxs("div", { className: styles$2["scheduler-event-container"], children: [jsxRuntime.jsx("div", { style: {
6004
6160
  display: "flex",
6005
6161
  flexDirection: "row",
6006
6162
  alignItems: "center",
@@ -6011,9 +6167,9 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
6011
6167
  color: textColor,
6012
6168
  }, children: value.name })] }), value.isResizable && (jsxRuntime.jsx(EventSideDrag, { heightRem: heightRem * 0.7, onStartEvent: () => {
6013
6169
  onEvent(new OnRightDragStart(value.id));
6014
- } }))] }), value.primaryTimeMarkerColor && (jsxRuntime.jsx("div", { className: styles$1["time-marker"], style: {
6170
+ } }))] }), value.primaryTimeMarkerColor && (jsxRuntime.jsx("div", { className: styles$2["time-marker"], style: {
6015
6171
  backgroundColor: value.primaryTimeMarkerColor,
6016
- } })), value.secondaryTimeMarkerColor && (jsxRuntime.jsx("div", { className: styles$1["time-marker"], style: {
6172
+ } })), value.secondaryTimeMarkerColor && (jsxRuntime.jsx("div", { className: styles$2["time-marker"], style: {
6017
6173
  backgroundColor: value.secondaryTimeMarkerColor,
6018
6174
  } }))] }) }) }, value.id) }, value.id));
6019
6175
  };
@@ -6392,6 +6548,7 @@ const getNow = (isUtc) => {
6392
6548
  }
6393
6549
  return now;
6394
6550
  };
6551
+ const rowsHeight = 1.75; // rem
6395
6552
  const Scheduler = (props) => {
6396
6553
  const { header: headerContent, id, events: eventsState, backgroundEvents, contextMenuItems, EventComp, RowTitleComp, orderCategories = ["title"], useOrderCategory, onEvent, groupRowColors, rowHeaderWidth = 180, } = props;
6397
6554
  const BackgroundEventComp = props.BackgroundEventComp ?? BackgroundEvent;
@@ -6425,7 +6582,6 @@ const Scheduler = (props) => {
6425
6582
  };
6426
6583
  const evenColor = "var(--cw-color-surface-container-low)";
6427
6584
  const oddColor = "var(--cw-color-surface-container)";
6428
- const rowsHeight = 1.75; // rem
6429
6585
  const schedulerContentHeight = rowsHeight * visibleRows;
6430
6586
  const weekendsLines = getWeekendLinesByDatesVisible(selectedDate, visibleDays);
6431
6587
  const divisionLines = getLinesByDivisions(header.divisions);
@@ -6462,7 +6618,7 @@ const Scheduler = (props) => {
6462
6618
  const rowsNumber = innerRows.length > 0 ? innerRows.length : 1;
6463
6619
  const pixelsInRem = 16;
6464
6620
  return rowsNumber * rowsHeight * pixelsInRem;
6465
- }, [rows, events, selectedDate, visibleDays, rowsHeight]);
6621
+ }, [rows, events]);
6466
6622
  // Render
6467
6623
  return (jsxRuntime.jsxs("div", { id: id, style: {
6468
6624
  position: "relative",
@@ -6473,7 +6629,7 @@ const Scheduler = (props) => {
6473
6629
  position: "sticky",
6474
6630
  top: 0,
6475
6631
  zIndex: 1,
6476
- }, children: jsxRuntime.jsx(SchedulerHeader, { ...header }) })), jsxRuntime.jsx(reactWindow.VariableSizeList, { height: schedulerContentHeight * 16, itemCount: rows.length, itemSize: getItemSize, width: "100%", style: { overflowX: "hidden" }, ref: instanceRef, className: styles$1["hide-scrollbar"], children: Row })] }));
6632
+ }, children: jsxRuntime.jsx(SchedulerHeader, { ...header }) })), jsxRuntime.jsx(reactWindow.VariableSizeList, { height: schedulerContentHeight * 16, itemCount: rows.length, itemSize: getItemSize, width: "100%", style: { overflowX: "hidden" }, ref: instanceRef, className: styles$2["hide-scrollbar"], children: Row })] }));
6477
6633
  };
6478
6634
  const height = (events, rows, rowsNumber) => {
6479
6635
  const selectedRows = rows.slice(0, rowsNumber);
@@ -6852,7 +7008,7 @@ const PinRowHeader = ({ value, width, onEvent }) => {
6852
7008
  flexDirection: "column",
6853
7009
  justifyContent: "center",
6854
7010
  alignItems: "flex-start",
6855
- }, children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: value.title }), value.title2 && jsxRuntime.jsxs("span", { children: ["-", value.title2] }), value.title3 && jsxRuntime.jsxs("span", { className: styles["scheduler-crewmember-functions"], children: [" (", value.title3, ")"] })] }), value.subtitle && jsxRuntime.jsxs("div", { style: { opacity: 0.5 }, children: [jsxRuntime.jsx("strong", { children: value.subtitle }), value.subtitle2 && jsxRuntime.jsxs("span", { children: ["-", value.subtitle2] })] })] }) }, value.rowId) }, value.rowId), isLoading ? jsxRuntime.jsx(CwIcon, { iconId: "spinner fa-spin" }) : undefined] }));
7011
+ }, children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: value.title }), value.title2 && jsxRuntime.jsxs("span", { children: ["-", value.title2] }), " ", jsxRuntime.jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxRuntime.jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 && jsxRuntime.jsxs("span", { className: styles["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxRuntime.jsxs("span", { children: ["-", value.subtitle2] })] })] }) }, value.rowId) }, value.rowId), isLoading ? jsxRuntime.jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }));
6856
7012
  };
6857
7013
 
6858
7014
  const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents, contextMenuItems, onEvent }) => {
@@ -7066,18 +7222,11 @@ exports.CwBtnSelectedFolder = CwBtnSelectedFolder;
7066
7222
  exports.CwBtnShare = CwBtnShare;
7067
7223
  exports.CwBtnStatistic = CwBtnStatistic;
7068
7224
  exports.CwBtnUploadFiles = CwBtnUploadFiles;
7069
- exports.CwBtnUserFolder = CwBtnUserFolder;
7070
7225
  exports.CwBtnVacations = CwBtnVacations;
7071
7226
  exports.CwBtnView = CwBtnView;
7072
7227
  exports.CwBtnWarning = CwBtnWarning;
7073
7228
  exports.CwButton = CwButton;
7074
- exports.CwButtonDanger = CwButtonDanger;
7075
- exports.CwButtonDangerOutline = CwButtonDangerOutline;
7076
7229
  exports.CwButtonDef = CwButtonDef;
7077
- exports.CwButtonDefOutline = CwButtonDefOutline;
7078
- exports.CwButtonExpandAndCollapse = CwButtonExpandAndCollapse;
7079
- exports.CwButtonSec = CwButtonSec;
7080
- exports.CwButtonSecOutline = CwButtonSecOutline;
7081
7230
  exports.CwCheckbox = CwCheckbox;
7082
7231
  exports.CwContextMenu = CwContextMenu;
7083
7232
  exports.CwContextualMenu = CwContextualMenu;