@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.cjs.js
CHANGED
|
@@ -221,13 +221,20 @@ function getContrastColor(color) {
|
|
|
221
221
|
* <CwIcon iconId="house" source="fontawesome" /> // Uses FontAwesome
|
|
222
222
|
*/
|
|
223
223
|
function CwIcon(props) {
|
|
224
|
-
const { iconId, source = 'cwellt', ...iconProps } = props;
|
|
224
|
+
const { iconId, source = 'cwellt', color, size, ...iconProps } = props;
|
|
225
|
+
const getClassName = (baseClass) => {
|
|
226
|
+
return [
|
|
227
|
+
baseClass,
|
|
228
|
+
color && `cw-color-${color}`,
|
|
229
|
+
size && `cw-font-size-${size}`
|
|
230
|
+
].filter(Boolean).join(' ');
|
|
231
|
+
};
|
|
225
232
|
// Return appropriate icon based on source
|
|
226
233
|
if (source === 'fontawesome') {
|
|
227
|
-
return jsxRuntime.jsx("span", { ...iconProps, className: `fa fa-${iconId}` });
|
|
234
|
+
return jsxRuntime.jsx("span", { ...iconProps, className: getClassName(`fa fa-${iconId}`) });
|
|
228
235
|
}
|
|
229
236
|
// Use custom icon font
|
|
230
|
-
return jsxRuntime.jsx("span", { ...iconProps, className: `cwi-icons cwi-${iconId}` });
|
|
237
|
+
return jsxRuntime.jsx("span", { ...iconProps, className: getClassName(`cwi-icons cwi-${iconId}`) });
|
|
231
238
|
}
|
|
232
239
|
|
|
233
240
|
/**
|
|
@@ -247,7 +254,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
|
|
|
247
254
|
}
|
|
248
255
|
// Calculate styles based on colorScheme, customColor and variant
|
|
249
256
|
const chipStyle = React.useMemo(() => {
|
|
250
|
-
if (
|
|
257
|
+
if (customColor) {
|
|
251
258
|
if (variant === 'outline') {
|
|
252
259
|
// For outline, customColor is used for border and text
|
|
253
260
|
return {
|
|
@@ -286,7 +293,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
|
|
|
286
293
|
function CwTag(tagProps) {
|
|
287
294
|
const hideTag = (event_clickTag) => {
|
|
288
295
|
const tag = event_clickTag.currentTarget.parentElement;
|
|
289
|
-
tag?.classList.add("
|
|
296
|
+
tag?.classList.add("tag-hidden");
|
|
290
297
|
};
|
|
291
298
|
const onClickClosableCustomTag = (event_clickClosableT) => {
|
|
292
299
|
hideTag(event_clickClosableT);
|
|
@@ -300,10 +307,7 @@ function CwTag(tagProps) {
|
|
|
300
307
|
tagProps.onClickTag(event_clickTag);
|
|
301
308
|
}
|
|
302
309
|
};
|
|
303
|
-
return (jsxRuntime.jsxs("div", { className: tagProps.closableTag
|
|
304
|
-
? tagProps.className + " cwelltTag cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
|
|
305
|
-
: 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: [jsxRuntime.jsx("span", { className: tagProps.classNameTag_description +
|
|
306
|
-
" cwelltTag_desc cwellt_flex cwellt_justify_flex_start cwellt_align_items_center", style: tagProps.styleTag_description, children: tagProps.children }), tagProps.closableTag && (jsxRuntime.jsx("span", { className: "cwi-icons cwi-close", onClick: event_clickClosableT => onClickClosableCustomTag(event_clickClosableT), style: tagProps.styleClosableButton }))] }));
|
|
310
|
+
return (jsxRuntime.jsxs("div", { className: "cw-tag", style: tagProps.styleTag, onClick: event_clickTag => onClickCustomTag(event_clickTag), id: tagProps.idTag, ref: tagProps.ref, children: [jsxRuntime.jsx("strong", { style: tagProps.styleTag_description, children: tagProps.children }), tagProps.closableTag && (jsxRuntime.jsx(CwIcon, { iconId: "close", onClick: event_clickClosableT => onClickClosableCustomTag(event_clickClosableT) }))] }));
|
|
307
311
|
}
|
|
308
312
|
|
|
309
313
|
const CW_DEFAULT_MESSAGE_DURATION = 2000;
|
|
@@ -321,8 +325,35 @@ const CwMessage = props => {
|
|
|
321
325
|
}, props.duration ?? CW_DEFAULT_MESSAGE_DURATION);
|
|
322
326
|
return () => clearTimeout(timer);
|
|
323
327
|
}, [props]);
|
|
324
|
-
return (jsxRuntime.
|
|
328
|
+
return (jsxRuntime.jsxs("div", { className: "cw-message", "data-message-type": Object.keys(exports.CwMessageType).find(key => exports.CwMessageType[key] === props.messageType), children: [props.messageType && jsxRuntime.jsx(CwIcon, { iconId: props.messageType.toString(), size: "large" }), props.message] }));
|
|
325
329
|
};
|
|
330
|
+
/**
|
|
331
|
+
* Hook for displaying inline messages within specific components.
|
|
332
|
+
* Messages appear where you place the RenderMessage component, perfect for form validation
|
|
333
|
+
* and contextual feedback.
|
|
334
|
+
*
|
|
335
|
+
* @returns Object with showMessage function and RenderMessage component
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* const { showMessage, RenderMessage } = useCwMessage();
|
|
340
|
+
*
|
|
341
|
+
* const handleValidation = () => {
|
|
342
|
+
* showMessage({
|
|
343
|
+
* message: "Please fill all required fields",
|
|
344
|
+
* messageType: CwMessageType.ERROR,
|
|
345
|
+
* duration: 3000
|
|
346
|
+
* });
|
|
347
|
+
* };
|
|
348
|
+
*
|
|
349
|
+
* return (
|
|
350
|
+
* <div>
|
|
351
|
+
* {RenderMessage}
|
|
352
|
+
* <button onClick={handleValidation}>Submit</button>
|
|
353
|
+
* </div>
|
|
354
|
+
* );
|
|
355
|
+
* ```
|
|
356
|
+
*/
|
|
326
357
|
const useCwMessage = () => {
|
|
327
358
|
const [isVisible, setIsVisible] = React.useState(false);
|
|
328
359
|
const [message, setMessage] = React.useState("");
|
|
@@ -342,30 +373,24 @@ const useCwMessage = () => {
|
|
|
342
373
|
};
|
|
343
374
|
class CwMessageManager {
|
|
344
375
|
static instance;
|
|
345
|
-
|
|
376
|
+
messageWrapper = null;
|
|
346
377
|
root;
|
|
347
|
-
constructor() {
|
|
348
|
-
this.init();
|
|
349
|
-
}
|
|
350
378
|
static getInstance() {
|
|
351
379
|
if (!CwMessageManager.instance) {
|
|
352
380
|
CwMessageManager.instance = new CwMessageManager();
|
|
381
|
+
CwMessageManager.instance.init();
|
|
353
382
|
}
|
|
354
383
|
return CwMessageManager.instance;
|
|
355
384
|
}
|
|
356
385
|
init() {
|
|
357
|
-
this.
|
|
358
|
-
this.
|
|
359
|
-
|
|
360
|
-
this.
|
|
361
|
-
this.messageContainer.style.setProperty("top", "0");
|
|
362
|
-
this.messageContainer.style.setProperty("z-index", "999999");
|
|
363
|
-
document.body.prepend(this.messageContainer);
|
|
364
|
-
this.root = client.createRoot(this.messageContainer); // Create a root at the messageContainer
|
|
386
|
+
this.messageWrapper = document.createElement("div");
|
|
387
|
+
this.messageWrapper.className = "cw-message-wrapper";
|
|
388
|
+
document.body.prepend(this.messageWrapper);
|
|
389
|
+
this.root = client.createRoot(this.messageWrapper); // Create a root at the messageWrapper
|
|
365
390
|
}
|
|
366
391
|
showMessage(message, type, duration) {
|
|
367
392
|
const msg = document.createElement("div");
|
|
368
|
-
this.
|
|
393
|
+
this.messageWrapper?.prepend(msg);
|
|
369
394
|
const msgRoot = client.createRoot(msg); // Create a root for the new message
|
|
370
395
|
msgRoot.render(jsxRuntime.jsx(CwMessage, { message: message, messageType: type, duration: duration, onClose: () => this.closeMessage(msgRoot) }));
|
|
371
396
|
}
|
|
@@ -373,10 +398,270 @@ class CwMessageManager {
|
|
|
373
398
|
msgRoot.unmount(); // Unmount the message root
|
|
374
399
|
}
|
|
375
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Display a global TOAST message that appears floating at the top right of the screen.
|
|
403
|
+
* Perfect for system-wide notifications and cross-component alerts.
|
|
404
|
+
*
|
|
405
|
+
* @param message - Text to display in the message
|
|
406
|
+
* @param type - Message type for styling and icon (SUCCESS, ERROR, WARN, INFO)
|
|
407
|
+
* @param duration - Auto-close duration in milliseconds (default: 2000)
|
|
408
|
+
*
|
|
409
|
+
* @example
|
|
410
|
+
* ```typescript
|
|
411
|
+
* CwDisplayMessage("Data saved successfully!", CwMessageType.SUCCESS);
|
|
412
|
+
* CwDisplayMessage("Connection failed", CwMessageType.ERROR, 5000);
|
|
413
|
+
* ```
|
|
414
|
+
*
|
|
415
|
+
* @note For inline messages within components, use `CwNote` or `useCwMessage` hook instead
|
|
416
|
+
*/
|
|
376
417
|
function CwDisplayMessage(message, type, duration) {
|
|
377
418
|
CwMessageManager.getInstance().showMessage(message, type, duration);
|
|
378
419
|
}
|
|
379
420
|
|
|
421
|
+
/**
|
|
422
|
+
* CwNote - Inline note component for instructions and contextual content
|
|
423
|
+
*
|
|
424
|
+
* @example
|
|
425
|
+
* <CwNote content="Use the search box to filter results" color="neutral" icon="search" />
|
|
426
|
+
* <CwNote
|
|
427
|
+
* content="Failed to load data"
|
|
428
|
+
* variant="solid"
|
|
429
|
+
* color="danger"
|
|
430
|
+
* icon="warning"
|
|
431
|
+
* onDismiss={() => console.log('dismissed')}
|
|
432
|
+
* />
|
|
433
|
+
* <CwNote variant="outline" color="success" icon="check">
|
|
434
|
+
* <p>Step 1: Configure your project settings</p>
|
|
435
|
+
* <p>Step 2: Validate configuration before proceeding</p>
|
|
436
|
+
* </CwNote>
|
|
437
|
+
* <CwNote className="custom-class" icon="lightbulb">
|
|
438
|
+
* <strong>Important information here</strong>
|
|
439
|
+
* </CwNote>
|
|
440
|
+
*/
|
|
441
|
+
const CwNote = ({ content, variant = 'soft', color = 'primary', customColor, fontSize = 'regular', icon, dismissible = false, autoCloseSeconds, className = '', style = {}, children, }) => {
|
|
442
|
+
const [isVisible, setIsVisible] = React.useState(true);
|
|
443
|
+
// Auto-close functionality
|
|
444
|
+
React.useEffect(() => {
|
|
445
|
+
if (autoCloseSeconds && autoCloseSeconds > 0) {
|
|
446
|
+
const timer = setTimeout(() => {
|
|
447
|
+
setIsVisible(false);
|
|
448
|
+
}, autoCloseSeconds * 1000);
|
|
449
|
+
return () => clearTimeout(timer);
|
|
450
|
+
}
|
|
451
|
+
return undefined;
|
|
452
|
+
}, [autoCloseSeconds]);
|
|
453
|
+
// Handle manual dismiss
|
|
454
|
+
const handleDismiss = (e) => {
|
|
455
|
+
e.stopPropagation();
|
|
456
|
+
setIsVisible(false);
|
|
457
|
+
};
|
|
458
|
+
// Calculate styles for custom color
|
|
459
|
+
const messageStyle = React.useMemo(() => {
|
|
460
|
+
if (customColor) {
|
|
461
|
+
if (variant === 'outline') {
|
|
462
|
+
// For outline, customColor is used for border and text
|
|
463
|
+
return {
|
|
464
|
+
color: customColor,
|
|
465
|
+
borderColor: customColor,
|
|
466
|
+
...style
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
// For soft/solid, customColor is used for background and we calculate contrast
|
|
471
|
+
return {
|
|
472
|
+
backgroundColor: customColor,
|
|
473
|
+
color: getContrastColor(customColor),
|
|
474
|
+
...style
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
return style;
|
|
479
|
+
}, [customColor, variant, style]);
|
|
480
|
+
// Build CSS classes
|
|
481
|
+
let noteClass = `cw-note cw-note-${fontSize}`;
|
|
482
|
+
if (dismissible) {
|
|
483
|
+
noteClass += ' cw-note-dismissible';
|
|
484
|
+
}
|
|
485
|
+
if (className) {
|
|
486
|
+
noteClass += ` ${className}`;
|
|
487
|
+
}
|
|
488
|
+
// Don't render if not visible
|
|
489
|
+
if (!isVisible) {
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
return (jsxRuntime.jsxs("div", { className: noteClass, "data-color": customColor ? undefined : color, "data-variant": variant, style: messageStyle, children: [icon && jsxRuntime.jsx(CwIcon, { iconId: icon }), jsxRuntime.jsx("div", { className: "cw-note-content", children: children ?? content }), dismissible && (jsxRuntime.jsx("button", { className: "cw-note-dismiss-button", onClick: handleDismiss, "aria-label": "Dismiss note", type: "button", children: jsxRuntime.jsx(CwIcon, { iconId: "close" }) }))] }));
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* CwImageGallery
|
|
497
|
+
*
|
|
498
|
+
* A versatile image gallery component that displays a grid of images
|
|
499
|
+
* and allows users to click on an image to view it in a larger format.
|
|
500
|
+
*
|
|
501
|
+
* @example
|
|
502
|
+
* // Basic usage
|
|
503
|
+
* <ImageGallery
|
|
504
|
+
* images={photos.map(p => {
|
|
505
|
+
* return (
|
|
506
|
+
* {
|
|
507
|
+
* src: "base64ImageString",
|
|
508
|
+
* alt: "Alternative text",
|
|
509
|
+
* filename: "Filename"
|
|
510
|
+
* }
|
|
511
|
+
* )
|
|
512
|
+
* })}
|
|
513
|
+
* />
|
|
514
|
+
*/
|
|
515
|
+
function CwImageGallery({ images }) {
|
|
516
|
+
const [selectedIndex, setSelectedIndex] = React.useState(null);
|
|
517
|
+
const handleNext = React.useCallback(() => {
|
|
518
|
+
if (selectedIndex === null)
|
|
519
|
+
return;
|
|
520
|
+
setSelectedIndex((selectedIndex + 1) % images.length);
|
|
521
|
+
}, [selectedIndex, images.length]);
|
|
522
|
+
const handlePrev = React.useCallback(() => {
|
|
523
|
+
if (selectedIndex === null)
|
|
524
|
+
return;
|
|
525
|
+
setSelectedIndex((selectedIndex - 1 + images.length) % images.length);
|
|
526
|
+
}, [selectedIndex, images.length]);
|
|
527
|
+
const handleKeyDown = React.useCallback((e) => {
|
|
528
|
+
if (selectedIndex === null)
|
|
529
|
+
return;
|
|
530
|
+
if (e.key === "ArrowRight")
|
|
531
|
+
handleNext();
|
|
532
|
+
else if (e.key === "ArrowLeft")
|
|
533
|
+
handlePrev();
|
|
534
|
+
else if (e.key === "Escape")
|
|
535
|
+
setSelectedIndex(null);
|
|
536
|
+
}, [selectedIndex, handleNext, handlePrev]);
|
|
537
|
+
React.useEffect(() => {
|
|
538
|
+
if (selectedIndex !== null) {
|
|
539
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
540
|
+
}
|
|
541
|
+
return () => {
|
|
542
|
+
window.removeEventListener("keydown", handleKeyDown);
|
|
543
|
+
};
|
|
544
|
+
}, [selectedIndex, handleKeyDown]);
|
|
545
|
+
const selectedImage = selectedIndex !== null ? images[selectedIndex] : null;
|
|
546
|
+
return (jsxRuntime.jsxs("div", { className: "cw-grid-base-2", children: [images.map((img, idx) => (jsxRuntime.jsxs("button", { style: {
|
|
547
|
+
background: "transparent",
|
|
548
|
+
color: "white",
|
|
549
|
+
border: "none",
|
|
550
|
+
cursor: "pointer",
|
|
551
|
+
display: "block",
|
|
552
|
+
}, onClick: () => setSelectedIndex(idx), children: [jsxRuntime.jsx("img", { src: "data:image/jpeg;base64," + img.src, alt: img.alt, style: {
|
|
553
|
+
width: "300px",
|
|
554
|
+
height: "auto",
|
|
555
|
+
maxHeight: "300px",
|
|
556
|
+
maxWidth: "300px",
|
|
557
|
+
cursor: "pointer",
|
|
558
|
+
borderRadius: "6px",
|
|
559
|
+
} }), jsxRuntime.jsx("div", { style: { fontSize: "1rem", textAlign: "center" }, children: img.filename && jsxRuntime.jsx("p", { style: { color: "var(--text-on-body)" }, children: img.filename }) })] }, img.filename))), selectedImage && (jsxRuntime.jsxs("button", { onClick: () => setSelectedIndex(null), style: {
|
|
560
|
+
position: "fixed",
|
|
561
|
+
top: 0,
|
|
562
|
+
left: 0,
|
|
563
|
+
width: "100vw",
|
|
564
|
+
height: "100vh",
|
|
565
|
+
backgroundColor: "rgba(0, 0, 0, 0.8)",
|
|
566
|
+
display: "grid",
|
|
567
|
+
justifyContent: "center",
|
|
568
|
+
alignItems: "center",
|
|
569
|
+
zIndex: 9999,
|
|
570
|
+
cursor: "zoom-out",
|
|
571
|
+
}, children: [jsxRuntime.jsx("img", { src: "data:image/jpeg;base64," + selectedImage.src, alt: selectedImage.alt, style: {
|
|
572
|
+
maxWidth: "90vw",
|
|
573
|
+
maxHeight: "90vh",
|
|
574
|
+
width: "auto",
|
|
575
|
+
height: "auto",
|
|
576
|
+
objectFit: "contain",
|
|
577
|
+
borderRadius: "8px",
|
|
578
|
+
boxShadow: "0 0 15px rgba(0,0,0,0.5)",
|
|
579
|
+
zIndex: 10001,
|
|
580
|
+
} }), jsxRuntime.jsx("div", { style: { color: "#fff", fontSize: "1rem", textAlign: "center" }, children: selectedImage.filename && jsxRuntime.jsx("p", { children: selectedImage.filename }) }), jsxRuntime.jsx("button", { onClick: (e) => {
|
|
581
|
+
e.stopPropagation();
|
|
582
|
+
handlePrev();
|
|
583
|
+
}, style: {
|
|
584
|
+
position: "absolute",
|
|
585
|
+
left: "30px",
|
|
586
|
+
fontSize: "2rem",
|
|
587
|
+
background: "transparent",
|
|
588
|
+
color: "white",
|
|
589
|
+
border: "none",
|
|
590
|
+
cursor: "pointer",
|
|
591
|
+
zIndex: 10002,
|
|
592
|
+
}, children: "\u2039" }), jsxRuntime.jsx("button", { onClick: (e) => {
|
|
593
|
+
e.stopPropagation();
|
|
594
|
+
handleNext();
|
|
595
|
+
}, style: {
|
|
596
|
+
position: "absolute",
|
|
597
|
+
right: "30px",
|
|
598
|
+
fontSize: "2rem",
|
|
599
|
+
background: "transparent",
|
|
600
|
+
color: "white",
|
|
601
|
+
border: "none",
|
|
602
|
+
cursor: "pointer",
|
|
603
|
+
zIndex: 10002,
|
|
604
|
+
}, children: "\u203A" })] }))] }));
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* CwImageGallery
|
|
609
|
+
*
|
|
610
|
+
* A image zoom component that displays an image
|
|
611
|
+
* and allows users to click to view it in a larger format.
|
|
612
|
+
*
|
|
613
|
+
* @example
|
|
614
|
+
* // Basic usage
|
|
615
|
+
* <ImageZoom src={'base64ImageString'}
|
|
616
|
+
* alt={'Alternative text'}/>
|
|
617
|
+
*/
|
|
618
|
+
function CwImageZoom(image) {
|
|
619
|
+
const [selectedImage, setSelectedImage] = React.useState(null);
|
|
620
|
+
const imageHeight = image.height ? image.height : "300px";
|
|
621
|
+
const imageWidth = image.width ? image.width : "300px";
|
|
622
|
+
React.useEffect(() => {
|
|
623
|
+
const handleKeyDown = (e) => {
|
|
624
|
+
if (e.key === "Escape") {
|
|
625
|
+
setSelectedImage(null);
|
|
626
|
+
}
|
|
627
|
+
};
|
|
628
|
+
if (selectedImage) {
|
|
629
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
630
|
+
}
|
|
631
|
+
return () => {
|
|
632
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
633
|
+
};
|
|
634
|
+
}, [selectedImage]);
|
|
635
|
+
return (jsxRuntime.jsxs("div", { className: "cw-fieldset cw-grid-base-2", children: [image.src && (jsxRuntime.jsx("img", { src: "data:image/jpeg;base64," + image.src, alt: image.alt, onClick: () => setSelectedImage(image), style: {
|
|
636
|
+
maxHeight: imageHeight,
|
|
637
|
+
maxWidth: imageWidth,
|
|
638
|
+
cursor: "zoom-in",
|
|
639
|
+
borderRadius: "6px",
|
|
640
|
+
objectFit: "cover",
|
|
641
|
+
} }, image.alt)), selectedImage && (jsxRuntime.jsxs("div", { onClick: () => setSelectedImage(null), style: {
|
|
642
|
+
position: "fixed",
|
|
643
|
+
top: 0,
|
|
644
|
+
left: 0,
|
|
645
|
+
width: "100vw",
|
|
646
|
+
height: "100vh",
|
|
647
|
+
backgroundColor: "rgba(0, 0, 0, 0.85)",
|
|
648
|
+
display: "grid",
|
|
649
|
+
justifyContent: "center",
|
|
650
|
+
alignItems: "center",
|
|
651
|
+
zIndex: 9999,
|
|
652
|
+
cursor: "zoom-out",
|
|
653
|
+
padding: "1rem",
|
|
654
|
+
}, children: [jsxRuntime.jsx("img", { src: "data:image/jpeg;base64," + selectedImage.src, alt: selectedImage.alt, style: {
|
|
655
|
+
maxWidth: "90vw",
|
|
656
|
+
maxHeight: "90vh",
|
|
657
|
+
width: "auto",
|
|
658
|
+
height: "auto",
|
|
659
|
+
objectFit: "contain",
|
|
660
|
+
borderRadius: "8px",
|
|
661
|
+
boxShadow: "0 0 15px rgba(0,0,0,0.5)",
|
|
662
|
+
} }), jsxRuntime.jsx("div", { style: { color: "#fff", fontSize: "1rem", textAlign: "center" }, children: selectedImage.filename && jsxRuntime.jsx("div", { children: selectedImage.filename }) })] }))] }));
|
|
663
|
+
}
|
|
664
|
+
|
|
380
665
|
/**
|
|
381
666
|
* CwLoading
|
|
382
667
|
*
|
|
@@ -400,7 +685,7 @@ function CwDisplayMessage(message, type, duration) {
|
|
|
400
685
|
*/
|
|
401
686
|
function CwLoading({ isLoading = false, text = '', size = 'regular', iconPosition = 'outside', iconName = 'cwi-plane-solid', animation = 'spin', children }) {
|
|
402
687
|
const iconClasses = `cwi-icons ${iconName || ''}`;
|
|
403
|
-
return (jsxRuntime.jsxs("div", { "aria-busy": isLoading, className: isLoading ? 'cw-loading-container' : '', children: [isLoading && (jsxRuntime.jsxs("div", { className: "cw-loading-content", "data-size": size, "data-animation": animation, children: [jsxRuntime.jsx("div", { className: "cw-loading", "data-icon-position": iconPosition, children: jsxRuntime.jsx("span", { className: iconClasses }) }), text && (jsxRuntime.jsx("p", { children: text }))] })), jsxRuntime.jsx("div", { className: isLoading ? 'cw-loading-disabled-content' : '', children: children })] }));
|
|
688
|
+
return (jsxRuntime.jsxs("div", { "aria-busy": isLoading, className: isLoading ? 'cw-loading-container' : '', "data-children": !!children, children: [isLoading && (jsxRuntime.jsxs("div", { className: "cw-loading-content", "data-size": size, "data-animation": animation, children: [jsxRuntime.jsx("div", { className: "cw-loading", "data-icon-position": iconPosition, children: jsxRuntime.jsx("span", { className: iconClasses }) }), text && (jsxRuntime.jsx("p", { children: text }))] })), jsxRuntime.jsx("div", { className: isLoading ? 'cw-loading-disabled-content' : '', children: children })] }));
|
|
404
689
|
}
|
|
405
690
|
|
|
406
691
|
/**
|
|
@@ -423,7 +708,7 @@ function CwLoadingSmall(CwelltLoadingAppointements) {
|
|
|
423
708
|
jsxRuntime.jsx("div", {})) }));
|
|
424
709
|
}
|
|
425
710
|
|
|
426
|
-
var styles$
|
|
711
|
+
var styles$j = {"cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si"};
|
|
427
712
|
|
|
428
713
|
// Constants moved outside to prevent recreation
|
|
429
714
|
const margin = 16;
|
|
@@ -534,12 +819,12 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
|
|
|
534
819
|
const { setTooltipTimeout, clearTooltipTimeout } = useTooltipDelay(() => {
|
|
535
820
|
setIsVisible(true);
|
|
536
821
|
}, showDelay);
|
|
537
|
-
const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$
|
|
822
|
+
const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$j["cw-generic-tooltip-content"]);
|
|
538
823
|
// Memoize tooltip content creation
|
|
539
824
|
const tooltipContent = React.useMemo(() => {
|
|
540
825
|
if (hide || !isVisible || !content)
|
|
541
826
|
return null;
|
|
542
|
-
return reactDom.createPortal(jsxRuntime.jsx("div", { className: styles$
|
|
827
|
+
return reactDom.createPortal(jsxRuntime.jsx("div", { className: styles$j["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, style: {
|
|
543
828
|
position: 'fixed',
|
|
544
829
|
top: `${tooltipPosition.top}px`,
|
|
545
830
|
left: `${tooltipPosition.left}px`,
|
|
@@ -554,12 +839,12 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
|
|
|
554
839
|
clearTooltipTimeout();
|
|
555
840
|
setIsVisible(false);
|
|
556
841
|
}, [clearTooltipTimeout]);
|
|
557
|
-
return (jsxRuntime.jsxs("div", { ref: containerRef, className: styles$
|
|
842
|
+
return (jsxRuntime.jsxs("div", { ref: containerRef, className: styles$j["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, children: [tooltipContent, children] }));
|
|
558
843
|
};
|
|
559
844
|
|
|
560
845
|
// Reference for draggable modal
|
|
561
|
-
const draggableRef$1 = React.createRef();
|
|
562
846
|
function CwModal(custModalProps) {
|
|
847
|
+
const draggableRef = React.useRef(null);
|
|
563
848
|
// Hooks [ modal draggable ]
|
|
564
849
|
const [isModalDisabled, setModalDisabled] = React.useState(true);
|
|
565
850
|
// [ optional : hideFooter by default it shows the footer ]
|
|
@@ -589,7 +874,7 @@ function CwModal(custModalProps) {
|
|
|
589
874
|
width: custModalProps.widthModal
|
|
590
875
|
}
|
|
591
876
|
};
|
|
592
|
-
return (jsxRuntime.jsx("div", { children: custModalProps.modalState && (jsxRuntime.jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsxRuntime.jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsxRuntime.jsx(Draggable, { disabled: isModalDisabled, axis: "both", children: jsxRuntime.jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef
|
|
877
|
+
return (jsxRuntime.jsx("div", { children: custModalProps.modalState && (jsxRuntime.jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsxRuntime.jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsxRuntime.jsx(Draggable, { disabled: isModalDisabled, axis: "both", nodeRef: draggableRef, children: jsxRuntime.jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef, style: widthModalDef !== "40em" ? modalStyle.widthCustomStyle : modalStyle.widthDefStyle, children: [jsxRuntime.jsxs("div", { className: "cwelltModalHeader", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsxRuntime.jsx("div", { className: "cwelltModalTitle", children: custModalProps.titleModal }), jsxRuntime.jsx("button", { className: "cwelltBtnCloseModal", onClick: custModalProps.onCloseModal, children: jsxRuntime.jsx("span", { className: "cwelltCloseIcon" }) })] }), jsxRuntime.jsx("div", { className: "cwelltModalBody", children: jsxRuntime.jsx("div", { className: "cwelltContainerModalBody", style: { position: "relative" }, children: custModalProps.children }) }), isHide === false ? (
|
|
593
878
|
// [ false : show modal ]
|
|
594
879
|
jsxRuntime.jsxs("div", { className: "cwelltModalFooter", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsxRuntime.jsx(antd.Tooltip, { placement: "bottom", title: "Save", color: "#368ee0", children: jsxRuntime.jsx("div", { className: "cwellt_flex cwellt_justify_center cwelltModalFooterContButton", style: { width: "2em" }, children: jsxRuntime.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 ? (jsxRuntime.jsx(antd.Tooltip, { placement: "bottom", title: custModalProps.custButtonTitle, color: custModalProps.custColorButtonTooltip, children: jsxRuntime.jsx("div", { className: "cwellt_flex cwellt_justify_center cwelltModalFooterContButton", style: { width: "2em" }, children: jsxRuntime.jsx("button", { className: "btnModalFooterAction cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg " +
|
|
595
880
|
custModalProps.custButtonClassName, onClick: custModalProps.custButtonClick }) }) })) : (jsxRuntime.jsx("div", {}))] })) : (
|
|
@@ -597,6 +882,78 @@ function CwModal(custModalProps) {
|
|
|
597
882
|
jsxRuntime.jsx("div", { style: { display: "none" } }))] }) })] })) }));
|
|
598
883
|
}
|
|
599
884
|
|
|
885
|
+
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"};
|
|
886
|
+
|
|
887
|
+
function CwConfirmationPopup(props) {
|
|
888
|
+
const { isOpen, onConfirm, onCancel, message = "Are you sure you want to proceed?", confirmText = "Confirm", cancelText = "Cancel", placement = 'bottom', children } = props;
|
|
889
|
+
const triggerRef = React.useRef(null);
|
|
890
|
+
const popupRef = React.useRef(null);
|
|
891
|
+
const [position, setPosition] = React.useState({ top: 0, left: 0 });
|
|
892
|
+
// Render the children with a wrapper to get the reference
|
|
893
|
+
const renderChildren = () => {
|
|
894
|
+
if (React.isValidElement(children)) {
|
|
895
|
+
const ChildWrapper = React.forwardRef((_props, ref) => {
|
|
896
|
+
return (jsxRuntime.jsx("div", { ref: ref, style: { display: 'inline-block' }, children: children }));
|
|
897
|
+
});
|
|
898
|
+
return jsxRuntime.jsx(ChildWrapper, { ref: triggerRef });
|
|
899
|
+
}
|
|
900
|
+
return children;
|
|
901
|
+
};
|
|
902
|
+
// Effect to calculate the position of the popup
|
|
903
|
+
React.useEffect(() => {
|
|
904
|
+
if (isOpen && triggerRef.current && popupRef.current) {
|
|
905
|
+
const targetRect = triggerRef.current.getBoundingClientRect();
|
|
906
|
+
const popupRect = popupRef.current.getBoundingClientRect();
|
|
907
|
+
let top = 0;
|
|
908
|
+
let left = 0;
|
|
909
|
+
// Calculate position based on placement
|
|
910
|
+
switch (placement) {
|
|
911
|
+
case 'top':
|
|
912
|
+
top = targetRect.top - popupRect.height - 10;
|
|
913
|
+
left = targetRect.left + (targetRect.width / 2) - (popupRect.width / 2);
|
|
914
|
+
break;
|
|
915
|
+
case 'right':
|
|
916
|
+
top = targetRect.top + (targetRect.height / 2) - (popupRect.height / 2);
|
|
917
|
+
left = targetRect.right + 10;
|
|
918
|
+
break;
|
|
919
|
+
case 'bottom':
|
|
920
|
+
top = targetRect.bottom + 10;
|
|
921
|
+
left = targetRect.left + (targetRect.width / 2) - (popupRect.width / 2);
|
|
922
|
+
break;
|
|
923
|
+
case 'left':
|
|
924
|
+
top = targetRect.top + (targetRect.height / 2) - (popupRect.height / 2);
|
|
925
|
+
left = targetRect.left - popupRect.width - 10;
|
|
926
|
+
break;
|
|
927
|
+
}
|
|
928
|
+
// Adjustments to keep the popup within the window
|
|
929
|
+
const viewportWidth = window.innerWidth;
|
|
930
|
+
const viewportHeight = window.innerHeight;
|
|
931
|
+
if (left < 10)
|
|
932
|
+
left = 10;
|
|
933
|
+
if (left + popupRect.width > viewportWidth - 10) {
|
|
934
|
+
left = viewportWidth - popupRect.width - 10;
|
|
935
|
+
}
|
|
936
|
+
if (top < 10)
|
|
937
|
+
top = 10;
|
|
938
|
+
if (top + popupRect.height > viewportHeight - 10) {
|
|
939
|
+
top = viewportHeight - popupRect.height - 10;
|
|
940
|
+
}
|
|
941
|
+
setPosition({ top, left });
|
|
942
|
+
}
|
|
943
|
+
}, [isOpen, placement]);
|
|
944
|
+
const handleOverlayClick = (e) => {
|
|
945
|
+
if (popupRef.current && !popupRef.current.contains(e.target)) {
|
|
946
|
+
onCancel();
|
|
947
|
+
}
|
|
948
|
+
};
|
|
949
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [renderChildren(), isOpen && (jsxRuntime.jsx("div", { className: styles$i.overlayPositioned, onClick: handleOverlayClick, children: jsxRuntime.jsxs("div", { ref: popupRef, className: styles$i.popup, style: {
|
|
950
|
+
position: 'absolute',
|
|
951
|
+
top: `${position.top}px`,
|
|
952
|
+
left: `${position.left}px`,
|
|
953
|
+
transform: 'none'
|
|
954
|
+
}, children: [jsxRuntime.jsx("p", { className: styles$i.message, children: message }), jsxRuntime.jsxs("div", { className: styles$i.buttons, children: [jsxRuntime.jsx("button", { className: `${styles$i.button} ${styles$i.confirmButton}`, onClick: onConfirm, children: confirmText }), jsxRuntime.jsx("button", { className: `${styles$i.button} ${styles$i.cancelButton}`, onClick: onCancel, children: cancelText })] })] }) }))] }));
|
|
955
|
+
}
|
|
956
|
+
|
|
600
957
|
// Reference for draggable modal
|
|
601
958
|
const draggableRef = React.createRef();
|
|
602
959
|
function CwModalConfirm(custModalProps) {
|
|
@@ -673,7 +1030,7 @@ class CwModalIframe extends React__namespace.Component {
|
|
|
673
1030
|
}
|
|
674
1031
|
}
|
|
675
1032
|
|
|
676
|
-
var styles$
|
|
1033
|
+
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"};
|
|
677
1034
|
|
|
678
1035
|
// Helper function to parse size values
|
|
679
1036
|
const parseSize = (size) => {
|
|
@@ -712,7 +1069,7 @@ const convertFromPx = (px, unit) => {
|
|
|
712
1069
|
}
|
|
713
1070
|
};
|
|
714
1071
|
const CwDialog = props => {
|
|
715
|
-
const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, ...domProps } = props;
|
|
1072
|
+
const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, autoReposition = false, ...domProps } = props;
|
|
716
1073
|
const dialogRef = React.useRef(null);
|
|
717
1074
|
const initialSetup = React.useMemo(() => {
|
|
718
1075
|
// Default width and height with units
|
|
@@ -761,19 +1118,42 @@ const CwDialog = props => {
|
|
|
761
1118
|
// scrim is true by default
|
|
762
1119
|
const hasScrim = scrim !== false;
|
|
763
1120
|
// Adjust position after the dialog is rendered when using autoHeight
|
|
764
|
-
React.
|
|
1121
|
+
React.useLayoutEffect(() => {
|
|
1122
|
+
let resizeObserver = null;
|
|
765
1123
|
if (size.autoHeight && dialogRef.current && open) {
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
}
|
|
1124
|
+
const recalculatePosition = () => {
|
|
1125
|
+
const actualHeight = dialogRef.current?.offsetHeight;
|
|
1126
|
+
if (actualHeight && actualHeight > 0) {
|
|
1127
|
+
setPosition({
|
|
1128
|
+
x: Math.max(0, window.document.body.clientWidth / 2 - size.width / 2),
|
|
1129
|
+
y: Math.max(0, window.document.body.clientHeight / 2 - actualHeight / 2)
|
|
1130
|
+
});
|
|
1131
|
+
}
|
|
1132
|
+
};
|
|
1133
|
+
setTimeout(recalculatePosition, 0);
|
|
1134
|
+
// For modals with delayed loading content (inner fetchs and similar)
|
|
1135
|
+
if (autoReposition) {
|
|
1136
|
+
resizeObserver = new ResizeObserver(() => {
|
|
1137
|
+
const dialog = dialogRef.current;
|
|
1138
|
+
if (!dialog)
|
|
1139
|
+
return;
|
|
1140
|
+
const dialogRect = dialog.getBoundingClientRect();
|
|
1141
|
+
const viewportHeight = window.innerHeight;
|
|
1142
|
+
const margin = 50;
|
|
1143
|
+
// Only reposition if modal tries to grow over window limits
|
|
1144
|
+
const isOverflowingTop = dialogRect.top < margin;
|
|
1145
|
+
const isOverflowingBottom = dialogRect.bottom > viewportHeight - margin;
|
|
1146
|
+
if (isOverflowingTop || isOverflowingBottom) {
|
|
1147
|
+
recalculatePosition();
|
|
1148
|
+
}
|
|
1149
|
+
});
|
|
1150
|
+
resizeObserver.observe(dialogRef.current);
|
|
774
1151
|
}
|
|
775
1152
|
}
|
|
776
|
-
|
|
1153
|
+
return () => {
|
|
1154
|
+
resizeObserver?.disconnect();
|
|
1155
|
+
};
|
|
1156
|
+
}, [size.autoHeight, open, autoReposition]);
|
|
777
1157
|
React.useEffect(() => {
|
|
778
1158
|
const handleMouseMove = (e) => {
|
|
779
1159
|
if (isDragging) {
|
|
@@ -866,7 +1246,7 @@ const CwDialog = props => {
|
|
|
866
1246
|
onClose();
|
|
867
1247
|
}
|
|
868
1248
|
}, [onClose]);
|
|
869
|
-
const header = React.useMemo(() => (jsxRuntime.jsxs("header", { onMouseDown: handleMouseDown, children: [jsxRuntime.jsx("span", { children: headline }), customHeader || (jsxRuntime.jsx("button", { className: styles$
|
|
1249
|
+
const header = React.useMemo(() => (jsxRuntime.jsxs("header", { onMouseDown: handleMouseDown, children: [jsxRuntime.jsx("span", { children: headline }), customHeader || (jsxRuntime.jsx("button", { className: styles$h["cw-dialog-button-close"], onClick: onClose }))] })), [handleMouseDown, headline, customHeader, onClose]);
|
|
870
1250
|
const content = React.useMemo(() => (jsxRuntime.jsx("section", { children: children })), [children]);
|
|
871
1251
|
const footer = React.useMemo(() => (jsxRuntime.jsx("footer", { children: customFooter || (jsxRuntime.jsx("button", { className: "cw-button-icon cwi-save", onClick: onSave })) })), [customFooter, onSave]);
|
|
872
1252
|
const resizeHandles = React.useMemo(() => size.autoHeight
|
|
@@ -895,12 +1275,13 @@ const CwDialog = props => {
|
|
|
895
1275
|
: `${convertFromPx(size.height, size.heightUnit)}${size.heightUnit}`;
|
|
896
1276
|
return { displayWidth, displayHeight };
|
|
897
1277
|
}, [size.width, size.height, size.widthUnit, size.heightUnit, size.autoHeight]);
|
|
898
|
-
|
|
1278
|
+
const dialogContent = (jsxRuntime.jsx("div", { "data-has-scrim": hasScrim, className: styles$h["cw-dialog-main"], onClick: handleScrimClick, children: jsxRuntime.jsxs("dialog", { ...domProps, ref: dialogRef, style: {
|
|
899
1279
|
left: `${position.x}px`,
|
|
900
1280
|
top: `${position.y}px`,
|
|
901
1281
|
width: displayDimensions.displayWidth,
|
|
902
1282
|
height: displayDimensions.displayHeight
|
|
903
|
-
}, children: [header, content, hideFooter !== true && footer, resizeHandles] }) }))
|
|
1283
|
+
}, children: [header, content, hideFooter !== true && footer, resizeHandles] }) }));
|
|
1284
|
+
return open ? reactDom.createPortal(dialogContent, document.body) : null;
|
|
904
1285
|
};
|
|
905
1286
|
|
|
906
1287
|
const CwModalReportFunctional = (props) => {
|
|
@@ -1058,7 +1439,7 @@ function CwButton({ text, variant = 'solid', color = 'primary', className = '',
|
|
|
1058
1439
|
return (jsxRuntime.jsx("button", { type: "button", className: buttonClass, ...buttonProps, "data-color": color, children: variant === 'icon' ? null : (children ?? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon && jsxRuntime.jsx("span", { className: `cwi-icons cwi-${icon}` }), text && jsxRuntime.jsx("strong", { children: text })] }))) }));
|
|
1059
1440
|
}
|
|
1060
1441
|
|
|
1061
|
-
var styles$
|
|
1442
|
+
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"};
|
|
1062
1443
|
|
|
1063
1444
|
/**
|
|
1064
1445
|
* CwCard - A simple card component for displaying content in a contained format
|
|
@@ -1082,11 +1463,11 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1082
1463
|
// Construct class names using CSS modules
|
|
1083
1464
|
const cardClassNames = [
|
|
1084
1465
|
'cw-card',
|
|
1085
|
-
styles$
|
|
1466
|
+
styles$g.card,
|
|
1086
1467
|
className,
|
|
1087
|
-
clickable ? styles$
|
|
1088
|
-
disabled ? styles$
|
|
1089
|
-
isLoading ? styles$
|
|
1468
|
+
clickable ? styles$g.clickable : '',
|
|
1469
|
+
disabled ? styles$g.disabled : '',
|
|
1470
|
+
isLoading ? styles$g.loading : '',
|
|
1090
1471
|
].filter(Boolean).join(' ');
|
|
1091
1472
|
// Handle click event when card is clickable
|
|
1092
1473
|
const handleClick = () => {
|
|
@@ -1103,17 +1484,17 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1103
1484
|
// Determine if footer should be rendered
|
|
1104
1485
|
const hasFooter = hasChips || footer || (hasActions && direction === "row");
|
|
1105
1486
|
// Actions component to reuse
|
|
1106
|
-
const ActionsComponent = hasActions && !disabled ? (jsxRuntime.jsxs("div", { className: styles$
|
|
1487
|
+
const ActionsComponent = hasActions && !disabled ? (jsxRuntime.jsxs("div", { className: styles$g.actions, children: [extraActions ?? null, onEdit && jsxRuntime.jsx(CwButton, { variant: "icon", icon: "edit", onClick: onEdit }), onDelete && jsxRuntime.jsx(CwButton, { variant: "icon", icon: "delete", color: "danger", onClick: onDelete })] })) : null;
|
|
1107
1488
|
return (jsxRuntime.jsxs("div", { ...(id && { id }), className: cardClassNames, ...(style && { style }), ...(clickable && {
|
|
1108
1489
|
role: 'button',
|
|
1109
1490
|
tabIndex: 0,
|
|
1110
1491
|
onClick: handleClick,
|
|
1111
|
-
}), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxRuntime.jsxs("header", { children: [(title || subtitle) && (jsxRuntime.jsxs("div", { className: styles$
|
|
1492
|
+
}), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxRuntime.jsxs("header", { children: [(title || subtitle) && (jsxRuntime.jsxs("div", { className: styles$g.headerContent, "data-alignment": alignment, children: [title && jsxRuntime.jsx("h5", { children: title }), subtitle && jsxRuntime.jsx("strong", { children: subtitle })] })), direction === "column" && ActionsComponent] })), jsxRuntime.jsx("div", { className: styles$g.content, children: children }), hasFooter && (jsxRuntime.jsxs("footer", { children: [hasChips && (jsxRuntime.jsx("div", { className: styles$g.footerTags, children: chips.map((chip, index) => (jsxRuntime.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 && (jsxRuntime.jsx("div", { className: styles$g.footerContent, children: footer }))] })), direction === "row" && ActionsComponent, isLoading && (jsxRuntime.jsx("div", { className: styles$g.loadingOverlay, children: jsxRuntime.jsx(CwLoading, { isLoading: isLoading, size: "small" }) }))] }));
|
|
1112
1493
|
};
|
|
1113
1494
|
|
|
1114
|
-
var styles$
|
|
1495
|
+
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"};
|
|
1115
1496
|
|
|
1116
|
-
function CwCardList({ items, renderCard, pageSize = 10,
|
|
1497
|
+
function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, emptyState, sortOptions = [], defaultSortKey, ...htmlProps }) {
|
|
1117
1498
|
const [currentPage, setCurrentPage] = React.useState(1);
|
|
1118
1499
|
const [sortKey, setSortKey] = React.useState(defaultSortKey || sortOptions[0]?.key || '');
|
|
1119
1500
|
const [sortDirection, setSortDirection] = React.useState('asc');
|
|
@@ -1145,10 +1526,10 @@ function CwCardList({ items, renderCard, pageSize = 10, className = '', layout =
|
|
|
1145
1526
|
'--card-width': `${defaultCardWidth}px`,
|
|
1146
1527
|
'--card-gap': `${cardGap}px`
|
|
1147
1528
|
};
|
|
1148
|
-
return (jsxRuntime.jsxs("div", {
|
|
1529
|
+
return (jsxRuntime.jsxs("div", { ...htmlProps, children: [sortOptions.length > 0 && (jsxRuntime.jsxs("div", { className: styles$f.sortControls, children: [jsxRuntime.jsx("label", { htmlFor: "cardlist-sort-select", children: "Sort by:" }), jsxRuntime.jsx("select", { id: "cardlist-sort-select", value: sortKey, onChange: (e) => handleSortChange(e.target.value), className: styles$f.sortSelect, children: sortOptions.map(option => (jsxRuntime.jsx("option", { value: option.key, children: option.label }, option.key))) }), jsxRuntime.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 ? (jsxRuntime.jsx("div", { className: styles$f.loading, children: jsxRuntime.jsx(CwLoading, { isLoading: isLoading }) })) : sortedItems.length === 0 ? (jsxRuntime.jsx("div", { className: styles$f.emptyState, children: emptyState || jsxRuntime.jsx("p", { children: "No items to display" }) })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: `${styles$f.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsxRuntime.jsx("div", { className: styles$f.cardWrapper, children: renderCard(item, index) }, index))) }), totalPages > 1 && (jsxRuntime.jsxs("div", { className: styles$f.pagination, children: [jsxRuntime.jsx("button", { disabled: currentPage === 1, onClick: () => setCurrentPage(p => Math.max(1, p - 1)), className: "cw-button-icon cwi-chevron-left" }), jsxRuntime.jsxs("span", { className: styles$f.pageInfo, children: [currentPage, " of ", totalPages] }), jsxRuntime.jsx("button", { disabled: currentPage === totalPages, onClick: () => setCurrentPage(p => Math.min(totalPages, p + 1)), className: "cw-button-icon cwi-chevron-right" })] }))] }))] }));
|
|
1149
1530
|
}
|
|
1150
1531
|
|
|
1151
|
-
var styles$
|
|
1532
|
+
var styles$e = {"cw-accordion":"cw-accordion-module_cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module_cw-accordion-body__xlI8b"};
|
|
1152
1533
|
|
|
1153
1534
|
/**
|
|
1154
1535
|
*
|
|
@@ -1165,7 +1546,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
|
|
|
1165
1546
|
setVisible_accordionBody(!isVisible_accordionBody);
|
|
1166
1547
|
};
|
|
1167
1548
|
// #endregion
|
|
1168
|
-
return (jsxRuntime.jsxs("div", { className: styles$
|
|
1549
|
+
return (jsxRuntime.jsxs("div", { className: styles$e["cw-accordion"], style: CwelltAccordionContainerProps.style, "data-open": isVisible_accordionBody, children: [jsxRuntime.jsxs("header", { onClick: () => showAccordionBody(), children: [jsxRuntime.jsx("div", { children: CwelltAccordionContainerProps.desc_text }), jsxRuntime.jsx("button", { className: "cw-button-icon" })] }), jsxRuntime.jsx("div", { className: styles$e["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
|
|
1169
1550
|
}
|
|
1170
1551
|
|
|
1171
1552
|
/**
|
|
@@ -1301,7 +1682,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1301
1682
|
const startX = e.clientX;
|
|
1302
1683
|
const startWidth = e.target.parentElement?.offsetWidth || 0;
|
|
1303
1684
|
const onMouseMove = (moveEvent) => {
|
|
1304
|
-
const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50); //
|
|
1685
|
+
const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50); // min 50px
|
|
1305
1686
|
setColumnWidths(prev => ({ ...prev, [key]: newWidth }));
|
|
1306
1687
|
};
|
|
1307
1688
|
const onMouseUp = () => {
|
|
@@ -1318,7 +1699,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1318
1699
|
overflowY: "auto"
|
|
1319
1700
|
};
|
|
1320
1701
|
}
|
|
1321
|
-
return {}; //
|
|
1702
|
+
return {}; // no height or scroll
|
|
1322
1703
|
}, [stickyHeader, scrollHeight]);
|
|
1323
1704
|
const getColSpan = () => columns.length + (expandedRowRender ? 1 : 0);
|
|
1324
1705
|
const hasClassNameRow = (item) => {
|
|
@@ -1354,7 +1735,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1354
1735
|
}),
|
|
1355
1736
|
}, children: [jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [jsxRuntime.jsx("span", { children: col.title }), col.sortable && col.dataIndex && (jsxRuntime.jsx("span", { style: { fontSize: "12px", marginLeft: "6px" }, children: sortConfig.key !== col.dataIndex ? "↕" : sortConfig.direction === "asc"
|
|
1356
1737
|
? "↑"
|
|
1357
|
-
: "↓" }))] }), jsxRuntime.jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsxRuntime.jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxRuntime.jsxs("footer", { className: "cw-table-pagination", children: [jsxRuntime.jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsxRuntime.jsx("input", { type: "
|
|
1738
|
+
: "↓" }))] }), jsxRuntime.jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsxRuntime.jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxRuntime.jsxs("footer", { className: "cw-table-pagination", children: [jsxRuntime.jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsxRuntime.jsx("input", { type: "text", inputMode: "numeric", value: currentPage, onChange: (e) => {
|
|
1358
1739
|
const value = parseInt(e.target.value, 10);
|
|
1359
1740
|
if (!isNaN(value))
|
|
1360
1741
|
handlePageChange(value);
|
|
@@ -1363,14 +1744,10 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
1363
1744
|
if (isNaN(value) || value < 1 || value > totalPages) {
|
|
1364
1745
|
handlePageChange(1);
|
|
1365
1746
|
}
|
|
1366
|
-
}, min: 1, max: totalPages,
|
|
1367
|
-
width: "4rem",
|
|
1368
|
-
textAlign: "center",
|
|
1369
|
-
marginRight: "0.5rem"
|
|
1370
|
-
} }), "of ", totalPages, jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsxRuntime.jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, style: { marginLeft: "1rem" }, children: pageSizeOptions.map(size => (jsxRuntime.jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
|
|
1747
|
+
}, min: 1, max: totalPages }), jsxRuntime.jsxs("span", { children: ["of ", totalPages] }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsxRuntime.jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsxRuntime.jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, children: pageSizeOptions.map(size => (jsxRuntime.jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
|
|
1371
1748
|
}
|
|
1372
1749
|
|
|
1373
|
-
var styles$
|
|
1750
|
+
var styles$d = {"cw-tabs":"cw-tabs-module_cw-tabs__1pmji","cw-tabs-content":"cw-tabs-module_cw-tabs-content__HTp8d"};
|
|
1374
1751
|
|
|
1375
1752
|
const TabIcon = ({ icon }) => {
|
|
1376
1753
|
if (!icon)
|
|
@@ -1420,7 +1797,7 @@ function CwTabs(CwTabsProps) {
|
|
|
1420
1797
|
const tabsListStyle = position === 'left' && CwTabsProps.tabsListWidth
|
|
1421
1798
|
? { minWidth: CwTabsProps.tabsListWidth }
|
|
1422
1799
|
: undefined;
|
|
1423
|
-
return (jsxRuntime.jsxs("div", { id: CwTabsProps.id, className: styles$
|
|
1800
|
+
return (jsxRuntime.jsxs("div", { id: CwTabsProps.id, className: styles$d['cw-tabs'], style: CwTabsProps.style, "data-tabs-position": position, children: [jsxRuntime.jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxRuntime.jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsxRuntime.jsx(TabIcon, { icon: tab.icon }), tab.title] }, tab.key))) }), jsxRuntime.jsx("div", { className: styles$d['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
|
|
1424
1801
|
}
|
|
1425
1802
|
|
|
1426
1803
|
/**
|
|
@@ -1462,10 +1839,140 @@ const CwExpandable = ({ briefing, onToggle, onOpen, onClose, children, ...detail
|
|
|
1462
1839
|
*/
|
|
1463
1840
|
const CwKeyValueList = ({ items, className = "", emptyValue = "-", direction = "row" }) => {
|
|
1464
1841
|
return (jsxRuntime.jsx("dl", { className: `cw-keyvalue-list ${className}`, children: items.map(item => (jsxRuntime.jsxs("div", { className: `cw-keyvalue-list-item cw-flex-${direction}`, children: [jsxRuntime.jsx("dt", { children: item.label }), jsxRuntime.jsx("dd", { children: item.value !== undefined && item.value !== null && item.value !== ""
|
|
1465
|
-
?
|
|
1842
|
+
? (React.isValidElement(item.value)
|
|
1843
|
+
? item.value
|
|
1844
|
+
: `${item.value}${item.suffix ? ` ${item.suffix}` : ''}`)
|
|
1466
1845
|
: emptyValue })] }, item.key))) }));
|
|
1467
1846
|
};
|
|
1468
1847
|
|
|
1848
|
+
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"};
|
|
1849
|
+
|
|
1850
|
+
function CwSortableList({ items, onReorder, renderItem, className = '', movedItems = new Set(), emptyMessage = "No elements to show", readOnly = false, }) {
|
|
1851
|
+
const [draggedItem, setDraggedItem] = React.useState(null);
|
|
1852
|
+
const [dropIndicatorIndex, setDropIndicatorIndex] = React.useState(null);
|
|
1853
|
+
const [lastValidDropIndex, setLastValidDropIndex] = React.useState(null);
|
|
1854
|
+
const [expandedItems, setExpandedItems] = React.useState(new Set());
|
|
1855
|
+
const toggleExpanded = (itemId) => {
|
|
1856
|
+
setExpandedItems(prev => {
|
|
1857
|
+
const newSet = new Set(prev);
|
|
1858
|
+
if (newSet.has(itemId)) {
|
|
1859
|
+
newSet.delete(itemId);
|
|
1860
|
+
}
|
|
1861
|
+
else {
|
|
1862
|
+
newSet.add(itemId);
|
|
1863
|
+
}
|
|
1864
|
+
return newSet;
|
|
1865
|
+
});
|
|
1866
|
+
};
|
|
1867
|
+
const cleanupDragState = () => {
|
|
1868
|
+
setDraggedItem(null);
|
|
1869
|
+
setDropIndicatorIndex(null);
|
|
1870
|
+
setLastValidDropIndex(null);
|
|
1871
|
+
};
|
|
1872
|
+
const handleDragStart = (e, item) => {
|
|
1873
|
+
if (readOnly) {
|
|
1874
|
+
e.preventDefault();
|
|
1875
|
+
return;
|
|
1876
|
+
}
|
|
1877
|
+
setDraggedItem(item);
|
|
1878
|
+
setLastValidDropIndex(null);
|
|
1879
|
+
e.dataTransfer.effectAllowed = 'move';
|
|
1880
|
+
};
|
|
1881
|
+
const handleDragEnd = () => {
|
|
1882
|
+
if (draggedItem && lastValidDropIndex !== null) {
|
|
1883
|
+
const dragIndex = items.findIndex(item => item.id === draggedItem.id);
|
|
1884
|
+
if (dragIndex !== lastValidDropIndex && dragIndex !== lastValidDropIndex - 1) {
|
|
1885
|
+
const newItems = [...items];
|
|
1886
|
+
const [draggedElement] = newItems.splice(dragIndex, 1);
|
|
1887
|
+
let finalIndex = lastValidDropIndex;
|
|
1888
|
+
if (dragIndex < finalIndex)
|
|
1889
|
+
finalIndex -= 1;
|
|
1890
|
+
newItems.splice(finalIndex, 0, draggedElement);
|
|
1891
|
+
// Ahora pasamos el id del elemento movido al callback
|
|
1892
|
+
onReorder(newItems, draggedItem.id);
|
|
1893
|
+
}
|
|
1894
|
+
}
|
|
1895
|
+
cleanupDragState();
|
|
1896
|
+
};
|
|
1897
|
+
const handleDragOver = (e, index) => {
|
|
1898
|
+
e.preventDefault();
|
|
1899
|
+
if (!draggedItem || readOnly)
|
|
1900
|
+
return;
|
|
1901
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
1902
|
+
const mouseY = e.clientY;
|
|
1903
|
+
const elementCenterY = rect.top + (rect.height / 2);
|
|
1904
|
+
const dropIndex = mouseY < elementCenterY ? index : index + 1;
|
|
1905
|
+
setLastValidDropIndex(dropIndex);
|
|
1906
|
+
if (dropIndicatorIndex !== dropIndex) {
|
|
1907
|
+
setDropIndicatorIndex(dropIndex);
|
|
1908
|
+
}
|
|
1909
|
+
};
|
|
1910
|
+
if (items.length === 0) {
|
|
1911
|
+
return (jsxRuntime.jsx("div", { className: `${styles$c.sortableList} ${styles$c.emptyState} ${className}`, children: jsxRuntime.jsx("div", { className: styles$c.emptyMessage, children: emptyMessage }) }));
|
|
1912
|
+
}
|
|
1913
|
+
return (jsxRuntime.jsx("div", { className: `${styles$c.sortableList} ${className}`, children: items.map((item, index) => {
|
|
1914
|
+
const { title, extraContent, actions, showHandle = true, expandedContent } = renderItem(item);
|
|
1915
|
+
const isDragging = draggedItem?.id === item.id;
|
|
1916
|
+
const isMoved = movedItems.has(item.id);
|
|
1917
|
+
const canExpand = Boolean(expandedContent);
|
|
1918
|
+
const isExpanded = expandedItems.has(item.id);
|
|
1919
|
+
return (jsxRuntime.jsxs(React.Fragment, { children: [dropIndicatorIndex === index && jsxRuntime.jsx("div", { className: styles$c.dropIndicator }), jsxRuntime.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: [jsxRuntime.jsxs("header", { children: [canExpand ? (jsxRuntime.jsx(CwButton, { variant: "icon", onClick: () => toggleExpanded(item.id), type: "button", title: isExpanded ? "Collapse" : "Expand", icon: isExpanded ? "chevron-up" : "chevron-down" })) : showHandle ? (jsxRuntime.jsx("div", { className: styles$c.sortableHandle, children: jsxRuntime.jsx(CwIcon, { iconId: "grip-dots" }) })) : null, jsxRuntime.jsxs("div", { className: styles$c.sortableContent, children: [jsxRuntime.jsx("div", { className: styles$c.sortableTitle, children: title }), extraContent && jsxRuntime.jsx("div", { className: styles$c.sortableExtraContent, children: extraContent })] }), jsxRuntime.jsx("div", { className: styles$c.sortableActions, children: actions })] }), isExpanded && expandedContent && (jsxRuntime.jsx("div", { className: styles$c.expandedContent, children: expandedContent }))] }), !readOnly && dropIndicatorIndex === items.length && index === items.length - 1 && (jsxRuntime.jsx("div", { className: styles$c.dropIndicator }))] }, item.id));
|
|
1920
|
+
}) }));
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1923
|
+
function useSortableList(initialItems) {
|
|
1924
|
+
const [items, setItems] = React.useState(initialItems);
|
|
1925
|
+
const [originalItems, setOriginalItems] = React.useState(initialItems);
|
|
1926
|
+
const [hasChanges, setHasChanges] = React.useState(false);
|
|
1927
|
+
const [movedItems, setMovedItems] = React.useState(new Set());
|
|
1928
|
+
const [resetKey, setResetKey] = React.useState(0);
|
|
1929
|
+
const handleReorder = React.useCallback((newItems, movedId) => {
|
|
1930
|
+
setItems(newItems);
|
|
1931
|
+
if (movedId !== undefined) {
|
|
1932
|
+
setMovedItems(prev => new Set(prev).add(movedId));
|
|
1933
|
+
}
|
|
1934
|
+
setHasChanges(true);
|
|
1935
|
+
}, []);
|
|
1936
|
+
const addItem = (newItem) => {
|
|
1937
|
+
setItems(prev => [...prev, newItem]);
|
|
1938
|
+
setHasChanges(true);
|
|
1939
|
+
};
|
|
1940
|
+
const removeItem = (id) => {
|
|
1941
|
+
setItems(prev => prev.filter(item => item.id !== id));
|
|
1942
|
+
setHasChanges(true);
|
|
1943
|
+
};
|
|
1944
|
+
const handleSave = async (onSave) => {
|
|
1945
|
+
await onSave(items);
|
|
1946
|
+
setOriginalItems(items);
|
|
1947
|
+
setMovedItems(new Set());
|
|
1948
|
+
setHasChanges(false);
|
|
1949
|
+
setResetKey(prev => prev + 1);
|
|
1950
|
+
};
|
|
1951
|
+
const updateItems = (newItems) => {
|
|
1952
|
+
setItems(newItems);
|
|
1953
|
+
setOriginalItems(newItems); // Keep original items in sync
|
|
1954
|
+
setHasChanges(true);
|
|
1955
|
+
};
|
|
1956
|
+
const handleDiscard = () => {
|
|
1957
|
+
setItems(originalItems);
|
|
1958
|
+
setMovedItems(new Set());
|
|
1959
|
+
setHasChanges(false);
|
|
1960
|
+
setResetKey(prev => prev + 1);
|
|
1961
|
+
};
|
|
1962
|
+
return {
|
|
1963
|
+
items,
|
|
1964
|
+
setItems: updateItems,
|
|
1965
|
+
handleReorder,
|
|
1966
|
+
handleSave,
|
|
1967
|
+
handleDiscard,
|
|
1968
|
+
addItem,
|
|
1969
|
+
movedItems,
|
|
1970
|
+
removeItem,
|
|
1971
|
+
hasChanges,
|
|
1972
|
+
resetKey,
|
|
1973
|
+
};
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1469
1976
|
/**
|
|
1470
1977
|
* A table with expandable row groups.
|
|
1471
1978
|
* @param props The data to display
|
|
@@ -1538,7 +2045,7 @@ const CwTableGrouped = props => {
|
|
|
1538
2045
|
function CwFileUpload(fileUploadProps) {
|
|
1539
2046
|
const [previewURL, setPreviewURL] = React.useState("");
|
|
1540
2047
|
const [error, setError] = React.useState(null);
|
|
1541
|
-
const [
|
|
2048
|
+
const [_selectedFileName, setSelectedFileName] = React.useState("");
|
|
1542
2049
|
const [_currentHexContent, setCurrentHexContent] = React.useState("");
|
|
1543
2050
|
React.useEffect(() => {
|
|
1544
2051
|
// If there is hexadecimal preview content, set the Preview URL
|
|
@@ -1550,36 +2057,185 @@ function CwFileUpload(fileUploadProps) {
|
|
|
1550
2057
|
const file = event.target.files?.[0];
|
|
1551
2058
|
setSelectedFileName(file?.name ?? "");
|
|
1552
2059
|
if (file) {
|
|
1553
|
-
|
|
2060
|
+
const allowedExts = fileUploadProps.accept.split(',').map(ext => ext.trim().replace('.', '').toLowerCase());
|
|
2061
|
+
const fileExt = file.name.split('.').pop()?.toLowerCase() ?? "";
|
|
2062
|
+
if (!allowedExts.includes(fileExt)) {
|
|
1554
2063
|
setError(`Invalid file type. Only ${fileUploadProps.acceptString} files are allowed.`);
|
|
1555
2064
|
setPreviewURL("");
|
|
2065
|
+
return;
|
|
1556
2066
|
}
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
reader.
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
2067
|
+
setError(null);
|
|
2068
|
+
const reader = new FileReader();
|
|
2069
|
+
reader.onloadend = () => {
|
|
2070
|
+
if (typeof reader.result === "string") {
|
|
2071
|
+
const hexContent = arrayBufferToHex(reader.result);
|
|
2072
|
+
setCurrentHexContent(hexContent);
|
|
2073
|
+
setPreviewURL(reader.result);
|
|
2074
|
+
setCurrentHexContent(arrayBufferToHex(reader.result));
|
|
2075
|
+
// Call function to store hexadecimal content
|
|
2076
|
+
fileUploadProps.onSaveHexContent(arrayBufferToHex(reader.result));
|
|
2077
|
+
}
|
|
2078
|
+
};
|
|
2079
|
+
reader.readAsDataURL(file);
|
|
2080
|
+
}
|
|
2081
|
+
};
|
|
2082
|
+
// Function to convert the image buffer into hexadecimal content
|
|
2083
|
+
const arrayBufferToHex = (dataUrl) => {
|
|
2084
|
+
// Decodes the base64 of the URL data
|
|
2085
|
+
const base64 = dataUrl.split(",")[1];
|
|
2086
|
+
const binary = atob(base64);
|
|
2087
|
+
let hex = "";
|
|
2088
|
+
for (let i = 0; i < binary.length; i++) {
|
|
2089
|
+
hex += binary.charCodeAt(i).toString(16).padStart(2, "0");
|
|
2090
|
+
}
|
|
2091
|
+
return hex;
|
|
2092
|
+
};
|
|
2093
|
+
return (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { className: "row", children: [jsxRuntime.jsx("input", { className: "cw-button", type: "file", accept: fileUploadProps.accept, readOnly: true, placeholder: "No file selected...", onChange: handleFileChange }), previewURL && (jsxRuntime.jsx("div", { className: "row", children: jsxRuntime.jsx("img", { src: previewURL, alt: "Preview", style: { maxWidth: "200px", maxHeight: "200px" } }) }))] }), error && jsxRuntime.jsx("div", { className: "row error", children: error }), jsxRuntime.jsx("div", { className: "row", children: jsxRuntime.jsxs("label", { children: ["Please note: File/image has to be in ", fileUploadProps.acceptString, " format", fileUploadProps.sizeString && `, ${fileUploadProps.sizeString}`] }) })] }));
|
|
2094
|
+
}
|
|
2095
|
+
|
|
2096
|
+
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"};
|
|
2097
|
+
|
|
2098
|
+
function CwFileUploadMultiple(fileUploadProps) {
|
|
2099
|
+
const fileInputRef = React.useRef(null);
|
|
2100
|
+
const [selectedFiles, setSelectedFiles] = React.useState([]);
|
|
2101
|
+
const getFileExtension = (filename) => {
|
|
2102
|
+
return filename.split('.').pop()?.toUpperCase() || '';
|
|
2103
|
+
};
|
|
2104
|
+
const validateFile = (file) => {
|
|
2105
|
+
// Validate the size of the file
|
|
2106
|
+
if (fileUploadProps.maxFileSize) {
|
|
2107
|
+
const fileSizeInMB = file.size / (1024 * 1024);
|
|
2108
|
+
if (fileSizeInMB > fileUploadProps.maxFileSize) {
|
|
2109
|
+
return {
|
|
2110
|
+
isValid: false,
|
|
2111
|
+
error: `File "${file.name}" is too large. Maximum size allowed is ${fileUploadProps.maxFileSize}MB.`
|
|
1569
2112
|
};
|
|
1570
|
-
reader.readAsDataURL(file);
|
|
1571
2113
|
}
|
|
1572
2114
|
}
|
|
2115
|
+
// Validate file type by extension (based in accept)
|
|
2116
|
+
if (fileUploadProps.accept) {
|
|
2117
|
+
const acceptedExtensions = fileUploadProps.accept.split(',').map(ext => ext.trim().toLowerCase());
|
|
2118
|
+
const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();
|
|
2119
|
+
const isExtensionValid = acceptedExtensions.some(ext => {
|
|
2120
|
+
if (ext.startsWith('.')) {
|
|
2121
|
+
return ext === fileExtension;
|
|
2122
|
+
}
|
|
2123
|
+
return false;
|
|
2124
|
+
});
|
|
2125
|
+
if (!isExtensionValid) {
|
|
2126
|
+
return {
|
|
2127
|
+
isValid: false,
|
|
2128
|
+
error: `File "${file.name}" has an invalid format. Allowed formats: ${fileUploadProps.accept}`
|
|
2129
|
+
};
|
|
2130
|
+
}
|
|
2131
|
+
}
|
|
2132
|
+
// Validate MIME type if specified
|
|
2133
|
+
if (fileUploadProps.allowedTypes && fileUploadProps.allowedTypes.length > 0) {
|
|
2134
|
+
const isMimeTypeValid = fileUploadProps.allowedTypes.includes(file.type);
|
|
2135
|
+
if (!isMimeTypeValid) {
|
|
2136
|
+
return {
|
|
2137
|
+
isValid: false,
|
|
2138
|
+
error: `File "${file.name}" has an invalid MIME type. Allowed types: ${fileUploadProps.allowedTypes.join(', ')}`
|
|
2139
|
+
};
|
|
2140
|
+
}
|
|
2141
|
+
}
|
|
2142
|
+
return { isValid: true };
|
|
2143
|
+
};
|
|
2144
|
+
const processFiles = (files, existingFiles = []) => {
|
|
2145
|
+
const fileArray = Array.from(files);
|
|
2146
|
+
const validFiles = [...existingFiles]; // Start with existing files
|
|
2147
|
+
const errors = [];
|
|
2148
|
+
for (const file of fileArray) {
|
|
2149
|
+
// Check if the file already exists (by name and size)
|
|
2150
|
+
const isDuplicate = existingFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size);
|
|
2151
|
+
if (isDuplicate) {
|
|
2152
|
+
errors.push(`File "${file.name}" is already selected.`);
|
|
2153
|
+
continue;
|
|
2154
|
+
}
|
|
2155
|
+
const validation = validateFile(file);
|
|
2156
|
+
if (!validation.isValid) {
|
|
2157
|
+
errors.push(validation.error);
|
|
2158
|
+
continue;
|
|
2159
|
+
}
|
|
2160
|
+
validFiles.push(file);
|
|
2161
|
+
}
|
|
2162
|
+
// Show errors if any
|
|
2163
|
+
if (errors.length > 0) {
|
|
2164
|
+
if (fileUploadProps.onError) {
|
|
2165
|
+
fileUploadProps.onError(errors.join('\n'));
|
|
2166
|
+
}
|
|
2167
|
+
else {
|
|
2168
|
+
console.error(errors.join('\n'));
|
|
2169
|
+
alert(errors.join('\n')); // Fallback if there is no onError
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
// If not multiple, only take the first valid file (replace)
|
|
2173
|
+
if (!fileUploadProps.multiple && validFiles.length > 1) {
|
|
2174
|
+
return [validFiles[validFiles.length - 1]]; // Take the last file added
|
|
2175
|
+
}
|
|
2176
|
+
return validFiles;
|
|
1573
2177
|
};
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
const
|
|
1577
|
-
|
|
1578
|
-
|
|
2178
|
+
const updateFileInput = (files) => {
|
|
2179
|
+
// Create FileList with all files
|
|
2180
|
+
const dataTransfer = new DataTransfer();
|
|
2181
|
+
files.forEach(file => dataTransfer.items.add(file));
|
|
2182
|
+
if (fileInputRef.current) {
|
|
2183
|
+
fileInputRef.current.files = dataTransfer.files;
|
|
1579
2184
|
}
|
|
1580
|
-
|
|
2185
|
+
if (fileUploadProps.onSelect) {
|
|
2186
|
+
fileUploadProps.onSelect(dataTransfer.files);
|
|
2187
|
+
}
|
|
2188
|
+
};
|
|
2189
|
+
const handleFileSelect = (event) => {
|
|
2190
|
+
const files = event.target.files;
|
|
2191
|
+
if (files && files.length > 0) {
|
|
2192
|
+
const updatedFiles = processFiles(files, selectedFiles);
|
|
2193
|
+
if (updatedFiles.length > selectedFiles.length || !fileUploadProps.multiple) {
|
|
2194
|
+
setSelectedFiles(updatedFiles);
|
|
2195
|
+
updateFileInput(updatedFiles);
|
|
2196
|
+
}
|
|
2197
|
+
else {
|
|
2198
|
+
// Clear input if no new valid files were added
|
|
2199
|
+
if (fileInputRef.current) {
|
|
2200
|
+
fileInputRef.current.value = '';
|
|
2201
|
+
}
|
|
2202
|
+
}
|
|
2203
|
+
}
|
|
2204
|
+
};
|
|
2205
|
+
const removeFile = (indexToRemove) => {
|
|
2206
|
+
const newFiles = selectedFiles.filter((_, index) => index !== indexToRemove);
|
|
2207
|
+
setSelectedFiles(newFiles);
|
|
2208
|
+
updateFileInput(newFiles);
|
|
1581
2209
|
};
|
|
1582
|
-
|
|
2210
|
+
const removeAllFiles = () => {
|
|
2211
|
+
setSelectedFiles([]);
|
|
2212
|
+
if (fileInputRef.current) {
|
|
2213
|
+
fileInputRef.current.value = '';
|
|
2214
|
+
}
|
|
2215
|
+
if (fileUploadProps.onSelect) {
|
|
2216
|
+
fileUploadProps.onSelect(null);
|
|
2217
|
+
}
|
|
2218
|
+
};
|
|
2219
|
+
const handleButtonClick = () => {
|
|
2220
|
+
fileInputRef.current?.click();
|
|
2221
|
+
};
|
|
2222
|
+
const handleDragOver = (event) => {
|
|
2223
|
+
event.preventDefault();
|
|
2224
|
+
event.stopPropagation();
|
|
2225
|
+
};
|
|
2226
|
+
const handleDrop = (event) => {
|
|
2227
|
+
event.preventDefault();
|
|
2228
|
+
event.stopPropagation();
|
|
2229
|
+
const files = event.dataTransfer.files;
|
|
2230
|
+
if (files && files.length > 0) {
|
|
2231
|
+
const updatedFiles = processFiles(files, selectedFiles);
|
|
2232
|
+
if (updatedFiles.length > selectedFiles.length || !fileUploadProps.multiple) {
|
|
2233
|
+
setSelectedFiles(updatedFiles);
|
|
2234
|
+
updateFileInput(updatedFiles);
|
|
2235
|
+
}
|
|
2236
|
+
}
|
|
2237
|
+
};
|
|
2238
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$b.fileUploadContainer} ${fileUploadProps.className}`, children: [jsxRuntime.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 ? (jsxRuntime.jsxs("div", { className: `${styles$b.uploadArea} ${fileUploadProps.disabled ? styles$b.uploadAreaDisabled : ''}`, onDragOver: handleDragOver, onDrop: handleDrop, onClick: !fileUploadProps.disabled ? handleButtonClick : undefined, children: [jsxRuntime.jsx(CwIcon, { iconId: "upload" }), jsxRuntime.jsx("p", { className: `${styles$b.uploadTitle}`, children: fileUploadProps.disabled ? 'Upload disabled' : 'Click to upload or drag and drop' }), jsxRuntime.jsxs("p", { className: `${styles$b.uploadSubtitle}`, children: [fileUploadProps.accept ? `Accepted files: ${fileUploadProps.accept}` : 'All file types accepted', !fileUploadProps.multiple && ' (Single file only)'] })] })) : (jsxRuntime.jsxs("div", { className: styles$b.filesContainer, children: [jsxRuntime.jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsxRuntime.jsxs("small", { className: styles$b.filesCount, children: [selectedFiles.length, " file", selectedFiles.length !== 1 ? 's' : '', " selected"] }), jsxRuntime.jsx(CwButton, { onClick: removeAllFiles, disabled: fileUploadProps.disabled, color: "danger", variant: "outline", icon: "delete", text: "Clear all" })] }), selectedFiles.map((file, index) => (jsxRuntime.jsxs("div", { className: styles$b.fileItem, children: [jsxRuntime.jsxs("div", { className: styles$b.fileIcon, children: [jsxRuntime.jsx(CwIcon, { iconId: "page" }), jsxRuntime.jsx("span", { className: styles$b.fileExtension, children: getFileExtension(file.name) })] }), jsxRuntime.jsxs("div", { className: styles$b.fileInfo, children: [jsxRuntime.jsx("p", { className: styles$b.fileName, children: file.name }), jsxRuntime.jsxs("p", { className: styles$b.fileSize, children: [(file.size / 1024).toFixed(1), " KB"] })] }), jsxRuntime.jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => removeFile(index), className: styles$b.smallButton })] }, index))), fileUploadProps.multiple && (jsxRuntime.jsx(CwButton, { text: "Add More Files", icon: "plus", variant: "outline", onClick: handleButtonClick, disabled: fileUploadProps.disabled })), !fileUploadProps.multiple && (jsxRuntime.jsx(CwButton, { text: "Change File", icon: "refresh", onClick: handleButtonClick, disabled: fileUploadProps.disabled }))] }))] }));
|
|
1583
2239
|
}
|
|
1584
2240
|
|
|
1585
2241
|
function CwInput(CwInputProps) {
|
|
@@ -1622,6 +2278,355 @@ function CwDigit(props) {
|
|
|
1622
2278
|
return (jsxRuntime.jsx("div", { className: "cw-input-text", children: jsxRuntime.jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxRuntime.jsxs(CwLabel, { ...labelProps, children: [iconProps && jsxRuntime.jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxRuntime.jsx("input", { type: "number", ...inputProps }), buttonProps && jsxRuntime.jsx(CwButton, { ...buttonProps })] }) }));
|
|
1623
2279
|
}
|
|
1624
2280
|
|
|
2281
|
+
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"};
|
|
2282
|
+
|
|
2283
|
+
const CwColorPicker = ({ initialColor, onChange, previewText = "Color preview" }) => {
|
|
2284
|
+
const [rgb, setRgb] = React.useState({ r: 255, g: 255, b: 255 });
|
|
2285
|
+
const [hsv, setHsv] = React.useState({ h: 0, s: 0, v: 100 });
|
|
2286
|
+
const [hexColor, setHexColor] = React.useState(initialColor || '#FFFFFF');
|
|
2287
|
+
const [initialized, setInitialized] = React.useState(false);
|
|
2288
|
+
const [inputMode, setInputMode] = React.useState('hex');
|
|
2289
|
+
// Prevent infinite update loops
|
|
2290
|
+
const isUpdatingRef = React.useRef(false);
|
|
2291
|
+
const hueBarRef = React.useRef(null);
|
|
2292
|
+
const colorAreaRef = React.useRef(null);
|
|
2293
|
+
// Convert HSV to RGB
|
|
2294
|
+
const hsvToRgb = (h, s, v) => {
|
|
2295
|
+
h = h / 360;
|
|
2296
|
+
s = s / 100;
|
|
2297
|
+
v = v / 100;
|
|
2298
|
+
let r = 0, g = 0, b = 0;
|
|
2299
|
+
if (s === 0) {
|
|
2300
|
+
r = g = b = v;
|
|
2301
|
+
}
|
|
2302
|
+
else {
|
|
2303
|
+
const i = Math.floor(h * 6);
|
|
2304
|
+
const f = h * 6 - i;
|
|
2305
|
+
const p = v * (1 - s);
|
|
2306
|
+
const q = v * (1 - f * s);
|
|
2307
|
+
const t = v * (1 - (1 - f) * s);
|
|
2308
|
+
switch (i % 6) {
|
|
2309
|
+
case 0:
|
|
2310
|
+
r = v;
|
|
2311
|
+
g = t;
|
|
2312
|
+
b = p;
|
|
2313
|
+
break;
|
|
2314
|
+
case 1:
|
|
2315
|
+
r = q;
|
|
2316
|
+
g = v;
|
|
2317
|
+
b = p;
|
|
2318
|
+
break;
|
|
2319
|
+
case 2:
|
|
2320
|
+
r = p;
|
|
2321
|
+
g = v;
|
|
2322
|
+
b = t;
|
|
2323
|
+
break;
|
|
2324
|
+
case 3:
|
|
2325
|
+
r = p;
|
|
2326
|
+
g = q;
|
|
2327
|
+
b = v;
|
|
2328
|
+
break;
|
|
2329
|
+
case 4:
|
|
2330
|
+
r = t;
|
|
2331
|
+
g = p;
|
|
2332
|
+
b = v;
|
|
2333
|
+
break;
|
|
2334
|
+
case 5:
|
|
2335
|
+
r = v;
|
|
2336
|
+
g = p;
|
|
2337
|
+
b = q;
|
|
2338
|
+
break;
|
|
2339
|
+
}
|
|
2340
|
+
}
|
|
2341
|
+
return {
|
|
2342
|
+
r: Math.round(r * 255),
|
|
2343
|
+
g: Math.round(g * 255),
|
|
2344
|
+
b: Math.round(b * 255)
|
|
2345
|
+
};
|
|
2346
|
+
};
|
|
2347
|
+
// Convert RGB to HSV
|
|
2348
|
+
const rgbToHsv = (r, g, b) => {
|
|
2349
|
+
r /= 255;
|
|
2350
|
+
g /= 255;
|
|
2351
|
+
b /= 255;
|
|
2352
|
+
const max = Math.max(r, g, b);
|
|
2353
|
+
const min = Math.min(r, g, b);
|
|
2354
|
+
let h = 0;
|
|
2355
|
+
const v = max;
|
|
2356
|
+
const d = max - min;
|
|
2357
|
+
const s = max === 0 ? 0 : d / max;
|
|
2358
|
+
if (max === min) {
|
|
2359
|
+
h = 0;
|
|
2360
|
+
}
|
|
2361
|
+
else {
|
|
2362
|
+
switch (max) {
|
|
2363
|
+
case r:
|
|
2364
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
2365
|
+
break;
|
|
2366
|
+
case g:
|
|
2367
|
+
h = (b - r) / d + 2;
|
|
2368
|
+
break;
|
|
2369
|
+
case b:
|
|
2370
|
+
h = (r - g) / d + 4;
|
|
2371
|
+
break;
|
|
2372
|
+
}
|
|
2373
|
+
h /= 6;
|
|
2374
|
+
}
|
|
2375
|
+
return {
|
|
2376
|
+
h: Math.round(h * 360),
|
|
2377
|
+
s: Math.round(s * 100),
|
|
2378
|
+
v: Math.round(v * 100)
|
|
2379
|
+
};
|
|
2380
|
+
};
|
|
2381
|
+
// Convert RGB to HEX
|
|
2382
|
+
const rgbToHex = (r, g, b) => {
|
|
2383
|
+
return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();
|
|
2384
|
+
};
|
|
2385
|
+
// Initialize color values from initial color prop
|
|
2386
|
+
React.useEffect(() => {
|
|
2387
|
+
if (!initialized && initialColor) {
|
|
2388
|
+
const hexToRgb = (hex) => {
|
|
2389
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
2390
|
+
return result ? {
|
|
2391
|
+
r: parseInt(result[1], 16),
|
|
2392
|
+
g: parseInt(result[2], 16),
|
|
2393
|
+
b: parseInt(result[3], 16)
|
|
2394
|
+
} : { r: 255, g: 255, b: 255 };
|
|
2395
|
+
};
|
|
2396
|
+
const initialRgb = hexToRgb(initialColor);
|
|
2397
|
+
setRgb(initialRgb);
|
|
2398
|
+
setHexColor(initialColor);
|
|
2399
|
+
const initialHsv = rgbToHsv(initialRgb.r, initialRgb.g, initialRgb.b);
|
|
2400
|
+
setHsv(initialHsv);
|
|
2401
|
+
setInitialized(true);
|
|
2402
|
+
}
|
|
2403
|
+
}, [initialColor, initialized]);
|
|
2404
|
+
// Update color state and notify parent component of changes
|
|
2405
|
+
const updateColorState = React.useCallback((newRgb, newHsv) => {
|
|
2406
|
+
if (isUpdatingRef.current)
|
|
2407
|
+
return;
|
|
2408
|
+
isUpdatingRef.current = true;
|
|
2409
|
+
// Update RGB and HSV
|
|
2410
|
+
setRgb(newRgb);
|
|
2411
|
+
setHsv(newHsv);
|
|
2412
|
+
// Calculate and update HEX
|
|
2413
|
+
const newHex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);
|
|
2414
|
+
setHexColor(newHex);
|
|
2415
|
+
// Notify changes after render cycle
|
|
2416
|
+
requestAnimationFrame(() => {
|
|
2417
|
+
onChange(newHex, newRgb, newHsv);
|
|
2418
|
+
isUpdatingRef.current = false;
|
|
2419
|
+
});
|
|
2420
|
+
}, [onChange]);
|
|
2421
|
+
const handleRgbChange = (e) => {
|
|
2422
|
+
const { name, value } = e.target;
|
|
2423
|
+
const numValue = Math.min(255, Math.max(0, parseInt(value, 10) || 0));
|
|
2424
|
+
const newRgb = { ...rgb, [name]: numValue };
|
|
2425
|
+
const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
|
|
2426
|
+
updateColorState(newRgb, newHsv);
|
|
2427
|
+
};
|
|
2428
|
+
const toggleInputMode = () => {
|
|
2429
|
+
setInputMode(inputMode === 'hex' ? 'rgb' : 'hex');
|
|
2430
|
+
};
|
|
2431
|
+
const handleHexChange = (e) => {
|
|
2432
|
+
const { value } = e.target;
|
|
2433
|
+
setHexColor(value);
|
|
2434
|
+
// Validate and convert HEX to RGB
|
|
2435
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(value);
|
|
2436
|
+
if (result) {
|
|
2437
|
+
const newRgb = {
|
|
2438
|
+
r: parseInt(result[1], 16),
|
|
2439
|
+
g: parseInt(result[2], 16),
|
|
2440
|
+
b: parseInt(result[3], 16)
|
|
2441
|
+
};
|
|
2442
|
+
const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
|
|
2443
|
+
// Update RGB and HSV without triggering full cycle
|
|
2444
|
+
setRgb(newRgb);
|
|
2445
|
+
setHsv(newHsv);
|
|
2446
|
+
// Notify changes
|
|
2447
|
+
requestAnimationFrame(() => {
|
|
2448
|
+
onChange(value, newRgb, newHsv);
|
|
2449
|
+
});
|
|
2450
|
+
}
|
|
2451
|
+
};
|
|
2452
|
+
// Handle hue bar click
|
|
2453
|
+
const handleHueBarClick = (e) => {
|
|
2454
|
+
if (!hueBarRef.current)
|
|
2455
|
+
return;
|
|
2456
|
+
const rect = hueBarRef.current.getBoundingClientRect();
|
|
2457
|
+
const height = rect.height;
|
|
2458
|
+
const y = e.clientY - rect.top;
|
|
2459
|
+
// Calculate hue value based on vertical position (0-360)
|
|
2460
|
+
const newHue = Math.round(360 * (1 - Math.min(1, Math.max(0, y / height))));
|
|
2461
|
+
const newHsv = { ...hsv, h: newHue };
|
|
2462
|
+
const newRgb = hsvToRgb(newHue, hsv.s, hsv.v);
|
|
2463
|
+
updateColorState(newRgb, newHsv);
|
|
2464
|
+
};
|
|
2465
|
+
// Handle color area click (saturation/value)
|
|
2466
|
+
const handleColorAreaClick = (e) => {
|
|
2467
|
+
if (!colorAreaRef.current)
|
|
2468
|
+
return;
|
|
2469
|
+
const rect = colorAreaRef.current.getBoundingClientRect();
|
|
2470
|
+
const width = rect.width;
|
|
2471
|
+
const height = rect.height;
|
|
2472
|
+
const x = e.clientX - rect.left;
|
|
2473
|
+
const y = e.clientY - rect.top;
|
|
2474
|
+
// Calculate saturation and value based on position
|
|
2475
|
+
const newSaturation = Math.round(100 * Math.min(1, Math.max(0, x / width)));
|
|
2476
|
+
const newValue = Math.round(100 * (1 - Math.min(1, Math.max(0, y / height))));
|
|
2477
|
+
const newHsv = { ...hsv, s: newSaturation, v: newValue };
|
|
2478
|
+
const newRgb = hsvToRgb(hsv.h, newSaturation, newValue);
|
|
2479
|
+
updateColorState(newRgb, newHsv);
|
|
2480
|
+
};
|
|
2481
|
+
// Calculate background color for the main area based on current hue
|
|
2482
|
+
const hueColor = hsvToRgb(hsv.h, 100, 100);
|
|
2483
|
+
const hueHex = rgbToHex(hueColor.r, hueColor.g, hueColor.b);
|
|
2484
|
+
return (jsxRuntime.jsxs("div", { className: "cw-flex-column cw-gap-small", children: [jsxRuntime.jsxs("div", { className: "cw-flex-row cw-align-between-center cw-gap-small", children: [jsxRuntime.jsx("div", { className: styles$a.colorPreview, style: { backgroundColor: hexColor, color: getContrastColor(hexColor) }, children: previewText }), jsxRuntime.jsx("button", { type: "button", className: "cw-button", onClick: toggleInputMode, style: { minWidth: "3ch" }, children: inputMode === 'hex' ? 'RGB' : 'HEX' })] }), jsxRuntime.jsx("div", { className: "color-inputs-row", children: inputMode === 'hex' ? (jsxRuntime.jsx("input", { type: "text", value: hexColor, onChange: handleHexChange })) : (jsxRuntime.jsxs("div", { className: "cw-grid-base-3 cw-gap-small", children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("label", { children: "R:" }), jsxRuntime.jsx("input", { type: "number", name: "r", min: "0", max: "255", value: rgb.r, onChange: handleRgbChange })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("label", { children: "G:" }), jsxRuntime.jsx("input", { type: "number", name: "g", min: "0", max: "255", value: rgb.g, onChange: handleRgbChange })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("label", { children: "B:" }), jsxRuntime.jsx("input", { type: "number", name: "b", min: "0", max: "255", value: rgb.b, onChange: handleRgbChange })] })] })) }), jsxRuntime.jsxs("div", { className: styles$a.colorPickerInteractiveArea, children: [jsxRuntime.jsx("div", { className: styles$a.hueBar, ref: hueBarRef, onClick: handleHueBarClick, children: jsxRuntime.jsx("div", { className: styles$a.hueBarSlider, style: { top: `${(360 - hsv.h) / 360 * 100}%` } }) }), jsxRuntime.jsxs("div", { className: styles$a.colorArea, ref: colorAreaRef, onClick: handleColorAreaClick, children: [jsxRuntime.jsxs("div", { className: styles$a.colorAreaOverlay, children: [jsxRuntime.jsx("div", { className: styles$a.hueBackground, style: { backgroundColor: hueHex } }), jsxRuntime.jsx("div", { className: styles$a.whiteGradient }), jsxRuntime.jsx("div", { className: styles$a.blackGradient })] }), jsxRuntime.jsx("div", { className: styles$a.colorAreaCursor, style: {
|
|
2485
|
+
left: `${hsv.s}%`,
|
|
2486
|
+
top: `${100 - hsv.v}%`
|
|
2487
|
+
} })] })] })] }));
|
|
2488
|
+
};
|
|
2489
|
+
|
|
2490
|
+
var styles$9 = {"selectColor":"cw-input-color-module_selectColor__DTo3V","disabled":"cw-input-color-module_disabled__O1fK5","colorDropdown":"cw-input-color-module_colorDropdown__pX2bc"};
|
|
2491
|
+
|
|
2492
|
+
const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled = false, width = '4rem', height = '2rem' }) => {
|
|
2493
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
2494
|
+
const containerRef = React.useRef(null);
|
|
2495
|
+
const dropdownRef = React.useRef(null);
|
|
2496
|
+
const DROPDOWN_WIDTH = 280;
|
|
2497
|
+
const DROPDOWN_HEIGHT = 250;
|
|
2498
|
+
const MARGIN = 8;
|
|
2499
|
+
// Calculate dropdown position
|
|
2500
|
+
const dropdownStyle = React.useMemo(() => {
|
|
2501
|
+
if (!isOpen || !containerRef.current) {
|
|
2502
|
+
return { display: 'none' };
|
|
2503
|
+
}
|
|
2504
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
2505
|
+
const viewportWidth = window.innerWidth;
|
|
2506
|
+
const viewportHeight = window.innerHeight;
|
|
2507
|
+
// Calculate initial positions
|
|
2508
|
+
let top = rect.bottom + MARGIN;
|
|
2509
|
+
let left = rect.left;
|
|
2510
|
+
// Adjust horizontal position if needed
|
|
2511
|
+
if (left + DROPDOWN_WIDTH > viewportWidth - MARGIN) {
|
|
2512
|
+
// Try to align with right edge of trigger
|
|
2513
|
+
left = rect.right - DROPDOWN_WIDTH;
|
|
2514
|
+
// If still out of bounds, stick to right edge of viewport
|
|
2515
|
+
if (left < MARGIN) {
|
|
2516
|
+
left = viewportWidth - DROPDOWN_WIDTH - MARGIN;
|
|
2517
|
+
}
|
|
2518
|
+
}
|
|
2519
|
+
// Adjust vertical position if needed
|
|
2520
|
+
if (top + DROPDOWN_HEIGHT > viewportHeight - MARGIN) {
|
|
2521
|
+
// Try to show above the trigger
|
|
2522
|
+
const topPosition = rect.top - DROPDOWN_HEIGHT - MARGIN;
|
|
2523
|
+
// Only use top position if there's enough space
|
|
2524
|
+
if (topPosition > MARGIN) {
|
|
2525
|
+
top = topPosition;
|
|
2526
|
+
}
|
|
2527
|
+
else {
|
|
2528
|
+
// Keep at bottom but ensure some visibility
|
|
2529
|
+
top = Math.min(top, viewportHeight - DROPDOWN_HEIGHT - MARGIN);
|
|
2530
|
+
}
|
|
2531
|
+
}
|
|
2532
|
+
return {
|
|
2533
|
+
position: 'fixed',
|
|
2534
|
+
top: `${Math.max(MARGIN, top)}px`,
|
|
2535
|
+
left: `${Math.max(MARGIN, left)}px`,
|
|
2536
|
+
zIndex: 1000,
|
|
2537
|
+
width: `${DROPDOWN_WIDTH}px`
|
|
2538
|
+
};
|
|
2539
|
+
}, [isOpen]);
|
|
2540
|
+
const handleToggle = () => {
|
|
2541
|
+
if (disabled)
|
|
2542
|
+
return;
|
|
2543
|
+
setIsOpen(prev => !prev);
|
|
2544
|
+
};
|
|
2545
|
+
// Recalculate position on scroll/resize
|
|
2546
|
+
React.useEffect(() => {
|
|
2547
|
+
if (!isOpen)
|
|
2548
|
+
return;
|
|
2549
|
+
const handlePositionUpdate = () => {
|
|
2550
|
+
// Force re-render to recalculate position
|
|
2551
|
+
setIsOpen(false);
|
|
2552
|
+
requestAnimationFrame(() => setIsOpen(true));
|
|
2553
|
+
};
|
|
2554
|
+
// Debounced handlers
|
|
2555
|
+
let resizeTimeout;
|
|
2556
|
+
let scrollTimeout;
|
|
2557
|
+
const handleResize = () => {
|
|
2558
|
+
clearTimeout(resizeTimeout);
|
|
2559
|
+
resizeTimeout = setTimeout(handlePositionUpdate, 100);
|
|
2560
|
+
};
|
|
2561
|
+
const handleScroll = () => {
|
|
2562
|
+
clearTimeout(scrollTimeout);
|
|
2563
|
+
scrollTimeout = setTimeout(handlePositionUpdate, 50);
|
|
2564
|
+
};
|
|
2565
|
+
window.addEventListener('resize', handleResize);
|
|
2566
|
+
window.addEventListener('scroll', handleScroll, true);
|
|
2567
|
+
return () => {
|
|
2568
|
+
window.removeEventListener('resize', handleResize);
|
|
2569
|
+
window.removeEventListener('scroll', handleScroll, true);
|
|
2570
|
+
clearTimeout(resizeTimeout);
|
|
2571
|
+
clearTimeout(scrollTimeout);
|
|
2572
|
+
};
|
|
2573
|
+
}, [isOpen]);
|
|
2574
|
+
// Handle outside clicks and escape
|
|
2575
|
+
React.useEffect(() => {
|
|
2576
|
+
if (!isOpen)
|
|
2577
|
+
return;
|
|
2578
|
+
const handleClickOutside = (event) => {
|
|
2579
|
+
const target = event.target;
|
|
2580
|
+
// Check if click is outside both container and dropdown
|
|
2581
|
+
if (containerRef.current &&
|
|
2582
|
+
!containerRef.current.contains(target) &&
|
|
2583
|
+
dropdownRef.current &&
|
|
2584
|
+
!dropdownRef.current.contains(target)) {
|
|
2585
|
+
setIsOpen(false);
|
|
2586
|
+
}
|
|
2587
|
+
};
|
|
2588
|
+
const handleEscape = (event) => {
|
|
2589
|
+
if (event.key === 'Escape') {
|
|
2590
|
+
setIsOpen(false);
|
|
2591
|
+
// Return focus to trigger
|
|
2592
|
+
containerRef.current?.focus();
|
|
2593
|
+
}
|
|
2594
|
+
};
|
|
2595
|
+
// Use capture phase for better event handling
|
|
2596
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
2597
|
+
document.addEventListener('keydown', handleEscape);
|
|
2598
|
+
return () => {
|
|
2599
|
+
document.removeEventListener('click', handleClickOutside, true);
|
|
2600
|
+
document.removeEventListener('keydown', handleEscape);
|
|
2601
|
+
};
|
|
2602
|
+
}, [isOpen]);
|
|
2603
|
+
const handleColorChange = (color) => {
|
|
2604
|
+
onChange(color);
|
|
2605
|
+
};
|
|
2606
|
+
const handleKeyDown = (e) => {
|
|
2607
|
+
if (disabled)
|
|
2608
|
+
return;
|
|
2609
|
+
switch (e.key) {
|
|
2610
|
+
case 'Enter':
|
|
2611
|
+
case ' ':
|
|
2612
|
+
e.preventDefault();
|
|
2613
|
+
handleToggle();
|
|
2614
|
+
break;
|
|
2615
|
+
case 'Escape':
|
|
2616
|
+
if (isOpen) {
|
|
2617
|
+
e.preventDefault();
|
|
2618
|
+
setIsOpen(false);
|
|
2619
|
+
}
|
|
2620
|
+
break;
|
|
2621
|
+
}
|
|
2622
|
+
};
|
|
2623
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { ref: containerRef, onClick: handleToggle, className: `${styles$9.selectColor} ${disabled ? styles$9.disabled : ''}`, style: {
|
|
2624
|
+
width,
|
|
2625
|
+
height,
|
|
2626
|
+
backgroundColor: value,
|
|
2627
|
+
}, "aria-label": "Open color picker", "aria-expanded": isOpen, "aria-haspopup": "dialog", role: "button", tabIndex: disabled ? -1 : 0, onKeyDown: handleKeyDown }), isOpen && reactDom.createPortal(jsxRuntime.jsx("div", { ref: dropdownRef, className: styles$9.colorDropdown, style: dropdownStyle, role: "dialog", "aria-modal": "true", "aria-label": "Color picker", children: jsxRuntime.jsx(CwColorPicker, { initialColor: value, onChange: handleColorChange, previewText: previewText }) }), document.body)] }));
|
|
2628
|
+
};
|
|
2629
|
+
|
|
1625
2630
|
/**
|
|
1626
2631
|
* Input for entering a string of text.
|
|
1627
2632
|
* @remarks
|
|
@@ -1642,8 +2647,11 @@ function CwDigit(props) {
|
|
|
1642
2647
|
* ```
|
|
1643
2648
|
*/
|
|
1644
2649
|
function CwInputText(props) {
|
|
1645
|
-
const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
|
|
1646
|
-
|
|
2650
|
+
const { alignProps, buttonProps, iconProps, labelProps, className, ...inputProps } = props;
|
|
2651
|
+
const containerClassName = className
|
|
2652
|
+
? `cw-input-text ${className}`
|
|
2653
|
+
: "cw-input-text";
|
|
2654
|
+
return (jsxRuntime.jsx("div", { className: containerClassName, children: jsxRuntime.jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxRuntime.jsxs(CwLabel, { ...labelProps, children: [iconProps && jsxRuntime.jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxRuntime.jsx("input", { type: props.type ?? "text", ...inputProps }), buttonProps && jsxRuntime.jsx(CwButton, { ...buttonProps })] }) }));
|
|
1647
2655
|
}
|
|
1648
2656
|
|
|
1649
2657
|
/**
|
|
@@ -1671,7 +2679,7 @@ function CwInputNumber(CwInputNumberProps) {
|
|
|
1671
2679
|
CwInputNumberProps.onChange(e.target.value);
|
|
1672
2680
|
};
|
|
1673
2681
|
return (jsxRuntime.jsxs("div", { className: CwInputNumberProps.labelPosition == "column"
|
|
1674
|
-
? "cw-flex-column"
|
|
2682
|
+
? "cw-flex-column cw-gap-none"
|
|
1675
2683
|
: "cw-flex-row", children: [jsxRuntime.jsx("label", { className: CwInputNumberProps.disabled === true
|
|
1676
2684
|
? CwInputNumberProps.labelClassName + " " + "cw_label_text cw_label_text_disabled"
|
|
1677
2685
|
: CwInputNumberProps.labelClassName + " " + "cw_label_text", children: CwInputNumberProps.labelName }), jsxRuntime.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 })] }));
|
|
@@ -2109,7 +3117,7 @@ const CwImageArea = React.forwardRef((props, ref) => {
|
|
|
2109
3117
|
});
|
|
2110
3118
|
CwImageArea.displayName = "CwImageArea";
|
|
2111
3119
|
|
|
2112
|
-
var styles$
|
|
3120
|
+
var styles$8 = {"cw-weekday-selector":"cw-weekday-selector-module_cw-weekday-selector__Iz4GZ"};
|
|
2113
3121
|
|
|
2114
3122
|
/**
|
|
2115
3123
|
* This class represents a week where days can be selected or unselected
|
|
@@ -2249,34 +3257,30 @@ const CwWeekdaySelector = ({ value = "", onChange, disabled = false }) => {
|
|
|
2249
3257
|
setSelectedDays(newWeekdays);
|
|
2250
3258
|
onChange?.(newWeekdays.toString());
|
|
2251
3259
|
};
|
|
2252
|
-
return (jsxRuntime.jsx("div", { className: styles$
|
|
3260
|
+
return (jsxRuntime.jsx("div", { className: styles$8["cw-weekday-selector"], children: Weekdays.getFullWeek().map(day => (jsxRuntime.jsx("input", { type: "checkbox", "data-day": day, checked: selectedDays.toArray().includes(day), onChange: (e) => handleChange(day, e.target.checked), disabled: disabled }, day))) }));
|
|
2253
3261
|
};
|
|
2254
3262
|
|
|
2255
3263
|
function CwCheckbox(CwCheckboxProps) {
|
|
2256
3264
|
const handleChange = (e) => {
|
|
2257
|
-
CwCheckboxProps.onChange(e.target.checked);
|
|
3265
|
+
CwCheckboxProps.onChange?.(e.target.checked);
|
|
2258
3266
|
};
|
|
3267
|
+
const inputElement = (jsxRuntime.jsx("input", { id: CwCheckboxProps.id, type: "checkbox", checked: CwCheckboxProps.checked, onChange: e => handleChange(e), className: CwCheckboxProps.className ?? '', style: CwCheckboxProps.style, disabled: CwCheckboxProps.disabled }));
|
|
3268
|
+
if (!CwCheckboxProps.labelName) {
|
|
3269
|
+
return inputElement;
|
|
3270
|
+
}
|
|
2259
3271
|
return (jsxRuntime.jsxs("div", { className: CwCheckboxProps.labelPosition === "inline"
|
|
2260
3272
|
? "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer
|
|
2261
3273
|
: CwCheckboxProps.labelPosition === "column"
|
|
2262
3274
|
? "cw_checkboxContent cwellt_flex_column" + " " + CwCheckboxProps.classNameContainer
|
|
2263
|
-
: "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [
|
|
3275
|
+
: "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [inputElement, CwCheckboxProps.labelName ? (jsxRuntime.jsx("label", { htmlFor: CwCheckboxProps.id, className: CwCheckboxProps.labelClassName, children: CwCheckboxProps.labelName })) : null] }));
|
|
2264
3276
|
}
|
|
2265
3277
|
|
|
2266
|
-
/**
|
|
2267
|
-
* Toggle-styled checkbox
|
|
2268
|
-
* @remarks
|
|
2269
|
-
* ```txt
|
|
2270
|
-
* ▁▁▁▁
|
|
2271
|
-
* ( ⦿)
|
|
2272
|
-
* ▔▔▔▔
|
|
2273
|
-
* ```
|
|
2274
|
-
* @example
|
|
2275
|
-
* <CwToggle checked/>
|
|
2276
|
-
*/
|
|
2277
3278
|
function CwToggle(props) {
|
|
2278
|
-
const { labelProps,
|
|
2279
|
-
|
|
3279
|
+
const { labelProps, labelText, iconProps, alignment = "row", className, ...inputProps } = props;
|
|
3280
|
+
const displayText = labelText || labelProps?.text;
|
|
3281
|
+
return (jsxRuntime.jsx("div", { className: `cw-toggle${className ? ` ${className}` : ''}`, children: jsxRuntime.jsxs("label", { className: "cw-toggle-label", "data-direction": alignment, children: [displayText && (jsxRuntime.jsxs("span", { className: "cw-icon-text", children: [iconProps && jsxRuntime.jsx(CwIcon, { ...iconProps }), displayText] })), jsxRuntime.jsx("input", {
|
|
3282
|
+
//data-color={color}
|
|
3283
|
+
type: "checkbox", ...inputProps })] }) }));
|
|
2280
3284
|
}
|
|
2281
3285
|
|
|
2282
3286
|
/**
|
|
@@ -2377,179 +3381,20 @@ function CwDropdownContainer(dropDownContainerProps) {
|
|
|
2377
3381
|
};
|
|
2378
3382
|
}, []);
|
|
2379
3383
|
// #endregion
|
|
2380
|
-
return (jsxRuntime.jsx("div", { className: dropDownContainerProps.dropDownState
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
//
|
|
2389
|
-
const
|
|
2390
|
-
|
|
2391
|
-
? CwelltDropDownFilterProps.DropDownFilterState
|
|
2392
|
-
: false;
|
|
2393
|
-
// * Click on content item
|
|
2394
|
-
const hideDropDown = () => {
|
|
2395
|
-
};
|
|
2396
|
-
return (jsxRuntime.jsxs("div", { id: CwelltDropDownFilterProps.IdContent, className: CwelltDropDownFilterProps.ContentClassName + " " + "cwelltDropDownFilterContent", onClick: hideDropDown, style: CwelltDropDownFilterProps.StyleContent, children: [CwelltDropDownFilterProps.children, jsxRuntime.jsx("div", { className: isVisibleDropDownFilter
|
|
2397
|
-
? // * custom className
|
|
2398
|
-
CwelltDropDownFilterProps.DropDownClassName + " " + "cwelltDropDownFilter"
|
|
2399
|
-
: // * custom className
|
|
2400
|
-
CwelltDropDownFilterProps.DropDownClassName + " " + "cwellt_display_none", style: CwelltDropDownFilterProps.StyleDropDownFilter, onMouseLeave: CwelltDropDownFilterProps.onMouseLeave, id: CwelltDropDownFilterProps.idDropDownFilter, children: jsxRuntime.jsx("div", { className: "cwelltDrop_filterItem", children: CwelltDropDownFilterProps?.DataSourceDropDownItem?.map(indexItem => {
|
|
2401
|
-
return (jsxRuntime.jsx("span", { id: indexItem.IdDropDown_filter, className: "cwelltDropDownItem", children: indexItem.dropDownFilter_desc }));
|
|
2402
|
-
}) }) })] }));
|
|
2403
|
-
}
|
|
2404
|
-
|
|
2405
|
-
function CwDropdownNavigation(CwelltDropDownNavigationProps) {
|
|
2406
|
-
const [isButtonExpanded, setButtonExpanded] = React.useState(false);
|
|
2407
|
-
const [isShowDropDownFilter, setShowDropDownFilter] = React.useState(false);
|
|
2408
|
-
const buttonDropDownFilter = () => {
|
|
2409
|
-
setButtonExpanded(!isButtonExpanded);
|
|
2410
|
-
setShowDropDownFilter(!isShowDropDownFilter);
|
|
2411
|
-
};
|
|
2412
|
-
const clickItemHideDropDownFilter = () => {
|
|
2413
|
-
setShowDropDownFilter(false);
|
|
2414
|
-
};
|
|
2415
|
-
const clickSubItemHideDropDownsFilter = () => {
|
|
2416
|
-
// * Main dropDown
|
|
2417
|
-
setShowDropDownFilter(false);
|
|
2418
|
-
// * Item with subMenu
|
|
2419
|
-
setFilterItem_descExpanded(false);
|
|
2420
|
-
// * Submenu dropDown
|
|
2421
|
-
setShowSubMenu(false);
|
|
2422
|
-
};
|
|
2423
|
-
const [isShowSubMenu, setShowSubMenu] = React.useState(false);
|
|
2424
|
-
const [isFilterItem_descExpanded, setFilterItem_descExpanded] = React.useState(false);
|
|
2425
|
-
const cwelltSubMenu = () => {
|
|
2426
|
-
setShowSubMenu(!isShowSubMenu);
|
|
2427
|
-
setFilterItem_descExpanded(!isFilterItem_descExpanded);
|
|
2428
|
-
};
|
|
2429
|
-
const hideDropDownContent = () => {
|
|
2430
|
-
// * DropDownFilterCrewControl
|
|
2431
|
-
const dropDownFilterCrewControl = document.getElementById("DropDownFilterCrewControl");
|
|
2432
|
-
// * onMouseLeave [ dropDownFilterCrewControl ]
|
|
2433
|
-
dropDownFilterCrewControl?.addEventListener("mouseleave", () => {
|
|
2434
|
-
// * button className
|
|
2435
|
-
setButtonExpanded(false);
|
|
2436
|
-
// * DropDownFilterCrewControl
|
|
2437
|
-
setShowDropDownFilter(false); // todo: Add animation to high content
|
|
2438
|
-
// * Item with subMenu
|
|
2439
|
-
setFilterItem_descExpanded(false);
|
|
2440
|
-
// * SubMenu
|
|
2441
|
-
setShowSubMenu(false);
|
|
2442
|
-
});
|
|
2443
|
-
};
|
|
2444
|
-
// List subMenu
|
|
2445
|
-
const dataSubMenu = [
|
|
2446
|
-
{
|
|
2447
|
-
IdDropDown_filter: 1,
|
|
2448
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: CwelltDropDownNavigationProps.onShowAsignedActive + " " + "cwelltFilterItem_desc", onClick: () => {
|
|
2449
|
-
CwelltDropDownNavigationProps.onShowAsigned();
|
|
2450
|
-
clickSubItemHideDropDownsFilter();
|
|
2451
|
-
}, children: "Show asigned" }))
|
|
2452
|
-
},
|
|
2453
|
-
{
|
|
2454
|
-
IdDropDown_filter: 2,
|
|
2455
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2456
|
-
CwelltDropDownNavigationProps.onShowHotel();
|
|
2457
|
-
clickSubItemHideDropDownsFilter();
|
|
2458
|
-
}, children: "Show hotel" }))
|
|
2459
|
-
},
|
|
2460
|
-
{
|
|
2461
|
-
IdDropDown_filter: 3,
|
|
2462
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2463
|
-
CwelltDropDownNavigationProps.onShowWishes();
|
|
2464
|
-
clickSubItemHideDropDownsFilter();
|
|
2465
|
-
}, children: "Show wishes" }))
|
|
2466
|
-
},
|
|
2467
|
-
{
|
|
2468
|
-
IdDropDown_filter: 4,
|
|
2469
|
-
dropDownFilter_desc: jsxRuntime.jsx("span", { className: "cwelltLineDivider" })
|
|
2470
|
-
},
|
|
2471
|
-
{
|
|
2472
|
-
IdDropDown_filter: 5,
|
|
2473
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2474
|
-
CwelltDropDownNavigationProps.onShowTrainingAlerts();
|
|
2475
|
-
clickSubItemHideDropDownsFilter();
|
|
2476
|
-
}, children: "Show training alerts" }))
|
|
2477
|
-
},
|
|
2478
|
-
{
|
|
2479
|
-
IdDropDown_filter: 6,
|
|
2480
|
-
dropDownFilter_desc: jsxRuntime.jsx("span", { className: "cwelltLineDivider" })
|
|
2481
|
-
},
|
|
2482
|
-
{
|
|
2483
|
-
IdDropDown_filter: 7,
|
|
2484
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2485
|
-
CwelltDropDownNavigationProps.onSmartFilteringFlight();
|
|
2486
|
-
clickSubItemHideDropDownsFilter();
|
|
2487
|
-
}, children: "Smart filtering flight" }))
|
|
2488
|
-
},
|
|
2489
|
-
{
|
|
2490
|
-
IdDropDown_filter: 7,
|
|
2491
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2492
|
-
CwelltDropDownNavigationProps.onSmartFilteringEmployee();
|
|
2493
|
-
clickSubItemHideDropDownsFilter();
|
|
2494
|
-
}, children: "Smart filtering employee" }))
|
|
2495
|
-
},
|
|
2496
|
-
{
|
|
2497
|
-
IdDropDown_filter: 8,
|
|
2498
|
-
dropDownFilter_desc: jsxRuntime.jsx("span", { className: "cwelltLineDivider" })
|
|
2499
|
-
},
|
|
2500
|
-
{
|
|
2501
|
-
IdDropDown_filter: 9,
|
|
2502
|
-
dropDownFilter_desc: (jsxRuntime.jsxs("div", { className: "cwelltDropDownContentForm cwellt_content_r_spaceBetween_center", children: [jsxRuntime.jsx("span", { children: "Flight rows" }), jsxRuntime.jsx(antd.InputNumber, { className: "cwellt_inputdf cwellt_inputdf_number", min: 1, max: 10, style: { width: "4em", marginRight: ".5em" } })] }))
|
|
2503
|
-
},
|
|
2504
|
-
{
|
|
2505
|
-
IdDropDown_filter: 10,
|
|
2506
|
-
dropDownFilter_desc: (jsxRuntime.jsxs("div", { className: "cwelltDropDownContentForm cwellt_content_r_spaceBetween_center", children: [jsxRuntime.jsx("span", { children: "Employee rows" }), jsxRuntime.jsx(antd.InputNumber, { className: "cwellt_inputdf cwellt_inputdf_number", min: 1, max: 10, style: { width: "4em", marginRight: ".5em" } })] }))
|
|
2507
|
-
}
|
|
2508
|
-
];
|
|
2509
|
-
// * DataSource items
|
|
2510
|
-
const dataSourceItemDropDown = [
|
|
2511
|
-
{
|
|
2512
|
-
IdDropDown_filter: 1,
|
|
2513
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2514
|
-
CwelltDropDownNavigationProps.onShowChanges;
|
|
2515
|
-
// clickItemHideDropDownFilter();
|
|
2516
|
-
}, children: "Show changes" }))
|
|
2517
|
-
},
|
|
2518
|
-
{
|
|
2519
|
-
IdDropDown_filter: 2,
|
|
2520
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2521
|
-
CwelltDropDownNavigationProps.onShowVisibleChanges;
|
|
2522
|
-
clickItemHideDropDownFilter();
|
|
2523
|
-
}, children: "Save visible changes" }))
|
|
2524
|
-
},
|
|
2525
|
-
{
|
|
2526
|
-
IdDropDown_filter: 3,
|
|
2527
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2528
|
-
CwelltDropDownNavigationProps.onShowSkip;
|
|
2529
|
-
clickItemHideDropDownFilter();
|
|
2530
|
-
}, children: "Skip" }))
|
|
2531
|
-
},
|
|
2532
|
-
{
|
|
2533
|
-
IdDropDown_filter: 4,
|
|
2534
|
-
dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
|
|
2535
|
-
CwelltDropDownNavigationProps.onShowBulkDuties;
|
|
2536
|
-
clickItemHideDropDownFilter();
|
|
2537
|
-
}, children: "BulkDuties" }))
|
|
2538
|
-
},
|
|
2539
|
-
// View options
|
|
2540
|
-
{
|
|
2541
|
-
IdDropDown_filter: 6,
|
|
2542
|
-
dropDownFilter_desc: (jsxRuntime.jsxs("div", { style: { width: "100%" }, children: [jsxRuntime.jsx("span", { className: isFilterItem_descExpanded
|
|
2543
|
-
? "cwelltFilterItem_desc FilterItem_descExpanded cwellt_justify_space_between"
|
|
2544
|
-
: "cwelltFilterItem_desc FilterItem_descCollapsed cwellt_justify_space_between", onClick: cwelltSubMenu, children: "Show options" }), jsxRuntime.jsx(CwDropdownFilter, { DropDownFilterState: isShowSubMenu, DataSourceDropDownItem: dataSubMenu, StyleContent: { position: "absolute", right: "13em", top: "-9.5em" }, StyleDropDownFilter: { width: "16.9375em" } })] }))
|
|
2545
|
-
}
|
|
2546
|
-
];
|
|
2547
|
-
return (jsxRuntime.jsx(CwDropdownFilter, { IdContent: "DropDownFilterCrewControl", DropDownFilterState: isShowDropDownFilter, DataSourceDropDownItem: dataSourceItemDropDown, ContentClassName: "TestClassNameContent", DropDownClassName: "TestClassNameDropDown", StyleContent: { zIndex: 1000 }, StyleDropDownFilter: { width: "13.75em", position: "absolute", left: "-10em" }, children: jsxRuntime.jsx("button", { className: isButtonExpanded
|
|
2548
|
-
? "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenuExpanded"
|
|
2549
|
-
: "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenu", onClick: buttonDropDownFilter, onMouseLeave: hideDropDownContent }) }));
|
|
3384
|
+
return (jsxRuntime.jsx("div", { className: `cw-dropdown-container ${dropDownContainerProps.className || ''}`, onKeyDown: onKeyPressDropDownContainer, onMouseLeave: onMouseLeaveDropDownContainer, tabIndex: 0, hidden: !dropDownContainerProps.dropDownState, children: jsxRuntime.jsx("div", { className: "cw-dropdown-list", id: dropDownContainerProps.idDropDownContainer, ref: dropDownContainer_ref, children: jsxRuntime.jsx("div", { ref: dropDown_listContainer, children: dropDownContainerProps.children }) }) }));
|
|
3385
|
+
}
|
|
3386
|
+
|
|
3387
|
+
function CwDropdownFilter(props) {
|
|
3388
|
+
// Determine visibility state
|
|
3389
|
+
const isVisible = props.DropDownFilterState ?? false;
|
|
3390
|
+
// Generate CSS classes
|
|
3391
|
+
const containerClassName = `cw-dropdown-filter ${props.isNested ? 'dropdown-nested' : ''}`.trim();
|
|
3392
|
+
// Only apply inline styles for width override if provided
|
|
3393
|
+
const inlineStyles = props.width ? { width: props.width } : undefined;
|
|
3394
|
+
return (jsxRuntime.jsxs("div", { id: props.IdContent, className: containerClassName, children: [props.children, isVisible && (jsxRuntime.jsx("nav", { className: "cw-dropdown-menu", style: inlineStyles, onMouseLeave: props.onMouseLeave, id: props.idDropDownFilter, role: "menu", children: jsxRuntime.jsx("ul", { role: "none", children: props.DataSourceDropDownItem?.map((item) => (jsxRuntime.jsx("li", { id: item.IdDropDown_filter, role: "menuitem", children: item.dropDownFilter_desc }, item.IdDropDown_filter))) }) }))] }));
|
|
2550
3395
|
}
|
|
2551
3396
|
|
|
2552
|
-
const { Option
|
|
3397
|
+
const { Option, OptGroup } = antd.Select;
|
|
2553
3398
|
class MultiSelect extends React__namespace.Component {
|
|
2554
3399
|
constructor(Props) {
|
|
2555
3400
|
super(Props);
|
|
@@ -2642,7 +3487,7 @@ class MultiSelect extends React__namespace.Component {
|
|
|
2642
3487
|
? "cwelltMultiSelect cwelltSelect cwelltSelectSimple cwelltMultiSelect_searchIcon"
|
|
2643
3488
|
: "cwelltMultiSelect cwelltSelect cwelltSelectSimple", placeholder: "Search or filter...", dropdownClassName: this.state.isVisibleDropDown
|
|
2644
3489
|
? " cwelltSelectDropDown cwelltSelectDropDown_active"
|
|
2645
|
-
: "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) => (jsxRuntime.jsx(OptGroup, { label: slArray.length > 0 ? slArray[0]?.type : "", children: slArray.map(sl => (jsxRuntime.jsx(Option
|
|
3490
|
+
: "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) => (jsxRuntime.jsx(OptGroup, { label: slArray.length > 0 ? slArray[0]?.type : "", children: slArray.map(sl => (jsxRuntime.jsx(Option, { value: sl.type + "_" + sl.id, type: sl.type, description: sl.description, val: sl.id, children: jsxRuntime.jsx(antd.Tag, { color: sl.color, children: sl.description }) }, sl.type + "_" + sl.id))) }, "_" + i))) }) }) }));
|
|
2646
3491
|
}
|
|
2647
3492
|
}
|
|
2648
3493
|
|
|
@@ -2664,7 +3509,7 @@ function itemsToMultiFilterTags(items, nameKey, valueKey, category, primaryColor
|
|
|
2664
3509
|
function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
|
|
2665
3510
|
// - Reference div content input search
|
|
2666
3511
|
const headContent_ref = React__namespace.createRef();
|
|
2667
|
-
const optionList = document.getElementsByClassName("
|
|
3512
|
+
const optionList = document.getElementsByClassName("cw-multiselect-option-list");
|
|
2668
3513
|
const refContent = React.useRef(null);
|
|
2669
3514
|
// - Hooks show clear button
|
|
2670
3515
|
const [_isShowClearButton, setShowClearButton] = React.useState(false);
|
|
@@ -2711,6 +3556,11 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
|
|
|
2711
3556
|
}
|
|
2712
3557
|
}
|
|
2713
3558
|
};
|
|
3559
|
+
const handleBlur = (event) => {
|
|
3560
|
+
if (typeof cwelltFilterTabMultiSelectProps.onBlur === "function") {
|
|
3561
|
+
cwelltFilterTabMultiSelectProps.onBlur(event);
|
|
3562
|
+
}
|
|
3563
|
+
};
|
|
2714
3564
|
const clickOptionList = () => {
|
|
2715
3565
|
if (optionList.length > 0) {
|
|
2716
3566
|
Array.from(optionList).forEach(index => {
|
|
@@ -2730,11 +3580,7 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
|
|
|
2730
3580
|
};
|
|
2731
3581
|
});
|
|
2732
3582
|
//#endregion
|
|
2733
|
-
return (jsxRuntime.jsxs("div", { className: cwelltFilterTabMultiSelectProps.className + "
|
|
2734
|
-
// isShowClearButton
|
|
2735
|
-
// ? "headClearIcon cwellt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_abs"
|
|
2736
|
-
// :
|
|
2737
|
-
"headClearIcon", onClick: (e) => onClearInputValue(e) })] }), cwelltFilterTabMultiSelectProps.children] }));
|
|
3583
|
+
return (jsxRuntime.jsxs("div", { className: cwelltFilterTabMultiSelectProps.className + " cw-headfilter", style: cwelltFilterTabMultiSelectProps.style, id: cwelltFilterTabMultiSelectProps.Id, onMouseLeave: cwelltFilterTabMultiSelectProps.onMouseLeave, ref: refContent, children: [jsxRuntime.jsxs("div", { className: "cw-headfilter-wrapper", onClick: () => onClickHeaderFilterTab(), children: [jsxRuntime.jsx(CwIcon, { iconId: "search", size: "large" }), jsxRuntime.jsxs("div", { className: "cw-headfilter-content", children: [jsxRuntime.jsx("div", { className: "cw-flex-row cw-gap-small cw-align-left-center cw-flex-wrap", ref: headFilter_content_tags_ref, children: cwelltFilterTabMultiSelectProps.tagValueContent }), jsxRuntime.jsx("div", { className: "headFilter_search_content", ref: headContent_ref, children: jsxRuntime.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 }) })] }), jsxRuntime.jsx(CwIcon, { iconId: "close-circle", onClick: (e) => onClearInputValue(e) })] }), cwelltFilterTabMultiSelectProps.children] }));
|
|
2738
3584
|
}
|
|
2739
3585
|
|
|
2740
3586
|
function CwOptionList(optionListProps) {
|
|
@@ -2745,15 +3591,12 @@ function CwOptionList(optionListProps) {
|
|
|
2745
3591
|
//#endregion
|
|
2746
3592
|
//#region Hooks
|
|
2747
3593
|
// - Hooks : selected optionList
|
|
2748
|
-
const [isSelectedOptionList, setIsSelectedOptionList] =
|
|
3594
|
+
// const [isSelectedOptionList, setIsSelectedOptionList] = useState(optionListProps.isSelected || false);
|
|
2749
3595
|
//#endregion
|
|
2750
3596
|
//#region Functions
|
|
2751
|
-
const onSelectedOptionList = () => {
|
|
2752
|
-
setIsSelectedOptionList(!isSelectedOptionList);
|
|
2753
|
-
};
|
|
2754
3597
|
const onClickSelectOptionList = (event_click) => {
|
|
2755
3598
|
// - click of custom component
|
|
2756
|
-
onSelectedOptionList();
|
|
3599
|
+
// onSelectedOptionList();
|
|
2757
3600
|
// - click of property interface
|
|
2758
3601
|
optionListProps.onClick(event_click);
|
|
2759
3602
|
};
|
|
@@ -2766,26 +3609,19 @@ function CwOptionList(optionListProps) {
|
|
|
2766
3609
|
//#region Useffect
|
|
2767
3610
|
React.useEffect(() => {
|
|
2768
3611
|
window.addEventListener("keypress", onKeyPressOptionList);
|
|
2769
|
-
// selected option list
|
|
2770
|
-
setIsSelectedOptionList(optionListProps.isSelected || false);
|
|
2771
3612
|
return () => {
|
|
2772
3613
|
window.removeEventListener("keypress", onKeyPressOptionList);
|
|
2773
3614
|
};
|
|
2774
|
-
}, [
|
|
3615
|
+
}, []);
|
|
2775
3616
|
//#endregion
|
|
2776
|
-
return (jsxRuntime.jsxs("div", { className:
|
|
2777
|
-
? optionListProps.className +
|
|
2778
|
-
" cwelltOptionList cwelltOptionList_active cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
|
|
2779
|
-
: optionListProps.className +
|
|
2780
|
-
" 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: [jsxRuntime.jsx("label", { className: "cwelltOptionList_desc cwellt_flex cwellt_align_items_center", htmlFor: optionListProps.idOptionList, children: optionListProps.children }), jsxRuntime.jsx("input", { type: "checkbox", className: "cwellt_display_none", value: optionListProps.value, ref: optionListSelected_input_ref, id: optionListProps.idOptionList, onClick: optionListProps.onChangeOptionList }), jsxRuntime.jsx("span", { className: isSelectedOptionList
|
|
2781
|
-
? "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center"
|
|
2782
|
-
: "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center" })] }));
|
|
3617
|
+
return (jsxRuntime.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: [jsxRuntime.jsx("label", { htmlFor: optionListProps.idOptionList, children: optionListProps.children }), jsxRuntime.jsx("input", { type: "checkbox", value: optionListProps.value, ref: optionListSelected_input_ref, id: optionListProps.idOptionList, onClick: optionListProps.onChangeOptionList })] }));
|
|
2783
3618
|
}
|
|
2784
3619
|
|
|
2785
3620
|
//#endregion
|
|
2786
3621
|
function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
2787
3622
|
//#region Reference
|
|
2788
3623
|
const refOptionListContent = React.useRef(null);
|
|
3624
|
+
const containerRef = React.useRef(null);
|
|
2789
3625
|
//#endregion
|
|
2790
3626
|
//#region Hooks
|
|
2791
3627
|
const [isShowDropDownfiltered, setShowDropDownfiltered] = React.useState(false);
|
|
@@ -2796,7 +3632,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2796
3632
|
// color: string;
|
|
2797
3633
|
// }[]>([]);
|
|
2798
3634
|
// Hook active label filter item tab [ All ]
|
|
2799
|
-
const [
|
|
3635
|
+
const [isActive_filter_item_all, setActive_filter_item_all] = React.useState(true);
|
|
2800
3636
|
// Hook active laberl fitler item tab [ e.g.: Duty ]
|
|
2801
3637
|
const [isActive_filter_item, setActive_filter_item] = React.useState(null);
|
|
2802
3638
|
// Hook isSelected option list
|
|
@@ -2808,31 +3644,31 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2808
3644
|
const clearValue = (e_clear) => {
|
|
2809
3645
|
// List items to remove class and be visible
|
|
2810
3646
|
// Item searched
|
|
2811
|
-
const itemSearched = document.getElementsByClassName("
|
|
3647
|
+
const itemSearched = document.getElementsByClassName("item-search");
|
|
2812
3648
|
// Item hidden
|
|
2813
|
-
const itemHidden = document.getElementsByClassName("
|
|
3649
|
+
const itemHidden = document.getElementsByClassName("hidden-item");
|
|
2814
3650
|
// Item searcched
|
|
2815
3651
|
if (itemSearched.length > 0) {
|
|
2816
3652
|
for (let i = 0; i <= itemSearched.length; i++) {
|
|
2817
|
-
itemSearched[i]?.classList.remove("
|
|
3653
|
+
itemSearched[i]?.classList.remove("item-search");
|
|
2818
3654
|
}
|
|
2819
3655
|
}
|
|
2820
3656
|
// Item hidden
|
|
2821
3657
|
if (itemHidden.length > 0) {
|
|
2822
3658
|
for (let i = 0; i <= itemHidden.length; i++) {
|
|
2823
|
-
itemHidden[i]?.classList.remove("
|
|
3659
|
+
itemHidden[i]?.classList.remove("hidden-item");
|
|
2824
3660
|
}
|
|
2825
3661
|
}
|
|
2826
3662
|
// optionList [ disbaled active className according their text ]
|
|
2827
3663
|
const parent = e_clear.currentTarget.parentElement.parentElement;
|
|
2828
|
-
const optionActive = parent.getElementsByClassName("
|
|
3664
|
+
const optionActive = parent.getElementsByClassName("option-active");
|
|
2829
3665
|
const valueIds = [];
|
|
2830
3666
|
const resultList = [];
|
|
2831
3667
|
if (optionActive.length > 0) {
|
|
2832
3668
|
CwelltCustomFilterTabProps.onclickHandleChange(valueIds, resultList);
|
|
2833
3669
|
Array.from(optionActive).forEach(index => {
|
|
2834
3670
|
const optionActive_array = index;
|
|
2835
|
-
optionActive_array.classList.remove("
|
|
3671
|
+
optionActive_array.classList.remove("option-active");
|
|
2836
3672
|
});
|
|
2837
3673
|
}
|
|
2838
3674
|
};
|
|
@@ -2841,26 +3677,26 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2841
3677
|
const onChangeSearch = (e_onchange) => {
|
|
2842
3678
|
const filterText_lowerCase = e_onchange.currentTarget.value.toLowerCase();
|
|
2843
3679
|
// Tags for filtering
|
|
2844
|
-
const listTag = document.getElementsByClassName("
|
|
3680
|
+
const listTag = document.getElementsByClassName("cw-multiselect-option-list");
|
|
2845
3681
|
for (let i = 0; i <= listTag.length; i++) {
|
|
2846
3682
|
if (listTag[i] !== undefined) {
|
|
2847
3683
|
const textTagValue = listTag[i].textContent;
|
|
2848
3684
|
// Writting
|
|
2849
3685
|
if (textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
|
|
2850
|
-
listTag[i].classList.add("
|
|
3686
|
+
listTag[i].classList.add("item-search");
|
|
2851
3687
|
}
|
|
2852
3688
|
else {
|
|
2853
|
-
listTag[i].classList.add("
|
|
3689
|
+
listTag[i].classList.add("hidden-item");
|
|
2854
3690
|
}
|
|
2855
3691
|
// remove written
|
|
2856
3692
|
if (!textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
|
|
2857
|
-
listTag[i].classList.remove("
|
|
3693
|
+
listTag[i].classList.remove("item-search");
|
|
2858
3694
|
}
|
|
2859
3695
|
else {
|
|
2860
|
-
listTag[i].classList.remove("
|
|
3696
|
+
listTag[i].classList.remove("hidden-item");
|
|
2861
3697
|
}
|
|
2862
3698
|
if (filterText_lowerCase === "") {
|
|
2863
|
-
listTag[i].classList.remove("
|
|
3699
|
+
listTag[i].classList.remove("item-search");
|
|
2864
3700
|
}
|
|
2865
3701
|
}
|
|
2866
3702
|
}
|
|
@@ -2874,7 +3710,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2874
3710
|
const onKeyPressSearch = (event_onKeypress) => {
|
|
2875
3711
|
//#region Variables
|
|
2876
3712
|
const keyPressed = event_onKeypress.key;
|
|
2877
|
-
const optionSearched = document.getElementsByClassName("
|
|
3713
|
+
const optionSearched = document.getElementsByClassName("item-search");
|
|
2878
3714
|
//#endregion
|
|
2879
3715
|
// first item selected or same text
|
|
2880
3716
|
const optionArray = Array.from(optionSearched);
|
|
@@ -2889,12 +3725,12 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2889
3725
|
handleClickTag(element);
|
|
2890
3726
|
}
|
|
2891
3727
|
}
|
|
2892
|
-
const optionList_item_hidden = document.getElementsByClassName("
|
|
3728
|
+
const optionList_item_hidden = document.getElementsByClassName("hidden-item");
|
|
2893
3729
|
if (optionList_item_hidden.length > 0) {
|
|
2894
3730
|
Array.from(optionList_item_hidden).forEach(index => {
|
|
2895
3731
|
const optionList_hidden_array = index;
|
|
2896
|
-
if (optionList_hidden_array.classList.contains("
|
|
2897
|
-
optionList_hidden_array.classList.remove("
|
|
3732
|
+
if (optionList_hidden_array.classList.contains("hidden-item")) {
|
|
3733
|
+
optionList_hidden_array.classList.remove("hidden-item");
|
|
2898
3734
|
}
|
|
2899
3735
|
});
|
|
2900
3736
|
}
|
|
@@ -2916,7 +3752,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2916
3752
|
active;
|
|
2917
3753
|
}
|
|
2918
3754
|
const handleClickTag = (e) => {
|
|
2919
|
-
const preList = CwelltCustomFilterTabProps.selectedListsItems;
|
|
3755
|
+
const preList = CwelltCustomFilterTabProps.selectedListsItems || [];
|
|
2920
3756
|
const valueIds = [];
|
|
2921
3757
|
const resultList = preList?.map(s => {
|
|
2922
3758
|
const item = new SelectListTest();
|
|
@@ -2955,36 +3791,35 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
2955
3791
|
// [a.key]: !prevSelectedStates[a.key],
|
|
2956
3792
|
// }));
|
|
2957
3793
|
// clear filter by text after clicked in option list
|
|
2958
|
-
const optionList_item_hidden = document.getElementsByClassName("
|
|
3794
|
+
const optionList_item_hidden = document.getElementsByClassName("hidden-item");
|
|
2959
3795
|
if (optionList_item_hidden.length > 0) {
|
|
2960
3796
|
Array.from(optionList_item_hidden).forEach(index => {
|
|
2961
3797
|
const optionList_hidden_array = index;
|
|
2962
|
-
if (optionList_hidden_array.classList.contains("
|
|
2963
|
-
optionList_hidden_array.classList.remove("
|
|
3798
|
+
if (optionList_hidden_array.classList.contains("hidden-item")) {
|
|
3799
|
+
optionList_hidden_array.classList.remove("hidden-item");
|
|
2964
3800
|
}
|
|
2965
3801
|
});
|
|
2966
3802
|
}
|
|
2967
3803
|
// Check click from option list has custom tag header of custom filter tab
|
|
2968
|
-
const tagActive = document.getElementsByClassName("
|
|
2969
|
-
const optionList = document.getElementsByClassName("
|
|
3804
|
+
const tagActive = document.getElementsByClassName("multiselect-active-tag");
|
|
3805
|
+
const optionList = document.getElementsByClassName("cw-multiselect-option-list");
|
|
2970
3806
|
if (tagActive.length > 0 && optionList.length > 0) {
|
|
2971
|
-
Array.from(tagActive).forEach(
|
|
2972
|
-
const tagActive_array = index;
|
|
3807
|
+
Array.from(tagActive).forEach(_index => {
|
|
2973
3808
|
Array.from(optionList).forEach(index => {
|
|
2974
3809
|
const optionList_array = index;
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
optionList_array.classList.remove("
|
|
3810
|
+
const optionId = optionList_array.getAttribute('data-id');
|
|
3811
|
+
if (optionId === (e.type + "_" + e.id)) {
|
|
3812
|
+
optionList_array.classList.remove("option-active");
|
|
2978
3813
|
}
|
|
2979
3814
|
});
|
|
2980
3815
|
});
|
|
2981
3816
|
}
|
|
2982
|
-
const optionList_desc = document.getElementsByClassName("
|
|
3817
|
+
const optionList_desc = document.getElementsByClassName("option-active");
|
|
2983
3818
|
if (optionList_desc.length > 0) {
|
|
2984
3819
|
Array.from(optionList_desc).forEach(index => {
|
|
2985
3820
|
const optionList_desc_array = index;
|
|
2986
3821
|
if (optionList_desc_array.innerText === a.description) {
|
|
2987
|
-
optionList_desc_array.classList.remove("
|
|
3822
|
+
optionList_desc_array.classList.remove("option-active");
|
|
2988
3823
|
}
|
|
2989
3824
|
});
|
|
2990
3825
|
}
|
|
@@ -3019,12 +3854,13 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3019
3854
|
// ...prevSelectedStates,
|
|
3020
3855
|
// [a.key]: false[a.key],
|
|
3021
3856
|
// }));
|
|
3022
|
-
const optionList_active = document.getElementsByClassName("
|
|
3857
|
+
const optionList_active = document.getElementsByClassName("option-active");
|
|
3023
3858
|
if (optionList_active.length > 0) {
|
|
3024
3859
|
Array.from(optionList_active).forEach(index => {
|
|
3025
3860
|
const optionList_active_array = index;
|
|
3026
|
-
|
|
3027
|
-
|
|
3861
|
+
const optionId = optionList_active_array.getAttribute('data-id');
|
|
3862
|
+
if (optionId === (e.type + "_" + e.id)) {
|
|
3863
|
+
optionList_active_array.classList.remove("option-active");
|
|
3028
3864
|
}
|
|
3029
3865
|
});
|
|
3030
3866
|
}
|
|
@@ -3033,8 +3869,8 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3033
3869
|
//#region DropDownContainer [ properties functions ]
|
|
3034
3870
|
//#region onKeyDownDropDownContainer [ press ESC dropDownContainer dissapear - ArrowUp && ArrowDown ]
|
|
3035
3871
|
const onKeyDownDropDownContent = (event_onKeyDown) => {
|
|
3036
|
-
const items = document.querySelectorAll(".
|
|
3037
|
-
let optionIndex = Array.from(items).findIndex(item => item.classList.contains("
|
|
3872
|
+
const items = document.querySelectorAll(".cw-multiselect-option-list");
|
|
3873
|
+
let optionIndex = Array.from(items).findIndex(item => item.classList.contains("keyboard-focus"));
|
|
3038
3874
|
if (event_onKeyDown.key === "Escape") {
|
|
3039
3875
|
// DropDown disappear
|
|
3040
3876
|
setShowDropDownfiltered(false);
|
|
@@ -3055,9 +3891,9 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3055
3891
|
}
|
|
3056
3892
|
};
|
|
3057
3893
|
const removeHighlight = () => {
|
|
3058
|
-
const highlightedItem = document.querySelector(".
|
|
3894
|
+
const highlightedItem = document.querySelector(".keyboard-focus");
|
|
3059
3895
|
if (highlightedItem) {
|
|
3060
|
-
highlightedItem.classList.remove("
|
|
3896
|
+
highlightedItem.classList.remove("keyboard-focus");
|
|
3061
3897
|
}
|
|
3062
3898
|
};
|
|
3063
3899
|
const getNextIndex = (currentIndex, length) => {
|
|
@@ -3067,57 +3903,46 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3067
3903
|
return (currentIndex - 1 + length) % length;
|
|
3068
3904
|
};
|
|
3069
3905
|
const highlightOption = (index) => {
|
|
3070
|
-
const items = document.querySelectorAll(".
|
|
3906
|
+
const items = document.querySelectorAll(".cw-multiselect-option-list");
|
|
3071
3907
|
const item = items[index];
|
|
3072
|
-
item.classList.add("
|
|
3908
|
+
item.classList.add("keyboard-focus");
|
|
3073
3909
|
};
|
|
3074
3910
|
//#endregion
|
|
3075
|
-
//#region
|
|
3076
|
-
const
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
const posCursor_y = event_mouseLeave.clientY;
|
|
3081
|
-
// current item
|
|
3082
|
-
const currentItem = event_mouseLeave.currentTarget;
|
|
3083
|
-
// cwSelectDropDownContainer_active
|
|
3084
|
-
const dropDownContainer_active = currentItem.getElementsByClassName("cwSelectDropDownContainer_active");
|
|
3085
|
-
// Evaluating if the position of the cursor is higher than the positon of component and if dropDownContainer state is true keep state of dropDown
|
|
3086
|
-
if (posCursor_y > pos.bottom && isShowDropDownfiltered === true) {
|
|
3087
|
-
setShowDropDownfiltered(true);
|
|
3088
|
-
// Mouse leave of drpoDownContainer
|
|
3089
|
-
if (dropDownContainer_active.length > 0) {
|
|
3090
|
-
Array.from(dropDownContainer_active).forEach(index => {
|
|
3091
|
-
const dropDown_active_array = index;
|
|
3092
|
-
// Adding setShowDropDownfiltered ( false ) to hide dropDownContainer
|
|
3093
|
-
dropDown_active_array.addEventListener("mouseleave", () => {
|
|
3094
|
-
setShowDropDownfiltered(false);
|
|
3095
|
-
});
|
|
3096
|
-
});
|
|
3911
|
+
//#region onMouseLeave
|
|
3912
|
+
const handleInputBlur = () => {
|
|
3913
|
+
setTimeout(() => {
|
|
3914
|
+
if (!containerRef.current?.contains(document.activeElement)) {
|
|
3915
|
+
setShowDropDownfiltered(false);
|
|
3097
3916
|
}
|
|
3098
|
-
}
|
|
3099
|
-
else {
|
|
3100
|
-
setShowDropDownfiltered(false);
|
|
3101
|
-
}
|
|
3917
|
+
}, 150);
|
|
3102
3918
|
};
|
|
3919
|
+
React.useEffect(() => {
|
|
3920
|
+
const handleClickOutside = (event) => {
|
|
3921
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
3922
|
+
setShowDropDownfiltered(false);
|
|
3923
|
+
}
|
|
3924
|
+
};
|
|
3925
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
3926
|
+
return () => {
|
|
3927
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
3928
|
+
};
|
|
3929
|
+
}, []);
|
|
3103
3930
|
//#endregion
|
|
3104
|
-
|
|
3105
|
-
// clikc filert item button
|
|
3931
|
+
// Click filter item button
|
|
3106
3932
|
const clickFilter_item = (id) => {
|
|
3107
3933
|
// content items - looking for className by it - corresponded by their current group
|
|
3108
3934
|
const contentItems = document.getElementsByClassName(id);
|
|
3109
|
-
const contentAll = document.getElementsByClassName("
|
|
3935
|
+
const contentAll = document.getElementsByClassName("multiselect-tag-group");
|
|
3110
3936
|
if (contentAll.length > 0) {
|
|
3111
3937
|
Array.from(contentAll).forEach(index => {
|
|
3112
3938
|
const contentAll_array = index;
|
|
3113
|
-
contentAll_array.classList.add("
|
|
3939
|
+
contentAll_array.classList.add("hidden-group");
|
|
3114
3940
|
});
|
|
3115
3941
|
}
|
|
3116
3942
|
if (contentItems.length > 0) {
|
|
3117
3943
|
Array.from(contentItems).forEach(index => {
|
|
3118
3944
|
const contentItems_array = index;
|
|
3119
|
-
contentItems_array.classList.
|
|
3120
|
-
contentItems_array.classList.remove("cwellt_contentHide_item");
|
|
3945
|
+
contentItems_array.classList.remove("hidden-group");
|
|
3121
3946
|
});
|
|
3122
3947
|
}
|
|
3123
3948
|
// Adding custom className acitive
|
|
@@ -3127,105 +3952,65 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
|
|
|
3127
3952
|
};
|
|
3128
3953
|
const showAllItem = () => {
|
|
3129
3954
|
//let currentBtn = e.currentTarget;
|
|
3130
|
-
const contentAll = document.getElementsByClassName("
|
|
3955
|
+
const contentAll = document.getElementsByClassName("multiselect-tag-group");
|
|
3131
3956
|
if (contentAll.length > 0) {
|
|
3132
3957
|
Array.from(contentAll).forEach(index => {
|
|
3133
3958
|
const contentAll_array = index;
|
|
3134
|
-
contentAll_array.classList.remove("
|
|
3135
|
-
contentAll_array.classList.remove("cwellt_contentShow_item");
|
|
3959
|
+
contentAll_array.classList.remove("hidden-group");
|
|
3136
3960
|
// active className - all
|
|
3137
3961
|
setActive_filter_item_all(true);
|
|
3138
|
-
// removing active className [ cwelltFilter_item_active ]
|
|
3139
3962
|
setActive_filter_item("");
|
|
3140
3963
|
});
|
|
3141
3964
|
}
|
|
3142
3965
|
};
|
|
3143
3966
|
//#endregion
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
Array.from(
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3967
|
+
React.useEffect(() => {
|
|
3968
|
+
if (CwelltCustomFilterTabProps.selectedListsItems) {
|
|
3969
|
+
const allOptions = document.getElementsByClassName("cw-multiselect-option-list");
|
|
3970
|
+
Array.from(allOptions).forEach(option => {
|
|
3971
|
+
option.classList.remove("option-active");
|
|
3972
|
+
});
|
|
3973
|
+
CwelltCustomFilterTabProps.selectedListsItems.forEach(selectedItem => {
|
|
3974
|
+
Array.from(allOptions).forEach(option => {
|
|
3975
|
+
const optionElement = option;
|
|
3976
|
+
if (optionElement.innerText === selectedItem.description) {
|
|
3977
|
+
optionElement.classList.add("option-active");
|
|
3978
|
+
}
|
|
3979
|
+
});
|
|
3152
3980
|
});
|
|
3153
3981
|
}
|
|
3154
|
-
};
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
const red_color_custom_tag = parseInt(bg_color_custom_tag.substring(0, 2), 16);
|
|
3162
|
-
const green_color_custom_tag = parseInt(bg_color_custom_tag.substring(2, 4), 16);
|
|
3163
|
-
const blue_color_custom_tag = parseInt(bg_color_custom_tag.substring(4, 6), 16);
|
|
3164
|
-
return "rgb(" + red_color_custom_tag + "," + green_color_custom_tag + "," + blue_color_custom_tag + ")";
|
|
3165
|
-
};
|
|
3166
|
-
// #endregion
|
|
3167
|
-
return (jsxRuntime.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
|
|
3168
|
-
? "cw-filter-tab-multi-select-show-icon"
|
|
3169
|
-
: "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsxRuntime.jsx("div", { className: "cwellt_flex cwellt_flex_wrap", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
|
|
3170
|
-
loadadData(s);
|
|
3171
|
-
const bgColor_custom_tag_selected_list = convertHexToRgb_custom_tag(s.color);
|
|
3172
|
-
// Inicializa las variables con un valor por defecto de 0
|
|
3173
|
-
let redBgColor_custom_tag_selected_list = 0;
|
|
3174
|
-
let greenBgColor_custom_tag_selected_list = 0;
|
|
3175
|
-
let blueBgColor_custom_tag_selected_list = 0;
|
|
3176
|
-
const bgColor_custom_tag_array = bgColor_custom_tag_selected_list.match(/\d+/g);
|
|
3177
|
-
if (bgColor_custom_tag_array && bgColor_custom_tag_array.length >= 3) {
|
|
3178
|
-
redBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[0], 10);
|
|
3179
|
-
greenBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[1], 10);
|
|
3180
|
-
blueBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[2], 10);
|
|
3181
|
-
}
|
|
3182
|
-
const luminance = 0.299 * redBgColor_custom_tag_selected_list +
|
|
3183
|
-
0.587 * greenBgColor_custom_tag_selected_list +
|
|
3184
|
-
0.114 * blueBgColor_custom_tag_selected_list;
|
|
3185
|
-
return s.type !== undefined ? (jsxRuntime.jsx("div", { id: "cwContent_tag", "data-id": s.type + "_" + s.id, className: "cwellt_flex cwellt_align_items_center", children: jsxRuntime.jsx(CwTag, { styleTag: {
|
|
3186
|
-
background: s.color
|
|
3187
|
-
}, styleTag_description: {
|
|
3982
|
+
}, [CwelltCustomFilterTabProps.selectedListsItems]);
|
|
3983
|
+
return (jsxRuntime.jsx("div", { ref: containerRef, children: jsxRuntime.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,
|
|
3984
|
+
// onMouseLeave={onMouseLeave_dropDownContainer}
|
|
3985
|
+
className: CwelltCustomFilterTabProps.selectedListsItems?.length === 0
|
|
3986
|
+
? "cw-filter-tab-multi-select-show-icon"
|
|
3987
|
+
: "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsxRuntime.jsx("div", { className: "cw-flex-row cw-gap-small", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
|
|
3988
|
+
return s.type !== undefined ? (jsxRuntime.jsx(CwTag, { styleTag: {
|
|
3188
3989
|
background: s.color,
|
|
3189
|
-
color:
|
|
3190
|
-
}, idTag: s.type + "_" + s.id, closableTag: true, onClickClosableTag: () => closeTagHandle(s),
|
|
3191
|
-
|
|
3192
|
-
? "cwelltFilter_item cwelltFilter_item_active"
|
|
3193
|
-
: "cwelltFilter_item",
|
|
3990
|
+
color: getContrastColor(s.color),
|
|
3991
|
+
}, idTag: s.type + "_" + s.id, closableTag: true, onClickClosableTag: () => closeTagHandle(s), "data-id": s.type + "_" + s.id, className: "multiselect-active-tag", children: s.description }, index)) : (jsxRuntime.jsx("div", {}));
|
|
3992
|
+
}) }), children: jsxRuntime.jsx(CwDropdownContainer, { dropDownState: isShowDropDownfiltered, idDropDownContainer: CwelltCustomFilterTabProps.idDropDownContainer, onKeyDownDropDownContainer: (event_onKeyDown) => onKeyDownDropDownContent(event_onKeyDown), children: jsxRuntime.jsxs("div", { className: "cw-multiselect-dropdown", children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsx("label", { "data-active": isActive_filter_item_all, onClick: showAllItem, children: "ALL" }), CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsxRuntime.jsx("label", { "data-active": isActive_filter_item === 'content_' + i,
|
|
3194
3993
|
// 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
|
|
3195
3994
|
onClick: () => clickFilter_item("content_" + i), id: "content_" + i, children: slArray.length > 0 && slArray[0].typeName !== undefined
|
|
3196
3995
|
? slArray[0].typeName
|
|
3197
3996
|
: slArray.length > 0
|
|
3198
3997
|
? slArray[0].type
|
|
3199
|
-
: "" }
|
|
3200
|
-
const
|
|
3201
|
-
|
|
3202
|
-
let greenBgColor_appointment = 0;
|
|
3203
|
-
let blueBgColor_custom_tag_select_list = 0;
|
|
3204
|
-
const bgColor_custom_tag_select_list_array = bgColor_custom_tag_select_list.match(/\d+/g);
|
|
3205
|
-
if (bgColor_custom_tag_select_list_array && bgColor_custom_tag_select_list_array.length >= 3) {
|
|
3206
|
-
redBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[0], 10);
|
|
3207
|
-
greenBgColor_appointment = parseInt(bgColor_custom_tag_select_list_array[1], 10);
|
|
3208
|
-
blueBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[2], 10);
|
|
3209
|
-
}
|
|
3210
|
-
const luminance = 0.299 * redBgColor_custom_tag_select_list +
|
|
3211
|
-
0.587 * greenBgColor_appointment +
|
|
3212
|
-
0.114 * blueBgColor_custom_tag_select_list;
|
|
3213
|
-
return (jsxRuntime.jsx(CwOptionList, { idOptionList: sl.type + "_" + sl.id, value: sl.type + "_" + sl.id, title: sl.description, onClick: () => handleClickTag(sl), isSelected: sl.active, children: jsxRuntime.jsx(CwTag, { styleTag: {
|
|
3214
|
-
background: "#E0E0E0"
|
|
3215
|
-
}, styleTag_description: {
|
|
3998
|
+
: "" }, i)))] }), jsxRuntime.jsx("div", { className: "cw-multiselect-tags-container", children: CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsxRuntime.jsx("div", { id: "content_" + i, className: `multiselect-tag-group content_${i}`, ref: refOptionListContent, children: slArray.map(sl => {
|
|
3999
|
+
const isSelected = CwelltCustomFilterTabProps.selectedListsItems?.some(selected => selected.type === sl.type && selected.id === sl.id) || false;
|
|
4000
|
+
return (jsxRuntime.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: jsxRuntime.jsx(CwTag, { styleTag: {
|
|
3216
4001
|
background: sl.color,
|
|
3217
|
-
color:
|
|
3218
|
-
}, children: sl.description }) }, sl.type + "_" + sl.id));
|
|
3219
|
-
}) }
|
|
4002
|
+
color: getContrastColor(sl.color),
|
|
4003
|
+
}, closableTag: isSelected, children: sl.description }) }, sl.type + "_" + sl.id));
|
|
4004
|
+
}) }, "group" + i))) })] }) }) }) }));
|
|
3220
4005
|
}
|
|
3221
4006
|
|
|
3222
|
-
var styles$
|
|
4007
|
+
var styles$7 = {"cw-multifilter-tag":"cw-multi-filter-tag-module_cw-multifilter-tag__Epda-"};
|
|
3223
4008
|
|
|
3224
4009
|
const CwMultiFilterTag = props => {
|
|
3225
4010
|
const { ID, Name, Value, Category, Removable, PrimaryColor, OnPrimaryColor, Selectable, Selected, OnSelect } = props;
|
|
3226
4011
|
const BackgroundColor = `rgb(${PrimaryColor.r},${PrimaryColor.g},${PrimaryColor.b})`;
|
|
3227
4012
|
const TextColor = `rgb(${OnPrimaryColor.r},${OnPrimaryColor.g},${OnPrimaryColor.b})`;
|
|
3228
|
-
return (jsxRuntime.jsxs("li", { className: styles$
|
|
4013
|
+
return (jsxRuntime.jsxs("li", { className: styles$7["cw-multifilter-tag"], "data-selected": !!props.Selected, "data-removable": !!props.Removable, style: {
|
|
3229
4014
|
color: TextColor,
|
|
3230
4015
|
backgroundColor: BackgroundColor,
|
|
3231
4016
|
opacity: Selected && !Removable ? "0.5" : "1",
|
|
@@ -3236,7 +4021,7 @@ const CwMultiFilterTag = props => {
|
|
|
3236
4021
|
}, children: [jsxRuntime.jsx("span", { id: ID, "data-value": Value, "data-category": Category, children: Name }), Removable && (jsxRuntime.jsx("span", { onClick: () => props.OnRemove?.(props), children: jsxRuntime.jsx(CwIcon, { iconId: "close" }) }))] }));
|
|
3237
4022
|
};
|
|
3238
4023
|
|
|
3239
|
-
var styles$
|
|
4024
|
+
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"};
|
|
3240
4025
|
|
|
3241
4026
|
/**
|
|
3242
4027
|
* A multiple filter selector, a MULTI-SELECT even. Allows users to select and filter items based on tags.
|
|
@@ -3456,7 +4241,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3456
4241
|
}
|
|
3457
4242
|
else {
|
|
3458
4243
|
const updatedTags = new Set(selectedTags).add(newTag);
|
|
3459
|
-
onChangeSelectedTags
|
|
4244
|
+
onChangeSelectedTags(updatedTags);
|
|
3460
4245
|
setInputTextValue("");
|
|
3461
4246
|
//setFilteredTags(allTags);
|
|
3462
4247
|
}
|
|
@@ -3470,7 +4255,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3470
4255
|
toDelete.Removable = false;
|
|
3471
4256
|
updatedTags.delete(toDelete);
|
|
3472
4257
|
}
|
|
3473
|
-
onChangeSelectedTags
|
|
4258
|
+
onChangeSelectedTags(updatedTags);
|
|
3474
4259
|
};
|
|
3475
4260
|
React.useEffect(() => {
|
|
3476
4261
|
// force to load all tags on first render
|
|
@@ -3482,9 +4267,9 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3482
4267
|
inputRef.current?.focus();
|
|
3483
4268
|
}
|
|
3484
4269
|
};
|
|
3485
|
-
return (jsxRuntime.jsxs("form", { ref: componentRef, id: id, className: styles$
|
|
4270
|
+
return (jsxRuntime.jsxs("form", { ref: componentRef, id: id, className: styles$6["cw-multi-filter"], style: style, onSubmit: (e) => {
|
|
3486
4271
|
e.preventDefault();
|
|
3487
|
-
}, children: [jsxRuntime.jsxs("div", { onClick: handleDivClick, className: styles$
|
|
4272
|
+
}, children: [jsxRuntime.jsxs("div", { onClick: handleDivClick, className: styles$6["cw-multi-filter-search"], style: isPanelOpen ? { outline: "1px solid var(--cw-color-primary)", outlineOffset: "-2px" } : {}, children: [jsxRuntime.jsxs("ul", { id: id + "_selected_filters", children: [Array.from(selectedTags).map(tag => (React.createElement(CwMultiFilterTag, { ...tag, key: tag.ID, Selectable: false, Removable: true, OnRemove: () => removeTag(tag.ID) }))), jsxRuntime.jsx("input", { type: "text", id: id + "_input", ref: inputRef, value: inputTextValue, spellCheck: false, onFocus: () => setIsPanelOpen(true), onChange: e => handleInputText(e.target.value), autoComplete: "off", placeholder: "Write to filter", onKeyDown: e => {
|
|
3488
4273
|
switch (e.key) {
|
|
3489
4274
|
case "Enter":
|
|
3490
4275
|
case "Tab":
|
|
@@ -3504,8 +4289,8 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3504
4289
|
}
|
|
3505
4290
|
} })] }), selectedTags.size > 0 ? (jsxRuntime.jsx("input", { type: "reset", value: "\u00D7", onClick: e => {
|
|
3506
4291
|
e.preventDefault();
|
|
3507
|
-
onChangeSelectedTags
|
|
3508
|
-
} })) : null] }), jsxRuntime.jsxs("section", { className: styles$
|
|
4292
|
+
onChangeSelectedTags(new Set());
|
|
4293
|
+
} })) : null] }), jsxRuntime.jsxs("section", { className: styles$6["cw-multi-filter-catalog-container"], "data-display-none": !isPanelOpen, children: [jsxRuntime.jsxs("nav", { children: [jsxRuntime.jsx("button", { style: selectedCategory === "All"
|
|
3509
4294
|
? {
|
|
3510
4295
|
backgroundColor: "var(--cw-color-primary-container)",
|
|
3511
4296
|
color: "var(--cw-color-primary)",
|
|
@@ -3532,10 +4317,117 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
|
|
|
3532
4317
|
} }, props.ID))) })] })] }));
|
|
3533
4318
|
};
|
|
3534
4319
|
|
|
4320
|
+
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"};
|
|
4321
|
+
|
|
4322
|
+
function CwTreeView({ data, onSelect, allowParentSelection = false, selectedId: initialSelectedId = null }) {
|
|
4323
|
+
const [expanded, setExpanded] = React.useState(new Set());
|
|
4324
|
+
// const [selectedId, setSelectedId] = useState<string | number | null>(initialSelectedId);
|
|
4325
|
+
const [selectedId, setSelectedId] = React.useState(null);
|
|
4326
|
+
const [search, setSearch] = React.useState("");
|
|
4327
|
+
// Function to find a node by ID in the tree
|
|
4328
|
+
const findNodeById = (nodes, id) => {
|
|
4329
|
+
for (const node of nodes) {
|
|
4330
|
+
if (node.id.toString().toLowerCase() === id.toString().toLowerCase()) {
|
|
4331
|
+
return node;
|
|
4332
|
+
}
|
|
4333
|
+
if (node.children) {
|
|
4334
|
+
const found = findNodeById(node.children, id);
|
|
4335
|
+
if (found)
|
|
4336
|
+
return found;
|
|
4337
|
+
}
|
|
4338
|
+
}
|
|
4339
|
+
return null;
|
|
4340
|
+
};
|
|
4341
|
+
// Function to expand all parent nodes of a specific node
|
|
4342
|
+
const expandPathToNode = (nodes, targetId, path = []) => {
|
|
4343
|
+
for (const node of nodes) {
|
|
4344
|
+
const currentPath = [...path, node.id];
|
|
4345
|
+
if (node.id.toString().toLowerCase() === targetId.toString().toLowerCase()) {
|
|
4346
|
+
// We find the node, expand all nodes along the way
|
|
4347
|
+
path.forEach(id => {
|
|
4348
|
+
setExpanded(prev => new Set(prev).add(id));
|
|
4349
|
+
});
|
|
4350
|
+
return true;
|
|
4351
|
+
}
|
|
4352
|
+
if (node.children) {
|
|
4353
|
+
if (expandPathToNode(node.children, targetId, currentPath)) {
|
|
4354
|
+
return true;
|
|
4355
|
+
}
|
|
4356
|
+
}
|
|
4357
|
+
}
|
|
4358
|
+
return false;
|
|
4359
|
+
};
|
|
4360
|
+
// Effect for handling the initial selection
|
|
4361
|
+
React.useEffect(() => {
|
|
4362
|
+
if (!selectedId && initialSelectedId && data.length > 0) {
|
|
4363
|
+
const nodeToSelect = findNodeById(data, initialSelectedId);
|
|
4364
|
+
if (nodeToSelect) {
|
|
4365
|
+
setSelectedId(initialSelectedId);
|
|
4366
|
+
// Expand the path to the selected node
|
|
4367
|
+
expandPathToNode(data, initialSelectedId);
|
|
4368
|
+
// Call the onSelect callback
|
|
4369
|
+
onSelect(nodeToSelect);
|
|
4370
|
+
}
|
|
4371
|
+
}
|
|
4372
|
+
}, [initialSelectedId, data, onSelect, selectedId]);
|
|
4373
|
+
const toggleExpand = (id) => {
|
|
4374
|
+
const newSet = new Set(expanded);
|
|
4375
|
+
if (newSet.has(id))
|
|
4376
|
+
newSet.delete(id);
|
|
4377
|
+
else
|
|
4378
|
+
newSet.add(id);
|
|
4379
|
+
setExpanded(newSet);
|
|
4380
|
+
};
|
|
4381
|
+
const renderNode = (node, depth = 0) => {
|
|
4382
|
+
const isExpanded = expanded.has(node.id);
|
|
4383
|
+
const hasChildren = node.children && node.children.length > 0;
|
|
4384
|
+
const isLeaf = !hasChildren;
|
|
4385
|
+
const isSelected = selectedId?.toString().toLowerCase() === node.id.toString().toLowerCase();
|
|
4386
|
+
const selectable = allowParentSelection || isLeaf;
|
|
4387
|
+
return (jsxRuntime.jsxs("div", { className: styles$5["tree-item"], children: [jsxRuntime.jsxs("div", { className: [
|
|
4388
|
+
styles$5["tree-node"],
|
|
4389
|
+
isSelected && styles$5["selected"],
|
|
4390
|
+
!selectable && styles$5["non-selectable"]
|
|
4391
|
+
].filter(Boolean).join(' '), style: { paddingLeft: `${depth * 24 + 8}px` }, onClick: () => {
|
|
4392
|
+
if (selectable) {
|
|
4393
|
+
setSelectedId(node.id);
|
|
4394
|
+
onSelect(node);
|
|
4395
|
+
}
|
|
4396
|
+
else {
|
|
4397
|
+
toggleExpand(node.id);
|
|
4398
|
+
}
|
|
4399
|
+
}, children: [hasChildren && (jsxRuntime.jsx(CwIcon, { size: "large", iconId: isExpanded ? "chevron-down" : "chevron-right" })), jsxRuntime.jsx("div", { className: `${styles$5["tree-label"]} ${!hasChildren ? styles$5["tree-spacer"] : ''}`, children: node.label })] }), hasChildren && isExpanded && (jsxRuntime.jsx("div", { className: styles$5["tree-children"], children: node.children.map((child) => renderNode(child, depth + 1)) }))] }, node.id));
|
|
4400
|
+
};
|
|
4401
|
+
// Function to search for nodes that match the search term
|
|
4402
|
+
const searchInTree = (nodes, searchTerm) => {
|
|
4403
|
+
if (!searchTerm)
|
|
4404
|
+
return nodes;
|
|
4405
|
+
const results = [];
|
|
4406
|
+
for (const node of nodes) {
|
|
4407
|
+
const nodeMatches = node.label.toLowerCase().includes(searchTerm.toLowerCase());
|
|
4408
|
+
let childMatches = [];
|
|
4409
|
+
if (node.children) {
|
|
4410
|
+
childMatches = searchInTree(node.children, searchTerm);
|
|
4411
|
+
}
|
|
4412
|
+
// Include node if he or his children match
|
|
4413
|
+
if (nodeMatches || childMatches.length > 0) {
|
|
4414
|
+
results.push({
|
|
4415
|
+
...node,
|
|
4416
|
+
children: childMatches.length > 0 ? childMatches : node.children
|
|
4417
|
+
});
|
|
4418
|
+
}
|
|
4419
|
+
}
|
|
4420
|
+
return results;
|
|
4421
|
+
};
|
|
4422
|
+
const filteredData = searchInTree(data, search);
|
|
4423
|
+
return (jsxRuntime.jsxs("div", { className: `cw-tree-view ${styles$5["tree-container"]}`, children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsx("input", { type: "text", placeholder: "Search in tree...", value: search, onChange: (e) => setSearch(e.target.value) }), search && (jsxRuntime.jsx(CwButton, { onClick: () => setSearch(""), type: "button", icon: "close", variant: "icon", color: "neutral" }))] }), jsxRuntime.jsx("div", { className: styles$5["tree-wrapper"], children: filteredData.length > 0 ? (filteredData.map((node) => renderNode(node))) : (jsxRuntime.jsxs("div", { className: styles$5["empty-state"], children: [jsxRuntime.jsx(CwIcon, { iconId: "comment" }), search ? "No results found" : "There are no items"] })) })] }));
|
|
4424
|
+
}
|
|
4425
|
+
|
|
3535
4426
|
function CwSearchInput(optionsProps) {
|
|
3536
4427
|
const [searchText, setSearchText] = React.useState("");
|
|
3537
4428
|
const [filteredOptions, setFilteredOptions] = React.useState([]);
|
|
3538
4429
|
const [_selectedOption, setSelectedOption] = React.useState(null);
|
|
4430
|
+
const [showDropdown, setShowDropdown] = React.useState(false);
|
|
3539
4431
|
// Make default value selection when loading the component
|
|
3540
4432
|
React.useEffect(() => {
|
|
3541
4433
|
if (optionsProps.defaultValue && optionsProps.selectList && optionsProps.selectList.length > 0) {
|
|
@@ -3553,8 +4445,9 @@ function CwSearchInput(optionsProps) {
|
|
|
3553
4445
|
const handleInputChange = (event) => {
|
|
3554
4446
|
const text = event.target.value;
|
|
3555
4447
|
setSearchText(text);
|
|
4448
|
+
setShowDropdown(true);
|
|
3556
4449
|
if (text === "") {
|
|
3557
|
-
setFilteredOptions(
|
|
4450
|
+
setFilteredOptions(optionsProps.selectList);
|
|
3558
4451
|
setSelectedOption(null);
|
|
3559
4452
|
// Notify that there is no selection
|
|
3560
4453
|
if (optionsProps.handleChange) {
|
|
@@ -3575,6 +4468,17 @@ function CwSearchInput(optionsProps) {
|
|
|
3575
4468
|
setFilteredOptions(filtered);
|
|
3576
4469
|
}
|
|
3577
4470
|
};
|
|
4471
|
+
const handleInputFocus = () => {
|
|
4472
|
+
setShowDropdown(true);
|
|
4473
|
+
if (searchText === "") {
|
|
4474
|
+
setFilteredOptions(optionsProps.selectList);
|
|
4475
|
+
}
|
|
4476
|
+
};
|
|
4477
|
+
const handleInputBlur = () => {
|
|
4478
|
+
setTimeout(() => {
|
|
4479
|
+
setShowDropdown(false);
|
|
4480
|
+
}, 150);
|
|
4481
|
+
};
|
|
3578
4482
|
const handleOptionSelect = (option) => {
|
|
3579
4483
|
setSearchText(option.description);
|
|
3580
4484
|
setSelectedOption(option);
|
|
@@ -3590,12 +4494,12 @@ function CwSearchInput(optionsProps) {
|
|
|
3590
4494
|
setSelectedOption(null);
|
|
3591
4495
|
};
|
|
3592
4496
|
return (jsxRuntime.jsxs("div", { className: "cwSearchInputComp", style: optionsProps.style, id: optionsProps.id, children: [jsxRuntime.jsxs("div", { className: optionsProps.labelPosition === "inline"
|
|
3593
|
-
? "cw-flex-row "
|
|
4497
|
+
? "cw-flex-row cw-align-left-center"
|
|
3594
4498
|
: optionsProps.labelPosition === "column"
|
|
3595
|
-
? "cw-
|
|
3596
|
-
: "cw-flex-row ", children: [optionsProps.labelName && (jsxRuntime.jsx("label", { className: optionsProps.disabled
|
|
3597
|
-
?
|
|
3598
|
-
:
|
|
4499
|
+
? "cw-label-input-column"
|
|
4500
|
+
: "cw-flex-row cw-align-left-center", children: [optionsProps.labelName && (jsxRuntime.jsx("label", { children: optionsProps.labelName })), jsxRuntime.jsx("input", { type: "text", value: searchText, onChange: handleInputChange, onFocus: handleInputFocus, onBlur: handleInputBlur, placeholder: "Search...", className: "cw_input_search", disabled: optionsProps.disabled }), searchText && (jsxRuntime.jsx("button", { className: "cw-button-icon cwi-close cw-input-search-clear", onClick: handleClearClick }))] }), showDropdown && filteredOptions.length > 0 && (jsxRuntime.jsx("div", { className: "cw-input-search-dropdown", children: jsxRuntime.jsx("ul", { children: filteredOptions.map((option) => (jsxRuntime.jsx("li", { onClick: () => handleOptionSelect(option), onMouseDown: (e) => e.preventDefault(), children: optionsProps.renderOption
|
|
4501
|
+
? optionsProps.renderOption(option)
|
|
4502
|
+
: option.description }, option.id))) }) }))] }));
|
|
3599
4503
|
}
|
|
3600
4504
|
|
|
3601
4505
|
var styles$4 = {"context-menu":"cw-context-menu-module_context-menu__dbxnO","context-menu-item":"cw-context-menu-module_context-menu-item__B2W-Q"};
|
|
@@ -6393,7 +7297,7 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
|
6393
7297
|
e.preventDefault();
|
|
6394
7298
|
onEvent(new OnDoubleClickEvent(value.id));
|
|
6395
7299
|
});
|
|
6396
|
-
return (jsxRuntime.jsx(antd.Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "
|
|
7300
|
+
return (jsxRuntime.jsx(antd.Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
|
|
6397
7301
|
items: value.contextMenuItems,
|
|
6398
7302
|
onClick: (e) => {
|
|
6399
7303
|
e.domEvent.nativeEvent.preventDefault();
|
|
@@ -6538,7 +7442,7 @@ const SchedulerRow = React.memo((props) => {
|
|
|
6538
7442
|
return (jsxRuntime.jsxs("div", { style: {
|
|
6539
7443
|
display: "flex",
|
|
6540
7444
|
minHeight: props.rowHeightInRem + "rem",
|
|
6541
|
-
}, children: [jsxRuntime.jsx(RowTitleComp, { ...rowHeader }), jsxRuntime.jsx(antd.Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "
|
|
7445
|
+
}, children: [jsxRuntime.jsx(RowTitleComp, { ...rowHeader }), jsxRuntime.jsx(antd.Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
|
|
6542
7446
|
items: contextMenuItems,
|
|
6543
7447
|
onClick: (e) => {
|
|
6544
7448
|
onClickMenuItem$1(e, () => {
|
|
@@ -6573,19 +7477,19 @@ const SchedulerRow = React.memo((props) => {
|
|
|
6573
7477
|
const percentage = getPercentageFromMouseEvent(e);
|
|
6574
7478
|
const date = dateFromPercentage(selectedDate, visibleDays, percentage);
|
|
6575
7479
|
onEvent(new OnRightClickRow(rowHeader.value.rowId, date));
|
|
6576
|
-
}, children: [weekendLines.map((weekend) => (jsxRuntime.jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }))), divisionLines.map((division) => (jsxRuntime.jsx(DivisionLine, { height: "100%", left: division.left }))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsxRuntime.jsx("div", { style: {
|
|
7480
|
+
}, children: [weekendLines.map((weekend) => (jsxRuntime.jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }, weekend.left))), divisionLines.map((division) => (jsxRuntime.jsx(DivisionLine, { height: "100%", left: division.left }, division.left))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsxRuntime.jsx("div", { style: {
|
|
6577
7481
|
height: "100%",
|
|
6578
7482
|
position: internalRows.length > 0 ? "absolute" : "relative",
|
|
6579
7483
|
width: "100%",
|
|
6580
7484
|
pointerEvents: "none",
|
|
6581
7485
|
}, children: backgroundEvents.map((event) => {
|
|
6582
|
-
return jsxRuntime.jsx(BackgroundEventComp, { value: { ...event }, onEvent: onEvent, heightRem: props.rowHeightInRem * Math.max(1, internalRows.length) });
|
|
7486
|
+
return jsxRuntime.jsx(BackgroundEventComp, { value: { ...event }, onEvent: onEvent, heightRem: props.rowHeightInRem * Math.max(1, internalRows.length) }, event.id);
|
|
6583
7487
|
}) })), backgroundEvents.length === 0 && internalRows.length === 0 && (jsxRuntime.jsx("div", { style: { position: "relative", height: props.rowHeightInRem + "rem" } })), internalRows.map((internalRow, index) => {
|
|
6584
7488
|
return (jsxRuntime.jsx("div", { style: {
|
|
6585
7489
|
position: "relative",
|
|
6586
7490
|
height: props.rowHeightInRem + "rem",
|
|
6587
7491
|
pointerEvents: "none"
|
|
6588
|
-
}, children: internalRow.map((event
|
|
7492
|
+
}, children: internalRow.map((event) => (jsxRuntime.jsx(EventComp, { value: event, heightRem: props.rowHeightInRem, onEvent: onEvent }, event.id))) }, index));
|
|
6589
7493
|
}), !(timeLinePercentage < 0 || timeLinePercentage > 100) && (jsxRuntime.jsx(TimeLine, { color: "red", left: `${timeLinePercentage}%`, top: "0px", height: `100%` }))] }) }, rowHeader.value.rowId)] }));
|
|
6590
7494
|
}, (prevProps, nextProps) => {
|
|
6591
7495
|
// This memo is necessary to prevent re-render all the rows when a user makes drag and drop
|
|
@@ -6769,9 +7673,9 @@ const getEventSizes = (schedulerDate, totalDays, startDate, endDate) => {
|
|
|
6769
7673
|
};
|
|
6770
7674
|
}
|
|
6771
7675
|
const totalHours = totalDays * 24;
|
|
6772
|
-
const dateString = schedulerDate.toISOString().split('T')[0];
|
|
6773
|
-
const schedulerDateAtZero = new Date(dateString)
|
|
6774
|
-
let startHours = hoursBetween(
|
|
7676
|
+
// const dateString = schedulerDate.toISOString().split('T')[0];
|
|
7677
|
+
//const schedulerDateAtZero = new Date(dateString)
|
|
7678
|
+
let startHours = hoursBetween(schedulerDate, startDate);
|
|
6775
7679
|
let durationHours = hoursBetween(startDate, endDate);
|
|
6776
7680
|
const startOutOfScheduler = startHours < 0;
|
|
6777
7681
|
if (startOutOfScheduler) {
|
|
@@ -6814,9 +7718,7 @@ const sortByCategoryAndTitle = (previous, next, orderCategories) => {
|
|
|
6814
7718
|
};
|
|
6815
7719
|
|
|
6816
7720
|
const getWeekendLinesByDatesVisible = (initialDate, visibleDays) => {
|
|
6817
|
-
const
|
|
6818
|
-
const todayAtO = new Date(dateString);
|
|
6819
|
-
const days = getWeekendsDaysInDateRange(todayAtO, visibleDays);
|
|
7721
|
+
const days = getWeekendsDaysInDateRange(initialDate, visibleDays);
|
|
6820
7722
|
return days.map(it => {
|
|
6821
7723
|
const endDate = new Date(it);
|
|
6822
7724
|
endDate.setDate(it.getDate() + 1);
|
|
@@ -6908,7 +7810,7 @@ const Scheduler = (props) => {
|
|
|
6908
7810
|
return (jsxRuntime.jsx("div", { style: {
|
|
6909
7811
|
...style,
|
|
6910
7812
|
backgroundColor: rowColor
|
|
6911
|
-
}, children: jsxRuntime.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 }) }));
|
|
7813
|
+
}, children: jsxRuntime.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));
|
|
6912
7814
|
});
|
|
6913
7815
|
const getItemSize = React.useCallback((index) => {
|
|
6914
7816
|
const row = rows[index];
|
|
@@ -6957,8 +7859,7 @@ class CwSuperScheduler extends React__namespace.Component {
|
|
|
6957
7859
|
let returnedHeight = 50;
|
|
6958
7860
|
let data;
|
|
6959
7861
|
if (this.props.pinnedResources) {
|
|
6960
|
-
|
|
6961
|
-
pinned = lodash.uniq(pinned);
|
|
7862
|
+
const pinned = [...new Set(this.props.pinnedResources)];
|
|
6962
7863
|
for (let i = 0; i < pinned.length; i++) {
|
|
6963
7864
|
data = this.returnDynamicHeight(pinned[i], returnedTops);
|
|
6964
7865
|
returnedTops = data.topsCalculated;
|
|
@@ -7289,25 +8190,26 @@ const onClickMenuItem = (e, event) => {
|
|
|
7289
8190
|
const PinRowHeader = ({ value, width, onEvent }) => {
|
|
7290
8191
|
const [isContextMenuOpen, setIsContextMenuOpen] = React.useState(false);
|
|
7291
8192
|
const { highlightColor, isLoading } = value;
|
|
7292
|
-
return (jsxRuntime.
|
|
7293
|
-
|
|
7294
|
-
|
|
7295
|
-
|
|
7296
|
-
onEvent(
|
|
7297
|
-
}
|
|
7298
|
-
|
|
7299
|
-
|
|
7300
|
-
|
|
7301
|
-
|
|
7302
|
-
|
|
7303
|
-
|
|
7304
|
-
|
|
7305
|
-
|
|
8193
|
+
return (jsxRuntime.jsx(antd.Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
|
|
8194
|
+
items: value.contextMenuItems,
|
|
8195
|
+
onClick: (e) => {
|
|
8196
|
+
onClickMenuItem(e, () => {
|
|
8197
|
+
onEvent(new OnClickContextMenu(value.rowId, e.key));
|
|
8198
|
+
});
|
|
8199
|
+
},
|
|
8200
|
+
onMouseLeave: () => setIsContextMenuOpen(false),
|
|
8201
|
+
}, trigger: ["contextMenu"], overlayStyle: { animationDuration: "0" }, arrow: (value.contextMenuItems?.length ?? 0) > 0, children: jsxRuntime.jsx(CwGenericTooltip, { content: value.tooltip, position: "right", dissapearsWhenHover: true, overlayStyle: value.overlayTooltipStyle, children: jsxRuntime.jsxs("div", { style: {
|
|
8202
|
+
width: width,
|
|
8203
|
+
background: highlightColor,
|
|
8204
|
+
}, className: styles["super-scheduler-row-header"], children: [jsxRuntime.jsx("button", { className: "cw-button-icon cwi-pin", "data-pinned": value.isPinned, onClick: (_) => {
|
|
8205
|
+
onEvent(value.isPinned ? new OnUnpinRow(value.rowId) : new OnPinRow(value.rowId));
|
|
8206
|
+
} }), jsxRuntime.jsx("div", { className: styles["indicators"], children: value.indicators ?? undefined }), jsxRuntime.jsxs("div", { style: {
|
|
7306
8207
|
display: "flex",
|
|
7307
8208
|
flexDirection: "column",
|
|
7308
8209
|
justifyContent: "center",
|
|
7309
8210
|
alignItems: "flex-start",
|
|
7310
|
-
}, children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: value.title }), value.title2 && jsxRuntime.jsxs("span", { children: ["-", value.title2] }), " ", jsxRuntime.jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxRuntime.jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 &&
|
|
8211
|
+
}, children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: value.title }), value.title2 && jsxRuntime.jsxs("span", { children: ["-", value.title2] }), " ", jsxRuntime.jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxRuntime.jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 &&
|
|
8212
|
+
jsxRuntime.jsxs("span", { className: styles["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxRuntime.jsxs("span", { children: ["-", value.subtitle2] })] })] }), isLoading ? jsxRuntime.jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }) }, value.rowId) }, value.rowId));
|
|
7311
8213
|
};
|
|
7312
8214
|
|
|
7313
8215
|
const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents, contextMenuItems, onEvent }) => {
|
|
@@ -7319,168 +8221,241 @@ const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory,
|
|
|
7319
8221
|
}, children: "Clear pinned" }) })] })), jsxRuntime.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 })] }));
|
|
7320
8222
|
};
|
|
7321
8223
|
|
|
7322
|
-
const {
|
|
7323
|
-
|
|
7324
|
-
|
|
7325
|
-
|
|
7326
|
-
|
|
7327
|
-
|
|
7328
|
-
|
|
7329
|
-
|
|
7330
|
-
|
|
7331
|
-
|
|
7332
|
-
|
|
7333
|
-
|
|
7334
|
-
|
|
7335
|
-
|
|
7336
|
-
|
|
7337
|
-
|
|
7338
|
-
|
|
7339
|
-
|
|
7340
|
-
|
|
7341
|
-
|
|
7342
|
-
|
|
7343
|
-
|
|
7344
|
-
|
|
7345
|
-
|
|
7346
|
-
|
|
7347
|
-
|
|
8224
|
+
const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder = "Search airport…", required = false, cblConfig, className = "", value, disabled = false, displayMode, width }) => {
|
|
8225
|
+
// State
|
|
8226
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
8227
|
+
const [options, setOptions] = React.useState([]);
|
|
8228
|
+
const [airports, setAirports] = React.useState([]);
|
|
8229
|
+
const [isLoading, setIsLoading] = React.useState(false);
|
|
8230
|
+
const [isInitialLoading, setIsInitialLoading] = React.useState(false);
|
|
8231
|
+
const [showDropdown, setShowDropdown] = React.useState(false);
|
|
8232
|
+
const [highlightedIndex, setHighlightedIndex] = React.useState(-1);
|
|
8233
|
+
const [tooltipText, setTooltipText] = React.useState("");
|
|
8234
|
+
// Refs
|
|
8235
|
+
const inputRef = React.useRef(null);
|
|
8236
|
+
const dropdownRef = React.useRef(null);
|
|
8237
|
+
const searchTimeoutRef = React.useRef();
|
|
8238
|
+
// Utility function to extract ICAO from DisplayAirportText
|
|
8239
|
+
const extractIcao = React.useCallback((displayText) => {
|
|
8240
|
+
const match = displayText.match(/^([A-Z]{4})\(/);
|
|
8241
|
+
return match ? match[1] : displayText;
|
|
8242
|
+
}, []);
|
|
8243
|
+
// Utility function to extract IATA from DisplayAirportText
|
|
8244
|
+
const extractIata = React.useCallback((displayText) => {
|
|
8245
|
+
const match = displayText.match(/\(([A-Z]{3})\)/);
|
|
8246
|
+
return match ? match[1] : displayText;
|
|
8247
|
+
}, []);
|
|
8248
|
+
// Utility function to get short code (ICAO(IATA) format - original behavior)
|
|
8249
|
+
const getShortCode = React.useCallback((displayText) => {
|
|
8250
|
+
const match = displayText.match(/([A-Z]{4})\(([A-Z]{3})\)/);
|
|
8251
|
+
if (match && match.length >= 3) {
|
|
8252
|
+
return `${match[1]}(${match[2]})`;
|
|
7348
8253
|
}
|
|
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
|
-
|
|
7386
|
-
|
|
7387
|
-
|
|
7388
|
-
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
|
|
7394
|
-
|
|
7395
|
-
|
|
7396
|
-
|
|
7397
|
-
|
|
7398
|
-
|
|
7399
|
-
|
|
7400
|
-
|
|
7401
|
-
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7405
|
-
|
|
8254
|
+
return displayText;
|
|
8255
|
+
}, []);
|
|
8256
|
+
// Utility function to get display text for INPUT based on mode
|
|
8257
|
+
const getInputDisplayText = React.useCallback((airport) => {
|
|
8258
|
+
const fullText = airport.DisplayAirportText;
|
|
8259
|
+
switch (displayMode) {
|
|
8260
|
+
case "icao-only":
|
|
8261
|
+
return extractIcao(fullText);
|
|
8262
|
+
case "iata-only":
|
|
8263
|
+
return extractIata(fullText);
|
|
8264
|
+
case "full-text":
|
|
8265
|
+
return fullText;
|
|
8266
|
+
case "default":
|
|
8267
|
+
default:
|
|
8268
|
+
// Default: ICAO(IATA) - same as original getShortCode behavior
|
|
8269
|
+
return getShortCode(fullText);
|
|
8270
|
+
}
|
|
8271
|
+
}, [displayMode, extractIcao, extractIata, getShortCode]);
|
|
8272
|
+
// Utility function to get display text for DROPDOWN (always full text)
|
|
8273
|
+
const getDropdownDisplayText = React.useCallback((airport) => {
|
|
8274
|
+
return airport.DisplayAirportText;
|
|
8275
|
+
}, []);
|
|
8276
|
+
// Fetch airport data by ID
|
|
8277
|
+
const fetchAirportData = React.useCallback(async (airportId) => {
|
|
8278
|
+
setIsInitialLoading(true);
|
|
8279
|
+
try {
|
|
8280
|
+
const response = await fetch(`${cblConfig}api/data/airport?airportId=${airportId}`);
|
|
8281
|
+
const result = await response.json();
|
|
8282
|
+
const airport = result;
|
|
8283
|
+
const inputText = getInputDisplayText(airport);
|
|
8284
|
+
const dropdownText = getDropdownDisplayText(airport);
|
|
8285
|
+
setAirports([airport]);
|
|
8286
|
+
setOptions([{ value: airport.AptKey, text: dropdownText }]);
|
|
8287
|
+
setInputValue(inputText);
|
|
8288
|
+
setTooltipText(airport.DisplayAirportText);
|
|
8289
|
+
}
|
|
8290
|
+
catch (error) {
|
|
8291
|
+
console.error("Error fetching airport data:", error);
|
|
8292
|
+
}
|
|
8293
|
+
finally {
|
|
8294
|
+
setIsInitialLoading(false);
|
|
8295
|
+
}
|
|
8296
|
+
}, [cblConfig, getInputDisplayText, getDropdownDisplayText]);
|
|
8297
|
+
// Map searchType string to number for API
|
|
8298
|
+
const getSearchTypeNumber = React.useCallback((type) => {
|
|
8299
|
+
switch (type) {
|
|
8300
|
+
case "OnlyDatabase": return 0;
|
|
8301
|
+
case "DatabaseAndProviders": return 1;
|
|
8302
|
+
case "OnlyProviders": return 2;
|
|
8303
|
+
default: return 0;
|
|
8304
|
+
}
|
|
8305
|
+
}, []);
|
|
8306
|
+
// Search airports
|
|
8307
|
+
const searchAirports = React.useCallback(async (searchText) => {
|
|
8308
|
+
if (searchText.length < 2) {
|
|
8309
|
+
setOptions([]);
|
|
8310
|
+
setAirports([]);
|
|
8311
|
+
setShowDropdown(false);
|
|
8312
|
+
return;
|
|
8313
|
+
}
|
|
8314
|
+
setIsLoading(true);
|
|
8315
|
+
try {
|
|
8316
|
+
const searchTypeNumber = getSearchTypeNumber(searchType);
|
|
8317
|
+
const response = await fetch(`${cblConfig}controls/cblFindAirport/cblFindAirport/SearchAirportCodeName?text=${searchText}&searchType=${searchTypeNumber}`);
|
|
8318
|
+
const results = await response.json();
|
|
8319
|
+
const newOptions = [];
|
|
8320
|
+
const newAirports = [];
|
|
8321
|
+
results.forEach((airport) => {
|
|
8322
|
+
const displayText = getDropdownDisplayText(airport);
|
|
8323
|
+
newOptions.push({ value: airport.AptKey, text: displayText });
|
|
8324
|
+
newAirports.push(airport);
|
|
7406
8325
|
});
|
|
8326
|
+
setOptions(newOptions);
|
|
8327
|
+
setAirports(newAirports);
|
|
8328
|
+
setShowDropdown(newOptions.length > 0);
|
|
8329
|
+
setHighlightedIndex(-1);
|
|
8330
|
+
}
|
|
8331
|
+
catch (error) {
|
|
8332
|
+
console.error("Error searching airports:", error);
|
|
8333
|
+
setOptions([]);
|
|
8334
|
+
setAirports([]);
|
|
8335
|
+
setShowDropdown(false);
|
|
8336
|
+
}
|
|
8337
|
+
finally {
|
|
8338
|
+
setIsLoading(false);
|
|
8339
|
+
}
|
|
8340
|
+
}, [cblConfig, getDropdownDisplayText, searchType, getSearchTypeNumber]);
|
|
8341
|
+
// Debounced search
|
|
8342
|
+
const debouncedSearch = React.useCallback((searchText) => {
|
|
8343
|
+
if (searchTimeoutRef.current) {
|
|
8344
|
+
window.clearTimeout(searchTimeoutRef.current);
|
|
8345
|
+
}
|
|
8346
|
+
searchTimeoutRef.current = window.setTimeout(() => {
|
|
8347
|
+
searchAirports(searchText);
|
|
8348
|
+
}, 300); // 300ms debounce
|
|
8349
|
+
}, [searchAirports]);
|
|
8350
|
+
// Handle input change
|
|
8351
|
+
const handleInputChange = (e) => {
|
|
8352
|
+
const newValue = e.target.value;
|
|
8353
|
+
setInputValue(newValue);
|
|
8354
|
+
if (newValue !== inputValue) {
|
|
8355
|
+
debouncedSearch(newValue);
|
|
8356
|
+
}
|
|
8357
|
+
};
|
|
8358
|
+
// Handle option selection
|
|
8359
|
+
const handleOptionSelect = async (optionValue) => {
|
|
8360
|
+
const selectedAirport = airports.find(apt => apt.AptKey === optionValue);
|
|
8361
|
+
if (!selectedAirport)
|
|
8362
|
+
return;
|
|
8363
|
+
setShowDropdown(false);
|
|
8364
|
+
// Handle provider airports (keeping original logic)
|
|
8365
|
+
if (selectedAirport.isAirportFromProvider) {
|
|
8366
|
+
try {
|
|
8367
|
+
const response = await fetch(`${cblConfig}controls/cblFindAirport/cblFindAirport/GetCblAirport?IATAICAO=${selectedAirport.AptIcao}&update=false`);
|
|
8368
|
+
const result = await response.json();
|
|
8369
|
+
const resultAirport = result;
|
|
8370
|
+
const inputText = getInputDisplayText(resultAirport);
|
|
8371
|
+
const dropdownText = getDropdownDisplayText(resultAirport);
|
|
8372
|
+
setInputValue(inputText);
|
|
8373
|
+
setTooltipText(result.DisplayAirportText);
|
|
8374
|
+
setAirports([result]);
|
|
8375
|
+
setOptions([{ value: result.AptKey, text: dropdownText }]);
|
|
8376
|
+
handleChange(result.AptKey);
|
|
8377
|
+
}
|
|
8378
|
+
catch (error) {
|
|
8379
|
+
console.error("Error fetching provider airport:", error);
|
|
8380
|
+
}
|
|
7407
8381
|
}
|
|
7408
8382
|
else {
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
});
|
|
8383
|
+
const inputText = getInputDisplayText(selectedAirport);
|
|
8384
|
+
setInputValue(inputText);
|
|
8385
|
+
setTooltipText(getDropdownDisplayText(selectedAirport));
|
|
8386
|
+
handleChange(optionValue);
|
|
7414
8387
|
}
|
|
7415
|
-
}
|
|
7416
|
-
|
|
7417
|
-
|
|
7418
|
-
|
|
7419
|
-
|
|
7420
|
-
|
|
7421
|
-
|
|
7422
|
-
|
|
7423
|
-
|
|
7424
|
-
|
|
7425
|
-
|
|
7426
|
-
|
|
7427
|
-
|
|
7428
|
-
|
|
7429
|
-
|
|
7430
|
-
|
|
7431
|
-
|
|
7432
|
-
|
|
7433
|
-
|
|
7434
|
-
|
|
7435
|
-
|
|
7436
|
-
|
|
7437
|
-
|
|
7438
|
-
|
|
7439
|
-
airports: airports2,
|
|
7440
|
-
searchingAtProviders: false,
|
|
7441
|
-
});
|
|
7442
|
-
});
|
|
8388
|
+
};
|
|
8389
|
+
// Handle keyboard navigation
|
|
8390
|
+
const handleKeyDown = (e) => {
|
|
8391
|
+
if (!showDropdown || options.length === 0)
|
|
8392
|
+
return;
|
|
8393
|
+
switch (e.key) {
|
|
8394
|
+
case "ArrowDown":
|
|
8395
|
+
e.preventDefault();
|
|
8396
|
+
setHighlightedIndex(prev => prev < options.length - 1 ? prev + 1 : 0);
|
|
8397
|
+
break;
|
|
8398
|
+
case "ArrowUp":
|
|
8399
|
+
e.preventDefault();
|
|
8400
|
+
setHighlightedIndex(prev => prev > 0 ? prev - 1 : options.length - 1);
|
|
8401
|
+
break;
|
|
8402
|
+
case "Enter":
|
|
8403
|
+
e.preventDefault();
|
|
8404
|
+
if (highlightedIndex >= 0 && highlightedIndex < options.length) {
|
|
8405
|
+
handleOptionSelect(options[highlightedIndex].value);
|
|
8406
|
+
}
|
|
8407
|
+
break;
|
|
8408
|
+
case "Escape":
|
|
8409
|
+
setShowDropdown(false);
|
|
8410
|
+
setHighlightedIndex(-1);
|
|
8411
|
+
break;
|
|
7443
8412
|
}
|
|
7444
|
-
}
|
|
7445
|
-
//
|
|
7446
|
-
|
|
7447
|
-
|
|
7448
|
-
|
|
7449
|
-
|
|
7450
|
-
|
|
7451
|
-
|
|
7452
|
-
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7457
|
-
|
|
7458
|
-
|
|
7459
|
-
|
|
7460
|
-
|
|
7461
|
-
|
|
7462
|
-
});
|
|
7463
|
-
this.setState({
|
|
7464
|
-
data: data2,
|
|
7465
|
-
airports: airports2,
|
|
7466
|
-
searchingAtProviders: false,
|
|
7467
|
-
});
|
|
7468
|
-
});
|
|
7469
|
-
}
|
|
7470
|
-
getShortCode(text) {
|
|
7471
|
-
const match = text.match(/([A-Z]{4})\(([A-Z]{3})\)/);
|
|
7472
|
-
if (match && match.length >= 3) {
|
|
7473
|
-
return `${match[1]}(${match[2]})`;
|
|
8413
|
+
};
|
|
8414
|
+
// Handle clicks outside dropdown
|
|
8415
|
+
React.useEffect(() => {
|
|
8416
|
+
const handleClickOutside = (event) => {
|
|
8417
|
+
if (dropdownRef.current &&
|
|
8418
|
+
!dropdownRef.current.contains(event.target) &&
|
|
8419
|
+
!inputRef.current?.contains(event.target)) {
|
|
8420
|
+
setShowDropdown(false);
|
|
8421
|
+
setHighlightedIndex(-1);
|
|
8422
|
+
}
|
|
8423
|
+
};
|
|
8424
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
8425
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
8426
|
+
}, []);
|
|
8427
|
+
// Load initial value
|
|
8428
|
+
React.useEffect(() => {
|
|
8429
|
+
if (value && value !== 0 && value !== -1) {
|
|
8430
|
+
fetchAirportData(value);
|
|
7474
8431
|
}
|
|
7475
|
-
|
|
7476
|
-
|
|
7477
|
-
|
|
7478
|
-
|
|
7479
|
-
|
|
7480
|
-
|
|
7481
|
-
|
|
7482
|
-
|
|
7483
|
-
}
|
|
8432
|
+
}, [value, fetchAirportData]);
|
|
8433
|
+
React.useEffect(() => {
|
|
8434
|
+
if (!value || value === 0 || value === -1) {
|
|
8435
|
+
setInputValue("");
|
|
8436
|
+
setTooltipText("");
|
|
8437
|
+
setOptions([]);
|
|
8438
|
+
setAirports([]);
|
|
8439
|
+
}
|
|
8440
|
+
}, [value]);
|
|
8441
|
+
// Handle input focus
|
|
8442
|
+
const handleInputFocus = () => {
|
|
8443
|
+
if (options.length > 0) {
|
|
8444
|
+
setShowDropdown(true);
|
|
8445
|
+
}
|
|
8446
|
+
};
|
|
8447
|
+
// Clear selection
|
|
8448
|
+
const handleClear = () => {
|
|
8449
|
+
setInputValue("");
|
|
8450
|
+
setTooltipText("");
|
|
8451
|
+
setOptions([]);
|
|
8452
|
+
setAirports([]);
|
|
8453
|
+
setShowDropdown(false);
|
|
8454
|
+
handleChange(0); // or -1, depending on API expectations
|
|
8455
|
+
inputRef.current?.focus();
|
|
8456
|
+
};
|
|
8457
|
+
return (jsxRuntime.jsxs("div", { className: `cw-find-airport ${className}`, style: width ? { width } : undefined, children: [jsxRuntime.jsxs("div", { className: "cw-find-airport-input-wrapper", children: [jsxRuntime.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) && (jsxRuntime.jsx("div", { className: "cw-find-airport-loading", children: jsxRuntime.jsx(CwIcon, { iconId: "spinner" }) })), inputValue && !disabled && !isInitialLoading && (jsxRuntime.jsx(CwButton, { type: "button", onClick: handleClear, "aria-label": "Clear selected airport", variant: "icon", icon: "close", color: "neutral" }))] }), showDropdown && options.length > 0 && (jsxRuntime.jsx("div", { ref: dropdownRef, className: "cw-find-airport-dropdown", role: "listbox", children: options.map((option, index) => (jsxRuntime.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))) }))] }));
|
|
8458
|
+
};
|
|
7484
8459
|
|
|
7485
8460
|
exports.CblDragAndDrop = CblDragAndDrop;
|
|
7486
8461
|
exports.CwAccordionContainer = CwAccordionContainer;
|
|
@@ -7531,6 +8506,8 @@ exports.CwCard = CwCard;
|
|
|
7531
8506
|
exports.CwCardList = CwCardList;
|
|
7532
8507
|
exports.CwCheckbox = CwCheckbox;
|
|
7533
8508
|
exports.CwChip = CwChip;
|
|
8509
|
+
exports.CwColorPicker = CwColorPicker;
|
|
8510
|
+
exports.CwConfirmationPopup = CwConfirmationPopup;
|
|
7534
8511
|
exports.CwContextMenu = CwContextMenu;
|
|
7535
8512
|
exports.CwContextualMenu = CwContextualMenu;
|
|
7536
8513
|
exports.CwDialog = CwDialog;
|
|
@@ -7540,9 +8517,9 @@ exports.CwDisplayMessage = CwDisplayMessage;
|
|
|
7540
8517
|
exports.CwDropdown = CwDropdown;
|
|
7541
8518
|
exports.CwDropdownContainer = CwDropdownContainer;
|
|
7542
8519
|
exports.CwDropdownFilter = CwDropdownFilter;
|
|
7543
|
-
exports.CwDropdownNavigation = CwDropdownNavigation;
|
|
7544
8520
|
exports.CwExpandable = CwExpandable;
|
|
7545
8521
|
exports.CwFileUpload = CwFileUpload;
|
|
8522
|
+
exports.CwFileUploadMultiple = CwFileUploadMultiple;
|
|
7546
8523
|
exports.CwFindAirport = CwFindAirport;
|
|
7547
8524
|
exports.CwFloatingButton = CwFloatingButton;
|
|
7548
8525
|
exports.CwGenericTooltip = CwGenericTooltip;
|
|
@@ -7551,7 +8528,10 @@ exports.CwHeadingMain = CwHeadingMain;
|
|
|
7551
8528
|
exports.CwHeadingSecond = CwHeadingSecond;
|
|
7552
8529
|
exports.CwIcon = CwIcon;
|
|
7553
8530
|
exports.CwImageArea = CwImageArea;
|
|
8531
|
+
exports.CwImageGallery = CwImageGallery;
|
|
8532
|
+
exports.CwImageZoom = CwImageZoom;
|
|
7554
8533
|
exports.CwInput = CwInput;
|
|
8534
|
+
exports.CwInputColor = CwInputColor;
|
|
7555
8535
|
exports.CwInputDate = CwInputDate;
|
|
7556
8536
|
exports.CwInputDatePicker = CwInputDatePicker;
|
|
7557
8537
|
exports.CwInputDateText = CwInputDateText;
|
|
@@ -7574,6 +8554,7 @@ exports.CwModalReportFunctional = CwModalReportFunctional;
|
|
|
7574
8554
|
exports.CwMultiFilter = CwMultiFilter;
|
|
7575
8555
|
exports.CwMultiFilterTag = CwMultiFilterTag;
|
|
7576
8556
|
exports.CwMultiselect = CwMultiselect;
|
|
8557
|
+
exports.CwNote = CwNote;
|
|
7577
8558
|
exports.CwOption = CwOption;
|
|
7578
8559
|
exports.CwOptionList = CwOptionList;
|
|
7579
8560
|
exports.CwReportModal = CwReportModal;
|
|
@@ -7583,6 +8564,7 @@ exports.CwSearchInput = CwSearchInput;
|
|
|
7583
8564
|
exports.CwSelect = CwSelect;
|
|
7584
8565
|
exports.CwSelectList = CwSelectList;
|
|
7585
8566
|
exports.CwSelectListItems = CwSelectListItems;
|
|
8567
|
+
exports.CwSortableList = CwSortableList;
|
|
7586
8568
|
exports.CwSuperScheduler = CwSuperScheduler;
|
|
7587
8569
|
exports.CwTable = CwTable;
|
|
7588
8570
|
exports.CwTableGrouped = CwTableGrouped;
|
|
@@ -7592,6 +8574,7 @@ exports.CwTextArea = CwTextArea;
|
|
|
7592
8574
|
exports.CwTime = CwTime;
|
|
7593
8575
|
exports.CwToggle = CwToggle;
|
|
7594
8576
|
exports.CwTooltip = CwTooltip;
|
|
8577
|
+
exports.CwTreeView = CwTreeView;
|
|
7595
8578
|
exports.CwWeekdaySelector = CwWeekdaySelector;
|
|
7596
8579
|
exports.DefaultRowHeader = DefaultRowHeader;
|
|
7597
8580
|
exports.MultiSelect = MultiSelect;
|
|
@@ -7629,3 +8612,4 @@ exports.getDefaultDivisions = getDefaultDivisions;
|
|
|
7629
8612
|
exports.getEventSizes = getEventSizes;
|
|
7630
8613
|
exports.itemsToMultiFilterTags = itemsToMultiFilterTags;
|
|
7631
8614
|
exports.useCwMessage = useCwMessage;
|
|
8615
|
+
exports.useSortableList = useSortableList;
|