@cwellt_software/cwellt-reactjs-lib 1.4.2 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/classes/CwSelectList.d.ts +8 -0
- package/dist/common/classes/CwSelectList.d.ts.map +1 -0
- package/dist/common/classes/CwSelectListItems.d.ts +9 -0
- package/dist/common/classes/CwSelectListItems.d.ts.map +1 -0
- package/dist/common/functions/collections.d.ts +15 -0
- package/dist/common/functions/collections.d.ts.map +1 -0
- package/dist/common/functions/colorManipulation.d.ts +6 -0
- package/dist/common/functions/colorManipulation.d.ts.map +1 -0
- package/dist/common/functions/dsl/UiEventDSL.d.ts +9 -0
- package/dist/common/functions/dsl/UiEventDSL.d.ts.map +1 -0
- package/dist/common/functions/useSingleAndDoubleClicks.d.ts +7 -0
- package/dist/common/functions/useSingleAndDoubleClicks.d.ts.map +1 -0
- package/dist/common/interfaces/CwSelectListProps.d.ts +9 -0
- package/dist/common/interfaces/CwSelectListProps.d.ts.map +1 -0
- package/dist/components/control/action/button/CwButton.d.ts +26 -0
- package/dist/components/control/action/button/CwButton.d.ts.map +1 -0
- package/dist/components/control/action/buttons/CwButtons.d.ts +59 -0
- package/dist/components/control/action/buttons/CwButtons.d.ts.map +1 -0
- package/dist/components/control/action/contextmenu/CwContextMenu.d.ts +23 -0
- package/dist/components/control/action/contextmenu/CwContextMenu.d.ts.map +1 -0
- package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts +29 -0
- package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts.map +1 -0
- package/dist/components/control/action/search/CwSearch.d.ts +16 -0
- package/dist/components/control/action/search/CwSearch.d.ts.map +1 -0
- package/dist/components/control/choice/checkbox/CwCheckbox.d.ts +17 -0
- package/dist/components/control/choice/checkbox/CwCheckbox.d.ts.map +1 -0
- package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts +24 -0
- package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts.map +1 -0
- package/dist/components/control/choice/dropdown/CwDropdown.d.ts +19 -0
- package/dist/components/control/choice/dropdown/CwDropdown.d.ts.map +1 -0
- package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts +17 -0
- package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +1 -0
- package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts +28 -0
- package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +1 -0
- package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts +21 -0
- package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts.map +1 -0
- package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts +158 -0
- package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +1 -0
- package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts +33 -0
- package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts.map +1 -0
- package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts +16 -0
- package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts.map +1 -0
- package/dist/components/control/choice/multiselect/CwMultiselect.d.ts +13 -0
- package/dist/components/control/choice/multiselect/CwMultiselect.d.ts.map +1 -0
- package/dist/components/control/choice/multiselect/CwOptionList.d.ts +15 -0
- package/dist/components/control/choice/multiselect/CwOptionList.d.ts.map +1 -0
- package/dist/components/control/choice/option/CwOption.d.ts +17 -0
- package/dist/components/control/choice/option/CwOption.d.ts.map +1 -0
- package/dist/components/control/choice/select/CwSelect.d.ts +48 -0
- package/dist/components/control/choice/select/CwSelect.d.ts.map +1 -0
- package/dist/components/control/choice/toggle/CwToggle.d.ts +28 -0
- package/dist/components/control/choice/toggle/CwToggle.d.ts.map +1 -0
- package/dist/components/control/input/any/CwInput.d.ts +17 -0
- package/dist/components/control/input/any/CwInput.d.ts.map +1 -0
- package/dist/components/control/input/date/CwInputDate.d.ts +40 -0
- package/dist/components/control/input/date/CwInputDate.d.ts.map +1 -0
- package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts +7 -0
- package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts.map +1 -0
- package/dist/components/control/input/date-text/CwInputDateText.d.ts +38 -0
- package/dist/components/control/input/date-text/CwInputDateText.d.ts.map +1 -0
- package/dist/components/control/input/datetime/CwInputDatetime.d.ts +40 -0
- package/dist/components/control/input/datetime/CwInputDatetime.d.ts.map +1 -0
- package/dist/components/control/input/digit/CwDigit.d.ts +40 -0
- package/dist/components/control/input/digit/CwDigit.d.ts.map +1 -0
- package/dist/components/control/input/file/CwFileUpload.d.ts +18 -0
- package/dist/components/control/input/file/CwFileUpload.d.ts.map +1 -0
- package/dist/components/control/input/file/CwFileUploadMultiple.d.ts +15 -0
- package/dist/components/control/input/file/CwFileUploadMultiple.d.ts.map +1 -0
- package/dist/components/control/input/image/CwInputImage.d.ts +7 -0
- package/dist/components/control/input/image/CwInputImage.d.ts.map +1 -0
- package/dist/components/control/input/image-area/CwImageArea.d.ts +53 -0
- package/dist/components/control/input/image-area/CwImageArea.d.ts.map +1 -0
- package/dist/components/control/input/number/CwInputNumber.d.ts +20 -0
- package/dist/components/control/input/number/CwInputNumber.d.ts.map +1 -0
- package/dist/components/control/input/phone/CwInputPhone.d.ts +36 -0
- package/dist/components/control/input/phone/CwInputPhone.d.ts.map +1 -0
- package/dist/components/control/input/text/CwInputText.d.ts +40 -0
- package/dist/components/control/input/text/CwInputText.d.ts.map +1 -0
- package/dist/components/control/input/text-area/CwTextArea.d.ts +24 -0
- package/dist/components/control/input/text-area/CwTextArea.d.ts.map +1 -0
- package/dist/components/control/input/time/CwTime.d.ts +40 -0
- package/dist/components/control/input/time/CwTime.d.ts.map +1 -0
- package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts +53 -0
- package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts.map +1 -0
- package/dist/components/custom/find-airport/CwFindAirportComp.d.ts +35 -0
- package/dist/components/custom/find-airport/CwFindAirportComp.d.ts.map +1 -0
- package/dist/components/custom/scheduler/CwSchedulerComp.d.ts +19 -0
- package/dist/components/custom/scheduler/CwSchedulerComp.d.ts.map +1 -0
- package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts +86 -0
- package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/EventRender.d.ts +10 -0
- package/dist/components/custom/scheduler/components/EventRender.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/ResourceListRender.d.ts +20 -0
- package/dist/components/custom/scheduler/components/ResourceListRender.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/ResourceRender.d.ts +14 -0
- package/dist/components/custom/scheduler/components/ResourceRender.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts +11 -0
- package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts +11 -0
- package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts +13 -0
- package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts +11 -0
- package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts +14 -0
- package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts +23 -0
- package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts +8 -0
- package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts +12 -0
- package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts +12 -0
- package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts +10 -0
- package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts.map +1 -0
- package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts +12 -0
- package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts +7 -0
- package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts +10 -0
- package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +7 -0
- package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts +8 -0
- package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts +3 -0
- package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts +3 -0
- package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts +13 -0
- package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts +17 -0
- package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts +3 -0
- package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts +4 -0
- package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts +5 -0
- package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts +3 -0
- package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts +4 -0
- package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts +2 -0
- package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts.map +1 -0
- package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts +3 -0
- package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts +11 -0
- package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts +43 -0
- package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/Resource.d.ts +14 -0
- package/dist/components/custom/scheduler/state/Resource.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/State.d.ts +19 -0
- package/dist/components/custom/scheduler/state/State.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/cblEvent.d.ts +18 -0
- package/dist/components/custom/scheduler/state/cblEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts +7 -0
- package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts.map +1 -0
- package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts +6 -0
- package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts +29 -0
- package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts +80 -0
- package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts +27 -0
- package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts +19 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts +10 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts +5 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts +17 -0
- package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +8 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts +17 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts +34 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts +8 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts +27 -0
- package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts +10 -0
- package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts +15 -0
- package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts +11 -0
- package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/helpers.d.ts +19 -0
- package/dist/components/custom/scheduler-new/presentation/helpers.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts +4 -0
- package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts +2 -0
- package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts +2 -0
- package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts +6 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts +3 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts +6 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts +4 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts +2 -0
- package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts +3 -0
- package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts +4 -0
- package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts +12 -0
- package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts.map +1 -0
- package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts +5 -0
- package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts +24 -0
- package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts +86 -0
- package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts +10 -0
- package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts +20 -0
- package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts +14 -0
- package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts +11 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts +11 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts +13 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts +11 -0
- package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts +14 -0
- package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts +23 -0
- package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts +8 -0
- package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts +12 -0
- package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts +12 -0
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts +10 -0
- package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts +12 -0
- package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts +7 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts +10 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +7 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts +8 -0
- package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +15 -0
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts +3 -0
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts +3 -0
- package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts +13 -0
- package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +17 -0
- package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +3 -0
- package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts +4 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts +5 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts +4 -0
- package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +3 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts +6 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts +2 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts +3 -0
- package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts +11 -0
- package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts +43 -0
- package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/state/Resource.d.ts +14 -0
- package/dist/components/custom/scheduler-temporal/state/Resource.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/state/State.d.ts +25 -0
- package/dist/components/custom/scheduler-temporal/state/State.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts +18 -0
- package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts.map +1 -0
- package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts +7 -0
- package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts.map +1 -0
- package/dist/components/custom/super-scheduler/PinRowHeader.d.ts +15 -0
- package/dist/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -0
- package/dist/components/custom/super-scheduler/SuperScheduler.d.ts +25 -0
- package/dist/components/custom/super-scheduler/SuperScheduler.d.ts.map +1 -0
- package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts +13 -0
- package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts.map +1 -0
- package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts +9 -0
- package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts.map +1 -0
- package/dist/components/display/data/accordion/CwAccordionContainer.d.ts +14 -0
- package/dist/components/display/data/accordion/CwAccordionContainer.d.ts.map +1 -0
- package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +15 -0
- package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +1 -0
- package/dist/components/display/data/table/CwTable.d.ts +102 -0
- package/dist/components/display/data/table/CwTable.d.ts.map +1 -0
- package/dist/components/display/graphics/icon/CwIcon.d.ts +15 -0
- package/dist/components/display/graphics/icon/CwIcon.d.ts.map +1 -0
- package/dist/components/display/graphics/loading/CwLoading.d.ts +42 -0
- package/dist/components/display/graphics/loading/CwLoading.d.ts.map +1 -0
- package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts +18 -0
- package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts.map +1 -0
- package/dist/components/display/text/heading/CwHeadingMain.d.ts +3 -0
- package/dist/components/display/text/heading/CwHeadingMain.d.ts.map +1 -0
- package/dist/components/display/text/heading/CwHeadingSecond.d.ts +3 -0
- package/dist/components/display/text/heading/CwHeadingSecond.d.ts.map +1 -0
- package/dist/components/display/text/label/CwLabel.d.ts +28 -0
- package/dist/components/display/text/label/CwLabel.d.ts.map +1 -0
- package/dist/components/display/text/message/CwMessage.d.ts +31 -0
- package/dist/components/display/text/message/CwMessage.d.ts.map +1 -0
- package/dist/components/display/text/tag/CwChip.d.ts +36 -0
- package/dist/components/display/text/tag/CwChip.d.ts.map +1 -0
- package/dist/components/display/text/tag/CwTag.d.ts +16 -0
- package/dist/components/display/text/tag/CwTag.d.ts.map +1 -0
- package/dist/components/display/text/tooltip/CwTooltip.d.ts +8 -0
- package/dist/components/display/text/tooltip/CwTooltip.d.ts.map +1 -0
- package/dist/components/layout/align/CwAlign.d.ts +54 -0
- package/dist/components/layout/align/CwAlign.d.ts.map +1 -0
- package/dist/components/layout/card/CwCard.d.ts +61 -0
- package/dist/components/layout/card/CwCard.d.ts.map +1 -0
- package/dist/components/layout/card/CwCardList.d.ts +32 -0
- package/dist/components/layout/card/CwCardList.d.ts.map +1 -0
- package/dist/components/layout/dialog/CwDialog.d.ts +28 -0
- package/dist/components/layout/dialog/CwDialog.d.ts.map +1 -0
- package/dist/components/layout/dialog/CwDialogManager.d.ts +11 -0
- package/dist/components/layout/dialog/CwDialogManager.d.ts.map +1 -0
- package/dist/components/layout/list/details/CwExpandable.d.ts +23 -0
- package/dist/components/layout/list/details/CwExpandable.d.ts.map +1 -0
- package/dist/components/layout/list/key-value/CwKeyValueList.d.ts +33 -0
- package/dist/components/layout/list/key-value/CwKeyValueList.d.ts.map +1 -0
- package/dist/components/layout/modal/CwModalReportFunctional.d.ts +15 -0
- package/dist/components/layout/modal/CwModalReportFunctional.d.ts.map +1 -0
- package/dist/components/layout/modal/hover/CwModalHover.d.ts +19 -0
- package/dist/components/layout/modal/hover/CwModalHover.d.ts.map +1 -0
- package/dist/components/layout/modal/legacy/cw_modal.d.ts +22 -0
- package/dist/components/layout/modal/legacy/cw_modal.d.ts.map +1 -0
- package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts +16 -0
- package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts.map +1 -0
- package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts +21 -0
- package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts.map +1 -0
- package/dist/components/layout/modal/legacy/cw_modal_report.d.ts +32 -0
- package/dist/components/layout/modal/legacy/cw_modal_report.d.ts.map +1 -0
- package/dist/components/layout/table/grouped/CwTableGrouped.d.ts +80 -0
- package/dist/components/layout/table/grouped/CwTableGrouped.d.ts.map +1 -0
- package/dist/components/layout/tabs/CwTabs.d.ts +46 -0
- package/dist/components/layout/tabs/CwTabs.d.ts.map +1 -0
- package/dist/content/icons/font-awesome/LICENSE.txt +165 -0
- package/dist/content/icons/font-awesome/css/all.css +8030 -0
- package/dist/content/icons/font-awesome/css/all.min.css +9 -0
- package/dist/content/icons/font-awesome/css/brands.css +1594 -0
- package/dist/content/icons/font-awesome/css/brands.min.css +6 -0
- package/dist/content/icons/font-awesome/css/fontawesome.css +6375 -0
- package/dist/content/icons/font-awesome/css/fontawesome.min.css +9 -0
- package/dist/content/icons/font-awesome/css/regular.css +19 -0
- package/dist/content/icons/font-awesome/css/regular.min.css +6 -0
- package/dist/content/icons/font-awesome/css/solid.css +19 -0
- package/dist/content/icons/font-awesome/css/solid.min.css +6 -0
- package/dist/content/icons/font-awesome/css/svg-with-js.css +640 -0
- package/dist/content/icons/font-awesome/css/svg-with-js.min.css +6 -0
- package/dist/content/icons/font-awesome/css/v4-font-face.css +26 -0
- package/dist/content/icons/font-awesome/css/v4-font-face.min.css +6 -0
- package/dist/content/icons/font-awesome/css/v4-shims.css +2194 -0
- package/dist/content/icons/font-awesome/css/v4-shims.min.css +6 -0
- package/dist/content/icons/font-awesome/css/v5-font-face.css +22 -0
- package/dist/content/icons/font-awesome/css/v5-font-face.min.css +6 -0
- package/dist/content/icons/font-awesome/js/all.js +19027 -0
- package/dist/content/icons/font-awesome/js/all.min.js +17199 -0
- package/dist/content/icons/font-awesome/js/brands.js +3792 -0
- package/dist/content/icons/font-awesome/js/brands.min.js +3693 -0
- package/dist/content/icons/font-awesome/js/conflict-detection.js +1303 -0
- package/dist/content/icons/font-awesome/js/conflict-detection.min.js +778 -0
- package/dist/content/icons/font-awesome/js/fontawesome.js +3617 -0
- package/dist/content/icons/font-awesome/js/fontawesome.min.js +2068 -0
- package/dist/content/icons/font-awesome/js/regular.js +1515 -0
- package/dist/content/icons/font-awesome/js/regular.min.js +1416 -0
- package/dist/content/icons/font-awesome/js/solid.js +10118 -0
- package/dist/content/icons/font-awesome/js/solid.min.js +10019 -0
- package/dist/content/icons/font-awesome/js/v4-shims.js +1126 -0
- package/dist/content/icons/font-awesome/js/v4-shims.min.js +1053 -0
- package/dist/content/icons/font-awesome/less/_animated.less +152 -0
- package/dist/content/icons/font-awesome/less/_bordered-pulled.less +20 -0
- package/dist/content/icons/font-awesome/less/_core.less +38 -0
- package/dist/content/icons/font-awesome/less/_fixed-width.less +7 -0
- package/dist/content/icons/font-awesome/less/_icons.less +9 -0
- package/dist/content/icons/font-awesome/less/_list.less +18 -0
- package/dist/content/icons/font-awesome/less/_mixins.less +78 -0
- package/dist/content/icons/font-awesome/less/_rotated-flipped.less +31 -0
- package/dist/content/icons/font-awesome/less/_screen-reader.less +14 -0
- package/dist/content/icons/font-awesome/less/_shims.less +2042 -0
- package/dist/content/icons/font-awesome/less/_sizing.less +19 -0
- package/dist/content/icons/font-awesome/less/_stacked.less +31 -0
- package/dist/content/icons/font-awesome/less/_variables.less +5012 -0
- package/dist/content/icons/font-awesome/less/brands.less +29 -0
- package/dist/content/icons/font-awesome/less/fontawesome.less +20 -0
- package/dist/content/icons/font-awesome/less/regular.less +25 -0
- package/dist/content/icons/font-awesome/less/solid.less +26 -0
- package/dist/content/icons/font-awesome/less/v4-shims.less +10 -0
- package/dist/content/icons/font-awesome/metadata/categories.yml +3075 -0
- package/dist/content/icons/font-awesome/metadata/icon-families.json +80440 -0
- package/dist/content/icons/font-awesome/metadata/icon-families.yml +53789 -0
- package/dist/content/icons/font-awesome/metadata/icons.json +52794 -0
- package/dist/content/icons/font-awesome/metadata/icons.yml +43892 -0
- package/dist/content/icons/font-awesome/metadata/shims.json +812 -0
- package/dist/content/icons/font-awesome/metadata/shims.yml +646 -0
- package/dist/content/icons/font-awesome/metadata/sponsors.yml +1452 -0
- package/dist/content/icons/font-awesome/scss/_animated.scss +152 -0
- package/dist/content/icons/font-awesome/scss/_bordered-pulled.scss +20 -0
- package/dist/content/icons/font-awesome/scss/_core.scss +43 -0
- package/dist/content/icons/font-awesome/scss/_fixed-width.scss +7 -0
- package/dist/content/icons/font-awesome/scss/_functions.scss +57 -0
- package/dist/content/icons/font-awesome/scss/_icons.scss +10 -0
- package/dist/content/icons/font-awesome/scss/_list.scss +18 -0
- package/dist/content/icons/font-awesome/scss/_mixins.scss +72 -0
- package/dist/content/icons/font-awesome/scss/_rotated-flipped.scss +31 -0
- package/dist/content/icons/font-awesome/scss/_screen-reader.scss +14 -0
- package/dist/content/icons/font-awesome/scss/_shims.scss +1578 -0
- package/dist/content/icons/font-awesome/scss/_sizing.scss +16 -0
- package/dist/content/icons/font-awesome/scss/_stacked.scss +32 -0
- package/dist/content/icons/font-awesome/scss/_variables.scss +5011 -0
- package/dist/content/icons/font-awesome/scss/brands.scss +30 -0
- package/dist/content/icons/font-awesome/scss/fontawesome.scss +21 -0
- package/dist/content/icons/font-awesome/scss/regular.scss +26 -0
- package/dist/content/icons/font-awesome/scss/solid.scss +26 -0
- package/dist/content/icons/font-awesome/scss/v4-shims.scss +11 -0
- package/dist/content/icons/font-awesome/sprites/brands.svg +1478 -0
- package/dist/content/icons/font-awesome/sprites/regular.svg +497 -0
- package/dist/content/icons/font-awesome/sprites/solid.svg +4184 -0
- package/dist/content/icons/font-awesome/svgs/brands/42-group.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/500px.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/accessible-icon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/accusoft.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/adn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/adversal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/affiliatetheme.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/airbnb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/algolia.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/alipay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/amazon-pay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/amazon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/amilia.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/android.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/angellist.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/angrycreative.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/angular.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/app-store-ios.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/app-store.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/apper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/apple-pay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/apple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/artstation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/asymmetrik.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/atlassian.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/audible.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/autoprefixer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/avianex.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/aviato.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/aws.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bandcamp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/battle-net.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/behance.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bilibili.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bimobject.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bitbucket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bitcoin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bity.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/black-tie.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/blackberry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/blogger-b.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/blogger.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bluesky.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bluetooth-b.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bluetooth.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bootstrap.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/bots.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/brave-reverse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/brave.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/btc.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/buffer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/buromobelexperte.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/buy-n-large.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/buysellads.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/canadian-maple-leaf.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-amazon-pay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-amex.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-apple-pay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-diners-club.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-discover.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-jcb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-mastercard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-paypal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-stripe.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cc-visa.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/centercode.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/centos.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/chrome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/chromecast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cloudflare.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cloudscale.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cloudsmith.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cloudversify.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cmplid.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/codepen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/codiepie.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/confluence.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/connectdevelop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/contao.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cotton-bureau.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cpanel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-by.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-nc-eu.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-nc-jp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-nc.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-nd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-pd-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-pd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-remix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-sa.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-sampling-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-sampling.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-share.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons-zero.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/creative-commons.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/critical-role.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/css3-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/css3.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/cuttlefish.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/d-and-d-beyond.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/d-and-d.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dailymotion.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dashcube.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/debian.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/deezer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/delicious.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/deploydog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/deskpro.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dev.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/deviantart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dhl.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/diaspora.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/digg.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/digital-ocean.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/discord.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/discourse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dochub.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/docker.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/draft2digital.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dribbble.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dropbox.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/drupal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/dyalog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/earlybirds.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ebay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/edge-legacy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/edge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/elementor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ello.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ember.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/empire.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/envira.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/erlang.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ethereum.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/etsy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/evernote.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/expeditedssl.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/facebook-f.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/facebook-messenger.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/facebook.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fantasy-flight-games.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fedex.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fedora.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/figma.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/firefox-browser.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/firefox.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/first-order-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/first-order.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/firstdraft.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/flickr.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/flipboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fly.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/font-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fonticons-fi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fonticons.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fort-awesome-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fort-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/forumbee.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/foursquare.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/free-code-camp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/freebsd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/fulcrum.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/galactic-republic.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/galactic-senate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/get-pocket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gg-circle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gg.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/git-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/git.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/github-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/github.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gitkraken.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gitlab.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gitter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/glide-g.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/glide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gofore.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/golang.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/goodreads-g.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/goodreads.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-drive.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-pay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-play.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-plus-g.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-scholar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google-wallet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/google.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gratipay.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/grav.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gripfire.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/grunt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/guilded.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/gulp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hacker-news.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hackerrank.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hashnode.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hips.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hire-a-helper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hive.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hooli.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hornbill.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hotjar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/houzz.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/html5.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/hubspot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ideal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/imdb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/instagram.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/instalod.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/intercom.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/internet-explorer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/invision.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ioxhost.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/itch-io.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/itunes-note.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/itunes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/java.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/jedi-order.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/jenkins.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/jira.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/joget.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/joomla.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/js.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/jsfiddle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/jxl.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/kaggle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/keybase.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/keycdn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/kickstarter-k.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/kickstarter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/korvue.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/laravel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/lastfm.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/leanpub.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/less.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/letterboxd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/linkedin-in.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/linkedin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/linode.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/linux.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/lyft.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/magento.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mailchimp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mandalorian.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/markdown.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mastodon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/maxcdn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mdb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/medapps.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/medium.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/medrt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/meetup.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/megaport.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mendeley.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/meta.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/microblog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/microsoft.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mintbit.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mixcloud.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mixer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/mizuni.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/modx.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/monero.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/napster.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/neos.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/nfc-directional.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/nfc-symbol.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/nimblr.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/node-js.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/node.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/npm.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ns8.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/nutritionix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/octopus-deploy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/odnoklassniki.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/odysee.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/old-republic.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/opencart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/openid.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/opensuse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/opera.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/optin-monster.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/orcid.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/osi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/padlet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/page4.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pagelines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/palfed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/patreon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/paypal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/perbyte.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/periscope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/phabricator.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/phoenix-framework.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/phoenix-squadron.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/php.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pied-piper-alt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pied-piper-hat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pied-piper-pp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pied-piper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pinterest-p.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pinterest.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pixiv.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/playstation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/product-hunt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/pushed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/python.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/qq.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/quinscape.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/quora.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/r-project.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/raspberry-pi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ravelry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/react.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/reacteurope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/readme.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/rebel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/red-river.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/reddit-alien.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/reddit.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/redhat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/renren.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/replyd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/researchgate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/resolving.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/rev.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/rocketchat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/rockrms.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/rust.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/safari.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/salesforce.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/schlix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/screenpal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/scribd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/searchengin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sellcast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sellsy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/servicestack.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/shirtsinbulk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/shoelace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/shopify.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/shopware.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/signal-messenger.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/simplybuilt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sistrix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sith.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sitrox.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sketch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/skyatlas.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/skype.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/slack.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/slideshare.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/snapchat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/soundcloud.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sourcetree.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/space-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/speakap.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/speaker-deck.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/spotify.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-behance.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-dribbble.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-facebook.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-font-awesome-stroke.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-font-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-git.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-github.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-gitlab.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-google-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-hacker-news.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-instagram.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-js.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-lastfm.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-letterboxd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-odnoklassniki.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-pied-piper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-pinterest.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-reddit.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-snapchat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-steam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-threads.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-tumblr.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-twitter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-upwork.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-viadeo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-vimeo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-web-awesome-stroke.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-web-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-whatsapp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-x-twitter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-xing.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/square-youtube.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/squarespace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stack-exchange.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stack-overflow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stackpath.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/staylinked.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/steam-symbol.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/steam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/sticker-mule.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/strava.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stripe-s.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stripe.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stubber.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/studiovinari.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stumbleupon-circle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/stumbleupon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/superpowers.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/supple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/suse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/swift.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/symfony.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/teamspeak.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/telegram.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/tencent-weibo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/the-red-yeti.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/themeco.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/themeisle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/think-peaks.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/threads.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/tiktok.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/trade-federation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/trello.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/tumblr.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/twitch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/twitter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/typo3.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/uber.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ubuntu.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/uikit.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/umbraco.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/uncharted.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/uniregistry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/unity.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/unsplash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/untappd.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ups.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/upwork.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/usb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/usps.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/ussunnah.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vaadin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/viacoin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/viadeo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/viber.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vimeo-v.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vimeo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vine.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vnv.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/vuejs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/watchman-monitoring.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/waze.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/web-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/webflow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/weebly.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/weibo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/weixin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/whatsapp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/whmcs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wikipedia-w.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/windows.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wirsindhandwerk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wix.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wizards-of-the-coast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wodu.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wolf-pack-battalion.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wordpress-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wordpress.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wpbeginner.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wpexplorer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wpforms.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/wpressr.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/x-twitter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/xbox.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/xing.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/y-combinator.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yahoo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yammer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yandex-international.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yandex.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yarn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yelp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/yoast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/youtube.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/brands/zhihu.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/address-book.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/address-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/bell-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/bell.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/bookmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/building.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/calendar-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/calendar-days.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/calendar-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/calendar-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/calendar-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/calendar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chart-bar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chess-bishop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chess-king.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chess-knight.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chess-pawn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chess-queen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/chess-rook.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-dot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-pause.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-play.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-question.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-stop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/circle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/clipboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/clock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/clone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/closed-captioning.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/comment-dots.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/comment.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/comments.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/compass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/copy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/copyright.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/credit-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/envelope-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/envelope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/eye-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/eye.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-angry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-dizzy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-flushed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-frown-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-frown.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grimace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-beam-sweat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-hearts.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-squint-tears.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-squint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-stars.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-tears.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-tongue-squint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-tongue-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-tongue.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-wide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-grin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-kiss-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-kiss-wink-heart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-kiss.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-laugh-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-laugh-squint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-laugh-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-laugh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-meh-blank.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-meh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-rolling-eyes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-sad-cry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-sad-tear.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-smile-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-smile-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-smile.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-surprise.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/face-tired.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-audio.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-code.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-excel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-image.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-lines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-pdf.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-powerpoint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-video.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-word.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file-zipper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/file.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/floppy-disk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/folder-closed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/folder-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/folder.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/font-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/futbol.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/gem.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-back-fist.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-lizard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-peace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-point-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-point-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-point-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-point-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-pointer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-scissors.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand-spock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hand.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/handshake.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hard-drive.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/heart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hospital.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hourglass-half.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/hourglass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/id-badge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/id-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/image.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/images.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/keyboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/lemon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/life-ring.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/lightbulb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/map.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/message.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/money-bill-1.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/moon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/newspaper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/note-sticky.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/object-group.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/object-ungroup.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/paper-plane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/paste.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/pen-to-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/rectangle-list.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/rectangle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/registered.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/share-from-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/snowflake.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-caret-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-caret-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-caret-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-caret-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-full.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/star-half-stroke.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/star-half.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/star.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/sun.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/thumbs-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/thumbs-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/trash-can.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/window-maximize.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/window-minimize.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/regular/window-restore.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/0.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/1.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/2.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/3.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/4.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/5.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/6.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/7.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/8.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/9.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/a.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/address-book.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/address-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/align-center.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/align-justify.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/align-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/align-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/anchor-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/anchor-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/anchor-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/anchor-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/anchor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angle-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angle-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angle-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angle-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angles-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angles-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angles-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/angles-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ankh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/apple-whole.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/archway.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-1-9.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-9-1.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-a-z.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-short-wide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-up-across-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-up-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-wide-short.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down-z-a.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-left-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-pointer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-right-arrow-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-right-from-bracket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-right-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-right-to-bracket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-right-to-city.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-rotate-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-rotate-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-trend-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-trend-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-turn-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-turn-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-1-9.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-9-1.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-a-z.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-from-bracket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-from-ground-water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-from-water-pump.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-right-dots.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-right-from-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-short-wide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-wide-short.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up-z-a.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-down-to-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-down-to-people.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-left-right-to-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-left-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-rotate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-spin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-split-up-and-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-to-circle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-to-dot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-to-eye.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-turn-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-turn-to-dots.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-up-down-left-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-up-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/arrows-up-to-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/asterisk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/at.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/atom.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/audio-description.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/austral-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/award.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/b.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/baby-carriage.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/baby.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/backward-fast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/backward-step.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/backward.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bacon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bacteria.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bacterium.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bag-shopping.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bahai.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/baht-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ban-smoking.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ban.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bandage.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bangladeshi-taka-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/barcode.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bars-progress.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bars-staggered.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bars.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/baseball-bat-ball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/baseball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/basket-shopping.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/basketball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bath.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/battery-empty.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/battery-full.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/battery-half.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/battery-quarter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/battery-three-quarters.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bed-pulse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/beer-mug-empty.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bell-concierge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bell-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bell.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bezier-curve.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bicycle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/binoculars.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/biohazard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bitcoin-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/blender-phone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/blender.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/blog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bold.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bolt-lightning.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bolt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bomb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bong.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-atlas.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-bible.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-bookmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-journal-whills.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-open-reader.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-quran.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-skull.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book-tanakh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/book.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bookmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/border-all.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/border-none.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/border-top-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bore-hole.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bottle-droplet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bottle-water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bowl-food.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bowl-rice.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bowling-ball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/box-archive.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/box-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/box-tissue.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/box.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/boxes-packing.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/boxes-stacked.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/braille.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/brain.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/brazilian-real-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bread-slice.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bridge-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bridge-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bridge-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bridge-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bridge-water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bridge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/briefcase-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/briefcase.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/broom-ball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/broom.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/brush.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bucket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bug-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bug.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bugs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-circle-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-columns.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-ngo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-shield.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-un.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building-wheat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/building.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bullhorn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bullseye.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/burger.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/burst.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bus-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/bus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/business-time.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/c.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cable-car.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cake-candles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calculator.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-day.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-days.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-week.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/calendar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/camera-retro.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/camera-rotate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/camera.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/campground.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/candy-cane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cannabis.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/capsules.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car-battery.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car-burst.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car-on.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car-rear.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car-side.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car-tunnel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/car.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/caravan.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/caret-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/caret-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/caret-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/caret-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/carrot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cart-arrow-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cart-flatbed-suitcase.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cart-flatbed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cart-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cart-shopping.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cash-register.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cedi-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cent-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/certificate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chair.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chalkboard-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chalkboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/champagne-glasses.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/charging-station.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-area.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-bar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-column.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-gantt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-pie.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chart-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/check-double.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/check-to-slot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cheese.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-bishop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-board.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-king.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-knight.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-pawn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-queen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess-rook.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chess.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chevron-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chevron-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chevron-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/chevron-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/child-combatant.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/child-dress.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/child-reaching.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/child.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/children.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/church.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-arrow-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-arrow-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-chevron-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-chevron-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-chevron-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-chevron-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-dollar-to-slot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-dot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-h.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-half-stroke.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-info.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-nodes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-notch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-pause.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-play.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-question.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-radiation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-stop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/circle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/city.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clapperboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clipboard-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clipboard-list.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clipboard-question.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clipboard-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clipboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clock-rotate-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/closed-captioning.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-arrow-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-bolt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-meatball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-moon-rain.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-moon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-rain.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-showers-heavy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-showers-water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-sun-rain.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud-sun.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cloud.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/clover.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code-branch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code-commit.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code-compare.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code-fork.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code-merge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code-pull-request.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/code.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/coins.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/colon-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comment-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comment-dots.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comment-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comment-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comment-sms.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comment.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comments-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/comments.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/compact-disc.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/compass-drafting.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/compass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/compress.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/computer-mouse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/computer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cookie-bite.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cookie.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/copy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/copyright.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/couch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/credit-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/crop-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/crop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cross.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/crosshairs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/crow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/crown.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/crutch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cruzeiro-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cube.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cubes-stacked.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/cubes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/d.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/database.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/delete-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/democrat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/desktop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dharmachakra.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/diagram-next.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/diagram-predecessor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/diagram-project.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/diagram-successor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/diamond-turn-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/diamond.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-d20.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-d6.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-five.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-four.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-one.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-six.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-three.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice-two.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dice.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/disease.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/display.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/divide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dna.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dollar-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dolly.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dong-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/door-closed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/door-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dove.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/down-left-and-up-right-to-center.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/down-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/download.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dragon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/draw-polygon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/droplet-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/droplet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/drum-steelpan.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/drum.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/drumstick-bite.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dumbbell.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dumpster-fire.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dumpster.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/dungeon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/e.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ear-deaf.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ear-listen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/earth-africa.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/earth-americas.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/earth-asia.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/earth-europe.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/earth-oceania.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/egg.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/eject.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/elevator.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ellipsis-vertical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ellipsis.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/envelope-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/envelope-open-text.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/envelope-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/envelope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/envelopes-bulk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/equals.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/eraser.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ethernet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/euro-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/expand.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/explosion.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/eye-dropper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/eye-low-vision.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/eye-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/eye.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/f.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-angry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-dizzy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-flushed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-frown-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-frown.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grimace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-beam-sweat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-hearts.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-squint-tears.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-squint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-stars.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-tears.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-tongue-squint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-tongue-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-tongue.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-wide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-grin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-kiss-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-kiss-wink-heart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-kiss.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-laugh-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-laugh-squint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-laugh-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-laugh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-meh-blank.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-meh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-rolling-eyes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-sad-cry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-sad-tear.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-smile-beam.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-smile-wink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-smile.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-surprise.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/face-tired.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fan.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/faucet-drip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/faucet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fax.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/feather-pointed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/feather.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ferry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-arrow-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-audio.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-circle-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-circle-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-circle-question.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-code.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-contract.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-csv.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-excel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-export.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-image.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-import.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-invoice-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-invoice.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-lines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-pdf.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-pen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-powerpoint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-prescription.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-shield.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-signature.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-video.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-waveform.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-word.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file-zipper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/file.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fill-drip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fill.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/film.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/filter-circle-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/filter-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/filter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fingerprint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fire-burner.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fire-extinguisher.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fire-flame-curved.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fire-flame-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fire.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fish-fins.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/fish.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/flag-checkered.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/flag-usa.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/flask-vial.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/flask.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/floppy-disk.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/florin-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/folder-closed.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/folder-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/folder-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/folder-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/folder-tree.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/folder.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/font-awesome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/font.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/football.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/forward-fast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/forward-step.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/forward.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/franc-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/frog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/futbol.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/g.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gamepad.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gas-pump.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gauge-high.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gauge-simple-high.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gauge-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gauge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gavel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gear.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gears.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gem.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/genderless.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ghost.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gift.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gifts.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/glass-water-droplet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/glass-water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/glasses.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/globe.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/golf-ball-tee.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gopuram.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/graduation-cap.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/greater-than-equal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/greater-than.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/grip-lines-vertical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/grip-lines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/grip-vertical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/grip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/group-arrows-rotate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/guarani-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/guitar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/gun.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/h.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hammer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hamsa.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-back-fist.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-dots.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-fist.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-holding-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-holding-droplet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-holding-hand.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-holding-heart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-holding-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-holding.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-lizard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-middle-finger.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-peace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-point-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-point-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-point-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-point-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-pointer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-scissors.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-sparkles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand-spock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hand.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/handcuffs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-asl-interpreting.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-bound.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-bubbles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-clapping.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-holding-child.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-holding-circle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-holding.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands-praying.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hands.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/handshake-angle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/handshake-simple-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/handshake-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/handshake-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/handshake.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hanukiah.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hard-drive.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hashtag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hat-cowboy-side.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hat-cowboy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hat-wizard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/head-side-cough-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/head-side-cough.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/head-side-mask.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/head-side-virus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heading.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/headphones-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/headphones.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/headset.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-circle-bolt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-circle-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-circle-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-crack.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart-pulse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/heart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/helicopter-symbol.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/helicopter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/helmet-safety.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/helmet-un.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/highlighter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hill-avalanche.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hill-rockslide.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hippo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hockey-puck.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/holly-berry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/horse-head.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/horse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hospital-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hospital.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hot-tub-person.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hotdog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hotel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hourglass-end.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hourglass-half.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hourglass-start.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hourglass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-chimney-crack.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-chimney-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-chimney-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-chimney-window.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-chimney.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-crack.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-fire.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-flood-water-circle-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-flood-water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-laptop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-medical-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-medical-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-medical-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-medical-flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-signal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-tsunami.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house-user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/house.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hryvnia-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/hurricane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/i-cursor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/i.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ice-cream.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/icicles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/icons.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/id-badge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/id-card-clip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/id-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/igloo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/image-portrait.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/image.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/images.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/inbox.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/indent.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/indian-rupee-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/industry.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/infinity.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/info.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/italic.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/j.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/jar-wheat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/jar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/jedi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/jet-fighter-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/jet-fighter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/joint.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/jug-detergent.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/k.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/kaaba.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/key.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/keyboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/khanda.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/kip-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/kit-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/kitchen-set.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/kiwi-bird.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/l.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/land-mine-on.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/landmark-dome.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/landmark-flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/landmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/language.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/laptop-code.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/laptop-file.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/laptop-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/laptop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lari-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/layer-group.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/leaf.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/left-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/left-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lemon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/less-than-equal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/less-than.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/life-ring.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lightbulb.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lines-leaning.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/link-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/link.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lira-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/list-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/list-ol.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/list-ul.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/list.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/litecoin-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/location-arrow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/location-crosshairs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/location-dot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/location-pin-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/location-pin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lock-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/locust.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lungs-virus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/lungs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/m.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass-chart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass-location.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/magnifying-glass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/manat-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/map-location-dot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/map-location.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/map-pin.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/map.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/marker.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars-and-venus-burst.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars-and-venus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars-double.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars-stroke-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars-stroke-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars-stroke.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mars.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/martini-glass-citrus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/martini-glass-empty.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/martini-glass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mask-face.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mask-ventilator.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mask.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/masks-theater.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mattress-pillow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/maximize.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/medal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/memory.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/menorah.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mercury.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/message.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/meteor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/microchip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/microphone-lines-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/microphone-lines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/microphone-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/microphone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/microscope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mill-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/minimize.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mitten.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mobile-button.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mobile-retro.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mobile-screen-button.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mobile-screen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mobile.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill-1-wave.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill-1.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill-transfer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill-trend-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill-wave.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill-wheat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bill.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-bills.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-check-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/money-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/monument.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/moon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mortar-pestle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mosque.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mosquito-net.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mosquito.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/motorcycle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mound.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mountain-city.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mountain-sun.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mountain.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mug-hot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/mug-saucer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/music.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/n.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/naira-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/network-wired.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/neuter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/newspaper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/not-equal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/notdef.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/note-sticky.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/notes-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/o.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/object-group.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/object-ungroup.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/oil-can.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/oil-well.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/om.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/otter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/outdent.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/p.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pager.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paint-roller.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paintbrush.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/palette.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pallet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/panorama.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paper-plane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paperclip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/parachute-box.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paragraph.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/passport.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paste.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pause.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/paw.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/peace.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pen-clip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pen-fancy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pen-nib.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pen-ruler.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pen-to-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pencil.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-arrows.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-carry-box.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-group.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-pulling.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-robbery.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/people-roof.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pepper-hot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/percent.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-arrow-down-to-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-arrow-up-from-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-biking.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-booth.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-breastfeeding.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-burst.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-cane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-chalkboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-circle-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-circle-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-circle-question.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-digging.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-dots-from-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-dress-burst.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-dress.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-drowning.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-falling-burst.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-falling.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-half-dress.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-harassing.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-hiking.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-military-pointing.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-military-rifle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-military-to-person.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-praying.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-pregnant.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-rays.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-rifle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-running.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-shelter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-skating.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-skiing-nordic.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-skiing.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-snowboarding.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-swimming.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-through-window.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-walking-arrow-loop-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-walking-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-walking-dashed-line-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-walking-luggage.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-walking-with-cane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person-walking.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/person.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/peseta-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/peso-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/phone-flip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/phone-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/phone-volume.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/phone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/photo-film.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/piggy-bank.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pills.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pizza-slice.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/place-of-worship.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-arrival.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-departure.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plant-wilt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plate-wheat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/play.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug-circle-bolt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug-circle-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug-circle-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plug.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plus-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/podcast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/poo-storm.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/poo.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/poop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/power-off.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/prescription-bottle-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/prescription-bottle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/prescription.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/print.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pump-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/pump-soap.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/puzzle-piece.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/q.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/qrcode.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/question.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/quote-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/quote-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/r.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/radiation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/radio.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rainbow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ranking-star.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/receipt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/record-vinyl.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rectangle-ad.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rectangle-list.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rectangle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/recycle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/registered.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/repeat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/reply-all.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/reply.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/republican.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/restroom.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/retweet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ribbon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/right-from-bracket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/right-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/right-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/right-to-bracket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ring.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-barrier.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-bridge.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road-spikes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/road.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/robot.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rocket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rotate-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rotate-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rotate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/route.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rss.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ruble-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rug.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ruler-combined.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ruler-horizontal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ruler-vertical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ruler.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rupee-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/rupiah-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/s.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sack-dollar.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sack-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sailboat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/satellite-dish.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/satellite.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/scale-balanced.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/scale-unbalanced-flip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/scale-unbalanced.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/school-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/school-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/school-circle-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/school-flag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/school-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/school.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/scissors.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/screwdriver-wrench.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/screwdriver.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/scroll-torah.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/scroll.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sd-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/section.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/seedling.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/server.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shapes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/share-from-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/share-nodes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/share.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sheet-plastic.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shekel-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shield-cat.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shield-dog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shield-halved.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shield-heart.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shield-virus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shield.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ship.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shirt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shoe-prints.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shop-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shop-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shower.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shrimp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shuffle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/shuttle-space.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sign-hanging.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/signal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/signature.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/signs-post.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sim-card.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sink.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sitemap.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/skull-crossbones.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/skull.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sleigh.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sliders.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/smog.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/smoking.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/snowflake.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/snowman.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/snowplow.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/soap.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/socks.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/solar-panel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sort-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sort-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sort.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spa.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spaghetti-monster-flying.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spell-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spider.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spinner.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/splotch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spoon.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spray-can-sparkles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/spray-can.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-arrow-up-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-caret-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-caret-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-caret-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-caret-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-envelope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-full.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-h.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-nfi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-parking.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-pen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-person-confined.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-phone-flip.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-phone.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-poll-horizontal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-poll-vertical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-root-variable.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-rss.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-share-nodes.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-up-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-virus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/staff-snake.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stairs.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stamp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stapler.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/star-and-crescent.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/star-half-stroke.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/star-half.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/star-of-david.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/star-of-life.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/star.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sterling-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stethoscope.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stop.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stopwatch-20.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stopwatch.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/store-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/store.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/street-view.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/strikethrough.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/stroopwafel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/subscript.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/suitcase-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/suitcase-rolling.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/suitcase.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sun-plant-wilt.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/sun.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/superscript.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/swatchbook.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/synagogue.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/syringe.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/t.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-cells-column-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-cells-large.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-cells-row-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-cells.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-columns.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-list.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table-tennis-paddle-ball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/table.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tablet-button.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tablet-screen-button.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tablet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tablets.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tachograph-digital.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tags.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tape.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tarp-droplet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tarp.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/taxi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/teeth-open.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/teeth.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-arrow-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-empty.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-full.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-half.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-high.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-low.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-quarter.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/temperature-three-quarters.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tenge-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tent-arrow-down-to-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tent-arrow-left-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tent-arrow-turn-left.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tent-arrows-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tent.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tents.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/terminal.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/text-height.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/text-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/text-width.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/thermometer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/thumbs-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/thumbs-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/thumbtack.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ticket-simple.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/ticket.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/timeline.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toggle-off.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toggle-on.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toilet-paper-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toilet-paper.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toilet-portable.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toilet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toilets-portable.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/toolbox.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tooth.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/torii-gate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tornado.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tower-broadcast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tower-cell.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tower-observation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tractor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trademark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/traffic-light.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trailer.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/train-subway.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/train-tram.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/train.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/transgender.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trash-arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trash-can-arrow-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trash-can.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tree-city.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tree.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/triangle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trophy.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trowel-bricks.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/trowel.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-arrow-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-droplet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-fast.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-field-un.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-field.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-front.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-medical.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-monster.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-moving.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-pickup.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-plane.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck-ramp-box.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/truck.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tty.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/turkish-lira-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/turn-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/turn-up.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/tv.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/u.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/umbrella-beach.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/umbrella.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/underline.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/universal-access.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/unlock-keyhole.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/unlock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/up-down-left-right.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/up-down.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/up-long.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/up-right-and-down-left-from-center.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/up-right-from-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/upload.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-astronaut.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-clock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-doctor.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-gear.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-graduate.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-group.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-injured.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-large-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-large.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-lock.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-minus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-ninja.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-nurse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-pen.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-plus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-secret.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-shield.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-tag.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-tie.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/user.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-between-lines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-gear.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-line.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-rays.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-rectangle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users-viewfinder.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/users.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/utensils.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/v.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/van-shuttle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vault.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vector-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/venus-double.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/venus-mars.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/venus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vest-patches.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vest.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vial-circle-check.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vial-virus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vial.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vials.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/video-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/video.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vihara.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/virus-covid-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/virus-covid.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/virus-slash.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/virus.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/viruses.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/voicemail.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/volcano.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/volleyball.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/volume-high.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/volume-low.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/volume-off.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/volume-xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/vr-cardboard.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/w.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/walkie-talkie.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wallet.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wand-magic-sparkles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wand-magic.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wand-sparkles.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/warehouse.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/water-ladder.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/water.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wave-square.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/weight-hanging.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/weight-scale.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wheat-awn-circle-exclamation.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wheat-awn.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wheelchair-move.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wheelchair.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/whiskey-glass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wifi.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wind.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/window-maximize.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/window-minimize.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/window-restore.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wine-bottle.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wine-glass-empty.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wine-glass.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/won-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/worm.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/wrench.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/x-ray.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/x.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/xmark.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/xmarks-lines.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/y.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/yen-sign.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/yin-yang.svg +1 -0
- package/dist/content/icons/font-awesome/svgs/solid/z.svg +1 -0
- package/dist/content/icons/font-awesome/webfonts/fa-brands-400.woff2 +0 -0
- package/dist/content/icons/font-awesome/webfonts/fa-regular-400.woff2 +0 -0
- package/dist/content/icons/font-awesome/webfonts/fa-solid-900.woff2 +0 -0
- package/dist/content/icons/font-awesome/webfonts/fa-v4compatibility.woff2 +0 -0
- package/dist/content/icons/new-cw-icons/NewCwIcons.json +204 -1
- package/dist/content/icons/new-cw-icons/css/new-cw-icons.css +1 -9
- package/dist/content/icons/new-cw-icons/fonts/NewCwIcons.woff +0 -0
- package/dist/index.cjs.js +686 -2563
- package/dist/index.css +1 -3
- package/dist/index.d.ts +26 -739
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +687 -2552
- package/dist/src/common/functions/collections.d.ts.map +1 -1
- package/dist/src/common/functions/colorManipulation.d.ts.map +1 -1
- package/dist/src/common/functions/dsl/UiEventDSL.d.ts +1 -1
- package/dist/src/common/functions/useSingleAndDoubleClicks.d.ts.map +1 -1
- package/dist/src/components/control/action/contextual-menu/CwContextualMenu.d.ts +29 -0
- package/dist/src/components/control/action/contextual-menu/CwContextualMenu.d.ts.map +1 -0
- package/dist/src/components/control/action/search/CwSearch.d.ts +0 -22
- package/dist/src/components/control/action/search/CwSearch.d.ts.map +1 -1
- package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.d.ts +19 -0
- package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.d.ts.map +1 -0
- package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts +0 -4
- package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts.map +1 -1
- package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts +24 -0
- package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts +19 -0
- package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts +17 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownNavigation.d.ts +21 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownNavigation.d.ts.map +1 -0
- package/dist/src/components/control/choice/multi-filter/CwMultiFilter.d.ts +0 -6
- package/dist/src/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +1 -1
- package/dist/src/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts +0 -1
- package/dist/src/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts.map +1 -1
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts +17 -0
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts.map +1 -0
- package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts +13 -0
- package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts.map +1 -0
- package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts +14 -0
- package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts.map +1 -0
- package/dist/src/components/control/choice/option/CwOption.d.ts +1 -3
- package/dist/src/components/control/choice/option/CwOption.d.ts.map +1 -1
- package/dist/src/components/control/choice/select/CwSelect.d.ts +1 -7
- package/dist/src/components/control/choice/select/CwSelect.d.ts.map +1 -1
- package/dist/src/components/control/choice/toggle/CwToggle.d.ts +1 -1
- package/dist/src/components/control/choice/toggle/CwToggle.d.ts.map +1 -1
- package/dist/src/components/control/input/color/CwInputColor.d.ts +0 -30
- package/dist/src/components/control/input/color/CwInputColor.d.ts.map +1 -1
- package/dist/src/components/control/input/date-picker/CwInputDatePicker.d.ts.map +1 -1
- package/dist/src/components/control/input/date-text/CwInputDateText.d.ts +4 -4
- package/dist/src/components/control/input/date-text/CwInputDateText.d.ts.map +1 -1
- package/dist/src/components/control/input/file/CwFileUploadMultiple.d.ts +0 -16
- package/dist/src/components/control/input/file/CwFileUploadMultiple.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/CwDatePicker.d.ts +1 -10
- package/dist/src/components/control/input/new-dates/CwDatePicker.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/CwDateRangePicker.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/CwDateTimePicker.d.ts +1 -8
- package/dist/src/components/control/input/new-dates/CwDateTimePicker.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/CwDateTimePickerCompact.d.ts +1 -8
- package/dist/src/components/control/input/new-dates/CwDateTimePickerCompact.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/CwTimePicker.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/dateRangePresets.d.ts.map +1 -1
- package/dist/src/components/control/input/text/CwInputText.d.ts +0 -7
- package/dist/src/components/control/input/text/CwInputText.d.ts.map +1 -1
- package/dist/src/components/control/input/text-area/CwTextArea.d.ts +0 -6
- package/dist/src/components/control/input/text-area/CwTextArea.d.ts.map +1 -1
- package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts +1 -37
- package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/CwSchedulerComp.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts +3 -0
- package/dist/src/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/components/time_line/TimeLine.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/filtering/filterEvents.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/filtering/filterResources.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/filtering/hasSameProperties.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/pixels/getHeightLineScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/pixels/heightScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/pixels/heightSchedulerPinned.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/state_handle/handleResourceChange.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/state_handle/onDragOver.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/strings/compareStrings.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler/logic/ui/updateResourceVisibility.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts +1 -4
- package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts +1 -6
- package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +1 -1
- 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/SchedulerRow.d.ts +1 -3
- 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/timeline/DivisionLine.d.ts +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/helpers.d.ts +9 -0
- package/dist/src/components/custom/scheduler-new/presentation/helpers.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts +24 -0
- package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts +86 -0
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/EventRender.d.ts +10 -0
- package/dist/src/components/custom/scheduler-temporal/components/EventRender.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.d.ts +20 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.d.ts +14 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts +13 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts +14 -0
- package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts +23 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts +8 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts +10 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts +10 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts +8 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +15 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts +13 -0
- package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +17 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.d.ts +6 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.d.ts +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts +6 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts +43 -0
- package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/Resource.d.ts +14 -0
- package/dist/src/components/custom/scheduler-temporal/state/Resource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/State.d.ts +25 -0
- package/dist/src/components/custom/scheduler-temporal/state/State.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEvent.d.ts +18 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEvent.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.d.ts +6 -0
- package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.d.ts.map +1 -0
- package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts +2 -1
- package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -1
- package/dist/src/components/custom/super-scheduler/SuperScheduler.d.ts +0 -3
- package/dist/src/components/custom/super-scheduler/SuperScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts.map +1 -1
- package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +0 -13
- package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +1 -1
- package/dist/src/components/display/data/table/CwTable.d.ts +1 -4
- package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
- package/dist/src/components/display/data/table-serverside/CwTableServerSide.d.ts +1 -4
- package/dist/src/components/display/data/table-serverside/CwTableServerSide.d.ts.map +1 -1
- package/dist/src/components/display/text/message/CwMessage.d.ts +2 -3
- package/dist/src/components/display/text/message/CwMessage.d.ts.map +1 -1
- package/dist/src/components/display/text/note/CwNote.d.ts +1 -1
- package/dist/src/components/display/text/note/CwNote.d.ts.map +1 -1
- 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/CwTag.d.ts +15 -0
- package/dist/src/components/display/text/tag/CwTag.d.ts.map +1 -0
- package/dist/src/components/display/text/tooltip/CwTooltip.d.ts +8 -0
- package/dist/src/components/display/text/tooltip/CwTooltip.d.ts.map +1 -0
- package/dist/src/components/layout/dialog/CwDialog.d.ts +0 -2
- package/dist/src/components/layout/dialog/CwDialog.d.ts.map +1 -1
- package/dist/src/components/layout/dialog/CwDialogManager.d.ts.map +1 -1
- package/dist/src/components/layout/list/sortable/CwSortableList.d.ts +1 -2
- package/dist/src/components/layout/list/sortable/CwSortableList.d.ts.map +1 -1
- package/dist/src/components/layout/modal/legacy/cw_modal.d.ts.map +1 -1
- package/dist/src/components/layout/modal/legacy/cw_modal_confirm.d.ts +16 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_confirm.d.ts.map +1 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_iframe.d.ts +21 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_iframe.d.ts.map +1 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_report.d.ts +1 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_report.d.ts.map +1 -1
- package/dist/src/components/layout/table/grouped/CwTableGrouped.d.ts +0 -2
- package/dist/src/components/layout/table/grouped/CwTableGrouped.d.ts.map +1 -1
- package/dist/src/components/layout/tabs/CwTabs.d.ts +0 -2
- package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -14
- package/dist/src/index.d.ts.map +1 -1
- package/dist/test/jest.setup.d.ts +2 -0
- package/dist/test/jest.setup.d.ts.map +1 -0
- package/package.json +2 -2
- package/dist/src/common/hooks/useDropdownPortal.d.ts +0 -86
- package/dist/src/common/hooks/useDropdownPortal.d.ts.map +0 -1
- package/dist/src/common/interfaces/CwFormTypes.d.ts +0 -5
- package/dist/src/common/interfaces/CwFormTypes.d.ts.map +0 -1
- package/dist/src/components/control/choice/checkbox/CwCheck.d.ts +0 -15
- package/dist/src/components/control/choice/checkbox/CwCheck.d.ts.map +0 -1
- package/dist/src/components/control/choice/checkbox/CwCheckboxGroup.d.ts +0 -35
- package/dist/src/components/control/choice/checkbox/CwCheckboxGroup.d.ts.map +0 -1
- package/dist/src/components/control/choice/dropdown/CwPopoverButton.d.ts +0 -35
- package/dist/src/components/control/choice/dropdown/CwPopoverButton.d.ts.map +0 -1
- package/dist/src/components/control/choice/select/CwDropdown.d.ts +0 -56
- package/dist/src/components/control/choice/select/CwDropdown.d.ts.map +0 -1
- package/dist/src/components/control/choice/tag-selector/CwTagSelector.d.ts +0 -68
- package/dist/src/components/control/choice/tag-selector/CwTagSelector.d.ts.map +0 -1
- package/dist/src/components/control/input/date-picker/datePickerUtils.d.ts +0 -38
- package/dist/src/components/control/input/date-picker/datePickerUtils.d.ts.map +0 -1
- package/dist/src/components/control/input/new-dates/CwDatePickerTemporal.d.ts +0 -48
- package/dist/src/components/control/input/new-dates/CwDatePickerTemporal.d.ts.map +0 -1
- package/dist/src/components/control/input/new-dates/datePickerHelpers.d.ts +0 -20
- package/dist/src/components/control/input/new-dates/datePickerHelpers.d.ts.map +0 -1
- package/dist/src/components/control/input/new-dates/usePickerPopup.d.ts +0 -23
- package/dist/src/components/control/input/new-dates/usePickerPopup.d.ts.map +0 -1
- package/dist/src/components/control/input/new-dates/utils/timezoneHelpers.d.ts +0 -38
- package/dist/src/components/control/input/new-dates/utils/timezoneHelpers.d.ts.map +0 -1
- package/dist/src/components/custom/find-crewmember/CwFindCrewmemberComp.d.ts +0 -44
- package/dist/src/components/custom/find-crewmember/CwFindCrewmemberComp.d.ts.map +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/IndicatorRow.d.ts +0 -18
- package/dist/src/components/custom/scheduler-new/presentation/components/row/IndicatorRow.d.ts.map +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/filterVisibleEvents.d.ts +0 -3
- package/dist/src/components/custom/scheduler-new/presentation/logic/filterVisibleEvents.d.ts.map +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/logic/isToday.d.ts +0 -2
- package/dist/src/components/custom/scheduler-new/presentation/logic/isToday.d.ts.map +0 -1
- package/dist/src/components/display/data/table_sortable/CwSortableTable.d.ts +0 -74
- package/dist/src/components/display/data/table_sortable/CwSortableTable.d.ts.map +0 -1
- package/dist/src/components/display/data/table_sortable/useSortableTable.d.ts +0 -42
- package/dist/src/components/display/data/table_sortable/useSortableTable.d.ts.map +0 -1
- package/dist/src/components/display/data/tooltip_manager/CwTooltip.d.ts +0 -25
- package/dist/src/components/display/data/tooltip_manager/CwTooltip.d.ts.map +0 -1
- package/dist/src/components/display/data/tooltip_manager/CwTooltipManager.d.ts +0 -19
- package/dist/src/components/display/data/tooltip_manager/CwTooltipManager.d.ts.map +0 -1
- package/dist/src/components/layout/master-detail/CwMasterDetail.d.ts +0 -41
- package/dist/src/components/layout/master-detail/CwMasterDetail.d.ts.map +0 -1
- package/dist/src/dev/index.d.ts +0 -5
- package/dist/src/dev/index.d.ts.map +0 -1
- package/dist/src/dev/palette.d.ts +0 -3
- package/dist/src/dev/palette.d.ts.map +0 -1
- package/dist/src/dev/previews.d.ts +0 -3
- package/dist/src/dev/previews.d.ts.map +0 -1
- package/dist/src/dev/useInitial.d.ts +0 -3
- package/dist/src/dev/useInitial.d.ts.map +0 -1
- package/dist/src/main.d.ts +0 -2
- package/dist/src/main.d.ts.map +0 -1
- package/dist/src/playground/PlaygroundApp.d.ts +0 -4
- package/dist/src/playground/PlaygroundApp.d.ts.map +0 -1
- package/dist/src/playground/pages/ColorContrastPage.d.ts +0 -3
- package/dist/src/playground/pages/ColorContrastPage.d.ts.map +0 -1
- package/dist/src/playground/pages/DatePickerLocalePage.d.ts +0 -3
- package/dist/src/playground/pages/DatePickerLocalePage.d.ts.map +0 -1
- package/dist/src/playground/pages/DatePickerTemporalPage.d.ts +0 -3
- package/dist/src/playground/pages/DatePickerTemporalPage.d.ts.map +0 -1
- package/dist/src/playground/pages/SelectorsPage.d.ts +0 -3
- package/dist/src/playground/pages/SelectorsPage.d.ts.map +0 -1
- package/dist/src/playground/pages/TablePaginationPage.d.ts +0 -3
- package/dist/src/playground/pages/TablePaginationPage.d.ts.map +0 -1
- package/dist/test/components/control/input/date-picker/datePickerUtils.test.d.ts +0 -2
- package/dist/test/components/control/input/date-picker/datePickerUtils.test.d.ts.map +0 -1
- package/dist/test/components/control/input/new-dates/datePickerHelpers.test.d.ts +0 -2
- package/dist/test/components/control/input/new-dates/datePickerHelpers.test.d.ts.map +0 -1
- package/dist/test/components/control/input/new-dates/timezoneHelpers.test.d.ts +0 -2
- package/dist/test/components/control/input/new-dates/timezoneHelpers.test.d.ts.map +0 -1
- package/dist/test/components/custom/new-scheduler/presentation/header/getStartEnd.test.d.ts +0 -2
- package/dist/test/components/custom/new-scheduler/presentation/header/getStartEnd.test.d.ts.map +0 -1
- package/dist/test/components/custom/new-scheduler/presentation/logic/dateFromPercentage.test.d.ts +0 -2
- package/dist/test/components/custom/new-scheduler/presentation/logic/dateFromPercentage.test.d.ts.map +0 -1
- package/dist/test/components/custom/new-scheduler/presentation/logic/eventIsVisible.test.d.ts +0 -2
- package/dist/test/components/custom/new-scheduler/presentation/logic/eventIsVisible.test.d.ts.map +0 -1
- package/dist/test/components/custom/new-scheduler/presentation/logic/filterVisibleEvents.test.d.ts +0 -2
- package/dist/test/components/custom/new-scheduler/presentation/logic/filterVisibleEvents.test.d.ts.map +0 -1
- package/dist/test/components/custom/new-scheduler/presentation/logic/isToday.test.d.ts +0 -2
- package/dist/test/components/custom/new-scheduler/presentation/logic/isToday.test.d.ts.map +0 -1
- package/dist/test/components/custom/scheduler/getFormattedTimeForHeader.test.d.ts +0 -2
- package/dist/test/components/custom/scheduler/getFormattedTimeForHeader.test.d.ts.map +0 -1
- package/dist/test/vitest.setup.d.ts +0 -2
- package/dist/test/vitest.setup.d.ts.map +0 -1
package/dist/index.es.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import React__default, { cloneElement, useEffect, useState, useCallback, useRef, useMemo,
|
|
3
|
+
import React__default, { cloneElement, useEffect, useState, useCallback, useRef, useMemo, forwardRef, useLayoutEffect, useImperativeHandle, createElement, memo, Fragment as Fragment$1, Component } from 'react';
|
|
4
4
|
import { createRoot } from 'react-dom/client';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
|
+
import { Tooltip } from 'antd';
|
|
6
7
|
import Draggable from 'react-draggable';
|
|
8
|
+
import moment from 'moment';
|
|
7
9
|
import { format } from 'date-fns';
|
|
8
10
|
import { enGB } from 'date-fns/locale';
|
|
9
11
|
import { DayPicker } from 'react-day-picker';
|
|
@@ -60,6 +62,10 @@ function CwLabel(props) {
|
|
|
60
62
|
return (jsx("label", { className: "cw-label", style: { textAlign: justify, width: labelWidth, height: labelHeight, margin: margin ?? "1px 0 0 0" }, ...labelProps, children: labelProps.children ?? text }));
|
|
61
63
|
}
|
|
62
64
|
|
|
65
|
+
function CwTooltip(CwelltTooltipProps) {
|
|
66
|
+
return (jsxs("div", { className: "cwelltTooltip", children: [jsx("div", { className: "cwelltTooltipTitle", style: CwelltTooltipProps.tooltipTitleStyle, children: jsx("span", { children: CwelltTooltipProps.tooltipTitle }) }), CwelltTooltipProps.children] }));
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
function colorToHSL(color) {
|
|
64
70
|
const hexColor = colorToHEX(color);
|
|
65
71
|
const hex = hexColor.replace('#', '');
|
|
@@ -105,60 +111,36 @@ function getHSLColor(color, alpha = 1) {
|
|
|
105
111
|
const hsl = colorToHSL(color);
|
|
106
112
|
return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${alpha})`;
|
|
107
113
|
}
|
|
108
|
-
function hslToLinearRgb(h, s, l) {
|
|
109
|
-
const sNorm = s / 100;
|
|
110
|
-
const lNorm = l / 100;
|
|
111
|
-
const a = sNorm * Math.min(lNorm, 1 - lNorm);
|
|
112
|
-
const f = (n) => {
|
|
113
|
-
const k = (n + h / 30) % 12;
|
|
114
|
-
return lNorm - a * Math.max(-1, Math.min(k - 3, Math.min(9 - k, 1)));
|
|
115
|
-
};
|
|
116
|
-
return [f(0), f(8), f(4)];
|
|
117
|
-
}
|
|
118
|
-
function srgbLuminance(r, g, b) {
|
|
119
|
-
const lin = (c) => c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
|
120
|
-
return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
|
|
121
|
-
}
|
|
122
|
-
function wcagContrastRatio(lum1, lum2) {
|
|
123
|
-
const lighter = Math.max(lum1, lum2);
|
|
124
|
-
const darker = Math.min(lum1, lum2);
|
|
125
|
-
return (lighter + 0.05) / (darker + 0.05);
|
|
126
|
-
}
|
|
127
114
|
function getContrastColor(color) {
|
|
128
|
-
if (color === null)
|
|
115
|
+
if (color === null) {
|
|
129
116
|
return '#000000';
|
|
117
|
+
}
|
|
130
118
|
const hsl = colorToHSL(color);
|
|
119
|
+
// Saturated greenyellow and cyan tones need lower luminance threshold (40-35)
|
|
120
|
+
// Saturated mediumblue and blueviolet tones need higher luminance threshold (55-60)
|
|
121
|
+
// Saturated orangered tones need lower luminance threshold (45)
|
|
122
|
+
const isYellowGreen = (hsl.h >= 45 && hsl.h <= 180);
|
|
123
|
+
const isBlueViolet = (hsl.h >= 210 && hsl.h <= 300);
|
|
124
|
+
const isRedOrange = (hsl.h >= 0 && hsl.h <= 30) || (hsl.h >= 330 && hsl.h <= 360);
|
|
125
|
+
let threshold = 50;
|
|
126
|
+
if (isYellowGreen) {
|
|
127
|
+
threshold = 40;
|
|
128
|
+
if (hsl.s >= 70) {
|
|
129
|
+
threshold = 35;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (isBlueViolet) {
|
|
133
|
+
threshold = 55;
|
|
134
|
+
if (hsl.s >= 70) {
|
|
135
|
+
threshold = 60;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (isRedOrange && hsl.s >= 80) {
|
|
139
|
+
threshold = 45;
|
|
140
|
+
}
|
|
141
|
+
const contrastL = hsl.l >= threshold ? 20 : 90;
|
|
131
142
|
const contrastS = Math.min(hsl.s, 90);
|
|
132
|
-
|
|
133
|
-
const bgLum = srgbLuminance(...bgRgb);
|
|
134
|
-
const darkL = 15;
|
|
135
|
-
const lightL = 90;
|
|
136
|
-
const darkLum = srgbLuminance(...hslToLinearRgb(hsl.h, contrastS, darkL));
|
|
137
|
-
const lightLum = srgbLuminance(...hslToLinearRgb(hsl.h, contrastS, lightL));
|
|
138
|
-
const darkRatio = wcagContrastRatio(bgLum, darkLum);
|
|
139
|
-
const lightRatio = wcagContrastRatio(bgLum, lightLum);
|
|
140
|
-
// On saturated backgrounds, dark-tinted text blends visually with the
|
|
141
|
-
// vibrant color even when math says it has better contrast.
|
|
142
|
-
// Prefer light text unless dark has an overwhelmingly higher ratio.
|
|
143
|
-
const saturatedBias = hsl.s >= 30 && bgLum < 0.4;
|
|
144
|
-
// Mid-grays (#777–#999): dark text "sinks" into the background while
|
|
145
|
-
// white text pops, even though dark wins on WCAG ratio.
|
|
146
|
-
const midGrayBias = hsl.s < 15 && bgLum >= 0.18 && bgLum <= 0.35;
|
|
147
|
-
const goLight = saturatedBias
|
|
148
|
-
? darkRatio < lightRatio * 3
|
|
149
|
-
: midGrayBias || lightRatio >= darkRatio;
|
|
150
|
-
let targetL = goLight ? lightL : darkL;
|
|
151
|
-
let bestRatio = goLight ? lightRatio : darkRatio;
|
|
152
|
-
if (bestRatio < 4.5) {
|
|
153
|
-
const step = goLight ? 5 : -5;
|
|
154
|
-
const limit = goLight ? 95 : 0;
|
|
155
|
-
while (bestRatio < 4.5 && targetL !== limit) {
|
|
156
|
-
targetL = goLight ? Math.min(targetL + step, limit) : Math.max(targetL + step, limit);
|
|
157
|
-
const candidateLum = srgbLuminance(...hslToLinearRgb(hsl.h, contrastS, targetL));
|
|
158
|
-
bestRatio = wcagContrastRatio(bgLum, candidateLum);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return `hsl(${hsl.h}, ${contrastS}%, ${targetL}%)`;
|
|
143
|
+
return `hsl(${hsl.h}, ${contrastS}%, ${contrastL}%)`;
|
|
162
144
|
}
|
|
163
145
|
|
|
164
146
|
const SVG_ICONS = {
|
|
@@ -235,7 +217,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
|
|
|
235
217
|
className,
|
|
236
218
|
closable ? 'cw-chip-closable' : '',
|
|
237
219
|
].filter(Boolean).join(' ');
|
|
238
|
-
return (jsxs("span", { className: chipClassNames, "data-color-scheme": colorScheme, "data-variant": variant, style: chipStyle, children: [icon && jsx(CwIcon, { iconId: icon }),
|
|
220
|
+
return (jsxs("span", { className: chipClassNames, "data-color-scheme": colorScheme, "data-variant": variant, style: chipStyle, children: [icon && jsx(CwIcon, { iconId: icon }), jsx("span", { children: label }), closable && (jsx("button", { className: "cw-chip-close-button", onClick: handleClose, "aria-label": "Remove", type: "button", children: jsx("span", { className: "cwi-icons cwi-close" }) }))] }));
|
|
239
221
|
};
|
|
240
222
|
|
|
241
223
|
const CW_DEFAULT_MESSAGE_DURATION = 2000;
|
|
@@ -253,7 +235,7 @@ const CwMessage = props => {
|
|
|
253
235
|
}, props.duration ?? CW_DEFAULT_MESSAGE_DURATION);
|
|
254
236
|
return () => clearTimeout(timer);
|
|
255
237
|
}, [props]);
|
|
256
|
-
return (jsxs("div", { className: "cw-message", "data-message-type": Object.keys(CwMessageType).find(key => CwMessageType[key] === props.messageType),
|
|
238
|
+
return (jsxs("div", { className: "cw-message", "data-message-type": Object.keys(CwMessageType).find(key => CwMessageType[key] === props.messageType), children: [props.messageType && jsx(CwIcon, { iconId: props.messageType.toString(), size: "large" }), props.message] }));
|
|
257
239
|
};
|
|
258
240
|
/**
|
|
259
241
|
* Hook for displaying inline messages within specific components.
|
|
@@ -316,11 +298,11 @@ class CwMessageManager {
|
|
|
316
298
|
document.body.prepend(this.messageWrapper);
|
|
317
299
|
this.root = createRoot(this.messageWrapper); // Create a root at the messageWrapper
|
|
318
300
|
}
|
|
319
|
-
showMessage(message, type, duration
|
|
301
|
+
showMessage(message, type, duration) {
|
|
320
302
|
const msg = document.createElement("div");
|
|
321
303
|
this.messageWrapper?.prepend(msg);
|
|
322
304
|
const msgRoot = createRoot(msg); // Create a root for the new message
|
|
323
|
-
msgRoot.render(jsx(CwMessage, { message: message, messageType: type, duration: duration,
|
|
305
|
+
msgRoot.render(jsx(CwMessage, { message: message, messageType: type, duration: duration, onClose: () => this.closeMessage(msgRoot) }));
|
|
324
306
|
}
|
|
325
307
|
closeMessage(msgRoot) {
|
|
326
308
|
msgRoot.unmount(); // Unmount the message root
|
|
@@ -342,8 +324,8 @@ class CwMessageManager {
|
|
|
342
324
|
*
|
|
343
325
|
* @note For inline messages within components, use `CwNote` or `useCwMessage` hook instead
|
|
344
326
|
*/
|
|
345
|
-
function CwDisplayMessage(message, type, duration
|
|
346
|
-
CwMessageManager.getInstance().showMessage(message, type, duration
|
|
327
|
+
function CwDisplayMessage(message, type, duration) {
|
|
328
|
+
CwMessageManager.getInstance().showMessage(message, type, duration);
|
|
347
329
|
}
|
|
348
330
|
|
|
349
331
|
/**
|
|
@@ -629,36 +611,40 @@ function CwLoading({ isLoading = false, text = '', size = 'regular', iconPositio
|
|
|
629
611
|
* <CwLoading size="small" />
|
|
630
612
|
*/
|
|
631
613
|
function CwLoadingSmall(CwelltLoadingAppointements) {
|
|
632
|
-
return (jsx("div", { children: CwelltLoadingAppointements.isLoading === true ? (
|
|
614
|
+
return (jsx("div", { children: CwelltLoadingAppointements.isLoading === true ? (
|
|
615
|
+
// * Show loading appointment
|
|
616
|
+
jsx("div", { className: "cw-loading-container", children: jsx("div", { className: "cw-loading" }) })) : (
|
|
617
|
+
// Show empty div
|
|
618
|
+
jsx("div", {})) }));
|
|
633
619
|
}
|
|
634
620
|
|
|
635
|
-
var styles$
|
|
621
|
+
var styles$k = {"cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si","cw-generic-tooltip":"cw-generic-tooltip-module_cw-generic-tooltip__Ij76M"};
|
|
636
622
|
|
|
637
623
|
// Constants moved outside to prevent recreation
|
|
638
|
-
const margin
|
|
624
|
+
const margin = 16;
|
|
639
625
|
const defaultPosition = "right";
|
|
640
|
-
const positionOrder
|
|
626
|
+
const positionOrder = ['right', 'bottom', 'left', 'top'];
|
|
641
627
|
// Memoized utility functions to prevent recreation
|
|
642
|
-
const calculatePositionForSide
|
|
628
|
+
const calculatePositionForSide = (position, triggerRect, tooltipRect) => {
|
|
643
629
|
switch (position) {
|
|
644
630
|
case 'left':
|
|
645
631
|
return {
|
|
646
632
|
top: triggerRect.top + (triggerRect.height - tooltipRect.height) / 2,
|
|
647
|
-
left: triggerRect.left - tooltipRect.width - margin
|
|
633
|
+
left: triggerRect.left - tooltipRect.width - margin
|
|
648
634
|
};
|
|
649
635
|
case 'right':
|
|
650
636
|
return {
|
|
651
637
|
top: triggerRect.top + (triggerRect.height - tooltipRect.height) / 2,
|
|
652
|
-
left: triggerRect.right + margin
|
|
638
|
+
left: triggerRect.right + margin
|
|
653
639
|
};
|
|
654
640
|
case 'top':
|
|
655
641
|
return {
|
|
656
|
-
top: triggerRect.top - tooltipRect.height - margin
|
|
642
|
+
top: triggerRect.top - tooltipRect.height - margin,
|
|
657
643
|
left: triggerRect.left + (triggerRect.width - tooltipRect.width) / 2
|
|
658
644
|
};
|
|
659
645
|
case 'bottom':
|
|
660
646
|
return {
|
|
661
|
-
top: triggerRect.bottom + margin
|
|
647
|
+
top: triggerRect.bottom + margin,
|
|
662
648
|
left: triggerRect.left + (triggerRect.width - tooltipRect.width) / 2
|
|
663
649
|
};
|
|
664
650
|
}
|
|
@@ -699,26 +685,26 @@ const useTooltipPosition = (isVisible, containerRef, preferredPosition, tooltipC
|
|
|
699
685
|
const triggerRect = containerRef.current.getBoundingClientRect();
|
|
700
686
|
const tooltipRect = tooltipElement.getBoundingClientRect();
|
|
701
687
|
// Try preferred position first
|
|
702
|
-
const position = calculatePositionForSide
|
|
688
|
+
const position = calculatePositionForSide(preferredPosition, triggerRect, tooltipRect);
|
|
703
689
|
const windowWidth = window.innerWidth;
|
|
704
690
|
const windowHeight = window.innerHeight;
|
|
705
691
|
// Quick bounds check
|
|
706
|
-
if (position.left >= margin
|
|
707
|
-
position.top >= margin
|
|
708
|
-
position.left + tooltipRect.width <= windowWidth - margin
|
|
709
|
-
position.top + tooltipRect.height <= windowHeight - margin
|
|
692
|
+
if (position.left >= margin &&
|
|
693
|
+
position.top >= margin &&
|
|
694
|
+
position.left + tooltipRect.width <= windowWidth - margin &&
|
|
695
|
+
position.top + tooltipRect.height <= windowHeight - margin) {
|
|
710
696
|
setTooltipState({ position, actualPosition: preferredPosition });
|
|
711
697
|
return;
|
|
712
698
|
}
|
|
713
699
|
// Try other positions if preferred doesn't fit
|
|
714
|
-
for (const pos of positionOrder
|
|
700
|
+
for (const pos of positionOrder) {
|
|
715
701
|
if (pos === preferredPosition)
|
|
716
702
|
continue;
|
|
717
|
-
const newPosition = calculatePositionForSide
|
|
718
|
-
if (newPosition.left >= margin
|
|
719
|
-
newPosition.top >= margin
|
|
720
|
-
newPosition.left + tooltipRect.width <= windowWidth - margin
|
|
721
|
-
newPosition.top + tooltipRect.height <= windowHeight - margin
|
|
703
|
+
const newPosition = calculatePositionForSide(pos, triggerRect, tooltipRect);
|
|
704
|
+
if (newPosition.left >= margin &&
|
|
705
|
+
newPosition.top >= margin &&
|
|
706
|
+
newPosition.left + tooltipRect.width <= windowWidth - margin &&
|
|
707
|
+
newPosition.top + tooltipRect.height <= windowHeight - margin) {
|
|
722
708
|
setTooltipState({ position: newPosition, actualPosition: pos });
|
|
723
709
|
return;
|
|
724
710
|
}
|
|
@@ -736,31 +722,19 @@ const useTooltipPosition = (isVisible, containerRef, preferredPosition, tooltipC
|
|
|
736
722
|
}, [updatePosition]);
|
|
737
723
|
return tooltipState;
|
|
738
724
|
};
|
|
739
|
-
|
|
740
|
-
* Standalone tooltip component. Each instance manages its own portal,
|
|
741
|
-
* requiring no external dependencies or global setup.
|
|
742
|
-
*
|
|
743
|
-
* Suitable for low-density use cases with few tooltip instances.
|
|
744
|
-
* For high-density scenarios (e.g. schedulers, tables, lists),
|
|
745
|
-
* prefer CwTooltipNew which shares a single DOM portal for better performance.
|
|
746
|
-
*
|
|
747
|
-
* @remarks Not formally deprecated, but CwTooltipNew is now the recommended
|
|
748
|
-
* approach for new implementations. Cannot be deprecated yet due to potential use on projects such as Operon and Improve.
|
|
749
|
-
*
|
|
750
|
-
* @see CwTooltipNew
|
|
751
|
-
*/
|
|
725
|
+
// Main component with optimizations
|
|
752
726
|
const CwGenericTooltip = ({ children, content = null, position = defaultPosition, dissapearsWhenHover = false, hide = false, overlayStyle = {}, showDelay = 0, displayInline = false, }) => {
|
|
753
727
|
const [isVisible, setIsVisible] = useState(false);
|
|
754
728
|
const containerRef = useRef(null);
|
|
755
729
|
const { setTooltipTimeout, clearTooltipTimeout } = useTooltipDelay(() => {
|
|
756
730
|
setIsVisible(true);
|
|
757
731
|
}, showDelay);
|
|
758
|
-
const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$
|
|
732
|
+
const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$k["cw-generic-tooltip-content"]);
|
|
759
733
|
// Memoize tooltip content creation
|
|
760
734
|
const tooltipContent = useMemo(() => {
|
|
761
735
|
if (hide || !isVisible || !content)
|
|
762
736
|
return null;
|
|
763
|
-
return createPortal(jsx("div", { className: styles$
|
|
737
|
+
return createPortal(jsx("div", { className: styles$k["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, "data-inline": displayInline, style: {
|
|
764
738
|
position: 'fixed',
|
|
765
739
|
top: `${tooltipPosition.top}px`,
|
|
766
740
|
left: `${tooltipPosition.left}px`,
|
|
@@ -775,310 +749,9 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
|
|
|
775
749
|
clearTooltipTimeout();
|
|
776
750
|
setIsVisible(false);
|
|
777
751
|
}, [clearTooltipTimeout]);
|
|
778
|
-
return (jsxs("div", { ref: containerRef, className: styles$
|
|
779
|
-
};
|
|
780
|
-
|
|
781
|
-
var styles$p = {"cw-tooltip-content":"cw-tooltip-module__cw-tooltip-content__RZczd","cw-tooltip":"cw-tooltip-module__cw-tooltip__1KYig"};
|
|
782
|
-
|
|
783
|
-
// Constants
|
|
784
|
-
const margin = 16;
|
|
785
|
-
const positionOrder = ['right', 'bottom', 'left', 'top'];
|
|
786
|
-
// Singleton state
|
|
787
|
-
let currentState = {
|
|
788
|
-
isVisible: false,
|
|
789
|
-
content: null,
|
|
790
|
-
triggerRect: null,
|
|
791
|
-
position: "right",
|
|
792
|
-
dissapearsWhenHover: false
|
|
793
|
-
};
|
|
794
|
-
const stateUpdateCallbacks = new Set();
|
|
795
|
-
let hideTimeout;
|
|
796
|
-
// Public API
|
|
797
|
-
const showTooltip = (content, triggerElement, position = "right", dissapearsWhenHover = false) => {
|
|
798
|
-
if (hideTimeout !== undefined) {
|
|
799
|
-
window.clearTimeout(hideTimeout);
|
|
800
|
-
hideTimeout = undefined;
|
|
801
|
-
}
|
|
802
|
-
currentState = {
|
|
803
|
-
isVisible: true,
|
|
804
|
-
content,
|
|
805
|
-
triggerRect: triggerElement.getBoundingClientRect(),
|
|
806
|
-
position,
|
|
807
|
-
dissapearsWhenHover
|
|
808
|
-
};
|
|
809
|
-
stateUpdateCallbacks.forEach((cb) => cb());
|
|
810
|
-
};
|
|
811
|
-
const hideTooltip = (delay = 100) => {
|
|
812
|
-
if (hideTimeout !== undefined) {
|
|
813
|
-
window.clearTimeout(hideTimeout);
|
|
814
|
-
}
|
|
815
|
-
hideTimeout = window.setTimeout(() => {
|
|
816
|
-
hideTimeout = undefined;
|
|
817
|
-
currentState = {
|
|
818
|
-
...currentState,
|
|
819
|
-
isVisible: false
|
|
820
|
-
};
|
|
821
|
-
stateUpdateCallbacks.forEach((cb) => cb());
|
|
822
|
-
}, delay);
|
|
823
|
-
};
|
|
824
|
-
// Position calculation
|
|
825
|
-
const calculatePositionForSide = (position, triggerRect, tooltipRect) => {
|
|
826
|
-
switch (position) {
|
|
827
|
-
case 'left':
|
|
828
|
-
return {
|
|
829
|
-
top: triggerRect.top + (triggerRect.height - tooltipRect.height) / 2,
|
|
830
|
-
left: triggerRect.left - tooltipRect.width - margin
|
|
831
|
-
};
|
|
832
|
-
case 'right':
|
|
833
|
-
return {
|
|
834
|
-
top: triggerRect.top + (triggerRect.height - tooltipRect.height) / 2,
|
|
835
|
-
left: triggerRect.right + margin
|
|
836
|
-
};
|
|
837
|
-
case 'top':
|
|
838
|
-
return {
|
|
839
|
-
top: triggerRect.top - tooltipRect.height - margin,
|
|
840
|
-
left: triggerRect.left + (triggerRect.width - tooltipRect.width) / 2
|
|
841
|
-
};
|
|
842
|
-
case 'bottom':
|
|
843
|
-
return {
|
|
844
|
-
top: triggerRect.bottom + margin,
|
|
845
|
-
left: triggerRect.left + (triggerRect.width - tooltipRect.width) / 2
|
|
846
|
-
};
|
|
847
|
-
}
|
|
848
|
-
};
|
|
849
|
-
const MANAGER_CONTAINER_CLASS = "cw-tooltip-manager";
|
|
850
|
-
const ensureTooltipManager = () => {
|
|
851
|
-
if (document.querySelector(`.${MANAGER_CONTAINER_CLASS}`))
|
|
852
|
-
return;
|
|
853
|
-
const container = document.createElement("div");
|
|
854
|
-
container.className = MANAGER_CONTAINER_CLASS;
|
|
855
|
-
document.body.appendChild(container);
|
|
856
|
-
const root = createRoot(container);
|
|
857
|
-
root.render(jsx(CwTooltipManager, {}));
|
|
858
|
-
};
|
|
859
|
-
// Main component
|
|
860
|
-
/**
|
|
861
|
-
* Global tooltip renderer. Manages a single portal instance in the DOM,
|
|
862
|
-
* shared across all CwTooltipNew instances for optimal performance.
|
|
863
|
-
*
|
|
864
|
-
* Mount once at the app root, or let CwTooltipNew handle it automatically
|
|
865
|
-
* via ensureTooltipManager().
|
|
866
|
-
*
|
|
867
|
-
* @see CwTooltipNew
|
|
868
|
-
* @see showTooltip
|
|
869
|
-
* @see hideTooltip
|
|
870
|
-
*/
|
|
871
|
-
const CwTooltipManager = () => {
|
|
872
|
-
const [state, setState] = useState(currentState);
|
|
873
|
-
const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });
|
|
874
|
-
const [actualPosition, setActualPosition] = useState("right");
|
|
875
|
-
const [isPositioned, setIsPositioned] = useState(false);
|
|
876
|
-
const tooltipRef = useRef(null);
|
|
877
|
-
const [isMeasuring, setIsMeasuring] = useState(false);
|
|
878
|
-
// Register update callback
|
|
879
|
-
useEffect(() => {
|
|
880
|
-
const update = () => {
|
|
881
|
-
setState({ ...currentState });
|
|
882
|
-
if (!currentState.isVisible)
|
|
883
|
-
setIsMeasuring(false);
|
|
884
|
-
};
|
|
885
|
-
stateUpdateCallbacks.add(update);
|
|
886
|
-
return () => {
|
|
887
|
-
stateUpdateCallbacks.delete(update);
|
|
888
|
-
};
|
|
889
|
-
}, []);
|
|
890
|
-
// Function to calculate position
|
|
891
|
-
const calculatePosition = useCallback(() => {
|
|
892
|
-
if (!state.isVisible || !state.triggerRect || !tooltipRef.current) {
|
|
893
|
-
return;
|
|
894
|
-
}
|
|
895
|
-
const tooltipRect = tooltipRef.current.getBoundingClientRect();
|
|
896
|
-
const windowWidth = window.innerWidth;
|
|
897
|
-
const windowHeight = window.innerHeight;
|
|
898
|
-
// Try preferred position first
|
|
899
|
-
let position = calculatePositionForSide(state.position, state.triggerRect, tooltipRect);
|
|
900
|
-
// Check if it fits
|
|
901
|
-
if (position.left >= margin &&
|
|
902
|
-
position.top >= margin &&
|
|
903
|
-
position.left + tooltipRect.width <= windowWidth - margin &&
|
|
904
|
-
position.top + tooltipRect.height <= windowHeight - margin) {
|
|
905
|
-
setTooltipPosition(position);
|
|
906
|
-
setActualPosition(state.position);
|
|
907
|
-
setIsPositioned(true);
|
|
908
|
-
setIsMeasuring(false);
|
|
909
|
-
return;
|
|
910
|
-
}
|
|
911
|
-
// Try other positions
|
|
912
|
-
for (const pos of positionOrder) {
|
|
913
|
-
if (pos === state.position)
|
|
914
|
-
continue;
|
|
915
|
-
const newPosition = calculatePositionForSide(pos, state.triggerRect, tooltipRect);
|
|
916
|
-
if (newPosition.left >= margin &&
|
|
917
|
-
newPosition.top >= margin &&
|
|
918
|
-
newPosition.left + tooltipRect.width <= windowWidth - margin &&
|
|
919
|
-
newPosition.top + tooltipRect.height <= windowHeight - margin) {
|
|
920
|
-
setTooltipPosition(newPosition);
|
|
921
|
-
setActualPosition(pos);
|
|
922
|
-
setIsPositioned(true);
|
|
923
|
-
setIsMeasuring(false);
|
|
924
|
-
return;
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
// Fallback if none fit - adjust to fit within viewport
|
|
928
|
-
const triggerRect = state.triggerRect;
|
|
929
|
-
// Calculate available space around the trigger element
|
|
930
|
-
const spaceTop = triggerRect.top;
|
|
931
|
-
const spaceBottom = windowHeight - triggerRect.bottom;
|
|
932
|
-
const spaceLeft = triggerRect.left;
|
|
933
|
-
const spaceRight = windowWidth - triggerRect.right;
|
|
934
|
-
// Find the side with the most space
|
|
935
|
-
let bestPosition;
|
|
936
|
-
const maxSpace = Math.max(spaceTop, spaceBottom, spaceLeft, spaceRight);
|
|
937
|
-
if (maxSpace === spaceRight) {
|
|
938
|
-
bestPosition = 'right';
|
|
939
|
-
}
|
|
940
|
-
else if (maxSpace === spaceBottom) {
|
|
941
|
-
bestPosition = 'bottom';
|
|
942
|
-
}
|
|
943
|
-
else if (maxSpace === spaceLeft) {
|
|
944
|
-
bestPosition = 'left';
|
|
945
|
-
}
|
|
946
|
-
else {
|
|
947
|
-
bestPosition = 'top';
|
|
948
|
-
}
|
|
949
|
-
// Find the coordinates for the best position
|
|
950
|
-
let bestPositionCoords = calculatePositionForSide(bestPosition, triggerRect, tooltipRect);
|
|
951
|
-
// Adjust to fit within the viewport (but without covering the trigger element)
|
|
952
|
-
if (bestPositionCoords.left < margin) {
|
|
953
|
-
bestPositionCoords.left = margin;
|
|
954
|
-
}
|
|
955
|
-
else if (bestPositionCoords.left + tooltipRect.width > windowWidth - margin) {
|
|
956
|
-
bestPositionCoords.left = windowWidth - tooltipRect.width - margin;
|
|
957
|
-
}
|
|
958
|
-
if (bestPositionCoords.top < margin) {
|
|
959
|
-
bestPositionCoords.top = margin;
|
|
960
|
-
}
|
|
961
|
-
else if (bestPositionCoords.top + tooltipRect.height > windowHeight - margin) {
|
|
962
|
-
bestPositionCoords.top = windowHeight - tooltipRect.height - margin;
|
|
963
|
-
}
|
|
964
|
-
setTooltipPosition(bestPositionCoords);
|
|
965
|
-
setActualPosition(bestPosition);
|
|
966
|
-
setIsPositioned(true);
|
|
967
|
-
setIsMeasuring(false);
|
|
968
|
-
}, [state]);
|
|
969
|
-
// Reset isPositioned when state changes (new tooltip)
|
|
970
|
-
// useLayouteffect is used to ensure it runs before the browser paints, preventing flashes of incorrectly positioned tooltips
|
|
971
|
-
useLayoutEffect(() => {
|
|
972
|
-
if (state.isVisible) {
|
|
973
|
-
setIsPositioned(false);
|
|
974
|
-
// Calculate position in next frame
|
|
975
|
-
calculatePosition();
|
|
976
|
-
}
|
|
977
|
-
}, [state.isVisible, state.triggerRect, state.content, calculatePosition]);
|
|
978
|
-
// ResizeObserver to reposition when content size changes (e.g., data loads)
|
|
979
|
-
useLayoutEffect(() => {
|
|
980
|
-
if (!state.isVisible || !tooltipRef.current) {
|
|
981
|
-
return;
|
|
982
|
-
}
|
|
983
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
984
|
-
setIsMeasuring(true);
|
|
985
|
-
setIsPositioned(false);
|
|
986
|
-
calculatePosition();
|
|
987
|
-
});
|
|
988
|
-
resizeObserver.observe(tooltipRef.current);
|
|
989
|
-
return () => {
|
|
990
|
-
resizeObserver.disconnect();
|
|
991
|
-
};
|
|
992
|
-
}, [state.isVisible, calculatePosition]);
|
|
993
|
-
if (!state.isVisible || !state.content) {
|
|
994
|
-
return null;
|
|
995
|
-
}
|
|
996
|
-
return createPortal(jsx("div", { ref: tooltipRef, className: styles$p["cw-tooltip-content"], "data-position": actualPosition, "data-visible": state.isVisible, style: {
|
|
997
|
-
top: `${tooltipPosition.top}px`,
|
|
998
|
-
left: `${tooltipPosition.left}px`,
|
|
999
|
-
opacity: (isPositioned && !isMeasuring) ? 1 : 0,
|
|
1000
|
-
}, onMouseEnter: () => state.dissapearsWhenHover && hideTooltip(), children: state.content }), document.body);
|
|
1001
|
-
};
|
|
1002
|
-
|
|
1003
|
-
/**
|
|
1004
|
-
* Tooltip component backed by the global CwTooltipManager singleton.
|
|
1005
|
-
* More performant than CwGenericTooltip for high-density scenarios (e.g. schedulers)
|
|
1006
|
-
* as it shares a single DOM portal across all instances.
|
|
1007
|
-
*
|
|
1008
|
-
* Self-initializes the Manager if not already mounted via ensureTooltipManager().
|
|
1009
|
-
* Drop-in replacement for CwGenericTooltip with the same API.
|
|
1010
|
-
*
|
|
1011
|
-
* @see CwTooltipManager
|
|
1012
|
-
* @see CwGenericTooltip
|
|
1013
|
-
*/
|
|
1014
|
-
const CwTooltipNew = ({ children, content = null, position = "right", dissapearsWhenHover = false, hide = false, showDelay = 0, overlayStyle = {}, displayInline = false, }) => {
|
|
1015
|
-
const containerRef = useRef(null);
|
|
1016
|
-
const timeoutRef = useRef();
|
|
1017
|
-
const handleMouseEnter = useCallback(() => {
|
|
1018
|
-
if (hide || !content || !containerRef.current)
|
|
1019
|
-
return;
|
|
1020
|
-
if (timeoutRef.current) {
|
|
1021
|
-
window.clearTimeout(timeoutRef.current);
|
|
1022
|
-
}
|
|
1023
|
-
if (showDelay > 0) {
|
|
1024
|
-
timeoutRef.current = window.setTimeout(() => {
|
|
1025
|
-
if (containerRef.current) {
|
|
1026
|
-
showTooltip(content, containerRef.current, position, dissapearsWhenHover);
|
|
1027
|
-
}
|
|
1028
|
-
}, showDelay);
|
|
1029
|
-
}
|
|
1030
|
-
else {
|
|
1031
|
-
showTooltip(content, containerRef.current, position, dissapearsWhenHover);
|
|
1032
|
-
}
|
|
1033
|
-
}, [content, position, showDelay, hide, dissapearsWhenHover]);
|
|
1034
|
-
const handleMouseLeave = useCallback(() => {
|
|
1035
|
-
if (timeoutRef.current) {
|
|
1036
|
-
window.clearTimeout(timeoutRef.current);
|
|
1037
|
-
}
|
|
1038
|
-
hideTooltip();
|
|
1039
|
-
}, []);
|
|
1040
|
-
// Cleanup on unmount to prevent memory leaks
|
|
1041
|
-
useEffect(() => {
|
|
1042
|
-
return () => {
|
|
1043
|
-
if (timeoutRef.current) {
|
|
1044
|
-
window.clearTimeout(timeoutRef.current);
|
|
1045
|
-
}
|
|
1046
|
-
};
|
|
1047
|
-
}, []);
|
|
1048
|
-
// Hide tooltip when mousedown / drag events
|
|
1049
|
-
useEffect(() => {
|
|
1050
|
-
const handleDocumentMouseDown = () => {
|
|
1051
|
-
if (timeoutRef.current) {
|
|
1052
|
-
window.clearTimeout(timeoutRef.current);
|
|
1053
|
-
}
|
|
1054
|
-
hideTooltip();
|
|
1055
|
-
};
|
|
1056
|
-
document.addEventListener("mousedown", handleDocumentMouseDown);
|
|
1057
|
-
return () => {
|
|
1058
|
-
document.removeEventListener("mousedown", handleDocumentMouseDown);
|
|
1059
|
-
};
|
|
1060
|
-
}, []);
|
|
1061
|
-
useEffect(() => {
|
|
1062
|
-
ensureTooltipManager();
|
|
1063
|
-
}, []);
|
|
1064
|
-
return (jsx("div", { ref: containerRef, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, "data-inline": displayInline, className: styles$p["cw-tooltip"], children: children }));
|
|
752
|
+
return (jsxs("div", { ref: containerRef, className: styles$k["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, "data-inline": displayInline, children: [tooltipContent, children] }));
|
|
1065
753
|
};
|
|
1066
754
|
|
|
1067
|
-
function CwButton({ text, variant = 'solid', color = 'primary', className = '', icon = "", title, tooltipPosition = "bottom", children, ...buttonProps }) {
|
|
1068
|
-
// Build CSS classes based on variant and props
|
|
1069
|
-
let buttonClass = `cw-button-${variant}`;
|
|
1070
|
-
// Add icon class only for icon variant without children
|
|
1071
|
-
if (variant === 'icon' && icon && !children) {
|
|
1072
|
-
buttonClass += ` cwi-${icon}`;
|
|
1073
|
-
}
|
|
1074
|
-
if (className) {
|
|
1075
|
-
buttonClass += ` ${className}`;
|
|
1076
|
-
}
|
|
1077
|
-
const tooltipContent = title || (variant === 'icon' && text ? text : undefined);
|
|
1078
|
-
const buttonElement = (jsx("button", { type: "button", className: buttonClass, ...buttonProps, "data-color": color, "aria-label": tooltipContent, children: variant === 'icon' ? null : (children ?? (jsxs(Fragment, { children: [icon && jsx(CwIcon, { iconId: icon }), text && jsx("strong", { children: text })] }))) }));
|
|
1079
|
-
return tooltipContent ? (jsx(CwTooltipNew, { content: tooltipContent, position: tooltipPosition, displayInline: true, children: buttonElement })) : (buttonElement);
|
|
1080
|
-
}
|
|
1081
|
-
|
|
1082
755
|
// Reference for draggable modal
|
|
1083
756
|
/**
|
|
1084
757
|
* **Note:** For new development, we recommend using {@link CwDialog} instead. CwModal remains supported for existing code.
|
|
@@ -1092,6 +765,10 @@ function CwModal(custModalProps) {
|
|
|
1092
765
|
const isHide = custModalProps.hideModalActions !== null && custModalProps.hideModalActions !== undefined
|
|
1093
766
|
? custModalProps.hideModalActions
|
|
1094
767
|
: false;
|
|
768
|
+
// [ Show custom button === true ? show : default buttons ]
|
|
769
|
+
const isShowcustButton = custModalProps.ShowcustButton !== null && custModalProps.ShowcustButton !== undefined
|
|
770
|
+
? custModalProps.ShowcustButton
|
|
771
|
+
: false;
|
|
1095
772
|
const cwelltOnMouseOverModal = () => {
|
|
1096
773
|
setModalDisabled(false);
|
|
1097
774
|
};
|
|
@@ -1111,10 +788,15 @@ function CwModal(custModalProps) {
|
|
|
1111
788
|
width: custModalProps.widthModal
|
|
1112
789
|
}
|
|
1113
790
|
};
|
|
1114
|
-
return (jsx("div", { children: custModalProps.modalState && (jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsx(Draggable, { disabled: isModalDisabled, axis: "both", nodeRef: draggableRef, children: jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef, style: widthModalDef !== "40em" ? modalStyle.widthCustomStyle : modalStyle.widthDefStyle, children: [jsxs("div", { className: "cwelltModalHeader", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx("div", { className: "cwelltModalTitle", children: custModalProps.titleModal }), jsx("button", { className: "cwelltBtnCloseModal", onClick: custModalProps.onCloseModal, children: jsx("span", { className: "cwelltCloseIcon" }) })] }), jsx("div", { className: "cwelltModalBody", children: jsx("div", { className: "cwelltContainerModalBody", style: { position: "relative" }, children: custModalProps.children }) }), isHide === false ? (
|
|
791
|
+
return (jsx("div", { children: custModalProps.modalState && (jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsx(Draggable, { disabled: isModalDisabled, axis: "both", nodeRef: draggableRef, children: jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef, style: widthModalDef !== "40em" ? modalStyle.widthCustomStyle : modalStyle.widthDefStyle, children: [jsxs("div", { className: "cwelltModalHeader", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx("div", { className: "cwelltModalTitle", children: custModalProps.titleModal }), jsx("button", { className: "cwelltBtnCloseModal", onClick: custModalProps.onCloseModal, children: jsx("span", { className: "cwelltCloseIcon" }) })] }), jsx("div", { className: "cwelltModalBody", children: jsx("div", { className: "cwelltContainerModalBody", style: { position: "relative" }, children: custModalProps.children }) }), isHide === false ? (
|
|
792
|
+
// [ false : show modal ]
|
|
793
|
+
jsxs("div", { className: "cwelltModalFooter", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx(Tooltip, { placement: "bottom", title: "Save", color: "#368ee0", children: jsx("div", { className: "cwellt_flex cwellt_justify_center ", style: { width: "2em" }, children: jsx("button", { className: "cw-button-icon cwi-save", onClick: custModalProps.onSaveModal, form: custModalProps.formSaveModal, hidden: custModalProps.HideBtnModal, type: custModalProps.HtmlSubmitModal }) }) }), isShowcustButton === true ? (jsx(Tooltip, { placement: "bottom", title: custModalProps.custButtonTitle, color: custModalProps.custColorButtonTooltip, children: jsx("div", { className: "cwellt_flex cwellt_justify_center", style: { width: "2em" }, children: jsx("button", { className: "cw-button-icon " +
|
|
794
|
+
custModalProps.custButtonClassName, onClick: custModalProps.custButtonClick }) }) })) : (jsx("div", {}))] })) : (
|
|
795
|
+
// true [ do not show the modal ]
|
|
796
|
+
jsx("div", { style: { display: "none" } }))] }) })] })) }));
|
|
1115
797
|
}
|
|
1116
798
|
|
|
1117
|
-
var styles$
|
|
799
|
+
var styles$j = {"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"};
|
|
1118
800
|
|
|
1119
801
|
function CwConfirmationPopup(props) {
|
|
1120
802
|
const { isOpen, onConfirm, onCancel, message = "Are you sure you want to proceed?", confirmText = "Confirm", cancelText = "Cancel", placement = 'bottom', children } = props;
|
|
@@ -1178,15 +860,30 @@ function CwConfirmationPopup(props) {
|
|
|
1178
860
|
onCancel();
|
|
1179
861
|
}
|
|
1180
862
|
};
|
|
1181
|
-
return (jsxs(Fragment, { children: [renderChildren(), isOpen && (jsx("div", { className: styles$
|
|
863
|
+
return (jsxs(Fragment, { children: [renderChildren(), isOpen && (jsx("div", { className: styles$j.overlayPositioned, onClick: handleOverlayClick, children: jsxs("div", { ref: popupRef, className: styles$j.popup, style: {
|
|
1182
864
|
position: 'absolute',
|
|
1183
865
|
top: `${position.top}px`,
|
|
1184
866
|
left: `${position.left}px`,
|
|
1185
867
|
transform: 'none'
|
|
1186
|
-
}, children: [jsx("p", { className: styles$
|
|
868
|
+
}, children: [jsx("p", { className: styles$j.message, children: message }), jsxs("div", { className: styles$j.buttons, children: [jsx("button", { className: `${styles$j.button} ${styles$j.confirmButton}`, onClick: onConfirm, children: confirmText }), jsx("button", { className: `${styles$j.button} ${styles$j.cancelButton}`, onClick: onCancel, children: cancelText })] })] }) }))] }));
|
|
1187
869
|
}
|
|
1188
870
|
|
|
1189
|
-
|
|
871
|
+
function CwButton({ text, variant = 'solid', color = 'primary', className = '', icon = "", title, tooltipPosition = "bottom", children, ...buttonProps }) {
|
|
872
|
+
// Build CSS classes based on variant and props
|
|
873
|
+
let buttonClass = `cw-button-${variant}`;
|
|
874
|
+
// Add icon class only for icon variant without children
|
|
875
|
+
if (variant === 'icon' && icon && !children) {
|
|
876
|
+
buttonClass += ` cwi-${icon}`;
|
|
877
|
+
}
|
|
878
|
+
if (className) {
|
|
879
|
+
buttonClass += ` ${className}`;
|
|
880
|
+
}
|
|
881
|
+
const tooltipContent = title || (variant === 'icon' && text ? text : undefined);
|
|
882
|
+
const buttonElement = (jsx("button", { type: "button", className: buttonClass, ...buttonProps, "data-color": color, "aria-label": tooltipContent, children: variant === 'icon' ? null : (children ?? (jsxs(Fragment, { children: [icon && jsx(CwIcon, { iconId: icon }), text && jsx("strong", { children: text })] }))) }));
|
|
883
|
+
return tooltipContent ? (jsx(CwGenericTooltip, { content: tooltipContent, position: tooltipPosition, displayInline: true, children: buttonElement })) : (buttonElement);
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
var styles$i = {"cw-dialog-main":"cw-dialog-module_cw-dialog-main__cHxHt","cw-dialog-button-close":"cw-dialog-module_cw-dialog-button-close__9GRd8"};
|
|
1190
887
|
|
|
1191
888
|
// Helper function to parse size values
|
|
1192
889
|
const parseSize = (size) => {
|
|
@@ -1225,7 +922,7 @@ const convertFromPx = (px, unit) => {
|
|
|
1225
922
|
}
|
|
1226
923
|
};
|
|
1227
924
|
const CwDialog = props => {
|
|
1228
|
-
const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, autoReposition = false,
|
|
925
|
+
const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, autoReposition = false, ...domProps } = props;
|
|
1229
926
|
const dialogRef = useRef(null);
|
|
1230
927
|
const [isPressingScrim, setIsPressingScrim] = useState(false);
|
|
1231
928
|
const pressTimerRef = useRef(0);
|
|
@@ -1262,13 +959,9 @@ const CwDialog = props => {
|
|
|
1262
959
|
heightUnit: parsedHeight.unit,
|
|
1263
960
|
autoHeight: isAutoHeight
|
|
1264
961
|
};
|
|
1265
|
-
const maxWidth = window.innerWidth * 0.9;
|
|
1266
|
-
const maxHeight = window.innerHeight * 0.9;
|
|
1267
|
-
const clampedWidth = Math.min(initialWidthPx, maxWidth);
|
|
1268
|
-
const clampedHeight = Math.min(initialEstimatedHeight, maxHeight);
|
|
1269
962
|
const initialPosition = {
|
|
1270
|
-
x:
|
|
1271
|
-
y:
|
|
963
|
+
x: window.document.body.clientWidth / 2 - initialWidthPx / 2,
|
|
964
|
+
y: window.document.body.clientHeight / 2 - initialEstimatedHeight / 2
|
|
1272
965
|
};
|
|
1273
966
|
return { initialDialogSize, initialPosition };
|
|
1274
967
|
}, [width, height, dialogSize]); // Only recalculate when these props change
|
|
@@ -1277,7 +970,6 @@ const CwDialog = props => {
|
|
|
1277
970
|
const [position, setPosition] = useState(initialSetup.initialPosition);
|
|
1278
971
|
const [size, setSize] = useState(initialSetup.initialDialogSize);
|
|
1279
972
|
const [dragStart, setDragStart] = useState({ x: 0, y: 0 });
|
|
1280
|
-
const userDraggedRef = useRef(false);
|
|
1281
973
|
// scrim is true by default
|
|
1282
974
|
const hasScrim = scrim !== false;
|
|
1283
975
|
// Adjust position after the dialog is rendered when using autoHeight
|
|
@@ -1317,35 +1009,6 @@ const CwDialog = props => {
|
|
|
1317
1009
|
resizeObserver?.disconnect();
|
|
1318
1010
|
};
|
|
1319
1011
|
}, [size.autoHeight, open, autoReposition]);
|
|
1320
|
-
// Keep dialog visible when viewport is resized; re-center only if user hasn't dragged
|
|
1321
|
-
const originalWidthPx = initialSetup.initialDialogSize.width;
|
|
1322
|
-
useEffect(() => {
|
|
1323
|
-
if (!open)
|
|
1324
|
-
return;
|
|
1325
|
-
userDraggedRef.current = false;
|
|
1326
|
-
const handleWindowResize = () => {
|
|
1327
|
-
const vw = window.innerWidth;
|
|
1328
|
-
const vh = window.innerHeight;
|
|
1329
|
-
const w = Math.min(originalWidthPx, vw * 0.9);
|
|
1330
|
-
setSize(prev => w !== prev.width ? { ...prev, width: w } : prev);
|
|
1331
|
-
if (!userDraggedRef.current) {
|
|
1332
|
-
const dh = dialogRef.current?.offsetHeight ?? 300;
|
|
1333
|
-
setPosition({
|
|
1334
|
-
x: Math.max(0, (vw - w) / 2),
|
|
1335
|
-
y: Math.max(0, (vh - dh) / 2),
|
|
1336
|
-
});
|
|
1337
|
-
}
|
|
1338
|
-
else {
|
|
1339
|
-
// Clamp so dialog stays on screen
|
|
1340
|
-
setPosition(prev => ({
|
|
1341
|
-
x: Math.max(0, Math.min(prev.x, vw - w - 8)),
|
|
1342
|
-
y: Math.max(0, Math.min(prev.y, vh - (dialogRef.current?.offsetHeight ?? 300) - 8)),
|
|
1343
|
-
}));
|
|
1344
|
-
}
|
|
1345
|
-
};
|
|
1346
|
-
window.addEventListener("resize", handleWindowResize);
|
|
1347
|
-
return () => window.removeEventListener("resize", handleWindowResize);
|
|
1348
|
-
}, [open]);
|
|
1349
1012
|
useEffect(() => {
|
|
1350
1013
|
const handleMouseMove = (e) => {
|
|
1351
1014
|
if (isDragging) {
|
|
@@ -1427,7 +1090,6 @@ const CwDialog = props => {
|
|
|
1427
1090
|
}, [isDragging, resizeDirection, dragStart, position, size]);
|
|
1428
1091
|
const handleMouseDown = useCallback((e) => {
|
|
1429
1092
|
setIsDragging(true);
|
|
1430
|
-
userDraggedRef.current = true;
|
|
1431
1093
|
setDragStart({ x: e.clientX - position.x, y: e.clientY - position.y });
|
|
1432
1094
|
}, [position]);
|
|
1433
1095
|
const handleResizeMouseDown = useCallback((direction) => (e) => {
|
|
@@ -1459,15 +1121,17 @@ const CwDialog = props => {
|
|
|
1459
1121
|
}
|
|
1460
1122
|
}
|
|
1461
1123
|
}, [open]);
|
|
1462
|
-
const header = useMemo(() => (jsxs("header", { onMouseDown: handleMouseDown, children: [jsx("span", { children: headline }), customHeader || (jsx("button", { className: styles$
|
|
1124
|
+
const header = useMemo(() => (jsxs("header", { onMouseDown: handleMouseDown, children: [jsx("span", { children: headline }), customHeader || (jsx("button", { className: styles$i["cw-dialog-button-close"], onClick: onClose }))] })), [handleMouseDown, headline, customHeader, onClose]);
|
|
1463
1125
|
const content = useMemo(() => (jsx("section", { children: children })), [children]);
|
|
1464
|
-
const footer = useMemo(() => (jsx("footer", { children: customFooter || (jsx(CwButton, { variant: "icon", icon: "save", title: "Save", onClick: onSave, tooltipPosition: "top"
|
|
1126
|
+
const footer = useMemo(() => (jsx("footer", { children: customFooter || (jsx(CwButton, { variant: "icon", icon: "save", title: "Save", onClick: onSave, tooltipPosition: "top" })) })), [customFooter, onSave]);
|
|
1465
1127
|
const resizeHandles = useMemo(() => size.autoHeight
|
|
1466
1128
|
? [
|
|
1129
|
+
// Only horizontal handles if autoHeight is true
|
|
1467
1130
|
jsx("div", { "data-handle-e": true, onMouseDown: handleResizeMouseDown("e") }, "handle-e"),
|
|
1468
1131
|
jsx("div", { "data-handle-w": true, onMouseDown: handleResizeMouseDown("w") }, "handle-w")
|
|
1469
1132
|
]
|
|
1470
1133
|
: [
|
|
1134
|
+
// All handles if autoHeight is false
|
|
1471
1135
|
jsx("div", { "data-handle-n": true, onMouseDown: handleResizeMouseDown("n") }, "handle-n"),
|
|
1472
1136
|
jsx("div", { "data-handle-s": true, onMouseDown: handleResizeMouseDown("s") }, "handle-s"),
|
|
1473
1137
|
jsx("div", { "data-handle-e": true, onMouseDown: handleResizeMouseDown("e") }, "handle-e"),
|
|
@@ -1486,7 +1150,7 @@ const CwDialog = props => {
|
|
|
1486
1150
|
: `${convertFromPx(size.height, size.heightUnit)}${size.heightUnit}`;
|
|
1487
1151
|
return { displayWidth, displayHeight };
|
|
1488
1152
|
}, [size.width, size.height, size.widthUnit, size.heightUnit, size.autoHeight]);
|
|
1489
|
-
const dialogContent = (jsx("div", { "data-has-scrim": hasScrim, className: styles$
|
|
1153
|
+
const dialogContent = (jsx("div", { "data-has-scrim": hasScrim, className: styles$i["cw-dialog-main"], onMouseDown: handleScrimMouseDown, onMouseUp: handleScrimMouseUpOrLeave, onMouseLeave: handleScrimMouseUpOrLeave, "data-pressing": isPressingScrim, children: jsxs("dialog", { ...domProps, ref: dialogRef, style: {
|
|
1490
1154
|
left: `${position.x}px`,
|
|
1491
1155
|
top: `${position.y}px`,
|
|
1492
1156
|
width: displayDimensions.displayWidth,
|
|
@@ -1517,6 +1181,7 @@ const CwModalReportFunctional = (props) => {
|
|
|
1517
1181
|
};
|
|
1518
1182
|
|
|
1519
1183
|
class CwReportModal extends React.Component {
|
|
1184
|
+
formRef = React.createRef();
|
|
1520
1185
|
constructor(props) {
|
|
1521
1186
|
super(props);
|
|
1522
1187
|
this.state = {
|
|
@@ -1533,6 +1198,7 @@ class CwReportModal extends React.Component {
|
|
|
1533
1198
|
}
|
|
1534
1199
|
render() {
|
|
1535
1200
|
return (jsx("div", { id: "modal-report-content", children: this.state.isModal === true ? (jsxs(CwDialog, { open: this.props.visible, width: this.props.width, height: this.props.height, headline: this.props.title, onClose: () => {
|
|
1201
|
+
this.formRef?.current?.resetFields();
|
|
1536
1202
|
this.props.SET_MODAL_REPORT_VISIBLE(false);
|
|
1537
1203
|
}, hideFooter: true, className: "modal-report-content", children: [this.props.name !== "Empty.pdf" && (jsx("div", { style: { width: "100%", height: "100%", overflowX: "auto", overflowY: "auto" }, children: jsx("embed", { src: "data:application/pdf;base64," + this.props.content, type: "application/pdf", style: { width: "100%", height: "100%", display: "block" } }) })), this.props.name === "Empty.pdf" && (jsx("div", { children: jsxs("h1", { style: { marginLeft: "2em" }, children: [" ", "Please add a(n) ", this.props.reportName, " report in ", this.props.moduleSettings, " Settings"] }) }))] })) : (jsxs("div", { children: [this.props.name !== "Empty.pdf" && (jsx("embed", { src: "data:application/pdf;base64," + this.props.content, type: "application/pdf", width: "100%", height: "800px" })), this.props.name === "Empty.pdf" && (jsxs("div", { children: ["Please add a(n) ", this.props.reportName, " report in ", this.props.moduleSettings, " Settings"] }))] })) }));
|
|
1538
1204
|
}
|
|
@@ -1689,7 +1355,7 @@ function CwAlign(props) {
|
|
|
1689
1355
|
}, children: props.children }));
|
|
1690
1356
|
}
|
|
1691
1357
|
|
|
1692
|
-
var styles$
|
|
1358
|
+
var styles$h = {"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"};
|
|
1693
1359
|
|
|
1694
1360
|
/**
|
|
1695
1361
|
* CwCard - A simple card component for displaying content in a contained format
|
|
@@ -1713,11 +1379,11 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1713
1379
|
// Construct class names using CSS modules
|
|
1714
1380
|
const cardClassNames = [
|
|
1715
1381
|
'cw-card',
|
|
1716
|
-
styles$
|
|
1382
|
+
styles$h.card,
|
|
1717
1383
|
className,
|
|
1718
|
-
clickable ? styles$
|
|
1719
|
-
disabled ? styles$
|
|
1720
|
-
isLoading ? styles$
|
|
1384
|
+
clickable ? styles$h.clickable : '',
|
|
1385
|
+
disabled ? styles$h.disabled : '',
|
|
1386
|
+
isLoading ? styles$h.loading : '',
|
|
1721
1387
|
].filter(Boolean).join(' ');
|
|
1722
1388
|
// Handle click event when card is clickable
|
|
1723
1389
|
const handleClick = () => {
|
|
@@ -1734,15 +1400,15 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1734
1400
|
// Determine if footer should be rendered
|
|
1735
1401
|
const hasFooter = hasChips || footer || (hasActions && direction === "row");
|
|
1736
1402
|
// Actions component to reuse
|
|
1737
|
-
const ActionsComponent = hasActions && !disabled ? (jsxs("div", { className: styles$
|
|
1403
|
+
const ActionsComponent = hasActions && !disabled ? (jsxs("div", { className: styles$h.actions, children: [extraActions ?? null, onEdit && jsx(CwButton, { variant: "icon", icon: "edit", onClick: onEdit }), onDelete && jsx(CwButton, { variant: "icon", icon: "delete", color: "danger", onClick: onDelete })] })) : null;
|
|
1738
1404
|
return (jsxs("div", { ...(id && { id }), className: cardClassNames, ...(style && { style }), ...(clickable && {
|
|
1739
1405
|
role: 'button',
|
|
1740
1406
|
tabIndex: 0,
|
|
1741
1407
|
onClick: handleClick,
|
|
1742
|
-
}), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$
|
|
1408
|
+
}), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$h.headerContent, "data-alignment": alignment, children: [title && jsx("h5", { children: title }), subtitle && jsx("strong", { children: subtitle })] })), direction === "column" && ActionsComponent] })), jsx("div", { className: styles$h.content, children: children }), hasFooter && (jsxs("footer", { children: [hasChips && (jsx("div", { className: styles$h.footerTags, children: chips.map((chip, index) => (jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$h.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsx("div", { className: styles$h.footerContent, children: footer }))] })), direction === "row" && ActionsComponent, isLoading && (jsx("div", { className: styles$h.loadingOverlay, children: jsx(CwLoading, { isLoading: isLoading, size: "small" }) }))] }));
|
|
1743
1409
|
};
|
|
1744
1410
|
|
|
1745
|
-
var styles$
|
|
1411
|
+
var styles$g = {"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"};
|
|
1746
1412
|
|
|
1747
1413
|
function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, emptyState, sortOptions = [], defaultSortKey, ...htmlProps }) {
|
|
1748
1414
|
const [currentPage, setCurrentPage] = useState(1);
|
|
@@ -1776,10 +1442,10 @@ function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', default
|
|
|
1776
1442
|
'--card-width': `${defaultCardWidth}px`,
|
|
1777
1443
|
'--card-gap': `${cardGap}px`
|
|
1778
1444
|
};
|
|
1779
|
-
return (jsxs("div", { ...htmlProps, children: [sortOptions.length > 0 && (jsxs("div", { className: styles$
|
|
1445
|
+
return (jsxs("div", { ...htmlProps, children: [sortOptions.length > 0 && (jsxs("div", { className: styles$g.sortControls, children: [jsx("label", { htmlFor: "cardlist-sort-select", children: "Sort by:" }), jsx("select", { id: "cardlist-sort-select", value: sortKey, onChange: (e) => handleSortChange(e.target.value), className: styles$g.sortSelect, children: sortOptions.map(option => (jsx("option", { value: option.key, children: option.label }, option.key))) }), jsx("button", { onClick: () => setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc'), className: `cw-button-icon ${sortDirection === 'asc' ? 'cwi-arrow-up' : 'cwi-arrow-down'}`, title: `Sort ${sortDirection === 'asc' ? 'descending' : 'ascending'}` })] })), isLoading ? (jsx("div", { className: styles$g.loading, children: jsx(CwLoading, { isLoading: isLoading }) })) : sortedItems.length === 0 ? (jsx("div", { className: styles$g.emptyState, children: emptyState || jsx("p", { children: "No items to display" }) })) : (jsxs(Fragment, { children: [jsx("div", { className: `${styles$g.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsx("div", { className: styles$g.cardWrapper, children: renderCard(item, index) }, index))) }), totalPages > 1 && (jsxs("div", { className: styles$g.pagination, children: [jsx("button", { disabled: currentPage === 1, onClick: () => setCurrentPage(p => Math.max(1, p - 1)), className: "cw-button-icon cwi-chevron-left" }), jsxs("span", { className: styles$g.pageInfo, children: [currentPage, " of ", totalPages] }), jsx("button", { disabled: currentPage === totalPages, onClick: () => setCurrentPage(p => Math.min(totalPages, p + 1)), className: "cw-button-icon cwi-chevron-right" })] }))] }))] }));
|
|
1780
1446
|
}
|
|
1781
1447
|
|
|
1782
|
-
var styles$
|
|
1448
|
+
var styles$f = {"cw-accordion":"cw-accordion-module_cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module_cw-accordion-body__xlI8b"};
|
|
1783
1449
|
|
|
1784
1450
|
/**
|
|
1785
1451
|
*
|
|
@@ -1796,7 +1462,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
|
|
|
1796
1462
|
setVisible_accordionBody(!isVisible_accordionBody);
|
|
1797
1463
|
};
|
|
1798
1464
|
// #endregion
|
|
1799
|
-
return (jsxs("div", { className: styles$
|
|
1465
|
+
return (jsxs("div", { className: styles$f["cw-accordion"], style: CwelltAccordionContainerProps.style, "data-open": isVisible_accordionBody, children: [jsxs("header", { onClick: () => showAccordionBody(), children: [jsx("div", { children: CwelltAccordionContainerProps.desc_text }), jsx("button", { className: "cw-button-icon" })] }), jsx("div", { className: styles$f["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
|
|
1800
1466
|
}
|
|
1801
1467
|
|
|
1802
1468
|
/**
|
|
@@ -1868,7 +1534,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
|
|
|
1868
1534
|
*
|
|
1869
1535
|
* @returns React component
|
|
1870
1536
|
*/
|
|
1871
|
-
function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10, 20, 50], expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id,
|
|
1537
|
+
function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10, 20, 50], expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id, textNoData = "No data available at the moment", rowKey = "key", loading = false, scrollHeight, stickyHeader = false, rowSelection }) {
|
|
1872
1538
|
const [currentPage, setCurrentPage] = useState(1);
|
|
1873
1539
|
const [expandedRowKey, setExpandedRowKey] = useState(null);
|
|
1874
1540
|
const [sortConfig, setSortConfig] = useState({
|
|
@@ -2000,6 +1666,15 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
2000
1666
|
window.addEventListener("mousemove", onMouseMove);
|
|
2001
1667
|
window.addEventListener("mouseup", onMouseUp);
|
|
2002
1668
|
};
|
|
1669
|
+
const scrollContainerStyle = useMemo(() => {
|
|
1670
|
+
if (stickyHeader || scrollHeight) {
|
|
1671
|
+
return {
|
|
1672
|
+
maxHeight: scrollHeight ?? 300,
|
|
1673
|
+
overflowY: "auto"
|
|
1674
|
+
};
|
|
1675
|
+
}
|
|
1676
|
+
return {}; // no height or scroll
|
|
1677
|
+
}, [stickyHeader, scrollHeight]);
|
|
2003
1678
|
const getColSpan = () => columns.length + (expandedRowRender ? 1 : 0);
|
|
2004
1679
|
const hasClassNameRow = (item) => {
|
|
2005
1680
|
return typeof item === "object" && item !== null && "classNameRow" in item;
|
|
@@ -2019,441 +1694,79 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
2019
1694
|
const dynamicClassName = typeof classNameRow === "function"
|
|
2020
1695
|
? classNameRow(item)
|
|
2021
1696
|
: classNameRow ?? "";
|
|
2022
|
-
return (jsxs(React__default.Fragment, { children: [jsxs("tr", { className: `${dynamicClassName} ${hasClassNameRow(item) ? item.classNameRow : ""} ${isSelected ? "cw-table-row-selected" : ""}`, onClick: (e) => rowSelection && handleRowClick(item, e),
|
|
1697
|
+
return (jsxs(React__default.Fragment, { children: [jsxs("tr", { className: `${dynamicClassName} ${hasClassNameRow(item) ? item.classNameRow : ""} ${isSelected ? "cw-table-row-selected" : ""}`, onClick: (e) => rowSelection && handleRowClick(item, e), style: {
|
|
2023
1698
|
cursor: rowSelection ? "pointer" : "default",
|
|
2024
1699
|
backgroundColor: isSelected ? "var(--cw-color-info-container)" : undefined,
|
|
2025
1700
|
transition: "background-color 0.2s ease",
|
|
2026
1701
|
}, children: [expandedRowRender && (jsx("td", { className: "cw-table-col-action cw-table-col-expand", children: jsx("button", { onClick: () => handleRowExpand(item), className: `cw-button-icon ${expandedRowKey === itemKey
|
|
2027
1702
|
? "cwi-chevron-down"
|
|
2028
|
-
: "cwi-chevron-right"}` }) })), columns.map(col => (jsx("td", { className: col.className ?? "", children: col.render ? col.render(item) : col.dataIndex ? String(item[col.dataIndex]
|
|
1703
|
+
: "cwi-chevron-right"}` }) })), columns.map(col => (jsx("td", { className: col.className ?? "", children: col.render ? col.render(item) : col.dataIndex ? String(item[col.dataIndex]) : "" }, `${itemKey}_${col.key}`)))] }), expandedRowRender && expandedRowKey === itemKey && (jsx("tr", { className: "cw-table-row-expanded", children: jsx("td", { colSpan: getColSpan(), children: expandedRowRender(item) }) }))] }, String(itemKey)));
|
|
2029
1704
|
});
|
|
2030
1705
|
};
|
|
2031
|
-
return (jsxs("div", { id: id,
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
? "sortable
|
|
2045
|
-
:
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
1706
|
+
return (jsxs("div", { id: id, className: `cw-table-container ${classNameContainer ?? ""}`, style: style, children: [jsx("div", { style: scrollContainerStyle, children: jsxs("table", { className: `cw-table ${className ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { style: stickyHeader
|
|
1707
|
+
? { position: "sticky", top: 0, background: "white", zIndex: 2 }
|
|
1708
|
+
: undefined, children: jsxs("tr", { children: [expandedRowRender && jsx("th", {}), columns.map(col => (jsxs("th", { onClick: () => col.sortable && col.dataIndex && handleSort(col.dataIndex), className: `${col.className ?? ""} ${sortConfig.key === col.dataIndex
|
|
1709
|
+
? sortConfig.direction
|
|
1710
|
+
: ""}`.trim(), style: {
|
|
1711
|
+
cursor: col.sortable ? "pointer" : "default",
|
|
1712
|
+
userSelect: "none",
|
|
1713
|
+
width: columnWidths[col.key] ?? col.width,
|
|
1714
|
+
...((col.width || columnWidths[col.key]) && {
|
|
1715
|
+
minWidth: 50,
|
|
1716
|
+
maxWidth: columnWidths[col.key] ?? col.width
|
|
1717
|
+
}),
|
|
1718
|
+
}, children: [jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsx("span", { children: col.title }), col.sortable && col.dataIndex && (jsx(CwIcon, { size: "large", iconId: sortConfig.key !== col.dataIndex
|
|
1719
|
+
? "sortable"
|
|
1720
|
+
: sortConfig.direction === "asc"
|
|
1721
|
+
? "sortable-asc"
|
|
1722
|
+
: "sortable-desc" }))] }), jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxs("footer", { className: "cw-table-pagination", children: [jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsx("input", { type: "text", inputMode: "numeric", value: currentPage, onChange: (e) => {
|
|
1723
|
+
const value = parseInt(e.target.value, 10);
|
|
1724
|
+
if (!isNaN(value))
|
|
1725
|
+
handlePageChange(value);
|
|
1726
|
+
}, onBlur: (e) => {
|
|
1727
|
+
const value = parseInt(e.target.value, 10);
|
|
1728
|
+
if (isNaN(value) || value < 1 || value > totalPages) {
|
|
1729
|
+
handlePageChange(1);
|
|
1730
|
+
}
|
|
1731
|
+
}, min: 1, max: totalPages }), jsxs("span", { children: ["of ", totalPages] }), jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, children: pageSizeOptions.map(size => (jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
|
|
2055
1732
|
}
|
|
2056
1733
|
|
|
2057
|
-
var styles$
|
|
1734
|
+
var styles$e = {"cw-tabs":"cw-tabs-module_cw-tabs__1pmji","badge":"cw-tabs-module_badge__AmVxW","cw-tabs-content":"cw-tabs-module_cw-tabs-content__HTp8d"};
|
|
2058
1735
|
|
|
1736
|
+
const TabIcon = ({ icon }) => {
|
|
1737
|
+
if (!icon)
|
|
1738
|
+
return null;
|
|
1739
|
+
// If icon is a string, treat it as a class name
|
|
1740
|
+
if (typeof icon === 'string') {
|
|
1741
|
+
return (jsx("span", { className: `cwi-icons ${icon}` }));
|
|
1742
|
+
}
|
|
1743
|
+
// If icon is a ReactNode, return it directly
|
|
1744
|
+
return icon;
|
|
1745
|
+
};
|
|
2059
1746
|
/**
|
|
2060
|
-
*
|
|
1747
|
+
* CwTabs component for displaying tabbed content.
|
|
1748
|
+
* @param CwTabsProps
|
|
1749
|
+
* @example
|
|
1750
|
+
The way to use the tab component:
|
|
1751
|
+
* const [activeTab, setActiveTab] = useState("1");
|
|
2061
1752
|
*
|
|
2062
|
-
*
|
|
2063
|
-
*
|
|
2064
|
-
*
|
|
2065
|
-
* - handleReorder receives the already-reordered array and just stores it
|
|
2066
|
-
* - Changes are only persisted when handleSave is called
|
|
2067
|
-
* - handleDiscard restores the original order
|
|
1753
|
+
* const handleTabChange = (tab) => {
|
|
1754
|
+
* setActiveTab(tab.key);
|
|
1755
|
+
* };
|
|
2068
1756
|
*
|
|
2069
|
-
*
|
|
1757
|
+
* const tabs = [
|
|
1758
|
+
* { key: "1", title: 'Tab 1', icon: 'iconClassname', content: <div>Content for tab 1</div> },
|
|
1759
|
+
* { key: "2", title: 'Tab 2', icon: 'iconClassname', content: <div>Content for tab 2</div> },
|
|
1760
|
+
* { key: "3", title: 'Tab 3', icon: 'iconClassname', content: <div>Content for tab 3</div> },
|
|
1761
|
+
* ];
|
|
2070
1762
|
*
|
|
2071
|
-
*
|
|
2072
|
-
*
|
|
2073
|
-
*
|
|
2074
|
-
*
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
const [originalItems, setOriginalItems] = useState(initialItems);
|
|
2079
|
-
const [hasChanges, setHasChanges] = useState(false);
|
|
2080
|
-
// Sync items only when initialItems changes from outside (e.g. after initial fetch).
|
|
2081
|
-
// We skip the sync when there are local unsaved changes to avoid
|
|
2082
|
-
// overwriting the user's reordering work.
|
|
2083
|
-
const prevInitialRef = useRef(initialItems);
|
|
2084
|
-
useEffect(() => {
|
|
2085
|
-
if (prevInitialRef.current === initialItems)
|
|
2086
|
-
return;
|
|
2087
|
-
prevInitialRef.current = initialItems;
|
|
2088
|
-
if (!hasChanges) {
|
|
2089
|
-
setItems(initialItems);
|
|
2090
|
-
setOriginalItems(initialItems);
|
|
2091
|
-
}
|
|
2092
|
-
}, [initialItems, hasChanges]);
|
|
2093
|
-
// Receives the already-reordered array from the component and stores it.
|
|
2094
|
-
// No splice logic here — same pattern as useSortableList.handleReorder.
|
|
2095
|
-
const handleReorder = useCallback((newItems) => {
|
|
2096
|
-
setItems(newItems);
|
|
2097
|
-
setHasChanges(true);
|
|
2098
|
-
}, []);
|
|
2099
|
-
const handleSave = async (onSave) => {
|
|
2100
|
-
await onSave(items);
|
|
2101
|
-
setOriginalItems(items);
|
|
2102
|
-
setHasChanges(false);
|
|
2103
|
-
};
|
|
2104
|
-
const handleDiscard = useCallback(() => {
|
|
2105
|
-
setItems(originalItems);
|
|
2106
|
-
setHasChanges(false);
|
|
2107
|
-
}, [originalItems]);
|
|
2108
|
-
return {
|
|
2109
|
-
items,
|
|
2110
|
-
hasChanges,
|
|
2111
|
-
handleReorder,
|
|
2112
|
-
handleSave,
|
|
2113
|
-
handleDiscard,
|
|
2114
|
-
// dragState is managed in the component, same as CwSortableList
|
|
2115
|
-
dragState: { dragSourceIndex: -1, dropTargetIndex: -1 },
|
|
2116
|
-
};
|
|
2117
|
-
}
|
|
2118
|
-
|
|
2119
|
-
// ─── Drop indicator row ───────────────────────────────────────────────────────
|
|
2120
|
-
const DropIndicatorRow = ({ colSpan }) => (jsx("tr", { className: styles$j.dropIndicator, "aria-hidden": true, children: jsx("td", { colSpan: colSpan, children: jsx("div", {}) }) }));
|
|
2121
|
-
// ─── Loading skeleton ─────────────────────────────────────────────────────────
|
|
2122
|
-
const LoadingRows = ({ colSpan }) => (jsx(Fragment, { children: Array.from({ length: 4 }).map((_, i) => (jsx("tr", { className: styles$j.skeletonRow, children: jsx("td", { colSpan: colSpan, children: jsx("div", { className: styles$j.skeleton }) }) }, i))) }));
|
|
2123
|
-
// ─── Component ────────────────────────────────────────────────────────────────
|
|
2124
|
-
/**
|
|
2125
|
-
* CwSortableTable
|
|
2126
|
-
*
|
|
2127
|
-
* A table with drag-and-drop row reordering and save/discard support.
|
|
2128
|
-
* Shares visual styles with CwTable but is intentionally simpler:
|
|
2129
|
-
* no column sorting, no pagination.
|
|
2130
|
-
*
|
|
2131
|
-
* When the user reorders rows, changes are held locally until they
|
|
2132
|
-
* click Save. A save bar appears automatically when there are pending changes.
|
|
2133
|
-
*
|
|
2134
|
-
* Follows the same pattern as CwSortableList:
|
|
2135
|
-
* - All rows are draggable — the handle is visual only
|
|
2136
|
-
* - Reorder is calculated in onDragEnd using lastValidDropIndex
|
|
2137
|
-
* - draggedItem is tracked in state, not via dataTransfer
|
|
2138
|
-
*/
|
|
2139
|
-
function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = false, textNoData = "No data available", className, tableClassName, maxHeight, showHandle = true, style, saveLabel = "Save order", discardLabel = "Discard", }) {
|
|
2140
|
-
const { items, hasChanges, handleReorder, handleSave, handleDiscard, } = useSortableTable(data);
|
|
2141
|
-
// Drag state lives in the component, same as CwSortableList
|
|
2142
|
-
const [draggedItem, setDraggedItem] = useState(null);
|
|
2143
|
-
const [dropIndicatorIndex, setDropIndicatorIndex] = useState(null);
|
|
2144
|
-
const [lastValidDropIndex, setLastValidDropIndex] = useState(null);
|
|
2145
|
-
// Total columns = handle column (optional) + user columns
|
|
2146
|
-
const totalCols = columns.length + (showHandle ? 1 : 0);
|
|
2147
|
-
const containerStyle = {
|
|
2148
|
-
...style,
|
|
2149
|
-
...(maxHeight ? { maxHeight, overflowY: "auto" } : {}),
|
|
2150
|
-
};
|
|
2151
|
-
// ── Drag handlers — replicating CwSortableList pattern exactly ──────────
|
|
2152
|
-
const cleanupDragState = () => {
|
|
2153
|
-
setDraggedItem(null);
|
|
2154
|
-
setDropIndicatorIndex(null);
|
|
2155
|
-
setLastValidDropIndex(null);
|
|
2156
|
-
};
|
|
2157
|
-
const handleDragStart = (e, item) => {
|
|
2158
|
-
setDraggedItem(item);
|
|
2159
|
-
setLastValidDropIndex(null);
|
|
2160
|
-
e.dataTransfer.effectAllowed = "move";
|
|
2161
|
-
};
|
|
2162
|
-
const handleDragOver = (e, index) => {
|
|
2163
|
-
e.preventDefault();
|
|
2164
|
-
if (!draggedItem)
|
|
2165
|
-
return;
|
|
2166
|
-
const rect = e.currentTarget.getBoundingClientRect();
|
|
2167
|
-
const elementCenterY = rect.top + rect.height / 2;
|
|
2168
|
-
const dropIndex = e.clientY < elementCenterY ? index : index + 1;
|
|
2169
|
-
if (dropIndicatorIndex !== dropIndex) {
|
|
2170
|
-
setDropIndicatorIndex(dropIndex);
|
|
2171
|
-
setLastValidDropIndex(dropIndex);
|
|
2172
|
-
}
|
|
2173
|
-
};
|
|
2174
|
-
const handleDragEnd = () => {
|
|
2175
|
-
if (draggedItem && lastValidDropIndex !== null) {
|
|
2176
|
-
const dragIndex = items.findIndex(item => item[rowKey] === draggedItem[rowKey]);
|
|
2177
|
-
if (dragIndex !== lastValidDropIndex && dragIndex !== lastValidDropIndex - 1) {
|
|
2178
|
-
const newItems = [...items];
|
|
2179
|
-
const [draggedElement] = newItems.splice(dragIndex, 1);
|
|
2180
|
-
let finalIndex = lastValidDropIndex;
|
|
2181
|
-
if (dragIndex < finalIndex)
|
|
2182
|
-
finalIndex -= 1;
|
|
2183
|
-
newItems.splice(finalIndex, 0, draggedElement);
|
|
2184
|
-
handleReorder(newItems);
|
|
2185
|
-
}
|
|
2186
|
-
}
|
|
2187
|
-
cleanupDragState();
|
|
2188
|
-
};
|
|
2189
|
-
// ── Render helpers ──────────────────────────────────────────────────────
|
|
2190
|
-
const renderCell = (item, col) => {
|
|
2191
|
-
if (col.render)
|
|
2192
|
-
return col.render(item);
|
|
2193
|
-
if (col.dataIndex) {
|
|
2194
|
-
const value = item[col.dataIndex];
|
|
2195
|
-
return value != null ? String(value) : "";
|
|
2196
|
-
}
|
|
2197
|
-
return "";
|
|
2198
|
-
};
|
|
2199
|
-
const renderBody = () => {
|
|
2200
|
-
if (loading) {
|
|
2201
|
-
return jsx(LoadingRows, { colSpan: totalCols });
|
|
2202
|
-
}
|
|
2203
|
-
if (!items || items.length === 0) {
|
|
2204
|
-
return (jsx("tr", { children: jsx("td", { colSpan: totalCols, className: "cw-table-cell-empty", style: { textAlign: "center" }, children: textNoData }) }));
|
|
2205
|
-
}
|
|
2206
|
-
return items.map((item, index) => {
|
|
2207
|
-
const key = item[rowKey];
|
|
2208
|
-
const isDragging = draggedItem?.[rowKey] === key;
|
|
2209
|
-
return (jsxs(React__default.Fragment, { children: [dropIndicatorIndex === index && (jsx(DropIndicatorRow, { colSpan: totalCols })), jsxs("tr", { draggable: true, onDragStart: (e) => handleDragStart(e, item), onDragOver: (e) => handleDragOver(e, index), onDragEnd: handleDragEnd, className: isDragging ? styles$j.dragging : "", children: [showHandle && (jsx("td", { className: "cw-table-col-action", children: jsx(CwIcon, { iconId: "grip-dots", color: "neutral", style: { opacity: 0.75 } }) })), columns.map(col => (jsx("td", { className: col.className ?? "", style: col.width ? { width: col.width } : undefined, children: renderCell(item, col) }, `${String(key)}_${col.key}`)))] }), index === items.length - 1 && dropIndicatorIndex === items.length && (jsx(DropIndicatorRow, { colSpan: totalCols }))] }, String(key)));
|
|
2210
|
-
});
|
|
2211
|
-
};
|
|
2212
|
-
// ── Render ──────────────────────────────────────────────────────────────
|
|
2213
|
-
return (jsxs("div", { className: `cw-table-container ${className ?? ""}`, style: containerStyle, children: [jsxs("table", { className: `cw-table cw-sortable-table ${tableClassName ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [showHandle && jsx("th", { className: "cw-table-col-action" }), columns.map(col => (jsx("th", { className: col.className ?? "", style: col.width ? { width: col.width, minWidth: 50 } : undefined, children: col.title }, col.key)))] }) }), jsx("tbody", { children: renderBody() })] }), hasChanges && (jsxs("footer", { className: styles$j.saveBar, children: [jsx(CwButton, { variant: "outline", color: "neutral", icon: "undo", text: discardLabel, onClick: handleDiscard }), jsx(CwButton, { variant: "solid", color: "primary", icon: "save", text: saveLabel, onClick: () => handleSave(onReorder) })] }))] }));
|
|
2214
|
-
}
|
|
2215
|
-
|
|
2216
|
-
/**
|
|
2217
|
-
* A reusable and customizable table component (server-side pagination and sorting).
|
|
2218
|
-
*
|
|
2219
|
-
* @param props - Component props to configure columns, data, styles, pagination, expanded rows, and more.
|
|
2220
|
-
*
|
|
2221
|
-
* @example
|
|
2222
|
-
* // --- Component ---
|
|
2223
|
-
* const columns: Column<User>[] = [
|
|
2224
|
-
* { title: "Name", dataIndex: "name", key: "name", sortable: true },
|
|
2225
|
-
* { title: "Age", dataIndex: "age", key: "age", sortable: true },
|
|
2226
|
-
* { title: "Address", dataIndex: "address", key: "address" }
|
|
2227
|
-
* ];
|
|
2228
|
-
*
|
|
2229
|
-
*
|
|
2230
|
-
* const [tableState, setTableState] = useState<ServerSideTableState<User>>({
|
|
2231
|
-
* page: 1,
|
|
2232
|
-
* pageSize: 5,
|
|
2233
|
-
* sortKey: null,
|
|
2234
|
-
* sortDirection: null
|
|
2235
|
-
* });
|
|
2236
|
-
* const [data, setData] = useState<User[]>([]);
|
|
2237
|
-
* const [totalItems, setTotalItems] = useState(0);
|
|
2238
|
-
* const [loading, setLoading] = useState(false);
|
|
2239
|
-
*
|
|
2240
|
-
* // Fetch simulation on table state change
|
|
2241
|
-
* useEffect(() => {
|
|
2242
|
-
* setLoading(true);
|
|
2243
|
-
* fetch(`/api/users?page=${tableState.page}&pageSize=${tableState.pageSize}` +
|
|
2244
|
-
* (tableState.sortKey ? `&sortKey=${tableState.sortKey}&sortDirection=${tableState.sortDirection}` : "")
|
|
2245
|
-
* )
|
|
2246
|
-
* .then(res => res.json())
|
|
2247
|
-
* .then(({ items, total }) => {
|
|
2248
|
-
* setData(items);
|
|
2249
|
-
* setTotalItems(total);
|
|
2250
|
-
* })
|
|
2251
|
-
* .finally(() => setLoading(false));
|
|
2252
|
-
* }, [tableState]);
|
|
2253
|
-
*
|
|
2254
|
-
* <CwTableServerSide<User>
|
|
2255
|
-
* columns={columns}
|
|
2256
|
-
* data={data}
|
|
2257
|
-
* totalItems={totalItems}
|
|
2258
|
-
* pagination={true}
|
|
2259
|
-
* pageSizeOptions={[5, 10, 20]}
|
|
2260
|
-
* loading={loading}
|
|
2261
|
-
* serverState={tableState}
|
|
2262
|
-
* onChange={setTableState}
|
|
2263
|
-
* rowKey="id"
|
|
2264
|
-
* textNoData="No data available"
|
|
2265
|
-
* />
|
|
2266
|
-
*
|
|
2267
|
-
* @returns React component
|
|
2268
|
-
*/
|
|
2269
|
-
function CwTableServerSide({ columns, data, totalItems, pagination = false, pageSizeOptions = [5, 10, 20, 50], pageLabel = "page", expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id, testId, textNoData = "No data available at the moment", rowKey = "key", loading = false, scrollHeight, stickyHeader = false, rowSelection, onChange, serverState, }) {
|
|
2270
|
-
const [internalState, setInternalState] = useState({
|
|
2271
|
-
page: 1,
|
|
2272
|
-
pageSize: pageSizeOptions[0],
|
|
2273
|
-
sortKey: null,
|
|
2274
|
-
sortDirection: null,
|
|
2275
|
-
});
|
|
2276
|
-
const [expandedRowKey, setExpandedRowKey] = useState(null);
|
|
2277
|
-
const [columnWidths, setColumnWidths] = useState(() => columns.reduce((acc, col) => {
|
|
2278
|
-
if (col.width)
|
|
2279
|
-
acc[col.key] = col.width;
|
|
2280
|
-
return acc;
|
|
2281
|
-
}, {}));
|
|
2282
|
-
const [selectedKeys, setSelectedKeys] = useState(new Set(rowSelection?.selectedRowKeys || []));
|
|
2283
|
-
useEffect(() => {
|
|
2284
|
-
setSelectedKeys(new Set(rowSelection?.selectedRowKeys || []));
|
|
2285
|
-
}, [rowSelection?.selectedRowKeys]);
|
|
2286
|
-
const state = serverState ?? internalState;
|
|
2287
|
-
const triggerChange = useCallback((next) => {
|
|
2288
|
-
const newState = { ...state, ...next };
|
|
2289
|
-
if (!serverState)
|
|
2290
|
-
setInternalState(newState);
|
|
2291
|
-
onChange?.(newState);
|
|
2292
|
-
}, [state, serverState, onChange]);
|
|
2293
|
-
const handleItemsPerPageChange = useCallback((e) => {
|
|
2294
|
-
triggerChange({ pageSize: parseInt(e.target.value, 10), page: 1 });
|
|
2295
|
-
}, [triggerChange]);
|
|
2296
|
-
const handleRowExpand = useCallback((item) => {
|
|
2297
|
-
const itemKey = item[rowKey];
|
|
2298
|
-
setExpandedRowKey((prev) => (prev === itemKey ? null : itemKey));
|
|
2299
|
-
onExpand?.(item);
|
|
2300
|
-
}, [rowKey, onExpand]);
|
|
2301
|
-
const handleSort = useCallback((columnKey) => {
|
|
2302
|
-
let nextSortKey = columnKey;
|
|
2303
|
-
let nextSortDirection = "asc";
|
|
2304
|
-
if (state.sortKey === columnKey) {
|
|
2305
|
-
nextSortDirection = state.sortDirection === "asc" ? "desc" : state.sortDirection === "desc" ? null : "asc";
|
|
2306
|
-
if (nextSortDirection === null)
|
|
2307
|
-
nextSortKey = null;
|
|
2308
|
-
}
|
|
2309
|
-
triggerChange({ sortKey: nextSortKey, sortDirection: nextSortDirection, page: 1 });
|
|
2310
|
-
}, [state, triggerChange]);
|
|
2311
|
-
const handleRowClick = useCallback((item, e) => {
|
|
2312
|
-
if (e.target.closest(".cw-table-col-expand")) {
|
|
2313
|
-
return;
|
|
2314
|
-
}
|
|
2315
|
-
const itemKey = item[rowKey];
|
|
2316
|
-
setSelectedKeys((prev) => {
|
|
2317
|
-
const newSet = new Set(prev);
|
|
2318
|
-
if (rowSelection?.type === "single") {
|
|
2319
|
-
if (newSet.has(itemKey)) {
|
|
2320
|
-
newSet.clear();
|
|
2321
|
-
}
|
|
2322
|
-
else {
|
|
2323
|
-
newSet.clear();
|
|
2324
|
-
newSet.add(itemKey);
|
|
2325
|
-
}
|
|
2326
|
-
}
|
|
2327
|
-
else {
|
|
2328
|
-
if (newSet.has(itemKey)) {
|
|
2329
|
-
newSet.delete(itemKey);
|
|
2330
|
-
}
|
|
2331
|
-
else {
|
|
2332
|
-
newSet.add(itemKey);
|
|
2333
|
-
}
|
|
2334
|
-
}
|
|
2335
|
-
const selectedRows = data.filter((item) => newSet.has(item[rowKey]));
|
|
2336
|
-
setTimeout(() => {
|
|
2337
|
-
rowSelection?.onChange?.(Array.from(newSet), selectedRows);
|
|
2338
|
-
}, 0);
|
|
2339
|
-
return newSet;
|
|
2340
|
-
});
|
|
2341
|
-
}, [rowSelection, rowKey, data]);
|
|
2342
|
-
const totalPages = useMemo(() => {
|
|
2343
|
-
return pagination ? Math.ceil(totalItems / state.pageSize) : 1;
|
|
2344
|
-
}, [totalItems, state.pageSize, pagination]);
|
|
2345
|
-
const handlePageChange = (page) => {
|
|
2346
|
-
if (page >= 1 && page <= totalPages)
|
|
2347
|
-
triggerChange({ page });
|
|
2348
|
-
};
|
|
2349
|
-
const startResize = (e, key) => {
|
|
2350
|
-
e.preventDefault();
|
|
2351
|
-
const startX = e.clientX;
|
|
2352
|
-
const startWidth = e.target.parentElement?.offsetWidth || 0;
|
|
2353
|
-
const onMouseMove = (moveEvent) => {
|
|
2354
|
-
const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50);
|
|
2355
|
-
setColumnWidths((prev) => ({ ...prev, [key]: newWidth }));
|
|
2356
|
-
};
|
|
2357
|
-
const onMouseUp = () => {
|
|
2358
|
-
window.removeEventListener("mousemove", onMouseMove);
|
|
2359
|
-
window.removeEventListener("mouseup", onMouseUp);
|
|
2360
|
-
};
|
|
2361
|
-
window.addEventListener("mousemove", onMouseMove);
|
|
2362
|
-
window.addEventListener("mouseup", onMouseUp);
|
|
2363
|
-
};
|
|
2364
|
-
const scrollContainerStyle = useMemo(() => {
|
|
2365
|
-
if (stickyHeader || scrollHeight) {
|
|
2366
|
-
return {
|
|
2367
|
-
maxHeight: scrollHeight ?? 300,
|
|
2368
|
-
overflowY: "auto",
|
|
2369
|
-
};
|
|
2370
|
-
}
|
|
2371
|
-
return {};
|
|
2372
|
-
}, [stickyHeader, scrollHeight]);
|
|
2373
|
-
const getColSpan = () => columns.length + (expandedRowRender ? 1 : 0);
|
|
2374
|
-
const hasClassNameRow = (item) => {
|
|
2375
|
-
return typeof item === "object" && item !== null && "classNameRow" in item;
|
|
2376
|
-
};
|
|
2377
|
-
const renderTableBody = () => {
|
|
2378
|
-
if (loading) {
|
|
2379
|
-
return (jsx("tr", { children: jsx("td", { colSpan: getColSpan(), children: jsx("div", { children: "Loading data..." }) }) }));
|
|
2380
|
-
}
|
|
2381
|
-
if (!data || data.length === 0) {
|
|
2382
|
-
return (jsx("tr", { children: jsx("td", { colSpan: getColSpan(), className: "cw-table-cell-empty", style: { textAlign: "center" }, children: textNoData }) }));
|
|
2383
|
-
}
|
|
2384
|
-
return data.map((item) => {
|
|
2385
|
-
const itemKey = item[rowKey];
|
|
2386
|
-
if (!itemKey)
|
|
2387
|
-
console.warn("Missing row key for item", item);
|
|
2388
|
-
const isSelected = selectedKeys.has(itemKey);
|
|
2389
|
-
const dynamicClassName = typeof classNameRow === "function" ? classNameRow(item) : (classNameRow ?? "");
|
|
2390
|
-
return (jsxs(React__default.Fragment, { children: [jsxs("tr", { className: `${dynamicClassName} ${hasClassNameRow(item) ? item.classNameRow : ""} ${isSelected ? "cw-table-row-selected" : ""}`, onClick: (e) => rowSelection && handleRowClick(item, e), style: {
|
|
2391
|
-
cursor: rowSelection ? "pointer" : "default",
|
|
2392
|
-
backgroundColor: isSelected ? "var(--cw-color-info-container)" : undefined,
|
|
2393
|
-
transition: "background-color 0.2s ease",
|
|
2394
|
-
}, children: [expandedRowRender && (jsx("td", { className: "cw-table-col-action cw-table-col-expand", children: jsx("button", { onClick: () => handleRowExpand(item), className: `cw-button-icon ${expandedRowKey === itemKey ? "cwi-chevron-down" : "cwi-chevron-right"}` }) })), columns.map((col) => (jsx("td", { className: col.className ?? "", children: col.render ? col.render(item) : col.dataIndex ? String(item[col.dataIndex]) : "" }, `${itemKey}_${col.key}`)))] }), expandedRowRender && expandedRowKey === itemKey && (jsx("tr", { className: "cw-table-row-expanded", children: jsx("td", { colSpan: getColSpan(), children: expandedRowRender(item) }) }))] }, String(itemKey)));
|
|
2395
|
-
});
|
|
2396
|
-
};
|
|
2397
|
-
return (jsxs("div", { id: id, "data-testid": testId, className: `cw-table-container ${classNameContainer ?? ""}`, style: style, children: [jsx("div", { style: scrollContainerStyle, children: jsxs("table", { className: `cw-table ${className ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { style: stickyHeader ? { position: "sticky", top: 0, background: "white", zIndex: 2 } : undefined, children: jsxs("tr", { children: [expandedRowRender && jsx("th", {}), columns.map((col) => (jsxs("th", { onClick: () => col.sortable && col.dataIndex && handleSort(col.dataIndex), className: `${col.className ?? ""} ${state.sortKey === col.dataIndex ? state.sortDirection : ""}`.trim(), style: {
|
|
2398
|
-
cursor: col.sortable ? "pointer" : "default",
|
|
2399
|
-
userSelect: "none",
|
|
2400
|
-
width: columnWidths[col.key] ?? col.width,
|
|
2401
|
-
...((col.width || columnWidths[col.key]) && {
|
|
2402
|
-
minWidth: 50,
|
|
2403
|
-
maxWidth: columnWidths[col.key] ?? col.width,
|
|
2404
|
-
}),
|
|
2405
|
-
}, children: [jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsx("span", { children: col.title }), col.sortable && col.dataIndex && (jsx(CwIcon, { size: "large", iconId: state.sortKey !== col.dataIndex
|
|
2406
|
-
? "sortable"
|
|
2407
|
-
: state.sortDirection === "asc"
|
|
2408
|
-
? "sortable-asc"
|
|
2409
|
-
: "sortable-desc" }))] }), jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsx("tbody", { children: renderTableBody() })] }) }), pagination && (jsxs("footer", { className: "cw-table-pagination", children: [jsx("button", { onClick: () => handlePageChange(1), disabled: state.page === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsx("button", { onClick: () => handlePageChange(state.page - 1), disabled: state.page === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsx("input", { type: "text", inputMode: "numeric", value: state.page, onChange: (e) => {
|
|
2410
|
-
const value = parseInt(e.target.value, 10);
|
|
2411
|
-
if (!isNaN(value))
|
|
2412
|
-
handlePageChange(value);
|
|
2413
|
-
}, onBlur: (e) => {
|
|
2414
|
-
const value = parseInt(e.target.value, 10);
|
|
2415
|
-
if (isNaN(value) || value < 1 || value > totalPages) {
|
|
2416
|
-
handlePageChange(1);
|
|
2417
|
-
}
|
|
2418
|
-
}, min: 1, max: totalPages }), jsxs("span", { children: ["of ", totalPages] }), jsx("button", { onClick: () => handlePageChange(state.page + 1), disabled: state.page === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsx("button", { onClick: () => handlePageChange(totalPages), disabled: state.page === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsx("select", { value: state.pageSize, onChange: handleItemsPerPageChange, children: pageSizeOptions.map((size) => (jsx("option", { value: size, children: pageLabel ? `${size} / ${pageLabel}` : size }, size))) })] }))] }));
|
|
2419
|
-
}
|
|
2420
|
-
|
|
2421
|
-
var styles$i = {"cw-tabs":"cw-tabs-module__cw-tabs__1pmji","badge":"cw-tabs-module__badge__AmVxW","cw-tabs-content":"cw-tabs-module__cw-tabs-content__HTp8d"};
|
|
2422
|
-
|
|
2423
|
-
const TabIcon = ({ icon }) => {
|
|
2424
|
-
if (!icon)
|
|
2425
|
-
return null;
|
|
2426
|
-
// If icon is a string, treat it as a class name
|
|
2427
|
-
if (typeof icon === 'string') {
|
|
2428
|
-
return (jsx("span", { className: `cwi-icons ${icon}` }));
|
|
2429
|
-
}
|
|
2430
|
-
// If icon is a ReactNode, return it directly
|
|
2431
|
-
return icon;
|
|
2432
|
-
};
|
|
2433
|
-
/**
|
|
2434
|
-
* CwTabs component for displaying tabbed content.
|
|
2435
|
-
* @param CwTabsProps
|
|
2436
|
-
* @example
|
|
2437
|
-
The way to use the tab component:
|
|
2438
|
-
* const [activeTab, setActiveTab] = useState("1");
|
|
2439
|
-
*
|
|
2440
|
-
* const handleTabChange = (tab) => {
|
|
2441
|
-
* setActiveTab(tab.key);
|
|
2442
|
-
* };
|
|
2443
|
-
*
|
|
2444
|
-
* const tabs = [
|
|
2445
|
-
* { key: "1", title: 'Tab 1', icon: 'iconClassname', content: <div>Content for tab 1</div> },
|
|
2446
|
-
* { key: "2", title: 'Tab 2', icon: 'iconClassname', content: <div>Content for tab 2</div> },
|
|
2447
|
-
* { key: "3", title: 'Tab 3', icon: 'iconClassname', content: <div>Content for tab 3</div> },
|
|
2448
|
-
* ];
|
|
2449
|
-
*
|
|
2450
|
-
* <CwTabs
|
|
2451
|
-
* tabs={tabs}
|
|
2452
|
-
* tabsPosition="top"
|
|
2453
|
-
* defaultActiveKey={activeTab} // Use the current state for defaultActiveKey
|
|
2454
|
-
* onTabClick={handleTabChange}
|
|
2455
|
-
* />
|
|
2456
|
-
* @returns A tab
|
|
1763
|
+
* <CwTabs
|
|
1764
|
+
* tabs={tabs}
|
|
1765
|
+
* tabsPosition="top"
|
|
1766
|
+
* defaultActiveKey={activeTab} // Use the current state for defaultActiveKey
|
|
1767
|
+
* onTabClick={handleTabChange}
|
|
1768
|
+
* />
|
|
1769
|
+
* @returns A tab
|
|
2457
1770
|
*/
|
|
2458
1771
|
function CwTabs(CwTabsProps) {
|
|
2459
1772
|
// const [activeTab, setActiveTab] = useState<string | null>(null);
|
|
@@ -2468,7 +1781,7 @@ function CwTabs(CwTabsProps) {
|
|
|
2468
1781
|
const tabsListStyle = position === 'left' && CwTabsProps.tabsListWidth
|
|
2469
1782
|
? { minWidth: CwTabsProps.tabsListWidth }
|
|
2470
1783
|
: undefined;
|
|
2471
|
-
return (jsxs("div", { id: CwTabsProps.id,
|
|
1784
|
+
return (jsxs("div", { id: CwTabsProps.id, className: styles$e['cw-tabs'], style: CwTabsProps.style, "data-tabs-position": position, children: [jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsx(TabIcon, { icon: tab.icon }), tab.title, tab.badge !== undefined && (jsx("span", { className: styles$e['badge'], style: tab.badgeColor ? { backgroundColor: tab.badgeColor, color: getContrastColor(tab.badgeColor) } : undefined, children: tab.badge }))] }, tab.key))) }), jsx("div", { className: styles$e['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
|
|
2472
1785
|
}
|
|
2473
1786
|
|
|
2474
1787
|
/**
|
|
@@ -2492,49 +1805,7 @@ const CwExpandable = ({ briefing, onToggle, onOpen, onClose, children, ...detail
|
|
|
2492
1805
|
onClose?.(ev);
|
|
2493
1806
|
});
|
|
2494
1807
|
}, [onClose, onOpen, onToggle]);
|
|
2495
|
-
return (jsxs("details", { ref: myRef, ...detailsProps,
|
|
2496
|
-
};
|
|
2497
|
-
|
|
2498
|
-
var styles$h = {"cw-master-detail":"cw-master-detail-module__cw-master-detail__O8-FA","resizer":"cw-master-detail-module__resizer__hvGhL","detail":"cw-master-detail-module__detail__BG4Dm","detail-empty":"cw-master-detail-module__detail-empty__KFScK"};
|
|
2499
|
-
|
|
2500
|
-
const CwMasterDetail = ({ id, className, style, items, selectedKey, onSelect, detailContent, emptyDetail, searchPlaceholder = 'Search...', onSearch, masterHeader, masterFooter, masterWidth: initialWidth = 320, minMasterWidth = 240, maxMasterWidth = 500, resizable = true, showSearch = true, }) => {
|
|
2501
|
-
const [masterWidth, setMasterWidth] = useState(initialWidth);
|
|
2502
|
-
const [isResizing, setIsResizing] = useState(false);
|
|
2503
|
-
const containerRef = useRef(null);
|
|
2504
|
-
const handleMouseDown = useCallback((e) => {
|
|
2505
|
-
if (!resizable)
|
|
2506
|
-
return;
|
|
2507
|
-
e.preventDefault();
|
|
2508
|
-
setIsResizing(true);
|
|
2509
|
-
}, [resizable]);
|
|
2510
|
-
useEffect(() => {
|
|
2511
|
-
if (!isResizing)
|
|
2512
|
-
return;
|
|
2513
|
-
const handleMouseMove = (e) => {
|
|
2514
|
-
if (!containerRef.current)
|
|
2515
|
-
return;
|
|
2516
|
-
const rect = containerRef.current.getBoundingClientRect();
|
|
2517
|
-
const newWidth = Math.max(minMasterWidth, Math.min(maxMasterWidth, e.clientX - rect.left));
|
|
2518
|
-
setMasterWidth(newWidth);
|
|
2519
|
-
};
|
|
2520
|
-
const handleMouseUp = () => {
|
|
2521
|
-
setIsResizing(false);
|
|
2522
|
-
};
|
|
2523
|
-
document.addEventListener('mousemove', handleMouseMove);
|
|
2524
|
-
document.addEventListener('mouseup', handleMouseUp);
|
|
2525
|
-
document.body.style.cursor = 'col-resize';
|
|
2526
|
-
document.body.style.userSelect = 'none';
|
|
2527
|
-
return () => {
|
|
2528
|
-
document.removeEventListener('mousemove', handleMouseMove);
|
|
2529
|
-
document.removeEventListener('mouseup', handleMouseUp);
|
|
2530
|
-
document.body.style.cursor = '';
|
|
2531
|
-
document.body.style.userSelect = '';
|
|
2532
|
-
};
|
|
2533
|
-
}, [isResizing, minMasterWidth, maxMasterWidth]);
|
|
2534
|
-
const rootClassName = [styles$h['cw-master-detail'], className].filter(Boolean).join(' ');
|
|
2535
|
-
return (jsxs("div", { id: id, ref: containerRef, className: rootClassName, style: style, children: [jsxs("aside", { style: { width: masterWidth, minWidth: masterWidth }, children: [showSearch && (jsx("search", { children: jsx("input", { type: "text", placeholder: searchPlaceholder, onChange: (e) => onSearch?.(e.target.value) }) })), masterHeader && (jsx("header", { children: masterHeader })), jsx("ul", { children: items.map((item) => (jsx("li", { "data-master-key": item.key, "data-selected": item.key === selectedKey, "data-disabled": item.disabled, onClick: () => onSelect?.(item.key), children: item.content }, item.key))) }), masterFooter && (jsx("footer", { children: masterFooter }))] }), resizable && (jsx("div", { className: styles$h.resizer, "data-resizing": isResizing, onMouseDown: handleMouseDown })), jsx("section", { className: styles$h.detail, children: selectedKey && detailContent
|
|
2536
|
-
? detailContent
|
|
2537
|
-
: (jsx("div", { className: styles$h['detail-empty'], children: emptyDetail ?? 'Select an item to view details' })) })] }));
|
|
1808
|
+
return (jsx("div", { className: "cw-expandable", children: jsxs("details", { ref: myRef, ...detailsProps, children: [jsx("summary", { children: briefing }), children && jsx("section", { children: children })] }) }));
|
|
2538
1809
|
};
|
|
2539
1810
|
|
|
2540
1811
|
/**
|
|
@@ -2558,9 +1829,9 @@ const CwKeyValueList = ({ items, className = "", emptyValue = "-", direction = "
|
|
|
2558
1829
|
: emptyValue })] }, item.key))) }));
|
|
2559
1830
|
};
|
|
2560
1831
|
|
|
2561
|
-
var styles$
|
|
1832
|
+
var styles$d = {"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"};
|
|
2562
1833
|
|
|
2563
|
-
function CwSortableList({ items, onReorder, renderItem, className = '', movedItems = new Set(), emptyMessage = "No elements to show", readOnly = false,
|
|
1834
|
+
function CwSortableList({ items, onReorder, renderItem, className = '', movedItems = new Set(), emptyMessage = "No elements to show", readOnly = false, }) {
|
|
2564
1835
|
const [draggedItem, setDraggedItem] = useState(null);
|
|
2565
1836
|
const [dropIndicatorIndex, setDropIndicatorIndex] = useState(null);
|
|
2566
1837
|
const [lastValidDropIndex, setLastValidDropIndex] = useState(null);
|
|
@@ -2621,15 +1892,15 @@ function CwSortableList({ items, onReorder, renderItem, className = '', movedIte
|
|
|
2621
1892
|
}
|
|
2622
1893
|
};
|
|
2623
1894
|
if (items.length === 0) {
|
|
2624
|
-
return (jsx("div", { className: `${styles$
|
|
1895
|
+
return (jsx("div", { className: `${styles$d.sortableList} ${styles$d.emptyState} ${className}`, children: jsx("div", { className: styles$d.emptyMessage, children: emptyMessage }) }));
|
|
2625
1896
|
}
|
|
2626
|
-
return (jsx("div", { className: `${styles$
|
|
1897
|
+
return (jsx("div", { className: `${styles$d.sortableList} ${className}`, children: items.map((item, index) => {
|
|
2627
1898
|
const { title, extraContent, actions, showHandle = true, expandedContent } = renderItem(item);
|
|
2628
1899
|
const isDragging = draggedItem?.id === item.id;
|
|
2629
1900
|
const isMoved = movedItems.has(item.id);
|
|
2630
1901
|
const canExpand = Boolean(expandedContent);
|
|
2631
1902
|
const isExpanded = expandedItems.has(item.id);
|
|
2632
|
-
return (jsxs(React__default.Fragment, { children: [dropIndicatorIndex === index && jsx("div", { className: styles$
|
|
1903
|
+
return (jsxs(React__default.Fragment, { children: [dropIndicatorIndex === index && jsx("div", { className: styles$d.dropIndicator }), jsxs("div", { className: `${styles$d.sortableItem} ${isDragging ? styles$d.dragging : ''} ${isMoved ? styles$d.moved : ''} ${readOnly ? styles$d.readOnly : ''}`, draggable: !readOnly, onDragStart: (e) => handleDragStart(e, item), onDragOver: (e) => handleDragOver(e, index), onDragEnd: handleDragEnd, children: [jsxs("header", { children: [canExpand ? (jsx(CwButton, { variant: "icon", onClick: () => toggleExpanded(item.id), type: "button", title: isExpanded ? "Collapse" : "Expand", icon: isExpanded ? "chevron-up" : "chevron-down" })) : showHandle ? (jsx("div", { className: styles$d.sortableHandle, children: jsx(CwIcon, { iconId: "grip-dots" }) })) : null, jsxs("div", { className: styles$d.sortableContent, children: [jsx("div", { className: styles$d.sortableTitle, children: title }), extraContent && jsx("div", { className: styles$d.sortableExtraContent, children: extraContent })] }), jsx("div", { className: styles$d.sortableActions, children: actions })] }), isExpanded && expandedContent && (jsx("div", { className: styles$d.expandedContent, children: expandedContent }))] }), !readOnly && dropIndicatorIndex === items.length && index === items.length - 1 && (jsx("div", { className: styles$d.dropIndicator }))] }, item.id));
|
|
2633
1904
|
}) }));
|
|
2634
1905
|
}
|
|
2635
1906
|
|
|
@@ -2751,7 +2022,7 @@ const CwTableGrouped = props => {
|
|
|
2751
2022
|
[index]: !prev[index]
|
|
2752
2023
|
}));
|
|
2753
2024
|
};
|
|
2754
|
-
return (jsx("div", { className: "cw-table-grouped",
|
|
2025
|
+
return (jsx("div", { className: "cw-table-grouped", style: { width: "100%" }, children: jsxs("table", { style: { width: "100%" }, children: [jsx("colgroup", { children: props.tableData.head.map((head, i) => (jsx("col", { span: 1, style: { width: head.expandSize } }, i))) }), jsx("thead", { children: jsx("tr", { children: props.tableData.head.map((head, i) => (jsx("th", { children: head.title }, i))) }) }), jsx("tbody", { children: props.tableData.groups.map((group, i) => (jsxs(React__default.Fragment, { children: [jsx("tr", { "data-group": true, "data-expanded": !!expandedGroups[i], onClick: () => handleToggle(i), children: jsx("td", { colSpan: props.tableData.head.length, children: group.title }) }), expandedGroups[i] &&
|
|
2755
2026
|
group.rows.map((child, j) => (jsx("tr", { "data-row": true, "data-row-last-of-group": j == group.rows.length - 1, children: child.cells.map((cell, k) => (jsx("td", { children: cell.content }, k))) }, j)))] }, i))) }), jsx("tfoot", {})] }) }));
|
|
2756
2027
|
};
|
|
2757
2028
|
|
|
@@ -2806,28 +2077,12 @@ function CwFileUpload(fileUploadProps) {
|
|
|
2806
2077
|
return (jsxs("div", { children: [jsxs("div", { className: "row", children: [jsx("input", { className: "cw-button", type: "file", accept: fileUploadProps.accept, readOnly: true, placeholder: "No file selected...", onChange: handleFileChange }), previewURL && (jsx("div", { className: "row", children: jsx("img", { src: previewURL, alt: "Preview", style: { maxWidth: "200px", maxHeight: "200px" } }) }))] }), error && jsx("div", { className: "row error", children: error }), jsx("div", { className: "row", children: jsxs("label", { children: ["Please note: File/image has to be in ", fileUploadProps.acceptString, " format", fileUploadProps.sizeString && `, ${fileUploadProps.sizeString}`] }) })] }));
|
|
2807
2078
|
}
|
|
2808
2079
|
|
|
2809
|
-
var styles$
|
|
2810
|
-
|
|
2811
|
-
const DEFAULT_LABELS = {
|
|
2812
|
-
uploadDisabled: 'Upload disabled',
|
|
2813
|
-
clickToUpload: 'Click to upload or drag and drop',
|
|
2814
|
-
acceptedFiles: (accept) => `Accepted files: ${accept}`,
|
|
2815
|
-
singleFileOnly: '(Single file only)',
|
|
2816
|
-
allTypesAccepted: 'All file types accepted',
|
|
2817
|
-
changeFile: 'Change File',
|
|
2818
|
-
clearAll: 'Clear all',
|
|
2819
|
-
addMoreFiles: 'Add More Files',
|
|
2820
|
-
filesSelected: (count) => `${count} file${count !== 1 ? 's' : ''} selected`,
|
|
2821
|
-
fileTooLarge: (name, maxSize) => `File "${name}" is too large. Maximum size allowed is ${maxSize}MB.`,
|
|
2822
|
-
invalidFormat: (name, accepted) => `File "${name}" has an invalid format. Allowed formats: ${accepted}`,
|
|
2823
|
-
invalidMimeType: (name, types) => `File "${name}" has an invalid MIME type. Allowed types: ${types}`,
|
|
2824
|
-
alreadySelected: (name) => `File "${name}" is already selected.`,
|
|
2825
|
-
};
|
|
2080
|
+
var styles$c = {"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"};
|
|
2081
|
+
|
|
2826
2082
|
function CwFileUploadMultiple(fileUploadProps) {
|
|
2827
2083
|
const fileInputRef = useRef(null);
|
|
2828
2084
|
const [selectedFiles, setSelectedFiles] = useState([]);
|
|
2829
2085
|
const [existingFile, setExistingFile] = useState(fileUploadProps.initialFileName);
|
|
2830
|
-
const labels = { ...DEFAULT_LABELS, ...fileUploadProps.labels };
|
|
2831
2086
|
React__default.useEffect(() => {
|
|
2832
2087
|
setExistingFile(fileUploadProps.initialFileName);
|
|
2833
2088
|
}, [fileUploadProps.initialFileName]);
|
|
@@ -2841,7 +2096,7 @@ function CwFileUploadMultiple(fileUploadProps) {
|
|
|
2841
2096
|
if (fileSizeInMB > fileUploadProps.maxFileSize) {
|
|
2842
2097
|
return {
|
|
2843
2098
|
isValid: false,
|
|
2844
|
-
error:
|
|
2099
|
+
error: `File "${file.name}" is too large. Maximum size allowed is ${fileUploadProps.maxFileSize}MB.`
|
|
2845
2100
|
};
|
|
2846
2101
|
}
|
|
2847
2102
|
}
|
|
@@ -2858,7 +2113,7 @@ function CwFileUploadMultiple(fileUploadProps) {
|
|
|
2858
2113
|
if (!isExtensionValid) {
|
|
2859
2114
|
return {
|
|
2860
2115
|
isValid: false,
|
|
2861
|
-
error:
|
|
2116
|
+
error: `File "${file.name}" has an invalid format. Allowed formats: ${fileUploadProps.accept}`
|
|
2862
2117
|
};
|
|
2863
2118
|
}
|
|
2864
2119
|
}
|
|
@@ -2868,7 +2123,7 @@ function CwFileUploadMultiple(fileUploadProps) {
|
|
|
2868
2123
|
if (!isMimeTypeValid) {
|
|
2869
2124
|
return {
|
|
2870
2125
|
isValid: false,
|
|
2871
|
-
error:
|
|
2126
|
+
error: `File "${file.name}" has an invalid MIME type. Allowed types: ${fileUploadProps.allowedTypes.join(', ')}`
|
|
2872
2127
|
};
|
|
2873
2128
|
}
|
|
2874
2129
|
}
|
|
@@ -2882,7 +2137,7 @@ function CwFileUploadMultiple(fileUploadProps) {
|
|
|
2882
2137
|
// Check if the file already exists (by name and size)
|
|
2883
2138
|
const isDuplicate = existingFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size);
|
|
2884
2139
|
if (isDuplicate) {
|
|
2885
|
-
errors.push(
|
|
2140
|
+
errors.push(`File "${file.name}" is already selected.`);
|
|
2886
2141
|
continue;
|
|
2887
2142
|
}
|
|
2888
2143
|
const validation = validateFile(file);
|
|
@@ -2973,12 +2228,12 @@ function CwFileUploadMultiple(fileUploadProps) {
|
|
|
2973
2228
|
}
|
|
2974
2229
|
}
|
|
2975
2230
|
};
|
|
2976
|
-
return (jsxs("div", { className: `${styles$
|
|
2231
|
+
return (jsxs("div", { className: `${styles$c.fileUploadContainer} ${fileUploadProps.className}`, children: [jsx("input", { ref: fileInputRef, type: "file", name: fileUploadProps.name, accept: fileUploadProps.accept, multiple: fileUploadProps.multiple, onChange: handleFileSelectInternal, disabled: fileUploadProps.disabled, "aria-label": "files", className: styles$c.hiddenInput }), selectedFiles.length === 0 && !existingFile ? (jsxs("div", { className: `${styles$c.uploadArea} ${fileUploadProps.disabled ? styles$c.uploadAreaDisabled : ''}`, onDragOver: handleDragOver, onDrop: handleDrop, onClick: !fileUploadProps.disabled ? handleButtonClick : undefined, children: [jsx(CwIcon, { iconId: "upload" }), jsx("p", { className: `${styles$c.uploadTitle}`, children: fileUploadProps.disabled ? 'Upload disabled' : 'Click to upload or drag and drop' }), jsxs("p", { className: `${styles$c.uploadSubtitle}`, children: [fileUploadProps.accept ? `Accepted files: ${fileUploadProps.accept}` : 'All file types accepted', !fileUploadProps.multiple && ' (Single file only)'] })] })) : selectedFiles.length === 0 && existingFile ? (jsxs("div", { className: styles$c.filesContainer, children: [jsxs("div", { className: styles$c.fileItem, children: [jsxs("div", { className: styles$c.fileIcon, children: [jsx(CwIcon, { iconId: "page" }), jsx("span", { className: styles$c.fileExtension, children: getFileExtension(existingFile) })] }), jsx("div", { className: styles$c.fileInfo, children: jsx("p", { className: styles$c.fileName, children: existingFile }) }), jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => {
|
|
2977
2232
|
setExistingFile(undefined);
|
|
2978
2233
|
if (fileUploadProps.onSelect) {
|
|
2979
2234
|
fileUploadProps.onSelect(null);
|
|
2980
2235
|
}
|
|
2981
|
-
}, disabled: fileUploadProps.disabled, className: styles$
|
|
2236
|
+
}, disabled: fileUploadProps.disabled, className: styles$c.smallButton })] }), jsx(CwButton, { text: "Change File", icon: "refresh", onClick: handleButtonClick, disabled: fileUploadProps.disabled })] })) : (jsxs("div", { className: styles$c.filesContainer, children: [jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsxs("small", { className: styles$c.filesCount, children: [selectedFiles.length, " file", selectedFiles.length !== 1 ? 's' : '', " selected"] }), jsx(CwButton, { onClick: removeAllFiles, disabled: fileUploadProps.disabled, color: "danger", variant: "outline", icon: "delete", text: "Clear all" })] }), selectedFiles.map((file, index) => (jsxs("div", { className: styles$c.fileItem, children: [jsxs("div", { className: styles$c.fileIcon, children: [jsx(CwIcon, { iconId: "page" }), jsx("span", { className: styles$c.fileExtension, children: getFileExtension(file.name) })] }), jsxs("div", { className: styles$c.fileInfo, children: [jsx("p", { className: styles$c.fileName, children: file.name }), jsxs("p", { className: styles$c.fileSize, children: [(file.size / 1024).toFixed(1), " KB"] })] }), jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => removeFile(index), className: styles$c.smallButton })] }, index))), fileUploadProps.multiple && (jsx(CwButton, { text: "Add More Files", icon: "plus", variant: "outline", onClick: handleButtonClick, disabled: fileUploadProps.disabled })), !fileUploadProps.multiple && (jsx(CwButton, { text: "Change File", icon: "refresh", onClick: handleButtonClick, disabled: fileUploadProps.disabled }))] }))] }));
|
|
2982
2237
|
}
|
|
2983
2238
|
|
|
2984
2239
|
function CwInput(CwInputProps) {
|
|
@@ -2992,7 +2247,9 @@ function CwInput(CwInputProps) {
|
|
|
2992
2247
|
? "cw-flex-column"
|
|
2993
2248
|
: "cw-flex-row ", children: [jsx("label", { className: CwInputProps.disabled === true
|
|
2994
2249
|
? CwInputProps.labelClassName + " " + "cw_label_text cw_label_text_disabled"
|
|
2995
|
-
: CwInputProps.labelClassName + " " + "cw_label_text", children: CwInputProps.labelName }), jsx("input", { id: CwInputProps.id, type: "text", value: CwInputProps.value, onChange: e => handleChange(e), className: CwInputProps.className + " " + "cw_input", placeholder: CwInputProps.placeholder === undefined ? "Write a text please" : CwInputProps.placeholder, style: CwInputProps.style, disabled: CwInputProps.disabled, required: CwInputProps.required }), CwInputProps.value && (
|
|
2250
|
+
: CwInputProps.labelClassName + " " + "cw_label_text", children: CwInputProps.labelName }), jsx("input", { id: CwInputProps.id, type: "text", value: CwInputProps.value, onChange: e => handleChange(e), className: CwInputProps.className + " " + "cw_input", placeholder: CwInputProps.placeholder === undefined ? "Write a text please" : CwInputProps.placeholder, style: CwInputProps.style, disabled: CwInputProps.disabled, required: CwInputProps.required }), CwInputProps.value && (
|
|
2251
|
+
// if the component is disabled do not show clear button
|
|
2252
|
+
jsx("button", { className: "cw_button_clear cwellt_flex cwellt_justify_center cwellt_align_items_center", onClick: handleClearClick }))] }));
|
|
2996
2253
|
}
|
|
2997
2254
|
|
|
2998
2255
|
/**
|
|
@@ -3019,7 +2276,7 @@ function CwDigit(props) {
|
|
|
3019
2276
|
return (jsx("div", { className: "cw-input-text", children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: "number", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
3020
2277
|
}
|
|
3021
2278
|
|
|
3022
|
-
var styles$
|
|
2279
|
+
var styles$b = {"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"};
|
|
3023
2280
|
|
|
3024
2281
|
const CwColorPicker = ({ initialColor, onChange, previewText = "Color preview" }) => {
|
|
3025
2282
|
const [rgb, setRgb] = useState({ r: 255, g: 255, b: 255 });
|
|
@@ -3222,15 +2479,15 @@ const CwColorPicker = ({ initialColor, onChange, previewText = "Color preview" }
|
|
|
3222
2479
|
// Calculate background color for the main area based on current hue
|
|
3223
2480
|
const hueColor = hsvToRgb(hsv.h, 100, 100);
|
|
3224
2481
|
const hueHex = rgbToHex(hueColor.r, hueColor.g, hueColor.b);
|
|
3225
|
-
return (jsxs("div", { className: "cw-flex-column cw-gap-small", children: [jsxs("div", { className: "cw-flex-row cw-align-between-center cw-gap-small", children: [jsx("div", { className: styles$
|
|
2482
|
+
return (jsxs("div", { className: "cw-flex-column cw-gap-small", children: [jsxs("div", { className: "cw-flex-row cw-align-between-center cw-gap-small", children: [jsx("div", { className: styles$b.colorPreview, style: { backgroundColor: hexColor, color: getContrastColor(hexColor) }, children: previewText }), jsx("button", { type: "button", className: "cw-button", onClick: toggleInputMode, style: { minWidth: "3ch" }, children: inputMode === 'hex' ? 'RGB' : 'HEX' })] }), jsx("div", { className: "color-inputs-row", children: inputMode === 'hex' ? (jsx("input", { type: "text", value: hexColor, onChange: handleHexChange })) : (jsxs("div", { className: "cw-grid-base-3 cw-gap-small", children: [jsxs("div", { children: [jsx("label", { children: "R:" }), jsx("input", { type: "number", name: "r", min: "0", max: "255", value: rgb.r, onChange: handleRgbChange })] }), jsxs("div", { children: [jsx("label", { children: "G:" }), jsx("input", { type: "number", name: "g", min: "0", max: "255", value: rgb.g, onChange: handleRgbChange })] }), jsxs("div", { children: [jsx("label", { children: "B:" }), jsx("input", { type: "number", name: "b", min: "0", max: "255", value: rgb.b, onChange: handleRgbChange })] })] })) }), jsxs("div", { className: styles$b.colorPickerInteractiveArea, children: [jsx("div", { className: styles$b.hueBar, ref: hueBarRef, onClick: handleHueBarClick, children: jsx("div", { className: styles$b.hueBarSlider, style: { top: `${(360 - hsv.h) / 360 * 100}%` } }) }), jsxs("div", { className: styles$b.colorArea, ref: colorAreaRef, onClick: handleColorAreaClick, children: [jsxs("div", { className: styles$b.colorAreaOverlay, children: [jsx("div", { className: styles$b.hueBackground, style: { backgroundColor: hueHex } }), jsx("div", { className: styles$b.whiteGradient }), jsx("div", { className: styles$b.blackGradient })] }), jsx("div", { className: styles$b.colorAreaCursor, style: {
|
|
3226
2483
|
left: `${hsv.s}%`,
|
|
3227
2484
|
top: `${100 - hsv.v}%`
|
|
3228
2485
|
} })] })] })] }));
|
|
3229
2486
|
};
|
|
3230
2487
|
|
|
3231
|
-
var styles$
|
|
2488
|
+
var styles$a = {"selectColor":"cw-input-color-module_selectColor__DTo3V","disabled":"cw-input-color-module_disabled__O1fK5","colorDropdown":"cw-input-color-module_colorDropdown__pX2bc"};
|
|
3232
2489
|
|
|
3233
|
-
const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled = false,
|
|
2490
|
+
const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled = false, width = '4rem', height = '2rem' }) => {
|
|
3234
2491
|
const [isOpen, setIsOpen] = useState(false);
|
|
3235
2492
|
const containerRef = useRef(null);
|
|
3236
2493
|
const dropdownRef = useRef(null);
|
|
@@ -3279,7 +2536,7 @@ const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled
|
|
|
3279
2536
|
};
|
|
3280
2537
|
}, [isOpen]);
|
|
3281
2538
|
const handleToggle = () => {
|
|
3282
|
-
if (disabled
|
|
2539
|
+
if (disabled)
|
|
3283
2540
|
return;
|
|
3284
2541
|
setIsOpen(prev => !prev);
|
|
3285
2542
|
};
|
|
@@ -3361,11 +2618,11 @@ const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled
|
|
|
3361
2618
|
break;
|
|
3362
2619
|
}
|
|
3363
2620
|
};
|
|
3364
|
-
return (jsxs(
|
|
2621
|
+
return (jsxs(Fragment, { children: [jsx("div", { ref: containerRef, onClick: handleToggle, className: `${styles$a.selectColor} ${disabled ? styles$a.disabled : ''}`, style: {
|
|
3365
2622
|
width,
|
|
3366
2623
|
height,
|
|
3367
2624
|
backgroundColor: value,
|
|
3368
|
-
}, "aria-label": "Open color picker", "aria-expanded": isOpen, "aria-haspopup": "dialog",
|
|
2625
|
+
}, "aria-label": "Open color picker", "aria-expanded": isOpen, "aria-haspopup": "dialog", role: "button", tabIndex: disabled ? -1 : 0, onKeyDown: handleKeyDown }), isOpen && createPortal(jsx("div", { ref: dropdownRef, className: styles$a.colorDropdown, style: dropdownStyle, role: "dialog", "aria-modal": "true", "aria-label": "Color picker", children: jsx(CwColorPicker, { initialColor: value, onChange: handleColorChange, previewText: previewText }) }), document.body)] }));
|
|
3369
2626
|
};
|
|
3370
2627
|
|
|
3371
2628
|
/**
|
|
@@ -3384,20 +2641,15 @@ const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled
|
|
|
3384
2641
|
* iconProps={{ id: "home" }}
|
|
3385
2642
|
* labelProps={{ children: "Name", width: "100px" }}
|
|
3386
2643
|
* buttonProps={{ children: "Ok", onclick:()=>{alert("hi")} }}
|
|
3387
|
-
* feedback={{ type: "danger", message: "This field is required" }}
|
|
3388
2644
|
* />
|
|
3389
2645
|
* ```
|
|
3390
2646
|
*/
|
|
3391
2647
|
function CwInputText(props) {
|
|
3392
|
-
const { alignProps, buttonProps, iconProps, labelProps, className,
|
|
3393
|
-
const feedbackMessages = feedback
|
|
3394
|
-
? Array.isArray(feedback) ? feedback : [feedback]
|
|
3395
|
-
: [];
|
|
2648
|
+
const { alignProps, buttonProps, iconProps, labelProps, className, ...inputProps } = props;
|
|
3396
2649
|
const containerClassName = className
|
|
3397
2650
|
? `cw-input-text ${className}`
|
|
3398
2651
|
: "cw-input-text";
|
|
3399
|
-
|
|
3400
|
-
return (jsxs("div", { className: containerClassName, "data-direction": flexDirection, children: [jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxs("div", { className: "cw-input-button", children: [jsx("input", { type: props.type ?? "text", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] })] }), feedbackMessages.map((feedbackItem, index) => (jsx("p", { className: "cw-input-info", "data-color": feedbackItem.type, children: feedbackItem.message }, index)))] }));
|
|
2652
|
+
return (jsx("div", { className: containerClassName, children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxs("div", { className: "cw-input-button", children: [jsx("input", { type: props.type ?? "text", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] })] }) }));
|
|
3401
2653
|
}
|
|
3402
2654
|
|
|
3403
2655
|
/**
|
|
@@ -3432,13 +2684,8 @@ function CwInputNumber(CwInputNumberProps) {
|
|
|
3432
2684
|
}
|
|
3433
2685
|
|
|
3434
2686
|
function CwTextArea(props) {
|
|
3435
|
-
const { alignProps, buttonProps, iconProps, labelProps, resize,
|
|
3436
|
-
|
|
3437
|
-
? Array.isArray(feedback) ? feedback : [feedback]
|
|
3438
|
-
: [];
|
|
3439
|
-
const flexDirection = alignProps?.flexDirection ?? "row";
|
|
3440
|
-
const dataDirection = { 'data-direction': flexDirection };
|
|
3441
|
-
return (jsxs("div", { className: "cw-text-area", ...dataDirection, style: style, children: [jsxs(CwAlign, { ...alignProps, children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("textarea", { ...textareaProps, itemProp: textareaProps.required === true ? "required" : "", style: { resize: resize } }), buttonProps && jsx(CwButton, { ...buttonProps })] }), feedbackMessages.map((feedbackItem, index) => (jsx("p", { className: "cw-input-info", "data-color": feedbackItem.type, children: feedbackItem.message }, index)))] }));
|
|
2687
|
+
const { alignProps, buttonProps, iconProps, labelProps, resize, ...textareaProps } = props;
|
|
2688
|
+
return (jsx("div", { className: "cw-text-area", children: jsxs(CwAlign, { ...alignProps, children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("textarea", { ...textareaProps, itemProp: textareaProps.required === true ? "required" : "", style: { ...textareaProps.style, resize: resize } }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
3442
2689
|
}
|
|
3443
2690
|
|
|
3444
2691
|
/**
|
|
@@ -3466,115 +2713,7 @@ function CwInputDate(props) {
|
|
|
3466
2713
|
return (jsx("div", { className: "cw-input-date", children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: "date", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
3467
2714
|
}
|
|
3468
2715
|
|
|
3469
|
-
var classes = {"datePicker":"cw-input-date-picker-
|
|
3470
|
-
|
|
3471
|
-
/**
|
|
3472
|
-
* Converts a Date or ISO string to a Temporal.PlainDate.
|
|
3473
|
-
*/
|
|
3474
|
-
function toPlainDate$1(dateString) {
|
|
3475
|
-
if (dateString instanceof Date) {
|
|
3476
|
-
return Temporal.PlainDate.from({
|
|
3477
|
-
year: dateString.getFullYear(),
|
|
3478
|
-
month: dateString.getMonth() + 1,
|
|
3479
|
-
day: dateString.getDate(),
|
|
3480
|
-
});
|
|
3481
|
-
}
|
|
3482
|
-
// ISO "YYYY-MM-DD" → direct parse
|
|
3483
|
-
return Temporal.PlainDate.from(dateString);
|
|
3484
|
-
}
|
|
3485
|
-
/**
|
|
3486
|
-
* Formats a date as DD.MM.YYYY (German locale).
|
|
3487
|
-
*/
|
|
3488
|
-
function toGermanDate(dateString) {
|
|
3489
|
-
const pd = toPlainDate$1(dateString);
|
|
3490
|
-
const day = String(pd.day).padStart(2, "0");
|
|
3491
|
-
const month = String(pd.month).padStart(2, "0");
|
|
3492
|
-
return `${day}.${month}.${pd.year}`;
|
|
3493
|
-
}
|
|
3494
|
-
/**
|
|
3495
|
-
* Formats a date as YYYY-MM-DD (ISO).
|
|
3496
|
-
*/
|
|
3497
|
-
function toISODate(dateString) {
|
|
3498
|
-
return toPlainDate$1(dateString).toString();
|
|
3499
|
-
}
|
|
3500
|
-
/**
|
|
3501
|
-
* Validates whether a string is a valid DD.MM.YYYY date.
|
|
3502
|
-
*/
|
|
3503
|
-
function isValidGermanDate(textDate) {
|
|
3504
|
-
return parseGermanDate(textDate) !== null;
|
|
3505
|
-
}
|
|
3506
|
-
/**
|
|
3507
|
-
* Converts a DD.MM.YYYY string to YYYY-MM-DD, or null if invalid.
|
|
3508
|
-
*/
|
|
3509
|
-
function germanDateToISO(textDate) {
|
|
3510
|
-
const pd = parseGermanDate(textDate);
|
|
3511
|
-
return pd ? pd.toString() : null;
|
|
3512
|
-
}
|
|
3513
|
-
/**
|
|
3514
|
-
* Converts a DD.MM.YYYY string to a Date object, or null if invalid.
|
|
3515
|
-
*/
|
|
3516
|
-
function germanDateToDate(textDate) {
|
|
3517
|
-
const pd = parseGermanDate(textDate);
|
|
3518
|
-
if (!pd)
|
|
3519
|
-
return null;
|
|
3520
|
-
return new Date(pd.year, pd.month - 1, pd.day);
|
|
3521
|
-
}
|
|
3522
|
-
/**
|
|
3523
|
-
* Returns the number of days in the month and the Monday-based
|
|
3524
|
-
* weekday offset (0 = Monday) for the 1st of the month.
|
|
3525
|
-
*/
|
|
3526
|
-
function computeCalendarGrid(internalDate) {
|
|
3527
|
-
const pd = Temporal.PlainDate.from({
|
|
3528
|
-
year: internalDate.getFullYear(),
|
|
3529
|
-
month: internalDate.getMonth() + 1,
|
|
3530
|
-
day: 1,
|
|
3531
|
-
});
|
|
3532
|
-
const daysInMonth = pd.daysInMonth;
|
|
3533
|
-
const startDay = pd.dayOfWeek - 1; // Temporal: 1=Mon … 7=Sun → 0-based Mon
|
|
3534
|
-
return { daysInMonth, startDay };
|
|
3535
|
-
}
|
|
3536
|
-
/**
|
|
3537
|
-
* Returns true when the given day in the internalDate's month/year
|
|
3538
|
-
* matches the selected ISO value string.
|
|
3539
|
-
*/
|
|
3540
|
-
function isSelectedDay(internalDate, day, value) {
|
|
3541
|
-
const pd = Temporal.PlainDate.from({
|
|
3542
|
-
year: internalDate.getFullYear(),
|
|
3543
|
-
month: internalDate.getMonth() + 1,
|
|
3544
|
-
day,
|
|
3545
|
-
});
|
|
3546
|
-
return pd.toString() === value;
|
|
3547
|
-
}
|
|
3548
|
-
/**
|
|
3549
|
-
* Returns a new Date set to the 1st of the month offset by `direction` months.
|
|
3550
|
-
*/
|
|
3551
|
-
function computeNextMonthDate(currentDate, direction) {
|
|
3552
|
-
const pd = Temporal.PlainDate.from({
|
|
3553
|
-
year: currentDate.getFullYear(),
|
|
3554
|
-
month: currentDate.getMonth() + 1,
|
|
3555
|
-
day: 1,
|
|
3556
|
-
});
|
|
3557
|
-
const moved = pd.add({ months: direction });
|
|
3558
|
-
return new Date(moved.year, moved.month - 1, moved.day);
|
|
3559
|
-
}
|
|
3560
|
-
// ── internal helper ────────────────────────────────────────────────────
|
|
3561
|
-
/**
|
|
3562
|
-
* Strictly parses a DD.MM.YYYY string into a Temporal.PlainDate, or null.
|
|
3563
|
-
*/
|
|
3564
|
-
function parseGermanDate(text) {
|
|
3565
|
-
const match = /^(\d{2})\.(\d{2})\.(\d{4})$/.exec(text);
|
|
3566
|
-
if (!match)
|
|
3567
|
-
return null;
|
|
3568
|
-
const day = Number(match[1]);
|
|
3569
|
-
const month = Number(match[2]);
|
|
3570
|
-
const year = Number(match[3]);
|
|
3571
|
-
try {
|
|
3572
|
-
return Temporal.PlainDate.from({ year, month, day }, { overflow: "reject" });
|
|
3573
|
-
}
|
|
3574
|
-
catch {
|
|
3575
|
-
return null;
|
|
3576
|
-
}
|
|
3577
|
-
}
|
|
2716
|
+
var classes = {"datePicker":"cw-input-date-picker-module_datePicker__jogOq","input":"cw-input-date-picker-module_input__uQshH","calendar":"cw-input-date-picker-module_calendar__q39ic","calendarHeader":"cw-input-date-picker-module_calendarHeader__1btPK","arrowButton":"cw-input-date-picker-module_arrowButton__23tNc","calendarTitle":"cw-input-date-picker-module_calendarTitle__oOODw","calendarBody":"cw-input-date-picker-module_calendarBody__-711a","calendarDay":"cw-input-date-picker-module_calendarDay__z-Mmv","selected":"cw-input-date-picker-module_selected__XQgR7","todayButton":"cw-input-date-picker-module_todayButton__oYamC","emptyDay":"cw-input-date-picker-module_emptyDay__lbI5B"};
|
|
3578
2717
|
|
|
3579
2718
|
const CwInputDatePicker = ({ value, onChange }) => {
|
|
3580
2719
|
const [isCalendarOpen, setIsCalendarOpen] = useState(false);
|
|
@@ -3599,13 +2738,21 @@ const CwInputDatePicker = ({ value, onChange }) => {
|
|
|
3599
2738
|
useEffect(() => {
|
|
3600
2739
|
setTextDate(toGermanDate(value));
|
|
3601
2740
|
}, [value]);
|
|
2741
|
+
function toGermanDate(dateString) {
|
|
2742
|
+
return moment(dateString).format("DD.MM.YYYY");
|
|
2743
|
+
}
|
|
2744
|
+
function toISODate(dateString) {
|
|
2745
|
+
return moment(dateString).format("YYYY-MM-DD");
|
|
2746
|
+
}
|
|
3602
2747
|
const submitInput = () => {
|
|
3603
|
-
if (
|
|
3604
|
-
const
|
|
3605
|
-
const
|
|
3606
|
-
if (
|
|
2748
|
+
if (moment(textDate, "DD.MM.YYYY", true).isValid()) {
|
|
2749
|
+
const inputValue = textDate;
|
|
2750
|
+
const momentDate = moment(inputValue, "DD.MM.YYYY", true);
|
|
2751
|
+
if (momentDate.isValid()) {
|
|
2752
|
+
const newDateString = momentDate.format("YYYY-MM-DD");
|
|
3607
2753
|
if (newDateString !== value) {
|
|
3608
|
-
|
|
2754
|
+
const newDateString = momentDate.format("YYYY-MM-DD");
|
|
2755
|
+
setInternalDate(momentDate.toDate());
|
|
3609
2756
|
onChange?.(newDateString);
|
|
3610
2757
|
}
|
|
3611
2758
|
setIsCalendarOpen(false);
|
|
@@ -3642,7 +2789,7 @@ const CwInputDatePicker = ({ value, onChange }) => {
|
|
|
3642
2789
|
setIsCalendarOpen(false);
|
|
3643
2790
|
};
|
|
3644
2791
|
const handleClickMonthArrow = (direction) => {
|
|
3645
|
-
setInternalDate(prevDate =>
|
|
2792
|
+
setInternalDate(prevDate => new Date(prevDate.getFullYear(), prevDate.getMonth() + direction, 1));
|
|
3646
2793
|
};
|
|
3647
2794
|
const handlePressEnter = (event) => {
|
|
3648
2795
|
if (event.key === "Enter" && submitInput()) {
|
|
@@ -3655,21 +2802,23 @@ const CwInputDatePicker = ({ value, onChange }) => {
|
|
|
3655
2802
|
}
|
|
3656
2803
|
};
|
|
3657
2804
|
const generateCalendarDays = () => {
|
|
3658
|
-
const
|
|
2805
|
+
const daysInMonth = new Date(internalDate.getFullYear(), internalDate.getMonth() + 1, 0).getDate();
|
|
2806
|
+
const startDay = new Date(internalDate.getFullYear(), internalDate.getMonth(), 1).getDay() - 1;
|
|
3659
2807
|
const calendarDays = new Array;
|
|
3660
2808
|
for (let i = 0; i < startDay; i++) {
|
|
3661
2809
|
calendarDays.push(jsx("div", { className: classes.emptyDay }, `empty-${i}`));
|
|
3662
2810
|
}
|
|
3663
2811
|
for (let day = 1; day <= daysInMonth; day++) {
|
|
3664
|
-
const
|
|
3665
|
-
|
|
2812
|
+
const currentDate = new Date(internalDate.getFullYear(), internalDate.getMonth(), day);
|
|
2813
|
+
const isSelected = moment(currentDate).format("YYYY-MM-DD") === value;
|
|
2814
|
+
calendarDays.push(jsx("div", { className: `${classes.calendarDay}${isSelected ? ` ${classes.selected}` : ""}`, onClick: () => handleClickDay(day), children: day }, day));
|
|
3666
2815
|
}
|
|
3667
2816
|
return calendarDays;
|
|
3668
2817
|
};
|
|
3669
2818
|
return (jsxs("div", { className: classes.datePicker, children: [jsx("input", { type: "text", value: textDate, onChange: e => setTextDate(e.currentTarget.value), onFocus: () => {
|
|
3670
2819
|
setInternalDate(new Date(value));
|
|
3671
2820
|
setIsCalendarOpen(true);
|
|
3672
|
-
}, onBlur: handleBlurInput, onKeyDown: handlePressEnter, "data-valid":
|
|
2821
|
+
}, onBlur: handleBlurInput, onKeyDown: handlePressEnter, "data-valid": moment(textDate, "DD.MM.YYYY", true).isValid(), ref: inputRef, className: classes.input }), isCalendarOpen && (jsxs("div", { className: classes.calendar, ref: calendarRef, children: [jsxs("div", { className: classes.calendarHeader, children: [jsx("button", { className: classes.arrowButton, onClick: () => handleClickMonthArrow(-1), children: "<" }), jsxs("span", { className: classes.calendarTitle, children: [internalDate.toLocaleString("default", { month: "long" }), " ", internalDate.getFullYear()] }), jsx("button", { className: classes.arrowButton, onClick: () => handleClickMonthArrow(1), children: ">" })] }), jsx("div", { className: classes.calendarBody, children: generateCalendarDays() }), jsx("button", { className: classes.todayButton, onClick: handleClickToday, children: "Today" })] }))] }));
|
|
3673
2822
|
};
|
|
3674
2823
|
|
|
3675
2824
|
/**
|
|
@@ -3722,47 +2871,6 @@ function CwTime(props) {
|
|
|
3722
2871
|
return (jsx("div", { className: "cw-input-date", children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: "time", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
3723
2872
|
}
|
|
3724
2873
|
|
|
3725
|
-
function parseDateParts(dateStr, format) {
|
|
3726
|
-
const parts = dateStr.split(/[.\-\/]/);
|
|
3727
|
-
if (parts.length !== 3)
|
|
3728
|
-
return null;
|
|
3729
|
-
let year, month, day;
|
|
3730
|
-
switch (format) {
|
|
3731
|
-
case "DD.MM.YYYY":
|
|
3732
|
-
case "DD/MM/YYYY":
|
|
3733
|
-
day = Number(parts[0]);
|
|
3734
|
-
month = Number(parts[1]);
|
|
3735
|
-
year = Number(parts[2]);
|
|
3736
|
-
break;
|
|
3737
|
-
case "MM/DD/YYYY":
|
|
3738
|
-
month = Number(parts[0]);
|
|
3739
|
-
day = Number(parts[1]);
|
|
3740
|
-
year = Number(parts[2]);
|
|
3741
|
-
break;
|
|
3742
|
-
case "YYYY-MM-DD":
|
|
3743
|
-
year = Number(parts[0]);
|
|
3744
|
-
month = Number(parts[1]);
|
|
3745
|
-
day = Number(parts[2]);
|
|
3746
|
-
break;
|
|
3747
|
-
}
|
|
3748
|
-
try {
|
|
3749
|
-
return Temporal.PlainDate.from({ year, month, day });
|
|
3750
|
-
}
|
|
3751
|
-
catch {
|
|
3752
|
-
return null;
|
|
3753
|
-
}
|
|
3754
|
-
}
|
|
3755
|
-
function formatPlainDate(pd, format) {
|
|
3756
|
-
const dd = pd.day.toString().padStart(2, "0");
|
|
3757
|
-
const mm = pd.month.toString().padStart(2, "0");
|
|
3758
|
-
const yyyy = pd.year.toString().padStart(4, "0");
|
|
3759
|
-
switch (format) {
|
|
3760
|
-
case "DD.MM.YYYY": return `${dd}.${mm}.${yyyy}`;
|
|
3761
|
-
case "DD/MM/YYYY": return `${dd}/${mm}/${yyyy}`;
|
|
3762
|
-
case "MM/DD/YYYY": return `${mm}/${dd}/${yyyy}`;
|
|
3763
|
-
case "YYYY-MM-DD": return `${yyyy}-${mm}-${dd}`;
|
|
3764
|
-
}
|
|
3765
|
-
}
|
|
3766
2874
|
/**
|
|
3767
2875
|
* Input for entering a string of text as a date
|
|
3768
2876
|
* @remarks
|
|
@@ -3792,8 +2900,11 @@ function CwInputDateText(props) {
|
|
|
3792
2900
|
const format = dateFormat ?? displayFormat;
|
|
3793
2901
|
const width = size ?? 12;
|
|
3794
2902
|
const formattedDate = (date, inFormat, outFormat) => {
|
|
3795
|
-
|
|
3796
|
-
|
|
2903
|
+
if (moment(date, inFormat, true).isValid()) {
|
|
2904
|
+
return moment(date, inFormat).format(outFormat);
|
|
2905
|
+
}
|
|
2906
|
+
else
|
|
2907
|
+
return "";
|
|
3797
2908
|
};
|
|
3798
2909
|
const [date, setDate] = useState("");
|
|
3799
2910
|
const [displayedDate, setDisplayedDate] = useState("");
|
|
@@ -3812,9 +2923,8 @@ function CwInputDateText(props) {
|
|
|
3812
2923
|
const onChangeInputText = (e) => {
|
|
3813
2924
|
const newDate = e.target.value;
|
|
3814
2925
|
setDisplayedDate(newDate);
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
setDate(formatPlainDate(pd, internalFormat));
|
|
2926
|
+
if (moment(newDate, format, true).isValid()) {
|
|
2927
|
+
setDate(moment(newDate, format).format(internalFormat));
|
|
3818
2928
|
}
|
|
3819
2929
|
else {
|
|
3820
2930
|
setDate("");
|
|
@@ -3823,9 +2933,8 @@ function CwInputDateText(props) {
|
|
|
3823
2933
|
const onChangeInputDate = (e) => {
|
|
3824
2934
|
const newDate = e.target.value;
|
|
3825
2935
|
setDate(newDate);
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
setDisplayedDate(formatPlainDate(pd, format));
|
|
2936
|
+
if (moment(newDate, internalFormat, true).isValid())
|
|
2937
|
+
setDisplayedDate(moment(newDate, internalFormat).format(format));
|
|
3829
2938
|
else
|
|
3830
2939
|
setDisplayedDate("");
|
|
3831
2940
|
};
|
|
@@ -4006,7 +3115,7 @@ const CwImageArea = forwardRef((props, ref) => {
|
|
|
4006
3115
|
});
|
|
4007
3116
|
CwImageArea.displayName = "CwImageArea";
|
|
4008
3117
|
|
|
4009
|
-
var styles$
|
|
3118
|
+
var styles$9 = {"cw-weekday-selector":"cw-weekday-selector-module_cw-weekday-selector__Iz4GZ"};
|
|
4010
3119
|
|
|
4011
3120
|
/**
|
|
4012
3121
|
* This class represents a week where days can be selected or unselected
|
|
@@ -4146,17 +3255,9 @@ const CwWeekdaySelector = ({ value = "", onChange, disabled = false }) => {
|
|
|
4146
3255
|
setSelectedDays(newWeekdays);
|
|
4147
3256
|
onChange?.(newWeekdays.toString());
|
|
4148
3257
|
};
|
|
4149
|
-
return (jsx("div", { className: styles$
|
|
3258
|
+
return (jsx("div", { className: styles$9["cw-weekday-selector"], children: Weekdays.getFullWeek().map(day => (jsx("input", { type: "checkbox", "data-day": day, checked: selectedDays.toArray().includes(day), onChange: (e) => handleChange(day, e.target.checked), disabled: disabled }, day))) }));
|
|
4150
3259
|
};
|
|
4151
3260
|
|
|
4152
|
-
var styles$b = {"check-container":"cw-check-module__check-container__4nscZ","checkbox-group-container":"cw-check-module__checkbox-group-container__WMNbG"};
|
|
4153
|
-
|
|
4154
|
-
function CwCheck(props) {
|
|
4155
|
-
const { labelProps, labelText, iconProps, alignment = "row", className, ...inputProps } = props;
|
|
4156
|
-
const displayText = labelText || labelProps?.text;
|
|
4157
|
-
return (jsx("div", { className: `cw-check ${styles$b["check-container"]}${className ? ` ${className}` : ''}`, children: jsxs("label", { "data-direction": alignment, children: [jsx("input", { type: "checkbox", ...inputProps }), displayText && (jsxs("span", { className: "cw-icon-text", children: [iconProps && jsx(CwIcon, { ...iconProps }), displayText] }))] }) }));
|
|
4158
|
-
}
|
|
4159
|
-
|
|
4160
3261
|
function CwCheckbox(CwCheckboxProps) {
|
|
4161
3262
|
const handleChange = (e) => {
|
|
4162
3263
|
CwCheckboxProps.onChange?.(e.target.checked);
|
|
@@ -4172,23 +3273,6 @@ function CwCheckbox(CwCheckboxProps) {
|
|
|
4172
3273
|
: "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [inputElement, CwCheckboxProps.labelName ? (jsx("label", { htmlFor: CwCheckboxProps.id, className: CwCheckboxProps.labelClassName, children: CwCheckboxProps.labelName })) : null] }));
|
|
4173
3274
|
}
|
|
4174
3275
|
|
|
4175
|
-
function CwCheckboxGroup({ options, value = [], onChange, labelProps, alignProps, required, disabled, optionsAlignment = "row", className, feedback, }) {
|
|
4176
|
-
const handleChange = (optionValue, checked) => {
|
|
4177
|
-
if (checked) {
|
|
4178
|
-
onChange([...value, optionValue]);
|
|
4179
|
-
}
|
|
4180
|
-
else {
|
|
4181
|
-
onChange(value.filter(v => v !== optionValue));
|
|
4182
|
-
}
|
|
4183
|
-
};
|
|
4184
|
-
const feedbackMessages = feedback
|
|
4185
|
-
? Array.isArray(feedback) ? feedback : [feedback]
|
|
4186
|
-
: [];
|
|
4187
|
-
const flexDirection = alignProps?.flexDirection ?? "row";
|
|
4188
|
-
const dataDirection = { 'data-direction': flexDirection };
|
|
4189
|
-
return (jsxs("div", { className: `cw-checkbox-group ${styles$b["checkbox-group-container"]}${className ? ` ${className}` : ''}`, ...dataDirection, children: [jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsx("div", { className: `${optionsAlignment === "row" ? "cw-flex-column cw-gap-small" : "cw-flex-row cw-flex-wrap"}`, children: options.map((option) => (jsx(CwCheck, { labelText: option.label, checked: value.includes(option.value), disabled: disabled || option.disabled, alignment: optionsAlignment, onChange: (e) => handleChange(option.value, e.target.checked) }, option.value))) })] }), feedbackMessages.map((feedbackItem, index) => (jsx("p", { className: "cw-input-info", "data-color": feedbackItem.type, children: feedbackItem.message }, index)))] }));
|
|
4190
|
-
}
|
|
4191
|
-
|
|
4192
3276
|
function CwToggle(props) {
|
|
4193
3277
|
const { labelProps, labelText, iconProps, alignment = "row", className, style, ...inputProps } = props;
|
|
4194
3278
|
const displayText = labelText || labelProps?.text;
|
|
@@ -4204,16 +3288,13 @@ function CwToggle(props) {
|
|
|
4204
3288
|
* @example
|
|
4205
3289
|
* <CwSelect>
|
|
4206
3290
|
* <CwOption>A</CwOption>
|
|
4207
|
-
* <CwOption
|
|
3291
|
+
* <CwOption>B</CwOption>
|
|
4208
3292
|
* <CwOption>C</CwOption>
|
|
4209
3293
|
* </CwSelect>
|
|
4210
3294
|
*/
|
|
4211
3295
|
function CwOption(props) {
|
|
4212
|
-
const { text,
|
|
4213
|
-
|
|
4214
|
-
? { ...style, backgroundColor: color, color: getContrastColor(color) }
|
|
4215
|
-
: style;
|
|
4216
|
-
return (jsx("option", { className: "cw-option", style: mergedStyle, ...optionProps, children: optionProps.children ?? text }));
|
|
3296
|
+
const { text, ...optionProps } = props;
|
|
3297
|
+
return (jsx("option", { className: "cw-option", ...optionProps, children: optionProps.children ?? text }));
|
|
4217
3298
|
}
|
|
4218
3299
|
|
|
4219
3300
|
/**
|
|
@@ -4241,254 +3322,10 @@ function CwOption(props) {
|
|
|
4241
3322
|
* </CwSelect>
|
|
4242
3323
|
*/
|
|
4243
3324
|
function CwSelect(props) {
|
|
4244
|
-
const { alignProps, labelProps, buttonProps, iconProps, placeholder,
|
|
4245
|
-
const
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
const flexDirection = alignProps?.flexDirection ?? "row";
|
|
4249
|
-
const dataDirection = { 'data-direction': flexDirection };
|
|
4250
|
-
const { backgroundColor, color: textColor, ...wrapperStyle } = style ?? {};
|
|
4251
|
-
return (jsxs("div", { className: `cw-select${className ? ` ${className}` : ''}`, ...dataDirection, style: wrapperStyle, children: [jsxs(CwAlign, { ...alignProps, itemProp: selectProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxs("div", { className: "cw-flex-row cw-gap-small cw-flex-grow", children: [jsxs("select", { ...selectProps, style: backgroundColor ? { backgroundColor, color: textColor } : undefined, children: [placeholder && jsx(CwOption, { value: "", children: placeholder }), children] }), buttonProps && jsx(CwButton, { ...buttonProps })] })] }), feedbackMessages.map((feedbackItem, index) => (jsx("p", { className: "cw-input-info", "data-color": feedbackItem.type, children: feedbackItem.message }, index)))] }));
|
|
4252
|
-
}
|
|
4253
|
-
|
|
4254
|
-
// ─── Default strategy: below anchor, match width, flip above if needed ────────
|
|
4255
|
-
function defaultPositionStrategy(anchorRect, panelRect) {
|
|
4256
|
-
const panelH = panelRect?.height ?? 200;
|
|
4257
|
-
const spaceBelow = window.innerHeight - anchorRect.bottom;
|
|
4258
|
-
const top = spaceBelow >= panelH + 4
|
|
4259
|
-
? anchorRect.bottom + 4
|
|
4260
|
-
: Math.max(4, anchorRect.top - panelH);
|
|
4261
|
-
const width = anchorRect.width;
|
|
4262
|
-
const left = Math.max(4, Math.min(anchorRect.left, window.innerWidth - width - 4));
|
|
4263
|
-
return { top, left, width };
|
|
4264
|
-
}
|
|
4265
|
-
// ─── Hook ─────────────────────────────────────────────────────────────────────
|
|
4266
|
-
/**
|
|
4267
|
-
* Generic portal-based dropdown panel hook.
|
|
4268
|
-
*
|
|
4269
|
-
* Renders the panel as a direct child of `<body>` via `createPortal` so it
|
|
4270
|
-
* escapes any `overflow: hidden/auto` ancestor (dialogs, tabs, cards, etc.).
|
|
4271
|
-
* Positions the panel with `position: fixed` computed from the anchor element's
|
|
4272
|
-
* `getBoundingClientRect()`, and repositions on scroll and resize.
|
|
4273
|
-
*
|
|
4274
|
-
* The fix pattern is the same as {@link usePickerPopup} used by `CwDatePicker`.
|
|
4275
|
-
*
|
|
4276
|
-
* > **Future migration note:** Once the project's minimum browser baseline
|
|
4277
|
-
* > reaches Firefox 147 / Safari 26 (CSS Anchor Positioning — Baseline 2026),
|
|
4278
|
-
* > this hook can be replaced with `popover="manual"` + CSS `anchor()` with
|
|
4279
|
-
* > zero JS positioning.
|
|
4280
|
-
*
|
|
4281
|
-
* @example
|
|
4282
|
-
* ```tsx
|
|
4283
|
-
* const wrapperRef = useRef<HTMLDivElement>(null);
|
|
4284
|
-
* const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
4285
|
-
* anchorRef: wrapperRef,
|
|
4286
|
-
* isOpen,
|
|
4287
|
-
* onClose: () => setIsOpen(false),
|
|
4288
|
-
* });
|
|
4289
|
-
*
|
|
4290
|
-
* return (
|
|
4291
|
-
* <div ref={wrapperRef}>
|
|
4292
|
-
* <input ... />
|
|
4293
|
-
* {renderPanel(
|
|
4294
|
-
* <div ref={panelRef} style={panelStyle} className={styles.dropdown}>
|
|
4295
|
-
* {options}
|
|
4296
|
-
* </div>
|
|
4297
|
-
* )}
|
|
4298
|
-
* </div>
|
|
4299
|
-
* );
|
|
4300
|
-
* ```
|
|
4301
|
-
*/
|
|
4302
|
-
function useDropdownPortal({ anchorRef, isOpen, onClose, positionStrategy = defaultPositionStrategy, }) {
|
|
4303
|
-
const panelRef = useRef(null);
|
|
4304
|
-
const [style, setStyle] = useState({
|
|
4305
|
-
position: "fixed",
|
|
4306
|
-
top: 0,
|
|
4307
|
-
left: 0,
|
|
4308
|
-
width: "auto",
|
|
4309
|
-
zIndex: 1000,
|
|
4310
|
-
right: "auto",
|
|
4311
|
-
marginLeft: 0,
|
|
4312
|
-
});
|
|
4313
|
-
const reposition = useCallback(() => {
|
|
4314
|
-
const anchor = anchorRef.current;
|
|
4315
|
-
if (!anchor)
|
|
4316
|
-
return;
|
|
4317
|
-
const anchorRect = anchor.getBoundingClientRect();
|
|
4318
|
-
const panelRect = panelRef.current?.getBoundingClientRect() ?? null;
|
|
4319
|
-
const { top, left, width } = positionStrategy(anchorRect, panelRect);
|
|
4320
|
-
setStyle({
|
|
4321
|
-
position: "fixed",
|
|
4322
|
-
top,
|
|
4323
|
-
left,
|
|
4324
|
-
width: width ?? "auto",
|
|
4325
|
-
zIndex: 1000,
|
|
4326
|
-
right: "auto",
|
|
4327
|
-
marginLeft: 0,
|
|
4328
|
-
});
|
|
4329
|
-
}, [anchorRef, positionStrategy]);
|
|
4330
|
-
// Reposition when opened; re-measure after first paint to get real panel size
|
|
4331
|
-
useEffect(() => {
|
|
4332
|
-
if (!isOpen)
|
|
4333
|
-
return;
|
|
4334
|
-
reposition();
|
|
4335
|
-
const raf = requestAnimationFrame(reposition);
|
|
4336
|
-
const handleUpdate = () => reposition();
|
|
4337
|
-
window.addEventListener("resize", handleUpdate);
|
|
4338
|
-
// Capture phase catches scroll on all scrollable ancestors
|
|
4339
|
-
window.addEventListener("scroll", handleUpdate, true);
|
|
4340
|
-
return () => {
|
|
4341
|
-
cancelAnimationFrame(raf);
|
|
4342
|
-
window.removeEventListener("resize", handleUpdate);
|
|
4343
|
-
window.removeEventListener("scroll", handleUpdate, true);
|
|
4344
|
-
};
|
|
4345
|
-
}, [isOpen, reposition]);
|
|
4346
|
-
// Close when the anchor scrolls out of view in any overflow container
|
|
4347
|
-
useEffect(() => {
|
|
4348
|
-
if (!isOpen)
|
|
4349
|
-
return;
|
|
4350
|
-
const anchor = anchorRef.current;
|
|
4351
|
-
if (!anchor)
|
|
4352
|
-
return;
|
|
4353
|
-
const observer = new IntersectionObserver(([entry]) => { if (!entry.isIntersecting)
|
|
4354
|
-
onClose(); }, { threshold: 0 });
|
|
4355
|
-
observer.observe(anchor);
|
|
4356
|
-
return () => observer.disconnect();
|
|
4357
|
-
}, [isOpen, anchorRef, onClose]);
|
|
4358
|
-
// Close on outside click (anchor + panel are both considered "inside")
|
|
4359
|
-
useEffect(() => {
|
|
4360
|
-
if (!isOpen)
|
|
4361
|
-
return;
|
|
4362
|
-
const handleMouseDown = (e) => {
|
|
4363
|
-
const target = e.target;
|
|
4364
|
-
if (anchorRef.current?.contains(target) || panelRef.current?.contains(target))
|
|
4365
|
-
return;
|
|
4366
|
-
onClose();
|
|
4367
|
-
};
|
|
4368
|
-
document.addEventListener("mousedown", handleMouseDown);
|
|
4369
|
-
return () => document.removeEventListener("mousedown", handleMouseDown);
|
|
4370
|
-
}, [isOpen, onClose, anchorRef, panelRef]);
|
|
4371
|
-
const renderPanel = useCallback((children) => {
|
|
4372
|
-
if (!isOpen)
|
|
4373
|
-
return null;
|
|
4374
|
-
return createPortal(children, document.body);
|
|
4375
|
-
}, [isOpen]);
|
|
4376
|
-
return { panelRef, panelStyle: style, renderPanel };
|
|
4377
|
-
}
|
|
4378
|
-
|
|
4379
|
-
var dropdownStyles = {"dropdown":"cw-choice-dropdown-module__dropdown__P0b4j","option":"cw-choice-dropdown-module__option__uR-ro","optionFocused":"cw-choice-dropdown-module__optionFocused__BYMxj","optionSelected":"cw-choice-dropdown-module__optionSelected__Lt8Xg","optionDisabled":"cw-choice-dropdown-module__optionDisabled__n3scM","searchBox":"cw-choice-dropdown-module__searchBox__0gox7","searchInput":"cw-choice-dropdown-module__searchInput__G5oRs","emptyState":"cw-choice-dropdown-module__emptyState__HO0Y7","colorCircle":"cw-choice-dropdown-module__colorCircle__x7mI9"};
|
|
4380
|
-
|
|
4381
|
-
/**
|
|
4382
|
-
* Custom dropdown component with colour-coded options, optional search filter, and full
|
|
4383
|
-
* keyboard navigation (↑ ↓ Enter Esc Tab).
|
|
4384
|
-
*
|
|
4385
|
-
* Use `CwDropdown` instead of the native `<select>` when options need colour indicators or
|
|
4386
|
-
* when inline search filtering is required.
|
|
4387
|
-
*
|
|
4388
|
-
* @example
|
|
4389
|
-
* <CwDropdown
|
|
4390
|
-
* options={[{ value: 'a', label: 'Option A', color: '#1976D2' }]}
|
|
4391
|
-
* value={selected}
|
|
4392
|
-
* onChange={setSelected}
|
|
4393
|
-
* labelProps={{ text: 'My Label' }}
|
|
4394
|
-
* />
|
|
4395
|
-
*/
|
|
4396
|
-
function CwDropdown({ options, value, onChange, labelProps, alignProps, placeholder = "Select...", allowSearch = false, disabled = false, required = false, feedback, className, style, ...otherProps }) {
|
|
4397
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
4398
|
-
const [searchText, setSearchText] = useState("");
|
|
4399
|
-
const [highlightedIndex, setHighlightedIndex] = useState(-1);
|
|
4400
|
-
const containerRef = useRef(null);
|
|
4401
|
-
const wrapperRef = useRef(null);
|
|
4402
|
-
const inputRef = useRef(null);
|
|
4403
|
-
const highlightedItemRef = useRef(null);
|
|
4404
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
4405
|
-
anchorRef: wrapperRef,
|
|
4406
|
-
isOpen,
|
|
4407
|
-
onClose: () => { setIsOpen(false); setSearchText(""); setHighlightedIndex(-1); },
|
|
4408
|
-
});
|
|
4409
|
-
const selectedOption = options.find(opt => opt.value === value);
|
|
4410
|
-
// Filter options based on search
|
|
4411
|
-
const filteredOptions = searchText
|
|
4412
|
-
? options.filter(opt => opt.label.toLowerCase().includes(searchText.toLowerCase()))
|
|
4413
|
-
: options;
|
|
4414
|
-
// Feedback handling
|
|
4415
|
-
const feedbackMessages = feedback
|
|
4416
|
-
? Array.isArray(feedback) ? feedback : [feedback]
|
|
4417
|
-
: [];
|
|
4418
|
-
// Scroll highlighted item into view
|
|
4419
|
-
useEffect(() => {
|
|
4420
|
-
if (isOpen && highlightedItemRef.current) {
|
|
4421
|
-
highlightedItemRef.current.scrollIntoView({
|
|
4422
|
-
block: "nearest",
|
|
4423
|
-
behavior: "smooth",
|
|
4424
|
-
});
|
|
4425
|
-
}
|
|
4426
|
-
}, [highlightedIndex, isOpen]);
|
|
4427
|
-
const handleTriggerClick = useCallback(() => {
|
|
4428
|
-
if (!disabled) {
|
|
4429
|
-
setIsOpen(!isOpen);
|
|
4430
|
-
setHighlightedIndex(-1);
|
|
4431
|
-
if (!isOpen && allowSearch) {
|
|
4432
|
-
setTimeout(() => inputRef.current?.focus(), 0);
|
|
4433
|
-
}
|
|
4434
|
-
}
|
|
4435
|
-
}, [isOpen, disabled, allowSearch]);
|
|
4436
|
-
const handleOptionSelect = useCallback((optionValue) => {
|
|
4437
|
-
const selected = options.find(opt => opt.value === optionValue);
|
|
4438
|
-
if (selected && !selected.disabled) {
|
|
4439
|
-
onChange?.(optionValue);
|
|
4440
|
-
setIsOpen(false);
|
|
4441
|
-
setSearchText("");
|
|
4442
|
-
setHighlightedIndex(-1);
|
|
4443
|
-
}
|
|
4444
|
-
}, [options, onChange]);
|
|
4445
|
-
const handleSearchChange = useCallback((e) => {
|
|
4446
|
-
setSearchText(e.target.value);
|
|
4447
|
-
setHighlightedIndex(-1);
|
|
4448
|
-
}, []);
|
|
4449
|
-
const handleKeyDown = useCallback((e) => {
|
|
4450
|
-
if (!isOpen) {
|
|
4451
|
-
if (e.key === "Enter" || e.key === " " || e.key === "ArrowDown") {
|
|
4452
|
-
e.preventDefault();
|
|
4453
|
-
setIsOpen(true);
|
|
4454
|
-
}
|
|
4455
|
-
return;
|
|
4456
|
-
}
|
|
4457
|
-
switch (e.key) {
|
|
4458
|
-
case "ArrowDown":
|
|
4459
|
-
e.preventDefault();
|
|
4460
|
-
setHighlightedIndex(prev => prev < filteredOptions.length - 1 ? prev + 1 : 0);
|
|
4461
|
-
break;
|
|
4462
|
-
case "ArrowUp":
|
|
4463
|
-
e.preventDefault();
|
|
4464
|
-
setHighlightedIndex(prev => prev > 0 ? prev - 1 : filteredOptions.length - 1);
|
|
4465
|
-
break;
|
|
4466
|
-
case "Enter":
|
|
4467
|
-
e.preventDefault();
|
|
4468
|
-
if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {
|
|
4469
|
-
handleOptionSelect(filteredOptions[highlightedIndex].value);
|
|
4470
|
-
}
|
|
4471
|
-
break;
|
|
4472
|
-
case "Escape":
|
|
4473
|
-
e.preventDefault();
|
|
4474
|
-
setIsOpen(false);
|
|
4475
|
-
setSearchText("");
|
|
4476
|
-
setHighlightedIndex(-1);
|
|
4477
|
-
break;
|
|
4478
|
-
case "Tab":
|
|
4479
|
-
setIsOpen(false);
|
|
4480
|
-
setSearchText("");
|
|
4481
|
-
setHighlightedIndex(-1);
|
|
4482
|
-
break;
|
|
4483
|
-
}
|
|
4484
|
-
}, [isOpen, highlightedIndex, filteredOptions, handleOptionSelect]);
|
|
4485
|
-
const flexDirection = alignProps?.flexDirection ?? "row";
|
|
4486
|
-
return (jsxs("div", { ref: containerRef, className: `cw-dropdown${className ? ` ${className}` : ""}`, "data-direction": flexDirection, style: style, ...otherProps, children: [jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-dropdown-wrapper", ref: wrapperRef, children: [jsx("button", { type: "button", className: "cw-dropdown-trigger", onClick: handleTriggerClick, onKeyDown: handleKeyDown, disabled: disabled, "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-label": selectedOption?.label || placeholder, children: jsx("div", { className: "cw-dropdown-trigger-content", children: selectedOption ? (jsxs(Fragment, { children: [selectedOption.color && (jsx("span", { className: dropdownStyles.colorCircle, style: { backgroundColor: selectedOption.color } })), jsx("span", { children: selectedOption.label })] })) : (jsx("span", { className: "cw-dropdown-placeholder", children: placeholder })) }) }), jsx("div", { style: { display: "flex", alignItems: "center", paddingRight: "0.5rem", flexShrink: 0, cursor: disabled ? "not-allowed" : "pointer" }, onClick: handleTriggerClick, children: jsx(CwIcon, { iconId: "chevron-down", size: "small" }) }), renderPanel(jsxs("div", { ref: panelRef, className: dropdownStyles.dropdown, style: panelStyle, role: "listbox", onKeyDown: handleKeyDown, children: [allowSearch && (jsx("div", { className: dropdownStyles.searchBox, children: jsx("input", { ref: inputRef, type: "text", placeholder: "Search...", value: searchText, onChange: handleSearchChange, onKeyDown: handleKeyDown, className: dropdownStyles.searchInput, autoComplete: "off" }) })), jsx("ul", { children: filteredOptions.length > 0 ? (filteredOptions.map((option, index) => (jsxs("li", { ref: highlightedIndex === index ? highlightedItemRef : null, className: [
|
|
4487
|
-
dropdownStyles.option,
|
|
4488
|
-
value === option.value ? dropdownStyles.optionSelected : "",
|
|
4489
|
-
highlightedIndex === index ? dropdownStyles.optionFocused : "",
|
|
4490
|
-
option.disabled ? dropdownStyles.optionDisabled : "",
|
|
4491
|
-
].filter(Boolean).join(" "), onClick: () => !option.disabled && handleOptionSelect(option.value), onMouseEnter: () => setHighlightedIndex(index), role: "option", "aria-selected": value === option.value, "aria-disabled": option.disabled, children: [option.color && (jsx("span", { className: dropdownStyles.colorCircle, style: { backgroundColor: option.color } })), jsx("span", { children: option.label })] }, option.value)))) : (jsx("li", { className: dropdownStyles.emptyState, children: "No options available" })) })] }))] })] }), feedbackMessages.map((item, index) => (jsx("p", { className: "cw-input-info", "data-color": item.type, children: item.message }, index)))] }));
|
|
3325
|
+
const { alignProps, labelProps, buttonProps, iconProps, placeholder, children, style, ...selectProps } = props;
|
|
3326
|
+
const flexDirection = alignProps?.flexDirection;
|
|
3327
|
+
const dataDirection = flexDirection ? { 'data-direction': flexDirection } : {};
|
|
3328
|
+
return (jsx("div", { className: "cw-select", ...dataDirection, style: style, children: jsxs(CwAlign, { ...alignProps, itemProp: selectProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxs("select", { ...selectProps, children: [placeholder && jsx(CwOption, { value: "", children: placeholder }), children] }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
|
|
4492
3329
|
}
|
|
4493
3330
|
|
|
4494
3331
|
function CwDropdownFilter(props) {
|
|
@@ -4501,56 +3338,6 @@ function CwDropdownFilter(props) {
|
|
|
4501
3338
|
return (jsxs("div", { id: props.IdContent, className: containerClassName, children: [props.children, isVisible && (jsx("nav", { className: "cw-dropdown-menu", style: inlineStyles, onMouseLeave: props.onMouseLeave, id: props.idDropDownFilter, role: "menu", children: jsx("ul", { role: "none", children: props.DataSourceDropDownItem?.map((item) => (jsx("li", { id: item.IdDropDown_filter, role: "menuitem", children: item.dropDownFilter_desc }, item.IdDropDown_filter))) }) }))] }));
|
|
4502
3339
|
}
|
|
4503
3340
|
|
|
4504
|
-
var styles$a = {"container":"cw-popover-button-module__container__YSWQU","panel":"cw-popover-button-module__panel__C-BTn"};
|
|
4505
|
-
|
|
4506
|
-
/**
|
|
4507
|
-
* Button that toggles a floating panel with arbitrary children.
|
|
4508
|
-
* Uses the native Popover API — panel renders in the browser's top layer,
|
|
4509
|
-
* escaping all overflow/stacking contexts. Light dismiss (click outside)
|
|
4510
|
-
* and Escape key are handled natively by the browser.
|
|
4511
|
-
*
|
|
4512
|
-
* Designed as a composable primitive:
|
|
4513
|
-
* - Column picker: put `<CwCheckboxGroup>` inside
|
|
4514
|
-
* - Options menu: put toggles / links inside
|
|
4515
|
-
* - Future CwTable integration: use internally for column visibility
|
|
4516
|
-
*
|
|
4517
|
-
* @example
|
|
4518
|
-
* <CwPopoverButton text="Columns" icon="table" variant="outline">
|
|
4519
|
-
* <CwCheckboxGroup options={opts} value={val} onChange={setVal} />
|
|
4520
|
-
* </CwPopoverButton>
|
|
4521
|
-
*
|
|
4522
|
-
* @example
|
|
4523
|
-
* <CwPopoverButton text="Options" icon="options" variant="outline" placement="bottom-end">
|
|
4524
|
-
* <CwToggle labelText="Show assigned" checked={v} onChange={setV} />
|
|
4525
|
-
* </CwPopoverButton>
|
|
4526
|
-
*/
|
|
4527
|
-
function CwPopoverButton({ children, panelWidth = "auto", placement = "bottom-start", panelClassName, ...buttonProps }) {
|
|
4528
|
-
const containerRef = useRef(null);
|
|
4529
|
-
const panelRef = useRef(null);
|
|
4530
|
-
const panelCallbackRef = useCallback((node) => {
|
|
4531
|
-
panelRef.current = node;
|
|
4532
|
-
node?.setAttribute("popover", "auto");
|
|
4533
|
-
}, []);
|
|
4534
|
-
const handleClick = useCallback(() => {
|
|
4535
|
-
const panel = panelRef.current;
|
|
4536
|
-
const container = containerRef.current;
|
|
4537
|
-
if (!panel || !container)
|
|
4538
|
-
return;
|
|
4539
|
-
const rect = container.getBoundingClientRect();
|
|
4540
|
-
panel.style.top = `${rect.bottom + 4}px`;
|
|
4541
|
-
if (placement === "bottom-start") {
|
|
4542
|
-
panel.style.left = `${rect.left}px`;
|
|
4543
|
-
panel.style.right = "auto";
|
|
4544
|
-
}
|
|
4545
|
-
else {
|
|
4546
|
-
panel.style.right = `${window.innerWidth - rect.right}px`;
|
|
4547
|
-
panel.style.left = "auto";
|
|
4548
|
-
}
|
|
4549
|
-
panel.togglePopover();
|
|
4550
|
-
}, [placement]);
|
|
4551
|
-
return (jsxs("div", { ref: containerRef, className: styles$a.container, children: [jsx(CwButton, { ...buttonProps, onClick: handleClick }), jsx("div", { ref: panelCallbackRef, className: `${styles$a.panel}${panelClassName ? ` ${panelClassName}` : ""}`, style: { width: panelWidth }, children: children })] }));
|
|
4552
|
-
}
|
|
4553
|
-
|
|
4554
3341
|
function itemsToMultiFilterTags(items, nameKey, valueKey, category, primaryColor, onPrimaryColor) {
|
|
4555
3342
|
const result = new Set();
|
|
4556
3343
|
items.forEach((item, index) => {
|
|
@@ -4566,13 +3353,13 @@ function itemsToMultiFilterTags(items, nameKey, valueKey, category, primaryColor
|
|
|
4566
3353
|
return result;
|
|
4567
3354
|
}
|
|
4568
3355
|
|
|
4569
|
-
var styles$
|
|
3356
|
+
var styles$8 = {"cw-multifilter-tag":"cw-multi-filter-tag-module_cw-multifilter-tag__Epda-"};
|
|
4570
3357
|
|
|
4571
3358
|
const CwMultiFilterTag = props => {
|
|
4572
3359
|
const { ID, Name, Value, Category, Removable, PrimaryColor, Selectable, Selected } = props;
|
|
4573
3360
|
const backgroundColor = `rgb(${PrimaryColor.r},${PrimaryColor.g},${PrimaryColor.b})`;
|
|
4574
3361
|
const isOutlineMode = Selected && !Removable;
|
|
4575
|
-
return (jsx("li", { className: styles$
|
|
3362
|
+
return (jsx("li", { className: styles$8["cw-multifilter-tag"], id: ID, "data-value": Value, "data-category": Category, "data-selected": !!Selected, title: Name, onClick: () => {
|
|
4576
3363
|
if (Selectable)
|
|
4577
3364
|
props.OnSelect?.(props);
|
|
4578
3365
|
}, children: jsx(CwChip, { label: Name, colorScheme: "custom", customColor: backgroundColor, variant: isOutlineMode ? "outline" : "soft", closable: Removable, onClose: () => props.OnRemove?.(props),
|
|
@@ -4582,7 +3369,7 @@ const CwMultiFilterTag = props => {
|
|
|
4582
3369
|
} : undefined }) }));
|
|
4583
3370
|
};
|
|
4584
3371
|
|
|
4585
|
-
var styles$
|
|
3372
|
+
var styles$7 = {"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"};
|
|
4586
3373
|
|
|
4587
3374
|
/**
|
|
4588
3375
|
* A multiple filter selector, a MULTI-SELECT even. Allows users to select and filter items based on tags.
|
|
@@ -4723,21 +3510,26 @@ var styles$8 = {"cw-multi-filter-catalog-container":"cw-multi-filter-module__cw-
|
|
|
4723
3510
|
* @param {CwMultiFilterProps} props
|
|
4724
3511
|
* @returns Set the `onChange` callback to a function to check for changes in the selected filters
|
|
4725
3512
|
*/
|
|
4726
|
-
const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags,
|
|
3513
|
+
const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style }) => {
|
|
4727
3514
|
const [filteredTags, setFilteredTags] = useState(new Set());
|
|
4728
3515
|
const [inputTextValue, setInputTextValue] = useState("");
|
|
4729
3516
|
const [isPanelOpen, setIsPanelOpen] = useState(false);
|
|
4730
3517
|
const [selectedCategory, setSelectedCategory] = useState("All");
|
|
4731
3518
|
const componentRef = useRef(null);
|
|
4732
3519
|
const inputRef = useRef(null);
|
|
4733
|
-
const wrapperRef = useRef(null);
|
|
4734
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
4735
|
-
anchorRef: wrapperRef,
|
|
4736
|
-
isOpen: isPanelOpen,
|
|
4737
|
-
onClose: () => { setIsPanelOpen(false); setFilteredTags(getUnselectedAll()); setSelectedCategory("All"); setInputTextValue(""); },
|
|
4738
|
-
});
|
|
4739
3520
|
useEffect(() => {
|
|
4740
|
-
|
|
3521
|
+
function handleClickOutside(event) {
|
|
3522
|
+
if (componentRef.current && !componentRef.current.contains(event.target)) {
|
|
3523
|
+
setIsPanelOpen(false);
|
|
3524
|
+
setFilteredTags(new Set());
|
|
3525
|
+
setSelectedCategory("All");
|
|
3526
|
+
setInputTextValue("");
|
|
3527
|
+
}
|
|
3528
|
+
}
|
|
3529
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
3530
|
+
return () => {
|
|
3531
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
3532
|
+
};
|
|
4741
3533
|
}, []);
|
|
4742
3534
|
const categoriesMappedToTags = () => {
|
|
4743
3535
|
const categoriesMap = new Map();
|
|
@@ -4748,10 +3540,9 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, placeh
|
|
|
4748
3540
|
});
|
|
4749
3541
|
return categoriesMap;
|
|
4750
3542
|
};
|
|
4751
|
-
const getUnselectedAll = (excluded = selectedTags) => new Set(Array.from(allTags).filter(tag => !Array.from(excluded).some(t => t.ID === tag.ID)));
|
|
4752
3543
|
const handleClickCategory = (category) => {
|
|
4753
3544
|
setSelectedCategory(category);
|
|
4754
|
-
setFilteredTags(category
|
|
3545
|
+
setFilteredTags(category != "All" ? (categoriesMappedToTags().get(category) ?? new Set()) : new Set());
|
|
4755
3546
|
};
|
|
4756
3547
|
const rgbAString = (r, g, b) => {
|
|
4757
3548
|
return `rgb(${r}, ${g}, ${b})`;
|
|
@@ -4783,7 +3574,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, placeh
|
|
|
4783
3574
|
setFilteredTags(new Set(newFilterTags));
|
|
4784
3575
|
}
|
|
4785
3576
|
else {
|
|
4786
|
-
setFilteredTags(
|
|
3577
|
+
setFilteredTags(new Set());
|
|
4787
3578
|
}
|
|
4788
3579
|
};
|
|
4789
3580
|
const addTag = (newTag) => {
|
|
@@ -4797,13 +3588,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, placeh
|
|
|
4797
3588
|
const updatedTags = new Set(selectedTags).add(newTag);
|
|
4798
3589
|
onChangeSelectedTags(updatedTags);
|
|
4799
3590
|
setInputTextValue("");
|
|
4800
|
-
setFilteredTags(
|
|
4801
|
-
const next = new Set(prev);
|
|
4802
|
-
const toRemove = Array.from(next).find(t => t.ID === newTag.ID);
|
|
4803
|
-
if (toRemove)
|
|
4804
|
-
next.delete(toRemove);
|
|
4805
|
-
return next;
|
|
4806
|
-
});
|
|
3591
|
+
//setFilteredTags(allTags);
|
|
4807
3592
|
}
|
|
4808
3593
|
};
|
|
4809
3594
|
const removeTag = (id) => {
|
|
@@ -4827,9 +3612,9 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, placeh
|
|
|
4827
3612
|
inputRef.current?.focus();
|
|
4828
3613
|
}
|
|
4829
3614
|
};
|
|
4830
|
-
return (jsxs("form", { ref: componentRef, id: id, className:
|
|
3615
|
+
return (jsxs("form", { ref: componentRef, id: id, className: styles$7["cw-multi-filter"], style: style, onSubmit: (e) => {
|
|
4831
3616
|
e.preventDefault();
|
|
4832
|
-
}, children: [jsxs("div", { onClick: handleDivClick,
|
|
3617
|
+
}, children: [jsxs("div", { onClick: handleDivClick, className: styles$7["cw-multi-filter-search"], style: isPanelOpen ? { outline: "1px solid var(--cw-color-primary)", outlineOffset: "-2px" } : {}, children: [jsxs("ul", { id: id + "_selected_filters", children: [Array.from(selectedTags).map(tag => (createElement(CwMultiFilterTag, { ...tag, key: tag.ID, Selectable: false, Removable: true, OnRemove: () => removeTag(tag.ID) }))), jsx("input", { type: "text", id: id + "_input", ref: inputRef, value: inputTextValue, spellCheck: false, onFocus: () => setIsPanelOpen(true), onChange: e => handleInputText(e.target.value), autoComplete: "off", placeholder: "Write to filter", onKeyDown: e => {
|
|
4833
3618
|
switch (e.key) {
|
|
4834
3619
|
case "Enter":
|
|
4835
3620
|
case "Tab": {
|
|
@@ -4856,10 +3641,29 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, placeh
|
|
|
4856
3641
|
break;
|
|
4857
3642
|
}
|
|
4858
3643
|
}
|
|
4859
|
-
} })] }), selectedTags.size > 0
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
3644
|
+
} })] }), selectedTags.size > 0 ? (jsx("input", { type: "reset", value: "\u00D7", onClick: e => {
|
|
3645
|
+
e.preventDefault();
|
|
3646
|
+
onChangeSelectedTags(new Set());
|
|
3647
|
+
} })) : null] }), jsxs("section", { className: styles$7["cw-multi-filter-catalog-container"], "data-display-none": !isPanelOpen, children: [jsxs("nav", { children: [jsx("button", { style: selectedCategory === "All"
|
|
3648
|
+
? {
|
|
3649
|
+
backgroundColor: "var(--cw-color-primary-container)",
|
|
3650
|
+
color: "var(--cw-color-primary)",
|
|
3651
|
+
outline: "2px solid var(--cw-color-primary)",
|
|
3652
|
+
outlineOffset: "-2px",
|
|
3653
|
+
fontWeight: 400
|
|
3654
|
+
}
|
|
3655
|
+
: {}, onClick: () => handleClickCategory("All"), children: "SEARCH IN ALL CATEGORIES" }), Array.from(categoriesMappedToTags().keys()).map(category => (jsx("button", { style: selectedCategory === category
|
|
3656
|
+
? {
|
|
3657
|
+
backgroundColor: getColor(category).primary,
|
|
3658
|
+
color: getColor(category).onPrimary,
|
|
3659
|
+
outline: "2px solid " + getColor(category).onPrimary,
|
|
3660
|
+
outlineOffset: "-2px",
|
|
3661
|
+
fontWeight: 400
|
|
3662
|
+
}
|
|
3663
|
+
: {
|
|
3664
|
+
backgroundColor: getColor(category).primary,
|
|
3665
|
+
color: getColor(category).onPrimary,
|
|
3666
|
+
}, onClick: () => handleClickCategory(category), children: category }, category)))] }), jsx("ul", { children: Array.from(filteredTags)
|
|
4863
3667
|
.sort((a, b) => {
|
|
4864
3668
|
const input = inputTextValue.trim().toLowerCase();
|
|
4865
3669
|
const aName = a.Name.trim().toLowerCase();
|
|
@@ -4879,149 +3683,10 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, placeh
|
|
|
4879
3683
|
removeTag(props.ID);
|
|
4880
3684
|
else
|
|
4881
3685
|
addTag(props);
|
|
4882
|
-
} }, props.ID))) })] })
|
|
3686
|
+
} }, props.ID))) })] })] }));
|
|
4883
3687
|
};
|
|
4884
3688
|
|
|
4885
|
-
var styles$
|
|
4886
|
-
|
|
4887
|
-
/**
|
|
4888
|
-
* Multi-select input with chip tags and searchable dropdown.
|
|
4889
|
-
* Works like a Kendo MultiSelect: selected items appear as removable chips
|
|
4890
|
-
* inside the input area, and a filtered dropdown lets the user pick more.
|
|
4891
|
-
*
|
|
4892
|
-
* @example
|
|
4893
|
-
* ```tsx
|
|
4894
|
-
* const options = [
|
|
4895
|
-
* { value: "1", label: "Alpha" },
|
|
4896
|
-
* { value: "2", label: "Bravo" },
|
|
4897
|
-
* { value: "3", label: "Charlie" },
|
|
4898
|
-
* ];
|
|
4899
|
-
* const [selected, setSelected] = useState<string[]>([]);
|
|
4900
|
-
*
|
|
4901
|
-
* <CwTagSelector
|
|
4902
|
-
* labelProps={{ text: "Tags" }}
|
|
4903
|
-
* options={options}
|
|
4904
|
-
* value={selected}
|
|
4905
|
-
* onChange={setSelected}
|
|
4906
|
-
* placeholder="Select items…"
|
|
4907
|
-
* />
|
|
4908
|
-
* ```
|
|
4909
|
-
*/
|
|
4910
|
-
function CwTagSelector({ id, options, value, onChange, labelProps, iconProps, alignProps, placeholder = "Select…", disabled = false, showSelectAll = false, feedback, className, style, }) {
|
|
4911
|
-
const [search, setSearch] = useState("");
|
|
4912
|
-
const [open, setOpen] = useState(false);
|
|
4913
|
-
const [focusedIndex, setFocusedIndex] = useState(-1);
|
|
4914
|
-
const containerRef = useRef(null);
|
|
4915
|
-
const inputBoxRef = useRef(null);
|
|
4916
|
-
const inputRef = useRef(null);
|
|
4917
|
-
const listRef = useRef(null);
|
|
4918
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
4919
|
-
anchorRef: inputBoxRef,
|
|
4920
|
-
isOpen: open,
|
|
4921
|
-
onClose: () => { setOpen(false); setFocusedIndex(-1); },
|
|
4922
|
-
});
|
|
4923
|
-
const selectedSet = useMemo(() => new Set(value), [value]);
|
|
4924
|
-
const filtered = useMemo(() => {
|
|
4925
|
-
if (!search)
|
|
4926
|
-
return options.filter(o => !selectedSet.has(o.value));
|
|
4927
|
-
const lower = search.toLowerCase();
|
|
4928
|
-
return options.filter(o => !selectedSet.has(o.value) && o.label.toLowerCase().includes(lower));
|
|
4929
|
-
}, [options, selectedSet, search]);
|
|
4930
|
-
const selectedOptions = useMemo(() => value.map(v => options.find(o => o.value === v)).filter(Boolean), [value, options]);
|
|
4931
|
-
const handleSelect = useCallback((optionValue) => {
|
|
4932
|
-
onChange([...value, optionValue]);
|
|
4933
|
-
setSearch("");
|
|
4934
|
-
setFocusedIndex(-1);
|
|
4935
|
-
inputRef.current?.focus();
|
|
4936
|
-
}, [value, onChange]);
|
|
4937
|
-
const handleRemove = useCallback((optionValue) => {
|
|
4938
|
-
onChange(value.filter(v => v !== optionValue));
|
|
4939
|
-
inputRef.current?.focus();
|
|
4940
|
-
}, [value, onChange]);
|
|
4941
|
-
const allSelected = options.length > 0 && options.every(o => selectedSet.has(o.value));
|
|
4942
|
-
const handleToggleAll = useCallback(() => {
|
|
4943
|
-
if (allSelected) {
|
|
4944
|
-
onChange([]);
|
|
4945
|
-
}
|
|
4946
|
-
else {
|
|
4947
|
-
onChange(options.map(o => o.value));
|
|
4948
|
-
}
|
|
4949
|
-
setSearch("");
|
|
4950
|
-
setFocusedIndex(-1);
|
|
4951
|
-
inputRef.current?.focus();
|
|
4952
|
-
}, [allSelected, options, onChange]);
|
|
4953
|
-
const handleInputChange = useCallback((e) => {
|
|
4954
|
-
setSearch(e.currentTarget.value);
|
|
4955
|
-
if (!open)
|
|
4956
|
-
setOpen(true);
|
|
4957
|
-
setFocusedIndex(-1);
|
|
4958
|
-
}, [open]);
|
|
4959
|
-
const handleInputFocus = useCallback(() => {
|
|
4960
|
-
if (!disabled)
|
|
4961
|
-
setOpen(true);
|
|
4962
|
-
}, [disabled]);
|
|
4963
|
-
const handleKeyDown = useCallback((e) => {
|
|
4964
|
-
if (e.key === "Backspace" && !search && value.length > 0) {
|
|
4965
|
-
onChange(value.slice(0, -1));
|
|
4966
|
-
return;
|
|
4967
|
-
}
|
|
4968
|
-
if (e.key === "Escape") {
|
|
4969
|
-
setOpen(false);
|
|
4970
|
-
setFocusedIndex(-1);
|
|
4971
|
-
return;
|
|
4972
|
-
}
|
|
4973
|
-
if (e.key === "Enter") {
|
|
4974
|
-
e.preventDefault();
|
|
4975
|
-
if (focusedIndex >= 0 && focusedIndex < filtered.length) {
|
|
4976
|
-
handleSelect(filtered[focusedIndex].value);
|
|
4977
|
-
}
|
|
4978
|
-
else if (search.trim().length > 0 && filtered.length > 0) {
|
|
4979
|
-
const lower = search.trim().toLowerCase();
|
|
4980
|
-
const match = filtered.find(o => o.label.trim().toLowerCase() === lower) ??
|
|
4981
|
-
filtered.find(o => o.label.trim().toLowerCase().startsWith(lower)) ??
|
|
4982
|
-
filtered[0];
|
|
4983
|
-
if (match)
|
|
4984
|
-
handleSelect(match.value);
|
|
4985
|
-
}
|
|
4986
|
-
else if (!open) {
|
|
4987
|
-
setOpen(true);
|
|
4988
|
-
setFocusedIndex(0);
|
|
4989
|
-
}
|
|
4990
|
-
return;
|
|
4991
|
-
}
|
|
4992
|
-
if (!open) {
|
|
4993
|
-
if (e.key === "ArrowDown") {
|
|
4994
|
-
setOpen(true);
|
|
4995
|
-
setFocusedIndex(0);
|
|
4996
|
-
e.preventDefault();
|
|
4997
|
-
}
|
|
4998
|
-
return;
|
|
4999
|
-
}
|
|
5000
|
-
if (e.key === "ArrowDown") {
|
|
5001
|
-
e.preventDefault();
|
|
5002
|
-
setFocusedIndex(prev => (prev < filtered.length - 1 ? prev + 1 : prev));
|
|
5003
|
-
}
|
|
5004
|
-
else if (e.key === "ArrowUp") {
|
|
5005
|
-
e.preventDefault();
|
|
5006
|
-
setFocusedIndex(prev => (prev > 0 ? prev - 1 : 0));
|
|
5007
|
-
}
|
|
5008
|
-
}, [open, search, value, filtered, focusedIndex, onChange, handleSelect]);
|
|
5009
|
-
// Scroll focused item into view
|
|
5010
|
-
useEffect(() => {
|
|
5011
|
-
if (focusedIndex >= 0 && listRef.current) {
|
|
5012
|
-
const item = listRef.current.children[focusedIndex];
|
|
5013
|
-
item?.scrollIntoView({ block: "nearest" });
|
|
5014
|
-
}
|
|
5015
|
-
}, [focusedIndex]);
|
|
5016
|
-
// Close on outside click — now handled by useDropdownPortal
|
|
5017
|
-
// Keeping containerRef for any other potential use
|
|
5018
|
-
const direction = alignProps?.flexDirection ?? "row";
|
|
5019
|
-
const feedbackMessages = feedback ? (Array.isArray(feedback) ? feedback : [feedback]) : [];
|
|
5020
|
-
return (jsxs("div", { ref: containerRef, className: `${styles$7.container}${className ? ` ${className}` : ""}`, style: style, id: id, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsxs("div", { className: `${styles$7.inputBox}${disabled ? ` ${styles$7.disabled}` : ""}`, ref: inputBoxRef, onClick: () => { if (!disabled)
|
|
5021
|
-
inputRef.current?.focus(); }, children: [selectedOptions.map(opt => (jsx(CwChip, { label: opt.label, colorScheme: opt.color ? "custom" : "info", customColor: opt.color, closable: !disabled, onClose: () => handleRemove(opt.value) }, opt.value))), jsx("input", { ref: inputRef, type: "text", value: search, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleKeyDown, placeholder: selectedOptions.length === 0 ? placeholder : "", disabled: disabled, autoComplete: "off" }), value.length > 0 && !disabled && (jsx(CwButton, { type: "button", variant: "icon", color: "neutral", icon: "close", onMouseDown: (e) => e.preventDefault(), onClick: (e) => { e.stopPropagation(); onChange([]); setSearch(""); setOpen(false); }, tabIndex: -1, "aria-label": "Clear all" }))] })] }), feedbackMessages.map((fb, i) => (jsx("p", { className: "cw-input-info", "data-color": fb.type, children: fb.message }, i))), renderPanel((showSelectAll || filtered.length > 0) ? (jsxs("div", { ref: panelRef, className: styles$7.dropdown, style: panelStyle, children: [showSelectAll && !search && (jsxs("div", { className: styles$7.selectAll, onMouseDown: (e) => e.preventDefault(), onClick: handleToggleAll, children: [jsx("input", { type: "checkbox", checked: allSelected, readOnly: true, tabIndex: -1 }), allSelected ? "Deselect all" : "Select all"] })), jsx("ul", { ref: listRef, children: filtered.map((opt, idx) => (jsxs("li", { className: `${styles$7.option}${idx === focusedIndex ? ` ${styles$7.optionFocused}` : ""}`, onMouseDown: (e) => e.preventDefault(), onClick: () => handleSelect(opt.value), onMouseEnter: () => setFocusedIndex(idx), title: opt.tooltip, children: [opt.color && jsx("span", { className: styles$7.optionDot, style: { backgroundColor: opt.color } }), opt.label] }, opt.value))) })] })) : null)] }));
|
|
5022
|
-
}
|
|
5023
|
-
|
|
5024
|
-
var styles$6 = {"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"};
|
|
3689
|
+
var styles$6 = {"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"};
|
|
5025
3690
|
|
|
5026
3691
|
function CwTreeView({ data, onSelect, allowParentSelection = false, selectedId: initialSelectedId = null }) {
|
|
5027
3692
|
const [expanded, setExpanded] = useState(new Set());
|
|
@@ -5127,30 +3792,12 @@ function CwTreeView({ data, onSelect, allowParentSelection = false, selectedId:
|
|
|
5127
3792
|
return (jsxs("div", { className: `cw-tree-view ${styles$6["tree-container"]}`, children: [jsxs("header", { children: [jsx("input", { type: "text", placeholder: "Search in tree...", value: search, onChange: (e) => setSearch(e.target.value) }), search && (jsx(CwButton, { onClick: () => setSearch(""), type: "button", icon: "close", variant: "icon", color: "neutral" }))] }), jsx("div", { className: styles$6["tree-wrapper"], children: filteredData.length > 0 ? (filteredData.map((node) => renderNode(node))) : (jsxs("div", { className: styles$6["empty-state"], children: [jsx(CwIcon, { iconId: "comment" }), search ? "No results found" : "There are no items"] })) })] }));
|
|
5128
3793
|
}
|
|
5129
3794
|
|
|
5130
|
-
/**
|
|
5131
|
-
* Text input with a live-filtered suggestion dropdown backed by a local `CwSelectList` array.
|
|
5132
|
-
* Use `CwFindAirport` or `CwFindCrewmember` for API-backed search inputs.
|
|
5133
|
-
*
|
|
5134
|
-
* @example
|
|
5135
|
-
* <CwSearchInput
|
|
5136
|
-
* selectList={myItems}
|
|
5137
|
-
* handleChange={(id) => console.log('selected', id)}
|
|
5138
|
-
* labelProps={{ text: 'Employee' }}
|
|
5139
|
-
* placeholder="Search by name…"
|
|
5140
|
-
* />
|
|
5141
|
-
*/
|
|
5142
3795
|
function CwSearchInput(optionsProps) {
|
|
5143
3796
|
const [searchText, setSearchText] = useState("");
|
|
5144
3797
|
const [filteredOptions, setFilteredOptions] = useState([]);
|
|
5145
3798
|
const [_selectedOption, setSelectedOption] = useState(null);
|
|
5146
3799
|
const [showDropdown, setShowDropdown] = useState(false);
|
|
5147
3800
|
const [isLoading, setIsLoading] = useState(false);
|
|
5148
|
-
const wrapperRef = useRef(null);
|
|
5149
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
5150
|
-
anchorRef: wrapperRef,
|
|
5151
|
-
isOpen: showDropdown && filteredOptions.length > 0,
|
|
5152
|
-
onClose: () => setShowDropdown(false),
|
|
5153
|
-
});
|
|
5154
3801
|
// Extract props
|
|
5155
3802
|
const { labelProps, iconProps, alignProps, selectList, handleChange, placeholder = "Search…", disabled, renderOption, style, id, className, defaultValue, ...otherProps } = optionsProps;
|
|
5156
3803
|
// Get direction for data attribute
|
|
@@ -5201,8 +3848,9 @@ function CwSearchInput(optionsProps) {
|
|
|
5201
3848
|
}
|
|
5202
3849
|
};
|
|
5203
3850
|
const handleInputBlur = () => {
|
|
5204
|
-
|
|
5205
|
-
|
|
3851
|
+
setTimeout(() => {
|
|
3852
|
+
setShowDropdown(false);
|
|
3853
|
+
}, 150);
|
|
5206
3854
|
};
|
|
5207
3855
|
const handleOptionSelect = (option) => {
|
|
5208
3856
|
setSearchText(option.description);
|
|
@@ -5220,10 +3868,10 @@ function CwSearchInput(optionsProps) {
|
|
|
5220
3868
|
handleChange("");
|
|
5221
3869
|
}
|
|
5222
3870
|
};
|
|
5223
|
-
return (jsxs("div", { className: `cw-search-input ${className || ""}`, style: style, id: id, ...otherProps, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-search-input-wrapper",
|
|
3871
|
+
return (jsxs("div", { className: `cw-search-input ${className || ""}`, style: style, id: id, ...otherProps, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-search-input-wrapper", children: [jsx("input", { type: "text", value: searchText, onChange: handleInputChange, onFocus: handleInputFocus, onBlur: handleInputBlur, placeholder: placeholder, className: "cw-input-search", disabled: disabled }), isLoading && (jsx("div", { className: "cw-search-input-loading", children: jsx(CwIcon, { iconId: "spinner" }) })), jsx("div", { className: "cw-search-input-icons", children: searchText && !disabled && !isLoading ? (jsx(CwButton, { type: "button", onClick: handleClearClick, "aria-label": "Clear search", variant: "icon", icon: "close", color: "neutral" })) : (iconProps ? jsx(CwIcon, { ...iconProps }) : jsx(CwIcon, { iconId: "search" })) })] })] }), showDropdown && filteredOptions.length > 0 && (jsx("div", { className: "cw-input-search-dropdown", children: jsx("ul", { children: filteredOptions.map((option) => (jsx("li", { onClick: () => handleOptionSelect(option), onMouseDown: (e) => e.preventDefault(), children: renderOption ? renderOption(option) : option.description }, option.id))) }) }))] }));
|
|
5224
3872
|
}
|
|
5225
3873
|
|
|
5226
|
-
var styles$5 = {"menu":"cw-context-menu-
|
|
3874
|
+
var styles$5 = {"menu":"cw-context-menu-module_menu__tXmun","item":"cw-context-menu-module_item__-ko8L","arrow":"cw-context-menu-module_arrow__LHZmQ"};
|
|
5227
3875
|
|
|
5228
3876
|
const ARROW_SIZE = 8;
|
|
5229
3877
|
const SAFETY_MARGIN = 8;
|
|
@@ -5472,73 +4120,14 @@ function CwBtnDelete({ cw_btnOnclick, cw_btn_disabled, onClick, disabled, ...res
|
|
|
5472
4120
|
return (jsx(CwButton, { ...rest, variant: "icon", icon: "delete", color: "danger", onClick: onClick ?? cw_btnOnclick, disabled: disabled ?? cw_btn_disabled }));
|
|
5473
4121
|
}
|
|
5474
4122
|
|
|
5475
|
-
var styles$4 = {"pickerWrapper":"cw-pickers-base-
|
|
5476
|
-
|
|
5477
|
-
/**
|
|
5478
|
-
* Renders a picker popup in a portal so it escapes overflow containers.
|
|
5479
|
-
* Positions itself relative to the anchor element.
|
|
5480
|
-
*
|
|
5481
|
-
* Thin wrapper around {@link useDropdownPortal} that adds directional
|
|
5482
|
-
* preference logic ("left-bottom", "right-top", etc.) for calendar popups.
|
|
5483
|
-
* The public API is unchanged — existing callers (`CwDatePicker`, etc.) need
|
|
5484
|
-
* no modifications.
|
|
5485
|
-
*/
|
|
5486
|
-
function usePickerPopup({ anchorRef, isOpen, onClose, position = "left-bottom" }) {
|
|
5487
|
-
const pickerStrategy = useCallback((anchorRect, panelRect) => {
|
|
5488
|
-
const popupH = panelRect?.height ?? 300;
|
|
5489
|
-
const popupW = panelRect?.width ?? 300;
|
|
5490
|
-
const preferTop = position.includes("top");
|
|
5491
|
-
const spaceBelow = window.innerHeight - anchorRect.bottom;
|
|
5492
|
-
const spaceAbove = anchorRect.top;
|
|
5493
|
-
let top;
|
|
5494
|
-
if (preferTop && spaceAbove >= popupH) {
|
|
5495
|
-
top = anchorRect.top - popupH;
|
|
5496
|
-
}
|
|
5497
|
-
else if (!preferTop && spaceBelow >= popupH + 4) {
|
|
5498
|
-
top = anchorRect.bottom + 4;
|
|
5499
|
-
}
|
|
5500
|
-
else {
|
|
5501
|
-
top = spaceBelow >= popupH + 4 ? anchorRect.bottom + 4 : anchorRect.top - popupH;
|
|
5502
|
-
}
|
|
5503
|
-
let left;
|
|
5504
|
-
if (position.includes("right")) {
|
|
5505
|
-
left = anchorRect.right - popupW;
|
|
5506
|
-
}
|
|
5507
|
-
else {
|
|
5508
|
-
left = anchorRect.left;
|
|
5509
|
-
}
|
|
5510
|
-
left = Math.max(4, Math.min(left, window.innerWidth - popupW - 4));
|
|
5511
|
-
top = Math.max(4, top);
|
|
5512
|
-
// No width override — the calendar has its own intrinsic size
|
|
5513
|
-
return { top, left };
|
|
5514
|
-
}, [position]);
|
|
5515
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
5516
|
-
anchorRef,
|
|
5517
|
-
isOpen,
|
|
5518
|
-
onClose,
|
|
5519
|
-
positionStrategy: pickerStrategy,
|
|
5520
|
-
});
|
|
5521
|
-
// Expose original API names so CwDatePicker needs zero changes
|
|
5522
|
-
return { popupRef: panelRef, popupStyle: panelStyle, renderPopup: renderPanel };
|
|
5523
|
-
}
|
|
4123
|
+
var styles$4 = {"pickerWrapper":"cw-pickers-base-module_pickerWrapper__Fb9Zo","pickerIcons":"cw-pickers-base-module_pickerIcons__dyd2-","pickerPopup":"cw-pickers-base-module_pickerPopup__dkxJo"};
|
|
5524
4124
|
|
|
5525
|
-
function CwDatePicker({ value, onChange, minDate, maxDate, disabledDates, disabledMatcher, defaultMonth, labelProps, alignProps, placeholder = "Select a date", displayFormat = "dd.MM.yyyy", disabled, required, className, showClear = true, popupPosition = "left-bottom", numberOfMonths = 1, showTodayButton = false,
|
|
4125
|
+
function CwDatePicker({ value, onChange, minDate, maxDate, disabledDates, disabledMatcher, defaultMonth, labelProps, alignProps, placeholder = "Select a date", displayFormat = "dd.MM.yyyy", disabled, required, className, showClear = true, popupPosition = "left-bottom", numberOfMonths = 1, showTodayButton = false, }) {
|
|
5526
4126
|
const [isOpen, setIsOpen] = useState(false);
|
|
5527
4127
|
const [inputValue, setInputValue] = useState("");
|
|
5528
4128
|
const containerRef = useRef(null);
|
|
5529
|
-
const feedbackMessages = feedback
|
|
5530
|
-
? Array.isArray(feedback) ? feedback : [feedback]
|
|
5531
|
-
: [];
|
|
5532
|
-
const wrapperRef = useRef(null);
|
|
5533
4129
|
const inputRef = useRef(null);
|
|
5534
4130
|
const prevValueRef = useRef(undefined);
|
|
5535
|
-
const handleClose = useCallback(() => setIsOpen(false), []);
|
|
5536
|
-
const { popupRef, popupStyle, renderPopup } = usePickerPopup({
|
|
5537
|
-
anchorRef: wrapperRef,
|
|
5538
|
-
isOpen,
|
|
5539
|
-
onClose: handleClose,
|
|
5540
|
-
position: popupPosition,
|
|
5541
|
-
});
|
|
5542
4131
|
// Parse date from string based on format
|
|
5543
4132
|
const parseDate = useCallback((dateString, formatStr) => {
|
|
5544
4133
|
try {
|
|
@@ -5621,6 +4210,20 @@ function CwDatePicker({ value, onChange, minDate, maxDate, disabledDates, disabl
|
|
|
5621
4210
|
}
|
|
5622
4211
|
}
|
|
5623
4212
|
}, [value, displayFormat]);
|
|
4213
|
+
// Close calendar when clicking outside
|
|
4214
|
+
useEffect(() => {
|
|
4215
|
+
const handleClickOutside = (event) => {
|
|
4216
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
4217
|
+
setIsOpen(false);
|
|
4218
|
+
}
|
|
4219
|
+
};
|
|
4220
|
+
if (isOpen) {
|
|
4221
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
4222
|
+
}
|
|
4223
|
+
return () => {
|
|
4224
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
4225
|
+
};
|
|
4226
|
+
}, [isOpen]);
|
|
5624
4227
|
const handleDaySelect = useCallback((date) => {
|
|
5625
4228
|
onChange(date);
|
|
5626
4229
|
setIsOpen(false);
|
|
@@ -5696,14 +4299,14 @@ function CwDatePicker({ value, onChange, minDate, maxDate, disabledDates, disabl
|
|
|
5696
4299
|
...(maxDate ? [{ after: maxDate }] : []),
|
|
5697
4300
|
...(disabledMatcher ? [disabledMatcher] : []),
|
|
5698
4301
|
], [disabledDates, minDate, maxDate, disabledMatcher]);
|
|
5699
|
-
return (
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
4302
|
+
return (jsx("div", { ref: containerRef, className: `cw-datepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: styles$4.pickerWrapper, children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, placeholder: placeholder, onChange: handleInputChange, onBlur: handleInputBlur, onClick: handleInputClick, onKeyDown: handleInputKeyDown, disabled: disabled, required: required }), jsx("div", { className: styles$4.pickerIcons, children: showClear && value && !disabled ? (jsx(CwButton, { type: "button", variant: "icon", color: "neutral", icon: "close", onClick: handleClear, tabIndex: -1, "aria-label": "Clear date" })) : (jsx(CwIcon, { iconId: "calendar" })) }), isOpen && (jsxs("div", { className: styles$4.pickerPopup, "data-position": popupPosition, children: [jsx(DayPicker, { mode: "single", selected: value || undefined, defaultMonth: defaultMonth || value || undefined, onSelect: handleDaySelect, disabled: disabledDays, numberOfMonths: numberOfMonths, modifiers: {
|
|
4303
|
+
today: new Date(),
|
|
4304
|
+
}, modifiersClassNames: {
|
|
4305
|
+
today: "rdp-day-today",
|
|
4306
|
+
} }), showTodayButton && (jsx("footer", { className: "cw-flex-row cw-align-right-center", children: jsx(CwButton, { type: "button", variant: "outline", onClick: handleTodayClick, text: "Today" }) }))] }))] })] }) }));
|
|
5704
4307
|
}
|
|
5705
4308
|
|
|
5706
|
-
var rangeStyles = {"rangeWrapper":"cw-range-picker-
|
|
4309
|
+
var rangeStyles = {"rangeWrapper":"cw-range-picker-module_rangeWrapper__1nIVs","rangePopup":"cw-range-picker-module_rangePopup__E5jd1","presetList":"cw-range-picker-module_presetList__INiLo"};
|
|
5707
4310
|
|
|
5708
4311
|
const PRESET_LIBRARY = {
|
|
5709
4312
|
// === PAST DAYS ===
|
|
@@ -5980,20 +4583,9 @@ function CwDateRangePicker({ value, onChange, minDate, maxDate, disabledDates, d
|
|
|
5980
4583
|
const [inputToValue, setInputToValue] = useState("");
|
|
5981
4584
|
const [focusedInput, setFocusedInput] = useState();
|
|
5982
4585
|
const containerRef = useRef(null);
|
|
5983
|
-
const wrapperRef = useRef(null);
|
|
5984
4586
|
const inputFromRef = useRef(null);
|
|
5985
4587
|
const inputToRef = useRef(null);
|
|
5986
4588
|
const prevValueRef = useRef(undefined);
|
|
5987
|
-
const handleClose = useCallback(() => {
|
|
5988
|
-
setIsOpen(false);
|
|
5989
|
-
setFocusedInput(undefined);
|
|
5990
|
-
}, []);
|
|
5991
|
-
const { popupRef, popupStyle, renderPopup } = usePickerPopup({
|
|
5992
|
-
anchorRef: wrapperRef,
|
|
5993
|
-
isOpen,
|
|
5994
|
-
onClose: handleClose,
|
|
5995
|
-
position: popupPosition,
|
|
5996
|
-
});
|
|
5997
4589
|
// Calculate presets to render
|
|
5998
4590
|
const presetsToRender = useMemo(() => {
|
|
5999
4591
|
let presets = [];
|
|
@@ -6102,8 +4694,23 @@ function CwDateRangePicker({ value, onChange, minDate, maxDate, disabledDates, d
|
|
|
6102
4694
|
}
|
|
6103
4695
|
}
|
|
6104
4696
|
}, [value, displayFormat]);
|
|
6105
|
-
|
|
6106
|
-
|
|
4697
|
+
// Close calendar when clicking outside
|
|
4698
|
+
useEffect(() => {
|
|
4699
|
+
const handleClickOutside = (event) => {
|
|
4700
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
4701
|
+
setIsOpen(false);
|
|
4702
|
+
setFocusedInput(undefined);
|
|
4703
|
+
}
|
|
4704
|
+
};
|
|
4705
|
+
if (isOpen) {
|
|
4706
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
4707
|
+
}
|
|
4708
|
+
return () => {
|
|
4709
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
4710
|
+
};
|
|
4711
|
+
}, [isOpen]);
|
|
4712
|
+
const handleRangeSelect = useCallback((range, // El rango sugerido por react-day-picker
|
|
4713
|
+
selectedDay) => {
|
|
6107
4714
|
let newRange;
|
|
6108
4715
|
if (focusedInput === 'from') {
|
|
6109
4716
|
newRange = { from: selectedDay, to: value?.to };
|
|
@@ -6322,14 +4929,14 @@ function CwDateRangePicker({ value, onChange, minDate, maxDate, disabledDates, d
|
|
|
6322
4929
|
}
|
|
6323
4930
|
return undefined;
|
|
6324
4931
|
}, [value]);
|
|
6325
|
-
return (jsx("div", { ref: containerRef, className: `cw-rangepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", {
|
|
4932
|
+
return (jsx("div", { ref: containerRef, className: `cw-rangepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: rangeStyles.rangeWrapper, children: [jsxs("div", { className: styles$4.pickerWrapper, children: [jsx("input", { ref: inputFromRef, type: "text", value: inputFromValue, placeholder: placeholderFrom, onChange: handleInputFromChange, onBlur: () => handleInputBlur('from'), onClick: handleInputFromClick, onKeyDown: (e) => handleInputKeyDown(e, 'from'), disabled: disabled, required: required, "data-focused": focusedInput === 'from' }), jsx("div", { className: styles$4.pickerIcons, children: showClear && value?.from && !disabled ? (jsx(CwButton, { type: "button", variant: "icon", color: "neutral", icon: "close", onClick: handleClearFrom, tabIndex: -1, "aria-label": "Clear from date" })) : (jsx(CwIcon, { iconId: "calendar" })) })] }), jsx(CwIcon, { iconId: "arrow-right", size: "medium" }), jsxs("div", { className: styles$4.pickerWrapper, children: [jsx("input", { ref: inputToRef, type: "text", value: inputToValue, placeholder: placeholderTo, onChange: handleInputToChange, onBlur: () => handleInputBlur('to'), onClick: handleInputToClick, onKeyDown: (e) => handleInputKeyDown(e, 'to'), disabled: disabled, required: required, "data-focused": focusedInput === 'to' }), jsx("div", { className: styles$4.pickerIcons, children: showClear && value?.to && !disabled ? (jsx(CwButton, { type: "button", variant: "icon", color: "neutral", icon: "close", onClick: handleClearTo, tabIndex: -1, "aria-label": "Clear to date" })) : (jsx(CwIcon, { iconId: "calendar" })) })] }), isOpen && (jsxs("div", { className: `${styles$4.pickerPopup} ${rangeStyles.rangePopup}`, "data-position": popupPosition, children: [showPresets && presetsToRender.length > 0 && (jsx("div", { className: rangeStyles.presetList, children: presetsToRender.map((preset) => (jsx("button", { type: "button", onClick: (e) => handlePresetClick(preset, e), children: preset.label }, preset.key))) })), jsx(DayPicker, { mode: "range", selected: selectedRange, onSelect: handleRangeSelect, disabled: disabledDays, numberOfMonths: numberOfMonths, defaultMonth: defaultMonth || value?.from || undefined, modifiers: {
|
|
6326
4933
|
today: new Date(),
|
|
6327
4934
|
}, modifiersClassNames: {
|
|
6328
4935
|
today: "rdp-day-today",
|
|
6329
4936
|
} })] }))] })] }) }));
|
|
6330
4937
|
}
|
|
6331
4938
|
|
|
6332
|
-
var timeStyles = {"timePickerPopup":"cw-time-picker-
|
|
4939
|
+
var timeStyles = {"timePickerPopup":"cw-time-picker-module_timePickerPopup__BN63t","timePickerList":"cw-time-picker-module_timePickerList__E88pr","selected":"cw-time-picker-module_selected__qVnfL","hasIcons":"cw-time-picker-module_hasIcons__ZiGUf","notIcons":"cw-time-picker-module_notIcons__3icu1"};
|
|
6333
4940
|
|
|
6334
4941
|
const isMobileDevice = () => {
|
|
6335
4942
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
@@ -6338,16 +4945,8 @@ function CwTimePicker({ value, onChange, interval = 15, minTime, maxTime, labelP
|
|
|
6338
4945
|
const [isOpen, setIsOpen] = useState(false);
|
|
6339
4946
|
const [inputValue, setInputValue] = useState("");
|
|
6340
4947
|
const containerRef = useRef(null);
|
|
6341
|
-
const wrapperRef = useRef(null);
|
|
6342
4948
|
const inputRef = useRef(null);
|
|
6343
4949
|
const selectedItemRef = useRef(null);
|
|
6344
|
-
const handleClose = useCallback(() => setIsOpen(false), []);
|
|
6345
|
-
const { popupRef, popupStyle, renderPopup } = usePickerPopup({
|
|
6346
|
-
anchorRef: wrapperRef,
|
|
6347
|
-
isOpen,
|
|
6348
|
-
onClose: handleClose,
|
|
6349
|
-
position: popupPosition,
|
|
6350
|
-
});
|
|
6351
4950
|
// Sync input value with prop value
|
|
6352
4951
|
useEffect(() => {
|
|
6353
4952
|
if (value) {
|
|
@@ -6375,6 +4974,20 @@ function CwTimePicker({ value, onChange, interval = 15, minTime, maxTime, labelP
|
|
|
6375
4974
|
return options;
|
|
6376
4975
|
};
|
|
6377
4976
|
const timeOptions = generateTimeOptions();
|
|
4977
|
+
// Close dropdown when clicking outside
|
|
4978
|
+
useEffect(() => {
|
|
4979
|
+
const handleClickOutside = (event) => {
|
|
4980
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
4981
|
+
setIsOpen(false);
|
|
4982
|
+
}
|
|
4983
|
+
};
|
|
4984
|
+
if (isOpen) {
|
|
4985
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
4986
|
+
}
|
|
4987
|
+
return () => {
|
|
4988
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
4989
|
+
};
|
|
4990
|
+
}, [isOpen]);
|
|
6378
4991
|
// Scroll to selected time when opening dropdown
|
|
6379
4992
|
useEffect(() => {
|
|
6380
4993
|
if (isOpen && selectedItemRef.current) {
|
|
@@ -6485,70 +5098,13 @@ function CwTimePicker({ value, onChange, interval = 15, minTime, maxTime, labelP
|
|
|
6485
5098
|
return (jsx("div", { className: `cw-timepicker cw-timepicker-native ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsx("div", { className: styles$4.pickerWrapper, children: jsx("input", { type: "time", value: displayValue, onChange: handleNativeChange, min: minTime, max: maxTime, step: interval * 60, disabled: disabled, required: required, placeholder: placeholder, className: "cw-timepicker-native" }) })] }) }));
|
|
6486
5099
|
}
|
|
6487
5100
|
// Custom time picker
|
|
6488
|
-
return (jsx("div", { ref: containerRef, className: `cw-timepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", {
|
|
5101
|
+
return (jsx("div", { ref: containerRef, className: `cw-timepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: styles$4.pickerWrapper, children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, placeholder: placeholder, onChange: handleInputChange, onBlur: handleInputBlur, onClick: handleInputClick, onKeyDown: handleInputKeyDown, disabled: disabled, required: required, maxLength: 5, className: showClear ? timeStyles.hasIcons : timeStyles.notIcons }), showClear && (jsx("div", { className: styles$4.pickerIcons, children: value && !disabled ? (jsx(CwButton, { type: "button", variant: "icon", icon: "close", color: "neutral", onClick: handleClear, tabIndex: -1, "aria-label": "Clear time" })) : (jsx(CwIcon, { iconId: "clock" })) })), isOpen && (jsx("div", { className: `${styles$4.pickerPopup} ${timeStyles.timePickerPopup}`, "data-position": popupPosition, children: jsx("div", { className: timeStyles.timePickerList, children: timeOptions.map((time) => {
|
|
6489
5102
|
const isSelected = time === value;
|
|
6490
5103
|
return (jsx("button", { ref: isSelected ? selectedItemRef : null, type: "button", className: isSelected ? timeStyles.selected : "", onClick: () => handleTimeSelect(time), children: time }, time));
|
|
6491
5104
|
}) }) }))] })] }) }));
|
|
6492
5105
|
}
|
|
6493
5106
|
|
|
6494
|
-
|
|
6495
|
-
* Converts a numeric offset in hours (e.g. 0, 1, -5, 5.5) to a
|
|
6496
|
-
* Temporal-compatible offset string like "+00:00", "+01:00", "-05:00", "+05:30".
|
|
6497
|
-
*/
|
|
6498
|
-
function offsetHoursToString(offset) {
|
|
6499
|
-
const sign = offset >= 0 ? "+" : "-";
|
|
6500
|
-
const abs = Math.abs(offset);
|
|
6501
|
-
const hours = Math.floor(abs);
|
|
6502
|
-
const minutes = Math.round((abs - hours) * 60);
|
|
6503
|
-
return `${sign}${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`;
|
|
6504
|
-
}
|
|
6505
|
-
/**
|
|
6506
|
-
* Converts a Date to a new Date whose local year/month/day
|
|
6507
|
-
* reflect the date in the given UTC offset.
|
|
6508
|
-
*
|
|
6509
|
-
* This is necessary because date-fns format() and DayPicker
|
|
6510
|
-
* always use the browser's local timezone. By "shifting" the date,
|
|
6511
|
-
* we ensure the correct date displays regardless of browser timezone.
|
|
6512
|
-
*
|
|
6513
|
-
* @param date - The original Date object
|
|
6514
|
-
* @param timezoneOffset - Numeric offset in hours (e.g., 0 for UTC, 1 for CET, -5 for EST, 5.5 for IST)
|
|
6515
|
-
* @returns A new Date with local fields matching the target timezone's date
|
|
6516
|
-
*/
|
|
6517
|
-
function getDateInOffset(date, timezoneOffset) {
|
|
6518
|
-
const instant = Temporal.Instant.fromEpochMilliseconds(date.getTime());
|
|
6519
|
-
const zdt = instant.toZonedDateTimeISO(offsetHoursToString(timezoneOffset));
|
|
6520
|
-
return new Date(zdt.year, zdt.month - 1, zdt.day);
|
|
6521
|
-
}
|
|
6522
|
-
/**
|
|
6523
|
-
* Gets the time string (HH:mm) for a Date in the given UTC offset.
|
|
6524
|
-
*
|
|
6525
|
-
* @param date - The original Date object
|
|
6526
|
-
* @param timezoneOffset - Numeric offset in hours (e.g., 0 for UTC, 1 for CET, -5 for EST, 5.5 for IST)
|
|
6527
|
-
* @returns Time string in "HH:mm" format for the given offset
|
|
6528
|
-
*/
|
|
6529
|
-
function getTimeInOffset(date, timezoneOffset) {
|
|
6530
|
-
const instant = Temporal.Instant.fromEpochMilliseconds(date.getTime());
|
|
6531
|
-
const zdt = instant.toZonedDateTimeISO(offsetHoursToString(timezoneOffset));
|
|
6532
|
-
return `${String(zdt.hour).padStart(2, "0")}:${String(zdt.minute).padStart(2, "0")}`;
|
|
6533
|
-
}
|
|
6534
|
-
/**
|
|
6535
|
-
* Combines a display date (local fields) and time components into a real Date
|
|
6536
|
-
* by interpreting them in the given UTC offset.
|
|
6537
|
-
*
|
|
6538
|
-
* @param date - Date whose local year/month/day are the "display" values
|
|
6539
|
-
* @param hours - Hour component (0-23)
|
|
6540
|
-
* @param minutes - Minute component (0-59)
|
|
6541
|
-
* @param timezoneOffset - Numeric offset in hours
|
|
6542
|
-
* @returns A Date representing the UTC instant of that date+time in the given offset
|
|
6543
|
-
*/
|
|
6544
|
-
function combineDateTimeInOffset(date, hours, minutes, timezoneOffset) {
|
|
6545
|
-
const offsetStr = offsetHoursToString(timezoneOffset);
|
|
6546
|
-
const pdt = new Temporal.PlainDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), hours, minutes);
|
|
6547
|
-
const zdt = pdt.toZonedDateTime(offsetStr);
|
|
6548
|
-
return new Date(zdt.epochMilliseconds);
|
|
6549
|
-
}
|
|
6550
|
-
|
|
6551
|
-
function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledDates, disabledMatcher, timeInterval = 15, minTime, maxTime, labelProps, alignProps, datePlaceholder = "dd.MM.yyyy", timePlaceholder = "HH:mm", disabled, required, className, showClear = true, popupPosition = "left-bottom", numberOfMonths = 1, showNowButton = false, nowLabel = "Now", locale = enGB, timezoneOffset, }) {
|
|
5107
|
+
function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledDates, disabledMatcher, timeInterval = 15, minTime, maxTime, labelProps, alignProps, datePlaceholder = "dd.MM.yyyy", timePlaceholder = "HH:mm", disabled, required, className, showClear = true, popupPosition = "left-bottom", numberOfMonths = 1, showNowButton = false, }) {
|
|
6552
5108
|
// ========================================
|
|
6553
5109
|
// PROPS NORMALIZATION
|
|
6554
5110
|
// ========================================
|
|
@@ -6580,32 +5136,10 @@ function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledD
|
|
|
6580
5136
|
const normalizedMinDateTime = useMemo(() => normalizeDateTime(minDateTime, 'minDateTime'), [minDateTime, normalizeDateTime]);
|
|
6581
5137
|
const normalizedMaxDateTime = useMemo(() => normalizeDateTime(maxDateTime, 'maxDateTime'), [maxDateTime, normalizeDateTime]);
|
|
6582
5138
|
// ========================================
|
|
6583
|
-
// HELPERS CON MOMENT
|
|
6584
|
-
// ========================================
|
|
6585
|
-
/**
|
|
6586
|
-
* Convert a Date to a "display date" whose local year/month/day
|
|
6587
|
-
* reflect the date in the target timezone offset.
|
|
6588
|
-
* When timezoneOffset is undefined, returns the date as-is.
|
|
6589
|
-
*/
|
|
6590
|
-
const toDisplayDate = useCallback((date) => {
|
|
6591
|
-
return timezoneOffset !== undefined
|
|
6592
|
-
? getDateInOffset(date, timezoneOffset)
|
|
6593
|
-
: date;
|
|
6594
|
-
}, [timezoneOffset]);
|
|
6595
|
-
/**
|
|
6596
|
-
* Get the time string (HH:mm) for a Date, adjusted for timezone offset.
|
|
6597
|
-
* When timezoneOffset is undefined, uses local time.
|
|
6598
|
-
*/
|
|
6599
|
-
const toDisplayTime = useCallback((date) => {
|
|
6600
|
-
return timezoneOffset !== undefined
|
|
6601
|
-
? getTimeInOffset(date, timezoneOffset)
|
|
6602
|
-
: `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
|
|
6603
|
-
}, [timezoneOffset]);
|
|
6604
|
-
// ========================================
|
|
6605
5139
|
// INTERNAL STATE
|
|
6606
5140
|
// ========================================
|
|
6607
|
-
const [selectedDate, setSelectedDate] = useState(value
|
|
6608
|
-
const [selectedTime, setSelectedTime] = useState(value ?
|
|
5141
|
+
const [selectedDate, setSelectedDate] = useState(value);
|
|
5142
|
+
const [selectedTime, setSelectedTime] = useState(value ? `${value.getHours().toString().padStart(2, "0")}:${value.getMinutes().toString().padStart(2, "0")}` : undefined);
|
|
6609
5143
|
// Track previous value to detect external changes
|
|
6610
5144
|
const prevValueRef = useRef(undefined);
|
|
6611
5145
|
// ========================================
|
|
@@ -6620,22 +5154,28 @@ function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledD
|
|
|
6620
5154
|
const combineDateTime = useCallback((date, time) => {
|
|
6621
5155
|
if (!date)
|
|
6622
5156
|
return undefined;
|
|
6623
|
-
|
|
6624
|
-
|
|
6625
|
-
|
|
6626
|
-
|
|
6627
|
-
|
|
6628
|
-
|
|
6629
|
-
|
|
6630
|
-
|
|
5157
|
+
// If no time is selected, use 00:00
|
|
5158
|
+
if (!time) {
|
|
5159
|
+
const combined = new Date(date);
|
|
5160
|
+
combined.setHours(0, 0, 0, 0);
|
|
5161
|
+
// Validate against min/max datetime
|
|
5162
|
+
if (normalizedMinDateTime && combined < normalizedMinDateTime)
|
|
5163
|
+
return undefined;
|
|
5164
|
+
if (normalizedMaxDateTime && combined > normalizedMaxDateTime)
|
|
5165
|
+
return undefined;
|
|
5166
|
+
return combined;
|
|
6631
5167
|
}
|
|
5168
|
+
// Parse time and combine with date
|
|
5169
|
+
const [hours, minutes] = time.split(':').map(Number);
|
|
5170
|
+
const combined = new Date(date);
|
|
5171
|
+
combined.setHours(hours, minutes, 0, 0);
|
|
6632
5172
|
// Validate against min/max datetime
|
|
6633
5173
|
if (normalizedMinDateTime && combined < normalizedMinDateTime)
|
|
6634
5174
|
return undefined;
|
|
6635
5175
|
if (normalizedMaxDateTime && combined > normalizedMaxDateTime)
|
|
6636
5176
|
return undefined;
|
|
6637
5177
|
return combined;
|
|
6638
|
-
}, [normalizedMinDateTime, normalizedMaxDateTime
|
|
5178
|
+
}, [normalizedMinDateTime, normalizedMaxDateTime]);
|
|
6639
5179
|
/**
|
|
6640
5180
|
* Calculate dynamic time restrictions based on selected date
|
|
6641
5181
|
*
|
|
@@ -6649,39 +5189,33 @@ function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledD
|
|
|
6649
5189
|
const calculateTimeRestrictions = useCallback((selectedDate) => {
|
|
6650
5190
|
if (!selectedDate)
|
|
6651
5191
|
return { minTime, maxTime };
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
a.getDate() === b.getDate();
|
|
6655
|
-
const formatLocalTime = (d) => `${String(d.getHours()).padStart(2, "0")}:${String(d.getMinutes()).padStart(2, "0")}`;
|
|
5192
|
+
// Normalize selected date to date-only (ignore time component)
|
|
5193
|
+
const selectedDateOnly = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate());
|
|
6656
5194
|
let calculatedMinTime = minTime;
|
|
6657
5195
|
let calculatedMaxTime = maxTime;
|
|
6658
5196
|
// If selected date matches minDateTime date, restrict minimum time
|
|
6659
5197
|
if (normalizedMinDateTime) {
|
|
6660
|
-
const
|
|
6661
|
-
|
|
6662
|
-
|
|
6663
|
-
|
|
6664
|
-
calculatedMinTime =
|
|
6665
|
-
? getTimeInOffset(normalizedMinDateTime, timezoneOffset)
|
|
6666
|
-
: formatLocalTime(normalizedMinDateTime);
|
|
5198
|
+
const minDateOnly = new Date(normalizedMinDateTime.getFullYear(), normalizedMinDateTime.getMonth(), normalizedMinDateTime.getDate());
|
|
5199
|
+
if (selectedDateOnly.getTime() === minDateOnly.getTime()) {
|
|
5200
|
+
const hours = normalizedMinDateTime.getHours().toString().padStart(2, "0");
|
|
5201
|
+
const minutes = normalizedMinDateTime.getMinutes().toString().padStart(2, "0");
|
|
5202
|
+
calculatedMinTime = `${hours}:${minutes}`;
|
|
6667
5203
|
}
|
|
6668
5204
|
}
|
|
6669
5205
|
// If selected date matches maxDateTime date, restrict maximum time
|
|
6670
5206
|
if (normalizedMaxDateTime) {
|
|
6671
|
-
const
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
|
|
6675
|
-
calculatedMaxTime =
|
|
6676
|
-
? getTimeInOffset(normalizedMaxDateTime, timezoneOffset)
|
|
6677
|
-
: formatLocalTime(normalizedMaxDateTime);
|
|
5207
|
+
const maxDateOnly = new Date(normalizedMaxDateTime.getFullYear(), normalizedMaxDateTime.getMonth(), normalizedMaxDateTime.getDate());
|
|
5208
|
+
if (selectedDateOnly.getTime() === maxDateOnly.getTime()) {
|
|
5209
|
+
const hours = normalizedMaxDateTime.getHours().toString().padStart(2, "0");
|
|
5210
|
+
const minutes = normalizedMaxDateTime.getMinutes().toString().padStart(2, "0");
|
|
5211
|
+
calculatedMaxTime = `${hours}:${minutes}`;
|
|
6678
5212
|
}
|
|
6679
5213
|
}
|
|
6680
5214
|
return {
|
|
6681
5215
|
minTime: calculatedMinTime,
|
|
6682
5216
|
maxTime: calculatedMaxTime
|
|
6683
5217
|
};
|
|
6684
|
-
}, [normalizedMinDateTime, normalizedMaxDateTime, minTime, maxTime
|
|
5218
|
+
}, [normalizedMinDateTime, normalizedMaxDateTime, minTime, maxTime]);
|
|
6685
5219
|
// Calculate current time restrictions based on selected date
|
|
6686
5220
|
// Recalculates whenever selectedDate or the calculation function changes
|
|
6687
5221
|
const timeRestrictions = useMemo(() => calculateTimeRestrictions(selectedDate), [selectedDate, calculateTimeRestrictions]);
|
|
@@ -6701,15 +5235,15 @@ function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledD
|
|
|
6701
5235
|
if (currentTime !== prevTime) {
|
|
6702
5236
|
prevValueRef.current = value;
|
|
6703
5237
|
if (value) {
|
|
6704
|
-
setSelectedDate(
|
|
6705
|
-
setSelectedTime(
|
|
5238
|
+
setSelectedDate(value);
|
|
5239
|
+
setSelectedTime(`${value.getHours().toString().padStart(2, "0")}:${value.getMinutes().toString().padStart(2, "0")}`);
|
|
6706
5240
|
}
|
|
6707
5241
|
else {
|
|
6708
5242
|
setSelectedDate(undefined);
|
|
6709
5243
|
setSelectedTime(undefined);
|
|
6710
5244
|
}
|
|
6711
5245
|
}
|
|
6712
|
-
}, [value
|
|
5246
|
+
}, [value]);
|
|
6713
5247
|
// ========================================
|
|
6714
5248
|
// EVENT HANDLERS
|
|
6715
5249
|
// ========================================
|
|
@@ -6778,38 +5312,26 @@ function CwDateTimePicker({ value, onChange, minDateTime, maxDateTime, disabledD
|
|
|
6778
5312
|
onChange(now);
|
|
6779
5313
|
}
|
|
6780
5314
|
}, [normalizedMinDateTime, normalizedMaxDateTime, onChange]);
|
|
5315
|
+
// Extract min/max date from normalized datetime for DatePicker
|
|
5316
|
+
const minDate = normalizedMinDateTime;
|
|
5317
|
+
const maxDate = normalizedMaxDateTime;
|
|
6781
5318
|
// ========================================
|
|
6782
5319
|
// RENDER
|
|
6783
5320
|
// ========================================
|
|
6784
|
-
|
|
6785
|
-
const displayMinDate = useMemo(() => normalizedMinDateTime && timezoneOffset !== undefined
|
|
6786
|
-
? getDateInOffset(normalizedMinDateTime, timezoneOffset)
|
|
6787
|
-
: normalizedMinDateTime, [normalizedMinDateTime, timezoneOffset]);
|
|
6788
|
-
const displayMaxDate = useMemo(() => normalizedMaxDateTime && timezoneOffset !== undefined
|
|
6789
|
-
? getDateInOffset(normalizedMaxDateTime, timezoneOffset)
|
|
6790
|
-
: normalizedMaxDateTime, [normalizedMaxDateTime, timezoneOffset]);
|
|
6791
|
-
return jsx("div", { className: `cw-datetimepicker cw-datetimepicker-separate ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-flex-row cw-align-left-center cw-gap-small", children: [jsx(CwDatePicker, { value: selectedDate, onChange: handleDateChange, minDate: displayMinDate, maxDate: displayMaxDate, disabledDates: disabledDates, disabledMatcher: disabledMatcher, placeholder: datePlaceholder, disabled: disabled, required: required, showClear: showClear, numberOfMonths: numberOfMonths, popupPosition: popupPosition, locale: locale }), jsx(CwTimePicker, { value: selectedTime, onChange: handleTimeChange, interval: timeInterval, minTime: timeRestrictions.minTime, maxTime: timeRestrictions.maxTime, placeholder: timePlaceholder, disabled: disabled, required: required, showClear: showClear, popupPosition: popupPosition }), showNowButton && (jsx(CwButton, { type: "button", variant: "outline", onClick: handleNowClick, disabled: disabled, text: nowLabel }))] })] }) });
|
|
5321
|
+
return (jsx("div", { className: `cw-datetimepicker cw-datetimepicker-separate ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-flex-row cw-align-left-center cw-gap-small", children: [jsx(CwDatePicker, { value: selectedDate, onChange: handleDateChange, minDate: minDate, maxDate: maxDate, disabledDates: disabledDates, disabledMatcher: disabledMatcher, placeholder: datePlaceholder, disabled: disabled, required: required, showClear: showClear, numberOfMonths: numberOfMonths, popupPosition: popupPosition }), jsx(CwTimePicker, { value: selectedTime, onChange: handleTimeChange, interval: timeInterval, minTime: timeRestrictions.minTime, maxTime: timeRestrictions.maxTime, placeholder: timePlaceholder, disabled: disabled, required: required, showClear: showClear, popupPosition: popupPosition }), showNowButton && (jsx(CwButton, { type: "button", variant: "outline", onClick: handleNowClick, disabled: disabled, title: "Set to current date and time", text: "Now" }))] })] }) }));
|
|
6792
5322
|
}
|
|
6793
5323
|
|
|
6794
|
-
var compactStyles = {"compactPopup":"cw-datetime-compact-
|
|
5324
|
+
var compactStyles = {"compactPopup":"cw-datetime-compact-module_compactPopup__GiuNY","calendarWrapper":"cw-datetime-compact-module_calendarWrapper__P4Nlq","timeWrapper":"cw-datetime-compact-module_timeWrapper__uMe-A","compactTimeList":"cw-datetime-compact-module_compactTimeList__MzSQT"};
|
|
6795
5325
|
|
|
6796
|
-
function CwDateTimePickerCompact({ value, onChange, minDateTime, maxDateTime, disabledDates, disabledMatcher, timeInterval = 15, minTime, maxTime, labelProps, alignProps, placeholder = "dd.mm.yyyy HH:mm", disabled, required, className, showClear = true, popupPosition = "left-bottom", numberOfMonths = 1, showTodayButton = false,
|
|
5326
|
+
function CwDateTimePickerCompact({ value, onChange, minDateTime, maxDateTime, disabledDates, disabledMatcher, timeInterval = 15, minTime, maxTime, labelProps, alignProps, placeholder = "dd.mm.yyyy HH:mm", disabled, required, className, showClear = true, popupPosition = "left-bottom", numberOfMonths = 1, showTodayButton = false, }) {
|
|
6797
5327
|
const [isOpen, setIsOpen] = useState(false);
|
|
6798
5328
|
const [inputValue, setInputValue] = useState("");
|
|
6799
5329
|
const [selectedDate, setSelectedDate] = useState(value);
|
|
6800
5330
|
const [selectedTime, setSelectedTime] = useState("");
|
|
6801
5331
|
const containerRef = useRef(null);
|
|
6802
|
-
const wrapperRef = useRef(null);
|
|
6803
5332
|
const inputRef = useRef(null);
|
|
6804
5333
|
const timeListRef = useRef(null);
|
|
6805
5334
|
const prevValueRef = useRef(value);
|
|
6806
|
-
const handleClose = useCallback(() => setIsOpen(false), []);
|
|
6807
|
-
const { popupRef, popupStyle, renderPopup } = usePickerPopup({
|
|
6808
|
-
anchorRef: wrapperRef,
|
|
6809
|
-
isOpen,
|
|
6810
|
-
onClose: handleClose,
|
|
6811
|
-
position: popupPosition,
|
|
6812
|
-
});
|
|
6813
5335
|
// Generate time options based on interval - memoized
|
|
6814
5336
|
const timeOptions = useMemo(() => {
|
|
6815
5337
|
const options = [];
|
|
@@ -6902,6 +5424,20 @@ function CwDateTimePickerCompact({ value, onChange, minDateTime, maxDateTime, di
|
|
|
6902
5424
|
}
|
|
6903
5425
|
}
|
|
6904
5426
|
}, [value]);
|
|
5427
|
+
// Close popup when clicking outside
|
|
5428
|
+
useEffect(() => {
|
|
5429
|
+
const handleClickOutside = (event) => {
|
|
5430
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
5431
|
+
setIsOpen(false);
|
|
5432
|
+
}
|
|
5433
|
+
};
|
|
5434
|
+
if (isOpen) {
|
|
5435
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
5436
|
+
}
|
|
5437
|
+
return () => {
|
|
5438
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
5439
|
+
};
|
|
5440
|
+
}, [isOpen]);
|
|
6905
5441
|
// Scroll to selected time when opening
|
|
6906
5442
|
useEffect(() => {
|
|
6907
5443
|
if (isOpen && selectedTime && timeListRef.current) {
|
|
@@ -7024,11 +5560,11 @@ function CwDateTimePickerCompact({ value, onChange, minDateTime, maxDateTime, di
|
|
|
7024
5560
|
...(maxDateTime ? [{ after: maxDateTime }] : []),
|
|
7025
5561
|
...(disabledMatcher ? [disabledMatcher] : []),
|
|
7026
5562
|
], [disabledDates, minDateTime, maxDateTime, disabledMatcher]);
|
|
7027
|
-
return (jsx("div", { ref: containerRef, className: `cw-datetimepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", {
|
|
5563
|
+
return (jsx("div", { ref: containerRef, className: `cw-datetimepicker ${className || ""}`, children: jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: styles$4.pickerWrapper, children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, placeholder: placeholder, onChange: handleInputChange, onBlur: handleInputBlur, onClick: handleInputClick, onKeyDown: handleInputKeyDown, disabled: disabled, required: required, maxLength: 16, style: { width: "24ch" } }), jsx("div", { className: styles$4.pickerIcons, children: showClear && value && !disabled ? (jsx(CwButton, { type: "button", variant: "icon", color: "neutral", icon: "close", onClick: handleClear, tabIndex: -1, "aria-label": "Clear datetime" })) : (jsx(CwIcon, { iconId: "calendar-time" })) }), isOpen && (jsxs("div", { className: `${styles$4.pickerPopup} ${compactStyles.compactPopup}`, "data-position": popupPosition, children: [jsxs("div", { className: compactStyles.calendarWrapper, children: [jsx(DayPicker, { mode: "single", selected: selectedDate, onSelect: handleDaySelect, defaultMonth: selectedDate, disabled: disabledDays, numberOfMonths: numberOfMonths, modifiers: {
|
|
7028
5564
|
today: new Date(),
|
|
7029
5565
|
}, modifiersClassNames: {
|
|
7030
5566
|
today: "rdp-day-today",
|
|
7031
|
-
} }), showTodayButton && (jsx("footer", { className: "cw-flex-row cw-align-center-center", children: jsx(CwButton, { type: "button", variant: "outline", icon: "check-big", onClick: handleNowClick, text:
|
|
5567
|
+
} }), showTodayButton && (jsx("footer", { className: "cw-flex-row cw-align-center-center", children: jsx(CwButton, { type: "button", variant: "outline", icon: "check-big", onClick: handleNowClick, text: "Now" }) }))] }), jsxs("div", { className: compactStyles.timeWrapper, children: [jsxs("header", { children: [jsx(CwIcon, { iconId: "clock", size: "medium" }), jsx("span", { children: "Time" })] }), jsx("div", { ref: timeListRef, className: `${timeStyles.timePickerList} ${compactStyles.compactTimeList}`, children: timeOptions.map((time) => {
|
|
7032
5568
|
const isSelected = time === selectedTime;
|
|
7033
5569
|
return (jsx("button", { type: "button", className: isSelected ? timeStyles.selected : "", onClick: () => handleTimeSelect(time), children: time }, time));
|
|
7034
5570
|
}) })] })] }))] })] }) }));
|
|
@@ -7350,7 +5886,7 @@ crewAssignmentSchedulerContextMenu, }) => {
|
|
|
7350
5886
|
};
|
|
7351
5887
|
|
|
7352
5888
|
const TimeLine$1 = ({ id, toolTipTitle, marginLeft, color = "rgba(255,0,0,.6)", pixels = 2, height = "100%", zIndex = 1, }) => {
|
|
7353
|
-
return (jsx(
|
|
5889
|
+
return (jsx(Tooltip, { title: toolTipTitle, children: jsx("div", { id: id, style: {
|
|
7354
5890
|
borderLeft: `${pixels}px solid ${color}`,
|
|
7355
5891
|
marginLeft: marginLeft,
|
|
7356
5892
|
width: "0px",
|
|
@@ -7365,10 +5901,7 @@ const SchedulerContentArea = ({ now, showTimeline, timeLineLeftPx, timeSeparator
|
|
|
7365
5901
|
if (reference) {
|
|
7366
5902
|
setContentArea(reference);
|
|
7367
5903
|
}
|
|
7368
|
-
}, children: [showTimeline && (jsx(TimeLine$1, { id: scheduler.props.id + "_timeline", marginLeft: timeLineLeftPx, zIndex: 8, toolTipTitle:
|
|
7369
|
-
hour: now.getHours(),
|
|
7370
|
-
minute: now.getMinutes(),
|
|
7371
|
-
}).toString({ smallestUnit: "minute" }) })), timeSeparatorLeftPx.map((pixels) => {
|
|
5904
|
+
}, children: [showTimeline && (jsx(TimeLine$1, { id: scheduler.props.id + "_timeline", marginLeft: timeLineLeftPx, zIndex: 8, toolTipTitle: moment(now).format("HH:mm") })), timeSeparatorLeftPx.map((pixels) => {
|
|
7372
5905
|
return jsx(TimeLine$1, { marginLeft: pixels, color: "rgba(255,255,255,0.7)" });
|
|
7373
5906
|
}), jsx("span", { onClick: () => {
|
|
7374
5907
|
if (onEmptyClick) {
|
|
@@ -7582,11 +6115,6 @@ const DaysHeader = ({ days, divisionType, maxWidth, headerType }) => {
|
|
|
7582
6115
|
return jsx("tr", { className: "cwelltSchRowDate", children: headerToDraw });
|
|
7583
6116
|
};
|
|
7584
6117
|
|
|
7585
|
-
function formatHHmm(date) {
|
|
7586
|
-
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
7587
|
-
const zdt = Temporal.Instant.fromEpochMilliseconds(date.getTime()).toZonedDateTimeISO(timeZone);
|
|
7588
|
-
return `${zdt.hour.toString().padStart(2, "0")}:${zdt.minute.toString().padStart(2, "0")}`;
|
|
7589
|
-
}
|
|
7590
6118
|
const getFormattedTimeForHeader = (calculatedDivType, calculatedDivision, timeHeader) => {
|
|
7591
6119
|
let showDate = "";
|
|
7592
6120
|
switch (calculatedDivType) {
|
|
@@ -7602,18 +6130,18 @@ const getFormattedTimeForHeader = (calculatedDivType, calculatedDivision, timeHe
|
|
|
7602
6130
|
timeHeader.getHours() === 15 ||
|
|
7603
6131
|
timeHeader.getHours() === 18 ||
|
|
7604
6132
|
timeHeader.getHours() === 21
|
|
7605
|
-
?
|
|
6133
|
+
? moment(timeHeader).format("HH:mm")
|
|
7606
6134
|
: "";
|
|
7607
6135
|
break;
|
|
7608
6136
|
case 3:
|
|
7609
6137
|
showDate =
|
|
7610
6138
|
timeHeader.getHours() === 0 || timeHeader.getHours() === 8 || timeHeader.getHours() === 16
|
|
7611
|
-
?
|
|
6139
|
+
? moment(timeHeader).format("HH:mm")
|
|
7612
6140
|
: "";
|
|
7613
6141
|
break;
|
|
7614
6142
|
case 2:
|
|
7615
6143
|
showDate =
|
|
7616
|
-
timeHeader.getHours() === 0 || timeHeader.getHours() === 12 ?
|
|
6144
|
+
timeHeader.getHours() === 0 || timeHeader.getHours() === 12 ? moment(timeHeader).format("HH:mm") : "";
|
|
7617
6145
|
break;
|
|
7618
6146
|
}
|
|
7619
6147
|
break;
|
|
@@ -7765,7 +6293,8 @@ const compareStrings = (str1, str2) => {
|
|
|
7765
6293
|
const filterResources = (module, resourceName, resources, groupByFunction, endDate, startDate, scheduleName) => {
|
|
7766
6294
|
if ((module === "CrewControl" || module === "CrewScheduling" || module === "CrewSchedulingVacations") &&
|
|
7767
6295
|
resourceName === "Employees") {
|
|
7768
|
-
resources = resources.filter(c => (c.data.Eintritt === null || (
|
|
6296
|
+
resources = resources.filter(c => (c.data.Eintritt === null || (c.data.Eintritt !== null && moment(c.data.Eintritt).toDate() <= endDate)) &&
|
|
6297
|
+
(c.data.Austritt === null || (c.data.Austritt !== null && moment(c.data.Austritt).toDate() >= startDate)));
|
|
7769
6298
|
}
|
|
7770
6299
|
if (scheduleName === "crewPinnedScheduler" || (module === "CrewControl" || module === "CrewScheduling") && resourceName === "Employees") {
|
|
7771
6300
|
const sortKey = (groupByFunction || scheduleName === "crewPinnedScheduler") ? "mainFunction" : "C3_LC";
|
|
@@ -7959,8 +6488,8 @@ class CwScheduler extends Component {
|
|
|
7959
6488
|
arraysEqual = (a1, a2) => a1.length === a2.length && a1.every((o, idx) => this.objectsEqualDeep(o, a2[idx]));
|
|
7960
6489
|
componentWillReceiveProps(_nextProps) {
|
|
7961
6490
|
if (this.state.showConsoleLogs) {
|
|
7962
|
-
console.log("Schedule - componentWillReceiveProps, start: ", new Date());
|
|
7963
|
-
console.log("Schedule - componentWillReceiveProps - has changes, start: ", new Date());
|
|
6491
|
+
console.log("Schedule - componentWillReceiveProps, start: ", moment(new Date()).toString());
|
|
6492
|
+
console.log("Schedule - componentWillReceiveProps - has changes, start: ", moment(new Date()).toString());
|
|
7964
6493
|
}
|
|
7965
6494
|
const dateChange = _nextProps.startDate.toISOString() !== this.props.startDate.toISOString() ||
|
|
7966
6495
|
_nextProps.endDate.toISOString() !== this.props.endDate.toISOString();
|
|
@@ -8001,8 +6530,8 @@ class CwScheduler extends Component {
|
|
|
8001
6530
|
pinnedResources: this.props.pinnedResources ?? [],
|
|
8002
6531
|
});
|
|
8003
6532
|
if (this.state.showConsoleLogs) {
|
|
8004
|
-
console.log("Schedule - componentWillReceiveProps - print on schedule, end: ", new Date());
|
|
8005
|
-
console.log("Schedule - componentWillReceiveProps, end: ", new Date());
|
|
6533
|
+
console.log("Schedule - componentWillReceiveProps - print on schedule, end: ", moment(new Date()).toString());
|
|
6534
|
+
console.log("Schedule - componentWillReceiveProps, end: ", moment(new Date()).toString());
|
|
8006
6535
|
}
|
|
8007
6536
|
return;
|
|
8008
6537
|
}
|
|
@@ -8095,11 +6624,10 @@ class CwScheduler extends Component {
|
|
|
8095
6624
|
}
|
|
8096
6625
|
|
|
8097
6626
|
function dateFromPercentage(startDate, visibleDays, percentage) {
|
|
8098
|
-
const
|
|
8099
|
-
const
|
|
8100
|
-
const
|
|
8101
|
-
|
|
8102
|
-
return new Date(result.epochMilliseconds);
|
|
6627
|
+
const endTime = moment(startDate).add(visibleDays, "day").toDate();
|
|
6628
|
+
const timeSpan = endTime.getTime() - startDate.getTime();
|
|
6629
|
+
const clickedDate = new Date(startDate.getTime() + (timeSpan * percentage));
|
|
6630
|
+
return clickedDate;
|
|
8103
6631
|
}
|
|
8104
6632
|
|
|
8105
6633
|
function getPercentageFromMouseEvent(event) {
|
|
@@ -8234,7 +6762,7 @@ class OnClickContextMenu {
|
|
|
8234
6762
|
}
|
|
8235
6763
|
}
|
|
8236
6764
|
|
|
8237
|
-
var styles$3 = {"scheduler-header-divisions":"scheduler-header-
|
|
6765
|
+
var styles$3 = {"scheduler-header-divisions":"scheduler-header-module_scheduler-header-divisions__1JrNe","scheduler-timeline-now":"scheduler-header-module_scheduler-timeline-now__naREv","scheduler-timeline-label":"scheduler-header-module_scheduler-timeline-label__mLVAp","scheduler-header-title":"scheduler-header-module_scheduler-header-title__Jzy94","scheduler-dates":"scheduler-header-module_scheduler-dates__O7ePQ","current-day":"scheduler-header-module_current-day__FpHiv","scheduler-hours":"scheduler-header-module_scheduler-hours__ZDCVj"};
|
|
8238
6766
|
|
|
8239
6767
|
const getNow$1 = (isUtc) => {
|
|
8240
6768
|
let now = new Date();
|
|
@@ -8270,27 +6798,20 @@ const TimeLine = ({ left, top = "0px", height, color, width = "2px", zIndexNumbe
|
|
|
8270
6798
|
}, className: styles$3["scheduler-timeline-label"], children: timeString })) }));
|
|
8271
6799
|
};
|
|
8272
6800
|
|
|
8273
|
-
function isToday(startDate, endDate) {
|
|
8274
|
-
if (!startDate)
|
|
8275
|
-
return false;
|
|
8276
|
-
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
8277
|
-
const today = Temporal.Now.plainDateISO();
|
|
8278
|
-
const start = Temporal.Instant.fromEpochMilliseconds(startDate.getTime())
|
|
8279
|
-
.toZonedDateTimeISO(timeZone).toPlainDate();
|
|
8280
|
-
if (endDate) {
|
|
8281
|
-
const end = Temporal.Instant.fromEpochMilliseconds(endDate.getTime())
|
|
8282
|
-
.toZonedDateTimeISO(timeZone).toPlainDate();
|
|
8283
|
-
return Temporal.PlainDate.compare(today, start) >= 0
|
|
8284
|
-
&& Temporal.PlainDate.compare(today, end) <= 0;
|
|
8285
|
-
}
|
|
8286
|
-
return today.equals(start);
|
|
8287
|
-
}
|
|
8288
|
-
|
|
8289
6801
|
const SchedulerHeaderDivision = ({ topDivisions, bottomDivisions, classification, topWidth, startDate, endDate }) => {
|
|
6802
|
+
const isToday = () => {
|
|
6803
|
+
if (!startDate)
|
|
6804
|
+
return false;
|
|
6805
|
+
const today = moment();
|
|
6806
|
+
if (endDate) {
|
|
6807
|
+
return today.isBetween(startDate, endDate, 'day', '[]');
|
|
6808
|
+
}
|
|
6809
|
+
return today.isSame(startDate, 'day');
|
|
6810
|
+
};
|
|
8290
6811
|
return (jsxs("div", { style: {
|
|
8291
6812
|
width: topWidth,
|
|
8292
6813
|
cursor: "pointer"
|
|
8293
|
-
}, children: [jsx("div", { className: `${styles$3["scheduler-dates"]} ${isToday(
|
|
6814
|
+
}, children: [jsx("div", { className: `${styles$3["scheduler-dates"]} ${isToday() ? styles$3["current-day"] : ""}`, children: jsx("span", { children: topDivisions }) }), jsx("div", { style: { display: "flex", justifyContent: "space-between", flex: 1 }, children: bottomDivisions.map((element) => (jsx("div", { className: styles$3["scheduler-hours"], children: jsx("span", { children: element }) }, classification + element + topDivisions))) })] }));
|
|
8294
6815
|
};
|
|
8295
6816
|
|
|
8296
6817
|
const HeaderTitle = ({ title, dividerText, width }) => {
|
|
@@ -8314,25 +6835,14 @@ const SchedulerHeader = ({ content, divisions, visibleDays, selectedDate, width,
|
|
|
8314
6835
|
const thisTopWidth = visibleDays > 15
|
|
8315
6836
|
? topWidth * day.bottom.length
|
|
8316
6837
|
: topWidth;
|
|
8317
|
-
const
|
|
8318
|
-
|
|
6838
|
+
const dateStr = day.startDate ? moment(day.startDate) : moment(day.top, "DD.MM.YYYY");
|
|
6839
|
+
const startDate = dateStr.toDate();
|
|
6840
|
+
const endDate = day.endDate ? moment(day.endDate).toDate() : undefined;
|
|
6841
|
+
return (jsx(SchedulerHeaderDivision, { topDivisions: day.top, bottomDivisions: day.bottom, classification: classification, topWidth: thisTopWidth + "%", startDate: startDate, endDate: endDate }, day.top + classification));
|
|
8319
6842
|
}), !(timeLinePercentage < 0 || timeLinePercentage > 100) && (jsx(TimeLine, { color: "red", left: `${timeLinePercentage}%`, top: "50%", height: "50%", isHeader: true, isUtc: isUtc }))] })] }));
|
|
8320
6843
|
};
|
|
8321
|
-
function getStartEnd(day) {
|
|
8322
|
-
const startDate = day.startDate
|
|
8323
|
-
? new Date(day.startDate)
|
|
8324
|
-
: (() => {
|
|
8325
|
-
const [dd, mm, yyyy] = day.top.split(".");
|
|
8326
|
-
return new Date(Number(yyyy), Number(mm) - 1, Number(dd));
|
|
8327
|
-
})();
|
|
8328
|
-
const endDate = day.endDate ? new Date(day.endDate) : undefined;
|
|
8329
|
-
return {
|
|
8330
|
-
start: startDate,
|
|
8331
|
-
end: endDate
|
|
8332
|
-
};
|
|
8333
|
-
}
|
|
8334
6844
|
|
|
8335
|
-
var styles$2 = {"hide-scrollbar":"new-scheduler-
|
|
6845
|
+
var styles$2 = {"hide-scrollbar":"new-scheduler-module_hide-scrollbar__33GG9","scheduler-event":"new-scheduler-module_scheduler-event__gphwn","scheduler-event-container":"new-scheduler-module_scheduler-event-container__-h1xm","time-marker":"new-scheduler-module_time-marker__2BejU","scheduler-event-text":"new-scheduler-module_scheduler-event-text__zjvd7"};
|
|
8336
6846
|
|
|
8337
6847
|
const BackgroundEvent = ({ value, heightRem }) => {
|
|
8338
6848
|
const backColor = getHSLColor(value.color, value.alpha ?? 0.5);
|
|
@@ -8358,7 +6868,7 @@ const BackgroundEvent = ({ value, heightRem }) => {
|
|
|
8358
6868
|
fontSize: "var(--cw-font-size-smallest)",
|
|
8359
6869
|
padding: "0.25rem",
|
|
8360
6870
|
color: textColor,
|
|
8361
|
-
alignItems:
|
|
6871
|
+
alignItems: "flex-end"
|
|
8362
6872
|
}, className: styles$2["scheduler-event-container"], children: [value.icons ? jsx("div", { style: {
|
|
8363
6873
|
display: "flex",
|
|
8364
6874
|
flexDirection: "row",
|
|
@@ -8368,147 +6878,44 @@ const BackgroundEvent = ({ value, heightRem }) => {
|
|
|
8368
6878
|
}, children: value.icons }) : null, jsx("span", { className: styles$2["scheduler-event-text"], children: value.name })] }) }) }) }) })) : null;
|
|
8369
6879
|
};
|
|
8370
6880
|
|
|
8371
|
-
|
|
8372
|
-
const schedulerEndDate = new Date(selectedDate.getTime() + visibleDays * 24 * 60 * 60 * 1000);
|
|
8373
|
-
const isBefore = selectedDate > startDate && selectedDate > endDate;
|
|
8374
|
-
const isAfter = schedulerEndDate < startDate && schedulerEndDate < endDate;
|
|
8375
|
-
return !isBefore && !isAfter;
|
|
8376
|
-
};
|
|
8377
|
-
|
|
8378
|
-
const hoursBetween = (date1, date2) => {
|
|
8379
|
-
const oneHourInMillis = 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
|
|
8380
|
-
const timeDiff = date2.getTime() - date1.getTime();
|
|
8381
|
-
return timeDiff / oneHourInMillis;
|
|
8382
|
-
};
|
|
8383
|
-
const getEventSizes = (schedulerDate, totalDays, startDate, endDate) => {
|
|
8384
|
-
if (!eventIsVisible(startDate, endDate, schedulerDate, totalDays)) {
|
|
8385
|
-
return {
|
|
8386
|
-
left: 0,
|
|
8387
|
-
width: 0,
|
|
8388
|
-
};
|
|
8389
|
-
}
|
|
8390
|
-
const totalHours = totalDays * 24;
|
|
8391
|
-
// const dateString = schedulerDate.toISOString().split('T')[0];
|
|
8392
|
-
//const schedulerDateAtZero = new Date(dateString)
|
|
8393
|
-
let startHours = hoursBetween(schedulerDate, startDate);
|
|
8394
|
-
let durationHours = hoursBetween(startDate, endDate);
|
|
8395
|
-
const startOutOfScheduler = startHours < 0;
|
|
8396
|
-
if (startOutOfScheduler) {
|
|
8397
|
-
durationHours += startHours;
|
|
8398
|
-
startHours = 0;
|
|
8399
|
-
}
|
|
8400
|
-
const left = (startHours / totalHours) * 100;
|
|
8401
|
-
// Minimum width equivalent to 15 minutes so zero/near-zero duration events stay visible
|
|
8402
|
-
const MIN_WIDTH_HOURS = 0.25;
|
|
8403
|
-
const minWidth = (MIN_WIDTH_HOURS * 100) / totalHours;
|
|
8404
|
-
const width = Math.max((durationHours * 100) / totalHours, minWidth);
|
|
8405
|
-
return {
|
|
8406
|
-
left,
|
|
8407
|
-
width,
|
|
8408
|
-
};
|
|
8409
|
-
};
|
|
6881
|
+
var styles$1 = {"scheduler-row-header":"scheduler-row-module_scheduler-row-header__S-iv4"};
|
|
8410
6882
|
|
|
8411
|
-
const
|
|
8412
|
-
|
|
8413
|
-
|
|
8414
|
-
|
|
8415
|
-
|
|
8416
|
-
|
|
8417
|
-
}, "
|
|
8418
|
-
const { left, width } = getEventSizes(selectedDate, visibleDays, indicator.start, indicator.end);
|
|
8419
|
-
if (width <= 0)
|
|
8420
|
-
return null;
|
|
8421
|
-
const bar = (jsx("div", { style: {
|
|
8422
|
-
position: "absolute",
|
|
8423
|
-
left: `${left}%`,
|
|
8424
|
-
width: `${width}%`,
|
|
8425
|
-
height: `${INDICATOR_HEIGHT_REM}rem`,
|
|
8426
|
-
backgroundColor: indicator.color,
|
|
8427
|
-
borderRadius: "1px",
|
|
8428
|
-
pointerEvents: "auto",
|
|
8429
|
-
} }, indicator.id));
|
|
8430
|
-
if (indicator.tooltip) {
|
|
8431
|
-
return (jsx(CwTooltipNew, { content: indicator.tooltip, position: "bottom", dissapearsWhenHover: true, showDelay: 200, children: bar }, indicator.id));
|
|
8432
|
-
}
|
|
8433
|
-
return bar;
|
|
8434
|
-
}) }));
|
|
6883
|
+
const DefaultRowHeader = ({ value, width, onEvent }) => {
|
|
6884
|
+
return (jsxs("div", { style: {
|
|
6885
|
+
width: width,
|
|
6886
|
+
// background: color,
|
|
6887
|
+
}, onClick: (_) => {
|
|
6888
|
+
onEvent(new OnClickRowHeader(value.rowId));
|
|
6889
|
+
}, className: styles$1["scheduler-row-header"], children: [jsxs("div", { children: [jsx("strong", { children: value.title }), value.title2 && jsxs("span", { children: ["-", value.title2] }), " ", jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 && jsxs("span", { className: styles$1["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }));
|
|
8435
6890
|
};
|
|
8436
6891
|
|
|
8437
|
-
// Fires onClick on the first click of a sequence (detail === 1) and
|
|
8438
|
-
// onDoubleClick on the native dblclick event. Subsequent clicks of a
|
|
8439
|
-
// double-click sequence (detail > 1) are suppressed so the same logical
|
|
8440
|
-
// interaction does not fire onClick twice. Selection therefore appears
|
|
8441
|
-
// within one paint frame instead of being delayed by an artificial timer.
|
|
8442
6892
|
function useSingleAndDoubleClicks(onClick, onDoubleClick) {
|
|
6893
|
+
const timer = useRef(null);
|
|
6894
|
+
const cancelPendingClick = useCallback(() => {
|
|
6895
|
+
if (timer.current) {
|
|
6896
|
+
clearTimeout(timer.current);
|
|
6897
|
+
timer.current = null;
|
|
6898
|
+
}
|
|
6899
|
+
}, [timer]);
|
|
8443
6900
|
const handleClick = useCallback((e) => {
|
|
6901
|
+
// We only cache the most recent click event, so cancel any pending clicks
|
|
8444
6902
|
e.stopPropagation();
|
|
8445
6903
|
e.preventDefault();
|
|
8446
|
-
|
|
8447
|
-
|
|
8448
|
-
|
|
8449
|
-
|
|
6904
|
+
cancelPendingClick();
|
|
6905
|
+
timer.current = setTimeout(() => {
|
|
6906
|
+
timer.current = null;
|
|
6907
|
+
onClick(e);
|
|
6908
|
+
}, 500);
|
|
6909
|
+
}, [timer, cancelPendingClick, onClick]);
|
|
8450
6910
|
const handleDoubleClick = useCallback((e) => {
|
|
8451
6911
|
e.stopPropagation();
|
|
8452
6912
|
e.preventDefault();
|
|
6913
|
+
cancelPendingClick();
|
|
8453
6914
|
onDoubleClick(e);
|
|
8454
|
-
}, [onDoubleClick]);
|
|
6915
|
+
}, [cancelPendingClick, onDoubleClick]);
|
|
8455
6916
|
return { handleClick, handleDoubleClick };
|
|
8456
6917
|
}
|
|
8457
6918
|
|
|
8458
|
-
const eventsCollide = (event1, event2) => {
|
|
8459
|
-
const eventInsideOther = event1.startDate <= event2.startDate && event1.endDate >= event2.endDate;
|
|
8460
|
-
const eventCollideStart = event1.endDate > event2.startDate && event1.endDate < event2.endDate;
|
|
8461
|
-
const eventCollideEnd = event2.endDate > event1.startDate && event2.endDate < event1.endDate;
|
|
8462
|
-
return eventInsideOther || eventCollideStart || eventCollideEnd;
|
|
8463
|
-
};
|
|
8464
|
-
// Function to separate events into non-colliding rows
|
|
8465
|
-
const separateEventsToInnerRows = (events) => {
|
|
8466
|
-
const sortedEvents = [...events].sort((a, b) => {
|
|
8467
|
-
const aOrder = a.order ?? Number.MAX_SAFE_INTEGER;
|
|
8468
|
-
const bOrder = b.order ?? Number.MAX_SAFE_INTEGER;
|
|
8469
|
-
if (aOrder !== bOrder) {
|
|
8470
|
-
return aOrder - bOrder; // Prioridad al order si ambos están definidos
|
|
8471
|
-
}
|
|
8472
|
-
return a.startDate.getTime() - b.startDate.getTime();
|
|
8473
|
-
});
|
|
8474
|
-
const rows = [];
|
|
8475
|
-
for (const event of sortedEvents) {
|
|
8476
|
-
let placed = false;
|
|
8477
|
-
for (const row of rows) {
|
|
8478
|
-
if (!row.some((existingEvent) => eventsCollide(existingEvent, event))) {
|
|
8479
|
-
row.push(event);
|
|
8480
|
-
placed = true;
|
|
8481
|
-
break;
|
|
8482
|
-
}
|
|
8483
|
-
}
|
|
8484
|
-
if (!placed) {
|
|
8485
|
-
rows.push([event]);
|
|
8486
|
-
}
|
|
8487
|
-
}
|
|
8488
|
-
return rows;
|
|
8489
|
-
};
|
|
8490
|
-
|
|
8491
|
-
const DivisionLine = ({ left, top = "0px", height, isDayBoundary }) => {
|
|
8492
|
-
const color = isDayBoundary ? "rgba(255,255,255,1)" : "rgba(255,255,255,0.8)";
|
|
8493
|
-
const width = isDayBoundary ? "2px" : "1px";
|
|
8494
|
-
return (jsx(TimeLine, { color: color, left: left + "%", height: height, width: width, top: top }));
|
|
8495
|
-
};
|
|
8496
|
-
|
|
8497
|
-
const WeekEndLine = ({ left, top = "0px", height, widthPercentage }) => {
|
|
8498
|
-
return (jsx(TimeLine, { color: "rgba(0,0,0,0.05)", left: left + "%", height: height, width: widthPercentage + "%", top: top }));
|
|
8499
|
-
};
|
|
8500
|
-
|
|
8501
|
-
var styles$1 = {"scheduler-row-header":"scheduler-row-module__scheduler-row-header__S-iv4"};
|
|
8502
|
-
|
|
8503
|
-
const DefaultRowHeader = ({ value, width, onEvent }) => {
|
|
8504
|
-
return (jsxs("div", { style: {
|
|
8505
|
-
width: width,
|
|
8506
|
-
// background: color,
|
|
8507
|
-
}, onClick: (_) => {
|
|
8508
|
-
onEvent(new OnClickRowHeader(value.rowId));
|
|
8509
|
-
}, className: styles$1["scheduler-row-header"], children: [jsxs("div", { children: [jsx("strong", { children: value.title }), value.title2 && jsxs("span", { children: ["-", value.title2] }), " ", jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 && jsxs("span", { className: styles$1["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }));
|
|
8510
|
-
};
|
|
8511
|
-
|
|
8512
6919
|
const EventSideDrag = ({ left = false, heightRem, onStartEvent }) => {
|
|
8513
6920
|
return (jsx("span", { draggable: true, onDragStart: (e) => {
|
|
8514
6921
|
e.stopPropagation();
|
|
@@ -8520,13 +6927,9 @@ const EventSideDrag = ({ left = false, heightRem, onStartEvent }) => {
|
|
|
8520
6927
|
} }));
|
|
8521
6928
|
};
|
|
8522
6929
|
|
|
8523
|
-
const MAX_EVENT_HEIGHT_REM = 1.5;
|
|
8524
6930
|
const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
8525
6931
|
const [isOnDrag, setIsOnDrag] = useState(false);
|
|
8526
6932
|
const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
|
|
8527
|
-
const effectiveHeight = Math.min(heightRem, MAX_EVENT_HEIGHT_REM);
|
|
8528
|
-
const topOffsetRem = (heightRem - effectiveHeight) / 2;
|
|
8529
|
-
const topOffsetPx = Math.round(topOffsetRem * 16) + 1;
|
|
8530
6933
|
// Calculate colors of the event
|
|
8531
6934
|
const backColor = getHSLColor(value.color, value.alpha ?? 1);
|
|
8532
6935
|
const textColor = getContrastColor(value.color);
|
|
@@ -8562,10 +6965,9 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
|
8562
6965
|
}, placement: "bottom", options: value.contextMenuItems ?? [], onSelect: (key) => {
|
|
8563
6966
|
onEvent(new OnClickContextMenu(value.id, key));
|
|
8564
6967
|
}, children: jsx("div", { style: {
|
|
8565
|
-
top:
|
|
6968
|
+
top: "2px",
|
|
8566
6969
|
left: `${value.left}%`,
|
|
8567
6970
|
width: `${value.width}%`,
|
|
8568
|
-
minWidth: "5px",
|
|
8569
6971
|
position: "absolute",
|
|
8570
6972
|
zIndex: isOnDrag ? 999 : undefined,
|
|
8571
6973
|
contentVisibility: "auto",
|
|
@@ -8582,21 +6984,19 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
|
8582
6984
|
}, onDragEnd: (_) => {
|
|
8583
6985
|
if (value.isDraggable)
|
|
8584
6986
|
setIsOnDrag(false);
|
|
8585
|
-
}, children: jsx(
|
|
6987
|
+
}, children: jsx(CwGenericTooltip, { content: value.tooltip, position: "bottom", hide: isOnDrag, dissapearsWhenHover: true, showDelay: 200, children: jsxs("div", { style: {
|
|
8586
6988
|
border: value.selected ? "2px solid black" : "none",
|
|
8587
6989
|
backgroundColor: backColor,
|
|
8588
|
-
height: `calc(${
|
|
6990
|
+
height: `calc(${heightRem}rem - 4px)`,
|
|
8589
6991
|
opacity: eventTransparent ? 0.5 : 1,
|
|
8590
6992
|
}, className: styles$2["scheduler-event"], children: [jsxs("div", { style: {
|
|
8591
6993
|
display: "flex",
|
|
8592
6994
|
flexDirection: "row",
|
|
8593
6995
|
alignItems: "stretch",
|
|
8594
6996
|
width: "100%",
|
|
8595
|
-
padding: "0 2px",
|
|
8596
6997
|
cursor: value.isDraggable ? "pointer" : "default",
|
|
8597
|
-
|
|
8598
|
-
|
|
8599
|
-
}, children: [value.isResizable && (jsx(EventSideDrag, { left: true, heightRem: effectiveHeight * 0.7, onStartEvent: () => {
|
|
6998
|
+
height: `calc(${heightRem}rem - 10px)`,
|
|
6999
|
+
}, children: [value.isResizable && (jsx(EventSideDrag, { left: true, heightRem: heightRem * 0.7, onStartEvent: () => {
|
|
8600
7000
|
onEvent(new OnLeftDragStart(value.id));
|
|
8601
7001
|
} })), jsxs("div", { className: styles$2["scheduler-event-container"], children: [jsx("div", { style: {
|
|
8602
7002
|
display: "flex",
|
|
@@ -8620,7 +7020,7 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
|
8620
7020
|
height: "8px",
|
|
8621
7021
|
margin: 0,
|
|
8622
7022
|
padding: 0,
|
|
8623
|
-
} }, value.id + "_" + i))) })) : (value.name) })] }), value.isResizable && (jsx(EventSideDrag, { heightRem:
|
|
7023
|
+
} }, value.id + "_" + i))) })) : (value.name) })] }), value.isResizable && (jsx(EventSideDrag, { heightRem: heightRem * 0.7, onStartEvent: () => {
|
|
8624
7024
|
onEvent(new OnRightDragStart(value.id));
|
|
8625
7025
|
} }))] }), value.primaryTimeMarkerColor && (jsx("div", { className: styles$2["time-marker"], style: {
|
|
8626
7026
|
backgroundColor: value.primaryTimeMarkerColor,
|
|
@@ -8629,9 +7029,50 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
|
|
|
8629
7029
|
} }))] }) }) }, value.id) }));
|
|
8630
7030
|
};
|
|
8631
7031
|
|
|
7032
|
+
const eventsCollide = (event1, event2) => {
|
|
7033
|
+
const eventInsideOther = event1.startDate <= event2.startDate && event1.endDate >= event2.endDate;
|
|
7034
|
+
const eventCollideStart = event1.endDate > event2.startDate && event1.endDate < event2.endDate;
|
|
7035
|
+
const eventCollideEnd = event2.endDate > event1.startDate && event2.endDate < event1.endDate;
|
|
7036
|
+
return eventInsideOther || eventCollideStart || eventCollideEnd;
|
|
7037
|
+
};
|
|
7038
|
+
// Function to separate events into non-colliding rows
|
|
7039
|
+
const separateEventsToInnerRows = (events) => {
|
|
7040
|
+
const sortedEvents = [...events].sort((a, b) => {
|
|
7041
|
+
const aOrder = a.order ?? Number.MAX_SAFE_INTEGER;
|
|
7042
|
+
const bOrder = b.order ?? Number.MAX_SAFE_INTEGER;
|
|
7043
|
+
if (aOrder !== bOrder) {
|
|
7044
|
+
return aOrder - bOrder; // Prioridad al order si ambos están definidos
|
|
7045
|
+
}
|
|
7046
|
+
return a.startDate.getTime() - b.startDate.getTime();
|
|
7047
|
+
});
|
|
7048
|
+
const rows = [];
|
|
7049
|
+
for (const event of sortedEvents) {
|
|
7050
|
+
let placed = false;
|
|
7051
|
+
for (const row of rows) {
|
|
7052
|
+
if (!row.some((existingEvent) => eventsCollide(existingEvent, event))) {
|
|
7053
|
+
row.push(event);
|
|
7054
|
+
placed = true;
|
|
7055
|
+
break;
|
|
7056
|
+
}
|
|
7057
|
+
}
|
|
7058
|
+
if (!placed) {
|
|
7059
|
+
rows.push([event]);
|
|
7060
|
+
}
|
|
7061
|
+
}
|
|
7062
|
+
return rows;
|
|
7063
|
+
};
|
|
7064
|
+
|
|
7065
|
+
const DivisionLine = ({ left, top = "0px", height }) => {
|
|
7066
|
+
return (jsx(TimeLine, { color: "rgba(255,255,255,1)", left: left + "%", height: height, width: 1 + "px", top: top }));
|
|
7067
|
+
};
|
|
7068
|
+
|
|
7069
|
+
const WeekEndLine = ({ left, top = "0px", height, widthPercentage }) => {
|
|
7070
|
+
return (jsx(TimeLine, { color: "rgba(0,0,0,0.05)", left: left + "%", height: height, width: widthPercentage + "%", top: top }));
|
|
7071
|
+
};
|
|
7072
|
+
|
|
8632
7073
|
const SchedulerRow = memo((props) => {
|
|
8633
7074
|
const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
|
|
8634
|
-
const { events, backgroundEvents,
|
|
7075
|
+
const { events, backgroundEvents, rowHeader, contextMenuItems, RowTitleComp, EventComp, BackgroundEventComp, weekendLines, divisionLines, timeLinePercentage, selectedDate, visibleDays, onEvent, } = props;
|
|
8635
7076
|
const internalRows = separateEventsToInnerRows(events);
|
|
8636
7077
|
const schedulerDivRef = useRef(null);
|
|
8637
7078
|
const { handleClick, handleDoubleClick } = useSingleAndDoubleClicks((e) => {
|
|
@@ -8675,7 +7116,7 @@ const SchedulerRow = memo((props) => {
|
|
|
8675
7116
|
}
|
|
8676
7117
|
}, onDragOver: (e) => {
|
|
8677
7118
|
e.preventDefault();
|
|
8678
|
-
}, onClick: handleClick, onDoubleClick: handleDoubleClick, children: [weekendLines.map((weekend) => (jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }, weekend.left))), divisionLines.map((division) => (jsx(DivisionLine, { height: "100%", left: division.left
|
|
7119
|
+
}, onClick: handleClick, onDoubleClick: handleDoubleClick, children: [weekendLines.map((weekend) => (jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }, weekend.left))), divisionLines.map((division) => (jsx(DivisionLine, { height: "100%", left: division.left }, division.left))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsx("div", { style: {
|
|
8679
7120
|
height: "100%",
|
|
8680
7121
|
position: internalRows.length > 0 ? "absolute" : "relative",
|
|
8681
7122
|
width: "100%",
|
|
@@ -8688,7 +7129,7 @@ const SchedulerRow = memo((props) => {
|
|
|
8688
7129
|
height: props.rowHeightInRem + "rem",
|
|
8689
7130
|
pointerEvents: "none"
|
|
8690
7131
|
}, children: internalRow.map((event) => (jsx(EventComp, { value: event, heightRem: props.rowHeightInRem, onEvent: onEvent }, event.id))) }, index));
|
|
8691
|
-
}),
|
|
7132
|
+
}), !(timeLinePercentage < 0 || timeLinePercentage > 100) && (jsx(TimeLine, { color: "red", left: `${timeLinePercentage}%`, top: "0px", height: `100%` }))] }) })] }));
|
|
8692
7133
|
}, (prevProps, nextProps) => {
|
|
8693
7134
|
// This memo is necessary to prevent re-render all the rows when a user makes drag and drop
|
|
8694
7135
|
const getEventKey = (event) => {
|
|
@@ -8714,78 +7155,31 @@ const SchedulerRow = memo((props) => {
|
|
|
8714
7155
|
return false;
|
|
8715
7156
|
}
|
|
8716
7157
|
}
|
|
8717
|
-
if (prevProps.indicatorRows.length !== nextProps.indicatorRows.length) {
|
|
8718
|
-
return false;
|
|
8719
|
-
}
|
|
8720
7158
|
// If we got here, the events are the same
|
|
8721
7159
|
return true;
|
|
8722
7160
|
});
|
|
8723
7161
|
|
|
8724
|
-
const filterVisibleEvents = (events, selectedDate, visibleDays) => {
|
|
8725
|
-
const lastDayOfScheduler = new Date(selectedDate.getTime() + visibleDays * 24 * 60 * 60 * 1000);
|
|
8726
|
-
return events.filter((event) => event.endDate > selectedDate && event.startDate < lastDayOfScheduler);
|
|
8727
|
-
};
|
|
8728
|
-
|
|
8729
|
-
const DIVISION_RULES = [
|
|
8730
|
-
{ maxDays: 2, divisions: 24 },
|
|
8731
|
-
{ maxDays: 3, divisions: 12 },
|
|
8732
|
-
{ maxDays: 4, divisions: 8 },
|
|
8733
|
-
{ maxDays: 5, divisions: 6 },
|
|
8734
|
-
{ maxDays: 7, divisions: 3 },
|
|
8735
|
-
];
|
|
8736
|
-
const DEFAULT_DIVISIONS = 2;
|
|
8737
7162
|
const calculateDivisionsByDays = (days) => {
|
|
8738
|
-
|
|
8739
|
-
|
|
7163
|
+
if (days <= 3) {
|
|
7164
|
+
return 8;
|
|
7165
|
+
}
|
|
7166
|
+
if (days <= 7) {
|
|
7167
|
+
return 3;
|
|
7168
|
+
}
|
|
7169
|
+
return 2;
|
|
8740
7170
|
};
|
|
8741
|
-
const getHoursFromDivisions = (divisions
|
|
7171
|
+
const getHoursFromDivisions = (divisions) => {
|
|
8742
7172
|
const hoursInterval = 24 / divisions;
|
|
8743
7173
|
const array = [];
|
|
8744
7174
|
for (let i = 0; i < divisions; i++) {
|
|
8745
|
-
const
|
|
8746
|
-
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
const mm = minutes.toString().padStart(2, "0");
|
|
8750
|
-
array.push(useCompactHourFormat ? `${hh}h` : `${hh}:${mm}`);
|
|
7175
|
+
const newHour = moment(new Date(1, 1, 1))
|
|
7176
|
+
.add(hoursInterval * i, "hours")
|
|
7177
|
+
.format("HH:mm");
|
|
7178
|
+
array.push(newHour);
|
|
8751
7179
|
}
|
|
8752
7180
|
return array;
|
|
8753
7181
|
};
|
|
8754
7182
|
|
|
8755
|
-
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
8756
|
-
function toPlainDate(date) {
|
|
8757
|
-
return Temporal.Instant.fromEpochMilliseconds(date.getTime())
|
|
8758
|
-
.toZonedDateTimeISO(timeZone).toPlainDate();
|
|
8759
|
-
}
|
|
8760
|
-
function addDays(date, days) {
|
|
8761
|
-
const result = new Date(date);
|
|
8762
|
-
result.setDate(result.getDate() + days);
|
|
8763
|
-
return result;
|
|
8764
|
-
}
|
|
8765
|
-
function formatDD_MM(date) {
|
|
8766
|
-
const pd = toPlainDate(date);
|
|
8767
|
-
return `${pd.day.toString().padStart(2, "0")}.${pd.month.toString().padStart(2, "0")}`;
|
|
8768
|
-
}
|
|
8769
|
-
function formatDD_MM_YYYY(date) {
|
|
8770
|
-
const pd = toPlainDate(date);
|
|
8771
|
-
return `${pd.day.toString().padStart(2, "0")}.${pd.month.toString().padStart(2, "0")}.${pd.year}`;
|
|
8772
|
-
}
|
|
8773
|
-
function formatMM_YYYY(date) {
|
|
8774
|
-
const pd = toPlainDate(date);
|
|
8775
|
-
return `${pd.month.toString().padStart(2, "0")}.${pd.year}`;
|
|
8776
|
-
}
|
|
8777
|
-
function getShortWeekday(date) {
|
|
8778
|
-
return date.toLocaleDateString("en-US", { weekday: "short" });
|
|
8779
|
-
}
|
|
8780
|
-
function daysBetween(a, b) {
|
|
8781
|
-
const aPlain = toPlainDate(a);
|
|
8782
|
-
const bPlain = toPlainDate(b);
|
|
8783
|
-
return Math.abs(aPlain.until(bPlain).days);
|
|
8784
|
-
}
|
|
8785
|
-
function daysInMonth(date) {
|
|
8786
|
-
const pd = toPlainDate(date);
|
|
8787
|
-
return pd.daysInMonth;
|
|
8788
|
-
}
|
|
8789
7183
|
const getDefaultDivisions = (visibleDays, selectedDate) => {
|
|
8790
7184
|
if (visibleDays <= 15) {
|
|
8791
7185
|
return getDayDivisions(visibleDays, selectedDate);
|
|
@@ -8798,19 +7192,15 @@ const getDefaultDivisions = (visibleDays, selectedDate) => {
|
|
|
8798
7192
|
};
|
|
8799
7193
|
const getDayDivisions = (visibleDays, selectedDate) => {
|
|
8800
7194
|
const divisionsNumber = calculateDivisionsByDays(visibleDays);
|
|
8801
|
-
const divisions = getHoursFromDivisions(divisionsNumber
|
|
7195
|
+
const divisions = getHoursFromDivisions(divisionsNumber);
|
|
8802
7196
|
const calculatedDivision = [];
|
|
8803
7197
|
for (let i = 0; i < visibleDays; i++) {
|
|
8804
|
-
const currentDate =
|
|
8805
|
-
const weekdayShort = getShortWeekday(currentDate);
|
|
8806
|
-
const weekdayLabel = visibleDays < 8
|
|
8807
|
-
? weekdayShort
|
|
8808
|
-
: weekdayShort.charAt(0).toUpperCase();
|
|
7198
|
+
const currentDate = moment(selectedDate).add(i, "days");
|
|
8809
7199
|
calculatedDivision.push({
|
|
8810
|
-
top:
|
|
7200
|
+
top: currentDate.format("DD.MM.YYYY"),
|
|
8811
7201
|
bottom: divisions,
|
|
8812
|
-
startDate: currentDate,
|
|
8813
|
-
endDate: currentDate
|
|
7202
|
+
startDate: currentDate.toDate(),
|
|
7203
|
+
endDate: currentDate.toDate()
|
|
8814
7204
|
});
|
|
8815
7205
|
}
|
|
8816
7206
|
return calculatedDivision;
|
|
@@ -8818,16 +7208,16 @@ const getDayDivisions = (visibleDays, selectedDate) => {
|
|
|
8818
7208
|
const getWeekDivisions = (visibleDays, selectedDate) => {
|
|
8819
7209
|
const weeks = getWeeksByDays(visibleDays, selectedDate);
|
|
8820
7210
|
const divisions = weeks.map((week) => {
|
|
8821
|
-
const days = Array.from({ length: week.days }, (_, i) =>
|
|
8822
|
-
const weekEnd =
|
|
7211
|
+
const days = Array.from({ length: week.days }, (_, i) => moment(week.start).add(i, "days").date().toString());
|
|
7212
|
+
const weekEnd = moment(week.start).add(week.days - 1, "days");
|
|
8823
7213
|
const top = days.length > 2
|
|
8824
|
-
?
|
|
8825
|
-
:
|
|
7214
|
+
? moment(week.start).format("DD.MM.YYYY") + " - " + moment(week.start).add(week.days - 1, "days").format("DD.MM.YYYY")
|
|
7215
|
+
: moment(week.start).format("DD.MM.YYYY");
|
|
8826
7216
|
const division = {
|
|
8827
7217
|
top: top,
|
|
8828
7218
|
bottom: days,
|
|
8829
|
-
startDate:
|
|
8830
|
-
endDate: weekEnd
|
|
7219
|
+
startDate: moment(week.start).toDate(),
|
|
7220
|
+
endDate: weekEnd.toDate()
|
|
8831
7221
|
};
|
|
8832
7222
|
return division;
|
|
8833
7223
|
});
|
|
@@ -8836,13 +7226,13 @@ const getWeekDivisions = (visibleDays, selectedDate) => {
|
|
|
8836
7226
|
const getMonthDivisions = (visibleDays, selectedDate) => {
|
|
8837
7227
|
const months = getMonthsByDays(visibleDays, selectedDate);
|
|
8838
7228
|
const divisions = months.map((month) => {
|
|
8839
|
-
const days = Array.from({ length: month.days }, (_, i) =>
|
|
8840
|
-
const monthEnd =
|
|
7229
|
+
const days = Array.from({ length: month.days }, (_, i) => moment(month.start).add(i, "days").date().toString());
|
|
7230
|
+
const monthEnd = moment(month.start).add(month.days - 1, "days");
|
|
8841
7231
|
const division = {
|
|
8842
|
-
top:
|
|
7232
|
+
top: moment(month.start).format("MM.YYYY"),
|
|
8843
7233
|
bottom: days,
|
|
8844
|
-
startDate:
|
|
8845
|
-
endDate: monthEnd
|
|
7234
|
+
startDate: moment(month.start).toDate(), // Añadir fecha de inicio
|
|
7235
|
+
endDate: monthEnd.toDate()
|
|
8846
7236
|
};
|
|
8847
7237
|
return division;
|
|
8848
7238
|
});
|
|
@@ -8853,23 +7243,23 @@ const getMonthsByDays = (visibleDays, selectedDate) => {
|
|
|
8853
7243
|
return [];
|
|
8854
7244
|
}
|
|
8855
7245
|
const month = [];
|
|
8856
|
-
let
|
|
7246
|
+
let temporalDay = moment(selectedDate);
|
|
8857
7247
|
for (let i = 0; i < visibleDays; i++) {
|
|
8858
|
-
const currentDay =
|
|
7248
|
+
const currentDay = moment(selectedDate).add(i, "days");
|
|
8859
7249
|
const isLastLoop = i + 1 === visibleDays;
|
|
8860
7250
|
if (isLastLoop) {
|
|
8861
7251
|
month.push({
|
|
8862
|
-
start:
|
|
8863
|
-
days:
|
|
7252
|
+
start: temporalDay.toDate(),
|
|
7253
|
+
days: Math.abs(temporalDay.diff(currentDay, "days")) + 1,
|
|
8864
7254
|
});
|
|
8865
7255
|
break;
|
|
8866
7256
|
}
|
|
8867
|
-
if (currentDay.
|
|
7257
|
+
if (currentDay.date() === currentDay.daysInMonth()) {
|
|
8868
7258
|
month.push({
|
|
8869
|
-
start:
|
|
8870
|
-
days:
|
|
7259
|
+
start: temporalDay.toDate(),
|
|
7260
|
+
days: Math.abs(temporalDay.diff(currentDay, "days")) + 1,
|
|
8871
7261
|
});
|
|
8872
|
-
|
|
7262
|
+
temporalDay = currentDay.add(1, "days");
|
|
8873
7263
|
}
|
|
8874
7264
|
}
|
|
8875
7265
|
return month;
|
|
@@ -8880,36 +7270,76 @@ const getWeeksByDays = (visibleDays, selectedDate) => {
|
|
|
8880
7270
|
return [];
|
|
8881
7271
|
}
|
|
8882
7272
|
const weeks = [];
|
|
8883
|
-
let
|
|
7273
|
+
let temporalDay = moment(selectedDate);
|
|
8884
7274
|
for (let i = 0; i < visibleDays; i++) {
|
|
8885
|
-
const currentDay =
|
|
7275
|
+
const currentDay = moment(selectedDate).add(i, "days");
|
|
8886
7276
|
const isLastLoop = i + 1 === visibleDays;
|
|
8887
7277
|
if (isLastLoop) {
|
|
8888
7278
|
weeks.push({
|
|
8889
|
-
start:
|
|
8890
|
-
days:
|
|
7279
|
+
start: temporalDay.toDate(),
|
|
7280
|
+
days: Math.abs(temporalDay.diff(currentDay, "days")) + 1,
|
|
8891
7281
|
});
|
|
8892
7282
|
break;
|
|
8893
7283
|
}
|
|
8894
|
-
if (currentDay.
|
|
7284
|
+
if (currentDay.day() === SUNDAY) {
|
|
8895
7285
|
weeks.push({
|
|
8896
|
-
start:
|
|
8897
|
-
days:
|
|
7286
|
+
start: temporalDay.toDate(),
|
|
7287
|
+
days: Math.abs(temporalDay.diff(currentDay, "days")) + 1,
|
|
8898
7288
|
});
|
|
8899
|
-
|
|
7289
|
+
temporalDay = currentDay.add(1, "days");
|
|
8900
7290
|
}
|
|
8901
7291
|
}
|
|
8902
7292
|
return weeks;
|
|
8903
7293
|
};
|
|
8904
7294
|
|
|
7295
|
+
const eventIsVisible = (startDate, endDate, selectedDate, visibleDays) => {
|
|
7296
|
+
const schedulerEnd = moment(selectedDate).add(visibleDays, "days").toDate();
|
|
7297
|
+
const isBefore = selectedDate > startDate && selectedDate > endDate;
|
|
7298
|
+
const isAfter = schedulerEnd < startDate && schedulerEnd < endDate;
|
|
7299
|
+
return !isBefore && !isAfter;
|
|
7300
|
+
};
|
|
7301
|
+
|
|
7302
|
+
const hoursBetween = (date1, date2) => {
|
|
7303
|
+
const oneHourInMillis = 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
|
|
7304
|
+
const timeDiff = date2.getTime() - date1.getTime();
|
|
7305
|
+
return timeDiff / oneHourInMillis;
|
|
7306
|
+
};
|
|
7307
|
+
const getEventSizes = (schedulerDate, totalDays, startDate, endDate) => {
|
|
7308
|
+
if (!eventIsVisible(startDate, endDate, schedulerDate, totalDays)) {
|
|
7309
|
+
return {
|
|
7310
|
+
left: 0,
|
|
7311
|
+
width: 0,
|
|
7312
|
+
};
|
|
7313
|
+
}
|
|
7314
|
+
const totalHours = totalDays * 24;
|
|
7315
|
+
// const dateString = schedulerDate.toISOString().split('T')[0];
|
|
7316
|
+
//const schedulerDateAtZero = new Date(dateString)
|
|
7317
|
+
let startHours = hoursBetween(schedulerDate, startDate);
|
|
7318
|
+
let durationHours = hoursBetween(startDate, endDate);
|
|
7319
|
+
const startOutOfScheduler = startHours < 0;
|
|
7320
|
+
if (startOutOfScheduler) {
|
|
7321
|
+
durationHours += startHours;
|
|
7322
|
+
startHours = 0;
|
|
7323
|
+
}
|
|
7324
|
+
const left = (startHours / totalHours) * 100;
|
|
7325
|
+
const width = (durationHours * 100) / totalHours;
|
|
7326
|
+
return {
|
|
7327
|
+
left,
|
|
7328
|
+
width,
|
|
7329
|
+
};
|
|
7330
|
+
};
|
|
7331
|
+
|
|
8905
7332
|
function getLinesByDivisions(headerDivision, _) {
|
|
8906
|
-
const lines = headerDivision.flatMap((division) =>
|
|
7333
|
+
const lines = headerDivision.flatMap((division) => {
|
|
7334
|
+
return division.bottom;
|
|
7335
|
+
});
|
|
8907
7336
|
const left = 100 / lines.length;
|
|
8908
|
-
const finalLines = lines.map((
|
|
8909
|
-
|
|
8910
|
-
|
|
8911
|
-
|
|
8912
|
-
|
|
7337
|
+
const finalLines = lines.map((_, index) => {
|
|
7338
|
+
return {
|
|
7339
|
+
left: left * index,
|
|
7340
|
+
width: 1,
|
|
7341
|
+
};
|
|
7342
|
+
}).filter((_, index) => index !== 0);
|
|
8913
7343
|
return finalLines;
|
|
8914
7344
|
}
|
|
8915
7345
|
|
|
@@ -8948,6 +7378,9 @@ const getWeekendsDaysInDateRange = (initialDate, visibleDays) => {
|
|
|
8948
7378
|
return weekends;
|
|
8949
7379
|
};
|
|
8950
7380
|
|
|
7381
|
+
class UiEvent {
|
|
7382
|
+
}
|
|
7383
|
+
|
|
8951
7384
|
const getNow = (isUtc) => {
|
|
8952
7385
|
let now = new Date();
|
|
8953
7386
|
if (!isUtc) {
|
|
@@ -8955,67 +7388,11 @@ const getNow = (isUtc) => {
|
|
|
8955
7388
|
}
|
|
8956
7389
|
return now;
|
|
8957
7390
|
};
|
|
7391
|
+
const rowsHeight = 1.75; // rem
|
|
8958
7392
|
const milliSecondsInSecond = 1000;
|
|
8959
7393
|
const refreshMilliSeconds = 45 * milliSecondsInSecond;
|
|
8960
|
-
const EMPTY_EVENTS = [];
|
|
8961
|
-
const EMPTY_BG_EVENTS = [];
|
|
8962
|
-
const EMPTY_INDICATORS = [];
|
|
8963
|
-
// Memoised row body. Receives flat props (the per-row buckets are looked up
|
|
8964
|
-
// by the outer Row wrapper). As long as those bucket arrays keep their
|
|
8965
|
-
// reference (see `groupByRowIdStable`) and the rest of the render-context
|
|
8966
|
-
// values are stable, this row will skip re-rendering on selection clicks
|
|
8967
|
-
// that don't affect it.
|
|
8968
|
-
const RowContent = React__default.memo(function RowContent(props) {
|
|
8969
|
-
const header = {
|
|
8970
|
-
value: props.row,
|
|
8971
|
-
width: props.rowHeaderWidth,
|
|
8972
|
-
onEvent: props.onEvent,
|
|
8973
|
-
};
|
|
8974
|
-
return (jsx("div", { style: {
|
|
8975
|
-
...props.style,
|
|
8976
|
-
backgroundColor: props.rowColor
|
|
8977
|
-
}, children: jsx(SchedulerRow, { events: props.events, backgroundEvents: props.backgroundEvents, indicatorRows: props.indicatorRows, rowHeader: header, EventComp: props.EventComp, BackgroundEventComp: props.BackgroundEventComp, RowTitleComp: props.RowTitleComp, weekendLines: props.weekendLines, divisionLines: props.divisionLines, timeLinePercentage: props.timeLinePercentage, rowHeightInRem: props.rowHeightRem, onEvent: props.onEvent, contextMenuItems: props.contextMenuItems, visibleDays: props.visibleDays, selectedDate: props.selectedDate }) }, props.row.rowId));
|
|
8978
|
-
});
|
|
8979
|
-
// Outer (unmemoised) row: looks up per-row buckets from the shared `data`
|
|
8980
|
-
// object and forwards them as flat props to `RowContent`. Because the
|
|
8981
|
-
// referenced arrays are reused when their contents are unchanged
|
|
8982
|
-
// (see `groupByRowIdStable`), `RowContent.memo` will skip the work.
|
|
8983
|
-
const Row = ({ index, style, data }) => {
|
|
8984
|
-
const row = data.rows[index];
|
|
8985
|
-
const rowColor = data.groupRowColors
|
|
8986
|
-
? Math.floor(index / 2) % 2 === 0 ? data.evenColor : data.oddColor
|
|
8987
|
-
: index % 2 === 0 ? data.evenColor : data.oddColor;
|
|
8988
|
-
return (jsx(RowContent, { style: style, row: row, rowColor: rowColor, events: data.eventsByRow.get(row.rowId) ?? EMPTY_EVENTS, backgroundEvents: data.backgroundEventsByRow.get(row.rowId) ?? EMPTY_BG_EVENTS, indicatorRows: data.indicatorRowsByRow.get(row.rowId) ?? EMPTY_INDICATORS, EventComp: data.EventComp, BackgroundEventComp: data.BackgroundEventComp, RowTitleComp: data.RowTitleComp, rowHeaderWidth: data.rowHeaderWidth, rowHeightRem: row.rowHeightRem ?? data.rowHeightRem, weekendLines: data.weekendLines, divisionLines: data.divisionLines, timeLinePercentage: data.timeLinePercentage, selectedDate: data.selectedDate, visibleDays: data.visibleDays, contextMenuItems: data.contextMenuItems, onEvent: data.onEvent }));
|
|
8989
|
-
};
|
|
8990
|
-
// Bucket items by rowId, but reuse previous bucket arrays whenever a row's
|
|
8991
|
-
// contents have not changed. Keeping bucket references stable is essential
|
|
8992
|
-
// for `RowContent.memo` to skip work when only one row's events change
|
|
8993
|
-
// (e.g. on selection clicks).
|
|
8994
|
-
const groupByRowIdStable = (items, prev) => {
|
|
8995
|
-
const next = new Map();
|
|
8996
|
-
for (const item of items) {
|
|
8997
|
-
const bucket = next.get(item.rowId);
|
|
8998
|
-
if (bucket) {
|
|
8999
|
-
bucket.push(item);
|
|
9000
|
-
}
|
|
9001
|
-
else {
|
|
9002
|
-
next.set(item.rowId, [item]);
|
|
9003
|
-
}
|
|
9004
|
-
}
|
|
9005
|
-
if (!prev)
|
|
9006
|
-
return next;
|
|
9007
|
-
for (const [rowId, bucket] of next) {
|
|
9008
|
-
const prevBucket = prev.get(rowId);
|
|
9009
|
-
if (prevBucket
|
|
9010
|
-
&& prevBucket.length === bucket.length
|
|
9011
|
-
&& prevBucket.every((v, i) => v === bucket[i])) {
|
|
9012
|
-
next.set(rowId, prevBucket);
|
|
9013
|
-
}
|
|
9014
|
-
}
|
|
9015
|
-
return next;
|
|
9016
|
-
};
|
|
9017
7394
|
const Scheduler = (props) => {
|
|
9018
|
-
const { header: headerContent, id, events: eventsState, backgroundEvents,
|
|
7395
|
+
const { header: headerContent, id, events: eventsState, backgroundEvents, contextMenuItems, EventComp, RowTitleComp, orderCategories = ["title"], useOrderCategory, onEvent, groupRowColors, rowHeaderWidth = 180, } = props;
|
|
9019
7396
|
const BackgroundEventComp = props.BackgroundEventComp ?? BackgroundEvent;
|
|
9020
7397
|
const rows = useOrderCategory === false
|
|
9021
7398
|
? props.rows
|
|
@@ -9023,50 +7400,21 @@ const Scheduler = (props) => {
|
|
|
9023
7400
|
const instanceRef = useRef(null);
|
|
9024
7401
|
// const rowHeaderWidth = "180px";
|
|
9025
7402
|
const { selectedDate, visibleDays, isUtc, isHeaderVisible, visibleRows: stateVisibleRows } = props.state;
|
|
9026
|
-
const events =
|
|
7403
|
+
const events = eventsState.filter((event) => {
|
|
7404
|
+
const lastDayOfScheduler = moment(selectedDate).add(visibleDays, "days");
|
|
7405
|
+
return (moment(event.endDate).isAfter(selectedDate) &&
|
|
7406
|
+
moment(event.startDate).isBefore(lastDayOfScheduler));
|
|
7407
|
+
});
|
|
9027
7408
|
useEffect(() => {
|
|
9028
7409
|
instanceRef.current?.resetAfterIndex(0);
|
|
9029
|
-
}, [orderCategories, props.rows.length, events
|
|
9030
|
-
|
|
9031
|
-
|
|
9032
|
-
// Reuse previous bucket arrays when their contents are unchanged so the
|
|
9033
|
-
// memoised RowContent below can skip work (essential for selection clicks
|
|
9034
|
-
// to be cheap).
|
|
9035
|
-
const eventsByRowRef = useRef();
|
|
9036
|
-
const backgroundEventsByRowRef = useRef();
|
|
9037
|
-
const indicatorRowsByRowRef = useRef();
|
|
9038
|
-
const eventsByRow = useMemo(() => {
|
|
9039
|
-
const next = groupByRowIdStable(events, eventsByRowRef.current);
|
|
9040
|
-
eventsByRowRef.current = next;
|
|
9041
|
-
return next;
|
|
9042
|
-
}, [events]);
|
|
9043
|
-
const backgroundEventsByRow = useMemo(() => {
|
|
9044
|
-
const next = groupByRowIdStable(backgroundEvents, backgroundEventsByRowRef.current);
|
|
9045
|
-
backgroundEventsByRowRef.current = next;
|
|
9046
|
-
return next;
|
|
9047
|
-
}, [backgroundEvents]);
|
|
9048
|
-
const indicatorRowsByRow = useMemo(() => {
|
|
9049
|
-
const next = groupByRowIdStable(allIndicatorRows, indicatorRowsByRowRef.current);
|
|
9050
|
-
indicatorRowsByRowRef.current = next;
|
|
9051
|
-
return next;
|
|
9052
|
-
}, [allIndicatorRows]);
|
|
9053
|
-
const totalHeightRem = rows.reduce((acc, row) => {
|
|
9054
|
-
const filteredEvents = eventsByRow.get(row.rowId) ?? [];
|
|
9055
|
-
const innerRows = separateEventsToInnerRows(filteredEvents);
|
|
9056
|
-
const effectiveRowHeight = row.rowHeightRem ?? rowHeightRem;
|
|
9057
|
-
const eventHeight = Math.max(innerRows.length, 1) * effectiveRowHeight;
|
|
9058
|
-
const hasIndicators = indicatorRowsByRow.has(row.rowId);
|
|
9059
|
-
return acc + eventHeight + (hasIndicators ? INDICATOR_HEIGHT_REM : 0);
|
|
9060
|
-
}, 0);
|
|
9061
|
-
const schedulerContentHeight = stateVisibleRows != null
|
|
9062
|
-
? Math.min(totalHeightRem, stateVisibleRows * rowHeightRem)
|
|
9063
|
-
: Math.max(totalHeightRem, rowHeightRem);
|
|
7410
|
+
}, [orderCategories, props.rows.length, events]);
|
|
7411
|
+
const notEmptyRows = stateVisibleRows ?? rows.length;
|
|
7412
|
+
const visibleRows = height(events, rows, notEmptyRows);
|
|
9064
7413
|
const totalHours = visibleDays * 24;
|
|
9065
7414
|
const [timeLinePercentage, setTimeLinePercentage] = useState(0);
|
|
9066
|
-
const divisions = useMemo(() => getDefaultDivisions(visibleDays, selectedDate), [visibleDays, selectedDate]);
|
|
9067
7415
|
const header = {
|
|
9068
7416
|
content: headerContent,
|
|
9069
|
-
divisions,
|
|
7417
|
+
divisions: getDefaultDivisions(visibleDays, selectedDate),
|
|
9070
7418
|
visibleDays: visibleDays,
|
|
9071
7419
|
width: rowHeaderWidth,
|
|
9072
7420
|
selectedDate,
|
|
@@ -9076,8 +7424,9 @@ const Scheduler = (props) => {
|
|
|
9076
7424
|
};
|
|
9077
7425
|
const evenColor = "var(--cw-color-surface-container-low)";
|
|
9078
7426
|
const oddColor = "var(--cw-color-surface-container)";
|
|
9079
|
-
const
|
|
9080
|
-
const
|
|
7427
|
+
const schedulerContentHeight = rowsHeight * visibleRows;
|
|
7428
|
+
const weekendsLines = getWeekendLinesByDatesVisible(selectedDate, visibleDays);
|
|
7429
|
+
const divisionLines = getLinesByDivisions(header.divisions);
|
|
9081
7430
|
// Timeline percentage calculation
|
|
9082
7431
|
useEffect(() => {
|
|
9083
7432
|
const updateTimeLinePercentage = () => {
|
|
@@ -9088,56 +7437,30 @@ const Scheduler = (props) => {
|
|
|
9088
7437
|
const interval = setInterval(updateTimeLinePercentage, refreshMilliSeconds);
|
|
9089
7438
|
return () => clearInterval(interval);
|
|
9090
7439
|
}, [selectedDate, isUtc, totalHours]);
|
|
9091
|
-
|
|
9092
|
-
|
|
9093
|
-
|
|
9094
|
-
|
|
9095
|
-
|
|
9096
|
-
|
|
9097
|
-
|
|
9098
|
-
|
|
9099
|
-
|
|
9100
|
-
|
|
9101
|
-
|
|
9102
|
-
|
|
9103
|
-
|
|
9104
|
-
|
|
9105
|
-
|
|
9106
|
-
|
|
9107
|
-
onEvent,
|
|
9108
|
-
groupRowColors,
|
|
9109
|
-
evenColor,
|
|
9110
|
-
oddColor,
|
|
9111
|
-
}), [
|
|
9112
|
-
rows,
|
|
9113
|
-
eventsByRow,
|
|
9114
|
-
backgroundEventsByRow,
|
|
9115
|
-
indicatorRowsByRow,
|
|
9116
|
-
EventComp,
|
|
9117
|
-
BackgroundEventComp,
|
|
9118
|
-
RowTitleComp,
|
|
9119
|
-
rowHeaderWidth,
|
|
9120
|
-
rowHeightRem,
|
|
9121
|
-
weekendsLines,
|
|
9122
|
-
divisionLines,
|
|
9123
|
-
timeLinePercentage,
|
|
9124
|
-
selectedDate,
|
|
9125
|
-
visibleDays,
|
|
9126
|
-
contextMenuItems,
|
|
9127
|
-
onEvent,
|
|
9128
|
-
groupRowColors,
|
|
9129
|
-
]);
|
|
7440
|
+
// Memoized Row Component
|
|
7441
|
+
const Row = React__default.memo(({ index, style }) => {
|
|
7442
|
+
const row = rows[index];
|
|
7443
|
+
const rowColor = groupRowColors
|
|
7444
|
+
? Math.floor(index / 2) % 2 === 0 ? evenColor : oddColor
|
|
7445
|
+
: index % 2 === 0 ? evenColor : oddColor;
|
|
7446
|
+
const header = {
|
|
7447
|
+
value: row,
|
|
7448
|
+
width: rowHeaderWidth,
|
|
7449
|
+
onEvent: onEvent,
|
|
7450
|
+
};
|
|
7451
|
+
return (jsx("div", { style: {
|
|
7452
|
+
...style,
|
|
7453
|
+
backgroundColor: rowColor
|
|
7454
|
+
}, children: jsx(SchedulerRow, { events: events.filter((it) => it.rowId === row.rowId), backgroundEvents: backgroundEvents.filter((it) => it.rowId === row.rowId), rowHeader: header, EventComp: EventComp, BackgroundEventComp: BackgroundEventComp, RowTitleComp: RowTitleComp, weekendLines: weekendsLines, divisionLines: divisionLines, timeLinePercentage: timeLinePercentage, rowHeightInRem: rowsHeight, onEvent: onEvent, contextMenuItems: contextMenuItems, visibleDays: visibleDays, selectedDate: selectedDate }) }, row.rowId));
|
|
7455
|
+
});
|
|
9130
7456
|
const getItemSize = useCallback((index) => {
|
|
9131
7457
|
const row = rows[index];
|
|
9132
|
-
const filteredEvents =
|
|
7458
|
+
const filteredEvents = events.filter((it) => it.rowId === row.rowId);
|
|
9133
7459
|
const innerRows = separateEventsToInnerRows(filteredEvents);
|
|
9134
7460
|
const rowsNumber = innerRows.length > 0 ? innerRows.length : 1;
|
|
9135
7461
|
const pixelsInRem = 16;
|
|
9136
|
-
|
|
9137
|
-
|
|
9138
|
-
const indicatorPixels = hasIndicators ? INDICATOR_HEIGHT_REM * pixelsInRem : 0;
|
|
9139
|
-
return rowsNumber * effectiveRowHeight * pixelsInRem + indicatorPixels;
|
|
9140
|
-
}, [rows, eventsByRow, indicatorRowsByRow, rowHeightRem]);
|
|
7462
|
+
return rowsNumber * rowsHeight * pixelsInRem;
|
|
7463
|
+
}, [rows, events]);
|
|
9141
7464
|
// Render
|
|
9142
7465
|
return (jsxs("div", { id: id, style: {
|
|
9143
7466
|
position: "relative",
|
|
@@ -9148,11 +7471,17 @@ const Scheduler = (props) => {
|
|
|
9148
7471
|
position: "sticky",
|
|
9149
7472
|
top: 0,
|
|
9150
7473
|
zIndex: 1,
|
|
9151
|
-
}, children: jsx(SchedulerHeader, { ...header }) })), jsx(VariableSizeList, { height: schedulerContentHeight * 16, itemCount: rows.length, itemSize: getItemSize,
|
|
7474
|
+
}, children: jsx(SchedulerHeader, { ...header }) })), jsx(VariableSizeList, { height: schedulerContentHeight * 16, itemCount: rows.length, itemSize: getItemSize, width: "100%", style: { overflowX: "hidden" }, ref: instanceRef, className: styles$2["hide-scrollbar"], children: Row })] }));
|
|
7475
|
+
};
|
|
7476
|
+
const height = (events, rows, rowsNumber) => {
|
|
7477
|
+
const selectedRows = rows.slice(0, rowsNumber);
|
|
7478
|
+
const flatMapped = selectedRows.flatMap(row => {
|
|
7479
|
+
const newEvents = events.filter(it => it.rowId === row.rowId);
|
|
7480
|
+
const innerRows = separateEventsToInnerRows(newEvents);
|
|
7481
|
+
return innerRows.length > 0 ? innerRows : [[]];
|
|
7482
|
+
});
|
|
7483
|
+
return flatMapped.length;
|
|
9152
7484
|
};
|
|
9153
|
-
|
|
9154
|
-
class UiEvent {
|
|
9155
|
-
}
|
|
9156
7485
|
|
|
9157
7486
|
let topsCounter = 0;
|
|
9158
7487
|
class CwSuperScheduler extends React.Component {
|
|
@@ -9473,7 +7802,7 @@ class Resource {
|
|
|
9473
7802
|
}
|
|
9474
7803
|
}
|
|
9475
7804
|
|
|
9476
|
-
var styles = {"super-scheduler-row-header":"super-scheduler-
|
|
7805
|
+
var styles = {"super-scheduler-row-header":"super-scheduler-module_super-scheduler-row-header__TTs4e","indicators":"super-scheduler-module_indicators__f4lIT","scheduler-crewmember-functions":"super-scheduler-module_scheduler-crewmember-functions__BS2hs"};
|
|
9477
7806
|
|
|
9478
7807
|
class OnPinRow {
|
|
9479
7808
|
id;
|
|
@@ -9494,12 +7823,11 @@ class OnClearPinned {
|
|
|
9494
7823
|
const PinRowHeader = ({ value, width, onEvent }) => {
|
|
9495
7824
|
const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
|
|
9496
7825
|
const { highlightColor, isLoading } = value;
|
|
9497
|
-
return jsx(CwAnchoredMenu, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "right", options: value.contextMenuItems ?? [], onSelect: (key) => {
|
|
7826
|
+
return (jsx(CwAnchoredMenu, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "right", options: value.contextMenuItems ?? [], onSelect: (key) => {
|
|
9498
7827
|
onEvent(new OnClickContextMenu(value.rowId, key));
|
|
9499
|
-
}, children: jsx(
|
|
7828
|
+
}, children: jsx(CwGenericTooltip, { content: value.tooltip, position: "right", dissapearsWhenHover: true, overlayStyle: value.overlayTooltipStyle, children: jsxs("div", { style: {
|
|
9500
7829
|
width: width,
|
|
9501
|
-
|
|
9502
|
-
background: highlightColor
|
|
7830
|
+
background: highlightColor,
|
|
9503
7831
|
}, className: styles["super-scheduler-row-header"], children: [jsx("button", { className: "cw-button-icon cwi-pin", "data-pinned": value.isPinned, onClick: (_) => {
|
|
9504
7832
|
onEvent(value.isPinned ? new OnUnpinRow(value.rowId) : new OnPinRow(value.rowId));
|
|
9505
7833
|
} }), jsx("div", { className: styles["indicators"], children: value.indicators ?? undefined }), jsxs("div", { style: {
|
|
@@ -9508,37 +7836,19 @@ const PinRowHeader = ({ value, width, onEvent }) => {
|
|
|
9508
7836
|
justifyContent: "center",
|
|
9509
7837
|
alignItems: "flex-start",
|
|
9510
7838
|
}, children: [jsxs("div", { children: [jsx("strong", { children: value.title }), value.title2 && jsxs("span", { children: ["-", value.title2] }), " ", jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 &&
|
|
9511
|
-
jsxs("span", { className: styles["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }), isLoading ? jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }) }, value.rowId) }, value.rowId);
|
|
7839
|
+
jsxs("span", { className: styles["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }), isLoading ? jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }) }, value.rowId) }, value.rowId));
|
|
9512
7840
|
};
|
|
9513
7841
|
|
|
9514
|
-
const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents,
|
|
7842
|
+
const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents, contextMenuItems, onEvent }) => {
|
|
9515
7843
|
const pinnedRows = rows.filter((it) => it.isPinned);
|
|
9516
7844
|
const notPinnedRows = rows.filter((it) => !it.isPinned);
|
|
9517
7845
|
const isFirstVisible = pinnedRows.length > 0;
|
|
9518
|
-
return (jsxs(Fragment, { children: [isFirstVisible && (jsxs(Fragment, { children: [jsx(Scheduler, { id: `${id}-pinned`, state: state, header: header, rows: pinnedRows, events: events, backgroundEvents: backgroundEvents,
|
|
7846
|
+
return (jsxs(Fragment, { children: [isFirstVisible && (jsxs(Fragment, { children: [jsx(Scheduler, { id: `${id}-pinned`, state: state, header: header, rows: pinnedRows, events: events, backgroundEvents: backgroundEvents, contextMenuItems: contextMenuItems, orderCategories: pinnedOrderCategory, onEvent: onEvent, EventComp: SchedulerEvent, RowTitleComp: PinRowHeader }), jsx("div", { children: jsx(CwButton, { onClick: () => {
|
|
9519
7847
|
onEvent(new OnClearPinned());
|
|
9520
|
-
}, children: "Clear pinned" }) })] })), jsx(Scheduler, { id: `${id}-notPinned`, state: { ...state, isHeaderVisible: !isFirstVisible }, header: header, rows: notPinnedRows, events: events, backgroundEvents: backgroundEvents,
|
|
7848
|
+
}, children: "Clear pinned" }) })] })), jsx(Scheduler, { id: `${id}-notPinned`, state: { ...state, isHeaderVisible: !isFirstVisible }, header: header, rows: notPinnedRows, events: events, backgroundEvents: backgroundEvents, contextMenuItems: contextMenuItems, orderCategories: unPinnedOrderCategory, onEvent: onEvent, EventComp: SchedulerEvent, RowTitleComp: PinRowHeader })] }));
|
|
9521
7849
|
};
|
|
9522
7850
|
|
|
9523
|
-
|
|
9524
|
-
* API-backed airport search input for WinOps.
|
|
9525
|
-
*
|
|
9526
|
-
* Fetches matching airports from the WinOps backend as the user types (debounced).
|
|
9527
|
-
* Renders results in a shared `cw-choice-dropdown` styled panel with keyboard navigation.
|
|
9528
|
-
* Supports pre-selecting an airport by `value` (AptKey) and customising the displayed text
|
|
9529
|
-
* format via `displayMode`.
|
|
9530
|
-
*
|
|
9531
|
-
* Requires a running WinOps backend — set `cblConfig` to its base URL.
|
|
9532
|
-
*
|
|
9533
|
-
* @example
|
|
9534
|
-
* <CwFindAirport
|
|
9535
|
-
* cblConfig="https://localhost:44300"
|
|
9536
|
-
* handleChange={(key) => setAirportKey(key)}
|
|
9537
|
-
* labelProps={{ text: 'Departure Airport' }}
|
|
9538
|
-
* displayMode="iata-only"
|
|
9539
|
-
* />
|
|
9540
|
-
*/
|
|
9541
|
-
const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder = "Search airport…", required = false, cblConfig, className = "", value, disabled = false, displayMode, initialDisplayText, labelProps, alignProps, width }) => {
|
|
7851
|
+
const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder = "Search airport…", required = false, cblConfig, className = "", value, disabled = false, displayMode, labelProps, alignProps, width }) => {
|
|
9542
7852
|
// State
|
|
9543
7853
|
const [inputValue, setInputValue] = useState("");
|
|
9544
7854
|
const [options, setOptions] = useState([]);
|
|
@@ -9550,13 +7860,8 @@ const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder
|
|
|
9550
7860
|
const [tooltipText, setTooltipText] = useState("");
|
|
9551
7861
|
// Refs
|
|
9552
7862
|
const inputRef = useRef(null);
|
|
9553
|
-
const
|
|
7863
|
+
const dropdownRef = useRef(null);
|
|
9554
7864
|
const searchTimeoutRef = useRef();
|
|
9555
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
9556
|
-
anchorRef: wrapperRef,
|
|
9557
|
-
isOpen: showDropdown && options.length > 0,
|
|
9558
|
-
onClose: () => { setShowDropdown(false); setHighlightedIndex(-1); },
|
|
9559
|
-
});
|
|
9560
7865
|
// Utility function to extract ICAO from DisplayAirportText
|
|
9561
7866
|
const extractIcao = useCallback((displayText) => {
|
|
9562
7867
|
const match = displayText.match(/^([A-Z]{4})\(/);
|
|
@@ -9733,19 +8038,25 @@ const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder
|
|
|
9733
8038
|
break;
|
|
9734
8039
|
}
|
|
9735
8040
|
};
|
|
9736
|
-
// Handle clicks outside dropdown
|
|
8041
|
+
// Handle clicks outside dropdown
|
|
8042
|
+
useEffect(() => {
|
|
8043
|
+
const handleClickOutside = (event) => {
|
|
8044
|
+
if (dropdownRef.current &&
|
|
8045
|
+
!dropdownRef.current.contains(event.target) &&
|
|
8046
|
+
!inputRef.current?.contains(event.target)) {
|
|
8047
|
+
setShowDropdown(false);
|
|
8048
|
+
setHighlightedIndex(-1);
|
|
8049
|
+
}
|
|
8050
|
+
};
|
|
8051
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
8052
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
8053
|
+
}, []);
|
|
9737
8054
|
// Load initial value
|
|
9738
8055
|
useEffect(() => {
|
|
9739
8056
|
if (value && value !== 0 && value !== -1) {
|
|
9740
|
-
|
|
9741
|
-
setInputValue(initialDisplayText);
|
|
9742
|
-
setTooltipText(initialDisplayText);
|
|
9743
|
-
}
|
|
9744
|
-
else {
|
|
9745
|
-
fetchAirportData(value);
|
|
9746
|
-
}
|
|
8057
|
+
fetchAirportData(value);
|
|
9747
8058
|
}
|
|
9748
|
-
}, [value, fetchAirportData
|
|
8059
|
+
}, [value, fetchAirportData]);
|
|
9749
8060
|
useEffect(() => {
|
|
9750
8061
|
if (!value || value === 0 || value === -1) {
|
|
9751
8062
|
setInputValue("");
|
|
@@ -9775,183 +8086,7 @@ const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder
|
|
|
9775
8086
|
return (jsxs("div", { className: `cw-search-input ${className}`, style: {
|
|
9776
8087
|
...(width ? { width } : {}),
|
|
9777
8088
|
...(labelProps?.labelWidth ? { '--label-width': labelProps.labelWidth } : {})
|
|
9778
|
-
}, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-search-input-wrapper",
|
|
9779
|
-
};
|
|
9780
|
-
|
|
9781
|
-
/**
|
|
9782
|
-
* API-backed crewmember search input for WinOps.
|
|
9783
|
-
*
|
|
9784
|
-
* Fetches matching crewmembers from the WinOps backend as the user types (debounced).
|
|
9785
|
-
* Renders results in a shared `cw-choice-dropdown` styled panel with keyboard navigation.
|
|
9786
|
-
* Supports pre-selecting a crewmember by numeric `value` (ID).
|
|
9787
|
-
*
|
|
9788
|
-
* Requires a running WinOps backend — set `cblConfig` to its base URL.
|
|
9789
|
-
*
|
|
9790
|
-
* @example
|
|
9791
|
-
* <CwFindCrewmember
|
|
9792
|
-
* cblConfig="https://localhost:44300"
|
|
9793
|
-
* handleChange={(id) => setCrewId(id)}
|
|
9794
|
-
* labelProps={{ text: 'Crew Member' }}
|
|
9795
|
-
* />
|
|
9796
|
-
*/
|
|
9797
|
-
const CwFindCrewmember = ({ handleChange, placeHolder = "Search crew…", required = false, cblConfig, className = "", value, disabled = false, initialDisplayText, labelProps, alignProps, width }) => {
|
|
9798
|
-
const [inputValue, setInputValue] = useState("");
|
|
9799
|
-
const [options, setOptions] = useState([]);
|
|
9800
|
-
const [crewmembers, setCrewmembers] = useState([]);
|
|
9801
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
9802
|
-
const [isInitialLoading, setIsInitialLoading] = useState(false);
|
|
9803
|
-
const [showDropdown, setShowDropdown] = useState(false);
|
|
9804
|
-
const [highlightedIndex, setHighlightedIndex] = useState(-1);
|
|
9805
|
-
const [tooltipText, setTooltipText] = useState("");
|
|
9806
|
-
const inputRef = useRef(null);
|
|
9807
|
-
const wrapperRef = useRef(null);
|
|
9808
|
-
const searchTimeoutRef = useRef();
|
|
9809
|
-
const { panelRef, panelStyle, renderPanel } = useDropdownPortal({
|
|
9810
|
-
anchorRef: wrapperRef,
|
|
9811
|
-
isOpen: showDropdown && options.length > 0,
|
|
9812
|
-
onClose: () => { setShowDropdown(false); setHighlightedIndex(-1); },
|
|
9813
|
-
});
|
|
9814
|
-
const getDisplayText = useCallback((crew) => {
|
|
9815
|
-
return `${crew.threeLetterCode} - ${crew.lastName} ${crew.firstName}`;
|
|
9816
|
-
}, []);
|
|
9817
|
-
const fetchCrewmemberData = useCallback(async (crewmemberId) => {
|
|
9818
|
-
setIsInitialLoading(true);
|
|
9819
|
-
try {
|
|
9820
|
-
const response = await fetch(`${cblConfig}controls/cblFindCrew/cblFindCrew/GetCrewmember?crewmemberId=${crewmemberId}`);
|
|
9821
|
-
const result = await response.json();
|
|
9822
|
-
const display = getDisplayText(result);
|
|
9823
|
-
setCrewmembers([result]);
|
|
9824
|
-
setOptions([{ value: result.id, text: display }]);
|
|
9825
|
-
setInputValue(display);
|
|
9826
|
-
setTooltipText(display);
|
|
9827
|
-
}
|
|
9828
|
-
catch (error) {
|
|
9829
|
-
console.error("Error fetching crewmember data:", error);
|
|
9830
|
-
}
|
|
9831
|
-
finally {
|
|
9832
|
-
setIsInitialLoading(false);
|
|
9833
|
-
}
|
|
9834
|
-
}, [cblConfig, getDisplayText]);
|
|
9835
|
-
const searchCrewmembers = useCallback(async (searchText) => {
|
|
9836
|
-
if (searchText.length < 2) {
|
|
9837
|
-
setOptions([]);
|
|
9838
|
-
setCrewmembers([]);
|
|
9839
|
-
setShowDropdown(false);
|
|
9840
|
-
return;
|
|
9841
|
-
}
|
|
9842
|
-
setIsLoading(true);
|
|
9843
|
-
try {
|
|
9844
|
-
const response = await fetch(`${cblConfig}controls/cblFindCrew/cblFindCrew/SearchCrewCodeName?text=${encodeURIComponent(searchText)}`);
|
|
9845
|
-
const results = await response.json();
|
|
9846
|
-
const newOptions = results.map(crew => ({
|
|
9847
|
-
value: crew.id,
|
|
9848
|
-
text: getDisplayText(crew)
|
|
9849
|
-
}));
|
|
9850
|
-
setOptions(newOptions);
|
|
9851
|
-
setCrewmembers(results);
|
|
9852
|
-
setShowDropdown(newOptions.length > 0);
|
|
9853
|
-
setHighlightedIndex(-1);
|
|
9854
|
-
}
|
|
9855
|
-
catch (error) {
|
|
9856
|
-
console.error("Error searching crewmembers:", error);
|
|
9857
|
-
setOptions([]);
|
|
9858
|
-
setCrewmembers([]);
|
|
9859
|
-
setShowDropdown(false);
|
|
9860
|
-
}
|
|
9861
|
-
finally {
|
|
9862
|
-
setIsLoading(false);
|
|
9863
|
-
}
|
|
9864
|
-
}, [cblConfig, getDisplayText]);
|
|
9865
|
-
const debouncedSearch = useCallback((searchText) => {
|
|
9866
|
-
if (searchTimeoutRef.current) {
|
|
9867
|
-
window.clearTimeout(searchTimeoutRef.current);
|
|
9868
|
-
}
|
|
9869
|
-
searchTimeoutRef.current = window.setTimeout(() => {
|
|
9870
|
-
searchCrewmembers(searchText);
|
|
9871
|
-
}, 300);
|
|
9872
|
-
}, [searchCrewmembers]);
|
|
9873
|
-
const handleInputChange = (e) => {
|
|
9874
|
-
const newValue = e.target.value;
|
|
9875
|
-
setInputValue(newValue);
|
|
9876
|
-
if (newValue !== inputValue) {
|
|
9877
|
-
debouncedSearch(newValue);
|
|
9878
|
-
}
|
|
9879
|
-
};
|
|
9880
|
-
const handleOptionSelect = (optionValue) => {
|
|
9881
|
-
const selectedCrew = crewmembers.find(c => c.id === optionValue);
|
|
9882
|
-
if (!selectedCrew)
|
|
9883
|
-
return;
|
|
9884
|
-
setShowDropdown(false);
|
|
9885
|
-
const display = getDisplayText(selectedCrew);
|
|
9886
|
-
setInputValue(display);
|
|
9887
|
-
setTooltipText(display);
|
|
9888
|
-
handleChange(optionValue);
|
|
9889
|
-
};
|
|
9890
|
-
const handleKeyDown = (e) => {
|
|
9891
|
-
if (!showDropdown || options.length === 0)
|
|
9892
|
-
return;
|
|
9893
|
-
switch (e.key) {
|
|
9894
|
-
case "ArrowDown":
|
|
9895
|
-
e.preventDefault();
|
|
9896
|
-
setHighlightedIndex(prev => prev < options.length - 1 ? prev + 1 : 0);
|
|
9897
|
-
break;
|
|
9898
|
-
case "ArrowUp":
|
|
9899
|
-
e.preventDefault();
|
|
9900
|
-
setHighlightedIndex(prev => prev > 0 ? prev - 1 : options.length - 1);
|
|
9901
|
-
break;
|
|
9902
|
-
case "Enter":
|
|
9903
|
-
e.preventDefault();
|
|
9904
|
-
if (highlightedIndex >= 0 && highlightedIndex < options.length) {
|
|
9905
|
-
handleOptionSelect(options[highlightedIndex].value);
|
|
9906
|
-
}
|
|
9907
|
-
break;
|
|
9908
|
-
case "Escape":
|
|
9909
|
-
setShowDropdown(false);
|
|
9910
|
-
setHighlightedIndex(-1);
|
|
9911
|
-
break;
|
|
9912
|
-
}
|
|
9913
|
-
};
|
|
9914
|
-
useEffect(() => {
|
|
9915
|
-
// Outside-click is now handled by useDropdownPortal
|
|
9916
|
-
}, []);
|
|
9917
|
-
useEffect(() => {
|
|
9918
|
-
if (value && value !== 0 && value !== -1) {
|
|
9919
|
-
if (initialDisplayText) {
|
|
9920
|
-
setInputValue(initialDisplayText);
|
|
9921
|
-
setTooltipText(initialDisplayText);
|
|
9922
|
-
}
|
|
9923
|
-
else {
|
|
9924
|
-
fetchCrewmemberData(value);
|
|
9925
|
-
}
|
|
9926
|
-
}
|
|
9927
|
-
}, [value, fetchCrewmemberData, initialDisplayText]);
|
|
9928
|
-
useEffect(() => {
|
|
9929
|
-
if (!value || value === 0 || value === -1) {
|
|
9930
|
-
setInputValue("");
|
|
9931
|
-
setTooltipText("");
|
|
9932
|
-
setOptions([]);
|
|
9933
|
-
setCrewmembers([]);
|
|
9934
|
-
}
|
|
9935
|
-
}, [value]);
|
|
9936
|
-
const handleInputFocus = () => {
|
|
9937
|
-
if (options.length > 0) {
|
|
9938
|
-
setShowDropdown(true);
|
|
9939
|
-
}
|
|
9940
|
-
};
|
|
9941
|
-
const handleClear = () => {
|
|
9942
|
-
setInputValue("");
|
|
9943
|
-
setTooltipText("");
|
|
9944
|
-
setOptions([]);
|
|
9945
|
-
setCrewmembers([]);
|
|
9946
|
-
setShowDropdown(false);
|
|
9947
|
-
handleChange(0);
|
|
9948
|
-
inputRef.current?.focus();
|
|
9949
|
-
};
|
|
9950
|
-
const direction = alignProps?.flexDirection || "row";
|
|
9951
|
-
return (jsxs("div", { className: `cw-search-input ${className}`, style: {
|
|
9952
|
-
...(width ? { width } : {}),
|
|
9953
|
-
...(labelProps?.labelWidth ? { '--label-width': labelProps.labelWidth } : {})
|
|
9954
|
-
}, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-search-input-wrapper", ref: wrapperRef, children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onFocus: handleInputFocus, placeholder: isInitialLoading ? "Loading…" : placeHolder, disabled: disabled, required: required, autoComplete: "off", "aria-expanded": showDropdown, "aria-haspopup": "listbox", role: "combobox", title: tooltipText }), (isLoading || isInitialLoading) && (jsx("div", { className: "cw-search-input-loading", children: jsx(CwIcon, { iconId: "spinner" }) })), jsx("div", { className: "cw-search-input-icons", children: inputValue && !disabled && !isInitialLoading ? (jsx(CwButton, { type: "button", onClick: handleClear, "aria-label": "Clear selected crewmember", variant: "icon", icon: "close", color: "neutral" })) : (jsx(CwIcon, { iconId: "person" })) })] })] }), renderPanel(jsx("div", { ref: panelRef, className: dropdownStyles.dropdown, style: panelStyle, role: "listbox", children: jsx("ul", { children: options.map((option, index) => (jsx("li", { className: `${dropdownStyles.option}${index === highlightedIndex ? ` ${dropdownStyles.optionFocused}` : ""}`, onClick: () => handleOptionSelect(option.value), onMouseDown: (e) => e.preventDefault(), onMouseEnter: () => setHighlightedIndex(index), role: "option", "aria-selected": index === highlightedIndex, children: option.text }, option.value))) }) }))] }));
|
|
8089
|
+
}, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-search-input-wrapper", children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onFocus: handleInputFocus, placeholder: isInitialLoading ? "Loading…" : placeHolder, disabled: disabled, required: required, autoComplete: "off", "aria-expanded": showDropdown, "aria-haspopup": "listbox", role: "combobox", title: tooltipText }), (isLoading || isInitialLoading) && (jsx("div", { className: "cw-search-input-loading", children: jsx(CwIcon, { iconId: "spinner" }) })), jsx("div", { className: "cw-search-input-icons", children: inputValue && !disabled && !isInitialLoading ? (jsx(CwButton, { type: "button", onClick: handleClear, "aria-label": "Clear selected airport", variant: "icon", icon: "close", color: "neutral" })) : (jsx(CwIcon, { iconId: "control-tower" })) })] })] }), showDropdown && options.length > 0 && (jsx("div", { ref: dropdownRef, className: "cw-input-search-dropdown", role: "listbox", children: jsx("ul", { children: options.map((option, index) => (jsx("li", { className: index === highlightedIndex ? "highlighted" : "", onClick: () => handleOptionSelect(option.value), onMouseDown: (e) => e.preventDefault(), role: "option", "aria-selected": index === highlightedIndex, children: option.text }, option.value))) }) }))] }));
|
|
9955
8090
|
};
|
|
9956
8091
|
|
|
9957
|
-
export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwAnchoredMenu, CwBtnDelete, CwBtnEdit, CwBtnSave, CwButton, CwCard, CwCardList,
|
|
8092
|
+
export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwAnchoredMenu, CwBtnDelete, CwBtnEdit, CwBtnSave, CwButton, CwCard, CwCardList, CwCheckbox, CwChip, CwColorPicker, CwConfirmationPopup, CwContextMenu, CwDatePicker, CwDateRangePicker, CwDateTimePicker, CwDateTimePickerCompact, CwDialog, CwDialogManager, CwDigit, CwDisplayMessage, CwDropdownFilter, CwExpandable, CwFileUpload, CwFileUploadMultiple, CwFindAirport, CwGenericTooltip, CwHeadingMain, CwHeadingSecond, CwIcon, CwImageArea, CwImageGallery, CwImageZoom, CwInput, CwInputColor, CwInputDate, CwInputDatePicker, CwInputDateText, CwInputDatetime, CwInputImage, CwInputNumber, CwInputPhone, CwInputText, CwKeyValueList, CwLabel, CwLoading, CwLoadingSmall, CwMessage, CwMessageManager, CwMessageType, CwModal, CwModalHover, CwModalReportFunctional, CwMultiFilter, CwMultiFilterTag, CwNote, CwOption, CwReportModal, CwScheduler, CwSearchInput, CwSelect, CwSelectList, CwSelectListItems, CwSortableList, CwSuperScheduler, CwTable, CwTableGrouped, CwTabs, CwTextArea, CwTime, CwTimePicker, CwToggle, CwTooltip, CwTreeView, CwWeekdaySelector, DefaultRowHeader, OnClearPinned, OnClickContextMenu, OnClickEvent, OnClickRowEvent, OnClickRowHeader, OnClickUtc, OnDoubleClickEvent, OnDoubleClickRowEvent, OnDragEvent, OnDropCtrlEvent, OnDropEvent, OnEndClickHeaderEvent, OnLeftDragStart, OnMultiClickEvent, OnPinRow, OnRangeClickEvent, OnRightClickEvent, OnRightClickRow, OnRightDragStart, OnStartClickHeaderEvent, OnUnpinRow, PinRowHeader, Resource, Scheduler, SchedulerEvent, SuperScheduler, UiEvent, Weekdays, cblEvent, eventIsVisible, getDefaultDivisions, getEventSizes, itemsToMultiFilterTags, useCwMessage, useSortableList };
|