@cwellt_software/cwellt-reactjs-lib 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (714) hide show
  1. package/dist/content/icons/new-cw-icons/NewCwIcons.html +14 -6
  2. package/dist/content/icons/new-cw-icons/NewCwIcons.json +195 -1
  3. package/dist/content/icons/new-cw-icons/css/new-cw-icons.css +783 -198
  4. package/dist/content/icons/new-cw-icons/fonts/NewCwIcons.woff +0 -0
  5. package/dist/index.cjs.js +1459 -625
  6. package/dist/index.css +2 -2
  7. package/dist/index.d.ts +366 -106
  8. package/dist/index.es.js +1453 -627
  9. package/dist/playground/main.d.ts +4 -0
  10. package/dist/playground/main.d.ts.map +1 -0
  11. package/dist/src/common/classes/CwSelectList.js +12 -0
  12. package/dist/src/common/classes/CwSelectListItems.js +14 -0
  13. package/dist/src/common/functions/collections.js +18 -0
  14. package/dist/src/common/functions/colorManipulation.js +76 -0
  15. package/dist/src/common/functions/dsl/UiEventDSL.js +20 -0
  16. package/dist/src/common/functions/useSingleAndDoubleClicks.js +28 -0
  17. package/dist/src/common/interfaces/CwSelectListProps.js +1 -0
  18. package/dist/src/components/control/action/button/CwButton.js +13 -0
  19. package/dist/src/components/control/action/buttons/CwButtons.js +188 -0
  20. package/dist/src/components/control/action/contextmenu/CwContextMenu.js +43 -0
  21. package/dist/src/components/control/action/contextual-menu/CwContextualMenu.js +55 -0
  22. package/dist/src/components/control/action/search/CwSearch.d.ts +1 -1
  23. package/dist/src/components/control/action/search/CwSearch.d.ts.map +1 -1
  24. package/dist/src/components/control/action/search/CwSearch.js +67 -0
  25. package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.js +11 -0
  26. package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts +1 -1
  27. package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts.map +1 -1
  28. package/dist/src/components/control/choice/checkbox/CwCheckbox.js +15 -0
  29. package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.js +99 -0
  30. package/dist/src/components/control/choice/dropdown/CwDropdown.js +27 -0
  31. package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +1 -1
  32. package/dist/src/components/control/choice/dropdown/CwDropdownContainer.js +30 -0
  33. package/dist/src/components/control/choice/dropdown/CwDropdownFilter.d.ts +10 -20
  34. package/dist/src/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +1 -1
  35. package/dist/src/components/control/choice/dropdown/CwDropdownFilter.js +10 -0
  36. package/dist/src/components/control/choice/multi-filter/CwMultiFilter.js +298 -0
  37. package/dist/src/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.js +17 -0
  38. package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts +1 -0
  39. package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts.map +1 -1
  40. package/dist/src/components/control/choice/multiselect/CwHeadFilter.js +80 -0
  41. package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts.map +1 -1
  42. package/dist/src/components/control/choice/multiselect/CwMultiselect.js +393 -0
  43. package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts +0 -1
  44. package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts.map +1 -1
  45. package/dist/src/components/control/choice/multiselect/CwOptionList.js +36 -0
  46. package/dist/src/components/control/choice/option/CwOption.js +16 -0
  47. package/dist/src/components/control/choice/select/CwSelect.js +36 -0
  48. package/dist/src/components/control/choice/toggle/CwToggle.d.ts +8 -21
  49. package/dist/src/components/control/choice/toggle/CwToggle.d.ts.map +1 -1
  50. package/dist/src/components/control/choice/toggle/CwToggle.js +9 -0
  51. package/dist/src/components/control/choice/tree-view/CwTreeView.d.ts +15 -0
  52. package/dist/src/components/control/choice/tree-view/CwTreeView.d.ts.map +1 -0
  53. package/dist/src/components/control/input/any/CwInput.js +16 -0
  54. package/dist/src/components/control/input/color/CwColorPicker.d.ts +17 -0
  55. package/dist/src/components/control/input/color/CwColorPicker.d.ts.map +1 -0
  56. package/dist/src/components/control/input/color/CwColorPicker.js +210 -0
  57. package/dist/src/components/control/input/color/CwInputColor.d.ts +12 -0
  58. package/dist/src/components/control/input/color/CwInputColor.d.ts.map +1 -0
  59. package/dist/src/components/control/input/color/CwInputColor.js +142 -0
  60. package/dist/src/components/control/input/date/CwInputDate.js +29 -0
  61. package/dist/src/components/control/input/date-picker/CwInputDatePicker.js +109 -0
  62. package/dist/src/components/control/input/date-text/CwInputDateText.js +90 -0
  63. package/dist/src/components/control/input/datetime/CwInputDatetime.js +29 -0
  64. package/dist/src/components/control/input/digit/CwDigit.js +28 -0
  65. package/dist/src/components/control/input/file/CwFileUpload.js +52 -0
  66. package/dist/src/components/control/input/file/CwFileUploadMultiple.js +148 -0
  67. package/dist/src/components/control/input/image/CwInputImage.js +52 -0
  68. package/dist/src/components/control/input/image-area/CwImageArea.js +113 -0
  69. package/dist/src/components/control/input/number/CwInputNumber.js +11 -0
  70. package/dist/src/components/control/input/phone/CwInputPhone.js +24 -0
  71. package/dist/src/components/control/input/text/CwInputText.d.ts +1 -1
  72. package/dist/src/components/control/input/text/CwInputText.d.ts.map +1 -1
  73. package/dist/src/components/control/input/text/CwInputText.js +31 -0
  74. package/dist/src/components/control/input/text-area/CwTextArea.js +9 -0
  75. package/dist/src/components/control/input/time/CwTime.js +29 -0
  76. package/dist/src/components/control/input/weekday/CwWeekdaySelector.js +143 -0
  77. package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts +7 -24
  78. package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts.map +1 -1
  79. package/dist/src/components/custom/find-airport/CwFindAirportComp.js +240 -0
  80. package/dist/src/components/custom/scheduler/CwSchedulerComp.js +211 -0
  81. package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +1 -1
  82. package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.js +269 -0
  83. package/dist/src/components/custom/scheduler/components/EventRender.js +142 -0
  84. package/dist/src/components/custom/scheduler/components/ResourceListRender.js +12 -0
  85. package/dist/src/components/custom/scheduler/components/ResourceRender.js +26 -0
  86. package/dist/src/components/custom/scheduler/components/day_headers/DayHeader.js +13 -0
  87. package/dist/src/components/custom/scheduler/components/day_headers/MonthHeader.js +12 -0
  88. package/dist/src/components/custom/scheduler/components/day_headers/MyDaysHeader.js +62 -0
  89. package/dist/src/components/custom/scheduler/components/day_headers/WeekHeader.js +13 -0
  90. package/dist/src/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.js +24 -0
  91. package/dist/src/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.js +17 -0
  92. package/dist/src/components/custom/scheduler/components/scheduler_header/SchedulerHeader.js +26 -0
  93. package/dist/src/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.js +23 -0
  94. package/dist/src/components/custom/scheduler/components/time_headers/TimeHeader.js +31 -0
  95. package/dist/src/components/custom/scheduler/components/time_headers/TimeHeaderRow.js +16 -0
  96. package/dist/src/components/custom/scheduler/components/time_line/TimeLine.js +12 -0
  97. package/dist/src/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.js +5 -0
  98. package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDates.js +15 -0
  99. package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.js +5 -0
  100. package/dist/src/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.js +43 -0
  101. package/dist/src/components/custom/scheduler/logic/dates/getMonthHeaderData.js +35 -0
  102. package/dist/src/components/custom/scheduler/logic/dates/getUtcToday.js +6 -0
  103. package/dist/src/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.js +20 -0
  104. package/dist/src/components/custom/scheduler/logic/dates/listOfDatesToWeeks.js +55 -0
  105. package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisionType.js +13 -0
  106. package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisions.js +16 -0
  107. package/dist/src/components/custom/scheduler/logic/filtering/filterEvents.js +33 -0
  108. package/dist/src/components/custom/scheduler/logic/filtering/filterResources.js +14 -0
  109. package/dist/src/components/custom/scheduler/logic/filtering/hasSameProperties.js +10 -0
  110. package/dist/src/components/custom/scheduler/logic/onDrop/OnDrop.js +45 -0
  111. package/dist/src/components/custom/scheduler/logic/pixels/getHeightLineScheduler.js +14 -0
  112. package/dist/src/components/custom/scheduler/logic/pixels/getPixelsForEvent.js +32 -0
  113. package/dist/src/components/custom/scheduler/logic/pixels/heightScheduler.js +14 -0
  114. package/dist/src/components/custom/scheduler/logic/pixels/heightSchedulerPinned.js +9 -0
  115. package/dist/src/components/custom/scheduler/logic/state_handle/doubleClickOnResource.js +5 -0
  116. package/dist/src/components/custom/scheduler/logic/state_handle/handleResourceChange.js +11 -0
  117. package/dist/src/components/custom/scheduler/logic/state_handle/onDragOver.js +9 -0
  118. package/dist/src/components/custom/scheduler/logic/state_handle/onDropEventToResource.js +3 -0
  119. package/dist/src/components/custom/scheduler/logic/strings/compareStrings.js +7 -0
  120. package/dist/src/components/custom/scheduler/logic/strings/getGUID.js +7 -0
  121. package/dist/src/components/custom/scheduler/logic/ui/checkIfSlotAvailable.js +8 -0
  122. package/dist/src/components/custom/scheduler/logic/ui/getEventsOfResource.js +45 -0
  123. package/dist/src/components/custom/scheduler/logic/ui/getTimeHeaders.js +35 -0
  124. package/dist/src/components/custom/scheduler/logic/ui/isAllowedToMove.js +19 -0
  125. package/dist/src/components/custom/scheduler/logic/ui/updateResourceVisibility.js +15 -0
  126. package/dist/src/components/custom/scheduler/state/CblDragAndDrop.js +18 -0
  127. package/dist/src/components/custom/scheduler/state/CwSchedulerProps.js +1 -0
  128. package/dist/src/components/custom/scheduler/state/Resource.js +18 -0
  129. package/dist/src/components/custom/scheduler/state/State.js +1 -0
  130. package/dist/src/components/custom/scheduler/state/cblEvent.js +28 -0
  131. package/dist/src/components/custom/scheduler/state/cblEventCompProps.js +1 -0
  132. package/dist/src/components/custom/scheduler/state/resourceCompProps2.js +1 -0
  133. package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -1
  134. package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.js +123 -0
  135. package/dist/src/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.js +118 -0
  136. package/dist/src/components/custom/scheduler-new/presentation/SchedulerPresenter.js +166 -0
  137. package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderDivision.js +26 -0
  138. package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderTitle.js +8 -0
  139. package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.js +86 -0
  140. package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.js +1 -0
  141. package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.js +60 -0
  142. package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.js +24 -0
  143. package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +1 -1
  144. package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.js +150 -0
  145. package/dist/src/components/custom/scheduler-new/presentation/components/row/EventSideDrag.js +11 -0
  146. package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +1 -1
  147. package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.js +176 -0
  148. package/dist/src/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.js +8 -0
  149. package/dist/src/components/custom/scheduler-new/presentation/components/timeline/TimeLine.js +39 -0
  150. package/dist/src/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.js +8 -0
  151. package/dist/src/components/custom/scheduler-new/presentation/helpers.js +43 -0
  152. package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +1 -1
  153. package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.js +24 -0
  154. package/dist/src/components/custom/scheduler-new/presentation/logic/dateFromPercentage.js +7 -0
  155. package/dist/src/components/custom/scheduler-new/presentation/logic/eventIsVisible.js +7 -0
  156. package/dist/src/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.js +113 -0
  157. package/dist/src/components/custom/scheduler-new/presentation/logic/getDivisions.js +21 -0
  158. package/dist/src/components/custom/scheduler-new/presentation/logic/getEventSizes.js +30 -0
  159. package/dist/src/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.js +13 -0
  160. package/dist/src/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.js +7 -0
  161. package/dist/src/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.js +32 -0
  162. package/dist/src/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.js +12 -0
  163. package/dist/src/components/custom/scheduler-new/presentation/state/ui/SchedulerState.js +1 -0
  164. package/dist/src/components/custom/scheduler-new/presentation/state/ui/WeekRange.js +1 -0
  165. package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.js +267 -0
  166. package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +1 -1
  167. package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.js +269 -0
  168. package/dist/src/components/custom/scheduler-temporal/components/EventRender.js +142 -0
  169. package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.js +12 -0
  170. package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.js +26 -0
  171. package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.js +13 -0
  172. package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.js +12 -0
  173. package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.js +62 -0
  174. package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.js +13 -0
  175. package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.js +22 -0
  176. package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.js +17 -0
  177. package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.js +26 -0
  178. package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.js +23 -0
  179. package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.js +31 -0
  180. package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.js +16 -0
  181. package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.js +12 -0
  182. package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.js +5 -0
  183. package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.js +15 -0
  184. package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.js +5 -0
  185. package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.js +43 -0
  186. package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.js +35 -0
  187. package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.js +6 -0
  188. package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.js +20 -0
  189. package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.js +55 -0
  190. package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.js +13 -0
  191. package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.js +16 -0
  192. package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.js +10 -0
  193. package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.js +34 -0
  194. package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.js +14 -0
  195. package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.js +10 -0
  196. package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.js +36 -0
  197. package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.js +14 -0
  198. package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.js +32 -0
  199. package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.js +14 -0
  200. package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.js +9 -0
  201. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.js +5 -0
  202. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.js +178 -0
  203. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.js +11 -0
  204. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.js +9 -0
  205. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.js +3 -0
  206. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.js +3 -0
  207. package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.js +7 -0
  208. package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.js +7 -0
  209. package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.js +9 -0
  210. package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.js +92 -0
  211. package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.js +242 -0
  212. package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.js +35 -0
  213. package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.js +19 -0
  214. package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.js +241 -0
  215. package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.js +15 -0
  216. package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.js +18 -0
  217. package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.js +1 -0
  218. package/dist/src/components/custom/scheduler-temporal/state/Resource.js +18 -0
  219. package/dist/src/components/custom/scheduler-temporal/state/State.js +1 -0
  220. package/dist/src/components/custom/scheduler-temporal/state/cblEvent.js +28 -0
  221. package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.js +1 -0
  222. package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.js +1 -0
  223. package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -1
  224. package/dist/src/components/custom/super-scheduler/PinRowHeader.js +53 -0
  225. package/dist/src/components/custom/super-scheduler/SuperScheduler.js +23 -0
  226. package/dist/src/components/custom/super-scheduler/SuperSchedulerEvents.js +15 -0
  227. package/dist/src/components/custom/super-scheduler/SuperSchedulerPresenter.js +45 -0
  228. package/dist/src/components/display/data/accordion/CwAccordionContainer.js +20 -0
  229. package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.js +138 -0
  230. package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
  231. package/dist/src/components/display/data/table/CwTable.js +203 -0
  232. package/dist/src/components/display/graphics/icon/CwIcon.d.ts +5 -1
  233. package/dist/src/components/display/graphics/icon/CwIcon.d.ts.map +1 -1
  234. package/dist/src/components/display/graphics/icon/CwIcon.js +23 -0
  235. package/dist/src/components/display/graphics/image-gallery/CwImageGallery.d.ts +30 -0
  236. package/dist/src/components/display/graphics/image-gallery/CwImageGallery.d.ts.map +1 -0
  237. package/dist/src/components/display/graphics/image-zoom/CwImageZoom.d.ts +21 -0
  238. package/dist/src/components/display/graphics/image-zoom/CwImageZoom.d.ts.map +1 -0
  239. package/dist/src/components/display/graphics/loading/CwLoading.d.ts.map +1 -1
  240. package/dist/src/components/display/graphics/loading/CwLoading.js +27 -0
  241. package/dist/src/components/display/graphics/loading-small/CwLoadingSmall.js +20 -0
  242. package/dist/src/components/display/text/heading/CwHeadingMain.js +5 -0
  243. package/dist/src/components/display/text/heading/CwHeadingSecond.js +5 -0
  244. package/dist/src/components/display/text/label/CwLabel.js +13 -0
  245. package/dist/src/components/display/text/message/CwMessage.d.ts +49 -2
  246. package/dist/src/components/display/text/message/CwMessage.d.ts.map +1 -1
  247. package/dist/src/components/display/text/message/CwMessage.js +75 -0
  248. package/dist/src/components/display/text/note/CwNote.d.ts +48 -0
  249. package/dist/src/components/display/text/note/CwNote.d.ts.map +1 -0
  250. package/dist/src/components/display/text/note/CwNote.js +78 -0
  251. package/dist/src/components/display/text/tag/CwChip.d.ts +1 -1
  252. package/dist/src/components/display/text/tag/CwChip.d.ts.map +1 -1
  253. package/dist/src/components/display/text/tag/CwChip.js +57 -0
  254. package/dist/src/components/display/text/tag/CwTag.d.ts +0 -1
  255. package/dist/src/components/display/text/tag/CwTag.d.ts.map +1 -1
  256. package/dist/src/components/display/text/tag/CwTag.js +21 -0
  257. package/dist/src/components/display/text/tooltip/CwTooltip.js +4 -0
  258. package/dist/src/components/layout/align/CwAlign.js +54 -0
  259. package/dist/src/components/layout/card/CwCard.js +55 -0
  260. package/dist/src/components/layout/card/CwCardList.d.ts +3 -5
  261. package/dist/src/components/layout/card/CwCardList.d.ts.map +1 -1
  262. package/dist/src/components/layout/card/CwCardList.js +38 -0
  263. package/dist/src/components/layout/confirmation-popup/CwConfirmationPopup.d.ts +18 -0
  264. package/dist/src/components/layout/confirmation-popup/CwConfirmationPopup.d.ts.map +1 -0
  265. package/dist/src/components/layout/dialog/CwDialog.d.ts +3 -1
  266. package/dist/src/components/layout/dialog/CwDialog.d.ts.map +1 -1
  267. package/dist/src/components/layout/dialog/CwDialog.js +255 -0
  268. package/dist/src/components/layout/dialog/CwDialogManager.js +44 -0
  269. package/dist/src/components/layout/list/details/CwExpandable.js +28 -0
  270. package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts +1 -0
  271. package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts.map +1 -1
  272. package/dist/src/components/layout/list/key-value/CwKeyValueList.js +23 -0
  273. package/dist/src/components/layout/list/sortable/CwSortableList.d.ts +60 -0
  274. package/dist/src/components/layout/list/sortable/CwSortableList.d.ts.map +1 -0
  275. package/dist/src/components/layout/list/sortable/CwSortableList.js +73 -0
  276. package/dist/src/components/layout/list/sortable/useSortableList.d.ts +58 -0
  277. package/dist/src/components/layout/list/sortable/useSortableList.d.ts.map +1 -0
  278. package/dist/src/components/layout/list/sortable/useSortableList.js +53 -0
  279. package/dist/src/components/layout/modal/CwModalReportFunctional.js +23 -0
  280. package/dist/src/components/layout/modal/hover/CwModalHover.js +61 -0
  281. package/dist/src/components/layout/modal/legacy/cw_modal.d.ts.map +1 -1
  282. package/dist/src/components/layout/modal/legacy/cw_modal.js +44 -0
  283. package/dist/src/components/layout/modal/legacy/cw_modal_confirm.js +39 -0
  284. package/dist/src/components/layout/modal/legacy/cw_modal_iframe.js +44 -0
  285. package/dist/src/components/layout/modal/legacy/cw_modal_report.js +26 -0
  286. package/dist/{components/layout/table/grouped/CwTableGrouped.d.ts → src/components/layout/table/grouped/CwTableGrouped.js} +13 -23
  287. package/dist/src/components/layout/tabs/CwTabs.d.ts +1 -2
  288. package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
  289. package/dist/src/components/layout/tabs/CwTabs.js +53 -0
  290. package/dist/src/dev/index.d.ts +5 -0
  291. package/dist/src/dev/index.d.ts.map +1 -0
  292. package/dist/src/dev/palette.d.ts +4 -0
  293. package/dist/src/dev/palette.d.ts.map +1 -0
  294. package/dist/src/dev/previews.d.ts +3 -0
  295. package/dist/src/dev/previews.d.ts.map +1 -0
  296. package/dist/src/dev/useInitial.d.ts +3 -0
  297. package/dist/src/dev/useInitial.d.ts.map +1 -0
  298. package/dist/src/index.d.ts +10 -2
  299. package/dist/src/index.d.ts.map +1 -1
  300. package/dist/src/index.js +187 -0
  301. package/dist/test/components/custom/new-scheduler/presentation/logic/getDefaultDivisions.test.js +48 -0
  302. package/dist/test/components/custom/new-scheduler/presentation/logic/getEventSizes.test.d.ts +2 -0
  303. package/dist/test/components/custom/new-scheduler/presentation/logic/getEventSizes.test.d.ts.map +1 -0
  304. package/dist/test/components/custom/new-scheduler/presentation/logic/hoursBetween.test.js +15 -0
  305. package/dist/test/components/custom/new-scheduler/presentation/logic/monthDivisions.test.js +42 -0
  306. package/dist/test/components/custom/new-scheduler/presentation/logic/weekendCalc.test.js +30 -0
  307. package/dist/test/components/custom/scheduler/addMinutesToDateFromPx.test.js +43 -0
  308. package/dist/test/components/custom/scheduler/checkIfSlotAvailable.test.js +30 -0
  309. package/dist/test/components/custom/scheduler/daysBetweenTwoDates.test.js +61 -0
  310. package/dist/test/components/custom/scheduler/daysBetweenTwoDatesWithoutCeilForEvent.test.js +27 -0
  311. package/dist/test/components/custom/scheduler/getGUID.test.js +30 -0
  312. package/dist/test/components/custom/scheduler/getPixelsForEvent.test.js +38 -0
  313. package/dist/test/components/custom/scheduler/getTimeHeaders.test.js +35 -0
  314. package/dist/test/components/custom/scheduler/hasSameProperties.test.js +51 -0
  315. package/dist/test/components/custom/scheduler/isAllowedToMove.test.js +28 -0
  316. package/dist/test/components/custom/scheduler/listOfDatesToWeeks.test.js +72 -0
  317. package/dist/test/jest.setup.js +1 -0
  318. package/package.json +11 -4
  319. package/dist/common/classes/CwSelectList.d.ts +0 -8
  320. package/dist/common/classes/CwSelectList.d.ts.map +0 -1
  321. package/dist/common/classes/CwSelectListItems.d.ts +0 -9
  322. package/dist/common/classes/CwSelectListItems.d.ts.map +0 -1
  323. package/dist/common/functions/collections.d.ts +0 -15
  324. package/dist/common/functions/collections.d.ts.map +0 -1
  325. package/dist/common/functions/colorManipulation.d.ts +0 -6
  326. package/dist/common/functions/colorManipulation.d.ts.map +0 -1
  327. package/dist/common/functions/dsl/UiEventDSL.d.ts +0 -9
  328. package/dist/common/functions/dsl/UiEventDSL.d.ts.map +0 -1
  329. package/dist/common/functions/useSingleAndDoubleClicks.d.ts +0 -7
  330. package/dist/common/functions/useSingleAndDoubleClicks.d.ts.map +0 -1
  331. package/dist/common/interfaces/CwSelectListProps.d.ts +0 -9
  332. package/dist/common/interfaces/CwSelectListProps.d.ts.map +0 -1
  333. package/dist/components/control/action/button/CwButton.d.ts +0 -26
  334. package/dist/components/control/action/button/CwButton.d.ts.map +0 -1
  335. package/dist/components/control/action/buttons/CwButtons.d.ts +0 -59
  336. package/dist/components/control/action/buttons/CwButtons.d.ts.map +0 -1
  337. package/dist/components/control/action/contextmenu/CwContextMenu.d.ts +0 -23
  338. package/dist/components/control/action/contextmenu/CwContextMenu.d.ts.map +0 -1
  339. package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts +0 -29
  340. package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts.map +0 -1
  341. package/dist/components/control/action/search/CwSearch.d.ts +0 -16
  342. package/dist/components/control/action/search/CwSearch.d.ts.map +0 -1
  343. package/dist/components/control/choice/checkbox/CwCheckbox.d.ts +0 -17
  344. package/dist/components/control/choice/checkbox/CwCheckbox.d.ts.map +0 -1
  345. package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts +0 -24
  346. package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts.map +0 -1
  347. package/dist/components/control/choice/dropdown/CwDropdown.d.ts +0 -19
  348. package/dist/components/control/choice/dropdown/CwDropdown.d.ts.map +0 -1
  349. package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts +0 -17
  350. package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +0 -1
  351. package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts +0 -28
  352. package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +0 -1
  353. package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts +0 -21
  354. package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts.map +0 -1
  355. package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts +0 -158
  356. package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +0 -1
  357. package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts +0 -33
  358. package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts.map +0 -1
  359. package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts +0 -16
  360. package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts.map +0 -1
  361. package/dist/components/control/choice/multiselect/CwMultiselect.d.ts +0 -13
  362. package/dist/components/control/choice/multiselect/CwMultiselect.d.ts.map +0 -1
  363. package/dist/components/control/choice/multiselect/CwOptionList.d.ts +0 -15
  364. package/dist/components/control/choice/multiselect/CwOptionList.d.ts.map +0 -1
  365. package/dist/components/control/choice/option/CwOption.d.ts +0 -17
  366. package/dist/components/control/choice/option/CwOption.d.ts.map +0 -1
  367. package/dist/components/control/choice/select/CwSelect.d.ts +0 -48
  368. package/dist/components/control/choice/select/CwSelect.d.ts.map +0 -1
  369. package/dist/components/control/choice/toggle/CwToggle.d.ts +0 -28
  370. package/dist/components/control/choice/toggle/CwToggle.d.ts.map +0 -1
  371. package/dist/components/control/input/any/CwInput.d.ts +0 -17
  372. package/dist/components/control/input/any/CwInput.d.ts.map +0 -1
  373. package/dist/components/control/input/date/CwInputDate.d.ts +0 -40
  374. package/dist/components/control/input/date/CwInputDate.d.ts.map +0 -1
  375. package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts +0 -7
  376. package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts.map +0 -1
  377. package/dist/components/control/input/date-text/CwInputDateText.d.ts +0 -38
  378. package/dist/components/control/input/date-text/CwInputDateText.d.ts.map +0 -1
  379. package/dist/components/control/input/datetime/CwInputDatetime.d.ts +0 -40
  380. package/dist/components/control/input/datetime/CwInputDatetime.d.ts.map +0 -1
  381. package/dist/components/control/input/digit/CwDigit.d.ts +0 -40
  382. package/dist/components/control/input/digit/CwDigit.d.ts.map +0 -1
  383. package/dist/components/control/input/file/CwFileUpload.d.ts +0 -18
  384. package/dist/components/control/input/file/CwFileUpload.d.ts.map +0 -1
  385. package/dist/components/control/input/file/CwFileUploadMultiple.d.ts +0 -15
  386. package/dist/components/control/input/file/CwFileUploadMultiple.d.ts.map +0 -1
  387. package/dist/components/control/input/image/CwInputImage.d.ts +0 -7
  388. package/dist/components/control/input/image/CwInputImage.d.ts.map +0 -1
  389. package/dist/components/control/input/image-area/CwImageArea.d.ts +0 -53
  390. package/dist/components/control/input/image-area/CwImageArea.d.ts.map +0 -1
  391. package/dist/components/control/input/number/CwInputNumber.d.ts +0 -20
  392. package/dist/components/control/input/number/CwInputNumber.d.ts.map +0 -1
  393. package/dist/components/control/input/phone/CwInputPhone.d.ts +0 -36
  394. package/dist/components/control/input/phone/CwInputPhone.d.ts.map +0 -1
  395. package/dist/components/control/input/text/CwInputText.d.ts +0 -40
  396. package/dist/components/control/input/text/CwInputText.d.ts.map +0 -1
  397. package/dist/components/control/input/text-area/CwTextArea.d.ts +0 -24
  398. package/dist/components/control/input/text-area/CwTextArea.d.ts.map +0 -1
  399. package/dist/components/control/input/time/CwTime.d.ts +0 -40
  400. package/dist/components/control/input/time/CwTime.d.ts.map +0 -1
  401. package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts +0 -53
  402. package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts.map +0 -1
  403. package/dist/components/custom/find-airport/CwFindAirportComp.d.ts +0 -35
  404. package/dist/components/custom/find-airport/CwFindAirportComp.d.ts.map +0 -1
  405. package/dist/components/custom/scheduler/CwSchedulerComp.d.ts +0 -19
  406. package/dist/components/custom/scheduler/CwSchedulerComp.d.ts.map +0 -1
  407. package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts +0 -86
  408. package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +0 -1
  409. package/dist/components/custom/scheduler/components/EventRender.d.ts +0 -10
  410. package/dist/components/custom/scheduler/components/EventRender.d.ts.map +0 -1
  411. package/dist/components/custom/scheduler/components/ResourceListRender.d.ts +0 -20
  412. package/dist/components/custom/scheduler/components/ResourceListRender.d.ts.map +0 -1
  413. package/dist/components/custom/scheduler/components/ResourceRender.d.ts +0 -14
  414. package/dist/components/custom/scheduler/components/ResourceRender.d.ts.map +0 -1
  415. package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts +0 -11
  416. package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts.map +0 -1
  417. package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts +0 -11
  418. package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts.map +0 -1
  419. package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts +0 -13
  420. package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts.map +0 -1
  421. package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts +0 -11
  422. package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts.map +0 -1
  423. package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts +0 -14
  424. package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts.map +0 -1
  425. package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts +0 -23
  426. package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts.map +0 -1
  427. package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts +0 -8
  428. package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts.map +0 -1
  429. package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts +0 -12
  430. package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +0 -1
  431. package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts +0 -12
  432. package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts.map +0 -1
  433. package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts +0 -10
  434. package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts.map +0 -1
  435. package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts +0 -12
  436. package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts.map +0 -1
  437. package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts +0 -2
  438. package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts.map +0 -1
  439. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts +0 -2
  440. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts.map +0 -1
  441. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +0 -2
  442. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +0 -1
  443. package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts +0 -7
  444. package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts.map +0 -1
  445. package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts +0 -10
  446. package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts.map +0 -1
  447. package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts +0 -2
  448. package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts.map +0 -1
  449. package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +0 -7
  450. package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +0 -1
  451. package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts +0 -8
  452. package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts.map +0 -1
  453. package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts +0 -2
  454. package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts.map +0 -1
  455. package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts +0 -2
  456. package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts.map +0 -1
  457. package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts +0 -3
  458. package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts.map +0 -1
  459. package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts +0 -3
  460. package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts.map +0 -1
  461. package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts +0 -13
  462. package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts.map +0 -1
  463. package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts +0 -17
  464. package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts.map +0 -1
  465. package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts +0 -3
  466. package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts.map +0 -1
  467. package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts +0 -4
  468. package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts.map +0 -1
  469. package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts +0 -2
  470. package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts.map +0 -1
  471. package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts +0 -5
  472. package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts.map +0 -1
  473. package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts +0 -2
  474. package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts.map +0 -1
  475. package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts +0 -2
  476. package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts.map +0 -1
  477. package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts +0 -3
  478. package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts.map +0 -1
  479. package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts +0 -4
  480. package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts.map +0 -1
  481. package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts +0 -2
  482. package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts.map +0 -1
  483. package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts +0 -3
  484. package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts.map +0 -1
  485. package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts +0 -11
  486. package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts.map +0 -1
  487. package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts +0 -43
  488. package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts.map +0 -1
  489. package/dist/components/custom/scheduler/state/Resource.d.ts +0 -14
  490. package/dist/components/custom/scheduler/state/Resource.d.ts.map +0 -1
  491. package/dist/components/custom/scheduler/state/State.d.ts +0 -19
  492. package/dist/components/custom/scheduler/state/State.d.ts.map +0 -1
  493. package/dist/components/custom/scheduler/state/cblEvent.d.ts +0 -18
  494. package/dist/components/custom/scheduler/state/cblEvent.d.ts.map +0 -1
  495. package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts +0 -7
  496. package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts.map +0 -1
  497. package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts +0 -6
  498. package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts.map +0 -1
  499. package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts +0 -29
  500. package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +0 -1
  501. package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts +0 -80
  502. package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts.map +0 -1
  503. package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts +0 -27
  504. package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts.map +0 -1
  505. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts +0 -19
  506. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts.map +0 -1
  507. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts +0 -10
  508. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts.map +0 -1
  509. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts +0 -5
  510. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts.map +0 -1
  511. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts +0 -17
  512. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts.map +0 -1
  513. package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +0 -8
  514. package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +0 -1
  515. package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts +0 -17
  516. package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +0 -1
  517. package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts +0 -34
  518. package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +0 -1
  519. package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts +0 -8
  520. package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts.map +0 -1
  521. package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts +0 -27
  522. package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +0 -1
  523. package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts +0 -10
  524. package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts.map +0 -1
  525. package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts +0 -15
  526. package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts.map +0 -1
  527. package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts +0 -11
  528. package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts.map +0 -1
  529. package/dist/components/custom/scheduler-new/presentation/helpers.d.ts +0 -19
  530. package/dist/components/custom/scheduler-new/presentation/helpers.d.ts.map +0 -1
  531. package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts +0 -4
  532. package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +0 -1
  533. package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts +0 -2
  534. package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts.map +0 -1
  535. package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts +0 -2
  536. package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts.map +0 -1
  537. package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts +0 -6
  538. package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts.map +0 -1
  539. package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts +0 -3
  540. package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts.map +0 -1
  541. package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts +0 -6
  542. package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts.map +0 -1
  543. package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts +0 -4
  544. package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts.map +0 -1
  545. package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts +0 -2
  546. package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts.map +0 -1
  547. package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts +0 -3
  548. package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts.map +0 -1
  549. package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts +0 -4
  550. package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts.map +0 -1
  551. package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts +0 -12
  552. package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts.map +0 -1
  553. package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts +0 -5
  554. package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts.map +0 -1
  555. package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts +0 -24
  556. package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts.map +0 -1
  557. package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts +0 -86
  558. package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +0 -1
  559. package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts +0 -10
  560. package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts.map +0 -1
  561. package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts +0 -20
  562. package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts.map +0 -1
  563. package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts +0 -14
  564. package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts.map +0 -1
  565. package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts +0 -11
  566. package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts.map +0 -1
  567. package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts +0 -11
  568. package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts.map +0 -1
  569. package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts +0 -13
  570. package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts.map +0 -1
  571. package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts +0 -11
  572. package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts.map +0 -1
  573. package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts +0 -14
  574. package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts.map +0 -1
  575. package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts +0 -23
  576. package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts.map +0 -1
  577. package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts +0 -8
  578. package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts.map +0 -1
  579. package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts +0 -12
  580. package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +0 -1
  581. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts +0 -12
  582. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts.map +0 -1
  583. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts +0 -10
  584. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts.map +0 -1
  585. package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts +0 -12
  586. package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts.map +0 -1
  587. package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts +0 -2
  588. package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts.map +0 -1
  589. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts +0 -2
  590. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts.map +0 -1
  591. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +0 -2
  592. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +0 -1
  593. package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts +0 -7
  594. package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts.map +0 -1
  595. package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts +0 -10
  596. package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts.map +0 -1
  597. package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts +0 -2
  598. package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts.map +0 -1
  599. package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +0 -7
  600. package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +0 -1
  601. package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts +0 -8
  602. package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts.map +0 -1
  603. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts +0 -2
  604. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts.map +0 -1
  605. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts +0 -2
  606. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts.map +0 -1
  607. package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +0 -15
  608. package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +0 -1
  609. package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts +0 -3
  610. package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts.map +0 -1
  611. package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts +0 -3
  612. package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts.map +0 -1
  613. package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts +0 -13
  614. package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts.map +0 -1
  615. package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +0 -17
  616. package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +0 -1
  617. package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +0 -3
  618. package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +0 -1
  619. package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts +0 -4
  620. package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts.map +0 -1
  621. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts +0 -2
  622. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts.map +0 -1
  623. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts +0 -5
  624. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts.map +0 -1
  625. package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts +0 -4
  626. package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts.map +0 -1
  627. package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts +0 -2
  628. package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts.map +0 -1
  629. package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts +0 -2
  630. package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts.map +0 -1
  631. package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +0 -3
  632. package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +0 -1
  633. package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts +0 -6
  634. package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts.map +0 -1
  635. package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts +0 -2
  636. package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts.map +0 -1
  637. package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts +0 -3
  638. package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts.map +0 -1
  639. package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts +0 -11
  640. package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts.map +0 -1
  641. package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts +0 -43
  642. package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts.map +0 -1
  643. package/dist/components/custom/scheduler-temporal/state/Resource.d.ts +0 -14
  644. package/dist/components/custom/scheduler-temporal/state/Resource.d.ts.map +0 -1
  645. package/dist/components/custom/scheduler-temporal/state/State.d.ts +0 -25
  646. package/dist/components/custom/scheduler-temporal/state/State.d.ts.map +0 -1
  647. package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts +0 -18
  648. package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts.map +0 -1
  649. package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts +0 -7
  650. package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts.map +0 -1
  651. package/dist/components/custom/super-scheduler/PinRowHeader.d.ts +0 -15
  652. package/dist/components/custom/super-scheduler/PinRowHeader.d.ts.map +0 -1
  653. package/dist/components/custom/super-scheduler/SuperScheduler.d.ts +0 -25
  654. package/dist/components/custom/super-scheduler/SuperScheduler.d.ts.map +0 -1
  655. package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts +0 -13
  656. package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts.map +0 -1
  657. package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts +0 -9
  658. package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts.map +0 -1
  659. package/dist/components/display/data/accordion/CwAccordionContainer.d.ts +0 -14
  660. package/dist/components/display/data/accordion/CwAccordionContainer.d.ts.map +0 -1
  661. package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +0 -15
  662. package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +0 -1
  663. package/dist/components/display/data/table/CwTable.d.ts +0 -102
  664. package/dist/components/display/data/table/CwTable.d.ts.map +0 -1
  665. package/dist/components/display/graphics/icon/CwIcon.d.ts +0 -15
  666. package/dist/components/display/graphics/icon/CwIcon.d.ts.map +0 -1
  667. package/dist/components/display/graphics/loading/CwLoading.d.ts +0 -42
  668. package/dist/components/display/graphics/loading/CwLoading.d.ts.map +0 -1
  669. package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts +0 -18
  670. package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts.map +0 -1
  671. package/dist/components/display/text/heading/CwHeadingMain.d.ts +0 -3
  672. package/dist/components/display/text/heading/CwHeadingMain.d.ts.map +0 -1
  673. package/dist/components/display/text/heading/CwHeadingSecond.d.ts +0 -3
  674. package/dist/components/display/text/heading/CwHeadingSecond.d.ts.map +0 -1
  675. package/dist/components/display/text/label/CwLabel.d.ts +0 -28
  676. package/dist/components/display/text/label/CwLabel.d.ts.map +0 -1
  677. package/dist/components/display/text/message/CwMessage.d.ts +0 -31
  678. package/dist/components/display/text/message/CwMessage.d.ts.map +0 -1
  679. package/dist/components/display/text/tag/CwChip.d.ts +0 -36
  680. package/dist/components/display/text/tag/CwChip.d.ts.map +0 -1
  681. package/dist/components/display/text/tag/CwTag.d.ts +0 -16
  682. package/dist/components/display/text/tag/CwTag.d.ts.map +0 -1
  683. package/dist/components/display/text/tooltip/CwTooltip.d.ts +0 -8
  684. package/dist/components/display/text/tooltip/CwTooltip.d.ts.map +0 -1
  685. package/dist/components/layout/align/CwAlign.d.ts +0 -54
  686. package/dist/components/layout/align/CwAlign.d.ts.map +0 -1
  687. package/dist/components/layout/card/CwCard.d.ts +0 -61
  688. package/dist/components/layout/card/CwCard.d.ts.map +0 -1
  689. package/dist/components/layout/card/CwCardList.d.ts +0 -32
  690. package/dist/components/layout/card/CwCardList.d.ts.map +0 -1
  691. package/dist/components/layout/dialog/CwDialog.d.ts +0 -28
  692. package/dist/components/layout/dialog/CwDialog.d.ts.map +0 -1
  693. package/dist/components/layout/dialog/CwDialogManager.d.ts +0 -11
  694. package/dist/components/layout/dialog/CwDialogManager.d.ts.map +0 -1
  695. package/dist/components/layout/list/details/CwExpandable.d.ts +0 -23
  696. package/dist/components/layout/list/details/CwExpandable.d.ts.map +0 -1
  697. package/dist/components/layout/list/key-value/CwKeyValueList.d.ts +0 -33
  698. package/dist/components/layout/list/key-value/CwKeyValueList.d.ts.map +0 -1
  699. package/dist/components/layout/modal/CwModalReportFunctional.d.ts +0 -15
  700. package/dist/components/layout/modal/CwModalReportFunctional.d.ts.map +0 -1
  701. package/dist/components/layout/modal/hover/CwModalHover.d.ts +0 -19
  702. package/dist/components/layout/modal/hover/CwModalHover.d.ts.map +0 -1
  703. package/dist/components/layout/modal/legacy/cw_modal.d.ts +0 -22
  704. package/dist/components/layout/modal/legacy/cw_modal.d.ts.map +0 -1
  705. package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts +0 -16
  706. package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts.map +0 -1
  707. package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts +0 -21
  708. package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts.map +0 -1
  709. package/dist/components/layout/modal/legacy/cw_modal_report.d.ts +0 -32
  710. package/dist/components/layout/modal/legacy/cw_modal_report.d.ts.map +0 -1
  711. package/dist/components/layout/table/grouped/CwTableGrouped.d.ts.map +0 -1
  712. package/dist/components/layout/tabs/CwTabs.d.ts +0 -46
  713. package/dist/components/layout/tabs/CwTabs.d.ts.map +0 -1
  714. package/dist/index.d.ts.map +0 -1
package/dist/index.es.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import React__default, { useEffect, useState, useRef, useMemo, useCallback, forwardRef, useImperativeHandle, createElement, memo, Fragment as Fragment$1, Component } from 'react';
3
+ import React__default, { useEffect, useState, useCallback, useRef, useMemo, forwardRef, useLayoutEffect, useImperativeHandle, createElement, memo, Fragment as Fragment$1, Component } from 'react';
4
4
  import { createRoot } from 'react-dom/client';
5
5
  import { createPortal } from 'react-dom';
6
- import { Tooltip, Modal, InputNumber, Select, Tag, Dropdown, Menu } from 'antd';
6
+ import { Tooltip, Modal, Select, Tag, Dropdown, Menu } from 'antd';
7
7
  import Draggable from 'react-draggable';
8
8
  import moment from 'moment';
9
9
  import lodash from 'lodash';
@@ -201,13 +201,20 @@ function getContrastColor(color) {
201
201
  * <CwIcon iconId="house" source="fontawesome" /> // Uses FontAwesome
202
202
  */
203
203
  function CwIcon(props) {
204
- const { iconId, source = 'cwellt', ...iconProps } = props;
204
+ const { iconId, source = 'cwellt', color, size, ...iconProps } = props;
205
+ const getClassName = (baseClass) => {
206
+ return [
207
+ baseClass,
208
+ color && `cw-color-${color}`,
209
+ size && `cw-font-size-${size}`
210
+ ].filter(Boolean).join(' ');
211
+ };
205
212
  // Return appropriate icon based on source
206
213
  if (source === 'fontawesome') {
207
- return jsx("span", { ...iconProps, className: `fa fa-${iconId}` });
214
+ return jsx("span", { ...iconProps, className: getClassName(`fa fa-${iconId}`) });
208
215
  }
209
216
  // Use custom icon font
210
- return jsx("span", { ...iconProps, className: `cwi-icons cwi-${iconId}` });
217
+ return jsx("span", { ...iconProps, className: getClassName(`cwi-icons cwi-${iconId}`) });
211
218
  }
212
219
 
213
220
  /**
@@ -227,7 +234,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
227
234
  }
228
235
  // Calculate styles based on colorScheme, customColor and variant
229
236
  const chipStyle = React__default.useMemo(() => {
230
- if (colorScheme === 'custom' && customColor) {
237
+ if (customColor) {
231
238
  if (variant === 'outline') {
232
239
  // For outline, customColor is used for border and text
233
240
  return {
@@ -266,7 +273,7 @@ const CwChip = ({ label, colorScheme = 'info', customColor, variant = 'soft', cl
266
273
  function CwTag(tagProps) {
267
274
  const hideTag = (event_clickTag) => {
268
275
  const tag = event_clickTag.currentTarget.parentElement;
269
- tag?.classList.add("cwellt_display_none");
276
+ tag?.classList.add("tag-hidden");
270
277
  };
271
278
  const onClickClosableCustomTag = (event_clickClosableT) => {
272
279
  hideTag(event_clickClosableT);
@@ -280,10 +287,7 @@ function CwTag(tagProps) {
280
287
  tagProps.onClickTag(event_clickTag);
281
288
  }
282
289
  };
283
- return (jsxs("div", { className: tagProps.closableTag
284
- ? tagProps.className + " cwelltTag cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
285
- : tagProps.className + " cwelltTag cwellt_flex cwellt_justify_center cwellt_align_items_center", style: tagProps.styleTag, onClick: event_clickTag => onClickCustomTag(event_clickTag), id: tagProps.idTag, ref: tagProps.ref, children: [jsx("span", { className: tagProps.classNameTag_description +
286
- " cwelltTag_desc cwellt_flex cwellt_justify_flex_start cwellt_align_items_center", style: tagProps.styleTag_description, children: tagProps.children }), tagProps.closableTag && (jsx("span", { className: "cwi-icons cwi-close", onClick: event_clickClosableT => onClickClosableCustomTag(event_clickClosableT), style: tagProps.styleClosableButton }))] }));
290
+ return (jsxs("div", { className: "cw-tag", style: tagProps.styleTag, onClick: event_clickTag => onClickCustomTag(event_clickTag), id: tagProps.idTag, ref: tagProps.ref, children: [jsx("strong", { style: tagProps.styleTag_description, children: tagProps.children }), tagProps.closableTag && (jsx(CwIcon, { iconId: "close", onClick: event_clickClosableT => onClickClosableCustomTag(event_clickClosableT) }))] }));
287
291
  }
288
292
 
289
293
  const CW_DEFAULT_MESSAGE_DURATION = 2000;
@@ -301,8 +305,35 @@ const CwMessage = props => {
301
305
  }, props.duration ?? CW_DEFAULT_MESSAGE_DURATION);
302
306
  return () => clearTimeout(timer);
303
307
  }, [props]);
304
- return (jsx("div", { className: "cw-message", "data-message-type": Object.keys(CwMessageType).find(key => CwMessageType[key] === props.messageType), children: jsxs(CwAlign, { justifyContent: "center", alignItems: "center", children: [props.messageType && jsx(CwIcon, { iconId: props.messageType.toString() }), props.message] }) }));
308
+ return (jsxs("div", { className: "cw-message", "data-message-type": Object.keys(CwMessageType).find(key => CwMessageType[key] === props.messageType), children: [props.messageType && jsx(CwIcon, { iconId: props.messageType.toString(), size: "large" }), props.message] }));
305
309
  };
310
+ /**
311
+ * Hook for displaying inline messages within specific components.
312
+ * Messages appear where you place the RenderMessage component, perfect for form validation
313
+ * and contextual feedback.
314
+ *
315
+ * @returns Object with showMessage function and RenderMessage component
316
+ *
317
+ * @example
318
+ * ```typescript
319
+ * const { showMessage, RenderMessage } = useCwMessage();
320
+ *
321
+ * const handleValidation = () => {
322
+ * showMessage({
323
+ * message: "Please fill all required fields",
324
+ * messageType: CwMessageType.ERROR,
325
+ * duration: 3000
326
+ * });
327
+ * };
328
+ *
329
+ * return (
330
+ * <div>
331
+ * {RenderMessage}
332
+ * <button onClick={handleValidation}>Submit</button>
333
+ * </div>
334
+ * );
335
+ * ```
336
+ */
306
337
  const useCwMessage = () => {
307
338
  const [isVisible, setIsVisible] = useState(false);
308
339
  const [message, setMessage] = useState("");
@@ -322,30 +353,24 @@ const useCwMessage = () => {
322
353
  };
323
354
  class CwMessageManager {
324
355
  static instance;
325
- messageContainer = null;
356
+ messageWrapper = null;
326
357
  root;
327
- constructor() {
328
- this.init();
329
- }
330
358
  static getInstance() {
331
359
  if (!CwMessageManager.instance) {
332
360
  CwMessageManager.instance = new CwMessageManager();
361
+ CwMessageManager.instance.init();
333
362
  }
334
363
  return CwMessageManager.instance;
335
364
  }
336
365
  init() {
337
- this.messageContainer = document.createElement("div");
338
- this.messageContainer.style.setProperty("position", "fixed");
339
- this.messageContainer.style.setProperty("pointer-events", "none");
340
- this.messageContainer.style.setProperty("width", "100%");
341
- this.messageContainer.style.setProperty("top", "0");
342
- this.messageContainer.style.setProperty("z-index", "999999");
343
- document.body.prepend(this.messageContainer);
344
- this.root = createRoot(this.messageContainer); // Create a root at the messageContainer
366
+ this.messageWrapper = document.createElement("div");
367
+ this.messageWrapper.className = "cw-message-wrapper";
368
+ document.body.prepend(this.messageWrapper);
369
+ this.root = createRoot(this.messageWrapper); // Create a root at the messageWrapper
345
370
  }
346
371
  showMessage(message, type, duration) {
347
372
  const msg = document.createElement("div");
348
- this.messageContainer?.prepend(msg);
373
+ this.messageWrapper?.prepend(msg);
349
374
  const msgRoot = createRoot(msg); // Create a root for the new message
350
375
  msgRoot.render(jsx(CwMessage, { message: message, messageType: type, duration: duration, onClose: () => this.closeMessage(msgRoot) }));
351
376
  }
@@ -353,10 +378,270 @@ class CwMessageManager {
353
378
  msgRoot.unmount(); // Unmount the message root
354
379
  }
355
380
  }
381
+ /**
382
+ * Display a global TOAST message that appears floating at the top right of the screen.
383
+ * Perfect for system-wide notifications and cross-component alerts.
384
+ *
385
+ * @param message - Text to display in the message
386
+ * @param type - Message type for styling and icon (SUCCESS, ERROR, WARN, INFO)
387
+ * @param duration - Auto-close duration in milliseconds (default: 2000)
388
+ *
389
+ * @example
390
+ * ```typescript
391
+ * CwDisplayMessage("Data saved successfully!", CwMessageType.SUCCESS);
392
+ * CwDisplayMessage("Connection failed", CwMessageType.ERROR, 5000);
393
+ * ```
394
+ *
395
+ * @note For inline messages within components, use `CwNote` or `useCwMessage` hook instead
396
+ */
356
397
  function CwDisplayMessage(message, type, duration) {
357
398
  CwMessageManager.getInstance().showMessage(message, type, duration);
358
399
  }
359
400
 
401
+ /**
402
+ * CwNote - Inline note component for instructions and contextual content
403
+ *
404
+ * @example
405
+ * <CwNote content="Use the search box to filter results" color="neutral" icon="search" />
406
+ * <CwNote
407
+ * content="Failed to load data"
408
+ * variant="solid"
409
+ * color="danger"
410
+ * icon="warning"
411
+ * onDismiss={() => console.log('dismissed')}
412
+ * />
413
+ * <CwNote variant="outline" color="success" icon="check">
414
+ * <p>Step 1: Configure your project settings</p>
415
+ * <p>Step 2: Validate configuration before proceeding</p>
416
+ * </CwNote>
417
+ * <CwNote className="custom-class" icon="lightbulb">
418
+ * <strong>Important information here</strong>
419
+ * </CwNote>
420
+ */
421
+ const CwNote = ({ content, variant = 'soft', color = 'primary', customColor, fontSize = 'regular', icon, dismissible = false, autoCloseSeconds, className = '', style = {}, children, }) => {
422
+ const [isVisible, setIsVisible] = useState(true);
423
+ // Auto-close functionality
424
+ useEffect(() => {
425
+ if (autoCloseSeconds && autoCloseSeconds > 0) {
426
+ const timer = setTimeout(() => {
427
+ setIsVisible(false);
428
+ }, autoCloseSeconds * 1000);
429
+ return () => clearTimeout(timer);
430
+ }
431
+ return undefined;
432
+ }, [autoCloseSeconds]);
433
+ // Handle manual dismiss
434
+ const handleDismiss = (e) => {
435
+ e.stopPropagation();
436
+ setIsVisible(false);
437
+ };
438
+ // Calculate styles for custom color
439
+ const messageStyle = React__default.useMemo(() => {
440
+ if (customColor) {
441
+ if (variant === 'outline') {
442
+ // For outline, customColor is used for border and text
443
+ return {
444
+ color: customColor,
445
+ borderColor: customColor,
446
+ ...style
447
+ };
448
+ }
449
+ else {
450
+ // For soft/solid, customColor is used for background and we calculate contrast
451
+ return {
452
+ backgroundColor: customColor,
453
+ color: getContrastColor(customColor),
454
+ ...style
455
+ };
456
+ }
457
+ }
458
+ return style;
459
+ }, [customColor, variant, style]);
460
+ // Build CSS classes
461
+ let noteClass = `cw-note cw-note-${fontSize}`;
462
+ if (dismissible) {
463
+ noteClass += ' cw-note-dismissible';
464
+ }
465
+ if (className) {
466
+ noteClass += ` ${className}`;
467
+ }
468
+ // Don't render if not visible
469
+ if (!isVisible) {
470
+ return null;
471
+ }
472
+ return (jsxs("div", { className: noteClass, "data-color": customColor ? undefined : color, "data-variant": variant, style: messageStyle, children: [icon && jsx(CwIcon, { iconId: icon }), jsx("div", { className: "cw-note-content", children: children ?? content }), dismissible && (jsx("button", { className: "cw-note-dismiss-button", onClick: handleDismiss, "aria-label": "Dismiss note", type: "button", children: jsx(CwIcon, { iconId: "close" }) }))] }));
473
+ };
474
+
475
+ /**
476
+ * CwImageGallery
477
+ *
478
+ * A versatile image gallery component that displays a grid of images
479
+ * and allows users to click on an image to view it in a larger format.
480
+ *
481
+ * @example
482
+ * // Basic usage
483
+ * <ImageGallery
484
+ * images={photos.map(p => {
485
+ * return (
486
+ * {
487
+ * src: "base64ImageString",
488
+ * alt: "Alternative text",
489
+ * filename: "Filename"
490
+ * }
491
+ * )
492
+ * })}
493
+ * />
494
+ */
495
+ function CwImageGallery({ images }) {
496
+ const [selectedIndex, setSelectedIndex] = useState(null);
497
+ const handleNext = useCallback(() => {
498
+ if (selectedIndex === null)
499
+ return;
500
+ setSelectedIndex((selectedIndex + 1) % images.length);
501
+ }, [selectedIndex, images.length]);
502
+ const handlePrev = useCallback(() => {
503
+ if (selectedIndex === null)
504
+ return;
505
+ setSelectedIndex((selectedIndex - 1 + images.length) % images.length);
506
+ }, [selectedIndex, images.length]);
507
+ const handleKeyDown = useCallback((e) => {
508
+ if (selectedIndex === null)
509
+ return;
510
+ if (e.key === "ArrowRight")
511
+ handleNext();
512
+ else if (e.key === "ArrowLeft")
513
+ handlePrev();
514
+ else if (e.key === "Escape")
515
+ setSelectedIndex(null);
516
+ }, [selectedIndex, handleNext, handlePrev]);
517
+ useEffect(() => {
518
+ if (selectedIndex !== null) {
519
+ window.addEventListener("keydown", handleKeyDown);
520
+ }
521
+ return () => {
522
+ window.removeEventListener("keydown", handleKeyDown);
523
+ };
524
+ }, [selectedIndex, handleKeyDown]);
525
+ const selectedImage = selectedIndex !== null ? images[selectedIndex] : null;
526
+ return (jsxs("div", { className: "cw-grid-base-2", children: [images.map((img, idx) => (jsxs("button", { style: {
527
+ background: "transparent",
528
+ color: "white",
529
+ border: "none",
530
+ cursor: "pointer",
531
+ display: "block",
532
+ }, onClick: () => setSelectedIndex(idx), children: [jsx("img", { src: "data:image/jpeg;base64," + img.src, alt: img.alt, style: {
533
+ width: "300px",
534
+ height: "auto",
535
+ maxHeight: "300px",
536
+ maxWidth: "300px",
537
+ cursor: "pointer",
538
+ borderRadius: "6px",
539
+ } }), jsx("div", { style: { fontSize: "1rem", textAlign: "center" }, children: img.filename && jsx("p", { style: { color: "var(--text-on-body)" }, children: img.filename }) })] }, img.filename))), selectedImage && (jsxs("button", { onClick: () => setSelectedIndex(null), style: {
540
+ position: "fixed",
541
+ top: 0,
542
+ left: 0,
543
+ width: "100vw",
544
+ height: "100vh",
545
+ backgroundColor: "rgba(0, 0, 0, 0.8)",
546
+ display: "grid",
547
+ justifyContent: "center",
548
+ alignItems: "center",
549
+ zIndex: 9999,
550
+ cursor: "zoom-out",
551
+ }, children: [jsx("img", { src: "data:image/jpeg;base64," + selectedImage.src, alt: selectedImage.alt, style: {
552
+ maxWidth: "90vw",
553
+ maxHeight: "90vh",
554
+ width: "auto",
555
+ height: "auto",
556
+ objectFit: "contain",
557
+ borderRadius: "8px",
558
+ boxShadow: "0 0 15px rgba(0,0,0,0.5)",
559
+ zIndex: 10001,
560
+ } }), jsx("div", { style: { color: "#fff", fontSize: "1rem", textAlign: "center" }, children: selectedImage.filename && jsx("p", { children: selectedImage.filename }) }), jsx("button", { onClick: (e) => {
561
+ e.stopPropagation();
562
+ handlePrev();
563
+ }, style: {
564
+ position: "absolute",
565
+ left: "30px",
566
+ fontSize: "2rem",
567
+ background: "transparent",
568
+ color: "white",
569
+ border: "none",
570
+ cursor: "pointer",
571
+ zIndex: 10002,
572
+ }, children: "\u2039" }), jsx("button", { onClick: (e) => {
573
+ e.stopPropagation();
574
+ handleNext();
575
+ }, style: {
576
+ position: "absolute",
577
+ right: "30px",
578
+ fontSize: "2rem",
579
+ background: "transparent",
580
+ color: "white",
581
+ border: "none",
582
+ cursor: "pointer",
583
+ zIndex: 10002,
584
+ }, children: "\u203A" })] }))] }));
585
+ }
586
+
587
+ /**
588
+ * CwImageGallery
589
+ *
590
+ * A image zoom component that displays an image
591
+ * and allows users to click to view it in a larger format.
592
+ *
593
+ * @example
594
+ * // Basic usage
595
+ * <ImageZoom src={'base64ImageString'}
596
+ * alt={'Alternative text'}/>
597
+ */
598
+ function CwImageZoom(image) {
599
+ const [selectedImage, setSelectedImage] = useState(null);
600
+ const imageHeight = image.height ? image.height : "300px";
601
+ const imageWidth = image.width ? image.width : "300px";
602
+ useEffect(() => {
603
+ const handleKeyDown = (e) => {
604
+ if (e.key === "Escape") {
605
+ setSelectedImage(null);
606
+ }
607
+ };
608
+ if (selectedImage) {
609
+ document.addEventListener("keydown", handleKeyDown);
610
+ }
611
+ return () => {
612
+ document.removeEventListener("keydown", handleKeyDown);
613
+ };
614
+ }, [selectedImage]);
615
+ return (jsxs("div", { className: "cw-fieldset cw-grid-base-2", children: [image.src && (jsx("img", { src: "data:image/jpeg;base64," + image.src, alt: image.alt, onClick: () => setSelectedImage(image), style: {
616
+ maxHeight: imageHeight,
617
+ maxWidth: imageWidth,
618
+ cursor: "zoom-in",
619
+ borderRadius: "6px",
620
+ objectFit: "cover",
621
+ } }, image.alt)), selectedImage && (jsxs("div", { onClick: () => setSelectedImage(null), style: {
622
+ position: "fixed",
623
+ top: 0,
624
+ left: 0,
625
+ width: "100vw",
626
+ height: "100vh",
627
+ backgroundColor: "rgba(0, 0, 0, 0.85)",
628
+ display: "grid",
629
+ justifyContent: "center",
630
+ alignItems: "center",
631
+ zIndex: 9999,
632
+ cursor: "zoom-out",
633
+ padding: "1rem",
634
+ }, children: [jsx("img", { src: "data:image/jpeg;base64," + selectedImage.src, alt: selectedImage.alt, style: {
635
+ maxWidth: "90vw",
636
+ maxHeight: "90vh",
637
+ width: "auto",
638
+ height: "auto",
639
+ objectFit: "contain",
640
+ borderRadius: "8px",
641
+ boxShadow: "0 0 15px rgba(0,0,0,0.5)",
642
+ } }), jsx("div", { style: { color: "#fff", fontSize: "1rem", textAlign: "center" }, children: selectedImage.filename && jsx("div", { children: selectedImage.filename }) })] }))] }));
643
+ }
644
+
360
645
  /**
361
646
  * CwLoading
362
647
  *
@@ -380,7 +665,7 @@ function CwDisplayMessage(message, type, duration) {
380
665
  */
381
666
  function CwLoading({ isLoading = false, text = '', size = 'regular', iconPosition = 'outside', iconName = 'cwi-plane-solid', animation = 'spin', children }) {
382
667
  const iconClasses = `cwi-icons ${iconName || ''}`;
383
- return (jsxs("div", { "aria-busy": isLoading, className: isLoading ? 'cw-loading-container' : '', children: [isLoading && (jsxs("div", { className: "cw-loading-content", "data-size": size, "data-animation": animation, children: [jsx("div", { className: "cw-loading", "data-icon-position": iconPosition, children: jsx("span", { className: iconClasses }) }), text && (jsx("p", { children: text }))] })), jsx("div", { className: isLoading ? 'cw-loading-disabled-content' : '', children: children })] }));
668
+ return (jsxs("div", { "aria-busy": isLoading, className: isLoading ? 'cw-loading-container' : '', "data-children": !!children, children: [isLoading && (jsxs("div", { className: "cw-loading-content", "data-size": size, "data-animation": animation, children: [jsx("div", { className: "cw-loading", "data-icon-position": iconPosition, children: jsx("span", { className: iconClasses }) }), text && (jsx("p", { children: text }))] })), jsx("div", { className: isLoading ? 'cw-loading-disabled-content' : '', children: children })] }));
384
669
  }
385
670
 
386
671
  /**
@@ -403,7 +688,7 @@ function CwLoadingSmall(CwelltLoadingAppointements) {
403
688
  jsx("div", {})) }));
404
689
  }
405
690
 
406
- var styles$e = {"cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si"};
691
+ var styles$j = {"cw-generic-tooltip-content":"cw-generic-tooltip-module_cw-generic-tooltip-content__la-Si"};
407
692
 
408
693
  // Constants moved outside to prevent recreation
409
694
  const margin = 16;
@@ -514,12 +799,12 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
514
799
  const { setTooltipTimeout, clearTooltipTimeout } = useTooltipDelay(() => {
515
800
  setIsVisible(true);
516
801
  }, showDelay);
517
- const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$e["cw-generic-tooltip-content"]);
802
+ const { position: tooltipPosition, actualPosition } = useTooltipPosition(isVisible, containerRef, position, styles$j["cw-generic-tooltip-content"]);
518
803
  // Memoize tooltip content creation
519
804
  const tooltipContent = useMemo(() => {
520
805
  if (hide || !isVisible || !content)
521
806
  return null;
522
- return createPortal(jsx("div", { className: styles$e["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, style: {
807
+ return createPortal(jsx("div", { className: styles$j["cw-generic-tooltip-content"], "data-position": actualPosition, "data-visible": isVisible, style: {
523
808
  position: 'fixed',
524
809
  top: `${tooltipPosition.top}px`,
525
810
  left: `${tooltipPosition.left}px`,
@@ -534,12 +819,12 @@ const CwGenericTooltip = ({ children, content = null, position = defaultPosition
534
819
  clearTooltipTimeout();
535
820
  setIsVisible(false);
536
821
  }, [clearTooltipTimeout]);
537
- return (jsxs("div", { ref: containerRef, className: styles$e["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, children: [tooltipContent, children] }));
822
+ return (jsxs("div", { ref: containerRef, className: styles$j["cw-generic-tooltip"], onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, children: [tooltipContent, children] }));
538
823
  };
539
824
 
540
825
  // Reference for draggable modal
541
- const draggableRef$1 = React__default.createRef();
542
826
  function CwModal(custModalProps) {
827
+ const draggableRef = useRef(null);
543
828
  // Hooks [ modal draggable ]
544
829
  const [isModalDisabled, setModalDisabled] = useState(true);
545
830
  // [ optional : hideFooter by default it shows the footer ]
@@ -569,7 +854,7 @@ function CwModal(custModalProps) {
569
854
  width: custModalProps.widthModal
570
855
  }
571
856
  };
572
- return (jsx("div", { children: custModalProps.modalState && (jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsx(Draggable, { disabled: isModalDisabled, axis: "both", children: jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef$1, 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 ? (
857
+ return (jsx("div", { children: custModalProps.modalState && (jsxs("div", { className: custModalProps.classNameModalOverlay + " cwelltModalOverlay", children: [jsx("div", { className: "cwelltModalOverlayBg", onClick: custModalProps.onCloseModal }), jsx(Draggable, { disabled: isModalDisabled, axis: "both", nodeRef: draggableRef, children: jsxs("div", { className: custModalProps.classNameModal + " cwelltContainerModal", ref: draggableRef, style: widthModalDef !== "40em" ? modalStyle.widthCustomStyle : modalStyle.widthDefStyle, children: [jsxs("div", { className: "cwelltModalHeader", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx("div", { className: "cwelltModalTitle", children: custModalProps.titleModal }), jsx("button", { className: "cwelltBtnCloseModal", onClick: custModalProps.onCloseModal, children: jsx("span", { className: "cwelltCloseIcon" }) })] }), jsx("div", { className: "cwelltModalBody", children: jsx("div", { className: "cwelltContainerModalBody", style: { position: "relative" }, children: custModalProps.children }) }), isHide === false ? (
573
858
  // [ false : show modal ]
574
859
  jsxs("div", { className: "cwelltModalFooter", onMouseOver: cwelltOnMouseOverModal, onMouseOut: cwelltOnMouseOutModal, children: [jsx(Tooltip, { placement: "bottom", title: "Save", color: "#368ee0", children: jsx("div", { className: "cwellt_flex cwellt_justify_center cwelltModalFooterContButton", style: { width: "2em" }, children: jsx("button", { className: "btnModalFooterAction cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btn_save ", onClick: custModalProps.onSaveModal, form: custModalProps.formSaveModal, hidden: custModalProps.HideBtnModal, type: custModalProps.HtmlSubmitModal }) }) }), isShowcustButton === true ? (jsx(Tooltip, { placement: "bottom", title: custModalProps.custButtonTitle, color: custModalProps.custColorButtonTooltip, children: jsx("div", { className: "cwellt_flex cwellt_justify_center cwelltModalFooterContButton", style: { width: "2em" }, children: jsx("button", { className: "btnModalFooterAction cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg " +
575
860
  custModalProps.custButtonClassName, onClick: custModalProps.custButtonClick }) }) })) : (jsx("div", {}))] })) : (
@@ -577,6 +862,78 @@ function CwModal(custModalProps) {
577
862
  jsx("div", { style: { display: "none" } }))] }) })] })) }));
578
863
  }
579
864
 
865
+ var styles$i = {"overlayPositioned":"CwConfirmationPopup-module_overlayPositioned__11qYB","popup":"CwConfirmationPopup-module_popup__ahPjM","message":"CwConfirmationPopup-module_message__MnNL4","buttons":"CwConfirmationPopup-module_buttons__fGYYE","button":"CwConfirmationPopup-module_button__ugYQE","confirmButton":"CwConfirmationPopup-module_confirmButton__rTP4S","cancelButton":"CwConfirmationPopup-module_cancelButton__Ry694"};
866
+
867
+ function CwConfirmationPopup(props) {
868
+ const { isOpen, onConfirm, onCancel, message = "Are you sure you want to proceed?", confirmText = "Confirm", cancelText = "Cancel", placement = 'bottom', children } = props;
869
+ const triggerRef = useRef(null);
870
+ const popupRef = useRef(null);
871
+ const [position, setPosition] = useState({ top: 0, left: 0 });
872
+ // Render the children with a wrapper to get the reference
873
+ const renderChildren = () => {
874
+ if (React__default.isValidElement(children)) {
875
+ const ChildWrapper = forwardRef((_props, ref) => {
876
+ return (jsx("div", { ref: ref, style: { display: 'inline-block' }, children: children }));
877
+ });
878
+ return jsx(ChildWrapper, { ref: triggerRef });
879
+ }
880
+ return children;
881
+ };
882
+ // Effect to calculate the position of the popup
883
+ useEffect(() => {
884
+ if (isOpen && triggerRef.current && popupRef.current) {
885
+ const targetRect = triggerRef.current.getBoundingClientRect();
886
+ const popupRect = popupRef.current.getBoundingClientRect();
887
+ let top = 0;
888
+ let left = 0;
889
+ // Calculate position based on placement
890
+ switch (placement) {
891
+ case 'top':
892
+ top = targetRect.top - popupRect.height - 10;
893
+ left = targetRect.left + (targetRect.width / 2) - (popupRect.width / 2);
894
+ break;
895
+ case 'right':
896
+ top = targetRect.top + (targetRect.height / 2) - (popupRect.height / 2);
897
+ left = targetRect.right + 10;
898
+ break;
899
+ case 'bottom':
900
+ top = targetRect.bottom + 10;
901
+ left = targetRect.left + (targetRect.width / 2) - (popupRect.width / 2);
902
+ break;
903
+ case 'left':
904
+ top = targetRect.top + (targetRect.height / 2) - (popupRect.height / 2);
905
+ left = targetRect.left - popupRect.width - 10;
906
+ break;
907
+ }
908
+ // Adjustments to keep the popup within the window
909
+ const viewportWidth = window.innerWidth;
910
+ const viewportHeight = window.innerHeight;
911
+ if (left < 10)
912
+ left = 10;
913
+ if (left + popupRect.width > viewportWidth - 10) {
914
+ left = viewportWidth - popupRect.width - 10;
915
+ }
916
+ if (top < 10)
917
+ top = 10;
918
+ if (top + popupRect.height > viewportHeight - 10) {
919
+ top = viewportHeight - popupRect.height - 10;
920
+ }
921
+ setPosition({ top, left });
922
+ }
923
+ }, [isOpen, placement]);
924
+ const handleOverlayClick = (e) => {
925
+ if (popupRef.current && !popupRef.current.contains(e.target)) {
926
+ onCancel();
927
+ }
928
+ };
929
+ return (jsxs(Fragment, { children: [renderChildren(), isOpen && (jsx("div", { className: styles$i.overlayPositioned, onClick: handleOverlayClick, children: jsxs("div", { ref: popupRef, className: styles$i.popup, style: {
930
+ position: 'absolute',
931
+ top: `${position.top}px`,
932
+ left: `${position.left}px`,
933
+ transform: 'none'
934
+ }, children: [jsx("p", { className: styles$i.message, children: message }), jsxs("div", { className: styles$i.buttons, children: [jsx("button", { className: `${styles$i.button} ${styles$i.confirmButton}`, onClick: onConfirm, children: confirmText }), jsx("button", { className: `${styles$i.button} ${styles$i.cancelButton}`, onClick: onCancel, children: cancelText })] })] }) }))] }));
935
+ }
936
+
580
937
  // Reference for draggable modal
581
938
  const draggableRef = React__default.createRef();
582
939
  function CwModalConfirm(custModalProps) {
@@ -653,7 +1010,7 @@ class CwModalIframe extends React.Component {
653
1010
  }
654
1011
  }
655
1012
 
656
- var styles$d = {"cw-dialog-main":"cw-dialog-module_cw-dialog-main__cHxHt","cw-dialog-button-close":"cw-dialog-module_cw-dialog-button-close__9GRd8"};
1013
+ var styles$h = {"cw-dialog-main":"cw-dialog-module_cw-dialog-main__cHxHt","cw-dialog-button-close":"cw-dialog-module_cw-dialog-button-close__9GRd8"};
657
1014
 
658
1015
  // Helper function to parse size values
659
1016
  const parseSize = (size) => {
@@ -692,7 +1049,7 @@ const convertFromPx = (px, unit) => {
692
1049
  }
693
1050
  };
694
1051
  const CwDialog = props => {
695
- const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, ...domProps } = props;
1052
+ const { customFooter, customHeader, headline, width, height, dialogSize, scrim, onSave, onClose, hideFooter, children, open, autoReposition = false, ...domProps } = props;
696
1053
  const dialogRef = useRef(null);
697
1054
  const initialSetup = useMemo(() => {
698
1055
  // Default width and height with units
@@ -741,19 +1098,42 @@ const CwDialog = props => {
741
1098
  // scrim is true by default
742
1099
  const hasScrim = scrim !== false;
743
1100
  // Adjust position after the dialog is rendered when using autoHeight
744
- useEffect(() => {
1101
+ useLayoutEffect(() => {
1102
+ let resizeObserver = null;
745
1103
  if (size.autoHeight && dialogRef.current && open) {
746
- // Get the actual height after rendering
747
- const actualHeight = dialogRef.current.offsetHeight;
748
- // Only update position if height is available
749
- if (actualHeight > 0) {
750
- setPosition(prevPos => ({
751
- ...prevPos,
752
- y: window.document.body.clientHeight / 2 - actualHeight / 2
753
- }));
1104
+ const recalculatePosition = () => {
1105
+ const actualHeight = dialogRef.current?.offsetHeight;
1106
+ if (actualHeight && actualHeight > 0) {
1107
+ setPosition({
1108
+ x: Math.max(0, window.document.body.clientWidth / 2 - size.width / 2),
1109
+ y: Math.max(0, window.document.body.clientHeight / 2 - actualHeight / 2)
1110
+ });
1111
+ }
1112
+ };
1113
+ setTimeout(recalculatePosition, 0);
1114
+ // For modals with delayed loading content (inner fetchs and similar)
1115
+ if (autoReposition) {
1116
+ resizeObserver = new ResizeObserver(() => {
1117
+ const dialog = dialogRef.current;
1118
+ if (!dialog)
1119
+ return;
1120
+ const dialogRect = dialog.getBoundingClientRect();
1121
+ const viewportHeight = window.innerHeight;
1122
+ const margin = 50;
1123
+ // Only reposition if modal tries to grow over window limits
1124
+ const isOverflowingTop = dialogRect.top < margin;
1125
+ const isOverflowingBottom = dialogRect.bottom > viewportHeight - margin;
1126
+ if (isOverflowingTop || isOverflowingBottom) {
1127
+ recalculatePosition();
1128
+ }
1129
+ });
1130
+ resizeObserver.observe(dialogRef.current);
754
1131
  }
755
1132
  }
756
- }, [size.autoHeight, open]);
1133
+ return () => {
1134
+ resizeObserver?.disconnect();
1135
+ };
1136
+ }, [size.autoHeight, open, autoReposition]);
757
1137
  useEffect(() => {
758
1138
  const handleMouseMove = (e) => {
759
1139
  if (isDragging) {
@@ -846,7 +1226,7 @@ const CwDialog = props => {
846
1226
  onClose();
847
1227
  }
848
1228
  }, [onClose]);
849
- const header = useMemo(() => (jsxs("header", { onMouseDown: handleMouseDown, children: [jsx("span", { children: headline }), customHeader || (jsx("button", { className: styles$d["cw-dialog-button-close"], onClick: onClose }))] })), [handleMouseDown, headline, customHeader, onClose]);
1229
+ const header = useMemo(() => (jsxs("header", { onMouseDown: handleMouseDown, children: [jsx("span", { children: headline }), customHeader || (jsx("button", { className: styles$h["cw-dialog-button-close"], onClick: onClose }))] })), [handleMouseDown, headline, customHeader, onClose]);
850
1230
  const content = useMemo(() => (jsx("section", { children: children })), [children]);
851
1231
  const footer = useMemo(() => (jsx("footer", { children: customFooter || (jsx("button", { className: "cw-button-icon cwi-save", onClick: onSave })) })), [customFooter, onSave]);
852
1232
  const resizeHandles = useMemo(() => size.autoHeight
@@ -875,12 +1255,13 @@ const CwDialog = props => {
875
1255
  : `${convertFromPx(size.height, size.heightUnit)}${size.heightUnit}`;
876
1256
  return { displayWidth, displayHeight };
877
1257
  }, [size.width, size.height, size.widthUnit, size.heightUnit, size.autoHeight]);
878
- return (open && (jsx("div", { "data-has-scrim": hasScrim, className: styles$d["cw-dialog-main"], onClick: handleScrimClick, children: jsxs("dialog", { ...domProps, ref: dialogRef, style: {
1258
+ const dialogContent = (jsx("div", { "data-has-scrim": hasScrim, className: styles$h["cw-dialog-main"], onClick: handleScrimClick, children: jsxs("dialog", { ...domProps, ref: dialogRef, style: {
879
1259
  left: `${position.x}px`,
880
1260
  top: `${position.y}px`,
881
1261
  width: displayDimensions.displayWidth,
882
1262
  height: displayDimensions.displayHeight
883
- }, children: [header, content, hideFooter !== true && footer, resizeHandles] }) })));
1263
+ }, children: [header, content, hideFooter !== true && footer, resizeHandles] }) }));
1264
+ return open ? createPortal(dialogContent, document.body) : null;
884
1265
  };
885
1266
 
886
1267
  const CwModalReportFunctional = (props) => {
@@ -1038,7 +1419,7 @@ function CwButton({ text, variant = 'solid', color = 'primary', className = '',
1038
1419
  return (jsx("button", { type: "button", className: buttonClass, ...buttonProps, "data-color": color, children: variant === 'icon' ? null : (children ?? (jsxs(Fragment, { children: [icon && jsx("span", { className: `cwi-icons cwi-${icon}` }), text && jsx("strong", { children: text })] }))) }));
1039
1420
  }
1040
1421
 
1041
- var styles$c = {"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"};
1422
+ var styles$g = {"card":"cw-card-module_card__HJUT0","clickable":"cw-card-module_clickable__Y-V3X","disabled":"cw-card-module_disabled__0wHh1","loading":"cw-card-module_loading__-fzlx","content":"cw-card-module_content__ma9qy","headerContent":"cw-card-module_headerContent__x4Jfl","footerTags":"cw-card-module_footerTags__80sSW","loadingOverlay":"cw-card-module_loadingOverlay__8-zVV"};
1042
1423
 
1043
1424
  /**
1044
1425
  * CwCard - A simple card component for displaying content in a contained format
@@ -1062,11 +1443,11 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
1062
1443
  // Construct class names using CSS modules
1063
1444
  const cardClassNames = [
1064
1445
  'cw-card',
1065
- styles$c.card,
1446
+ styles$g.card,
1066
1447
  className,
1067
- clickable ? styles$c.clickable : '',
1068
- disabled ? styles$c.disabled : '',
1069
- isLoading ? styles$c.loading : '',
1448
+ clickable ? styles$g.clickable : '',
1449
+ disabled ? styles$g.disabled : '',
1450
+ isLoading ? styles$g.loading : '',
1070
1451
  ].filter(Boolean).join(' ');
1071
1452
  // Handle click event when card is clickable
1072
1453
  const handleClick = () => {
@@ -1083,17 +1464,17 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
1083
1464
  // Determine if footer should be rendered
1084
1465
  const hasFooter = hasChips || footer || (hasActions && direction === "row");
1085
1466
  // Actions component to reuse
1086
- const ActionsComponent = hasActions && !disabled ? (jsxs("div", { className: styles$c.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;
1467
+ const ActionsComponent = hasActions && !disabled ? (jsxs("div", { className: styles$g.actions, children: [extraActions ?? null, onEdit && jsx(CwButton, { variant: "icon", icon: "edit", onClick: onEdit }), onDelete && jsx(CwButton, { variant: "icon", icon: "delete", color: "danger", onClick: onDelete })] })) : null;
1087
1468
  return (jsxs("div", { ...(id && { id }), className: cardClassNames, ...(style && { style }), ...(clickable && {
1088
1469
  role: 'button',
1089
1470
  tabIndex: 0,
1090
1471
  onClick: handleClick,
1091
- }), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$c.headerContent, "data-alignment": alignment, children: [title && jsx("h5", { children: title }), subtitle && jsx("strong", { children: subtitle })] })), direction === "column" && ActionsComponent] })), jsx("div", { className: styles$c.content, children: children }), hasFooter && (jsxs("footer", { children: [hasChips && (jsx("div", { className: styles$c.footerTags, children: chips.map((chip, index) => (jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$c.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsx("div", { className: styles$c.footerContent, children: footer }))] })), direction === "row" && ActionsComponent, isLoading && (jsx("div", { className: styles$c.loadingOverlay, children: jsx(CwLoading, { isLoading: isLoading, size: "small" }) }))] }));
1472
+ }), "data-variant": variant, "data-direction": direction, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$g.headerContent, "data-alignment": alignment, children: [title && jsx("h5", { children: title }), subtitle && jsx("strong", { children: subtitle })] })), direction === "column" && ActionsComponent] })), jsx("div", { className: styles$g.content, children: children }), hasFooter && (jsxs("footer", { children: [hasChips && (jsx("div", { className: styles$g.footerTags, children: chips.map((chip, index) => (jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$g.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsx("div", { className: styles$g.footerContent, children: footer }))] })), direction === "row" && ActionsComponent, isLoading && (jsx("div", { className: styles$g.loadingOverlay, children: jsx(CwLoading, { isLoading: isLoading, size: "small" }) }))] }));
1092
1473
  };
1093
1474
 
1094
- var styles$b = {"cardContainer":"cw-card-list-module_cardContainer__l3YEh","pagination":"cw-card-list-module_pagination__5Ay78","pageInfo":"cw-card-list-module_pageInfo__uiMel","emptyState":"cw-card-list-module_emptyState__RlqiS","sortControls":"cw-card-list-module_sortControls__mWgZA"};
1475
+ var styles$f = {"cardContainer":"cw-card-list-module_cardContainer__l3YEh","pagination":"cw-card-list-module_pagination__5Ay78","pageInfo":"cw-card-list-module_pageInfo__uiMel","loading":"cw-card-list-module_loading__cYpND","emptyState":"cw-card-list-module_emptyState__RlqiS","sortControls":"cw-card-list-module_sortControls__mWgZA"};
1095
1476
 
1096
- function CwCardList({ items, renderCard, pageSize = 10, className = '', layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, emptyState, sortOptions = [], defaultSortKey }) {
1477
+ function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, emptyState, sortOptions = [], defaultSortKey, ...htmlProps }) {
1097
1478
  const [currentPage, setCurrentPage] = useState(1);
1098
1479
  const [sortKey, setSortKey] = useState(defaultSortKey || sortOptions[0]?.key || '');
1099
1480
  const [sortDirection, setSortDirection] = useState('asc');
@@ -1125,10 +1506,10 @@ function CwCardList({ items, renderCard, pageSize = 10, className = '', layout =
1125
1506
  '--card-width': `${defaultCardWidth}px`,
1126
1507
  '--card-gap': `${cardGap}px`
1127
1508
  };
1128
- return (jsxs("div", { className: `${className}`, children: [sortOptions.length > 0 && (jsxs("div", { className: styles$b.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$b.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$b.loading, children: jsx(CwLoading, { isLoading: isLoading }) })) : sortedItems.length === 0 ? (jsx("div", { className: styles$b.emptyState, children: emptyState || jsx("p", { children: "No items to display" }) })) : (jsxs(Fragment, { children: [jsx("div", { className: `${styles$b.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsx("div", { className: styles$b.cardWrapper, children: renderCard(item, index) }, index))) }), totalPages > 1 && (jsxs("div", { className: styles$b.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$b.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" })] }))] }))] }));
1509
+ return (jsxs("div", { ...htmlProps, children: [sortOptions.length > 0 && (jsxs("div", { className: styles$f.sortControls, children: [jsx("label", { htmlFor: "cardlist-sort-select", children: "Sort by:" }), jsx("select", { id: "cardlist-sort-select", value: sortKey, onChange: (e) => handleSortChange(e.target.value), className: styles$f.sortSelect, children: sortOptions.map(option => (jsx("option", { value: option.key, children: option.label }, option.key))) }), jsx("button", { onClick: () => setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc'), className: `cw-button-icon ${sortDirection === 'asc' ? 'cwi-arrow-up' : 'cwi-arrow-down'}`, title: `Sort ${sortDirection === 'asc' ? 'descending' : 'ascending'}` })] })), isLoading ? (jsx("div", { className: styles$f.loading, children: jsx(CwLoading, { isLoading: isLoading }) })) : sortedItems.length === 0 ? (jsx("div", { className: styles$f.emptyState, children: emptyState || jsx("p", { children: "No items to display" }) })) : (jsxs(Fragment, { children: [jsx("div", { className: `${styles$f.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsx("div", { className: styles$f.cardWrapper, children: renderCard(item, index) }, index))) }), totalPages > 1 && (jsxs("div", { className: styles$f.pagination, children: [jsx("button", { disabled: currentPage === 1, onClick: () => setCurrentPage(p => Math.max(1, p - 1)), className: "cw-button-icon cwi-chevron-left" }), jsxs("span", { className: styles$f.pageInfo, children: [currentPage, " of ", totalPages] }), jsx("button", { disabled: currentPage === totalPages, onClick: () => setCurrentPage(p => Math.min(totalPages, p + 1)), className: "cw-button-icon cwi-chevron-right" })] }))] }))] }));
1129
1510
  }
1130
1511
 
1131
- var styles$a = {"cw-accordion":"cw-accordion-module_cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module_cw-accordion-body__xlI8b"};
1512
+ var styles$e = {"cw-accordion":"cw-accordion-module_cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module_cw-accordion-body__xlI8b"};
1132
1513
 
1133
1514
  /**
1134
1515
  *
@@ -1145,7 +1526,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
1145
1526
  setVisible_accordionBody(!isVisible_accordionBody);
1146
1527
  };
1147
1528
  // #endregion
1148
- return (jsxs("div", { className: styles$a["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$a["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
1529
+ return (jsxs("div", { className: styles$e["cw-accordion"], style: CwelltAccordionContainerProps.style, "data-open": isVisible_accordionBody, children: [jsxs("header", { onClick: () => showAccordionBody(), children: [jsx("div", { children: CwelltAccordionContainerProps.desc_text }), jsx("button", { className: "cw-button-icon" })] }), jsx("div", { className: styles$e["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
1149
1530
  }
1150
1531
 
1151
1532
  /**
@@ -1281,7 +1662,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
1281
1662
  const startX = e.clientX;
1282
1663
  const startWidth = e.target.parentElement?.offsetWidth || 0;
1283
1664
  const onMouseMove = (moveEvent) => {
1284
- const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50); // mínimo 50px
1665
+ const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50); // min 50px
1285
1666
  setColumnWidths(prev => ({ ...prev, [key]: newWidth }));
1286
1667
  };
1287
1668
  const onMouseUp = () => {
@@ -1298,7 +1679,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
1298
1679
  overflowY: "auto"
1299
1680
  };
1300
1681
  }
1301
- return {}; // sin altura ni scroll
1682
+ return {}; // no height or scroll
1302
1683
  }, [stickyHeader, scrollHeight]);
1303
1684
  const getColSpan = () => columns.length + (expandedRowRender ? 1 : 0);
1304
1685
  const hasClassNameRow = (item) => {
@@ -1334,7 +1715,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
1334
1715
  }),
1335
1716
  }, children: [jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [jsx("span", { children: col.title }), col.sortable && col.dataIndex && (jsx("span", { style: { fontSize: "12px", marginLeft: "6px" }, children: sortConfig.key !== col.dataIndex ? "↕" : sortConfig.direction === "asc"
1336
1717
  ? "↑"
1337
- : "↓" }))] }), jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxs("footer", { className: "cw-table-pagination", children: [jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsx("input", { type: "number", value: currentPage, onChange: (e) => {
1718
+ : "↓" }))] }), jsx("span", { onMouseDown: (e) => startResize(e, col.key), className: "th-column-resizer" })] }, col.key)))] }) }), jsx("tbody", { children: renderTableBody() })] }) }), pagination && totalPages > 1 && (jsxs("footer", { className: "cw-table-pagination", children: [jsx("button", { onClick: () => handlePageChange(1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left-double", title: "First" }), jsx("button", { onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 || totalPages === 1, className: "cw-button-icon cwi-chevron-left", title: "Previous" }), jsx("input", { type: "text", inputMode: "numeric", value: currentPage, onChange: (e) => {
1338
1719
  const value = parseInt(e.target.value, 10);
1339
1720
  if (!isNaN(value))
1340
1721
  handlePageChange(value);
@@ -1343,14 +1724,10 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
1343
1724
  if (isNaN(value) || value < 1 || value > totalPages) {
1344
1725
  handlePageChange(1);
1345
1726
  }
1346
- }, min: 1, max: totalPages, style: {
1347
- width: "4rem",
1348
- textAlign: "center",
1349
- marginRight: "0.5rem"
1350
- } }), "of ", totalPages, jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, style: { marginLeft: "1rem" }, children: pageSizeOptions.map(size => (jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
1727
+ }, min: 1, max: totalPages }), jsxs("span", { children: ["of ", totalPages] }), jsx("button", { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right", title: "Next" }), jsx("button", { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages === 1, className: "cw-button-icon cwi-chevron-right-double", title: "Last" }), jsx("select", { value: localItemsPerPage, onChange: handleItemsPerPageChange, children: pageSizeOptions.map(size => (jsxs("option", { value: size, children: [size, " / page"] }, size))) })] }))] }));
1351
1728
  }
1352
1729
 
1353
- var styles$9 = {"cw-tabs":"cw-tabs-module_cw-tabs__1pmji","cw-tabs-content":"cw-tabs-module_cw-tabs-content__HTp8d"};
1730
+ var styles$d = {"cw-tabs":"cw-tabs-module_cw-tabs__1pmji","cw-tabs-content":"cw-tabs-module_cw-tabs-content__HTp8d"};
1354
1731
 
1355
1732
  const TabIcon = ({ icon }) => {
1356
1733
  if (!icon)
@@ -1400,7 +1777,7 @@ function CwTabs(CwTabsProps) {
1400
1777
  const tabsListStyle = position === 'left' && CwTabsProps.tabsListWidth
1401
1778
  ? { minWidth: CwTabsProps.tabsListWidth }
1402
1779
  : undefined;
1403
- return (jsxs("div", { id: CwTabsProps.id, className: styles$9['cw-tabs'], style: CwTabsProps.style, "data-tabs-position": position, children: [jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsx(TabIcon, { icon: tab.icon }), tab.title] }, tab.key))) }), jsx("div", { className: styles$9['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
1780
+ return (jsxs("div", { id: CwTabsProps.id, className: styles$d['cw-tabs'], style: CwTabsProps.style, "data-tabs-position": position, children: [jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, children: [jsx(TabIcon, { icon: tab.icon }), tab.title] }, tab.key))) }), jsx("div", { className: styles$d['cw-tabs-content'], children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
1404
1781
  }
1405
1782
 
1406
1783
  /**
@@ -1442,10 +1819,140 @@ const CwExpandable = ({ briefing, onToggle, onOpen, onClose, children, ...detail
1442
1819
  */
1443
1820
  const CwKeyValueList = ({ items, className = "", emptyValue = "-", direction = "row" }) => {
1444
1821
  return (jsx("dl", { className: `cw-keyvalue-list ${className}`, children: items.map(item => (jsxs("div", { className: `cw-keyvalue-list-item cw-flex-${direction}`, children: [jsx("dt", { children: item.label }), jsx("dd", { children: item.value !== undefined && item.value !== null && item.value !== ""
1445
- ? `${item.value}${item.suffix ? ` ${item.suffix}` : ''}`
1822
+ ? (React__default.isValidElement(item.value)
1823
+ ? item.value
1824
+ : `${item.value}${item.suffix ? ` ${item.suffix}` : ''}`)
1446
1825
  : emptyValue })] }, item.key))) }));
1447
1826
  };
1448
1827
 
1828
+ var styles$c = {"sortableList":"cw-sortable-list-module_sortableList__PyLO-","sortableItem":"cw-sortable-list-module_sortableItem__FAnn2","readOnly":"cw-sortable-list-module_readOnly__r7GcH","dragging":"cw-sortable-list-module_dragging__MD715","moved":"cw-sortable-list-module_moved__sE6-N","expandedContent":"cw-sortable-list-module_expandedContent__Kocna","sortableHandle":"cw-sortable-list-module_sortableHandle__HvYBK","sortableContent":"cw-sortable-list-module_sortableContent__C6JhR","sortableTitle":"cw-sortable-list-module_sortableTitle__EgWXr","sortableExtraContent":"cw-sortable-list-module_sortableExtraContent__s4LSv","sortableActions":"cw-sortable-list-module_sortableActions__gwQOU","dropIndicator":"cw-sortable-list-module_dropIndicator__MNSF-","emptyMessage":"cw-sortable-list-module_emptyMessage__gMpaL"};
1829
+
1830
+ function CwSortableList({ items, onReorder, renderItem, className = '', movedItems = new Set(), emptyMessage = "No elements to show", readOnly = false, }) {
1831
+ const [draggedItem, setDraggedItem] = useState(null);
1832
+ const [dropIndicatorIndex, setDropIndicatorIndex] = useState(null);
1833
+ const [lastValidDropIndex, setLastValidDropIndex] = useState(null);
1834
+ const [expandedItems, setExpandedItems] = useState(new Set());
1835
+ const toggleExpanded = (itemId) => {
1836
+ setExpandedItems(prev => {
1837
+ const newSet = new Set(prev);
1838
+ if (newSet.has(itemId)) {
1839
+ newSet.delete(itemId);
1840
+ }
1841
+ else {
1842
+ newSet.add(itemId);
1843
+ }
1844
+ return newSet;
1845
+ });
1846
+ };
1847
+ const cleanupDragState = () => {
1848
+ setDraggedItem(null);
1849
+ setDropIndicatorIndex(null);
1850
+ setLastValidDropIndex(null);
1851
+ };
1852
+ const handleDragStart = (e, item) => {
1853
+ if (readOnly) {
1854
+ e.preventDefault();
1855
+ return;
1856
+ }
1857
+ setDraggedItem(item);
1858
+ setLastValidDropIndex(null);
1859
+ e.dataTransfer.effectAllowed = 'move';
1860
+ };
1861
+ const handleDragEnd = () => {
1862
+ if (draggedItem && lastValidDropIndex !== null) {
1863
+ const dragIndex = items.findIndex(item => item.id === draggedItem.id);
1864
+ if (dragIndex !== lastValidDropIndex && dragIndex !== lastValidDropIndex - 1) {
1865
+ const newItems = [...items];
1866
+ const [draggedElement] = newItems.splice(dragIndex, 1);
1867
+ let finalIndex = lastValidDropIndex;
1868
+ if (dragIndex < finalIndex)
1869
+ finalIndex -= 1;
1870
+ newItems.splice(finalIndex, 0, draggedElement);
1871
+ // Ahora pasamos el id del elemento movido al callback
1872
+ onReorder(newItems, draggedItem.id);
1873
+ }
1874
+ }
1875
+ cleanupDragState();
1876
+ };
1877
+ const handleDragOver = (e, index) => {
1878
+ e.preventDefault();
1879
+ if (!draggedItem || readOnly)
1880
+ return;
1881
+ const rect = e.currentTarget.getBoundingClientRect();
1882
+ const mouseY = e.clientY;
1883
+ const elementCenterY = rect.top + (rect.height / 2);
1884
+ const dropIndex = mouseY < elementCenterY ? index : index + 1;
1885
+ setLastValidDropIndex(dropIndex);
1886
+ if (dropIndicatorIndex !== dropIndex) {
1887
+ setDropIndicatorIndex(dropIndex);
1888
+ }
1889
+ };
1890
+ if (items.length === 0) {
1891
+ return (jsx("div", { className: `${styles$c.sortableList} ${styles$c.emptyState} ${className}`, children: jsx("div", { className: styles$c.emptyMessage, children: emptyMessage }) }));
1892
+ }
1893
+ return (jsx("div", { className: `${styles$c.sortableList} ${className}`, children: items.map((item, index) => {
1894
+ const { title, extraContent, actions, showHandle = true, expandedContent } = renderItem(item);
1895
+ const isDragging = draggedItem?.id === item.id;
1896
+ const isMoved = movedItems.has(item.id);
1897
+ const canExpand = Boolean(expandedContent);
1898
+ const isExpanded = expandedItems.has(item.id);
1899
+ return (jsxs(React__default.Fragment, { children: [dropIndicatorIndex === index && jsx("div", { className: styles$c.dropIndicator }), jsxs("div", { className: `${styles$c.sortableItem} ${isDragging ? styles$c.dragging : ''} ${isMoved ? styles$c.moved : ''} ${readOnly ? styles$c.readOnly : ''}`, draggable: !readOnly, onDragStart: (e) => handleDragStart(e, item), onDragOver: (e) => handleDragOver(e, index), onDragEnd: handleDragEnd, children: [jsxs("header", { children: [canExpand ? (jsx(CwButton, { variant: "icon", onClick: () => toggleExpanded(item.id), type: "button", title: isExpanded ? "Collapse" : "Expand", icon: isExpanded ? "chevron-up" : "chevron-down" })) : showHandle ? (jsx("div", { className: styles$c.sortableHandle, children: jsx(CwIcon, { iconId: "grip-dots" }) })) : null, jsxs("div", { className: styles$c.sortableContent, children: [jsx("div", { className: styles$c.sortableTitle, children: title }), extraContent && jsx("div", { className: styles$c.sortableExtraContent, children: extraContent })] }), jsx("div", { className: styles$c.sortableActions, children: actions })] }), isExpanded && expandedContent && (jsx("div", { className: styles$c.expandedContent, children: expandedContent }))] }), !readOnly && dropIndicatorIndex === items.length && index === items.length - 1 && (jsx("div", { className: styles$c.dropIndicator }))] }, item.id));
1900
+ }) }));
1901
+ }
1902
+
1903
+ function useSortableList(initialItems) {
1904
+ const [items, setItems] = useState(initialItems);
1905
+ const [originalItems, setOriginalItems] = useState(initialItems);
1906
+ const [hasChanges, setHasChanges] = useState(false);
1907
+ const [movedItems, setMovedItems] = useState(new Set());
1908
+ const [resetKey, setResetKey] = useState(0);
1909
+ const handleReorder = useCallback((newItems, movedId) => {
1910
+ setItems(newItems);
1911
+ if (movedId !== undefined) {
1912
+ setMovedItems(prev => new Set(prev).add(movedId));
1913
+ }
1914
+ setHasChanges(true);
1915
+ }, []);
1916
+ const addItem = (newItem) => {
1917
+ setItems(prev => [...prev, newItem]);
1918
+ setHasChanges(true);
1919
+ };
1920
+ const removeItem = (id) => {
1921
+ setItems(prev => prev.filter(item => item.id !== id));
1922
+ setHasChanges(true);
1923
+ };
1924
+ const handleSave = async (onSave) => {
1925
+ await onSave(items);
1926
+ setOriginalItems(items);
1927
+ setMovedItems(new Set());
1928
+ setHasChanges(false);
1929
+ setResetKey(prev => prev + 1);
1930
+ };
1931
+ const updateItems = (newItems) => {
1932
+ setItems(newItems);
1933
+ setOriginalItems(newItems); // Keep original items in sync
1934
+ setHasChanges(true);
1935
+ };
1936
+ const handleDiscard = () => {
1937
+ setItems(originalItems);
1938
+ setMovedItems(new Set());
1939
+ setHasChanges(false);
1940
+ setResetKey(prev => prev + 1);
1941
+ };
1942
+ return {
1943
+ items,
1944
+ setItems: updateItems,
1945
+ handleReorder,
1946
+ handleSave,
1947
+ handleDiscard,
1948
+ addItem,
1949
+ movedItems,
1950
+ removeItem,
1951
+ hasChanges,
1952
+ resetKey,
1953
+ };
1954
+ }
1955
+
1449
1956
  /**
1450
1957
  * A table with expandable row groups.
1451
1958
  * @param props The data to display
@@ -1566,7 +2073,7 @@ function CwFileUpload(fileUploadProps) {
1566
2073
  return (jsxs("div", { children: [jsxs("div", { className: "row", children: [jsx("input", { className: "cw-button", type: "file", accept: fileUploadProps.accept, readOnly: true, placeholder: "No file selected...", onChange: handleFileChange }), previewURL && (jsx("div", { className: "row", children: jsx("img", { src: previewURL, alt: "Preview", style: { maxWidth: "200px", maxHeight: "200px" } }) }))] }), error && jsx("div", { className: "row error", children: error }), jsx("div", { className: "row", children: jsxs("label", { children: ["Please note: File/image has to be in ", fileUploadProps.acceptString, " format", fileUploadProps.sizeString && `, ${fileUploadProps.sizeString}`] }) })] }));
1567
2074
  }
1568
2075
 
1569
- var styles$8 = {"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"};
2076
+ var styles$b = {"fileUploadContainer":"cw-file-upload-multiple-module_fileUploadContainer__liEc1","hiddenInput":"cw-file-upload-multiple-module_hiddenInput__TZBBI","uploadArea":"cw-file-upload-multiple-module_uploadArea__DdOhs","uploadAreaDisabled":"cw-file-upload-multiple-module_uploadAreaDisabled__VWeFX","uploadTitle":"cw-file-upload-multiple-module_uploadTitle__gjRk8","uploadSubtitle":"cw-file-upload-multiple-module_uploadSubtitle__Z0S5t","filesContainer":"cw-file-upload-multiple-module_filesContainer__g44PY","fileItem":"cw-file-upload-multiple-module_fileItem__w27Dg","fileIcon":"cw-file-upload-multiple-module_fileIcon__iJJUX","fileExtension":"cw-file-upload-multiple-module_fileExtension__vOuHv","fileInfo":"cw-file-upload-multiple-module_fileInfo__R5ZTv","fileName":"cw-file-upload-multiple-module_fileName__DjepK","fileSize":"cw-file-upload-multiple-module_fileSize__b8GSm","smallButton":"cw-file-upload-multiple-module_smallButton__siUAh"};
1570
2077
 
1571
2078
  function CwFileUploadMultiple(fileUploadProps) {
1572
2079
  const fileInputRef = useRef(null);
@@ -1708,7 +2215,7 @@ function CwFileUploadMultiple(fileUploadProps) {
1708
2215
  }
1709
2216
  }
1710
2217
  };
1711
- return (jsxs("div", { className: `${styles$8.fileUploadContainer} ${fileUploadProps.className}`, children: [jsx("input", { ref: fileInputRef, type: "file", name: fileUploadProps.name, accept: fileUploadProps.accept, multiple: fileUploadProps.multiple, onChange: handleFileSelect, disabled: fileUploadProps.disabled, "aria-label": "files", className: styles$8.hiddenInput }), selectedFiles.length === 0 ? (jsxs("div", { className: `${styles$8.uploadArea} ${fileUploadProps.disabled ? styles$8.uploadAreaDisabled : ''}`, onDragOver: handleDragOver, onDrop: handleDrop, onClick: !fileUploadProps.disabled ? handleButtonClick : undefined, children: [jsx(CwIcon, { iconId: "upload" }), jsx("p", { className: `${styles$8.uploadTitle}`, children: fileUploadProps.disabled ? 'Upload disabled' : 'Click to upload or drag and drop' }), jsxs("p", { className: `${styles$8.uploadSubtitle}`, children: [fileUploadProps.accept ? `Accepted files: ${fileUploadProps.accept}` : 'All file types accepted', !fileUploadProps.multiple && ' (Single file only)'] })] })) : (jsxs("div", { className: styles$8.filesContainer, children: [jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsxs("small", { className: styles$8.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$8.fileItem, children: [jsxs("div", { className: styles$8.fileIcon, children: [jsx(CwIcon, { iconId: "page" }), jsx("span", { className: styles$8.fileExtension, children: getFileExtension(file.name) })] }), jsxs("div", { className: styles$8.fileInfo, children: [jsx("p", { className: styles$8.fileName, children: file.name }), jsxs("p", { className: styles$8.fileSize, children: [(file.size / 1024).toFixed(1), " KB"] })] }), jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => removeFile(index), className: styles$8.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 }))] }))] }));
2218
+ return (jsxs("div", { className: `${styles$b.fileUploadContainer} ${fileUploadProps.className}`, children: [jsx("input", { ref: fileInputRef, type: "file", name: fileUploadProps.name, accept: fileUploadProps.accept, multiple: fileUploadProps.multiple, onChange: handleFileSelect, disabled: fileUploadProps.disabled, "aria-label": "files", className: styles$b.hiddenInput }), selectedFiles.length === 0 ? (jsxs("div", { className: `${styles$b.uploadArea} ${fileUploadProps.disabled ? styles$b.uploadAreaDisabled : ''}`, onDragOver: handleDragOver, onDrop: handleDrop, onClick: !fileUploadProps.disabled ? handleButtonClick : undefined, children: [jsx(CwIcon, { iconId: "upload" }), jsx("p", { className: `${styles$b.uploadTitle}`, children: fileUploadProps.disabled ? 'Upload disabled' : 'Click to upload or drag and drop' }), jsxs("p", { className: `${styles$b.uploadSubtitle}`, children: [fileUploadProps.accept ? `Accepted files: ${fileUploadProps.accept}` : 'All file types accepted', !fileUploadProps.multiple && ' (Single file only)'] })] })) : (jsxs("div", { className: styles$b.filesContainer, children: [jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsxs("small", { className: styles$b.filesCount, children: [selectedFiles.length, " file", selectedFiles.length !== 1 ? 's' : '', " selected"] }), jsx(CwButton, { onClick: removeAllFiles, disabled: fileUploadProps.disabled, color: "danger", variant: "outline", icon: "delete", text: "Clear all" })] }), selectedFiles.map((file, index) => (jsxs("div", { className: styles$b.fileItem, children: [jsxs("div", { className: styles$b.fileIcon, children: [jsx(CwIcon, { iconId: "page" }), jsx("span", { className: styles$b.fileExtension, children: getFileExtension(file.name) })] }), jsxs("div", { className: styles$b.fileInfo, children: [jsx("p", { className: styles$b.fileName, children: file.name }), jsxs("p", { className: styles$b.fileSize, children: [(file.size / 1024).toFixed(1), " KB"] })] }), jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => removeFile(index), className: styles$b.smallButton })] }, index))), fileUploadProps.multiple && (jsx(CwButton, { text: "Add More Files", icon: "plus", variant: "outline", onClick: handleButtonClick, disabled: fileUploadProps.disabled })), !fileUploadProps.multiple && (jsx(CwButton, { text: "Change File", icon: "refresh", onClick: handleButtonClick, disabled: fileUploadProps.disabled }))] }))] }));
1712
2219
  }
1713
2220
 
1714
2221
  function CwInput(CwInputProps) {
@@ -1751,6 +2258,355 @@ function CwDigit(props) {
1751
2258
  return (jsx("div", { className: "cw-input-text", children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: "number", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
1752
2259
  }
1753
2260
 
2261
+ var styles$a = {"colorPreview":"cw-color-picker-module_colorPreview__ylJcD","hueBar":"cw-color-picker-module_hueBar__bFhyC","hueBarSlider":"cw-color-picker-module_hueBarSlider__D53IV","colorPickerInteractiveArea":"cw-color-picker-module_colorPickerInteractiveArea__KZFR1","colorArea":"cw-color-picker-module_colorArea__xgpSE","colorAreaOverlay":"cw-color-picker-module_colorAreaOverlay__pmgOc","hueBackground":"cw-color-picker-module_hueBackground__Mks78","whiteGradient":"cw-color-picker-module_whiteGradient__Bt-fU","blackGradient":"cw-color-picker-module_blackGradient__VnEKJ","colorAreaCursor":"cw-color-picker-module_colorAreaCursor__lotg3"};
2262
+
2263
+ const CwColorPicker = ({ initialColor, onChange, previewText = "Color preview" }) => {
2264
+ const [rgb, setRgb] = useState({ r: 255, g: 255, b: 255 });
2265
+ const [hsv, setHsv] = useState({ h: 0, s: 0, v: 100 });
2266
+ const [hexColor, setHexColor] = useState(initialColor || '#FFFFFF');
2267
+ const [initialized, setInitialized] = useState(false);
2268
+ const [inputMode, setInputMode] = useState('hex');
2269
+ // Prevent infinite update loops
2270
+ const isUpdatingRef = useRef(false);
2271
+ const hueBarRef = useRef(null);
2272
+ const colorAreaRef = useRef(null);
2273
+ // Convert HSV to RGB
2274
+ const hsvToRgb = (h, s, v) => {
2275
+ h = h / 360;
2276
+ s = s / 100;
2277
+ v = v / 100;
2278
+ let r = 0, g = 0, b = 0;
2279
+ if (s === 0) {
2280
+ r = g = b = v;
2281
+ }
2282
+ else {
2283
+ const i = Math.floor(h * 6);
2284
+ const f = h * 6 - i;
2285
+ const p = v * (1 - s);
2286
+ const q = v * (1 - f * s);
2287
+ const t = v * (1 - (1 - f) * s);
2288
+ switch (i % 6) {
2289
+ case 0:
2290
+ r = v;
2291
+ g = t;
2292
+ b = p;
2293
+ break;
2294
+ case 1:
2295
+ r = q;
2296
+ g = v;
2297
+ b = p;
2298
+ break;
2299
+ case 2:
2300
+ r = p;
2301
+ g = v;
2302
+ b = t;
2303
+ break;
2304
+ case 3:
2305
+ r = p;
2306
+ g = q;
2307
+ b = v;
2308
+ break;
2309
+ case 4:
2310
+ r = t;
2311
+ g = p;
2312
+ b = v;
2313
+ break;
2314
+ case 5:
2315
+ r = v;
2316
+ g = p;
2317
+ b = q;
2318
+ break;
2319
+ }
2320
+ }
2321
+ return {
2322
+ r: Math.round(r * 255),
2323
+ g: Math.round(g * 255),
2324
+ b: Math.round(b * 255)
2325
+ };
2326
+ };
2327
+ // Convert RGB to HSV
2328
+ const rgbToHsv = (r, g, b) => {
2329
+ r /= 255;
2330
+ g /= 255;
2331
+ b /= 255;
2332
+ const max = Math.max(r, g, b);
2333
+ const min = Math.min(r, g, b);
2334
+ let h = 0;
2335
+ const v = max;
2336
+ const d = max - min;
2337
+ const s = max === 0 ? 0 : d / max;
2338
+ if (max === min) {
2339
+ h = 0;
2340
+ }
2341
+ else {
2342
+ switch (max) {
2343
+ case r:
2344
+ h = (g - b) / d + (g < b ? 6 : 0);
2345
+ break;
2346
+ case g:
2347
+ h = (b - r) / d + 2;
2348
+ break;
2349
+ case b:
2350
+ h = (r - g) / d + 4;
2351
+ break;
2352
+ }
2353
+ h /= 6;
2354
+ }
2355
+ return {
2356
+ h: Math.round(h * 360),
2357
+ s: Math.round(s * 100),
2358
+ v: Math.round(v * 100)
2359
+ };
2360
+ };
2361
+ // Convert RGB to HEX
2362
+ const rgbToHex = (r, g, b) => {
2363
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();
2364
+ };
2365
+ // Initialize color values from initial color prop
2366
+ useEffect(() => {
2367
+ if (!initialized && initialColor) {
2368
+ const hexToRgb = (hex) => {
2369
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
2370
+ return result ? {
2371
+ r: parseInt(result[1], 16),
2372
+ g: parseInt(result[2], 16),
2373
+ b: parseInt(result[3], 16)
2374
+ } : { r: 255, g: 255, b: 255 };
2375
+ };
2376
+ const initialRgb = hexToRgb(initialColor);
2377
+ setRgb(initialRgb);
2378
+ setHexColor(initialColor);
2379
+ const initialHsv = rgbToHsv(initialRgb.r, initialRgb.g, initialRgb.b);
2380
+ setHsv(initialHsv);
2381
+ setInitialized(true);
2382
+ }
2383
+ }, [initialColor, initialized]);
2384
+ // Update color state and notify parent component of changes
2385
+ const updateColorState = useCallback((newRgb, newHsv) => {
2386
+ if (isUpdatingRef.current)
2387
+ return;
2388
+ isUpdatingRef.current = true;
2389
+ // Update RGB and HSV
2390
+ setRgb(newRgb);
2391
+ setHsv(newHsv);
2392
+ // Calculate and update HEX
2393
+ const newHex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);
2394
+ setHexColor(newHex);
2395
+ // Notify changes after render cycle
2396
+ requestAnimationFrame(() => {
2397
+ onChange(newHex, newRgb, newHsv);
2398
+ isUpdatingRef.current = false;
2399
+ });
2400
+ }, [onChange]);
2401
+ const handleRgbChange = (e) => {
2402
+ const { name, value } = e.target;
2403
+ const numValue = Math.min(255, Math.max(0, parseInt(value, 10) || 0));
2404
+ const newRgb = { ...rgb, [name]: numValue };
2405
+ const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
2406
+ updateColorState(newRgb, newHsv);
2407
+ };
2408
+ const toggleInputMode = () => {
2409
+ setInputMode(inputMode === 'hex' ? 'rgb' : 'hex');
2410
+ };
2411
+ const handleHexChange = (e) => {
2412
+ const { value } = e.target;
2413
+ setHexColor(value);
2414
+ // Validate and convert HEX to RGB
2415
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(value);
2416
+ if (result) {
2417
+ const newRgb = {
2418
+ r: parseInt(result[1], 16),
2419
+ g: parseInt(result[2], 16),
2420
+ b: parseInt(result[3], 16)
2421
+ };
2422
+ const newHsv = rgbToHsv(newRgb.r, newRgb.g, newRgb.b);
2423
+ // Update RGB and HSV without triggering full cycle
2424
+ setRgb(newRgb);
2425
+ setHsv(newHsv);
2426
+ // Notify changes
2427
+ requestAnimationFrame(() => {
2428
+ onChange(value, newRgb, newHsv);
2429
+ });
2430
+ }
2431
+ };
2432
+ // Handle hue bar click
2433
+ const handleHueBarClick = (e) => {
2434
+ if (!hueBarRef.current)
2435
+ return;
2436
+ const rect = hueBarRef.current.getBoundingClientRect();
2437
+ const height = rect.height;
2438
+ const y = e.clientY - rect.top;
2439
+ // Calculate hue value based on vertical position (0-360)
2440
+ const newHue = Math.round(360 * (1 - Math.min(1, Math.max(0, y / height))));
2441
+ const newHsv = { ...hsv, h: newHue };
2442
+ const newRgb = hsvToRgb(newHue, hsv.s, hsv.v);
2443
+ updateColorState(newRgb, newHsv);
2444
+ };
2445
+ // Handle color area click (saturation/value)
2446
+ const handleColorAreaClick = (e) => {
2447
+ if (!colorAreaRef.current)
2448
+ return;
2449
+ const rect = colorAreaRef.current.getBoundingClientRect();
2450
+ const width = rect.width;
2451
+ const height = rect.height;
2452
+ const x = e.clientX - rect.left;
2453
+ const y = e.clientY - rect.top;
2454
+ // Calculate saturation and value based on position
2455
+ const newSaturation = Math.round(100 * Math.min(1, Math.max(0, x / width)));
2456
+ const newValue = Math.round(100 * (1 - Math.min(1, Math.max(0, y / height))));
2457
+ const newHsv = { ...hsv, s: newSaturation, v: newValue };
2458
+ const newRgb = hsvToRgb(hsv.h, newSaturation, newValue);
2459
+ updateColorState(newRgb, newHsv);
2460
+ };
2461
+ // Calculate background color for the main area based on current hue
2462
+ const hueColor = hsvToRgb(hsv.h, 100, 100);
2463
+ const hueHex = rgbToHex(hueColor.r, hueColor.g, hueColor.b);
2464
+ return (jsxs("div", { className: "cw-flex-column cw-gap-small", children: [jsxs("div", { className: "cw-flex-row cw-align-between-center cw-gap-small", children: [jsx("div", { className: styles$a.colorPreview, style: { backgroundColor: hexColor, color: getContrastColor(hexColor) }, children: previewText }), jsx("button", { type: "button", className: "cw-button", onClick: toggleInputMode, style: { minWidth: "3ch" }, children: inputMode === 'hex' ? 'RGB' : 'HEX' })] }), jsx("div", { className: "color-inputs-row", children: inputMode === 'hex' ? (jsx("input", { type: "text", value: hexColor, onChange: handleHexChange })) : (jsxs("div", { className: "cw-grid-base-3 cw-gap-small", children: [jsxs("div", { children: [jsx("label", { children: "R:" }), jsx("input", { type: "number", name: "r", min: "0", max: "255", value: rgb.r, onChange: handleRgbChange })] }), jsxs("div", { children: [jsx("label", { children: "G:" }), jsx("input", { type: "number", name: "g", min: "0", max: "255", value: rgb.g, onChange: handleRgbChange })] }), jsxs("div", { children: [jsx("label", { children: "B:" }), jsx("input", { type: "number", name: "b", min: "0", max: "255", value: rgb.b, onChange: handleRgbChange })] })] })) }), jsxs("div", { className: styles$a.colorPickerInteractiveArea, children: [jsx("div", { className: styles$a.hueBar, ref: hueBarRef, onClick: handleHueBarClick, children: jsx("div", { className: styles$a.hueBarSlider, style: { top: `${(360 - hsv.h) / 360 * 100}%` } }) }), jsxs("div", { className: styles$a.colorArea, ref: colorAreaRef, onClick: handleColorAreaClick, children: [jsxs("div", { className: styles$a.colorAreaOverlay, children: [jsx("div", { className: styles$a.hueBackground, style: { backgroundColor: hueHex } }), jsx("div", { className: styles$a.whiteGradient }), jsx("div", { className: styles$a.blackGradient })] }), jsx("div", { className: styles$a.colorAreaCursor, style: {
2465
+ left: `${hsv.s}%`,
2466
+ top: `${100 - hsv.v}%`
2467
+ } })] })] })] }));
2468
+ };
2469
+
2470
+ var styles$9 = {"selectColor":"cw-input-color-module_selectColor__DTo3V","disabled":"cw-input-color-module_disabled__O1fK5","colorDropdown":"cw-input-color-module_colorDropdown__pX2bc"};
2471
+
2472
+ const CwInputColor = ({ value, onChange, previewText = "Color preview", disabled = false, width = '4rem', height = '2rem' }) => {
2473
+ const [isOpen, setIsOpen] = useState(false);
2474
+ const containerRef = useRef(null);
2475
+ const dropdownRef = useRef(null);
2476
+ const DROPDOWN_WIDTH = 280;
2477
+ const DROPDOWN_HEIGHT = 250;
2478
+ const MARGIN = 8;
2479
+ // Calculate dropdown position
2480
+ const dropdownStyle = useMemo(() => {
2481
+ if (!isOpen || !containerRef.current) {
2482
+ return { display: 'none' };
2483
+ }
2484
+ const rect = containerRef.current.getBoundingClientRect();
2485
+ const viewportWidth = window.innerWidth;
2486
+ const viewportHeight = window.innerHeight;
2487
+ // Calculate initial positions
2488
+ let top = rect.bottom + MARGIN;
2489
+ let left = rect.left;
2490
+ // Adjust horizontal position if needed
2491
+ if (left + DROPDOWN_WIDTH > viewportWidth - MARGIN) {
2492
+ // Try to align with right edge of trigger
2493
+ left = rect.right - DROPDOWN_WIDTH;
2494
+ // If still out of bounds, stick to right edge of viewport
2495
+ if (left < MARGIN) {
2496
+ left = viewportWidth - DROPDOWN_WIDTH - MARGIN;
2497
+ }
2498
+ }
2499
+ // Adjust vertical position if needed
2500
+ if (top + DROPDOWN_HEIGHT > viewportHeight - MARGIN) {
2501
+ // Try to show above the trigger
2502
+ const topPosition = rect.top - DROPDOWN_HEIGHT - MARGIN;
2503
+ // Only use top position if there's enough space
2504
+ if (topPosition > MARGIN) {
2505
+ top = topPosition;
2506
+ }
2507
+ else {
2508
+ // Keep at bottom but ensure some visibility
2509
+ top = Math.min(top, viewportHeight - DROPDOWN_HEIGHT - MARGIN);
2510
+ }
2511
+ }
2512
+ return {
2513
+ position: 'fixed',
2514
+ top: `${Math.max(MARGIN, top)}px`,
2515
+ left: `${Math.max(MARGIN, left)}px`,
2516
+ zIndex: 1000,
2517
+ width: `${DROPDOWN_WIDTH}px`
2518
+ };
2519
+ }, [isOpen]);
2520
+ const handleToggle = () => {
2521
+ if (disabled)
2522
+ return;
2523
+ setIsOpen(prev => !prev);
2524
+ };
2525
+ // Recalculate position on scroll/resize
2526
+ useEffect(() => {
2527
+ if (!isOpen)
2528
+ return;
2529
+ const handlePositionUpdate = () => {
2530
+ // Force re-render to recalculate position
2531
+ setIsOpen(false);
2532
+ requestAnimationFrame(() => setIsOpen(true));
2533
+ };
2534
+ // Debounced handlers
2535
+ let resizeTimeout;
2536
+ let scrollTimeout;
2537
+ const handleResize = () => {
2538
+ clearTimeout(resizeTimeout);
2539
+ resizeTimeout = setTimeout(handlePositionUpdate, 100);
2540
+ };
2541
+ const handleScroll = () => {
2542
+ clearTimeout(scrollTimeout);
2543
+ scrollTimeout = setTimeout(handlePositionUpdate, 50);
2544
+ };
2545
+ window.addEventListener('resize', handleResize);
2546
+ window.addEventListener('scroll', handleScroll, true);
2547
+ return () => {
2548
+ window.removeEventListener('resize', handleResize);
2549
+ window.removeEventListener('scroll', handleScroll, true);
2550
+ clearTimeout(resizeTimeout);
2551
+ clearTimeout(scrollTimeout);
2552
+ };
2553
+ }, [isOpen]);
2554
+ // Handle outside clicks and escape
2555
+ useEffect(() => {
2556
+ if (!isOpen)
2557
+ return;
2558
+ const handleClickOutside = (event) => {
2559
+ const target = event.target;
2560
+ // Check if click is outside both container and dropdown
2561
+ if (containerRef.current &&
2562
+ !containerRef.current.contains(target) &&
2563
+ dropdownRef.current &&
2564
+ !dropdownRef.current.contains(target)) {
2565
+ setIsOpen(false);
2566
+ }
2567
+ };
2568
+ const handleEscape = (event) => {
2569
+ if (event.key === 'Escape') {
2570
+ setIsOpen(false);
2571
+ // Return focus to trigger
2572
+ containerRef.current?.focus();
2573
+ }
2574
+ };
2575
+ // Use capture phase for better event handling
2576
+ document.addEventListener('click', handleClickOutside, true);
2577
+ document.addEventListener('keydown', handleEscape);
2578
+ return () => {
2579
+ document.removeEventListener('click', handleClickOutside, true);
2580
+ document.removeEventListener('keydown', handleEscape);
2581
+ };
2582
+ }, [isOpen]);
2583
+ const handleColorChange = (color) => {
2584
+ onChange(color);
2585
+ };
2586
+ const handleKeyDown = (e) => {
2587
+ if (disabled)
2588
+ return;
2589
+ switch (e.key) {
2590
+ case 'Enter':
2591
+ case ' ':
2592
+ e.preventDefault();
2593
+ handleToggle();
2594
+ break;
2595
+ case 'Escape':
2596
+ if (isOpen) {
2597
+ e.preventDefault();
2598
+ setIsOpen(false);
2599
+ }
2600
+ break;
2601
+ }
2602
+ };
2603
+ return (jsxs(Fragment, { children: [jsx("div", { ref: containerRef, onClick: handleToggle, className: `${styles$9.selectColor} ${disabled ? styles$9.disabled : ''}`, style: {
2604
+ width,
2605
+ height,
2606
+ backgroundColor: value,
2607
+ }, "aria-label": "Open color picker", "aria-expanded": isOpen, "aria-haspopup": "dialog", role: "button", tabIndex: disabled ? -1 : 0, onKeyDown: handleKeyDown }), isOpen && createPortal(jsx("div", { ref: dropdownRef, className: styles$9.colorDropdown, style: dropdownStyle, role: "dialog", "aria-modal": "true", "aria-label": "Color picker", children: jsx(CwColorPicker, { initialColor: value, onChange: handleColorChange, previewText: previewText }) }), document.body)] }));
2608
+ };
2609
+
1754
2610
  /**
1755
2611
  * Input for entering a string of text.
1756
2612
  * @remarks
@@ -1771,8 +2627,11 @@ function CwDigit(props) {
1771
2627
  * ```
1772
2628
  */
1773
2629
  function CwInputText(props) {
1774
- const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
1775
- 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: props.type ?? "text", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
2630
+ const { alignProps, buttonProps, iconProps, labelProps, className, ...inputProps } = props;
2631
+ const containerClassName = className
2632
+ ? `cw-input-text ${className}`
2633
+ : "cw-input-text";
2634
+ return (jsx("div", { className: containerClassName, children: jsxs(CwAlign, { ...alignProps, itemProp: inputProps.required === true ? "required" : "", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { type: props.type ?? "text", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }) }));
1776
2635
  }
1777
2636
 
1778
2637
  /**
@@ -1800,7 +2659,7 @@ function CwInputNumber(CwInputNumberProps) {
1800
2659
  CwInputNumberProps.onChange(e.target.value);
1801
2660
  };
1802
2661
  return (jsxs("div", { className: CwInputNumberProps.labelPosition == "column"
1803
- ? "cw-flex-column"
2662
+ ? "cw-flex-column cw-gap-none"
1804
2663
  : "cw-flex-row", children: [jsx("label", { className: CwInputNumberProps.disabled === true
1805
2664
  ? CwInputNumberProps.labelClassName + " " + "cw_label_text cw_label_text_disabled"
1806
2665
  : CwInputNumberProps.labelClassName + " " + "cw_label_text", children: CwInputNumberProps.labelName }), jsx("input", { id: CwInputNumberProps.id, type: "number", value: CwInputNumberProps.value, onChange: e => handleChange(e), className: CwInputNumberProps.className + " " + " cw-input-number", placeholder: CwInputNumberProps.placeholder == undefined ? "Write a number please" : CwInputNumberProps.placeholder, style: CwInputNumberProps.style, disabled: CwInputNumberProps.disabled, required: CwInputNumberProps.required, step: CwInputNumberProps.step, min: CwInputNumberProps.min, max: CwInputNumberProps.max })] }));
@@ -2238,7 +3097,7 @@ const CwImageArea = forwardRef((props, ref) => {
2238
3097
  });
2239
3098
  CwImageArea.displayName = "CwImageArea";
2240
3099
 
2241
- var styles$7 = {"cw-weekday-selector":"cw-weekday-selector-module_cw-weekday-selector__Iz4GZ"};
3100
+ var styles$8 = {"cw-weekday-selector":"cw-weekday-selector-module_cw-weekday-selector__Iz4GZ"};
2242
3101
 
2243
3102
  /**
2244
3103
  * This class represents a week where days can be selected or unselected
@@ -2378,34 +3237,30 @@ const CwWeekdaySelector = ({ value = "", onChange, disabled = false }) => {
2378
3237
  setSelectedDays(newWeekdays);
2379
3238
  onChange?.(newWeekdays.toString());
2380
3239
  };
2381
- return (jsx("div", { className: styles$7["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))) }));
3240
+ return (jsx("div", { className: styles$8["cw-weekday-selector"], children: Weekdays.getFullWeek().map(day => (jsx("input", { type: "checkbox", "data-day": day, checked: selectedDays.toArray().includes(day), onChange: (e) => handleChange(day, e.target.checked), disabled: disabled }, day))) }));
2382
3241
  };
2383
3242
 
2384
3243
  function CwCheckbox(CwCheckboxProps) {
2385
3244
  const handleChange = (e) => {
2386
- CwCheckboxProps.onChange(e.target.checked);
3245
+ CwCheckboxProps.onChange?.(e.target.checked);
2387
3246
  };
3247
+ const inputElement = (jsx("input", { id: CwCheckboxProps.id, type: "checkbox", checked: CwCheckboxProps.checked, onChange: e => handleChange(e), className: CwCheckboxProps.className ?? '', style: CwCheckboxProps.style, disabled: CwCheckboxProps.disabled }));
3248
+ if (!CwCheckboxProps.labelName) {
3249
+ return inputElement;
3250
+ }
2388
3251
  return (jsxs("div", { className: CwCheckboxProps.labelPosition === "inline"
2389
3252
  ? "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer
2390
3253
  : CwCheckboxProps.labelPosition === "column"
2391
3254
  ? "cw_checkboxContent cwellt_flex_column" + " " + CwCheckboxProps.classNameContainer
2392
- : "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [jsx("input", { id: CwCheckboxProps.id, type: "checkbox", checked: CwCheckboxProps.checked, onChange: e => handleChange(e), className: "cw_checkbox " + (CwCheckboxProps.className ?? ''), style: CwCheckboxProps.style, disabled: CwCheckboxProps.disabled }), CwCheckboxProps.labelName ? (jsx("label", { htmlFor: CwCheckboxProps.id, className: CwCheckboxProps.labelClassName, children: CwCheckboxProps.labelName })) : null] }));
3255
+ : "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer, style: CwCheckboxProps.styleContainer, children: [inputElement, CwCheckboxProps.labelName ? (jsx("label", { htmlFor: CwCheckboxProps.id, className: CwCheckboxProps.labelClassName, children: CwCheckboxProps.labelName })) : null] }));
2393
3256
  }
2394
3257
 
2395
- /**
2396
- * Toggle-styled checkbox
2397
- * @remarks
2398
- * ```txt
2399
- * ▁▁▁▁
2400
- * ( ⦿)
2401
- * ▔▔▔▔
2402
- * ```
2403
- * @example
2404
- * <CwToggle checked/>
2405
- */
2406
3258
  function CwToggle(props) {
2407
- const { labelProps, buttonProps, iconProps, ...inputProps } = props;
2408
- return (jsxs("div", { className: "cw-toggle", children: [labelProps && (jsxs(CwLabel, { ...labelProps, children: [iconProps && jsx(CwIcon, { ...iconProps }), labelProps.text] })), jsx("input", { className: "cw-toggle", type: "checkbox", ...inputProps }), buttonProps && jsx(CwButton, { ...buttonProps })] }));
3259
+ const { labelProps, labelText, iconProps, alignment = "row", className, ...inputProps } = props;
3260
+ const displayText = labelText || labelProps?.text;
3261
+ return (jsx("div", { className: `cw-toggle${className ? ` ${className}` : ''}`, children: jsxs("label", { className: "cw-toggle-label", "data-direction": alignment, children: [displayText && (jsxs("span", { className: "cw-icon-text", children: [iconProps && jsx(CwIcon, { ...iconProps }), displayText] })), jsx("input", {
3262
+ //data-color={color}
3263
+ type: "checkbox", ...inputProps })] }) }));
2409
3264
  }
2410
3265
 
2411
3266
  /**
@@ -2506,179 +3361,20 @@ function CwDropdownContainer(dropDownContainerProps) {
2506
3361
  };
2507
3362
  }, []);
2508
3363
  // #endregion
2509
- return (jsx("div", { className: dropDownContainerProps.dropDownState
2510
- ? "cwellt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_rel" +
2511
- " " +
2512
- dropDownContainerProps.className
2513
- : "cwellt_display_none", onKeyDown: event_keyDown => onKeyPressDropDownContainer(event_keyDown), onMouseLeave: event_onMouseLeave => onMouseLeaveDropDownContainer(event_onMouseLeave), tabIndex: 0, children: jsx("div", { className: "cwellt_dropDownContainer", id: dropDownContainerProps.idDropDownContainer, ref: dropDownContainer_ref, children: jsx("div", { className: "cwellt_dropDown_listContainer", ref: dropDown_listContainer, children: dropDownContainerProps.children }) }) }));
2514
- }
2515
-
2516
- function CwDropdownFilter(CwelltDropDownFilterProps) {
2517
- // * Initializing by default false
2518
- const isVisibleDropDownFilter = CwelltDropDownFilterProps.DropDownFilterState !== null &&
2519
- CwelltDropDownFilterProps.DropDownFilterState !== undefined
2520
- ? CwelltDropDownFilterProps.DropDownFilterState
2521
- : false;
2522
- // * Click on content item
2523
- const hideDropDown = () => {
2524
- };
2525
- return (jsxs("div", { id: CwelltDropDownFilterProps.IdContent, className: CwelltDropDownFilterProps.ContentClassName + " " + "cwelltDropDownFilterContent", onClick: hideDropDown, style: CwelltDropDownFilterProps.StyleContent, children: [CwelltDropDownFilterProps.children, jsx("div", { className: isVisibleDropDownFilter
2526
- ? // * custom className
2527
- CwelltDropDownFilterProps.DropDownClassName + " " + "cwelltDropDownFilter"
2528
- : // * custom className
2529
- CwelltDropDownFilterProps.DropDownClassName + " " + "cwellt_display_none", style: CwelltDropDownFilterProps.StyleDropDownFilter, onMouseLeave: CwelltDropDownFilterProps.onMouseLeave, id: CwelltDropDownFilterProps.idDropDownFilter, children: jsx("div", { className: "cwelltDrop_filterItem", children: CwelltDropDownFilterProps?.DataSourceDropDownItem?.map(indexItem => {
2530
- return (jsx("span", { id: indexItem.IdDropDown_filter, className: "cwelltDropDownItem", children: indexItem.dropDownFilter_desc }));
2531
- }) }) })] }));
2532
- }
2533
-
2534
- function CwDropdownNavigation(CwelltDropDownNavigationProps) {
2535
- const [isButtonExpanded, setButtonExpanded] = useState(false);
2536
- const [isShowDropDownFilter, setShowDropDownFilter] = useState(false);
2537
- const buttonDropDownFilter = () => {
2538
- setButtonExpanded(!isButtonExpanded);
2539
- setShowDropDownFilter(!isShowDropDownFilter);
2540
- };
2541
- const clickItemHideDropDownFilter = () => {
2542
- setShowDropDownFilter(false);
2543
- };
2544
- const clickSubItemHideDropDownsFilter = () => {
2545
- // * Main dropDown
2546
- setShowDropDownFilter(false);
2547
- // * Item with subMenu
2548
- setFilterItem_descExpanded(false);
2549
- // * Submenu dropDown
2550
- setShowSubMenu(false);
2551
- };
2552
- const [isShowSubMenu, setShowSubMenu] = useState(false);
2553
- const [isFilterItem_descExpanded, setFilterItem_descExpanded] = useState(false);
2554
- const cwelltSubMenu = () => {
2555
- setShowSubMenu(!isShowSubMenu);
2556
- setFilterItem_descExpanded(!isFilterItem_descExpanded);
2557
- };
2558
- const hideDropDownContent = () => {
2559
- // * DropDownFilterCrewControl
2560
- const dropDownFilterCrewControl = document.getElementById("DropDownFilterCrewControl");
2561
- // * onMouseLeave [ dropDownFilterCrewControl ]
2562
- dropDownFilterCrewControl?.addEventListener("mouseleave", () => {
2563
- // * button className
2564
- setButtonExpanded(false);
2565
- // * DropDownFilterCrewControl
2566
- setShowDropDownFilter(false); // todo: Add animation to high content
2567
- // * Item with subMenu
2568
- setFilterItem_descExpanded(false);
2569
- // * SubMenu
2570
- setShowSubMenu(false);
2571
- });
2572
- };
2573
- // List subMenu
2574
- const dataSubMenu = [
2575
- {
2576
- IdDropDown_filter: 1,
2577
- dropDownFilter_desc: (jsx("span", { className: CwelltDropDownNavigationProps.onShowAsignedActive + " " + "cwelltFilterItem_desc", onClick: () => {
2578
- CwelltDropDownNavigationProps.onShowAsigned();
2579
- clickSubItemHideDropDownsFilter();
2580
- }, children: "Show asigned" }))
2581
- },
2582
- {
2583
- IdDropDown_filter: 2,
2584
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2585
- CwelltDropDownNavigationProps.onShowHotel();
2586
- clickSubItemHideDropDownsFilter();
2587
- }, children: "Show hotel" }))
2588
- },
2589
- {
2590
- IdDropDown_filter: 3,
2591
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2592
- CwelltDropDownNavigationProps.onShowWishes();
2593
- clickSubItemHideDropDownsFilter();
2594
- }, children: "Show wishes" }))
2595
- },
2596
- {
2597
- IdDropDown_filter: 4,
2598
- dropDownFilter_desc: jsx("span", { className: "cwelltLineDivider" })
2599
- },
2600
- {
2601
- IdDropDown_filter: 5,
2602
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2603
- CwelltDropDownNavigationProps.onShowTrainingAlerts();
2604
- clickSubItemHideDropDownsFilter();
2605
- }, children: "Show training alerts" }))
2606
- },
2607
- {
2608
- IdDropDown_filter: 6,
2609
- dropDownFilter_desc: jsx("span", { className: "cwelltLineDivider" })
2610
- },
2611
- {
2612
- IdDropDown_filter: 7,
2613
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2614
- CwelltDropDownNavigationProps.onSmartFilteringFlight();
2615
- clickSubItemHideDropDownsFilter();
2616
- }, children: "Smart filtering flight" }))
2617
- },
2618
- {
2619
- IdDropDown_filter: 7,
2620
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2621
- CwelltDropDownNavigationProps.onSmartFilteringEmployee();
2622
- clickSubItemHideDropDownsFilter();
2623
- }, children: "Smart filtering employee" }))
2624
- },
2625
- {
2626
- IdDropDown_filter: 8,
2627
- dropDownFilter_desc: jsx("span", { className: "cwelltLineDivider" })
2628
- },
2629
- {
2630
- IdDropDown_filter: 9,
2631
- dropDownFilter_desc: (jsxs("div", { className: "cwelltDropDownContentForm cwellt_content_r_spaceBetween_center", children: [jsx("span", { children: "Flight rows" }), jsx(InputNumber, { className: "cwellt_inputdf cwellt_inputdf_number", min: 1, max: 10, style: { width: "4em", marginRight: ".5em" } })] }))
2632
- },
2633
- {
2634
- IdDropDown_filter: 10,
2635
- dropDownFilter_desc: (jsxs("div", { className: "cwelltDropDownContentForm cwellt_content_r_spaceBetween_center", children: [jsx("span", { children: "Employee rows" }), jsx(InputNumber, { className: "cwellt_inputdf cwellt_inputdf_number", min: 1, max: 10, style: { width: "4em", marginRight: ".5em" } })] }))
2636
- }
2637
- ];
2638
- // * DataSource items
2639
- const dataSourceItemDropDown = [
2640
- {
2641
- IdDropDown_filter: 1,
2642
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2643
- CwelltDropDownNavigationProps.onShowChanges;
2644
- // clickItemHideDropDownFilter();
2645
- }, children: "Show changes" }))
2646
- },
2647
- {
2648
- IdDropDown_filter: 2,
2649
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2650
- CwelltDropDownNavigationProps.onShowVisibleChanges;
2651
- clickItemHideDropDownFilter();
2652
- }, children: "Save visible changes" }))
2653
- },
2654
- {
2655
- IdDropDown_filter: 3,
2656
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2657
- CwelltDropDownNavigationProps.onShowSkip;
2658
- clickItemHideDropDownFilter();
2659
- }, children: "Skip" }))
2660
- },
2661
- {
2662
- IdDropDown_filter: 4,
2663
- dropDownFilter_desc: (jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2664
- CwelltDropDownNavigationProps.onShowBulkDuties;
2665
- clickItemHideDropDownFilter();
2666
- }, children: "BulkDuties" }))
2667
- },
2668
- // View options
2669
- {
2670
- IdDropDown_filter: 6,
2671
- dropDownFilter_desc: (jsxs("div", { style: { width: "100%" }, children: [jsx("span", { className: isFilterItem_descExpanded
2672
- ? "cwelltFilterItem_desc FilterItem_descExpanded cwellt_justify_space_between"
2673
- : "cwelltFilterItem_desc FilterItem_descCollapsed cwellt_justify_space_between", onClick: cwelltSubMenu, children: "Show options" }), jsx(CwDropdownFilter, { DropDownFilterState: isShowSubMenu, DataSourceDropDownItem: dataSubMenu, StyleContent: { position: "absolute", right: "13em", top: "-9.5em" }, StyleDropDownFilter: { width: "16.9375em" } })] }))
2674
- }
2675
- ];
2676
- return (jsx(CwDropdownFilter, { IdContent: "DropDownFilterCrewControl", DropDownFilterState: isShowDropDownFilter, DataSourceDropDownItem: dataSourceItemDropDown, ContentClassName: "TestClassNameContent", DropDownClassName: "TestClassNameDropDown", StyleContent: { zIndex: 1000 }, StyleDropDownFilter: { width: "13.75em", position: "absolute", left: "-10em" }, children: jsx("button", { className: isButtonExpanded
2677
- ? "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenuExpanded"
2678
- : "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenu", onClick: buttonDropDownFilter, onMouseLeave: hideDropDownContent }) }));
3364
+ return (jsx("div", { className: `cw-dropdown-container ${dropDownContainerProps.className || ''}`, onKeyDown: onKeyPressDropDownContainer, onMouseLeave: onMouseLeaveDropDownContainer, tabIndex: 0, hidden: !dropDownContainerProps.dropDownState, children: jsx("div", { className: "cw-dropdown-list", id: dropDownContainerProps.idDropDownContainer, ref: dropDownContainer_ref, children: jsx("div", { ref: dropDown_listContainer, children: dropDownContainerProps.children }) }) }));
3365
+ }
3366
+
3367
+ function CwDropdownFilter(props) {
3368
+ // Determine visibility state
3369
+ const isVisible = props.DropDownFilterState ?? false;
3370
+ // Generate CSS classes
3371
+ const containerClassName = `cw-dropdown-filter ${props.isNested ? 'dropdown-nested' : ''}`.trim();
3372
+ // Only apply inline styles for width override if provided
3373
+ const inlineStyles = props.width ? { width: props.width } : undefined;
3374
+ return (jsxs("div", { id: props.IdContent, className: containerClassName, children: [props.children, isVisible && (jsx("nav", { className: "cw-dropdown-menu", style: inlineStyles, onMouseLeave: props.onMouseLeave, id: props.idDropDownFilter, role: "menu", children: jsx("ul", { role: "none", children: props.DataSourceDropDownItem?.map((item) => (jsx("li", { id: item.IdDropDown_filter, role: "menuitem", children: item.dropDownFilter_desc }, item.IdDropDown_filter))) }) }))] }));
2679
3375
  }
2680
3376
 
2681
- const { Option: Option$1, OptGroup } = Select;
3377
+ const { Option, OptGroup } = Select;
2682
3378
  class MultiSelect extends React.Component {
2683
3379
  constructor(Props) {
2684
3380
  super(Props);
@@ -2771,7 +3467,7 @@ class MultiSelect extends React.Component {
2771
3467
  ? "cwelltMultiSelect cwelltSelect cwelltSelectSimple cwelltMultiSelect_searchIcon"
2772
3468
  : "cwelltMultiSelect cwelltSelect cwelltSelectSimple", placeholder: "Search or filter...", dropdownClassName: this.state.isVisibleDropDown
2773
3469
  ? " cwelltSelectDropDown cwelltSelectDropDown_active"
2774
- : "cwelltSelectDropDown", value: this.props.selectedItems?.map(s => s.type + "_" + s.id), onClick: () => this.onClickSelect(), open: this.state.isVisibleDropDown, onDropdownVisibleChange: () => this.handleOnDropDownVisibleChange(), onKeyUp: e_KeyUp_select => this.onKeyUpSelect(e_KeyUp_select), children: this.props.selectLists.map((slArray, i) => (jsx(OptGroup, { label: slArray.length > 0 ? slArray[0]?.type : "", children: slArray.map(sl => (jsx(Option$1, { value: sl.type + "_" + sl.id, type: sl.type, description: sl.description, val: sl.id, children: jsx(Tag, { color: sl.color, children: sl.description }) }, sl.type + "_" + sl.id))) }, "_" + i))) }) }) }));
3470
+ : "cwelltSelectDropDown", value: this.props.selectedItems?.map(s => s.type + "_" + s.id), onClick: () => this.onClickSelect(), open: this.state.isVisibleDropDown, onDropdownVisibleChange: () => this.handleOnDropDownVisibleChange(), onKeyUp: e_KeyUp_select => this.onKeyUpSelect(e_KeyUp_select), children: this.props.selectLists.map((slArray, i) => (jsx(OptGroup, { label: slArray.length > 0 ? slArray[0]?.type : "", children: slArray.map(sl => (jsx(Option, { value: sl.type + "_" + sl.id, type: sl.type, description: sl.description, val: sl.id, children: jsx(Tag, { color: sl.color, children: sl.description }) }, sl.type + "_" + sl.id))) }, "_" + i))) }) }) }));
2775
3471
  }
2776
3472
  }
2777
3473
 
@@ -2793,7 +3489,7 @@ function itemsToMultiFilterTags(items, nameKey, valueKey, category, primaryColor
2793
3489
  function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
2794
3490
  // - Reference div content input search
2795
3491
  const headContent_ref = React.createRef();
2796
- const optionList = document.getElementsByClassName("cwelltOptionList");
3492
+ const optionList = document.getElementsByClassName("cw-multiselect-option-list");
2797
3493
  const refContent = useRef(null);
2798
3494
  // - Hooks show clear button
2799
3495
  const [_isShowClearButton, setShowClearButton] = useState(false);
@@ -2840,6 +3536,11 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
2840
3536
  }
2841
3537
  }
2842
3538
  };
3539
+ const handleBlur = (event) => {
3540
+ if (typeof cwelltFilterTabMultiSelectProps.onBlur === "function") {
3541
+ cwelltFilterTabMultiSelectProps.onBlur(event);
3542
+ }
3543
+ };
2843
3544
  const clickOptionList = () => {
2844
3545
  if (optionList.length > 0) {
2845
3546
  Array.from(optionList).forEach(index => {
@@ -2859,11 +3560,7 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
2859
3560
  };
2860
3561
  });
2861
3562
  //#endregion
2862
- return (jsxs("div", { className: cwelltFilterTabMultiSelectProps.className + " cwelltFilterTabContainer", style: cwelltFilterTabMultiSelectProps.style, id: cwelltFilterTabMultiSelectProps.Id, onMouseLeave: cwelltFilterTabMultiSelectProps.onMouseLeave, ref: refContent, children: [jsxs("div", { className: "cwellt_headFilterTab cwellt_flex cwellt_justify_flex_start cwellt_align_items_center cwellt_flex_wrap cwellt_p_rel", onClick: () => onClickHeaderFilterTab(), children: [jsx("span", { className: "cw-head-filter-search-icon cwellt_flex cwellt_justify_center cwellt_align_items_center" }), jsxs("div", { className: "headFilter_content cwellt_flex cwellt_justify_flex_start cwellt_align_items_center cwellt_flex_wrap", children: [jsx("div", { className: "headFilter_content_tags cwellt_flex cwellt_align_items_center cwellt_flex_wrap", ref: headFilter_content_tags_ref, children: cwelltFilterTabMultiSelectProps.tagValueContent }), jsx("div", { className: "headFilter_search_content", ref: headContent_ref, children: jsx("input", { id: "headFilter_inputSearch", value: inputValue, onKeyPress: event_keyPress => onKeyPressInput(event_keyPress), type: "search", className: "headFilter_inputSearch", onChange: event_onChangeInput => onChangeInputSearch(event_onChangeInput), placeholder: cwelltFilterTabMultiSelectProps.placeholder_desc, ref: headInputFitlerTab_ref }) })] }), jsx("span", { className:
2863
- // isShowClearButton
2864
- // ? "headClearIcon cwellt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_abs"
2865
- // :
2866
- "headClearIcon", onClick: (e) => onClearInputValue(e) })] }), cwelltFilterTabMultiSelectProps.children] }));
3563
+ return (jsxs("div", { className: cwelltFilterTabMultiSelectProps.className + " cw-headfilter", style: cwelltFilterTabMultiSelectProps.style, id: cwelltFilterTabMultiSelectProps.Id, onMouseLeave: cwelltFilterTabMultiSelectProps.onMouseLeave, ref: refContent, children: [jsxs("div", { className: "cw-headfilter-wrapper", onClick: () => onClickHeaderFilterTab(), children: [jsx(CwIcon, { iconId: "search", size: "large" }), jsxs("div", { className: "cw-headfilter-content", children: [jsx("div", { className: "cw-flex-row cw-gap-small cw-align-left-center cw-flex-wrap", ref: headFilter_content_tags_ref, children: cwelltFilterTabMultiSelectProps.tagValueContent }), jsx("div", { className: "headFilter_search_content", ref: headContent_ref, children: jsx("input", { id: "headFilter_inputSearch", value: inputValue, onKeyPress: event_keyPress => onKeyPressInput(event_keyPress), onBlur: handleBlur, type: "search", onChange: event_onChangeInput => onChangeInputSearch(event_onChangeInput), placeholder: cwelltFilterTabMultiSelectProps.placeholder_desc, ref: headInputFitlerTab_ref }) })] }), jsx(CwIcon, { iconId: "close-circle", onClick: (e) => onClearInputValue(e) })] }), cwelltFilterTabMultiSelectProps.children] }));
2867
3564
  }
2868
3565
 
2869
3566
  function CwOptionList(optionListProps) {
@@ -2874,15 +3571,12 @@ function CwOptionList(optionListProps) {
2874
3571
  //#endregion
2875
3572
  //#region Hooks
2876
3573
  // - Hooks : selected optionList
2877
- const [isSelectedOptionList, setIsSelectedOptionList] = useState(optionListProps.isSelected || false);
3574
+ // const [isSelectedOptionList, setIsSelectedOptionList] = useState(optionListProps.isSelected || false);
2878
3575
  //#endregion
2879
3576
  //#region Functions
2880
- const onSelectedOptionList = () => {
2881
- setIsSelectedOptionList(!isSelectedOptionList);
2882
- };
2883
3577
  const onClickSelectOptionList = (event_click) => {
2884
3578
  // - click of custom component
2885
- onSelectedOptionList();
3579
+ // onSelectedOptionList();
2886
3580
  // - click of property interface
2887
3581
  optionListProps.onClick(event_click);
2888
3582
  };
@@ -2895,26 +3589,19 @@ function CwOptionList(optionListProps) {
2895
3589
  //#region Useffect
2896
3590
  useEffect(() => {
2897
3591
  window.addEventListener("keypress", onKeyPressOptionList);
2898
- // selected option list
2899
- setIsSelectedOptionList(optionListProps.isSelected || false);
2900
3592
  return () => {
2901
3593
  window.removeEventListener("keypress", onKeyPressOptionList);
2902
3594
  };
2903
- }, [optionListProps.isSelected, isSelectedOptionList]);
3595
+ }, []);
2904
3596
  //#endregion
2905
- return (jsxs("div", { className: isSelectedOptionList
2906
- ? optionListProps.className +
2907
- " cwelltOptionList cwelltOptionList_active cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
2908
- : optionListProps.className +
2909
- " cwelltOptionList cwellt_flex cwellt_justify_space_between cwellt_align_items_center", onClick: event_click => onClickSelectOptionList(event_click), id: optionListProps.idOptionList, ref: optionListSelected_ref, "aria-value-text": optionListProps.value, onKeyPress: event_onKeyPress => onKeyPressOptionList(event_onKeyPress), style: optionListProps.style, children: [jsx("label", { className: "cwelltOptionList_desc cwellt_flex cwellt_align_items_center", htmlFor: optionListProps.idOptionList, children: optionListProps.children }), jsx("input", { type: "checkbox", className: "cwellt_display_none", value: optionListProps.value, ref: optionListSelected_input_ref, id: optionListProps.idOptionList, onClick: optionListProps.onChangeOptionList }), jsx("span", { className: isSelectedOptionList
2910
- ? "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center"
2911
- : "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center" })] }));
3597
+ return (jsxs("div", { className: `cw-multiselect-option-list${optionListProps.isSelected ? ' option-active' : ''}`, onClick: event_click => onClickSelectOptionList(event_click), id: optionListProps.idOptionList, ref: optionListSelected_ref, "aria-value-text": optionListProps.value, onKeyPress: event_onKeyPress => onKeyPressOptionList(event_onKeyPress), style: optionListProps.style, children: [jsx("label", { htmlFor: optionListProps.idOptionList, children: optionListProps.children }), jsx("input", { type: "checkbox", value: optionListProps.value, ref: optionListSelected_input_ref, id: optionListProps.idOptionList, onClick: optionListProps.onChangeOptionList })] }));
2912
3598
  }
2913
3599
 
2914
3600
  //#endregion
2915
3601
  function CwMultiselect(CwelltCustomFilterTabProps) {
2916
3602
  //#region Reference
2917
3603
  const refOptionListContent = useRef(null);
3604
+ const containerRef = useRef(null);
2918
3605
  //#endregion
2919
3606
  //#region Hooks
2920
3607
  const [isShowDropDownfiltered, setShowDropDownfiltered] = useState(false);
@@ -2925,7 +3612,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
2925
3612
  // color: string;
2926
3613
  // }[]>([]);
2927
3614
  // Hook active label filter item tab [ All ]
2928
- const [isActive_fitler_item_all, setActive_filter_item_all] = useState(true);
3615
+ const [isActive_filter_item_all, setActive_filter_item_all] = useState(true);
2929
3616
  // Hook active laberl fitler item tab [ e.g.: Duty ]
2930
3617
  const [isActive_filter_item, setActive_filter_item] = useState(null);
2931
3618
  // Hook isSelected option list
@@ -2937,31 +3624,31 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
2937
3624
  const clearValue = (e_clear) => {
2938
3625
  // List items to remove class and be visible
2939
3626
  // Item searched
2940
- const itemSearched = document.getElementsByClassName("cwellt_show_itemSearched");
3627
+ const itemSearched = document.getElementsByClassName("item-search");
2941
3628
  // Item hidden
2942
- const itemHidden = document.getElementsByClassName("cwellt_itemHidden");
3629
+ const itemHidden = document.getElementsByClassName("hidden-item");
2943
3630
  // Item searcched
2944
3631
  if (itemSearched.length > 0) {
2945
3632
  for (let i = 0; i <= itemSearched.length; i++) {
2946
- itemSearched[i]?.classList.remove("cwellt_show_itemSearched");
3633
+ itemSearched[i]?.classList.remove("item-search");
2947
3634
  }
2948
3635
  }
2949
3636
  // Item hidden
2950
3637
  if (itemHidden.length > 0) {
2951
3638
  for (let i = 0; i <= itemHidden.length; i++) {
2952
- itemHidden[i]?.classList.remove("cwellt_itemHidden");
3639
+ itemHidden[i]?.classList.remove("hidden-item");
2953
3640
  }
2954
3641
  }
2955
3642
  // optionList [ disbaled active className according their text ]
2956
3643
  const parent = e_clear.currentTarget.parentElement.parentElement;
2957
- const optionActive = parent.getElementsByClassName("cwelltOptionList_active");
3644
+ const optionActive = parent.getElementsByClassName("option-active");
2958
3645
  const valueIds = [];
2959
3646
  const resultList = [];
2960
3647
  if (optionActive.length > 0) {
2961
3648
  CwelltCustomFilterTabProps.onclickHandleChange(valueIds, resultList);
2962
3649
  Array.from(optionActive).forEach(index => {
2963
3650
  const optionActive_array = index;
2964
- optionActive_array.classList.remove("cwelltOptionList_active");
3651
+ optionActive_array.classList.remove("option-active");
2965
3652
  });
2966
3653
  }
2967
3654
  };
@@ -2970,26 +3657,26 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
2970
3657
  const onChangeSearch = (e_onchange) => {
2971
3658
  const filterText_lowerCase = e_onchange.currentTarget.value.toLowerCase();
2972
3659
  // Tags for filtering
2973
- const listTag = document.getElementsByClassName("cwelltOptionList");
3660
+ const listTag = document.getElementsByClassName("cw-multiselect-option-list");
2974
3661
  for (let i = 0; i <= listTag.length; i++) {
2975
3662
  if (listTag[i] !== undefined) {
2976
3663
  const textTagValue = listTag[i].textContent;
2977
3664
  // Writting
2978
3665
  if (textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
2979
- listTag[i].classList.add("cwellt_show_itemSearched");
3666
+ listTag[i].classList.add("item-search");
2980
3667
  }
2981
3668
  else {
2982
- listTag[i].classList.add("cwellt_itemHidden");
3669
+ listTag[i].classList.add("hidden-item");
2983
3670
  }
2984
3671
  // remove written
2985
3672
  if (!textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
2986
- listTag[i].classList.remove("cwellt_show_itemSearched");
3673
+ listTag[i].classList.remove("item-search");
2987
3674
  }
2988
3675
  else {
2989
- listTag[i].classList.remove("cwellt_itemHidden");
3676
+ listTag[i].classList.remove("hidden-item");
2990
3677
  }
2991
3678
  if (filterText_lowerCase === "") {
2992
- listTag[i].classList.remove("cwellt_show_itemSearched");
3679
+ listTag[i].classList.remove("item-search");
2993
3680
  }
2994
3681
  }
2995
3682
  }
@@ -3003,7 +3690,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3003
3690
  const onKeyPressSearch = (event_onKeypress) => {
3004
3691
  //#region Variables
3005
3692
  const keyPressed = event_onKeypress.key;
3006
- const optionSearched = document.getElementsByClassName("cwellt_show_itemSearched");
3693
+ const optionSearched = document.getElementsByClassName("item-search");
3007
3694
  //#endregion
3008
3695
  // first item selected or same text
3009
3696
  const optionArray = Array.from(optionSearched);
@@ -3018,12 +3705,12 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3018
3705
  handleClickTag(element);
3019
3706
  }
3020
3707
  }
3021
- const optionList_item_hidden = document.getElementsByClassName("cwellt_itemHidden");
3708
+ const optionList_item_hidden = document.getElementsByClassName("hidden-item");
3022
3709
  if (optionList_item_hidden.length > 0) {
3023
3710
  Array.from(optionList_item_hidden).forEach(index => {
3024
3711
  const optionList_hidden_array = index;
3025
- if (optionList_hidden_array.classList.contains("cwellt_itemHidden")) {
3026
- optionList_hidden_array.classList.remove("cwellt_itemHidden");
3712
+ if (optionList_hidden_array.classList.contains("hidden-item")) {
3713
+ optionList_hidden_array.classList.remove("hidden-item");
3027
3714
  }
3028
3715
  });
3029
3716
  }
@@ -3045,7 +3732,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3045
3732
  active;
3046
3733
  }
3047
3734
  const handleClickTag = (e) => {
3048
- const preList = CwelltCustomFilterTabProps.selectedListsItems;
3735
+ const preList = CwelltCustomFilterTabProps.selectedListsItems || [];
3049
3736
  const valueIds = [];
3050
3737
  const resultList = preList?.map(s => {
3051
3738
  const item = new SelectListTest();
@@ -3084,36 +3771,35 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3084
3771
  // [a.key]: !prevSelectedStates[a.key],
3085
3772
  // }));
3086
3773
  // clear filter by text after clicked in option list
3087
- const optionList_item_hidden = document.getElementsByClassName("cwellt_itemHidden");
3774
+ const optionList_item_hidden = document.getElementsByClassName("hidden-item");
3088
3775
  if (optionList_item_hidden.length > 0) {
3089
3776
  Array.from(optionList_item_hidden).forEach(index => {
3090
3777
  const optionList_hidden_array = index;
3091
- if (optionList_hidden_array.classList.contains("cwellt_itemHidden")) {
3092
- optionList_hidden_array.classList.remove("cwellt_itemHidden");
3778
+ if (optionList_hidden_array.classList.contains("hidden-item")) {
3779
+ optionList_hidden_array.classList.remove("hidden-item");
3093
3780
  }
3094
3781
  });
3095
3782
  }
3096
3783
  // Check click from option list has custom tag header of custom filter tab
3097
- const tagActive = document.getElementsByClassName("cwellt_TagActive");
3098
- const optionList = document.getElementsByClassName("cwelltOptionList");
3784
+ const tagActive = document.getElementsByClassName("multiselect-active-tag");
3785
+ const optionList = document.getElementsByClassName("cw-multiselect-option-list");
3099
3786
  if (tagActive.length > 0 && optionList.length > 0) {
3100
- Array.from(tagActive).forEach(index => {
3101
- const tagActive_array = index;
3787
+ Array.from(tagActive).forEach(_index => {
3102
3788
  Array.from(optionList).forEach(index => {
3103
3789
  const optionList_array = index;
3104
- if (tagActive_array.innerText === e.description && optionList_array.innerText === e.description) {
3105
- // remove className optionlist active loaded
3106
- optionList_array.classList.remove("cwelltOptionList_active");
3790
+ const optionId = optionList_array.getAttribute('data-id');
3791
+ if (optionId === (e.type + "_" + e.id)) {
3792
+ optionList_array.classList.remove("option-active");
3107
3793
  }
3108
3794
  });
3109
3795
  });
3110
3796
  }
3111
- const optionList_desc = document.getElementsByClassName("cwelltOptionList_active");
3797
+ const optionList_desc = document.getElementsByClassName("option-active");
3112
3798
  if (optionList_desc.length > 0) {
3113
3799
  Array.from(optionList_desc).forEach(index => {
3114
3800
  const optionList_desc_array = index;
3115
3801
  if (optionList_desc_array.innerText === a.description) {
3116
- optionList_desc_array.classList.remove("cwelltOptionList_active");
3802
+ optionList_desc_array.classList.remove("option-active");
3117
3803
  }
3118
3804
  });
3119
3805
  }
@@ -3148,12 +3834,13 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3148
3834
  // ...prevSelectedStates,
3149
3835
  // [a.key]: false[a.key],
3150
3836
  // }));
3151
- const optionList_active = document.getElementsByClassName("cwelltOptionList_active");
3837
+ const optionList_active = document.getElementsByClassName("option-active");
3152
3838
  if (optionList_active.length > 0) {
3153
3839
  Array.from(optionList_active).forEach(index => {
3154
3840
  const optionList_active_array = index;
3155
- if (optionList_active_array.innerText === e.description) {
3156
- optionList_active_array.classList.remove("cwelltOptionList_active");
3841
+ const optionId = optionList_active_array.getAttribute('data-id');
3842
+ if (optionId === (e.type + "_" + e.id)) {
3843
+ optionList_active_array.classList.remove("option-active");
3157
3844
  }
3158
3845
  });
3159
3846
  }
@@ -3162,8 +3849,8 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3162
3849
  //#region DropDownContainer [ properties functions ]
3163
3850
  //#region onKeyDownDropDownContainer [ press ESC dropDownContainer dissapear - ArrowUp && ArrowDown ]
3164
3851
  const onKeyDownDropDownContent = (event_onKeyDown) => {
3165
- const items = document.querySelectorAll(".cwelltOptionList");
3166
- let optionIndex = Array.from(items).findIndex(item => item.classList.contains("Test_active"));
3852
+ const items = document.querySelectorAll(".cw-multiselect-option-list");
3853
+ let optionIndex = Array.from(items).findIndex(item => item.classList.contains("keyboard-focus"));
3167
3854
  if (event_onKeyDown.key === "Escape") {
3168
3855
  // DropDown disappear
3169
3856
  setShowDropDownfiltered(false);
@@ -3184,9 +3871,9 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3184
3871
  }
3185
3872
  };
3186
3873
  const removeHighlight = () => {
3187
- const highlightedItem = document.querySelector(".Test_active");
3874
+ const highlightedItem = document.querySelector(".keyboard-focus");
3188
3875
  if (highlightedItem) {
3189
- highlightedItem.classList.remove("Test_active");
3876
+ highlightedItem.classList.remove("keyboard-focus");
3190
3877
  }
3191
3878
  };
3192
3879
  const getNextIndex = (currentIndex, length) => {
@@ -3196,57 +3883,46 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3196
3883
  return (currentIndex - 1 + length) % length;
3197
3884
  };
3198
3885
  const highlightOption = (index) => {
3199
- const items = document.querySelectorAll(".cwelltOptionList");
3886
+ const items = document.querySelectorAll(".cw-multiselect-option-list");
3200
3887
  const item = items[index];
3201
- item.classList.add("Test_active");
3888
+ item.classList.add("keyboard-focus");
3202
3889
  };
3203
3890
  //#endregion
3204
- //#region onMouseLeave_dropDownContainer [ mouseleave of droDownContainer dissapear others axis like up and horizontal way if the user does not hover the dropDown container ]
3205
- const onMouseLeave_dropDownContainer = (event_mouseLeave) => {
3206
- // Get position of element inside a div [ height ]
3207
- const pos = event_mouseLeave.currentTarget.getBoundingClientRect();
3208
- // Get position of screen
3209
- const posCursor_y = event_mouseLeave.clientY;
3210
- // current item
3211
- const currentItem = event_mouseLeave.currentTarget;
3212
- // cwSelectDropDownContainer_active
3213
- const dropDownContainer_active = currentItem.getElementsByClassName("cwSelectDropDownContainer_active");
3214
- // Evaluating if the position of the cursor is higher than the positon of component and if dropDownContainer state is true keep state of dropDown
3215
- if (posCursor_y > pos.bottom && isShowDropDownfiltered === true) {
3216
- setShowDropDownfiltered(true);
3217
- // Mouse leave of drpoDownContainer
3218
- if (dropDownContainer_active.length > 0) {
3219
- Array.from(dropDownContainer_active).forEach(index => {
3220
- const dropDown_active_array = index;
3221
- // Adding setShowDropDownfiltered ( false ) to hide dropDownContainer
3222
- dropDown_active_array.addEventListener("mouseleave", () => {
3223
- setShowDropDownfiltered(false);
3224
- });
3225
- });
3891
+ //#region onMouseLeave
3892
+ const handleInputBlur = () => {
3893
+ setTimeout(() => {
3894
+ if (!containerRef.current?.contains(document.activeElement)) {
3895
+ setShowDropDownfiltered(false);
3226
3896
  }
3227
- }
3228
- else {
3229
- setShowDropDownfiltered(false);
3230
- }
3897
+ }, 150);
3231
3898
  };
3899
+ useEffect(() => {
3900
+ const handleClickOutside = (event) => {
3901
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
3902
+ setShowDropDownfiltered(false);
3903
+ }
3904
+ };
3905
+ document.addEventListener('mousedown', handleClickOutside);
3906
+ return () => {
3907
+ document.removeEventListener('mousedown', handleClickOutside);
3908
+ };
3909
+ }, []);
3232
3910
  //#endregion
3233
- //#endregion
3234
- // clikc filert item button
3911
+ // Click filter item button
3235
3912
  const clickFilter_item = (id) => {
3236
3913
  // content items - looking for className by it - corresponded by their current group
3237
3914
  const contentItems = document.getElementsByClassName(id);
3238
- const contentAll = document.getElementsByClassName("content_all");
3915
+ const contentAll = document.getElementsByClassName("multiselect-tag-group");
3239
3916
  if (contentAll.length > 0) {
3240
3917
  Array.from(contentAll).forEach(index => {
3241
3918
  const contentAll_array = index;
3242
- contentAll_array.classList.add("cwellt_contentHide_item");
3919
+ contentAll_array.classList.add("hidden-group");
3243
3920
  });
3244
3921
  }
3245
3922
  if (contentItems.length > 0) {
3246
3923
  Array.from(contentItems).forEach(index => {
3247
3924
  const contentItems_array = index;
3248
- contentItems_array.classList.add("cwellt_contentShow_item");
3249
- contentItems_array.classList.remove("cwellt_contentHide_item");
3925
+ contentItems_array.classList.remove("hidden-group");
3250
3926
  });
3251
3927
  }
3252
3928
  // Adding custom className acitive
@@ -3256,105 +3932,65 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3256
3932
  };
3257
3933
  const showAllItem = () => {
3258
3934
  //let currentBtn = e.currentTarget;
3259
- const contentAll = document.getElementsByClassName("content_all");
3935
+ const contentAll = document.getElementsByClassName("multiselect-tag-group");
3260
3936
  if (contentAll.length > 0) {
3261
3937
  Array.from(contentAll).forEach(index => {
3262
3938
  const contentAll_array = index;
3263
- contentAll_array.classList.remove("cwellt_contentHide_item");
3264
- contentAll_array.classList.remove("cwellt_contentShow_item");
3939
+ contentAll_array.classList.remove("hidden-group");
3265
3940
  // active className - all
3266
3941
  setActive_filter_item_all(true);
3267
- // removing active className [ cwelltFilter_item_active ]
3268
3942
  setActive_filter_item("");
3269
3943
  });
3270
3944
  }
3271
3945
  };
3272
3946
  //#endregion
3273
- const loadadData = (s, index) => {
3274
- const optionList = document.getElementsByClassName("cwelltOptionList");
3275
- if (optionList.length > 0) {
3276
- Array.from(optionList).forEach(index => {
3277
- const optionList_array = index;
3278
- if (s.description === optionList_array.innerText) {
3279
- optionList_array.classList.add("cwelltOptionList_active");
3280
- }
3947
+ useEffect(() => {
3948
+ if (CwelltCustomFilterTabProps.selectedListsItems) {
3949
+ const allOptions = document.getElementsByClassName("cw-multiselect-option-list");
3950
+ Array.from(allOptions).forEach(option => {
3951
+ option.classList.remove("option-active");
3952
+ });
3953
+ CwelltCustomFilterTabProps.selectedListsItems.forEach(selectedItem => {
3954
+ Array.from(allOptions).forEach(option => {
3955
+ const optionElement = option;
3956
+ if (optionElement.innerText === selectedItem.description) {
3957
+ optionElement.classList.add("option-active");
3958
+ }
3959
+ });
3281
3960
  });
3282
3961
  }
3283
- };
3284
- // #region [ Select items loaded previosly from database ]
3285
- useEffect(() => { }, []);
3286
- // #endregion
3287
- // #region [ convert color tone of background ]
3288
- const convertHexToRgb_custom_tag = (bg_color_custom_tag) => {
3289
- bg_color_custom_tag = (bg_color_custom_tag || "").replace("#", "");
3290
- const red_color_custom_tag = parseInt(bg_color_custom_tag.substring(0, 2), 16);
3291
- const green_color_custom_tag = parseInt(bg_color_custom_tag.substring(2, 4), 16);
3292
- const blue_color_custom_tag = parseInt(bg_color_custom_tag.substring(4, 6), 16);
3293
- return "rgb(" + red_color_custom_tag + "," + green_color_custom_tag + "," + blue_color_custom_tag + ")";
3294
- };
3295
- // #endregion
3296
- return (jsx(CwHeadFilter, { Id: CwelltCustomFilterTabProps.id, onChangeSearch: (e_onchange) => onChangeSearch(e_onchange), onClearValue: (e_clear) => clearValue(e_clear), onKeypressInput: onKeyPressSearch, onShowDropDown: showDropDownfiltered, placeholder_desc: CwelltCustomFilterTabProps.placeholder, style: CwelltCustomFilterTabProps.style, onMouseLeave: (event_mouseLeave) => onMouseLeave_dropDownContainer(event_mouseLeave), className: CwelltCustomFilterTabProps.selectedListsItems?.length === 0
3297
- ? "cw-filter-tab-multi-select-show-icon"
3298
- : "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsx("div", { className: "cwellt_flex cwellt_flex_wrap", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
3299
- loadadData(s);
3300
- const bgColor_custom_tag_selected_list = convertHexToRgb_custom_tag(s.color);
3301
- // Inicializa las variables con un valor por defecto de 0
3302
- let redBgColor_custom_tag_selected_list = 0;
3303
- let greenBgColor_custom_tag_selected_list = 0;
3304
- let blueBgColor_custom_tag_selected_list = 0;
3305
- const bgColor_custom_tag_array = bgColor_custom_tag_selected_list.match(/\d+/g);
3306
- if (bgColor_custom_tag_array && bgColor_custom_tag_array.length >= 3) {
3307
- redBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[0], 10);
3308
- greenBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[1], 10);
3309
- blueBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[2], 10);
3310
- }
3311
- const luminance = 0.299 * redBgColor_custom_tag_selected_list +
3312
- 0.587 * greenBgColor_custom_tag_selected_list +
3313
- 0.114 * blueBgColor_custom_tag_selected_list;
3314
- return s.type !== undefined ? (jsx("div", { id: "cwContent_tag", "data-id": s.type + "_" + s.id, className: "cwellt_flex cwellt_align_items_center", children: jsx(CwTag, { styleTag: {
3315
- background: s.color
3316
- }, styleTag_description: {
3962
+ }, [CwelltCustomFilterTabProps.selectedListsItems]);
3963
+ return (jsx("div", { ref: containerRef, children: jsx(CwHeadFilter, { Id: CwelltCustomFilterTabProps.id, onChangeSearch: (e_onchange) => onChangeSearch(e_onchange), onClearValue: (e_clear) => clearValue(e_clear), onKeypressInput: onKeyPressSearch, onShowDropDown: showDropDownfiltered, placeholder_desc: CwelltCustomFilterTabProps.placeholder, style: CwelltCustomFilterTabProps.style, onBlur: handleInputBlur,
3964
+ // onMouseLeave={onMouseLeave_dropDownContainer}
3965
+ className: CwelltCustomFilterTabProps.selectedListsItems?.length === 0
3966
+ ? "cw-filter-tab-multi-select-show-icon"
3967
+ : "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsx("div", { className: "cw-flex-row cw-gap-small", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
3968
+ return s.type !== undefined ? (jsx(CwTag, { styleTag: {
3317
3969
  background: s.color,
3318
- color: luminance > 128 ? "#000000" : "#ffffff"
3319
- }, idTag: s.type + "_" + s.id, closableTag: true, onClickClosableTag: () => closeTagHandle(s), className: "cwellt_TagActive", styleClosableButton: { color: luminance > 128 ? "#000000" : "#ffffff" }, children: s.description }) }, index)) : (jsx("div", {}));
3320
- }) }), children: jsx(CwDropdownContainer, { dropDownState: isShowDropDownfiltered, idDropDownContainer: CwelltCustomFilterTabProps.idDropDownContainer, onKeyDownDropDownContainer: (event_onKeyDown) => onKeyDownDropDownContent(event_onKeyDown), className: isShowDropDownfiltered ? "cwSelectDropDownContainer_active" : "", children: jsxs("div", { className: "cwellt_content_filtertab cwellt_content_listComp", children: [jsxs("div", { className: "cwellt_flex cwellt_contentFilter_list", children: [jsx("label", { className: isActive_fitler_item_all ? "cwelltFilter_item cwelltFilter_item_active_all" : "cwelltFilter_item", onClick: showAllItem, children: "ALL" }), CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsx("div", { className: "cwellt_flex cwFilter_itemContent", children: jsx("label", { className: isActive_filter_item === "content_" + i
3321
- ? "cwelltFilter_item cwelltFilter_item_active"
3322
- : "cwelltFilter_item",
3970
+ color: getContrastColor(s.color),
3971
+ }, idTag: s.type + "_" + s.id, closableTag: true, onClickClosableTag: () => closeTagHandle(s), "data-id": s.type + "_" + s.id, className: "multiselect-active-tag", children: s.description }, index)) : (jsx("div", {}));
3972
+ }) }), children: jsx(CwDropdownContainer, { dropDownState: isShowDropDownfiltered, idDropDownContainer: CwelltCustomFilterTabProps.idDropDownContainer, onKeyDownDropDownContainer: (event_onKeyDown) => onKeyDownDropDownContent(event_onKeyDown), children: jsxs("div", { className: "cw-multiselect-dropdown", children: [jsxs("header", { children: [jsx("label", { "data-active": isActive_filter_item_all, onClick: showAllItem, children: "ALL" }), CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsx("label", { "data-active": isActive_filter_item === 'content_' + i,
3323
3973
  // todo : giving parameter by id to search by their corresponding group it list options and className content with their id in this case key ( i ) by .map function
3324
3974
  onClick: () => clickFilter_item("content_" + i), id: "content_" + i, children: slArray.length > 0 && slArray[0].typeName !== undefined
3325
3975
  ? slArray[0].typeName
3326
3976
  : slArray.length > 0
3327
3977
  ? slArray[0].type
3328
- : "" }) }, "_" + i)))] }), jsx("div", { children: CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsx("div", { id: "content_" + i, className: "content_" + i + " content_all", children: jsx("div", { id: "content_" + i, className: "content_" + i + " content_item_option", ref: refOptionListContent, children: slArray.map(sl => {
3329
- const bgColor_custom_tag_select_list = convertHexToRgb_custom_tag(sl.color);
3330
- let redBgColor_custom_tag_select_list = 0;
3331
- let greenBgColor_appointment = 0;
3332
- let blueBgColor_custom_tag_select_list = 0;
3333
- const bgColor_custom_tag_select_list_array = bgColor_custom_tag_select_list.match(/\d+/g);
3334
- if (bgColor_custom_tag_select_list_array && bgColor_custom_tag_select_list_array.length >= 3) {
3335
- redBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[0], 10);
3336
- greenBgColor_appointment = parseInt(bgColor_custom_tag_select_list_array[1], 10);
3337
- blueBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[2], 10);
3338
- }
3339
- const luminance = 0.299 * redBgColor_custom_tag_select_list +
3340
- 0.587 * greenBgColor_appointment +
3341
- 0.114 * blueBgColor_custom_tag_select_list;
3342
- return (jsx(CwOptionList, { idOptionList: sl.type + "_" + sl.id, value: sl.type + "_" + sl.id, title: sl.description, onClick: () => handleClickTag(sl), isSelected: sl.active, children: jsx(CwTag, { styleTag: {
3343
- background: "#E0E0E0"
3344
- }, styleTag_description: {
3978
+ : "" }, i)))] }), jsx("div", { className: "cw-multiselect-tags-container", children: CwelltCustomFilterTabProps.selectListsItems?.map((slArray, i) => (jsx("div", { id: "content_" + i, className: `multiselect-tag-group content_${i}`, ref: refOptionListContent, children: slArray.map(sl => {
3979
+ const isSelected = CwelltCustomFilterTabProps.selectedListsItems?.some(selected => selected.type === sl.type && selected.id === sl.id) || false;
3980
+ return (jsx(CwOptionList, { idOptionList: sl.type + "_" + sl.id, value: sl.type + "_" + sl.id, title: sl.description, onClick: () => handleClickTag(sl), isSelected: sl.active, "data-id": sl.type + "_" + sl.id, children: jsx(CwTag, { styleTag: {
3345
3981
  background: sl.color,
3346
- color: luminance > 128 ? "#000000" : "#ffffff"
3347
- }, children: sl.description }) }, sl.type + "_" + sl.id));
3348
- }) }) }, "_" + i))) })] }) }) }));
3982
+ color: getContrastColor(sl.color),
3983
+ }, closableTag: isSelected, children: sl.description }) }, sl.type + "_" + sl.id));
3984
+ }) }, "group" + i))) })] }) }) }) }));
3349
3985
  }
3350
3986
 
3351
- var styles$6 = {"cw-multifilter-tag":"cw-multi-filter-tag-module_cw-multifilter-tag__Epda-"};
3987
+ var styles$7 = {"cw-multifilter-tag":"cw-multi-filter-tag-module_cw-multifilter-tag__Epda-"};
3352
3988
 
3353
3989
  const CwMultiFilterTag = props => {
3354
3990
  const { ID, Name, Value, Category, Removable, PrimaryColor, OnPrimaryColor, Selectable, Selected, OnSelect } = props;
3355
3991
  const BackgroundColor = `rgb(${PrimaryColor.r},${PrimaryColor.g},${PrimaryColor.b})`;
3356
3992
  const TextColor = `rgb(${OnPrimaryColor.r},${OnPrimaryColor.g},${OnPrimaryColor.b})`;
3357
- return (jsxs("li", { className: styles$6["cw-multifilter-tag"], "data-selected": !!props.Selected, "data-removable": !!props.Removable, style: {
3993
+ return (jsxs("li", { className: styles$7["cw-multifilter-tag"], "data-selected": !!props.Selected, "data-removable": !!props.Removable, style: {
3358
3994
  color: TextColor,
3359
3995
  backgroundColor: BackgroundColor,
3360
3996
  opacity: Selected && !Removable ? "0.5" : "1",
@@ -3365,7 +4001,7 @@ const CwMultiFilterTag = props => {
3365
4001
  }, children: [jsx("span", { id: ID, "data-value": Value, "data-category": Category, children: Name }), Removable && (jsx("span", { onClick: () => props.OnRemove?.(props), children: jsx(CwIcon, { iconId: "close" }) }))] }));
3366
4002
  };
3367
4003
 
3368
- var styles$5 = {"cw-multi-filter-catalog-container":"cw-multi-filter-module_cw-multi-filter-catalog-container__S3nsq","cw-multi-filter":"cw-multi-filter-module_cw-multi-filter__zipBK","cw-multi-filter-search":"cw-multi-filter-module_cw-multi-filter-search__eyHr0"};
4004
+ var styles$6 = {"cw-multi-filter-catalog-container":"cw-multi-filter-module_cw-multi-filter-catalog-container__S3nsq","cw-multi-filter":"cw-multi-filter-module_cw-multi-filter__zipBK","cw-multi-filter-search":"cw-multi-filter-module_cw-multi-filter-search__eyHr0"};
3369
4005
 
3370
4006
  /**
3371
4007
  * A multiple filter selector, a MULTI-SELECT even. Allows users to select and filter items based on tags.
@@ -3585,7 +4221,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3585
4221
  }
3586
4222
  else {
3587
4223
  const updatedTags = new Set(selectedTags).add(newTag);
3588
- onChangeSelectedTags?.(updatedTags);
4224
+ onChangeSelectedTags(updatedTags);
3589
4225
  setInputTextValue("");
3590
4226
  //setFilteredTags(allTags);
3591
4227
  }
@@ -3599,7 +4235,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3599
4235
  toDelete.Removable = false;
3600
4236
  updatedTags.delete(toDelete);
3601
4237
  }
3602
- onChangeSelectedTags?.(updatedTags);
4238
+ onChangeSelectedTags(updatedTags);
3603
4239
  };
3604
4240
  useEffect(() => {
3605
4241
  // force to load all tags on first render
@@ -3611,9 +4247,9 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3611
4247
  inputRef.current?.focus();
3612
4248
  }
3613
4249
  };
3614
- return (jsxs("form", { ref: componentRef, id: id, className: styles$5["cw-multi-filter"], style: style, onSubmit: (e) => {
4250
+ return (jsxs("form", { ref: componentRef, id: id, className: styles$6["cw-multi-filter"], style: style, onSubmit: (e) => {
3615
4251
  e.preventDefault();
3616
- }, children: [jsxs("div", { onClick: handleDivClick, className: styles$5["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 => {
4252
+ }, children: [jsxs("div", { onClick: handleDivClick, className: styles$6["cw-multi-filter-search"], style: isPanelOpen ? { outline: "1px solid var(--cw-color-primary)", outlineOffset: "-2px" } : {}, children: [jsxs("ul", { id: id + "_selected_filters", children: [Array.from(selectedTags).map(tag => (createElement(CwMultiFilterTag, { ...tag, key: tag.ID, Selectable: false, Removable: true, OnRemove: () => removeTag(tag.ID) }))), jsx("input", { type: "text", id: id + "_input", ref: inputRef, value: inputTextValue, spellCheck: false, onFocus: () => setIsPanelOpen(true), onChange: e => handleInputText(e.target.value), autoComplete: "off", placeholder: "Write to filter", onKeyDown: e => {
3617
4253
  switch (e.key) {
3618
4254
  case "Enter":
3619
4255
  case "Tab":
@@ -3633,8 +4269,8 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3633
4269
  }
3634
4270
  } })] }), selectedTags.size > 0 ? (jsx("input", { type: "reset", value: "\u00D7", onClick: e => {
3635
4271
  e.preventDefault();
3636
- onChangeSelectedTags?.(new Set());
3637
- } })) : null] }), jsxs("section", { className: styles$5["cw-multi-filter-catalog-container"], "data-display-none": !isPanelOpen, children: [jsxs("nav", { children: [jsx("button", { style: selectedCategory === "All"
4272
+ onChangeSelectedTags(new Set());
4273
+ } })) : null] }), jsxs("section", { className: styles$6["cw-multi-filter-catalog-container"], "data-display-none": !isPanelOpen, children: [jsxs("nav", { children: [jsx("button", { style: selectedCategory === "All"
3638
4274
  ? {
3639
4275
  backgroundColor: "var(--cw-color-primary-container)",
3640
4276
  color: "var(--cw-color-primary)",
@@ -3661,10 +4297,117 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3661
4297
  } }, props.ID))) })] })] }));
3662
4298
  };
3663
4299
 
4300
+ var styles$5 = {"tree-container":"cw-tree-view-module_tree-container__NN-HJ","tree-wrapper":"cw-tree-view-module_tree-wrapper__keBZI","tree-item":"cw-tree-view-module_tree-item__prE9N","tree-node":"cw-tree-view-module_tree-node__wfro9","selected":"cw-tree-view-module_selected__XJQ0w","non-selectable":"cw-tree-view-module_non-selectable__YuPSx","tree-children":"cw-tree-view-module_tree-children__ji8CZ","empty-state":"cw-tree-view-module_empty-state__yvRjo","tree-label":"cw-tree-view-module_tree-label__ss3Nf","tree-spacer":"cw-tree-view-module_tree-spacer__E9Ud2"};
4301
+
4302
+ function CwTreeView({ data, onSelect, allowParentSelection = false, selectedId: initialSelectedId = null }) {
4303
+ const [expanded, setExpanded] = useState(new Set());
4304
+ // const [selectedId, setSelectedId] = useState<string | number | null>(initialSelectedId);
4305
+ const [selectedId, setSelectedId] = useState(null);
4306
+ const [search, setSearch] = useState("");
4307
+ // Function to find a node by ID in the tree
4308
+ const findNodeById = (nodes, id) => {
4309
+ for (const node of nodes) {
4310
+ if (node.id.toString().toLowerCase() === id.toString().toLowerCase()) {
4311
+ return node;
4312
+ }
4313
+ if (node.children) {
4314
+ const found = findNodeById(node.children, id);
4315
+ if (found)
4316
+ return found;
4317
+ }
4318
+ }
4319
+ return null;
4320
+ };
4321
+ // Function to expand all parent nodes of a specific node
4322
+ const expandPathToNode = (nodes, targetId, path = []) => {
4323
+ for (const node of nodes) {
4324
+ const currentPath = [...path, node.id];
4325
+ if (node.id.toString().toLowerCase() === targetId.toString().toLowerCase()) {
4326
+ // We find the node, expand all nodes along the way
4327
+ path.forEach(id => {
4328
+ setExpanded(prev => new Set(prev).add(id));
4329
+ });
4330
+ return true;
4331
+ }
4332
+ if (node.children) {
4333
+ if (expandPathToNode(node.children, targetId, currentPath)) {
4334
+ return true;
4335
+ }
4336
+ }
4337
+ }
4338
+ return false;
4339
+ };
4340
+ // Effect for handling the initial selection
4341
+ useEffect(() => {
4342
+ if (!selectedId && initialSelectedId && data.length > 0) {
4343
+ const nodeToSelect = findNodeById(data, initialSelectedId);
4344
+ if (nodeToSelect) {
4345
+ setSelectedId(initialSelectedId);
4346
+ // Expand the path to the selected node
4347
+ expandPathToNode(data, initialSelectedId);
4348
+ // Call the onSelect callback
4349
+ onSelect(nodeToSelect);
4350
+ }
4351
+ }
4352
+ }, [initialSelectedId, data, onSelect, selectedId]);
4353
+ const toggleExpand = (id) => {
4354
+ const newSet = new Set(expanded);
4355
+ if (newSet.has(id))
4356
+ newSet.delete(id);
4357
+ else
4358
+ newSet.add(id);
4359
+ setExpanded(newSet);
4360
+ };
4361
+ const renderNode = (node, depth = 0) => {
4362
+ const isExpanded = expanded.has(node.id);
4363
+ const hasChildren = node.children && node.children.length > 0;
4364
+ const isLeaf = !hasChildren;
4365
+ const isSelected = selectedId?.toString().toLowerCase() === node.id.toString().toLowerCase();
4366
+ const selectable = allowParentSelection || isLeaf;
4367
+ return (jsxs("div", { className: styles$5["tree-item"], children: [jsxs("div", { className: [
4368
+ styles$5["tree-node"],
4369
+ isSelected && styles$5["selected"],
4370
+ !selectable && styles$5["non-selectable"]
4371
+ ].filter(Boolean).join(' '), style: { paddingLeft: `${depth * 24 + 8}px` }, onClick: () => {
4372
+ if (selectable) {
4373
+ setSelectedId(node.id);
4374
+ onSelect(node);
4375
+ }
4376
+ else {
4377
+ toggleExpand(node.id);
4378
+ }
4379
+ }, children: [hasChildren && (jsx(CwIcon, { size: "large", iconId: isExpanded ? "chevron-down" : "chevron-right" })), jsx("div", { className: `${styles$5["tree-label"]} ${!hasChildren ? styles$5["tree-spacer"] : ''}`, children: node.label })] }), hasChildren && isExpanded && (jsx("div", { className: styles$5["tree-children"], children: node.children.map((child) => renderNode(child, depth + 1)) }))] }, node.id));
4380
+ };
4381
+ // Function to search for nodes that match the search term
4382
+ const searchInTree = (nodes, searchTerm) => {
4383
+ if (!searchTerm)
4384
+ return nodes;
4385
+ const results = [];
4386
+ for (const node of nodes) {
4387
+ const nodeMatches = node.label.toLowerCase().includes(searchTerm.toLowerCase());
4388
+ let childMatches = [];
4389
+ if (node.children) {
4390
+ childMatches = searchInTree(node.children, searchTerm);
4391
+ }
4392
+ // Include node if he or his children match
4393
+ if (nodeMatches || childMatches.length > 0) {
4394
+ results.push({
4395
+ ...node,
4396
+ children: childMatches.length > 0 ? childMatches : node.children
4397
+ });
4398
+ }
4399
+ }
4400
+ return results;
4401
+ };
4402
+ const filteredData = searchInTree(data, search);
4403
+ return (jsxs("div", { className: `cw-tree-view ${styles$5["tree-container"]}`, children: [jsxs("header", { children: [jsx("input", { type: "text", placeholder: "Search in tree...", value: search, onChange: (e) => setSearch(e.target.value) }), search && (jsx(CwButton, { onClick: () => setSearch(""), type: "button", icon: "close", variant: "icon", color: "neutral" }))] }), jsx("div", { className: styles$5["tree-wrapper"], children: filteredData.length > 0 ? (filteredData.map((node) => renderNode(node))) : (jsxs("div", { className: styles$5["empty-state"], children: [jsx(CwIcon, { iconId: "comment" }), search ? "No results found" : "There are no items"] })) })] }));
4404
+ }
4405
+
3664
4406
  function CwSearchInput(optionsProps) {
3665
4407
  const [searchText, setSearchText] = useState("");
3666
4408
  const [filteredOptions, setFilteredOptions] = useState([]);
3667
4409
  const [_selectedOption, setSelectedOption] = useState(null);
4410
+ const [showDropdown, setShowDropdown] = useState(false);
3668
4411
  // Make default value selection when loading the component
3669
4412
  useEffect(() => {
3670
4413
  if (optionsProps.defaultValue && optionsProps.selectList && optionsProps.selectList.length > 0) {
@@ -3682,8 +4425,9 @@ function CwSearchInput(optionsProps) {
3682
4425
  const handleInputChange = (event) => {
3683
4426
  const text = event.target.value;
3684
4427
  setSearchText(text);
4428
+ setShowDropdown(true);
3685
4429
  if (text === "") {
3686
- setFilteredOptions([]);
4430
+ setFilteredOptions(optionsProps.selectList);
3687
4431
  setSelectedOption(null);
3688
4432
  // Notify that there is no selection
3689
4433
  if (optionsProps.handleChange) {
@@ -3704,6 +4448,17 @@ function CwSearchInput(optionsProps) {
3704
4448
  setFilteredOptions(filtered);
3705
4449
  }
3706
4450
  };
4451
+ const handleInputFocus = () => {
4452
+ setShowDropdown(true);
4453
+ if (searchText === "") {
4454
+ setFilteredOptions(optionsProps.selectList);
4455
+ }
4456
+ };
4457
+ const handleInputBlur = () => {
4458
+ setTimeout(() => {
4459
+ setShowDropdown(false);
4460
+ }, 150);
4461
+ };
3707
4462
  const handleOptionSelect = (option) => {
3708
4463
  setSearchText(option.description);
3709
4464
  setSelectedOption(option);
@@ -3719,12 +4474,12 @@ function CwSearchInput(optionsProps) {
3719
4474
  setSelectedOption(null);
3720
4475
  };
3721
4476
  return (jsxs("div", { className: "cwSearchInputComp", style: optionsProps.style, id: optionsProps.id, children: [jsxs("div", { className: optionsProps.labelPosition === "inline"
3722
- ? "cw-flex-row "
4477
+ ? "cw-flex-row cw-align-left-center"
3723
4478
  : optionsProps.labelPosition === "column"
3724
- ? "cw-flex-column"
3725
- : "cw-flex-row ", children: [optionsProps.labelName && (jsx("label", { className: optionsProps.disabled === true
3726
- ? "cw_label_text cw_label_text_disabled" + " " + optionsProps.labelClassName
3727
- : "cw_label_text" + " " + optionsProps.labelClassName, children: optionsProps.labelName })), jsx("input", { type: "text", value: searchText, onChange: handleInputChange, placeholder: "Search...", className: "cw_input_search", disabled: optionsProps.disabled }), searchText && (jsx("button", { className: "cw-button-icon cwi-close cw-input-search-clear", onClick: handleClearClick }))] }), filteredOptions.length > 0 && (jsx("div", { className: "cw-input-search-dropdown", children: jsx("ul", { children: filteredOptions.map((option) => (jsx("li", { onClick: () => handleOptionSelect(option), children: option.description }, option.id))) }) }))] }));
4479
+ ? "cw-label-input-column"
4480
+ : "cw-flex-row cw-align-left-center", children: [optionsProps.labelName && (jsx("label", { children: optionsProps.labelName })), jsx("input", { type: "text", value: searchText, onChange: handleInputChange, onFocus: handleInputFocus, onBlur: handleInputBlur, placeholder: "Search...", className: "cw_input_search", disabled: optionsProps.disabled }), searchText && (jsx("button", { className: "cw-button-icon cwi-close cw-input-search-clear", onClick: handleClearClick }))] }), showDropdown && filteredOptions.length > 0 && (jsx("div", { className: "cw-input-search-dropdown", children: jsx("ul", { children: filteredOptions.map((option) => (jsx("li", { onClick: () => handleOptionSelect(option), onMouseDown: (e) => e.preventDefault(), children: optionsProps.renderOption
4481
+ ? optionsProps.renderOption(option)
4482
+ : option.description }, option.id))) }) }))] }));
3728
4483
  }
3729
4484
 
3730
4485
  var styles$4 = {"context-menu":"cw-context-menu-module_context-menu__dbxnO","context-menu-item":"cw-context-menu-module_context-menu-item__B2W-Q"};
@@ -6522,7 +7277,7 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
6522
7277
  e.preventDefault();
6523
7278
  onEvent(new OnDoubleClickEvent(value.id));
6524
7279
  });
6525
- return (jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottomCenter", menu: {
7280
+ return (jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
6526
7281
  items: value.contextMenuItems,
6527
7282
  onClick: (e) => {
6528
7283
  e.domEvent.nativeEvent.preventDefault();
@@ -6667,7 +7422,7 @@ const SchedulerRow = memo((props) => {
6667
7422
  return (jsxs("div", { style: {
6668
7423
  display: "flex",
6669
7424
  minHeight: props.rowHeightInRem + "rem",
6670
- }, children: [jsx(RowTitleComp, { ...rowHeader }), jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottomCenter", menu: {
7425
+ }, children: [jsx(RowTitleComp, { ...rowHeader }), jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
6671
7426
  items: contextMenuItems,
6672
7427
  onClick: (e) => {
6673
7428
  onClickMenuItem$1(e, () => {
@@ -6702,19 +7457,19 @@ const SchedulerRow = memo((props) => {
6702
7457
  const percentage = getPercentageFromMouseEvent(e);
6703
7458
  const date = dateFromPercentage(selectedDate, visibleDays, percentage);
6704
7459
  onEvent(new OnRightClickRow(rowHeader.value.rowId, date));
6705
- }, children: [weekendLines.map((weekend) => (jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }))), divisionLines.map((division) => (jsx(DivisionLine, { height: "100%", left: division.left }))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsx("div", { style: {
7460
+ }, children: [weekendLines.map((weekend) => (jsx(WeekEndLine, { height: "100%", left: weekend.left, widthPercentage: weekend.width }, weekend.left))), divisionLines.map((division) => (jsx(DivisionLine, { height: "100%", left: division.left }, division.left))), backgroundEvents.length > 0 && backgroundEvents.some((e) => e.isVisible) && (jsx("div", { style: {
6706
7461
  height: "100%",
6707
7462
  position: internalRows.length > 0 ? "absolute" : "relative",
6708
7463
  width: "100%",
6709
7464
  pointerEvents: "none",
6710
7465
  }, children: backgroundEvents.map((event) => {
6711
- return jsx(BackgroundEventComp, { value: { ...event }, onEvent: onEvent, heightRem: props.rowHeightInRem * Math.max(1, internalRows.length) });
7466
+ return jsx(BackgroundEventComp, { value: { ...event }, onEvent: onEvent, heightRem: props.rowHeightInRem * Math.max(1, internalRows.length) }, event.id);
6712
7467
  }) })), backgroundEvents.length === 0 && internalRows.length === 0 && (jsx("div", { style: { position: "relative", height: props.rowHeightInRem + "rem" } })), internalRows.map((internalRow, index) => {
6713
7468
  return (jsx("div", { style: {
6714
7469
  position: "relative",
6715
7470
  height: props.rowHeightInRem + "rem",
6716
7471
  pointerEvents: "none"
6717
- }, children: internalRow.map((event, index) => (jsx(EventComp, { value: event, heightRem: props.rowHeightInRem, onEvent: onEvent }, index))) }, index));
7472
+ }, children: internalRow.map((event) => (jsx(EventComp, { value: event, heightRem: props.rowHeightInRem, onEvent: onEvent }, event.id))) }, index));
6718
7473
  }), !(timeLinePercentage < 0 || timeLinePercentage > 100) && (jsx(TimeLine, { color: "red", left: `${timeLinePercentage}%`, top: "0px", height: `100%` }))] }) }, rowHeader.value.rowId)] }));
6719
7474
  }, (prevProps, nextProps) => {
6720
7475
  // This memo is necessary to prevent re-render all the rows when a user makes drag and drop
@@ -6898,9 +7653,9 @@ const getEventSizes = (schedulerDate, totalDays, startDate, endDate) => {
6898
7653
  };
6899
7654
  }
6900
7655
  const totalHours = totalDays * 24;
6901
- const dateString = schedulerDate.toISOString().split('T')[0];
6902
- const schedulerDateAtZero = new Date(dateString);
6903
- let startHours = hoursBetween(schedulerDateAtZero, startDate);
7656
+ // const dateString = schedulerDate.toISOString().split('T')[0];
7657
+ //const schedulerDateAtZero = new Date(dateString)
7658
+ let startHours = hoursBetween(schedulerDate, startDate);
6904
7659
  let durationHours = hoursBetween(startDate, endDate);
6905
7660
  const startOutOfScheduler = startHours < 0;
6906
7661
  if (startOutOfScheduler) {
@@ -6943,9 +7698,7 @@ const sortByCategoryAndTitle = (previous, next, orderCategories) => {
6943
7698
  };
6944
7699
 
6945
7700
  const getWeekendLinesByDatesVisible = (initialDate, visibleDays) => {
6946
- const dateString = initialDate.toISOString().split('T')[0];
6947
- const todayAtO = new Date(dateString);
6948
- const days = getWeekendsDaysInDateRange(todayAtO, visibleDays);
7701
+ const days = getWeekendsDaysInDateRange(initialDate, visibleDays);
6949
7702
  return days.map(it => {
6950
7703
  const endDate = new Date(it);
6951
7704
  endDate.setDate(it.getDate() + 1);
@@ -7037,7 +7790,7 @@ const Scheduler = (props) => {
7037
7790
  return (jsx("div", { style: {
7038
7791
  ...style,
7039
7792
  backgroundColor: rowColor
7040
- }, children: jsx(SchedulerRow, { events: events.filter((it) => it.rowId === row.rowId), backgroundEvents: backgroundEvents.filter((it) => it.rowId === row.rowId), rowHeader: header, EventComp: EventComp, BackgroundEventComp: BackgroundEventComp, RowTitleComp: RowTitleComp, weekendLines: weekendsLines, divisionLines: divisionLines, timeLinePercentage: timeLinePercentage, rowHeightInRem: rowsHeight, onEvent: onEvent, contextMenuItems: contextMenuItems, visibleDays: visibleDays, selectedDate: selectedDate }) }));
7793
+ }, children: jsx(SchedulerRow, { events: events.filter((it) => it.rowId === row.rowId), backgroundEvents: backgroundEvents.filter((it) => it.rowId === row.rowId), rowHeader: header, EventComp: EventComp, BackgroundEventComp: BackgroundEventComp, RowTitleComp: RowTitleComp, weekendLines: weekendsLines, divisionLines: divisionLines, timeLinePercentage: timeLinePercentage, rowHeightInRem: rowsHeight, onEvent: onEvent, contextMenuItems: contextMenuItems, visibleDays: visibleDays, selectedDate: selectedDate }) }, row.rowId));
7041
7794
  });
7042
7795
  const getItemSize = useCallback((index) => {
7043
7796
  const row = rows[index];
@@ -7086,8 +7839,7 @@ class CwSuperScheduler extends React.Component {
7086
7839
  let returnedHeight = 50;
7087
7840
  let data;
7088
7841
  if (this.props.pinnedResources) {
7089
- let pinned = [...this.props.pinnedResources];
7090
- pinned = lodash.uniq(pinned);
7842
+ const pinned = [...new Set(this.props.pinnedResources)];
7091
7843
  for (let i = 0; i < pinned.length; i++) {
7092
7844
  data = this.returnDynamicHeight(pinned[i], returnedTops);
7093
7845
  returnedTops = data.topsCalculated;
@@ -7418,25 +8170,26 @@ const onClickMenuItem = (e, event) => {
7418
8170
  const PinRowHeader = ({ value, width, onEvent }) => {
7419
8171
  const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
7420
8172
  const { highlightColor, isLoading } = value;
7421
- return (jsxs("div", { style: {
7422
- width: width,
7423
- background: highlightColor,
7424
- }, className: styles["super-scheduler-row-header"], children: [jsx("button", { className: "cw-button-icon cwi-pin", "data-pinned": value.isPinned, onClick: (_) => {
7425
- onEvent(value.isPinned ? new OnUnpinRow(value.rowId) : new OnPinRow(value.rowId));
7426
- } }), jsx("div", { className: styles["indicators"], children: value.indicators ?? undefined }), jsx(CwGenericTooltip, { content: value.tooltip, position: "right", dissapearsWhenHover: true, overlayStyle: value.overlayTooltipStyle, children: jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottomCenter", menu: {
7427
- items: value.contextMenuItems,
7428
- onClick: (e) => {
7429
- onClickMenuItem(e, () => {
7430
- onEvent(new OnClickContextMenu(value.rowId, e.key));
7431
- });
7432
- },
7433
- onMouseLeave: () => setIsContextMenuOpen(false),
7434
- }, trigger: ["contextMenu"], overlayStyle: { animationDuration: "0" }, arrow: (value.contextMenuItems?.length ?? 0) > 0, children: jsxs("div", { className: styles["scheduler-row-header"], style: {
8173
+ return (jsx(Dropdown, { open: isContextMenuOpen, onOpenChange: setIsContextMenuOpen, placement: "bottom", menu: {
8174
+ items: value.contextMenuItems,
8175
+ onClick: (e) => {
8176
+ onClickMenuItem(e, () => {
8177
+ onEvent(new OnClickContextMenu(value.rowId, e.key));
8178
+ });
8179
+ },
8180
+ onMouseLeave: () => setIsContextMenuOpen(false),
8181
+ }, trigger: ["contextMenu"], overlayStyle: { animationDuration: "0" }, arrow: (value.contextMenuItems?.length ?? 0) > 0, children: jsx(CwGenericTooltip, { content: value.tooltip, position: "right", dissapearsWhenHover: true, overlayStyle: value.overlayTooltipStyle, children: jsxs("div", { style: {
8182
+ width: width,
8183
+ background: highlightColor,
8184
+ }, className: styles["super-scheduler-row-header"], children: [jsx("button", { className: "cw-button-icon cwi-pin", "data-pinned": value.isPinned, onClick: (_) => {
8185
+ onEvent(value.isPinned ? new OnUnpinRow(value.rowId) : new OnPinRow(value.rowId));
8186
+ } }), jsx("div", { className: styles["indicators"], children: value.indicators ?? undefined }), jsxs("div", { style: {
7435
8187
  display: "flex",
7436
8188
  flexDirection: "column",
7437
8189
  justifyContent: "center",
7438
8190
  alignItems: "flex-start",
7439
- }, 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["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }) }, value.rowId) }, value.rowId), isLoading ? jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }));
8191
+ }, children: [jsxs("div", { children: [jsx("strong", { children: value.title }), value.title2 && jsxs("span", { children: ["-", value.title2] }), " ", jsx("strong", { children: value.subtitle })] }), value.subtitle && jsxs("div", { style: { opacity: 0.5 }, children: [value.title3 &&
8192
+ jsxs("span", { className: styles["scheduler-crewmember-functions"], children: ["(", value.title3, ")"] }), value.subtitle2 && jsxs("span", { children: ["-", value.subtitle2] })] })] }), isLoading ? jsx("span", { className: "cwi-icons cwi-spinner" }) : undefined] }) }, value.rowId) }, value.rowId));
7440
8193
  };
7441
8194
 
7442
8195
  const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents, contextMenuItems, onEvent }) => {
@@ -7448,167 +8201,240 @@ const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory,
7448
8201
  }, children: "Clear pinned" }) })] })), jsx(Scheduler, { id: `${id}-notPinned`, state: { ...state, isHeaderVisible: !isFirstVisible }, header: header, rows: notPinnedRows, events: events, backgroundEvents: backgroundEvents, contextMenuItems: contextMenuItems, orderCategories: unPinnedOrderCategory, onEvent: onEvent, EventComp: SchedulerEvent, RowTitleComp: PinRowHeader })] }));
7449
8202
  };
7450
8203
 
7451
- const { Option } = Select;
7452
- class CwFindAirport extends React.Component {
7453
- constructor(Props) {
7454
- super(Props);
7455
- this.state = {
7456
- data: [],
7457
- valueId: undefined,
7458
- valueText: "",
7459
- searchingAtProviders: false,
7460
- searchType: "",
7461
- airports: [],
7462
- };
7463
- this.handleSelect = this.handleSelect.bind(this);
7464
- }
7465
- componentDidMount() {
7466
- // OnlyDatabase = 0
7467
- // DatabaseAndProviders = 1
7468
- // OnlyProviders = 2
7469
- this.setState({
7470
- searchType: this.props.searchType === undefined ? "OnlyDatabase" : this.props.searchType,
7471
- });
7472
- if (this.props.value !== undefined && this.props.value !== 0 && this.props.value !== -1) {
7473
- this.setState({
7474
- valueId: this.props.value,
7475
- });
7476
- this.fetchAirportData(this.props.value);
8204
+ const CwFindAirport = ({ handleChange, searchType = "OnlyDatabase", placeHolder = "Search airport…", required = false, cblConfig, className = "", value, disabled = false, displayMode, width }) => {
8205
+ // State
8206
+ const [inputValue, setInputValue] = useState("");
8207
+ const [options, setOptions] = useState([]);
8208
+ const [airports, setAirports] = useState([]);
8209
+ const [isLoading, setIsLoading] = useState(false);
8210
+ const [isInitialLoading, setIsInitialLoading] = useState(false);
8211
+ const [showDropdown, setShowDropdown] = useState(false);
8212
+ const [highlightedIndex, setHighlightedIndex] = useState(-1);
8213
+ const [tooltipText, setTooltipText] = useState("");
8214
+ // Refs
8215
+ const inputRef = useRef(null);
8216
+ const dropdownRef = useRef(null);
8217
+ const searchTimeoutRef = useRef();
8218
+ // Utility function to extract ICAO from DisplayAirportText
8219
+ const extractIcao = useCallback((displayText) => {
8220
+ const match = displayText.match(/^([A-Z]{4})\(/);
8221
+ return match ? match[1] : displayText;
8222
+ }, []);
8223
+ // Utility function to extract IATA from DisplayAirportText
8224
+ const extractIata = useCallback((displayText) => {
8225
+ const match = displayText.match(/\(([A-Z]{3})\)/);
8226
+ return match ? match[1] : displayText;
8227
+ }, []);
8228
+ // Utility function to get short code (ICAO(IATA) format - original behavior)
8229
+ const getShortCode = useCallback((displayText) => {
8230
+ const match = displayText.match(/([A-Z]{4})\(([A-Z]{3})\)/);
8231
+ if (match && match.length >= 3) {
8232
+ return `${match[1]}(${match[2]})`;
7477
8233
  }
7478
- }
7479
- componentDidUpdate(_previousProps, _previousState) {
7480
- if (this.props.value !== undefined &&
7481
- this.props.value !== 0 &&
7482
- this.props.value !== -1 &&
7483
- _previousProps.value !== _previousState.valueId) {
7484
- this.setState({
7485
- valueId: this.props.value,
7486
- });
7487
- this.fetchAirportData(this.props.value);
7488
- }
7489
- }
7490
- fetchAirportData(airportId) {
7491
- fetch(this.props.cblConfig + "api/data/airport?airportId=" + airportId)
7492
- .then((res) => res.json())
7493
- .then((result) => {
7494
- const data2 = [];
7495
- const airports2 = [];
7496
- data2.push({
7497
- value: result.AptKey,
7498
- text: this.props.icaoText === true ? result.AptIcao : result.DisplayAirportText,
7499
- });
7500
- airports2.push(result);
7501
- this.setState({
7502
- data: data2,
7503
- airports: airports2,
7504
- searchingAtProviders: false,
7505
- });
7506
- // this.handleSearch(result.AptIata);
7507
- });
7508
- }
7509
- handleSearch(value) {
7510
- if (value !== undefined && value !== null && value.length >= 3 && this.state.searchingAtProviders === false) {
7511
- this.setState({
7512
- valueText: value,
7513
- searchingAtProviders: true,
7514
- });
7515
- fetch(this.props.cblConfig +
7516
- "controls/cblFindAirport/cblFindAirport/SearchAirportCodeName?text=" +
7517
- value +
7518
- "&searchType=0")
7519
- .then((res) => res.json())
7520
- .then((result) => {
7521
- const data2 = [];
7522
- const airports2 = [];
7523
- result.forEach((r) => {
7524
- data2.push({
7525
- value: r.AptKey,
7526
- text: this.props.icaoText === true ? r.AptIcao : r.DisplayAirportText,
7527
- });
7528
- airports2.push(r);
7529
- this.setState({
7530
- data: data2,
7531
- airports: airports2,
7532
- searchingAtProviders: false,
7533
- });
7534
- });
8234
+ return displayText;
8235
+ }, []);
8236
+ // Utility function to get display text for INPUT based on mode
8237
+ const getInputDisplayText = useCallback((airport) => {
8238
+ const fullText = airport.DisplayAirportText;
8239
+ switch (displayMode) {
8240
+ case "icao-only":
8241
+ return extractIcao(fullText);
8242
+ case "iata-only":
8243
+ return extractIata(fullText);
8244
+ case "full-text":
8245
+ return fullText;
8246
+ case "default":
8247
+ default:
8248
+ // Default: ICAO(IATA) - same as original getShortCode behavior
8249
+ return getShortCode(fullText);
8250
+ }
8251
+ }, [displayMode, extractIcao, extractIata, getShortCode]);
8252
+ // Utility function to get display text for DROPDOWN (always full text)
8253
+ const getDropdownDisplayText = useCallback((airport) => {
8254
+ return airport.DisplayAirportText;
8255
+ }, []);
8256
+ // Fetch airport data by ID
8257
+ const fetchAirportData = useCallback(async (airportId) => {
8258
+ setIsInitialLoading(true);
8259
+ try {
8260
+ const response = await fetch(`${cblConfig}api/data/airport?airportId=${airportId}`);
8261
+ const result = await response.json();
8262
+ const airport = result;
8263
+ const inputText = getInputDisplayText(airport);
8264
+ const dropdownText = getDropdownDisplayText(airport);
8265
+ setAirports([airport]);
8266
+ setOptions([{ value: airport.AptKey, text: dropdownText }]);
8267
+ setInputValue(inputText);
8268
+ setTooltipText(airport.DisplayAirportText);
8269
+ }
8270
+ catch (error) {
8271
+ console.error("Error fetching airport data:", error);
8272
+ }
8273
+ finally {
8274
+ setIsInitialLoading(false);
8275
+ }
8276
+ }, [cblConfig, getInputDisplayText, getDropdownDisplayText]);
8277
+ // Map searchType string to number for API
8278
+ const getSearchTypeNumber = useCallback((type) => {
8279
+ switch (type) {
8280
+ case "OnlyDatabase": return 0;
8281
+ case "DatabaseAndProviders": return 1;
8282
+ case "OnlyProviders": return 2;
8283
+ default: return 0;
8284
+ }
8285
+ }, []);
8286
+ // Search airports
8287
+ const searchAirports = useCallback(async (searchText) => {
8288
+ if (searchText.length < 2) {
8289
+ setOptions([]);
8290
+ setAirports([]);
8291
+ setShowDropdown(false);
8292
+ return;
8293
+ }
8294
+ setIsLoading(true);
8295
+ try {
8296
+ const searchTypeNumber = getSearchTypeNumber(searchType);
8297
+ const response = await fetch(`${cblConfig}controls/cblFindAirport/cblFindAirport/SearchAirportCodeName?text=${searchText}&searchType=${searchTypeNumber}`);
8298
+ const results = await response.json();
8299
+ const newOptions = [];
8300
+ const newAirports = [];
8301
+ results.forEach((airport) => {
8302
+ const displayText = getDropdownDisplayText(airport);
8303
+ newOptions.push({ value: airport.AptKey, text: displayText });
8304
+ newAirports.push(airport);
7535
8305
  });
8306
+ setOptions(newOptions);
8307
+ setAirports(newAirports);
8308
+ setShowDropdown(newOptions.length > 0);
8309
+ setHighlightedIndex(-1);
8310
+ }
8311
+ catch (error) {
8312
+ console.error("Error searching airports:", error);
8313
+ setOptions([]);
8314
+ setAirports([]);
8315
+ setShowDropdown(false);
8316
+ }
8317
+ finally {
8318
+ setIsLoading(false);
8319
+ }
8320
+ }, [cblConfig, getDropdownDisplayText, searchType, getSearchTypeNumber]);
8321
+ // Debounced search
8322
+ const debouncedSearch = useCallback((searchText) => {
8323
+ if (searchTimeoutRef.current) {
8324
+ window.clearTimeout(searchTimeoutRef.current);
8325
+ }
8326
+ searchTimeoutRef.current = window.setTimeout(() => {
8327
+ searchAirports(searchText);
8328
+ }, 300); // 300ms debounce
8329
+ }, [searchAirports]);
8330
+ // Handle input change
8331
+ const handleInputChange = (e) => {
8332
+ const newValue = e.target.value;
8333
+ setInputValue(newValue);
8334
+ if (newValue !== inputValue) {
8335
+ debouncedSearch(newValue);
8336
+ }
8337
+ };
8338
+ // Handle option selection
8339
+ const handleOptionSelect = async (optionValue) => {
8340
+ const selectedAirport = airports.find(apt => apt.AptKey === optionValue);
8341
+ if (!selectedAirport)
8342
+ return;
8343
+ setShowDropdown(false);
8344
+ // Handle provider airports (keeping original logic)
8345
+ if (selectedAirport.isAirportFromProvider) {
8346
+ try {
8347
+ const response = await fetch(`${cblConfig}controls/cblFindAirport/cblFindAirport/GetCblAirport?IATAICAO=${selectedAirport.AptIcao}&update=false`);
8348
+ const result = await response.json();
8349
+ const resultAirport = result;
8350
+ const inputText = getInputDisplayText(resultAirport);
8351
+ const dropdownText = getDropdownDisplayText(resultAirport);
8352
+ setInputValue(inputText);
8353
+ setTooltipText(result.DisplayAirportText);
8354
+ setAirports([result]);
8355
+ setOptions([{ value: result.AptKey, text: dropdownText }]);
8356
+ handleChange(result.AptKey);
8357
+ }
8358
+ catch (error) {
8359
+ console.error("Error fetching provider airport:", error);
8360
+ }
7536
8361
  }
7537
8362
  else {
7538
- this.setState({
7539
- data: [],
7540
- airports: [],
7541
- searchingAtProviders: false,
7542
- });
8363
+ const inputText = getInputDisplayText(selectedAirport);
8364
+ setInputValue(inputText);
8365
+ setTooltipText(getDropdownDisplayText(selectedAirport));
8366
+ handleChange(optionValue);
7543
8367
  }
7544
- }
7545
- handleChange(value) {
7546
- this.setState({ valueId: value });
7547
- this.props.handleChange(value);
7548
- }
7549
- handleSelect(value) {
7550
- this.setState({ valueId: value });
7551
- const apt = this.state.airports.find((x) => x.AptKey === value);
7552
- if (apt.isAirportFromProvider) {
7553
- fetch(this.props.cblConfig +
7554
- "controls/cblFindAirport/cblFindAirport/GetCblAirport?IATAICAO=" +
7555
- apt.AptIcao +
7556
- "&update=false")
7557
- .then((res) => res.json())
7558
- .then((result) => {
7559
- const data2 = [];
7560
- const airports2 = [];
7561
- data2.push({
7562
- value: result.AptKey,
7563
- text: result.DisplayAirportText,
7564
- });
7565
- airports2.push(result);
7566
- this.setState({
7567
- data: data2,
7568
- airports: airports2,
7569
- searchingAtProviders: false,
7570
- });
7571
- });
8368
+ };
8369
+ // Handle keyboard navigation
8370
+ const handleKeyDown = (e) => {
8371
+ if (!showDropdown || options.length === 0)
8372
+ return;
8373
+ switch (e.key) {
8374
+ case "ArrowDown":
8375
+ e.preventDefault();
8376
+ setHighlightedIndex(prev => prev < options.length - 1 ? prev + 1 : 0);
8377
+ break;
8378
+ case "ArrowUp":
8379
+ e.preventDefault();
8380
+ setHighlightedIndex(prev => prev > 0 ? prev - 1 : options.length - 1);
8381
+ break;
8382
+ case "Enter":
8383
+ e.preventDefault();
8384
+ if (highlightedIndex >= 0 && highlightedIndex < options.length) {
8385
+ handleOptionSelect(options[highlightedIndex].value);
8386
+ }
8387
+ break;
8388
+ case "Escape":
8389
+ setShowDropdown(false);
8390
+ setHighlightedIndex(-1);
8391
+ break;
7572
8392
  }
7573
- }
7574
- //this next call is the one to update the data paying for a call in the api
7575
- onClick() {
7576
- fetch(this.props.cblConfig +
7577
- "controls/cblFindAirport/cblFindAirport/SearchAirportCodeNameonProvider?text=" +
7578
- this.state.valueText +
7579
- "&searchType=" +
7580
- this.state.searchType)
7581
- .then((res) => res.json())
7582
- .then((result) => {
7583
- const data2 = [];
7584
- const airports2 = [];
7585
- result.forEach((r) => {
7586
- data2.push({
7587
- value: r.AptKey,
7588
- text: r.DisplayAirportText,
7589
- });
7590
- airports2.push(r);
7591
- });
7592
- this.setState({
7593
- data: data2,
7594
- airports: airports2,
7595
- searchingAtProviders: false,
7596
- });
7597
- });
7598
- }
7599
- getShortCode(text) {
7600
- const match = text.match(/([A-Z]{4})\(([A-Z]{3})\)/);
7601
- if (match && match.length >= 3) {
7602
- return `${match[1]}(${match[2]})`;
8393
+ };
8394
+ // Handle clicks outside dropdown
8395
+ useEffect(() => {
8396
+ const handleClickOutside = (event) => {
8397
+ if (dropdownRef.current &&
8398
+ !dropdownRef.current.contains(event.target) &&
8399
+ !inputRef.current?.contains(event.target)) {
8400
+ setShowDropdown(false);
8401
+ setHighlightedIndex(-1);
8402
+ }
8403
+ };
8404
+ document.addEventListener("mousedown", handleClickOutside);
8405
+ return () => document.removeEventListener("mousedown", handleClickOutside);
8406
+ }, []);
8407
+ // Load initial value
8408
+ useEffect(() => {
8409
+ if (value && value !== 0 && value !== -1) {
8410
+ fetchAirportData(value);
7603
8411
  }
7604
- return text;
7605
- }
7606
- render() {
7607
- const options = this.state.data.map((sl) => (jsxs(Option, { value: sl.value, title: sl.text, label: this.getShortCode(sl.text), children: [(sl.text), " "] }, sl.value)));
7608
- return (jsx("div", { children: jsxs("div", { className: "cw-flex-row cw-align-left-center", style: { gap: "0.25rem" }, children: [jsx(Select, { id: "InputID",
7609
- // this.required === "true" ? "required" : ""
7610
- showSearch: true, allowClear: true, "aria-required": true, value: this.state.valueId, placeholder: this.props.placeHolder, defaultActiveFirstOption: false, showArrow: true, filterOption: false, onSearch: this.handleSearch.bind(this), onChange: this.handleChange.bind(this), onSelect: this.handleSelect.bind(this), notFoundContent: null, popupClassName: "cwelltItemFindAirport", className: this.props.className, labelInValue: false, optionLabelProp: "label", disabled: !!(this.props.disabled !== undefined && this.props.disabled !== null && this.props.disabled === true), style: { flexGrow: 1 }, children: options }, JSON.stringify(this.state.valueId)), jsx("button", { id: "findAirportInProviderButtonID", className: "cw-button-icon cwi-airport", title: "Search external airport", hidden: this.props.searchType === "OnlyDatabase" || this.props.disabled, onClick: this.onClick.bind(this), disabled: !!(this.props.disabled !== undefined && this.props.disabled !== null && this.props.disabled === true) })] }) }));
7611
- }
7612
- }
8412
+ }, [value, fetchAirportData]);
8413
+ useEffect(() => {
8414
+ if (!value || value === 0 || value === -1) {
8415
+ setInputValue("");
8416
+ setTooltipText("");
8417
+ setOptions([]);
8418
+ setAirports([]);
8419
+ }
8420
+ }, [value]);
8421
+ // Handle input focus
8422
+ const handleInputFocus = () => {
8423
+ if (options.length > 0) {
8424
+ setShowDropdown(true);
8425
+ }
8426
+ };
8427
+ // Clear selection
8428
+ const handleClear = () => {
8429
+ setInputValue("");
8430
+ setTooltipText("");
8431
+ setOptions([]);
8432
+ setAirports([]);
8433
+ setShowDropdown(false);
8434
+ handleChange(0); // or -1, depending on API expectations
8435
+ inputRef.current?.focus();
8436
+ };
8437
+ return (jsxs("div", { className: `cw-find-airport ${className}`, style: width ? { width } : undefined, children: [jsxs("div", { className: "cw-find-airport-input-wrapper", children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onFocus: handleInputFocus, placeholder: isInitialLoading ? "Loading…" : placeHolder, disabled: disabled, required: required, autoComplete: "off", "aria-expanded": showDropdown, "aria-haspopup": "listbox", role: "combobox", title: tooltipText }), (isLoading || isInitialLoading) && (jsx("div", { className: "cw-find-airport-loading", children: jsx(CwIcon, { iconId: "spinner" }) })), inputValue && !disabled && !isInitialLoading && (jsx(CwButton, { type: "button", onClick: handleClear, "aria-label": "Clear selected airport", variant: "icon", icon: "close", color: "neutral" }))] }), showDropdown && options.length > 0 && (jsx("div", { ref: dropdownRef, className: "cw-find-airport-dropdown", role: "listbox", children: options.map((option, index) => (jsx("div", { className: `cw-find-airport-option ${index === highlightedIndex ? "highlighted" : ""}`, onClick: () => handleOptionSelect(option.value), role: "option", "aria-selected": index === highlightedIndex, children: option.text }, option.value))) }))] }));
8438
+ };
7613
8439
 
7614
- export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwBtnAdd, CwBtnAddFolder, CwBtnAirport, CwBtnAlert, CwBtnApprove, CwBtnBookMark, CwBtnBulkDuty, CwBtnCancel, CwBtnCrewPlanning, CwBtnDelay, CwBtnDelete, CwBtnDownLoadAllInfo, CwBtnDownload, CwBtnDropDownMenu, CwBtnEdit, CwBtnEditFolder, CwBtnFiles, CwBtnGeneratePairing, CwBtnGoBackFolder, CwBtnHide, CwBtnImportRequests, CwBtnMVT, CwBtnNavFirstItemView, CwBtnNavLastItemView, CwBtnNavNextDay, CwBtnNavPreviewItem, CwBtnPairing, CwBtnPrint, CwBtnPropertyFolder, CwBtnPublish, CwBtnRefresh, CwBtnReleasePeriod, CwBtnSave, CwBtnSearch, CwBtnSelect, CwBtnShare, CwBtnStatistic, CwBtnUploadFiles, CwBtnVacations, CwBtnView, CwButton, CwButtonDef, CwCard, CwCardList, CwCheckbox, CwChip, CwContextMenu, CwContextualMenu, CwDialog, CwDialogManager, CwDigit, CwDisplayMessage, CwDropdown, CwDropdownContainer, CwDropdownFilter, CwDropdownNavigation, CwExpandable, CwFileUpload, CwFileUploadMultiple, CwFindAirport, CwFloatingButton, CwGenericTooltip, CwHeadFilter, CwHeadingMain, CwHeadingSecond, CwIcon, CwImageArea, CwInput, CwInputDate, CwInputDatePicker, CwInputDateText, CwInputDatetime, CwInputImage, CwInputNumber, CwInputPhone, CwInputText, CwKeyValueList, CwLabel, CwLoading, CwLoadingSmall, CwMessage, CwMessageManager, CwMessageType, CwModal, CwModalConfirm, CwModalHover, CwModalIframe, CwModalReportFunctional, CwMultiFilter, CwMultiFilterTag, CwMultiselect, CwOption, CwOptionList, CwReportModal, CwScheduler, CwScheduler2, CwSearchInput, CwSelect, CwSelectList, CwSelectListItems, CwSuperScheduler, CwTable, CwTableGrouped, CwTabs, CwTag, CwTextArea, CwTime, CwToggle, CwTooltip, CwWeekdaySelector, DefaultRowHeader, MultiSelect, OnClearPinned, OnClickContextMenu, OnClickEvent, OnClickRowEvent, OnClickRowHeader, OnClickUtc, OnDoubleClickEvent, OnDoubleClickRowEvent, OnDragEvent, OnDropCtrlEvent, OnDropEvent, OnEndClickHeaderEvent, OnLeftDragStart, OnMultiClickEvent, OnPinRow, OnRangeClickEvent, OnRightClickEvent, OnRightClickRow, OnRightDragStart, OnStartClickHeaderEvent, OnUnpinRow, PinRowHeader, Resource, Scheduler, SchedulerEvent, SuperScheduler, UiEvent, Weekdays, cblEvent, eventIsVisible, getDefaultDivisions, getEventSizes, itemsToMultiFilterTags, useCwMessage };
8440
+ export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwBtnAdd, CwBtnAddFolder, CwBtnAirport, CwBtnAlert, CwBtnApprove, CwBtnBookMark, CwBtnBulkDuty, CwBtnCancel, CwBtnCrewPlanning, CwBtnDelay, CwBtnDelete, CwBtnDownLoadAllInfo, CwBtnDownload, CwBtnDropDownMenu, CwBtnEdit, CwBtnEditFolder, CwBtnFiles, CwBtnGeneratePairing, CwBtnGoBackFolder, CwBtnHide, CwBtnImportRequests, CwBtnMVT, CwBtnNavFirstItemView, CwBtnNavLastItemView, CwBtnNavNextDay, CwBtnNavPreviewItem, CwBtnPairing, CwBtnPrint, CwBtnPropertyFolder, CwBtnPublish, CwBtnRefresh, CwBtnReleasePeriod, CwBtnSave, CwBtnSearch, CwBtnSelect, CwBtnShare, CwBtnStatistic, CwBtnUploadFiles, CwBtnVacations, CwBtnView, CwButton, CwButtonDef, CwCard, CwCardList, CwCheckbox, CwChip, CwColorPicker, CwConfirmationPopup, CwContextMenu, CwContextualMenu, CwDialog, CwDialogManager, CwDigit, CwDisplayMessage, CwDropdown, CwDropdownContainer, CwDropdownFilter, CwExpandable, CwFileUpload, CwFileUploadMultiple, CwFindAirport, CwFloatingButton, CwGenericTooltip, CwHeadFilter, CwHeadingMain, CwHeadingSecond, CwIcon, CwImageArea, CwImageGallery, CwImageZoom, CwInput, CwInputColor, CwInputDate, CwInputDatePicker, CwInputDateText, CwInputDatetime, CwInputImage, CwInputNumber, CwInputPhone, CwInputText, CwKeyValueList, CwLabel, CwLoading, CwLoadingSmall, CwMessage, CwMessageManager, CwMessageType, CwModal, CwModalConfirm, CwModalHover, CwModalIframe, CwModalReportFunctional, CwMultiFilter, CwMultiFilterTag, CwMultiselect, CwNote, CwOption, CwOptionList, CwReportModal, CwScheduler, CwScheduler2, CwSearchInput, CwSelect, CwSelectList, CwSelectListItems, CwSortableList, CwSuperScheduler, CwTable, CwTableGrouped, CwTabs, CwTag, CwTextArea, CwTime, CwToggle, CwTooltip, CwTreeView, CwWeekdaySelector, DefaultRowHeader, MultiSelect, OnClearPinned, OnClickContextMenu, OnClickEvent, OnClickRowEvent, OnClickRowHeader, OnClickUtc, OnDoubleClickEvent, OnDoubleClickRowEvent, OnDragEvent, OnDropCtrlEvent, OnDropEvent, OnEndClickHeaderEvent, OnLeftDragStart, OnMultiClickEvent, OnPinRow, OnRangeClickEvent, OnRightClickEvent, OnRightClickRow, OnRightDragStart, OnStartClickHeaderEvent, OnUnpinRow, PinRowHeader, Resource, Scheduler, SchedulerEvent, SuperScheduler, UiEvent, Weekdays, cblEvent, eventIsVisible, getDefaultDivisions, getEventSizes, itemsToMultiFilterTags, useCwMessage, useSortableList };