@rio-cloud/rio-uikit 2.3.0-beta.1 → 2.3.0-beta.2
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/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/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 +264 -256
- 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 +18 -0
- package/components/datepicker/DayPickerDropdown.js +75 -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/loadMore/LoadMoreProgress.js +6 -7
- package/components/map/components/Map.js +3 -3
- package/components/map/utils/rendering.js +5 -5
- 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/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 +237 -214
- package/components/table/Table.js.map +1 -1
- package/components/table/Table.types.d.ts +293 -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 +13 -5
- package/components/table/TableColumn.js +112 -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 +9 -4
- package/components/table/TableHeader.js +104 -2
- package/components/table/TableHeader.js.map +1 -1
- package/components/table/TableHeaderColumn.d.ts +14 -8
- package/components/table/TableHeaderColumn.js +78 -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 +9 -4
- package/components/table/TableRow.js +108 -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 +25 -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 +3 -1
- package/components/table/layout/useHorizontalSectionSync.js +32 -28
- 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 +17 -6
- package/components/table/layout/useTableLayout.js +41 -38
- 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 +44 -34
- package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
- package/components/table/render/header/TableHeader.types.d.ts +11 -9
- package/components/table/render/header/TableHeaderCellContent.d.ts +2 -1
- 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 -22
- 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 +4 -2
- package/components/table/render/header/resolveHeaderCellClassName.js +11 -10
- 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/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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSelection.js","sources":["../../../../src/components/table/selection/useTableSelection.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport { resolveRowKey } from '../model/resolveRowMeta';\nimport type { TableRowId } from '../Table.types';\n\n/**\n * Configuration for `useTableSelection`.\n */\nexport type UseTableSelectionOptions<RowType extends
|
|
1
|
+
{"version":3,"file":"useTableSelection.js","sources":["../../../../src/components/table/selection/useTableSelection.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport { resolveRowKey } from '../model/resolveRowMeta';\nimport type { TableRowData, TableRowId } from '../Table.types';\n\n/**\n * Configuration for `useTableSelection`.\n */\nexport type UseTableSelectionOptions<RowType extends TableRowData> = {\n /**\n * Data rows that participate in active-row and selection state.\n */\n rows: RowType[];\n\n /**\n * Optional key accessor used to derive stable row ids.\n *\n * If omitted, the row index is used as a fallback.\n */\n rowKey?: keyof RowType | ((row: RowType, rowIndex: number) => TableRowId);\n\n /**\n * Optional initially active row id.\n */\n initialActiveRowId?: TableRowId;\n\n /**\n * Optional initially selected row ids.\n */\n initialSelectedRowIds?: TableRowId[];\n};\n\n/**\n * Selection and active-row state returned by `useTableSelection`.\n */\nexport type UseTableSelectionReturn = {\n /**\n * Currently active row id.\n */\n activeRowId?: TableRowId;\n\n /**\n * Currently selected row ids.\n */\n selectedRowIds: TableRowId[];\n\n /**\n * Whether at least one row is currently selected.\n */\n hasSelection: boolean;\n\n /**\n * Whether all current rows are selected.\n */\n isAllSelected: boolean;\n\n /**\n * Checks whether a given row id is currently selected.\n */\n isRowSelected: (rowId: TableRowId) => boolean;\n\n /**\n * Sets the current active row id.\n */\n setActiveRowId: (rowId: TableRowId | undefined) => void;\n\n /**\n * Replaces the current selection with the provided row ids.\n */\n setSelectedRowIds: (rowIds: TableRowId[]) => void;\n\n /**\n * Toggles selection state for a single row id.\n */\n toggleRowSelection: (rowId: TableRowId) => void;\n\n /**\n * Selects or deselects all current rows.\n *\n * If `shouldSelect` is omitted, the hook toggles based on the current\n * all-selected state.\n */\n toggleAllSelection: (shouldSelect?: boolean) => void;\n\n /**\n * Clears the current selection.\n */\n clearSelection: () => void;\n};\n\n/**\n * Small helper hook for controlled table demos and simple table integrations\n * that need active-row state plus checkbox selection state.\n *\n * The hook derives stable row ids from `rows` and `rowKey`, keeps the active\n * row and selection in sync when rows change, and provides convenience helpers\n * for single-row and all-row toggling.\n */\nconst useTableSelection = <RowType extends TableRowData>(\n props: UseTableSelectionOptions<RowType>\n): UseTableSelectionReturn => {\n const { rows, rowKey, initialActiveRowId, initialSelectedRowIds = [] } = props;\n\n const rowIds = useMemo(() => rows.map((row, rowIndex) => resolveRowKey(row, rowIndex, rowKey)), [rows, rowKey]);\n const rowIdSet = useMemo(() => new Set(rowIds), [rowIds]);\n\n const [activeRowId, setActiveRowId] = useState<TableRowId | undefined>(initialActiveRowId);\n const [selectedRowIds, setSelectedRowIds] = useState<TableRowId[]>(initialSelectedRowIds);\n\n useEffect(() => {\n setSelectedRowIds(previousSelectedRowIds => previousSelectedRowIds.filter(rowId => rowIdSet.has(rowId)));\n setActiveRowId(previousActiveRowId =>\n previousActiveRowId !== undefined && rowIdSet.has(previousActiveRowId) ? previousActiveRowId : undefined\n );\n }, [rowIdSet]);\n\n const toggleRowSelection = (rowId: TableRowId) => {\n setSelectedRowIds(previousSelectedRowIds =>\n previousSelectedRowIds.includes(rowId)\n ? previousSelectedRowIds.filter(selectedRowId => selectedRowId !== rowId)\n : [...previousSelectedRowIds, rowId]\n );\n };\n\n const toggleAllSelection = (shouldSelect = !rowIds.every(rowId => selectedRowIds.includes(rowId))) => {\n setSelectedRowIds(shouldSelect ? rowIds : []);\n };\n\n const clearSelection = () => {\n setSelectedRowIds([]);\n };\n\n return {\n activeRowId,\n selectedRowIds,\n hasSelection: selectedRowIds.length > 0,\n isAllSelected: rowIds.length > 0 && rowIds.every(rowId => selectedRowIds.includes(rowId)),\n isRowSelected: rowId => selectedRowIds.includes(rowId),\n setActiveRowId,\n setSelectedRowIds,\n toggleRowSelection,\n toggleAllSelection,\n clearSelection,\n };\n};\n\nexport default useTableSelection;\n"],"names":["useTableSelection","props","rows","rowKey","initialActiveRowId","initialSelectedRowIds","rowIds","useMemo","row","rowIndex","resolveRowKey","rowIdSet","activeRowId","setActiveRowId","useState","selectedRowIds","setSelectedRowIds","useEffect","previousSelectedRowIds","rowId","previousActiveRowId","toggleRowSelection","selectedRowId","toggleAllSelection","shouldSelect","clearSelection"],"mappings":";;AAkGA,MAAMA,IAAoB,CACtBC,MAC0B;AAC1B,QAAM,EAAE,MAAAC,GAAM,QAAAC,GAAQ,oBAAAC,GAAoB,uBAAAC,IAAwB,CAAA,MAAOJ,GAEnEK,IAASC,EAAQ,MAAML,EAAK,IAAI,CAACM,GAAKC,MAAaC,EAAcF,GAAKC,GAAUN,CAAM,CAAC,GAAG,CAACD,GAAMC,CAAM,CAAC,GACxGQ,IAAWJ,EAAQ,MAAM,IAAI,IAAID,CAAM,GAAG,CAACA,CAAM,CAAC,GAElD,CAACM,GAAaC,CAAc,IAAIC,EAAiCV,CAAkB,GACnF,CAACW,GAAgBC,CAAiB,IAAIF,EAAuBT,CAAqB;AAExF,EAAAY,EAAU,MAAM;AACZ,IAAAD,EAAkB,CAAAE,MAA0BA,EAAuB,OAAO,CAAAC,MAASR,EAAS,IAAIQ,CAAK,CAAC,CAAC,GACvGN;AAAA,MAAe,OACXO,MAAwB,UAAaT,EAAS,IAAIS,CAAmB,IAAIA,IAAsB;AAAA,IAAA;AAAA,EAEvG,GAAG,CAACT,CAAQ,CAAC;AAEb,QAAMU,IAAqB,CAACF,MAAsB;AAC9C,IAAAH;AAAA,MAAkB,CAAAE,MACdA,EAAuB,SAASC,CAAK,IAC/BD,EAAuB,OAAO,CAAAI,MAAiBA,MAAkBH,CAAK,IACtE,CAAC,GAAGD,GAAwBC,CAAK;AAAA,IAAA;AAAA,EAE/C,GAEMI,IAAqB,CAACC,IAAe,CAAClB,EAAO,MAAM,CAAAa,MAASJ,EAAe,SAASI,CAAK,CAAC,MAAM;AAClG,IAAAH,EAAkBQ,IAAelB,IAAS,EAAE;AAAA,EAChD,GAEMmB,IAAiB,MAAM;AACzB,IAAAT,EAAkB,CAAA,CAAE;AAAA,EACxB;AAEA,SAAO;AAAA,IACH,aAAAJ;AAAA,IACA,gBAAAG;AAAA,IACA,cAAcA,EAAe,SAAS;AAAA,IACtC,eAAeT,EAAO,SAAS,KAAKA,EAAO,MAAM,CAAAa,MAASJ,EAAe,SAASI,CAAK,CAAC;AAAA,IACxF,eAAe,CAAAA,MAASJ,EAAe,SAASI,CAAK;AAAA,IACrD,gBAAAN;AAAA,IACA,mBAAAG;AAAA,IACA,oBAAAK;AAAA,IACA,oBAAAE;AAAA,IACA,gBAAAE;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const s = (e = "hidden") => {
|
|
2
|
+
switch (e) {
|
|
3
|
+
case "visible":
|
|
4
|
+
return "overflow-visible";
|
|
5
|
+
case "ellipsis":
|
|
6
|
+
return "ellipsis-1";
|
|
7
|
+
case "ellipsis-2":
|
|
8
|
+
return "ellipsis-2";
|
|
9
|
+
case "ellipsis-3":
|
|
10
|
+
return "ellipsis-3";
|
|
11
|
+
default:
|
|
12
|
+
return "overflow-hidden";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
s as default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=getCellContentOverflowClassName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCellContentOverflowClassName.js","sources":["../../../../src/components/table/shared/getCellContentOverflowClassName.ts"],"sourcesContent":["import type { TableCellOverflow } from '../Table.types';\n\nconst getCellContentOverflowClassName = (overflow: TableCellOverflow = 'hidden') => {\n switch (overflow) {\n case 'visible':\n return 'overflow-visible';\n case 'ellipsis':\n return 'ellipsis-1';\n case 'ellipsis-2':\n return 'ellipsis-2';\n case 'ellipsis-3':\n return 'ellipsis-3';\n default:\n return 'overflow-hidden';\n }\n};\n\nexport default getCellContentOverflowClassName;\n"],"names":["getCellContentOverflowClassName","overflow"],"mappings":"AAEA,MAAMA,IAAkC,CAACC,IAA8B,aAAa;AAChF,UAAQA,GAAA;AAAA,IACJ,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EAAA;AAEnB;"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { KeyboardEventHandler } from 'react';
|
|
2
|
-
|
|
2
|
+
import { TableRowData } from '../Table.types';
|
|
3
|
+
type GetInteractiveRowPropsArgs<RowType extends TableRowData> = {
|
|
3
4
|
isClickable: boolean;
|
|
4
5
|
onRowClick?: (row: RowType, rowIndex: number) => void;
|
|
5
6
|
row: RowType;
|
|
6
7
|
rowIndex: number;
|
|
7
8
|
};
|
|
8
|
-
export declare const getInteractiveRowProps: <RowType extends
|
|
9
|
+
export declare const getInteractiveRowProps: <RowType extends TableRowData>(args: GetInteractiveRowPropsArgs<RowType>) => {
|
|
9
10
|
isClickableClassName: string | undefined;
|
|
10
11
|
onClick: (() => void | undefined) | undefined;
|
|
11
12
|
onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInteractiveRowProps.js","sources":["../../../../src/components/table/shared/getInteractiveRowProps.ts"],"sourcesContent":["import type { KeyboardEventHandler } from 'react';\n\ntype GetInteractiveRowPropsArgs<RowType extends
|
|
1
|
+
{"version":3,"file":"getInteractiveRowProps.js","sources":["../../../../src/components/table/shared/getInteractiveRowProps.ts"],"sourcesContent":["import type { KeyboardEventHandler } from 'react';\n\nimport type { TableRowData } from '../Table.types';\n\ntype GetInteractiveRowPropsArgs<RowType extends TableRowData> = {\n isClickable: boolean;\n onRowClick?: (row: RowType, rowIndex: number) => void;\n row: RowType;\n rowIndex: number;\n};\n\nexport const getInteractiveRowProps = <RowType extends TableRowData>(args: GetInteractiveRowPropsArgs<RowType>) => {\n const { isClickable, onRowClick, row, rowIndex } = args;\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined = isClickable\n ? event => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick?.(row, rowIndex);\n }\n }\n : undefined;\n\n return {\n isClickableClassName: isClickable ? 'table-row-clickable' : undefined,\n onClick: isClickable ? () => onRowClick?.(row, rowIndex) : undefined,\n onKeyDown,\n tabIndex: isClickable ? 0 : undefined,\n };\n};\n"],"names":["getInteractiveRowProps","args","isClickable","onRowClick","row","rowIndex","event"],"mappings":"AAWO,MAAMA,IAAyB,CAA+BC,MAA8C;AAC/G,QAAM,EAAE,aAAAC,GAAa,YAAAC,GAAY,KAAAC,GAAK,UAAAC,MAAaJ;AAWnD,SAAO;AAAA,IACH,sBAAsBC,IAAc,wBAAwB;AAAA,IAC5D,SAASA,IAAc,MAAMC,IAAaC,GAAKC,CAAQ,IAAI;AAAA,IAC3D,WAZgEH,IAC9D,CAAAI,MAAS;AACL,OAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACvCA,EAAM,eAAA,GACNH,IAAaC,GAAKC,CAAQ;AAAA,IAElC,IACA;AAAA,IAMF,UAAUH,IAAc,IAAI;AAAA,EAAA;AAEpC;"}
|
package/hooks/useUrlState.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useRef as R, useEffect as D } from "react";
|
|
2
2
|
import { isNil as z, isEqual as v } from "es-toolkit";
|
|
3
|
-
import {
|
|
3
|
+
import { toQueryString as T, deserializeValue as M, serializeValue as A } from "../utils/routeUtils.js";
|
|
4
4
|
import E from "./useAfterMount.js";
|
|
5
5
|
import U from "./useLatest.js";
|
|
6
6
|
const C = (r) => {
|
|
7
7
|
const e = r.replace(/^\?/, "");
|
|
8
8
|
return new URLSearchParams(e).toString();
|
|
9
|
-
}, L = (r, e) => r.customDeserialize ? r.customDeserialize(e) :
|
|
9
|
+
}, L = (r, e) => r.customDeserialize ? r.customDeserialize(e) : M(e, r.type ?? "string"), N = (r, e) => r ?? e, I = (r) => {
|
|
10
10
|
const { valueToApply: e, currentStoreValue: t, urlRawValue: a, defaultValue: d } = r;
|
|
11
11
|
if (typeof e > "u" || v(e, t))
|
|
12
12
|
return !1;
|
|
@@ -74,7 +74,7 @@ const C = (r) => {
|
|
|
74
74
|
const w = O(o, V, k);
|
|
75
75
|
w !== m && (i = x({ nextParams: u, key: o.key, serializedValue: w }) || i, ((o.history ?? "push") === "push" || !k && K(o, m)) && (f = !0));
|
|
76
76
|
}), i) {
|
|
77
|
-
const o =
|
|
77
|
+
const o = T(u, e), V = u.toString();
|
|
78
78
|
l.current = V, n && (S && o === "" ? localStorage.removeItem(n) : localStorage.setItem(n, o));
|
|
79
79
|
const m = f ? "push" : "replace";
|
|
80
80
|
h.current(o, m);
|
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.2",
|
|
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 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","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/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.
|