@rio-cloud/rio-uikit 2.3.0-beta.1 → 2.3.0-beta.3
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/DayPicker.js +6 -2
- package/DayPicker.js.map +1 -1
- package/DayPickerCalendar.d.ts +2 -0
- package/DayPickerCalendar.js +5 -0
- package/DayPickerCalendar.js.map +1 -0
- package/DayPickerPrototype.d.ts +2 -0
- package/DayPickerPrototype.js +5 -0
- package/DayPickerPrototype.js.map +1 -0
- package/Marker.js +9 -5
- package/TableNext.d.ts +2 -0
- package/TableNext.js +23 -0
- package/TableNext.js.map +1 -0
- package/TableToolbar.js +3 -2
- package/TableToolbar.js.map +1 -1
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +38 -3
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +104 -109
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -1
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +24 -5
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +60 -56
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -1
- package/components/assetTree/Tree.js +13 -13
- package/components/charts/Area.d.ts +5 -3
- package/components/charts/Area.js +4 -3
- package/components/charts/Area.js.map +1 -1
- package/components/charts/AreaChart.js.map +1 -1
- package/components/charts/ComposedChart.js.map +1 -1
- package/components/clearableInput/ClearableInput.d.ts +30 -0
- package/components/clearableInput/ClearableInput.js +81 -78
- package/components/clearableInput/ClearableInput.js.map +1 -1
- package/components/datepicker/DayPicker.d.ts +4 -51
- package/components/datepicker/DayPicker.js +267 -257
- package/components/datepicker/DayPicker.js.map +1 -1
- package/components/datepicker/DayPickerCalendar.d.ts +4 -0
- package/components/datepicker/DayPickerCalendar.js +129 -0
- package/components/datepicker/DayPickerCalendar.js.map +1 -0
- package/components/datepicker/DayPickerDropdown.d.ts +19 -0
- package/components/datepicker/DayPickerDropdown.js +88 -0
- package/components/datepicker/DayPickerDropdown.js.map +1 -0
- package/components/datepicker/DayPickerDropdownFooter.d.ts +7 -0
- package/components/datepicker/DayPickerDropdownFooter.js +7 -0
- package/components/datepicker/DayPickerDropdownFooter.js.map +1 -0
- package/components/datepicker/DayPickerDropdownSidebar.d.ts +8 -0
- package/components/datepicker/DayPickerDropdownSidebar.js +7 -0
- package/components/datepicker/DayPickerDropdownSidebar.js.map +1 -0
- package/components/datepicker/DayPickerInput.d.ts +28 -0
- package/components/datepicker/DayPickerInput.js +65 -0
- package/components/datepicker/DayPickerInput.js.map +1 -0
- package/components/datepicker/DayPickerPrototype.d.ts +53 -0
- package/components/datepicker/DayPickerPrototype.js +285 -0
- package/components/datepicker/DayPickerPrototype.js.map +1 -0
- package/components/datepicker/dayPickerRangeSelectionUtils.d.ts +15 -0
- package/components/datepicker/dayPickerRangeSelectionUtils.js +31 -0
- package/components/datepicker/dayPickerRangeSelectionUtils.js.map +1 -0
- package/components/datepicker/dayPickerTypes.d.ts +517 -0
- package/components/datepicker/dayPickerTypes.js +7 -0
- package/components/datepicker/dayPickerTypes.js.map +1 -0
- package/components/datepicker/dayPickerUtils.d.ts +10 -0
- package/components/datepicker/dayPickerUtils.js +92 -0
- package/components/datepicker/dayPickerUtils.js.map +1 -0
- package/components/datepicker/useDayPickerInputState.d.ts +32 -0
- package/components/datepicker/useDayPickerInputState.js +85 -0
- package/components/datepicker/useDayPickerInputState.js.map +1 -0
- package/components/datepicker/useStackedDayPickerCalendars.d.ts +5 -0
- package/components/datepicker/useStackedDayPickerCalendars.js +39 -0
- package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -0
- package/components/divider/Divider.js +6 -6
- package/components/dropdown/ButtonDropdown.d.ts +4 -0
- package/components/dropdown/ButtonDropdown.js +70 -68
- package/components/dropdown/ButtonDropdown.js.map +1 -1
- package/components/dropdown/DropdownToggleButton.d.ts +1 -0
- package/components/dropdown/DropdownToggleButton.js +17 -15
- package/components/dropdown/DropdownToggleButton.js.map +1 -1
- package/components/fade/FadeExpander.js +17 -20
- package/components/fade/FadeExpander.js.map +1 -1
- package/components/listMenu/ListMenu.d.ts +8 -0
- package/components/listMenu/ListMenu.js +74 -66
- package/components/listMenu/ListMenu.js.map +1 -1
- package/components/loadMore/LoadMoreProgress.js +6 -7
- package/components/map/components/Map.js +189 -157
- package/components/map/components/Map.js.map +1 -1
- package/components/map/components/MapContext.d.ts +1 -0
- package/components/map/components/MapContext.js +8 -7
- package/components/map/components/MapContext.js.map +1 -1
- package/components/map/components/features/Route.d.ts +65 -1
- package/components/map/components/features/Route.js +184 -98
- package/components/map/components/features/Route.js.map +1 -1
- package/components/map/components/features/basics/Marker.d.ts +21 -1
- package/components/map/components/features/basics/Marker.js +99 -40
- package/components/map/components/features/basics/Marker.js.map +1 -1
- package/components/map/components/features/basics/Polygon.d.ts +24 -1
- package/components/map/components/features/basics/Polygon.js +72 -19
- package/components/map/components/features/basics/Polygon.js.map +1 -1
- package/components/map/components/features/basics/Polyline.d.ts +29 -0
- package/components/map/components/features/basics/Polyline.js +69 -39
- package/components/map/components/features/basics/Polyline.js.map +1 -1
- package/components/map/components/features/layers/MarkerLayer.js +8 -8
- package/components/map/components/features/layers/MarkerLayer.js.map +1 -1
- package/components/map/components/features/layers/clustering/SimpleClusterLayer.js +13 -6
- package/components/map/components/features/layers/clustering/SimpleClusterLayer.js.map +1 -1
- package/components/map/utils/clustering.d.ts +1 -1
- package/components/map/utils/clustering.js +30 -30
- package/components/map/utils/clustering.js.map +1 -1
- package/components/map/utils/mapTypes.d.ts +135 -0
- package/components/map/utils/mapTypes.js.map +1 -1
- package/components/map/utils/rendering.js +5 -5
- package/components/mapMarker/ClusterMapMarker.d.ts +2 -0
- package/components/mapMarker/ClusterMapMarker.js.map +1 -1
- package/components/mapMarker/SingleMapMarker.d.ts +2 -0
- package/components/mapMarker/SingleMapMarker.js.map +1 -1
- package/components/popover/Popover.js +4 -4
- package/components/radiobutton/RadioCardGroup.js +3 -3
- package/components/rioglyph/RioglyphIconType.d.ts +1 -1
- package/components/selects/ClearButton.js +9 -7
- package/components/selects/ClearButton.js.map +1 -1
- package/components/selects/Multiselect.d.ts +6 -0
- package/components/selects/Multiselect.js +164 -150
- package/components/selects/Multiselect.js.map +1 -1
- package/components/selects/Select.js +39 -37
- package/components/selects/Select.js.map +1 -1
- package/components/table/Table.d.ts +27 -248
- package/components/table/Table.js +240 -214
- package/components/table/Table.js.map +1 -1
- package/components/table/Table.types.d.ts +302 -121
- package/components/table/TableBody.d.ts +65 -5
- package/components/table/TableBody.js +132 -2
- package/components/table/TableBody.js.map +1 -1
- package/components/table/TableCardsSorting.js +25 -32
- package/components/table/TableCardsSorting.js.map +1 -1
- package/components/table/TableColumn.d.ts +21 -6
- package/components/table/TableColumn.js +114 -2
- package/components/table/TableColumn.js.map +1 -1
- package/components/table/TableExpandedContentRow.d.ts +7 -7
- package/components/table/TableExpandedContentRow.js +107 -2
- package/components/table/TableExpandedContentRow.js.map +1 -1
- package/components/table/TableExpandedRow.d.ts +9 -4
- package/components/table/TableExpandedRow.js +147 -2
- package/components/table/TableExpandedRow.js.map +1 -1
- package/components/table/TableExpanderButton.js +13 -11
- package/components/table/TableExpanderButton.js.map +1 -1
- package/components/table/TableFooter.d.ts +10 -6
- package/components/table/TableFooter.js +49 -2
- package/components/table/TableFooter.js.map +1 -1
- package/components/table/TableGroupFooterRow.d.ts +7 -7
- package/components/table/TableGroupFooterRow.js +27 -2
- package/components/table/TableGroupFooterRow.js.map +1 -1
- package/components/table/TableGroupRow.d.ts +7 -7
- package/components/table/TableGroupRow.js +33 -2
- package/components/table/TableGroupRow.js.map +1 -1
- package/components/table/TableHeader.d.ts +26 -4
- package/components/table/TableHeader.js +117 -2
- package/components/table/TableHeader.js.map +1 -1
- package/components/table/TableHeaderColumn.d.ts +25 -9
- package/components/table/TableHeaderColumn.js +83 -2
- package/components/table/TableHeaderColumn.js.map +1 -1
- package/components/table/TableHeaderRow.d.ts +1 -1
- package/components/table/TableHeaderRow.js +11 -2
- package/components/table/TableHeaderRow.js.map +1 -1
- package/components/table/TableRow.d.ts +15 -4
- package/components/table/TableRow.js +109 -2
- package/components/table/TableRow.js.map +1 -1
- package/components/table/TableSpacerRow.d.ts +3 -2
- package/components/table/TableSpacerRow.js +26 -2
- package/components/table/TableSpacerRow.js.map +1 -1
- package/components/table/TableToolbar.d.ts +4 -23
- package/components/table/TableToolbar.js +39 -28
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableToolbarColumn.d.ts +31 -0
- package/components/table/TableToolbarColumn.js +33 -0
- package/components/table/TableToolbarColumn.js.map +1 -0
- package/components/table/TableViewToggles.d.ts +3 -3
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/table/context/TableInteractionContext.d.ts +26 -0
- package/components/table/context/TableInteractionContext.js +7 -0
- package/components/table/context/TableInteractionContext.js.map +1 -0
- package/components/table/context/TableLayoutContext.d.ts +26 -0
- package/components/table/context/TableLayoutContext.js +7 -0
- package/components/table/context/TableLayoutContext.js.map +1 -0
- package/components/table/context/TableRenderConfigContext.d.ts +27 -0
- package/components/table/context/TableRenderConfigContext.js +7 -0
- package/components/table/context/TableRenderConfigContext.js.map +1 -0
- package/components/table/context/TableRenderContext.d.ts +85 -0
- package/components/table/context/TableRenderContext.js +7 -0
- package/components/table/context/TableRenderContext.js.map +1 -0
- package/components/table/context/TableStructureContext.d.ts +31 -0
- package/components/table/context/TableStructureContext.js +17 -0
- package/components/table/context/TableStructureContext.js.map +1 -0
- package/components/table/layout/columnSizing.d.ts +2 -2
- package/components/table/layout/columnSizing.js.map +1 -1
- package/components/table/layout/useDraggableColumns.d.ts +3 -3
- package/components/table/layout/useDraggableColumns.js +17 -17
- package/components/table/layout/useDraggableColumns.js.map +1 -1
- package/components/table/layout/useHorizontalSectionSync.d.ts +4 -1
- package/components/table/layout/useHorizontalSectionSync.js +36 -31
- package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
- package/components/table/layout/useMeasuredColumnMaxWidths.d.ts +3 -3
- package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
- package/components/table/layout/useResizableColumns.d.ts +5 -4
- package/components/table/layout/useResizableColumns.js +108 -67
- package/components/table/layout/useResizableColumns.js.map +1 -1
- package/components/table/layout/useTableBodyScrollBottom.d.ts +12 -0
- package/components/table/layout/useTableBodyScrollBottom.js +37 -0
- package/components/table/layout/useTableBodyScrollBottom.js.map +1 -0
- package/components/table/layout/useTableLayout.d.ts +18 -6
- package/components/table/layout/useTableLayout.js +51 -41
- package/components/table/layout/useTableLayout.js.map +1 -1
- package/components/table/layout/useTableVirtualization.d.ts +6 -6
- package/components/table/layout/useTableVirtualization.js +22 -22
- package/components/table/layout/useTableVirtualization.js.map +1 -1
- package/components/table/model/resolveRowMeta.d.ts +3 -2
- package/components/table/model/resolveRowMeta.js.map +1 -1
- package/components/table/model/resolveTableClassConfig.d.ts +2 -3
- package/components/table/model/resolveTableClassConfig.js.map +1 -1
- package/components/table/model/tableView.types.d.ts +41 -0
- package/components/table/native/TableSettingsListItem.js +1 -1
- package/components/table/native/TableSettingsListItem.js.map +1 -1
- package/components/table/render/body/TableBodyContent.d.ts +21 -0
- package/components/table/render/body/TableBodyContent.js +52 -0
- package/components/table/render/body/TableBodyContent.js.map +1 -0
- package/components/table/render/body/TableEmptyRow.js +2 -2
- package/components/table/render/body/TableEmptyRow.js.map +1 -1
- package/components/table/render/header/TableBatchDropdown.d.ts +5 -1
- package/components/table/render/header/TableBatchDropdown.js +17 -15
- package/components/table/render/header/TableBatchDropdown.js.map +1 -1
- package/components/table/render/header/TableColumnFilter.d.ts +2 -2
- package/components/table/render/header/TableColumnFilter.js +16 -14
- package/components/table/render/header/TableColumnFilter.js.map +1 -1
- package/components/table/render/header/TableDraggableHeaderCell.d.ts +2 -1
- package/components/table/render/header/TableDraggableHeaderCell.js +45 -33
- package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
- package/components/table/render/header/TableHeader.types.d.ts +13 -9
- package/components/table/render/header/TableHeaderCellContent.d.ts +2 -1
- package/components/table/render/header/TableHeaderCellContent.js +16 -16
- package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
- package/components/table/render/header/TableHeaderCellResizeHandle.d.ts +2 -1
- package/components/table/render/header/TableHeaderCellResizeHandle.js +8 -8
- package/components/table/render/header/TableHeaderCellResizeHandle.js.map +1 -1
- package/components/table/render/header/TableHeaderDragOverlay.d.ts +5 -4
- package/components/table/render/header/TableHeaderDragOverlay.js.map +1 -1
- package/components/table/render/header/TableStaticHeaderCell.d.ts +2 -1
- package/components/table/render/header/TableStaticHeaderCell.js +34 -20
- package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
- package/components/table/render/header/resolveAriaSort.d.ts +2 -1
- package/components/table/render/header/resolveAriaSort.js.map +1 -1
- package/components/table/render/header/resolveHeaderCellClassName.d.ts +5 -2
- package/components/table/render/header/resolveHeaderCellClassName.js +14 -12
- package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
- package/components/table/render/header/resolveHeaderCellStyle.d.ts +2 -1
- package/components/table/render/header/resolveHeaderCellStyle.js.map +1 -1
- package/components/table/runtime/shouldAnimateBodyRows.d.ts +17 -0
- package/components/table/runtime/shouldAnimateBodyRows.js +5 -0
- package/components/table/runtime/shouldAnimateBodyRows.js.map +1 -0
- package/components/table/runtime/useRenderDraftState.d.ts +14 -0
- package/components/table/runtime/useRenderDraftState.js +80 -0
- package/components/table/runtime/useRenderDraftState.js.map +1 -0
- package/components/table/runtime/useResolvedRenderColumns.d.ts +43 -0
- package/components/table/runtime/useResolvedRenderColumns.js +113 -0
- package/components/table/runtime/useResolvedRenderColumns.js.map +1 -0
- package/components/table/runtime/useResolvedRenderHeader.d.ts +27 -0
- package/components/table/runtime/useResolvedRenderHeader.js +67 -0
- package/components/table/runtime/useResolvedRenderHeader.js.map +1 -0
- package/components/table/selection/useInternalTableSelectionState.d.ts +17 -0
- package/components/table/selection/useInternalTableSelectionState.js +28 -0
- package/components/table/selection/useInternalTableSelectionState.js.map +1 -0
- package/components/table/selection/useTableSelection.d.ts +3 -3
- package/components/table/selection/useTableSelection.js.map +1 -1
- package/components/table/shared/getCellContentOverflowClassName.d.ts +3 -0
- package/components/table/shared/getCellContentOverflowClassName.js +18 -0
- package/components/table/shared/getCellContentOverflowClassName.js.map +1 -0
- package/components/table/shared/getInteractiveRowProps.d.ts +3 -2
- package/components/table/shared/getInteractiveRowProps.js.map +1 -1
- package/hooks/useDraggableElement.d.ts +27 -5
- package/hooks/useDraggableElement.js +100 -23
- package/hooks/useDraggableElement.js.map +1 -1
- package/hooks/usePopperDropdown.d.ts +1 -0
- package/hooks/usePopperDropdown.js +15 -12
- package/hooks/usePopperDropdown.js.map +1 -1
- package/hooks/useUrlState.js +3 -3
- package/package.json +16 -17
- package/utils/analytics/createAnalyticsOverlayTooltip.js +57 -57
- package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
- package/utils/analytics/useAnalyticsOverlayDom.js +3 -3
- package/utils/init/initConfig.js +5 -5
- package/utils/init/initConfig.js.map +1 -1
- package/utils/routeUtils.d.ts +5 -2
- package/utils/routeUtils.js +17 -17
- package/utils/routeUtils.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
- package/components/table/TableCard.d.ts +0 -63
- package/components/table/TableCard.js +0 -150
- package/components/table/TableCard.js.map +0 -1
- package/components/table/model/buildTableViewModel.d.ts +0 -28
- package/components/table/model/buildTableViewModel.js +0 -221
- package/components/table/model/buildTableViewModel.js.map +0 -1
- package/components/table/model/resolveCellContent.d.ts +0 -2
- package/components/table/model/resolveCellContent.js +0 -5
- package/components/table/model/resolveCellContent.js.map +0 -1
- package/components/table/model/tableViewModel.types.d.ts +0 -153
- package/components/table/parse/parseBody.d.ts +0 -3
- package/components/table/parse/parseBody.js +0 -13
- package/components/table/parse/parseBody.js.map +0 -1
- package/components/table/parse/parseColumns.d.ts +0 -3
- package/components/table/parse/parseColumns.js +0 -81
- package/components/table/parse/parseColumns.js.map +0 -1
- package/components/table/parse/parseFooter.d.ts +0 -3
- package/components/table/parse/parseFooter.js +0 -39
- package/components/table/parse/parseFooter.js.map +0 -1
- package/components/table/parse/parseHeaders.d.ts +0 -4
- package/components/table/parse/parseHeaders.js +0 -89
- package/components/table/parse/parseHeaders.js.map +0 -1
- package/components/table/parse/parseRows.d.ts +0 -3
- package/components/table/parse/parseRows.js +0 -93
- package/components/table/parse/parseRows.js.map +0 -1
- package/components/table/parse/tableChildGuards.d.ts +0 -25
- package/components/table/parse/tableChildGuards.js +0 -29
- package/components/table/parse/tableChildGuards.js.map +0 -1
- package/components/table/render/body/TableBodyRow.d.ts +0 -16
- package/components/table/render/body/TableBodyRow.js +0 -84
- package/components/table/render/body/TableBodyRow.js.map +0 -1
- package/components/table/render/body/TableBodySection.d.ts +0 -20
- package/components/table/render/body/TableBodySection.js +0 -68
- package/components/table/render/body/TableBodySection.js.map +0 -1
- package/components/table/render/body/TableDataRow.d.ts +0 -15
- package/components/table/render/body/TableDataRow.js +0 -143
- package/components/table/render/body/TableDataRow.js.map +0 -1
- package/components/table/render/body/TableExpandedRow.d.ts +0 -8
- package/components/table/render/body/TableExpandedRow.js +0 -84
- package/components/table/render/body/TableExpandedRow.js.map +0 -1
- package/components/table/render/body/TableGroupRow.d.ts +0 -8
- package/components/table/render/body/TableGroupRow.js +0 -21
- package/components/table/render/body/TableGroupRow.js.map +0 -1
- package/components/table/render/body/TableSpacerRow.d.ts +0 -7
- package/components/table/render/body/TableSpacerRow.js +0 -15
- package/components/table/render/body/TableSpacerRow.js.map +0 -1
- package/components/table/render/footer/TableFooterCell.d.ts +0 -8
- package/components/table/render/footer/TableFooterCell.js +0 -31
- package/components/table/render/footer/TableFooterCell.js.map +0 -1
- package/components/table/render/footer/TableFooterSection.d.ts +0 -10
- package/components/table/render/footer/TableFooterSection.js +0 -28
- package/components/table/render/footer/TableFooterSection.js.map +0 -1
- package/components/table/render/header/TableHeaderSection.d.ts +0 -3
- package/components/table/render/header/TableHeaderSection.js +0 -104
- package/components/table/render/header/TableHeaderSection.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rio-cloud/rio-uikit",
|
|
3
|
-
"version": "2.3.0-beta.
|
|
3
|
+
"version": "2.3.0-beta.3",
|
|
4
4
|
"description": "The RIO UIKIT component library",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@biomejs/biome": "2.4.
|
|
49
|
+
"@biomejs/biome": "2.4.8",
|
|
50
50
|
"@rio-cloud/biome-config": "1.2.0",
|
|
51
|
-
"@rio-cloud/vite-plugin-frontend-license-check": "
|
|
51
|
+
"@rio-cloud/vite-plugin-frontend-license-check": "3.0.0",
|
|
52
52
|
"@testing-library/dom": "10.4.1",
|
|
53
53
|
"@testing-library/jest-dom": "6.9.1",
|
|
54
54
|
"@testing-library/react": "16.3.2",
|
|
@@ -60,16 +60,15 @@
|
|
|
60
60
|
"@types/react-redux": "7.1.34",
|
|
61
61
|
"@types/resize-observer-browser": "0.1.11",
|
|
62
62
|
"@vitejs/plugin-react": "5.1.4",
|
|
63
|
-
"@vitest/coverage-
|
|
64
|
-
"autoprefixer": "10.4.
|
|
63
|
+
"@vitest/coverage-v8": "^4.1.1",
|
|
64
|
+
"autoprefixer": "10.4.27",
|
|
65
65
|
"backstopjs": "6.3.25",
|
|
66
|
-
"copyfiles": "2.4.1",
|
|
67
66
|
"dotenv": "17.3.1",
|
|
68
|
-
"glob": "13.0.
|
|
69
|
-
"happy-dom": "20.
|
|
67
|
+
"glob": "13.0.6",
|
|
68
|
+
"happy-dom": "20.8.7",
|
|
70
69
|
"jsdom": "27.4.0",
|
|
71
70
|
"jsdom-global": "3.0.2",
|
|
72
|
-
"postcss": "8.5.
|
|
71
|
+
"postcss": "8.5.8",
|
|
73
72
|
"postcss-preset-env": "8.5.1",
|
|
74
73
|
"postcss-short": "5.0.0",
|
|
75
74
|
"pre-commit": "1.2.2",
|
|
@@ -77,9 +76,9 @@
|
|
|
77
76
|
"react-dom": "18.0.0",
|
|
78
77
|
"react-intl": "7.1.14",
|
|
79
78
|
"rollup-plugin-copy": "3.5.0",
|
|
80
|
-
"sass": "1.
|
|
81
|
-
"strip-ansi": "7.
|
|
82
|
-
"svgo": "4.0.
|
|
79
|
+
"sass": "1.98.0",
|
|
80
|
+
"strip-ansi": "7.2.0",
|
|
81
|
+
"svgo": "4.0.1",
|
|
83
82
|
"typescript": "5.9.3",
|
|
84
83
|
"vite": "7.3.1",
|
|
85
84
|
"vite-plugin-dts": "4.5.4",
|
|
@@ -98,14 +97,14 @@
|
|
|
98
97
|
"@dnd-kit/utilities": "3.2.2",
|
|
99
98
|
"@formkit/auto-animate": "0.9.0",
|
|
100
99
|
"@popperjs/core": "2.11.8",
|
|
101
|
-
"@tanstack/react-virtual": "3.13.
|
|
100
|
+
"@tanstack/react-virtual": "3.13.23",
|
|
102
101
|
"date-fns": "4.1.0",
|
|
103
102
|
"driver.js": "1.4.0",
|
|
104
|
-
"es-toolkit": "1.
|
|
103
|
+
"es-toolkit": "1.45.1",
|
|
105
104
|
"events": "3.3.0",
|
|
106
105
|
"iframe-resizer-react": "1.1.0",
|
|
107
106
|
"moment": "2.30.1",
|
|
108
|
-
"motion": "12.
|
|
107
|
+
"motion": "12.38.0",
|
|
109
108
|
"natural-orderby": "5.0.0",
|
|
110
109
|
"process": "0.11.10",
|
|
111
110
|
"prop-types": "15.8.1",
|
|
@@ -113,14 +112,14 @@
|
|
|
113
112
|
"react-content-loader": "7.1.2",
|
|
114
113
|
"react-custom-scrollbars-4": "4.5.1",
|
|
115
114
|
"react-datetime": "github:rio-cloud/react-datetime#v3.1.1-1-merged",
|
|
116
|
-
"react-day-picker": "9.
|
|
115
|
+
"react-day-picker": "9.14.0",
|
|
117
116
|
"react-dropzone": "14.3.8",
|
|
118
117
|
"react-imask": "7.6.1",
|
|
119
118
|
"react-notifications": "1.7.4",
|
|
120
119
|
"react-onclickoutside": "6.13.2",
|
|
121
120
|
"react-popper": "2.3.0",
|
|
122
121
|
"react-toastify": "11.0.5",
|
|
123
|
-
"recharts": "3.
|
|
122
|
+
"recharts": "3.8.0",
|
|
124
123
|
"tiny-invariant": "1.3.3",
|
|
125
124
|
"tslib": "2.8.1"
|
|
126
125
|
},
|
|
@@ -7,11 +7,11 @@ const k = [
|
|
|
7
7
|
], b = new Intl.NumberFormat("en-US", {
|
|
8
8
|
minimumFractionDigits: 0,
|
|
9
9
|
maximumFractionDigits: 2
|
|
10
|
-
}), L = (
|
|
11
|
-
const
|
|
12
|
-
return
|
|
13
|
-
}, u = (
|
|
14
|
-
const { iconClass:
|
|
10
|
+
}), L = (n, r) => {
|
|
11
|
+
const e = document.createElement("span");
|
|
12
|
+
return e.classList.add("rioglyph", n, r), e;
|
|
13
|
+
}, u = (n) => {
|
|
14
|
+
const { iconClass: r, text: e } = n, a = document.createElement("div");
|
|
15
15
|
a.classList.add(
|
|
16
16
|
"display-flex",
|
|
17
17
|
"align-items-center",
|
|
@@ -20,55 +20,55 @@ const k = [
|
|
|
20
20
|
"text-size-16",
|
|
21
21
|
"line-height-16",
|
|
22
22
|
"margin-bottom--3"
|
|
23
|
-
), a.appendChild(L(
|
|
24
|
-
const
|
|
25
|
-
return
|
|
23
|
+
), a.appendChild(L(r, "text-size-16"));
|
|
24
|
+
const i = document.createElement("span");
|
|
25
|
+
return i.textContent = e, a.appendChild(i), a;
|
|
26
26
|
}, C = () => {
|
|
27
|
-
const
|
|
28
|
-
return
|
|
29
|
-
}, o = (
|
|
30
|
-
const { iconClass:
|
|
31
|
-
|
|
27
|
+
const n = document.createElement("div");
|
|
28
|
+
return n.classList.add("rounded", "padding-10", "bg-decent", "display-flex", "flex-column", "gap-5", "shadow-accent"), n;
|
|
29
|
+
}, o = (n) => {
|
|
30
|
+
const { iconClass: r, label: e, right: a } = n, i = document.createElement("div");
|
|
31
|
+
i.classList.add("display-flex", "align-items-center", "gap-5");
|
|
32
32
|
const l = document.createElement("div");
|
|
33
33
|
l.classList.add("display-flex", "align-items-center", "gap-5", "min-width-80");
|
|
34
|
-
const p = L(
|
|
34
|
+
const p = L(r, "text-size-14");
|
|
35
35
|
l.appendChild(p);
|
|
36
36
|
const s = document.createElement("div");
|
|
37
|
-
s.classList.add("text-medium"), s.textContent =
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
37
|
+
s.classList.add("text-medium"), s.textContent = e, l.appendChild(s), i.appendChild(l);
|
|
38
|
+
const t = document.createElement("div");
|
|
39
|
+
if (t.classList.add("flex-1-1", "text-right"), typeof a == "string") {
|
|
40
40
|
const c = document.createElement("div");
|
|
41
|
-
c.classList.add("word-break-all", "text-bold"), c.textContent = a,
|
|
41
|
+
c.classList.add("word-break-all", "text-bold"), c.textContent = a, t.appendChild(c);
|
|
42
42
|
} else
|
|
43
|
-
|
|
44
|
-
return
|
|
45
|
-
}, f = (
|
|
43
|
+
t.appendChild(a);
|
|
44
|
+
return i.appendChild(t), i;
|
|
45
|
+
}, f = (n) => n === null ? "n/a" : `${b.format(n)}%`, N = () => typeof window < "u" && /^https?:/i.test(window.location.href) ? window.location.href : "https://rio.cloud", O = (n, r = N()) => {
|
|
46
46
|
try {
|
|
47
|
-
const
|
|
48
|
-
return k.forEach(({ queryParam:
|
|
49
|
-
const l =
|
|
50
|
-
l && (a[
|
|
47
|
+
const e = new URL(n, r), a = {};
|
|
48
|
+
return k.forEach(({ queryParam: i }) => {
|
|
49
|
+
const l = e.searchParams.get(i)?.trim();
|
|
50
|
+
l && (a[i] = l);
|
|
51
51
|
}), Object.keys(a).length > 0 ? a : null;
|
|
52
52
|
} catch {
|
|
53
53
|
return null;
|
|
54
54
|
}
|
|
55
|
-
}, V = (
|
|
56
|
-
const
|
|
57
|
-
return
|
|
58
|
-
}, G = (
|
|
59
|
-
const { eventTrigger:
|
|
60
|
-
return a === null || a <= 0 ? null :
|
|
61
|
-
}, S = (
|
|
55
|
+
}, V = (n) => {
|
|
56
|
+
const r = n.closest("a[href]"), e = n.getAttribute("href")?.trim() ?? r?.href?.trim();
|
|
57
|
+
return e ? O(e) : null;
|
|
58
|
+
}, G = (n) => {
|
|
59
|
+
const { eventTrigger: r, totalEventCount: e, analyticsTotalUsers: a } = n;
|
|
60
|
+
return a === null || a <= 0 ? null : r === "click" || r === "visibility" ? e / a * 100 : null;
|
|
61
|
+
}, S = (n) => {
|
|
62
62
|
const {
|
|
63
|
-
overlayRoot:
|
|
64
|
-
trackingData:
|
|
63
|
+
overlayRoot: r,
|
|
64
|
+
trackingData: e,
|
|
65
65
|
totalEventCount: a,
|
|
66
|
-
totalUserCount:
|
|
66
|
+
totalUserCount: i,
|
|
67
67
|
analyticsTotalUsers: l,
|
|
68
68
|
clickEvent: p,
|
|
69
69
|
trackedElement: s
|
|
70
|
-
} =
|
|
71
|
-
|
|
70
|
+
} = n, t = document.createElement("div");
|
|
71
|
+
t.setAttribute("data-analytics-overlay-tooltip", "true"), t.classList.add(
|
|
72
72
|
"position-fixed",
|
|
73
73
|
"pointer-events-all",
|
|
74
74
|
"z-index-max",
|
|
@@ -85,21 +85,21 @@ const k = [
|
|
|
85
85
|
"gap-10",
|
|
86
86
|
"line-height-125rel"
|
|
87
87
|
);
|
|
88
|
-
const c =
|
|
89
|
-
eventTrigger:
|
|
88
|
+
const c = e.eventTrigger === "click" ? "Clicks" : "Views", A = e.eventTrigger === "click" ? "rioglyph-click" : "rioglyph-eye-open", R = e.eventTrigger === "click" ? "Click rate" : "View rate", U = i > 0 ? a / i * 100 : null, v = G({
|
|
89
|
+
eventTrigger: e.eventTrigger,
|
|
90
90
|
totalEventCount: a,
|
|
91
91
|
analyticsTotalUsers: l
|
|
92
|
-
}), _ = l !== null && l > 0 ?
|
|
92
|
+
}), _ = l !== null && l > 0 ? i / l * 100 : null, D = u({
|
|
93
93
|
iconClass: "rioglyph-user",
|
|
94
94
|
text: "Event users"
|
|
95
95
|
});
|
|
96
|
-
|
|
96
|
+
t.appendChild(D);
|
|
97
97
|
const g = C();
|
|
98
98
|
g.appendChild(
|
|
99
99
|
o({
|
|
100
100
|
iconClass: "rioglyph-user",
|
|
101
101
|
label: "Event users",
|
|
102
|
-
right: `${b.format(
|
|
102
|
+
right: `${b.format(i)}`
|
|
103
103
|
})
|
|
104
104
|
), l !== null && (g.appendChild(
|
|
105
105
|
o({
|
|
@@ -113,12 +113,12 @@ const k = [
|
|
|
113
113
|
label: "Event rate (all users)",
|
|
114
114
|
right: f(_)
|
|
115
115
|
})
|
|
116
|
-
)),
|
|
116
|
+
)), t.appendChild(g);
|
|
117
117
|
const F = u({
|
|
118
118
|
iconClass: "rioglyph-stats",
|
|
119
119
|
text: "Element performance"
|
|
120
120
|
});
|
|
121
|
-
|
|
121
|
+
t.appendChild(F);
|
|
122
122
|
const d = C();
|
|
123
123
|
d.appendChild(
|
|
124
124
|
o({
|
|
@@ -132,51 +132,51 @@ const k = [
|
|
|
132
132
|
label: R,
|
|
133
133
|
right: f(U)
|
|
134
134
|
})
|
|
135
|
-
),
|
|
135
|
+
), e.eventTrigger === "click" && l !== null && d.appendChild(
|
|
136
136
|
o({
|
|
137
137
|
iconClass: "rioglyph-bar-chart-box",
|
|
138
138
|
label: "Click rate (all users)",
|
|
139
139
|
right: f(v)
|
|
140
140
|
})
|
|
141
|
-
),
|
|
141
|
+
), e.eventTrigger === "visibility" && l !== null && d.appendChild(
|
|
142
142
|
o({
|
|
143
143
|
iconClass: "rioglyph-bar-chart-box",
|
|
144
144
|
label: "View rate (all users)",
|
|
145
145
|
right: f(v)
|
|
146
146
|
})
|
|
147
|
-
),
|
|
147
|
+
), t.appendChild(d);
|
|
148
148
|
const M = u({
|
|
149
149
|
iconClass: "rioglyph-info-sign",
|
|
150
150
|
text: "Tracking Attributes"
|
|
151
151
|
});
|
|
152
|
-
|
|
152
|
+
t.appendChild(M);
|
|
153
153
|
const h = C();
|
|
154
154
|
h.appendChild(
|
|
155
155
|
o({
|
|
156
156
|
iconClass: "rioglyph-cog",
|
|
157
157
|
label: "Action",
|
|
158
|
-
right:
|
|
158
|
+
right: e.eventAction
|
|
159
159
|
})
|
|
160
160
|
), h.appendChild(
|
|
161
161
|
o({
|
|
162
162
|
iconClass: "rioglyph-emergency-stop",
|
|
163
163
|
label: "Trigger",
|
|
164
|
-
right:
|
|
164
|
+
right: e.eventTrigger
|
|
165
165
|
})
|
|
166
166
|
), h.appendChild(
|
|
167
167
|
o({
|
|
168
168
|
iconClass: "rioglyph-tag",
|
|
169
169
|
label: "Label",
|
|
170
|
-
right:
|
|
170
|
+
right: e.eventLabel
|
|
171
171
|
})
|
|
172
|
-
),
|
|
172
|
+
), t.appendChild(h);
|
|
173
173
|
const w = V(s);
|
|
174
174
|
if (w) {
|
|
175
175
|
const $ = u({
|
|
176
176
|
iconClass: "rioglyph-megaphone",
|
|
177
177
|
text: "Campaign"
|
|
178
178
|
});
|
|
179
|
-
|
|
179
|
+
t.appendChild($);
|
|
180
180
|
const E = C();
|
|
181
181
|
k.forEach(({ queryParam: q, label: z }) => {
|
|
182
182
|
const P = w[q];
|
|
@@ -187,13 +187,13 @@ const k = [
|
|
|
187
187
|
right: P
|
|
188
188
|
})
|
|
189
189
|
);
|
|
190
|
-
}),
|
|
190
|
+
}), t.appendChild(E);
|
|
191
191
|
}
|
|
192
192
|
const T = 12, m = 8;
|
|
193
|
-
|
|
193
|
+
r.appendChild(t);
|
|
194
194
|
let x = p.clientX + T, y = p.clientY + T;
|
|
195
|
-
const H = window.innerWidth -
|
|
196
|
-
return x = Math.max(m, Math.min(x, H)), y = Math.max(m, Math.min(y, I)),
|
|
195
|
+
const H = window.innerWidth - t.offsetWidth - m, I = window.innerHeight - t.offsetHeight - m;
|
|
196
|
+
return x = Math.max(m, Math.min(x, H)), y = Math.max(m, Math.min(y, I)), t.style.left = `${x}px`, t.style.top = `${y}px`, t;
|
|
197
197
|
};
|
|
198
198
|
export {
|
|
199
199
|
S as createAnalyticsOverlayTooltip,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAnalyticsOverlayTooltip.js","sources":["../../../src/utils/analytics/createAnalyticsOverlayTooltip.ts"],"sourcesContent":["type AnalyticsOverlayTooltipTrackingData = {\n eventAction: string;\n eventLabel: string;\n eventTrigger: 'click' | 'visibility';\n};\n\nconst CAMPAIGN_QUERY_PARAM_CONFIG = [\n { queryParam: 'utm_source', label: 'Source' },\n { queryParam: 'utm_medium', label: 'Medium' },\n { queryParam: 'utm_campaign', label: 'Campaign' },\n { queryParam: 'utm_content', label: 'Content' },\n { queryParam: 'utm_term', label: 'Term' },\n] as const;\n\ntype CampaignQueryParam = (typeof CAMPAIGN_QUERY_PARAM_CONFIG)[number]['queryParam'];\ntype AnalyticsOverlayTooltipCampaignData = Partial<Record<CampaignQueryParam, string>>;\n\ntype CreateAnalyticsOverlayTooltipProps = {\n overlayRoot: HTMLElement;\n trackingData: AnalyticsOverlayTooltipTrackingData;\n totalEventCount: number;\n totalUserCount: number;\n analyticsTotalUsers: number | null;\n clickEvent: MouseEvent;\n trackedElement: HTMLElement;\n};\n\nconst numberFormatter = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n});\n\nconst createIcon = (iconClass: string, sizeClass: string) => {\n const icon = document.createElement('span');\n icon.classList.add('rioglyph', iconClass, sizeClass);\n return icon;\n};\n\nconst createTitle = (props: { iconClass: string; text: string }) => {\n const { iconClass, text } = props;\n const title = document.createElement('div');\n title.classList.add(\n 'display-flex',\n 'align-items-center',\n 'gap-5',\n 'text-medium',\n 'text-size-16',\n 'line-height-16',\n 'margin-bottom--3'\n );\n title.appendChild(createIcon(iconClass, 'text-size-16'));\n\n const titleText = document.createElement('span');\n titleText.textContent = text;\n title.appendChild(titleText);\n\n return title;\n};\n\nconst createPanel = () => {\n const panel = document.createElement('div');\n panel.classList.add('rounded', 'padding-10', 'bg-decent', 'display-flex', 'flex-column', 'gap-5', 'shadow-accent');\n return panel;\n};\n\nconst createInfoRow = (props: { iconClass: string; label: string; right: Node | string }) => {\n const { iconClass, label, right } = props;\n\n const row = document.createElement('div');\n row.classList.add('display-flex', 'align-items-center', 'gap-5');\n\n const leftContainer = document.createElement('div');\n leftContainer.classList.add('display-flex', 'align-items-center', 'gap-5', 'min-width-80');\n\n const icon = createIcon(iconClass, 'text-size-14');\n leftContainer.appendChild(icon);\n\n const labelNode = document.createElement('div');\n labelNode.classList.add('text-medium');\n labelNode.textContent = label;\n leftContainer.appendChild(labelNode);\n row.appendChild(leftContainer);\n\n const rightContainer = document.createElement('div');\n rightContainer.classList.add('flex-1-1', 'text-right');\n\n if (typeof right === 'string') {\n const rightText = document.createElement('div');\n rightText.classList.add('word-break-all', 'text-bold');\n rightText.textContent = right;\n rightContainer.appendChild(rightText);\n } else {\n rightContainer.appendChild(right);\n }\n\n row.appendChild(rightContainer);\n return row;\n};\n\nconst formatPercentage = (value: number | null) => (value === null ? 'n/a' : `${numberFormatter.format(value)}%`);\n\nconst getUrlParsingBaseHref = () => {\n if (typeof window !== 'undefined' && /^https?:/i.test(window.location.href)) {\n return window.location.href;\n }\n\n return 'https://rio.cloud';\n};\n\nexport const extractCampaignTrackingDataFromHref = (\n href: string,\n baseHref = getUrlParsingBaseHref()\n): AnalyticsOverlayTooltipCampaignData | null => {\n try {\n const url = new URL(href, baseHref);\n const campaignData: AnalyticsOverlayTooltipCampaignData = {};\n\n CAMPAIGN_QUERY_PARAM_CONFIG.forEach(({ queryParam }) => {\n const value = url.searchParams.get(queryParam)?.trim();\n if (value) {\n campaignData[queryParam] = value;\n }\n });\n\n return Object.keys(campaignData).length > 0 ? campaignData : null;\n } catch {\n return null;\n }\n};\n\nexport const extractCampaignTrackingDataFromElement = (trackedElement: HTMLElement) => {\n const href =\n trackedElement.getAttribute('href')?.trim() ?? trackedElement.closest<HTMLElement>('a[href]')?.href?.trim();\n\n if (!href) {\n return null;\n }\n\n return extractCampaignTrackingDataFromHref(href);\n};\n\nconst calculateAllUsersRatePercentage = (props: {\n eventTrigger: 'click' | 'visibility';\n totalEventCount: number;\n analyticsTotalUsers: number | null;\n}) => {\n const { eventTrigger, totalEventCount, analyticsTotalUsers } = props;\n\n if (analyticsTotalUsers === null || analyticsTotalUsers <= 0) {\n return null;\n }\n\n if (eventTrigger === 'click' || eventTrigger === 'visibility') {\n return (totalEventCount / analyticsTotalUsers) * 100;\n }\n\n return null;\n};\n\nexport const createAnalyticsOverlayTooltip = (props: CreateAnalyticsOverlayTooltipProps) => {\n const {\n overlayRoot,\n trackingData,\n totalEventCount,\n totalUserCount,\n analyticsTotalUsers,\n clickEvent,\n trackedElement,\n } = props;\n const tooltip = document.createElement('div');\n tooltip.setAttribute('data-analytics-overlay-tooltip', 'true');\n tooltip.classList.add(\n 'position-fixed',\n 'pointer-events-all',\n 'z-index-max',\n 'rounded',\n 'padding-15',\n 'shadow-focused',\n 'bg-secondary',\n 'text-color-white',\n 'max-width-350',\n 'width-100pct',\n 'word-break-all',\n 'display-flex',\n 'flex-column',\n 'gap-10',\n 'line-height-125rel'\n );\n\n const metricLabel = trackingData.eventTrigger === 'click' ? 'Clicks' : 'Views';\n const metricIconClass = trackingData.eventTrigger === 'click' ? 'rioglyph-click' : 'rioglyph-eye-open';\n const elementRateLabel = trackingData.eventTrigger === 'click' ? 'Click rate' : 'View rate';\n\n const elementRatePercentage = totalUserCount > 0 ? (totalEventCount / totalUserCount) * 100 : null;\n const allUsersRatePercentage = calculateAllUsersRatePercentage({\n eventTrigger: trackingData.eventTrigger,\n totalEventCount,\n analyticsTotalUsers,\n });\n const interactionRateAllUsersPercentage =\n analyticsTotalUsers !== null && analyticsTotalUsers > 0 ? (totalUserCount / analyticsTotalUsers) * 100 : null;\n\n const overallTitle = createTitle({\n iconClass: 'rioglyph-user',\n text: 'Event users',\n });\n tooltip.appendChild(overallTitle);\n\n const overallPanel = createPanel();\n overallPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-user',\n label: 'Event users',\n right: `${numberFormatter.format(totalUserCount)}`,\n })\n );\n if (analyticsTotalUsers !== null) {\n overallPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-user-group',\n label: 'Total users',\n right: `${numberFormatter.format(analyticsTotalUsers)}`,\n })\n );\n\n overallPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: 'Event rate (all users)',\n right: formatPercentage(interactionRateAllUsersPercentage),\n })\n );\n }\n tooltip.appendChild(overallPanel);\n\n const performanceTitle = createTitle({\n iconClass: 'rioglyph-stats',\n text: 'Element performance',\n });\n tooltip.appendChild(performanceTitle);\n\n const performancePanel = createPanel();\n performancePanel.appendChild(\n createInfoRow({\n iconClass: metricIconClass,\n label: metricLabel,\n right: `${numberFormatter.format(totalEventCount)}`,\n })\n );\n performancePanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: elementRateLabel,\n right: formatPercentage(elementRatePercentage),\n })\n );\n if (trackingData.eventTrigger === 'click' && analyticsTotalUsers !== null) {\n performancePanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: 'Click rate (all users)',\n right: formatPercentage(allUsersRatePercentage),\n })\n );\n }\n if (trackingData.eventTrigger === 'visibility' && analyticsTotalUsers !== null) {\n performancePanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: 'View rate (all users)',\n right: formatPercentage(allUsersRatePercentage),\n })\n );\n }\n tooltip.appendChild(performancePanel);\n\n const attributesHeader = createTitle({\n iconClass: 'rioglyph-info-sign',\n text: 'Tracking Attributes',\n });\n tooltip.appendChild(attributesHeader);\n\n const attributesPanel = createPanel();\n attributesPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-cog',\n label: 'Action',\n right: trackingData.eventAction,\n })\n );\n attributesPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-emergency-stop',\n label: 'Trigger',\n right: trackingData.eventTrigger,\n })\n );\n attributesPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-tag',\n label: 'Label',\n right: trackingData.eventLabel,\n })\n );\n tooltip.appendChild(attributesPanel);\n\n const campaignData = extractCampaignTrackingDataFromElement(trackedElement);\n if (campaignData) {\n const campaignHeader = createTitle({\n iconClass: 'rioglyph-megaphone',\n text: 'Campaign',\n });\n tooltip.appendChild(campaignHeader);\n\n const campaignPanel = createPanel();\n CAMPAIGN_QUERY_PARAM_CONFIG.forEach(({ queryParam, label }) => {\n const value = campaignData[queryParam];\n if (!value) {\n return;\n }\n\n campaignPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-tag',\n label,\n right: value,\n })\n );\n });\n\n tooltip.appendChild(campaignPanel);\n }\n\n const pointerOffset = 12;\n const viewportPadding = 8;\n overlayRoot.appendChild(tooltip);\n\n let left = clickEvent.clientX + pointerOffset;\n let top = clickEvent.clientY + pointerOffset;\n const maxLeft = window.innerWidth - tooltip.offsetWidth - viewportPadding;\n const maxTop = window.innerHeight - tooltip.offsetHeight - viewportPadding;\n left = Math.max(viewportPadding, Math.min(left, maxLeft));\n top = Math.max(viewportPadding, Math.min(top, maxTop));\n\n tooltip.style.left = `${left}px`;\n tooltip.style.top = `${top}px`;\n\n return tooltip;\n};\n\nexport type {\n AnalyticsOverlayTooltipCampaignData,\n AnalyticsOverlayTooltipTrackingData,\n CreateAnalyticsOverlayTooltipProps,\n};\n"],"names":["CAMPAIGN_QUERY_PARAM_CONFIG","numberFormatter","createIcon","iconClass","sizeClass","icon","createTitle","props","text","title","titleText","createPanel","panel","createInfoRow","label","right","row","leftContainer","labelNode","rightContainer","rightText","formatPercentage","value","getUrlParsingBaseHref","extractCampaignTrackingDataFromHref","href","baseHref","url","campaignData","queryParam","extractCampaignTrackingDataFromElement","trackedElement","calculateAllUsersRatePercentage","eventTrigger","totalEventCount","analyticsTotalUsers","createAnalyticsOverlayTooltip","overlayRoot","trackingData","totalUserCount","clickEvent","tooltip","metricLabel","metricIconClass","elementRateLabel","elementRatePercentage","allUsersRatePercentage","interactionRateAllUsersPercentage","overallTitle","overallPanel","performanceTitle","performancePanel","attributesHeader","attributesPanel","campaignHeader","campaignPanel","pointerOffset","viewportPadding","left","top","maxLeft","maxTop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createAnalyticsOverlayTooltip.js","sources":["../../../src/utils/analytics/createAnalyticsOverlayTooltip.ts"],"sourcesContent":["type AnalyticsOverlayTooltipTrackingData = {\n eventAction: string;\n eventLabel: string;\n eventTrigger: 'click' | 'visibility';\n};\n\nconst CAMPAIGN_QUERY_PARAM_CONFIG = [\n { queryParam: 'utm_source', label: 'Source' },\n { queryParam: 'utm_medium', label: 'Medium' },\n { queryParam: 'utm_campaign', label: 'Campaign' },\n { queryParam: 'utm_content', label: 'Content' },\n { queryParam: 'utm_term', label: 'Term' },\n] as const;\n\ntype CampaignQueryParam = (typeof CAMPAIGN_QUERY_PARAM_CONFIG)[number]['queryParam'];\ntype AnalyticsOverlayTooltipCampaignData = Partial<Record<CampaignQueryParam, string>>;\n\ntype CreateAnalyticsOverlayTooltipProps = {\n overlayRoot: HTMLElement;\n trackingData: AnalyticsOverlayTooltipTrackingData;\n totalEventCount: number;\n totalUserCount: number;\n analyticsTotalUsers: number | null;\n clickEvent: MouseEvent;\n trackedElement: HTMLElement;\n};\n\nconst numberFormatter = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n});\n\nconst createIcon = (iconClass: string, sizeClass: string) => {\n const icon = document.createElement('span');\n icon.classList.add('rioglyph', iconClass, sizeClass);\n return icon;\n};\n\nconst createTitle = (props: { iconClass: string; text: string }) => {\n const { iconClass, text } = props;\n const title = document.createElement('div');\n title.classList.add(\n 'display-flex',\n 'align-items-center',\n 'gap-5',\n 'text-medium',\n 'text-size-16',\n 'line-height-16',\n 'margin-bottom--3'\n );\n title.appendChild(createIcon(iconClass, 'text-size-16'));\n\n const titleText = document.createElement('span');\n titleText.textContent = text;\n title.appendChild(titleText);\n\n return title;\n};\n\nconst createPanel = () => {\n const panel = document.createElement('div');\n panel.classList.add('rounded', 'padding-10', 'bg-decent', 'display-flex', 'flex-column', 'gap-5', 'shadow-accent');\n return panel;\n};\n\nconst createInfoRow = (props: { iconClass: string; label: string; right: Node | string }) => {\n const { iconClass, label, right } = props;\n\n const row = document.createElement('div');\n row.classList.add('display-flex', 'align-items-center', 'gap-5');\n\n const leftContainer = document.createElement('div');\n leftContainer.classList.add('display-flex', 'align-items-center', 'gap-5', 'min-width-80');\n\n const icon = createIcon(iconClass, 'text-size-14');\n leftContainer.appendChild(icon);\n\n const labelNode = document.createElement('div');\n labelNode.classList.add('text-medium');\n labelNode.textContent = label;\n leftContainer.appendChild(labelNode);\n row.appendChild(leftContainer);\n\n const rightContainer = document.createElement('div');\n rightContainer.classList.add('flex-1-1', 'text-right');\n\n if (typeof right === 'string') {\n const rightText = document.createElement('div');\n rightText.classList.add('word-break-all', 'text-bold');\n rightText.textContent = right;\n rightContainer.appendChild(rightText);\n } else {\n rightContainer.appendChild(right);\n }\n\n row.appendChild(rightContainer);\n return row;\n};\n\nconst formatPercentage = (value: number | null) => (value === null ? 'n/a' : `${numberFormatter.format(value)}%`);\n\nconst getUrlParsingBaseHref = () => {\n if (typeof window !== 'undefined' && /^https?:/i.test(window.location.href)) {\n return window.location.href;\n }\n\n return 'https://rio.cloud';\n};\n\nexport const extractCampaignTrackingDataFromHref = (\n href: string,\n baseHref = getUrlParsingBaseHref()\n): AnalyticsOverlayTooltipCampaignData | null => {\n try {\n const url = new URL(href, baseHref);\n const campaignData: AnalyticsOverlayTooltipCampaignData = {};\n\n CAMPAIGN_QUERY_PARAM_CONFIG.forEach(({ queryParam }) => {\n const value = url.searchParams.get(queryParam)?.trim();\n if (value) {\n campaignData[queryParam] = value;\n }\n });\n\n return Object.keys(campaignData).length > 0 ? campaignData : null;\n } catch {\n return null;\n }\n};\n\nexport const extractCampaignTrackingDataFromElement = (trackedElement: HTMLElement) => {\n const anchorElement = trackedElement.closest<HTMLAnchorElement>('a[href]');\n const href = trackedElement.getAttribute('href')?.trim() ?? anchorElement?.href?.trim();\n\n if (!href) {\n return null;\n }\n\n return extractCampaignTrackingDataFromHref(href);\n};\n\nconst calculateAllUsersRatePercentage = (props: {\n eventTrigger: 'click' | 'visibility';\n totalEventCount: number;\n analyticsTotalUsers: number | null;\n}) => {\n const { eventTrigger, totalEventCount, analyticsTotalUsers } = props;\n\n if (analyticsTotalUsers === null || analyticsTotalUsers <= 0) {\n return null;\n }\n\n if (eventTrigger === 'click' || eventTrigger === 'visibility') {\n return (totalEventCount / analyticsTotalUsers) * 100;\n }\n\n return null;\n};\n\nexport const createAnalyticsOverlayTooltip = (props: CreateAnalyticsOverlayTooltipProps) => {\n const {\n overlayRoot,\n trackingData,\n totalEventCount,\n totalUserCount,\n analyticsTotalUsers,\n clickEvent,\n trackedElement,\n } = props;\n\n const tooltip = document.createElement('div');\n\n tooltip.setAttribute('data-analytics-overlay-tooltip', 'true');\n\n tooltip.classList.add(\n 'position-fixed',\n 'pointer-events-all',\n 'z-index-max',\n 'rounded',\n 'padding-15',\n 'shadow-focused',\n 'bg-secondary',\n 'text-color-white',\n 'max-width-350',\n 'width-100pct',\n 'word-break-all',\n 'display-flex',\n 'flex-column',\n 'gap-10',\n 'line-height-125rel'\n );\n\n const metricLabel = trackingData.eventTrigger === 'click' ? 'Clicks' : 'Views';\n const metricIconClass = trackingData.eventTrigger === 'click' ? 'rioglyph-click' : 'rioglyph-eye-open';\n const elementRateLabel = trackingData.eventTrigger === 'click' ? 'Click rate' : 'View rate';\n\n const elementRatePercentage = totalUserCount > 0 ? (totalEventCount / totalUserCount) * 100 : null;\n\n const allUsersRatePercentage = calculateAllUsersRatePercentage({\n eventTrigger: trackingData.eventTrigger,\n totalEventCount,\n analyticsTotalUsers,\n });\n\n const interactionRateAllUsersPercentage =\n analyticsTotalUsers !== null && analyticsTotalUsers > 0 ? (totalUserCount / analyticsTotalUsers) * 100 : null;\n\n const overallTitle = createTitle({\n iconClass: 'rioglyph-user',\n text: 'Event users',\n });\n tooltip.appendChild(overallTitle);\n\n const overallPanel = createPanel();\n overallPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-user',\n label: 'Event users',\n right: `${numberFormatter.format(totalUserCount)}`,\n })\n );\n\n if (analyticsTotalUsers !== null) {\n overallPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-user-group',\n label: 'Total users',\n right: `${numberFormatter.format(analyticsTotalUsers)}`,\n })\n );\n\n overallPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: 'Event rate (all users)',\n right: formatPercentage(interactionRateAllUsersPercentage),\n })\n );\n }\n tooltip.appendChild(overallPanel);\n\n const performanceTitle = createTitle({\n iconClass: 'rioglyph-stats',\n text: 'Element performance',\n });\n tooltip.appendChild(performanceTitle);\n\n const performancePanel = createPanel();\n performancePanel.appendChild(\n createInfoRow({\n iconClass: metricIconClass,\n label: metricLabel,\n right: `${numberFormatter.format(totalEventCount)}`,\n })\n );\n performancePanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: elementRateLabel,\n right: formatPercentage(elementRatePercentage),\n })\n );\n\n if (trackingData.eventTrigger === 'click' && analyticsTotalUsers !== null) {\n performancePanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: 'Click rate (all users)',\n right: formatPercentage(allUsersRatePercentage),\n })\n );\n }\n\n if (trackingData.eventTrigger === 'visibility' && analyticsTotalUsers !== null) {\n performancePanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-bar-chart-box',\n label: 'View rate (all users)',\n right: formatPercentage(allUsersRatePercentage),\n })\n );\n }\n tooltip.appendChild(performancePanel);\n\n const attributesHeader = createTitle({\n iconClass: 'rioglyph-info-sign',\n text: 'Tracking Attributes',\n });\n tooltip.appendChild(attributesHeader);\n\n const attributesPanel = createPanel();\n attributesPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-cog',\n label: 'Action',\n right: trackingData.eventAction,\n })\n );\n attributesPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-emergency-stop',\n label: 'Trigger',\n right: trackingData.eventTrigger,\n })\n );\n attributesPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-tag',\n label: 'Label',\n right: trackingData.eventLabel,\n })\n );\n tooltip.appendChild(attributesPanel);\n\n const campaignData = extractCampaignTrackingDataFromElement(trackedElement);\n if (campaignData) {\n const campaignHeader = createTitle({\n iconClass: 'rioglyph-megaphone',\n text: 'Campaign',\n });\n tooltip.appendChild(campaignHeader);\n\n const campaignPanel = createPanel();\n CAMPAIGN_QUERY_PARAM_CONFIG.forEach(({ queryParam, label }) => {\n const value = campaignData[queryParam];\n if (!value) {\n return;\n }\n\n campaignPanel.appendChild(\n createInfoRow({\n iconClass: 'rioglyph-tag',\n label,\n right: value,\n })\n );\n });\n\n tooltip.appendChild(campaignPanel);\n }\n\n const pointerOffset = 12;\n const viewportPadding = 8;\n overlayRoot.appendChild(tooltip);\n\n let left = clickEvent.clientX + pointerOffset;\n let top = clickEvent.clientY + pointerOffset;\n const maxLeft = window.innerWidth - tooltip.offsetWidth - viewportPadding;\n const maxTop = window.innerHeight - tooltip.offsetHeight - viewportPadding;\n left = Math.max(viewportPadding, Math.min(left, maxLeft));\n top = Math.max(viewportPadding, Math.min(top, maxTop));\n\n tooltip.style.left = `${left}px`;\n tooltip.style.top = `${top}px`;\n\n return tooltip;\n};\n\nexport type {\n AnalyticsOverlayTooltipCampaignData,\n AnalyticsOverlayTooltipTrackingData,\n CreateAnalyticsOverlayTooltipProps,\n};\n"],"names":["CAMPAIGN_QUERY_PARAM_CONFIG","numberFormatter","createIcon","iconClass","sizeClass","icon","createTitle","props","text","title","titleText","createPanel","panel","createInfoRow","label","right","row","leftContainer","labelNode","rightContainer","rightText","formatPercentage","value","getUrlParsingBaseHref","extractCampaignTrackingDataFromHref","href","baseHref","url","campaignData","queryParam","extractCampaignTrackingDataFromElement","trackedElement","anchorElement","calculateAllUsersRatePercentage","eventTrigger","totalEventCount","analyticsTotalUsers","createAnalyticsOverlayTooltip","overlayRoot","trackingData","totalUserCount","clickEvent","tooltip","metricLabel","metricIconClass","elementRateLabel","elementRatePercentage","allUsersRatePercentage","interactionRateAllUsersPercentage","overallTitle","overallPanel","performanceTitle","performancePanel","attributesHeader","attributesPanel","campaignHeader","campaignPanel","pointerOffset","viewportPadding","left","top","maxLeft","maxTop"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState as q, useRef as I, useEffect as M } from "react";
|
|
2
|
-
import { ANALYTICS_OVERLAY_SELECTOR as H, createAnalyticsLookupKey as Y,
|
|
2
|
+
import { ANALYTICS_OVERLAY_SELECTOR as H, createAnalyticsLookupKey as Y, EVENT_TYPE_ICON_CLASS as K, toEventType as Q } from "./analyticsAnalysisUtils.js";
|
|
3
3
|
import { createAnalyticsOverlayTooltip as j } from "./createAnalyticsOverlayTooltip.js";
|
|
4
4
|
import { logAnalyticsOverlayUnmatchedEntries as G } from "./logAnalyticsOverlayUnmatchedEntries.js";
|
|
5
5
|
const te = (F) => {
|
|
@@ -40,7 +40,7 @@ const te = (F) => {
|
|
|
40
40
|
), n.setAttribute("data-analytics-overlay-label", "true"), n.style.top = `${e.top + 4}px`, n.style.left = `${e.left + 4}px`, n.style.maxWidth = "min(80vw, 420px)";
|
|
41
41
|
const v = (s) => {
|
|
42
42
|
s.preventDefault(), s.stopPropagation(), w.current.add(t.element), L === n && d(), n.remove();
|
|
43
|
-
}, p = t.entries.reduce((s, f) => s + D(f.eventCount), 0), c = t.entries.reduce((s, f) => s + D(f.totalUsers), 0), i =
|
|
43
|
+
}, p = t.entries.reduce((s, f) => s + D(f.eventCount), 0), c = t.entries.reduce((s, f) => s + D(f.totalUsers), 0), i = K[t.eventType], l = "rioglyph-remove", o = document.createElement("span");
|
|
44
44
|
o.classList.add("text-size-14", "margin-left-1", "rioglyph", "margin-right-0", i), n.appendChild(o), g && (o.addEventListener("pointerdown", v), o.addEventListener("click", v));
|
|
45
45
|
const P = () => {
|
|
46
46
|
i !== l && (o.classList.remove(i), o.classList.add(l));
|
|
@@ -72,7 +72,7 @@ const te = (F) => {
|
|
|
72
72
|
}), L = n);
|
|
73
73
|
}), n;
|
|
74
74
|
}, _ = (t) => t.reduce((e, a) => {
|
|
75
|
-
const n = a.getAttribute("data-track-ga-event-action"), v = a.getAttribute("data-track-ga-event-label"), p = a.getAttribute("data-track-ga-event-trigger"), c = p === "click" || p === "visibility" ? p : null, i = c ?
|
|
75
|
+
const n = a.getAttribute("data-track-ga-event-action"), v = a.getAttribute("data-track-ga-event-label"), p = a.getAttribute("data-track-ga-event-trigger"), c = p === "click" || p === "visibility" ? p : null, i = c ? Q(c) : null;
|
|
76
76
|
if (!n || !v || !c || !i || w.current.has(a))
|
|
77
77
|
return e;
|
|
78
78
|
const l = m.get(Y(n, v));
|
package/utils/init/initConfig.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import o from "process";
|
|
2
2
|
import { inIframe as s } from "../deviceUtils.js";
|
|
3
|
-
o.env.NODE_ENV === "production" || location.protocol.startsWith("https");
|
|
4
|
-
const e = o.env.NODE_ENV === "test", c = s(), i = (t) => !e && console.debug(t);
|
|
3
|
+
const c = o.env.NODE_ENV === "production" || location.protocol.startsWith("https"), r = o.env.NODE_ENV === "test", i = s(), p = (t) => !r && console.debug(t);
|
|
5
4
|
export {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
p as debug,
|
|
6
|
+
i as isInIframe,
|
|
7
|
+
c as isProd,
|
|
8
|
+
r as isTest
|
|
9
9
|
};
|
|
10
10
|
//# sourceMappingURL=initConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initConfig.js","sources":["../../../src/utils/init/initConfig.ts"],"sourcesContent":["import process from 'process';\n\nimport { inIframe } from '../deviceUtils';\n\n// Note: using import.meta.env.DEV does not work here due to backward compatibility with webpack and jest setups\nexport const isProd = process.env.NODE_ENV === 'production' || location.protocol.startsWith('https');\nexport const isTest = process.env.NODE_ENV === 'test';\n\nexport const isInIframe = inIframe();\n\nexport const debug = (message: string) => !isTest && console.debug(message);\n"],"names":["process","isTest","isInIframe","inIframe","debug","message"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"initConfig.js","sources":["../../../src/utils/init/initConfig.ts"],"sourcesContent":["import process from 'process';\n\nimport { inIframe } from '../deviceUtils';\n\n// Note: using import.meta.env.DEV does not work here due to backward compatibility with webpack and jest setups\nexport const isProd = process.env.NODE_ENV === 'production' || location.protocol.startsWith('https');\nexport const isTest = process.env.NODE_ENV === 'test';\n\nexport const isInIframe = inIframe();\n\nexport const debug = (message: string) => !isTest && console.debug(message);\n"],"names":["isProd","process","isTest","isInIframe","inIframe","debug","message"],"mappings":";;AAKO,MAAMA,IAASC,EAAQ,IAAI,aAAa,gBAAgB,SAAS,SAAS,WAAW,OAAO,GACtFC,IAASD,EAAQ,IAAI,aAAa,QAElCE,IAAaC,EAAA,GAEbC,IAAQ,CAACC,MAAoB,CAACJ,KAAU,QAAQ,MAAMI,CAAO;"}
|
package/utils/routeUtils.d.ts
CHANGED
|
@@ -33,11 +33,14 @@ export declare const serializeSorting: (sortInfo: {
|
|
|
33
33
|
* Useful when reading URL params into table state.
|
|
34
34
|
*
|
|
35
35
|
* @example
|
|
36
|
-
* parseSorting('-createdAt') // { sortBy: 'createdAt', sortDir: '
|
|
36
|
+
* parseSorting('-createdAt') // { sortBy: 'createdAt', sortDir: 'desc' }
|
|
37
37
|
*/
|
|
38
38
|
export declare const parseSorting: (sortValueShort: string | null | undefined) => {
|
|
39
39
|
sortBy: string;
|
|
40
|
-
sortDir:
|
|
40
|
+
sortDir: "desc";
|
|
41
|
+
} | {
|
|
42
|
+
sortBy: string;
|
|
43
|
+
sortDir: "asc";
|
|
41
44
|
} | null;
|
|
42
45
|
/**
|
|
43
46
|
* Serializes column settings into compact strings for a URL param.
|
package/utils/routeUtils.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { get as
|
|
2
|
-
import { isNil as
|
|
1
|
+
import { get as m } from "es-toolkit/compat";
|
|
2
|
+
import { isNil as d } from "es-toolkit";
|
|
3
3
|
import { isEqual as A } from "es-toolkit";
|
|
4
|
-
import { SortDirection as
|
|
5
|
-
const g = (t) => t ===
|
|
4
|
+
import { SortDirection as l } from "./SortUtils.js";
|
|
5
|
+
const g = (t) => t === l.DESCENDING ? "-" : "", $ = (t) => t?.sortBy ? `${g(t.sortDir)}${t.sortBy}` : null, D = (t) => t ? t.startsWith("-") ? {
|
|
6
6
|
sortBy: t.substring(1),
|
|
7
7
|
// remove '-'
|
|
8
|
-
sortDir:
|
|
8
|
+
sortDir: l.DESCENDING
|
|
9
9
|
} : t.startsWith("+") ? {
|
|
10
10
|
sortBy: t.substring(1).trim(),
|
|
11
11
|
// remove '+' and potential space
|
|
12
|
-
sortDir:
|
|
12
|
+
sortDir: l.ASCENDING
|
|
13
13
|
} : {
|
|
14
14
|
sortBy: t.trim(),
|
|
15
|
-
sortDir:
|
|
15
|
+
sortDir: l.ASCENDING
|
|
16
16
|
} : null, w = ({
|
|
17
17
|
columnOrder: t = [],
|
|
18
18
|
hiddenColumns: e = [],
|
|
19
19
|
columnsDetails: s = {}
|
|
20
20
|
}) => t.map((r) => {
|
|
21
|
-
const i =
|
|
21
|
+
const i = m(s[r], "width"), o = m(s[r], "defaultWidth"), c = i !== 0 && i !== o ? `:${i}` : "";
|
|
22
22
|
return `${e.includes(r) ? "-" : ""}${r}${c}`;
|
|
23
23
|
}), W = (t, e) => {
|
|
24
24
|
const s = {
|
|
@@ -38,10 +38,10 @@ const g = (t) => t === y.DESCENDING ? "-" : "", $ = (t) => t?.sortBy ? `${g(t.so
|
|
|
38
38
|
}, E = (t, e = []) => {
|
|
39
39
|
const s = new Map(e.map((n) => [n.key, n]));
|
|
40
40
|
return t.map((n) => {
|
|
41
|
-
const r = s.get(n.key), i = !
|
|
41
|
+
const r = s.get(n.key), i = !d(n.width) && n.width !== r?.width ? `:${n.width}` : "";
|
|
42
42
|
return `${n.visible === !1 ? "-" : ""}${n.key}${i}`;
|
|
43
43
|
});
|
|
44
|
-
}, h = (t, e) =>
|
|
44
|
+
}, h = (t, e) => d(t) || t === "" ? e : /^-?\d+(\.\d+)?$/.test(t) ? Number(t) : t, j = (t, e) => {
|
|
45
45
|
const s = new Map(e.map((i) => [i.key, i])), n = /* @__PURE__ */ new Set(), r = [];
|
|
46
46
|
return t.forEach((i) => {
|
|
47
47
|
const [o, c] = i.split(":"), u = o.startsWith("-") ? o.substring(1) : o, a = s.get(u);
|
|
@@ -51,18 +51,18 @@ const g = (t) => t === y.DESCENDING ? "-" : "", $ = (t) => t?.sortBy ? `${g(t.so
|
|
|
51
51
|
width: h(c, a.width)
|
|
52
52
|
}));
|
|
53
53
|
}), [...r, ...e.filter((i) => !n.has(i.key))];
|
|
54
|
-
},
|
|
54
|
+
}, p = (t) => encodeURIComponent(String(t)), f = (t) => decodeURIComponent(t), B = (t, e) => {
|
|
55
55
|
const s = new Map(e.map((r) => [r.key, r])), n = [];
|
|
56
56
|
return t.forEach((r, i) => {
|
|
57
57
|
const o = s.get(i), c = encodeURIComponent(i), u = encodeURIComponent(r);
|
|
58
58
|
if (o && ["array", "array-number", "object"].includes(o.type ?? "string")) {
|
|
59
|
-
const
|
|
60
|
-
n.push(`${c}=${
|
|
59
|
+
const y = u.replace(/%2C/g, ",").replace(/%3A/g, ":");
|
|
60
|
+
n.push(`${c}=${y}`);
|
|
61
61
|
} else
|
|
62
62
|
n.push(`${c}=${u}`);
|
|
63
63
|
}), n.join("&");
|
|
64
64
|
}, k = (t, e) => {
|
|
65
|
-
if (
|
|
65
|
+
if (d(t) || t === "")
|
|
66
66
|
return null;
|
|
67
67
|
switch (e) {
|
|
68
68
|
case "string":
|
|
@@ -74,7 +74,7 @@ const g = (t) => t === y.DESCENDING ? "-" : "", $ = (t) => t?.sortBy ? `${g(t.so
|
|
|
74
74
|
case "array-number":
|
|
75
75
|
return !Array.isArray(t) || t.length === 0 ? null : t.map(String).join(",");
|
|
76
76
|
case "object":
|
|
77
|
-
return typeof t != "object" || Object.keys(t).length === 0 ? null : Object.entries(t).map(([s, n]) => `${
|
|
77
|
+
return typeof t != "object" || Object.keys(t).length === 0 ? null : Object.entries(t).map(([s, n]) => `${p(s)}:${p(String(n))}`).join(",");
|
|
78
78
|
default:
|
|
79
79
|
return String(t);
|
|
80
80
|
}
|
|
@@ -94,10 +94,10 @@ const g = (t) => t === y.DESCENDING ? "-" : "", $ = (t) => t?.sortBy ? `${g(t.so
|
|
|
94
94
|
const e = {};
|
|
95
95
|
return t.split(",").forEach((s) => {
|
|
96
96
|
const [n, r] = s.split(":");
|
|
97
|
-
n && r && (e[
|
|
97
|
+
n && r && (e[f(n)] = f(r));
|
|
98
98
|
}), e;
|
|
99
99
|
}
|
|
100
|
-
}, z = (t, e) =>
|
|
100
|
+
}, z = (t, e) => d(t) ? null : C[e](t);
|
|
101
101
|
export {
|
|
102
102
|
j as deserializeColumnsConfig,
|
|
103
103
|
z as deserializeValue,
|