@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.
- package/dist/content/icons/new-cw-icons/NewCwIcons.html +389 -6
- package/dist/content/icons/new-cw-icons/NewCwIcons.json +1 -1
- package/dist/content/icons/new-cw-icons/css/new-cw-icons.css +20 -7
- package/dist/content/icons/new-cw-icons/fonts/NewCwIcons.woff +0 -0
- package/dist/index.cjs.js +307 -158
- package/dist/index.css +2 -2
- package/dist/index.d.ts +141 -56
- package/dist/index.es.js +313 -157
- package/dist/src/common/functions/colorManipulation.d.ts.map +1 -1
- package/dist/src/components/control/action/button/CwButton.d.ts +3 -2
- package/dist/src/components/control/action/button/CwButton.d.ts.map +1 -1
- package/dist/src/components/control/action/buttons/CwButtons.d.ts +0 -7
- package/dist/src/components/control/action/buttons/CwButtons.d.ts.map +1 -1
- package/dist/src/components/control/action/contextmenu/CwContextMenu.d.ts +4 -0
- package/dist/src/components/control/action/contextmenu/CwContextMenu.d.ts.map +1 -1
- package/dist/src/components/control/action/search/CwSearch.d.ts +1 -1
- package/dist/src/components/control/action/search/CwSearch.d.ts.map +1 -1
- package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts +2 -2
- package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts.map +1 -1
- package/dist/src/components/control/choice/multi-filter/CwMultiFilter.d.ts +122 -33
- package/dist/src/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +1 -1
- package/dist/src/components/control/choice/toggle/CwToggle.d.ts +0 -4
- package/dist/src/components/control/choice/toggle/CwToggle.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/CwSchedulerComp.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +1 -1
- package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -1
- package/dist/src/components/display/data/accordion/CwAccordionContainer.d.ts.map +1 -1
- package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +1 -0
- package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +1 -1
- package/dist/src/components/display/data/table/CwTable.d.ts +2 -2
- package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
- package/dist/src/components/layout/dialog/CwDialog.d.ts +2 -2
- package/dist/src/components/layout/dialog/CwDialog.d.ts.map +1 -1
- package/dist/src/components/layout/modal/CwModalReportFunctional.d.ts +2 -2
- package/dist/src/components/layout/modal/CwModalReportFunctional.d.ts.map +1 -1
- package/dist/src/components/layout/tabs/CwTabs.d.ts +2 -1
- package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- 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$
|
|
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(() =>
|
|
377
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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({
|
|
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$
|
|
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:
|
|
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
|
-
|
|
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:
|
|
619
|
-
height:
|
|
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: "
|
|
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,
|
|
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
|
|
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
|
-
|
|
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(
|
|
1152
|
-
|
|
1153
|
-
|
|
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", "
|
|
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 {
|
|
1836
|
-
return (jsxRuntime.
|
|
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.
|
|
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
|
-
*
|
|
2815
|
-
*
|
|
2816
|
-
*
|
|
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
|
-
*
|
|
2819
|
-
*
|
|
2820
|
-
*
|
|
2821
|
-
*
|
|
2822
|
-
*
|
|
2823
|
-
*
|
|
2824
|
-
*
|
|
2825
|
-
*
|
|
2826
|
-
*
|
|
2827
|
-
*
|
|
2828
|
-
*
|
|
2829
|
-
*
|
|
2830
|
-
*
|
|
2831
|
-
*
|
|
2832
|
-
*
|
|
2833
|
-
*
|
|
2834
|
-
*
|
|
2835
|
-
*
|
|
2836
|
-
*
|
|
2837
|
-
*
|
|
2838
|
-
*
|
|
2839
|
-
*
|
|
2840
|
-
*
|
|
2841
|
-
*
|
|
2842
|
-
*
|
|
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) =>
|
|
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: "
|
|
3029
|
-
? "
|
|
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
|
-
? "
|
|
3032
|
-
: "
|
|
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: "
|
|
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
|
|
5377
|
-
|
|
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
|
-
|
|
5561
|
-
|
|
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
|
-
|
|
5828
|
-
|
|
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
|
-
|
|
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", {
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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$
|
|
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] }),
|
|
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;
|