@cwellt_software/cwellt-reactjs-lib 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (714) hide show
  1. package/dist/content/icons/new-cw-icons/NewCwIcons.html +14 -6
  2. package/dist/content/icons/new-cw-icons/NewCwIcons.json +195 -1
  3. package/dist/content/icons/new-cw-icons/css/new-cw-icons.css +783 -198
  4. package/dist/content/icons/new-cw-icons/fonts/NewCwIcons.woff +0 -0
  5. package/dist/index.cjs.js +1459 -625
  6. package/dist/index.css +2 -2
  7. package/dist/index.d.ts +366 -106
  8. package/dist/index.es.js +1453 -627
  9. package/dist/playground/main.d.ts +4 -0
  10. package/dist/playground/main.d.ts.map +1 -0
  11. package/dist/src/common/classes/CwSelectList.js +12 -0
  12. package/dist/src/common/classes/CwSelectListItems.js +14 -0
  13. package/dist/src/common/functions/collections.js +18 -0
  14. package/dist/src/common/functions/colorManipulation.js +76 -0
  15. package/dist/src/common/functions/dsl/UiEventDSL.js +20 -0
  16. package/dist/src/common/functions/useSingleAndDoubleClicks.js +28 -0
  17. package/dist/src/common/interfaces/CwSelectListProps.js +1 -0
  18. package/dist/src/components/control/action/button/CwButton.js +13 -0
  19. package/dist/src/components/control/action/buttons/CwButtons.js +188 -0
  20. package/dist/src/components/control/action/contextmenu/CwContextMenu.js +43 -0
  21. package/dist/src/components/control/action/contextual-menu/CwContextualMenu.js +55 -0
  22. package/dist/src/components/control/action/search/CwSearch.d.ts +1 -1
  23. package/dist/src/components/control/action/search/CwSearch.d.ts.map +1 -1
  24. package/dist/src/components/control/action/search/CwSearch.js +67 -0
  25. package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.js +11 -0
  26. package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts +1 -1
  27. package/dist/src/components/control/choice/checkbox/CwCheckbox.d.ts.map +1 -1
  28. package/dist/src/components/control/choice/checkbox/CwCheckbox.js +15 -0
  29. package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.js +99 -0
  30. package/dist/src/components/control/choice/dropdown/CwDropdown.js +27 -0
  31. package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +1 -1
  32. package/dist/src/components/control/choice/dropdown/CwDropdownContainer.js +30 -0
  33. package/dist/src/components/control/choice/dropdown/CwDropdownFilter.d.ts +10 -20
  34. package/dist/src/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +1 -1
  35. package/dist/src/components/control/choice/dropdown/CwDropdownFilter.js +10 -0
  36. package/dist/src/components/control/choice/multi-filter/CwMultiFilter.js +298 -0
  37. package/dist/src/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.js +17 -0
  38. package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts +1 -0
  39. package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts.map +1 -1
  40. package/dist/src/components/control/choice/multiselect/CwHeadFilter.js +80 -0
  41. package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts.map +1 -1
  42. package/dist/src/components/control/choice/multiselect/CwMultiselect.js +393 -0
  43. package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts +0 -1
  44. package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts.map +1 -1
  45. package/dist/src/components/control/choice/multiselect/CwOptionList.js +36 -0
  46. package/dist/src/components/control/choice/option/CwOption.js +16 -0
  47. package/dist/src/components/control/choice/select/CwSelect.js +36 -0
  48. package/dist/src/components/control/choice/toggle/CwToggle.d.ts +8 -21
  49. package/dist/src/components/control/choice/toggle/CwToggle.d.ts.map +1 -1
  50. package/dist/src/components/control/choice/toggle/CwToggle.js +9 -0
  51. package/dist/src/components/control/choice/tree-view/CwTreeView.d.ts +15 -0
  52. package/dist/src/components/control/choice/tree-view/CwTreeView.d.ts.map +1 -0
  53. package/dist/src/components/control/input/any/CwInput.js +16 -0
  54. package/dist/src/components/control/input/color/CwColorPicker.d.ts +17 -0
  55. package/dist/src/components/control/input/color/CwColorPicker.d.ts.map +1 -0
  56. package/dist/src/components/control/input/color/CwColorPicker.js +210 -0
  57. package/dist/src/components/control/input/color/CwInputColor.d.ts +12 -0
  58. package/dist/src/components/control/input/color/CwInputColor.d.ts.map +1 -0
  59. package/dist/src/components/control/input/color/CwInputColor.js +142 -0
  60. package/dist/src/components/control/input/date/CwInputDate.js +29 -0
  61. package/dist/src/components/control/input/date-picker/CwInputDatePicker.js +109 -0
  62. package/dist/src/components/control/input/date-text/CwInputDateText.js +90 -0
  63. package/dist/src/components/control/input/datetime/CwInputDatetime.js +29 -0
  64. package/dist/src/components/control/input/digit/CwDigit.js +28 -0
  65. package/dist/src/components/control/input/file/CwFileUpload.js +52 -0
  66. package/dist/src/components/control/input/file/CwFileUploadMultiple.js +148 -0
  67. package/dist/src/components/control/input/image/CwInputImage.js +52 -0
  68. package/dist/src/components/control/input/image-area/CwImageArea.js +113 -0
  69. package/dist/src/components/control/input/number/CwInputNumber.js +11 -0
  70. package/dist/src/components/control/input/phone/CwInputPhone.js +24 -0
  71. package/dist/src/components/control/input/text/CwInputText.d.ts +1 -1
  72. package/dist/src/components/control/input/text/CwInputText.d.ts.map +1 -1
  73. package/dist/src/components/control/input/text/CwInputText.js +31 -0
  74. package/dist/src/components/control/input/text-area/CwTextArea.js +9 -0
  75. package/dist/src/components/control/input/time/CwTime.js +29 -0
  76. package/dist/src/components/control/input/weekday/CwWeekdaySelector.js +143 -0
  77. package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts +7 -24
  78. package/dist/src/components/custom/find-airport/CwFindAirportComp.d.ts.map +1 -1
  79. package/dist/src/components/custom/find-airport/CwFindAirportComp.js +240 -0
  80. package/dist/src/components/custom/scheduler/CwSchedulerComp.js +211 -0
  81. package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +1 -1
  82. package/dist/src/components/custom/scheduler/CwSuperSchedulerComp.js +269 -0
  83. package/dist/src/components/custom/scheduler/components/EventRender.js +142 -0
  84. package/dist/src/components/custom/scheduler/components/ResourceListRender.js +12 -0
  85. package/dist/src/components/custom/scheduler/components/ResourceRender.js +26 -0
  86. package/dist/src/components/custom/scheduler/components/day_headers/DayHeader.js +13 -0
  87. package/dist/src/components/custom/scheduler/components/day_headers/MonthHeader.js +12 -0
  88. package/dist/src/components/custom/scheduler/components/day_headers/MyDaysHeader.js +62 -0
  89. package/dist/src/components/custom/scheduler/components/day_headers/WeekHeader.js +13 -0
  90. package/dist/src/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.js +24 -0
  91. package/dist/src/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.js +17 -0
  92. package/dist/src/components/custom/scheduler/components/scheduler_header/SchedulerHeader.js +26 -0
  93. package/dist/src/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.js +23 -0
  94. package/dist/src/components/custom/scheduler/components/time_headers/TimeHeader.js +31 -0
  95. package/dist/src/components/custom/scheduler/components/time_headers/TimeHeaderRow.js +16 -0
  96. package/dist/src/components/custom/scheduler/components/time_line/TimeLine.js +12 -0
  97. package/dist/src/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.js +5 -0
  98. package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDates.js +15 -0
  99. package/dist/src/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.js +5 -0
  100. package/dist/src/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.js +43 -0
  101. package/dist/src/components/custom/scheduler/logic/dates/getMonthHeaderData.js +35 -0
  102. package/dist/src/components/custom/scheduler/logic/dates/getUtcToday.js +6 -0
  103. package/dist/src/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.js +20 -0
  104. package/dist/src/components/custom/scheduler/logic/dates/listOfDatesToWeeks.js +55 -0
  105. package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisionType.js +13 -0
  106. package/dist/src/components/custom/scheduler/logic/divisions/calculateDivisions.js +16 -0
  107. package/dist/src/components/custom/scheduler/logic/filtering/filterEvents.js +33 -0
  108. package/dist/src/components/custom/scheduler/logic/filtering/filterResources.js +14 -0
  109. package/dist/src/components/custom/scheduler/logic/filtering/hasSameProperties.js +10 -0
  110. package/dist/src/components/custom/scheduler/logic/onDrop/OnDrop.js +45 -0
  111. package/dist/src/components/custom/scheduler/logic/pixels/getHeightLineScheduler.js +14 -0
  112. package/dist/src/components/custom/scheduler/logic/pixels/getPixelsForEvent.js +32 -0
  113. package/dist/src/components/custom/scheduler/logic/pixels/heightScheduler.js +14 -0
  114. package/dist/src/components/custom/scheduler/logic/pixels/heightSchedulerPinned.js +9 -0
  115. package/dist/src/components/custom/scheduler/logic/state_handle/doubleClickOnResource.js +5 -0
  116. package/dist/src/components/custom/scheduler/logic/state_handle/handleResourceChange.js +11 -0
  117. package/dist/src/components/custom/scheduler/logic/state_handle/onDragOver.js +9 -0
  118. package/dist/src/components/custom/scheduler/logic/state_handle/onDropEventToResource.js +3 -0
  119. package/dist/src/components/custom/scheduler/logic/strings/compareStrings.js +7 -0
  120. package/dist/src/components/custom/scheduler/logic/strings/getGUID.js +7 -0
  121. package/dist/src/components/custom/scheduler/logic/ui/checkIfSlotAvailable.js +8 -0
  122. package/dist/src/components/custom/scheduler/logic/ui/getEventsOfResource.js +45 -0
  123. package/dist/src/components/custom/scheduler/logic/ui/getTimeHeaders.js +35 -0
  124. package/dist/src/components/custom/scheduler/logic/ui/isAllowedToMove.js +19 -0
  125. package/dist/src/components/custom/scheduler/logic/ui/updateResourceVisibility.js +15 -0
  126. package/dist/src/components/custom/scheduler/state/CblDragAndDrop.js +18 -0
  127. package/dist/src/components/custom/scheduler/state/CwSchedulerProps.js +1 -0
  128. package/dist/src/components/custom/scheduler/state/Resource.js +18 -0
  129. package/dist/src/components/custom/scheduler/state/State.js +1 -0
  130. package/dist/src/components/custom/scheduler/state/cblEvent.js +28 -0
  131. package/dist/src/components/custom/scheduler/state/cblEventCompProps.js +1 -0
  132. package/dist/src/components/custom/scheduler/state/resourceCompProps2.js +1 -0
  133. package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +1 -1
  134. package/dist/src/components/custom/scheduler-new/presentation/NewScheduler.js +123 -0
  135. package/dist/src/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.js +118 -0
  136. package/dist/src/components/custom/scheduler-new/presentation/SchedulerPresenter.js +166 -0
  137. package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderDivision.js +26 -0
  138. package/dist/src/components/custom/scheduler-new/presentation/components/header/HeaderTitle.js +8 -0
  139. package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.js +86 -0
  140. package/dist/src/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.js +1 -0
  141. package/dist/src/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.js +60 -0
  142. package/dist/src/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.js +24 -0
  143. package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +1 -1
  144. package/dist/src/components/custom/scheduler-new/presentation/components/row/Event.js +150 -0
  145. package/dist/src/components/custom/scheduler-new/presentation/components/row/EventSideDrag.js +11 -0
  146. package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +1 -1
  147. package/dist/src/components/custom/scheduler-new/presentation/components/row/SchedulerRow.js +176 -0
  148. package/dist/src/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.js +8 -0
  149. package/dist/src/components/custom/scheduler-new/presentation/components/timeline/TimeLine.js +39 -0
  150. package/dist/src/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.js +8 -0
  151. package/dist/src/components/custom/scheduler-new/presentation/helpers.js +43 -0
  152. package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +1 -1
  153. package/dist/src/components/custom/scheduler-new/presentation/logic/WeekendCalc.js +24 -0
  154. package/dist/src/components/custom/scheduler-new/presentation/logic/dateFromPercentage.js +7 -0
  155. package/dist/src/components/custom/scheduler-new/presentation/logic/eventIsVisible.js +7 -0
  156. package/dist/src/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.js +113 -0
  157. package/dist/src/components/custom/scheduler-new/presentation/logic/getDivisions.js +21 -0
  158. package/dist/src/components/custom/scheduler-new/presentation/logic/getEventSizes.js +30 -0
  159. package/dist/src/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.js +13 -0
  160. package/dist/src/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.js +7 -0
  161. package/dist/src/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.js +32 -0
  162. package/dist/src/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.js +12 -0
  163. package/dist/src/components/custom/scheduler-new/presentation/state/ui/SchedulerState.js +1 -0
  164. package/dist/src/components/custom/scheduler-new/presentation/state/ui/WeekRange.js +1 -0
  165. package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.js +267 -0
  166. package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +1 -1
  167. package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.js +269 -0
  168. package/dist/src/components/custom/scheduler-temporal/components/EventRender.js +142 -0
  169. package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.js +12 -0
  170. package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.js +26 -0
  171. package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.js +13 -0
  172. package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.js +12 -0
  173. package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.js +62 -0
  174. package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.js +13 -0
  175. package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.js +22 -0
  176. package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.js +17 -0
  177. package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.js +26 -0
  178. package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.js +23 -0
  179. package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.js +31 -0
  180. package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.js +16 -0
  181. package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.js +12 -0
  182. package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.js +5 -0
  183. package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.js +15 -0
  184. package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.js +5 -0
  185. package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.js +43 -0
  186. package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.js +35 -0
  187. package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.js +6 -0
  188. package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.js +20 -0
  189. package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.js +55 -0
  190. package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.js +13 -0
  191. package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.js +16 -0
  192. package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.js +10 -0
  193. package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.js +34 -0
  194. package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.js +14 -0
  195. package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.js +10 -0
  196. package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.js +36 -0
  197. package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.js +14 -0
  198. package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.js +32 -0
  199. package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.js +14 -0
  200. package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.js +9 -0
  201. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.js +5 -0
  202. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.js +178 -0
  203. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.js +11 -0
  204. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.js +9 -0
  205. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.js +3 -0
  206. package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.js +3 -0
  207. package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.js +7 -0
  208. package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.js +7 -0
  209. package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.js +9 -0
  210. package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.js +92 -0
  211. package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.js +242 -0
  212. package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.js +35 -0
  213. package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.js +19 -0
  214. package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.js +241 -0
  215. package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.js +15 -0
  216. package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.js +18 -0
  217. package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.js +1 -0
  218. package/dist/src/components/custom/scheduler-temporal/state/Resource.js +18 -0
  219. package/dist/src/components/custom/scheduler-temporal/state/State.js +1 -0
  220. package/dist/src/components/custom/scheduler-temporal/state/cblEvent.js +28 -0
  221. package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.js +1 -0
  222. package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.js +1 -0
  223. package/dist/src/components/custom/super-scheduler/PinRowHeader.d.ts.map +1 -1
  224. package/dist/src/components/custom/super-scheduler/PinRowHeader.js +53 -0
  225. package/dist/src/components/custom/super-scheduler/SuperScheduler.js +23 -0
  226. package/dist/src/components/custom/super-scheduler/SuperSchedulerEvents.js +15 -0
  227. package/dist/src/components/custom/super-scheduler/SuperSchedulerPresenter.js +45 -0
  228. package/dist/src/components/display/data/accordion/CwAccordionContainer.js +20 -0
  229. package/dist/src/components/display/data/generic_tooltip/CwGenericTooltip.js +138 -0
  230. package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
  231. package/dist/src/components/display/data/table/CwTable.js +203 -0
  232. package/dist/src/components/display/graphics/icon/CwIcon.d.ts +5 -1
  233. package/dist/src/components/display/graphics/icon/CwIcon.d.ts.map +1 -1
  234. package/dist/src/components/display/graphics/icon/CwIcon.js +23 -0
  235. package/dist/src/components/display/graphics/image-gallery/CwImageGallery.d.ts +30 -0
  236. package/dist/src/components/display/graphics/image-gallery/CwImageGallery.d.ts.map +1 -0
  237. package/dist/src/components/display/graphics/image-zoom/CwImageZoom.d.ts +21 -0
  238. package/dist/src/components/display/graphics/image-zoom/CwImageZoom.d.ts.map +1 -0
  239. package/dist/src/components/display/graphics/loading/CwLoading.d.ts.map +1 -1
  240. package/dist/src/components/display/graphics/loading/CwLoading.js +27 -0
  241. package/dist/src/components/display/graphics/loading-small/CwLoadingSmall.js +20 -0
  242. package/dist/src/components/display/text/heading/CwHeadingMain.js +5 -0
  243. package/dist/src/components/display/text/heading/CwHeadingSecond.js +5 -0
  244. package/dist/src/components/display/text/label/CwLabel.js +13 -0
  245. package/dist/src/components/display/text/message/CwMessage.d.ts +49 -2
  246. package/dist/src/components/display/text/message/CwMessage.d.ts.map +1 -1
  247. package/dist/src/components/display/text/message/CwMessage.js +75 -0
  248. package/dist/src/components/display/text/note/CwNote.d.ts +48 -0
  249. package/dist/src/components/display/text/note/CwNote.d.ts.map +1 -0
  250. package/dist/src/components/display/text/note/CwNote.js +78 -0
  251. package/dist/src/components/display/text/tag/CwChip.d.ts +1 -1
  252. package/dist/src/components/display/text/tag/CwChip.d.ts.map +1 -1
  253. package/dist/src/components/display/text/tag/CwChip.js +57 -0
  254. package/dist/src/components/display/text/tag/CwTag.d.ts +0 -1
  255. package/dist/src/components/display/text/tag/CwTag.d.ts.map +1 -1
  256. package/dist/src/components/display/text/tag/CwTag.js +21 -0
  257. package/dist/src/components/display/text/tooltip/CwTooltip.js +4 -0
  258. package/dist/src/components/layout/align/CwAlign.js +54 -0
  259. package/dist/src/components/layout/card/CwCard.js +55 -0
  260. package/dist/src/components/layout/card/CwCardList.d.ts +3 -5
  261. package/dist/src/components/layout/card/CwCardList.d.ts.map +1 -1
  262. package/dist/src/components/layout/card/CwCardList.js +38 -0
  263. package/dist/src/components/layout/confirmation-popup/CwConfirmationPopup.d.ts +18 -0
  264. package/dist/src/components/layout/confirmation-popup/CwConfirmationPopup.d.ts.map +1 -0
  265. package/dist/src/components/layout/dialog/CwDialog.d.ts +3 -1
  266. package/dist/src/components/layout/dialog/CwDialog.d.ts.map +1 -1
  267. package/dist/src/components/layout/dialog/CwDialog.js +255 -0
  268. package/dist/src/components/layout/dialog/CwDialogManager.js +44 -0
  269. package/dist/src/components/layout/list/details/CwExpandable.js +28 -0
  270. package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts +1 -0
  271. package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts.map +1 -1
  272. package/dist/src/components/layout/list/key-value/CwKeyValueList.js +23 -0
  273. package/dist/src/components/layout/list/sortable/CwSortableList.d.ts +60 -0
  274. package/dist/src/components/layout/list/sortable/CwSortableList.d.ts.map +1 -0
  275. package/dist/src/components/layout/list/sortable/CwSortableList.js +73 -0
  276. package/dist/src/components/layout/list/sortable/useSortableList.d.ts +58 -0
  277. package/dist/src/components/layout/list/sortable/useSortableList.d.ts.map +1 -0
  278. package/dist/src/components/layout/list/sortable/useSortableList.js +53 -0
  279. package/dist/src/components/layout/modal/CwModalReportFunctional.js +23 -0
  280. package/dist/src/components/layout/modal/hover/CwModalHover.js +61 -0
  281. package/dist/src/components/layout/modal/legacy/cw_modal.d.ts.map +1 -1
  282. package/dist/src/components/layout/modal/legacy/cw_modal.js +44 -0
  283. package/dist/src/components/layout/modal/legacy/cw_modal_confirm.js +39 -0
  284. package/dist/src/components/layout/modal/legacy/cw_modal_iframe.js +44 -0
  285. package/dist/src/components/layout/modal/legacy/cw_modal_report.js +26 -0
  286. package/dist/{components/layout/table/grouped/CwTableGrouped.d.ts → src/components/layout/table/grouped/CwTableGrouped.js} +13 -23
  287. package/dist/src/components/layout/tabs/CwTabs.d.ts +1 -2
  288. package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
  289. package/dist/src/components/layout/tabs/CwTabs.js +53 -0
  290. package/dist/src/dev/index.d.ts +5 -0
  291. package/dist/src/dev/index.d.ts.map +1 -0
  292. package/dist/src/dev/palette.d.ts +4 -0
  293. package/dist/src/dev/palette.d.ts.map +1 -0
  294. package/dist/src/dev/previews.d.ts +3 -0
  295. package/dist/src/dev/previews.d.ts.map +1 -0
  296. package/dist/src/dev/useInitial.d.ts +3 -0
  297. package/dist/src/dev/useInitial.d.ts.map +1 -0
  298. package/dist/src/index.d.ts +10 -2
  299. package/dist/src/index.d.ts.map +1 -1
  300. package/dist/src/index.js +187 -0
  301. package/dist/test/components/custom/new-scheduler/presentation/logic/getDefaultDivisions.test.js +48 -0
  302. package/dist/test/components/custom/new-scheduler/presentation/logic/getEventSizes.test.d.ts +2 -0
  303. package/dist/test/components/custom/new-scheduler/presentation/logic/getEventSizes.test.d.ts.map +1 -0
  304. package/dist/test/components/custom/new-scheduler/presentation/logic/hoursBetween.test.js +15 -0
  305. package/dist/test/components/custom/new-scheduler/presentation/logic/monthDivisions.test.js +42 -0
  306. package/dist/test/components/custom/new-scheduler/presentation/logic/weekendCalc.test.js +30 -0
  307. package/dist/test/components/custom/scheduler/addMinutesToDateFromPx.test.js +43 -0
  308. package/dist/test/components/custom/scheduler/checkIfSlotAvailable.test.js +30 -0
  309. package/dist/test/components/custom/scheduler/daysBetweenTwoDates.test.js +61 -0
  310. package/dist/test/components/custom/scheduler/daysBetweenTwoDatesWithoutCeilForEvent.test.js +27 -0
  311. package/dist/test/components/custom/scheduler/getGUID.test.js +30 -0
  312. package/dist/test/components/custom/scheduler/getPixelsForEvent.test.js +38 -0
  313. package/dist/test/components/custom/scheduler/getTimeHeaders.test.js +35 -0
  314. package/dist/test/components/custom/scheduler/hasSameProperties.test.js +51 -0
  315. package/dist/test/components/custom/scheduler/isAllowedToMove.test.js +28 -0
  316. package/dist/test/components/custom/scheduler/listOfDatesToWeeks.test.js +72 -0
  317. package/dist/test/jest.setup.js +1 -0
  318. package/package.json +11 -4
  319. package/dist/common/classes/CwSelectList.d.ts +0 -8
  320. package/dist/common/classes/CwSelectList.d.ts.map +0 -1
  321. package/dist/common/classes/CwSelectListItems.d.ts +0 -9
  322. package/dist/common/classes/CwSelectListItems.d.ts.map +0 -1
  323. package/dist/common/functions/collections.d.ts +0 -15
  324. package/dist/common/functions/collections.d.ts.map +0 -1
  325. package/dist/common/functions/colorManipulation.d.ts +0 -6
  326. package/dist/common/functions/colorManipulation.d.ts.map +0 -1
  327. package/dist/common/functions/dsl/UiEventDSL.d.ts +0 -9
  328. package/dist/common/functions/dsl/UiEventDSL.d.ts.map +0 -1
  329. package/dist/common/functions/useSingleAndDoubleClicks.d.ts +0 -7
  330. package/dist/common/functions/useSingleAndDoubleClicks.d.ts.map +0 -1
  331. package/dist/common/interfaces/CwSelectListProps.d.ts +0 -9
  332. package/dist/common/interfaces/CwSelectListProps.d.ts.map +0 -1
  333. package/dist/components/control/action/button/CwButton.d.ts +0 -26
  334. package/dist/components/control/action/button/CwButton.d.ts.map +0 -1
  335. package/dist/components/control/action/buttons/CwButtons.d.ts +0 -59
  336. package/dist/components/control/action/buttons/CwButtons.d.ts.map +0 -1
  337. package/dist/components/control/action/contextmenu/CwContextMenu.d.ts +0 -23
  338. package/dist/components/control/action/contextmenu/CwContextMenu.d.ts.map +0 -1
  339. package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts +0 -29
  340. package/dist/components/control/action/contextual-menu/CwContextualMenu.d.ts.map +0 -1
  341. package/dist/components/control/action/search/CwSearch.d.ts +0 -16
  342. package/dist/components/control/action/search/CwSearch.d.ts.map +0 -1
  343. package/dist/components/control/choice/checkbox/CwCheckbox.d.ts +0 -17
  344. package/dist/components/control/choice/checkbox/CwCheckbox.d.ts.map +0 -1
  345. package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts +0 -24
  346. package/dist/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts.map +0 -1
  347. package/dist/components/control/choice/dropdown/CwDropdown.d.ts +0 -19
  348. package/dist/components/control/choice/dropdown/CwDropdown.d.ts.map +0 -1
  349. package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts +0 -17
  350. package/dist/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +0 -1
  351. package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts +0 -28
  352. package/dist/components/control/choice/dropdown/CwDropdownFilter.d.ts.map +0 -1
  353. package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts +0 -21
  354. package/dist/components/control/choice/dropdown/CwDropdownNavigation.d.ts.map +0 -1
  355. package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts +0 -158
  356. package/dist/components/control/choice/multi-filter/CwMultiFilter.d.ts.map +0 -1
  357. package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts +0 -33
  358. package/dist/components/control/choice/multi-filter/components/tag/CwMultiFilterTag.d.ts.map +0 -1
  359. package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts +0 -16
  360. package/dist/components/control/choice/multiselect/CwHeadFilter.d.ts.map +0 -1
  361. package/dist/components/control/choice/multiselect/CwMultiselect.d.ts +0 -13
  362. package/dist/components/control/choice/multiselect/CwMultiselect.d.ts.map +0 -1
  363. package/dist/components/control/choice/multiselect/CwOptionList.d.ts +0 -15
  364. package/dist/components/control/choice/multiselect/CwOptionList.d.ts.map +0 -1
  365. package/dist/components/control/choice/option/CwOption.d.ts +0 -17
  366. package/dist/components/control/choice/option/CwOption.d.ts.map +0 -1
  367. package/dist/components/control/choice/select/CwSelect.d.ts +0 -48
  368. package/dist/components/control/choice/select/CwSelect.d.ts.map +0 -1
  369. package/dist/components/control/choice/toggle/CwToggle.d.ts +0 -28
  370. package/dist/components/control/choice/toggle/CwToggle.d.ts.map +0 -1
  371. package/dist/components/control/input/any/CwInput.d.ts +0 -17
  372. package/dist/components/control/input/any/CwInput.d.ts.map +0 -1
  373. package/dist/components/control/input/date/CwInputDate.d.ts +0 -40
  374. package/dist/components/control/input/date/CwInputDate.d.ts.map +0 -1
  375. package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts +0 -7
  376. package/dist/components/control/input/date-picker/CwInputDatePicker.d.ts.map +0 -1
  377. package/dist/components/control/input/date-text/CwInputDateText.d.ts +0 -38
  378. package/dist/components/control/input/date-text/CwInputDateText.d.ts.map +0 -1
  379. package/dist/components/control/input/datetime/CwInputDatetime.d.ts +0 -40
  380. package/dist/components/control/input/datetime/CwInputDatetime.d.ts.map +0 -1
  381. package/dist/components/control/input/digit/CwDigit.d.ts +0 -40
  382. package/dist/components/control/input/digit/CwDigit.d.ts.map +0 -1
  383. package/dist/components/control/input/file/CwFileUpload.d.ts +0 -18
  384. package/dist/components/control/input/file/CwFileUpload.d.ts.map +0 -1
  385. package/dist/components/control/input/file/CwFileUploadMultiple.d.ts +0 -15
  386. package/dist/components/control/input/file/CwFileUploadMultiple.d.ts.map +0 -1
  387. package/dist/components/control/input/image/CwInputImage.d.ts +0 -7
  388. package/dist/components/control/input/image/CwInputImage.d.ts.map +0 -1
  389. package/dist/components/control/input/image-area/CwImageArea.d.ts +0 -53
  390. package/dist/components/control/input/image-area/CwImageArea.d.ts.map +0 -1
  391. package/dist/components/control/input/number/CwInputNumber.d.ts +0 -20
  392. package/dist/components/control/input/number/CwInputNumber.d.ts.map +0 -1
  393. package/dist/components/control/input/phone/CwInputPhone.d.ts +0 -36
  394. package/dist/components/control/input/phone/CwInputPhone.d.ts.map +0 -1
  395. package/dist/components/control/input/text/CwInputText.d.ts +0 -40
  396. package/dist/components/control/input/text/CwInputText.d.ts.map +0 -1
  397. package/dist/components/control/input/text-area/CwTextArea.d.ts +0 -24
  398. package/dist/components/control/input/text-area/CwTextArea.d.ts.map +0 -1
  399. package/dist/components/control/input/time/CwTime.d.ts +0 -40
  400. package/dist/components/control/input/time/CwTime.d.ts.map +0 -1
  401. package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts +0 -53
  402. package/dist/components/control/input/weekday/CwWeekdaySelector.d.ts.map +0 -1
  403. package/dist/components/custom/find-airport/CwFindAirportComp.d.ts +0 -35
  404. package/dist/components/custom/find-airport/CwFindAirportComp.d.ts.map +0 -1
  405. package/dist/components/custom/scheduler/CwSchedulerComp.d.ts +0 -19
  406. package/dist/components/custom/scheduler/CwSchedulerComp.d.ts.map +0 -1
  407. package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts +0 -86
  408. package/dist/components/custom/scheduler/CwSuperSchedulerComp.d.ts.map +0 -1
  409. package/dist/components/custom/scheduler/components/EventRender.d.ts +0 -10
  410. package/dist/components/custom/scheduler/components/EventRender.d.ts.map +0 -1
  411. package/dist/components/custom/scheduler/components/ResourceListRender.d.ts +0 -20
  412. package/dist/components/custom/scheduler/components/ResourceListRender.d.ts.map +0 -1
  413. package/dist/components/custom/scheduler/components/ResourceRender.d.ts +0 -14
  414. package/dist/components/custom/scheduler/components/ResourceRender.d.ts.map +0 -1
  415. package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts +0 -11
  416. package/dist/components/custom/scheduler/components/day_headers/DayHeader.d.ts.map +0 -1
  417. package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts +0 -11
  418. package/dist/components/custom/scheduler/components/day_headers/MonthHeader.d.ts.map +0 -1
  419. package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts +0 -13
  420. package/dist/components/custom/scheduler/components/day_headers/MyDaysHeader.d.ts.map +0 -1
  421. package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts +0 -11
  422. package/dist/components/custom/scheduler/components/day_headers/WeekHeader.d.ts.map +0 -1
  423. package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts +0 -14
  424. package/dist/components/custom/scheduler/components/resources_title_list/ResourcesTitleList.d.ts.map +0 -1
  425. package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts +0 -23
  426. package/dist/components/custom/scheduler/components/scheduler_content_area/SchedulerContentArea.d.ts.map +0 -1
  427. package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts +0 -8
  428. package/dist/components/custom/scheduler/components/scheduler_header/SchedulerHeader.d.ts.map +0 -1
  429. package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts +0 -12
  430. package/dist/components/custom/scheduler/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +0 -1
  431. package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts +0 -12
  432. package/dist/components/custom/scheduler/components/time_headers/TimeHeader.d.ts.map +0 -1
  433. package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts +0 -10
  434. package/dist/components/custom/scheduler/components/time_headers/TimeHeaderRow.d.ts.map +0 -1
  435. package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts +0 -12
  436. package/dist/components/custom/scheduler/components/time_line/TimeLine.d.ts.map +0 -1
  437. package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts +0 -2
  438. package/dist/components/custom/scheduler/logic/dates/addMinutesToDateFromPx.d.ts.map +0 -1
  439. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts +0 -2
  440. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDates.d.ts.map +0 -1
  441. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +0 -2
  442. package/dist/components/custom/scheduler/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +0 -1
  443. package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts +0 -7
  444. package/dist/components/custom/scheduler/logic/dates/getFormatedTimeForHeader.d.ts.map +0 -1
  445. package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts +0 -10
  446. package/dist/components/custom/scheduler/logic/dates/getMonthHeaderData.d.ts.map +0 -1
  447. package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts +0 -2
  448. package/dist/components/custom/scheduler/logic/dates/getUtcToday.d.ts.map +0 -1
  449. package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +0 -7
  450. package/dist/components/custom/scheduler/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +0 -1
  451. package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts +0 -8
  452. package/dist/components/custom/scheduler/logic/dates/listOfDatesToWeeks.d.ts.map +0 -1
  453. package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts +0 -2
  454. package/dist/components/custom/scheduler/logic/divisions/calculateDivisionType.d.ts.map +0 -1
  455. package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts +0 -2
  456. package/dist/components/custom/scheduler/logic/divisions/calculateDivisions.d.ts.map +0 -1
  457. package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts +0 -3
  458. package/dist/components/custom/scheduler/logic/filtering/filterEvents.d.ts.map +0 -1
  459. package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts +0 -3
  460. package/dist/components/custom/scheduler/logic/filtering/filterResources.d.ts.map +0 -1
  461. package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts +0 -13
  462. package/dist/components/custom/scheduler/logic/onDrop/OnDrop.d.ts.map +0 -1
  463. package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts +0 -17
  464. package/dist/components/custom/scheduler/logic/pixels/getPixelsForEvent.d.ts.map +0 -1
  465. package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts +0 -3
  466. package/dist/components/custom/scheduler/logic/pixels/heightScheduler.d.ts.map +0 -1
  467. package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts +0 -4
  468. package/dist/components/custom/scheduler/logic/state_handle/doubleClickOnResource.d.ts.map +0 -1
  469. package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts +0 -2
  470. package/dist/components/custom/scheduler/logic/state_handle/onDragOver.d.ts.map +0 -1
  471. package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts +0 -5
  472. package/dist/components/custom/scheduler/logic/state_handle/onDropEventToResource.d.ts.map +0 -1
  473. package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts +0 -2
  474. package/dist/components/custom/scheduler/logic/strings/compareStrings.d.ts.map +0 -1
  475. package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts +0 -2
  476. package/dist/components/custom/scheduler/logic/strings/getGUID.d.ts.map +0 -1
  477. package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts +0 -3
  478. package/dist/components/custom/scheduler/logic/ui/checkIfSlotAvailable.d.ts.map +0 -1
  479. package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts +0 -4
  480. package/dist/components/custom/scheduler/logic/ui/getEventsOfResource.d.ts.map +0 -1
  481. package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts +0 -2
  482. package/dist/components/custom/scheduler/logic/ui/getTimeHeaders.d.ts.map +0 -1
  483. package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts +0 -3
  484. package/dist/components/custom/scheduler/logic/ui/isAllowedToMove.d.ts.map +0 -1
  485. package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts +0 -11
  486. package/dist/components/custom/scheduler/state/CblDragAndDrop.d.ts.map +0 -1
  487. package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts +0 -43
  488. package/dist/components/custom/scheduler/state/CwSchedulerProps.d.ts.map +0 -1
  489. package/dist/components/custom/scheduler/state/Resource.d.ts +0 -14
  490. package/dist/components/custom/scheduler/state/Resource.d.ts.map +0 -1
  491. package/dist/components/custom/scheduler/state/State.d.ts +0 -19
  492. package/dist/components/custom/scheduler/state/State.d.ts.map +0 -1
  493. package/dist/components/custom/scheduler/state/cblEvent.d.ts +0 -18
  494. package/dist/components/custom/scheduler/state/cblEvent.d.ts.map +0 -1
  495. package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts +0 -7
  496. package/dist/components/custom/scheduler/state/cblEventCompProps.d.ts.map +0 -1
  497. package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts +0 -6
  498. package/dist/components/custom/scheduler/state/resourceCompProps2.d.ts.map +0 -1
  499. package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts +0 -29
  500. package/dist/components/custom/scheduler-new/presentation/NewScheduler.d.ts.map +0 -1
  501. package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts +0 -80
  502. package/dist/components/custom/scheduler-new/presentation/NewSchedulerUiEvents.d.ts.map +0 -1
  503. package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts +0 -27
  504. package/dist/components/custom/scheduler-new/presentation/SchedulerPresenter.d.ts.map +0 -1
  505. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts +0 -19
  506. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderDivision.d.ts.map +0 -1
  507. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts +0 -10
  508. package/dist/components/custom/scheduler-new/presentation/components/header/HeaderTitle.d.ts.map +0 -1
  509. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts +0 -5
  510. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeader.d.ts.map +0 -1
  511. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts +0 -17
  512. package/dist/components/custom/scheduler-new/presentation/components/header/SchedulerHeaderState.d.ts.map +0 -1
  513. package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts +0 -8
  514. package/dist/components/custom/scheduler-new/presentation/components/row/BackgroundEvent.d.ts.map +0 -1
  515. package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts +0 -17
  516. package/dist/components/custom/scheduler-new/presentation/components/row/DefaultRowHeader.d.ts.map +0 -1
  517. package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts +0 -34
  518. package/dist/components/custom/scheduler-new/presentation/components/row/Event.d.ts.map +0 -1
  519. package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts +0 -8
  520. package/dist/components/custom/scheduler-new/presentation/components/row/EventSideDrag.d.ts.map +0 -1
  521. package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts +0 -27
  522. package/dist/components/custom/scheduler-new/presentation/components/row/SchedulerRow.d.ts.map +0 -1
  523. package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts +0 -10
  524. package/dist/components/custom/scheduler-new/presentation/components/timeline/DivisionLine.d.ts.map +0 -1
  525. package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts +0 -15
  526. package/dist/components/custom/scheduler-new/presentation/components/timeline/TimeLine.d.ts.map +0 -1
  527. package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts +0 -11
  528. package/dist/components/custom/scheduler-new/presentation/components/timeline/WeekEndLine.d.ts.map +0 -1
  529. package/dist/components/custom/scheduler-new/presentation/helpers.d.ts +0 -19
  530. package/dist/components/custom/scheduler-new/presentation/helpers.d.ts.map +0 -1
  531. package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts +0 -4
  532. package/dist/components/custom/scheduler-new/presentation/logic/WeekendCalc.d.ts.map +0 -1
  533. package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts +0 -2
  534. package/dist/components/custom/scheduler-new/presentation/logic/dateFromPercentage.d.ts.map +0 -1
  535. package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts +0 -2
  536. package/dist/components/custom/scheduler-new/presentation/logic/eventIsVisible.d.ts.map +0 -1
  537. package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts +0 -6
  538. package/dist/components/custom/scheduler-new/presentation/logic/getDefaultDivisions.d.ts.map +0 -1
  539. package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts +0 -3
  540. package/dist/components/custom/scheduler-new/presentation/logic/getDivisions.d.ts.map +0 -1
  541. package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts +0 -6
  542. package/dist/components/custom/scheduler-new/presentation/logic/getEventSizes.d.ts.map +0 -1
  543. package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts +0 -4
  544. package/dist/components/custom/scheduler-new/presentation/logic/getLinesByDivisions.d.ts.map +0 -1
  545. package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts +0 -2
  546. package/dist/components/custom/scheduler-new/presentation/logic/getPercentageFromMouseEvent.d.ts.map +0 -1
  547. package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts +0 -3
  548. package/dist/components/custom/scheduler-new/presentation/logic/separateEventsToInnerRows.d.ts.map +0 -1
  549. package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts +0 -4
  550. package/dist/components/custom/scheduler-new/presentation/logic/sortByCategoryAndTitle.d.ts.map +0 -1
  551. package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts +0 -12
  552. package/dist/components/custom/scheduler-new/presentation/state/ui/SchedulerState.d.ts.map +0 -1
  553. package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts +0 -5
  554. package/dist/components/custom/scheduler-new/presentation/state/ui/WeekRange.d.ts.map +0 -1
  555. package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts +0 -24
  556. package/dist/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts.map +0 -1
  557. package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts +0 -86
  558. package/dist/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +0 -1
  559. package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts +0 -10
  560. package/dist/components/custom/scheduler-temporal/components/EventRender.d.ts.map +0 -1
  561. package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts +0 -20
  562. package/dist/components/custom/scheduler-temporal/components/ResourceListRender.d.ts.map +0 -1
  563. package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts +0 -14
  564. package/dist/components/custom/scheduler-temporal/components/ResourceRender.d.ts.map +0 -1
  565. package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts +0 -11
  566. package/dist/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts.map +0 -1
  567. package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts +0 -11
  568. package/dist/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts.map +0 -1
  569. package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts +0 -13
  570. package/dist/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts.map +0 -1
  571. package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts +0 -11
  572. package/dist/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts.map +0 -1
  573. package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts +0 -14
  574. package/dist/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts.map +0 -1
  575. package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts +0 -23
  576. package/dist/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts.map +0 -1
  577. package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts +0 -8
  578. package/dist/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts.map +0 -1
  579. package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts +0 -12
  580. package/dist/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +0 -1
  581. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts +0 -12
  582. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts.map +0 -1
  583. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts +0 -10
  584. package/dist/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts.map +0 -1
  585. package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts +0 -12
  586. package/dist/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts.map +0 -1
  587. package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts +0 -2
  588. package/dist/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts.map +0 -1
  589. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts +0 -2
  590. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts.map +0 -1
  591. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +0 -2
  592. package/dist/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +0 -1
  593. package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts +0 -7
  594. package/dist/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts.map +0 -1
  595. package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts +0 -10
  596. package/dist/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts.map +0 -1
  597. package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts +0 -2
  598. package/dist/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts.map +0 -1
  599. package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +0 -7
  600. package/dist/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +0 -1
  601. package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts +0 -8
  602. package/dist/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts.map +0 -1
  603. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts +0 -2
  604. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts.map +0 -1
  605. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts +0 -2
  606. package/dist/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts.map +0 -1
  607. package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +0 -15
  608. package/dist/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +0 -1
  609. package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts +0 -3
  610. package/dist/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts.map +0 -1
  611. package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts +0 -3
  612. package/dist/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts.map +0 -1
  613. package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts +0 -13
  614. package/dist/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts.map +0 -1
  615. package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +0 -17
  616. package/dist/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +0 -1
  617. package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +0 -3
  618. package/dist/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +0 -1
  619. package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts +0 -4
  620. package/dist/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts.map +0 -1
  621. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts +0 -2
  622. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts.map +0 -1
  623. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts +0 -5
  624. package/dist/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts.map +0 -1
  625. package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts +0 -4
  626. package/dist/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts.map +0 -1
  627. package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts +0 -2
  628. package/dist/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts.map +0 -1
  629. package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts +0 -2
  630. package/dist/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts.map +0 -1
  631. package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +0 -3
  632. package/dist/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +0 -1
  633. package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts +0 -6
  634. package/dist/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts.map +0 -1
  635. package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts +0 -2
  636. package/dist/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts.map +0 -1
  637. package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts +0 -3
  638. package/dist/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts.map +0 -1
  639. package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts +0 -11
  640. package/dist/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts.map +0 -1
  641. package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts +0 -43
  642. package/dist/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts.map +0 -1
  643. package/dist/components/custom/scheduler-temporal/state/Resource.d.ts +0 -14
  644. package/dist/components/custom/scheduler-temporal/state/Resource.d.ts.map +0 -1
  645. package/dist/components/custom/scheduler-temporal/state/State.d.ts +0 -25
  646. package/dist/components/custom/scheduler-temporal/state/State.d.ts.map +0 -1
  647. package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts +0 -18
  648. package/dist/components/custom/scheduler-temporal/state/cblEvent.d.ts.map +0 -1
  649. package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts +0 -7
  650. package/dist/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts.map +0 -1
  651. package/dist/components/custom/super-scheduler/PinRowHeader.d.ts +0 -15
  652. package/dist/components/custom/super-scheduler/PinRowHeader.d.ts.map +0 -1
  653. package/dist/components/custom/super-scheduler/SuperScheduler.d.ts +0 -25
  654. package/dist/components/custom/super-scheduler/SuperScheduler.d.ts.map +0 -1
  655. package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts +0 -13
  656. package/dist/components/custom/super-scheduler/SuperSchedulerEvents.d.ts.map +0 -1
  657. package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts +0 -9
  658. package/dist/components/custom/super-scheduler/SuperSchedulerPresenter.d.ts.map +0 -1
  659. package/dist/components/display/data/accordion/CwAccordionContainer.d.ts +0 -14
  660. package/dist/components/display/data/accordion/CwAccordionContainer.d.ts.map +0 -1
  661. package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts +0 -15
  662. package/dist/components/display/data/generic_tooltip/CwGenericTooltip.d.ts.map +0 -1
  663. package/dist/components/display/data/table/CwTable.d.ts +0 -102
  664. package/dist/components/display/data/table/CwTable.d.ts.map +0 -1
  665. package/dist/components/display/graphics/icon/CwIcon.d.ts +0 -15
  666. package/dist/components/display/graphics/icon/CwIcon.d.ts.map +0 -1
  667. package/dist/components/display/graphics/loading/CwLoading.d.ts +0 -42
  668. package/dist/components/display/graphics/loading/CwLoading.d.ts.map +0 -1
  669. package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts +0 -18
  670. package/dist/components/display/graphics/loading-small/CwLoadingSmall.d.ts.map +0 -1
  671. package/dist/components/display/text/heading/CwHeadingMain.d.ts +0 -3
  672. package/dist/components/display/text/heading/CwHeadingMain.d.ts.map +0 -1
  673. package/dist/components/display/text/heading/CwHeadingSecond.d.ts +0 -3
  674. package/dist/components/display/text/heading/CwHeadingSecond.d.ts.map +0 -1
  675. package/dist/components/display/text/label/CwLabel.d.ts +0 -28
  676. package/dist/components/display/text/label/CwLabel.d.ts.map +0 -1
  677. package/dist/components/display/text/message/CwMessage.d.ts +0 -31
  678. package/dist/components/display/text/message/CwMessage.d.ts.map +0 -1
  679. package/dist/components/display/text/tag/CwChip.d.ts +0 -36
  680. package/dist/components/display/text/tag/CwChip.d.ts.map +0 -1
  681. package/dist/components/display/text/tag/CwTag.d.ts +0 -16
  682. package/dist/components/display/text/tag/CwTag.d.ts.map +0 -1
  683. package/dist/components/display/text/tooltip/CwTooltip.d.ts +0 -8
  684. package/dist/components/display/text/tooltip/CwTooltip.d.ts.map +0 -1
  685. package/dist/components/layout/align/CwAlign.d.ts +0 -54
  686. package/dist/components/layout/align/CwAlign.d.ts.map +0 -1
  687. package/dist/components/layout/card/CwCard.d.ts +0 -61
  688. package/dist/components/layout/card/CwCard.d.ts.map +0 -1
  689. package/dist/components/layout/card/CwCardList.d.ts +0 -32
  690. package/dist/components/layout/card/CwCardList.d.ts.map +0 -1
  691. package/dist/components/layout/dialog/CwDialog.d.ts +0 -28
  692. package/dist/components/layout/dialog/CwDialog.d.ts.map +0 -1
  693. package/dist/components/layout/dialog/CwDialogManager.d.ts +0 -11
  694. package/dist/components/layout/dialog/CwDialogManager.d.ts.map +0 -1
  695. package/dist/components/layout/list/details/CwExpandable.d.ts +0 -23
  696. package/dist/components/layout/list/details/CwExpandable.d.ts.map +0 -1
  697. package/dist/components/layout/list/key-value/CwKeyValueList.d.ts +0 -33
  698. package/dist/components/layout/list/key-value/CwKeyValueList.d.ts.map +0 -1
  699. package/dist/components/layout/modal/CwModalReportFunctional.d.ts +0 -15
  700. package/dist/components/layout/modal/CwModalReportFunctional.d.ts.map +0 -1
  701. package/dist/components/layout/modal/hover/CwModalHover.d.ts +0 -19
  702. package/dist/components/layout/modal/hover/CwModalHover.d.ts.map +0 -1
  703. package/dist/components/layout/modal/legacy/cw_modal.d.ts +0 -22
  704. package/dist/components/layout/modal/legacy/cw_modal.d.ts.map +0 -1
  705. package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts +0 -16
  706. package/dist/components/layout/modal/legacy/cw_modal_confirm.d.ts.map +0 -1
  707. package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts +0 -21
  708. package/dist/components/layout/modal/legacy/cw_modal_iframe.d.ts.map +0 -1
  709. package/dist/components/layout/modal/legacy/cw_modal_report.d.ts +0 -32
  710. package/dist/components/layout/modal/legacy/cw_modal_report.d.ts.map +0 -1
  711. package/dist/components/layout/table/grouped/CwTableGrouped.d.ts.map +0 -1
  712. package/dist/components/layout/tabs/CwTabs.d.ts +0 -46
  713. package/dist/components/layout/tabs/CwTabs.d.ts.map +0 -1
  714. package/dist/index.d.ts.map +0 -1
package/dist/index.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$e = {"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$e["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$e["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$e["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$d = {"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$d["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$d["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$c = {"card":"cw-card-module_card__HJUT0","clickable":"cw-card-module_clickable__Y-V3X","disabled":"cw-card-module_disabled__0wHh1","loading":"cw-card-module_loading__-fzlx","content":"cw-card-module_content__ma9qy","headerContent":"cw-card-module_headerContent__x4Jfl","footerTags":"cw-card-module_footerTags__80sSW","loadingOverlay":"cw-card-module_loadingOverlay__8-zVV"};
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$c.card,
1466
+ styles$g.card,
1086
1467
  className,
1087
- clickable ? styles$c.clickable : '',
1088
- disabled ? styles$c.disabled : '',
1089
- isLoading ? styles$c.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$c.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$c.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$c.content, children: children }), hasFooter && (jsxRuntime.jsxs("footer", { children: [hasChips && (jsxRuntime.jsx("div", { className: styles$c.footerTags, children: chips.map((chip, index) => (jsxRuntime.jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$c.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsxRuntime.jsx("div", { className: styles$c.footerContent, children: footer }))] })), direction === "row" && ActionsComponent, isLoading && (jsxRuntime.jsx("div", { className: styles$c.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$b = {"cardContainer":"cw-card-list-module_cardContainer__l3YEh","pagination":"cw-card-list-module_pagination__5Ay78","pageInfo":"cw-card-list-module_pageInfo__uiMel","emptyState":"cw-card-list-module_emptyState__RlqiS","sortControls":"cw-card-list-module_sortControls__mWgZA"};
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$b.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$b.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$b.loading, children: jsxRuntime.jsx(CwLoading, { isLoading: isLoading }) })) : sortedItems.length === 0 ? (jsxRuntime.jsx("div", { className: styles$b.emptyState, children: emptyState || jsxRuntime.jsx("p", { children: "No items to display" }) })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: `${styles$b.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsxRuntime.jsx("div", { className: styles$b.cardWrapper, children: renderCard(item, index) }, index))) }), totalPages > 1 && (jsxRuntime.jsxs("div", { className: styles$b.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$b.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$a = {"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$a["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$a["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$9 = {"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$9['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$9['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
@@ -1586,7 +2093,7 @@ function CwFileUpload(fileUploadProps) {
1586
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}`] }) })] }));
1587
2094
  }
1588
2095
 
1589
- var styles$8 = {"fileUploadContainer":"cw-file-upload-multiple-module_fileUploadContainer__liEc1","hiddenInput":"cw-file-upload-multiple-module_hiddenInput__TZBBI","uploadArea":"cw-file-upload-multiple-module_uploadArea__DdOhs","uploadAreaDisabled":"cw-file-upload-multiple-module_uploadAreaDisabled__VWeFX","uploadTitle":"cw-file-upload-multiple-module_uploadTitle__gjRk8","uploadSubtitle":"cw-file-upload-multiple-module_uploadSubtitle__Z0S5t","filesContainer":"cw-file-upload-multiple-module_filesContainer__g44PY","fileItem":"cw-file-upload-multiple-module_fileItem__w27Dg","fileIcon":"cw-file-upload-multiple-module_fileIcon__iJJUX","fileExtension":"cw-file-upload-multiple-module_fileExtension__vOuHv","fileInfo":"cw-file-upload-multiple-module_fileInfo__R5ZTv","fileName":"cw-file-upload-multiple-module_fileName__DjepK","fileSize":"cw-file-upload-multiple-module_fileSize__b8GSm","smallButton":"cw-file-upload-multiple-module_smallButton__siUAh"};
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"};
1590
2097
 
1591
2098
  function CwFileUploadMultiple(fileUploadProps) {
1592
2099
  const fileInputRef = React.useRef(null);
@@ -1728,7 +2235,7 @@ function CwFileUploadMultiple(fileUploadProps) {
1728
2235
  }
1729
2236
  }
1730
2237
  };
1731
- return (jsxRuntime.jsxs("div", { className: `${styles$8.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$8.hiddenInput }), selectedFiles.length === 0 ? (jsxRuntime.jsxs("div", { className: `${styles$8.uploadArea} ${fileUploadProps.disabled ? styles$8.uploadAreaDisabled : ''}`, onDragOver: handleDragOver, onDrop: handleDrop, onClick: !fileUploadProps.disabled ? handleButtonClick : undefined, children: [jsxRuntime.jsx(CwIcon, { iconId: "upload" }), jsxRuntime.jsx("p", { className: `${styles$8.uploadTitle}`, children: fileUploadProps.disabled ? 'Upload disabled' : 'Click to upload or drag and drop' }), jsxRuntime.jsxs("p", { className: `${styles$8.uploadSubtitle}`, children: [fileUploadProps.accept ? `Accepted files: ${fileUploadProps.accept}` : 'All file types accepted', !fileUploadProps.multiple && ' (Single file only)'] })] })) : (jsxRuntime.jsxs("div", { className: styles$8.filesContainer, children: [jsxRuntime.jsxs("div", { className: "cw-flex-row cw-align-between-center", children: [jsxRuntime.jsxs("small", { className: styles$8.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$8.fileItem, children: [jsxRuntime.jsxs("div", { className: styles$8.fileIcon, children: [jsxRuntime.jsx(CwIcon, { iconId: "page" }), jsxRuntime.jsx("span", { className: styles$8.fileExtension, children: getFileExtension(file.name) })] }), jsxRuntime.jsxs("div", { className: styles$8.fileInfo, children: [jsxRuntime.jsx("p", { className: styles$8.fileName, children: file.name }), jsxRuntime.jsxs("p", { className: styles$8.fileSize, children: [(file.size / 1024).toFixed(1), " KB"] })] }), jsxRuntime.jsx(CwButton, { variant: "icon", icon: "close", color: "neutral", onClick: () => removeFile(index), className: styles$8.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 }))] }))] }));
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 }))] }))] }));
1732
2239
  }
1733
2240
 
1734
2241
  function CwInput(CwInputProps) {
@@ -1771,6 +2278,355 @@ function CwDigit(props) {
1771
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 })] }) }));
1772
2279
  }
1773
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
+
1774
2630
  /**
1775
2631
  * Input for entering a string of text.
1776
2632
  * @remarks
@@ -1791,8 +2647,11 @@ function CwDigit(props) {
1791
2647
  * ```
1792
2648
  */
1793
2649
  function CwInputText(props) {
1794
- const { alignProps, buttonProps, iconProps, labelProps, ...inputProps } = props;
1795
- 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 })] }) }));
1796
2655
  }
1797
2656
 
1798
2657
  /**
@@ -1820,7 +2679,7 @@ function CwInputNumber(CwInputNumberProps) {
1820
2679
  CwInputNumberProps.onChange(e.target.value);
1821
2680
  };
1822
2681
  return (jsxRuntime.jsxs("div", { className: CwInputNumberProps.labelPosition == "column"
1823
- ? "cw-flex-column"
2682
+ ? "cw-flex-column cw-gap-none"
1824
2683
  : "cw-flex-row", children: [jsxRuntime.jsx("label", { className: CwInputNumberProps.disabled === true
1825
2684
  ? CwInputNumberProps.labelClassName + " " + "cw_label_text cw_label_text_disabled"
1826
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 })] }));
@@ -2258,7 +3117,7 @@ const CwImageArea = React.forwardRef((props, ref) => {
2258
3117
  });
2259
3118
  CwImageArea.displayName = "CwImageArea";
2260
3119
 
2261
- 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"};
2262
3121
 
2263
3122
  /**
2264
3123
  * This class represents a week where days can be selected or unselected
@@ -2398,34 +3257,30 @@ const CwWeekdaySelector = ({ value = "", onChange, disabled = false }) => {
2398
3257
  setSelectedDays(newWeekdays);
2399
3258
  onChange?.(newWeekdays.toString());
2400
3259
  };
2401
- 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))) }));
2402
3261
  };
2403
3262
 
2404
3263
  function CwCheckbox(CwCheckboxProps) {
2405
3264
  const handleChange = (e) => {
2406
- CwCheckboxProps.onChange(e.target.checked);
3265
+ CwCheckboxProps.onChange?.(e.target.checked);
2407
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
+ }
2408
3271
  return (jsxRuntime.jsxs("div", { className: CwCheckboxProps.labelPosition === "inline"
2409
3272
  ? "cw_checkboxContent cwellt_flex_row" + " " + CwCheckboxProps.classNameContainer
2410
3273
  : CwCheckboxProps.labelPosition === "column"
2411
3274
  ? "cw_checkboxContent cwellt_flex_column" + " " + CwCheckboxProps.classNameContainer
2412
- : "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] }));
2413
3276
  }
2414
3277
 
2415
- /**
2416
- * Toggle-styled checkbox
2417
- * @remarks
2418
- * ```txt
2419
- * ▁▁▁▁
2420
- * ( ⦿)
2421
- * ▔▔▔▔
2422
- * ```
2423
- * @example
2424
- * <CwToggle checked/>
2425
- */
2426
3278
  function CwToggle(props) {
2427
- const { labelProps, buttonProps, iconProps, ...inputProps } = props;
2428
- 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 })] }) }));
2429
3284
  }
2430
3285
 
2431
3286
  /**
@@ -2526,179 +3381,20 @@ function CwDropdownContainer(dropDownContainerProps) {
2526
3381
  };
2527
3382
  }, []);
2528
3383
  // #endregion
2529
- return (jsxRuntime.jsx("div", { className: dropDownContainerProps.dropDownState
2530
- ? "cwellt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_rel" +
2531
- " " +
2532
- dropDownContainerProps.className
2533
- : "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 }) }) }));
2534
- }
2535
-
2536
- function CwDropdownFilter(CwelltDropDownFilterProps) {
2537
- // * Initializing by default false
2538
- const isVisibleDropDownFilter = CwelltDropDownFilterProps.DropDownFilterState !== null &&
2539
- CwelltDropDownFilterProps.DropDownFilterState !== undefined
2540
- ? CwelltDropDownFilterProps.DropDownFilterState
2541
- : false;
2542
- // * Click on content item
2543
- const hideDropDown = () => {
2544
- };
2545
- return (jsxRuntime.jsxs("div", { id: CwelltDropDownFilterProps.IdContent, className: CwelltDropDownFilterProps.ContentClassName + " " + "cwelltDropDownFilterContent", onClick: hideDropDown, style: CwelltDropDownFilterProps.StyleContent, children: [CwelltDropDownFilterProps.children, jsxRuntime.jsx("div", { className: isVisibleDropDownFilter
2546
- ? // * custom className
2547
- CwelltDropDownFilterProps.DropDownClassName + " " + "cwelltDropDownFilter"
2548
- : // * custom className
2549
- 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 => {
2550
- return (jsxRuntime.jsx("span", { id: indexItem.IdDropDown_filter, className: "cwelltDropDownItem", children: indexItem.dropDownFilter_desc }));
2551
- }) }) })] }));
2552
- }
2553
-
2554
- function CwDropdownNavigation(CwelltDropDownNavigationProps) {
2555
- const [isButtonExpanded, setButtonExpanded] = React.useState(false);
2556
- const [isShowDropDownFilter, setShowDropDownFilter] = React.useState(false);
2557
- const buttonDropDownFilter = () => {
2558
- setButtonExpanded(!isButtonExpanded);
2559
- setShowDropDownFilter(!isShowDropDownFilter);
2560
- };
2561
- const clickItemHideDropDownFilter = () => {
2562
- setShowDropDownFilter(false);
2563
- };
2564
- const clickSubItemHideDropDownsFilter = () => {
2565
- // * Main dropDown
2566
- setShowDropDownFilter(false);
2567
- // * Item with subMenu
2568
- setFilterItem_descExpanded(false);
2569
- // * Submenu dropDown
2570
- setShowSubMenu(false);
2571
- };
2572
- const [isShowSubMenu, setShowSubMenu] = React.useState(false);
2573
- const [isFilterItem_descExpanded, setFilterItem_descExpanded] = React.useState(false);
2574
- const cwelltSubMenu = () => {
2575
- setShowSubMenu(!isShowSubMenu);
2576
- setFilterItem_descExpanded(!isFilterItem_descExpanded);
2577
- };
2578
- const hideDropDownContent = () => {
2579
- // * DropDownFilterCrewControl
2580
- const dropDownFilterCrewControl = document.getElementById("DropDownFilterCrewControl");
2581
- // * onMouseLeave [ dropDownFilterCrewControl ]
2582
- dropDownFilterCrewControl?.addEventListener("mouseleave", () => {
2583
- // * button className
2584
- setButtonExpanded(false);
2585
- // * DropDownFilterCrewControl
2586
- setShowDropDownFilter(false); // todo: Add animation to high content
2587
- // * Item with subMenu
2588
- setFilterItem_descExpanded(false);
2589
- // * SubMenu
2590
- setShowSubMenu(false);
2591
- });
2592
- };
2593
- // List subMenu
2594
- const dataSubMenu = [
2595
- {
2596
- IdDropDown_filter: 1,
2597
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: CwelltDropDownNavigationProps.onShowAsignedActive + " " + "cwelltFilterItem_desc", onClick: () => {
2598
- CwelltDropDownNavigationProps.onShowAsigned();
2599
- clickSubItemHideDropDownsFilter();
2600
- }, children: "Show asigned" }))
2601
- },
2602
- {
2603
- IdDropDown_filter: 2,
2604
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2605
- CwelltDropDownNavigationProps.onShowHotel();
2606
- clickSubItemHideDropDownsFilter();
2607
- }, children: "Show hotel" }))
2608
- },
2609
- {
2610
- IdDropDown_filter: 3,
2611
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2612
- CwelltDropDownNavigationProps.onShowWishes();
2613
- clickSubItemHideDropDownsFilter();
2614
- }, children: "Show wishes" }))
2615
- },
2616
- {
2617
- IdDropDown_filter: 4,
2618
- dropDownFilter_desc: jsxRuntime.jsx("span", { className: "cwelltLineDivider" })
2619
- },
2620
- {
2621
- IdDropDown_filter: 5,
2622
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2623
- CwelltDropDownNavigationProps.onShowTrainingAlerts();
2624
- clickSubItemHideDropDownsFilter();
2625
- }, children: "Show training alerts" }))
2626
- },
2627
- {
2628
- IdDropDown_filter: 6,
2629
- dropDownFilter_desc: jsxRuntime.jsx("span", { className: "cwelltLineDivider" })
2630
- },
2631
- {
2632
- IdDropDown_filter: 7,
2633
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2634
- CwelltDropDownNavigationProps.onSmartFilteringFlight();
2635
- clickSubItemHideDropDownsFilter();
2636
- }, children: "Smart filtering flight" }))
2637
- },
2638
- {
2639
- IdDropDown_filter: 7,
2640
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2641
- CwelltDropDownNavigationProps.onSmartFilteringEmployee();
2642
- clickSubItemHideDropDownsFilter();
2643
- }, children: "Smart filtering employee" }))
2644
- },
2645
- {
2646
- IdDropDown_filter: 8,
2647
- dropDownFilter_desc: jsxRuntime.jsx("span", { className: "cwelltLineDivider" })
2648
- },
2649
- {
2650
- IdDropDown_filter: 9,
2651
- 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" } })] }))
2652
- },
2653
- {
2654
- IdDropDown_filter: 10,
2655
- 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" } })] }))
2656
- }
2657
- ];
2658
- // * DataSource items
2659
- const dataSourceItemDropDown = [
2660
- {
2661
- IdDropDown_filter: 1,
2662
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2663
- CwelltDropDownNavigationProps.onShowChanges;
2664
- // clickItemHideDropDownFilter();
2665
- }, children: "Show changes" }))
2666
- },
2667
- {
2668
- IdDropDown_filter: 2,
2669
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2670
- CwelltDropDownNavigationProps.onShowVisibleChanges;
2671
- clickItemHideDropDownFilter();
2672
- }, children: "Save visible changes" }))
2673
- },
2674
- {
2675
- IdDropDown_filter: 3,
2676
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2677
- CwelltDropDownNavigationProps.onShowSkip;
2678
- clickItemHideDropDownFilter();
2679
- }, children: "Skip" }))
2680
- },
2681
- {
2682
- IdDropDown_filter: 4,
2683
- dropDownFilter_desc: (jsxRuntime.jsx("span", { className: "cwelltFilterItem_desc", onClick: () => {
2684
- CwelltDropDownNavigationProps.onShowBulkDuties;
2685
- clickItemHideDropDownFilter();
2686
- }, children: "BulkDuties" }))
2687
- },
2688
- // View options
2689
- {
2690
- IdDropDown_filter: 6,
2691
- dropDownFilter_desc: (jsxRuntime.jsxs("div", { style: { width: "100%" }, children: [jsxRuntime.jsx("span", { className: isFilterItem_descExpanded
2692
- ? "cwelltFilterItem_desc FilterItem_descExpanded cwellt_justify_space_between"
2693
- : "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" } })] }))
2694
- }
2695
- ];
2696
- 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
2697
- ? "cwellt_btn_act cwellt_btn_act_df cwellt_btn_Nbg cwellt_btnDropDownMenuExpanded"
2698
- : "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))) }) }))] }));
2699
3395
  }
2700
3396
 
2701
- const { Option: Option$1, OptGroup } = antd.Select;
3397
+ const { Option, OptGroup } = antd.Select;
2702
3398
  class MultiSelect extends React__namespace.Component {
2703
3399
  constructor(Props) {
2704
3400
  super(Props);
@@ -2791,7 +3487,7 @@ class MultiSelect extends React__namespace.Component {
2791
3487
  ? "cwelltMultiSelect cwelltSelect cwelltSelectSimple cwelltMultiSelect_searchIcon"
2792
3488
  : "cwelltMultiSelect cwelltSelect cwelltSelectSimple", placeholder: "Search or filter...", dropdownClassName: this.state.isVisibleDropDown
2793
3489
  ? " cwelltSelectDropDown cwelltSelectDropDown_active"
2794
- : "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))) }) }) }));
2795
3491
  }
2796
3492
  }
2797
3493
 
@@ -2813,7 +3509,7 @@ function itemsToMultiFilterTags(items, nameKey, valueKey, category, primaryColor
2813
3509
  function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
2814
3510
  // - Reference div content input search
2815
3511
  const headContent_ref = React__namespace.createRef();
2816
- const optionList = document.getElementsByClassName("cwelltOptionList");
3512
+ const optionList = document.getElementsByClassName("cw-multiselect-option-list");
2817
3513
  const refContent = React.useRef(null);
2818
3514
  // - Hooks show clear button
2819
3515
  const [_isShowClearButton, setShowClearButton] = React.useState(false);
@@ -2860,6 +3556,11 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
2860
3556
  }
2861
3557
  }
2862
3558
  };
3559
+ const handleBlur = (event) => {
3560
+ if (typeof cwelltFilterTabMultiSelectProps.onBlur === "function") {
3561
+ cwelltFilterTabMultiSelectProps.onBlur(event);
3562
+ }
3563
+ };
2863
3564
  const clickOptionList = () => {
2864
3565
  if (optionList.length > 0) {
2865
3566
  Array.from(optionList).forEach(index => {
@@ -2879,11 +3580,7 @@ function CwHeadFilter(cwelltFilterTabMultiSelectProps) {
2879
3580
  };
2880
3581
  });
2881
3582
  //#endregion
2882
- 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:
2883
- // isShowClearButton
2884
- // ? "headClearIcon cwellt_flex cwellt_justify_center cwellt_align_items_center cwellt_p_abs"
2885
- // :
2886
- "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] }));
2887
3584
  }
2888
3585
 
2889
3586
  function CwOptionList(optionListProps) {
@@ -2894,15 +3591,12 @@ function CwOptionList(optionListProps) {
2894
3591
  //#endregion
2895
3592
  //#region Hooks
2896
3593
  // - Hooks : selected optionList
2897
- const [isSelectedOptionList, setIsSelectedOptionList] = React.useState(optionListProps.isSelected || false);
3594
+ // const [isSelectedOptionList, setIsSelectedOptionList] = useState(optionListProps.isSelected || false);
2898
3595
  //#endregion
2899
3596
  //#region Functions
2900
- const onSelectedOptionList = () => {
2901
- setIsSelectedOptionList(!isSelectedOptionList);
2902
- };
2903
3597
  const onClickSelectOptionList = (event_click) => {
2904
3598
  // - click of custom component
2905
- onSelectedOptionList();
3599
+ // onSelectedOptionList();
2906
3600
  // - click of property interface
2907
3601
  optionListProps.onClick(event_click);
2908
3602
  };
@@ -2915,26 +3609,19 @@ function CwOptionList(optionListProps) {
2915
3609
  //#region Useffect
2916
3610
  React.useEffect(() => {
2917
3611
  window.addEventListener("keypress", onKeyPressOptionList);
2918
- // selected option list
2919
- setIsSelectedOptionList(optionListProps.isSelected || false);
2920
3612
  return () => {
2921
3613
  window.removeEventListener("keypress", onKeyPressOptionList);
2922
3614
  };
2923
- }, [optionListProps.isSelected, isSelectedOptionList]);
3615
+ }, []);
2924
3616
  //#endregion
2925
- return (jsxRuntime.jsxs("div", { className: isSelectedOptionList
2926
- ? optionListProps.className +
2927
- " cwelltOptionList cwelltOptionList_active cwellt_flex cwellt_justify_space_between cwellt_align_items_center"
2928
- : optionListProps.className +
2929
- " 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
2930
- ? "cwelltOptionList_desc_icon cwellt_flex cwellt_justify_center cwellt_align_items_center"
2931
- : "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 })] }));
2932
3618
  }
2933
3619
 
2934
3620
  //#endregion
2935
3621
  function CwMultiselect(CwelltCustomFilterTabProps) {
2936
3622
  //#region Reference
2937
3623
  const refOptionListContent = React.useRef(null);
3624
+ const containerRef = React.useRef(null);
2938
3625
  //#endregion
2939
3626
  //#region Hooks
2940
3627
  const [isShowDropDownfiltered, setShowDropDownfiltered] = React.useState(false);
@@ -2945,7 +3632,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
2945
3632
  // color: string;
2946
3633
  // }[]>([]);
2947
3634
  // Hook active label filter item tab [ All ]
2948
- 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);
2949
3636
  // Hook active laberl fitler item tab [ e.g.: Duty ]
2950
3637
  const [isActive_filter_item, setActive_filter_item] = React.useState(null);
2951
3638
  // Hook isSelected option list
@@ -2957,31 +3644,31 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
2957
3644
  const clearValue = (e_clear) => {
2958
3645
  // List items to remove class and be visible
2959
3646
  // Item searched
2960
- const itemSearched = document.getElementsByClassName("cwellt_show_itemSearched");
3647
+ const itemSearched = document.getElementsByClassName("item-search");
2961
3648
  // Item hidden
2962
- const itemHidden = document.getElementsByClassName("cwellt_itemHidden");
3649
+ const itemHidden = document.getElementsByClassName("hidden-item");
2963
3650
  // Item searcched
2964
3651
  if (itemSearched.length > 0) {
2965
3652
  for (let i = 0; i <= itemSearched.length; i++) {
2966
- itemSearched[i]?.classList.remove("cwellt_show_itemSearched");
3653
+ itemSearched[i]?.classList.remove("item-search");
2967
3654
  }
2968
3655
  }
2969
3656
  // Item hidden
2970
3657
  if (itemHidden.length > 0) {
2971
3658
  for (let i = 0; i <= itemHidden.length; i++) {
2972
- itemHidden[i]?.classList.remove("cwellt_itemHidden");
3659
+ itemHidden[i]?.classList.remove("hidden-item");
2973
3660
  }
2974
3661
  }
2975
3662
  // optionList [ disbaled active className according their text ]
2976
3663
  const parent = e_clear.currentTarget.parentElement.parentElement;
2977
- const optionActive = parent.getElementsByClassName("cwelltOptionList_active");
3664
+ const optionActive = parent.getElementsByClassName("option-active");
2978
3665
  const valueIds = [];
2979
3666
  const resultList = [];
2980
3667
  if (optionActive.length > 0) {
2981
3668
  CwelltCustomFilterTabProps.onclickHandleChange(valueIds, resultList);
2982
3669
  Array.from(optionActive).forEach(index => {
2983
3670
  const optionActive_array = index;
2984
- optionActive_array.classList.remove("cwelltOptionList_active");
3671
+ optionActive_array.classList.remove("option-active");
2985
3672
  });
2986
3673
  }
2987
3674
  };
@@ -2990,26 +3677,26 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
2990
3677
  const onChangeSearch = (e_onchange) => {
2991
3678
  const filterText_lowerCase = e_onchange.currentTarget.value.toLowerCase();
2992
3679
  // Tags for filtering
2993
- const listTag = document.getElementsByClassName("cwelltOptionList");
3680
+ const listTag = document.getElementsByClassName("cw-multiselect-option-list");
2994
3681
  for (let i = 0; i <= listTag.length; i++) {
2995
3682
  if (listTag[i] !== undefined) {
2996
3683
  const textTagValue = listTag[i].textContent;
2997
3684
  // Writting
2998
3685
  if (textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
2999
- listTag[i].classList.add("cwellt_show_itemSearched");
3686
+ listTag[i].classList.add("item-search");
3000
3687
  }
3001
3688
  else {
3002
- listTag[i].classList.add("cwellt_itemHidden");
3689
+ listTag[i].classList.add("hidden-item");
3003
3690
  }
3004
3691
  // remove written
3005
3692
  if (!textTagValue?.toLowerCase().includes(filterText_lowerCase)) {
3006
- listTag[i].classList.remove("cwellt_show_itemSearched");
3693
+ listTag[i].classList.remove("item-search");
3007
3694
  }
3008
3695
  else {
3009
- listTag[i].classList.remove("cwellt_itemHidden");
3696
+ listTag[i].classList.remove("hidden-item");
3010
3697
  }
3011
3698
  if (filterText_lowerCase === "") {
3012
- listTag[i].classList.remove("cwellt_show_itemSearched");
3699
+ listTag[i].classList.remove("item-search");
3013
3700
  }
3014
3701
  }
3015
3702
  }
@@ -3023,7 +3710,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3023
3710
  const onKeyPressSearch = (event_onKeypress) => {
3024
3711
  //#region Variables
3025
3712
  const keyPressed = event_onKeypress.key;
3026
- const optionSearched = document.getElementsByClassName("cwellt_show_itemSearched");
3713
+ const optionSearched = document.getElementsByClassName("item-search");
3027
3714
  //#endregion
3028
3715
  // first item selected or same text
3029
3716
  const optionArray = Array.from(optionSearched);
@@ -3038,12 +3725,12 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3038
3725
  handleClickTag(element);
3039
3726
  }
3040
3727
  }
3041
- const optionList_item_hidden = document.getElementsByClassName("cwellt_itemHidden");
3728
+ const optionList_item_hidden = document.getElementsByClassName("hidden-item");
3042
3729
  if (optionList_item_hidden.length > 0) {
3043
3730
  Array.from(optionList_item_hidden).forEach(index => {
3044
3731
  const optionList_hidden_array = index;
3045
- if (optionList_hidden_array.classList.contains("cwellt_itemHidden")) {
3046
- optionList_hidden_array.classList.remove("cwellt_itemHidden");
3732
+ if (optionList_hidden_array.classList.contains("hidden-item")) {
3733
+ optionList_hidden_array.classList.remove("hidden-item");
3047
3734
  }
3048
3735
  });
3049
3736
  }
@@ -3065,7 +3752,7 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3065
3752
  active;
3066
3753
  }
3067
3754
  const handleClickTag = (e) => {
3068
- const preList = CwelltCustomFilterTabProps.selectedListsItems;
3755
+ const preList = CwelltCustomFilterTabProps.selectedListsItems || [];
3069
3756
  const valueIds = [];
3070
3757
  const resultList = preList?.map(s => {
3071
3758
  const item = new SelectListTest();
@@ -3104,36 +3791,35 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3104
3791
  // [a.key]: !prevSelectedStates[a.key],
3105
3792
  // }));
3106
3793
  // clear filter by text after clicked in option list
3107
- const optionList_item_hidden = document.getElementsByClassName("cwellt_itemHidden");
3794
+ const optionList_item_hidden = document.getElementsByClassName("hidden-item");
3108
3795
  if (optionList_item_hidden.length > 0) {
3109
3796
  Array.from(optionList_item_hidden).forEach(index => {
3110
3797
  const optionList_hidden_array = index;
3111
- if (optionList_hidden_array.classList.contains("cwellt_itemHidden")) {
3112
- optionList_hidden_array.classList.remove("cwellt_itemHidden");
3798
+ if (optionList_hidden_array.classList.contains("hidden-item")) {
3799
+ optionList_hidden_array.classList.remove("hidden-item");
3113
3800
  }
3114
3801
  });
3115
3802
  }
3116
3803
  // Check click from option list has custom tag header of custom filter tab
3117
- const tagActive = document.getElementsByClassName("cwellt_TagActive");
3118
- const optionList = document.getElementsByClassName("cwelltOptionList");
3804
+ const tagActive = document.getElementsByClassName("multiselect-active-tag");
3805
+ const optionList = document.getElementsByClassName("cw-multiselect-option-list");
3119
3806
  if (tagActive.length > 0 && optionList.length > 0) {
3120
- Array.from(tagActive).forEach(index => {
3121
- const tagActive_array = index;
3807
+ Array.from(tagActive).forEach(_index => {
3122
3808
  Array.from(optionList).forEach(index => {
3123
3809
  const optionList_array = index;
3124
- if (tagActive_array.innerText === e.description && optionList_array.innerText === e.description) {
3125
- // remove className optionlist active loaded
3126
- 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");
3127
3813
  }
3128
3814
  });
3129
3815
  });
3130
3816
  }
3131
- const optionList_desc = document.getElementsByClassName("cwelltOptionList_active");
3817
+ const optionList_desc = document.getElementsByClassName("option-active");
3132
3818
  if (optionList_desc.length > 0) {
3133
3819
  Array.from(optionList_desc).forEach(index => {
3134
3820
  const optionList_desc_array = index;
3135
3821
  if (optionList_desc_array.innerText === a.description) {
3136
- optionList_desc_array.classList.remove("cwelltOptionList_active");
3822
+ optionList_desc_array.classList.remove("option-active");
3137
3823
  }
3138
3824
  });
3139
3825
  }
@@ -3168,12 +3854,13 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3168
3854
  // ...prevSelectedStates,
3169
3855
  // [a.key]: false[a.key],
3170
3856
  // }));
3171
- const optionList_active = document.getElementsByClassName("cwelltOptionList_active");
3857
+ const optionList_active = document.getElementsByClassName("option-active");
3172
3858
  if (optionList_active.length > 0) {
3173
3859
  Array.from(optionList_active).forEach(index => {
3174
3860
  const optionList_active_array = index;
3175
- if (optionList_active_array.innerText === e.description) {
3176
- 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");
3177
3864
  }
3178
3865
  });
3179
3866
  }
@@ -3182,8 +3869,8 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3182
3869
  //#region DropDownContainer [ properties functions ]
3183
3870
  //#region onKeyDownDropDownContainer [ press ESC dropDownContainer dissapear - ArrowUp && ArrowDown ]
3184
3871
  const onKeyDownDropDownContent = (event_onKeyDown) => {
3185
- const items = document.querySelectorAll(".cwelltOptionList");
3186
- 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"));
3187
3874
  if (event_onKeyDown.key === "Escape") {
3188
3875
  // DropDown disappear
3189
3876
  setShowDropDownfiltered(false);
@@ -3204,9 +3891,9 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3204
3891
  }
3205
3892
  };
3206
3893
  const removeHighlight = () => {
3207
- const highlightedItem = document.querySelector(".Test_active");
3894
+ const highlightedItem = document.querySelector(".keyboard-focus");
3208
3895
  if (highlightedItem) {
3209
- highlightedItem.classList.remove("Test_active");
3896
+ highlightedItem.classList.remove("keyboard-focus");
3210
3897
  }
3211
3898
  };
3212
3899
  const getNextIndex = (currentIndex, length) => {
@@ -3216,57 +3903,46 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3216
3903
  return (currentIndex - 1 + length) % length;
3217
3904
  };
3218
3905
  const highlightOption = (index) => {
3219
- const items = document.querySelectorAll(".cwelltOptionList");
3906
+ const items = document.querySelectorAll(".cw-multiselect-option-list");
3220
3907
  const item = items[index];
3221
- item.classList.add("Test_active");
3908
+ item.classList.add("keyboard-focus");
3222
3909
  };
3223
3910
  //#endregion
3224
- //#region onMouseLeave_dropDownContainer [ mouseleave of droDownContainer dissapear others axis like up and horizontal way if the user does not hover the dropDown container ]
3225
- const onMouseLeave_dropDownContainer = (event_mouseLeave) => {
3226
- // Get position of element inside a div [ height ]
3227
- const pos = event_mouseLeave.currentTarget.getBoundingClientRect();
3228
- // Get position of screen
3229
- const posCursor_y = event_mouseLeave.clientY;
3230
- // current item
3231
- const currentItem = event_mouseLeave.currentTarget;
3232
- // cwSelectDropDownContainer_active
3233
- const dropDownContainer_active = currentItem.getElementsByClassName("cwSelectDropDownContainer_active");
3234
- // Evaluating if the position of the cursor is higher than the positon of component and if dropDownContainer state is true keep state of dropDown
3235
- if (posCursor_y > pos.bottom && isShowDropDownfiltered === true) {
3236
- setShowDropDownfiltered(true);
3237
- // Mouse leave of drpoDownContainer
3238
- if (dropDownContainer_active.length > 0) {
3239
- Array.from(dropDownContainer_active).forEach(index => {
3240
- const dropDown_active_array = index;
3241
- // Adding setShowDropDownfiltered ( false ) to hide dropDownContainer
3242
- dropDown_active_array.addEventListener("mouseleave", () => {
3243
- setShowDropDownfiltered(false);
3244
- });
3245
- });
3911
+ //#region onMouseLeave
3912
+ const handleInputBlur = () => {
3913
+ setTimeout(() => {
3914
+ if (!containerRef.current?.contains(document.activeElement)) {
3915
+ setShowDropDownfiltered(false);
3246
3916
  }
3247
- }
3248
- else {
3249
- setShowDropDownfiltered(false);
3250
- }
3917
+ }, 150);
3251
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
+ }, []);
3252
3930
  //#endregion
3253
- //#endregion
3254
- // clikc filert item button
3931
+ // Click filter item button
3255
3932
  const clickFilter_item = (id) => {
3256
3933
  // content items - looking for className by it - corresponded by their current group
3257
3934
  const contentItems = document.getElementsByClassName(id);
3258
- const contentAll = document.getElementsByClassName("content_all");
3935
+ const contentAll = document.getElementsByClassName("multiselect-tag-group");
3259
3936
  if (contentAll.length > 0) {
3260
3937
  Array.from(contentAll).forEach(index => {
3261
3938
  const contentAll_array = index;
3262
- contentAll_array.classList.add("cwellt_contentHide_item");
3939
+ contentAll_array.classList.add("hidden-group");
3263
3940
  });
3264
3941
  }
3265
3942
  if (contentItems.length > 0) {
3266
3943
  Array.from(contentItems).forEach(index => {
3267
3944
  const contentItems_array = index;
3268
- contentItems_array.classList.add("cwellt_contentShow_item");
3269
- contentItems_array.classList.remove("cwellt_contentHide_item");
3945
+ contentItems_array.classList.remove("hidden-group");
3270
3946
  });
3271
3947
  }
3272
3948
  // Adding custom className acitive
@@ -3276,105 +3952,65 @@ function CwMultiselect(CwelltCustomFilterTabProps) {
3276
3952
  };
3277
3953
  const showAllItem = () => {
3278
3954
  //let currentBtn = e.currentTarget;
3279
- const contentAll = document.getElementsByClassName("content_all");
3955
+ const contentAll = document.getElementsByClassName("multiselect-tag-group");
3280
3956
  if (contentAll.length > 0) {
3281
3957
  Array.from(contentAll).forEach(index => {
3282
3958
  const contentAll_array = index;
3283
- contentAll_array.classList.remove("cwellt_contentHide_item");
3284
- contentAll_array.classList.remove("cwellt_contentShow_item");
3959
+ contentAll_array.classList.remove("hidden-group");
3285
3960
  // active className - all
3286
3961
  setActive_filter_item_all(true);
3287
- // removing active className [ cwelltFilter_item_active ]
3288
3962
  setActive_filter_item("");
3289
3963
  });
3290
3964
  }
3291
3965
  };
3292
3966
  //#endregion
3293
- const loadadData = (s, index) => {
3294
- const optionList = document.getElementsByClassName("cwelltOptionList");
3295
- if (optionList.length > 0) {
3296
- Array.from(optionList).forEach(index => {
3297
- const optionList_array = index;
3298
- if (s.description === optionList_array.innerText) {
3299
- optionList_array.classList.add("cwelltOptionList_active");
3300
- }
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
+ });
3301
3980
  });
3302
3981
  }
3303
- };
3304
- // #region [ Select items loaded previosly from database ]
3305
- React.useEffect(() => { }, []);
3306
- // #endregion
3307
- // #region [ convert color tone of background ]
3308
- const convertHexToRgb_custom_tag = (bg_color_custom_tag) => {
3309
- bg_color_custom_tag = (bg_color_custom_tag || "").replace("#", "");
3310
- const red_color_custom_tag = parseInt(bg_color_custom_tag.substring(0, 2), 16);
3311
- const green_color_custom_tag = parseInt(bg_color_custom_tag.substring(2, 4), 16);
3312
- const blue_color_custom_tag = parseInt(bg_color_custom_tag.substring(4, 6), 16);
3313
- return "rgb(" + red_color_custom_tag + "," + green_color_custom_tag + "," + blue_color_custom_tag + ")";
3314
- };
3315
- // #endregion
3316
- 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
3317
- ? "cw-filter-tab-multi-select-show-icon"
3318
- : "cw-filter-tab-multi-select-hidden-icon", tagValueContent: jsxRuntime.jsx("div", { className: "cwellt_flex cwellt_flex_wrap", children: CwelltCustomFilterTabProps.selectedListsItems?.map((s, index) => {
3319
- loadadData(s);
3320
- const bgColor_custom_tag_selected_list = convertHexToRgb_custom_tag(s.color);
3321
- // Inicializa las variables con un valor por defecto de 0
3322
- let redBgColor_custom_tag_selected_list = 0;
3323
- let greenBgColor_custom_tag_selected_list = 0;
3324
- let blueBgColor_custom_tag_selected_list = 0;
3325
- const bgColor_custom_tag_array = bgColor_custom_tag_selected_list.match(/\d+/g);
3326
- if (bgColor_custom_tag_array && bgColor_custom_tag_array.length >= 3) {
3327
- redBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[0], 10);
3328
- greenBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[1], 10);
3329
- blueBgColor_custom_tag_selected_list = parseInt(bgColor_custom_tag_array[2], 10);
3330
- }
3331
- const luminance = 0.299 * redBgColor_custom_tag_selected_list +
3332
- 0.587 * greenBgColor_custom_tag_selected_list +
3333
- 0.114 * blueBgColor_custom_tag_selected_list;
3334
- 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: {
3335
- background: s.color
3336
- }, 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: {
3337
3989
  background: s.color,
3338
- color: luminance > 128 ? "#000000" : "#ffffff"
3339
- }, 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", {}));
3340
- }) }), 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
3341
- ? "cwelltFilter_item cwelltFilter_item_active"
3342
- : "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,
3343
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
3344
3994
  onClick: () => clickFilter_item("content_" + i), id: "content_" + i, children: slArray.length > 0 && slArray[0].typeName !== undefined
3345
3995
  ? slArray[0].typeName
3346
3996
  : slArray.length > 0
3347
3997
  ? slArray[0].type
3348
- : "" }) }, "_" + 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 => {
3349
- const bgColor_custom_tag_select_list = convertHexToRgb_custom_tag(sl.color);
3350
- let redBgColor_custom_tag_select_list = 0;
3351
- let greenBgColor_appointment = 0;
3352
- let blueBgColor_custom_tag_select_list = 0;
3353
- const bgColor_custom_tag_select_list_array = bgColor_custom_tag_select_list.match(/\d+/g);
3354
- if (bgColor_custom_tag_select_list_array && bgColor_custom_tag_select_list_array.length >= 3) {
3355
- redBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[0], 10);
3356
- greenBgColor_appointment = parseInt(bgColor_custom_tag_select_list_array[1], 10);
3357
- blueBgColor_custom_tag_select_list = parseInt(bgColor_custom_tag_select_list_array[2], 10);
3358
- }
3359
- const luminance = 0.299 * redBgColor_custom_tag_select_list +
3360
- 0.587 * greenBgColor_appointment +
3361
- 0.114 * blueBgColor_custom_tag_select_list;
3362
- 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: {
3363
- background: "#E0E0E0"
3364
- }, 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: {
3365
4001
  background: sl.color,
3366
- color: luminance > 128 ? "#000000" : "#ffffff"
3367
- }, children: sl.description }) }, sl.type + "_" + sl.id));
3368
- }) }) }, "_" + i))) })] }) }) }));
4002
+ color: getContrastColor(sl.color),
4003
+ }, closableTag: isSelected, children: sl.description }) }, sl.type + "_" + sl.id));
4004
+ }) }, "group" + i))) })] }) }) }) }));
3369
4005
  }
3370
4006
 
3371
- 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-"};
3372
4008
 
3373
4009
  const CwMultiFilterTag = props => {
3374
4010
  const { ID, Name, Value, Category, Removable, PrimaryColor, OnPrimaryColor, Selectable, Selected, OnSelect } = props;
3375
4011
  const BackgroundColor = `rgb(${PrimaryColor.r},${PrimaryColor.g},${PrimaryColor.b})`;
3376
4012
  const TextColor = `rgb(${OnPrimaryColor.r},${OnPrimaryColor.g},${OnPrimaryColor.b})`;
3377
- 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: {
3378
4014
  color: TextColor,
3379
4015
  backgroundColor: BackgroundColor,
3380
4016
  opacity: Selected && !Removable ? "0.5" : "1",
@@ -3385,7 +4021,7 @@ const CwMultiFilterTag = props => {
3385
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" }) }))] }));
3386
4022
  };
3387
4023
 
3388
- 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"};
3389
4025
 
3390
4026
  /**
3391
4027
  * A multiple filter selector, a MULTI-SELECT even. Allows users to select and filter items based on tags.
@@ -3605,7 +4241,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3605
4241
  }
3606
4242
  else {
3607
4243
  const updatedTags = new Set(selectedTags).add(newTag);
3608
- onChangeSelectedTags?.(updatedTags);
4244
+ onChangeSelectedTags(updatedTags);
3609
4245
  setInputTextValue("");
3610
4246
  //setFilteredTags(allTags);
3611
4247
  }
@@ -3619,7 +4255,7 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3619
4255
  toDelete.Removable = false;
3620
4256
  updatedTags.delete(toDelete);
3621
4257
  }
3622
- onChangeSelectedTags?.(updatedTags);
4258
+ onChangeSelectedTags(updatedTags);
3623
4259
  };
3624
4260
  React.useEffect(() => {
3625
4261
  // force to load all tags on first render
@@ -3631,9 +4267,9 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3631
4267
  inputRef.current?.focus();
3632
4268
  }
3633
4269
  };
3634
- 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) => {
3635
4271
  e.preventDefault();
3636
- }, 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 => {
3637
4273
  switch (e.key) {
3638
4274
  case "Enter":
3639
4275
  case "Tab":
@@ -3653,8 +4289,8 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3653
4289
  }
3654
4290
  } })] }), selectedTags.size > 0 ? (jsxRuntime.jsx("input", { type: "reset", value: "\u00D7", onClick: e => {
3655
4291
  e.preventDefault();
3656
- onChangeSelectedTags?.(new Set());
3657
- } })) : 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"
3658
4294
  ? {
3659
4295
  backgroundColor: "var(--cw-color-primary-container)",
3660
4296
  color: "var(--cw-color-primary)",
@@ -3681,10 +4317,117 @@ const CwMultiFilter = ({ allTags, id, onChangeSelectedTags, selectedTags, style
3681
4317
  } }, props.ID))) })] })] }));
3682
4318
  };
3683
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
+
3684
4426
  function CwSearchInput(optionsProps) {
3685
4427
  const [searchText, setSearchText] = React.useState("");
3686
4428
  const [filteredOptions, setFilteredOptions] = React.useState([]);
3687
4429
  const [_selectedOption, setSelectedOption] = React.useState(null);
4430
+ const [showDropdown, setShowDropdown] = React.useState(false);
3688
4431
  // Make default value selection when loading the component
3689
4432
  React.useEffect(() => {
3690
4433
  if (optionsProps.defaultValue && optionsProps.selectList && optionsProps.selectList.length > 0) {
@@ -3702,8 +4445,9 @@ function CwSearchInput(optionsProps) {
3702
4445
  const handleInputChange = (event) => {
3703
4446
  const text = event.target.value;
3704
4447
  setSearchText(text);
4448
+ setShowDropdown(true);
3705
4449
  if (text === "") {
3706
- setFilteredOptions([]);
4450
+ setFilteredOptions(optionsProps.selectList);
3707
4451
  setSelectedOption(null);
3708
4452
  // Notify that there is no selection
3709
4453
  if (optionsProps.handleChange) {
@@ -3724,6 +4468,17 @@ function CwSearchInput(optionsProps) {
3724
4468
  setFilteredOptions(filtered);
3725
4469
  }
3726
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
+ };
3727
4482
  const handleOptionSelect = (option) => {
3728
4483
  setSearchText(option.description);
3729
4484
  setSelectedOption(option);
@@ -3739,12 +4494,12 @@ function CwSearchInput(optionsProps) {
3739
4494
  setSelectedOption(null);
3740
4495
  };
3741
4496
  return (jsxRuntime.jsxs("div", { className: "cwSearchInputComp", style: optionsProps.style, id: optionsProps.id, children: [jsxRuntime.jsxs("div", { className: optionsProps.labelPosition === "inline"
3742
- ? "cw-flex-row "
4497
+ ? "cw-flex-row cw-align-left-center"
3743
4498
  : optionsProps.labelPosition === "column"
3744
- ? "cw-flex-column"
3745
- : "cw-flex-row ", children: [optionsProps.labelName && (jsxRuntime.jsx("label", { className: optionsProps.disabled === true
3746
- ? "cw_label_text cw_label_text_disabled" + " " + optionsProps.labelClassName
3747
- : "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))) }) }))] }));
3748
4503
  }
3749
4504
 
3750
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"};
@@ -6542,7 +7297,7 @@ const SchedulerEvent = ({ value, heightRem, onEvent }) => {
6542
7297
  e.preventDefault();
6543
7298
  onEvent(new OnDoubleClickEvent(value.id));
6544
7299
  });
6545
- 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: {
6546
7301
  items: value.contextMenuItems,
6547
7302
  onClick: (e) => {
6548
7303
  e.domEvent.nativeEvent.preventDefault();
@@ -6687,7 +7442,7 @@ const SchedulerRow = React.memo((props) => {
6687
7442
  return (jsxRuntime.jsxs("div", { style: {
6688
7443
  display: "flex",
6689
7444
  minHeight: props.rowHeightInRem + "rem",
6690
- }, 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: {
6691
7446
  items: contextMenuItems,
6692
7447
  onClick: (e) => {
6693
7448
  onClickMenuItem$1(e, () => {
@@ -6722,19 +7477,19 @@ const SchedulerRow = React.memo((props) => {
6722
7477
  const percentage = getPercentageFromMouseEvent(e);
6723
7478
  const date = dateFromPercentage(selectedDate, visibleDays, percentage);
6724
7479
  onEvent(new OnRightClickRow(rowHeader.value.rowId, date));
6725
- }, 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: {
6726
7481
  height: "100%",
6727
7482
  position: internalRows.length > 0 ? "absolute" : "relative",
6728
7483
  width: "100%",
6729
7484
  pointerEvents: "none",
6730
7485
  }, children: backgroundEvents.map((event) => {
6731
- 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);
6732
7487
  }) })), backgroundEvents.length === 0 && internalRows.length === 0 && (jsxRuntime.jsx("div", { style: { position: "relative", height: props.rowHeightInRem + "rem" } })), internalRows.map((internalRow, index) => {
6733
7488
  return (jsxRuntime.jsx("div", { style: {
6734
7489
  position: "relative",
6735
7490
  height: props.rowHeightInRem + "rem",
6736
7491
  pointerEvents: "none"
6737
- }, 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));
6738
7493
  }), !(timeLinePercentage < 0 || timeLinePercentage > 100) && (jsxRuntime.jsx(TimeLine, { color: "red", left: `${timeLinePercentage}%`, top: "0px", height: `100%` }))] }) }, rowHeader.value.rowId)] }));
6739
7494
  }, (prevProps, nextProps) => {
6740
7495
  // This memo is necessary to prevent re-render all the rows when a user makes drag and drop
@@ -6918,9 +7673,9 @@ const getEventSizes = (schedulerDate, totalDays, startDate, endDate) => {
6918
7673
  };
6919
7674
  }
6920
7675
  const totalHours = totalDays * 24;
6921
- const dateString = schedulerDate.toISOString().split('T')[0];
6922
- const schedulerDateAtZero = new Date(dateString);
6923
- 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);
6924
7679
  let durationHours = hoursBetween(startDate, endDate);
6925
7680
  const startOutOfScheduler = startHours < 0;
6926
7681
  if (startOutOfScheduler) {
@@ -6963,9 +7718,7 @@ const sortByCategoryAndTitle = (previous, next, orderCategories) => {
6963
7718
  };
6964
7719
 
6965
7720
  const getWeekendLinesByDatesVisible = (initialDate, visibleDays) => {
6966
- const dateString = initialDate.toISOString().split('T')[0];
6967
- const todayAtO = new Date(dateString);
6968
- const days = getWeekendsDaysInDateRange(todayAtO, visibleDays);
7721
+ const days = getWeekendsDaysInDateRange(initialDate, visibleDays);
6969
7722
  return days.map(it => {
6970
7723
  const endDate = new Date(it);
6971
7724
  endDate.setDate(it.getDate() + 1);
@@ -7057,7 +7810,7 @@ const Scheduler = (props) => {
7057
7810
  return (jsxRuntime.jsx("div", { style: {
7058
7811
  ...style,
7059
7812
  backgroundColor: rowColor
7060
- }, 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));
7061
7814
  });
7062
7815
  const getItemSize = React.useCallback((index) => {
7063
7816
  const row = rows[index];
@@ -7106,8 +7859,7 @@ class CwSuperScheduler extends React__namespace.Component {
7106
7859
  let returnedHeight = 50;
7107
7860
  let data;
7108
7861
  if (this.props.pinnedResources) {
7109
- let pinned = [...this.props.pinnedResources];
7110
- pinned = lodash.uniq(pinned);
7862
+ const pinned = [...new Set(this.props.pinnedResources)];
7111
7863
  for (let i = 0; i < pinned.length; i++) {
7112
7864
  data = this.returnDynamicHeight(pinned[i], returnedTops);
7113
7865
  returnedTops = data.topsCalculated;
@@ -7438,25 +8190,26 @@ const onClickMenuItem = (e, event) => {
7438
8190
  const PinRowHeader = ({ value, width, onEvent }) => {
7439
8191
  const [isContextMenuOpen, setIsContextMenuOpen] = React.useState(false);
7440
8192
  const { highlightColor, isLoading } = value;
7441
- return (jsxRuntime.jsxs("div", { style: {
7442
- width: width,
7443
- background: highlightColor,
7444
- }, className: styles["super-scheduler-row-header"], children: [jsxRuntime.jsx("button", { className: "cw-button-icon cwi-pin", "data-pinned": value.isPinned, onClick: (_) => {
7445
- onEvent(value.isPinned ? new OnUnpinRow(value.rowId) : new OnPinRow(value.rowId));
7446
- } }), 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: {
7447
- items: value.contextMenuItems,
7448
- onClick: (e) => {
7449
- onClickMenuItem(e, () => {
7450
- onEvent(new OnClickContextMenu(value.rowId, e.key));
7451
- });
7452
- },
7453
- onMouseLeave: () => setIsContextMenuOpen(false),
7454
- }, 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: {
7455
8207
  display: "flex",
7456
8208
  flexDirection: "column",
7457
8209
  justifyContent: "center",
7458
8210
  alignItems: "flex-start",
7459
- }, 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));
7460
8213
  };
7461
8214
 
7462
8215
  const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory, unPinnedOrderCategory, backgroundEvents, contextMenuItems, onEvent }) => {
@@ -7468,168 +8221,241 @@ const SuperScheduler = ({ id, state, header, rows, events, pinnedOrderCategory,
7468
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 })] }));
7469
8222
  };
7470
8223
 
7471
- const { Option } = antd.Select;
7472
- class CwFindAirport extends React__namespace.Component {
7473
- constructor(Props) {
7474
- super(Props);
7475
- this.state = {
7476
- data: [],
7477
- valueId: undefined,
7478
- valueText: "",
7479
- searchingAtProviders: false,
7480
- searchType: "",
7481
- airports: [],
7482
- };
7483
- this.handleSelect = this.handleSelect.bind(this);
7484
- }
7485
- componentDidMount() {
7486
- // OnlyDatabase = 0
7487
- // DatabaseAndProviders = 1
7488
- // OnlyProviders = 2
7489
- this.setState({
7490
- searchType: this.props.searchType === undefined ? "OnlyDatabase" : this.props.searchType,
7491
- });
7492
- if (this.props.value !== undefined && this.props.value !== 0 && this.props.value !== -1) {
7493
- this.setState({
7494
- valueId: this.props.value,
7495
- });
7496
- 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]})`;
7497
8253
  }
7498
- }
7499
- componentDidUpdate(_previousProps, _previousState) {
7500
- if (this.props.value !== undefined &&
7501
- this.props.value !== 0 &&
7502
- this.props.value !== -1 &&
7503
- _previousProps.value !== _previousState.valueId) {
7504
- this.setState({
7505
- valueId: this.props.value,
7506
- });
7507
- this.fetchAirportData(this.props.value);
7508
- }
7509
- }
7510
- fetchAirportData(airportId) {
7511
- fetch(this.props.cblConfig + "api/data/airport?airportId=" + airportId)
7512
- .then((res) => res.json())
7513
- .then((result) => {
7514
- const data2 = [];
7515
- const airports2 = [];
7516
- data2.push({
7517
- value: result.AptKey,
7518
- text: this.props.icaoText === true ? result.AptIcao : result.DisplayAirportText,
7519
- });
7520
- airports2.push(result);
7521
- this.setState({
7522
- data: data2,
7523
- airports: airports2,
7524
- searchingAtProviders: false,
7525
- });
7526
- // this.handleSearch(result.AptIata);
7527
- });
7528
- }
7529
- handleSearch(value) {
7530
- if (value !== undefined && value !== null && value.length >= 3 && this.state.searchingAtProviders === false) {
7531
- this.setState({
7532
- valueText: value,
7533
- searchingAtProviders: true,
7534
- });
7535
- fetch(this.props.cblConfig +
7536
- "controls/cblFindAirport/cblFindAirport/SearchAirportCodeName?text=" +
7537
- value +
7538
- "&searchType=0")
7539
- .then((res) => res.json())
7540
- .then((result) => {
7541
- const data2 = [];
7542
- const airports2 = [];
7543
- result.forEach((r) => {
7544
- data2.push({
7545
- value: r.AptKey,
7546
- text: this.props.icaoText === true ? r.AptIcao : r.DisplayAirportText,
7547
- });
7548
- airports2.push(r);
7549
- this.setState({
7550
- data: data2,
7551
- airports: airports2,
7552
- searchingAtProviders: false,
7553
- });
7554
- });
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);
7555
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
+ }
7556
8381
  }
7557
8382
  else {
7558
- this.setState({
7559
- data: [],
7560
- airports: [],
7561
- searchingAtProviders: false,
7562
- });
8383
+ const inputText = getInputDisplayText(selectedAirport);
8384
+ setInputValue(inputText);
8385
+ setTooltipText(getDropdownDisplayText(selectedAirport));
8386
+ handleChange(optionValue);
7563
8387
  }
7564
- }
7565
- handleChange(value) {
7566
- this.setState({ valueId: value });
7567
- this.props.handleChange(value);
7568
- }
7569
- handleSelect(value) {
7570
- this.setState({ valueId: value });
7571
- const apt = this.state.airports.find((x) => x.AptKey === value);
7572
- if (apt.isAirportFromProvider) {
7573
- fetch(this.props.cblConfig +
7574
- "controls/cblFindAirport/cblFindAirport/GetCblAirport?IATAICAO=" +
7575
- apt.AptIcao +
7576
- "&update=false")
7577
- .then((res) => res.json())
7578
- .then((result) => {
7579
- const data2 = [];
7580
- const airports2 = [];
7581
- data2.push({
7582
- value: result.AptKey,
7583
- text: result.DisplayAirportText,
7584
- });
7585
- airports2.push(result);
7586
- this.setState({
7587
- data: data2,
7588
- airports: airports2,
7589
- searchingAtProviders: false,
7590
- });
7591
- });
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;
7592
8412
  }
7593
- }
7594
- //this next call is the one to update the data paying for a call in the api
7595
- onClick() {
7596
- fetch(this.props.cblConfig +
7597
- "controls/cblFindAirport/cblFindAirport/SearchAirportCodeNameonProvider?text=" +
7598
- this.state.valueText +
7599
- "&searchType=" +
7600
- this.state.searchType)
7601
- .then((res) => res.json())
7602
- .then((result) => {
7603
- const data2 = [];
7604
- const airports2 = [];
7605
- result.forEach((r) => {
7606
- data2.push({
7607
- value: r.AptKey,
7608
- text: r.DisplayAirportText,
7609
- });
7610
- airports2.push(r);
7611
- });
7612
- this.setState({
7613
- data: data2,
7614
- airports: airports2,
7615
- searchingAtProviders: false,
7616
- });
7617
- });
7618
- }
7619
- getShortCode(text) {
7620
- const match = text.match(/([A-Z]{4})\(([A-Z]{3})\)/);
7621
- if (match && match.length >= 3) {
7622
- 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);
7623
8431
  }
7624
- return text;
7625
- }
7626
- render() {
7627
- 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)));
7628
- 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",
7629
- // this.required === "true" ? "required" : ""
7630
- 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) })] }) }));
7631
- }
7632
- }
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
+ };
7633
8459
 
7634
8460
  exports.CblDragAndDrop = CblDragAndDrop;
7635
8461
  exports.CwAccordionContainer = CwAccordionContainer;
@@ -7680,6 +8506,8 @@ exports.CwCard = CwCard;
7680
8506
  exports.CwCardList = CwCardList;
7681
8507
  exports.CwCheckbox = CwCheckbox;
7682
8508
  exports.CwChip = CwChip;
8509
+ exports.CwColorPicker = CwColorPicker;
8510
+ exports.CwConfirmationPopup = CwConfirmationPopup;
7683
8511
  exports.CwContextMenu = CwContextMenu;
7684
8512
  exports.CwContextualMenu = CwContextualMenu;
7685
8513
  exports.CwDialog = CwDialog;
@@ -7689,7 +8517,6 @@ exports.CwDisplayMessage = CwDisplayMessage;
7689
8517
  exports.CwDropdown = CwDropdown;
7690
8518
  exports.CwDropdownContainer = CwDropdownContainer;
7691
8519
  exports.CwDropdownFilter = CwDropdownFilter;
7692
- exports.CwDropdownNavigation = CwDropdownNavigation;
7693
8520
  exports.CwExpandable = CwExpandable;
7694
8521
  exports.CwFileUpload = CwFileUpload;
7695
8522
  exports.CwFileUploadMultiple = CwFileUploadMultiple;
@@ -7701,7 +8528,10 @@ exports.CwHeadingMain = CwHeadingMain;
7701
8528
  exports.CwHeadingSecond = CwHeadingSecond;
7702
8529
  exports.CwIcon = CwIcon;
7703
8530
  exports.CwImageArea = CwImageArea;
8531
+ exports.CwImageGallery = CwImageGallery;
8532
+ exports.CwImageZoom = CwImageZoom;
7704
8533
  exports.CwInput = CwInput;
8534
+ exports.CwInputColor = CwInputColor;
7705
8535
  exports.CwInputDate = CwInputDate;
7706
8536
  exports.CwInputDatePicker = CwInputDatePicker;
7707
8537
  exports.CwInputDateText = CwInputDateText;
@@ -7724,6 +8554,7 @@ exports.CwModalReportFunctional = CwModalReportFunctional;
7724
8554
  exports.CwMultiFilter = CwMultiFilter;
7725
8555
  exports.CwMultiFilterTag = CwMultiFilterTag;
7726
8556
  exports.CwMultiselect = CwMultiselect;
8557
+ exports.CwNote = CwNote;
7727
8558
  exports.CwOption = CwOption;
7728
8559
  exports.CwOptionList = CwOptionList;
7729
8560
  exports.CwReportModal = CwReportModal;
@@ -7733,6 +8564,7 @@ exports.CwSearchInput = CwSearchInput;
7733
8564
  exports.CwSelect = CwSelect;
7734
8565
  exports.CwSelectList = CwSelectList;
7735
8566
  exports.CwSelectListItems = CwSelectListItems;
8567
+ exports.CwSortableList = CwSortableList;
7736
8568
  exports.CwSuperScheduler = CwSuperScheduler;
7737
8569
  exports.CwTable = CwTable;
7738
8570
  exports.CwTableGrouped = CwTableGrouped;
@@ -7742,6 +8574,7 @@ exports.CwTextArea = CwTextArea;
7742
8574
  exports.CwTime = CwTime;
7743
8575
  exports.CwToggle = CwToggle;
7744
8576
  exports.CwTooltip = CwTooltip;
8577
+ exports.CwTreeView = CwTreeView;
7745
8578
  exports.CwWeekdaySelector = CwWeekdaySelector;
7746
8579
  exports.DefaultRowHeader = DefaultRowHeader;
7747
8580
  exports.MultiSelect = MultiSelect;
@@ -7779,3 +8612,4 @@ exports.getDefaultDivisions = getDefaultDivisions;
7779
8612
  exports.getEventSizes = getEventSizes;
7780
8613
  exports.itemsToMultiFilterTags = itemsToMultiFilterTags;
7781
8614
  exports.useCwMessage = useCwMessage;
8615
+ exports.useSortableList = useSortableList;