@cwellt_software/cwellt-reactjs-lib 1.2.14 → 1.2.15
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/deprecated/components/MultiSelect_deprecated_.d.ts +24 -0
- package/dist/deprecated/components/MultiSelect_deprecated_.d.ts.map +1 -0
- package/dist/deprecated/components/dropdown/CwDropdownContainer.d.ts +17 -0
- package/dist/deprecated/components/dropdown/CwDropdownContainer.d.ts.map +1 -0
- package/dist/deprecated/components/multiselect/CwHeadFilter.d.ts +17 -0
- package/dist/deprecated/components/multiselect/CwHeadFilter.d.ts.map +1 -0
- package/dist/deprecated/components/multiselect/CwMultiselect.d.ts +13 -0
- package/dist/deprecated/components/multiselect/CwMultiselect.d.ts.map +1 -0
- package/dist/deprecated/components/multiselect/CwOptionList.d.ts +14 -0
- package/dist/deprecated/components/multiselect/CwOptionList.d.ts.map +1 -0
- package/dist/deprecated/components/tag/CwTag.d.ts +15 -0
- package/dist/deprecated/components/tag/CwTag.d.ts.map +1 -0
- package/dist/index.cjs.js +30 -30
- package/dist/index.css +1 -1
- package/dist/index.es.js +30 -30
- package/dist/src/components/control/action/button/CwPopoverButton.d.ts +33 -0
- package/dist/src/components/control/action/button/CwPopoverButton.d.ts.map +1 -0
- package/dist/src/components/control/choice/deprecated/CwDropdown.d.ts +19 -0
- package/dist/src/components/control/choice/deprecated/CwDropdown.d.ts.map +1 -0
- package/dist/src/components/control/choice/deprecated/CwDropdownNavigation.d.ts +21 -0
- package/dist/src/components/control/choice/deprecated/CwDropdownNavigation.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwPopoverButton.d.ts +35 -0
- package/dist/src/components/control/choice/dropdown/CwPopoverButton.d.ts.map +1 -0
- package/dist/src/components/control/input/new-dates/CwDateTimePicker2.d.ts +47 -0
- package/dist/src/components/control/input/new-dates/CwDateTimePicker2.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +1 -12
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +1 -11
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +1 -1
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +1 -1
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +1 -1
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/src/common/classes/CwSelectList.js +0 -12
- package/dist/src/common/classes/CwSelectListItems.js +0 -14
- package/dist/src/common/functions/collections.js +0 -18
- package/dist/src/common/functions/colorManipulation.js +0 -76
- package/dist/src/common/functions/dsl/UiEventDSL.js +0 -20
- package/dist/src/common/functions/useSingleAndDoubleClicks.js +0 -28
- package/dist/src/common/interfaces/CwSelectListProps.js +0 -1
- package/dist/src/components/control/action/button/CwButton.js +0 -13
- package/dist/src/components/control/action/buttons/CwButtons.js +0 -188
- package/dist/src/components/control/action/contextmenu/CwContextMenu.js +0 -43
- package/dist/src/components/control/action/contextual-menu/CwContextualMenu.js +0 -55
- package/dist/src/components/control/action/search/CwSearch.js +0 -67
- package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.js +0 -11
- package/dist/src/components/control/choice/checkbox/CwCheckbox.js +0 -15
- package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.js +0 -99
- package/dist/src/components/control/choice/dropdown/CwDropdown.js +0 -27
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.js +0 -30
- package/dist/src/components/control/choice/dropdown/CwDropdownFilter.js +0 -10
- package/dist/src/components/control/choice/multi-filter/CwMultiFilter.js +0 -298
- package/dist/src/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.js +0 -17
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.js +0 -80
- package/dist/src/components/control/choice/multiselect/CwMultiselect.js +0 -393
- package/dist/src/components/control/choice/multiselect/CwOptionList.js +0 -36
- package/dist/src/components/control/choice/option/CwOption.js +0 -16
- package/dist/src/components/control/choice/select/CwSelect.js +0 -36
- package/dist/src/components/control/choice/toggle/CwToggle.js +0 -9
- package/dist/src/components/control/input/any/CwInput.js +0 -16
- package/dist/src/components/control/input/color/CwColorPicker.js +0 -210
- package/dist/src/components/control/input/color/CwInputColor.js +0 -142
- package/dist/src/components/control/input/date/CwInputDate.js +0 -29
- package/dist/src/components/control/input/date-picker/CwInputDatePicker.js +0 -109
- package/dist/src/components/control/input/date-text/CwInputDateText.js +0 -90
- package/dist/src/components/control/input/datetime/CwInputDatetime.js +0 -29
- package/dist/src/components/control/input/digit/CwDigit.js +0 -28
- package/dist/src/components/control/input/file/CwFileUpload.js +0 -52
- package/dist/src/components/control/input/file/CwFileUploadMultiple.js +0 -148
- package/dist/src/components/control/input/image/CwInputImage.js +0 -52
- package/dist/src/components/control/input/image-area/CwImageArea.js +0 -113
- package/dist/src/components/control/input/new-dates/example.d.ts +0 -2
- package/dist/src/components/control/input/new-dates/example.d.ts.map +0 -1
- package/dist/src/components/control/input/number/CwInputNumber.js +0 -11
- package/dist/src/components/control/input/phone/CwInputPhone.js +0 -24
- package/dist/src/components/control/input/text/CwInputText.js +0 -31
- package/dist/src/components/control/input/text-area/CwTextArea.js +0 -9
- package/dist/src/components/control/input/time/CwTime.js +0 -29
- package/dist/src/components/control/input/weekday/CwWeekdaySelector.js +0 -143
- package/dist/src/components/custom/find-airport/CwFindAirportComp.js +0 -240
- package/dist/src/components/custom/scheduler/CwSchedulerComp.js +0 -211
- package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.js +0 -269
- package/dist/src/components/custom/scheduler/components/EventRender.js +0 -142
- package/dist/src/components/custom/scheduler/components/ResourceListRender.js +0 -12
- package/dist/src/components/custom/scheduler/components/ResourceRender.js +0 -26
- package/dist/src/components/custom/scheduler/components/day_headers/DayHeader.js +0 -13
- package/dist/src/components/custom/scheduler/components/day_headers/MonthHeader.js +0 -12
- package/dist/src/components/custom/scheduler/components/day_headers/MyDaysHeader.js +0 -62
- package/dist/src/components/custom/scheduler/components/day_headers/WeekHeader.js +0 -13
- package/dist/src/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.js +0 -24
- package/dist/src/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.js +0 -17
- package/dist/src/components/custom/scheduler/components/scheduler_header/SchedulerHeader.js +0 -26
- package/dist/src/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.js +0 -23
- package/dist/src/components/custom/scheduler/components/time_headers/TimeHeader.js +0 -31
- package/dist/src/components/custom/scheduler/components/time_headers/TimeHeaderRow.js +0 -16
- package/dist/src/components/custom/scheduler/components/time_line/TimeLine.js +0 -12
- package/dist/src/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.js +0 -5
- package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDates.js +0 -15
- package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.js +0 -5
- package/dist/src/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.js +0 -43
- package/dist/src/components/custom/scheduler/logic/dates/getMonthHeaderData.js +0 -35
- package/dist/src/components/custom/scheduler/logic/dates/getUtcToday.js +0 -6
- package/dist/src/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.js +0 -20
- package/dist/src/components/custom/scheduler/logic/dates/listOfDatesToWeeks.js +0 -55
- package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisionType.js +0 -13
- package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisions.js +0 -16
- package/dist/src/components/custom/scheduler/logic/filtering/filterEvents.js +0 -33
- package/dist/src/components/custom/scheduler/logic/filtering/filterResources.js +0 -14
- package/dist/src/components/custom/scheduler/logic/filtering/hasSameProperties.js +0 -10
- package/dist/src/components/custom/scheduler/logic/onDrop/OnDrop.js +0 -45
- package/dist/src/components/custom/scheduler/logic/pixels/getHeightLineScheduler.js +0 -14
- package/dist/src/components/custom/scheduler/logic/pixels/getPixelsForEvent.js +0 -32
- package/dist/src/components/custom/scheduler/logic/pixels/heightScheduler.js +0 -14
- package/dist/src/components/custom/scheduler/logic/pixels/heightSchedulerPinned.js +0 -9
- package/dist/src/components/custom/scheduler/logic/state_handle/doubleClickOnResource.js +0 -5
- package/dist/src/components/custom/scheduler/logic/state_handle/handleResourceChange.js +0 -11
- package/dist/src/components/custom/scheduler/logic/state_handle/onDragOver.js +0 -9
- package/dist/src/components/custom/scheduler/logic/state_handle/onDropEventToResource.js +0 -3
- package/dist/src/components/custom/scheduler/logic/strings/compareStrings.js +0 -7
- package/dist/src/components/custom/scheduler/logic/strings/getGUID.js +0 -7
- package/dist/src/components/custom/scheduler/logic/ui/checkIfSlotAvailable.js +0 -8
- package/dist/src/components/custom/scheduler/logic/ui/getEventsOfResource.js +0 -45
- package/dist/src/components/custom/scheduler/logic/ui/getTimeHeaders.js +0 -35
- package/dist/src/components/custom/scheduler/logic/ui/isAllowedToMove.js +0 -19
- package/dist/src/components/custom/scheduler/logic/ui/updateResourceVisibility.js +0 -15
- package/dist/src/components/custom/scheduler/state/CblDragAndDrop.js +0 -18
- package/dist/src/components/custom/scheduler/state/CwSchedulerProps.js +0 -1
- package/dist/src/components/custom/scheduler/state/Resource.js +0 -18
- package/dist/src/components/custom/scheduler/state/State.js +0 -1
- package/dist/src/components/custom/scheduler/state/cblEvent.js +0 -28
- package/dist/src/components/custom/scheduler/state/cblEventCompProps.js +0 -1
- package/dist/src/components/custom/scheduler/state/resourceCompProps2.js +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.js +0 -123
- package/dist/src/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.js +0 -118
- package/dist/src/components/custom/scheduler-new/presentation/SchedulerPresenter.js +0 -166
- package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderDivision.js +0 -26
- package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderTitle.js +0 -8
- package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.js +0 -86
- package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.js +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.js +0 -60
- package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.js +0 -24
- package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.js +0 -150
- package/dist/src/components/custom/scheduler-new/presentation/components/row/EventSideDrag.js +0 -11
- package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.js +0 -176
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.js +0 -8
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/TimeLine.js +0 -39
- package/dist/src/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.js +0 -8
- package/dist/src/components/custom/scheduler-new/presentation/helpers.js +0 -43
- package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.js +0 -24
- package/dist/src/components/custom/scheduler-new/presentation/logic/dateFromPercentage.js +0 -7
- package/dist/src/components/custom/scheduler-new/presentation/logic/eventIsVisible.js +0 -7
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.js +0 -113
- package/dist/src/components/custom/scheduler-new/presentation/logic/getDivisions.js +0 -21
- package/dist/src/components/custom/scheduler-new/presentation/logic/getEventSizes.js +0 -30
- package/dist/src/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.js +0 -13
- package/dist/src/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.js +0 -7
- package/dist/src/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.js +0 -32
- package/dist/src/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.js +0 -12
- package/dist/src/components/custom/scheduler-new/presentation/state/ui/SchedulerState.js +0 -1
- package/dist/src/components/custom/scheduler-new/presentation/state/ui/WeekRange.js +0 -1
- package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.js +0 -267
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.js +0 -269
- package/dist/src/components/custom/scheduler-temporal/components/EventRender.js +0 -142
- package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.js +0 -12
- package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.js +0 -26
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.js +0 -13
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.js +0 -12
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.js +0 -62
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.js +0 -13
- package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.js +0 -22
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.js +0 -17
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.js +0 -26
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.js +0 -23
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.js +0 -31
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.js +0 -16
- package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.js +0 -12
- package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.js +0 -5
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.js +0 -15
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.js +0 -5
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.js +0 -43
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.js +0 -35
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.js +0 -6
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.js +0 -20
- package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.js +0 -55
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.js +0 -13
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.js +0 -16
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.js +0 -10
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.js +0 -34
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.js +0 -14
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.js +0 -10
- package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.js +0 -36
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.js +0 -14
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.js +0 -32
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.js +0 -14
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.js +0 -9
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.js +0 -5
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.js +0 -178
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.js +0 -11
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.js +0 -9
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.js +0 -3
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.js +0 -3
- package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.js +0 -7
- package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.js +0 -7
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.js +0 -9
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.js +0 -92
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.js +0 -242
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.js +0 -35
- package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.js +0 -19
- package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.js +0 -241
- package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.js +0 -15
- package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.js +0 -18
- package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.js +0 -1
- package/dist/src/components/custom/scheduler-temporal/state/Resource.js +0 -18
- package/dist/src/components/custom/scheduler-temporal/state/State.js +0 -1
- package/dist/src/components/custom/scheduler-temporal/state/cblEvent.js +0 -28
- package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.js +0 -1
- package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.js +0 -1
- package/dist/src/components/custom/super-scheduler/PinRowHeader.js +0 -53
- package/dist/src/components/custom/super-scheduler/SuperScheduler.js +0 -23
- package/dist/src/components/custom/super-scheduler/SuperSchedulerEvents.js +0 -15
- package/dist/src/components/custom/super-scheduler/SuperSchedulerPresenter.js +0 -45
- package/dist/src/components/display/data/accordion/CwAccordionContainer.js +0 -20
- package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.js +0 -138
- package/dist/src/components/display/data/table/CwTable.js +0 -203
- package/dist/src/components/display/graphics/icon/CwIcon.js +0 -23
- package/dist/src/components/display/graphics/loading/CwLoading.js +0 -27
- package/dist/src/components/display/graphics/loading-small/CwLoadingSmall.js +0 -20
- package/dist/src/components/display/text/heading/CwHeadingMain.js +0 -5
- package/dist/src/components/display/text/heading/CwHeadingSecond.js +0 -5
- package/dist/src/components/display/text/label/CwLabel.js +0 -13
- package/dist/src/components/display/text/message/CwMessage.js +0 -75
- package/dist/src/components/display/text/note/CwNote.js +0 -78
- package/dist/src/components/display/text/tag/CwChip.js +0 -57
- package/dist/src/components/display/text/tag/CwTag.js +0 -21
- package/dist/src/components/display/text/tooltip/CwTooltip.js +0 -4
- package/dist/src/components/layout/align/CwAlign.js +0 -54
- package/dist/src/components/layout/card/CwCard.js +0 -55
- package/dist/src/components/layout/card/CwCardList.js +0 -38
- package/dist/src/components/layout/dialog/CwDialog.js +0 -255
- package/dist/src/components/layout/dialog/CwDialogManager.js +0 -44
- package/dist/src/components/layout/list/details/CwExpandable.js +0 -28
- package/dist/src/components/layout/list/key-value/CwKeyValueList.js +0 -23
- package/dist/src/components/layout/list/sortable/CwSortableList.js +0 -73
- package/dist/src/components/layout/list/sortable/useSortableList.js +0 -53
- package/dist/src/components/layout/modal/CwModalReportFunctional.js +0 -23
- package/dist/src/components/layout/modal/hover/CwModalHover.js +0 -61
- package/dist/src/components/layout/modal/legacy/cw_modal.js +0 -44
- package/dist/src/components/layout/modal/legacy/cw_modal_confirm.js +0 -39
- package/dist/src/components/layout/modal/legacy/cw_modal_iframe.js +0 -44
- package/dist/src/components/layout/modal/legacy/cw_modal_report.js +0 -26
- package/dist/src/components/layout/table/grouped/CwTableGrouped.js +0 -70
- package/dist/src/components/layout/tabs/CwTabs.js +0 -53
- package/dist/src/index.js +0 -187
- package/dist/test/components/custom/new-scheduler/presentation/logic/getDefaultDivisions.test.js +0 -48
- package/dist/test/components/custom/new-scheduler/presentation/logic/hoursBetween.test.js +0 -15
- package/dist/test/components/custom/new-scheduler/presentation/logic/monthDivisions.test.js +0 -42
- package/dist/test/components/custom/new-scheduler/presentation/logic/weekendCalc.test.js +0 -30
- package/dist/test/components/custom/scheduler/addMinutesToDateFromPx.test.js +0 -43
- package/dist/test/components/custom/scheduler/checkIfSlotAvailable.test.js +0 -30
- package/dist/test/components/custom/scheduler/daysBetweenTwoDates.test.js +0 -61
- package/dist/test/components/custom/scheduler/daysBetweenTwoDatesWithoutCeilForEvent.test.js +0 -27
- package/dist/test/components/custom/scheduler/getGUID.test.js +0 -30
- package/dist/test/components/custom/scheduler/getPixelsForEvent.test.js +0 -38
- package/dist/test/components/custom/scheduler/getTimeHeaders.test.js +0 -35
- package/dist/test/components/custom/scheduler/hasSameProperties.test.js +0 -51
- package/dist/test/components/custom/scheduler/isAllowedToMove.test.js +0 -28
- package/dist/test/components/custom/scheduler/listOfDatesToWeeks.test.js +0 -72
- package/dist/test/jest.setup.js +0 -1
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
-
import { getContrastColor } from '../../../../common/functions/colorManipulation';
|
|
4
|
-
import styles from './cw-color-picker.module.css';
|
|
5
|
-
export const CwColorPicker = ({ initialColor, onChange, previewText = "Color preview" }) => {
|
|
6
|
-
const [rgb, setRgb] = useState({ r: 255, g: 255, b: 255 });
|
|
7
|
-
const [hsv, setHsv] = useState({ h: 0, s: 0, v: 100 });
|
|
8
|
-
const [hexColor, setHexColor] = useState(initialColor || '#FFFFFF');
|
|
9
|
-
const [initialized, setInitialized] = useState(false);
|
|
10
|
-
const [inputMode, setInputMode] = useState('hex');
|
|
11
|
-
// Prevent infinite update loops
|
|
12
|
-
const isUpdatingRef = useRef(false);
|
|
13
|
-
const hueBarRef = useRef(null);
|
|
14
|
-
const colorAreaRef = useRef(null);
|
|
15
|
-
// Convert HSV to RGB
|
|
16
|
-
const hsvToRgb = (h, s, v) => {
|
|
17
|
-
h = h / 360;
|
|
18
|
-
s = s / 100;
|
|
19
|
-
v = v / 100;
|
|
20
|
-
let r = 0, g = 0, b = 0;
|
|
21
|
-
if (s === 0) {
|
|
22
|
-
r = g = b = v;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
const i = Math.floor(h * 6);
|
|
26
|
-
const f = h * 6 - i;
|
|
27
|
-
const p = v * (1 - s);
|
|
28
|
-
const q = v * (1 - f * s);
|
|
29
|
-
const t = v * (1 - (1 - f) * s);
|
|
30
|
-
switch (i % 6) {
|
|
31
|
-
case 0:
|
|
32
|
-
r = v;
|
|
33
|
-
g = t;
|
|
34
|
-
b = p;
|
|
35
|
-
break;
|
|
36
|
-
case 1:
|
|
37
|
-
r = q;
|
|
38
|
-
g = v;
|
|
39
|
-
b = p;
|
|
40
|
-
break;
|
|
41
|
-
case 2:
|
|
42
|
-
r = p;
|
|
43
|
-
g = v;
|
|
44
|
-
b = t;
|
|
45
|
-
break;
|
|
46
|
-
case 3:
|
|
47
|
-
r = p;
|
|
48
|
-
g = q;
|
|
49
|
-
b = v;
|
|
50
|
-
break;
|
|
51
|
-
case 4:
|
|
52
|
-
r = t;
|
|
53
|
-
g = p;
|
|
54
|
-
b = v;
|
|
55
|
-
break;
|
|
56
|
-
case 5:
|
|
57
|
-
r = v;
|
|
58
|
-
g = p;
|
|
59
|
-
b = q;
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
r: Math.round(r * 255),
|
|
65
|
-
g: Math.round(g * 255),
|
|
66
|
-
b: Math.round(b * 255)
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
// Convert RGB to HSV
|
|
70
|
-
const rgbToHsv = (r, g, b) => {
|
|
71
|
-
r /= 255;
|
|
72
|
-
g /= 255;
|
|
73
|
-
b /= 255;
|
|
74
|
-
const max = Math.max(r, g, b);
|
|
75
|
-
const min = Math.min(r, g, b);
|
|
76
|
-
let h = 0;
|
|
77
|
-
const v = max;
|
|
78
|
-
const d = max - min;
|
|
79
|
-
const s = max === 0 ? 0 : d / max;
|
|
80
|
-
if (max === min) {
|
|
81
|
-
h = 0;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
switch (max) {
|
|
85
|
-
case r:
|
|
86
|
-
h = (g - b) / d + (g < b ? 6 : 0);
|
|
87
|
-
break;
|
|
88
|
-
case g:
|
|
89
|
-
h = (b - r) / d + 2;
|
|
90
|
-
break;
|
|
91
|
-
case b:
|
|
92
|
-
h = (r - g) / d + 4;
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
h /= 6;
|
|
96
|
-
}
|
|
97
|
-
return {
|
|
98
|
-
h: Math.round(h * 360),
|
|
99
|
-
s: Math.round(s * 100),
|
|
100
|
-
v: Math.round(v * 100)
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
// Convert RGB to HEX
|
|
104
|
-
const rgbToHex = (r, g, b) => {
|
|
105
|
-
return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();
|
|
106
|
-
};
|
|
107
|
-
// Initialize color values from initial color prop
|
|
108
|
-
useEffect(() => {
|
|
109
|
-
if (!initialized && initialColor) {
|
|
110
|
-
const hexToRgb = (hex) => {
|
|
111
|
-
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
112
|
-
return result ? {
|
|
113
|
-
r: parseInt(result[1], 16),
|
|
114
|
-
g: parseInt(result[2], 16),
|
|
115
|
-
b: parseInt(result[3], 16)
|
|
116
|
-
} : { r: 255, g: 255, b: 255 };
|
|
117
|
-
};
|
|
118
|
-
const initialRgb = hexToRgb(initialColor);
|
|
119
|
-
setRgb(initialRgb);
|
|
120
|
-
setHexColor(initialColor);
|
|
121
|
-
const initialHsv = rgbToHsv(initialRgb.r, initialRgb.g, initialRgb.b);
|
|
122
|
-
setHsv(initialHsv);
|
|
123
|
-
setInitialized(true);
|
|
124
|
-
}
|
|
125
|
-
}, [initialColor, initialized]);
|
|
126
|
-
// Update color state and notify parent component of changes
|
|
127
|
-
const updateColorState = useCallback((newRgb, newHsv) => {
|
|
128
|
-
if (isUpdatingRef.current)
|
|
129
|
-
return;
|
|
130
|
-
isUpdatingRef.current = true;
|
|
131
|
-
// Update RGB and HSV
|
|
132
|
-
setRgb(newRgb);
|
|
133
|
-
setHsv(newHsv);
|
|
134
|
-
// Calculate and update HEX
|
|
135
|
-
const newHex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);
|
|
136
|
-
setHexColor(newHex);
|
|
137
|
-
// Notify changes after render cycle
|
|
138
|
-
requestAnimationFrame(() => {
|
|
139
|
-
onChange(newHex, newRgb, newHsv);
|
|
140
|
-
isUpdatingRef.current = false;
|
|
141
|
-
});
|
|
142
|
-
}, [onChange]);
|
|
143
|
-
const handleRgbChange = (e) => {
|
|
144
|
-
const { name, value } = e.target;
|
|
145
|
-
const numValue = Math.min(255, Math.max(0, parseInt(value, 10) || 0));
|
|
146
|
-
const newRgb = { ...rgb, [name]: numValue };
|
|
147
|
-
const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
|
|
148
|
-
updateColorState(newRgb, newHsv);
|
|
149
|
-
};
|
|
150
|
-
const toggleInputMode = () => {
|
|
151
|
-
setInputMode(inputMode === 'hex' ? 'rgb' : 'hex');
|
|
152
|
-
};
|
|
153
|
-
const handleHexChange = (e) => {
|
|
154
|
-
const { value } = e.target;
|
|
155
|
-
setHexColor(value);
|
|
156
|
-
// Validate and convert HEX to RGB
|
|
157
|
-
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(value);
|
|
158
|
-
if (result) {
|
|
159
|
-
const newRgb = {
|
|
160
|
-
r: parseInt(result[1], 16),
|
|
161
|
-
g: parseInt(result[2], 16),
|
|
162
|
-
b: parseInt(result[3], 16)
|
|
163
|
-
};
|
|
164
|
-
const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
|
|
165
|
-
// Update RGB and HSV without triggering full cycle
|
|
166
|
-
setRgb(newRgb);
|
|
167
|
-
setHsv(newHsv);
|
|
168
|
-
// Notify changes
|
|
169
|
-
requestAnimationFrame(() => {
|
|
170
|
-
onChange(value, newRgb, newHsv);
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
// Handle hue bar click
|
|
175
|
-
const handleHueBarClick = (e) => {
|
|
176
|
-
if (!hueBarRef.current)
|
|
177
|
-
return;
|
|
178
|
-
const rect = hueBarRef.current.getBoundingClientRect();
|
|
179
|
-
const height = rect.height;
|
|
180
|
-
const y = e.clientY - rect.top;
|
|
181
|
-
// Calculate hue value based on vertical position (0-360)
|
|
182
|
-
const newHue = Math.round(360 * (1 - Math.min(1, Math.max(0, y / height))));
|
|
183
|
-
const newHsv = { ...hsv, h: newHue };
|
|
184
|
-
const newRgb = hsvToRgb(newHue, hsv.s, hsv.v);
|
|
185
|
-
updateColorState(newRgb, newHsv);
|
|
186
|
-
};
|
|
187
|
-
// Handle color area click (saturation/value)
|
|
188
|
-
const handleColorAreaClick = (e) => {
|
|
189
|
-
if (!colorAreaRef.current)
|
|
190
|
-
return;
|
|
191
|
-
const rect = colorAreaRef.current.getBoundingClientRect();
|
|
192
|
-
const width = rect.width;
|
|
193
|
-
const height = rect.height;
|
|
194
|
-
const x = e.clientX - rect.left;
|
|
195
|
-
const y = e.clientY - rect.top;
|
|
196
|
-
// Calculate saturation and value based on position
|
|
197
|
-
const newSaturation = Math.round(100 * Math.min(1, Math.max(0, x / width)));
|
|
198
|
-
const newValue = Math.round(100 * (1 - Math.min(1, Math.max(0, y / height))));
|
|
199
|
-
const newHsv = { ...hsv, s: newSaturation, v: newValue };
|
|
200
|
-
const newRgb = hsvToRgb(hsv.h, newSaturation, newValue);
|
|
201
|
-
updateColorState(newRgb, newHsv);
|
|
202
|
-
};
|
|
203
|
-
// Calculate background color for the main area based on current hue
|
|
204
|
-
const hueColor = hsvToRgb(hsv.h, 100, 100);
|
|
205
|
-
const hueHex = rgbToHex(hueColor.r, hueColor.g, hueColor.b);
|
|
206
|
-
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.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.colorPickerInteractiveArea, children: [_jsx("div", { className: styles.hueBar, ref: hueBarRef, onClick: handleHueBarClick, children: _jsx("div", { className: styles.hueBarSlider, style: { top: `${(360 - hsv.h) / 360 * 100}%` } }) }), _jsxs("div", { className: styles.colorArea, ref: colorAreaRef, onClick: handleColorAreaClick, children: [_jsxs("div", { className: styles.colorAreaOverlay, children: [_jsx("div", { className: styles.hueBackground, style: { backgroundColor: hueHex } }), _jsx("div", { className: styles.whiteGradient }), _jsx("div", { className: styles.blackGradient })] }), _jsx("div", { className: styles.colorAreaCursor, style: {
|
|
207
|
-
left: `${hsv.s}%`,
|
|
208
|
-
top: `${100 - hsv.v}%`
|
|
209
|
-
} })] })] })] }));
|
|
210
|
-
};
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
-
import { createPortal } from 'react-dom';
|
|
4
|
-
import { CwColorPicker } from './CwColorPicker';
|
|
5
|
-
import styles from './cw-input-color.module.css';
|
|
6
|
-
export const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled = false, width = '4rem', height = '2rem' }) => {
|
|
7
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
8
|
-
const containerRef = useRef(null);
|
|
9
|
-
const dropdownRef = useRef(null);
|
|
10
|
-
const DROPDOWN_WIDTH = 280;
|
|
11
|
-
const DROPDOWN_HEIGHT = 250;
|
|
12
|
-
const MARGIN = 8;
|
|
13
|
-
// Calculate dropdown position
|
|
14
|
-
const dropdownStyle = useMemo(() => {
|
|
15
|
-
if (!isOpen || !containerRef.current) {
|
|
16
|
-
return { display: 'none' };
|
|
17
|
-
}
|
|
18
|
-
const rect = containerRef.current.getBoundingClientRect();
|
|
19
|
-
const viewportWidth = window.innerWidth;
|
|
20
|
-
const viewportHeight = window.innerHeight;
|
|
21
|
-
// Calculate initial positions
|
|
22
|
-
let top = rect.bottom + MARGIN;
|
|
23
|
-
let left = rect.left;
|
|
24
|
-
// Adjust horizontal position if needed
|
|
25
|
-
if (left + DROPDOWN_WIDTH > viewportWidth - MARGIN) {
|
|
26
|
-
// Try to align with right edge of trigger
|
|
27
|
-
left = rect.right - DROPDOWN_WIDTH;
|
|
28
|
-
// If still out of bounds, stick to right edge of viewport
|
|
29
|
-
if (left < MARGIN) {
|
|
30
|
-
left = viewportWidth - DROPDOWN_WIDTH - MARGIN;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Adjust vertical position if needed
|
|
34
|
-
if (top + DROPDOWN_HEIGHT > viewportHeight - MARGIN) {
|
|
35
|
-
// Try to show above the trigger
|
|
36
|
-
const topPosition = rect.top - DROPDOWN_HEIGHT - MARGIN;
|
|
37
|
-
// Only use top position if there's enough space
|
|
38
|
-
if (topPosition > MARGIN) {
|
|
39
|
-
top = topPosition;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
// Keep at bottom but ensure some visibility
|
|
43
|
-
top = Math.min(top, viewportHeight - DROPDOWN_HEIGHT - MARGIN);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
position: 'fixed',
|
|
48
|
-
top: `${Math.max(MARGIN, top)}px`,
|
|
49
|
-
left: `${Math.max(MARGIN, left)}px`,
|
|
50
|
-
zIndex: 1000,
|
|
51
|
-
width: `${DROPDOWN_WIDTH}px`
|
|
52
|
-
};
|
|
53
|
-
}, [isOpen]);
|
|
54
|
-
const handleToggle = () => {
|
|
55
|
-
if (disabled)
|
|
56
|
-
return;
|
|
57
|
-
setIsOpen(prev => !prev);
|
|
58
|
-
};
|
|
59
|
-
// Recalculate position on scroll/resize
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
if (!isOpen)
|
|
62
|
-
return;
|
|
63
|
-
const handlePositionUpdate = () => {
|
|
64
|
-
// Force re-render to recalculate position
|
|
65
|
-
setIsOpen(false);
|
|
66
|
-
requestAnimationFrame(() => setIsOpen(true));
|
|
67
|
-
};
|
|
68
|
-
// Debounced handlers
|
|
69
|
-
let resizeTimeout;
|
|
70
|
-
let scrollTimeout;
|
|
71
|
-
const handleResize = () => {
|
|
72
|
-
clearTimeout(resizeTimeout);
|
|
73
|
-
resizeTimeout = setTimeout(handlePositionUpdate, 100);
|
|
74
|
-
};
|
|
75
|
-
const handleScroll = () => {
|
|
76
|
-
clearTimeout(scrollTimeout);
|
|
77
|
-
scrollTimeout = setTimeout(handlePositionUpdate, 50);
|
|
78
|
-
};
|
|
79
|
-
window.addEventListener('resize', handleResize);
|
|
80
|
-
window.addEventListener('scroll', handleScroll, true);
|
|
81
|
-
return () => {
|
|
82
|
-
window.removeEventListener('resize', handleResize);
|
|
83
|
-
window.removeEventListener('scroll', handleScroll, true);
|
|
84
|
-
clearTimeout(resizeTimeout);
|
|
85
|
-
clearTimeout(scrollTimeout);
|
|
86
|
-
};
|
|
87
|
-
}, [isOpen]);
|
|
88
|
-
// Handle outside clicks and escape
|
|
89
|
-
useEffect(() => {
|
|
90
|
-
if (!isOpen)
|
|
91
|
-
return;
|
|
92
|
-
const handleClickOutside = (event) => {
|
|
93
|
-
const target = event.target;
|
|
94
|
-
// Check if click is outside both container and dropdown
|
|
95
|
-
if (containerRef.current &&
|
|
96
|
-
!containerRef.current.contains(target) &&
|
|
97
|
-
dropdownRef.current &&
|
|
98
|
-
!dropdownRef.current.contains(target)) {
|
|
99
|
-
setIsOpen(false);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
const handleEscape = (event) => {
|
|
103
|
-
if (event.key === 'Escape') {
|
|
104
|
-
setIsOpen(false);
|
|
105
|
-
// Return focus to trigger
|
|
106
|
-
containerRef.current?.focus();
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
// Use capture phase for better event handling
|
|
110
|
-
document.addEventListener('click', handleClickOutside, true);
|
|
111
|
-
document.addEventListener('keydown', handleEscape);
|
|
112
|
-
return () => {
|
|
113
|
-
document.removeEventListener('click', handleClickOutside, true);
|
|
114
|
-
document.removeEventListener('keydown', handleEscape);
|
|
115
|
-
};
|
|
116
|
-
}, [isOpen]);
|
|
117
|
-
const handleColorChange = (color) => {
|
|
118
|
-
onChange(color);
|
|
119
|
-
};
|
|
120
|
-
const handleKeyDown = (e) => {
|
|
121
|
-
if (disabled)
|
|
122
|
-
return;
|
|
123
|
-
switch (e.key) {
|
|
124
|
-
case 'Enter':
|
|
125
|
-
case ' ':
|
|
126
|
-
e.preventDefault();
|
|
127
|
-
handleToggle();
|
|
128
|
-
break;
|
|
129
|
-
case 'Escape':
|
|
130
|
-
if (isOpen) {
|
|
131
|
-
e.preventDefault();
|
|
132
|
-
setIsOpen(false);
|
|
133
|
-
}
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
return (_jsxs(_Fragment, { children: [_jsx("div", { ref: containerRef, onClick: handleToggle, className: `${styles.selectColor} ${disabled ? styles.disabled : ''}`, style: {
|
|
138
|
-
width,
|
|
139
|
-
height,
|
|
140
|
-
backgroundColor: value,
|
|
141
|
-
}, "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.colorDropdown, style: dropdownStyle, role: "dialog", "aria-modal": "true", "aria-label": "Color picker", children: _jsx(CwColorPicker, { initialColor: value, onChange: handleColorChange, previewText: previewText }) }), document.body)] }));
|
|
142
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CwButton } from "../../../../components/control/action/button/CwButton";
|
|
3
|
-
import { CwIcon } from "../../../../components/display/graphics/icon/CwIcon";
|
|
4
|
-
import { CwLabel } from "../../../../components/display/text/label/CwLabel";
|
|
5
|
-
import { CwAlign } from "../../../../components/layout/align/CwAlign";
|
|
6
|
-
/**
|
|
7
|
-
* Input for entering a string of text.
|
|
8
|
-
* @remarks
|
|
9
|
-
* ```txt
|
|
10
|
-
* CwIcon CwLabel input type=date CwButton
|
|
11
|
-
* ↑ ↑ ↑ ↑
|
|
12
|
-
* ╭────────────────────╮╭════╮
|
|
13
|
-
* ⌂ Birthdate │ 0000 / 00 / 00 │║ Ok ║
|
|
14
|
-
* ╰────────────────────╯╰════╯
|
|
15
|
-
* ```
|
|
16
|
-
* @example
|
|
17
|
-
* ```tsx
|
|
18
|
-
* <CwInputDate
|
|
19
|
-
* iconProps={{ iconId: "Birthdate" }}
|
|
20
|
-
* labelProps={{ children: "Name", width: "100px" }}
|
|
21
|
-
* buttonProps={{ children: "Ok", onClick:()=>{alert("happy happy joy joy")} }}
|
|
22
|
-
* />
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export function CwInputDate(props) {
|
|
26
|
-
const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
|
|
27
|
-
inputProps.max = inputProps.max ?? "9999-01-01";
|
|
28
|
-
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 })] }) }));
|
|
29
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import moment from "moment";
|
|
3
|
-
import { useEffect, useRef, useState } from "react";
|
|
4
|
-
import classes from "./cw-input-date-picker.module.css";
|
|
5
|
-
export const CwInputDatePicker = ({ value, onChange }) => {
|
|
6
|
-
const [isCalendarOpen, setIsCalendarOpen] = useState(false);
|
|
7
|
-
const [internalDate, setInternalDate] = useState(new Date(value || new Date().toISOString()));
|
|
8
|
-
const [textDate, setTextDate] = useState(toGermanDate(value));
|
|
9
|
-
const inputRef = useRef(null);
|
|
10
|
-
const calendarRef = useRef(null);
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
const handleClickOutside = (event) => {
|
|
13
|
-
if (calendarRef.current &&
|
|
14
|
-
!calendarRef.current.contains(event.target) &&
|
|
15
|
-
inputRef.current &&
|
|
16
|
-
!inputRef.current.contains(event.target)) {
|
|
17
|
-
setIsCalendarOpen(false);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
document.addEventListener("mousedown", handleClickOutside);
|
|
21
|
-
return () => {
|
|
22
|
-
document.removeEventListener("mousedown", handleClickOutside);
|
|
23
|
-
};
|
|
24
|
-
}, []);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
setTextDate(toGermanDate(value));
|
|
27
|
-
}, [value]);
|
|
28
|
-
function toGermanDate(dateString) {
|
|
29
|
-
return moment(dateString).format("DD.MM.YYYY");
|
|
30
|
-
}
|
|
31
|
-
function toISODate(dateString) {
|
|
32
|
-
return moment(dateString).format("YYYY-MM-DD");
|
|
33
|
-
}
|
|
34
|
-
const submitInput = () => {
|
|
35
|
-
if (moment(textDate, "DD.MM.YYYY", true).isValid()) {
|
|
36
|
-
const inputValue = textDate;
|
|
37
|
-
const momentDate = moment(inputValue, "DD.MM.YYYY", true);
|
|
38
|
-
if (momentDate.isValid()) {
|
|
39
|
-
const newDateString = momentDate.format("YYYY-MM-DD");
|
|
40
|
-
if (newDateString !== value) {
|
|
41
|
-
const newDateString = momentDate.format("YYYY-MM-DD");
|
|
42
|
-
setInternalDate(momentDate.toDate());
|
|
43
|
-
onChange?.(newDateString);
|
|
44
|
-
}
|
|
45
|
-
setIsCalendarOpen(false);
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
console.error("Invalid date format");
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
setTextDate(toGermanDate(new Date(value)));
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
const handleClickToday = () => {
|
|
59
|
-
const today = toISODate(new Date());
|
|
60
|
-
const currentDate = value;
|
|
61
|
-
if (currentDate != today) {
|
|
62
|
-
setTextDate(toGermanDate(today));
|
|
63
|
-
setInternalDate(new Date(today));
|
|
64
|
-
onChange?.(today);
|
|
65
|
-
}
|
|
66
|
-
setIsCalendarOpen(false);
|
|
67
|
-
};
|
|
68
|
-
const handleClickDay = (day) => {
|
|
69
|
-
const newDate = new Date(internalDate.getFullYear(), internalDate.getMonth(), day);
|
|
70
|
-
const newDateString = toISODate(newDate);
|
|
71
|
-
if (newDateString !== value) {
|
|
72
|
-
setTextDate(toGermanDate(newDate));
|
|
73
|
-
setInternalDate(newDate);
|
|
74
|
-
onChange?.(newDateString);
|
|
75
|
-
}
|
|
76
|
-
setIsCalendarOpen(false);
|
|
77
|
-
};
|
|
78
|
-
const handleClickMonthArrow = (direction) => {
|
|
79
|
-
setInternalDate(prevDate => new Date(prevDate.getFullYear(), prevDate.getMonth() + direction, 1));
|
|
80
|
-
};
|
|
81
|
-
const handlePressEnter = (event) => {
|
|
82
|
-
if (event.key === "Enter" && submitInput()) {
|
|
83
|
-
event.currentTarget.blur();
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
const handleBlurInput = (event) => {
|
|
87
|
-
if (value != toISODate(internalDate) && submitInput()) {
|
|
88
|
-
event.currentTarget?.blur();
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
const generateCalendarDays = () => {
|
|
92
|
-
const daysInMonth = new Date(internalDate.getFullYear(), internalDate.getMonth() + 1, 0).getDate();
|
|
93
|
-
const startDay = new Date(internalDate.getFullYear(), internalDate.getMonth(), 1).getDay() - 1;
|
|
94
|
-
const calendarDays = new Array;
|
|
95
|
-
for (let i = 0; i < startDay; i++) {
|
|
96
|
-
calendarDays.push(_jsx("div", { className: classes.emptyDay }, `empty-${i}`));
|
|
97
|
-
}
|
|
98
|
-
for (let day = 1; day <= daysInMonth; day++) {
|
|
99
|
-
const currentDate = new Date(internalDate.getFullYear(), internalDate.getMonth(), day);
|
|
100
|
-
const isSelected = moment(currentDate).format("YYYY-MM-DD") === value;
|
|
101
|
-
calendarDays.push(_jsx("div", { className: `${classes.calendarDay}${isSelected ? ` ${classes.selected}` : ""}`, onClick: () => handleClickDay(day), children: day }, day));
|
|
102
|
-
}
|
|
103
|
-
return calendarDays;
|
|
104
|
-
};
|
|
105
|
-
return (_jsxs("div", { className: classes.datePicker, children: [_jsx("input", { type: "text", value: textDate, onChange: e => setTextDate(e.currentTarget.value), onFocus: () => {
|
|
106
|
-
setInternalDate(new Date(value));
|
|
107
|
-
setIsCalendarOpen(true);
|
|
108
|
-
}, 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" })] }))] }));
|
|
109
|
-
};
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import moment from "moment";
|
|
3
|
-
import { useEffect, useRef, useState } from "react";
|
|
4
|
-
import { CwButton } from "../../../../components/control/action/button/CwButton";
|
|
5
|
-
import { CwIcon } from "../../../../components/display/graphics/icon/CwIcon";
|
|
6
|
-
import { CwLabel } from "../../../../components/display/text/label/CwLabel";
|
|
7
|
-
import { CwAlign } from "../../../../components/layout/align/CwAlign";
|
|
8
|
-
/**
|
|
9
|
-
* Input for entering a string of text as a date
|
|
10
|
-
* @remarks
|
|
11
|
-
* ```txt
|
|
12
|
-
* CwIcon CwLabel (input type=text) CwButton
|
|
13
|
-
* ↑ ↑ ↑ ↑
|
|
14
|
-
* ╭──────────────────╮╭════╮
|
|
15
|
-
* % Birthdate │ yyyy.MM.dd [^] │║ Ok ║
|
|
16
|
-
* ╰──────────────────╯╰════╯
|
|
17
|
-
* ↓
|
|
18
|
-
* (input type=date)
|
|
19
|
-
* ```
|
|
20
|
-
* - ***_format***: Is "DD.MM.YYYY" by default
|
|
21
|
-
* @example
|
|
22
|
-
* ```tsx
|
|
23
|
-
* <CwInputDateText
|
|
24
|
-
* iconProps={{ id: "Birthdate" }}
|
|
25
|
-
* labelProps={{ children: "Name", width: "100px" }}
|
|
26
|
-
* buttonProps={{ children: "Ok", onClick:()=>{alert("happy happy joy joy")} }}
|
|
27
|
-
* />
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export function CwInputDateText(props) {
|
|
31
|
-
const displayFormat = "DD.MM.YYYY";
|
|
32
|
-
const internalFormat = "YYYY-MM-DD";
|
|
33
|
-
const { alignProps, buttonProps, iconProps, labelProps, dateFormat, value, size, onChange, name, required, tabIndex, disabled, readOnly, ...inputProps } = props;
|
|
34
|
-
const format = dateFormat ?? displayFormat;
|
|
35
|
-
const width = size ?? 12;
|
|
36
|
-
const formattedDate = (date, inFormat, outFormat) => {
|
|
37
|
-
if (moment(date, inFormat, true).isValid()) {
|
|
38
|
-
return moment(date, inFormat).format(outFormat);
|
|
39
|
-
}
|
|
40
|
-
else
|
|
41
|
-
return "";
|
|
42
|
-
};
|
|
43
|
-
const [date, setDate] = useState("");
|
|
44
|
-
const [displayedDate, setDisplayedDate] = useState("");
|
|
45
|
-
const dateInputRef = useRef(null);
|
|
46
|
-
const textInputRef = useRef(null);
|
|
47
|
-
const updateDateValidity = () => {
|
|
48
|
-
if (dateInputRef?.current && textInputRef?.current) {
|
|
49
|
-
dateInputRef.current.required = true;
|
|
50
|
-
const isDateValid = required
|
|
51
|
-
? dateInputRef.current.checkValidity()
|
|
52
|
-
: dateInputRef.current.checkValidity() || textInputRef.current.value === "";
|
|
53
|
-
textInputRef.current.setCustomValidity(isDateValid ? "" : "Invalid date");
|
|
54
|
-
dateInputRef.current.required = required !== undefined && required === true;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const onChangeInputText = (e) => {
|
|
58
|
-
const newDate = e.target.value;
|
|
59
|
-
setDisplayedDate(newDate);
|
|
60
|
-
if (moment(newDate, format, true).isValid()) {
|
|
61
|
-
setDate(moment(newDate, format).format(internalFormat));
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
setDate("");
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
const onChangeInputDate = (e) => {
|
|
68
|
-
const newDate = e.target.value;
|
|
69
|
-
setDate(newDate);
|
|
70
|
-
if (moment(newDate, internalFormat, true).isValid())
|
|
71
|
-
setDisplayedDate(moment(newDate, internalFormat).format(format));
|
|
72
|
-
else
|
|
73
|
-
setDisplayedDate("");
|
|
74
|
-
};
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
updateDateValidity();
|
|
77
|
-
});
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
if (value) {
|
|
80
|
-
setDate(formattedDate(value.toString(), internalFormat, internalFormat));
|
|
81
|
-
setDisplayedDate(formattedDate(value.toString(), internalFormat, displayFormat));
|
|
82
|
-
}
|
|
83
|
-
}, [value]);
|
|
84
|
-
useEffect(() => {
|
|
85
|
-
if (date) {
|
|
86
|
-
onChange?.({ target: { value: date, name: name } });
|
|
87
|
-
}
|
|
88
|
-
}, [date]);
|
|
89
|
-
return (_jsx("div", { className: "cw-input-date-text", children: _jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (_jsxs(CwLabel, { ...labelProps, children: [iconProps && _jsx(CwIcon, { ...iconProps }), labelProps.text] })), _jsxs("div", { children: [_jsx("input", { type: "text", disabled: disabled, maxLength: 10, onChange: onChangeInputText, pattern: "^$ --|[.0-9\\/\\-]{10}", placeholder: format.toLowerCase(), readOnly: readOnly, ref: textInputRef, required: required, size: width, tabIndex: tabIndex, value: displayedDate }), _jsxs("span", { children: [_jsx(CwIcon, { iconId: "calendar" }), _jsx("input", { type: "date", disabled: disabled, onChange: onChangeInputDate, readOnly: readOnly, ref: dateInputRef, tabIndex: -1, value: date, ...inputProps })] })] }), buttonProps && _jsx(CwButton, { ...buttonProps })] }) }));
|
|
90
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CwButton } from "../../../../components/control/action/button/CwButton";
|
|
3
|
-
import { CwIcon } from "../../../../components/display/graphics/icon/CwIcon";
|
|
4
|
-
import { CwLabel } from "../../../../components/display/text/label/CwLabel";
|
|
5
|
-
import { CwAlign } from "../../../../components/layout/align/CwAlign";
|
|
6
|
-
/**
|
|
7
|
-
* Input for entering a string of text.
|
|
8
|
-
* @remarks
|
|
9
|
-
* ```txt
|
|
10
|
-
* CwIcon CwLabel input type=date CwButton
|
|
11
|
-
* ↑ ↑ ↑ ↑
|
|
12
|
-
* ╭────────────────────╮╭════╮
|
|
13
|
-
* ⌂ Birthdate │ 0000 / 00 / 00 │║ Ok ║
|
|
14
|
-
* ╰────────────────────╯╰════╯
|
|
15
|
-
* ```
|
|
16
|
-
* @example
|
|
17
|
-
* ```tsx
|
|
18
|
-
* <CwInputDate
|
|
19
|
-
* iconProps={{ id: "Birthdate" }}
|
|
20
|
-
* labelProps={{ children: "Name", width: "100px" }}
|
|
21
|
-
* buttonProps={{ children: "Ok", onClick:()=>{alert("happy happy joy joy")} }}
|
|
22
|
-
* />
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export function CwInputDatetime(props) {
|
|
26
|
-
const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
|
|
27
|
-
inputProps.max = inputProps.max ?? "9999-01-01";
|
|
28
|
-
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: "datetime-local", ...inputProps }), buttonProps && _jsx(CwButton, { ...buttonProps })] }) }));
|
|
29
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CwButton } from "../../../../components/control/action/button/CwButton";
|
|
3
|
-
import { CwIcon } from "../../../../components/display/graphics/icon/CwIcon";
|
|
4
|
-
import { CwLabel } from "../../../../components/display/text/label/CwLabel";
|
|
5
|
-
import { CwAlign } from "../../../../components/layout/align/CwAlign";
|
|
6
|
-
/**
|
|
7
|
-
* Input for entering a string of number.
|
|
8
|
-
* @remarks
|
|
9
|
-
* ```txt
|
|
10
|
-
* CwIcon CwLabel CwSelect CwButton
|
|
11
|
-
* ↑ ↑ ↑ ↑
|
|
12
|
-
* ╭────────────────────╮╭════╮
|
|
13
|
-
* ⌂ Address ││ 2 │║ Ok ║
|
|
14
|
-
* ╰────────────────────╯╰════╯
|
|
15
|
-
* ```
|
|
16
|
-
* @example
|
|
17
|
-
* ```tsx
|
|
18
|
-
* <CwDigit
|
|
19
|
-
* iconProps={{ id: "home" }}
|
|
20
|
-
* labelProps={{ children: "Name", width: "100px" }}
|
|
21
|
-
* buttonProps={{ children: "Ok", onclick:()=>{alert("hi")} }}
|
|
22
|
-
* />
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export function CwDigit(props) {
|
|
26
|
-
const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
|
|
27
|
-
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 })] }) }));
|
|
28
|
-
}
|