@cwellt_software/cwellt-reactjs-lib 1.0.8 → 1.1.0
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 +14 -6
- package/dist/content/icons/new-cw-icons/NewCwIcons.json +195 -1
- package/dist/content/icons/new-cw-icons/css/new-cw-icons.css +783 -198
- package/dist/content/icons/new-cw-icons/fonts/NewCwIcons.woff +0 -0
- package/dist/index.cjs.js +1629 -645
- package/dist/index.css +2 -2
- package/dist/index.d.ts +379 -106
- package/dist/index.es.js +1622 -647
- package/dist/playground/main.d.ts +4 -0
- package/dist/playground/main.d.ts.map +1 -0
- package/dist/src/common/classes/CwSelectList.js +12 -0
- package/dist/src/common/classes/CwSelectListItems.js +14 -0
- package/dist/src/common/functions/collections.js +18 -0
- package/dist/src/common/functions/colorManipulation.js +76 -0
- package/dist/src/common/functions/dsl/UiEventDSL.js +20 -0
- package/dist/src/common/functions/useSingleAndDoubleClicks.js +28 -0
- package/dist/src/common/interfaces/CwSelectListProps.js +1 -0
- package/dist/src/components/control/action/button/CwButton.js +13 -0
- package/dist/src/components/control/action/buttons/CwButtons.js +188 -0
- package/dist/src/components/control/action/contextmenu/CwContextMenu.js +43 -0
- package/dist/src/components/control/action/contextual-menu/CwContextualMenu.js +55 -0
- 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/action/search/CwSearch.js +67 -0
- package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.js +11 -0
- package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts +1 -1
- package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts.map +1 -1
- package/dist/src/components/control/choice/checkbox/CwCheckbox.js +15 -0
- package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.js +99 -0
- package/dist/src/components/control/choice/dropdown/CwDropdown.js +27 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +1 -1
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.js +30 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownFilter.d.ts +10 -20
- package/dist/src/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +1 -1
- package/dist/src/components/control/choice/dropdown/CwDropdownFilter.js +10 -0
- package/dist/src/components/control/choice/multi-filter/CwMultiFilter.js +298 -0
- package/dist/src/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.js +17 -0
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts +1 -0
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts.map +1 -1
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.js +80 -0
- package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts.map +1 -1
- package/dist/src/components/control/choice/multiselect/CwMultiselect.js +393 -0
- package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts +0 -1
- package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts.map +1 -1
- package/dist/src/components/control/choice/multiselect/CwOptionList.js +36 -0
- package/dist/src/components/control/choice/option/CwOption.js +16 -0
- package/dist/src/components/control/choice/select/CwSelect.js +36 -0
- package/dist/src/components/control/choice/toggle/CwToggle.d.ts +8 -21
- package/dist/src/components/control/choice/toggle/CwToggle.d.ts.map +1 -1
- package/dist/src/components/control/choice/toggle/CwToggle.js +9 -0
- package/dist/src/components/control/choice/tree-view/CwTreeView.d.ts +15 -0
- package/dist/src/components/control/choice/tree-view/CwTreeView.d.ts.map +1 -0
- package/dist/src/components/control/input/any/CwInput.js +16 -0
- package/dist/src/components/control/input/color/CwColorPicker.d.ts +17 -0
- package/dist/src/components/control/input/color/CwColorPicker.d.ts.map +1 -0
- package/dist/src/components/control/input/color/CwColorPicker.js +210 -0
- package/dist/src/components/control/input/color/CwInputColor.d.ts +12 -0
- package/dist/src/components/control/input/color/CwInputColor.d.ts.map +1 -0
- package/dist/src/components/control/input/color/CwInputColor.js +142 -0
- package/dist/src/components/control/input/date/CwInputDate.js +29 -0
- package/dist/src/components/control/input/date-picker/CwInputDatePicker.js +109 -0
- package/dist/src/components/control/input/date-text/CwInputDateText.js +90 -0
- package/dist/src/components/control/input/datetime/CwInputDatetime.js +29 -0
- package/dist/src/components/control/input/digit/CwDigit.js +28 -0
- package/dist/src/components/control/input/file/CwFileUpload.d.ts.map +1 -1
- package/dist/src/components/control/input/file/CwFileUpload.js +52 -0
- package/dist/src/components/control/input/file/CwFileUploadMultiple.d.ts +15 -0
- package/dist/src/components/control/input/file/CwFileUploadMultiple.d.ts.map +1 -0
- package/dist/src/components/control/input/file/CwFileUploadMultiple.js +148 -0
- package/dist/src/components/control/input/image/CwInputImage.js +52 -0
- package/dist/src/components/control/input/image-area/CwImageArea.js +113 -0
- package/dist/src/components/control/input/number/CwInputNumber.js +11 -0
- package/dist/src/components/control/input/phone/CwInputPhone.js +24 -0
- package/dist/src/components/control/input/text/CwInputText.d.ts +1 -1
- package/dist/src/components/control/input/text/CwInputText.d.ts.map +1 -1
- package/dist/src/components/control/input/text/CwInputText.js +31 -0
- package/dist/src/components/control/input/text-area/CwTextArea.js +9 -0
- package/dist/src/components/control/input/time/CwTime.js +29 -0
- package/dist/src/components/control/input/weekday/CwWeekdaySelector.js +143 -0
- package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts +7 -24
- package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts.map +1 -1
- package/dist/src/components/custom/find-airport/CwFindAirportComp.js +240 -0
- package/dist/src/components/custom/scheduler/CwSchedulerComp.js +211 -0
- package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.js +269 -0
- package/dist/src/components/custom/scheduler/components/EventRender.js +142 -0
- package/dist/src/components/custom/scheduler/components/ResourceListRender.js +12 -0
- package/dist/src/components/custom/scheduler/components/ResourceRender.js +26 -0
- package/dist/src/components/custom/scheduler/components/day_headers/DayHeader.js +13 -0
- package/dist/src/components/custom/scheduler/components/day_headers/MonthHeader.js +12 -0
- package/dist/src/components/custom/scheduler/components/day_headers/MyDaysHeader.js +62 -0
- package/dist/src/components/custom/scheduler/components/day_headers/WeekHeader.js +13 -0
- package/dist/src/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.js +24 -0
- package/dist/src/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.js +17 -0
- package/dist/src/components/custom/scheduler/components/scheduler_header/SchedulerHeader.js +26 -0
- package/dist/src/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.js +23 -0
- package/dist/src/components/custom/scheduler/components/time_headers/TimeHeader.js +31 -0
- package/dist/src/components/custom/scheduler/components/time_headers/TimeHeaderRow.js +16 -0
- package/dist/src/components/custom/scheduler/components/time_line/TimeLine.js +12 -0
- package/dist/src/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.js +5 -0
- package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDates.js +15 -0
- package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.js +5 -0
- package/dist/src/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.js +43 -0
- package/dist/src/components/custom/scheduler/logic/dates/getMonthHeaderData.js +35 -0
- package/dist/src/components/custom/scheduler/logic/dates/getUtcToday.js +6 -0
- package/dist/src/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.js +20 -0
- package/dist/src/components/custom/scheduler/logic/dates/listOfDatesToWeeks.js +55 -0
- package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisionType.js +13 -0
- package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisions.js +16 -0
- package/dist/src/components/custom/scheduler/logic/filtering/filterEvents.js +33 -0
- package/dist/src/components/custom/scheduler/logic/filtering/filterResources.js +14 -0
- package/dist/src/components/custom/scheduler/logic/filtering/hasSameProperties.js +10 -0
- package/dist/src/components/custom/scheduler/logic/onDrop/OnDrop.js +45 -0
- package/dist/src/components/custom/scheduler/logic/pixels/getHeightLineScheduler.js +14 -0
- package/dist/src/components/custom/scheduler/logic/pixels/getPixelsForEvent.js +32 -0
- package/dist/src/components/custom/scheduler/logic/pixels/heightScheduler.js +14 -0
- package/dist/src/components/custom/scheduler/logic/pixels/heightSchedulerPinned.js +9 -0
- package/dist/src/components/custom/scheduler/logic/state_handle/doubleClickOnResource.js +5 -0
- package/dist/src/components/custom/scheduler/logic/state_handle/handleResourceChange.js +11 -0
- package/dist/src/components/custom/scheduler/logic/state_handle/onDragOver.js +9 -0
- package/dist/src/components/custom/scheduler/logic/state_handle/onDropEventToResource.js +3 -0
- package/dist/src/components/custom/scheduler/logic/strings/compareStrings.js +7 -0
- package/dist/src/components/custom/scheduler/logic/strings/getGUID.js +7 -0
- package/dist/src/components/custom/scheduler/logic/ui/checkIfSlotAvailable.js +8 -0
- package/dist/src/components/custom/scheduler/logic/ui/getEventsOfResource.js +45 -0
- package/dist/src/components/custom/scheduler/logic/ui/getTimeHeaders.js +35 -0
- package/dist/src/components/custom/scheduler/logic/ui/isAllowedToMove.js +19 -0
- package/dist/src/components/custom/scheduler/logic/ui/updateResourceVisibility.js +15 -0
- package/dist/src/components/custom/scheduler/state/CblDragAndDrop.js +18 -0
- package/dist/src/components/custom/scheduler/state/CwSchedulerProps.js +1 -0
- package/dist/src/components/custom/scheduler/state/Resource.js +18 -0
- package/dist/src/components/custom/scheduler/state/State.js +1 -0
- package/dist/src/components/custom/scheduler/state/cblEvent.js +28 -0
- package/dist/src/components/custom/scheduler/state/cblEventCompProps.js +1 -0
- package/dist/src/components/custom/scheduler/state/resourceCompProps2.js +1 -0
- package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.js +123 -0
- package/dist/src/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.js +118 -0
- package/dist/src/components/custom/scheduler-new/presentation/SchedulerPresenter.js +166 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderDivision.js +26 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderTitle.js +8 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.js +86 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.js +1 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.js +60 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.js +24 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.js +150 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/row/EventSideDrag.js +11 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.js +176 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.js +8 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/TimeLine.js +39 -0
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.js +8 -0
- package/dist/src/components/custom/scheduler-new/presentation/helpers.js +43 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.js +24 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/dateFromPercentage.js +7 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/eventIsVisible.js +7 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.js +113 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDivisions.js +21 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/getEventSizes.js +30 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.js +13 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.js +7 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.js +32 -0
- package/dist/src/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.js +12 -0
- package/dist/src/components/custom/scheduler-new/presentation/state/ui/SchedulerState.js +1 -0
- package/dist/src/components/custom/scheduler-new/presentation/state/ui/WeekRange.js +1 -0
- package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.js +267 -0
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.js +269 -0
- package/dist/src/components/custom/scheduler-temporal/components/EventRender.js +142 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.js +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.js +26 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.js +13 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.js +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.js +62 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.js +13 -0
- package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.js +22 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.js +17 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.js +26 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.js +23 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.js +31 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.js +16 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.js +12 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.js +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.js +15 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.js +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.js +43 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.js +35 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.js +6 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.js +20 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.js +55 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.js +13 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.js +16 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.js +10 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.js +34 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.js +14 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.js +10 -0
- package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.js +36 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.js +14 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.js +32 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.js +14 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.js +9 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.js +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.js +178 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.js +11 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.js +9 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.js +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.js +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.js +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.js +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.js +9 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.js +92 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.js +242 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.js +35 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.js +19 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.js +241 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.js +15 -0
- package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.js +18 -0
- package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.js +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/Resource.js +18 -0
- package/dist/src/components/custom/scheduler-temporal/state/State.js +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEvent.js +28 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.js +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.js +1 -0
- package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -1
- package/dist/src/components/custom/super-scheduler/PinRowHeader.js +53 -0
- package/dist/src/components/custom/super-scheduler/SuperScheduler.js +23 -0
- package/dist/src/components/custom/super-scheduler/SuperSchedulerEvents.js +15 -0
- package/dist/src/components/custom/super-scheduler/SuperSchedulerPresenter.js +45 -0
- package/dist/src/components/display/data/accordion/CwAccordionContainer.js +20 -0
- package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.js +138 -0
- package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
- package/dist/src/components/display/data/table/CwTable.js +203 -0
- package/dist/src/components/display/graphics/icon/CwIcon.d.ts +5 -1
- package/dist/src/components/display/graphics/icon/CwIcon.d.ts.map +1 -1
- package/dist/src/components/display/graphics/icon/CwIcon.js +23 -0
- package/dist/src/components/display/graphics/image-gallery/CwImageGallery.d.ts +30 -0
- package/dist/src/components/display/graphics/image-gallery/CwImageGallery.d.ts.map +1 -0
- package/dist/src/components/display/graphics/image-zoom/CwImageZoom.d.ts +21 -0
- package/dist/src/components/display/graphics/image-zoom/CwImageZoom.d.ts.map +1 -0
- package/dist/src/components/display/graphics/loading/CwLoading.d.ts.map +1 -1
- package/dist/src/components/display/graphics/loading/CwLoading.js +27 -0
- package/dist/src/components/display/graphics/loading-small/CwLoadingSmall.js +20 -0
- package/dist/src/components/display/text/heading/CwHeadingMain.js +5 -0
- package/dist/src/components/display/text/heading/CwHeadingSecond.js +5 -0
- package/dist/src/components/display/text/label/CwLabel.js +13 -0
- package/dist/src/components/display/text/message/CwMessage.d.ts +49 -2
- package/dist/src/components/display/text/message/CwMessage.d.ts.map +1 -1
- package/dist/src/components/display/text/message/CwMessage.js +75 -0
- package/dist/src/components/display/text/note/CwNote.d.ts +48 -0
- package/dist/src/components/display/text/note/CwNote.d.ts.map +1 -0
- package/dist/src/components/display/text/note/CwNote.js +78 -0
- package/dist/src/components/display/text/tag/CwChip.d.ts +1 -1
- package/dist/src/components/display/text/tag/CwChip.d.ts.map +1 -1
- package/dist/src/components/display/text/tag/CwChip.js +57 -0
- package/dist/src/components/display/text/tag/CwTag.d.ts +0 -1
- package/dist/src/components/display/text/tag/CwTag.d.ts.map +1 -1
- package/dist/src/components/display/text/tag/CwTag.js +21 -0
- package/dist/src/components/display/text/tooltip/CwTooltip.js +4 -0
- package/dist/src/components/layout/align/CwAlign.js +54 -0
- package/dist/src/components/layout/card/CwCard.js +55 -0
- package/dist/src/components/layout/card/CwCardList.d.ts +3 -5
- package/dist/src/components/layout/card/CwCardList.d.ts.map +1 -1
- package/dist/src/components/layout/card/CwCardList.js +38 -0
- package/dist/src/components/layout/confirmation-popup/CwConfirmationPopup.d.ts +18 -0
- package/dist/src/components/layout/confirmation-popup/CwConfirmationPopup.d.ts.map +1 -0
- package/dist/src/components/layout/dialog/CwDialog.d.ts +3 -1
- package/dist/src/components/layout/dialog/CwDialog.d.ts.map +1 -1
- package/dist/src/components/layout/dialog/CwDialog.js +255 -0
- package/dist/src/components/layout/dialog/CwDialogManager.js +44 -0
- package/dist/src/components/layout/list/details/CwExpandable.js +28 -0
- package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts +1 -0
- package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts.map +1 -1
- package/dist/src/components/layout/list/key-value/CwKeyValueList.js +23 -0
- package/dist/src/components/layout/list/sortable/CwSortableList.d.ts +60 -0
- package/dist/src/components/layout/list/sortable/CwSortableList.d.ts.map +1 -0
- package/dist/src/components/layout/list/sortable/CwSortableList.js +73 -0
- package/dist/src/components/layout/list/sortable/useSortableList.d.ts +58 -0
- package/dist/src/components/layout/list/sortable/useSortableList.d.ts.map +1 -0
- package/dist/src/components/layout/list/sortable/useSortableList.js +53 -0
- package/dist/src/components/layout/modal/CwModalReportFunctional.js +23 -0
- package/dist/src/components/layout/modal/hover/CwModalHover.js +61 -0
- package/dist/src/components/layout/modal/legacy/cw_modal.d.ts.map +1 -1
- package/dist/src/components/layout/modal/legacy/cw_modal.js +44 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_confirm.js +39 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_iframe.js +44 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_report.js +26 -0
- package/dist/{components/layout/table/grouped/CwTableGrouped.d.ts → src/components/layout/table/grouped/CwTableGrouped.js} +13 -23
- package/dist/src/components/layout/tabs/CwTabs.d.ts +1 -2
- package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
- package/dist/src/components/layout/tabs/CwTabs.js +53 -0
- package/dist/src/dev/index.d.ts +5 -0
- package/dist/src/dev/index.d.ts.map +1 -0
- package/dist/src/dev/palette.d.ts +4 -0
- package/dist/src/dev/palette.d.ts.map +1 -0
- package/dist/src/dev/previews.d.ts +3 -0
- package/dist/src/dev/previews.d.ts.map +1 -0
- package/dist/src/dev/useInitial.d.ts +3 -0
- package/dist/src/dev/useInitial.d.ts.map +1 -0
- package/dist/src/index.d.ts +11 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +187 -0
- package/dist/test/components/custom/new-scheduler/presentation/logic/getDefaultDivisions.test.js +48 -0
- package/dist/test/components/custom/new-scheduler/presentation/logic/getEventSizes.test.d.ts +2 -0
- package/dist/test/components/custom/new-scheduler/presentation/logic/getEventSizes.test.d.ts.map +1 -0
- package/dist/test/components/custom/new-scheduler/presentation/logic/hoursBetween.test.js +15 -0
- package/dist/test/components/custom/new-scheduler/presentation/logic/monthDivisions.test.js +42 -0
- package/dist/test/components/custom/new-scheduler/presentation/logic/weekendCalc.test.js +30 -0
- package/dist/test/components/custom/scheduler/addMinutesToDateFromPx.test.js +43 -0
- package/dist/test/components/custom/scheduler/checkIfSlotAvailable.test.js +30 -0
- package/dist/test/components/custom/scheduler/daysBetweenTwoDates.test.js +61 -0
- package/dist/test/components/custom/scheduler/daysBetweenTwoDatesWithoutCeilForEvent.test.js +27 -0
- package/dist/test/components/custom/scheduler/getGUID.test.js +30 -0
- package/dist/test/components/custom/scheduler/getPixelsForEvent.test.js +38 -0
- package/dist/test/components/custom/scheduler/getTimeHeaders.test.js +35 -0
- package/dist/test/components/custom/scheduler/hasSameProperties.test.js +51 -0
- package/dist/test/components/custom/scheduler/isAllowedToMove.test.js +28 -0
- package/dist/test/components/custom/scheduler/listOfDatesToWeeks.test.js +72 -0
- package/dist/test/jest.setup.js +1 -0
- package/package.json +12 -5
- package/dist/common/classes/CwSelectList.d.ts +0 -8
- package/dist/common/classes/CwSelectList.d.ts.map +0 -1
- package/dist/common/classes/CwSelectListItems.d.ts +0 -9
- package/dist/common/classes/CwSelectListItems.d.ts.map +0 -1
- package/dist/common/functions/collections.d.ts +0 -15
- package/dist/common/functions/collections.d.ts.map +0 -1
- package/dist/common/functions/colorManipulation.d.ts +0 -6
- package/dist/common/functions/colorManipulation.d.ts.map +0 -1
- package/dist/common/functions/dsl/UiEventDSL.d.ts +0 -9
- package/dist/common/functions/dsl/UiEventDSL.d.ts.map +0 -1
- package/dist/common/functions/useSingleAndDoubleClicks.d.ts +0 -7
- package/dist/common/functions/useSingleAndDoubleClicks.d.ts.map +0 -1
- package/dist/common/interfaces/CwSelectListProps.d.ts +0 -9
- package/dist/common/interfaces/CwSelectListProps.d.ts.map +0 -1
- package/dist/components/control/action/button/CwButton.d.ts +0 -26
- package/dist/components/control/action/button/CwButton.d.ts.map +0 -1
- package/dist/components/control/action/buttons/CwButtons.d.ts +0 -59
- package/dist/components/control/action/buttons/CwButtons.d.ts.map +0 -1
- package/dist/components/control/action/contextmenu/CwContextMenu.d.ts +0 -23
- package/dist/components/control/action/contextmenu/CwContextMenu.d.ts.map +0 -1
- package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts +0 -29
- package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts.map +0 -1
- package/dist/components/control/action/search/CwSearch.d.ts +0 -16
- package/dist/components/control/action/search/CwSearch.d.ts.map +0 -1
- package/dist/components/control/choice/checkbox/CwCheckbox.d.ts +0 -17
- package/dist/components/control/choice/checkbox/CwCheckbox.d.ts.map +0 -1
- package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts +0 -24
- package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts.map +0 -1
- package/dist/components/control/choice/dropdown/CwDropdown.d.ts +0 -19
- package/dist/components/control/choice/dropdown/CwDropdown.d.ts.map +0 -1
- package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts +0 -17
- package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +0 -1
- package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts +0 -28
- package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +0 -1
- package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts +0 -21
- package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts.map +0 -1
- package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts +0 -158
- package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +0 -1
- package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts +0 -33
- package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts.map +0 -1
- package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts +0 -16
- package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts.map +0 -1
- package/dist/components/control/choice/multiselect/CwMultiselect.d.ts +0 -13
- package/dist/components/control/choice/multiselect/CwMultiselect.d.ts.map +0 -1
- package/dist/components/control/choice/multiselect/CwOptionList.d.ts +0 -15
- package/dist/components/control/choice/multiselect/CwOptionList.d.ts.map +0 -1
- package/dist/components/control/choice/option/CwOption.d.ts +0 -17
- package/dist/components/control/choice/option/CwOption.d.ts.map +0 -1
- package/dist/components/control/choice/select/CwSelect.d.ts +0 -48
- package/dist/components/control/choice/select/CwSelect.d.ts.map +0 -1
- package/dist/components/control/choice/toggle/CwToggle.d.ts +0 -28
- package/dist/components/control/choice/toggle/CwToggle.d.ts.map +0 -1
- package/dist/components/control/input/any/CwInput.d.ts +0 -17
- package/dist/components/control/input/any/CwInput.d.ts.map +0 -1
- package/dist/components/control/input/date/CwInputDate.d.ts +0 -40
- package/dist/components/control/input/date/CwInputDate.d.ts.map +0 -1
- package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts +0 -7
- package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts.map +0 -1
- package/dist/components/control/input/date-text/CwInputDateText.d.ts +0 -38
- package/dist/components/control/input/date-text/CwInputDateText.d.ts.map +0 -1
- package/dist/components/control/input/datetime/CwInputDatetime.d.ts +0 -40
- package/dist/components/control/input/datetime/CwInputDatetime.d.ts.map +0 -1
- package/dist/components/control/input/digit/CwDigit.d.ts +0 -40
- package/dist/components/control/input/digit/CwDigit.d.ts.map +0 -1
- package/dist/components/control/input/file/CwFileUpload.d.ts +0 -18
- package/dist/components/control/input/file/CwFileUpload.d.ts.map +0 -1
- package/dist/components/control/input/image/CwInputImage.d.ts +0 -7
- package/dist/components/control/input/image/CwInputImage.d.ts.map +0 -1
- package/dist/components/control/input/image-area/CwImageArea.d.ts +0 -53
- package/dist/components/control/input/image-area/CwImageArea.d.ts.map +0 -1
- package/dist/components/control/input/number/CwInputNumber.d.ts +0 -20
- package/dist/components/control/input/number/CwInputNumber.d.ts.map +0 -1
- package/dist/components/control/input/phone/CwInputPhone.d.ts +0 -36
- package/dist/components/control/input/phone/CwInputPhone.d.ts.map +0 -1
- package/dist/components/control/input/text/CwInputText.d.ts +0 -40
- package/dist/components/control/input/text/CwInputText.d.ts.map +0 -1
- package/dist/components/control/input/text-area/CwTextArea.d.ts +0 -24
- package/dist/components/control/input/text-area/CwTextArea.d.ts.map +0 -1
- package/dist/components/control/input/time/CwTime.d.ts +0 -40
- package/dist/components/control/input/time/CwTime.d.ts.map +0 -1
- package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts +0 -53
- package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts.map +0 -1
- package/dist/components/custom/find-airport/CwFindAirportComp.d.ts +0 -35
- package/dist/components/custom/find-airport/CwFindAirportComp.d.ts.map +0 -1
- package/dist/components/custom/scheduler/CwSchedulerComp.d.ts +0 -19
- package/dist/components/custom/scheduler/CwSchedulerComp.d.ts.map +0 -1
- package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts +0 -86
- package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/EventRender.d.ts +0 -10
- package/dist/components/custom/scheduler/components/EventRender.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/ResourceListRender.d.ts +0 -20
- package/dist/components/custom/scheduler/components/ResourceListRender.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/ResourceRender.d.ts +0 -14
- package/dist/components/custom/scheduler/components/ResourceRender.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts +0 -11
- package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts +0 -11
- package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts +0 -13
- package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts +0 -11
- package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts +0 -14
- package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts +0 -23
- package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts +0 -8
- package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts +0 -12
- package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts +0 -12
- package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts +0 -10
- package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts.map +0 -1
- package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts +0 -12
- package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts +0 -7
- package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts +0 -10
- package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +0 -7
- package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts +0 -8
- package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts +0 -3
- package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts +0 -3
- package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts +0 -13
- package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts +0 -17
- package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts +0 -3
- package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts +0 -4
- package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts +0 -5
- package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts +0 -3
- package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts +0 -4
- package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts +0 -2
- package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts.map +0 -1
- package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts +0 -3
- package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts +0 -11
- package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts +0 -43
- package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/Resource.d.ts +0 -14
- package/dist/components/custom/scheduler/state/Resource.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/State.d.ts +0 -19
- package/dist/components/custom/scheduler/state/State.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/cblEvent.d.ts +0 -18
- package/dist/components/custom/scheduler/state/cblEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts +0 -7
- package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts.map +0 -1
- package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts +0 -6
- package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts +0 -29
- package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts +0 -80
- package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts +0 -27
- package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts +0 -19
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts +0 -10
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts +0 -5
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts +0 -17
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +0 -8
- package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts +0 -17
- package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts +0 -34
- package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts +0 -8
- package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts +0 -27
- package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts +0 -10
- package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts +0 -15
- package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts +0 -11
- package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/helpers.d.ts +0 -19
- package/dist/components/custom/scheduler-new/presentation/helpers.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts +0 -4
- package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts +0 -2
- package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts +0 -2
- package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts +0 -6
- package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts +0 -3
- package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts +0 -6
- package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts +0 -4
- package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts +0 -2
- package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts +0 -3
- package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts +0 -4
- package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts +0 -12
- package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts.map +0 -1
- package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts +0 -5
- package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts +0 -24
- package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts +0 -86
- package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts +0 -10
- package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts +0 -20
- package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts +0 -14
- package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts +0 -11
- package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts +0 -11
- package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts +0 -13
- package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts +0 -11
- package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts +0 -14
- package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts +0 -23
- package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts +0 -8
- package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts +0 -12
- package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts +0 -12
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts +0 -10
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts +0 -12
- package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts +0 -7
- package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts +0 -10
- package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +0 -7
- package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts +0 -8
- package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +0 -15
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts +0 -3
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts +0 -3
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts +0 -13
- package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +0 -17
- package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +0 -3
- package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts +0 -4
- package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts +0 -5
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts +0 -4
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +0 -3
- package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts +0 -6
- package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts +0 -2
- package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts +0 -3
- package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts +0 -11
- package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts +0 -43
- package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/state/Resource.d.ts +0 -14
- package/dist/components/custom/scheduler-temporal/state/Resource.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/state/State.d.ts +0 -25
- package/dist/components/custom/scheduler-temporal/state/State.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts +0 -18
- package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts.map +0 -1
- package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts +0 -7
- package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts.map +0 -1
- package/dist/components/custom/super-scheduler/PinRowHeader.d.ts +0 -15
- package/dist/components/custom/super-scheduler/PinRowHeader.d.ts.map +0 -1
- package/dist/components/custom/super-scheduler/SuperScheduler.d.ts +0 -25
- package/dist/components/custom/super-scheduler/SuperScheduler.d.ts.map +0 -1
- package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts +0 -13
- package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts.map +0 -1
- package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts +0 -9
- package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts.map +0 -1
- package/dist/components/display/data/accordion/CwAccordionContainer.d.ts +0 -14
- package/dist/components/display/data/accordion/CwAccordionContainer.d.ts.map +0 -1
- package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +0 -15
- package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +0 -1
- package/dist/components/display/data/table/CwTable.d.ts +0 -102
- package/dist/components/display/data/table/CwTable.d.ts.map +0 -1
- package/dist/components/display/graphics/icon/CwIcon.d.ts +0 -15
- package/dist/components/display/graphics/icon/CwIcon.d.ts.map +0 -1
- package/dist/components/display/graphics/loading/CwLoading.d.ts +0 -42
- package/dist/components/display/graphics/loading/CwLoading.d.ts.map +0 -1
- package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts +0 -18
- package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts.map +0 -1
- package/dist/components/display/text/heading/CwHeadingMain.d.ts +0 -3
- package/dist/components/display/text/heading/CwHeadingMain.d.ts.map +0 -1
- package/dist/components/display/text/heading/CwHeadingSecond.d.ts +0 -3
- package/dist/components/display/text/heading/CwHeadingSecond.d.ts.map +0 -1
- package/dist/components/display/text/label/CwLabel.d.ts +0 -28
- package/dist/components/display/text/label/CwLabel.d.ts.map +0 -1
- package/dist/components/display/text/message/CwMessage.d.ts +0 -31
- package/dist/components/display/text/message/CwMessage.d.ts.map +0 -1
- package/dist/components/display/text/tag/CwChip.d.ts +0 -36
- package/dist/components/display/text/tag/CwChip.d.ts.map +0 -1
- package/dist/components/display/text/tag/CwTag.d.ts +0 -16
- package/dist/components/display/text/tag/CwTag.d.ts.map +0 -1
- package/dist/components/display/text/tooltip/CwTooltip.d.ts +0 -8
- package/dist/components/display/text/tooltip/CwTooltip.d.ts.map +0 -1
- package/dist/components/layout/align/CwAlign.d.ts +0 -54
- package/dist/components/layout/align/CwAlign.d.ts.map +0 -1
- package/dist/components/layout/card/CwCard.d.ts +0 -61
- package/dist/components/layout/card/CwCard.d.ts.map +0 -1
- package/dist/components/layout/card/CwCardList.d.ts +0 -32
- package/dist/components/layout/card/CwCardList.d.ts.map +0 -1
- package/dist/components/layout/dialog/CwDialog.d.ts +0 -28
- package/dist/components/layout/dialog/CwDialog.d.ts.map +0 -1
- package/dist/components/layout/dialog/CwDialogManager.d.ts +0 -11
- package/dist/components/layout/dialog/CwDialogManager.d.ts.map +0 -1
- package/dist/components/layout/list/details/CwExpandable.d.ts +0 -23
- package/dist/components/layout/list/details/CwExpandable.d.ts.map +0 -1
- package/dist/components/layout/list/key-value/CwKeyValueList.d.ts +0 -33
- package/dist/components/layout/list/key-value/CwKeyValueList.d.ts.map +0 -1
- package/dist/components/layout/modal/CwModalReportFunctional.d.ts +0 -15
- package/dist/components/layout/modal/CwModalReportFunctional.d.ts.map +0 -1
- package/dist/components/layout/modal/hover/CwModalHover.d.ts +0 -19
- package/dist/components/layout/modal/hover/CwModalHover.d.ts.map +0 -1
- package/dist/components/layout/modal/legacy/cw_modal.d.ts +0 -22
- package/dist/components/layout/modal/legacy/cw_modal.d.ts.map +0 -1
- package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts +0 -16
- package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts.map +0 -1
- package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts +0 -21
- package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts.map +0 -1
- package/dist/components/layout/modal/legacy/cw_modal_report.d.ts +0 -32
- package/dist/components/layout/modal/legacy/cw_modal_report.d.ts.map +0 -1
- package/dist/components/layout/table/grouped/CwTableGrouped.d.ts.map +0 -1
- package/dist/components/layout/tabs/CwTabs.d.ts +0 -46
- package/dist/components/layout/tabs/CwTabs.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
package/dist/index.es.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import React__default, { useEffect, useState, useRef, useMemo,
|
|
3
|
+
import React__default, { useEffect, useState, useCallback, useRef, useMemo, forwardRef, useLayoutEffect, useImperativeHandle, createElement, memo, Fragment as Fragment$1, Component } from 'react';
|
|
4
4
|
import { createRoot } from 'react-dom/client';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
|
-
import { Tooltip, Modal,
|
|
6
|
+
import { Tooltip, Modal, Select, Tag, Dropdown, Menu } from 'antd';
|
|
7
7
|
import Draggable from 'react-draggable';
|
|
8
8
|
import moment from 'moment';
|
|
9
9
|
import lodash from 'lodash';
|
|
@@ -201,13 +201,20 @@ function getContrastColor(color) {
|
|
|
201
201
|
* <CwIcon iconId="house" source="fontawesome" /> // Uses FontAwesome
|
|
202
202
|
*/
|
|
203
203
|
function CwIcon(props) {
|
|
204
|
-
const { iconId, source = 'cwellt', ...iconProps } = props;
|
|
204
|
+
const { iconId, source = 'cwellt', color, size, ...iconProps } = props;
|
|
205
|
+
const getClassName = (baseClass) => {
|
|
206
|
+
return [
|
|
207
|
+
baseClass,
|
|
208
|
+
color && `cw-color-${color}`,
|
|
209
|
+
size && `cw-font-size-${size}`
|
|
210
|
+
].filter(Boolean).join(' ');
|
|
211
|
+
};
|
|
205
212
|
// Return appropriate icon based on source
|
|
206
213
|
if (source === 'fontawesome') {
|
|
207
|
-
return jsx("span", { ...iconProps, className: `fa fa-${iconId}` });
|
|
214
|
+
return jsx("span", { ...iconProps, className: getClassName(`fa fa-${iconId}`) });
|
|
208
215
|
}
|
|
209
216
|
// Use custom icon font
|
|
210
|
-
return jsx("span", { ...iconProps, className: `cwi-icons cwi-${iconId}` });
|
|
217
|
+
return jsx("span", { ...iconProps, className: getClassName(`cwi-icons cwi-${iconId}`) });
|
|
211
218
|
}
|
|
212
219
|
|
|
213
220
|
/**
|
|
@@ -227,7 +234,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
|
|
|
227
234
|
}
|
|
228
235
|
// Calculate styles based on colorScheme, customColor and variant
|
|
229
236
|
const chipStyle = React__default.useMemo(() => {
|
|
230
|
-
if (
|
|
237
|
+
if (customColor) {
|
|
231
238
|
if (variant === 'outline') {
|
|
232
239
|
// For outline, customColor is used for border and text
|
|
233
240
|
return {
|
|
@@ -266,7 +273,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
|
|
|
266
273
|
function CwTag(tagProps) {
|
|
267
274
|
const hideTag = (event_clickTag) => {
|
|
268
275
|
const tag = event_clickTag.currentTarget.parentElement;
|
|
269
|
-
tag?.classList.add("
|
|
276
|
+
tag?.classList.add("tag-hidden");
|
|
270
277
|
};
|
|
271
278
|
const onClickClosableCustomTag = (event_clickClosableT) => {
|
|
272
279
|
hideTag(event_clickClosableT);
|
|
@@ -280,10 +287,7 @@ function CwTag(tagProps) {
|
|
|
280
287
|
tagProps.onClickTag(event_clickTag);
|
|
281
288
|
}
|
|
282
289
|
};
|
|
283
|
-
return (jsxs("div", { className: tagProps.closableTag
|
|
284
|
-
? tagProps.className + " cwelltTag cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
|
|
285
|
-
: tagProps.className + " cwelltTag cwellt_flex cwellt_justify_center cwellt_align_items_center", style: tagProps.styleTag, onClick: event_clickTag => onClickCustomTag(event_clickTag), id: tagProps.idTag, ref: tagProps.ref, children: [jsx("span", { className: tagProps.classNameTag_description +
|
|
286
|
-
" cwelltTag_desc cwellt_flex cwellt_justify_flex_start cwellt_align_items_center", style: tagProps.styleTag_description, children: tagProps.children }), tagProps.closableTag && (jsx("span", { className: "cwi-icons cwi-close", onClick: event_clickClosableT => onClickClosableCustomTag(event_clickClosableT), style: tagProps.styleClosableButton }))] }));
|
|
290
|
+
return (jsxs("div", { className: "cw-tag", style: tagProps.styleTag, onClick: event_clickTag => onClickCustomTag(event_clickTag), id: tagProps.idTag, ref: tagProps.ref, children: [jsx("strong", { style: tagProps.styleTag_description, children: tagProps.children }), tagProps.closableTag && (jsx(CwIcon, { iconId: "close", onClick: event_clickClosableT => onClickClosableCustomTag(event_clickClosableT) }))] }));
|
|
287
291
|
}
|
|
288
292
|
|
|
289
293
|
const CW_DEFAULT_MESSAGE_DURATION = 2000;
|
|
@@ -301,8 +305,35 @@ const CwMessage = props => {
|
|
|
301
305
|
}, props.duration ?? CW_DEFAULT_MESSAGE_DURATION);
|
|
302
306
|
return () => clearTimeout(timer);
|
|
303
307
|
}, [props]);
|
|
304
|
-
return (
|
|
308
|
+
return (jsxs("div", { className: "cw-message", "data-message-type": Object.keys(CwMessageType).find(key => CwMessageType[key] === props.messageType), children: [props.messageType && jsx(CwIcon, { iconId: props.messageType.toString(), size: "large" }), props.message] }));
|
|
305
309
|
};
|
|
310
|
+
/**
|
|
311
|
+
* Hook for displaying inline messages within specific components.
|
|
312
|
+
* Messages appear where you place the RenderMessage component, perfect for form validation
|
|
313
|
+
* and contextual feedback.
|
|
314
|
+
*
|
|
315
|
+
* @returns Object with showMessage function and RenderMessage component
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* ```typescript
|
|
319
|
+
* const { showMessage, RenderMessage } = useCwMessage();
|
|
320
|
+
*
|
|
321
|
+
* const handleValidation = () => {
|
|
322
|
+
* showMessage({
|
|
323
|
+
* message: "Please fill all required fields",
|
|
324
|
+
* messageType: CwMessageType.ERROR,
|
|
325
|
+
* duration: 3000
|
|
326
|
+
* });
|
|
327
|
+
* };
|
|
328
|
+
*
|
|
329
|
+
* return (
|
|
330
|
+
* <div>
|
|
331
|
+
* {RenderMessage}
|
|
332
|
+
* <button onClick={handleValidation}>Submit</button>
|
|
333
|
+
* </div>
|
|
334
|
+
* );
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
306
337
|
const useCwMessage = () => {
|
|
307
338
|
const [isVisible, setIsVisible] = useState(false);
|
|
308
339
|
const [message, setMessage] = useState("");
|
|
@@ -322,30 +353,24 @@ const useCwMessage = () => {
|
|
|
322
353
|
};
|
|
323
354
|
class CwMessageManager {
|
|
324
355
|
static instance;
|
|
325
|
-
|
|
356
|
+
messageWrapper = null;
|
|
326
357
|
root;
|
|
327
|
-
constructor() {
|
|
328
|
-
this.init();
|
|
329
|
-
}
|
|
330
358
|
static getInstance() {
|
|
331
359
|
if (!CwMessageManager.instance) {
|
|
332
360
|
CwMessageManager.instance = new CwMessageManager();
|
|
361
|
+
CwMessageManager.instance.init();
|
|
333
362
|
}
|
|
334
363
|
return CwMessageManager.instance;
|
|
335
364
|
}
|
|
336
365
|
init() {
|
|
337
|
-
this.
|
|
338
|
-
this.
|
|
339
|
-
|
|
340
|
-
this.
|
|
341
|
-
this.messageContainer.style.setProperty("top", "0");
|
|
342
|
-
this.messageContainer.style.setProperty("z-index", "999999");
|
|
343
|
-
document.body.prepend(this.messageContainer);
|
|
344
|
-
this.root = createRoot(this.messageContainer); // Create a root at the messageContainer
|
|
366
|
+
this.messageWrapper = document.createElement("div");
|
|
367
|
+
this.messageWrapper.className = "cw-message-wrapper";
|
|
368
|
+
document.body.prepend(this.messageWrapper);
|
|
369
|
+
this.root = createRoot(this.messageWrapper); // Create a root at the messageWrapper
|
|
345
370
|
}
|
|
346
371
|
showMessage(message, type, duration) {
|
|
347
372
|
const msg = document.createElement("div");
|
|
348
|
-
this.
|
|
373
|
+
this.messageWrapper?.prepend(msg);
|
|
349
374
|
const msgRoot = createRoot(msg); // Create a root for the new message
|
|
350
375
|
msgRoot.render(jsx(CwMessage, { message: message, messageType: type, duration: duration, onClose: () => this.closeMessage(msgRoot) }));
|
|
351
376
|
}
|
|
@@ -353,10 +378,270 @@ class CwMessageManager {
|
|
|
353
378
|
msgRoot.unmount(); // Unmount the message root
|
|
354
379
|
}
|
|
355
380
|
}
|
|
381
|
+
/**
|
|
382
|
+
* Display a global TOAST message that appears floating at the top right of the screen.
|
|
383
|
+
* Perfect for system-wide notifications and cross-component alerts.
|
|
384
|
+
*
|
|
385
|
+
* @param message - Text to display in the message
|
|
386
|
+
* @param type - Message type for styling and icon (SUCCESS, ERROR, WARN, INFO)
|
|
387
|
+
* @param duration - Auto-close duration in milliseconds (default: 2000)
|
|
388
|
+
*
|
|
389
|
+
* @example
|
|
390
|
+
* ```typescript
|
|
391
|
+
* CwDisplayMessage("Data saved successfully!", CwMessageType.SUCCESS);
|
|
392
|
+
* CwDisplayMessage("Connection failed", CwMessageType.ERROR, 5000);
|
|
393
|
+
* ```
|
|
394
|
+
*
|
|
395
|
+
* @note For inline messages within components, use `CwNote` or `useCwMessage` hook instead
|
|
396
|
+
*/
|
|
356
397
|
function CwDisplayMessage(message, type, duration) {
|
|
357
398
|
CwMessageManager.getInstance().showMessage(message, type, duration);
|
|
358
399
|
}
|
|
359
400
|
|
|
401
|
+
/**
|
|
402
|
+
* CwNote - Inline note component for instructions and contextual content
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* <CwNote content="Use the search box to filter results" color="neutral" icon="search" />
|
|
406
|
+
* <CwNote
|
|
407
|
+
* content="Failed to load data"
|
|
408
|
+
* variant="solid"
|
|
409
|
+
* color="danger"
|
|
410
|
+
* icon="warning"
|
|
411
|
+
* onDismiss={() => console.log('dismissed')}
|
|
412
|
+
* />
|
|
413
|
+
* <CwNote variant="outline" color="success" icon="check">
|
|
414
|
+
* <p>Step 1: Configure your project settings</p>
|
|
415
|
+
* <p>Step 2: Validate configuration before proceeding</p>
|
|
416
|
+
* </CwNote>
|
|
417
|
+
* <CwNote className="custom-class" icon="lightbulb">
|
|
418
|
+
* <strong>Important information here</strong>
|
|
419
|
+
* </CwNote>
|
|
420
|
+
*/
|
|
421
|
+
const CwNote = ({ content, variant = 'soft', color = 'primary', customColor, fontSize = 'regular', icon, dismissible = false, autoCloseSeconds, className = '', style = {}, children, }) => {
|
|
422
|
+
const [isVisible, setIsVisible] = useState(true);
|
|
423
|
+
// Auto-close functionality
|
|
424
|
+
useEffect(() => {
|
|
425
|
+
if (autoCloseSeconds && autoCloseSeconds > 0) {
|
|
426
|
+
const timer = setTimeout(() => {
|
|
427
|
+
setIsVisible(false);
|
|
428
|
+
}, autoCloseSeconds * 1000);
|
|
429
|
+
return () => clearTimeout(timer);
|
|
430
|
+
}
|
|
431
|
+
return undefined;
|
|
432
|
+
}, [autoCloseSeconds]);
|
|
433
|
+
// Handle manual dismiss
|
|
434
|
+
const handleDismiss = (e) => {
|
|
435
|
+
e.stopPropagation();
|
|
436
|
+
setIsVisible(false);
|
|
437
|
+
};
|
|
438
|
+
// Calculate styles for custom color
|
|
439
|
+
const messageStyle = React__default.useMemo(() => {
|
|
440
|
+
if (customColor) {
|
|
441
|
+
if (variant === 'outline') {
|
|
442
|
+
// For outline, customColor is used for border and text
|
|
443
|
+
return {
|
|
444
|
+
color: customColor,
|
|
445
|
+
borderColor: customColor,
|
|
446
|
+
...style
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
// For soft/solid, customColor is used for background and we calculate contrast
|
|
451
|
+
return {
|
|
452
|
+
backgroundColor: customColor,
|
|
453
|
+
color: getContrastColor(customColor),
|
|
454
|
+
...style
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
return style;
|
|
459
|
+
}, [customColor, variant, style]);
|
|
460
|
+
// Build CSS classes
|
|
461
|
+
let noteClass = `cw-note cw-note-${fontSize}`;
|
|
462
|
+
if (dismissible) {
|
|
463
|
+
noteClass += ' cw-note-dismissible';
|
|
464
|
+
}
|
|
465
|
+
if (className) {
|
|
466
|
+
noteClass += ` ${className}`;
|
|
467
|
+
}
|
|
468
|
+
// Don't render if not visible
|
|
469
|
+
if (!isVisible) {
|
|
470
|
+
return null;
|
|
471
|
+
}
|
|
472
|
+
return (jsxs("div", { className: noteClass, "data-color": customColor ? undefined : color, "data-variant": variant, style: messageStyle, children: [icon && jsx(CwIcon, { iconId: icon }), jsx("div", { className: "cw-note-content", children: children ?? content }), dismissible && (jsx("button", { className: "cw-note-dismiss-button", onClick: handleDismiss, "aria-label": "Dismiss note", type: "button", children: jsx(CwIcon, { iconId: "close" }) }))] }));
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* CwImageGallery
|
|
477
|
+
*
|
|
478
|
+
* A versatile image gallery component that displays a grid of images
|
|
479
|
+
* and allows users to click on an image to view it in a larger format.
|
|
480
|
+
*
|
|
481
|
+
* @example
|
|
482
|
+
* // Basic usage
|
|
483
|
+
* <ImageGallery
|
|
484
|
+
* images={photos.map(p => {
|
|
485
|
+
* return (
|
|
486
|
+
* {
|
|
487
|
+
* src: "base64ImageString",
|
|
488
|
+
* alt: "Alternative text",
|
|
489
|
+
* filename: "Filename"
|
|
490
|
+
* }
|
|
491
|
+
* )
|
|
492
|
+
* })}
|
|
493
|
+
* />
|
|
494
|
+
*/
|
|
495
|
+
function CwImageGallery({ images }) {
|
|
496
|
+
const [selectedIndex, setSelectedIndex] = useState(null);
|
|
497
|
+
const handleNext = useCallback(() => {
|
|
498
|
+
if (selectedIndex === null)
|
|
499
|
+
return;
|
|
500
|
+
setSelectedIndex((selectedIndex + 1) % images.length);
|
|
501
|
+
}, [selectedIndex, images.length]);
|
|
502
|
+
const handlePrev = useCallback(() => {
|
|
503
|
+
if (selectedIndex === null)
|
|
504
|
+
return;
|
|
505
|
+
setSelectedIndex((selectedIndex - 1 + images.length) % images.length);
|
|
506
|
+
}, [selectedIndex, images.length]);
|
|
507
|
+
const handleKeyDown = useCallback((e) => {
|
|
508
|
+
if (selectedIndex === null)
|
|
509
|
+
return;
|
|
510
|
+
if (e.key === "ArrowRight")
|
|
511
|
+
handleNext();
|
|
512
|
+
else if (e.key === "ArrowLeft")
|
|
513
|
+
handlePrev();
|
|
514
|
+
else if (e.key === "Escape")
|
|
515
|
+
setSelectedIndex(null);
|
|
516
|
+
}, [selectedIndex, handleNext, handlePrev]);
|
|
517
|
+
useEffect(() => {
|
|
518
|
+
if (selectedIndex !== null) {
|
|
519
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
520
|
+
}
|
|
521
|
+
return () => {
|
|
522
|
+
window.removeEventListener("keydown", handleKeyDown);
|
|
523
|
+
};
|
|
524
|
+
}, [selectedIndex, handleKeyDown]);
|
|
525
|
+
const selectedImage = selectedIndex !== null ? images[selectedIndex] : null;
|
|
526
|
+
return (jsxs("div", { className: "cw-grid-base-2", children: [images.map((img, idx) => (jsxs("button", { style: {
|
|
527
|
+
background: "transparent",
|
|
528
|
+
color: "white",
|
|
529
|
+
border: "none",
|
|
530
|
+
cursor: "pointer",
|
|
531
|
+
display: "block",
|
|
532
|
+
}, onClick: () => setSelectedIndex(idx), children: [jsx("img", { src: "data:image/jpeg;base64," + img.src, alt: img.alt, style: {
|
|
533
|
+
width: "300px",
|
|
534
|
+
height: "auto",
|
|
535
|
+
maxHeight: "300px",
|
|
536
|
+
maxWidth: "300px",
|
|
537
|
+
cursor: "pointer",
|
|
538
|
+
borderRadius: "6px",
|
|
539
|
+
} }), jsx("div", { style: { fontSize: "1rem", textAlign: "center" }, children: img.filename && jsx("p", { style: { color: "var(--text-on-body)" }, children: img.filename }) })] }, img.filename))), selectedImage && (jsxs("button", { onClick: () => setSelectedIndex(null), style: {
|
|
540
|
+
position: "fixed",
|
|
541
|
+
top: 0,
|
|
542
|
+
left: 0,
|
|
543
|
+
width: "100vw",
|
|
544
|
+
height: "100vh",
|
|
545
|
+
backgroundColor: "rgba(0, 0, 0, 0.8)",
|
|
546
|
+
display: "grid",
|
|
547
|
+
justifyContent: "center",
|
|
548
|
+
alignItems: "center",
|
|
549
|
+
zIndex: 9999,
|
|
550
|
+
cursor: "zoom-out",
|
|
551
|
+
}, children: [jsx("img", { src: "data:image/jpeg;base64," + selectedImage.src, alt: selectedImage.alt, style: {
|
|
552
|
+
maxWidth: "90vw",
|
|
553
|
+
maxHeight: "90vh",
|
|
554
|
+
width: "auto",
|
|
555
|
+
height: "auto",
|
|
556
|
+
objectFit: "contain",
|
|
557
|
+
borderRadius: "8px",
|
|
558
|
+
boxShadow: "0 0 15px rgba(0,0,0,0.5)",
|
|
559
|
+
zIndex: 10001,
|
|
560
|
+
} }), jsx("div", { style: { color: "#fff", fontSize: "1rem", textAlign: "center" }, children: selectedImage.filename && jsx("p", { children: selectedImage.filename }) }), jsx("button", { onClick: (e) => {
|
|
561
|
+
e.stopPropagation();
|
|
562
|
+
handlePrev();
|
|
563
|
+
}, style: {
|
|
564
|
+
position: "absolute",
|
|
565
|
+
left: "30px",
|
|
566
|
+
fontSize: "2rem",
|
|
567
|
+
background: "transparent",
|
|
568
|
+
color: "white",
|
|
569
|
+
border: "none",
|
|
570
|
+
cursor: "pointer",
|
|
571
|
+
zIndex: 10002,
|
|
572
|
+
}, children: "\u2039" }), jsx("button", { onClick: (e) => {
|
|
573
|
+
e.stopPropagation();
|
|
574
|
+
handleNext();
|
|
575
|
+
}, style: {
|
|
576
|
+
position: "absolute",
|
|
577
|
+
right: "30px",
|
|
578
|
+
fontSize: "2rem",
|
|
579
|
+
background: "transparent",
|
|
580
|
+
color: "white",
|
|
581
|
+
border: "none",
|
|
582
|
+
cursor: "pointer",
|
|
583
|
+
zIndex: 10002,
|
|
584
|
+
}, children: "\u203A" })] }))] }));
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* CwImageGallery
|
|
589
|
+
*
|
|
590
|
+
* A image zoom component that displays an image
|
|
591
|
+
* and allows users to click to view it in a larger format.
|
|
592
|
+
*
|
|
593
|
+
* @example
|
|
594
|
+
* // Basic usage
|
|
595
|
+
* <ImageZoom src={'base64ImageString'}
|
|
596
|
+
* alt={'Alternative text'}/>
|
|
597
|
+
*/
|
|
598
|
+
function CwImageZoom(image) {
|
|
599
|
+
const [selectedImage, setSelectedImage] = useState(null);
|
|
600
|
+
const imageHeight = image.height ? image.height : "300px";
|
|
601
|
+
const imageWidth = image.width ? image.width : "300px";
|
|
602
|
+
useEffect(() => {
|
|
603
|
+
const handleKeyDown = (e) => {
|
|
604
|
+
if (e.key === "Escape") {
|
|
605
|
+
setSelectedImage(null);
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
if (selectedImage) {
|
|
609
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
610
|
+
}
|
|
611
|
+
return () => {
|
|
612
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
613
|
+
};
|
|
614
|
+
}, [selectedImage]);
|
|
615
|
+
return (jsxs("div", { className: "cw-fieldset cw-grid-base-2", children: [image.src && (jsx("img", { src: "data:image/jpeg;base64," + image.src, alt: image.alt, onClick: () => setSelectedImage(image), style: {
|
|
616
|
+
maxHeight: imageHeight,
|
|
617
|
+
maxWidth: imageWidth,
|
|
618
|
+
cursor: "zoom-in",
|
|
619
|
+
borderRadius: "6px",
|
|
620
|
+
objectFit: "cover",
|
|
621
|
+
} }, image.alt)), selectedImage && (jsxs("div", { onClick: () => setSelectedImage(null), style: {
|
|
622
|
+
position: "fixed",
|
|
623
|
+
top: 0,
|
|
624
|
+
left: 0,
|
|
625
|
+
width: "100vw",
|
|
626
|
+
height: "100vh",
|
|
627
|
+
backgroundColor: "rgba(0, 0, 0, 0.85)",
|
|
628
|
+
display: "grid",
|
|
629
|
+
justifyContent: "center",
|
|
630
|
+
alignItems: "center",
|
|
631
|
+
zIndex: 9999,
|
|
632
|
+
cursor: "zoom-out",
|
|
633
|
+
padding: "1rem",
|
|
634
|
+
}, children: [jsx("img", { src: "data:image/jpeg;base64," + selectedImage.src, alt: selectedImage.alt, style: {
|
|
635
|
+
maxWidth: "90vw",
|
|
636
|
+
maxHeight: "90vh",
|
|
637
|
+
width: "auto",
|
|
638
|
+
height: "auto",
|
|
639
|
+
objectFit: "contain",
|
|
640
|
+
borderRadius: "8px",
|
|
641
|
+
boxShadow: "0 0 15px rgba(0,0,0,0.5)",
|
|
642
|
+
} }), jsx("div", { style: { color: "#fff", fontSize: "1rem", textAlign: "center" }, children: selectedImage.filename && jsx("div", { children: selectedImage.filename }) })] }))] }));
|
|
643
|
+
}
|
|
644
|
+
|
|
360
645
|
/**
|
|
361
646
|
* CwLoading
|
|
362
647
|
*
|
|
@@ -380,7 +665,7 @@ function CwDisplayMessage(message, type, duration) {
|
|
|
380
665
|
*/
|
|
381
666
|
function CwLoading({ isLoading = false, text = '', size = 'regular', iconPosition = 'outside', iconName = 'cwi-plane-solid', animation = 'spin', children }) {
|
|
382
667
|
const iconClasses = `cwi-icons ${iconName || ''}`;
|
|
383
|
-
return (jsxs("div", { "aria-busy": isLoading, className: isLoading ? 'cw-loading-container' : '', children: [isLoading && (jsxs("div", { className: "cw-loading-content", "data-size": size, "data-animation": animation, children: [jsx("div", { className: "cw-loading", "data-icon-position": iconPosition, children: jsx("span", { className: iconClasses }) }), text && (jsx("p", { children: text }))] })), jsx("div", { className: isLoading ? 'cw-loading-disabled-content' : '', children: children })] }));
|
|
668
|
+
return (jsxs("div", { "aria-busy": isLoading, className: isLoading ? 'cw-loading-container' : '', "data-children": !!children, children: [isLoading && (jsxs("div", { className: "cw-loading-content", "data-size": size, "data-animation": animation, children: [jsx("div", { className: "cw-loading", "data-icon-position": iconPosition, children: jsx("span", { className: iconClasses }) }), text && (jsx("p", { children: text }))] })), jsx("div", { className: isLoading ? 'cw-loading-disabled-content' : '', children: children })] }));
|
|
384
669
|
}
|
|
385
670
|
|
|
386
671
|
/**
|
|
@@ -403,7 +688,7 @@ function CwLoadingSmall(CwelltLoadingAppointements) {
|
|
|
403
688
|
jsx("div", {})) }));
|
|
404
689
|
}
|
|
405
690
|
|
|
406
|
-
var styles$
|
|
691
|
+
var styles$j = {"cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si"};
|
|
407
692
|
|
|
408
693
|
// Constants moved outside to prevent recreation
|
|
409
694
|
const margin = 16;
|
|
@@ -514,12 +799,12 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
|
|
|
514
799
|
const { setTooltipTimeout, clearTooltipTimeout } = useTooltipDelay(() => {
|
|
515
800
|
setIsVisible(true);
|
|
516
801
|
}, showDelay);
|
|
517
|
-
const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$
|
|
802
|
+
const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$j["cw-generic-tooltip-content"]);
|
|
518
803
|
// Memoize tooltip content creation
|
|
519
804
|
const tooltipContent = useMemo(() => {
|
|
520
805
|
if (hide || !isVisible || !content)
|
|
521
806
|
return null;
|
|
522
|
-
return createPortal(jsx("div", { className: styles$
|
|
807
|
+
return createPortal(jsx("div", { className: styles$j["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, style: {
|
|
523
808
|
position: 'fixed',
|
|
524
809
|
top: `${tooltipPosition.top}px`,
|
|
525
810
|
left: `${tooltipPosition.left}px`,
|
|
@@ -534,12 +819,12 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
|
|
|
534
819
|
clearTooltipTimeout();
|
|
535
820
|
setIsVisible(false);
|
|
536
821
|
}, [clearTooltipTimeout]);
|
|
537
|
-
return (jsxs("div", { ref: containerRef, className: styles$
|
|
822
|
+
return (jsxs("div", { ref: containerRef, className: styles$j["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, children: [tooltipContent, children] }));
|
|
538
823
|
};
|
|
539
824
|
|
|
540
825
|
// Reference for draggable modal
|
|
541
|
-
const draggableRef$1 = React__default.createRef();
|
|
542
826
|
function CwModal(custModalProps) {
|
|
827
|
+
const draggableRef = useRef(null);
|
|
543
828
|
// Hooks [ modal draggable ]
|
|
544
829
|
const [isModalDisabled, setModalDisabled] = useState(true);
|
|
545
830
|
// [ optional : hideFooter by default it shows the footer ]
|
|
@@ -569,7 +854,7 @@ function CwModal(custModalProps) {
|
|
|
569
854
|
width: custModalProps.widthModal
|
|
570
855
|
}
|
|
571
856
|
};
|
|
572
|
-
return (jsx("div", { children: custModalProps.modalState && (jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsx(Draggable, { disabled: isModalDisabled, axis: "both", children: jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef
|
|
857
|
+
return (jsx("div", { children: custModalProps.modalState && (jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsx(Draggable, { disabled: isModalDisabled, axis: "both", nodeRef: draggableRef, children: jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef, style: widthModalDef !== "40em" ? modalStyle.widthCustomStyle : modalStyle.widthDefStyle, children: [jsxs("div", { className: "cwelltModalHeader", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx("div", { className: "cwelltModalTitle", children: custModalProps.titleModal }), jsx("button", { className: "cwelltBtnCloseModal", onClick: custModalProps.onCloseModal, children: jsx("span", { className: "cwelltCloseIcon" }) })] }), jsx("div", { className: "cwelltModalBody", children: jsx("div", { className: "cwelltContainerModalBody", style: { position: "relative" }, children: custModalProps.children }) }), isHide === false ? (
|
|
573
858
|
// [ false : show modal ]
|
|
574
859
|
jsxs("div", { className: "cwelltModalFooter", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx(Tooltip, { placement: "bottom", title: "Save", color: "#368ee0", children: jsx("div", { className: "cwellt_flex cwellt_justify_center cwelltModalFooterContButton", style: { width: "2em" }, children: jsx("button", { className: "btnModalFooterAction cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btn_save ", onClick: custModalProps.onSaveModal, form: custModalProps.formSaveModal, hidden: custModalProps.HideBtnModal, type: custModalProps.HtmlSubmitModal }) }) }), isShowcustButton === true ? (jsx(Tooltip, { placement: "bottom", title: custModalProps.custButtonTitle, color: custModalProps.custColorButtonTooltip, children: jsx("div", { className: "cwellt_flex cwellt_justify_center cwelltModalFooterContButton", style: { width: "2em" }, children: jsx("button", { className: "btnModalFooterAction cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg " +
|
|
575
860
|
custModalProps.custButtonClassName, onClick: custModalProps.custButtonClick }) }) })) : (jsx("div", {}))] })) : (
|
|
@@ -577,6 +862,78 @@ function CwModal(custModalProps) {
|
|
|
577
862
|
jsx("div", { style: { display: "none" } }))] }) })] })) }));
|
|
578
863
|
}
|
|
579
864
|
|
|
865
|
+
var styles$i = {"overlayPositioned":"CwConfirmationPopup-module_overlayPositioned__11qYB","popup":"CwConfirmationPopup-module_popup__ahPjM","message":"CwConfirmationPopup-module_message__MnNL4","buttons":"CwConfirmationPopup-module_buttons__fGYYE","button":"CwConfirmationPopup-module_button__ugYQE","confirmButton":"CwConfirmationPopup-module_confirmButton__rTP4S","cancelButton":"CwConfirmationPopup-module_cancelButton__Ry694"};
|
|
866
|
+
|
|
867
|
+
function CwConfirmationPopup(props) {
|
|
868
|
+
const { isOpen, onConfirm, onCancel, message = "Are you sure you want to proceed?", confirmText = "Confirm", cancelText = "Cancel", placement = 'bottom', children } = props;
|
|
869
|
+
const triggerRef = useRef(null);
|
|
870
|
+
const popupRef = useRef(null);
|
|
871
|
+
const [position, setPosition] = useState({ top: 0, left: 0 });
|
|
872
|
+
// Render the children with a wrapper to get the reference
|
|
873
|
+
const renderChildren = () => {
|
|
874
|
+
if (React__default.isValidElement(children)) {
|
|
875
|
+
const ChildWrapper = forwardRef((_props, ref) => {
|
|
876
|
+
return (jsx("div", { ref: ref, style: { display: 'inline-block' }, children: children }));
|
|
877
|
+
});
|
|
878
|
+
return jsx(ChildWrapper, { ref: triggerRef });
|
|
879
|
+
}
|
|
880
|
+
return children;
|
|
881
|
+
};
|
|
882
|
+
// Effect to calculate the position of the popup
|
|
883
|
+
useEffect(() => {
|
|
884
|
+
if (isOpen && triggerRef.current && popupRef.current) {
|
|
885
|
+
const targetRect = triggerRef.current.getBoundingClientRect();
|
|
886
|
+
const popupRect = popupRef.current.getBoundingClientRect();
|
|
887
|
+
let top = 0;
|
|
888
|
+
let left = 0;
|
|
889
|
+
// Calculate position based on placement
|
|
890
|
+
switch (placement) {
|
|
891
|
+
case 'top':
|
|
892
|
+
top = targetRect.top - popupRect.height - 10;
|
|
893
|
+
left = targetRect.left + (targetRect.width / 2) - (popupRect.width / 2);
|
|
894
|
+
break;
|
|
895
|
+
case 'right':
|
|
896
|
+
top = targetRect.top + (targetRect.height / 2) - (popupRect.height / 2);
|
|
897
|
+
left = targetRect.right + 10;
|
|
898
|
+
break;
|
|
899
|
+
case 'bottom':
|
|
900
|
+
top = targetRect.bottom + 10;
|
|
901
|
+
left = targetRect.left + (targetRect.width / 2) - (popupRect.width / 2);
|
|
902
|
+
break;
|
|
903
|
+
case 'left':
|
|
904
|
+
top = targetRect.top + (targetRect.height / 2) - (popupRect.height / 2);
|
|
905
|
+
left = targetRect.left - popupRect.width - 10;
|
|
906
|
+
break;
|
|
907
|
+
}
|
|
908
|
+
// Adjustments to keep the popup within the window
|
|
909
|
+
const viewportWidth = window.innerWidth;
|
|
910
|
+
const viewportHeight = window.innerHeight;
|
|
911
|
+
if (left < 10)
|
|
912
|
+
left = 10;
|
|
913
|
+
if (left + popupRect.width > viewportWidth - 10) {
|
|
914
|
+
left = viewportWidth - popupRect.width - 10;
|
|
915
|
+
}
|
|
916
|
+
if (top < 10)
|
|
917
|
+
top = 10;
|
|
918
|
+
if (top + popupRect.height > viewportHeight - 10) {
|
|
919
|
+
top = viewportHeight - popupRect.height - 10;
|
|
920
|
+
}
|
|
921
|
+
setPosition({ top, left });
|
|
922
|
+
}
|
|
923
|
+
}, [isOpen, placement]);
|
|
924
|
+
const handleOverlayClick = (e) => {
|
|
925
|
+
if (popupRef.current && !popupRef.current.contains(e.target)) {
|
|
926
|
+
onCancel();
|
|
927
|
+
}
|
|
928
|
+
};
|
|
929
|
+
return (jsxs(Fragment, { children: [renderChildren(), isOpen && (jsx("div", { className: styles$i.overlayPositioned, onClick: handleOverlayClick, children: jsxs("div", { ref: popupRef, className: styles$i.popup, style: {
|
|
930
|
+
position: 'absolute',
|
|
931
|
+
top: `${position.top}px`,
|
|
932
|
+
left: `${position.left}px`,
|
|
933
|
+
transform: 'none'
|
|
934
|
+
}, children: [jsx("p", { className: styles$i.message, children: message }), jsxs("div", { className: styles$i.buttons, children: [jsx("button", { className: `${styles$i.button} ${styles$i.confirmButton}`, onClick: onConfirm, children: confirmText }), jsx("button", { className: `${styles$i.button} ${styles$i.cancelButton}`, onClick: onCancel, children: cancelText })] })] }) }))] }));
|
|
935
|
+
}
|
|
936
|
+
|
|
580
937
|
// Reference for draggable modal
|
|
581
938
|
const draggableRef = React__default.createRef();
|
|
582
939
|
function CwModalConfirm(custModalProps) {
|
|
@@ -653,7 +1010,7 @@ class CwModalIframe extends React.Component {
|
|
|
653
1010
|
}
|
|
654
1011
|
}
|
|
655
1012
|
|
|
656
|
-
var styles$
|
|
1013
|
+
var styles$h = {"cw-dialog-main":"cw-dialog-module_cw-dialog-main__cHxHt","cw-dialog-button-close":"cw-dialog-module_cw-dialog-button-close__9GRd8"};
|
|
657
1014
|
|
|
658
1015
|
// Helper function to parse size values
|
|
659
1016
|
const parseSize = (size) => {
|
|
@@ -692,7 +1049,7 @@ const convertFromPx = (px, unit) => {
|
|
|
692
1049
|
}
|
|
693
1050
|
};
|
|
694
1051
|
const CwDialog = props => {
|
|
695
|
-
const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, ...domProps } = props;
|
|
1052
|
+
const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, autoReposition = false, ...domProps } = props;
|
|
696
1053
|
const dialogRef = useRef(null);
|
|
697
1054
|
const initialSetup = useMemo(() => {
|
|
698
1055
|
// Default width and height with units
|
|
@@ -741,19 +1098,42 @@ const CwDialog = props => {
|
|
|
741
1098
|
// scrim is true by default
|
|
742
1099
|
const hasScrim = scrim !== false;
|
|
743
1100
|
// Adjust position after the dialog is rendered when using autoHeight
|
|
744
|
-
|
|
1101
|
+
useLayoutEffect(() => {
|
|
1102
|
+
let resizeObserver = null;
|
|
745
1103
|
if (size.autoHeight && dialogRef.current && open) {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
}
|
|
1104
|
+
const recalculatePosition = () => {
|
|
1105
|
+
const actualHeight = dialogRef.current?.offsetHeight;
|
|
1106
|
+
if (actualHeight && actualHeight > 0) {
|
|
1107
|
+
setPosition({
|
|
1108
|
+
x: Math.max(0, window.document.body.clientWidth / 2 - size.width / 2),
|
|
1109
|
+
y: Math.max(0, window.document.body.clientHeight / 2 - actualHeight / 2)
|
|
1110
|
+
});
|
|
1111
|
+
}
|
|
1112
|
+
};
|
|
1113
|
+
setTimeout(recalculatePosition, 0);
|
|
1114
|
+
// For modals with delayed loading content (inner fetchs and similar)
|
|
1115
|
+
if (autoReposition) {
|
|
1116
|
+
resizeObserver = new ResizeObserver(() => {
|
|
1117
|
+
const dialog = dialogRef.current;
|
|
1118
|
+
if (!dialog)
|
|
1119
|
+
return;
|
|
1120
|
+
const dialogRect = dialog.getBoundingClientRect();
|
|
1121
|
+
const viewportHeight = window.innerHeight;
|
|
1122
|
+
const margin = 50;
|
|
1123
|
+
// Only reposition if modal tries to grow over window limits
|
|
1124
|
+
const isOverflowingTop = dialogRect.top < margin;
|
|
1125
|
+
const isOverflowingBottom = dialogRect.bottom > viewportHeight - margin;
|
|
1126
|
+
if (isOverflowingTop || isOverflowingBottom) {
|
|
1127
|
+
recalculatePosition();
|
|
1128
|
+
}
|
|
1129
|
+
});
|
|
1130
|
+
resizeObserver.observe(dialogRef.current);
|
|
754
1131
|
}
|
|
755
1132
|
}
|
|
756
|
-
|
|
1133
|
+
return () => {
|
|
1134
|
+
resizeObserver?.disconnect();
|
|
1135
|
+
};
|
|
1136
|
+
}, [size.autoHeight, open, autoReposition]);
|
|
757
1137
|
useEffect(() => {
|
|
758
1138
|
const handleMouseMove = (e) => {
|
|
759
1139
|
if (isDragging) {
|
|
@@ -846,7 +1226,7 @@ const CwDialog = props => {
|
|
|
846
1226
|
onClose();
|
|
847
1227
|
}
|
|
848
1228
|
}, [onClose]);
|
|
849
|
-
const header = useMemo(() => (jsxs("header", { onMouseDown: handleMouseDown, children: [jsx("span", { children: headline }), customHeader || (jsx("button", { className: styles$
|
|
1229
|
+
const header = useMemo(() => (jsxs("header", { onMouseDown: handleMouseDown, children: [jsx("span", { children: headline }), customHeader || (jsx("button", { className: styles$h["cw-dialog-button-close"], onClick: onClose }))] })), [handleMouseDown, headline, customHeader, onClose]);
|
|
850
1230
|
const content = useMemo(() => (jsx("section", { children: children })), [children]);
|
|
851
1231
|
const footer = useMemo(() => (jsx("footer", { children: customFooter || (jsx("button", { className: "cw-button-icon cwi-save", onClick: onSave })) })), [customFooter, onSave]);
|
|
852
1232
|
const resizeHandles = useMemo(() => size.autoHeight
|
|
@@ -875,12 +1255,13 @@ const CwDialog = props => {
|
|
|
875
1255
|
: `${convertFromPx(size.height, size.heightUnit)}${size.heightUnit}`;
|
|
876
1256
|
return { displayWidth, displayHeight };
|
|
877
1257
|
}, [size.width, size.height, size.widthUnit, size.heightUnit, size.autoHeight]);
|
|
878
|
-
|
|
1258
|
+
const dialogContent = (jsx("div", { "data-has-scrim": hasScrim, className: styles$h["cw-dialog-main"], onClick: handleScrimClick, children: jsxs("dialog", { ...domProps, ref: dialogRef, style: {
|
|
879
1259
|
left: `${position.x}px`,
|
|
880
1260
|
top: `${position.y}px`,
|
|
881
1261
|
width: displayDimensions.displayWidth,
|
|
882
1262
|
height: displayDimensions.displayHeight
|
|
883
|
-
}, children: [header, content, hideFooter !== true && footer, resizeHandles] }) }))
|
|
1263
|
+
}, children: [header, content, hideFooter !== true && footer, resizeHandles] }) }));
|
|
1264
|
+
return open ? createPortal(dialogContent, document.body) : null;
|
|
884
1265
|
};
|
|
885
1266
|
|
|
886
1267
|
const CwModalReportFunctional = (props) => {
|
|
@@ -1038,7 +1419,7 @@ function CwButton({ text, variant = 'solid', color = 'primary', className = '',
|
|
|
1038
1419
|
return (jsx("button", { type: "button", className: buttonClass, ...buttonProps, "data-color": color, children: variant === 'icon' ? null : (children ?? (jsxs(Fragment, { children: [icon && jsx("span", { className: `cwi-icons cwi-${icon}` }), text && jsx("strong", { children: text })] }))) }));
|
|
1039
1420
|
}
|
|
1040
1421
|
|
|
1041
|
-
var styles$
|
|
1422
|
+
var styles$g = {"card":"cw-card-module_card__HJUT0","clickable":"cw-card-module_clickable__Y-V3X","disabled":"cw-card-module_disabled__0wHh1","loading":"cw-card-module_loading__-fzlx","content":"cw-card-module_content__ma9qy","headerContent":"cw-card-module_headerContent__x4Jfl","footerTags":"cw-card-module_footerTags__80sSW","loadingOverlay":"cw-card-module_loadingOverlay__8-zVV"};
|
|
1042
1423
|
|
|
1043
1424
|
/**
|
|
1044
1425
|
* CwCard - A simple card component for displaying content in a contained format
|
|
@@ -1062,11 +1443,11 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1062
1443
|
// Construct class names using CSS modules
|
|
1063
1444
|
const cardClassNames = [
|
|
1064
1445
|
'cw-card',
|
|
1065
|
-
styles$
|
|
1446
|
+
styles$g.card,
|
|
1066
1447
|
className,
|
|
1067
|
-
clickable ? styles$
|
|
1068
|
-
disabled ? styles$
|
|
1069
|
-
isLoading ? styles$
|
|
1448
|
+
clickable ? styles$g.clickable : '',
|
|
1449
|
+
disabled ? styles$g.disabled : '',
|
|
1450
|
+
isLoading ? styles$g.loading : '',
|
|
1070
1451
|
].filter(Boolean).join(' ');
|
|
1071
1452
|
// Handle click event when card is clickable
|
|
1072
1453
|
const handleClick = () => {
|
|
@@ -1083,17 +1464,17 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1083
1464
|
// Determine if footer should be rendered
|
|
1084
1465
|
const hasFooter = hasChips || footer || (hasActions && direction === "row");
|
|
1085
1466
|
// Actions component to reuse
|
|
1086
|
-
const ActionsComponent = hasActions && !disabled ? (jsxs("div", { className: styles$
|
|
1467
|
+
const ActionsComponent = hasActions && !disabled ? (jsxs("div", { className: styles$g.actions, children: [extraActions ?? null, onEdit && jsx(CwButton, { variant: "icon", icon: "edit", onClick: onEdit }), onDelete && jsx(CwButton, { variant: "icon", icon: "delete", color: "danger", onClick: onDelete })] })) : null;
|
|
1087
1468
|
return (jsxs("div", { ...(id && { id }), className: cardClassNames, ...(style && { style }), ...(clickable && {
|
|
1088
1469
|
role: 'button',
|
|
1089
1470
|
tabIndex: 0,
|
|
1090
1471
|
onClick: handleClick,
|
|
1091
|
-
}), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$
|
|
1472
|
+
}), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$g.headerContent, "data-alignment": alignment, children: [title && jsx("h5", { children: title }), subtitle && jsx("strong", { children: subtitle })] })), direction === "column" && ActionsComponent] })), jsx("div", { className: styles$g.content, children: children }), hasFooter && (jsxs("footer", { children: [hasChips && (jsx("div", { className: styles$g.footerTags, children: chips.map((chip, index) => (jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$g.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsx("div", { className: styles$g.footerContent, children: footer }))] })), direction === "row" && ActionsComponent, isLoading && (jsx("div", { className: styles$g.loadingOverlay, children: jsx(CwLoading, { isLoading: isLoading, size: "small" }) }))] }));
|
|
1092
1473
|
};
|
|
1093
1474
|
|
|
1094
|
-
var styles$
|
|
1475
|
+
var styles$f = {"cardContainer":"cw-card-list-module_cardContainer__l3YEh","pagination":"cw-card-list-module_pagination__5Ay78","pageInfo":"cw-card-list-module_pageInfo__uiMel","loading":"cw-card-list-module_loading__cYpND","emptyState":"cw-card-list-module_emptyState__RlqiS","sortControls":"cw-card-list-module_sortControls__mWgZA"};
|
|
1095
1476
|
|
|
1096
|
-
function CwCardList({ items, renderCard, pageSize = 10,
|
|
1477
|
+
function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, emptyState, sortOptions = [], defaultSortKey, ...htmlProps }) {
|
|
1097
1478
|
const [currentPage, setCurrentPage] = useState(1);
|
|
1098
1479
|
const [sortKey, setSortKey] = useState(defaultSortKey || sortOptions[0]?.key || '');
|
|
1099
1480
|
const [sortDirection, setSortDirection] = useState('asc');
|
|
@@ -1125,10 +1506,10 @@ function CwCardList({ items, renderCard, pageSize = 10, className = '', layout =
|
|
|
1125
1506
|
'--card-width': `${defaultCardWidth}px`,
|
|
1126
1507
|
'--card-gap': `${cardGap}px`
|
|
1127
1508
|
};
|
|
1128
|
-
return (jsxs("div", {
|
|
1509
|
+
return (jsxs("div", { ...htmlProps, children: [sortOptions.length > 0 && (jsxs("div", { className: styles$f.sortControls, children: [jsx("label", { htmlFor: "cardlist-sort-select", children: "Sort by:" }), jsx("select", { id: "cardlist-sort-select", value: sortKey, onChange: (e) => handleSortChange(e.target.value), className: styles$f.sortSelect, children: sortOptions.map(option => (jsx("option", { value: option.key, children: option.label }, option.key))) }), jsx("button", { onClick: () => setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc'), className: `cw-button-icon ${sortDirection === 'asc' ? 'cwi-arrow-up' : 'cwi-arrow-down'}`, title: `Sort ${sortDirection === 'asc' ? 'descending' : 'ascending'}` })] })), isLoading ? (jsx("div", { className: styles$f.loading, children: jsx(CwLoading, { isLoading: isLoading }) })) : sortedItems.length === 0 ? (jsx("div", { className: styles$f.emptyState, children: emptyState || jsx("p", { children: "No items to display" }) })) : (jsxs(Fragment, { children: [jsx("div", { className: `${styles$f.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsx("div", { className: styles$f.cardWrapper, children: renderCard(item, index) }, index))) }), totalPages > 1 && (jsxs("div", { className: styles$f.pagination, children: [jsx("button", { disabled: currentPage === 1, onClick: () => setCurrentPage(p => Math.max(1, p - 1)), className: "cw-button-icon cwi-chevron-left" }), jsxs("span", { className: styles$f.pageInfo, children: [currentPage, " of ", totalPages] }), jsx("button", { disabled: currentPage === totalPages, onClick: () => setCurrentPage(p => Math.min(totalPages, p + 1)), className: "cw-button-icon cwi-chevron-right" })] }))] }))] }));
|
|
1129
1510
|
}
|
|
1130
1511
|
|
|
1131
|
-
var styles$
|
|
1512
|
+
var styles$e = {"cw-accordion":"cw-accordion-module_cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module_cw-accordion-body__xlI8b"};
|
|
1132
1513
|
|
|
1133
1514
|
/**
|
|
1134
1515
|
*
|
|
@@ -1145,7 +1526,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
|
|
|
1145
1526
|
setVisible_accordionBody(!isVisible_accordionBody);
|
|
1146
1527
|
};
|
|
1147
1528
|
// #endregion
|
|
1148
|
-
return (jsxs("div", { className: styles$
|
|
1529
|
+
return (jsxs("div", { className: styles$e["cw-accordion"], style: CwelltAccordionContainerProps.style, "data-open": isVisible_accordionBody, children: [jsxs("header", { onClick: () => showAccordionBody(), children: [jsx("div", { children: CwelltAccordionContainerProps.desc_text }), jsx("button", { className: "cw-button-icon" })] }), jsx("div", { className: styles$e["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
|
|
1149
1530
|
}
|
|
1150
1531
|
|
|
1151
1532
|
/**
|
|
@@ -1281,7 +1662,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1281
1662
|
const startX = e.clientX;
|
|
1282
1663
|
const startWidth = e.target.parentElement?.offsetWidth || 0;
|
|
1283
1664
|
const onMouseMove = (moveEvent) => {
|
|
1284
|
-
const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50); //
|
|
1665
|
+
const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50); // min 50px
|
|
1285
1666
|
setColumnWidths(prev => ({ ...prev, [key]: newWidth }));
|
|
1286
1667
|
};
|
|
1287
1668
|
const onMouseUp = () => {
|
|
@@ -1298,7 +1679,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1298
1679
|
overflowY: "auto"
|
|
1299
1680
|
};
|
|
1300
1681
|
}
|
|
1301
|
-
return {}; //
|
|
1682
|
+
return {}; // no height or scroll
|
|
1302
1683
|
}, [stickyHeader, scrollHeight]);
|
|
1303
1684
|
const getColSpan = () => columns.length + (expandedRowRender ? 1 : 0);
|
|
1304
1685
|
const hasClassNameRow = (item) => {
|
|
@@ -1334,7 +1715,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1334
1715
|
}),
|
|
1335
1716
|
}, children: [jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [jsx("span", { children: col.title }), col.sortable && col.dataIndex && (jsx("span", { style: { fontSize: "12px", marginLeft: "6px" }, children: sortConfig.key !== col.dataIndex ? "↕" : sortConfig.direction === "asc"
|
|
1336
1717
|
? "↑"
|
|
1337
|
-
: "↓" }))] }), jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxs("footer", { className: "cw-table-pagination", children: [jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsx("input", { type: "
|
|
1718
|
+
: "↓" }))] }), jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxs("footer", { className: "cw-table-pagination", children: [jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsx("input", { type: "text", inputMode: "numeric", value: currentPage, onChange: (e) => {
|
|
1338
1719
|
const value = parseInt(e.target.value, 10);
|
|
1339
1720
|
if (!isNaN(value))
|
|
1340
1721
|
handlePageChange(value);
|
|
@@ -1343,14 +1724,10 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1343
1724
|
if (isNaN(value) || value < 1 || value > totalPages) {
|
|
1344
1725
|
handlePageChange(1);
|
|
1345
1726
|
}
|
|
1346
|
-
}, min: 1, max: totalPages,
|
|
1347
|
-
width: "4rem",
|
|
1348
|
-
textAlign: "center",
|
|
1349
|
-
marginRight: "0.5rem"
|
|
1350
|
-
} }), "of ", totalPages, jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, style: { marginLeft: "1rem" }, children: pageSizeOptions.map(size => (jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
|
|
1727
|
+
}, min: 1, max: totalPages }), jsxs("span", { children: ["of ", totalPages] }), jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, children: pageSizeOptions.map(size => (jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
|
|
1351
1728
|
}
|
|
1352
1729
|
|
|
1353
|
-
var styles$
|
|
1730
|
+
var styles$d = {"cw-tabs":"cw-tabs-module_cw-tabs__1pmji","cw-tabs-content":"cw-tabs-module_cw-tabs-content__HTp8d"};
|
|
1354
1731
|
|
|
1355
1732
|
const TabIcon = ({ icon }) => {
|
|
1356
1733
|
if (!icon)
|
|
@@ -1400,7 +1777,7 @@ function CwTabs(CwTabsProps) {
|
|
|
1400
1777
|
const tabsListStyle = position === 'left' && CwTabsProps.tabsListWidth
|
|
1401
1778
|
? { minWidth: CwTabsProps.tabsListWidth }
|
|
1402
1779
|
: undefined;
|
|
1403
|
-
return (jsxs("div", { id: CwTabsProps.id, className: styles$
|
|
1780
|
+
return (jsxs("div", { id: CwTabsProps.id, className: styles$d['cw-tabs'], style: CwTabsProps.style, "data-tabs-position": position, children: [jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsx(TabIcon, { icon: tab.icon }), tab.title] }, tab.key))) }), jsx("div", { className: styles$d['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
|
|
1404
1781
|
}
|
|
1405
1782
|
|
|
1406
1783
|
/**
|
|
@@ -1442,10 +1819,140 @@ const CwExpandable = ({ briefing, onToggle, onOpen, onClose, children, ...detail
|
|
|
1442
1819
|
*/
|
|
1443
1820
|
const CwKeyValueList = ({ items, className = "", emptyValue = "-", direction = "row" }) => {
|
|
1444
1821
|
return (jsx("dl", { className: `cw-keyvalue-list ${className}`, children: items.map(item => (jsxs("div", { className: `cw-keyvalue-list-item cw-flex-${direction}`, children: [jsx("dt", { children: item.label }), jsx("dd", { children: item.value !== undefined && item.value !== null && item.value !== ""
|
|
1445
|
-
?
|
|
1822
|
+
? (React__default.isValidElement(item.value)
|
|
1823
|
+
? item.value
|
|
1824
|
+
: `${item.value}${item.suffix ? ` ${item.suffix}` : ''}`)
|
|
1446
1825
|
: emptyValue })] }, item.key))) }));
|
|
1447
1826
|
};
|
|
1448
1827
|
|
|
1828
|
+
var styles$c = {"sortableList":"cw-sortable-list-module_sortableList__PyLO-","sortableItem":"cw-sortable-list-module_sortableItem__FAnn2","readOnly":"cw-sortable-list-module_readOnly__r7GcH","dragging":"cw-sortable-list-module_dragging__MD715","moved":"cw-sortable-list-module_moved__sE6-N","expandedContent":"cw-sortable-list-module_expandedContent__Kocna","sortableHandle":"cw-sortable-list-module_sortableHandle__HvYBK","sortableContent":"cw-sortable-list-module_sortableContent__C6JhR","sortableTitle":"cw-sortable-list-module_sortableTitle__EgWXr","sortableExtraContent":"cw-sortable-list-module_sortableExtraContent__s4LSv","sortableActions":"cw-sortable-list-module_sortableActions__gwQOU","dropIndicator":"cw-sortable-list-module_dropIndicator__MNSF-","emptyMessage":"cw-sortable-list-module_emptyMessage__gMpaL"};
|
|
1829
|
+
|
|
1830
|
+
function CwSortableList({ items, onReorder, renderItem, className = '', movedItems = new Set(), emptyMessage = "No elements to show", readOnly = false, }) {
|
|
1831
|
+
const [draggedItem, setDraggedItem] = useState(null);
|
|
1832
|
+
const [dropIndicatorIndex, setDropIndicatorIndex] = useState(null);
|
|
1833
|
+
const [lastValidDropIndex, setLastValidDropIndex] = useState(null);
|
|
1834
|
+
const [expandedItems, setExpandedItems] = useState(new Set());
|
|
1835
|
+
const toggleExpanded = (itemId) => {
|
|
1836
|
+
setExpandedItems(prev => {
|
|
1837
|
+
const newSet = new Set(prev);
|
|
1838
|
+
if (newSet.has(itemId)) {
|
|
1839
|
+
newSet.delete(itemId);
|
|
1840
|
+
}
|
|
1841
|
+
else {
|
|
1842
|
+
newSet.add(itemId);
|
|
1843
|
+
}
|
|
1844
|
+
return newSet;
|
|
1845
|
+
});
|
|
1846
|
+
};
|
|
1847
|
+
const cleanupDragState = () => {
|
|
1848
|
+
setDraggedItem(null);
|
|
1849
|
+
setDropIndicatorIndex(null);
|
|
1850
|
+
setLastValidDropIndex(null);
|
|
1851
|
+
};
|
|
1852
|
+
const handleDragStart = (e, item) => {
|
|
1853
|
+
if (readOnly) {
|
|
1854
|
+
e.preventDefault();
|
|
1855
|
+
return;
|
|
1856
|
+
}
|
|
1857
|
+
setDraggedItem(item);
|
|
1858
|
+
setLastValidDropIndex(null);
|
|
1859
|
+
e.dataTransfer.effectAllowed = 'move';
|
|
1860
|
+
};
|
|
1861
|
+
const handleDragEnd = () => {
|
|
1862
|
+
if (draggedItem && lastValidDropIndex !== null) {
|
|
1863
|
+
const dragIndex = items.findIndex(item => item.id === draggedItem.id);
|
|
1864
|
+
if (dragIndex !== lastValidDropIndex && dragIndex !== lastValidDropIndex - 1) {
|
|
1865
|
+
const newItems = [...items];
|
|
1866
|
+
const [draggedElement] = newItems.splice(dragIndex, 1);
|
|
1867
|
+
let finalIndex = lastValidDropIndex;
|
|
1868
|
+
if (dragIndex < finalIndex)
|
|
1869
|
+
finalIndex -= 1;
|
|
1870
|
+
newItems.splice(finalIndex, 0, draggedElement);
|
|
1871
|
+
// Ahora pasamos el id del elemento movido al callback
|
|
1872
|
+
onReorder(newItems, draggedItem.id);
|
|
1873
|
+
}
|
|
1874
|
+
}
|
|
1875
|
+
cleanupDragState();
|
|
1876
|
+
};
|
|
1877
|
+
const handleDragOver = (e, index) => {
|
|
1878
|
+
e.preventDefault();
|
|
1879
|
+
if (!draggedItem || readOnly)
|
|
1880
|
+
return;
|
|
1881
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
1882
|
+
const mouseY = e.clientY;
|
|
1883
|
+
const elementCenterY = rect.top + (rect.height / 2);
|
|
1884
|
+
const dropIndex = mouseY < elementCenterY ? index : index + 1;
|
|
1885
|
+
setLastValidDropIndex(dropIndex);
|
|
1886
|
+
if (dropIndicatorIndex !== dropIndex) {
|
|
1887
|
+
setDropIndicatorIndex(dropIndex);
|
|
1888
|
+
}
|
|
1889
|
+
};
|
|
1890
|
+
if (items.length === 0) {
|
|
1891
|
+
return (jsx("div", { className: `${styles$c.sortableList} ${styles$c.emptyState} ${className}`, children: jsx("div", { className: styles$c.emptyMessage, children: emptyMessage }) }));
|
|
1892
|
+
}
|
|
1893
|
+
return (jsx("div", { className: `${styles$c.sortableList} ${className}`, children: items.map((item, index) => {
|
|
1894
|
+
const { title, extraContent, actions, showHandle = true, expandedContent } = renderItem(item);
|
|
1895
|
+
const isDragging = draggedItem?.id === item.id;
|
|
1896
|
+
const isMoved = movedItems.has(item.id);
|
|
1897
|
+
const canExpand = Boolean(expandedContent);
|
|
1898
|
+
const isExpanded = expandedItems.has(item.id);
|
|
1899
|
+
return (jsxs(React__default.Fragment, { children: [dropIndicatorIndex === index && jsx("div", { className: styles$c.dropIndicator }), jsxs("div", { className: `${styles$c.sortableItem} ${isDragging ? styles$c.dragging : ''} ${isMoved ? styles$c.moved : ''} ${readOnly ? styles$c.readOnly : ''}`, draggable: !readOnly, onDragStart: (e) => handleDragStart(e, item), onDragOver: (e) => handleDragOver(e, index), onDragEnd: handleDragEnd, children: [jsxs("header", { children: [canExpand ? (jsx(CwButton, { variant: "icon", onClick: () => toggleExpanded(item.id), type: "button", title: isExpanded ? "Collapse" : "Expand", icon: isExpanded ? "chevron-up" : "chevron-down" })) : showHandle ? (jsx("div", { className: styles$c.sortableHandle, children: jsx(CwIcon, { iconId: "grip-dots" }) })) : null, jsxs("div", { className: styles$c.sortableContent, children: [jsx("div", { className: styles$c.sortableTitle, children: title }), extraContent && jsx("div", { className: styles$c.sortableExtraContent, children: extraContent })] }), jsx("div", { className: styles$c.sortableActions, children: actions })] }), isExpanded && expandedContent && (jsx("div", { className: styles$c.expandedContent, children: expandedContent }))] }), !readOnly && dropIndicatorIndex === items.length && index === items.length - 1 && (jsx("div", { className: styles$c.dropIndicator }))] }, item.id));
|
|
1900
|
+
}) }));
|
|
1901
|
+
}
|
|
1902
|
+
|
|
1903
|
+
function useSortableList(initialItems) {
|
|
1904
|
+
const [items, setItems] = useState(initialItems);
|
|
1905
|
+
const [originalItems, setOriginalItems] = useState(initialItems);
|
|
1906
|
+
const [hasChanges, setHasChanges] = useState(false);
|
|
1907
|
+
const [movedItems, setMovedItems] = useState(new Set());
|
|
1908
|
+
const [resetKey, setResetKey] = useState(0);
|
|
1909
|
+
const handleReorder = useCallback((newItems, movedId) => {
|
|
1910
|
+
setItems(newItems);
|
|
1911
|
+
if (movedId !== undefined) {
|
|
1912
|
+
setMovedItems(prev => new Set(prev).add(movedId));
|
|
1913
|
+
}
|
|
1914
|
+
setHasChanges(true);
|
|
1915
|
+
}, []);
|
|
1916
|
+
const addItem = (newItem) => {
|
|
1917
|
+
setItems(prev => [...prev, newItem]);
|
|
1918
|
+
setHasChanges(true);
|
|
1919
|
+
};
|
|
1920
|
+
const removeItem = (id) => {
|
|
1921
|
+
setItems(prev => prev.filter(item => item.id !== id));
|
|
1922
|
+
setHasChanges(true);
|
|
1923
|
+
};
|
|
1924
|
+
const handleSave = async (onSave) => {
|
|
1925
|
+
await onSave(items);
|
|
1926
|
+
setOriginalItems(items);
|
|
1927
|
+
setMovedItems(new Set());
|
|
1928
|
+
setHasChanges(false);
|
|
1929
|
+
setResetKey(prev => prev + 1);
|
|
1930
|
+
};
|
|
1931
|
+
const updateItems = (newItems) => {
|
|
1932
|
+
setItems(newItems);
|
|
1933
|
+
setOriginalItems(newItems); // Keep original items in sync
|
|
1934
|
+
setHasChanges(true);
|
|
1935
|
+
};
|
|
1936
|
+
const handleDiscard = () => {
|
|
1937
|
+
setItems(originalItems);
|
|
1938
|
+
setMovedItems(new Set());
|
|
1939
|
+
setHasChanges(false);
|
|
1940
|
+
setResetKey(prev => prev + 1);
|
|
1941
|
+
};
|
|
1942
|
+
return {
|
|
1943
|
+
items,
|
|
1944
|
+
setItems: updateItems,
|
|
1945
|
+
handleReorder,
|
|
1946
|
+
handleSave,
|
|
1947
|
+
handleDiscard,
|
|
1948
|
+
addItem,
|
|
1949
|
+
movedItems,
|
|
1950
|
+
removeItem,
|
|
1951
|
+
hasChanges,
|
|
1952
|
+
resetKey,
|
|
1953
|
+
};
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1449
1956
|
/**
|
|
1450
1957
|
* A table with expandable row groups.
|
|
1451
1958
|
* @param props The data to display
|
|
@@ -1518,7 +2025,7 @@ const CwTableGrouped = props => {
|
|
|
1518
2025
|
function CwFileUpload(fileUploadProps) {
|
|
1519
2026
|
const [previewURL, setPreviewURL] = useState("");
|
|
1520
2027
|
const [error, setError] = useState(null);
|
|
1521
|
-
const [
|
|
2028
|
+
const [_selectedFileName, setSelectedFileName] = useState("");
|
|
1522
2029
|
const [_currentHexContent, setCurrentHexContent] = useState("");
|
|
1523
2030
|
useEffect(() => {
|
|
1524
2031
|
// If there is hexadecimal preview content, set the Preview URL
|
|
@@ -1530,36 +2037,185 @@ function CwFileUpload(fileUploadProps) {
|
|
|
1530
2037
|
const file = event.target.files?.[0];
|
|
1531
2038
|
setSelectedFileName(file?.name ?? "");
|
|
1532
2039
|
if (file) {
|
|
1533
|
-
|
|
2040
|
+
const allowedExts = fileUploadProps.accept.split(',').map(ext => ext.trim().replace('.', '').toLowerCase());
|
|
2041
|
+
const fileExt = file.name.split('.').pop()?.toLowerCase() ?? "";
|
|
2042
|
+
if (!allowedExts.includes(fileExt)) {
|
|
1534
2043
|
setError(`Invalid file type. Only ${fileUploadProps.acceptString} files are allowed.`);
|
|
1535
2044
|
setPreviewURL("");
|
|
2045
|
+
return;
|
|
1536
2046
|
}
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
reader.
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
2047
|
+
setError(null);
|
|
2048
|
+
const reader = new FileReader();
|
|
2049
|
+
reader.onloadend = () => {
|
|
2050
|
+
if (typeof reader.result === "string") {
|
|
2051
|
+
const hexContent = arrayBufferToHex(reader.result);
|
|
2052
|
+
setCurrentHexContent(hexContent);
|
|
2053
|
+
setPreviewURL(reader.result);
|
|
2054
|
+
setCurrentHexContent(arrayBufferToHex(reader.result));
|
|
2055
|
+
// Call function to store hexadecimal content
|
|
2056
|
+
fileUploadProps.onSaveHexContent(arrayBufferToHex(reader.result));
|
|
2057
|
+
}
|
|
2058
|
+
};
|
|
2059
|
+
reader.readAsDataURL(file);
|
|
2060
|
+
}
|
|
2061
|
+
};
|
|
2062
|
+
// Function to convert the image buffer into hexadecimal content
|
|
2063
|
+
const arrayBufferToHex = (dataUrl) => {
|
|
2064
|
+
// Decodes the base64 of the URL data
|
|
2065
|
+
const base64 = dataUrl.split(",")[1];
|
|
2066
|
+
const binary = atob(base64);
|
|
2067
|
+
let hex = "";
|
|
2068
|
+
for (let i = 0; i < binary.length; i++) {
|
|
2069
|
+
hex += binary.charCodeAt(i).toString(16).padStart(2, "0");
|
|
2070
|
+
}
|
|
2071
|
+
return hex;
|
|
2072
|
+
};
|
|
2073
|
+
return (jsxs("div", { children: [jsxs("div", { className: "row", children: [jsx("input", { className: "cw-button", type: "file", accept: fileUploadProps.accept, readOnly: true, placeholder: "No file selected...", onChange: handleFileChange }), previewURL && (jsx("div", { className: "row", children: jsx("img", { src: previewURL, alt: "Preview", style: { maxWidth: "200px", maxHeight: "200px" } }) }))] }), error && jsx("div", { className: "row error", children: error }), jsx("div", { className: "row", children: jsxs("label", { children: ["Please note: File/image has to be in ", fileUploadProps.acceptString, " format", fileUploadProps.sizeString && `, ${fileUploadProps.sizeString}`] }) })] }));
|
|
2074
|
+
}
|
|
2075
|
+
|
|
2076
|
+
var styles$b = {"fileUploadContainer":"cw-file-upload-multiple-module_fileUploadContainer__liEc1","hiddenInput":"cw-file-upload-multiple-module_hiddenInput__TZBBI","uploadArea":"cw-file-upload-multiple-module_uploadArea__DdOhs","uploadAreaDisabled":"cw-file-upload-multiple-module_uploadAreaDisabled__VWeFX","uploadTitle":"cw-file-upload-multiple-module_uploadTitle__gjRk8","uploadSubtitle":"cw-file-upload-multiple-module_uploadSubtitle__Z0S5t","filesContainer":"cw-file-upload-multiple-module_filesContainer__g44PY","fileItem":"cw-file-upload-multiple-module_fileItem__w27Dg","fileIcon":"cw-file-upload-multiple-module_fileIcon__iJJUX","fileExtension":"cw-file-upload-multiple-module_fileExtension__vOuHv","fileInfo":"cw-file-upload-multiple-module_fileInfo__R5ZTv","fileName":"cw-file-upload-multiple-module_fileName__DjepK","fileSize":"cw-file-upload-multiple-module_fileSize__b8GSm","smallButton":"cw-file-upload-multiple-module_smallButton__siUAh"};
|
|
2077
|
+
|
|
2078
|
+
function CwFileUploadMultiple(fileUploadProps) {
|
|
2079
|
+
const fileInputRef = useRef(null);
|
|
2080
|
+
const [selectedFiles, setSelectedFiles] = useState([]);
|
|
2081
|
+
const getFileExtension = (filename) => {
|
|
2082
|
+
return filename.split('.').pop()?.toUpperCase() || '';
|
|
2083
|
+
};
|
|
2084
|
+
const validateFile = (file) => {
|
|
2085
|
+
// Validate the size of the file
|
|
2086
|
+
if (fileUploadProps.maxFileSize) {
|
|
2087
|
+
const fileSizeInMB = file.size / (1024 * 1024);
|
|
2088
|
+
if (fileSizeInMB > fileUploadProps.maxFileSize) {
|
|
2089
|
+
return {
|
|
2090
|
+
isValid: false,
|
|
2091
|
+
error: `File "${file.name}" is too large. Maximum size allowed is ${fileUploadProps.maxFileSize}MB.`
|
|
1549
2092
|
};
|
|
1550
|
-
reader.readAsDataURL(file);
|
|
1551
2093
|
}
|
|
1552
2094
|
}
|
|
2095
|
+
// Validate file type by extension (based in accept)
|
|
2096
|
+
if (fileUploadProps.accept) {
|
|
2097
|
+
const acceptedExtensions = fileUploadProps.accept.split(',').map(ext => ext.trim().toLowerCase());
|
|
2098
|
+
const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();
|
|
2099
|
+
const isExtensionValid = acceptedExtensions.some(ext => {
|
|
2100
|
+
if (ext.startsWith('.')) {
|
|
2101
|
+
return ext === fileExtension;
|
|
2102
|
+
}
|
|
2103
|
+
return false;
|
|
2104
|
+
});
|
|
2105
|
+
if (!isExtensionValid) {
|
|
2106
|
+
return {
|
|
2107
|
+
isValid: false,
|
|
2108
|
+
error: `File "${file.name}" has an invalid format. Allowed formats: ${fileUploadProps.accept}`
|
|
2109
|
+
};
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2112
|
+
// Validate MIME type if specified
|
|
2113
|
+
if (fileUploadProps.allowedTypes && fileUploadProps.allowedTypes.length > 0) {
|
|
2114
|
+
const isMimeTypeValid = fileUploadProps.allowedTypes.includes(file.type);
|
|
2115
|
+
if (!isMimeTypeValid) {
|
|
2116
|
+
return {
|
|
2117
|
+
isValid: false,
|
|
2118
|
+
error: `File "${file.name}" has an invalid MIME type. Allowed types: ${fileUploadProps.allowedTypes.join(', ')}`
|
|
2119
|
+
};
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
return { isValid: true };
|
|
2123
|
+
};
|
|
2124
|
+
const processFiles = (files, existingFiles = []) => {
|
|
2125
|
+
const fileArray = Array.from(files);
|
|
2126
|
+
const validFiles = [...existingFiles]; // Start with existing files
|
|
2127
|
+
const errors = [];
|
|
2128
|
+
for (const file of fileArray) {
|
|
2129
|
+
// Check if the file already exists (by name and size)
|
|
2130
|
+
const isDuplicate = existingFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size);
|
|
2131
|
+
if (isDuplicate) {
|
|
2132
|
+
errors.push(`File "${file.name}" is already selected.`);
|
|
2133
|
+
continue;
|
|
2134
|
+
}
|
|
2135
|
+
const validation = validateFile(file);
|
|
2136
|
+
if (!validation.isValid) {
|
|
2137
|
+
errors.push(validation.error);
|
|
2138
|
+
continue;
|
|
2139
|
+
}
|
|
2140
|
+
validFiles.push(file);
|
|
2141
|
+
}
|
|
2142
|
+
// Show errors if any
|
|
2143
|
+
if (errors.length > 0) {
|
|
2144
|
+
if (fileUploadProps.onError) {
|
|
2145
|
+
fileUploadProps.onError(errors.join('\n'));
|
|
2146
|
+
}
|
|
2147
|
+
else {
|
|
2148
|
+
console.error(errors.join('\n'));
|
|
2149
|
+
alert(errors.join('\n')); // Fallback if there is no onError
|
|
2150
|
+
}
|
|
2151
|
+
}
|
|
2152
|
+
// If not multiple, only take the first valid file (replace)
|
|
2153
|
+
if (!fileUploadProps.multiple && validFiles.length > 1) {
|
|
2154
|
+
return [validFiles[validFiles.length - 1]]; // Take the last file added
|
|
2155
|
+
}
|
|
2156
|
+
return validFiles;
|
|
1553
2157
|
};
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
const
|
|
1557
|
-
|
|
1558
|
-
|
|
2158
|
+
const updateFileInput = (files) => {
|
|
2159
|
+
// Create FileList with all files
|
|
2160
|
+
const dataTransfer = new DataTransfer();
|
|
2161
|
+
files.forEach(file => dataTransfer.items.add(file));
|
|
2162
|
+
if (fileInputRef.current) {
|
|
2163
|
+
fileInputRef.current.files = dataTransfer.files;
|
|
1559
2164
|
}
|
|
1560
|
-
|
|
2165
|
+
if (fileUploadProps.onSelect) {
|
|
2166
|
+
fileUploadProps.onSelect(dataTransfer.files);
|
|
2167
|
+
}
|
|
2168
|
+
};
|
|
2169
|
+
const handleFileSelect = (event) => {
|
|
2170
|
+
const files = event.target.files;
|
|
2171
|
+
if (files && files.length > 0) {
|
|
2172
|
+
const updatedFiles = processFiles(files, selectedFiles);
|
|
2173
|
+
if (updatedFiles.length > selectedFiles.length || !fileUploadProps.multiple) {
|
|
2174
|
+
setSelectedFiles(updatedFiles);
|
|
2175
|
+
updateFileInput(updatedFiles);
|
|
2176
|
+
}
|
|
2177
|
+
else {
|
|
2178
|
+
// Clear input if no new valid files were added
|
|
2179
|
+
if (fileInputRef.current) {
|
|
2180
|
+
fileInputRef.current.value = '';
|
|
2181
|
+
}
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2184
|
+
};
|
|
2185
|
+
const removeFile = (indexToRemove) => {
|
|
2186
|
+
const newFiles = selectedFiles.filter((_, index) => index !== indexToRemove);
|
|
2187
|
+
setSelectedFiles(newFiles);
|
|
2188
|
+
updateFileInput(newFiles);
|
|
1561
2189
|
};
|
|
1562
|
-
|
|
2190
|
+
const removeAllFiles = () => {
|
|
2191
|
+
setSelectedFiles([]);
|
|
2192
|
+
if (fileInputRef.current) {
|
|
2193
|
+
fileInputRef.current.value = '';
|
|
2194
|
+
}
|
|
2195
|
+
if (fileUploadProps.onSelect) {
|
|
2196
|
+
fileUploadProps.onSelect(null);
|
|
2197
|
+
}
|
|
2198
|
+
};
|
|
2199
|
+
const handleButtonClick = () => {
|
|
2200
|
+
fileInputRef.current?.click();
|
|
2201
|
+
};
|
|
2202
|
+
const handleDragOver = (event) => {
|
|
2203
|
+
event.preventDefault();
|
|
2204
|
+
event.stopPropagation();
|
|
2205
|
+
};
|
|
2206
|
+
const handleDrop = (event) => {
|
|
2207
|
+
event.preventDefault();
|
|
2208
|
+
event.stopPropagation();
|
|
2209
|
+
const files = event.dataTransfer.files;
|
|
2210
|
+
if (files && files.length > 0) {
|
|
2211
|
+
const updatedFiles = processFiles(files, selectedFiles);
|
|
2212
|
+
if (updatedFiles.length > selectedFiles.length || !fileUploadProps.multiple) {
|
|
2213
|
+
setSelectedFiles(updatedFiles);
|
|
2214
|
+
updateFileInput(updatedFiles);
|
|
2215
|
+
}
|
|
2216
|
+
}
|
|
2217
|
+
};
|
|
2218
|
+
return (jsxs("div", { className: `${styles$b.fileUploadContainer} ${fileUploadProps.className}`, children: [jsx("input", { ref: fileInputRef, type: "file", name: fileUploadProps.name, accept: fileUploadProps.accept, multiple: fileUploadProps.multiple, onChange: handleFileSelect, disabled: fileUploadProps.disabled, "aria-label": "files", className: styles$b.hiddenInput }), selectedFiles.length === 0 ? (jsxs("div", { className: `${styles$b.uploadArea} ${fileUploadProps.disabled ? styles$b.uploadAreaDisabled : ''}`, onDragOver: handleDragOver, onDrop: handleDrop, onClick: !fileUploadProps.disabled ? handleButtonClick : undefined, children: [jsx(CwIcon, { iconId: "upload" }), jsx("p", { className: `${styles$b.uploadTitle}`, children: fileUploadProps.disabled ? 'Upload disabled' : 'Click to upload or drag and drop' }), jsxs("p", { className: `${styles$b.uploadSubtitle}`, children: [fileUploadProps.accept ? `Accepted files: ${fileUploadProps.accept}` : 'All file types accepted', !fileUploadProps.multiple && ' (Single file only)'] })] })) : (jsxs("div", { className: styles$b.filesContainer, children: [jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsxs("small", { className: styles$b.filesCount, children: [selectedFiles.length, " file", selectedFiles.length !== 1 ? 's' : '', " selected"] }), jsx(CwButton, { onClick: removeAllFiles, disabled: fileUploadProps.disabled, color: "danger", variant: "outline", icon: "delete", text: "Clear all" })] }), selectedFiles.map((file, index) => (jsxs("div", { className: styles$b.fileItem, children: [jsxs("div", { className: styles$b.fileIcon, children: [jsx(CwIcon, { iconId: "page" }), jsx("span", { className: styles$b.fileExtension, children: getFileExtension(file.name) })] }), jsxs("div", { className: styles$b.fileInfo, children: [jsx("p", { className: styles$b.fileName, children: file.name }), jsxs("p", { className: styles$b.fileSize, children: [(file.size / 1024).toFixed(1), " KB"] })] }), jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => removeFile(index), className: styles$b.smallButton })] }, index))), fileUploadProps.multiple && (jsx(CwButton, { text: "Add More Files", icon: "plus", variant: "outline", onClick: handleButtonClick, disabled: fileUploadProps.disabled })), !fileUploadProps.multiple && (jsx(CwButton, { text: "Change File", icon: "refresh", onClick: handleButtonClick, disabled: fileUploadProps.disabled }))] }))] }));
|
|
1563
2219
|
}
|
|
1564
2220
|
|
|
1565
2221
|
function CwInput(CwInputProps) {
|
|
@@ -1602,6 +2258,355 @@ function CwDigit(props) {
|
|
|
1602
2258
|
return (jsx("div", { className: "cw-input-text", children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: "number", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
1603
2259
|
}
|
|
1604
2260
|
|
|
2261
|
+
var styles$a = {"colorPreview":"cw-color-picker-module_colorPreview__ylJcD","hueBar":"cw-color-picker-module_hueBar__bFhyC","hueBarSlider":"cw-color-picker-module_hueBarSlider__D53IV","colorPickerInteractiveArea":"cw-color-picker-module_colorPickerInteractiveArea__KZFR1","colorArea":"cw-color-picker-module_colorArea__xgpSE","colorAreaOverlay":"cw-color-picker-module_colorAreaOverlay__pmgOc","hueBackground":"cw-color-picker-module_hueBackground__Mks78","whiteGradient":"cw-color-picker-module_whiteGradient__Bt-fU","blackGradient":"cw-color-picker-module_blackGradient__VnEKJ","colorAreaCursor":"cw-color-picker-module_colorAreaCursor__lotg3"};
|
|
2262
|
+
|
|
2263
|
+
const CwColorPicker = ({ initialColor, onChange, previewText = "Color preview" }) => {
|
|
2264
|
+
const [rgb, setRgb] = useState({ r: 255, g: 255, b: 255 });
|
|
2265
|
+
const [hsv, setHsv] = useState({ h: 0, s: 0, v: 100 });
|
|
2266
|
+
const [hexColor, setHexColor] = useState(initialColor || '#FFFFFF');
|
|
2267
|
+
const [initialized, setInitialized] = useState(false);
|
|
2268
|
+
const [inputMode, setInputMode] = useState('hex');
|
|
2269
|
+
// Prevent infinite update loops
|
|
2270
|
+
const isUpdatingRef = useRef(false);
|
|
2271
|
+
const hueBarRef = useRef(null);
|
|
2272
|
+
const colorAreaRef = useRef(null);
|
|
2273
|
+
// Convert HSV to RGB
|
|
2274
|
+
const hsvToRgb = (h, s, v) => {
|
|
2275
|
+
h = h / 360;
|
|
2276
|
+
s = s / 100;
|
|
2277
|
+
v = v / 100;
|
|
2278
|
+
let r = 0, g = 0, b = 0;
|
|
2279
|
+
if (s === 0) {
|
|
2280
|
+
r = g = b = v;
|
|
2281
|
+
}
|
|
2282
|
+
else {
|
|
2283
|
+
const i = Math.floor(h * 6);
|
|
2284
|
+
const f = h * 6 - i;
|
|
2285
|
+
const p = v * (1 - s);
|
|
2286
|
+
const q = v * (1 - f * s);
|
|
2287
|
+
const t = v * (1 - (1 - f) * s);
|
|
2288
|
+
switch (i % 6) {
|
|
2289
|
+
case 0:
|
|
2290
|
+
r = v;
|
|
2291
|
+
g = t;
|
|
2292
|
+
b = p;
|
|
2293
|
+
break;
|
|
2294
|
+
case 1:
|
|
2295
|
+
r = q;
|
|
2296
|
+
g = v;
|
|
2297
|
+
b = p;
|
|
2298
|
+
break;
|
|
2299
|
+
case 2:
|
|
2300
|
+
r = p;
|
|
2301
|
+
g = v;
|
|
2302
|
+
b = t;
|
|
2303
|
+
break;
|
|
2304
|
+
case 3:
|
|
2305
|
+
r = p;
|
|
2306
|
+
g = q;
|
|
2307
|
+
b = v;
|
|
2308
|
+
break;
|
|
2309
|
+
case 4:
|
|
2310
|
+
r = t;
|
|
2311
|
+
g = p;
|
|
2312
|
+
b = v;
|
|
2313
|
+
break;
|
|
2314
|
+
case 5:
|
|
2315
|
+
r = v;
|
|
2316
|
+
g = p;
|
|
2317
|
+
b = q;
|
|
2318
|
+
break;
|
|
2319
|
+
}
|
|
2320
|
+
}
|
|
2321
|
+
return {
|
|
2322
|
+
r: Math.round(r * 255),
|
|
2323
|
+
g: Math.round(g * 255),
|
|
2324
|
+
b: Math.round(b * 255)
|
|
2325
|
+
};
|
|
2326
|
+
};
|
|
2327
|
+
// Convert RGB to HSV
|
|
2328
|
+
const rgbToHsv = (r, g, b) => {
|
|
2329
|
+
r /= 255;
|
|
2330
|
+
g /= 255;
|
|
2331
|
+
b /= 255;
|
|
2332
|
+
const max = Math.max(r, g, b);
|
|
2333
|
+
const min = Math.min(r, g, b);
|
|
2334
|
+
let h = 0;
|
|
2335
|
+
const v = max;
|
|
2336
|
+
const d = max - min;
|
|
2337
|
+
const s = max === 0 ? 0 : d / max;
|
|
2338
|
+
if (max === min) {
|
|
2339
|
+
h = 0;
|
|
2340
|
+
}
|
|
2341
|
+
else {
|
|
2342
|
+
switch (max) {
|
|
2343
|
+
case r:
|
|
2344
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
2345
|
+
break;
|
|
2346
|
+
case g:
|
|
2347
|
+
h = (b - r) / d + 2;
|
|
2348
|
+
break;
|
|
2349
|
+
case b:
|
|
2350
|
+
h = (r - g) / d + 4;
|
|
2351
|
+
break;
|
|
2352
|
+
}
|
|
2353
|
+
h /= 6;
|
|
2354
|
+
}
|
|
2355
|
+
return {
|
|
2356
|
+
h: Math.round(h * 360),
|
|
2357
|
+
s: Math.round(s * 100),
|
|
2358
|
+
v: Math.round(v * 100)
|
|
2359
|
+
};
|
|
2360
|
+
};
|
|
2361
|
+
// Convert RGB to HEX
|
|
2362
|
+
const rgbToHex = (r, g, b) => {
|
|
2363
|
+
return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();
|
|
2364
|
+
};
|
|
2365
|
+
// Initialize color values from initial color prop
|
|
2366
|
+
useEffect(() => {
|
|
2367
|
+
if (!initialized && initialColor) {
|
|
2368
|
+
const hexToRgb = (hex) => {
|
|
2369
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
2370
|
+
return result ? {
|
|
2371
|
+
r: parseInt(result[1], 16),
|
|
2372
|
+
g: parseInt(result[2], 16),
|
|
2373
|
+
b: parseInt(result[3], 16)
|
|
2374
|
+
} : { r: 255, g: 255, b: 255 };
|
|
2375
|
+
};
|
|
2376
|
+
const initialRgb = hexToRgb(initialColor);
|
|
2377
|
+
setRgb(initialRgb);
|
|
2378
|
+
setHexColor(initialColor);
|
|
2379
|
+
const initialHsv = rgbToHsv(initialRgb.r, initialRgb.g, initialRgb.b);
|
|
2380
|
+
setHsv(initialHsv);
|
|
2381
|
+
setInitialized(true);
|
|
2382
|
+
}
|
|
2383
|
+
}, [initialColor, initialized]);
|
|
2384
|
+
// Update color state and notify parent component of changes
|
|
2385
|
+
const updateColorState = useCallback((newRgb, newHsv) => {
|
|
2386
|
+
if (isUpdatingRef.current)
|
|
2387
|
+
return;
|
|
2388
|
+
isUpdatingRef.current = true;
|
|
2389
|
+
// Update RGB and HSV
|
|
2390
|
+
setRgb(newRgb);
|
|
2391
|
+
setHsv(newHsv);
|
|
2392
|
+
// Calculate and update HEX
|
|
2393
|
+
const newHex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);
|
|
2394
|
+
setHexColor(newHex);
|
|
2395
|
+
// Notify changes after render cycle
|
|
2396
|
+
requestAnimationFrame(() => {
|
|
2397
|
+
onChange(newHex, newRgb, newHsv);
|
|
2398
|
+
isUpdatingRef.current = false;
|
|
2399
|
+
});
|
|
2400
|
+
}, [onChange]);
|
|
2401
|
+
const handleRgbChange = (e) => {
|
|
2402
|
+
const { name, value } = e.target;
|
|
2403
|
+
const numValue = Math.min(255, Math.max(0, parseInt(value, 10) || 0));
|
|
2404
|
+
const newRgb = { ...rgb, [name]: numValue };
|
|
2405
|
+
const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
|
|
2406
|
+
updateColorState(newRgb, newHsv);
|
|
2407
|
+
};
|
|
2408
|
+
const toggleInputMode = () => {
|
|
2409
|
+
setInputMode(inputMode === 'hex' ? 'rgb' : 'hex');
|
|
2410
|
+
};
|
|
2411
|
+
const handleHexChange = (e) => {
|
|
2412
|
+
const { value } = e.target;
|
|
2413
|
+
setHexColor(value);
|
|
2414
|
+
// Validate and convert HEX to RGB
|
|
2415
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(value);
|
|
2416
|
+
if (result) {
|
|
2417
|
+
const newRgb = {
|
|
2418
|
+
r: parseInt(result[1], 16),
|
|
2419
|
+
g: parseInt(result[2], 16),
|
|
2420
|
+
b: parseInt(result[3], 16)
|
|
2421
|
+
};
|
|
2422
|
+
const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
|
|
2423
|
+
// Update RGB and HSV without triggering full cycle
|
|
2424
|
+
setRgb(newRgb);
|
|
2425
|
+
setHsv(newHsv);
|
|
2426
|
+
// Notify changes
|
|
2427
|
+
requestAnimationFrame(() => {
|
|
2428
|
+
onChange(value, newRgb, newHsv);
|
|
2429
|
+
});
|
|
2430
|
+
}
|
|
2431
|
+
};
|
|
2432
|
+
// Handle hue bar click
|
|
2433
|
+
const handleHueBarClick = (e) => {
|
|
2434
|
+
if (!hueBarRef.current)
|
|
2435
|
+
return;
|
|
2436
|
+
const rect = hueBarRef.current.getBoundingClientRect();
|
|
2437
|
+
const height = rect.height;
|
|
2438
|
+
const y = e.clientY - rect.top;
|
|
2439
|
+
// Calculate hue value based on vertical position (0-360)
|
|
2440
|
+
const newHue = Math.round(360 * (1 - Math.min(1, Math.max(0, y / height))));
|
|
2441
|
+
const newHsv = { ...hsv, h: newHue };
|
|
2442
|
+
const newRgb = hsvToRgb(newHue, hsv.s, hsv.v);
|
|
2443
|
+
updateColorState(newRgb, newHsv);
|
|
2444
|
+
};
|
|
2445
|
+
// Handle color area click (saturation/value)
|
|
2446
|
+
const handleColorAreaClick = (e) => {
|
|
2447
|
+
if (!colorAreaRef.current)
|
|
2448
|
+
return;
|
|
2449
|
+
const rect = colorAreaRef.current.getBoundingClientRect();
|
|
2450
|
+
const width = rect.width;
|
|
2451
|
+
const height = rect.height;
|
|
2452
|
+
const x = e.clientX - rect.left;
|
|
2453
|
+
const y = e.clientY - rect.top;
|
|
2454
|
+
// Calculate saturation and value based on position
|
|
2455
|
+
const newSaturation = Math.round(100 * Math.min(1, Math.max(0, x / width)));
|
|
2456
|
+
const newValue = Math.round(100 * (1 - Math.min(1, Math.max(0, y / height))));
|
|
2457
|
+
const newHsv = { ...hsv, s: newSaturation, v: newValue };
|
|
2458
|
+
const newRgb = hsvToRgb(hsv.h, newSaturation, newValue);
|
|
2459
|
+
updateColorState(newRgb, newHsv);
|
|
2460
|
+
};
|
|
2461
|
+
// Calculate background color for the main area based on current hue
|
|
2462
|
+
const hueColor = hsvToRgb(hsv.h, 100, 100);
|
|
2463
|
+
const hueHex = rgbToHex(hueColor.r, hueColor.g, hueColor.b);
|
|
2464
|
+
return (jsxs("div", { className: "cw-flex-column cw-gap-small", children: [jsxs("div", { className: "cw-flex-row cw-align-between-center cw-gap-small", children: [jsx("div", { className: styles$a.colorPreview, style: { backgroundColor: hexColor, color: getContrastColor(hexColor) }, children: previewText }), jsx("button", { type: "button", className: "cw-button", onClick: toggleInputMode, style: { minWidth: "3ch" }, children: inputMode === 'hex' ? 'RGB' : 'HEX' })] }), jsx("div", { className: "color-inputs-row", children: inputMode === 'hex' ? (jsx("input", { type: "text", value: hexColor, onChange: handleHexChange })) : (jsxs("div", { className: "cw-grid-base-3 cw-gap-small", children: [jsxs("div", { children: [jsx("label", { children: "R:" }), jsx("input", { type: "number", name: "r", min: "0", max: "255", value: rgb.r, onChange: handleRgbChange })] }), jsxs("div", { children: [jsx("label", { children: "G:" }), jsx("input", { type: "number", name: "g", min: "0", max: "255", value: rgb.g, onChange: handleRgbChange })] }), jsxs("div", { children: [jsx("label", { children: "B:" }), jsx("input", { type: "number", name: "b", min: "0", max: "255", value: rgb.b, onChange: handleRgbChange })] })] })) }), jsxs("div", { className: styles$a.colorPickerInteractiveArea, children: [jsx("div", { className: styles$a.hueBar, ref: hueBarRef, onClick: handleHueBarClick, children: jsx("div", { className: styles$a.hueBarSlider, style: { top: `${(360 - hsv.h) / 360 * 100}%` } }) }), jsxs("div", { className: styles$a.colorArea, ref: colorAreaRef, onClick: handleColorAreaClick, children: [jsxs("div", { className: styles$a.colorAreaOverlay, children: [jsx("div", { className: styles$a.hueBackground, style: { backgroundColor: hueHex } }), jsx("div", { className: styles$a.whiteGradient }), jsx("div", { className: styles$a.blackGradient })] }), jsx("div", { className: styles$a.colorAreaCursor, style: {
|
|
2465
|
+
left: `${hsv.s}%`,
|
|
2466
|
+
top: `${100 - hsv.v}%`
|
|
2467
|
+
} })] })] })] }));
|
|
2468
|
+
};
|
|
2469
|
+
|
|
2470
|
+
var styles$9 = {"selectColor":"cw-input-color-module_selectColor__DTo3V","disabled":"cw-input-color-module_disabled__O1fK5","colorDropdown":"cw-input-color-module_colorDropdown__pX2bc"};
|
|
2471
|
+
|
|
2472
|
+
const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled = false, width = '4rem', height = '2rem' }) => {
|
|
2473
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
2474
|
+
const containerRef = useRef(null);
|
|
2475
|
+
const dropdownRef = useRef(null);
|
|
2476
|
+
const DROPDOWN_WIDTH = 280;
|
|
2477
|
+
const DROPDOWN_HEIGHT = 250;
|
|
2478
|
+
const MARGIN = 8;
|
|
2479
|
+
// Calculate dropdown position
|
|
2480
|
+
const dropdownStyle = useMemo(() => {
|
|
2481
|
+
if (!isOpen || !containerRef.current) {
|
|
2482
|
+
return { display: 'none' };
|
|
2483
|
+
}
|
|
2484
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
2485
|
+
const viewportWidth = window.innerWidth;
|
|
2486
|
+
const viewportHeight = window.innerHeight;
|
|
2487
|
+
// Calculate initial positions
|
|
2488
|
+
let top = rect.bottom + MARGIN;
|
|
2489
|
+
let left = rect.left;
|
|
2490
|
+
// Adjust horizontal position if needed
|
|
2491
|
+
if (left + DROPDOWN_WIDTH > viewportWidth - MARGIN) {
|
|
2492
|
+
// Try to align with right edge of trigger
|
|
2493
|
+
left = rect.right - DROPDOWN_WIDTH;
|
|
2494
|
+
// If still out of bounds, stick to right edge of viewport
|
|
2495
|
+
if (left < MARGIN) {
|
|
2496
|
+
left = viewportWidth - DROPDOWN_WIDTH - MARGIN;
|
|
2497
|
+
}
|
|
2498
|
+
}
|
|
2499
|
+
// Adjust vertical position if needed
|
|
2500
|
+
if (top + DROPDOWN_HEIGHT > viewportHeight - MARGIN) {
|
|
2501
|
+
// Try to show above the trigger
|
|
2502
|
+
const topPosition = rect.top - DROPDOWN_HEIGHT - MARGIN;
|
|
2503
|
+
// Only use top position if there's enough space
|
|
2504
|
+
if (topPosition > MARGIN) {
|
|
2505
|
+
top = topPosition;
|
|
2506
|
+
}
|
|
2507
|
+
else {
|
|
2508
|
+
// Keep at bottom but ensure some visibility
|
|
2509
|
+
top = Math.min(top, viewportHeight - DROPDOWN_HEIGHT - MARGIN);
|
|
2510
|
+
}
|
|
2511
|
+
}
|
|
2512
|
+
return {
|
|
2513
|
+
position: 'fixed',
|
|
2514
|
+
top: `${Math.max(MARGIN, top)}px`,
|
|
2515
|
+
left: `${Math.max(MARGIN, left)}px`,
|
|
2516
|
+
zIndex: 1000,
|
|
2517
|
+
width: `${DROPDOWN_WIDTH}px`
|
|
2518
|
+
};
|
|
2519
|
+
}, [isOpen]);
|
|
2520
|
+
const handleToggle = () => {
|
|
2521
|
+
if (disabled)
|
|
2522
|
+
return;
|
|
2523
|
+
setIsOpen(prev => !prev);
|
|
2524
|
+
};
|
|
2525
|
+
// Recalculate position on scroll/resize
|
|
2526
|
+
useEffect(() => {
|
|
2527
|
+
if (!isOpen)
|
|
2528
|
+
return;
|
|
2529
|
+
const handlePositionUpdate = () => {
|
|
2530
|
+
// Force re-render to recalculate position
|
|
2531
|
+
setIsOpen(false);
|
|
2532
|
+
requestAnimationFrame(() => setIsOpen(true));
|
|
2533
|
+
};
|
|
2534
|
+
// Debounced handlers
|
|
2535
|
+
let resizeTimeout;
|
|
2536
|
+
let scrollTimeout;
|
|
2537
|
+
const handleResize = () => {
|
|
2538
|
+
clearTimeout(resizeTimeout);
|
|
2539
|
+
resizeTimeout = setTimeout(handlePositionUpdate, 100);
|
|
2540
|
+
};
|
|
2541
|
+
const handleScroll = () => {
|
|
2542
|
+
clearTimeout(scrollTimeout);
|
|
2543
|
+
scrollTimeout = setTimeout(handlePositionUpdate, 50);
|
|
2544
|
+
};
|
|
2545
|
+
window.addEventListener('resize', handleResize);
|
|
2546
|
+
window.addEventListener('scroll', handleScroll, true);
|
|
2547
|
+
return () => {
|
|
2548
|
+
window.removeEventListener('resize', handleResize);
|
|
2549
|
+
window.removeEventListener('scroll', handleScroll, true);
|
|
2550
|
+
clearTimeout(resizeTimeout);
|
|
2551
|
+
clearTimeout(scrollTimeout);
|
|
2552
|
+
};
|
|
2553
|
+
}, [isOpen]);
|
|
2554
|
+
// Handle outside clicks and escape
|
|
2555
|
+
useEffect(() => {
|
|
2556
|
+
if (!isOpen)
|
|
2557
|
+
return;
|
|
2558
|
+
const handleClickOutside = (event) => {
|
|
2559
|
+
const target = event.target;
|
|
2560
|
+
// Check if click is outside both container and dropdown
|
|
2561
|
+
if (containerRef.current &&
|
|
2562
|
+
!containerRef.current.contains(target) &&
|
|
2563
|
+
dropdownRef.current &&
|
|
2564
|
+
!dropdownRef.current.contains(target)) {
|
|
2565
|
+
setIsOpen(false);
|
|
2566
|
+
}
|
|
2567
|
+
};
|
|
2568
|
+
const handleEscape = (event) => {
|
|
2569
|
+
if (event.key === 'Escape') {
|
|
2570
|
+
setIsOpen(false);
|
|
2571
|
+
// Return focus to trigger
|
|
2572
|
+
containerRef.current?.focus();
|
|
2573
|
+
}
|
|
2574
|
+
};
|
|
2575
|
+
// Use capture phase for better event handling
|
|
2576
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
2577
|
+
document.addEventListener('keydown', handleEscape);
|
|
2578
|
+
return () => {
|
|
2579
|
+
document.removeEventListener('click', handleClickOutside, true);
|
|
2580
|
+
document.removeEventListener('keydown', handleEscape);
|
|
2581
|
+
};
|
|
2582
|
+
}, [isOpen]);
|
|
2583
|
+
const handleColorChange = (color) => {
|
|
2584
|
+
onChange(color);
|
|
2585
|
+
};
|
|
2586
|
+
const handleKeyDown = (e) => {
|
|
2587
|
+
if (disabled)
|
|
2588
|
+
return;
|
|
2589
|
+
switch (e.key) {
|
|
2590
|
+
case 'Enter':
|
|
2591
|
+
case ' ':
|
|
2592
|
+
e.preventDefault();
|
|
2593
|
+
handleToggle();
|
|
2594
|
+
break;
|
|
2595
|
+
case 'Escape':
|
|
2596
|
+
if (isOpen) {
|
|
2597
|
+
e.preventDefault();
|
|
2598
|
+
setIsOpen(false);
|
|
2599
|
+
}
|
|
2600
|
+
break;
|
|
2601
|
+
}
|
|
2602
|
+
};
|
|
2603
|
+
return (jsxs(Fragment, { children: [jsx("div", { ref: containerRef, onClick: handleToggle, className: `${styles$9.selectColor} ${disabled ? styles$9.disabled : ''}`, style: {
|
|
2604
|
+
width,
|
|
2605
|
+
height,
|
|
2606
|
+
backgroundColor: value,
|
|
2607
|
+
}, "aria-label": "Open color picker", "aria-expanded": isOpen, "aria-haspopup": "dialog", role: "button", tabIndex: disabled ? -1 : 0, onKeyDown: handleKeyDown }), isOpen && createPortal(jsx("div", { ref: dropdownRef, className: styles$9.colorDropdown, style: dropdownStyle, role: "dialog", "aria-modal": "true", "aria-label": "Color picker", children: jsx(CwColorPicker, { initialColor: value, onChange: handleColorChange, previewText: previewText }) }), document.body)] }));
|
|
2608
|
+
};
|
|
2609
|
+
|
|
1605
2610
|
/**
|
|
1606
2611
|
* Input for entering a string of text.
|
|
1607
2612
|
* @remarks
|
|
@@ -1622,8 +2627,11 @@ function CwDigit(props) {
|
|
|
1622
2627
|
* ```
|
|
1623
2628
|
*/
|
|
1624
2629
|
function CwInputText(props) {
|
|
1625
|
-
const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
|
|
1626
|
-
|
|
2630
|
+
const { alignProps, buttonProps, iconProps, labelProps, className, ...inputProps } = props;
|
|
2631
|
+
const containerClassName = className
|
|
2632
|
+
? `cw-input-text ${className}`
|
|
2633
|
+
: "cw-input-text";
|
|
2634
|
+
return (jsx("div", { className: containerClassName, children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: props.type ?? "text", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
1627
2635
|
}
|
|
1628
2636
|
|
|
1629
2637
|
/**
|
|
@@ -1651,7 +2659,7 @@ function CwInputNumber(CwInputNumberProps) {
|
|
|
1651
2659
|
CwInputNumberProps.onChange(e.target.value);
|
|
1652
2660
|
};
|
|
1653
2661
|
return (jsxs("div", { className: CwInputNumberProps.labelPosition == "column"
|
|
1654
|
-
? "cw-flex-column"
|
|
2662
|
+
? "cw-flex-column cw-gap-none"
|
|
1655
2663
|
: "cw-flex-row", children: [jsx("label", { className: CwInputNumberProps.disabled === true
|
|
1656
2664
|
? CwInputNumberProps.labelClassName + " " + "cw_label_text cw_label_text_disabled"
|
|
1657
2665
|
: CwInputNumberProps.labelClassName + " " + "cw_label_text", children: CwInputNumberProps.labelName }), jsx("input", { id: CwInputNumberProps.id, type: "number", value: CwInputNumberProps.value, onChange: e => handleChange(e), className: CwInputNumberProps.className + " " + " cw-input-number", placeholder: CwInputNumberProps.placeholder == undefined ? "Write a number please" : CwInputNumberProps.placeholder, style: CwInputNumberProps.style, disabled: CwInputNumberProps.disabled, required: CwInputNumberProps.required, step: CwInputNumberProps.step, min: CwInputNumberProps.min, max: CwInputNumberProps.max })] }));
|
|
@@ -2089,7 +3097,7 @@ const CwImageArea = forwardRef((props, ref) => {
|
|
|
2089
3097
|
});
|
|
2090
3098
|
CwImageArea.displayName = "CwImageArea";
|
|
2091
3099
|
|
|
2092
|
-
var styles$
|
|
3100
|
+
var styles$8 = {"cw-weekday-selector":"cw-weekday-selector-module_cw-weekday-selector__Iz4GZ"};
|
|
2093
3101
|
|
|
2094
3102
|
/**
|
|
2095
3103
|
* This class represents a week where days can be selected or unselected
|
|
@@ -2229,34 +3237,30 @@ const CwWeekdaySelector = ({ value = "", onChange, disabled = false }) => {
|
|
|
2229
3237
|
setSelectedDays(newWeekdays);
|
|
2230
3238
|
onChange?.(newWeekdays.toString());
|
|
2231
3239
|
};
|
|
2232
|
-
return (jsx("div", { className: styles$
|
|
3240
|
+
return (jsx("div", { className: styles$8["cw-weekday-selector"], children: Weekdays.getFullWeek().map(day => (jsx("input", { type: "checkbox", "data-day": day, checked: selectedDays.toArray().includes(day), onChange: (e) => handleChange(day, e.target.checked), disabled: disabled }, day))) }));
|
|
2233
3241
|
};
|
|
2234
3242
|
|
|
2235
3243
|
function CwCheckbox(CwCheckboxProps) {
|
|
2236
3244
|
const handleChange = (e) => {
|
|
2237
|
-
CwCheckboxProps.onChange(e.target.checked);
|
|
3245
|
+
CwCheckboxProps.onChange?.(e.target.checked);
|
|
2238
3246
|
};
|
|
3247
|
+
const inputElement = (jsx("input", { id: CwCheckboxProps.id, type: "checkbox", checked: CwCheckboxProps.checked, onChange: e => handleChange(e), className: CwCheckboxProps.className ?? '', style: CwCheckboxProps.style, disabled: CwCheckboxProps.disabled }));
|
|
3248
|
+
if (!CwCheckboxProps.labelName) {
|
|
3249
|
+
return inputElement;
|
|
3250
|
+
}
|
|
2239
3251
|
return (jsxs("div", { className: CwCheckboxProps.labelPosition === "inline"
|
|
2240
3252
|
? "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer
|
|
2241
3253
|
: CwCheckboxProps.labelPosition === "column"
|
|
2242
3254
|
? "cw_checkboxContent cwellt_flex_column" + " " + CwCheckboxProps.classNameContainer
|
|
2243
|
-
: "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [
|
|
3255
|
+
: "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [inputElement, CwCheckboxProps.labelName ? (jsx("label", { htmlFor: CwCheckboxProps.id, className: CwCheckboxProps.labelClassName, children: CwCheckboxProps.labelName })) : null] }));
|
|
2244
3256
|
}
|
|
2245
3257
|
|
|
2246
|
-
/**
|
|
2247
|
-
* Toggle-styled checkbox
|
|
2248
|
-
* @remarks
|
|
2249
|
-
* ```txt
|
|
2250
|
-
* ▁▁▁▁
|
|
2251
|
-
* ( ⦿)
|
|
2252
|
-
* ▔▔▔▔
|
|
2253
|
-
* ```
|
|
2254
|
-
* @example
|
|
2255
|
-
* <CwToggle checked/>
|
|
2256
|
-
*/
|
|
2257
3258
|
function CwToggle(props) {
|
|
2258
|
-
const { labelProps,
|
|
2259
|
-
|
|
3259
|
+
const { labelProps, labelText, iconProps, alignment = "row", className, ...inputProps } = props;
|
|
3260
|
+
const displayText = labelText || labelProps?.text;
|
|
3261
|
+
return (jsx("div", { className: `cw-toggle${className ? ` ${className}` : ''}`, children: jsxs("label", { className: "cw-toggle-label", "data-direction": alignment, children: [displayText && (jsxs("span", { className: "cw-icon-text", children: [iconProps && jsx(CwIcon, { ...iconProps }), displayText] })), jsx("input", {
|
|
3262
|
+
//data-color={color}
|
|
3263
|
+
type: "checkbox", ...inputProps })] }) }));
|
|
2260
3264
|
}
|
|
2261
3265
|
|
|
2262
3266
|
/**
|
|
@@ -2357,179 +3361,20 @@ function CwDropdownContainer(dropDownContainerProps) {
|
|
|
2357
3361
|
};
|
|
2358
3362
|
}, []);
|
|
2359
3363
|
// #endregion
|
|
2360
|
-
return (jsx("div", { className: dropDownContainerProps.dropDownState
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
//
|
|
2369
|
-
const
|
|
2370
|
-
|
|
2371
|
-
? CwelltDropDownFilterProps.DropDownFilterState
|
|
2372
|
-
: false;
|
|
2373
|
-
// * Click on content item
|
|
2374
|
-
const hideDropDown = () => {
|
|
2375
|
-
};
|
|
2376
|
-
return (jsxs("div", { id: CwelltDropDownFilterProps.IdContent, className: CwelltDropDownFilterProps.ContentClassName + " " + "cwelltDropDownFilterContent", onClick: hideDropDown, style: CwelltDropDownFilterProps.StyleContent, children: [CwelltDropDownFilterProps.children, jsx("div", { className: isVisibleDropDownFilter
|
|
2377
|
-
? // * custom className
|
|
2378
|
-
CwelltDropDownFilterProps.DropDownClassName + " " + "cwelltDropDownFilter"
|
|
2379
|
-
: // * custom className
|
|
2380
|
-
CwelltDropDownFilterProps.DropDownClassName + " " + "cwellt_display_none", style: CwelltDropDownFilterProps.StyleDropDownFilter, onMouseLeave: CwelltDropDownFilterProps.onMouseLeave, id: CwelltDropDownFilterProps.idDropDownFilter, children: jsx("div", { className: "cwelltDrop_filterItem", children: CwelltDropDownFilterProps?.DataSourceDropDownItem?.map(indexItem => {
|
|
2381
|
-
return (jsx("span", { id: indexItem.IdDropDown_filter, className: "cwelltDropDownItem", children: indexItem.dropDownFilter_desc }));
|
|
2382
|
-
}) }) })] }));
|
|
2383
|
-
}
|
|
2384
|
-
|
|
2385
|
-
function CwDropdownNavigation(CwelltDropDownNavigationProps) {
|
|
2386
|
-
const [isButtonExpanded, setButtonExpanded] = useState(false);
|
|
2387
|
-
const [isShowDropDownFilter, setShowDropDownFilter] = useState(false);
|
|
2388
|
-
const buttonDropDownFilter = () => {
|
|
2389
|
-
setButtonExpanded(!isButtonExpanded);
|
|
2390
|
-
setShowDropDownFilter(!isShowDropDownFilter);
|
|
2391
|
-
};
|
|
2392
|
-
const clickItemHideDropDownFilter = () => {
|
|
2393
|
-
setShowDropDownFilter(false);
|
|
2394
|
-
};
|
|
2395
|
-
const clickSubItemHideDropDownsFilter = () => {
|
|
2396
|
-
// * Main dropDown
|
|
2397
|
-
setShowDropDownFilter(false);
|
|
2398
|
-
// * Item with subMenu
|
|
2399
|
-
setFilterItem_descExpanded(false);
|
|
2400
|
-
// * Submenu dropDown
|
|
2401
|
-
setShowSubMenu(false);
|
|
2402
|
-
};
|
|
2403
|
-
const [isShowSubMenu, setShowSubMenu] = useState(false);
|
|
2404
|
-
const [isFilterItem_descExpanded, setFilterItem_descExpanded] = useState(false);
|
|
2405
|
-
const cwelltSubMenu = () => {
|
|
2406
|
-
setShowSubMenu(!isShowSubMenu);
|
|
2407
|
-
setFilterItem_descExpanded(!isFilterItem_descExpanded);
|
|
2408
|
-
};
|
|
2409
|
-
const hideDropDownContent = () => {
|
|
2410
|
-
// * DropDownFilterCrewControl
|
|
2411
|
-
const dropDownFilterCrewControl = document.getElementById("DropDownFilterCrewControl");
|
|
2412
|
-
// * onMouseLeave [ dropDownFilterCrewControl ]
|
|
2413
|
-
dropDownFilterCrewControl?.addEventListener("mouseleave", () => {
|
|
2414
|
-
// * button className
|
|
2415
|
-
setButtonExpanded(false);
|
|
2416
|
-
// * DropDownFilterCrewControl
|
|
2417
|
-
setShowDropDownFilter(false); // todo: Add animation to high content
|
|
2418
|
-
// * Item with subMenu
|
|
2419
|
-
setFilterItem_descExpanded(false);
|
|
2420
|
-
// * SubMenu
|
|
2421
|
-
setShowSubMenu(false);
|
|
2422
|
-
});
|
|
2423
|
-
};
|
|
2424
|
-
// List subMenu
|
|
2425
|
-
const dataSubMenu = [
|
|
2426
|
-
{
|
|
2427
|
-
IdDropDown_filter: 1,
|
|
2428
|
-
dropDownFilter_desc: (jsx("span", { className: CwelltDropDownNavigationProps.onShowAsignedActive + " " + "cwelltFilterItem_desc", onClick: () => {
|
|
2429
|
-
CwelltDropDownNavigationProps.onShowAsigned();
|
|
2430
|
-
clickSubItemHideDropDownsFilter();
|
|
2431
|
-
}, children: "Show asigned" }))
|
|
2432
|
-
},
|
|
2433
|
-
{
|
|
2434
|
-
IdDropDown_filter: 2,
|
|
2435
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2436
|
-
CwelltDropDownNavigationProps.onShowHotel();
|
|
2437
|
-
clickSubItemHideDropDownsFilter();
|
|
2438
|
-
}, children: "Show hotel" }))
|
|
2439
|
-
},
|
|
2440
|
-
{
|
|
2441
|
-
IdDropDown_filter: 3,
|
|
2442
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2443
|
-
CwelltDropDownNavigationProps.onShowWishes();
|
|
2444
|
-
clickSubItemHideDropDownsFilter();
|
|
2445
|
-
}, children: "Show wishes" }))
|
|
2446
|
-
},
|
|
2447
|
-
{
|
|
2448
|
-
IdDropDown_filter: 4,
|
|
2449
|
-
dropDownFilter_desc: jsx("span", { className: "cwelltLineDivider" })
|
|
2450
|
-
},
|
|
2451
|
-
{
|
|
2452
|
-
IdDropDown_filter: 5,
|
|
2453
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2454
|
-
CwelltDropDownNavigationProps.onShowTrainingAlerts();
|
|
2455
|
-
clickSubItemHideDropDownsFilter();
|
|
2456
|
-
}, children: "Show training alerts" }))
|
|
2457
|
-
},
|
|
2458
|
-
{
|
|
2459
|
-
IdDropDown_filter: 6,
|
|
2460
|
-
dropDownFilter_desc: jsx("span", { className: "cwelltLineDivider" })
|
|
2461
|
-
},
|
|
2462
|
-
{
|
|
2463
|
-
IdDropDown_filter: 7,
|
|
2464
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2465
|
-
CwelltDropDownNavigationProps.onSmartFilteringFlight();
|
|
2466
|
-
clickSubItemHideDropDownsFilter();
|
|
2467
|
-
}, children: "Smart filtering flight" }))
|
|
2468
|
-
},
|
|
2469
|
-
{
|
|
2470
|
-
IdDropDown_filter: 7,
|
|
2471
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2472
|
-
CwelltDropDownNavigationProps.onSmartFilteringEmployee();
|
|
2473
|
-
clickSubItemHideDropDownsFilter();
|
|
2474
|
-
}, children: "Smart filtering employee" }))
|
|
2475
|
-
},
|
|
2476
|
-
{
|
|
2477
|
-
IdDropDown_filter: 8,
|
|
2478
|
-
dropDownFilter_desc: jsx("span", { className: "cwelltLineDivider" })
|
|
2479
|
-
},
|
|
2480
|
-
{
|
|
2481
|
-
IdDropDown_filter: 9,
|
|
2482
|
-
dropDownFilter_desc: (jsxs("div", { className: "cwelltDropDownContentForm cwellt_content_r_spaceBetween_center", children: [jsx("span", { children: "Flight rows" }), jsx(InputNumber, { className: "cwellt_inputdf cwellt_inputdf_number", min: 1, max: 10, style: { width: "4em", marginRight: ".5em" } })] }))
|
|
2483
|
-
},
|
|
2484
|
-
{
|
|
2485
|
-
IdDropDown_filter: 10,
|
|
2486
|
-
dropDownFilter_desc: (jsxs("div", { className: "cwelltDropDownContentForm cwellt_content_r_spaceBetween_center", children: [jsx("span", { children: "Employee rows" }), jsx(InputNumber, { className: "cwellt_inputdf cwellt_inputdf_number", min: 1, max: 10, style: { width: "4em", marginRight: ".5em" } })] }))
|
|
2487
|
-
}
|
|
2488
|
-
];
|
|
2489
|
-
// * DataSource items
|
|
2490
|
-
const dataSourceItemDropDown = [
|
|
2491
|
-
{
|
|
2492
|
-
IdDropDown_filter: 1,
|
|
2493
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2494
|
-
CwelltDropDownNavigationProps.onShowChanges;
|
|
2495
|
-
// clickItemHideDropDownFilter();
|
|
2496
|
-
}, children: "Show changes" }))
|
|
2497
|
-
},
|
|
2498
|
-
{
|
|
2499
|
-
IdDropDown_filter: 2,
|
|
2500
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2501
|
-
CwelltDropDownNavigationProps.onShowVisibleChanges;
|
|
2502
|
-
clickItemHideDropDownFilter();
|
|
2503
|
-
}, children: "Save visible changes" }))
|
|
2504
|
-
},
|
|
2505
|
-
{
|
|
2506
|
-
IdDropDown_filter: 3,
|
|
2507
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2508
|
-
CwelltDropDownNavigationProps.onShowSkip;
|
|
2509
|
-
clickItemHideDropDownFilter();
|
|
2510
|
-
}, children: "Skip" }))
|
|
2511
|
-
},
|
|
2512
|
-
{
|
|
2513
|
-
IdDropDown_filter: 4,
|
|
2514
|
-
dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2515
|
-
CwelltDropDownNavigationProps.onShowBulkDuties;
|
|
2516
|
-
clickItemHideDropDownFilter();
|
|
2517
|
-
}, children: "BulkDuties" }))
|
|
2518
|
-
},
|
|
2519
|
-
// View options
|
|
2520
|
-
{
|
|
2521
|
-
IdDropDown_filter: 6,
|
|
2522
|
-
dropDownFilter_desc: (jsxs("div", { style: { width: "100%" }, children: [jsx("span", { className: isFilterItem_descExpanded
|
|
2523
|
-
? "cwelltFilterItem_desc FilterItem_descExpanded cwellt_justify_space_between"
|
|
2524
|
-
: "cwelltFilterItem_desc FilterItem_descCollapsed cwellt_justify_space_between", onClick: cwelltSubMenu, children: "Show options" }), jsx(CwDropdownFilter, { DropDownFilterState: isShowSubMenu, DataSourceDropDownItem: dataSubMenu, StyleContent: { position: "absolute", right: "13em", top: "-9.5em" }, StyleDropDownFilter: { width: "16.9375em" } })] }))
|
|
2525
|
-
}
|
|
2526
|
-
];
|
|
2527
|
-
return (jsx(CwDropdownFilter, { IdContent: "DropDownFilterCrewControl", DropDownFilterState: isShowDropDownFilter, DataSourceDropDownItem: dataSourceItemDropDown, ContentClassName: "TestClassNameContent", DropDownClassName: "TestClassNameDropDown", StyleContent: { zIndex: 1000 }, StyleDropDownFilter: { width: "13.75em", position: "absolute", left: "-10em" }, children: jsx("button", { className: isButtonExpanded
|
|
2528
|
-
? "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenuExpanded"
|
|
2529
|
-
: "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenu", onClick: buttonDropDownFilter, onMouseLeave: hideDropDownContent }) }));
|
|
3364
|
+
return (jsx("div", { className: `cw-dropdown-container ${dropDownContainerProps.className || ''}`, onKeyDown: onKeyPressDropDownContainer, onMouseLeave: onMouseLeaveDropDownContainer, tabIndex: 0, hidden: !dropDownContainerProps.dropDownState, children: jsx("div", { className: "cw-dropdown-list", id: dropDownContainerProps.idDropDownContainer, ref: dropDownContainer_ref, children: jsx("div", { ref: dropDown_listContainer, children: dropDownContainerProps.children }) }) }));
|
|
3365
|
+
}
|
|
3366
|
+
|
|
3367
|
+
function CwDropdownFilter(props) {
|
|
3368
|
+
// Determine visibility state
|
|
3369
|
+
const isVisible = props.DropDownFilterState ?? false;
|
|
3370
|
+
// Generate CSS classes
|
|
3371
|
+
const containerClassName = `cw-dropdown-filter ${props.isNested ? 'dropdown-nested' : ''}`.trim();
|
|
3372
|
+
// Only apply inline styles for width override if provided
|
|
3373
|
+
const inlineStyles = props.width ? { width: props.width } : undefined;
|
|
3374
|
+
return (jsxs("div", { id: props.IdContent, className: containerClassName, children: [props.children, isVisible && (jsx("nav", { className: "cw-dropdown-menu", style: inlineStyles, onMouseLeave: props.onMouseLeave, id: props.idDropDownFilter, role: "menu", children: jsx("ul", { role: "none", children: props.DataSourceDropDownItem?.map((item) => (jsx("li", { id: item.IdDropDown_filter, role: "menuitem", children: item.dropDownFilter_desc }, item.IdDropDown_filter))) }) }))] }));
|
|
2530
3375
|
}
|
|
2531
3376
|
|
|
2532
|
-
const { Option
|
|
3377
|
+
const { Option, OptGroup } = Select;
|
|
2533
3378
|
class MultiSelect extends React.Component {
|
|
2534
3379
|
constructor(Props) {
|
|
2535
3380
|
super(Props);
|
|
@@ -2622,7 +3467,7 @@ class MultiSelect extends React.Component {
|
|
|
2622
3467
|
? "cwelltMultiSelect cwelltSelect cwelltSelectSimple cwelltMultiSelect_searchIcon"
|
|
2623
3468
|
: "cwelltMultiSelect cwelltSelect cwelltSelectSimple", placeholder: "Search or filter...", dropdownClassName: this.state.isVisibleDropDown
|
|
2624
3469
|
? " cwelltSelectDropDown cwelltSelectDropDown_active"
|
|
2625
|
-
: "cwelltSelectDropDown", value: this.props.selectedItems?.map(s => s.type + "_" + s.id), onClick: () => this.onClickSelect(), open: this.state.isVisibleDropDown, onDropdownVisibleChange: () => this.handleOnDropDownVisibleChange(), onKeyUp: e_KeyUp_select => this.onKeyUpSelect(e_KeyUp_select), children: this.props.selectLists.map((slArray, i) => (jsx(OptGroup, { label: slArray.length > 0 ? slArray[0]?.type : "", children: slArray.map(sl => (jsx(Option
|
|
3470
|
+
: "cwelltSelectDropDown", value: this.props.selectedItems?.map(s => s.type + "_" + s.id), onClick: () => this.onClickSelect(), open: this.state.isVisibleDropDown, onDropdownVisibleChange: () => this.handleOnDropDownVisibleChange(), onKeyUp: e_KeyUp_select => this.onKeyUpSelect(e_KeyUp_select), children: this.props.selectLists.map((slArray, i) => (jsx(OptGroup, { label: slArray.length > 0 ? slArray[0]?.type : "", children: slArray.map(sl => (jsx(Option, { value: sl.type + "_" + sl.id, type: sl.type, description: sl.description, val: sl.id, children: jsx(Tag, { color: sl.color, children: sl.description }) }, sl.type + "_" + sl.id))) }, "_" + i))) }) }) }));
|
|
2626
3471
|
}
|
|
2627
3472
|
}
|
|
2628
3473
|
|
|
@@ -2644,7 +3489,7 @@ function itemsToMultiFilterTags(items, nameKey, valueKey, category, primaryColor
|
|
|
2644
3489
|
function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
|
|
2645
3490
|
// - Reference div content input search
|
|
2646
3491
|
const headContent_ref = React.createRef();
|
|
2647
|
-
const optionList = document.getElementsByClassName("
|
|
3492
|
+
const optionList = document.getElementsByClassName("cw-multiselect-option-list");
|
|
2648
3493
|
const refContent = useRef(null);
|
|
2649
3494
|
// - Hooks show clear button
|
|
2650
3495
|
const [_isShowClearButton, setShowClearButton] = useState(false);
|
|
@@ -2691,6 +3536,11 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
|
|
|
2691
3536
|
}
|
|
2692
3537
|
}
|
|
2693
3538
|
};
|
|
3539
|
+
const handleBlur = (event) => {
|
|
3540
|
+
if (typeof cwelltFilterTabMultiSelectProps.onBlur === "function") {
|
|
3541
|
+
cwelltFilterTabMultiSelectProps.onBlur(event);
|
|
3542
|
+
}
|
|
3543
|
+
};
|
|
2694
3544
|
const clickOptionList = () => {
|
|
2695
3545
|
if (optionList.length > 0) {
|
|
2696
3546
|
Array.from(optionList).forEach(index => {
|
|
@@ -2710,11 +3560,7 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
|
|
|
2710
3560
|
};
|
|
2711
3561
|
});
|
|
2712
3562
|
//#endregion
|
|
2713
|
-
return (jsxs("div", { className: cwelltFilterTabMultiSelectProps.className + "
|
|
2714
|
-
// isShowClearButton
|
|
2715
|
-
// ? "headClearIcon cwellt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_abs"
|
|
2716
|
-
// :
|
|
2717
|
-
"headClearIcon", onClick: (e) => onClearInputValue(e) })] }), cwelltFilterTabMultiSelectProps.children] }));
|
|
3563
|
+
return (jsxs("div", { className: cwelltFilterTabMultiSelectProps.className + " cw-headfilter", style: cwelltFilterTabMultiSelectProps.style, id: cwelltFilterTabMultiSelectProps.Id, onMouseLeave: cwelltFilterTabMultiSelectProps.onMouseLeave, ref: refContent, children: [jsxs("div", { className: "cw-headfilter-wrapper", onClick: () => onClickHeaderFilterTab(), children: [jsx(CwIcon, { iconId: "search", size: "large" }), jsxs("div", { className: "cw-headfilter-content", children: [jsx("div", { className: "cw-flex-row cw-gap-small cw-align-left-center cw-flex-wrap", ref: headFilter_content_tags_ref, children: cwelltFilterTabMultiSelectProps.tagValueContent }), jsx("div", { className: "headFilter_search_content", ref: headContent_ref, children: jsx("input", { id: "headFilter_inputSearch", value: inputValue, onKeyPress: event_keyPress => onKeyPressInput(event_keyPress), onBlur: handleBlur, type: "search", onChange: event_onChangeInput => onChangeInputSearch(event_onChangeInput), placeholder: cwelltFilterTabMultiSelectProps.placeholder_desc, ref: headInputFitlerTab_ref }) })] }), jsx(CwIcon, { iconId: "close-circle", onClick: (e) => onClearInputValue(e) })] }), cwelltFilterTabMultiSelectProps.children] }));
|
|
2718
3564
|
}
|
|
2719
3565
|
|
|
2720
3566
|
function CwOptionList(optionListProps) {
|
|
@@ -2725,15 +3571,12 @@ function CwOptionList(optionListProps) {
|
|
|
2725
3571
|
//#endregion
|
|
2726
3572
|
//#region Hooks
|
|
2727
3573
|
// - Hooks : selected optionList
|
|
2728
|
-
const [isSelectedOptionList, setIsSelectedOptionList] = useState(optionListProps.isSelected || false);
|
|
3574
|
+
// const [isSelectedOptionList, setIsSelectedOptionList] = useState(optionListProps.isSelected || false);
|
|
2729
3575
|
//#endregion
|
|
2730
3576
|
//#region Functions
|
|
2731
|
-
const onSelectedOptionList = () => {
|
|
2732
|
-
setIsSelectedOptionList(!isSelectedOptionList);
|
|
2733
|
-
};
|
|
2734
3577
|
const onClickSelectOptionList = (event_click) => {
|
|
2735
3578
|
// - click of custom component
|
|
2736
|
-
onSelectedOptionList();
|
|
3579
|
+
// onSelectedOptionList();
|
|
2737
3580
|
// - click of property interface
|
|
2738
3581
|
optionListProps.onClick(event_click);
|
|
2739
3582
|
};
|
|
@@ -2746,26 +3589,19 @@ function CwOptionList(optionListProps) {
|
|
|
2746
3589
|
//#region Useffect
|
|
2747
3590
|
useEffect(() => {
|
|
2748
3591
|
window.addEventListener("keypress", onKeyPressOptionList);
|
|
2749
|
-
// selected option list
|
|
2750
|
-
setIsSelectedOptionList(optionListProps.isSelected || false);
|
|
2751
3592
|
return () => {
|
|
2752
3593
|
window.removeEventListener("keypress", onKeyPressOptionList);
|
|
2753
3594
|
};
|
|
2754
|
-
}, [
|
|
3595
|
+
}, []);
|
|
2755
3596
|
//#endregion
|
|
2756
|
-
return (jsxs("div", { className:
|
|
2757
|
-
? optionListProps.className +
|
|
2758
|
-
" cwelltOptionList cwelltOptionList_active cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
|
|
2759
|
-
: optionListProps.className +
|
|
2760
|
-
" cwelltOptionList cwellt_flex cwellt_justify_space_between cwellt_align_items_center", onClick: event_click => onClickSelectOptionList(event_click), id: optionListProps.idOptionList, ref: optionListSelected_ref, "aria-value-text": optionListProps.value, onKeyPress: event_onKeyPress => onKeyPressOptionList(event_onKeyPress), style: optionListProps.style, children: [jsx("label", { className: "cwelltOptionList_desc cwellt_flex cwellt_align_items_center", htmlFor: optionListProps.idOptionList, children: optionListProps.children }), jsx("input", { type: "checkbox", className: "cwellt_display_none", value: optionListProps.value, ref: optionListSelected_input_ref, id: optionListProps.idOptionList, onClick: optionListProps.onChangeOptionList }), jsx("span", { className: isSelectedOptionList
|
|
2761
|
-
? "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center"
|
|
2762
|
-
: "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center" })] }));
|
|
3597
|
+
return (jsxs("div", { className: `cw-multiselect-option-list${optionListProps.isSelected ? ' option-active' : ''}`, onClick: event_click => onClickSelectOptionList(event_click), id: optionListProps.idOptionList, ref: optionListSelected_ref, "aria-value-text": optionListProps.value, onKeyPress: event_onKeyPress => onKeyPressOptionList(event_onKeyPress), style: optionListProps.style, children: [jsx("label", { htmlFor: optionListProps.idOptionList, children: optionListProps.children }), jsx("input", { type: "checkbox", value: optionListProps.value, ref: optionListSelected_input_ref, id: optionListProps.idOptionList, onClick: optionListProps.onChangeOptionList })] }));
|
|
2763
3598
|
}
|
|
2764
3599
|
|
|
2765
3600
|
//#endregion
|
|
2766
3601
|
function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
2767
3602
|
//#region Reference
|
|
2768
3603
|
const refOptionListContent = useRef(null);
|
|
3604
|
+
const containerRef = useRef(null);
|
|
2769
3605
|
//#endregion
|
|
2770
3606
|
//#region Hooks
|
|
2771
3607
|
const [isShowDropDownfiltered, setShowDropDownfiltered] = useState(false);
|
|
@@ -2776,7 +3612,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2776
3612
|
// color: string;
|
|
2777
3613
|
// }[]>([]);
|
|
2778
3614
|
// Hook active label filter item tab [ All ]
|
|
2779
|
-
const [
|
|
3615
|
+
const [isActive_filter_item_all, setActive_filter_item_all] = useState(true);
|
|
2780
3616
|
// Hook active laberl fitler item tab [ e.g.: Duty ]
|
|
2781
3617
|
const [isActive_filter_item, setActive_filter_item] = useState(null);
|
|
2782
3618
|
// Hook isSelected option list
|
|
@@ -2788,31 +3624,31 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2788
3624
|
const clearValue = (e_clear) => {
|
|
2789
3625
|
// List items to remove class and be visible
|
|
2790
3626
|
// Item searched
|
|
2791
|
-
const itemSearched = document.getElementsByClassName("
|
|
3627
|
+
const itemSearched = document.getElementsByClassName("item-search");
|
|
2792
3628
|
// Item hidden
|
|
2793
|
-
const itemHidden = document.getElementsByClassName("
|
|
3629
|
+
const itemHidden = document.getElementsByClassName("hidden-item");
|
|
2794
3630
|
// Item searcched
|
|
2795
3631
|
if (itemSearched.length > 0) {
|
|
2796
3632
|
for (let i = 0; i <= itemSearched.length; i++) {
|
|
2797
|
-
itemSearched[i]?.classList.remove("
|
|
3633
|
+
itemSearched[i]?.classList.remove("item-search");
|
|
2798
3634
|
}
|
|
2799
3635
|
}
|
|
2800
3636
|
// Item hidden
|
|
2801
3637
|
if (itemHidden.length > 0) {
|
|
2802
3638
|
for (let i = 0; i <= itemHidden.length; i++) {
|
|
2803
|
-
itemHidden[i]?.classList.remove("
|
|
3639
|
+
itemHidden[i]?.classList.remove("hidden-item");
|
|
2804
3640
|
}
|
|
2805
3641
|
}
|
|
2806
3642
|
// optionList [ disbaled active className according their text ]
|
|
2807
3643
|
const parent = e_clear.currentTarget.parentElement.parentElement;
|
|
2808
|
-
const optionActive = parent.getElementsByClassName("
|
|
3644
|
+
const optionActive = parent.getElementsByClassName("option-active");
|
|
2809
3645
|
const valueIds = [];
|
|
2810
3646
|
const resultList = [];
|
|
2811
3647
|
if (optionActive.length > 0) {
|
|
2812
3648
|
CwelltCustomFilterTabProps.onclickHandleChange(valueIds, resultList);
|
|
2813
3649
|
Array.from(optionActive).forEach(index => {
|
|
2814
3650
|
const optionActive_array = index;
|
|
2815
|
-
optionActive_array.classList.remove("
|
|
3651
|
+
optionActive_array.classList.remove("option-active");
|
|
2816
3652
|
});
|
|
2817
3653
|
}
|
|
2818
3654
|
};
|
|
@@ -2821,26 +3657,26 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2821
3657
|
const onChangeSearch = (e_onchange) => {
|
|
2822
3658
|
const filterText_lowerCase = e_onchange.currentTarget.value.toLowerCase();
|
|
2823
3659
|
// Tags for filtering
|
|
2824
|
-
const listTag = document.getElementsByClassName("
|
|
3660
|
+
const listTag = document.getElementsByClassName("cw-multiselect-option-list");
|
|
2825
3661
|
for (let i = 0; i <= listTag.length; i++) {
|
|
2826
3662
|
if (listTag[i] !== undefined) {
|
|
2827
3663
|
const textTagValue = listTag[i].textContent;
|
|
2828
3664
|
// Writting
|
|
2829
3665
|
if (textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
|
|
2830
|
-
listTag[i].classList.add("
|
|
3666
|
+
listTag[i].classList.add("item-search");
|
|
2831
3667
|
}
|
|
2832
3668
|
else {
|
|
2833
|
-
listTag[i].classList.add("
|
|
3669
|
+
listTag[i].classList.add("hidden-item");
|
|
2834
3670
|
}
|
|
2835
3671
|
// remove written
|
|
2836
3672
|
if (!textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
|
|
2837
|
-
listTag[i].classList.remove("
|
|
3673
|
+
listTag[i].classList.remove("item-search");
|
|
2838
3674
|
}
|
|
2839
3675
|
else {
|
|
2840
|
-
listTag[i].classList.remove("
|
|
3676
|
+
listTag[i].classList.remove("hidden-item");
|
|
2841
3677
|
}
|
|
2842
3678
|
if (filterText_lowerCase === "") {
|
|
2843
|
-
listTag[i].classList.remove("
|
|
3679
|
+
listTag[i].classList.remove("item-search");
|
|
2844
3680
|
}
|
|
2845
3681
|
}
|
|
2846
3682
|
}
|
|
@@ -2854,7 +3690,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2854
3690
|
const onKeyPressSearch = (event_onKeypress) => {
|
|
2855
3691
|
//#region Variables
|
|
2856
3692
|
const keyPressed = event_onKeypress.key;
|
|
2857
|
-
const optionSearched = document.getElementsByClassName("
|
|
3693
|
+
const optionSearched = document.getElementsByClassName("item-search");
|
|
2858
3694
|
//#endregion
|
|
2859
3695
|
// first item selected or same text
|
|
2860
3696
|
const optionArray = Array.from(optionSearched);
|
|
@@ -2869,12 +3705,12 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2869
3705
|
handleClickTag(element);
|
|
2870
3706
|
}
|
|
2871
3707
|
}
|
|
2872
|
-
const optionList_item_hidden = document.getElementsByClassName("
|
|
3708
|
+
const optionList_item_hidden = document.getElementsByClassName("hidden-item");
|
|
2873
3709
|
if (optionList_item_hidden.length > 0) {
|
|
2874
3710
|
Array.from(optionList_item_hidden).forEach(index => {
|
|
2875
3711
|
const optionList_hidden_array = index;
|
|
2876
|
-
if (optionList_hidden_array.classList.contains("
|
|
2877
|
-
optionList_hidden_array.classList.remove("
|
|
3712
|
+
if (optionList_hidden_array.classList.contains("hidden-item")) {
|
|
3713
|
+
optionList_hidden_array.classList.remove("hidden-item");
|
|
2878
3714
|
}
|
|
2879
3715
|
});
|
|
2880
3716
|
}
|
|
@@ -2896,7 +3732,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2896
3732
|
active;
|
|
2897
3733
|
}
|
|
2898
3734
|
const handleClickTag = (e) => {
|
|
2899
|
-
const preList = CwelltCustomFilterTabProps.selectedListsItems;
|
|
3735
|
+
const preList = CwelltCustomFilterTabProps.selectedListsItems || [];
|
|
2900
3736
|
const valueIds = [];
|
|
2901
3737
|
const resultList = preList?.map(s => {
|
|
2902
3738
|
const item = new SelectListTest();
|
|
@@ -2935,36 +3771,35 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2935
3771
|
// [a.key]: !prevSelectedStates[a.key],
|
|
2936
3772
|
// }));
|
|
2937
3773
|
// clear filter by text after clicked in option list
|
|
2938
|
-
const optionList_item_hidden = document.getElementsByClassName("
|
|
3774
|
+
const optionList_item_hidden = document.getElementsByClassName("hidden-item");
|
|
2939
3775
|
if (optionList_item_hidden.length > 0) {
|
|
2940
3776
|
Array.from(optionList_item_hidden).forEach(index => {
|
|
2941
3777
|
const optionList_hidden_array = index;
|
|
2942
|
-
if (optionList_hidden_array.classList.contains("
|
|
2943
|
-
optionList_hidden_array.classList.remove("
|
|
3778
|
+
if (optionList_hidden_array.classList.contains("hidden-item")) {
|
|
3779
|
+
optionList_hidden_array.classList.remove("hidden-item");
|
|
2944
3780
|
}
|
|
2945
3781
|
});
|
|
2946
3782
|
}
|
|
2947
3783
|
// Check click from option list has custom tag header of custom filter tab
|
|
2948
|
-
const tagActive = document.getElementsByClassName("
|
|
2949
|
-
const optionList = document.getElementsByClassName("
|
|
3784
|
+
const tagActive = document.getElementsByClassName("multiselect-active-tag");
|
|
3785
|
+
const optionList = document.getElementsByClassName("cw-multiselect-option-list");
|
|
2950
3786
|
if (tagActive.length > 0 && optionList.length > 0) {
|
|
2951
|
-
Array.from(tagActive).forEach(
|
|
2952
|
-
const tagActive_array = index;
|
|
3787
|
+
Array.from(tagActive).forEach(_index => {
|
|
2953
3788
|
Array.from(optionList).forEach(index => {
|
|
2954
3789
|
const optionList_array = index;
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
optionList_array.classList.remove("
|
|
3790
|
+
const optionId = optionList_array.getAttribute('data-id');
|
|
3791
|
+
if (optionId === (e.type + "_" + e.id)) {
|
|
3792
|
+
optionList_array.classList.remove("option-active");
|
|
2958
3793
|
}
|
|
2959
3794
|
});
|
|
2960
3795
|
});
|
|
2961
3796
|
}
|
|
2962
|
-
const optionList_desc = document.getElementsByClassName("
|
|
3797
|
+
const optionList_desc = document.getElementsByClassName("option-active");
|
|
2963
3798
|
if (optionList_desc.length > 0) {
|
|
2964
3799
|
Array.from(optionList_desc).forEach(index => {
|
|
2965
3800
|
const optionList_desc_array = index;
|
|
2966
3801
|
if (optionList_desc_array.innerText === a.description) {
|
|
2967
|
-
optionList_desc_array.classList.remove("
|
|
3802
|
+
optionList_desc_array.classList.remove("option-active");
|
|
2968
3803
|
}
|
|
2969
3804
|
});
|
|
2970
3805
|
}
|
|
@@ -2999,12 +3834,13 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2999
3834
|
// ...prevSelectedStates,
|
|
3000
3835
|
// [a.key]: false[a.key],
|
|
3001
3836
|
// }));
|
|
3002
|
-
const optionList_active = document.getElementsByClassName("
|
|
3837
|
+
const optionList_active = document.getElementsByClassName("option-active");
|
|
3003
3838
|
if (optionList_active.length > 0) {
|
|
3004
3839
|
Array.from(optionList_active).forEach(index => {
|
|
3005
3840
|
const optionList_active_array = index;
|
|
3006
|
-
|
|
3007
|
-
|
|
3841
|
+
const optionId = optionList_active_array.getAttribute('data-id');
|
|
3842
|
+
if (optionId === (e.type + "_" + e.id)) {
|
|
3843
|
+
optionList_active_array.classList.remove("option-active");
|
|
3008
3844
|
}
|
|
3009
3845
|
});
|
|
3010
3846
|
}
|
|
@@ -3013,8 +3849,8 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3013
3849
|
//#region DropDownContainer [ properties functions ]
|
|
3014
3850
|
//#region onKeyDownDropDownContainer [ press ESC dropDownContainer dissapear - ArrowUp && ArrowDown ]
|
|
3015
3851
|
const onKeyDownDropDownContent = (event_onKeyDown) => {
|
|
3016
|
-
const items = document.querySelectorAll(".
|
|
3017
|
-
let optionIndex = Array.from(items).findIndex(item => item.classList.contains("
|
|
3852
|
+
const items = document.querySelectorAll(".cw-multiselect-option-list");
|
|
3853
|
+
let optionIndex = Array.from(items).findIndex(item => item.classList.contains("keyboard-focus"));
|
|
3018
3854
|
if (event_onKeyDown.key === "Escape") {
|
|
3019
3855
|
// DropDown disappear
|
|
3020
3856
|
setShowDropDownfiltered(false);
|
|
@@ -3035,9 +3871,9 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3035
3871
|
}
|
|
3036
3872
|
};
|
|
3037
3873
|
const removeHighlight = () => {
|
|
3038
|
-
const highlightedItem = document.querySelector(".
|
|
3874
|
+
const highlightedItem = document.querySelector(".keyboard-focus");
|
|
3039
3875
|
if (highlightedItem) {
|
|
3040
|
-
highlightedItem.classList.remove("
|
|
3876
|
+
highlightedItem.classList.remove("keyboard-focus");
|
|
3041
3877
|
}
|
|
3042
3878
|
};
|
|
3043
3879
|
const getNextIndex = (currentIndex, length) => {
|
|
@@ -3047,57 +3883,46 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3047
3883
|
return (currentIndex - 1 + length) % length;
|
|
3048
3884
|
};
|
|
3049
3885
|
const highlightOption = (index) => {
|
|
3050
|
-
const items = document.querySelectorAll(".
|
|
3886
|
+
const items = document.querySelectorAll(".cw-multiselect-option-list");
|
|
3051
3887
|
const item = items[index];
|
|
3052
|
-
item.classList.add("
|
|
3888
|
+
item.classList.add("keyboard-focus");
|
|
3053
3889
|
};
|
|
3054
3890
|
//#endregion
|
|
3055
|
-
//#region
|
|
3056
|
-
const
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
const posCursor_y = event_mouseLeave.clientY;
|
|
3061
|
-
// current item
|
|
3062
|
-
const currentItem = event_mouseLeave.currentTarget;
|
|
3063
|
-
// cwSelectDropDownContainer_active
|
|
3064
|
-
const dropDownContainer_active = currentItem.getElementsByClassName("cwSelectDropDownContainer_active");
|
|
3065
|
-
// Evaluating if the position of the cursor is higher than the positon of component and if dropDownContainer state is true keep state of dropDown
|
|
3066
|
-
if (posCursor_y > pos.bottom && isShowDropDownfiltered === true) {
|
|
3067
|
-
setShowDropDownfiltered(true);
|
|
3068
|
-
// Mouse leave of drpoDownContainer
|
|
3069
|
-
if (dropDownContainer_active.length > 0) {
|
|
3070
|
-
Array.from(dropDownContainer_active).forEach(index => {
|
|
3071
|
-
const dropDown_active_array = index;
|
|
3072
|
-
// Adding setShowDropDownfiltered ( false ) to hide dropDownContainer
|
|
3073
|
-
dropDown_active_array.addEventListener("mouseleave", () => {
|
|
3074
|
-
setShowDropDownfiltered(false);
|
|
3075
|
-
});
|
|
3076
|
-
});
|
|
3891
|
+
//#region onMouseLeave
|
|
3892
|
+
const handleInputBlur = () => {
|
|
3893
|
+
setTimeout(() => {
|
|
3894
|
+
if (!containerRef.current?.contains(document.activeElement)) {
|
|
3895
|
+
setShowDropDownfiltered(false);
|
|
3077
3896
|
}
|
|
3078
|
-
}
|
|
3079
|
-
else {
|
|
3080
|
-
setShowDropDownfiltered(false);
|
|
3081
|
-
}
|
|
3897
|
+
}, 150);
|
|
3082
3898
|
};
|
|
3899
|
+
useEffect(() => {
|
|
3900
|
+
const handleClickOutside = (event) => {
|
|
3901
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
3902
|
+
setShowDropDownfiltered(false);
|
|
3903
|
+
}
|
|
3904
|
+
};
|
|
3905
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
3906
|
+
return () => {
|
|
3907
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
3908
|
+
};
|
|
3909
|
+
}, []);
|
|
3083
3910
|
//#endregion
|
|
3084
|
-
|
|
3085
|
-
// clikc filert item button
|
|
3911
|
+
// Click filter item button
|
|
3086
3912
|
const clickFilter_item = (id) => {
|
|
3087
3913
|
// content items - looking for className by it - corresponded by their current group
|
|
3088
3914
|
const contentItems = document.getElementsByClassName(id);
|
|
3089
|
-
const contentAll = document.getElementsByClassName("
|
|
3915
|
+
const contentAll = document.getElementsByClassName("multiselect-tag-group");
|
|
3090
3916
|
if (contentAll.length > 0) {
|
|
3091
3917
|
Array.from(contentAll).forEach(index => {
|
|
3092
3918
|
const contentAll_array = index;
|
|
3093
|
-
contentAll_array.classList.add("
|
|
3919
|
+
contentAll_array.classList.add("hidden-group");
|
|
3094
3920
|
});
|
|
3095
3921
|
}
|
|
3096
3922
|
if (contentItems.length > 0) {
|
|
3097
3923
|
Array.from(contentItems).forEach(index => {
|
|
3098
3924
|
const contentItems_array = index;
|
|
3099
|
-
contentItems_array.classList.
|
|
3100
|
-
contentItems_array.classList.remove("cwellt_contentHide_item");
|
|
3925
|
+
contentItems_array.classList.remove("hidden-group");
|
|
3101
3926
|
});
|
|
3102
3927
|
}
|
|
3103
3928
|
// Adding custom className acitive
|
|
@@ -3107,105 +3932,65 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3107
3932
|
};
|
|
3108
3933
|
const showAllItem = () => {
|
|
3109
3934
|
//let currentBtn = e.currentTarget;
|
|
3110
|
-
const contentAll = document.getElementsByClassName("
|
|
3935
|
+
const contentAll = document.getElementsByClassName("multiselect-tag-group");
|
|
3111
3936
|
if (contentAll.length > 0) {
|
|
3112
3937
|
Array.from(contentAll).forEach(index => {
|
|
3113
3938
|
const contentAll_array = index;
|
|
3114
|
-
contentAll_array.classList.remove("
|
|
3115
|
-
contentAll_array.classList.remove("cwellt_contentShow_item");
|
|
3939
|
+
contentAll_array.classList.remove("hidden-group");
|
|
3116
3940
|
// active className - all
|
|
3117
3941
|
setActive_filter_item_all(true);
|
|
3118
|
-
// removing active className [ cwelltFilter_item_active ]
|
|
3119
3942
|
setActive_filter_item("");
|
|
3120
3943
|
});
|
|
3121
3944
|
}
|
|
3122
3945
|
};
|
|
3123
3946
|
//#endregion
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
Array.from(
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3947
|
+
useEffect(() => {
|
|
3948
|
+
if (CwelltCustomFilterTabProps.selectedListsItems) {
|
|
3949
|
+
const allOptions = document.getElementsByClassName("cw-multiselect-option-list");
|
|
3950
|
+
Array.from(allOptions).forEach(option => {
|
|
3951
|
+
option.classList.remove("option-active");
|
|
3952
|
+
});
|
|
3953
|
+
CwelltCustomFilterTabProps.selectedListsItems.forEach(selectedItem => {
|
|
3954
|
+
Array.from(allOptions).forEach(option => {
|
|
3955
|
+
const optionElement = option;
|
|
3956
|
+
if (optionElement.innerText === selectedItem.description) {
|
|
3957
|
+
optionElement.classList.add("option-active");
|
|
3958
|
+
}
|
|
3959
|
+
});
|
|
3132
3960
|
});
|
|
3133
3961
|
}
|
|
3134
|
-
};
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
const red_color_custom_tag = parseInt(bg_color_custom_tag.substring(0, 2), 16);
|
|
3142
|
-
const green_color_custom_tag = parseInt(bg_color_custom_tag.substring(2, 4), 16);
|
|
3143
|
-
const blue_color_custom_tag = parseInt(bg_color_custom_tag.substring(4, 6), 16);
|
|
3144
|
-
return "rgb(" + red_color_custom_tag + "," + green_color_custom_tag + "," + blue_color_custom_tag + ")";
|
|
3145
|
-
};
|
|
3146
|
-
// #endregion
|
|
3147
|
-
return (jsx(CwHeadFilter, { Id: CwelltCustomFilterTabProps.id, onChangeSearch: (e_onchange) => onChangeSearch(e_onchange), onClearValue: (e_clear) => clearValue(e_clear), onKeypressInput: onKeyPressSearch, onShowDropDown: showDropDownfiltered, placeholder_desc: CwelltCustomFilterTabProps.placeholder, style: CwelltCustomFilterTabProps.style, onMouseLeave: (event_mouseLeave) => onMouseLeave_dropDownContainer(event_mouseLeave), className: CwelltCustomFilterTabProps.selectedListsItems?.length === 0
|
|
3148
|
-
? "cw-filter-tab-multi-select-show-icon"
|
|
3149
|
-
: "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsx("div", { className: "cwellt_flex cwellt_flex_wrap", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
|
|
3150
|
-
loadadData(s);
|
|
3151
|
-
const bgColor_custom_tag_selected_list = convertHexToRgb_custom_tag(s.color);
|
|
3152
|
-
// Inicializa las variables con un valor por defecto de 0
|
|
3153
|
-
let redBgColor_custom_tag_selected_list = 0;
|
|
3154
|
-
let greenBgColor_custom_tag_selected_list = 0;
|
|
3155
|
-
let blueBgColor_custom_tag_selected_list = 0;
|
|
3156
|
-
const bgColor_custom_tag_array = bgColor_custom_tag_selected_list.match(/\d+/g);
|
|
3157
|
-
if (bgColor_custom_tag_array && bgColor_custom_tag_array.length >= 3) {
|
|
3158
|
-
redBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[0], 10);
|
|
3159
|
-
greenBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[1], 10);
|
|
3160
|
-
blueBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[2], 10);
|
|
3161
|
-
}
|
|
3162
|
-
const luminance = 0.299 * redBgColor_custom_tag_selected_list +
|
|
3163
|
-
0.587 * greenBgColor_custom_tag_selected_list +
|
|
3164
|
-
0.114 * blueBgColor_custom_tag_selected_list;
|
|
3165
|
-
return s.type !== undefined ? (jsx("div", { id: "cwContent_tag", "data-id": s.type + "_" + s.id, className: "cwellt_flex cwellt_align_items_center", children: jsx(CwTag, { styleTag: {
|
|
3166
|
-
background: s.color
|
|
3167
|
-
}, styleTag_description: {
|
|
3962
|
+
}, [CwelltCustomFilterTabProps.selectedListsItems]);
|
|
3963
|
+
return (jsx("div", { ref: containerRef, children: jsx(CwHeadFilter, { Id: CwelltCustomFilterTabProps.id, onChangeSearch: (e_onchange) => onChangeSearch(e_onchange), onClearValue: (e_clear) => clearValue(e_clear), onKeypressInput: onKeyPressSearch, onShowDropDown: showDropDownfiltered, placeholder_desc: CwelltCustomFilterTabProps.placeholder, style: CwelltCustomFilterTabProps.style, onBlur: handleInputBlur,
|
|
3964
|
+
// onMouseLeave={onMouseLeave_dropDownContainer}
|
|
3965
|
+
className: CwelltCustomFilterTabProps.selectedListsItems?.length === 0
|
|
3966
|
+
? "cw-filter-tab-multi-select-show-icon"
|
|
3967
|
+
: "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsx("div", { className: "cw-flex-row cw-gap-small", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
|
|
3968
|
+
return s.type !== undefined ? (jsx(CwTag, { styleTag: {
|
|
3168
3969
|
background: s.color,
|
|
3169
|
-
color:
|
|
3170
|
-
}, idTag: s.type + "_" + s.id, closableTag: true, onClickClosableTag: () => closeTagHandle(s),
|
|
3171
|
-
|
|
3172
|
-
? "cwelltFilter_item cwelltFilter_item_active"
|
|
3173
|
-
: "cwelltFilter_item",
|
|
3970
|
+
color: getContrastColor(s.color),
|
|
3971
|
+
}, idTag: s.type + "_" + s.id, closableTag: true, onClickClosableTag: () => closeTagHandle(s), "data-id": s.type + "_" + s.id, className: "multiselect-active-tag", children: s.description }, index)) : (jsx("div", {}));
|
|
3972
|
+
}) }), children: jsx(CwDropdownContainer, { dropDownState: isShowDropDownfiltered, idDropDownContainer: CwelltCustomFilterTabProps.idDropDownContainer, onKeyDownDropDownContainer: (event_onKeyDown) => onKeyDownDropDownContent(event_onKeyDown), children: jsxs("div", { className: "cw-multiselect-dropdown", children: [jsxs("header", { children: [jsx("label", { "data-active": isActive_filter_item_all, onClick: showAllItem, children: "ALL" }), CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsx("label", { "data-active": isActive_filter_item === 'content_' + i,
|
|
3174
3973
|
// todo : giving parameter by id to search by their corresponding group it list options and className content with their id in this case key ( i ) by .map function
|
|
3175
3974
|
onClick: () => clickFilter_item("content_" + i), id: "content_" + i, children: slArray.length > 0 && slArray[0].typeName !== undefined
|
|
3176
3975
|
? slArray[0].typeName
|
|
3177
3976
|
: slArray.length > 0
|
|
3178
3977
|
? slArray[0].type
|
|
3179
|
-
: "" }
|
|
3180
|
-
const
|
|
3181
|
-
|
|
3182
|
-
let greenBgColor_appointment = 0;
|
|
3183
|
-
let blueBgColor_custom_tag_select_list = 0;
|
|
3184
|
-
const bgColor_custom_tag_select_list_array = bgColor_custom_tag_select_list.match(/\d+/g);
|
|
3185
|
-
if (bgColor_custom_tag_select_list_array && bgColor_custom_tag_select_list_array.length >= 3) {
|
|
3186
|
-
redBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[0], 10);
|
|
3187
|
-
greenBgColor_appointment = parseInt(bgColor_custom_tag_select_list_array[1], 10);
|
|
3188
|
-
blueBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[2], 10);
|
|
3189
|
-
}
|
|
3190
|
-
const luminance = 0.299 * redBgColor_custom_tag_select_list +
|
|
3191
|
-
0.587 * greenBgColor_appointment +
|
|
3192
|
-
0.114 * blueBgColor_custom_tag_select_list;
|
|
3193
|
-
return (jsx(CwOptionList, { idOptionList: sl.type + "_" + sl.id, value: sl.type + "_" + sl.id, title: sl.description, onClick: () => handleClickTag(sl), isSelected: sl.active, children: jsx(CwTag, { styleTag: {
|
|
3194
|
-
background: "#E0E0E0"
|
|
3195
|
-
}, styleTag_description: {
|
|
3978
|
+
: "" }, i)))] }), jsx("div", { className: "cw-multiselect-tags-container", children: CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsx("div", { id: "content_" + i, className: `multiselect-tag-group content_${i}`, ref: refOptionListContent, children: slArray.map(sl => {
|
|
3979
|
+
const isSelected = CwelltCustomFilterTabProps.selectedListsItems?.some(selected => selected.type === sl.type && selected.id === sl.id) || false;
|
|
3980
|
+
return (jsx(CwOptionList, { idOptionList: sl.type + "_" + sl.id, value: sl.type + "_" + sl.id, title: sl.description, onClick: () => handleClickTag(sl), isSelected: sl.active, "data-id": sl.type + "_" + sl.id, children: jsx(CwTag, { styleTag: {
|
|
3196
3981
|
background: sl.color,
|
|
3197
|
-
color:
|
|
3198
|
-
}, children: sl.description }) }, sl.type + "_" + sl.id));
|
|
3199
|
-
}) }
|
|
3982
|
+
color: getContrastColor(sl.color),
|
|
3983
|
+
}, closableTag: isSelected, children: sl.description }) }, sl.type + "_" + sl.id));
|
|
3984
|
+
}) }, "group" + i))) })] }) }) }) }));
|
|
3200
3985
|
}
|
|
3201
3986
|
|
|
3202
|
-
var styles$
|
|
3987
|
+
var styles$7 = {"cw-multifilter-tag":"cw-multi-filter-tag-module_cw-multifilter-tag__Epda-"};
|
|
3203
3988
|
|
|
3204
3989
|
const CwMultiFilterTag = props => {
|
|
3205
3990
|
const { ID, Name, Value, Category, Removable, PrimaryColor, OnPrimaryColor, Selectable, Selected, OnSelect } = props;
|
|
3206
3991
|
const BackgroundColor = `rgb(${PrimaryColor.r},${PrimaryColor.g},${PrimaryColor.b})`;
|
|
3207
3992
|
const TextColor = `rgb(${OnPrimaryColor.r},${OnPrimaryColor.g},${OnPrimaryColor.b})`;
|
|
3208
|
-
return (jsxs("li", { className: styles$
|
|
3993
|
+
return (jsxs("li", { className: styles$7["cw-multifilter-tag"], "data-selected": !!props.Selected, "data-removable": !!props.Removable, style: {
|
|
3209
3994
|
color: TextColor,
|
|
3210
3995
|
backgroundColor: BackgroundColor,
|
|
3211
3996
|
opacity: Selected && !Removable ? "0.5" : "1",
|
|
@@ -3216,7 +4001,7 @@ const CwMultiFilterTag = props => {
|
|
|
3216
4001
|
}, children: [jsx("span", { id: ID, "data-value": Value, "data-category": Category, children: Name }), Removable && (jsx("span", { onClick: () => props.OnRemove?.(props), children: jsx(CwIcon, { iconId: "close" }) }))] }));
|
|
3217
4002
|
};
|
|
3218
4003
|
|
|
3219
|
-
var styles$
|
|
4004
|
+
var styles$6 = {"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"};
|
|
3220
4005
|
|
|
3221
4006
|
/**
|
|
3222
4007
|
* A multiple filter selector, a MULTI-SELECT even. Allows users to select and filter items based on tags.
|
|
@@ -3436,7 +4221,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3436
4221
|
}
|
|
3437
4222
|
else {
|
|
3438
4223
|
const updatedTags = new Set(selectedTags).add(newTag);
|
|
3439
|
-
onChangeSelectedTags
|
|
4224
|
+
onChangeSelectedTags(updatedTags);
|
|
3440
4225
|
setInputTextValue("");
|
|
3441
4226
|
//setFilteredTags(allTags);
|
|
3442
4227
|
}
|
|
@@ -3450,7 +4235,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3450
4235
|
toDelete.Removable = false;
|
|
3451
4236
|
updatedTags.delete(toDelete);
|
|
3452
4237
|
}
|
|
3453
|
-
onChangeSelectedTags
|
|
4238
|
+
onChangeSelectedTags(updatedTags);
|
|
3454
4239
|
};
|
|
3455
4240
|
useEffect(() => {
|
|
3456
4241
|
// force to load all tags on first render
|
|
@@ -3462,9 +4247,9 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3462
4247
|
inputRef.current?.focus();
|
|
3463
4248
|
}
|
|
3464
4249
|
};
|
|
3465
|
-
return (jsxs("form", { ref: componentRef, id: id, className: styles$
|
|
4250
|
+
return (jsxs("form", { ref: componentRef, id: id, className: styles$6["cw-multi-filter"], style: style, onSubmit: (e) => {
|
|
3466
4251
|
e.preventDefault();
|
|
3467
|
-
}, children: [jsxs("div", { onClick: handleDivClick, className: styles$
|
|
4252
|
+
}, children: [jsxs("div", { onClick: handleDivClick, className: styles$6["cw-multi-filter-search"], style: isPanelOpen ? { outline: "1px solid var(--cw-color-primary)", outlineOffset: "-2px" } : {}, children: [jsxs("ul", { id: id + "_selected_filters", children: [Array.from(selectedTags).map(tag => (createElement(CwMultiFilterTag, { ...tag, key: tag.ID, Selectable: false, Removable: true, OnRemove: () => removeTag(tag.ID) }))), 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 => {
|
|
3468
4253
|
switch (e.key) {
|
|
3469
4254
|
case "Enter":
|
|
3470
4255
|
case "Tab":
|
|
@@ -3484,8 +4269,8 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3484
4269
|
}
|
|
3485
4270
|
} })] }), selectedTags.size > 0 ? (jsx("input", { type: "reset", value: "\u00D7", onClick: e => {
|
|
3486
4271
|
e.preventDefault();
|
|
3487
|
-
onChangeSelectedTags
|
|
3488
|
-
} })) : null] }), jsxs("section", { className: styles$
|
|
4272
|
+
onChangeSelectedTags(new Set());
|
|
4273
|
+
} })) : null] }), jsxs("section", { className: styles$6["cw-multi-filter-catalog-container"], "data-display-none": !isPanelOpen, children: [jsxs("nav", { children: [jsx("button", { style: selectedCategory === "All"
|
|
3489
4274
|
? {
|
|
3490
4275
|
backgroundColor: "var(--cw-color-primary-container)",
|
|
3491
4276
|
color: "var(--cw-color-primary)",
|
|
@@ -3512,10 +4297,117 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3512
4297
|
} }, props.ID))) })] })] }));
|
|
3513
4298
|
};
|
|
3514
4299
|
|
|
4300
|
+
var styles$5 = {"tree-container":"cw-tree-view-module_tree-container__NN-HJ","tree-wrapper":"cw-tree-view-module_tree-wrapper__keBZI","tree-item":"cw-tree-view-module_tree-item__prE9N","tree-node":"cw-tree-view-module_tree-node__wfro9","selected":"cw-tree-view-module_selected__XJQ0w","non-selectable":"cw-tree-view-module_non-selectable__YuPSx","tree-children":"cw-tree-view-module_tree-children__ji8CZ","empty-state":"cw-tree-view-module_empty-state__yvRjo","tree-label":"cw-tree-view-module_tree-label__ss3Nf","tree-spacer":"cw-tree-view-module_tree-spacer__E9Ud2"};
|
|
4301
|
+
|
|
4302
|
+
function CwTreeView({ data, onSelect, allowParentSelection = false, selectedId: initialSelectedId = null }) {
|
|
4303
|
+
const [expanded, setExpanded] = useState(new Set());
|
|
4304
|
+
// const [selectedId, setSelectedId] = useState<string | number | null>(initialSelectedId);
|
|
4305
|
+
const [selectedId, setSelectedId] = useState(null);
|
|
4306
|
+
const [search, setSearch] = useState("");
|
|
4307
|
+
// Function to find a node by ID in the tree
|
|
4308
|
+
const findNodeById = (nodes, id) => {
|
|
4309
|
+
for (const node of nodes) {
|
|
4310
|
+
if (node.id.toString().toLowerCase() === id.toString().toLowerCase()) {
|
|
4311
|
+
return node;
|
|
4312
|
+
}
|
|
4313
|
+
if (node.children) {
|
|
4314
|
+
const found = findNodeById(node.children, id);
|
|
4315
|
+
if (found)
|
|
4316
|
+
return found;
|
|
4317
|
+
}
|
|
4318
|
+
}
|
|
4319
|
+
return null;
|
|
4320
|
+
};
|
|
4321
|
+
// Function to expand all parent nodes of a specific node
|
|
4322
|
+
const expandPathToNode = (nodes, targetId, path = []) => {
|
|
4323
|
+
for (const node of nodes) {
|
|
4324
|
+
const currentPath = [...path, node.id];
|
|
4325
|
+
if (node.id.toString().toLowerCase() === targetId.toString().toLowerCase()) {
|
|
4326
|
+
// We find the node, expand all nodes along the way
|
|
4327
|
+
path.forEach(id => {
|
|
4328
|
+
setExpanded(prev => new Set(prev).add(id));
|
|
4329
|
+
});
|
|
4330
|
+
return true;
|
|
4331
|
+
}
|
|
4332
|
+
if (node.children) {
|
|
4333
|
+
if (expandPathToNode(node.children, targetId, currentPath)) {
|
|
4334
|
+
return true;
|
|
4335
|
+
}
|
|
4336
|
+
}
|
|
4337
|
+
}
|
|
4338
|
+
return false;
|
|
4339
|
+
};
|
|
4340
|
+
// Effect for handling the initial selection
|
|
4341
|
+
useEffect(() => {
|
|
4342
|
+
if (!selectedId && initialSelectedId && data.length > 0) {
|
|
4343
|
+
const nodeToSelect = findNodeById(data, initialSelectedId);
|
|
4344
|
+
if (nodeToSelect) {
|
|
4345
|
+
setSelectedId(initialSelectedId);
|
|
4346
|
+
// Expand the path to the selected node
|
|
4347
|
+
expandPathToNode(data, initialSelectedId);
|
|
4348
|
+
// Call the onSelect callback
|
|
4349
|
+
onSelect(nodeToSelect);
|
|
4350
|
+
}
|
|
4351
|
+
}
|
|
4352
|
+
}, [initialSelectedId, data, onSelect, selectedId]);
|
|
4353
|
+
const toggleExpand = (id) => {
|
|
4354
|
+
const newSet = new Set(expanded);
|
|
4355
|
+
if (newSet.has(id))
|
|
4356
|
+
newSet.delete(id);
|
|
4357
|
+
else
|
|
4358
|
+
newSet.add(id);
|
|
4359
|
+
setExpanded(newSet);
|
|
4360
|
+
};
|
|
4361
|
+
const renderNode = (node, depth = 0) => {
|
|
4362
|
+
const isExpanded = expanded.has(node.id);
|
|
4363
|
+
const hasChildren = node.children && node.children.length > 0;
|
|
4364
|
+
const isLeaf = !hasChildren;
|
|
4365
|
+
const isSelected = selectedId?.toString().toLowerCase() === node.id.toString().toLowerCase();
|
|
4366
|
+
const selectable = allowParentSelection || isLeaf;
|
|
4367
|
+
return (jsxs("div", { className: styles$5["tree-item"], children: [jsxs("div", { className: [
|
|
4368
|
+
styles$5["tree-node"],
|
|
4369
|
+
isSelected && styles$5["selected"],
|
|
4370
|
+
!selectable && styles$5["non-selectable"]
|
|
4371
|
+
].filter(Boolean).join(' '), style: { paddingLeft: `${depth * 24 + 8}px` }, onClick: () => {
|
|
4372
|
+
if (selectable) {
|
|
4373
|
+
setSelectedId(node.id);
|
|
4374
|
+
onSelect(node);
|
|
4375
|
+
}
|
|
4376
|
+
else {
|
|
4377
|
+
toggleExpand(node.id);
|
|
4378
|
+
}
|
|
4379
|
+
}, children: [hasChildren && (jsx(CwIcon, { size: "large", iconId: isExpanded ? "chevron-down" : "chevron-right" })), jsx("div", { className: `${styles$5["tree-label"]} ${!hasChildren ? styles$5["tree-spacer"] : ''}`, children: node.label })] }), hasChildren && isExpanded && (jsx("div", { className: styles$5["tree-children"], children: node.children.map((child) => renderNode(child, depth + 1)) }))] }, node.id));
|
|
4380
|
+
};
|
|
4381
|
+
// Function to search for nodes that match the search term
|
|
4382
|
+
const searchInTree = (nodes, searchTerm) => {
|
|
4383
|
+
if (!searchTerm)
|
|
4384
|
+
return nodes;
|
|
4385
|
+
const results = [];
|
|
4386
|
+
for (const node of nodes) {
|
|
4387
|
+
const nodeMatches = node.label.toLowerCase().includes(searchTerm.toLowerCase());
|
|
4388
|
+
let childMatches = [];
|
|
4389
|
+
if (node.children) {
|
|
4390
|
+
childMatches = searchInTree(node.children, searchTerm);
|
|
4391
|
+
}
|
|
4392
|
+
// Include node if he or his children match
|
|
4393
|
+
if (nodeMatches || childMatches.length > 0) {
|
|
4394
|
+
results.push({
|
|
4395
|
+
...node,
|
|
4396
|
+
children: childMatches.length > 0 ? childMatches : node.children
|
|
4397
|
+
});
|
|
4398
|
+
}
|
|
4399
|
+
}
|
|
4400
|
+
return results;
|
|
4401
|
+
};
|
|
4402
|
+
const filteredData = searchInTree(data, search);
|
|
4403
|
+
return (jsxs("div", { className: `cw-tree-view ${styles$5["tree-container"]}`, children: [jsxs("header", { children: [jsx("input", { type: "text", placeholder: "Search in tree...", value: search, onChange: (e) => setSearch(e.target.value) }), search && (jsx(CwButton, { onClick: () => setSearch(""), type: "button", icon: "close", variant: "icon", color: "neutral" }))] }), jsx("div", { className: styles$5["tree-wrapper"], children: filteredData.length > 0 ? (filteredData.map((node) => renderNode(node))) : (jsxs("div", { className: styles$5["empty-state"], children: [jsx(CwIcon, { iconId: "comment" }), search ? "No results found" : "There are no items"] })) })] }));
|
|
4404
|
+
}
|
|
4405
|
+
|
|
3515
4406
|
function CwSearchInput(optionsProps) {
|
|
3516
4407
|
const [searchText, setSearchText] = useState("");
|
|
3517
4408
|
const [filteredOptions, setFilteredOptions] = useState([]);
|
|
3518
4409
|
const [_selectedOption, setSelectedOption] = useState(null);
|
|
4410
|
+
const [showDropdown, setShowDropdown] = useState(false);
|
|
3519
4411
|
// Make default value selection when loading the component
|
|
3520
4412
|
useEffect(() => {
|
|
3521
4413
|
if (optionsProps.defaultValue && optionsProps.selectList && optionsProps.selectList.length > 0) {
|
|
@@ -3533,8 +4425,9 @@ function CwSearchInput(optionsProps) {
|
|
|
3533
4425
|
const handleInputChange = (event) => {
|
|
3534
4426
|
const text = event.target.value;
|
|
3535
4427
|
setSearchText(text);
|
|
4428
|
+
setShowDropdown(true);
|
|
3536
4429
|
if (text === "") {
|
|
3537
|
-
setFilteredOptions(
|
|
4430
|
+
setFilteredOptions(optionsProps.selectList);
|
|
3538
4431
|
setSelectedOption(null);
|
|
3539
4432
|
// Notify that there is no selection
|
|
3540
4433
|
if (optionsProps.handleChange) {
|
|
@@ -3555,6 +4448,17 @@ function CwSearchInput(optionsProps) {
|
|
|
3555
4448
|
setFilteredOptions(filtered);
|
|
3556
4449
|
}
|
|
3557
4450
|
};
|
|
4451
|
+
const handleInputFocus = () => {
|
|
4452
|
+
setShowDropdown(true);
|
|
4453
|
+
if (searchText === "") {
|
|
4454
|
+
setFilteredOptions(optionsProps.selectList);
|
|
4455
|
+
}
|
|
4456
|
+
};
|
|
4457
|
+
const handleInputBlur = () => {
|
|
4458
|
+
setTimeout(() => {
|
|
4459
|
+
setShowDropdown(false);
|
|
4460
|
+
}, 150);
|
|
4461
|
+
};
|
|
3558
4462
|
const handleOptionSelect = (option) => {
|
|
3559
4463
|
setSearchText(option.description);
|
|
3560
4464
|
setSelectedOption(option);
|
|
@@ -3570,12 +4474,12 @@ function CwSearchInput(optionsProps) {
|
|
|
3570
4474
|
setSelectedOption(null);
|
|
3571
4475
|
};
|
|
3572
4476
|
return (jsxs("div", { className: "cwSearchInputComp", style: optionsProps.style, id: optionsProps.id, children: [jsxs("div", { className: optionsProps.labelPosition === "inline"
|
|
3573
|
-
? "cw-flex-row "
|
|
4477
|
+
? "cw-flex-row cw-align-left-center"
|
|
3574
4478
|
: optionsProps.labelPosition === "column"
|
|
3575
|
-
? "cw-
|
|
3576
|
-
: "cw-flex-row ", children: [optionsProps.labelName && (jsx("label", { className: optionsProps.disabled
|
|
3577
|
-
?
|
|
3578
|
-
:
|
|
4479
|
+
? "cw-label-input-column"
|
|
4480
|
+
: "cw-flex-row cw-align-left-center", children: [optionsProps.labelName && (jsx("label", { children: optionsProps.labelName })), jsx("input", { type: "text", value: searchText, onChange: handleInputChange, onFocus: handleInputFocus, onBlur: handleInputBlur, placeholder: "Search...", className: "cw_input_search", disabled: optionsProps.disabled }), searchText && (jsx("button", { className: "cw-button-icon cwi-close cw-input-search-clear", onClick: handleClearClick }))] }), showDropdown && filteredOptions.length > 0 && (jsx("div", { className: "cw-input-search-dropdown", children: jsx("ul", { children: filteredOptions.map((option) => (jsx("li", { onClick: () => handleOptionSelect(option), onMouseDown: (e) => e.preventDefault(), children: optionsProps.renderOption
|
|
4481
|
+
? optionsProps.renderOption(option)
|
|
4482
|
+
: option.description }, option.id))) }) }))] }));
|
|
3579
4483
|
}
|
|
3580
4484
|
|
|
3581
4485
|
var styles$4 = {"context-menu":"cw-context-menu-module_context-menu__dbxnO","context-menu-item":"cw-context-menu-module_context-menu-item__B2W-Q"};
|
|
@@ -6373,7 +7277,7 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
|
6373
7277
|
e.preventDefault();
|
|
6374
7278
|
onEvent(new OnDoubleClickEvent(value.id));
|
|
6375
7279
|
});
|
|
6376
|
-
return (jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "
|
|
7280
|
+
return (jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
|
|
6377
7281
|
items: value.contextMenuItems,
|
|
6378
7282
|
onClick: (e) => {
|
|
6379
7283
|
e.domEvent.nativeEvent.preventDefault();
|
|
@@ -6518,7 +7422,7 @@ const SchedulerRow = memo((props) => {
|
|
|
6518
7422
|
return (jsxs("div", { style: {
|
|
6519
7423
|
display: "flex",
|
|
6520
7424
|
minHeight: props.rowHeightInRem + "rem",
|
|
6521
|
-
}, children: [jsx(RowTitleComp, { ...rowHeader }), jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "
|
|
7425
|
+
}, children: [jsx(RowTitleComp, { ...rowHeader }), jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
|
|
6522
7426
|
items: contextMenuItems,
|
|
6523
7427
|
onClick: (e) => {
|
|
6524
7428
|
onClickMenuItem$1(e, () => {
|
|
@@ -6553,19 +7457,19 @@ const SchedulerRow = memo((props) => {
|
|
|
6553
7457
|
const percentage = getPercentageFromMouseEvent(e);
|
|
6554
7458
|
const date = dateFromPercentage(selectedDate, visibleDays, percentage);
|
|
6555
7459
|
onEvent(new OnRightClickRow(rowHeader.value.rowId, date));
|
|
6556
|
-
}, children: [weekendLines.map((weekend) => (jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }))), divisionLines.map((division) => (jsx(DivisionLine, { height: "100%", left: division.left }))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsx("div", { style: {
|
|
7460
|
+
}, children: [weekendLines.map((weekend) => (jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }, weekend.left))), divisionLines.map((division) => (jsx(DivisionLine, { height: "100%", left: division.left }, division.left))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsx("div", { style: {
|
|
6557
7461
|
height: "100%",
|
|
6558
7462
|
position: internalRows.length > 0 ? "absolute" : "relative",
|
|
6559
7463
|
width: "100%",
|
|
6560
7464
|
pointerEvents: "none",
|
|
6561
7465
|
}, children: backgroundEvents.map((event) => {
|
|
6562
|
-
return jsx(BackgroundEventComp, { value: { ...event }, onEvent: onEvent, heightRem: props.rowHeightInRem * Math.max(1, internalRows.length) });
|
|
7466
|
+
return jsx(BackgroundEventComp, { value: { ...event }, onEvent: onEvent, heightRem: props.rowHeightInRem * Math.max(1, internalRows.length) }, event.id);
|
|
6563
7467
|
}) })), backgroundEvents.length === 0 && internalRows.length === 0 && (jsx("div", { style: { position: "relative", height: props.rowHeightInRem + "rem" } })), internalRows.map((internalRow, index) => {
|
|
6564
7468
|
return (jsx("div", { style: {
|
|
6565
7469
|
position: "relative",
|
|
6566
7470
|
height: props.rowHeightInRem + "rem",
|
|
6567
7471
|
pointerEvents: "none"
|
|
6568
|
-
}, children: internalRow.map((event
|
|
7472
|
+
}, children: internalRow.map((event) => (jsx(EventComp, { value: event, heightRem: props.rowHeightInRem, onEvent: onEvent }, event.id))) }, index));
|
|
6569
7473
|
}), !(timeLinePercentage < 0 || timeLinePercentage > 100) && (jsx(TimeLine, { color: "red", left: `${timeLinePercentage}%`, top: "0px", height: `100%` }))] }) }, rowHeader.value.rowId)] }));
|
|
6570
7474
|
}, (prevProps, nextProps) => {
|
|
6571
7475
|
// This memo is necessary to prevent re-render all the rows when a user makes drag and drop
|
|
@@ -6749,9 +7653,9 @@ const getEventSizes = (schedulerDate, totalDays, startDate, endDate) => {
|
|
|
6749
7653
|
};
|
|
6750
7654
|
}
|
|
6751
7655
|
const totalHours = totalDays * 24;
|
|
6752
|
-
const dateString = schedulerDate.toISOString().split('T')[0];
|
|
6753
|
-
const schedulerDateAtZero = new Date(dateString)
|
|
6754
|
-
let startHours = hoursBetween(
|
|
7656
|
+
// const dateString = schedulerDate.toISOString().split('T')[0];
|
|
7657
|
+
//const schedulerDateAtZero = new Date(dateString)
|
|
7658
|
+
let startHours = hoursBetween(schedulerDate, startDate);
|
|
6755
7659
|
let durationHours = hoursBetween(startDate, endDate);
|
|
6756
7660
|
const startOutOfScheduler = startHours < 0;
|
|
6757
7661
|
if (startOutOfScheduler) {
|
|
@@ -6794,9 +7698,7 @@ const sortByCategoryAndTitle = (previous, next, orderCategories) => {
|
|
|
6794
7698
|
};
|
|
6795
7699
|
|
|
6796
7700
|
const getWeekendLinesByDatesVisible = (initialDate, visibleDays) => {
|
|
6797
|
-
const
|
|
6798
|
-
const todayAtO = new Date(dateString);
|
|
6799
|
-
const days = getWeekendsDaysInDateRange(todayAtO, visibleDays);
|
|
7701
|
+
const days = getWeekendsDaysInDateRange(initialDate, visibleDays);
|
|
6800
7702
|
return days.map(it => {
|
|
6801
7703
|
const endDate = new Date(it);
|
|
6802
7704
|
endDate.setDate(it.getDate() + 1);
|
|
@@ -6888,7 +7790,7 @@ const Scheduler = (props) => {
|
|
|
6888
7790
|
return (jsx("div", { style: {
|
|
6889
7791
|
...style,
|
|
6890
7792
|
backgroundColor: rowColor
|
|
6891
|
-
}, children: jsx(SchedulerRow, { events: events.filter((it) => it.rowId === row.rowId), backgroundEvents: backgroundEvents.filter((it) => it.rowId === row.rowId), rowHeader: header, EventComp: EventComp, BackgroundEventComp: BackgroundEventComp, RowTitleComp: RowTitleComp, weekendLines: weekendsLines, divisionLines: divisionLines, timeLinePercentage: timeLinePercentage, rowHeightInRem: rowsHeight, onEvent: onEvent, contextMenuItems: contextMenuItems, visibleDays: visibleDays, selectedDate: selectedDate }) }));
|
|
7793
|
+
}, children: jsx(SchedulerRow, { events: events.filter((it) => it.rowId === row.rowId), backgroundEvents: backgroundEvents.filter((it) => it.rowId === row.rowId), rowHeader: header, EventComp: EventComp, BackgroundEventComp: BackgroundEventComp, RowTitleComp: RowTitleComp, weekendLines: weekendsLines, divisionLines: divisionLines, timeLinePercentage: timeLinePercentage, rowHeightInRem: rowsHeight, onEvent: onEvent, contextMenuItems: contextMenuItems, visibleDays: visibleDays, selectedDate: selectedDate }) }, row.rowId));
|
|
6892
7794
|
});
|
|
6893
7795
|
const getItemSize = useCallback((index) => {
|
|
6894
7796
|
const row = rows[index];
|
|
@@ -6937,8 +7839,7 @@ class CwSuperScheduler extends React.Component {
|
|
|
6937
7839
|
let returnedHeight = 50;
|
|
6938
7840
|
let data;
|
|
6939
7841
|
if (this.props.pinnedResources) {
|
|
6940
|
-
|
|
6941
|
-
pinned = lodash.uniq(pinned);
|
|
7842
|
+
const pinned = [...new Set(this.props.pinnedResources)];
|
|
6942
7843
|
for (let i = 0; i < pinned.length; i++) {
|
|
6943
7844
|
data = this.returnDynamicHeight(pinned[i], returnedTops);
|
|
6944
7845
|
returnedTops = data.topsCalculated;
|
|
@@ -7269,25 +8170,26 @@ const onClickMenuItem = (e, event) => {
|
|
|
7269
8170
|
const PinRowHeader = ({ value, width, onEvent }) => {
|
|
7270
8171
|
const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
|
|
7271
8172
|
const { highlightColor, isLoading } = value;
|
|
7272
|
-
return (
|
|
7273
|
-
|
|
7274
|
-
|
|
7275
|
-
|
|
7276
|
-
onEvent(
|
|
7277
|
-
}
|
|
7278
|
-
|
|
7279
|
-
|
|
7280
|
-
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
|
|
7284
|
-
|
|
7285
|
-
|
|
8173
|
+
return (jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
|
|
8174
|
+
items: value.contextMenuItems,
|
|
8175
|
+
onClick: (e) => {
|
|
8176
|
+
onClickMenuItem(e, () => {
|
|
8177
|
+
onEvent(new OnClickContextMenu(value.rowId, e.key));
|
|
8178
|
+
});
|
|
8179
|
+
},
|
|
8180
|
+
onMouseLeave: () => setIsContextMenuOpen(false),
|
|
8181
|
+
}, trigger: ["contextMenu"], overlayStyle: { animationDuration: "0" }, arrow: (value.contextMenuItems?.length ?? 0) > 0, children: jsx(CwGenericTooltip, { content: value.tooltip, position: "right", dissapearsWhenHover: true, overlayStyle: value.overlayTooltipStyle, children: jsxs("div", { style: {
|
|
8182
|
+
width: width,
|
|
8183
|
+
background: highlightColor,
|
|
8184
|
+
}, className: styles["super-scheduler-row-header"], children: [jsx("button", { className: "cw-button-icon cwi-pin", "data-pinned": value.isPinned, onClick: (_) => {
|
|
8185
|
+
onEvent(value.isPinned ? new OnUnpinRow(value.rowId) : new OnPinRow(value.rowId));
|
|
8186
|
+
} }), jsx("div", { className: styles["indicators"], children: value.indicators ?? undefined }), jsxs("div", { style: {
|
|
7286
8187
|
display: "flex",
|
|
7287
8188
|
flexDirection: "column",
|
|
7288
8189
|
justifyContent: "center",
|
|
7289
8190
|
alignItems: "flex-start",
|
|
7290
|
-
}, children: [jsxs("div", { children: [jsx("strong", { children: value.title }), value.title2 && jsxs("span", { children: ["-", value.title2] }), " ", jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 &&
|
|
8191
|
+
}, children: [jsxs("div", { children: [jsx("strong", { children: value.title }), value.title2 && jsxs("span", { children: ["-", value.title2] }), " ", jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 &&
|
|
8192
|
+
jsxs("span", { className: styles["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }), isLoading ? jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }) }, value.rowId) }, value.rowId));
|
|
7291
8193
|
};
|
|
7292
8194
|
|
|
7293
8195
|
const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents, contextMenuItems, onEvent }) => {
|
|
@@ -7299,167 +8201,240 @@ const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory,
|
|
|
7299
8201
|
}, children: "Clear pinned" }) })] })), jsx(Scheduler, { id: `${id}-notPinned`, state: { ...state, isHeaderVisible: !isFirstVisible }, header: header, rows: notPinnedRows, events: events, backgroundEvents: backgroundEvents, contextMenuItems: contextMenuItems, orderCategories: unPinnedOrderCategory, onEvent: onEvent, EventComp: SchedulerEvent, RowTitleComp: PinRowHeader })] }));
|
|
7300
8202
|
};
|
|
7301
8203
|
|
|
7302
|
-
const {
|
|
7303
|
-
|
|
7304
|
-
|
|
7305
|
-
|
|
7306
|
-
|
|
7307
|
-
|
|
7308
|
-
|
|
7309
|
-
|
|
7310
|
-
|
|
7311
|
-
|
|
7312
|
-
|
|
7313
|
-
|
|
7314
|
-
|
|
7315
|
-
|
|
7316
|
-
|
|
7317
|
-
|
|
7318
|
-
|
|
7319
|
-
|
|
7320
|
-
|
|
7321
|
-
|
|
7322
|
-
|
|
7323
|
-
|
|
7324
|
-
|
|
7325
|
-
|
|
7326
|
-
|
|
7327
|
-
|
|
8204
|
+
const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder = "Search airport…", required = false, cblConfig, className = "", value, disabled = false, displayMode, width }) => {
|
|
8205
|
+
// State
|
|
8206
|
+
const [inputValue, setInputValue] = useState("");
|
|
8207
|
+
const [options, setOptions] = useState([]);
|
|
8208
|
+
const [airports, setAirports] = useState([]);
|
|
8209
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
8210
|
+
const [isInitialLoading, setIsInitialLoading] = useState(false);
|
|
8211
|
+
const [showDropdown, setShowDropdown] = useState(false);
|
|
8212
|
+
const [highlightedIndex, setHighlightedIndex] = useState(-1);
|
|
8213
|
+
const [tooltipText, setTooltipText] = useState("");
|
|
8214
|
+
// Refs
|
|
8215
|
+
const inputRef = useRef(null);
|
|
8216
|
+
const dropdownRef = useRef(null);
|
|
8217
|
+
const searchTimeoutRef = useRef();
|
|
8218
|
+
// Utility function to extract ICAO from DisplayAirportText
|
|
8219
|
+
const extractIcao = useCallback((displayText) => {
|
|
8220
|
+
const match = displayText.match(/^([A-Z]{4})\(/);
|
|
8221
|
+
return match ? match[1] : displayText;
|
|
8222
|
+
}, []);
|
|
8223
|
+
// Utility function to extract IATA from DisplayAirportText
|
|
8224
|
+
const extractIata = useCallback((displayText) => {
|
|
8225
|
+
const match = displayText.match(/\(([A-Z]{3})\)/);
|
|
8226
|
+
return match ? match[1] : displayText;
|
|
8227
|
+
}, []);
|
|
8228
|
+
// Utility function to get short code (ICAO(IATA) format - original behavior)
|
|
8229
|
+
const getShortCode = useCallback((displayText) => {
|
|
8230
|
+
const match = displayText.match(/([A-Z]{4})\(([A-Z]{3})\)/);
|
|
8231
|
+
if (match && match.length >= 3) {
|
|
8232
|
+
return `${match[1]}(${match[2]})`;
|
|
7328
8233
|
}
|
|
7329
|
-
|
|
7330
|
-
|
|
7331
|
-
|
|
7332
|
-
|
|
7333
|
-
|
|
7334
|
-
|
|
7335
|
-
|
|
7336
|
-
|
|
7337
|
-
|
|
7338
|
-
|
|
7339
|
-
|
|
7340
|
-
|
|
7341
|
-
|
|
7342
|
-
|
|
7343
|
-
|
|
7344
|
-
|
|
7345
|
-
|
|
7346
|
-
|
|
7347
|
-
|
|
7348
|
-
|
|
7349
|
-
|
|
7350
|
-
|
|
7351
|
-
|
|
7352
|
-
|
|
7353
|
-
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7359
|
-
|
|
7360
|
-
|
|
7361
|
-
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
|
|
7365
|
-
|
|
7366
|
-
|
|
7367
|
-
|
|
7368
|
-
|
|
7369
|
-
|
|
7370
|
-
|
|
7371
|
-
|
|
7372
|
-
|
|
7373
|
-
|
|
7374
|
-
|
|
7375
|
-
|
|
7376
|
-
|
|
7377
|
-
|
|
7378
|
-
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
8234
|
+
return displayText;
|
|
8235
|
+
}, []);
|
|
8236
|
+
// Utility function to get display text for INPUT based on mode
|
|
8237
|
+
const getInputDisplayText = useCallback((airport) => {
|
|
8238
|
+
const fullText = airport.DisplayAirportText;
|
|
8239
|
+
switch (displayMode) {
|
|
8240
|
+
case "icao-only":
|
|
8241
|
+
return extractIcao(fullText);
|
|
8242
|
+
case "iata-only":
|
|
8243
|
+
return extractIata(fullText);
|
|
8244
|
+
case "full-text":
|
|
8245
|
+
return fullText;
|
|
8246
|
+
case "default":
|
|
8247
|
+
default:
|
|
8248
|
+
// Default: ICAO(IATA) - same as original getShortCode behavior
|
|
8249
|
+
return getShortCode(fullText);
|
|
8250
|
+
}
|
|
8251
|
+
}, [displayMode, extractIcao, extractIata, getShortCode]);
|
|
8252
|
+
// Utility function to get display text for DROPDOWN (always full text)
|
|
8253
|
+
const getDropdownDisplayText = useCallback((airport) => {
|
|
8254
|
+
return airport.DisplayAirportText;
|
|
8255
|
+
}, []);
|
|
8256
|
+
// Fetch airport data by ID
|
|
8257
|
+
const fetchAirportData = useCallback(async (airportId) => {
|
|
8258
|
+
setIsInitialLoading(true);
|
|
8259
|
+
try {
|
|
8260
|
+
const response = await fetch(`${cblConfig}api/data/airport?airportId=${airportId}`);
|
|
8261
|
+
const result = await response.json();
|
|
8262
|
+
const airport = result;
|
|
8263
|
+
const inputText = getInputDisplayText(airport);
|
|
8264
|
+
const dropdownText = getDropdownDisplayText(airport);
|
|
8265
|
+
setAirports([airport]);
|
|
8266
|
+
setOptions([{ value: airport.AptKey, text: dropdownText }]);
|
|
8267
|
+
setInputValue(inputText);
|
|
8268
|
+
setTooltipText(airport.DisplayAirportText);
|
|
8269
|
+
}
|
|
8270
|
+
catch (error) {
|
|
8271
|
+
console.error("Error fetching airport data:", error);
|
|
8272
|
+
}
|
|
8273
|
+
finally {
|
|
8274
|
+
setIsInitialLoading(false);
|
|
8275
|
+
}
|
|
8276
|
+
}, [cblConfig, getInputDisplayText, getDropdownDisplayText]);
|
|
8277
|
+
// Map searchType string to number for API
|
|
8278
|
+
const getSearchTypeNumber = useCallback((type) => {
|
|
8279
|
+
switch (type) {
|
|
8280
|
+
case "OnlyDatabase": return 0;
|
|
8281
|
+
case "DatabaseAndProviders": return 1;
|
|
8282
|
+
case "OnlyProviders": return 2;
|
|
8283
|
+
default: return 0;
|
|
8284
|
+
}
|
|
8285
|
+
}, []);
|
|
8286
|
+
// Search airports
|
|
8287
|
+
const searchAirports = useCallback(async (searchText) => {
|
|
8288
|
+
if (searchText.length < 2) {
|
|
8289
|
+
setOptions([]);
|
|
8290
|
+
setAirports([]);
|
|
8291
|
+
setShowDropdown(false);
|
|
8292
|
+
return;
|
|
8293
|
+
}
|
|
8294
|
+
setIsLoading(true);
|
|
8295
|
+
try {
|
|
8296
|
+
const searchTypeNumber = getSearchTypeNumber(searchType);
|
|
8297
|
+
const response = await fetch(`${cblConfig}controls/cblFindAirport/cblFindAirport/SearchAirportCodeName?text=${searchText}&searchType=${searchTypeNumber}`);
|
|
8298
|
+
const results = await response.json();
|
|
8299
|
+
const newOptions = [];
|
|
8300
|
+
const newAirports = [];
|
|
8301
|
+
results.forEach((airport) => {
|
|
8302
|
+
const displayText = getDropdownDisplayText(airport);
|
|
8303
|
+
newOptions.push({ value: airport.AptKey, text: displayText });
|
|
8304
|
+
newAirports.push(airport);
|
|
7386
8305
|
});
|
|
8306
|
+
setOptions(newOptions);
|
|
8307
|
+
setAirports(newAirports);
|
|
8308
|
+
setShowDropdown(newOptions.length > 0);
|
|
8309
|
+
setHighlightedIndex(-1);
|
|
8310
|
+
}
|
|
8311
|
+
catch (error) {
|
|
8312
|
+
console.error("Error searching airports:", error);
|
|
8313
|
+
setOptions([]);
|
|
8314
|
+
setAirports([]);
|
|
8315
|
+
setShowDropdown(false);
|
|
8316
|
+
}
|
|
8317
|
+
finally {
|
|
8318
|
+
setIsLoading(false);
|
|
8319
|
+
}
|
|
8320
|
+
}, [cblConfig, getDropdownDisplayText, searchType, getSearchTypeNumber]);
|
|
8321
|
+
// Debounced search
|
|
8322
|
+
const debouncedSearch = useCallback((searchText) => {
|
|
8323
|
+
if (searchTimeoutRef.current) {
|
|
8324
|
+
window.clearTimeout(searchTimeoutRef.current);
|
|
8325
|
+
}
|
|
8326
|
+
searchTimeoutRef.current = window.setTimeout(() => {
|
|
8327
|
+
searchAirports(searchText);
|
|
8328
|
+
}, 300); // 300ms debounce
|
|
8329
|
+
}, [searchAirports]);
|
|
8330
|
+
// Handle input change
|
|
8331
|
+
const handleInputChange = (e) => {
|
|
8332
|
+
const newValue = e.target.value;
|
|
8333
|
+
setInputValue(newValue);
|
|
8334
|
+
if (newValue !== inputValue) {
|
|
8335
|
+
debouncedSearch(newValue);
|
|
8336
|
+
}
|
|
8337
|
+
};
|
|
8338
|
+
// Handle option selection
|
|
8339
|
+
const handleOptionSelect = async (optionValue) => {
|
|
8340
|
+
const selectedAirport = airports.find(apt => apt.AptKey === optionValue);
|
|
8341
|
+
if (!selectedAirport)
|
|
8342
|
+
return;
|
|
8343
|
+
setShowDropdown(false);
|
|
8344
|
+
// Handle provider airports (keeping original logic)
|
|
8345
|
+
if (selectedAirport.isAirportFromProvider) {
|
|
8346
|
+
try {
|
|
8347
|
+
const response = await fetch(`${cblConfig}controls/cblFindAirport/cblFindAirport/GetCblAirport?IATAICAO=${selectedAirport.AptIcao}&update=false`);
|
|
8348
|
+
const result = await response.json();
|
|
8349
|
+
const resultAirport = result;
|
|
8350
|
+
const inputText = getInputDisplayText(resultAirport);
|
|
8351
|
+
const dropdownText = getDropdownDisplayText(resultAirport);
|
|
8352
|
+
setInputValue(inputText);
|
|
8353
|
+
setTooltipText(result.DisplayAirportText);
|
|
8354
|
+
setAirports([result]);
|
|
8355
|
+
setOptions([{ value: result.AptKey, text: dropdownText }]);
|
|
8356
|
+
handleChange(result.AptKey);
|
|
8357
|
+
}
|
|
8358
|
+
catch (error) {
|
|
8359
|
+
console.error("Error fetching provider airport:", error);
|
|
8360
|
+
}
|
|
7387
8361
|
}
|
|
7388
8362
|
else {
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
});
|
|
8363
|
+
const inputText = getInputDisplayText(selectedAirport);
|
|
8364
|
+
setInputValue(inputText);
|
|
8365
|
+
setTooltipText(getDropdownDisplayText(selectedAirport));
|
|
8366
|
+
handleChange(optionValue);
|
|
7394
8367
|
}
|
|
7395
|
-
}
|
|
7396
|
-
|
|
7397
|
-
|
|
7398
|
-
|
|
7399
|
-
|
|
7400
|
-
|
|
7401
|
-
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7405
|
-
|
|
7406
|
-
|
|
7407
|
-
|
|
7408
|
-
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
|
|
7414
|
-
|
|
7415
|
-
|
|
7416
|
-
|
|
7417
|
-
|
|
7418
|
-
|
|
7419
|
-
airports: airports2,
|
|
7420
|
-
searchingAtProviders: false,
|
|
7421
|
-
});
|
|
7422
|
-
});
|
|
8368
|
+
};
|
|
8369
|
+
// Handle keyboard navigation
|
|
8370
|
+
const handleKeyDown = (e) => {
|
|
8371
|
+
if (!showDropdown || options.length === 0)
|
|
8372
|
+
return;
|
|
8373
|
+
switch (e.key) {
|
|
8374
|
+
case "ArrowDown":
|
|
8375
|
+
e.preventDefault();
|
|
8376
|
+
setHighlightedIndex(prev => prev < options.length - 1 ? prev + 1 : 0);
|
|
8377
|
+
break;
|
|
8378
|
+
case "ArrowUp":
|
|
8379
|
+
e.preventDefault();
|
|
8380
|
+
setHighlightedIndex(prev => prev > 0 ? prev - 1 : options.length - 1);
|
|
8381
|
+
break;
|
|
8382
|
+
case "Enter":
|
|
8383
|
+
e.preventDefault();
|
|
8384
|
+
if (highlightedIndex >= 0 && highlightedIndex < options.length) {
|
|
8385
|
+
handleOptionSelect(options[highlightedIndex].value);
|
|
8386
|
+
}
|
|
8387
|
+
break;
|
|
8388
|
+
case "Escape":
|
|
8389
|
+
setShowDropdown(false);
|
|
8390
|
+
setHighlightedIndex(-1);
|
|
8391
|
+
break;
|
|
7423
8392
|
}
|
|
7424
|
-
}
|
|
7425
|
-
//
|
|
7426
|
-
|
|
7427
|
-
|
|
7428
|
-
|
|
7429
|
-
|
|
7430
|
-
|
|
7431
|
-
|
|
7432
|
-
|
|
7433
|
-
|
|
7434
|
-
|
|
7435
|
-
|
|
7436
|
-
|
|
7437
|
-
|
|
7438
|
-
|
|
7439
|
-
|
|
7440
|
-
|
|
7441
|
-
|
|
7442
|
-
});
|
|
7443
|
-
this.setState({
|
|
7444
|
-
data: data2,
|
|
7445
|
-
airports: airports2,
|
|
7446
|
-
searchingAtProviders: false,
|
|
7447
|
-
});
|
|
7448
|
-
});
|
|
7449
|
-
}
|
|
7450
|
-
getShortCode(text) {
|
|
7451
|
-
const match = text.match(/([A-Z]{4})\(([A-Z]{3})\)/);
|
|
7452
|
-
if (match && match.length >= 3) {
|
|
7453
|
-
return `${match[1]}(${match[2]})`;
|
|
8393
|
+
};
|
|
8394
|
+
// Handle clicks outside dropdown
|
|
8395
|
+
useEffect(() => {
|
|
8396
|
+
const handleClickOutside = (event) => {
|
|
8397
|
+
if (dropdownRef.current &&
|
|
8398
|
+
!dropdownRef.current.contains(event.target) &&
|
|
8399
|
+
!inputRef.current?.contains(event.target)) {
|
|
8400
|
+
setShowDropdown(false);
|
|
8401
|
+
setHighlightedIndex(-1);
|
|
8402
|
+
}
|
|
8403
|
+
};
|
|
8404
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
8405
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
8406
|
+
}, []);
|
|
8407
|
+
// Load initial value
|
|
8408
|
+
useEffect(() => {
|
|
8409
|
+
if (value && value !== 0 && value !== -1) {
|
|
8410
|
+
fetchAirportData(value);
|
|
7454
8411
|
}
|
|
7455
|
-
|
|
7456
|
-
|
|
7457
|
-
|
|
7458
|
-
|
|
7459
|
-
|
|
7460
|
-
|
|
7461
|
-
|
|
7462
|
-
|
|
7463
|
-
}
|
|
8412
|
+
}, [value, fetchAirportData]);
|
|
8413
|
+
useEffect(() => {
|
|
8414
|
+
if (!value || value === 0 || value === -1) {
|
|
8415
|
+
setInputValue("");
|
|
8416
|
+
setTooltipText("");
|
|
8417
|
+
setOptions([]);
|
|
8418
|
+
setAirports([]);
|
|
8419
|
+
}
|
|
8420
|
+
}, [value]);
|
|
8421
|
+
// Handle input focus
|
|
8422
|
+
const handleInputFocus = () => {
|
|
8423
|
+
if (options.length > 0) {
|
|
8424
|
+
setShowDropdown(true);
|
|
8425
|
+
}
|
|
8426
|
+
};
|
|
8427
|
+
// Clear selection
|
|
8428
|
+
const handleClear = () => {
|
|
8429
|
+
setInputValue("");
|
|
8430
|
+
setTooltipText("");
|
|
8431
|
+
setOptions([]);
|
|
8432
|
+
setAirports([]);
|
|
8433
|
+
setShowDropdown(false);
|
|
8434
|
+
handleChange(0); // or -1, depending on API expectations
|
|
8435
|
+
inputRef.current?.focus();
|
|
8436
|
+
};
|
|
8437
|
+
return (jsxs("div", { className: `cw-find-airport ${className}`, style: width ? { width } : undefined, children: [jsxs("div", { className: "cw-find-airport-input-wrapper", children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onFocus: handleInputFocus, placeholder: isInitialLoading ? "Loading…" : placeHolder, disabled: disabled, required: required, autoComplete: "off", "aria-expanded": showDropdown, "aria-haspopup": "listbox", role: "combobox", title: tooltipText }), (isLoading || isInitialLoading) && (jsx("div", { className: "cw-find-airport-loading", children: jsx(CwIcon, { iconId: "spinner" }) })), inputValue && !disabled && !isInitialLoading && (jsx(CwButton, { type: "button", onClick: handleClear, "aria-label": "Clear selected airport", variant: "icon", icon: "close", color: "neutral" }))] }), showDropdown && options.length > 0 && (jsx("div", { ref: dropdownRef, className: "cw-find-airport-dropdown", role: "listbox", children: options.map((option, index) => (jsx("div", { className: `cw-find-airport-option ${index === highlightedIndex ? "highlighted" : ""}`, onClick: () => handleOptionSelect(option.value), role: "option", "aria-selected": index === highlightedIndex, children: option.text }, option.value))) }))] }));
|
|
8438
|
+
};
|
|
7464
8439
|
|
|
7465
|
-
export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwBtnAdd, CwBtnAddFolder, CwBtnAirport, CwBtnAlert, CwBtnApprove, CwBtnBookMark, CwBtnBulkDuty, CwBtnCancel, CwBtnCrewPlanning, CwBtnDelay, CwBtnDelete, CwBtnDownLoadAllInfo, CwBtnDownload, CwBtnDropDownMenu, CwBtnEdit, CwBtnEditFolder, CwBtnFiles, CwBtnGeneratePairing, CwBtnGoBackFolder, CwBtnHide, CwBtnImportRequests, CwBtnMVT, CwBtnNavFirstItemView, CwBtnNavLastItemView, CwBtnNavNextDay, CwBtnNavPreviewItem, CwBtnPairing, CwBtnPrint, CwBtnPropertyFolder, CwBtnPublish, CwBtnRefresh, CwBtnReleasePeriod, CwBtnSave, CwBtnSearch, CwBtnSelect, CwBtnShare, CwBtnStatistic, CwBtnUploadFiles, CwBtnVacations, CwBtnView, CwButton, CwButtonDef, CwCard, CwCardList, CwCheckbox, CwChip, CwContextMenu, CwContextualMenu, CwDialog, CwDialogManager, CwDigit, CwDisplayMessage, CwDropdown, CwDropdownContainer, CwDropdownFilter,
|
|
8440
|
+
export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwBtnAdd, CwBtnAddFolder, CwBtnAirport, CwBtnAlert, CwBtnApprove, CwBtnBookMark, CwBtnBulkDuty, CwBtnCancel, CwBtnCrewPlanning, CwBtnDelay, CwBtnDelete, CwBtnDownLoadAllInfo, CwBtnDownload, CwBtnDropDownMenu, CwBtnEdit, CwBtnEditFolder, CwBtnFiles, CwBtnGeneratePairing, CwBtnGoBackFolder, CwBtnHide, CwBtnImportRequests, CwBtnMVT, CwBtnNavFirstItemView, CwBtnNavLastItemView, CwBtnNavNextDay, CwBtnNavPreviewItem, CwBtnPairing, CwBtnPrint, CwBtnPropertyFolder, CwBtnPublish, CwBtnRefresh, CwBtnReleasePeriod, CwBtnSave, CwBtnSearch, CwBtnSelect, CwBtnShare, CwBtnStatistic, CwBtnUploadFiles, CwBtnVacations, CwBtnView, CwButton, CwButtonDef, CwCard, CwCardList, CwCheckbox, CwChip, CwColorPicker, CwConfirmationPopup, CwContextMenu, CwContextualMenu, CwDialog, CwDialogManager, CwDigit, CwDisplayMessage, CwDropdown, CwDropdownContainer, CwDropdownFilter, CwExpandable, CwFileUpload, CwFileUploadMultiple, CwFindAirport, CwFloatingButton, CwGenericTooltip, CwHeadFilter, CwHeadingMain, CwHeadingSecond, CwIcon, CwImageArea, CwImageGallery, CwImageZoom, CwInput, CwInputColor, CwInputDate, CwInputDatePicker, CwInputDateText, CwInputDatetime, CwInputImage, CwInputNumber, CwInputPhone, CwInputText, CwKeyValueList, CwLabel, CwLoading, CwLoadingSmall, CwMessage, CwMessageManager, CwMessageType, CwModal, CwModalConfirm, CwModalHover, CwModalIframe, CwModalReportFunctional, CwMultiFilter, CwMultiFilterTag, CwMultiselect, CwNote, CwOption, CwOptionList, CwReportModal, CwScheduler, CwScheduler2, CwSearchInput, CwSelect, CwSelectList, CwSelectListItems, CwSortableList, CwSuperScheduler, CwTable, CwTableGrouped, CwTabs, CwTag, CwTextArea, CwTime, CwToggle, CwTooltip, CwTreeView, CwWeekdaySelector, DefaultRowHeader, MultiSelect, OnClearPinned, OnClickContextMenu, OnClickEvent, OnClickRowEvent, OnClickRowHeader, OnClickUtc, OnDoubleClickEvent, OnDoubleClickRowEvent, OnDragEvent, OnDropCtrlEvent, OnDropEvent, OnEndClickHeaderEvent, OnLeftDragStart, OnMultiClickEvent, OnPinRow, OnRangeClickEvent, OnRightClickEvent, OnRightClickRow, OnRightDragStart, OnStartClickHeaderEvent, OnUnpinRow, PinRowHeader, Resource, Scheduler, SchedulerEvent, SuperScheduler, UiEvent, Weekdays, cblEvent, eventIsVisible, getDefaultDivisions, getEventSizes, itemsToMultiFilterTags, useCwMessage, useSortableList };
|