@cwellt_software/cwellt-reactjs-lib 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/content/fonts/roboto-mono/LICENSE +93 -0
- package/dist/content/fonts/roboto-mono/RobotoMono.css +43 -0
- package/dist/content/fonts/roboto-mono/files/roboto-mono-latin-ext-wght-italic.woff2 +0 -0
- package/dist/content/fonts/roboto-mono/files/roboto-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/content/fonts/roboto-mono/files/roboto-mono-latin-wght-italic.woff2 +0 -0
- package/dist/content/fonts/roboto-mono/files/roboto-mono-latin-wght-normal.woff2 +0 -0
- package/dist/deprecated/components/MultiSelect_deprecated_.d.ts +24 -0
- package/dist/deprecated/components/MultiSelect_deprecated_.d.ts.map +1 -0
- package/dist/deprecated/components/dropdown/CwDropdownContainer.d.ts +17 -0
- package/dist/deprecated/components/dropdown/CwDropdownContainer.d.ts.map +1 -0
- package/dist/deprecated/components/multiselect/CwHeadFilter.d.ts +17 -0
- package/dist/deprecated/components/multiselect/CwHeadFilter.d.ts.map +1 -0
- package/dist/deprecated/components/multiselect/CwMultiselect.d.ts +13 -0
- package/dist/deprecated/components/multiselect/CwMultiselect.d.ts.map +1 -0
- package/dist/deprecated/components/multiselect/CwOptionList.d.ts +14 -0
- package/dist/deprecated/components/multiselect/CwOptionList.d.ts.map +1 -0
- package/dist/deprecated/components/tag/CwTag.d.ts +15 -0
- package/dist/deprecated/components/tag/CwTag.d.ts.map +1 -0
- package/dist/index.cjs.js +182 -33
- package/dist/index.css +1 -1
- package/dist/index.d.ts +99 -9
- package/dist/index.es.js +181 -34
- package/dist/playground/main.d.ts +4 -0
- package/dist/playground/main.d.ts.map +1 -0
- package/dist/src/components/control/action/button/CwPopoverButton.d.ts +33 -0
- package/dist/src/components/control/action/button/CwPopoverButton.d.ts.map +1 -0
- package/dist/src/components/control/action/contextual-menu/CwContextualMenu.d.ts +29 -0
- package/dist/src/components/control/action/contextual-menu/CwContextualMenu.d.ts.map +1 -0
- package/dist/src/components/control/action/search/CwAsyncSearch.d.ts +102 -0
- package/dist/src/components/control/action/search/CwAsyncSearch.d.ts.map +1 -0
- package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.d.ts +19 -0
- package/dist/src/components/control/action/tooltip-dialog/CwTooltipDialog.d.ts.map +1 -0
- package/dist/src/components/control/choice/deprecated/CwDropdown.d.ts +19 -0
- package/dist/src/components/control/choice/deprecated/CwDropdown.d.ts.map +1 -0
- package/dist/src/components/control/choice/deprecated/CwDropdownNavigation.d.ts +21 -0
- package/dist/src/components/control/choice/deprecated/CwDropdownNavigation.d.ts.map +1 -0
- package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts +24 -0
- package/dist/src/components/control/choice/deprecated/MultiSelect_deprecated_.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts +19 -0
- package/dist/src/components/control/choice/dropdown/CwDropdown.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts +17 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownContainer.d.ts.map +1 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownNavigation.d.ts +21 -0
- package/dist/src/components/control/choice/dropdown/CwDropdownNavigation.d.ts.map +1 -0
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts +17 -0
- package/dist/src/components/control/choice/multiselect/CwHeadFilter.d.ts.map +1 -0
- package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts +13 -0
- package/dist/src/components/control/choice/multiselect/CwMultiselect.d.ts.map +1 -0
- package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts +14 -0
- package/dist/src/components/control/choice/multiselect/CwOptionList.d.ts.map +1 -0
- package/dist/src/components/control/choice/nav-menu/CwNavMenu.d.ts.map +1 -1
- package/dist/src/components/control/input/new-dates/CwDateTimePicker2.d.ts +47 -0
- package/dist/src/components/control/input/new-dates/CwDateTimePicker2.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts +24 -0
- package/dist/src/components/custom/scheduler-temporal/CwSchedulerComp2.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts +86 -0
- package/dist/src/components/custom/scheduler-temporal/CwSuperSchedulerComp.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/EventRender.d.ts +10 -0
- package/dist/src/components/custom/scheduler-temporal/components/EventRender.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.d.ts +20 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceListRender.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.d.ts +14 -0
- package/dist/src/components/custom/scheduler-temporal/components/ResourceRender.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/DayHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MonthHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts +13 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/MyDaysHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/components/day_headers/WeekHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts +14 -0
- package/dist/src/components/custom/scheduler-temporal/components/resources_title_list/ResourcesTitleList.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts +23 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_content_area/SchedulerContentArea.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts +8 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_header/SchedulerHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/scheduler_timeline/SchedulerTimeLine.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts +10 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_headers/TimeHeaderRow.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts +12 -0
- package/dist/src/components/custom/scheduler-temporal/components/time_line/TimeLine.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/addMinutesToDateFromPx.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDates.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/daysBetweenTwoDatesWithoutCeil.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getFormatedTimeForHeader.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts +10 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getMonthHeaderData.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getUtcToday.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/getWeekHeaderDataFromWeekRange.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts +8 -0
- package/dist/src/components/custom/scheduler-temporal/logic/dates/listOfDatesToWeeks.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisionType.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/divisions/calculateDivisions.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterAndProcessResources.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterEvents.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/filterResources.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/filtering/hasSameProperties.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts +13 -0
- package/dist/src/components/custom/scheduler-temporal/logic/onDrop/OnDrop.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getHeightLineScheduler.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/getPixelsForEvent.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightScheduler.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/pixels/heightSchedulerPinned.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/doubleClickOnResource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.d.ts +6 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handlePropChanges.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.d.ts +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/handleResourceChange.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDragOver.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts +5 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onDropEventToResource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/state_handle/onResizeEvent.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/compareStrings.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/strings/getGUID.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/checkIfSlotAvailable.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts +6 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getEventsOfResource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getHasPropsChanged.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts +2 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/getTimeHeaders.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/isAllowedToMove.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.d.ts +4 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/shouldTriggerScroll.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.d.ts +3 -0
- package/dist/src/components/custom/scheduler-temporal/logic/ui/updateResourceVisibility.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts +11 -0
- package/dist/src/components/custom/scheduler-temporal/state/CblDragAndDrop.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts +43 -0
- package/dist/src/components/custom/scheduler-temporal/state/CwSchedulerProps.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/Resource.d.ts +14 -0
- package/dist/src/components/custom/scheduler-temporal/state/Resource.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/State.d.ts +25 -0
- package/dist/src/components/custom/scheduler-temporal/state/State.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEvent.d.ts +18 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEvent.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts +7 -0
- package/dist/src/components/custom/scheduler-temporal/state/cblEventCompProps.d.ts.map +1 -0
- package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.d.ts +6 -0
- package/dist/src/components/custom/scheduler-temporal/state/resourceCompProps2.d.ts.map +1 -0
- package/dist/src/components/display/data/table/CwTable.d.ts +4 -1
- package/dist/src/components/display/data/table/CwTable.d.ts.map +1 -1
- package/dist/src/components/display/data/table-serverside/CwTableServerSide.d.ts +4 -1
- package/dist/src/components/display/data/table-serverside/CwTableServerSide.d.ts.map +1 -1
- package/dist/src/components/display/data/table_sortable/CwSortableTable.d.ts +4 -2
- package/dist/src/components/display/data/table_sortable/CwSortableTable.d.ts.map +1 -1
- package/dist/src/components/display/graphics/progress/CwProgress.d.ts +36 -0
- package/dist/src/components/display/graphics/progress/CwProgress.d.ts.map +1 -0
- package/dist/src/components/display/graphics/skeleton/CwSkeleton.d.ts +31 -0
- package/dist/src/components/display/graphics/skeleton/CwSkeleton.d.ts.map +1 -0
- package/dist/src/components/display/graphics/skeleton/CwSkeletonCard.d.ts +21 -0
- package/dist/src/components/display/graphics/skeleton/CwSkeletonCard.d.ts.map +1 -0
- package/dist/src/components/display/graphics/skeleton/normalizeSkeletonCount.d.ts +8 -0
- package/dist/src/components/display/graphics/skeleton/normalizeSkeletonCount.d.ts.map +1 -0
- package/dist/src/components/display/graphics/skeleton/skeletonCellWidth.d.ts +8 -0
- package/dist/src/components/display/graphics/skeleton/skeletonCellWidth.d.ts.map +1 -0
- package/dist/src/components/display/text/tag/CwTag.d.ts +15 -0
- package/dist/src/components/display/text/tag/CwTag.d.ts.map +1 -0
- package/dist/src/components/display/text/tooltip/CwTooltip.d.ts +11 -0
- package/dist/src/components/display/text/tooltip/CwTooltip.d.ts.map +1 -0
- package/dist/src/components/layout/card/CwCard.d.ts +3 -1
- package/dist/src/components/layout/card/CwCard.d.ts.map +1 -1
- package/dist/src/components/layout/card/CwCardList.d.ts +4 -2
- package/dist/src/components/layout/card/CwCardList.d.ts.map +1 -1
- package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts +4 -0
- package/dist/src/components/layout/list/key-value/CwKeyValueList.d.ts.map +1 -1
- package/dist/src/components/layout/master-detail/CwMasterDetail.d.ts +4 -0
- package/dist/src/components/layout/master-detail/CwMasterDetail.d.ts.map +1 -1
- package/dist/src/components/layout/modal/legacy/cw_modal_confirm.d.ts +16 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_confirm.d.ts.map +1 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_iframe.d.ts +21 -0
- package/dist/src/components/layout/modal/legacy/cw_modal_iframe.d.ts.map +1 -0
- package/dist/src/components/layout/tabs/CwTabs.d.ts +7 -0
- package/dist/src/components/layout/tabs/CwTabs.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/playground/PlaygroundApp.d.ts.map +1 -1
- package/dist/src/playground/pages/ProgressPage.d.ts +3 -0
- package/dist/src/playground/pages/ProgressPage.d.ts.map +1 -0
- package/dist/src/playground/pages/SkeletonPage.d.ts +3 -0
- package/dist/src/playground/pages/SkeletonPage.d.ts.map +1 -0
- package/dist/test/components/control/choice/nav-menu/CwNavMenu.test.d.ts +2 -0
- package/dist/test/components/control/choice/nav-menu/CwNavMenu.test.d.ts.map +1 -0
- package/dist/test/components/display/data/table/CwTable.test.d.ts +2 -0
- package/dist/test/components/display/data/table/CwTable.test.d.ts.map +1 -0
- package/dist/test/components/display/data/table-serverside/CwTableServerSide.test.d.ts +2 -0
- package/dist/test/components/display/data/table-serverside/CwTableServerSide.test.d.ts.map +1 -0
- package/dist/test/components/display/data/table_sortable/CwSortableTable.test.d.ts +2 -0
- package/dist/test/components/display/data/table_sortable/CwSortableTable.test.d.ts.map +1 -0
- package/dist/test/components/display/graphics/progress/CwProgress.test.d.ts +2 -0
- package/dist/test/components/display/graphics/progress/CwProgress.test.d.ts.map +1 -0
- package/dist/test/components/display/graphics/skeleton/CwSkeleton.test.d.ts +2 -0
- package/dist/test/components/display/graphics/skeleton/CwSkeleton.test.d.ts.map +1 -0
- package/dist/test/components/display/graphics/skeleton/CwSkeletonCard.test.d.ts +2 -0
- package/dist/test/components/display/graphics/skeleton/CwSkeletonCard.test.d.ts.map +1 -0
- package/dist/test/components/display/graphics/skeleton/normalizeSkeletonCount.test.d.ts +2 -0
- package/dist/test/components/display/graphics/skeleton/normalizeSkeletonCount.test.d.ts.map +1 -0
- package/dist/test/components/display/graphics/skeleton/skeletonCellWidth.test.d.ts +2 -0
- package/dist/test/components/display/graphics/skeleton/skeletonCellWidth.test.d.ts.map +1 -0
- package/dist/test/components/layout/card/CwCard.test.d.ts +2 -0
- package/dist/test/components/layout/card/CwCard.test.d.ts.map +1 -0
- package/dist/test/components/layout/card/CwCardList.test.d.ts +2 -0
- package/dist/test/components/layout/card/CwCardList.test.d.ts.map +1 -0
- package/dist/test/components/layout/list/key-value/CwKeyValueList.test.d.ts +2 -0
- package/dist/test/components/layout/list/key-value/CwKeyValueList.test.d.ts.map +1 -0
- package/dist/test/components/layout/master-detail/CwMasterDetail.test.d.ts +2 -0
- package/dist/test/components/layout/master-detail/CwMasterDetail.test.d.ts.map +1 -0
- package/dist/test/jest.setup.d.ts +2 -0
- package/dist/test/jest.setup.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -161,7 +161,7 @@ function getContrastColor(color) {
|
|
|
161
161
|
return `hsl(${hsl.h}, ${contrastS}%, ${targetL}%)`;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
var styles$
|
|
164
|
+
var styles$x = {"cw-tooltip-content":"cw-tooltip-module__cw-tooltip-content__RZczd","cw-tooltip":"cw-tooltip-module__cw-tooltip__1KYig"};
|
|
165
165
|
|
|
166
166
|
// Constants
|
|
167
167
|
const margin$1 = 16;
|
|
@@ -451,7 +451,7 @@ const CwTooltipManager = () => {
|
|
|
451
451
|
if (!state.isVisible || !state.content) {
|
|
452
452
|
return null;
|
|
453
453
|
}
|
|
454
|
-
return createPortal(jsx("div", { ref: tooltipRef, className: styles$
|
|
454
|
+
return createPortal(jsx("div", { ref: tooltipRef, className: styles$x["cw-tooltip-content"], "data-position": actualPosition, "data-visible": state.isVisible, "data-inline": state.displayInline, style: {
|
|
455
455
|
top: `${tooltipPosition.top}px`,
|
|
456
456
|
left: `${tooltipPosition.left}px`,
|
|
457
457
|
opacity: (isPositioned && !isMeasuring) ? 1 : 0,
|
|
@@ -532,7 +532,7 @@ const CwTooltipNew = ({ children, content = null, position = "right", dissapears
|
|
|
532
532
|
useEffect(() => {
|
|
533
533
|
ensureTooltipManager();
|
|
534
534
|
}, []);
|
|
535
|
-
return (jsx("div", { ref: containerRef, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, "data-inline": displayInline, className: styles$
|
|
535
|
+
return (jsx("div", { ref: containerRef, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: overlayStyle, "data-inline": displayInline, className: styles$x["cw-tooltip"], children: children }));
|
|
536
536
|
};
|
|
537
537
|
|
|
538
538
|
const SVG_ICONS = {
|
|
@@ -991,6 +991,95 @@ function CwLoading({ isLoading = false, text = '', size = 'regular', iconPositio
|
|
|
991
991
|
return (jsxs("div", { "aria-busy": isLoading, className: "cw-loading-container", "data-children": !!children, children: [overlay, jsx("div", { className: "cw-loading-disabled-content", children: children })] }));
|
|
992
992
|
}
|
|
993
993
|
|
|
994
|
+
var styles$w = {"skeleton":"cw-skeleton-module__skeleton__Jvx2x","group":"cw-skeleton-module__group__Cm8AU"};
|
|
995
|
+
|
|
996
|
+
/*
|
|
997
|
+
* Internal helper for skeleton allocations (CwSkeleton, tables, cards).
|
|
998
|
+
* Not exported from the library barrel - not a public API.
|
|
999
|
+
*/
|
|
1000
|
+
/** Upper bound so a pathological count cannot allocate an unbounded number of nodes. */
|
|
1001
|
+
const MAX_SKELETON_COUNT = 100;
|
|
1002
|
+
/**
|
|
1003
|
+
* Normalizes a skeleton count to a finite, floored, non-negative integer capped at
|
|
1004
|
+
* MAX_SKELETON_COUNT. Falls back to `fallback` for undefined, NaN, non-finite or
|
|
1005
|
+
* non-positive input, so valid inputs keep the public default behaviour and only
|
|
1006
|
+
* pathological ones are bounded.
|
|
1007
|
+
*/
|
|
1008
|
+
function normalizeSkeletonCount(value, fallback) {
|
|
1009
|
+
if (value === undefined || !Number.isFinite(value) || value < 1) {
|
|
1010
|
+
return fallback;
|
|
1011
|
+
}
|
|
1012
|
+
return Math.min(Math.floor(value), MAX_SKELETON_COUNT);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/**
|
|
1016
|
+
* CwSkeleton - a shimmering placeholder that reserves the shape of content while it loads.
|
|
1017
|
+
*
|
|
1018
|
+
* Renders inline <span> elements so it can sit inside text-level contexts. Sizing flows
|
|
1019
|
+
* through component-scoped custom properties; only the props the caller provides are set
|
|
1020
|
+
* inline, so the CSS defaults per variant (and the 60% last-line rule) stay in charge.
|
|
1021
|
+
*
|
|
1022
|
+
* @example
|
|
1023
|
+
* <CwSkeleton count={3} />
|
|
1024
|
+
* <CwSkeleton variant="circle" />
|
|
1025
|
+
* <CwSkeleton variant="rect" height="10rem" />
|
|
1026
|
+
*/
|
|
1027
|
+
function CwSkeleton({ variant = 'text', width, height, count = 1, radius, gap }) {
|
|
1028
|
+
// Only forward the custom properties the caller actually set; CSS declares the defaults.
|
|
1029
|
+
const style = {
|
|
1030
|
+
...(width !== undefined && { '--skeleton-width': width }),
|
|
1031
|
+
...(height !== undefined && { '--skeleton-height': height }),
|
|
1032
|
+
...(radius !== undefined && { '--skeleton-radius': radius })
|
|
1033
|
+
};
|
|
1034
|
+
// The un-hashed cw-skeleton / cw-skeleton-group classes carry no styles in the
|
|
1035
|
+
// library - they are stable public hooks for exceptional external overrides.
|
|
1036
|
+
const skeletonClassName = ['cw-skeleton', styles$w.skeleton].filter(Boolean).join(' ');
|
|
1037
|
+
const groupClassName = ['cw-skeleton-group', styles$w.group].filter(Boolean).join(' ');
|
|
1038
|
+
const lineCount = normalizeSkeletonCount(count, 1);
|
|
1039
|
+
if (lineCount <= 1) {
|
|
1040
|
+
return (jsx("span", { className: skeletonClassName, "data-variant": variant, "aria-hidden": "true", style: style }));
|
|
1041
|
+
}
|
|
1042
|
+
const skeletonElements = Array.from({ length: lineCount }, (_, index) => (jsx("span", { className: skeletonClassName, "data-variant": variant, style: style }, index)));
|
|
1043
|
+
const groupStyle = {
|
|
1044
|
+
...(gap !== undefined && { '--skeleton-gap': gap })
|
|
1045
|
+
};
|
|
1046
|
+
return (jsx("span", { className: groupClassName, "aria-hidden": "true", style: groupStyle, children: skeletonElements }));
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
var styles$v = {"progress":"cw-progress-module__progress__d-g2-","value":"cw-progress-module__value__Q-DrH","header":"cw-progress-module__header__mv5ct","label":"cw-progress-module__label__jwOWp","track":"cw-progress-module__track__572-3","fill":"cw-progress-module__fill__fX1UA"};
|
|
1050
|
+
|
|
1051
|
+
/**
|
|
1052
|
+
* CwProgress - a determinate or indeterminate progress bar.
|
|
1053
|
+
*
|
|
1054
|
+
* Use it for measurable operations (imports, uploads, batch jobs). For short
|
|
1055
|
+
* unmeasurable waits use CwLoading; for initial layout loads use CwSkeleton.
|
|
1056
|
+
*
|
|
1057
|
+
* @example
|
|
1058
|
+
* <CwProgress value={62} label="Import" color="success" />
|
|
1059
|
+
* <CwProgress indeterminate label="Uploading" />
|
|
1060
|
+
*/
|
|
1061
|
+
function CwProgress({ value, indeterminate = false, label, rightLabel, size = 'regular', layout = 'row', color = 'primary', monoValue = false, prominent = false }) {
|
|
1062
|
+
const labelId = React__default.useId();
|
|
1063
|
+
// Determinate: a missing or non-finite value is treated as 0 (never NaN), then
|
|
1064
|
+
// clamped to [0,100] for aria-valuenow and the fill width. Indeterminate has no value.
|
|
1065
|
+
const clamped = indeterminate
|
|
1066
|
+
? undefined
|
|
1067
|
+
: Math.min(Math.max(Number.isFinite(value) ? value : 0, 0), 100);
|
|
1068
|
+
const percent = clamped !== undefined ? Math.round(clamped) : undefined;
|
|
1069
|
+
const showValue = rightLabel !== undefined || (!indeterminate && percent !== undefined);
|
|
1070
|
+
const valueText = rightLabel ?? (percent !== undefined ? `${percent}%` : '');
|
|
1071
|
+
// The un-hashed cw-progress class carries no styles in the library - a stable
|
|
1072
|
+
// public hook for exceptional external overrides only.
|
|
1073
|
+
const rootClassName = ['cw-progress', styles$v.progress].filter(Boolean).join(' ');
|
|
1074
|
+
const labelSpan = label ? jsx("span", { className: styles$v.label, id: labelId, children: label }) : null;
|
|
1075
|
+
const valueLabel = showValue ? (jsx("span", { className: styles$v.value, "data-mono": monoValue || undefined, children: valueText })) : null;
|
|
1076
|
+
return (jsxs("div", { className: rootClassName, "data-layout": layout, "data-size": size, "data-color": color, "data-prominent": prominent || undefined, "data-indeterminate": indeterminate || undefined, children: [layout === 'column' && (labelSpan || valueLabel) && (jsxs("header", { className: styles$v.header, children: [labelSpan, valueLabel] })), layout === 'row' && labelSpan, jsx("div", { className: styles$v.track, role: "progressbar", ...(label && { 'aria-labelledby': labelId }), ...(!indeterminate && percent !== undefined && {
|
|
1077
|
+
'aria-valuenow': percent,
|
|
1078
|
+
'aria-valuemin': 0,
|
|
1079
|
+
'aria-valuemax': 100
|
|
1080
|
+
}), children: jsx("div", { className: styles$v.fill, style: !indeterminate && clamped !== undefined ? { width: `${clamped}%` } : undefined }) }), layout === 'row' && valueLabel] }));
|
|
1081
|
+
}
|
|
1082
|
+
|
|
994
1083
|
var styles$u = {"cw-generic-tooltip-content":"cw-generic-tooltip-module__cw-generic-tooltip-content__la-Si","cw-generic-tooltip":"cw-generic-tooltip-module__cw-generic-tooltip__Ij76M"};
|
|
995
1084
|
|
|
996
1085
|
// Constants moved outside to prevent recreation
|
|
@@ -1729,7 +1818,7 @@ function CwAlign(props) {
|
|
|
1729
1818
|
}, children: props.children }));
|
|
1730
1819
|
}
|
|
1731
1820
|
|
|
1732
|
-
var styles$r = {"card":"cw-card-module__card__HJUT0","clickable":"cw-card-module__clickable__Y-V3X","disabled":"cw-card-module__disabled__0wHh1","
|
|
1821
|
+
var styles$r = {"card":"cw-card-module__card__HJUT0","clickable":"cw-card-module__clickable__Y-V3X","disabled":"cw-card-module__disabled__0wHh1","content":"cw-card-module__content__ma9qy","headerContent":"cw-card-module__headerContent__x4Jfl","footerTags":"cw-card-module__footerTags__80sSW"};
|
|
1733
1822
|
|
|
1734
1823
|
/**
|
|
1735
1824
|
* CwCard - A simple card component for displaying content in a contained format
|
|
@@ -1749,7 +1838,7 @@ var styles$r = {"card":"cw-card-module__card__HJUT0","clickable":"cw-card-module
|
|
|
1749
1838
|
* <p>This is the main content of the card.</p>
|
|
1750
1839
|
* </CwCard>
|
|
1751
1840
|
**/
|
|
1752
|
-
const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, onEdit, onDelete, extraActions, className = '', clickable = false, onClick, isLoading = false, disabled = false, style, chips = [], variant = "border", direction = "column", layout, }) => {
|
|
1841
|
+
const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, onEdit, onDelete, extraActions, className = '', clickable = false, onClick, isLoading = false, skeletonLines = 3, disabled = false, style, chips = [], variant = "border", direction = "column", layout, }) => {
|
|
1753
1842
|
const resolvedDirection = layout?.direction ?? direction;
|
|
1754
1843
|
const resolvedAlign = layout?.align ?? (alignment === 'left' ? 'start' : 'center');
|
|
1755
1844
|
// Construct class names using CSS modules
|
|
@@ -1759,7 +1848,6 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1759
1848
|
className,
|
|
1760
1849
|
clickable ? styles$r.clickable : '',
|
|
1761
1850
|
disabled ? styles$r.disabled : '',
|
|
1762
|
-
isLoading ? styles$r.loading : '',
|
|
1763
1851
|
].filter(Boolean).join(' ');
|
|
1764
1852
|
// Handle click event when card is clickable
|
|
1765
1853
|
const handleClick = () => {
|
|
@@ -1775,16 +1863,17 @@ const CwCard = ({ id, title, subtitle, alignment = 'center', children, footer, o
|
|
|
1775
1863
|
const hasChips = chips.length > 0;
|
|
1776
1864
|
// Determine if footer should be rendered
|
|
1777
1865
|
const hasFooter = hasChips || footer || (hasActions && resolvedDirection === "row");
|
|
1778
|
-
// Actions component to reuse
|
|
1779
|
-
|
|
1780
|
-
|
|
1866
|
+
// Actions component to reuse. While loading, each provided action renders a circular
|
|
1867
|
+
// ghost sized to the CwButton icon footprint (2rem) - no interactive buttons.
|
|
1868
|
+
const ActionsComponent = hasActions && !disabled ? (jsx("div", { className: styles$r.actions, children: isLoading ? (jsxs(Fragment, { children: [extraActions && jsx(CwSkeleton, { variant: "circle", height: "2rem" }), onEdit && jsx(CwSkeleton, { variant: "circle", height: "2rem" }), onDelete && jsx(CwSkeleton, { variant: "circle", height: "2rem" })] })) : (jsxs(Fragment, { children: [extraActions ?? null, onEdit && jsx(CwButton, { variant: "icon", icon: "edit", onClick: onEdit }), onDelete && jsx(CwButton, { variant: "icon", icon: "delete", color: "danger", onClick: onDelete })] })) })) : null;
|
|
1869
|
+
return (jsxs("div", { ...(id && { id }), className: cardClassNames, ...(style && { style }), ...(clickable && !isLoading && {
|
|
1781
1870
|
role: 'button',
|
|
1782
1871
|
tabIndex: 0,
|
|
1783
1872
|
onClick: handleClick,
|
|
1784
|
-
}), "data-variant": variant, "data-direction": resolvedDirection, children: [hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$r.headerContent, "data-align": resolvedAlign, children: [title && jsx("h5", { children: title }), subtitle && jsx("strong", { children: subtitle })] })), resolvedDirection === "column" && ActionsComponent] })), jsx("div", { className: styles$r.content, children: children }), hasFooter && (jsxs("footer", { children: [hasChips && (jsx("div", { className: styles$r.footerTags, children: chips.map((chip, index) => (jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$r.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsx("div", { className: styles$r.footerContent, children: footer }))] })), resolvedDirection === "row" && ActionsComponent
|
|
1873
|
+
}), "data-variant": variant, "data-direction": resolvedDirection, "aria-busy": isLoading || undefined, children: [isLoading ? (jsxs("header", { children: [jsx("div", { className: styles$r.headerContent, "data-align": resolvedAlign, children: jsx(CwSkeleton, { width: "8rem", height: "1.5em" }) }), resolvedDirection === "column" && ActionsComponent] })) : (hasHeader && (jsxs("header", { children: [(title || subtitle) && (jsxs("div", { className: styles$r.headerContent, "data-align": resolvedAlign, children: [title && jsx("h5", { children: title }), subtitle && jsx("strong", { children: subtitle })] })), resolvedDirection === "column" && ActionsComponent] }))), jsx("div", { className: styles$r.content, children: isLoading ? jsx(CwSkeleton, { count: normalizeSkeletonCount(skeletonLines, 3) }) : children }), hasFooter && (isLoading ? (jsx("footer", { children: jsx("div", { className: styles$r.footerTags, children: jsx(CwSkeleton, { variant: "rect", width: "4rem", height: "1.5em", radius: "1rem" }) }) })) : (jsxs("footer", { children: [hasChips && (jsx("div", { className: styles$r.footerTags, children: chips.map((chip, index) => (jsx(CwChip, { label: chip.label, colorScheme: chip.colorScheme, className: styles$r.chip, ...(chip.customColor && { customColor: chip.customColor }), ...(chip.variant && { variant: chip.variant }), ...(chip.icon && { icon: chip.icon }) }, index))) })), footer && (jsx("div", { className: styles$r.footerContent, children: footer }))] }))), resolvedDirection === "row" && ActionsComponent] }));
|
|
1785
1874
|
};
|
|
1786
1875
|
|
|
1787
|
-
var styles$q = {"cardContainer":"cw-card-list-module__cardContainer__l3YEh","pagination":"cw-card-list-module__pagination__5Ay78","pageInfo":"cw-card-list-module__pageInfo__uiMel","
|
|
1876
|
+
var styles$q = {"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"};
|
|
1788
1877
|
|
|
1789
1878
|
/**
|
|
1790
1879
|
* Option to display in the CwSelect
|
|
@@ -1842,7 +1931,7 @@ function CwSelect(props) {
|
|
|
1842
1931
|
: selectProps.onChange, children: [placeholder && jsx(CwOption, { value: "", children: placeholder }), children] }), buttonProps && jsx(CwButton, { ...buttonProps })] })] }), feedbackMessages.map((feedbackItem, index) => (jsx("p", { className: "cw-input-info", "data-color": feedbackItem.type, children: feedbackItem.message }, index)))] }));
|
|
1843
1932
|
}
|
|
1844
1933
|
|
|
1845
|
-
function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, emptyState, sortOptions = [], defaultSortKey, keyExtractor, ...htmlProps }) {
|
|
1934
|
+
function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', defaultCardWidth = 320, cardGap = 16, isLoading = false, skeletonCards = 6, emptyState, sortOptions = [], defaultSortKey, keyExtractor, ...htmlProps }) {
|
|
1846
1935
|
const [currentPage, setCurrentPage] = useState(1);
|
|
1847
1936
|
const [sortKey, setSortKey] = useState(defaultSortKey || sortOptions[0]?.key || '');
|
|
1848
1937
|
const [sortDirection, setSortDirection] = useState('asc');
|
|
@@ -1879,7 +1968,7 @@ function CwCardList({ items, renderCard, pageSize = 10, layout = 'grid', default
|
|
|
1879
1968
|
icon: sortDirection === 'asc' ? 'arrow-up' : 'arrow-down',
|
|
1880
1969
|
onClick: () => setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc'),
|
|
1881
1970
|
title: `Sort ${sortDirection === 'asc' ? 'descending' : 'ascending'}`,
|
|
1882
|
-
}, value: sortKey, onChange: (e) => handleSortChange(e.target.value), children: sortOptions.map(option => (jsx(CwOption, { value: option.key, children: option.label }, option.key))) }) })), isLoading ? (jsx("div", { className: styles$q.
|
|
1971
|
+
}, value: sortKey, onChange: (e) => handleSortChange(e.target.value), children: sortOptions.map(option => (jsx(CwOption, { value: option.key, children: option.label }, option.key))) }) })), isLoading ? (jsx("div", { className: `${styles$q.cardContainer}`, "data-layout": layout, style: gridStyle, "aria-busy": true, children: Array.from({ length: normalizeSkeletonCount(skeletonCards, 6) }, (_, index) => (jsx(CwCard, { isLoading: true, children: null }, `skeleton_${index}`))) })) : sortedItems.length === 0 ? (jsx("div", { className: styles$q.emptyState, children: emptyState || jsx("p", { children: "No items to display" }) })) : (jsxs(Fragment, { children: [jsx("div", { className: `${styles$q.cardContainer}`, "data-layout": layout, style: gridStyle, children: visibleItems.map((item, index) => (jsx(React__default.Fragment, { children: renderCard(item, index) }, keyExtractor ? keyExtractor(item, index) : index))) }), totalPages > 1 && (jsxs("div", { className: styles$q.pagination, children: [jsx(CwButton, { variant: "icon", icon: "chevron-left", disabled: currentPage === 1, onClick: () => setCurrentPage(p => Math.max(1, p - 1)) }), jsxs("span", { className: styles$q.pageInfo, children: [currentPage, " / ", totalPages] }), jsx(CwButton, { variant: "icon", icon: "chevron-right", disabled: currentPage === totalPages, onClick: () => setCurrentPage(p => Math.min(totalPages, p + 1)) })] }))] }))] }));
|
|
1883
1972
|
}
|
|
1884
1973
|
|
|
1885
1974
|
var styles$p = {"cw-accordion":"cw-accordion-module__cw-accordion__ErvlW","cw-accordion-body":"cw-accordion-module__cw-accordion-body__xlI8b"};
|
|
@@ -1902,6 +1991,21 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
|
|
|
1902
1991
|
return (jsxs("div", { className: styles$p["cw-accordion"], style: CwelltAccordionContainerProps.style, "data-open": isVisible_accordionBody, children: [jsxs("header", { onClick: () => showAccordionBody(), children: [jsx("div", { children: CwelltAccordionContainerProps.desc_text }), jsx("button", { className: "cw-button-icon" })] }), jsx("div", { className: styles$p["cw-accordion-body"], children: CwelltAccordionContainerProps.children })] }));
|
|
1903
1992
|
}
|
|
1904
1993
|
|
|
1994
|
+
/*
|
|
1995
|
+
* Internal helper for table loading ghosts (CwTable, CwSortableTable).
|
|
1996
|
+
* Not exported from the library barrel - not a public API.
|
|
1997
|
+
*/
|
|
1998
|
+
const SKELETON_CELL_WIDTHS = ['85%', '60%', '95%', '70%', '80%', '65%'];
|
|
1999
|
+
/**
|
|
2000
|
+
* Deterministic width for a table ghost cell so skeleton rows look like real,
|
|
2001
|
+
* unevenly sized content. Derived purely from indices - stable across re-renders
|
|
2002
|
+
* (no reshuffling) - and offset by the column count so the pattern does not
|
|
2003
|
+
* repeat identically per row or per column.
|
|
2004
|
+
*/
|
|
2005
|
+
function getSkeletonCellWidth(rowIndex, columnIndex, columnCount) {
|
|
2006
|
+
return SKELETON_CELL_WIDTHS[(rowIndex * columnCount + columnIndex) % SKELETON_CELL_WIDTHS.length];
|
|
2007
|
+
}
|
|
2008
|
+
|
|
1905
2009
|
/**
|
|
1906
2010
|
* A reusable and customizable table component.
|
|
1907
2011
|
*
|
|
@@ -1971,7 +2075,7 @@ function CwAccordionContainer(CwelltAccordionContainerProps) {
|
|
|
1971
2075
|
*
|
|
1972
2076
|
* @returns React component
|
|
1973
2077
|
*/
|
|
1974
|
-
function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10, 20, 50], expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id, testId, textNoData = "No data available at the moment", rowKey = "key", loading = false, scrollHeight, stickyHeader = false, pageLabel = "page", rowSelection }) {
|
|
2078
|
+
function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10, 20, 50], expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id, testId, textNoData = "No data available at the moment", rowKey = "key", loading = false, skeletonRows = 5, scrollHeight, stickyHeader = false, pageLabel = "page", rowSelection }) {
|
|
1975
2079
|
const [currentPage, setCurrentPage] = useState(1);
|
|
1976
2080
|
const [expandedRowKey, setExpandedRowKey] = useState(null);
|
|
1977
2081
|
const [sortConfig, setSortConfig] = useState({
|
|
@@ -2109,7 +2213,9 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
2109
2213
|
};
|
|
2110
2214
|
const renderTableBody = () => {
|
|
2111
2215
|
if (loading) {
|
|
2112
|
-
|
|
2216
|
+
// Ghost rows: rendered outside the data/selection/expand code paths, so they
|
|
2217
|
+
// cannot trigger row click, selection or expansion.
|
|
2218
|
+
return Array.from({ length: normalizeSkeletonCount(skeletonRows, 5) }, (_, rowIndex) => (jsxs("tr", { children: [expandedRowRender && jsx("td", { className: "cw-table-col-action" }), columns.map((col, columnIndex) => (jsx("td", { className: col.className ?? "", children: jsx(CwSkeleton, { variant: "text", width: getSkeletonCellWidth(rowIndex, columnIndex, columns.length) }) }, col.key)))] }, `skeleton_${rowIndex}`)));
|
|
2113
2219
|
}
|
|
2114
2220
|
if (!paginatedData || paginatedData.length === 0) {
|
|
2115
2221
|
return (jsx("tr", { children: jsx("td", { colSpan: getColSpan(), className: "cw-table-cell-empty", style: { textAlign: "center" }, children: textNoData }) }));
|
|
@@ -2131,7 +2237,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
2131
2237
|
: "cwi-chevron-right"}` }) })), columns.map(col => (jsx("td", { className: col.className ?? "", children: col.render ? col.render(item) : col.dataIndex ? String(item[col.dataIndex] ?? "") : "" }, `${itemKey}_${col.key}`)))] }), expandedRowRender && expandedRowKey === itemKey && (jsx("tr", { className: "cw-table-row-expanded", children: jsx("td", { colSpan: getColSpan(), children: expandedRowRender(item) }) }))] }, String(itemKey)));
|
|
2132
2238
|
});
|
|
2133
2239
|
};
|
|
2134
|
-
return (jsxs("div", { id: id, "data-testid": testId, className: `cw-table-container${stickyHeader || scrollHeight ? " cw-table-scroll" : ""} ${classNameContainer ?? ""}`, style: { ...(scrollHeight ? { "--table-height": typeof scrollHeight === "number" ? `${scrollHeight}px` : scrollHeight } : {}), ...style }, children: [jsxs("table", { className: `cw-table ${className ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [expandedRowRender && jsx("th", {}), columns.map(col => (jsxs("th", { onClick: () => col.sortable && col.dataIndex && handleSort(col.dataIndex), className: `${col.className ?? ""} ${sortConfig.key === col.dataIndex
|
|
2240
|
+
return (jsxs("div", { id: id, "data-testid": testId, className: `cw-table-container${stickyHeader || scrollHeight ? " cw-table-scroll" : ""} ${classNameContainer ?? ""}`, style: { ...(scrollHeight ? { "--table-height": typeof scrollHeight === "number" ? `${scrollHeight}px` : scrollHeight } : {}), ...style }, "aria-busy": loading || undefined, children: [jsxs("table", { className: `cw-table ${className ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [expandedRowRender && jsx("th", {}), columns.map(col => (jsxs("th", { onClick: () => col.sortable && col.dataIndex && handleSort(col.dataIndex), className: `${col.className ?? ""} ${sortConfig.key === col.dataIndex
|
|
2135
2241
|
? sortConfig.direction
|
|
2136
2242
|
: ""}`.trim(), style: {
|
|
2137
2243
|
cursor: col.sortable ? "pointer" : "default",
|
|
@@ -2157,7 +2263,7 @@ function CwTable({ columns, data, pagination = false, pageSizeOptions = [5, 10,
|
|
|
2157
2263
|
}, min: 1, max: totalPages }), jsx("span", { children: "/" }), jsx("span", { children: totalPages }), jsx(CwButton, { onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages || totalPages <= 1, variant: "icon", icon: "chevron-right" }), jsx(CwButton, { onClick: () => handlePageChange(totalPages), disabled: currentPage === totalPages || totalPages <= 1, variant: "icon", icon: "chevron-right-double" })] })] }))] }));
|
|
2158
2264
|
}
|
|
2159
2265
|
|
|
2160
|
-
var styles$o = {"dropIndicator":"cw-sortable-table-module__dropIndicator__ov-Jz","dragging":"cw-sortable-table-module__dragging__MrLrz","
|
|
2266
|
+
var styles$o = {"dropIndicator":"cw-sortable-table-module__dropIndicator__ov-Jz","dragging":"cw-sortable-table-module__dragging__MrLrz","saveBar":"cw-sortable-table-module__saveBar__3OdoZ cw-flex-row cw-align-center-center cw-gap-small"};
|
|
2161
2267
|
|
|
2162
2268
|
/**
|
|
2163
2269
|
* Hook that provides state management for CwSortableTable.
|
|
@@ -2222,7 +2328,12 @@ function useSortableTable(initialItems) {
|
|
|
2222
2328
|
// ─── Drop indicator row ───────────────────────────────────────────────────────
|
|
2223
2329
|
const DropIndicatorRow = ({ colSpan }) => (jsx("tr", { className: styles$o.dropIndicator, "aria-hidden": true, children: jsx("td", { colSpan: colSpan, children: jsx("div", {}) }) }));
|
|
2224
2330
|
// ─── Loading skeleton ─────────────────────────────────────────────────────────
|
|
2225
|
-
|
|
2331
|
+
// Plain td cells (no local class): the ghost cells get the same global cw-table
|
|
2332
|
+
// padding as real body cells, so row heights match the loaded rows exactly.
|
|
2333
|
+
// One cell per real column, so column classNames/widths apply to the ghost too.
|
|
2334
|
+
function LoadingRows({ columns, showHandle, skeletonRows }) {
|
|
2335
|
+
return (jsx(Fragment, { children: Array.from({ length: skeletonRows }).map((_, rowIndex) => (jsxs("tr", { children: [showHandle && jsx("td", { className: "cw-table-col-action" }), columns.map((col, columnIndex) => (jsx("td", { className: col.className ?? "", style: col.width ? { width: col.width } : undefined, children: jsx(CwSkeleton, { variant: "text", width: getSkeletonCellWidth(rowIndex, columnIndex, columns.length) }) }, col.key)))] }, rowIndex))) }));
|
|
2336
|
+
}
|
|
2226
2337
|
// ─── Component ────────────────────────────────────────────────────────────────
|
|
2227
2338
|
/**
|
|
2228
2339
|
* CwSortableTable
|
|
@@ -2239,7 +2350,7 @@ const LoadingRows = ({ colSpan }) => (jsx(Fragment, { children: Array.from({ len
|
|
|
2239
2350
|
* - Reorder is calculated in onDragEnd using lastValidDropIndex
|
|
2240
2351
|
* - draggedItem is tracked in state, not via dataTransfer
|
|
2241
2352
|
*/
|
|
2242
|
-
function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = false, textNoData = "No data available", className, tableClassName, maxHeight, showHandle = true, style, saveLabel = "Save order", discardLabel = "Discard", }) {
|
|
2353
|
+
function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = false, skeletonRows = 5, textNoData = "No data available", className, tableClassName, maxHeight, showHandle = true, style, saveLabel = "Save order", discardLabel = "Discard", }) {
|
|
2243
2354
|
const { items, hasChanges, handleReorder, handleSave, handleDiscard, } = useSortableTable(data);
|
|
2244
2355
|
// Drag state lives in the component, same as CwSortableList
|
|
2245
2356
|
const [draggedItem, setDraggedItem] = useState(null);
|
|
@@ -2258,11 +2369,15 @@ function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = f
|
|
|
2258
2369
|
setLastValidDropIndex(null);
|
|
2259
2370
|
};
|
|
2260
2371
|
const handleDragStart = (e, item) => {
|
|
2372
|
+
if (loading)
|
|
2373
|
+
return;
|
|
2261
2374
|
setDraggedItem(item);
|
|
2262
2375
|
setLastValidDropIndex(null);
|
|
2263
2376
|
e.dataTransfer.effectAllowed = "move";
|
|
2264
2377
|
};
|
|
2265
2378
|
const handleDragOver = (e, index) => {
|
|
2379
|
+
if (loading)
|
|
2380
|
+
return;
|
|
2266
2381
|
e.preventDefault();
|
|
2267
2382
|
if (!draggedItem)
|
|
2268
2383
|
return;
|
|
@@ -2275,6 +2390,11 @@ function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = f
|
|
|
2275
2390
|
}
|
|
2276
2391
|
};
|
|
2277
2392
|
const handleDragEnd = () => {
|
|
2393
|
+
// Never persist a reorder computed against stale/ghost data while loading.
|
|
2394
|
+
if (loading) {
|
|
2395
|
+
cleanupDragState();
|
|
2396
|
+
return;
|
|
2397
|
+
}
|
|
2278
2398
|
if (draggedItem && lastValidDropIndex !== null) {
|
|
2279
2399
|
const dragIndex = items.findIndex(item => item[rowKey] === draggedItem[rowKey]);
|
|
2280
2400
|
if (dragIndex !== lastValidDropIndex && dragIndex !== lastValidDropIndex - 1) {
|
|
@@ -2301,7 +2421,7 @@ function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = f
|
|
|
2301
2421
|
};
|
|
2302
2422
|
const renderBody = () => {
|
|
2303
2423
|
if (loading) {
|
|
2304
|
-
return jsx(LoadingRows, {
|
|
2424
|
+
return jsx(LoadingRows, { columns: columns, showHandle: showHandle, skeletonRows: normalizeSkeletonCount(skeletonRows, 5) });
|
|
2305
2425
|
}
|
|
2306
2426
|
if (!items || items.length === 0) {
|
|
2307
2427
|
return (jsx("tr", { children: jsx("td", { colSpan: totalCols, className: "cw-table-cell-empty", style: { textAlign: "center" }, children: textNoData }) }));
|
|
@@ -2313,7 +2433,7 @@ function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = f
|
|
|
2313
2433
|
});
|
|
2314
2434
|
};
|
|
2315
2435
|
// ── Render ──────────────────────────────────────────────────────────────
|
|
2316
|
-
return (jsxs("div", { className: `cw-table-container ${className ?? ""}`, style: containerStyle, children: [jsxs("table", { className: `cw-table cw-sortable-table ${tableClassName ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [showHandle && jsx("th", { className: "cw-table-col-action" }), columns.map(col => (jsx("th", { className: col.className ?? "", style: col.width ? { width: col.width, minWidth: 50 } : undefined, children: col.title }, col.key)))] }) }), jsx("tbody", { children: renderBody() })] }), hasChanges && (jsxs("footer", { className: styles$o.saveBar, children: [jsx(CwButton, { variant: "outline", color: "neutral", icon: "undo", text: discardLabel, onClick: handleDiscard }), jsx(CwButton, { variant: "solid", color: "primary", icon: "save", text: saveLabel, onClick: () => handleSave(onReorder) })] }))] }));
|
|
2436
|
+
return (jsxs("div", { className: `cw-table-container ${className ?? ""}`, style: containerStyle, "aria-busy": loading || undefined, children: [jsxs("table", { className: `cw-table cw-sortable-table ${tableClassName ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [showHandle && jsx("th", { className: "cw-table-col-action" }), columns.map(col => (jsx("th", { className: col.className ?? "", style: col.width ? { width: col.width, minWidth: 50 } : undefined, children: col.title }, col.key)))] }) }), jsx("tbody", { children: renderBody() })] }), !loading && hasChanges && (jsxs("footer", { className: styles$o.saveBar, children: [jsx(CwButton, { variant: "outline", color: "neutral", icon: "undo", text: discardLabel, onClick: handleDiscard }), jsx(CwButton, { variant: "solid", color: "primary", icon: "save", text: saveLabel, onClick: () => handleSave(onReorder) })] }))] }));
|
|
2317
2437
|
}
|
|
2318
2438
|
|
|
2319
2439
|
/**
|
|
@@ -2369,7 +2489,7 @@ function CwSortableTable({ columns, data, rowKey = "key", onReorder, loading = f
|
|
|
2369
2489
|
*
|
|
2370
2490
|
* @returns React component
|
|
2371
2491
|
*/
|
|
2372
|
-
function CwTableServerSide({ columns, data, totalItems, pagination = false, pageSizeOptions = [5, 10, 20, 50], pageLabel = "page", expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id, testId, textNoData = "No data available at the moment", rowKey = "key", loading = false, scrollHeight, stickyHeader = false, rowSelection, onChange, serverState, }) {
|
|
2492
|
+
function CwTableServerSide({ columns, data, totalItems, pagination = false, pageSizeOptions = [5, 10, 20, 50], pageLabel = "page", expandedRowRender, onExpand, className, classNameRow, style, classNameContainer, id, testId, textNoData = "No data available at the moment", rowKey = "key", loading = false, skeletonRows = 5, scrollHeight, stickyHeader = false, rowSelection, onChange, serverState, }) {
|
|
2373
2493
|
const [internalState, setInternalState] = useState({
|
|
2374
2494
|
page: 1,
|
|
2375
2495
|
pageSize: pageSizeOptions[0],
|
|
@@ -2470,7 +2590,9 @@ function CwTableServerSide({ columns, data, totalItems, pagination = false, page
|
|
|
2470
2590
|
};
|
|
2471
2591
|
const renderTableBody = () => {
|
|
2472
2592
|
if (loading) {
|
|
2473
|
-
|
|
2593
|
+
// Ghost rows: rendered outside the data/selection/expand code paths, so they
|
|
2594
|
+
// cannot trigger row click, selection or expansion.
|
|
2595
|
+
return Array.from({ length: normalizeSkeletonCount(skeletonRows, 5) }, (_, rowIndex) => (jsxs("tr", { children: [expandedRowRender && jsx("td", { className: "cw-table-col-action" }), columns.map((col, columnIndex) => (jsx("td", { className: col.className ?? "", children: jsx(CwSkeleton, { variant: "text", width: getSkeletonCellWidth(rowIndex, columnIndex, columns.length) }) }, col.key)))] }, `skeleton_${rowIndex}`)));
|
|
2474
2596
|
}
|
|
2475
2597
|
if (!data || data.length === 0) {
|
|
2476
2598
|
return (jsx("tr", { children: jsx("td", { colSpan: getColSpan(), className: "cw-table-cell-empty", style: { textAlign: "center" }, children: textNoData }) }));
|
|
@@ -2488,7 +2610,7 @@ function CwTableServerSide({ columns, data, totalItems, pagination = false, page
|
|
|
2488
2610
|
}, children: [expandedRowRender && (jsx("td", { className: "cw-table-col-action cw-table-col-expand", children: jsx("button", { onClick: () => handleRowExpand(item), className: `cw-button-icon ${expandedRowKey === itemKey ? "cwi-chevron-down" : "cwi-chevron-right"}` }) })), columns.map((col) => (jsx("td", { className: col.className ?? "", children: col.render ? col.render(item) : col.dataIndex ? String(item[col.dataIndex] ?? "") : "" }, `${itemKey}_${col.key}`)))] }), expandedRowRender && expandedRowKey === itemKey && (jsx("tr", { className: "cw-table-row-expanded", children: jsx("td", { colSpan: getColSpan(), children: expandedRowRender(item) }) }))] }, String(itemKey)));
|
|
2489
2611
|
});
|
|
2490
2612
|
};
|
|
2491
|
-
return (jsxs("div", { id: id, "data-testid": testId, className: `cw-table-container${stickyHeader || scrollHeight ? " cw-table-scroll" : ""} ${classNameContainer ?? ""}`, style: { ...(scrollHeight ? { "--table-height": typeof scrollHeight === "number" ? `${scrollHeight}px` : scrollHeight } : {}), ...style }, children: [jsxs("table", { className: `cw-table ${className ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [expandedRowRender && jsx("th", {}), columns.map((col) => (jsxs("th", { onClick: () => col.sortable && col.dataIndex && handleSort(col.dataIndex), className: `${col.className ?? ""} ${state.sortKey === col.dataIndex ? state.sortDirection : ""}`.trim(), style: {
|
|
2613
|
+
return (jsxs("div", { id: id, "data-testid": testId, className: `cw-table-container${stickyHeader || scrollHeight ? " cw-table-scroll" : ""} ${classNameContainer ?? ""}`, style: { ...(scrollHeight ? { "--table-height": typeof scrollHeight === "number" ? `${scrollHeight}px` : scrollHeight } : {}), ...style }, "aria-busy": loading || undefined, children: [jsxs("table", { className: `cw-table ${className ?? ""}`, style: { width: "100%" }, children: [jsx("thead", { children: jsxs("tr", { children: [expandedRowRender && jsx("th", {}), columns.map((col) => (jsxs("th", { onClick: () => col.sortable && col.dataIndex && handleSort(col.dataIndex), className: `${col.className ?? ""} ${state.sortKey === col.dataIndex ? state.sortDirection : ""}`.trim(), style: {
|
|
2492
2614
|
cursor: col.sortable ? "pointer" : "default",
|
|
2493
2615
|
userSelect: "none",
|
|
2494
2616
|
width: columnWidths[col.key] ?? col.width,
|
|
@@ -2562,7 +2684,7 @@ function CwTabs(CwTabsProps) {
|
|
|
2562
2684
|
const tabsListStyle = position === 'left' && CwTabsProps.tabsListWidth
|
|
2563
2685
|
? { minWidth: CwTabsProps.tabsListWidth }
|
|
2564
2686
|
: undefined;
|
|
2565
|
-
return (jsxs("div", { id: CwTabsProps.id, "data-testid": CwTabsProps.testId, className: styles$n['cw-tabs'] + (CwTabsProps.className ? ` ${CwTabsProps.className}` : "") + "", style: CwTabsProps.style, "data-tabs-position": position, children: [jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, "data-tab-key": tab.key, children: [jsx(TabIcon, { icon: tab.icon }), tab.title, (tab.badge !== undefined || tab.badgeColor) && (jsx("span", { className: styles$n['badge'], style: tab.badgeColor ? { backgroundColor: tab.badgeColor, color: getContrastColor(tab.badgeColor) } : undefined, children: tab.badge }))] }, tab.key))) }), jsx("div", { className: styles$n['cw-tabs-content'], "data-active-tab-key": activeTab ?? undefined, children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
|
|
2687
|
+
return (jsxs("div", { id: CwTabsProps.id, "data-testid": CwTabsProps.testId, className: styles$n['cw-tabs'] + (CwTabsProps.className ? ` ${CwTabsProps.className}` : "") + "", style: CwTabsProps.style, "data-tabs-position": position, children: [jsx("ul", { style: tabsListStyle, children: CwTabsProps.tabs.map(tab => (jsxs("li", { className: `${tab.key === activeTab ? "cw-tab-active" : ""}`, onClick: () => handleTabClick(tab), "data-active": tab.key === activeTab, "data-tab-key": tab.key, children: [jsx(TabIcon, { icon: tab.icon }), tab.title, (tab.badge !== undefined || tab.badgeColor) && (jsx("span", { className: styles$n['badge'], style: tab.badgeColor ? { backgroundColor: tab.badgeColor, color: getContrastColor(tab.badgeColor) } : undefined, children: tab.badge }))] }, tab.key))) }), jsx("div", { className: styles$n['cw-tabs-content'], "data-active-tab-key": activeTab ?? undefined, style: CwTabsProps.contentHeight ? { '--tabs-height': CwTabsProps.contentHeight } : undefined, children: activeTab !== null && CwTabsProps.tabs.find(tab => tab.key === activeTab)?.content })] }));
|
|
2566
2688
|
}
|
|
2567
2689
|
|
|
2568
2690
|
/**
|
|
@@ -2589,9 +2711,17 @@ const CwExpandable = ({ briefing, onToggle, onOpen, onClose, children, ...detail
|
|
|
2589
2711
|
return (jsxs("details", { ref: myRef, ...detailsProps, className: "cw-expandable", children: [jsx("summary", { children: briefing }), children && jsx("section", { children: children })] }));
|
|
2590
2712
|
};
|
|
2591
2713
|
|
|
2592
|
-
var styles$m = {"cw-master-detail":"cw-master-detail-module__cw-master-detail__O8-FA","resizer":"cw-master-detail-module__resizer__hvGhL","detail":"cw-master-detail-module__detail__BG4Dm","detail-empty":"cw-master-detail-module__detail-empty__KFScK"};
|
|
2714
|
+
var styles$m = {"cw-master-detail":"cw-master-detail-module__cw-master-detail__O8-FA","resizer":"cw-master-detail-module__resizer__hvGhL","detail":"cw-master-detail-module__detail__BG4Dm","skeletonRow":"cw-master-detail-module__skeletonRow__6BUgt","detailSkeleton":"cw-master-detail-module__detailSkeleton__GcDS4","detail-empty":"cw-master-detail-module__detail-empty__KFScK"};
|
|
2593
2715
|
|
|
2594
|
-
|
|
2716
|
+
/*
|
|
2717
|
+
* Fixed rem widths for the ghosts: the master rows and detail panel size their
|
|
2718
|
+
* content freely, so a percentage-width skeleton would resolve to 100% of ~0 and
|
|
2719
|
+
* collapse to nothing. Fixed widths render regardless of layout. Cycled so rows do
|
|
2720
|
+
* not all look identical.
|
|
2721
|
+
*/
|
|
2722
|
+
const MASTER_TITLE_WIDTHS = ['9rem', '11rem', '8rem', '10rem'];
|
|
2723
|
+
const MASTER_SUBTITLE_WIDTH = '5rem';
|
|
2724
|
+
const CwMasterDetail = ({ id, className, style, items, selectedKey, onSelect, detailContent, emptyDetail, searchPlaceholder = 'Search...', onSearch, masterHeader, masterFooter, masterWidth: initialWidth = 320, minMasterWidth = 240, maxMasterWidth = 500, resizable = true, showSearch = true, loading = false, skeletonRows = 5, }) => {
|
|
2595
2725
|
const [masterWidth, setMasterWidth] = useState(initialWidth);
|
|
2596
2726
|
const [isResizing, setIsResizing] = useState(false);
|
|
2597
2727
|
const containerRef = useRef(null);
|
|
@@ -2626,11 +2756,21 @@ const CwMasterDetail = ({ id, className, style, items, selectedKey, onSelect, de
|
|
|
2626
2756
|
};
|
|
2627
2757
|
}, [isResizing, minMasterWidth, maxMasterWidth]);
|
|
2628
2758
|
const rootClassName = [styles$m['cw-master-detail'], className].filter(Boolean).join(' ');
|
|
2629
|
-
return (jsxs("div", { id: id, ref: containerRef, className: rootClassName, style: style, children: [jsxs("aside", { style: { width: masterWidth, minWidth: masterWidth }, children: [showSearch && (jsx("search", { children: jsx("input", { type: "text", placeholder: searchPlaceholder, onChange: (e) => onSearch?.(e.target.value) }) })), masterHeader && (jsx("header", { children: masterHeader })), jsx("ul", { children:
|
|
2759
|
+
return (jsxs("div", { id: id, ref: containerRef, className: rootClassName, style: style, "aria-busy": loading || undefined, children: [jsxs("aside", { style: { width: masterWidth, minWidth: masterWidth }, children: [showSearch && (jsx("search", { children: jsx("input", { type: "text", placeholder: searchPlaceholder, onChange: (e) => onSearch?.(e.target.value) }) })), masterHeader && (jsx("header", { children: masterHeader })), jsx("ul", { children: loading
|
|
2760
|
+
? Array.from({ length: skeletonRows }, (_unused, rowIndex) => (jsxs("li", { "aria-hidden": "true", children: [jsx(CwSkeleton, { variant: "circle", height: "2rem" }), jsxs("div", { className: styles$m.skeletonRow, children: [jsx(CwSkeleton, { variant: "text", width: MASTER_TITLE_WIDTHS[rowIndex % MASTER_TITLE_WIDTHS.length] }), jsx(CwSkeleton, { variant: "text", width: MASTER_SUBTITLE_WIDTH })] })] }, `skeleton_${rowIndex}`)))
|
|
2761
|
+
: items.map((item) => (jsx("li", { "data-master-key": item.key, "data-selected": item.key === selectedKey, "data-disabled": item.disabled, onClick: () => onSelect?.(item.key), children: item.content }, item.key))) }), masterFooter && (jsx("footer", { children: masterFooter }))] }), resizable && (jsx("div", { className: styles$m.resizer, "data-resizing": isResizing, onMouseDown: handleMouseDown })), jsx("section", { className: styles$m.detail, children: loading ? (jsxs("div", { className: styles$m.detailSkeleton, "aria-hidden": "true", children: [jsx(CwSkeleton, { variant: "text", width: "14rem", height: "1.5em" }), jsx(CwSkeleton, { variant: "text", width: "22rem" }), jsx(CwSkeleton, { variant: "text", width: "18rem" }), jsx(CwSkeleton, { variant: "text", width: "20rem" })] })) : selectedKey && detailContent
|
|
2630
2762
|
? detailContent
|
|
2631
2763
|
: (jsx("div", { className: styles$m['detail-empty'], children: emptyDetail ?? 'Select an item to view details' })) })] }));
|
|
2632
2764
|
};
|
|
2633
2765
|
|
|
2766
|
+
/*
|
|
2767
|
+
* Fixed rem widths (not percentages): dt and dd size to their content in the list
|
|
2768
|
+
* item, so a percentage-width skeleton would resolve to 100% of ~0 and collapse to
|
|
2769
|
+
* nothing. Fixed widths are visible in both row (dt beside dd) and column (dt above
|
|
2770
|
+
* dd) item layouts. Cycled by row so keys and values do not all look identical.
|
|
2771
|
+
*/
|
|
2772
|
+
const SKELETON_KEY_WIDTHS = ["5rem", "6.5rem", "4.5rem", "6rem"];
|
|
2773
|
+
const SKELETON_VALUE_WIDTHS = ["8rem", "6rem", "9rem", "7rem"];
|
|
2634
2774
|
/**
|
|
2635
2775
|
* A component for displaying key-value pairs in a definition list format
|
|
2636
2776
|
* Used for read-only display of structured data
|
|
@@ -2644,13 +2784,20 @@ const CwMasterDetail = ({ id, className, style, items, selectedKey, onSelect, de
|
|
|
2644
2784
|
* emptyValue="N/A"
|
|
2645
2785
|
* />
|
|
2646
2786
|
*/
|
|
2647
|
-
const CwKeyValueList = ({ items, className = "", emptyValue = "-", direction = "row", groupLayout, itemLayout, ...htmlProps }) => {
|
|
2787
|
+
const CwKeyValueList = ({ items, className = "", emptyValue = "-", direction = "row", loading = false, skeletonRows = 4, groupLayout, itemLayout, ...htmlProps }) => {
|
|
2648
2788
|
const itemDirection = itemLayout?.direction ?? direction;
|
|
2649
|
-
|
|
2789
|
+
const renderItems = () => {
|
|
2790
|
+
if (loading) {
|
|
2791
|
+
// The whole list comes from one data load, so both key and value ghost.
|
|
2792
|
+
return Array.from({ length: skeletonRows }, (_unused, rowIndex) => (jsxs("div", { className: `cw-keyvalue-list-item cw-flex-${itemDirection}`, "data-align": itemLayout?.align, "data-justify": itemLayout?.justify, "data-gap": itemLayout?.gap, "aria-hidden": "true", children: [jsx("dt", { children: jsx(CwSkeleton, { variant: "text", width: SKELETON_KEY_WIDTHS[rowIndex % SKELETON_KEY_WIDTHS.length] }) }), jsx("dd", { children: jsx(CwSkeleton, { variant: "text", width: SKELETON_VALUE_WIDTHS[rowIndex % SKELETON_VALUE_WIDTHS.length] }) })] }, `skeleton_${rowIndex}`)));
|
|
2793
|
+
}
|
|
2794
|
+
return items.map(item => (jsxs("div", { className: `cw-keyvalue-list-item cw-flex-${itemDirection}`, "data-align": itemLayout?.align, "data-justify": itemLayout?.justify, "data-gap": itemLayout?.gap, children: [jsx("dt", { children: item.label }), jsx("dd", { children: item.value !== undefined && item.value !== null && item.value !== ""
|
|
2650
2795
|
? (React__default.isValidElement(item.value)
|
|
2651
2796
|
? item.value
|
|
2652
2797
|
: `${item.value}${item.suffix ? ` ${item.suffix}` : ''}`)
|
|
2653
|
-
: emptyValue })] }, item.key)))
|
|
2798
|
+
: emptyValue })] }, item.key)));
|
|
2799
|
+
};
|
|
2800
|
+
return (jsx("dl", { className: `cw-keyvalue-list ${className}`, "data-direction": groupLayout?.direction, "data-align": groupLayout?.align, "data-justify": groupLayout?.justify, "data-gap": groupLayout?.gap, "aria-busy": loading || undefined, ...htmlProps, children: renderItems() }));
|
|
2654
2801
|
};
|
|
2655
2802
|
|
|
2656
2803
|
var styles$l = {"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"};
|
|
@@ -5115,8 +5262,8 @@ function CwNavMenu({ items, loading = false, isActive, renderLink = defaultRende
|
|
|
5115
5262
|
}
|
|
5116
5263
|
return (jsx("li", { "data-active": isActive?.(item) ? "true" : undefined, children: renderLink(item, jsxs(Fragment, { children: [item.icon && jsx(CwIcon, { iconId: item.icon, size: "medium" }), item.label, isFavorite?.(item) && jsx(CwIcon, { iconId: "star", size: "small", className: styles$8.favoriteStar })] })) }, item.id));
|
|
5117
5264
|
};
|
|
5118
|
-
return (jsxs("nav", { ...navProps, className: [styles$8.menu, className].filter(Boolean).join(" "), children: [favoritesSlot && (jsxs("details", { open: true, ...favoritesProps, className: [styles$8.favorites, favoritesProps?.className].filter(Boolean).join(" "), children: [jsxs("summary", { children: [jsx(CwIcon, { iconId: "star", size: "medium" }), favoritesLabel] }), jsx("div", { className: styles$8.favoritesContent, children: favoritesSlot })] })), beforeTreeSlot, jsx("ul", { children: loading
|
|
5119
|
-
? Array.from({ length: SKELETON_ROW_COUNT }, (_unused, index) => (jsx("li", { className: styles$8.skeleton }, index)))
|
|
5265
|
+
return (jsxs("nav", { ...navProps, className: [styles$8.menu, className].filter(Boolean).join(" "), "aria-busy": loading || undefined, children: [favoritesSlot && (jsxs("details", { open: true, ...favoritesProps, className: [styles$8.favorites, favoritesProps?.className].filter(Boolean).join(" "), children: [jsxs("summary", { children: [jsx(CwIcon, { iconId: "star", size: "medium" }), favoritesLabel] }), jsx("div", { className: styles$8.favoritesContent, children: favoritesSlot })] })), beforeTreeSlot, jsx("ul", { children: loading
|
|
5266
|
+
? Array.from({ length: SKELETON_ROW_COUNT }, (_unused, index) => (jsx("li", { className: styles$8.skeleton, children: jsx(CwSkeleton, { height: "var(--cw-size-small)", radius: "var(--cw-border-radius-small)" }) }, index)))
|
|
5120
5267
|
: visibleItems.map(item => renderItem(item, 1)) }), showEmptyMessage && jsx("p", { className: styles$8.emptyMessage, children: emptyMessage })] }));
|
|
5121
5268
|
}
|
|
5122
5269
|
|
|
@@ -11441,4 +11588,4 @@ const CwFindCrewmember = ({ handleChange, placeHolder = "Search crew…", requir
|
|
|
11441
11588
|
}, "data-direction": direction, children: [jsxs(CwAlign, { ...alignProps, itemProp: required ? "required" : "", children: [labelProps && (jsx(CwLabel, { ...labelProps, children: labelProps.text })), jsxs("div", { className: "cw-search-input-wrapper", ref: wrapperRef, children: [jsx("input", { ref: inputRef, type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onFocus: handleInputFocus, placeholder: isInitialLoading ? "Loading…" : placeHolder, disabled: disabled, required: required, autoComplete: "off", "aria-expanded": showDropdown, "aria-haspopup": "listbox", role: "combobox", title: tooltipText }), (isLoading || isInitialLoading) && (jsx("div", { className: "cw-search-input-loading", children: jsx(CwIcon, { iconId: "spinner" }) })), jsx("div", { className: "cw-search-input-icons", children: inputValue && !disabled && !isInitialLoading ? (jsx(CwButton, { type: "button", onClick: handleClear, "aria-label": "Clear selected crewmember", variant: "icon", icon: "close", color: "neutral" })) : (jsx(CwIcon, { iconId: "person" })) })] })] }), renderPanel(jsx("div", { ref: panelRef, className: dropdownStyles.dropdown, style: panelStyle, role: "listbox", children: jsx("ul", { children: options.map((option, index) => (jsx("li", { className: `${dropdownStyles.option}${index === highlightedIndex ? ` ${dropdownStyles.optionFocused}` : ""}`, onClick: () => handleOptionSelect(option.value), onMouseDown: (e) => e.preventDefault(), onMouseEnter: () => setHighlightedIndex(index), role: "option", "aria-selected": index === highlightedIndex, children: option.text }, option.value))) }) }))] }));
|
|
11442
11589
|
};
|
|
11443
11590
|
|
|
11444
|
-
export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwAnchoredMenu, CwBtnApprove, CwBtnCancel, CwBtnDelete, CwBtnEdit, CwBtnSave, CwButton, CwButtonSplit, CwButtonSwitch, CwCard, CwCardList, CwCheck, CwCheckbox, CwCheckboxGroup, CwChip, CwColorPicker, CwConfirmationPopup, CwContextMenu, CwDatePicker, CwDatePickerTemporal, CwDateRangePicker, CwDateRangePickerTemporal, CwDateTimePicker, CwDateTimePickerCompact, CwDateTimePickerTemporal, CwDialog, CwDigit, CwDisplayMessage, CwDropdown, CwDropdownFilter, CwExpandable, CwFileUploadMultiple, CwFindAirport, CwFindCrewmember, CwGenericTooltip, CwHeadingMain, CwHeadingSecond, CwIcon, CwImageArea, CwImageGallery, CwImageZoom, CwInput, CwInputColor, CwInputDateText, CwInputDatetime, CwInputImage, CwInputNumber, CwInputPhone, CwInputText, CwKeyValueList, CwLabel, CwLoading, CwMasterDetail, CwMessage, CwMessageManager, CwMessageType, CwModal, CwModalHover, CwModalReportFunctional, CwMultiFilter, CwMultiFilterTag, CwNavMenu, CwNote, CwOption, CwPopoverButton, CwRadioGroup, CwReportModal, CwScheduler, CwSearchAsync, CwSearchInput, CwSelect, CwSelectList, CwSelectListItems, CwSortableList, CwSortableTable, CwSuperScheduler, CwTable, CwTableGrouped, CwTableServerSide, CwTabs, CwTagSelector, CwTextArea, CwTime, CwTimePicker, CwToggle, CwTooltipManager, CwTooltipNew, CwTreeView, CwWeekdaySelector, DefaultRowHeader, OnClearPinned, OnClickContextMenu, OnClickEvent, OnClickRowEvent, OnClickRowHeader, OnClickUtc, OnDoubleClickEvent, OnDoubleClickRowEvent, OnDragEvent, OnDropCtrlEvent, OnDropEvent, OnEndClickHeaderEvent, OnLeftDragStart, OnMultiClickEvent, OnPinRow, OnRangeClickEvent, OnRightClickEvent, OnRightClickRow, OnRightDragStart, OnStartClickHeaderEvent, OnUnpinRow, PRESET_LIBRARY_TEMPORAL, PinRowHeader, Resource, Scheduler, SchedulerEvent, SuperScheduler, TooltipConstraintContext, UiEvent, Weekdays, cblEvent, configureCwLoading, eventIsVisible, filterNavItems, filterVisibleEvents, getCwLoadingDefaults, getDefaultDivisions, getEventSizes, getPresetsByKeysTemporal, itemsToMultiFilterTags, sortNavItems, useCwMessage, useSortableList, useSortableTable, useTooltipConstraint };
|
|
11591
|
+
export { CblDragAndDrop, CwAccordionContainer, CwAlign, CwAnchoredMenu, CwBtnApprove, CwBtnCancel, CwBtnDelete, CwBtnEdit, CwBtnSave, CwButton, CwButtonSplit, CwButtonSwitch, CwCard, CwCardList, CwCheck, CwCheckbox, CwCheckboxGroup, CwChip, CwColorPicker, CwConfirmationPopup, CwContextMenu, CwDatePicker, CwDatePickerTemporal, CwDateRangePicker, CwDateRangePickerTemporal, CwDateTimePicker, CwDateTimePickerCompact, CwDateTimePickerTemporal, CwDialog, CwDigit, CwDisplayMessage, CwDropdown, CwDropdownFilter, CwExpandable, CwFileUploadMultiple, CwFindAirport, CwFindCrewmember, CwGenericTooltip, CwHeadingMain, CwHeadingSecond, CwIcon, CwImageArea, CwImageGallery, CwImageZoom, CwInput, CwInputColor, CwInputDateText, CwInputDatetime, CwInputImage, CwInputNumber, CwInputPhone, CwInputText, CwKeyValueList, CwLabel, CwLoading, CwMasterDetail, CwMessage, CwMessageManager, CwMessageType, CwModal, CwModalHover, CwModalReportFunctional, CwMultiFilter, CwMultiFilterTag, CwNavMenu, CwNote, CwOption, CwPopoverButton, CwProgress, CwRadioGroup, CwReportModal, CwScheduler, CwSearchAsync, CwSearchInput, CwSelect, CwSelectList, CwSelectListItems, CwSkeleton, CwSortableList, CwSortableTable, CwSuperScheduler, CwTable, CwTableGrouped, CwTableServerSide, CwTabs, CwTagSelector, CwTextArea, CwTime, CwTimePicker, CwToggle, CwTooltipManager, CwTooltipNew, CwTreeView, CwWeekdaySelector, DefaultRowHeader, OnClearPinned, OnClickContextMenu, OnClickEvent, OnClickRowEvent, OnClickRowHeader, OnClickUtc, OnDoubleClickEvent, OnDoubleClickRowEvent, OnDragEvent, OnDropCtrlEvent, OnDropEvent, OnEndClickHeaderEvent, OnLeftDragStart, OnMultiClickEvent, OnPinRow, OnRangeClickEvent, OnRightClickEvent, OnRightClickRow, OnRightDragStart, OnStartClickHeaderEvent, OnUnpinRow, PRESET_LIBRARY_TEMPORAL, PinRowHeader, Resource, Scheduler, SchedulerEvent, SuperScheduler, TooltipConstraintContext, UiEvent, Weekdays, cblEvent, configureCwLoading, eventIsVisible, filterNavItems, filterVisibleEvents, getCwLoadingDefaults, getDefaultDivisions, getEventSizes, getPresetsByKeysTemporal, itemsToMultiFilterTags, sortNavItems, useCwMessage, useSortableList, useSortableTable, useTooltipConstraint };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../playground/main.tsx"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,CAAC;AAG3B,OAAO,oCAAoC,CAAA;AAI3C,eAAO,MAAM,GAAG,+CAWf,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type CwButtonProps } from "./CwButton";
|
|
3
|
+
export interface CwPopoverButtonProps extends Omit<CwButtonProps, "onClick" | "children"> {
|
|
4
|
+
/** Content rendered inside the floating panel */
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Panel width — CSS value (e.g. "auto", "16rem"). @default "auto" */
|
|
7
|
+
panelWidth?: string;
|
|
8
|
+
/** Horizontal alignment relative to the button. @default "bottom-start" */
|
|
9
|
+
placement?: "bottom-start" | "bottom-end";
|
|
10
|
+
/** Additional CSS class for the panel */
|
|
11
|
+
panelClassName?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Button that toggles a floating panel with arbitrary children.
|
|
15
|
+
* Closes on click-outside or Escape.
|
|
16
|
+
*
|
|
17
|
+
* Designed as a composable primitive:
|
|
18
|
+
* - Column picker: put `<CwCheckboxGroup>` inside
|
|
19
|
+
* - Options menu: put toggles / links inside
|
|
20
|
+
* - Future CwTable integration: use internally for column visibility
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* <CwPopoverButton text="Columns" icon="table" variant="outline">
|
|
24
|
+
* <CwCheckboxGroup options={opts} value={val} onChange={setVal} />
|
|
25
|
+
* </CwPopoverButton>
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* <CwPopoverButton text="Options" icon="options" variant="outline" placement="bottom-end">
|
|
29
|
+
* <CwToggle labelText="Show assigned" checked={v} onChange={setV} />
|
|
30
|
+
* </CwPopoverButton>
|
|
31
|
+
*/
|
|
32
|
+
export declare function CwPopoverButton({ children, panelWidth, placement, panelClassName, ...buttonProps }: CwPopoverButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=CwPopoverButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CwPopoverButton.d.ts","sourceRoot":"","sources":["../../../../../../src/components/control/action/button/CwPopoverButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAG1D,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,UAAU,CAAC;IACxF,iDAAiD;IACjD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,cAAc,GAAG,YAAY,CAAC;IAC1C,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,EAC/B,QAAQ,EACR,UAAmB,EACnB,SAA0B,EAC1B,cAAc,EACd,GAAG,WAAW,EACd,EAAE,oBAAoB,2CA0CtB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface CwContextualMenuProps {
|
|
3
|
+
children?: any;
|
|
4
|
+
handleContextMenu?: any;
|
|
5
|
+
onClick?: any;
|
|
6
|
+
dataSourceContextMenu?: Array<CwDataItemsListProps>;
|
|
7
|
+
dataSourceContextMenu_schd?: Array<CwDataItemsListSchdProps>;
|
|
8
|
+
}
|
|
9
|
+
export interface CwDataItemsListProps {
|
|
10
|
+
idDataItem?: string | number | any;
|
|
11
|
+
dataItemContent?: string | any;
|
|
12
|
+
style?: React.CSSProperties;
|
|
13
|
+
styleDataItem?: React.CSSProperties;
|
|
14
|
+
}
|
|
15
|
+
export interface CwDataItemsListSchdProps {
|
|
16
|
+
key?: string;
|
|
17
|
+
text?: string;
|
|
18
|
+
icon?: string;
|
|
19
|
+
color?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface CwBoxItemsProps {
|
|
22
|
+
id?: any;
|
|
23
|
+
children?: any;
|
|
24
|
+
style?: React.CSSProperties;
|
|
25
|
+
styleDataItem?: React.CSSProperties;
|
|
26
|
+
}
|
|
27
|
+
export declare function CwDataItem(cwBoxItemsProps: React.PropsWithChildren<CwBoxItemsProps>): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function CwContextualMenu(CwelltRightClickProps: React.PropsWithChildren<CwContextualMenuProps>): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=CwContextualMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CwContextualMenu.d.ts","sourceRoot":"","sources":["../../../../../../src/components/control/action/contextual-menu/CwContextualMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,qBAAqB,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpD,0BAA0B,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;CAC7D;AAGD,MAAM,WAAW,oBAAoB;IAEpC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAEnC,eAAe,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAE/B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACpC;AAGD,MAAM,WAAW,wBAAwB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACpC;AAED,wBAAgB,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,2CAQnF;AAED,wBAAgB,gBAAgB,CAAC,qBAAqB,EAAE,KAAK,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,2CAyFrG"}
|