@rivet-health/design-system 40.44.0 → 40.44.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/{esm2020 → esm2022}/lib/accessibility/sr-only/sr-only.component.mjs +4 -4
- package/esm2022/lib/download/download.service.mjs +47 -0
- package/{esm2020 → esm2022}/lib/format/pipes/common.mjs +5 -5
- package/{esm2020 → esm2022}/lib/format/pipes/date.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/format/pipes/days.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/format/pipes/dollars.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/format/pipes/number.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/format/pipes/percentage.pipe.mjs +4 -4
- package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +61 -0
- package/esm2022/lib/format/pipes/small-currency.pipe.mjs +24 -0
- package/esm2022/lib/format/pipes/small-number.pipe.mjs +29 -0
- package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +62 -0
- package/esm2022/lib/format/truncate/truncate.component.mjs +51 -0
- package/esm2022/lib/icon/dom-cache.mjs +32 -0
- package/esm2022/lib/icon/icon.component.mjs +86 -0
- package/{esm2020 → esm2022}/lib/icon/icons.mjs +1 -1
- package/{esm2020 → esm2022}/lib/input/alphabetic-field/alphabetic-field.component.mjs +4 -4
- package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +48 -0
- package/esm2022/lib/input/button/button.component.mjs +139 -0
- package/esm2022/lib/input/button-group/button-group.component.mjs +39 -0
- package/{esm2020 → esm2022}/lib/input/calendar/calendar.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/input/card-checkbox/card-checkbox.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/input/checkbox/checkbox.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/input/currency-field/currency-field.component.mjs +4 -4
- package/esm2022/lib/input/date/date.component.mjs +279 -0
- package/esm2022/lib/input/date-range/date-range.component.mjs +477 -0
- package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +47 -0
- package/{esm2020 → esm2022}/lib/input/filter-dropdown/filter-dropdown.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/input/input-label/input-label.component.mjs +4 -4
- package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +745 -0
- package/esm2022/lib/input/number-field/number-field.component.mjs +125 -0
- package/{esm2020 → esm2022}/lib/input/percentage-field/percentage-field.component.mjs +4 -4
- package/esm2022/lib/input/phone-field/phone-field.component.mjs +74 -0
- package/{esm2020 → esm2022}/lib/input/radio/radio.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/input/search/search.component.mjs +4 -4
- package/esm2022/lib/input/search-select/search-select.component.mjs +189 -0
- package/esm2022/lib/input/select/select/select.component.mjs +178 -0
- package/{esm2020 → esm2022}/lib/input/select/select-node/select-node.component.mjs +4 -4
- package/esm2022/lib/input/select/state.mjs +882 -0
- package/{esm2020 → esm2022}/lib/input/simple-select/option-group.pipe.mjs +4 -4
- package/esm2022/lib/input/simple-select/simple-select.component.mjs +178 -0
- package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +33 -0
- package/esm2022/lib/input/text-field/text-field.component.mjs +115 -0
- package/{esm2020 → esm2022}/lib/input/textarea-field/textarea-field.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/input/validation-message/validation-message.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/layout/card/card-actions.component.mjs +4 -4
- package/esm2022/lib/layout/card/card-content.component.mjs +64 -0
- package/esm2022/lib/layout/card/card-header.component.mjs +201 -0
- package/{esm2020 → esm2022}/lib/layout/card/card-link.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/layout/card/card-media.component.mjs +4 -4
- package/esm2022/lib/layout/card/card.component.mjs +291 -0
- package/{esm2020 → esm2022}/lib/layout/setting-row/setting-row.component.mjs +4 -4
- package/esm2022/lib/load/loading/loading.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/load/loading-cover/loading-cover.component.mjs +4 -4
- package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +243 -0
- package/{esm2020 → esm2022}/lib/navigation/link/link.component.mjs +6 -6
- package/{esm2020 → esm2022}/lib/navigation/page-header/page-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/navigation/tabs/tab/tab.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/navigation/tabs/tabs/tabs.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/navigation/views/edit-view/edit-view.component.mjs +9 -9
- package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +151 -0
- package/esm2022/lib/navigation/views/state.mjs +456 -0
- package/{esm2020 → esm2022}/lib/navigation/views/view-menu/view-menu.component.mjs +5 -5
- package/esm2022/lib/navigation/views/views/views.component.mjs +90 -0
- package/{esm2020 → esm2022}/lib/notification/badge/badge.component.mjs +4 -4
- package/esm2022/lib/notification/banner/banner-action.component.mjs +48 -0
- package/esm2022/lib/notification/banner/banner.component.mjs +61 -0
- package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +50 -0
- package/esm2022/lib/notification/map-indicator/map-indicators.mjs +15 -0
- package/{esm2020 → esm2022}/lib/notification/notification-badge/notification-badge.component.mjs +4 -4
- package/esm2022/lib/overlay/callout/callout.component.mjs +130 -0
- package/esm2022/lib/overlay/callout/callout.helpers.mjs +113 -0
- package/{esm2020 → esm2022}/lib/overlay/callout/help/help.component.mjs +4 -4
- package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +69 -0
- package/{esm2020 → esm2022}/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/overlay/callout/menu/menu.component.mjs +4 -4
- package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +30 -0
- package/{esm2020 → esm2022}/lib/overlay/callout/tooltip/tooltip.component.mjs +4 -4
- package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +138 -0
- package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +47 -0
- package/{esm2020 → esm2022}/lib/overlay/modal/dialog-stack.service.mjs +4 -4
- package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +146 -0
- package/esm2022/lib/overlay/modal/modal.component.mjs +31 -0
- package/{esm2020 → esm2022}/lib/overlay/modal/side-sheet/side-sheet.component.mjs +4 -4
- package/esm2022/lib/overlay/overlay-outlet.component.mjs +98 -0
- package/{esm2020 → esm2022}/lib/overlay/overlay.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/overlay/overlay.service.mjs +5 -5
- package/{esm2020 → esm2022}/lib/overlay/toast/toast-action.component.mjs +4 -4
- package/esm2022/lib/overlay/toast/toast.component.mjs +41 -0
- package/{esm2020 → esm2022}/lib/riv.module.mjs +227 -227
- package/esm2022/lib/size/size.directive.mjs +33 -0
- package/esm2022/lib/table/simple-table/coordinate-helper.mjs +61 -0
- package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +36 -0
- package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +37 -0
- package/{esm2020 → esm2022}/lib/table/simple-table/simple-table-row.component.mjs +4 -4
- package/esm2022/lib/table/simple-table/simple-table.component.mjs +104 -0
- package/esm2022/lib/table/table/clipboard.mjs +182 -0
- package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +116 -0
- package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +383 -0
- package/{esm2020 → esm2022}/lib/table/table/state-helpers/display-helpers.mjs +1 -1
- package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +123 -0
- package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +164 -0
- package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +139 -0
- package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +70 -0
- package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +72 -0
- package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +180 -0
- package/esm2022/lib/table/table/state.mjs +1035 -0
- package/esm2022/lib/table/table/table/table.component.mjs +367 -0
- package/{esm2020 → esm2022}/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +5 -5
- package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +227 -0
- package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +134 -0
- package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +35 -0
- package/{esm2020 → esm2022}/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +6 -6
- package/esm2022/lib/table/table/table-search/table-search.component.mjs +71 -0
- package/{esm2020 → esm2022}/lib/table/table/table-search-columns/table-search-columns.component.mjs +4 -4
- package/esm2022/lib/visibility/visibility.directive.mjs +34 -0
- package/esm2022/lib/visualization/chart/chart-scaling.mjs +380 -0
- package/esm2022/lib/visualization/chart/chart.component.mjs +626 -0
- package/esm2022/lib/visualization/chart/chart.mjs +3768 -0
- package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-cell.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-header-cell.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-row.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/data-table/data-table.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/donut/donut.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/funnel-chart/funnel-chart.component.mjs +5 -5
- package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +33 -0
- package/{esm2020 → esm2022}/lib/visualization/highlight/highlight.component.mjs +4 -4
- package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +20 -0
- package/esm2022/lib/visualization/intervals.mjs +63 -0
- package/{esm2020 → esm2022}/lib/visualization/issue/issue.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/legend-item/legend-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/metric/metric.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/mini-pie/mini-pie.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/visualization/progress/progress.component.mjs +5 -5
- package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +377 -0
- package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +18 -0
- package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +270 -0
- package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +74 -0
- package/esm2022/lib/visualization/time-series/time-series.component.mjs +374 -0
- package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +15 -0
- package/esm2022/lib/visualization/trend/trend.component.mjs +51 -0
- package/{esm2020 → esm2022}/lib/visualization/zero-state/zero-state.component.mjs +4 -4
- package/{fesm2020 → fesm2022}/rivet-health-design-system.mjs +670 -670
- package/{fesm2020 → fesm2022}/rivet-health-design-system.mjs.map +1 -1
- package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +1 -1
- package/lib/format/truncate/truncate.component.d.ts +1 -1
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/input/auto-focus/auto-focus.directive.d.ts +1 -1
- package/lib/input/button/button.component.d.ts +1 -1
- package/lib/input/calendar/calendar.component.d.ts +1 -1
- package/lib/input/checkbox/checkbox.component.d.ts +1 -1
- package/lib/input/currency-field/currency-field.component.d.ts +1 -1
- package/lib/input/date/date.component.d.ts +1 -1
- package/lib/input/date-range/date-range.component.d.ts +1 -1
- package/lib/input/filter-chip/filter-chip.component.d.ts +1 -1
- package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +1 -1
- package/lib/input/input-label/input-label.component.d.ts +1 -1
- package/lib/input/mentions-input/mentions-input.component.d.ts +1 -1
- package/lib/input/number-field/number-field.component.d.ts +1 -1
- package/lib/input/percentage-field/percentage-field.component.d.ts +1 -1
- package/lib/input/phone-field/phone-field.component.d.ts +1 -1
- package/lib/input/radio/radio.component.d.ts +1 -1
- package/lib/input/search/search.component.d.ts +1 -1
- package/lib/input/search-select/search-select.component.d.ts +1 -1
- package/lib/input/select/select/select.component.d.ts +1 -1
- package/lib/input/select/select-node/select-node.component.d.ts +1 -1
- package/lib/input/simple-select/simple-select.component.d.ts +1 -1
- package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +1 -1
- package/lib/input/text-field/text-field.component.d.ts +1 -1
- package/lib/input/textarea-field/textarea-field.component.d.ts +1 -1
- package/lib/input/validation-message/validation-message.component.d.ts +1 -1
- package/lib/layout/card/card-actions.component.d.ts +1 -1
- package/lib/layout/card/card-content.component.d.ts +1 -1
- package/lib/layout/card/card-header.component.d.ts +1 -1
- package/lib/layout/card/card-link.component.d.ts +1 -1
- package/lib/layout/card/card-media.component.d.ts +1 -1
- package/lib/layout/card/card.component.d.ts +1 -1
- package/lib/layout/setting-row/setting-row.component.d.ts +1 -1
- package/lib/load/loading/loading.component.d.ts +1 -1
- package/lib/load/loading-cover/loading-cover.component.d.ts +1 -1
- package/lib/navigation/editable-heading/editable-heading.component.d.ts +1 -1
- package/lib/navigation/link/link.component.d.ts +1 -1
- package/lib/navigation/page-header/page-header.component.d.ts +1 -1
- package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +1 -1
- package/lib/navigation/tabs/tab/tab.component.d.ts +1 -1
- package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +1 -1
- package/lib/navigation/views/edit-view/edit-view.component.d.ts +1 -1
- package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +3 -3
- package/lib/navigation/views/view-menu/view-menu.component.d.ts +1 -1
- package/lib/navigation/views/views/views.component.d.ts +1 -1
- package/lib/notification/badge/badge.component.d.ts +1 -1
- package/lib/notification/banner/banner-action.component.d.ts +1 -1
- package/lib/notification/banner/banner.component.d.ts +1 -1
- package/lib/notification/map-indicator/map-indicator.component.d.ts +1 -1
- package/lib/notification/notification-badge/notification-badge.component.d.ts +1 -1
- package/lib/overlay/callout/callout.component.d.ts +1 -1
- package/lib/overlay/callout/help/help.component.d.ts +1 -1
- package/lib/overlay/callout/lock-scroll.directive.d.ts +1 -1
- package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +1 -1
- package/lib/overlay/callout/menu/menu.component.d.ts +1 -1
- package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +1 -1
- package/lib/overlay/callout/tooltip/tooltip.component.d.ts +1 -1
- package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/overlay/modal/dialog/dialog.component.d.ts +1 -1
- package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +1 -1
- package/lib/overlay/modal/modal.component.d.ts +1 -1
- package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +1 -1
- package/lib/overlay/toast/toast.component.d.ts +1 -1
- package/lib/table/simple-table/simple-table-header-cell.component.d.ts +1 -1
- package/lib/table/simple-table/simple-table-row.component.d.ts +1 -1
- package/lib/table/table/table/table.component.d.ts +1 -1
- package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +1 -1
- package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +1 -1
- package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +1 -1
- package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +1 -1
- package/lib/table/table/table-search/table-search.component.d.ts +1 -1
- package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +1 -1
- package/lib/visualization/chart/chart.component.d.ts +1 -1
- package/lib/visualization/data-table/data-table-row.component.d.ts +1 -1
- package/lib/visualization/donut/donut.component.d.ts +1 -1
- package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +1 -1
- package/lib/visualization/highlight/highlight.component.d.ts +1 -1
- package/lib/visualization/issue/issue.component.d.ts +1 -1
- package/lib/visualization/legend-item/legend-item.component.d.ts +1 -1
- package/lib/visualization/metric/metric.component.d.ts +1 -1
- package/lib/visualization/mini-pie/mini-pie.component.d.ts +1 -1
- package/lib/visualization/progress/progress.component.d.ts +1 -1
- package/lib/visualization/stacked-column/stacked-column.component.d.ts +3 -3
- package/lib/visualization/stacked-row/stacked-row.component.d.ts +1 -1
- package/lib/visualization/time-series/time-series.component.d.ts +3 -3
- package/lib/visualization/trend/trend.component.d.ts +1 -1
- package/lib/visualization/zero-state/zero-state.component.d.ts +1 -1
- package/package.json +5 -11
- package/esm2020/lib/download/download.service.mjs +0 -47
- package/esm2020/lib/format/pipes/sentence-case.pipe.mjs +0 -61
- package/esm2020/lib/format/pipes/small-currency.pipe.mjs +0 -24
- package/esm2020/lib/format/pipes/small-number.pipe.mjs +0 -29
- package/esm2020/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
- package/esm2020/lib/format/truncate/truncate.component.mjs +0 -51
- package/esm2020/lib/icon/dom-cache.mjs +0 -32
- package/esm2020/lib/icon/icon.component.mjs +0 -86
- package/esm2020/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
- package/esm2020/lib/input/button/button.component.mjs +0 -139
- package/esm2020/lib/input/button-group/button-group.component.mjs +0 -39
- package/esm2020/lib/input/date/date.component.mjs +0 -279
- package/esm2020/lib/input/date-range/date-range.component.mjs +0 -477
- package/esm2020/lib/input/filter-chip/filter-chip.component.mjs +0 -47
- package/esm2020/lib/input/mentions-input/mentions-input.component.mjs +0 -745
- package/esm2020/lib/input/number-field/number-field.component.mjs +0 -125
- package/esm2020/lib/input/phone-field/phone-field.component.mjs +0 -74
- package/esm2020/lib/input/search-select/search-select.component.mjs +0 -189
- package/esm2020/lib/input/select/select/select.component.mjs +0 -178
- package/esm2020/lib/input/select/state.mjs +0 -882
- package/esm2020/lib/input/simple-select/simple-select.component.mjs +0 -178
- package/esm2020/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
- package/esm2020/lib/input/text-field/text-field.component.mjs +0 -115
- package/esm2020/lib/layout/card/card-content.component.mjs +0 -64
- package/esm2020/lib/layout/card/card-header.component.mjs +0 -201
- package/esm2020/lib/layout/card/card.component.mjs +0 -291
- package/esm2020/lib/load/loading/loading.component.mjs +0 -43
- package/esm2020/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
- package/esm2020/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
- package/esm2020/lib/navigation/views/state.mjs +0 -456
- package/esm2020/lib/navigation/views/views/views.component.mjs +0 -90
- package/esm2020/lib/notification/banner/banner-action.component.mjs +0 -48
- package/esm2020/lib/notification/banner/banner.component.mjs +0 -61
- package/esm2020/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
- package/esm2020/lib/notification/map-indicator/map-indicators.mjs +0 -15
- package/esm2020/lib/overlay/callout/callout.component.mjs +0 -130
- package/esm2020/lib/overlay/callout/callout.helpers.mjs +0 -113
- package/esm2020/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
- package/esm2020/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
- package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
- package/esm2020/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
- package/esm2020/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
- package/esm2020/lib/overlay/modal/modal.component.mjs +0 -31
- package/esm2020/lib/overlay/overlay-outlet.component.mjs +0 -98
- package/esm2020/lib/overlay/toast/toast.component.mjs +0 -41
- package/esm2020/lib/size/size.directive.mjs +0 -33
- package/esm2020/lib/table/simple-table/coordinate-helper.mjs +0 -61
- package/esm2020/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
- package/esm2020/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
- package/esm2020/lib/table/simple-table/simple-table.component.mjs +0 -104
- package/esm2020/lib/table/table/clipboard.mjs +0 -182
- package/esm2020/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
- package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +0 -383
- package/esm2020/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
- package/esm2020/lib/table/table/state-helpers/order-helpers.mjs +0 -164
- package/esm2020/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
- package/esm2020/lib/table/table/state-helpers/result-helpers.mjs +0 -70
- package/esm2020/lib/table/table/state-helpers/search-helpers.mjs +0 -72
- package/esm2020/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
- package/esm2020/lib/table/table/state.mjs +0 -1035
- package/esm2020/lib/table/table/table/table.component.mjs +0 -367
- package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
- package/esm2020/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
- package/esm2020/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
- package/esm2020/lib/table/table/table-search/table-search.component.mjs +0 -71
- package/esm2020/lib/visibility/visibility.directive.mjs +0 -34
- package/esm2020/lib/visualization/chart/chart-scaling.mjs +0 -380
- package/esm2020/lib/visualization/chart/chart.component.mjs +0 -626
- package/esm2020/lib/visualization/chart/chart.mjs +0 -3768
- package/esm2020/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
- package/esm2020/lib/visualization/highlight/highlight.helpers.mjs +0 -20
- package/esm2020/lib/visualization/intervals.mjs +0 -63
- package/esm2020/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
- package/esm2020/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
- package/esm2020/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
- package/esm2020/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
- package/esm2020/lib/visualization/time-series/time-series.component.mjs +0 -374
- package/esm2020/lib/visualization/time-series/time-series.helpers.mjs +0 -15
- package/esm2020/lib/visualization/trend/trend.component.mjs +0 -51
- package/fesm2015/rivet-health-design-system.mjs +0 -18370
- package/fesm2015/rivet-health-design-system.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/overlay/callout/select-callout-defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/util/local-storage.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/rivet-health-design-system.mjs +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export function createCellCoordinateCalculator(cells, totalColumns) {
|
|
2
|
+
// Pre-calculate coordinates for all cells
|
|
3
|
+
const cellCoordinates = [];
|
|
4
|
+
const grid = [];
|
|
5
|
+
let currentRow = 0;
|
|
6
|
+
let currentCol = 0;
|
|
7
|
+
// Process each cell and store its coordinates
|
|
8
|
+
for (let i = 0; i < cells.length; i++) {
|
|
9
|
+
const { rowspan, colspan } = cells[i];
|
|
10
|
+
// Find the next available position
|
|
11
|
+
while (true) {
|
|
12
|
+
// Ensure we have enough rows in our grid
|
|
13
|
+
while (grid.length <= currentRow) {
|
|
14
|
+
grid.push(new Array(totalColumns).fill(false));
|
|
15
|
+
}
|
|
16
|
+
// Check if current position is available
|
|
17
|
+
if (!grid[currentRow][currentCol]) {
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
// Move to next column
|
|
21
|
+
currentCol++;
|
|
22
|
+
if (currentCol >= totalColumns) {
|
|
23
|
+
currentCol = 0;
|
|
24
|
+
currentRow++;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Store coordinates for this cell
|
|
28
|
+
const startCoord = { row: currentRow, col: currentCol };
|
|
29
|
+
const endCoord = {
|
|
30
|
+
row: currentRow + rowspan - 1,
|
|
31
|
+
col: currentCol + colspan - 1,
|
|
32
|
+
};
|
|
33
|
+
cellCoordinates[i] = { start: startCoord, end: endCoord };
|
|
34
|
+
// Mark the positions this cell occupies as taken
|
|
35
|
+
for (let r = currentRow; r < currentRow + rowspan; r++) {
|
|
36
|
+
// Ensure we have enough rows
|
|
37
|
+
while (grid.length <= r) {
|
|
38
|
+
grid.push(new Array(totalColumns).fill(false));
|
|
39
|
+
}
|
|
40
|
+
for (let c = currentCol; c < currentCol + colspan; c++) {
|
|
41
|
+
if (c < totalColumns) {
|
|
42
|
+
grid[r][c] = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Move to next position for the next cell
|
|
47
|
+
currentCol++;
|
|
48
|
+
if (currentCol >= totalColumns) {
|
|
49
|
+
currentCol = 0;
|
|
50
|
+
currentRow++;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Return the lookup function
|
|
54
|
+
return function getCellCoordinates(cellIndex) {
|
|
55
|
+
if (cellIndex < 0 || cellIndex >= cells.length) {
|
|
56
|
+
throw new Error('Cell index out of bounds');
|
|
57
|
+
}
|
|
58
|
+
return cellCoordinates[cellIndex];
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS9zaW1wbGUtdGFibGUvY29vcmRpbmF0ZS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxLQUFhLEVBQ2IsWUFBb0I7SUFFcEIsMENBQTBDO0lBQzFDLE1BQU0sZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBZ0IsRUFBRSxDQUFDO0lBQzdCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFbkIsOENBQThDO0lBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEMsbUNBQW1DO1FBQ25DLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWix5Q0FBeUM7WUFDekMsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFFRCx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBQ1IsQ0FBQztZQUVELHNCQUFzQjtZQUN0QixVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksVUFBVSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUMvQixVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxVQUFVLEdBQWUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNwRSxNQUFNLFFBQVEsR0FBZTtZQUMzQixHQUFHLEVBQUUsVUFBVSxHQUFHLE9BQU8sR0FBRyxDQUFDO1lBQzdCLEdBQUcsRUFBRSxVQUFVLEdBQUcsT0FBTyxHQUFHLENBQUM7U0FDOUIsQ0FBQztRQUVGLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBRTFELGlEQUFpRDtRQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsVUFBVSxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELDZCQUE2QjtZQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsVUFBVSxFQUFFLENBQUM7UUFDYixJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUMvQixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsVUFBVSxFQUFFLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixPQUFPLFNBQVMsa0JBQWtCLENBQUMsU0FBaUI7UUFDbEQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ2VsbCA9IHtcbiAgcm93c3BhbjogbnVtYmVyO1xuICBjb2xzcGFuOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb29yZGluYXRlID0ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBCb3VuZHMgPSB7XG4gIHN0YXJ0OiBDb29yZGluYXRlO1xuICBlbmQ6IENvb3JkaW5hdGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2VsbENvb3JkaW5hdGVDYWxjdWxhdG9yKFxuICBjZWxsczogQ2VsbFtdLFxuICB0b3RhbENvbHVtbnM6IG51bWJlcixcbik6IChjZWxsSW5kZXg6IG51bWJlcikgPT4gQm91bmRzIHtcbiAgLy8gUHJlLWNhbGN1bGF0ZSBjb29yZGluYXRlcyBmb3IgYWxsIGNlbGxzXG4gIGNvbnN0IGNlbGxDb29yZGluYXRlczogQm91bmRzW10gPSBbXTtcbiAgY29uc3QgZ3JpZDogYm9vbGVhbltdW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRSb3cgPSAwO1xuICBsZXQgY3VycmVudENvbCA9IDA7XG5cbiAgLy8gUHJvY2VzcyBlYWNoIGNlbGwgYW5kIHN0b3JlIGl0cyBjb29yZGluYXRlc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyByb3dzcGFuLCBjb2xzcGFuIH0gPSBjZWxsc1tpXTtcblxuICAgIC8vIEZpbmQgdGhlIG5leHQgYXZhaWxhYmxlIHBvc2l0aW9uXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGVub3VnaCByb3dzIGluIG91ciBncmlkXG4gICAgICB3aGlsZSAoZ3JpZC5sZW5ndGggPD0gY3VycmVudFJvdykge1xuICAgICAgICBncmlkLnB1c2gobmV3IEFycmF5KHRvdGFsQ29sdW1ucykuZmlsbChmYWxzZSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBjdXJyZW50IHBvc2l0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgaWYgKCFncmlkW2N1cnJlbnRSb3ddW2N1cnJlbnRDb2xdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHRvIG5leHQgY29sdW1uXG4gICAgICBjdXJyZW50Q29sKys7XG4gICAgICBpZiAoY3VycmVudENvbCA+PSB0b3RhbENvbHVtbnMpIHtcbiAgICAgICAgY3VycmVudENvbCA9IDA7XG4gICAgICAgIGN1cnJlbnRSb3crKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdG9yZSBjb29yZGluYXRlcyBmb3IgdGhpcyBjZWxsXG4gICAgY29uc3Qgc3RhcnRDb29yZDogQ29vcmRpbmF0ZSA9IHsgcm93OiBjdXJyZW50Um93LCBjb2w6IGN1cnJlbnRDb2wgfTtcbiAgICBjb25zdCBlbmRDb29yZDogQ29vcmRpbmF0ZSA9IHtcbiAgICAgIHJvdzogY3VycmVudFJvdyArIHJvd3NwYW4gLSAxLFxuICAgICAgY29sOiBjdXJyZW50Q29sICsgY29sc3BhbiAtIDEsXG4gICAgfTtcblxuICAgIGNlbGxDb29yZGluYXRlc1tpXSA9IHsgc3RhcnQ6IHN0YXJ0Q29vcmQsIGVuZDogZW5kQ29vcmQgfTtcblxuICAgIC8vIE1hcmsgdGhlIHBvc2l0aW9ucyB0aGlzIGNlbGwgb2NjdXBpZXMgYXMgdGFrZW5cbiAgICBmb3IgKGxldCByID0gY3VycmVudFJvdzsgciA8IGN1cnJlbnRSb3cgKyByb3dzcGFuOyByKyspIHtcbiAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGVub3VnaCByb3dzXG4gICAgICB3aGlsZSAoZ3JpZC5sZW5ndGggPD0gcikge1xuICAgICAgICBncmlkLnB1c2gobmV3IEFycmF5KHRvdGFsQ29sdW1ucykuZmlsbChmYWxzZSkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBjID0gY3VycmVudENvbDsgYyA8IGN1cnJlbnRDb2wgKyBjb2xzcGFuOyBjKyspIHtcbiAgICAgICAgaWYgKGMgPCB0b3RhbENvbHVtbnMpIHtcbiAgICAgICAgICBncmlkW3JdW2NdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1vdmUgdG8gbmV4dCBwb3NpdGlvbiBmb3IgdGhlIG5leHQgY2VsbFxuICAgIGN1cnJlbnRDb2wrKztcbiAgICBpZiAoY3VycmVudENvbCA+PSB0b3RhbENvbHVtbnMpIHtcbiAgICAgIGN1cnJlbnRDb2wgPSAwO1xuICAgICAgY3VycmVudFJvdysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbG9va3VwIGZ1bmN0aW9uXG4gIHJldHVybiBmdW5jdGlvbiBnZXRDZWxsQ29vcmRpbmF0ZXMoY2VsbEluZGV4OiBudW1iZXIpOiBCb3VuZHMge1xuICAgIGlmIChjZWxsSW5kZXggPCAwIHx8IGNlbGxJbmRleCA+PSBjZWxscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2VsbCBpbmRleCBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxDb29yZGluYXRlc1tjZWxsSW5kZXhdO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SimpleTableCellComponent {
|
|
4
|
+
constructor(cdr, elementRef) {
|
|
5
|
+
this.cdr = cdr;
|
|
6
|
+
this.elementRef = elementRef;
|
|
7
|
+
}
|
|
8
|
+
get classes() {
|
|
9
|
+
return [
|
|
10
|
+
this.alignment,
|
|
11
|
+
this.pinned && 'pinned',
|
|
12
|
+
this.isLastRow && 'last-row',
|
|
13
|
+
]
|
|
14
|
+
.filter(Boolean)
|
|
15
|
+
.join(' ');
|
|
16
|
+
}
|
|
17
|
+
get leftPx() {
|
|
18
|
+
if (this.pinned && this.leftPinOffset != undefined) {
|
|
19
|
+
return this.leftPinOffset;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableCellComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SimpleTableCellComponent, selector: "[riv-simple-table-cell]", host: { properties: { "class": "this.classes", "style.left.px": "this.leftPx" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;background-color:inherit}:host:not(.last-row){border-bottom:var(--border-width) solid var(--border-light)}:host.pinned{position:sticky;z-index:var(--above-scroll-z-index)}\n", ":host.left{text-align:left}:host.center{text-align:center}:host.right{text-align:right}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableCellComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: '[riv-simple-table-cell]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;background-color:inherit}:host:not(.last-row){border-bottom:var(--border-width) solid var(--border-light)}:host.pinned{position:sticky;z-index:var(--above-scroll-z-index)}\n", ":host.left{text-align:left}:host.center{text-align:center}:host.right{text-align:right}\n"] }]
|
|
29
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { classes: [{
|
|
30
|
+
type: HostBinding,
|
|
31
|
+
args: ['class']
|
|
32
|
+
}], leftPx: [{
|
|
33
|
+
type: HostBinding,
|
|
34
|
+
args: ['style.left.px']
|
|
35
|
+
}] } });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhYmxlLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvc2ltcGxlLXRhYmxlL3NpbXBsZS10YWJsZS1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3NpbXBsZS10YWJsZS9zaW1wbGUtdGFibGUtY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7O0FBU3ZCLE1BQU0sT0FBTyx3QkFBd0I7SUFTbkMsWUFDUyxHQUFzQixFQUN0QixVQUE0QztRQUQ1QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFrQztJQUNsRCxDQUFDO0lBRUosSUFDSSxPQUFPO1FBQ1QsT0FBTztZQUNMLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVTtTQUM3QjthQUNFLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRUQsSUFDSSxNQUFNO1FBQ1IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBL0JVLHdCQUF3QjttR0FBeEIsd0JBQXdCLGtKQ2ZyQyw2QkFDQTs7NEZEY2Esd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTsrR0FpQjNDLE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPO2dCQVloQixNQUFNO3NCQURULFdBQVc7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3RhYmxlL3N0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW3Jpdi1zaW1wbGUtdGFibGUtY2VsbF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc2ltcGxlLXRhYmxlLWNlbGwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaW1wbGUtdGFibGUtY2VsbC5jb21wb25lbnQuY3NzJywgJy4vYWxpZ25tZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2ltcGxlVGFibGVDZWxsQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZXNlIGdldCBzZXQgYXV0b21hdGljYWxseSBieSB0aGUgcGFyZW50IFNpbXBsZVRhYmxlQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGFsaWdubWVudD86IFJpdlRhYmxlLkNvbHVtbkFsaWdubWVudDtcbiAgcHVibGljIHBpbm5lZD86IGJvb2xlYW47XG4gIHB1YmxpYyBpc0xhc3RSb3c/OiBib29sZWFuO1xuICBwdWJsaWMgbGVmdFBpbk9mZnNldD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MVGFibGVDZWxsRWxlbWVudD4sXG4gICkge31cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYWxpZ25tZW50LFxuICAgICAgdGhpcy5waW5uZWQgJiYgJ3Bpbm5lZCcsXG4gICAgICB0aGlzLmlzTGFzdFJvdyAmJiAnbGFzdC1yb3cnLFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmxlZnQucHgnKVxuICBnZXQgbGVmdFB4KCkge1xuICAgIGlmICh0aGlzLnBpbm5lZCAmJiB0aGlzLmxlZnRQaW5PZmZzZXQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZWZ0UGluT2Zmc2V0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SimpleTableHeaderCellComponent {
|
|
4
|
+
constructor(cdr, elementRef) {
|
|
5
|
+
this.cdr = cdr;
|
|
6
|
+
this.elementRef = elementRef;
|
|
7
|
+
}
|
|
8
|
+
get classes() {
|
|
9
|
+
return [this.alignment, this.pinned && 'pinned'].filter(Boolean).join(' ');
|
|
10
|
+
}
|
|
11
|
+
get leftPx() {
|
|
12
|
+
if (this.pinned && this.leftPinOffset != undefined) {
|
|
13
|
+
return this.leftPinOffset;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
get width() {
|
|
18
|
+
return this.elementRef.nativeElement.offsetWidth;
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableHeaderCellComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SimpleTableHeaderCellComponent, selector: "[riv-simple-table-header-cell]", inputs: { dataType: "dataType", pinned: "pinned" }, host: { properties: { "class": "this.classes", "style.left.px": "this.leftPx" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);padding:var(--size-xxsmall) var(--size-small);position:sticky;top:0;font-size:var(--size-medium);font-weight:var(--font-weight-heavy);line-height:1;padding:var(--size-xsmall) var(--size-small);vertical-align:middle;height:calc(var(--base-grid-size) * 8);white-space:nowrap}:host.pinned{z-index:var(--above-scroll-z-index)}:host:not(:last-child){border-right:var(--border-width) solid var(--border-light)}\n", ":host.left{text-align:left}:host.center{text-align:center}:host.right{text-align:right}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableHeaderCellComponent, decorators: [{
|
|
24
|
+
type: Component,
|
|
25
|
+
args: [{ selector: '[riv-simple-table-header-cell]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);padding:var(--size-xxsmall) var(--size-small);position:sticky;top:0;font-size:var(--size-medium);font-weight:var(--font-weight-heavy);line-height:1;padding:var(--size-xsmall) var(--size-small);vertical-align:middle;height:calc(var(--base-grid-size) * 8);white-space:nowrap}:host.pinned{z-index:var(--above-scroll-z-index)}:host:not(:last-child){border-right:var(--border-width) solid var(--border-light)}\n", ":host.left{text-align:left}:host.center{text-align:center}:host.right{text-align:right}\n"] }]
|
|
26
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { dataType: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}], pinned: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}], classes: [{
|
|
31
|
+
type: HostBinding,
|
|
32
|
+
args: ['class']
|
|
33
|
+
}], leftPx: [{
|
|
34
|
+
type: HostBinding,
|
|
35
|
+
args: ['style.left.px']
|
|
36
|
+
}] } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhYmxlLWhlYWRlci1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3NpbXBsZS10YWJsZS9zaW1wbGUtdGFibGUtaGVhZGVyLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvc2ltcGxlLXRhYmxlL3NpbXBsZS10YWJsZS1oZWFkZXItY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDOztBQVN2QixNQUFNLE9BQU8sOEJBQThCO0lBV3pDLFlBQ1MsR0FBc0IsRUFDdEIsVUFBNEM7UUFENUMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0M7SUFDbEQsQ0FBQztJQUVKLElBQ0ksT0FBTztRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFDSSxNQUFNO1FBQ1IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztJQUNuRCxDQUFDOytHQS9CVSw4QkFBOEI7bUdBQTlCLDhCQUE4Qiw2TUNoQjNDLDZCQUNBOzs0RkRlYSw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBQ0UsZ0NBQWdDLG1CQUd6Qix1QkFBdUIsQ0FBQyxNQUFNOytHQUd0QyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFjRixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTztnQkFNaEIsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vdGFibGUvc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbcml2LXNpbXBsZS10YWJsZS1oZWFkZXItY2VsbF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc2ltcGxlLXRhYmxlLWhlYWRlci1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2ltcGxlLXRhYmxlLWhlYWRlci1jZWxsLmNvbXBvbmVudC5jc3MnLCAnLi9hbGlnbm1lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVUYWJsZUhlYWRlckNlbGxDb21wb25lbnQge1xuICBASW5wdXQoKSBkYXRhVHlwZT86IFJpdlRhYmxlLkNvbHVtbkRhdGFUeXBlO1xuXG4gIEBJbnB1dCgpIHBpbm5lZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBzZXQgYXV0b21hdGljYWxseSBieSB0aGUgcGFyZW50IFNpbXBsZVRhYmxlQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGFsaWdubWVudD86IFJpdlRhYmxlLkNvbHVtbkFsaWdubWVudDtcbiAgcHVibGljIGxlZnRQaW5PZmZzZXQ/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+LFxuICApIHt9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc2VzKCkge1xuICAgIHJldHVybiBbdGhpcy5hbGlnbm1lbnQsIHRoaXMucGlubmVkICYmICdwaW5uZWQnXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5sZWZ0LnB4JylcbiAgZ2V0IGxlZnRQeCgpIHtcbiAgICBpZiAodGhpcy5waW5uZWQgJiYgdGhpcy5sZWZ0UGluT2Zmc2V0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVmdFBpbk9mZnNldDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICB9XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -4,10 +4,10 @@ export class SimpleTableRowComponent {
|
|
|
4
4
|
constructor() {
|
|
5
5
|
this.selected = false;
|
|
6
6
|
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SimpleTableRowComponent, selector: "[riv-simple-table-row]", inputs: { selected: "selected" }, host: { properties: { "class.selected": "this.selected" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:table-row;text-decoration:none;color:inherit;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}:host(a),:host(button){cursor:pointer}:host(a):hover,:host(button):hover{background-color:var(--surface-light-2)}:host(a):active,:host(button):active{background-color:var(--surface-light-3)}:host.selected{background-color:var(--surface-light-selected)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7
9
|
}
|
|
8
|
-
|
|
9
|
-
SimpleTableRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SimpleTableRowComponent, selector: "[riv-simple-table-row]", inputs: { selected: "selected" }, host: { properties: { "class.selected": "this.selected" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:table-row;text-decoration:none;color:inherit;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}:host(a),:host(button){cursor:pointer}:host(a):hover,:host(button):hover{background-color:var(--surface-light-2)}:host(a):active,:host(button):active{background-color:var(--surface-light-3)}:host.selected{background-color:var(--surface-light-selected)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SimpleTableRowComponent, decorators: [{
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableRowComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{ selector: '[riv-simple-table-row]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:table-row;text-decoration:none;color:inherit;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}:host(a),:host(button){cursor:pointer}:host(a):hover,:host(button):hover{background-color:var(--surface-light-2)}:host(a):active,:host(button):active{background-color:var(--surface-light-3)}:host.selected{background-color:var(--surface-light-selected)}\n"] }]
|
|
13
13
|
}], propDecorators: { selected: [{
|
|
@@ -16,4 +16,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
16
16
|
type: HostBinding,
|
|
17
17
|
args: ['class.selected']
|
|
18
18
|
}] } });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhYmxlLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS9zaW1wbGUtdGFibGUvc2ltcGxlLXRhYmxlLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS9zaW1wbGUtdGFibGUvc2ltcGxlLXRhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDOztBQVF2QixNQUFNLE9BQU8sdUJBQXVCO0lBTnBDO1FBU0UsYUFBUSxHQUFZLEtBQUssQ0FBQztLQUMzQjsrR0FKWSx1QkFBdUI7bUdBQXZCLHVCQUF1Qiw2SkNicEMsNkJBQ0E7OzRGRFlhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07OEJBSy9DLFFBQVE7c0JBRlAsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbcml2LXNpbXBsZS10YWJsZS1yb3ddJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbXBsZS10YWJsZS1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaW1wbGUtdGFibGUtcm93LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZVRhYmxlUm93Q29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3RlZCcpXG4gIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, } from '@angular/core';
|
|
2
|
+
import { RivTable } from '../table/state';
|
|
3
|
+
import { createCellCoordinateCalculator } from './coordinate-helper';
|
|
4
|
+
import { SimpleTableCellComponent } from './simple-table-cell.component';
|
|
5
|
+
import { SimpleTableHeaderCellComponent } from './simple-table-header-cell.component';
|
|
6
|
+
import { TableColumnHelpers } from '../table/state-helpers/column-helpers';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
export class SimpleTableComponent {
|
|
10
|
+
ngAfterContentChecked() {
|
|
11
|
+
this.setCellProperties();
|
|
12
|
+
}
|
|
13
|
+
setCellProperties() {
|
|
14
|
+
const { headerCells, dataCells } = this;
|
|
15
|
+
if (!headerCells || !dataCells)
|
|
16
|
+
return;
|
|
17
|
+
let runningWidthTotal = 0;
|
|
18
|
+
headerCells.forEach((headerCell, i) => {
|
|
19
|
+
const { dataType } = headerCell;
|
|
20
|
+
if (!dataType) {
|
|
21
|
+
const allowedTypes = RivTable.ColumnDataTypes.join(', ');
|
|
22
|
+
throw new Error(`Each header cell must define an appropriate dataType, one of ${allowedTypes}`);
|
|
23
|
+
}
|
|
24
|
+
const newAlignment = TableColumnHelpers.getColumnAlignment(dataType, i === 0);
|
|
25
|
+
const newLeftPinOffset = runningWidthTotal;
|
|
26
|
+
runningWidthTotal += headerCell.width;
|
|
27
|
+
const changed = headerCell.alignment != newAlignment ||
|
|
28
|
+
headerCell.leftPinOffset != newLeftPinOffset;
|
|
29
|
+
headerCell.alignment = newAlignment;
|
|
30
|
+
headerCell.leftPinOffset = newLeftPinOffset;
|
|
31
|
+
// Only mark for check when changed to prevent infinite cycles
|
|
32
|
+
if (changed) {
|
|
33
|
+
queueMicrotask(() => {
|
|
34
|
+
headerCell.cdr.markForCheck();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
const cellSpanData = dataCells.map(dataCell => {
|
|
39
|
+
const element = dataCell.elementRef.nativeElement;
|
|
40
|
+
return {
|
|
41
|
+
rowspan: parseInt(element.getAttribute('rowspan') || '1', 10),
|
|
42
|
+
colspan: parseInt(element.getAttribute('colspan') || '1', 10),
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
// When there are no header cells, calculate totalColumns from the first <tr>
|
|
46
|
+
let totalColumns = headerCells.length;
|
|
47
|
+
if (totalColumns === 0 && dataCells.length > 0) {
|
|
48
|
+
const firstRow = dataCells.first?.elementRef.nativeElement.parentElement;
|
|
49
|
+
if (firstRow) {
|
|
50
|
+
// Count td elements in the first row and sum their colspans
|
|
51
|
+
const cellsInFirstRow = Array.from(firstRow.querySelectorAll('td[riv-simple-table-cell]'));
|
|
52
|
+
totalColumns = cellsInFirstRow.reduce((sum, cell) => {
|
|
53
|
+
const colspan = parseInt(cell.getAttribute('colspan') || '1', 10);
|
|
54
|
+
return sum + colspan;
|
|
55
|
+
}, 0);
|
|
56
|
+
}
|
|
57
|
+
// Fallback to 1 if we couldn't determine
|
|
58
|
+
if (totalColumns === 0) {
|
|
59
|
+
totalColumns = 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const getCellCoordinates = createCellCoordinateCalculator(cellSpanData, totalColumns);
|
|
63
|
+
const maxRow = Math.max(...dataCells.map((_, i) => getCellCoordinates(i).end.row));
|
|
64
|
+
dataCells.forEach((dataCell, cellIndex) => {
|
|
65
|
+
const bounds = getCellCoordinates(cellIndex);
|
|
66
|
+
const headerCell = headerCells.get(bounds.start.col);
|
|
67
|
+
let changed = false;
|
|
68
|
+
if (headerCell) {
|
|
69
|
+
changed =
|
|
70
|
+
dataCell.alignment != headerCell.alignment ||
|
|
71
|
+
dataCell.pinned != headerCell.pinned ||
|
|
72
|
+
dataCell.leftPinOffset != headerCell.leftPinOffset;
|
|
73
|
+
dataCell.alignment = headerCell.alignment;
|
|
74
|
+
dataCell.pinned = headerCell.pinned;
|
|
75
|
+
dataCell.leftPinOffset = headerCell.leftPinOffset;
|
|
76
|
+
}
|
|
77
|
+
const newIsLastRow = bounds.end.row === maxRow;
|
|
78
|
+
changed = changed || dataCell.isLastRow != newIsLastRow;
|
|
79
|
+
dataCell.isLastRow = newIsLastRow;
|
|
80
|
+
// Only mark for check when changed to prevent infinite cycles
|
|
81
|
+
if (changed) {
|
|
82
|
+
queueMicrotask(() => {
|
|
83
|
+
dataCell.cdr.markForCheck();
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SimpleTableComponent, selector: "riv-simple-table", queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "headerCells", predicate: SimpleTableHeaderCellComponent, descendants: true }, { propertyName: "dataCells", predicate: SimpleTableCellComponent, descendants: true }], ngImport: i0, template: "<div class=\"header\" *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n</div>\n<div class=\"container\" tabindex=\"0\">\n <table>\n <ng-content></ng-content>\n </table>\n</div>\n", styles: [":host{display:grid;width:100%;min-height:0}.header{border-width:var(--border-width) var(--border-width) 0 var(--border-width);border-style:solid;border-color:var(--border-light);border-top-left-radius:var(--border-radius-medium);border-top-right-radius:var(--border-radius-medium)}.header+.container{border-top-left-radius:0;border-top-right-radius:0}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleTableComponent, decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{ selector: 'riv-simple-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"header\" *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n</div>\n<div class=\"container\" tabindex=\"0\">\n <table>\n <ng-content></ng-content>\n </table>\n</div>\n", styles: [":host{display:grid;width:100%;min-height:0}.header{border-width:var(--border-width) var(--border-width) 0 var(--border-width);border-style:solid;border-color:var(--border-light);border-top-left-radius:var(--border-radius-medium);border-top-right-radius:var(--border-radius-medium)}.header+.container{border-top-left-radius:0;border-top-right-radius:0}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}\n"] }]
|
|
94
|
+
}], propDecorators: { headerTemplate: [{
|
|
95
|
+
type: ContentChild,
|
|
96
|
+
args: ['header']
|
|
97
|
+
}], headerCells: [{
|
|
98
|
+
type: ContentChildren,
|
|
99
|
+
args: [SimpleTableHeaderCellComponent, { descendants: true }]
|
|
100
|
+
}], dataCells: [{
|
|
101
|
+
type: ContentChildren,
|
|
102
|
+
args: [SimpleTableCellComponent, { descendants: true }]
|
|
103
|
+
}] } });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3NpbXBsZS10YWJsZS9zaW1wbGUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvc2ltcGxlLXRhYmxlL3NpbXBsZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxHQUdoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQVEzRSxNQUFNLE9BQU8sb0JBQW9CO0lBVS9CLHFCQUFxQjtRQUNuQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUV2QyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDaEMsSUFB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d0IsZ0RDNUIzQyx5T0FRQTs7NEZEYWEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUkvQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFJZCxXQUFXO3NCQURsQixlQUFlO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJOUQsU0FBUztzQkFEaEIsZUFBZTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3RhYmxlL3N0YXRlJztcbmltcG9ydCB7IGNyZWF0ZUNlbGxDb29yZGluYXRlQ2FsY3VsYXRvciB9IGZyb20gJy4vY29vcmRpbmF0ZS1oZWxwZXInO1xuaW1wb3J0IHsgU2ltcGxlVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9zaW1wbGUtdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2ltcGxlVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9zaW1wbGUtdGFibGUtaGVhZGVyLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQ29sdW1uSGVscGVycyB9IGZyb20gJy4uL3RhYmxlL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc2ltcGxlLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbXBsZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpbXBsZS10YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBAQ29udGVudENoaWxkKCdoZWFkZXInKVxuICBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2ltcGxlVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgaGVhZGVyQ2VsbHM/OiBRdWVyeUxpc3Q8U2ltcGxlVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFNpbXBsZVRhYmxlQ2VsbENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIGRhdGFDZWxscz86IFF1ZXJ5TGlzdDxTaW1wbGVUYWJsZUNlbGxDb21wb25lbnQ+O1xuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICB0aGlzLnNldENlbGxQcm9wZXJ0aWVzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENlbGxQcm9wZXJ0aWVzKCkge1xuICAgIGNvbnN0IHsgaGVhZGVyQ2VsbHMsIGRhdGFDZWxscyB9ID0gdGhpcztcbiAgICBpZiAoIWhlYWRlckNlbGxzIHx8ICFkYXRhQ2VsbHMpIHJldHVybjtcblxuICAgIGxldCBydW5uaW5nV2lkdGhUb3RhbCA9IDA7XG4gICAgaGVhZGVyQ2VsbHMuZm9yRWFjaCgoaGVhZGVyQ2VsbCwgaSkgPT4ge1xuICAgICAgY29uc3QgeyBkYXRhVHlwZSB9ID0gaGVhZGVyQ2VsbDtcbiAgICAgIGlmICghZGF0YVR5cGUpIHtcbiAgICAgICAgY29uc3QgYWxsb3dlZFR5cGVzID0gUml2VGFibGUuQ29sdW1uRGF0YVR5cGVzLmpvaW4oJywgJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRWFjaCBoZWFkZXIgY2VsbCBtdXN0IGRlZmluZSBhbiBhcHByb3ByaWF0ZSBkYXRhVHlwZSwgb25lIG9mICR7YWxsb3dlZFR5cGVzfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0FsaWdubWVudCA9IFRhYmxlQ29sdW1uSGVscGVycy5nZXRDb2x1bW5BbGlnbm1lbnQoXG4gICAgICAgIGRhdGFUeXBlLFxuICAgICAgICBpID09PSAwLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0xlZnRQaW5PZmZzZXQgPSBydW5uaW5nV2lkdGhUb3RhbDtcbiAgICAgIHJ1bm5pbmdXaWR0aFRvdGFsICs9IGhlYWRlckNlbGwud2lkdGg7XG5cbiAgICAgIGNvbnN0IGNoYW5nZWQgPVxuICAgICAgICBoZWFkZXJDZWxsLmFsaWdubWVudCAhPSBuZXdBbGlnbm1lbnQgfHxcbiAgICAgICAgaGVhZGVyQ2VsbC5sZWZ0UGluT2Zmc2V0ICE9IG5ld0xlZnRQaW5PZmZzZXQ7XG4gICAgICBoZWFkZXJDZWxsLmFsaWdubWVudCA9IG5ld0FsaWdubWVudDtcbiAgICAgIGhlYWRlckNlbGwubGVmdFBpbk9mZnNldCA9IG5ld0xlZnRQaW5PZmZzZXQ7XG5cbiAgICAgIC8vIE9ubHkgbWFyayBmb3IgY2hlY2sgd2hlbiBjaGFuZ2VkIHRvIHByZXZlbnQgaW5maW5pdGUgY3ljbGVzXG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgaGVhZGVyQ2VsbC5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgY2VsbFNwYW5EYXRhID0gZGF0YUNlbGxzLm1hcChkYXRhQ2VsbCA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZGF0YUNlbGwuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93c3BhbjogcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Jvd3NwYW4nKSB8fCAnMScsIDEwKSxcbiAgICAgICAgY29sc3BhbjogcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSB8fCAnMScsIDEwKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBXaGVuIHRoZXJlIGFyZSBubyBoZWFkZXIgY2VsbHMsIGNhbGN1bGF0ZSB0b3RhbENvbHVtbnMgZnJvbSB0aGUgZmlyc3QgPHRyPlxuICAgIGxldCB0b3RhbENvbHVtbnMgPSBoZWFkZXJDZWxscy5sZW5ndGg7XG4gICAgaWYgKHRvdGFsQ29sdW1ucyA9PT0gMCAmJiBkYXRhQ2VsbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RSb3cgPSBkYXRhQ2VsbHMuZmlyc3Q/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgaWYgKGZpcnN0Um93KSB7XG4gICAgICAgIC8vIENvdW50IHRkIGVsZW1lbnRzIGluIHRoZSBmaXJzdCByb3cgYW5kIHN1bSB0aGVpciBjb2xzcGFuc1xuICAgICAgICBjb25zdCBjZWxsc0luRmlyc3RSb3cgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIGZpcnN0Um93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkW3Jpdi1zaW1wbGUtdGFibGUtY2VsbF0nKSxcbiAgICAgICAgKTtcbiAgICAgICAgdG90YWxDb2x1bW5zID0gY2VsbHNJbkZpcnN0Um93LnJlZHVjZSgoc3VtLCBjZWxsKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sc3BhbiA9IHBhcnNlSW50KGNlbGwuZ2V0QXR0cmlidXRlKCdjb2xzcGFuJykgfHwgJzEnLCAxMCk7XG4gICAgICAgICAgcmV0dXJuIHN1bSArIGNvbHNwYW47XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgdG8gMSBpZiB3ZSBjb3VsZG4ndCBkZXRlcm1pbmVcbiAgICAgIGlmICh0b3RhbENvbHVtbnMgPT09IDApIHtcbiAgICAgICAgdG90YWxDb2x1bW5zID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBnZXRDZWxsQ29vcmRpbmF0ZXMgPSBjcmVhdGVDZWxsQ29vcmRpbmF0ZUNhbGN1bGF0b3IoXG4gICAgICBjZWxsU3BhbkRhdGEsXG4gICAgICB0b3RhbENvbHVtbnMsXG4gICAgKTtcblxuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KFxuICAgICAgLi4uZGF0YUNlbGxzLm1hcCgoXywgaSkgPT4gZ2V0Q2VsbENvb3JkaW5hdGVzKGkpLmVuZC5yb3cpLFxuICAgICk7XG5cbiAgICBkYXRhQ2VsbHMuZm9yRWFjaCgoZGF0YUNlbGwsIGNlbGxJbmRleCkgPT4ge1xuICAgICAgY29uc3QgYm91bmRzID0gZ2V0Q2VsbENvb3JkaW5hdGVzKGNlbGxJbmRleCk7XG5cbiAgICAgIGNvbnN0IGhlYWRlckNlbGwgPSBoZWFkZXJDZWxscy5nZXQoYm91bmRzLnN0YXJ0LmNvbCk7XG4gICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKGhlYWRlckNlbGwpIHtcbiAgICAgICAgY2hhbmdlZCA9XG4gICAgICAgICAgZGF0YUNlbGwuYWxpZ25tZW50ICE9IGhlYWRlckNlbGwuYWxpZ25tZW50IHx8XG4gICAgICAgICAgZGF0YUNlbGwucGlubmVkICE9IGhlYWRlckNlbGwucGlubmVkIHx8XG4gICAgICAgICAgZGF0YUNlbGwubGVmdFBpbk9mZnNldCAhPSBoZWFkZXJDZWxsLmxlZnRQaW5PZmZzZXQ7XG5cbiAgICAgICAgZGF0YUNlbGwuYWxpZ25tZW50ID0gaGVhZGVyQ2VsbC5hbGlnbm1lbnQ7XG4gICAgICAgIGRhdGFDZWxsLnBpbm5lZCA9IGhlYWRlckNlbGwucGlubmVkO1xuICAgICAgICBkYXRhQ2VsbC5sZWZ0UGluT2Zmc2V0ID0gaGVhZGVyQ2VsbC5sZWZ0UGluT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdJc0xhc3RSb3cgPSBib3VuZHMuZW5kLnJvdyA9PT0gbWF4Um93O1xuICAgICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgZGF0YUNlbGwuaXNMYXN0Um93ICE9IG5ld0lzTGFzdFJvdztcbiAgICAgIGRhdGFDZWxsLmlzTGFzdFJvdyA9IG5ld0lzTGFzdFJvdztcblxuICAgICAgLy8gT25seSBtYXJrIGZvciBjaGVjayB3aGVuIGNoYW5nZWQgdG8gcHJldmVudCBpbmZpbml0ZSBjeWNsZXNcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICBkYXRhQ2VsbC5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHRhYmluZGV4PVwiMFwiPlxuICA8dGFibGU+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3RhYmxlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { sumBy } from 'lodash';
|
|
2
|
+
/**
|
|
3
|
+
* Clipboard serialization for `riv-table`.
|
|
4
|
+
*
|
|
5
|
+
* Rows that have a link render as `<a class="row-link">` rather than `<tr>`, and
|
|
6
|
+
* the browser's clipboard serializer does not treat those as table rows — the
|
|
7
|
+
* copied content pastes into a spreadsheet as one lateral run instead of a grid.
|
|
8
|
+
* These helpers rebuild the rendered grid so that copied content pastes as rows
|
|
9
|
+
* and columns.
|
|
10
|
+
*/
|
|
11
|
+
export var RivTableClipboard;
|
|
12
|
+
(function (RivTableClipboard) {
|
|
13
|
+
/** Cells that hold controls rather than data. */
|
|
14
|
+
const controlCellSelector = 'th.selection-head, th.menu-head, td.selection-body, td.menu-body';
|
|
15
|
+
/** The column name within a header cell; the rest of the cell is controls. */
|
|
16
|
+
const headerLabelSelector = '.header-wrapper';
|
|
17
|
+
/** Elements whose text exists for assistive technology only. */
|
|
18
|
+
const assistiveTextSelector = 'riv-sr-only';
|
|
19
|
+
/** Rows that stand in for data rather than carrying it. */
|
|
20
|
+
const fillerRowSelector = 'riv-zero-state';
|
|
21
|
+
/** Elements that own their own clipboard behavior. */
|
|
22
|
+
const editableSelector = 'input, textarea, select, [contenteditable=""], [contenteditable="true"]';
|
|
23
|
+
/** Whether the copy came from a control that serializes its own value. */
|
|
24
|
+
function isEditable(target) {
|
|
25
|
+
return (target instanceof Element && target.closest(editableSelector) !== null);
|
|
26
|
+
}
|
|
27
|
+
RivTableClipboard.isEditable = isEditable;
|
|
28
|
+
/**
|
|
29
|
+
* Whether `host` is the first element of its kind that the selection touches.
|
|
30
|
+
* A selection can span several tables; deferring to the first keeps instances
|
|
31
|
+
* from overwriting each other's clipboard data.
|
|
32
|
+
*/
|
|
33
|
+
function ownsSelection(host, isSelected) {
|
|
34
|
+
return (Array.from(document.querySelectorAll(host.localName)).find(element => isSelected(element)) === host);
|
|
35
|
+
}
|
|
36
|
+
RivTableClipboard.ownsSelection = ownsSelection;
|
|
37
|
+
/**
|
|
38
|
+
* Serializes the selected region of `tables` (one per row group), or null when
|
|
39
|
+
* the selection covers at most one cell — those are left to the browser so
|
|
40
|
+
* that copying part of a cell's text keeps working.
|
|
41
|
+
*
|
|
42
|
+
* `endpoints` are where the selection starts and ends, which narrow the copied
|
|
43
|
+
* columns to that span. A selection is a linear range in reading order, so
|
|
44
|
+
* dragging down one column touches every column in between; the endpoints are
|
|
45
|
+
* what distinguish "this column" from "these rows".
|
|
46
|
+
*/
|
|
47
|
+
function extract(tables, isSelected, endpoints = []) {
|
|
48
|
+
const layouts = tables.map(layout);
|
|
49
|
+
const columns = selectedColumns(layouts, isSelected, endpoints);
|
|
50
|
+
const headers = layouts.flatMap(l => l.header);
|
|
51
|
+
const rows = layouts
|
|
52
|
+
.flatMap(l => l.body)
|
|
53
|
+
.filter(row => selectedCount(row, isSelected) > 0);
|
|
54
|
+
// Header cells own the pointer for column reordering, so a drag cannot
|
|
55
|
+
// reach them; the header comes along with any copied data instead.
|
|
56
|
+
const header = headers.find(row => selectedCount(row, isSelected) > 0) ??
|
|
57
|
+
(rows.length > 0 ? headers[0] : undefined);
|
|
58
|
+
if (columns.length === 0 ||
|
|
59
|
+
sumBy([...(header ? [header] : []), ...rows], row => selectedCount(row, isSelected)) < 2)
|
|
60
|
+
return null;
|
|
61
|
+
return {
|
|
62
|
+
text: toText(header, rows, columns),
|
|
63
|
+
html: toHtml(header, rows, columns),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
RivTableClipboard.extract = extract;
|
|
67
|
+
function toText(header, rows, columns) {
|
|
68
|
+
return [
|
|
69
|
+
...(header ? [columns.map(column => headerText(header[column]))] : []),
|
|
70
|
+
...rows.map(row => columns.map(column => text(row[column]))),
|
|
71
|
+
]
|
|
72
|
+
.map(cells => cells.join('\t'))
|
|
73
|
+
.join('\n');
|
|
74
|
+
}
|
|
75
|
+
function toHtml(header, rows, columns) {
|
|
76
|
+
const cells = (values, tag) => values.map(value => `<${tag}>${escapeHtml(value)}</${tag}>`).join('');
|
|
77
|
+
return [
|
|
78
|
+
'<table>',
|
|
79
|
+
header
|
|
80
|
+
? `<thead><tr>${cells(columns.map(column => headerText(header[column])), 'th')}</tr></thead>`
|
|
81
|
+
: '',
|
|
82
|
+
`<tbody>${rows
|
|
83
|
+
.map(row => `<tr>${cells(columns.map(column => text(row[column])), 'td')}</tr>`)
|
|
84
|
+
.join('')}</tbody>`,
|
|
85
|
+
'</table>',
|
|
86
|
+
].join('');
|
|
87
|
+
}
|
|
88
|
+
function layout(table) {
|
|
89
|
+
return {
|
|
90
|
+
header: grid(Array.from(table.querySelectorAll(':scope > thead > tr')).filter(isDataRow)),
|
|
91
|
+
body: grid(Array.from(table.querySelectorAll(':scope > tbody > tr, :scope > tbody > a.row-link')).filter(isDataRow)),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Maps rows onto a column grid. Cells covered by a rowspan repeat the spanning
|
|
96
|
+
* cell so that every line has one value per column, matching how CSV export
|
|
97
|
+
* flattens spans.
|
|
98
|
+
*/
|
|
99
|
+
function grid(rows) {
|
|
100
|
+
const cells = rows.map(() => []);
|
|
101
|
+
rows.forEach((row, rowIndex) => {
|
|
102
|
+
let column = 0;
|
|
103
|
+
for (const cell of dataCells(row)) {
|
|
104
|
+
while (cells[rowIndex][column] !== undefined)
|
|
105
|
+
column++;
|
|
106
|
+
const rowSpan = Math.max(1, cell.rowSpan);
|
|
107
|
+
const colSpan = Math.max(1, cell.colSpan);
|
|
108
|
+
for (let r = rowIndex; r <= Math.min(rows.length - 1, rowIndex + rowSpan - 1); r++)
|
|
109
|
+
for (let c = column; c < column + colSpan; c++)
|
|
110
|
+
cells[r][c] = cell;
|
|
111
|
+
column += colSpan;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return cells;
|
|
115
|
+
}
|
|
116
|
+
function dataCells(row) {
|
|
117
|
+
return Array.from(row.querySelectorAll(':scope > td, :scope > th')).filter(cell => !cell.matches(controlCellSelector));
|
|
118
|
+
}
|
|
119
|
+
/** Excludes the zero-state row, which spans every column. */
|
|
120
|
+
function isDataRow(row) {
|
|
121
|
+
return (row.querySelector(fillerRowSelector) === null &&
|
|
122
|
+
dataCells(row).every(cell => cell.colSpan <= 1));
|
|
123
|
+
}
|
|
124
|
+
function selectedColumns(layouts, isSelected, endpoints) {
|
|
125
|
+
const columns = new Set();
|
|
126
|
+
for (const { header, body } of layouts)
|
|
127
|
+
for (const row of [...header, ...body])
|
|
128
|
+
row.forEach((cell, column) => {
|
|
129
|
+
if (cell !== undefined && isSelected(cell))
|
|
130
|
+
columns.add(column);
|
|
131
|
+
});
|
|
132
|
+
const touched = [...columns].sort((a, b) => a - b);
|
|
133
|
+
// Both ends have to land in a cell to describe a span; anything else (a
|
|
134
|
+
// select-all, an endpoint on a row rather than a cell) keeps every column.
|
|
135
|
+
const span = endpoints
|
|
136
|
+
.map(node => (node ? columnOf(layouts, node) : undefined))
|
|
137
|
+
.filter((column) => column !== undefined);
|
|
138
|
+
return span.length === endpoints.length && span.length > 1
|
|
139
|
+
? touched.filter(column => column >= Math.min(...span) && column <= Math.max(...span))
|
|
140
|
+
: touched;
|
|
141
|
+
}
|
|
142
|
+
function columnOf(layouts, node) {
|
|
143
|
+
for (const { header, body } of layouts)
|
|
144
|
+
for (const row of [...header, ...body]) {
|
|
145
|
+
const column = row.findIndex(cell => cell?.contains(node) === true);
|
|
146
|
+
if (column >= 0)
|
|
147
|
+
return column;
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
function selectedCount(row, isSelected) {
|
|
152
|
+
return row.filter(cell => cell !== undefined && isSelected(cell)).length;
|
|
153
|
+
}
|
|
154
|
+
function headerText(cell) {
|
|
155
|
+
return text(cell?.querySelector(headerLabelSelector) ?? cell);
|
|
156
|
+
}
|
|
157
|
+
function text(cell) {
|
|
158
|
+
return cell ? visibleText(cell).replace(/\s+/g, ' ').trim() : '';
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Template indentation lands in the DOM as newlines and runs of spaces, which
|
|
162
|
+
* split a single row across several spreadsheet rows unless collapsed by the
|
|
163
|
+
* caller. Comment anchors and screen-reader-only content are dropped, and
|
|
164
|
+
* sibling nodes are separated so that adjacent elements do not run together.
|
|
165
|
+
*/
|
|
166
|
+
function visibleText(node) {
|
|
167
|
+
if (node instanceof Text)
|
|
168
|
+
return node.nodeValue ?? '';
|
|
169
|
+
if (node instanceof Element)
|
|
170
|
+
return node.matches(assistiveTextSelector)
|
|
171
|
+
? ''
|
|
172
|
+
: Array.from(node.childNodes).map(visibleText).join(' ');
|
|
173
|
+
return '';
|
|
174
|
+
}
|
|
175
|
+
function escapeHtml(value) {
|
|
176
|
+
return value
|
|
177
|
+
.replace(/&/g, '&')
|
|
178
|
+
.replace(/</g, '<')
|
|
179
|
+
.replace(/>/g, '>');
|
|
180
|
+
}
|
|
181
|
+
})(RivTableClipboard || (RivTableClipboard = {}));
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFL0I7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLEtBQVcsaUJBQWlCLENBMlFqQztBQTNRRCxXQUFpQixpQkFBaUI7SUFDaEMsaURBQWlEO0lBQ2pELE1BQU0sbUJBQW1CLEdBQ3ZCLGtFQUFrRSxDQUFDO0lBRXJFLDhFQUE4RTtJQUM5RSxNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO0lBRTlDLGdFQUFnRTtJQUNoRSxNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQztJQUU1QywyREFBMkQ7SUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUUzQyxzREFBc0Q7SUFDdEQsTUFBTSxnQkFBZ0IsR0FDcEIseUVBQXlFLENBQUM7SUFvQjVFLDBFQUEwRTtJQUMxRSxTQUFnQixVQUFVLENBQUMsTUFBMEI7UUFDbkQsT0FBTyxDQUNMLE1BQU0sWUFBWSxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFKZSw0QkFBVSxhQUl6QixDQUFBO0lBRUQ7Ozs7T0FJRztJQUNILFNBQWdCLGFBQWEsQ0FDM0IsSUFBYSxFQUNiLFVBQXlCO1FBRXpCLE9BQU8sQ0FDTCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDbkUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUNwQixLQUFLLElBQUksQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQVRlLCtCQUFhLGdCQVM1QixDQUFBO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsU0FBZ0IsT0FBTyxDQUNyQixNQUFtQyxFQUNuQyxVQUF5QixFQUN6QixZQUFrRCxFQUFFO1FBRXBELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxPQUFPO2FBQ2pCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRCx1RUFBdUU7UUFDdkUsbUVBQW1FO1FBQ25FLE1BQU0sTUFBTSxHQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLElBQ0UsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FDL0IsR0FBRyxDQUFDO1lBRUwsT0FBTyxJQUFJLENBQUM7UUFFZCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztZQUNuQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBN0JlLHlCQUFPLFVBNkJ0QixDQUFBO0lBRUQsU0FBUyxNQUFNLENBQ2IsTUFBdUIsRUFDdkIsSUFBb0IsRUFDcEIsT0FBMEI7UUFFMUIsT0FBTztZQUNMLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7YUFDRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxNQUFNLENBQ2IsTUFBdUIsRUFDdkIsSUFBb0IsRUFDcEIsT0FBMEI7UUFFMUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEdBQWdCLEVBQUUsRUFBRSxDQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU87WUFDTCxTQUFTO1lBQ1QsTUFBTTtnQkFDSixDQUFDLENBQUMsY0FBYyxLQUFLLENBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDakQsSUFBSSxDQUNMLGVBQWU7Z0JBQ2xCLENBQUMsQ0FBQyxFQUFFO1lBQ04sVUFBVSxJQUFJO2lCQUNYLEdBQUcsQ0FDRixHQUFHLENBQUMsRUFBRSxDQUNKLE9BQU8sS0FBSyxDQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDeEMsSUFBSSxDQUNMLE9BQU8sQ0FDWDtpQkFDQSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVU7WUFDckIsVUFBVTtTQUNYLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFNBQVMsTUFBTSxDQUFDLEtBQXVCO1FBQ3JDLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzlELFNBQVMsQ0FDVixDQUNGO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FDUixLQUFLLENBQUMsSUFBSSxDQUNSLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsa0RBQWtELENBQ25ELENBQ0YsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQ3BCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxJQUFJLENBQUMsSUFBd0I7UUFDcEMsTUFBTSxLQUFLLEdBQThCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUM3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTO29CQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUMsS0FDRSxJQUFJLENBQUMsR0FBRyxRQUFRLEVBQ2hCLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQ3RELENBQUMsRUFBRTtvQkFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUU7d0JBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDckUsTUFBTSxJQUFJLE9BQU8sQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFZO1FBQzdCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDZixHQUFHLENBQUMsZ0JBQWdCLENBQXVCLDBCQUEwQixDQUFDLENBQ3ZFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELFNBQVMsU0FBUyxDQUFDLEdBQVk7UUFDN0IsT0FBTyxDQUNMLEdBQUcsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsS0FBSyxJQUFJO1lBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsZUFBZSxDQUN0QixPQUEwQixFQUMxQixVQUF5QixFQUN6QixTQUErQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxPQUFPO1lBQ3BDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDcEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQUM7UUFDUCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRW5ELHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsTUFBTSxJQUFJLEdBQUcsU0FBUzthQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekQsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFvQixFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzlELE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN4RCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDWixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FDckU7WUFDSCxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsUUFBUSxDQUNmLE9BQTBCLEVBQzFCLElBQVU7UUFFVixLQUFLLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTztZQUNwQyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxNQUFNLElBQUksQ0FBQztvQkFBRSxPQUFPLE1BQU0sQ0FBQztZQUNqQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFNBQVMsYUFBYSxDQUFDLEdBQVEsRUFBRSxVQUF5QjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRSxDQUFDO0lBRUQsU0FBUyxVQUFVLENBQUMsSUFBeUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxTQUFTLElBQUksQ0FBQyxJQUFnQztRQUM1QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFVO1FBQzdCLElBQUksSUFBSSxZQUFZLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3RELElBQUksSUFBSSxZQUFZLE9BQU87WUFDekIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2dCQUN4QyxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhO1FBQy9CLE9BQU8sS0FBSzthQUNULE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUMsRUEzUWdCLGlCQUFpQixLQUFqQixpQkFBaUIsUUEyUWpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3VtQnkgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIENsaXBib2FyZCBzZXJpYWxpemF0aW9uIGZvciBgcml2LXRhYmxlYC5cbiAqXG4gKiBSb3dzIHRoYXQgaGF2ZSBhIGxpbmsgcmVuZGVyIGFzIGA8YSBjbGFzcz1cInJvdy1saW5rXCI+YCByYXRoZXIgdGhhbiBgPHRyPmAsIGFuZFxuICogdGhlIGJyb3dzZXIncyBjbGlwYm9hcmQgc2VyaWFsaXplciBkb2VzIG5vdCB0cmVhdCB0aG9zZSBhcyB0YWJsZSByb3dzIOKAlCB0aGVcbiAqIGNvcGllZCBjb250ZW50IHBhc3RlcyBpbnRvIGEgc3ByZWFkc2hlZXQgYXMgb25lIGxhdGVyYWwgcnVuIGluc3RlYWQgb2YgYSBncmlkLlxuICogVGhlc2UgaGVscGVycyByZWJ1aWxkIHRoZSByZW5kZXJlZCBncmlkIHNvIHRoYXQgY29waWVkIGNvbnRlbnQgcGFzdGVzIGFzIHJvd3NcbiAqIGFuZCBjb2x1bW5zLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIFJpdlRhYmxlQ2xpcGJvYXJkIHtcbiAgLyoqIENlbGxzIHRoYXQgaG9sZCBjb250cm9scyByYXRoZXIgdGhhbiBkYXRhLiAqL1xuICBjb25zdCBjb250cm9sQ2VsbFNlbGVjdG9yID1cbiAgICAndGguc2VsZWN0aW9uLWhlYWQsIHRoLm1lbnUtaGVhZCwgdGQuc2VsZWN0aW9uLWJvZHksIHRkLm1lbnUtYm9keSc7XG5cbiAgLyoqIFRoZSBjb2x1bW4gbmFtZSB3aXRoaW4gYSBoZWFkZXIgY2VsbDsgdGhlIHJlc3Qgb2YgdGhlIGNlbGwgaXMgY29udHJvbHMuICovXG4gIGNvbnN0IGhlYWRlckxhYmVsU2VsZWN0b3IgPSAnLmhlYWRlci13cmFwcGVyJztcblxuICAvKiogRWxlbWVudHMgd2hvc2UgdGV4dCBleGlzdHMgZm9yIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IG9ubHkuICovXG4gIGNvbnN0IGFzc2lzdGl2ZVRleHRTZWxlY3RvciA9ICdyaXYtc3Itb25seSc7XG5cbiAgLyoqIFJvd3MgdGhhdCBzdGFuZCBpbiBmb3IgZGF0YSByYXRoZXIgdGhhbiBjYXJyeWluZyBpdC4gKi9cbiAgY29uc3QgZmlsbGVyUm93U2VsZWN0b3IgPSAncml2LXplcm8tc3RhdGUnO1xuXG4gIC8qKiBFbGVtZW50cyB0aGF0IG93biB0aGVpciBvd24gY2xpcGJvYXJkIGJlaGF2aW9yLiAqL1xuICBjb25zdCBlZGl0YWJsZVNlbGVjdG9yID1cbiAgICAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIFtjb250ZW50ZWRpdGFibGU9XCJcIl0sIFtjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJztcblxuICBleHBvcnQgdHlwZSBQYXlsb2FkID0ge1xuICAgIC8qKiBUYWItZGVsaW1pdGVkIHJvd3MsIG9uZSBsaW5lIHBlciByb3cuICovXG4gICAgdGV4dDogc3RyaW5nO1xuICAgIC8qKiBFcXVpdmFsZW50IHRhYmxlIG1hcmt1cCwgZm9yIHRhcmdldHMgdGhhdCBwcmVmZXIgcmljaCBjb250ZW50LiAqL1xuICAgIGh0bWw6IHN0cmluZztcbiAgfTtcblxuICAvKiogUHJlZGljYXRlIGZvciB3aGV0aGVyIGEgbm9kZSBmYWxscyB3aXRoaW4gdGhlIHVzZXIncyBzZWxlY3Rpb24uICovXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvblRlc3QgPSAobm9kZTogTm9kZSkgPT4gYm9vbGVhbjtcblxuICAvKiogQSByZW5kZXJlZCByb3csIGhvbGRpbmcgdGhlIGNlbGwgb2NjdXB5aW5nIGVhY2ggZGF0YSBjb2x1bW4uICovXG4gIHR5cGUgUm93ID0gcmVhZG9ubHkgKEVsZW1lbnQgfCB1bmRlZmluZWQpW107XG5cbiAgdHlwZSBMYXlvdXQgPSB7XG4gICAgaGVhZGVyOiByZWFkb25seSBSb3dbXTtcbiAgICBib2R5OiByZWFkb25seSBSb3dbXTtcbiAgfTtcblxuICAvKiogV2hldGhlciB0aGUgY29weSBjYW1lIGZyb20gYSBjb250cm9sIHRoYXQgc2VyaWFsaXplcyBpdHMgb3duIHZhbHVlLiAqL1xuICBleHBvcnQgZnVuY3Rpb24gaXNFZGl0YWJsZSh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIHRhcmdldC5jbG9zZXN0KGVkaXRhYmxlU2VsZWN0b3IpICE9PSBudWxsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBob3N0YCBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMga2luZCB0aGF0IHRoZSBzZWxlY3Rpb24gdG91Y2hlcy5cbiAgICogQSBzZWxlY3Rpb24gY2FuIHNwYW4gc2V2ZXJhbCB0YWJsZXM7IGRlZmVycmluZyB0byB0aGUgZmlyc3Qga2VlcHMgaW5zdGFuY2VzXG4gICAqIGZyb20gb3ZlcndyaXRpbmcgZWFjaCBvdGhlcidzIGNsaXBib2FyZCBkYXRhLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIG93bnNTZWxlY3Rpb24oXG4gICAgaG9zdDogRWxlbWVudCxcbiAgICBpc1NlbGVjdGVkOiBTZWxlY3Rpb25UZXN0LFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGhvc3QubG9jYWxOYW1lKSkuZmluZChlbGVtZW50ID0+XG4gICAgICAgIGlzU2VsZWN0ZWQoZWxlbWVudCksXG4gICAgICApID09PSBob3N0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIHRoZSBzZWxlY3RlZCByZWdpb24gb2YgYHRhYmxlc2AgKG9uZSBwZXIgcm93IGdyb3VwKSwgb3IgbnVsbCB3aGVuXG4gICAqIHRoZSBzZWxlY3Rpb24gY292ZXJzIGF0IG1vc3Qgb25lIGNlbGwg4oCUIHRob3NlIGFyZSBsZWZ0IHRvIHRoZSBicm93c2VyIHNvXG4gICAqIHRoYXQgY29weWluZyBwYXJ0IG9mIGEgY2VsbCdzIHRleHQga2VlcHMgd29ya2luZy5cbiAgICpcbiAgICogYGVuZHBvaW50c2AgYXJlIHdoZXJlIHRoZSBzZWxlY3Rpb24gc3RhcnRzIGFuZCBlbmRzLCB3aGljaCBuYXJyb3cgdGhlIGNvcGllZFxuICAgKiBjb2x1bW5zIHRvIHRoYXQgc3Bhbi4gQSBzZWxlY3Rpb24gaXMgYSBsaW5lYXIgcmFuZ2UgaW4gcmVhZGluZyBvcmRlciwgc29cbiAgICogZHJhZ2dpbmcgZG93biBvbmUgY29sdW1uIHRvdWNoZXMgZXZlcnkgY29sdW1uIGluIGJldHdlZW47IHRoZSBlbmRwb2ludHMgYXJlXG4gICAqIHdoYXQgZGlzdGluZ3Vpc2ggXCJ0aGlzIGNvbHVtblwiIGZyb20gXCJ0aGVzZSByb3dzXCIuXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZXh0cmFjdChcbiAgICB0YWJsZXM6IHJlYWRvbmx5IEhUTUxUYWJsZUVsZW1lbnRbXSxcbiAgICBpc1NlbGVjdGVkOiBTZWxlY3Rpb25UZXN0LFxuICAgIGVuZHBvaW50czogcmVhZG9ubHkgKE5vZGUgfCBudWxsIHwgdW5kZWZpbmVkKVtdID0gW10sXG4gICk6IFBheWxvYWQgfCBudWxsIHtcbiAgICBjb25zdCBsYXlvdXRzID0gdGFibGVzLm1hcChsYXlvdXQpO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBzZWxlY3RlZENvbHVtbnMobGF5b3V0cywgaXNTZWxlY3RlZCwgZW5kcG9pbnRzKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbGF5b3V0cy5mbGF0TWFwKGwgPT4gbC5oZWFkZXIpO1xuICAgIGNvbnN0IHJvd3MgPSBsYXlvdXRzXG4gICAgICAuZmxhdE1hcChsID0+IGwuYm9keSlcbiAgICAgIC5maWx0ZXIocm93ID0+IHNlbGVjdGVkQ291bnQocm93LCBpc1NlbGVjdGVkKSA+IDApO1xuICAgIC8vIEhlYWRlciBjZWxscyBvd24gdGhlIHBvaW50ZXIgZm9yIGNvbHVtbiByZW9yZGVyaW5nLCBzbyBhIGRyYWcgY2Fubm90XG4gICAgLy8gcmVhY2ggdGhlbTsgdGhlIGhlYWRlciBjb21lcyBhbG9uZyB3aXRoIGFueSBjb3BpZWQgZGF0YSBpbnN0ZWFkLlxuICAgIGNvbnN0IGhlYWRlciA9XG4gICAgICBoZWFkZXJzLmZpbmQocm93ID0+IHNlbGVjdGVkQ291bnQocm93LCBpc1NlbGVjdGVkKSA+IDApID8/XG4gICAgICAocm93cy5sZW5ndGggPiAwID8gaGVhZGVyc1swXSA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoXG4gICAgICBjb2x1bW5zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgc3VtQnkoWy4uLihoZWFkZXIgPyBbaGVhZGVyXSA6IFtdKSwgLi4ucm93c10sIHJvdyA9PlxuICAgICAgICBzZWxlY3RlZENvdW50KHJvdywgaXNTZWxlY3RlZCksXG4gICAgICApIDwgMlxuICAgIClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IHRvVGV4dChoZWFkZXIsIHJvd3MsIGNvbHVtbnMpLFxuICAgICAgaHRtbDogdG9IdG1sKGhlYWRlciwgcm93cywgY29sdW1ucyksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvVGV4dChcbiAgICBoZWFkZXI6IFJvdyB8IHVuZGVmaW5lZCxcbiAgICByb3dzOiByZWFkb25seSBSb3dbXSxcbiAgICBjb2x1bW5zOiByZWFkb25seSBudW1iZXJbXSxcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKGhlYWRlciA/IFtjb2x1bW5zLm1hcChjb2x1bW4gPT4gaGVhZGVyVGV4dChoZWFkZXJbY29sdW1uXSkpXSA6IFtdKSxcbiAgICAgIC4uLnJvd3MubWFwKHJvdyA9PiBjb2x1bW5zLm1hcChjb2x1bW4gPT4gdGV4dChyb3dbY29sdW1uXSkpKSxcbiAgICBdXG4gICAgICAubWFwKGNlbGxzID0+IGNlbGxzLmpvaW4oJ1xcdCcpKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IdG1sKFxuICAgIGhlYWRlcjogUm93IHwgdW5kZWZpbmVkLFxuICAgIHJvd3M6IHJlYWRvbmx5IFJvd1tdLFxuICAgIGNvbHVtbnM6IHJlYWRvbmx5IG51bWJlcltdLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGNlbGxzID0gKHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW10sIHRhZzogJ3RoJyB8ICd0ZCcpID0+XG4gICAgICB2YWx1ZXMubWFwKHZhbHVlID0+IGA8JHt0YWd9PiR7ZXNjYXBlSHRtbCh2YWx1ZSl9PC8ke3RhZ30+YCkuam9pbignJyk7XG4gICAgcmV0dXJuIFtcbiAgICAgICc8dGFibGU+JyxcbiAgICAgIGhlYWRlclxuICAgICAgICA/IGA8dGhlYWQ+PHRyPiR7Y2VsbHMoXG4gICAgICAgICAgICBjb2x1bW5zLm1hcChjb2x1bW4gPT4gaGVhZGVyVGV4dChoZWFkZXJbY29sdW1uXSkpLFxuICAgICAgICAgICAgJ3RoJyxcbiAgICAgICAgICApfTwvdHI+PC90aGVhZD5gXG4gICAgICAgIDogJycsXG4gICAgICBgPHRib2R5PiR7cm93c1xuICAgICAgICAubWFwKFxuICAgICAgICAgIHJvdyA9PlxuICAgICAgICAgICAgYDx0cj4ke2NlbGxzKFxuICAgICAgICAgICAgICBjb2x1bW5zLm1hcChjb2x1bW4gPT4gdGV4dChyb3dbY29sdW1uXSkpLFxuICAgICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAgKX08L3RyPmAsXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJycpfTwvdGJvZHk+YCxcbiAgICAgICc8L3RhYmxlPicsXG4gICAgXS5qb2luKCcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxheW91dCh0YWJsZTogSFRNTFRhYmxlRWxlbWVudCk6IExheW91dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcjogZ3JpZChcbiAgICAgICAgQXJyYXkuZnJvbSh0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCc6c2NvcGUgPiB0aGVhZCA+IHRyJykpLmZpbHRlcihcbiAgICAgICAgICBpc0RhdGFSb3csXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgYm9keTogZ3JpZChcbiAgICAgICAgQXJyYXkuZnJvbShcbiAgICAgICAgICB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgJzpzY29wZSA+IHRib2R5ID4gdHIsIDpzY29wZSA+IHRib2R5ID4gYS5yb3ctbGluaycsXG4gICAgICAgICAgKSxcbiAgICAgICAgKS5maWx0ZXIoaXNEYXRhUm93KSxcbiAgICAgICksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHJvd3Mgb250byBhIGNvbHVtbiBncmlkLiBDZWxscyBjb3ZlcmVkIGJ5IGEgcm93c3BhbiByZXBlYXQgdGhlIHNwYW5uaW5nXG4gICAqIGNlbGwgc28gdGhhdCBldmVyeSBsaW5lIGhhcyBvbmUgdmFsdWUgcGVyIGNvbHVtbiwgbWF0Y2hpbmcgaG93IENTViBleHBvcnRcbiAgICogZmxhdHRlbnMgc3BhbnMuXG4gICAqL1xuICBmdW5jdGlvbiBncmlkKHJvd3M6IHJlYWRvbmx5IEVsZW1lbnRbXSk6IFJvd1tdIHtcbiAgICBjb25zdCBjZWxsczogKEVsZW1lbnQgfCB1bmRlZmluZWQpW11bXSA9IHJvd3MubWFwKCgpID0+IFtdKTtcbiAgICByb3dzLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBjb2x1bW4gPSAwO1xuICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGRhdGFDZWxscyhyb3cpKSB7XG4gICAgICAgIHdoaWxlIChjZWxsc1tyb3dJbmRleF1bY29sdW1uXSAhPT0gdW5kZWZpbmVkKSBjb2x1bW4rKztcbiAgICAgICAgY29uc3Qgcm93U3BhbiA9IE1hdGgubWF4KDEsIGNlbGwucm93U3Bhbik7XG4gICAgICAgIGNvbnN0IGNvbFNwYW4gPSBNYXRoLm1heCgxLCBjZWxsLmNvbFNwYW4pO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIGxldCByID0gcm93SW5kZXg7XG4gICAgICAgICAgciA8PSBNYXRoLm1pbihyb3dzLmxlbmd0aCAtIDEsIHJvd0luZGV4ICsgcm93U3BhbiAtIDEpO1xuICAgICAgICAgIHIrK1xuICAgICAgICApXG4gICAgICAgICAgZm9yIChsZXQgYyA9IGNvbHVtbjsgYyA8IGNvbHVtbiArIGNvbFNwYW47IGMrKykgY2VsbHNbcl1bY10gPSBjZWxsO1xuICAgICAgICBjb2x1bW4gKz0gY29sU3BhbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2VsbHM7XG4gIH1cblxuICBmdW5jdGlvbiBkYXRhQ2VsbHMocm93OiBFbGVtZW50KTogSFRNTFRhYmxlQ2VsbEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICByb3cucXVlcnlTZWxlY3RvckFsbDxIVE1MVGFibGVDZWxsRWxlbWVudD4oJzpzY29wZSA+IHRkLCA6c2NvcGUgPiB0aCcpLFxuICAgICkuZmlsdGVyKGNlbGwgPT4gIWNlbGwubWF0Y2hlcyhjb250cm9sQ2VsbFNlbGVjdG9yKSk7XG4gIH1cblxuICAvKiogRXhjbHVkZXMgdGhlIHplcm8tc3RhdGUgcm93LCB3aGljaCBzcGFucyBldmVyeSBjb2x1bW4uICovXG4gIGZ1bmN0aW9uIGlzRGF0YVJvdyhyb3c6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcm93LnF1ZXJ5U2VsZWN0b3IoZmlsbGVyUm93U2VsZWN0b3IpID09PSBudWxsICYmXG4gICAgICBkYXRhQ2VsbHMocm93KS5ldmVyeShjZWxsID0+IGNlbGwuY29sU3BhbiA8PSAxKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RlZENvbHVtbnMoXG4gICAgbGF5b3V0czogcmVhZG9ubHkgTGF5b3V0W10sXG4gICAgaXNTZWxlY3RlZDogU2VsZWN0aW9uVGVzdCxcbiAgICBlbmRwb2ludHM6IHJlYWRvbmx5IChOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZClbXSxcbiAgKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICBmb3IgKGNvbnN0IHsgaGVhZGVyLCBib2R5IH0gb2YgbGF5b3V0cylcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIFsuLi5oZWFkZXIsIC4uLmJvZHldKVxuICAgICAgICByb3cuZm9yRWFjaCgoY2VsbCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgaWYgKGNlbGwgIT09IHVuZGVmaW5lZCAmJiBpc1NlbGVjdGVkKGNlbGwpKSBjb2x1bW5zLmFkZChjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICBjb25zdCB0b3VjaGVkID0gWy4uLmNvbHVtbnNdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgIC8vIEJvdGggZW5kcyBoYXZlIHRvIGxhbmQgaW4gYSBjZWxsIHRvIGRlc2NyaWJlIGEgc3BhbjsgYW55dGhpbmcgZWxzZSAoYVxuICAgIC8vIHNlbGVjdC1hbGwsIGFuIGVuZHBvaW50IG9uIGEgcm93IHJhdGhlciB0aGFuIGEgY2VsbCkga2VlcHMgZXZlcnkgY29sdW1uLlxuICAgIGNvbnN0IHNwYW4gPSBlbmRwb2ludHNcbiAgICAgIC5tYXAobm9kZSA9PiAobm9kZSA/IGNvbHVtbk9mKGxheW91dHMsIG5vZGUpIDogdW5kZWZpbmVkKSlcbiAgICAgIC5maWx0ZXIoKGNvbHVtbik6IGNvbHVtbiBpcyBudW1iZXIgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBzcGFuLmxlbmd0aCA9PT0gZW5kcG9pbnRzLmxlbmd0aCAmJiBzcGFuLmxlbmd0aCA+IDFcbiAgICAgID8gdG91Y2hlZC5maWx0ZXIoXG4gICAgICAgICAgY29sdW1uID0+IGNvbHVtbiA+PSBNYXRoLm1pbiguLi5zcGFuKSAmJiBjb2x1bW4gPD0gTWF0aC5tYXgoLi4uc3BhbiksXG4gICAgICAgIClcbiAgICAgIDogdG91Y2hlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbHVtbk9mKFxuICAgIGxheW91dHM6IHJlYWRvbmx5IExheW91dFtdLFxuICAgIG5vZGU6IE5vZGUsXG4gICk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCB7IGhlYWRlciwgYm9keSB9IG9mIGxheW91dHMpXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBbLi4uaGVhZGVyLCAuLi5ib2R5XSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSByb3cuZmluZEluZGV4KGNlbGwgPT4gY2VsbD8uY29udGFpbnMobm9kZSkgPT09IHRydWUpO1xuICAgICAgICBpZiAoY29sdW1uID49IDApIHJldHVybiBjb2x1bW47XG4gICAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGVkQ291bnQocm93OiBSb3csIGlzU2VsZWN0ZWQ6IFNlbGVjdGlvblRlc3QpOiBudW1iZXIge1xuICAgIHJldHVybiByb3cuZmlsdGVyKGNlbGwgPT4gY2VsbCAhPT0gdW5kZWZpbmVkICYmIGlzU2VsZWN0ZWQoY2VsbCkpLmxlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhlYWRlclRleHQoY2VsbDogRWxlbWVudCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHQoY2VsbD8ucXVlcnlTZWxlY3RvcihoZWFkZXJMYWJlbFNlbGVjdG9yKSA/PyBjZWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRleHQoY2VsbDogRWxlbWVudCB8IHVuZGVmaW5lZCB8IG51bGwpOiBzdHJpbmcge1xuICAgIHJldHVybiBjZWxsID8gdmlzaWJsZVRleHQoY2VsbCkucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIGluZGVudGF0aW9uIGxhbmRzIGluIHRoZSBET00gYXMgbmV3bGluZXMgYW5kIHJ1bnMgb2Ygc3BhY2VzLCB3aGljaFxuICAgKiBzcGxpdCBhIHNpbmdsZSByb3cgYWNyb3NzIHNldmVyYWwgc3ByZWFkc2hlZXQgcm93cyB1bmxlc3MgY29sbGFwc2VkIGJ5IHRoZVxuICAgKiBjYWxsZXIuIENvbW1lbnQgYW5jaG9ycyBhbmQgc2NyZWVuLXJlYWRlci1vbmx5IGNvbnRlbnQgYXJlIGRyb3BwZWQsIGFuZFxuICAgKiBzaWJsaW5nIG5vZGVzIGFyZSBzZXBhcmF0ZWQgc28gdGhhdCBhZGphY2VudCBlbGVtZW50cyBkbyBub3QgcnVuIHRvZ2V0aGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaWJsZVRleHQobm9kZTogTm9kZSk6IHN0cmluZyB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KSByZXR1cm4gbm9kZS5ub2RlVmFsdWUgPz8gJyc7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KVxuICAgICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhhc3Npc3RpdmVUZXh0U2VsZWN0b3IpXG4gICAgICAgID8gJydcbiAgICAgICAgOiBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykubWFwKHZpc2libGVUZXh0KS5qb2luKCcgJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSHRtbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICB9XG59XG4iXX0=
|