@cwellt_software/cwellt-reactjs-lib 1.0.8 → 1.1.0

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