@homebound/beam 2.378.1 → 2.379.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-ZQBDHF22.js +95 -0
- package/dist/chunk-ZQBDHF22.js.map +1 -0
- package/dist/index.cjs +17756 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{components/internal/DatePicker/DatePicker.css → index.css} +14 -72
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +8051 -0
- package/dist/index.d.ts +8051 -10
- package/dist/index.js +17429 -25
- package/dist/index.js.map +1 -0
- package/dist/utils/rtlUtils.cjs +226 -0
- package/dist/utils/rtlUtils.cjs.map +1 -0
- package/dist/utils/rtlUtils.d.cts +34 -0
- package/dist/utils/rtlUtils.d.ts +34 -0
- package/dist/utils/rtlUtils.js +188 -0
- package/dist/utils/rtlUtils.js.map +1 -0
- package/package.json +54 -40
- package/dist/Css.d.ts +0 -4407
- package/dist/Css.d.ts.map +0 -1
- package/dist/Css.js +0 -3988
- package/dist/components/Accordion.d.ts +0 -32
- package/dist/components/Accordion.d.ts.map +0 -1
- package/dist/components/Accordion.js +0 -69
- package/dist/components/AccordionList.d.ts +0 -12
- package/dist/components/AccordionList.d.ts.map +0 -1
- package/dist/components/AccordionList.js +0 -14
- package/dist/components/AutoSaveIndicator.d.ts +0 -7
- package/dist/components/AutoSaveIndicator.d.ts.map +0 -1
- package/dist/components/AutoSaveIndicator.js +0 -45
- package/dist/components/AutoSaveStatus/AutoSaveStatusProvider.d.ts +0 -25
- package/dist/components/AutoSaveStatus/AutoSaveStatusProvider.d.ts.map +0 -1
- package/dist/components/AutoSaveStatus/AutoSaveStatusProvider.js +0 -89
- package/dist/components/AutoSaveStatus/index.d.ts +0 -3
- package/dist/components/AutoSaveStatus/index.d.ts.map +0 -1
- package/dist/components/AutoSaveStatus/index.js +0 -9
- package/dist/components/AutoSaveStatus/useAutoSaveStatus.d.ts +0 -12
- package/dist/components/AutoSaveStatus/useAutoSaveStatus.d.ts.map +0 -1
- package/dist/components/AutoSaveStatus/useAutoSaveStatus.js +0 -18
- package/dist/components/Avatar/Avatar.d.ts +0 -10
- package/dist/components/Avatar/Avatar.d.ts.map +0 -1
- package/dist/components/Avatar/Avatar.js +0 -50
- package/dist/components/Avatar/AvatarButton.d.ts +0 -32
- package/dist/components/Avatar/AvatarButton.d.ts.map +0 -1
- package/dist/components/Avatar/AvatarButton.js +0 -57
- package/dist/components/Avatar/AvatarGroup.d.ts +0 -10
- package/dist/components/Avatar/AvatarGroup.d.ts.map +0 -1
- package/dist/components/Avatar/AvatarGroup.js +0 -24
- package/dist/components/Avatar/index.d.ts +0 -4
- package/dist/components/Avatar/index.d.ts.map +0 -1
- package/dist/components/Avatar/index.js +0 -19
- package/dist/components/Banner.d.ts +0 -10
- package/dist/components/Banner.d.ts.map +0 -1
- package/dist/components/Banner.js +0 -27
- package/dist/components/BeamContext.d.ts +0 -32
- package/dist/components/BeamContext.d.ts.map +0 -1
- package/dist/components/BeamContext.js +0 -86
- package/dist/components/Button.d.ts +0 -26
- package/dist/components/Button.d.ts.map +0 -1
- package/dist/components/Button.js +0 -148
- package/dist/components/ButtonDatePicker.d.ts +0 -8
- package/dist/components/ButtonDatePicker.d.ts.map +0 -1
- package/dist/components/ButtonDatePicker.js +0 -29
- package/dist/components/ButtonGroup.d.ts +0 -25
- package/dist/components/ButtonGroup.d.ts.map +0 -1
- package/dist/components/ButtonGroup.js +0 -66
- package/dist/components/ButtonMenu.d.ts +0 -42
- package/dist/components/ButtonMenu.d.ts.map +0 -1
- package/dist/components/ButtonMenu.js +0 -33
- package/dist/components/ButtonModal.d.ts +0 -12
- package/dist/components/ButtonModal.d.ts.map +0 -1
- package/dist/components/ButtonModal.js +0 -25
- package/dist/components/Chip.d.ts +0 -16
- package/dist/components/Chip.d.ts.map +0 -1
- package/dist/components/Chip.js +0 -46
- package/dist/components/Chips.d.ts +0 -16
- package/dist/components/Chips.d.ts.map +0 -1
- package/dist/components/Chips.js +0 -20
- package/dist/components/Copy.d.ts +0 -5
- package/dist/components/Copy.d.ts.map +0 -1
- package/dist/components/Copy.js +0 -11
- package/dist/components/CssReset.d.ts +0 -6
- package/dist/components/CssReset.d.ts.map +0 -1
- package/dist/components/CssReset.js +0 -764
- package/dist/components/DnDGrid/DnDGrid.d.ts +0 -16
- package/dist/components/DnDGrid/DnDGrid.d.ts.map +0 -1
- package/dist/components/DnDGrid/DnDGrid.js +0 -234
- package/dist/components/DnDGrid/DnDGridContext.d.ts +0 -9
- package/dist/components/DnDGrid/DnDGridContext.d.ts.map +0 -1
- package/dist/components/DnDGrid/DnDGridContext.js +0 -12
- package/dist/components/DnDGrid/DnDGridItemHandle.d.ts +0 -11
- package/dist/components/DnDGrid/DnDGridItemHandle.d.ts.map +0 -1
- package/dist/components/DnDGrid/DnDGridItemHandle.js +0 -21
- package/dist/components/DnDGrid/index.d.ts +0 -7
- package/dist/components/DnDGrid/index.d.ts.map +0 -1
- package/dist/components/DnDGrid/index.js +0 -9
- package/dist/components/DnDGrid/useDnDGridItem.d.ts +0 -18
- package/dist/components/DnDGrid/useDnDGridItem.d.ts.map +0 -1
- package/dist/components/DnDGrid/useDnDGridItem.js +0 -33
- package/dist/components/Filters/BaseFilter.d.ts +0 -21
- package/dist/components/Filters/BaseFilter.d.ts.map +0 -1
- package/dist/components/Filters/BaseFilter.js +0 -31
- package/dist/components/Filters/BooleanFilter.d.ts +0 -9
- package/dist/components/Filters/BooleanFilter.d.ts.map +0 -1
- package/dist/components/Filters/BooleanFilter.js +0 -27
- package/dist/components/Filters/CheckboxFilter.d.ts +0 -20
- package/dist/components/Filters/CheckboxFilter.d.ts.map +0 -1
- package/dist/components/Filters/CheckboxFilter.js +0 -35
- package/dist/components/Filters/DateFilter.d.ts +0 -16
- package/dist/components/Filters/DateFilter.d.ts.map +0 -1
- package/dist/components/Filters/DateFilter.js +0 -26
- package/dist/components/Filters/DateRangeFilter.d.ts +0 -16
- package/dist/components/Filters/DateRangeFilter.d.ts.map +0 -1
- package/dist/components/Filters/DateRangeFilter.js +0 -21
- package/dist/components/Filters/FilterModal.d.ts +0 -14
- package/dist/components/Filters/FilterModal.d.ts.map +0 -1
- package/dist/components/Filters/FilterModal.js +0 -28
- package/dist/components/Filters/Filters.d.ts +0 -29
- package/dist/components/Filters/Filters.d.ts.map +0 -1
- package/dist/components/Filters/Filters.js +0 -43
- package/dist/components/Filters/MultiFilter.d.ts +0 -10
- package/dist/components/Filters/MultiFilter.d.ts.map +0 -1
- package/dist/components/Filters/MultiFilter.js +0 -40
- package/dist/components/Filters/NumberRangeFilter.d.ts +0 -14
- package/dist/components/Filters/NumberRangeFilter.d.ts.map +0 -1
- package/dist/components/Filters/NumberRangeFilter.js +0 -35
- package/dist/components/Filters/SingleFilter.d.ts +0 -10
- package/dist/components/Filters/SingleFilter.d.ts.map +0 -1
- package/dist/components/Filters/SingleFilter.js +0 -20
- package/dist/components/Filters/ToggleFilter.d.ts +0 -20
- package/dist/components/Filters/ToggleFilter.d.ts.map +0 -1
- package/dist/components/Filters/ToggleFilter.js +0 -35
- package/dist/components/Filters/TreeFilter.d.ts +0 -15
- package/dist/components/Filters/TreeFilter.d.ts.map +0 -1
- package/dist/components/Filters/TreeFilter.js +0 -18
- package/dist/components/Filters/index.d.ts +0 -17
- package/dist/components/Filters/index.d.ts.map +0 -1
- package/dist/components/Filters/index.js +0 -41
- package/dist/components/Filters/testDomain.d.ts +0 -81
- package/dist/components/Filters/testDomain.d.ts.map +0 -1
- package/dist/components/Filters/testDomain.js +0 -66
- package/dist/components/Filters/types.d.ts +0 -26
- package/dist/components/Filters/types.d.ts.map +0 -1
- package/dist/components/Filters/types.js +0 -2
- package/dist/components/Filters/utils.d.ts +0 -3
- package/dist/components/Filters/utils.d.ts.map +0 -1
- package/dist/components/Filters/utils.js +0 -14
- package/dist/components/Grid/ResponsiveGrid.d.ts +0 -7
- package/dist/components/Grid/ResponsiveGrid.d.ts.map +0 -1
- package/dist/components/Grid/ResponsiveGrid.js +0 -11
- package/dist/components/Grid/ResponsiveGridItem.d.ts +0 -8
- package/dist/components/Grid/ResponsiveGridItem.d.ts.map +0 -1
- package/dist/components/Grid/ResponsiveGridItem.js +0 -11
- package/dist/components/Grid/index.d.ts +0 -8
- package/dist/components/Grid/index.d.ts.map +0 -1
- package/dist/components/Grid/index.js +0 -11
- package/dist/components/Grid/useResponsiveGrid.d.ts +0 -14
- package/dist/components/Grid/useResponsiveGrid.d.ts.map +0 -1
- package/dist/components/Grid/useResponsiveGrid.js +0 -47
- package/dist/components/Grid/useResponsiveGridItem.d.ts +0 -8
- package/dist/components/Grid/useResponsiveGridItem.d.ts.map +0 -1
- package/dist/components/Grid/useResponsiveGridItem.js +0 -7
- package/dist/components/Grid/utils.d.ts +0 -2
- package/dist/components/Grid/utils.d.ts.map +0 -1
- package/dist/components/Grid/utils.js +0 -4
- package/dist/components/HbLoadingSpinner.base64.d.ts +0 -3
- package/dist/components/HbLoadingSpinner.base64.d.ts.map +0 -1
- package/dist/components/HbLoadingSpinner.base64.js +0 -3
- package/dist/components/HbLoadingSpinner.d.ts +0 -27
- package/dist/components/HbLoadingSpinner.d.ts.map +0 -1
- package/dist/components/HbLoadingSpinner.js +0 -74
- package/dist/components/HelperText.d.ts +0 -9
- package/dist/components/HelperText.d.ts.map +0 -1
- package/dist/components/HelperText.js +0 -12
- package/dist/components/Icon.d.ts +0 -181
- package/dist/components/Icon.d.ts.map +0 -1
- package/dist/components/Icon.js +0 -189
- package/dist/components/IconButton.d.ts +0 -32
- package/dist/components/IconButton.d.ts.map +0 -1
- package/dist/components/IconButton.js +0 -65
- package/dist/components/Label.d.ts +0 -22
- package/dist/components/Label.d.ts.map +0 -1
- package/dist/components/Label.js +0 -29
- package/dist/components/Layout/FullBleed.d.ts +0 -7
- package/dist/components/Layout/FullBleed.d.ts.map +0 -1
- package/dist/components/Layout/FullBleed.js +0 -15
- package/dist/components/Layout/PreventBrowserScroll.d.ts +0 -4
- package/dist/components/Layout/PreventBrowserScroll.d.ts.map +0 -1
- package/dist/components/Layout/PreventBrowserScroll.js +0 -13
- package/dist/components/Layout/RightPaneLayout/RightPaneContext.d.ts +0 -17
- package/dist/components/Layout/RightPaneLayout/RightPaneContext.d.ts.map +0 -1
- package/dist/components/Layout/RightPaneLayout/RightPaneContext.js +0 -53
- package/dist/components/Layout/RightPaneLayout/RightPaneLayout.d.ts +0 -9
- package/dist/components/Layout/RightPaneLayout/RightPaneLayout.d.ts.map +0 -1
- package/dist/components/Layout/RightPaneLayout/RightPaneLayout.js +0 -29
- package/dist/components/Layout/RightPaneLayout/index.d.ts +0 -4
- package/dist/components/Layout/RightPaneLayout/index.d.ts.map +0 -1
- package/dist/components/Layout/RightPaneLayout/index.js +0 -19
- package/dist/components/Layout/RightPaneLayout/useRightPane.d.ts +0 -9
- package/dist/components/Layout/RightPaneLayout/useRightPane.d.ts.map +0 -1
- package/dist/components/Layout/RightPaneLayout/useRightPane.js +0 -11
- package/dist/components/Layout/ScrollableContent.d.ts +0 -20
- package/dist/components/Layout/ScrollableContent.d.ts.map +0 -1
- package/dist/components/Layout/ScrollableContent.js +0 -37
- package/dist/components/Layout/ScrollableParent.d.ts +0 -47
- package/dist/components/Layout/ScrollableParent.d.ts.map +0 -1
- package/dist/components/Layout/ScrollableParent.js +0 -69
- package/dist/components/Layout/index.d.ts +0 -6
- package/dist/components/Layout/index.d.ts.map +0 -1
- package/dist/components/Layout/index.js +0 -21
- package/dist/components/Loader.d.ts +0 -7
- package/dist/components/Loader.d.ts.map +0 -1
- package/dist/components/Loader.js +0 -27
- package/dist/components/LoadingSkeleton.d.ts +0 -11
- package/dist/components/LoadingSkeleton.d.ts.map +0 -1
- package/dist/components/LoadingSkeleton.js +0 -29
- package/dist/components/MaxLines.d.ts +0 -6
- package/dist/components/MaxLines.d.ts.map +0 -1
- package/dist/components/MaxLines.js +0 -36
- package/dist/components/Modal/Modal.d.ts +0 -57
- package/dist/components/Modal/Modal.d.ts.map +0 -1
- package/dist/components/Modal/Modal.js +0 -122
- package/dist/components/Modal/ModalContext.d.ts +0 -12
- package/dist/components/Modal/ModalContext.d.ts.map +0 -1
- package/dist/components/Modal/ModalContext.js +0 -15
- package/dist/components/Modal/OpenModal.d.ts +0 -30
- package/dist/components/Modal/OpenModal.d.ts.map +0 -1
- package/dist/components/Modal/OpenModal.js +0 -41
- package/dist/components/Modal/TestModalContent.d.ts +0 -14
- package/dist/components/Modal/TestModalContent.d.ts.map +0 -1
- package/dist/components/Modal/TestModalContent.js +0 -60
- package/dist/components/Modal/index.d.ts +0 -5
- package/dist/components/Modal/index.d.ts.map +0 -1
- package/dist/components/Modal/index.js +0 -24
- package/dist/components/Modal/useModal.d.ts +0 -11
- package/dist/components/Modal/useModal.d.ts.map +0 -1
- package/dist/components/Modal/useModal.js +0 -50
- package/dist/components/NavLink.d.ts +0 -32
- package/dist/components/NavLink.d.ts.map +0 -1
- package/dist/components/NavLink.js +0 -62
- package/dist/components/Pagination.d.ts +0 -27
- package/dist/components/Pagination.d.ts.map +0 -1
- package/dist/components/Pagination.js +0 -54
- package/dist/components/PresentationContext.d.ts +0 -44
- package/dist/components/PresentationContext.d.ts.map +0 -1
- package/dist/components/PresentationContext.js +0 -23
- package/dist/components/ScrollShadows.d.ts +0 -14
- package/dist/components/ScrollShadows.d.ts.map +0 -1
- package/dist/components/ScrollShadows.js +0 -57
- package/dist/components/Snackbar/Snackbar.d.ts +0 -11
- package/dist/components/Snackbar/Snackbar.d.ts.map +0 -1
- package/dist/components/Snackbar/Snackbar.js +0 -14
- package/dist/components/Snackbar/SnackbarContext.d.ts +0 -12
- package/dist/components/Snackbar/SnackbarContext.d.ts.map +0 -1
- package/dist/components/Snackbar/SnackbarContext.js +0 -18
- package/dist/components/Snackbar/SnackbarNotice.d.ts +0 -20
- package/dist/components/Snackbar/SnackbarNotice.d.ts.map +0 -1
- package/dist/components/Snackbar/SnackbarNotice.js +0 -24
- package/dist/components/Snackbar/index.d.ts +0 -2
- package/dist/components/Snackbar/index.d.ts.map +0 -1
- package/dist/components/Snackbar/index.js +0 -5
- package/dist/components/Snackbar/useSnackbar.d.ts +0 -22
- package/dist/components/Snackbar/useSnackbar.d.ts.map +0 -1
- package/dist/components/Snackbar/useSnackbar.js +0 -61
- package/dist/components/Stepper.d.ts +0 -13
- package/dist/components/Stepper.d.ts.map +0 -1
- package/dist/components/Stepper.js +0 -63
- package/dist/components/SuperDrawer/ConfirmCloseModal.d.ts +0 -9
- package/dist/components/SuperDrawer/ConfirmCloseModal.d.ts.map +0 -1
- package/dist/components/SuperDrawer/ConfirmCloseModal.js +0 -22
- package/dist/components/SuperDrawer/SuperDrawer.d.ts +0 -23
- package/dist/components/SuperDrawer/SuperDrawer.d.ts.map +0 -1
- package/dist/components/SuperDrawer/SuperDrawer.js +0 -76
- package/dist/components/SuperDrawer/SuperDrawerContent.d.ts +0 -22
- package/dist/components/SuperDrawer/SuperDrawerContent.d.ts.map +0 -1
- package/dist/components/SuperDrawer/SuperDrawerContent.js +0 -41
- package/dist/components/SuperDrawer/components/SuperDrawerHeader.d.ts +0 -14
- package/dist/components/SuperDrawer/components/SuperDrawerHeader.d.ts.map +0 -1
- package/dist/components/SuperDrawer/components/SuperDrawerHeader.js +0 -25
- package/dist/components/SuperDrawer/index.d.ts +0 -6
- package/dist/components/SuperDrawer/index.d.ts.map +0 -1
- package/dist/components/SuperDrawer/index.js +0 -22
- package/dist/components/SuperDrawer/useSuperDrawer.d.ts +0 -53
- package/dist/components/SuperDrawer/useSuperDrawer.d.ts.map +0 -1
- package/dist/components/SuperDrawer/useSuperDrawer.js +0 -148
- package/dist/components/SuperDrawer/utils.d.ts +0 -5
- package/dist/components/SuperDrawer/utils.d.ts.map +0 -1
- package/dist/components/SuperDrawer/utils.js +0 -8
- package/dist/components/Table/GridTable.d.ts +0 -166
- package/dist/components/Table/GridTable.d.ts.map +0 -1
- package/dist/components/Table/GridTable.js +0 -461
- package/dist/components/Table/GridTableApi.d.ts +0 -108
- package/dist/components/Table/GridTableApi.d.ts.map +0 -1
- package/dist/components/Table/GridTableApi.js +0 -202
- package/dist/components/Table/TableActions.d.ts +0 -13
- package/dist/components/Table/TableActions.d.ts.map +0 -1
- package/dist/components/Table/TableActions.js +0 -11
- package/dist/components/Table/TableStyles.d.ts +0 -118
- package/dist/components/Table/TableStyles.d.ts.map +0 -1
- package/dist/components/Table/TableStyles.js +0 -133
- package/dist/components/Table/components/CollapseToggle.d.ts +0 -7
- package/dist/components/Table/components/CollapseToggle.d.ts.map +0 -1
- package/dist/components/Table/components/CollapseToggle.js +0 -23
- package/dist/components/Table/components/EditColumnsButton.d.ts +0 -12
- package/dist/components/Table/components/EditColumnsButton.d.ts.map +0 -1
- package/dist/components/Table/components/EditColumnsButton.js +0 -49
- package/dist/components/Table/components/ExpandableHeader.d.ts +0 -12
- package/dist/components/Table/components/ExpandableHeader.d.ts.map +0 -1
- package/dist/components/Table/components/ExpandableHeader.js +0 -35
- package/dist/components/Table/components/KeptGroupRow.d.ts +0 -11
- package/dist/components/Table/components/KeptGroupRow.d.ts.map +0 -1
- package/dist/components/Table/components/KeptGroupRow.js +0 -21
- package/dist/components/Table/components/Row.d.ts +0 -78
- package/dist/components/Table/components/Row.d.ts.map +0 -1
- package/dist/components/Table/components/Row.js +0 -254
- package/dist/components/Table/components/SelectToggle.d.ts +0 -8
- package/dist/components/Table/components/SelectToggle.d.ts.map +0 -1
- package/dist/components/Table/components/SelectToggle.js +0 -15
- package/dist/components/Table/components/SortHeader.d.ts +0 -23
- package/dist/components/Table/components/SortHeader.d.ts.map +0 -1
- package/dist/components/Table/components/SortHeader.js +0 -37
- package/dist/components/Table/components/cell.d.ts +0 -48
- package/dist/components/Table/components/cell.d.ts.map +0 -1
- package/dist/components/Table/components/cell.js +0 -40
- package/dist/components/Table/hooks/useSetupColumnSizes.d.ts +0 -24
- package/dist/components/Table/hooks/useSetupColumnSizes.d.ts.map +0 -1
- package/dist/components/Table/hooks/useSetupColumnSizes.js +0 -67
- package/dist/components/Table/index.d.ts +0 -28
- package/dist/components/Table/index.d.ts.map +0 -1
- package/dist/components/Table/index.js +0 -57
- package/dist/components/Table/types.d.ts +0 -123
- package/dist/components/Table/types.d.ts.map +0 -1
- package/dist/components/Table/types.js +0 -20
- package/dist/components/Table/utils/ColumnState.d.ts +0 -25
- package/dist/components/Table/utils/ColumnState.d.ts.map +0 -1
- package/dist/components/Table/utils/ColumnState.js +0 -89
- package/dist/components/Table/utils/ColumnStates.d.ts +0 -30
- package/dist/components/Table/utils/ColumnStates.d.ts.map +0 -1
- package/dist/components/Table/utils/ColumnStates.js +0 -84
- package/dist/components/Table/utils/ColumnStorage.d.ts +0 -15
- package/dist/components/Table/utils/ColumnStorage.d.ts.map +0 -1
- package/dist/components/Table/utils/ColumnStorage.js +0 -38
- package/dist/components/Table/utils/GridRowLookup.d.ts +0 -34
- package/dist/components/Table/utils/GridRowLookup.d.ts.map +0 -1
- package/dist/components/Table/utils/GridRowLookup.js +0 -67
- package/dist/components/Table/utils/RowState.d.ts +0 -128
- package/dist/components/Table/utils/RowState.d.ts.map +0 -1
- package/dist/components/Table/utils/RowState.js +0 -351
- package/dist/components/Table/utils/RowStates.d.ts +0 -41
- package/dist/components/Table/utils/RowStates.d.ts.map +0 -1
- package/dist/components/Table/utils/RowStates.js +0 -197
- package/dist/components/Table/utils/RowStorage.d.ts +0 -29
- package/dist/components/Table/utils/RowStorage.d.ts.map +0 -1
- package/dist/components/Table/utils/RowStorage.js +0 -43
- package/dist/components/Table/utils/TableState.d.ts +0 -102
- package/dist/components/Table/utils/TableState.d.ts.map +0 -1
- package/dist/components/Table/utils/TableState.js +0 -267
- package/dist/components/Table/utils/columns.d.ts +0 -36
- package/dist/components/Table/utils/columns.d.ts.map +0 -1
- package/dist/components/Table/utils/columns.js +0 -256
- package/dist/components/Table/utils/simpleHelpers.d.ts +0 -31
- package/dist/components/Table/utils/simpleHelpers.d.ts.map +0 -1
- package/dist/components/Table/utils/simpleHelpers.js +0 -12
- package/dist/components/Table/utils/sortRows.d.ts +0 -10
- package/dist/components/Table/utils/sortRows.d.ts.map +0 -1
- package/dist/components/Table/utils/sortRows.js +0 -109
- package/dist/components/Table/utils/utils.d.ts +0 -56
- package/dist/components/Table/utils/utils.d.ts.map +0 -1
- package/dist/components/Table/utils/utils.js +0 -208
- package/dist/components/Table/utils/visitor.d.ts +0 -3
- package/dist/components/Table/utils/visitor.d.ts.map +0 -1
- package/dist/components/Table/utils/visitor.js +0 -13
- package/dist/components/Tabs.d.ts +0 -136
- package/dist/components/Tabs.d.ts.map +0 -1
- package/dist/components/Tabs.js +0 -162
- package/dist/components/Tag.d.ts +0 -18
- package/dist/components/Tag.d.ts.map +0 -1
- package/dist/components/Tag.js +0 -44
- package/dist/components/Toast/Toast.d.ts +0 -2
- package/dist/components/Toast/Toast.d.ts.map +0 -1
- package/dist/components/Toast/Toast.js +0 -12
- package/dist/components/Toast/ToastContext.d.ts +0 -15
- package/dist/components/Toast/ToastContext.d.ts.map +0 -1
- package/dist/components/Toast/ToastContext.js +0 -23
- package/dist/components/Toast/useToast.d.ts +0 -7
- package/dist/components/Toast/useToast.d.ts.map +0 -1
- package/dist/components/Toast/useToast.js +0 -10
- package/dist/components/ToggleChip.d.ts +0 -11
- package/dist/components/ToggleChip.d.ts.map +0 -1
- package/dist/components/ToggleChip.js +0 -26
- package/dist/components/ToggleChips.d.ts +0 -12
- package/dist/components/ToggleChips.d.ts.map +0 -1
- package/dist/components/ToggleChips.js +0 -13
- package/dist/components/Tooltip.d.ts +0 -19
- package/dist/components/Tooltip.d.ts.map +0 -1
- package/dist/components/Tooltip.js +0 -61
- package/dist/components/index.d.ts +0 -51
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -73
- package/dist/components/internal/CompoundField.d.ts +0 -5
- package/dist/components/internal/CompoundField.d.ts.map +0 -1
- package/dist/components/internal/CompoundField.js +0 -30
- package/dist/components/internal/ContextualModal.d.ts +0 -8
- package/dist/components/internal/ContextualModal.d.ts.map +0 -1
- package/dist/components/internal/ContextualModal.js +0 -12
- package/dist/components/internal/DatePicker/DatePicker.d.ts +0 -11
- package/dist/components/internal/DatePicker/DatePicker.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/DatePicker.js +0 -23
- package/dist/components/internal/DatePicker/DatePickerOverlay.d.ts +0 -7
- package/dist/components/internal/DatePicker/DatePickerOverlay.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/DatePickerOverlay.js +0 -9
- package/dist/components/internal/DatePicker/DateRangePicker.d.ts +0 -12
- package/dist/components/internal/DatePicker/DateRangePicker.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/DateRangePicker.js +0 -21
- package/dist/components/internal/DatePicker/Day.d.ts +0 -4
- package/dist/components/internal/DatePicker/Day.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/Day.js +0 -54
- package/dist/components/internal/DatePicker/Header.d.ts +0 -4
- package/dist/components/internal/DatePicker/Header.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/Header.js +0 -20
- package/dist/components/internal/DatePicker/WeekHeader.d.ts +0 -2
- package/dist/components/internal/DatePicker/WeekHeader.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/WeekHeader.js +0 -15
- package/dist/components/internal/DatePicker/index.d.ts +0 -4
- package/dist/components/internal/DatePicker/index.d.ts.map +0 -1
- package/dist/components/internal/DatePicker/index.js +0 -19
- package/dist/components/internal/Menu.d.ts +0 -15
- package/dist/components/internal/Menu.d.ts.map +0 -1
- package/dist/components/internal/Menu.js +0 -71
- package/dist/components/internal/MenuItem.d.ts +0 -12
- package/dist/components/internal/MenuItem.d.ts.map +0 -1
- package/dist/components/internal/MenuItem.js +0 -99
- package/dist/components/internal/MenuSection.d.ts +0 -12
- package/dist/components/internal/MenuSection.d.ts.map +0 -1
- package/dist/components/internal/MenuSection.js +0 -16
- package/dist/components/internal/OverlayTrigger.d.ts +0 -47
- package/dist/components/internal/OverlayTrigger.d.ts.map +0 -1
- package/dist/components/internal/OverlayTrigger.js +0 -54
- package/dist/components/internal/Popover.d.ts +0 -12
- package/dist/components/internal/Popover.d.ts.map +0 -1
- package/dist/components/internal/Popover.js +0 -29
- package/dist/components/internal/index.d.ts +0 -6
- package/dist/components/internal/index.d.ts.map +0 -1
- package/dist/components/internal/index.js +0 -21
- package/dist/components/testData.d.ts +0 -8
- package/dist/components/testData.d.ts.map +0 -1
- package/dist/components/testData.js +0 -14
- package/dist/forms/BoundCheckboxField.d.ts +0 -11
- package/dist/forms/BoundCheckboxField.d.ts.map +0 -1
- package/dist/forms/BoundCheckboxField.js +0 -24
- package/dist/forms/BoundCheckboxGroupField.d.ts +0 -12
- package/dist/forms/BoundCheckboxGroupField.d.ts.map +0 -1
- package/dist/forms/BoundCheckboxGroupField.js +0 -24
- package/dist/forms/BoundChipSelectField.d.ts +0 -13
- package/dist/forms/BoundChipSelectField.d.ts.map +0 -1
- package/dist/forms/BoundChipSelectField.js +0 -29
- package/dist/forms/BoundDateField.d.ts +0 -10
- package/dist/forms/BoundDateField.d.ts.map +0 -1
- package/dist/forms/BoundDateField.js +0 -26
- package/dist/forms/BoundDateRangeField.d.ts +0 -11
- package/dist/forms/BoundDateRangeField.d.ts.map +0 -1
- package/dist/forms/BoundDateRangeField.js +0 -26
- package/dist/forms/BoundIconCardField.d.ts +0 -13
- package/dist/forms/BoundIconCardField.d.ts.map +0 -1
- package/dist/forms/BoundIconCardField.js +0 -18
- package/dist/forms/BoundIconCardGroupField.d.ts +0 -12
- package/dist/forms/BoundIconCardGroupField.d.ts.map +0 -1
- package/dist/forms/BoundIconCardGroupField.js +0 -18
- package/dist/forms/BoundMultiLineSelectField.d.ts +0 -14
- package/dist/forms/BoundMultiLineSelectField.d.ts.map +0 -1
- package/dist/forms/BoundMultiLineSelectField.js +0 -25
- package/dist/forms/BoundMultiSelectField.d.ts +0 -21
- package/dist/forms/BoundMultiSelectField.d.ts.map +0 -1
- package/dist/forms/BoundMultiSelectField.js +0 -25
- package/dist/forms/BoundNumberField.d.ts +0 -10
- package/dist/forms/BoundNumberField.d.ts.map +0 -1
- package/dist/forms/BoundNumberField.js +0 -23
- package/dist/forms/BoundRadioGroupField.d.ts +0 -11
- package/dist/forms/BoundRadioGroupField.d.ts.map +0 -1
- package/dist/forms/BoundRadioGroupField.js +0 -23
- package/dist/forms/BoundRichTextField.d.ts +0 -9
- package/dist/forms/BoundRichTextField.d.ts.map +0 -1
- package/dist/forms/BoundRichTextField.js +0 -23
- package/dist/forms/BoundSelectAndTextField.d.ts +0 -18
- package/dist/forms/BoundSelectAndTextField.d.ts.map +0 -1
- package/dist/forms/BoundSelectAndTextField.js +0 -13
- package/dist/forms/BoundSelectField.d.ts +0 -30
- package/dist/forms/BoundSelectField.d.ts.map +0 -1
- package/dist/forms/BoundSelectField.js +0 -24
- package/dist/forms/BoundSwitchField.d.ts +0 -11
- package/dist/forms/BoundSwitchField.d.ts.map +0 -1
- package/dist/forms/BoundSwitchField.js +0 -17
- package/dist/forms/BoundTextAreaField.d.ts +0 -12
- package/dist/forms/BoundTextAreaField.d.ts.map +0 -1
- package/dist/forms/BoundTextAreaField.js +0 -23
- package/dist/forms/BoundTextField.d.ts +0 -12
- package/dist/forms/BoundTextField.d.ts.map +0 -1
- package/dist/forms/BoundTextField.js +0 -23
- package/dist/forms/BoundToggleChipGroupField.d.ts +0 -11
- package/dist/forms/BoundToggleChipGroupField.d.ts.map +0 -1
- package/dist/forms/BoundToggleChipGroupField.js +0 -14
- package/dist/forms/BoundTreeSelectField.d.ts +0 -22
- package/dist/forms/BoundTreeSelectField.d.ts.map +0 -1
- package/dist/forms/BoundTreeSelectField.js +0 -25
- package/dist/forms/FormHeading.d.ts +0 -11
- package/dist/forms/FormHeading.d.ts.map +0 -1
- package/dist/forms/FormHeading.js +0 -16
- package/dist/forms/FormLines.d.ts +0 -36
- package/dist/forms/FormLines.d.ts.map +0 -1
- package/dist/forms/FormLines.js +0 -66
- package/dist/forms/FormStateApp.d.ts +0 -5
- package/dist/forms/FormStateApp.d.ts.map +0 -1
- package/dist/forms/FormStateApp.js +0 -116
- package/dist/forms/StaticField.d.ts +0 -11
- package/dist/forms/StaticField.d.ts.map +0 -1
- package/dist/forms/StaticField.js +0 -16
- package/dist/forms/StepperFormApp.d.ts +0 -2
- package/dist/forms/StepperFormApp.d.ts.map +0 -1
- package/dist/forms/StepperFormApp.js +0 -112
- package/dist/forms/SubmitButton.d.ts +0 -9
- package/dist/forms/SubmitButton.d.ts.map +0 -1
- package/dist/forms/SubmitButton.js +0 -22
- package/dist/forms/formStateDomain.d.ts +0 -55
- package/dist/forms/formStateDomain.d.ts.map +0 -1
- package/dist/forms/formStateDomain.js +0 -31
- package/dist/forms/index.d.ts +0 -24
- package/dist/forms/index.d.ts.map +0 -1
- package/dist/forms/index.js +0 -39
- package/dist/forms/labelUtils.d.ts +0 -2
- package/dist/forms/labelUtils.d.ts.map +0 -1
- package/dist/forms/labelUtils.js +0 -18
- package/dist/hooks/index.d.ts +0 -9
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -24
- package/dist/hooks/useBreakpoint.d.ts +0 -12
- package/dist/hooks/useBreakpoint.d.ts.map +0 -1
- package/dist/hooks/useBreakpoint.js +0 -40
- package/dist/hooks/useComputed.d.ts +0 -44
- package/dist/hooks/useComputed.d.ts.map +0 -1
- package/dist/hooks/useComputed.js +0 -107
- package/dist/hooks/useFilter.d.ts +0 -11
- package/dist/hooks/useFilter.d.ts.map +0 -1
- package/dist/hooks/useFilter.js +0 -11
- package/dist/hooks/useGetRef.d.ts +0 -7
- package/dist/hooks/useGetRef.d.ts.map +0 -1
- package/dist/hooks/useGetRef.js +0 -13
- package/dist/hooks/useGroupBy.d.ts +0 -13
- package/dist/hooks/useGroupBy.d.ts.map +0 -1
- package/dist/hooks/useGroupBy.js +0 -13
- package/dist/hooks/useHover.d.ts +0 -13
- package/dist/hooks/useHover.d.ts.map +0 -1
- package/dist/hooks/useHover.js +0 -9
- package/dist/hooks/usePersistedFilter.d.ts +0 -17
- package/dist/hooks/usePersistedFilter.d.ts.map +0 -1
- package/dist/hooks/usePersistedFilter.js +0 -48
- package/dist/hooks/useQueryState.d.ts +0 -11
- package/dist/hooks/useQueryState.d.ts.map +0 -1
- package/dist/hooks/useQueryState.js +0 -19
- package/dist/hooks/useRenderCount.d.ts +0 -18
- package/dist/hooks/useRenderCount.d.ts.map +0 -1
- package/dist/hooks/useRenderCount.js +0 -27
- package/dist/hooks/useSessionStorage.d.ts +0 -4
- package/dist/hooks/useSessionStorage.d.ts.map +0 -1
- package/dist/hooks/useSessionStorage.js +0 -40
- package/dist/index.d.ts.map +0 -1
- package/dist/inputs/Autocomplete.d.ts +0 -30
- package/dist/inputs/Autocomplete.d.ts.map +0 -1
- package/dist/inputs/Autocomplete.js +0 -66
- package/dist/inputs/Checkbox.d.ts +0 -24
- package/dist/inputs/Checkbox.d.ts.map +0 -1
- package/dist/inputs/Checkbox.js +0 -20
- package/dist/inputs/CheckboxBase.d.ts +0 -37
- package/dist/inputs/CheckboxBase.d.ts.map +0 -1
- package/dist/inputs/CheckboxBase.js +0 -59
- package/dist/inputs/CheckboxGroup.d.ts +0 -29
- package/dist/inputs/CheckboxGroup.d.ts.map +0 -1
- package/dist/inputs/CheckboxGroup.js +0 -30
- package/dist/inputs/ChipSelectField.d.ts +0 -34
- package/dist/inputs/ChipSelectField.d.ts.map +0 -1
- package/dist/inputs/ChipSelectField.js +0 -203
- package/dist/inputs/ChipTextField.d.ts +0 -14
- package/dist/inputs/ChipTextField.d.ts.map +0 -1
- package/dist/inputs/ChipTextField.js +0 -63
- package/dist/inputs/DateFields/DateField.d.ts +0 -5
- package/dist/inputs/DateFields/DateField.d.ts.map +0 -1
- package/dist/inputs/DateFields/DateField.js +0 -8
- package/dist/inputs/DateFields/DateField.mock.d.ts +0 -4
- package/dist/inputs/DateFields/DateField.mock.d.ts.map +0 -1
- package/dist/inputs/DateFields/DateField.mock.js +0 -18
- package/dist/inputs/DateFields/DateFieldBase.d.ts +0 -50
- package/dist/inputs/DateFields/DateFieldBase.d.ts.map +0 -1
- package/dist/inputs/DateFields/DateFieldBase.js +0 -175
- package/dist/inputs/DateFields/DateRangeField.d.ts +0 -5
- package/dist/inputs/DateFields/DateRangeField.d.ts.map +0 -1
- package/dist/inputs/DateFields/DateRangeField.js +0 -8
- package/dist/inputs/DateFields/index.d.ts +0 -6
- package/dist/inputs/DateFields/index.d.ts.map +0 -1
- package/dist/inputs/DateFields/index.js +0 -22
- package/dist/inputs/DateFields/utils.d.ts +0 -15
- package/dist/inputs/DateFields/utils.d.ts.map +0 -1
- package/dist/inputs/DateFields/utils.js +0 -82
- package/dist/inputs/ErrorMessage.d.ts +0 -15
- package/dist/inputs/ErrorMessage.d.ts.map +0 -1
- package/dist/inputs/ErrorMessage.js +0 -17
- package/dist/inputs/IconCard.d.ts +0 -25
- package/dist/inputs/IconCard.d.ts.map +0 -1
- package/dist/inputs/IconCard.js +0 -38
- package/dist/inputs/IconCardGroup.d.ts +0 -27
- package/dist/inputs/IconCardGroup.d.ts.map +0 -1
- package/dist/inputs/IconCardGroup.js +0 -54
- package/dist/inputs/MultiLineSelectField.d.ts +0 -12
- package/dist/inputs/MultiLineSelectField.d.ts.map +0 -1
- package/dist/inputs/MultiLineSelectField.js +0 -29
- package/dist/inputs/MultiSelectField.d.ts +0 -21
- package/dist/inputs/MultiSelectField.d.ts.map +0 -1
- package/dist/inputs/MultiSelectField.js +0 -11
- package/dist/inputs/NumberField.d.ts +0 -42
- package/dist/inputs/NumberField.d.ts.map +0 -1
- package/dist/inputs/NumberField.js +0 -118
- package/dist/inputs/RadioGroupField.d.ts +0 -89
- package/dist/inputs/RadioGroupField.d.ts.map +0 -1
- package/dist/inputs/RadioGroupField.js +0 -118
- package/dist/inputs/RichTextField.d.ts +0 -33
- package/dist/inputs/RichTextField.d.ts.map +0 -1
- package/dist/inputs/RichTextField.js +0 -174
- package/dist/inputs/RichTextField.mock.d.ts +0 -4
- package/dist/inputs/RichTextField.mock.d.ts.map +0 -1
- package/dist/inputs/RichTextField.mock.js +0 -21
- package/dist/inputs/SelectField.d.ts +0 -24
- package/dist/inputs/SelectField.d.ts.map +0 -1
- package/dist/inputs/SelectField.js +0 -18
- package/dist/inputs/Switch.d.ts +0 -34
- package/dist/inputs/Switch.d.ts.map +0 -1
- package/dist/inputs/Switch.js +0 -77
- package/dist/inputs/SwitchGroup.d.ts +0 -21
- package/dist/inputs/SwitchGroup.d.ts.map +0 -1
- package/dist/inputs/SwitchGroup.js +0 -23
- package/dist/inputs/TextAreaField.d.ts +0 -9
- package/dist/inputs/TextAreaField.d.ts.map +0 -1
- package/dist/inputs/TextAreaField.js +0 -42
- package/dist/inputs/TextField.d.ts +0 -29
- package/dist/inputs/TextField.d.ts.map +0 -1
- package/dist/inputs/TextField.js +0 -43
- package/dist/inputs/TextFieldBase.d.ts +0 -25
- package/dist/inputs/TextFieldBase.d.ts.map +0 -1
- package/dist/inputs/TextFieldBase.js +0 -193
- package/dist/inputs/ToggleButton.d.ts +0 -25
- package/dist/inputs/ToggleButton.d.ts.map +0 -1
- package/dist/inputs/ToggleButton.js +0 -61
- package/dist/inputs/ToggleChipGroup.d.ts +0 -25
- package/dist/inputs/ToggleChipGroup.d.ts.map +0 -1
- package/dist/inputs/ToggleChipGroup.js +0 -47
- package/dist/inputs/TreeSelectField/TreeOption.d.ts +0 -13
- package/dist/inputs/TreeSelectField/TreeOption.d.ts.map +0 -1
- package/dist/inputs/TreeSelectField/TreeOption.js +0 -62
- package/dist/inputs/TreeSelectField/TreeSelectField.d.ts +0 -56
- package/dist/inputs/TreeSelectField/TreeSelectField.d.ts.map +0 -1
- package/dist/inputs/TreeSelectField/TreeSelectField.js +0 -468
- package/dist/inputs/TreeSelectField/index.d.ts +0 -3
- package/dist/inputs/TreeSelectField/index.d.ts.map +0 -1
- package/dist/inputs/TreeSelectField/index.js +0 -17
- package/dist/inputs/TreeSelectField/utils.d.ts +0 -54
- package/dist/inputs/TreeSelectField/utils.d.ts.map +0 -1
- package/dist/inputs/TreeSelectField/utils.js +0 -49
- package/dist/inputs/Value.d.ts +0 -18
- package/dist/inputs/Value.d.ts.map +0 -1
- package/dist/inputs/Value.js +0 -53
- package/dist/inputs/hooks/useGrowingTextField.d.ts +0 -10
- package/dist/inputs/hooks/useGrowingTextField.d.ts.map +0 -1
- package/dist/inputs/hooks/useGrowingTextField.js +0 -44
- package/dist/inputs/index.d.ts +0 -24
- package/dist/inputs/index.d.ts.map +0 -1
- package/dist/inputs/index.js +0 -37
- package/dist/inputs/internal/ComboBoxBase.d.ts +0 -89
- package/dist/inputs/internal/ComboBoxBase.d.ts.map +0 -1
- package/dist/inputs/internal/ComboBoxBase.js +0 -302
- package/dist/inputs/internal/ComboBoxInput.d.ts +0 -36
- package/dist/inputs/internal/ComboBoxInput.d.ts.map +0 -1
- package/dist/inputs/internal/ComboBoxInput.js +0 -153
- package/dist/inputs/internal/ListBox.d.ts +0 -20
- package/dist/inputs/internal/ListBox.d.ts.map +0 -1
- package/dist/inputs/internal/ListBox.js +0 -68
- package/dist/inputs/internal/ListBoxChip.d.ts +0 -6
- package/dist/inputs/internal/ListBoxChip.d.ts.map +0 -1
- package/dist/inputs/internal/ListBoxChip.js +0 -10
- package/dist/inputs/internal/ListBoxSection.d.ts +0 -14
- package/dist/inputs/internal/ListBoxSection.d.ts.map +0 -1
- package/dist/inputs/internal/ListBoxSection.js +0 -19
- package/dist/inputs/internal/ListBoxToggleChip.d.ts +0 -13
- package/dist/inputs/internal/ListBoxToggleChip.d.ts.map +0 -1
- package/dist/inputs/internal/ListBoxToggleChip.js +0 -13
- package/dist/inputs/internal/LoadingDots.d.ts +0 -4
- package/dist/inputs/internal/LoadingDots.d.ts.map +0 -1
- package/dist/inputs/internal/LoadingDots.js +0 -28
- package/dist/inputs/internal/MenuSearchField.d.ts +0 -7
- package/dist/inputs/internal/MenuSearchField.d.ts.map +0 -1
- package/dist/inputs/internal/MenuSearchField.js +0 -15
- package/dist/inputs/internal/Option.d.ts +0 -13
- package/dist/inputs/internal/Option.d.ts.map +0 -1
- package/dist/inputs/internal/Option.js +0 -44
- package/dist/inputs/internal/VirtualizedOptions.d.ts +0 -17
- package/dist/inputs/internal/VirtualizedOptions.d.ts.map +0 -1
- package/dist/inputs/internal/VirtualizedOptions.js +0 -58
- package/dist/inputs/internal/constants.d.ts +0 -3
- package/dist/inputs/internal/constants.d.ts.map +0 -1
- package/dist/inputs/internal/constants.js +0 -5
- package/dist/inputs/utils.d.ts +0 -2
- package/dist/inputs/utils.d.ts.map +0 -1
- package/dist/inputs/utils.js +0 -6
- package/dist/interfaces.d.ts +0 -60
- package/dist/interfaces.d.ts.map +0 -1
- package/dist/interfaces.js +0 -2
- package/dist/types.d.ts +0 -32
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/utils/defaultLabel.d.ts +0 -9
- package/dist/utils/defaultLabel.d.ts.map +0 -1
- package/dist/utils/defaultLabel.js +0 -14
- package/dist/utils/defaultTestId.d.ts +0 -11
- package/dist/utils/defaultTestId.d.ts.map +0 -1
- package/dist/utils/defaultTestId.js +0 -18
- package/dist/utils/getInteractiveElement.d.ts +0 -7
- package/dist/utils/getInteractiveElement.d.ts.map +0 -1
- package/dist/utils/getInteractiveElement.js +0 -14
- package/dist/utils/index.d.ts +0 -36
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -109
- package/dist/utils/objectId.d.ts +0 -3
- package/dist/utils/objectId.d.ts.map +0 -1
- package/dist/utils/objectId.js +0 -14
- package/dist/utils/options.d.ts +0 -3
- package/dist/utils/options.d.ts.map +0 -1
- package/dist/utils/options.js +0 -24
- package/dist/utils/rtl.d.ts +0 -45
- package/dist/utils/rtl.d.ts.map +0 -1
- package/dist/utils/rtl.js +0 -241
- package/dist/utils/sb.d.ts +0 -27
- package/dist/utils/sb.d.ts.map +0 -1
- package/dist/utils/sb.js +0 -37
- package/dist/utils/shallowEqual.d.ts +0 -5
- package/dist/utils/shallowEqual.d.ts.map +0 -1
- package/dist/utils/shallowEqual.js +0 -27
- package/dist/utils/useTestIds.d.ts +0 -36
- package/dist/utils/useTestIds.d.ts.map +0 -1
- package/dist/utils/useTestIds.js +0 -63
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Css.ts","../src/components/AutoSaveStatus/AutoSaveStatusProvider.tsx","../src/components/AutoSaveStatus/useAutoSaveStatus.ts","../src/components/Icon.tsx","../src/components/Tooltip.tsx","../src/components/PresentationContext.tsx","../src/components/Chip.tsx","../src/components/Chips.tsx","../src/components/Table/GridTable.tsx","../src/components/Table/GridTableApi.ts","../src/components/Table/utils/TableState.ts","../src/components/Table/utils/ColumnStates.ts","../src/components/Table/utils/ColumnState.ts","../src/components/Table/components/CollapseToggle.tsx","../src/hooks/useBreakpoint.tsx","../src/hooks/useComputed.ts","../src/utils/shallowEqual.ts","../src/hooks/useFilter.ts","../src/hooks/useGroupBy.ts","../src/hooks/useQueryState.ts","../src/hooks/useHover.ts","../src/hooks/usePersistedFilter.ts","../src/hooks/useSessionStorage.ts","../src/components/Table/components/SelectToggle.tsx","../src/inputs/Autocomplete.tsx","../src/components/internal/DatePicker/DatePicker.tsx","../src/components/internal/DatePicker/Day.tsx","../src/components/internal/DatePicker/Header.tsx","../src/components/IconButton.tsx","../src/hooks/useGetRef.ts","../src/utils/getInteractiveElement.tsx","../src/components/internal/DatePicker/WeekHeader.tsx","../src/components/internal/DatePicker/DatePickerOverlay.tsx","../src/components/internal/DatePicker/DateRangePicker.tsx","../src/components/internal/Menu.tsx","../src/components/internal/MenuSection.tsx","../src/inputs/internal/MenuSearchField.tsx","../src/inputs/TextFieldBase.tsx","../src/components/HelperText.tsx","../src/components/Label.tsx","../src/components/Table/components/Row.tsx","../src/components/Table/components/cell.tsx","../src/components/CssReset.tsx","../src/components/Table/components/KeptGroupRow.tsx","../src/components/Table/components/EditColumnsButton.tsx","../src/components/Button.tsx","../src/components/internal/OverlayTrigger.tsx","../src/components/Avatar/AvatarButton.tsx","../src/components/Avatar/Avatar.tsx","../src/components/NavLink.tsx","../src/components/Table/components/SortHeader.tsx","../src/components/Table/hooks/useSetupColumnSizes.ts","../src/components/Table/TableStyles.tsx","../src/components/Table/types.ts","../src/components/Table/utils/GridRowLookup.ts","../src/components/Table/utils/simpleHelpers.ts","../src/components/Table/components/ExpandableHeader.tsx","../src/components/Loader.tsx","../src/components/Table/utils/utils.tsx","../src/components/Table/utils/sortRows.ts","../src/components/Table/utils/visitor.ts","../src/components/Table/utils/RowState.ts","../src/forms/labelUtils.ts","../src/inputs/ErrorMessage.tsx","../src/inputs/utils.ts","../src/components/internal/MenuItem.tsx","../src/components/ButtonModal.tsx","../src/components/internal/ContextualModal.tsx","../src/components/Avatar/AvatarGroup.tsx","../src/components/internal/Popover.tsx","../src/inputs/internal/ComboBoxBase.tsx","../src/inputs/internal/ComboBoxInput.tsx","../src/inputs/hooks/useGrowingTextField.tsx","../src/inputs/TreeSelectField/TreeSelectField.tsx","../src/inputs/internal/ListBox.tsx","../src/inputs/internal/constants.ts","../src/inputs/internal/ListBoxSection.tsx","../src/inputs/internal/Option.tsx","../src/inputs/ChipSelectField.tsx","../src/inputs/ChipTextField.tsx","../src/inputs/internal/ListBoxChip.tsx","../src/inputs/Value.ts","../src/utils/options.ts","../src/inputs/internal/VirtualizedOptions.tsx","../src/inputs/internal/LoadingDots.tsx","../src/inputs/TreeSelectField/TreeOption.tsx","../src/inputs/CheckboxBase.tsx","../src/inputs/TreeSelectField/utils.ts","../src/inputs/internal/ListBoxToggleChip.tsx","../src/inputs/Checkbox.tsx","../src/inputs/CheckboxGroup.tsx","../src/inputs/DateFields/DateField.mock.tsx","../src/inputs/DateFields/DateFieldBase.tsx","../src/inputs/DateFields/utils.ts","../src/utils/withTestMock.tsx","../src/inputs/DateFields/DateField.tsx","../src/inputs/DateFields/DateRangeField.tsx","../src/inputs/IconCard.tsx","../src/inputs/MultiLineSelectField.tsx","../src/inputs/MultiSelectField.tsx","../src/inputs/NumberField.tsx","../src/inputs/RadioGroupField.tsx","../src/inputs/RichTextField.tsx","../src/inputs/RichTextField.mock.tsx","../src/inputs/SelectField.tsx","../src/inputs/Switch.tsx","../src/inputs/TextAreaField.tsx","../src/inputs/TextField.tsx","../src/inputs/ToggleButton.tsx","../src/inputs/ToggleChipGroup.tsx","../src/components/Table/utils/columns.tsx","../src/components/Table/utils/ColumnStorage.ts","../src/components/Table/utils/RowStates.ts","../src/components/Table/utils/RowStorage.ts","../src/hooks/useRenderCount.ts","../src/components/ToggleChip.tsx","../src/components/ToggleChips.tsx","../src/components/Accordion.tsx","../src/components/AccordionList.tsx","../src/components/AutoSaveIndicator.tsx","../src/types.ts","../src/components/Banner.tsx","../src/components/BeamContext.tsx","../src/components/Modal/Modal.tsx","../src/components/Modal/useModal.tsx","../src/components/Modal/ModalContext.tsx","../src/components/Snackbar/SnackbarContext.tsx","../src/components/Snackbar/SnackbarNotice.tsx","../src/components/Snackbar/Snackbar.tsx","../src/components/SuperDrawer/SuperDrawer.tsx","../src/components/SuperDrawer/utils.ts","../src/components/Layout/FullBleed.tsx","../src/components/Layout/ScrollableParent.tsx","../src/components/Layout/PreventBrowserScroll.tsx","../src/components/Layout/RightPaneLayout/RightPaneContext.tsx","../src/components/Layout/RightPaneLayout/RightPaneLayout.tsx","../src/components/Layout/RightPaneLayout/useRightPane.tsx","../src/components/Layout/ScrollableContent.tsx","../src/components/Toast/ToastContext.tsx","../src/components/ButtonDatePicker.tsx","../src/components/ButtonGroup.tsx","../src/components/ButtonMenu.tsx","../src/components/Copy.tsx","../src/components/DnDGrid/DnDGrid.tsx","../src/components/DnDGrid/DnDGridContext.tsx","../src/components/DnDGrid/DnDGridItemHandle.tsx","../src/components/DnDGrid/useDnDGridItem.tsx","../src/utils/defaultLabel.ts","../src/components/Filters/BaseFilter.ts","../src/components/internal/CompoundField.tsx","../src/components/Filters/DateFilter.tsx","../src/components/Filters/DateRangeFilter.tsx","../src/components/Filters/MultiFilter.tsx","../src/components/Filters/NumberRangeFilter.tsx","../src/components/Filters/SingleFilter.tsx","../src/components/Filters/TreeFilter.tsx","../src/components/Filters/BooleanFilter.tsx","../src/components/Filters/CheckboxFilter.tsx","../src/components/Filters/FilterModal.tsx","../src/components/Modal/OpenModal.tsx","../src/components/Filters/Filters.tsx","../src/components/Filters/ToggleFilter.tsx","../src/components/Filters/utils.tsx","../src/components/Grid/ResponsiveGrid.tsx","../src/components/Grid/ResponsiveGridItem.tsx","../src/components/Grid/useResponsiveGrid.ts","../src/components/Grid/utils.ts","../src/components/Grid/useResponsiveGridItem.ts","../src/components/HbLoadingSpinner.tsx","../src/components/HbLoadingSpinner.base64.ts","../src/components/LoadingSkeleton.tsx","../src/components/MaxLines.tsx","../src/components/Pagination.tsx","../src/components/ScrollShadows.tsx","../src/components/Snackbar/useSnackbar.tsx","../src/components/Stepper.tsx","../src/components/SuperDrawer/components/SuperDrawerHeader.tsx","../src/components/SuperDrawer/ConfirmCloseModal.tsx","../src/components/SuperDrawer/SuperDrawerContent.tsx","../src/components/SuperDrawer/useSuperDrawer.tsx","../src/components/Tabs.tsx","../src/components/Tag.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/useToast.tsx","../src/forms/BoundCheckboxField.tsx","../src/forms/BoundCheckboxGroupField.tsx","../src/forms/BoundChipSelectField.tsx","../src/forms/BoundDateField.tsx","../src/forms/BoundDateRangeField.tsx","../src/forms/BoundIconCardField.tsx","../src/forms/BoundIconCardGroupField.tsx","../src/inputs/IconCardGroup.tsx","../src/forms/BoundMultiLineSelectField.tsx","../src/forms/BoundMultiSelectField.tsx","../src/forms/BoundNumberField.tsx","../src/forms/BoundRadioGroupField.tsx","../src/forms/BoundRichTextField.tsx","../src/forms/BoundSelectAndTextField.tsx","../src/forms/BoundSelectField.tsx","../src/forms/BoundSwitchField.tsx","../src/forms/BoundTextAreaField.tsx","../src/forms/BoundTextField.tsx","../src/forms/BoundToggleChipGroupField.tsx","../src/forms/BoundTreeSelectField.tsx","../src/forms/FormHeading.tsx","../src/forms/FormLines.tsx","../src/forms/StaticField.tsx","../src/forms/SubmitButton.tsx"],"sourcesContent":["import { Properties as Properties1 } from \"csstype\";\n\n// This file is auto-generated by truss: https://github.com/homebound-team/truss.\n// See your project's `truss-config.ts` to make configuration changes (fonts, increments, etc).\n\n/** Given a type X, and the user's proposed type T, only allow keys in X and nothing else. */\nexport type Only<X, T> = X & Record<Exclude<keyof T, keyof X>, never>;\n\nexport type Properties = Properties1<string | 0, string>;\n\nexport type Typography =\n | \"tiny\"\n | \"tinyMd\"\n | \"tinySb\"\n | \"tinyBd\"\n | \"xs\"\n | \"xsMd\"\n | \"xsSb\"\n | \"xsBd\"\n | \"sm\"\n | \"smMd\"\n | \"smSb\"\n | \"smBd\"\n | \"base\"\n | \"baseMd\"\n | \"baseSb\"\n | \"baseBd\"\n | \"lg\"\n | \"lgMd\"\n | \"lgSb\"\n | \"lgBd\"\n | \"xl\"\n | \"xlMd\"\n | \"xlSb\"\n | \"xlBd\"\n | \"xl2\"\n | \"xl2Md\"\n | \"xl2Sb\"\n | \"xl2Bd\"\n | \"xl3\"\n | \"xl3Md\"\n | \"xl3Sb\"\n | \"xl3Bd\"\n | \"xl4\"\n | \"xl4Md\"\n | \"xl4Sb\"\n | \"xl4Bd\"\n | \"xl5\"\n | \"xl5Md\"\n | \"xl5Sb\"\n | \"xl5Bd\";\n\ntype Opts<T> = { rules: T; enabled: boolean; important: boolean; selector: string | undefined };\n\nclass CssBuilder<T extends Properties> {\n constructor(private opts: Opts<T>) {}\n\n private get rules(): T {\n return this.opts.rules;\n }\n private get enabled(): boolean {\n return this.opts.enabled;\n }\n private get selector(): string | undefined {\n return this.opts.selector;\n }\n private newCss(opts: Partial<Opts<T>>): CssBuilder<T> {\n return new CssBuilder({ ...this.opts, ...opts });\n }\n\n // border\n /** Sets `borderStyle: \"solid\"; borderWidth: \"1px\"`. */\n get ba() {\n return this.add(\"borderStyle\", \"solid\").add(\"borderWidth\", \"1px\");\n }\n /** Sets `borderTopStyle: \"solid\"; borderTopWidth: \"1px\"`. */\n get bt() {\n return this.add(\"borderTopStyle\", \"solid\").add(\"borderTopWidth\", \"1px\");\n }\n /** Sets `borderRightStyle: \"solid\"; borderRightWidth: \"1px\"`. */\n get br() {\n return this.add(\"borderRightStyle\", \"solid\").add(\"borderRightWidth\", \"1px\");\n }\n /** Sets `borderBottomStyle: \"solid\"; borderBottomWidth: \"1px\"`. */\n get bb() {\n return this.add(\"borderBottomStyle\", \"solid\").add(\"borderBottomWidth\", \"1px\");\n }\n /** Sets `borderLeftStyle: \"solid\"; borderLeftWidth: \"1px\"`. */\n get bl() {\n return this.add(\"borderLeftStyle\", \"solid\").add(\"borderLeftWidth\", \"1px\");\n }\n /** Sets `borderStyle: \"none\"; borderWidth: \"0\"`. */\n get bn() {\n return this.add(\"borderStyle\", \"none\").add(\"borderWidth\", \"0\");\n }\n\n // borderColor\n /** Sets `borderColor: \"rgba(255,255,255,1)\"`. */\n get bcWhite() {\n return this.add(\"borderColor\", \"rgba(255,255,255,1)\");\n }\n /** Sets `borderColor: \"rgba(0,0,0,0)\"`. */\n get bcTransparent() {\n return this.add(\"borderColor\", \"rgba(0,0,0,0)\");\n }\n /** Sets `borderColor: \"rgba(255, 253, 253, 1)\"`. */\n get bcGray50() {\n return this.add(\"borderColor\", \"rgba(255, 253, 253, 1)\");\n }\n /** Sets `borderColor: \"rgba(247, 245, 245, 1)\"`. */\n get bcGray100() {\n return this.add(\"borderColor\", \"rgba(247, 245, 245, 1)\");\n }\n /** Sets `borderColor: \"rgba(236, 235, 235, 1)\"`. */\n get bcGray200() {\n return this.add(\"borderColor\", \"rgba(236, 235, 235, 1)\");\n }\n /** Sets `borderColor: \"rgba(221, 220, 220, 1)\"`. */\n get bcGray300() {\n return this.add(\"borderColor\", \"rgba(221, 220, 220, 1)\");\n }\n /** Sets `borderColor: \"rgba(201, 201, 201, 1)\"`. */\n get bcGray400() {\n return this.add(\"borderColor\", \"rgba(201, 201, 201, 1)\");\n }\n /** Sets `borderColor: \"rgba(175, 175, 175, 1)\"`. */\n get bcGray500() {\n return this.add(\"borderColor\", \"rgba(175, 175, 175, 1)\");\n }\n /** Sets `borderColor: \"rgba(141, 141, 141, 1)\"`. */\n get bcGray600() {\n return this.add(\"borderColor\", \"rgba(141, 141, 141, 1)\");\n }\n /** Sets `borderColor: \"rgba(100, 100, 100, 1)\"`. */\n get bcGray700() {\n return this.add(\"borderColor\", \"rgba(100, 100, 100, 1)\");\n }\n /** Sets `borderColor: \"rgba(53, 53, 53, 1)\"`. */\n get bcGray800() {\n return this.add(\"borderColor\", \"rgba(53, 53, 53, 1)\");\n }\n /** Sets `borderColor: \"rgba(36, 36, 36, 1)\"`. */\n get bcGray900() {\n return this.add(\"borderColor\", \"rgba(36, 36, 36, 1)\");\n }\n /** Sets `borderColor: \"rgba(239, 246, 255, 1)\"`. */\n get bcBlue50() {\n return this.add(\"borderColor\", \"rgba(239, 246, 255, 1)\");\n }\n /** Sets `borderColor: \"rgba(219, 234, 254, 1)\"`. */\n get bcBlue100() {\n return this.add(\"borderColor\", \"rgba(219, 234, 254, 1)\");\n }\n /** Sets `borderColor: \"rgba(191, 219, 254, 1)\"`. */\n get bcBlue200() {\n return this.add(\"borderColor\", \"rgba(191, 219, 254, 1)\");\n }\n /** Sets `borderColor: \"rgba(147, 197, 253, 1)\"`. */\n get bcBlue300() {\n return this.add(\"borderColor\", \"rgba(147, 197, 253, 1)\");\n }\n /** Sets `borderColor: \"rgba(96, 165, 250, 1)\"`. */\n get bcBlue400() {\n return this.add(\"borderColor\", \"rgba(96, 165, 250, 1)\");\n }\n /** Sets `borderColor: \"rgba(59, 130, 246, 1)\"`. */\n get bcBlue500() {\n return this.add(\"borderColor\", \"rgba(59, 130, 246, 1)\");\n }\n /** Sets `borderColor: \"rgba(37, 99, 235, 1)\"`. */\n get bcBlue600() {\n return this.add(\"borderColor\", \"rgba(37, 99, 235, 1)\");\n }\n /** Sets `borderColor: \"rgba(29, 78, 216, 1)\"`. */\n get bcBlue700() {\n return this.add(\"borderColor\", \"rgba(29, 78, 216, 1)\");\n }\n /** Sets `borderColor: \"rgba(30, 64, 175, 1)\"`. */\n get bcBlue800() {\n return this.add(\"borderColor\", \"rgba(30, 64, 175, 1)\");\n }\n /** Sets `borderColor: \"rgba(30, 58, 138, 1)\"`. */\n get bcBlue900() {\n return this.add(\"borderColor\", \"rgba(30, 58, 138, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 242, 242, 1)\"`. */\n get bcRed50() {\n return this.add(\"borderColor\", \"rgba(254, 242, 242, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 226, 226, 1)\"`. */\n get bcRed100() {\n return this.add(\"borderColor\", \"rgba(254, 226, 226, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 202, 202, 1)\"`. */\n get bcRed200() {\n return this.add(\"borderColor\", \"rgba(254, 202, 202, 1)\");\n }\n /** Sets `borderColor: \"rgba(252, 165, 165, 1)\"`. */\n get bcRed300() {\n return this.add(\"borderColor\", \"rgba(252, 165, 165, 1)\");\n }\n /** Sets `borderColor: \"rgba(248, 113, 113, 1)\"`. */\n get bcRed400() {\n return this.add(\"borderColor\", \"rgba(248, 113, 113, 1)\");\n }\n /** Sets `borderColor: \"rgba(239, 68, 68, 1)\"`. */\n get bcRed500() {\n return this.add(\"borderColor\", \"rgba(239, 68, 68, 1)\");\n }\n /** Sets `borderColor: \"rgba(220, 38, 38, 1)\"`. */\n get bcRed600() {\n return this.add(\"borderColor\", \"rgba(220, 38, 38, 1)\");\n }\n /** Sets `borderColor: \"rgba(185, 28, 28, 1)\"`. */\n get bcRed700() {\n return this.add(\"borderColor\", \"rgba(185, 28, 28, 1)\");\n }\n /** Sets `borderColor: \"rgba(153, 27, 27, 1)\"`. */\n get bcRed800() {\n return this.add(\"borderColor\", \"rgba(153, 27, 27, 1)\");\n }\n /** Sets `borderColor: \"rgba(127, 29, 29, 1)\"`. */\n get bcRed900() {\n return this.add(\"borderColor\", \"rgba(127, 29, 29, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 252, 232, 1)\"`. */\n get bcYellow50() {\n return this.add(\"borderColor\", \"rgba(254, 252, 232, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 249, 195, 1)\"`. */\n get bcYellow100() {\n return this.add(\"borderColor\", \"rgba(254, 249, 195, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 240, 138, 1)\"`. */\n get bcYellow200() {\n return this.add(\"borderColor\", \"rgba(254, 240, 138, 1)\");\n }\n /** Sets `borderColor: \"rgba(253, 224, 71, 1)\"`. */\n get bcYellow300() {\n return this.add(\"borderColor\", \"rgba(253, 224, 71, 1)\");\n }\n /** Sets `borderColor: \"rgba(250, 204, 21, 1)\"`. */\n get bcYellow400() {\n return this.add(\"borderColor\", \"rgba(250, 204, 21, 1)\");\n }\n /** Sets `borderColor: \"rgba(234, 179, 8, 1)\"`. */\n get bcYellow500() {\n return this.add(\"borderColor\", \"rgba(234, 179, 8, 1)\");\n }\n /** Sets `borderColor: \"rgba(202, 138, 4, 1)\"`. */\n get bcYellow600() {\n return this.add(\"borderColor\", \"rgba(202, 138, 4, 1)\");\n }\n /** Sets `borderColor: \"rgba(161, 98, 7, 1)\"`. */\n get bcYellow700() {\n return this.add(\"borderColor\", \"rgba(161, 98, 7, 1)\");\n }\n /** Sets `borderColor: \"rgba(133, 77, 14, 1)\"`. */\n get bcYellow800() {\n return this.add(\"borderColor\", \"rgba(133, 77, 14, 1)\");\n }\n /** Sets `borderColor: \"rgba(113, 63, 18, 1)\"`. */\n get bcYellow900() {\n return this.add(\"borderColor\", \"rgba(113, 63, 18, 1)\");\n }\n /** Sets `borderColor: \"rgba(236, 253, 245, 1)\"`. */\n get bcGreen50() {\n return this.add(\"borderColor\", \"rgba(236, 253, 245, 1)\");\n }\n /** Sets `borderColor: \"rgba(209, 250, 229, 1)\"`. */\n get bcGreen100() {\n return this.add(\"borderColor\", \"rgba(209, 250, 229, 1)\");\n }\n /** Sets `borderColor: \"rgba(167, 243, 208, 1)\"`. */\n get bcGreen200() {\n return this.add(\"borderColor\", \"rgba(167, 243, 208, 1)\");\n }\n /** Sets `borderColor: \"rgba(110, 231, 183, 1)\"`. */\n get bcGreen300() {\n return this.add(\"borderColor\", \"rgba(110, 231, 183, 1)\");\n }\n /** Sets `borderColor: \"rgba(52, 211, 153, 1)\"`. */\n get bcGreen400() {\n return this.add(\"borderColor\", \"rgba(52, 211, 153, 1)\");\n }\n /** Sets `borderColor: \"rgba(16, 185, 129, 1)\"`. */\n get bcGreen500() {\n return this.add(\"borderColor\", \"rgba(16, 185, 129, 1)\");\n }\n /** Sets `borderColor: \"rgba(5, 150, 105, 1)\"`. */\n get bcGreen600() {\n return this.add(\"borderColor\", \"rgba(5, 150, 105, 1)\");\n }\n /** Sets `borderColor: \"rgba(4, 120, 87, 1)\"`. */\n get bcGreen700() {\n return this.add(\"borderColor\", \"rgba(4, 120, 87, 1)\");\n }\n /** Sets `borderColor: \"rgba(6, 95, 70, 1)\"`. */\n get bcGreen800() {\n return this.add(\"borderColor\", \"rgba(6, 95, 70, 1)\");\n }\n /** Sets `borderColor: \"rgba(6, 78, 59, 1)\"`. */\n get bcGreen900() {\n return this.add(\"borderColor\", \"rgba(6, 78, 59, 1)\");\n }\n /** Sets `borderColor: \"rgba(245, 243, 255, 1)\"`. */\n get bcPurple50() {\n return this.add(\"borderColor\", \"rgba(245, 243, 255, 1)\");\n }\n /** Sets `borderColor: \"rgba(237, 233, 254, 1)\"`. */\n get bcPurple100() {\n return this.add(\"borderColor\", \"rgba(237, 233, 254, 1)\");\n }\n /** Sets `borderColor: \"rgba(221, 214, 254, 1)\"`. */\n get bcPurple200() {\n return this.add(\"borderColor\", \"rgba(221, 214, 254, 1)\");\n }\n /** Sets `borderColor: \"rgba(196, 181, 253, 1)\"`. */\n get bcPurple300() {\n return this.add(\"borderColor\", \"rgba(196, 181, 253, 1)\");\n }\n /** Sets `borderColor: \"rgba(167, 139, 250, 1)\"`. */\n get bcPurple400() {\n return this.add(\"borderColor\", \"rgba(167, 139, 250, 1)\");\n }\n /** Sets `borderColor: \"rgba(139, 92, 246, 1)\"`. */\n get bcPurple500() {\n return this.add(\"borderColor\", \"rgba(139, 92, 246, 1)\");\n }\n /** Sets `borderColor: \"rgba(124, 58, 237, 1)\"`. */\n get bcPurple600() {\n return this.add(\"borderColor\", \"rgba(124, 58, 237, 1)\");\n }\n /** Sets `borderColor: \"rgba(109, 40, 217, 1)\"`. */\n get bcPurple700() {\n return this.add(\"borderColor\", \"rgba(109, 40, 217, 1)\");\n }\n /** Sets `borderColor: \"rgba(91, 33, 182, 1)\"`. */\n get bcPurple800() {\n return this.add(\"borderColor\", \"rgba(91, 33, 182, 1)\");\n }\n /** Sets `borderColor: \"rgba(76, 29, 149, 1)\"`. */\n get bcPurple900() {\n return this.add(\"borderColor\", \"rgba(76, 29, 149, 1)\");\n }\n /** Sets `borderColor: \"rgba(255, 247, 237, 1)\"`. */\n get bcOrange50() {\n return this.add(\"borderColor\", \"rgba(255, 247, 237, 1)\");\n }\n /** Sets `borderColor: \"rgba(255, 237, 213, 1)\"`. */\n get bcOrange100() {\n return this.add(\"borderColor\", \"rgba(255, 237, 213, 1)\");\n }\n /** Sets `borderColor: \"rgba(254, 215, 170, 1)\"`. */\n get bcOrange200() {\n return this.add(\"borderColor\", \"rgba(254, 215, 170, 1)\");\n }\n /** Sets `borderColor: \"rgba(253, 186, 116, 1)\"`. */\n get bcOrange300() {\n return this.add(\"borderColor\", \"rgba(253, 186, 116, 1)\");\n }\n /** Sets `borderColor: \"rgba(251, 146, 60, 1)\"`. */\n get bcOrange400() {\n return this.add(\"borderColor\", \"rgba(251, 146, 60, 1)\");\n }\n /** Sets `borderColor: \"rgba(249, 115, 22, 1)\"`. */\n get bcOrange500() {\n return this.add(\"borderColor\", \"rgba(249, 115, 22, 1)\");\n }\n /** Sets `borderColor: \"rgba(234, 88, 12, 1)\"`. */\n get bcOrange600() {\n return this.add(\"borderColor\", \"rgba(234, 88, 12, 1)\");\n }\n /** Sets `borderColor: \"rgba(194, 65, 12, 1)\"`. */\n get bcOrange700() {\n return this.add(\"borderColor\", \"rgba(194, 65, 12, 1)\");\n }\n /** Sets `borderColor: \"rgba(154, 52, 18, 1)\"`. */\n get bcOrange800() {\n return this.add(\"borderColor\", \"rgba(154, 52, 18, 1)\");\n }\n /** Sets `borderColor: \"rgba(124, 45, 18, 1)\"`. */\n get bcOrange900() {\n return this.add(\"borderColor\", \"rgba(124, 45, 18, 1)\");\n }\n /** Sets `borderColor: value`. */\n bc(value: Properties[\"borderColor\"]) {\n return this.add(\"borderColor\", value);\n }\n\n // borderRadius\n /** Sets `borderRadius: \"0\"`. */\n get br0() {\n return this.add(\"borderRadius\", \"0\");\n }\n /** Sets `borderRadius: \"4px\"`. */\n get br4() {\n return this.add(\"borderRadius\", \"4px\");\n }\n /** Sets `borderRadius: \"8px\"`. */\n get br8() {\n return this.add(\"borderRadius\", \"8px\");\n }\n /** Sets `borderRadius: \"12px\"`. */\n get br12() {\n return this.add(\"borderRadius\", \"12px\");\n }\n /** Sets `borderRadius: \"16px\"`. */\n get br16() {\n return this.add(\"borderRadius\", \"16px\");\n }\n /** Sets `borderRadius: \"24px\"`. */\n get br24() {\n return this.add(\"borderRadius\", \"24px\");\n }\n /** Sets `borderRadius: \"100%\"`. */\n get br100() {\n return this.add(\"borderRadius\", \"100%\");\n }\n /** Sets `borderRadius: value`. */\n borderRadius(value: Properties[\"borderRadius\"]) {\n return this.add(\"borderRadius\", value);\n }\n /** Sets `borderTopRightRadius: \"4px\"; borderTopLeftRadius: \"4px\"`. */\n get brt4() {\n return this.add(\"borderTopRightRadius\", \"4px\").add(\"borderTopLeftRadius\", \"4px\");\n }\n /** Sets `borderBottomRightRadius: \"4px\"; borderBottomLeftRadius: \"4px\"`. */\n get brb4() {\n return this.add(\"borderBottomRightRadius\", \"4px\").add(\"borderBottomLeftRadius\", \"4px\");\n }\n\n // borderStyle\n /** Sets `borderStyle: \"dashed\"`. */\n get bsDashed() {\n return this.add(\"borderStyle\", \"dashed\");\n }\n /** Sets `borderStyle: \"dotted\"`. */\n get bsDotted() {\n return this.add(\"borderStyle\", \"dotted\");\n }\n /** Sets `borderStyle: \"none\"`. */\n get bsn() {\n return this.add(\"borderStyle\", \"none\");\n }\n /** Sets `borderStyle: \"solid\"`. */\n get bss() {\n return this.add(\"borderStyle\", \"solid\");\n }\n /** Sets `borderStyle: value`. */\n bs(value: Properties[\"borderStyle\"]) {\n return this.add(\"borderStyle\", value);\n }\n\n // borderWidth\n /** Sets `borderWidth: \"1px\"`. */\n get bw1() {\n return this.add(\"borderWidth\", \"1px\");\n }\n /** Sets `borderWidth: \"2px\"`. */\n get bw2() {\n return this.add(\"borderWidth\", \"2px\");\n }\n /** Sets `borderWidth: value`. */\n bw(value: Properties[\"borderWidth\"]) {\n return this.add(\"borderWidth\", value);\n }\n\n // boxShadow\n /** Sets `boxShadow: \"none\"`. */\n get bsh0() {\n return this.add(\"boxShadow\", \"none\");\n }\n /** Sets `boxShadow: \"0px 4px 8px rgba(53, 53, 53, 0.08), 0px 2px 16px rgba(53, 53, 53, 0.03);\"`. */\n get bshBasic() {\n return this.add(\"boxShadow\", \"0px 4px 8px rgba(53, 53, 53, 0.08), 0px 2px 16px rgba(53, 53, 53, 0.03);\");\n }\n /** Sets `boxShadow: \"0px 4px 8px rgba(53, 53, 53, 0.1), 0px 2px 24px rgba(53, 53, 53, 0.08);\"`. */\n get bshHover() {\n return this.add(\"boxShadow\", \"0px 4px 8px rgba(53, 53, 53, 0.1), 0px 2px 24px rgba(53, 53, 53, 0.08);\");\n }\n /** Sets `boxShadow: \"0px 0px 0px 2px rgba(255,255,255,1), 0px 0px 0px 4px rgba(29, 78, 216, 1)\"`. */\n get bshFocus() {\n return this.add(\"boxShadow\", \"0px 0px 0px 2px rgba(255,255,255,1), 0px 0px 0px 4px rgba(29, 78, 216, 1)\");\n }\n /** Sets `boxShadow: \"0px 0px 0px 2px rgba(255,255,255,1), 0px 0px 0px 4px rgba(153, 27, 27, 1)\"`. */\n get bshDanger() {\n return this.add(\"boxShadow\", \"0px 0px 0px 2px rgba(255,255,255,1), 0px 0px 0px 4px rgba(153, 27, 27, 1)\");\n }\n /** Sets `boxShadow: \"0px 20px 25px -5px rgba(0,0,0,0.1), 0px 10px 10px -5px rgba(0,0,0,0.04)\"`. */\n get bshModal() {\n return this.add(\"boxShadow\", \"0px 20px 25px -5px rgba(0,0,0,0.1), 0px 10px 10px -5px rgba(0,0,0,0.04)\");\n }\n /** Sets `boxShadow: value`. */\n boxShadow(value: Properties[\"boxShadow\"]) {\n return this.add(\"boxShadow\", value);\n }\n\n // container\n /** Sets `containerType: \"size\"`. */\n get cts() {\n return this.add(\"containerType\", \"size\");\n }\n /** Sets `containerType: \"inline-size\"`. */\n get ctis() {\n return this.add(\"containerType\", \"inline-size\");\n }\n /** Sets `containerType: \"normal\"`. */\n get ctn() {\n return this.add(\"containerType\", \"normal\");\n }\n /** Sets `containerType: value`. */\n ct(value: Properties[\"containerType\"]) {\n return this.add(\"containerType\", value);\n }\n /** Sets `containerName: value`. */\n cn(value: Properties[\"containerName\"]) {\n return this.add(\"containerName\", value);\n }\n\n // coordinates\n /** Sets `top: \"0px\"`. */\n get top0() {\n return this.add(\"top\", \"0px\");\n }\n /** Sets `top: \"8px\"`. */\n get top1() {\n return this.add(\"top\", \"8px\");\n }\n /** Sets `top: \"16px\"`. */\n get top2() {\n return this.add(\"top\", \"16px\");\n }\n /** Sets `top: \"24px\"`. */\n get top3() {\n return this.add(\"top\", \"24px\");\n }\n /** Sets `top: \"32px\"`. */\n get top4() {\n return this.add(\"top\", \"32px\");\n }\n /** Sets `top: \"40px\"`. */\n get top5() {\n return this.add(\"top\", \"40px\");\n }\n /** Sets `top: \"48px\"`. */\n get top6() {\n return this.add(\"top\", \"48px\");\n }\n /** Sets `top: \"56px\"`. */\n get top7() {\n return this.add(\"top\", \"56px\");\n }\n /** Sets `top: \"64px\"`. */\n get top8() {\n return this.add(\"top\", \"64px\");\n }\n /** Sets `top: \"v\"`. */\n top(v: number | string) {\n return this.add(\"top\", maybeInc(v));\n }\n /** Sets `top: px`. */\n topPx(px: number) {\n return this.add(\"top\", `${px}px`);\n }\n /** Sets `right: \"0px\"`. */\n get right0() {\n return this.add(\"right\", \"0px\");\n }\n /** Sets `right: \"8px\"`. */\n get right1() {\n return this.add(\"right\", \"8px\");\n }\n /** Sets `right: \"16px\"`. */\n get right2() {\n return this.add(\"right\", \"16px\");\n }\n /** Sets `right: \"24px\"`. */\n get right3() {\n return this.add(\"right\", \"24px\");\n }\n /** Sets `right: \"32px\"`. */\n get right4() {\n return this.add(\"right\", \"32px\");\n }\n /** Sets `right: \"40px\"`. */\n get right5() {\n return this.add(\"right\", \"40px\");\n }\n /** Sets `right: \"48px\"`. */\n get right6() {\n return this.add(\"right\", \"48px\");\n }\n /** Sets `right: \"56px\"`. */\n get right7() {\n return this.add(\"right\", \"56px\");\n }\n /** Sets `right: \"64px\"`. */\n get right8() {\n return this.add(\"right\", \"64px\");\n }\n /** Sets `right: \"v\"`. */\n right(v: number | string) {\n return this.add(\"right\", maybeInc(v));\n }\n /** Sets `right: px`. */\n rightPx(px: number) {\n return this.add(\"right\", `${px}px`);\n }\n /** Sets `bottom: \"0px\"`. */\n get bottom0() {\n return this.add(\"bottom\", \"0px\");\n }\n /** Sets `bottom: \"8px\"`. */\n get bottom1() {\n return this.add(\"bottom\", \"8px\");\n }\n /** Sets `bottom: \"16px\"`. */\n get bottom2() {\n return this.add(\"bottom\", \"16px\");\n }\n /** Sets `bottom: \"24px\"`. */\n get bottom3() {\n return this.add(\"bottom\", \"24px\");\n }\n /** Sets `bottom: \"32px\"`. */\n get bottom4() {\n return this.add(\"bottom\", \"32px\");\n }\n /** Sets `bottom: \"40px\"`. */\n get bottom5() {\n return this.add(\"bottom\", \"40px\");\n }\n /** Sets `bottom: \"48px\"`. */\n get bottom6() {\n return this.add(\"bottom\", \"48px\");\n }\n /** Sets `bottom: \"56px\"`. */\n get bottom7() {\n return this.add(\"bottom\", \"56px\");\n }\n /** Sets `bottom: \"64px\"`. */\n get bottom8() {\n return this.add(\"bottom\", \"64px\");\n }\n /** Sets `bottom: \"v\"`. */\n bottom(v: number | string) {\n return this.add(\"bottom\", maybeInc(v));\n }\n /** Sets `bottom: px`. */\n bottomPx(px: number) {\n return this.add(\"bottom\", `${px}px`);\n }\n /** Sets `left: \"0px\"`. */\n get left0() {\n return this.add(\"left\", \"0px\");\n }\n /** Sets `left: \"8px\"`. */\n get left1() {\n return this.add(\"left\", \"8px\");\n }\n /** Sets `left: \"16px\"`. */\n get left2() {\n return this.add(\"left\", \"16px\");\n }\n /** Sets `left: \"24px\"`. */\n get left3() {\n return this.add(\"left\", \"24px\");\n }\n /** Sets `left: \"32px\"`. */\n get left4() {\n return this.add(\"left\", \"32px\");\n }\n /** Sets `left: \"40px\"`. */\n get left5() {\n return this.add(\"left\", \"40px\");\n }\n /** Sets `left: \"48px\"`. */\n get left6() {\n return this.add(\"left\", \"48px\");\n }\n /** Sets `left: \"56px\"`. */\n get left7() {\n return this.add(\"left\", \"56px\");\n }\n /** Sets `left: \"64px\"`. */\n get left8() {\n return this.add(\"left\", \"64px\");\n }\n /** Sets `left: \"v\"`. */\n left(v: number | string) {\n return this.add(\"left\", maybeInc(v));\n }\n /** Sets `left: px`. */\n leftPx(px: number) {\n return this.add(\"left\", `${px}px`);\n }\n\n // cursor\n /** Sets `cursor: \"pointer\"`. */\n get cursorPointer() {\n return this.add(\"cursor\", \"pointer\");\n }\n /** Sets `cursor: \"not-allowed\"`. */\n get cursorNotAllowed() {\n return this.add(\"cursor\", \"not-allowed\");\n }\n /** Sets `cursor: value`. */\n cursor(value: Properties[\"cursor\"]) {\n return this.add(\"cursor\", value);\n }\n\n // display\n /** Sets `display: \"none\"`. */\n get dn() {\n return this.add(\"display\", \"none\");\n }\n /** Sets `display: \"block\"`. */\n get db() {\n return this.add(\"display\", \"block\");\n }\n /** Sets `display: \"inline-block\"`. */\n get dib() {\n return this.add(\"display\", \"inline-block\");\n }\n /** Sets `display: \"inline-table\"`. */\n get dit() {\n return this.add(\"display\", \"inline-table\");\n }\n /** Sets `display: \"table\"`. */\n get dt() {\n return this.add(\"display\", \"table\");\n }\n /** Sets `display: \"table-cell\"`. */\n get dtc() {\n return this.add(\"display\", \"table-cell\");\n }\n /** Sets `display: \"table-row\"`. */\n get dtRow() {\n return this.add(\"display\", \"table-row\");\n }\n /** Sets `display: \"table-column\"`. */\n get dtColumn() {\n return this.add(\"display\", \"table-column\");\n }\n /** Sets `display: \"table-column-group\"`. */\n get dtColumnGroup() {\n return this.add(\"display\", \"table-column-group\");\n }\n /** Sets `display: \"grid\"`. */\n get dg() {\n return this.add(\"display\", \"grid\");\n }\n /** Sets `display: \"inline-grid\"`. */\n get dig() {\n return this.add(\"display\", \"inline-grid\");\n }\n /** Sets `display: \"flex\"`. */\n get df() {\n return this.add(\"display\", \"flex\");\n }\n /** Sets `display: \"inline-flex\"`. */\n get dif() {\n return this.add(\"display\", \"inline-flex\");\n }\n /** Sets `display: value`. */\n display(value: Properties[\"display\"]) {\n return this.add(\"display\", value);\n }\n\n // flexbox\n /** Sets `flex: \"initial\"`. */\n get fi() {\n return this.add(\"flex\", \"initial\");\n }\n /** Sets `flex: \"auto\"`. */\n get fa() {\n return this.add(\"flex\", \"auto\");\n }\n /** Sets `flex: \"none\"`. */\n get fn() {\n return this.add(\"flex\", \"none\");\n }\n /** Sets `flex: \"1\"`. */\n get f1() {\n return this.add(\"flex\", \"1\");\n }\n /** Sets `flex: \"2\"`. */\n get f2() {\n return this.add(\"flex\", \"2\");\n }\n /** Sets `flex: \"3\"`. */\n get f3() {\n return this.add(\"flex\", \"3\");\n }\n /** Sets `flex: \"4\"`. */\n get f4() {\n return this.add(\"flex\", \"4\");\n }\n /** Sets `flex: \"5\"`. */\n get f5() {\n return this.add(\"flex\", \"5\");\n }\n /** Sets `flex: value`. */\n f(value: Properties[\"flex\"]) {\n return this.add(\"flex\", value);\n }\n /** Sets `justifyContent: \"flex-start\"`. */\n get jcfs() {\n return this.add(\"justifyContent\", \"flex-start\");\n }\n /** Sets `justifyContent: \"flex-end\"`. */\n get jcfe() {\n return this.add(\"justifyContent\", \"flex-end\");\n }\n /** Sets `justifyContent: \"center\"`. */\n get jcc() {\n return this.add(\"justifyContent\", \"center\");\n }\n /** Sets `justifyContent: \"space-between\"`. */\n get jcsb() {\n return this.add(\"justifyContent\", \"space-between\");\n }\n /** Sets `justifyContent: \"space-around\"`. */\n get jcsa() {\n return this.add(\"justifyContent\", \"space-around\");\n }\n /** Sets `justifyContent: \"space-evenly\"`. */\n get jcse() {\n return this.add(\"justifyContent\", \"space-evenly\");\n }\n /** Sets `justifyContent: value`. */\n jc(value: Properties[\"justifyContent\"]) {\n return this.add(\"justifyContent\", value);\n }\n /** Sets `justifySelf: \"auto\"`. */\n get jsa() {\n return this.add(\"justifySelf\", \"auto\");\n }\n /** Sets `justifySelf: \"center\"`. */\n get jsc() {\n return this.add(\"justifySelf\", \"center\");\n }\n /** Sets `justifySelf: \"start\"`. */\n get jss() {\n return this.add(\"justifySelf\", \"start\");\n }\n /** Sets `justifySelf: \"end\"`. */\n get jse() {\n return this.add(\"justifySelf\", \"end\");\n }\n /** Sets `justifySelf: value`. */\n js(value: Properties[\"justifySelf\"]) {\n return this.add(\"justifySelf\", value);\n }\n /** Sets `justifyItems: \"flex-start\"`. */\n get jifs() {\n return this.add(\"justifyItems\", \"flex-start\");\n }\n /** Sets `justifyItems: \"flex-end\"`. */\n get jife() {\n return this.add(\"justifyItems\", \"flex-end\");\n }\n /** Sets `justifyItems: \"center\"`. */\n get jic() {\n return this.add(\"justifyItems\", \"center\");\n }\n /** Sets `justifyItems: \"space-between\"`. */\n get jisb() {\n return this.add(\"justifyItems\", \"space-between\");\n }\n /** Sets `justifyItems: \"space-around\"`. */\n get jisa() {\n return this.add(\"justifyItems\", \"space-around\");\n }\n /** Sets `justifyItems: \"space-evenly\"`. */\n get jise() {\n return this.add(\"justifyItems\", \"space-evenly\");\n }\n /** Sets `justifyItems: value`. */\n ji(value: Properties[\"justifyItems\"]) {\n return this.add(\"justifyItems\", value);\n }\n /** Sets `alignSelf: \"flex-start\"`. */\n get asfs() {\n return this.add(\"alignSelf\", \"flex-start\");\n }\n /** Sets `alignSelf: \"flex-end\"`. */\n get asfe() {\n return this.add(\"alignSelf\", \"flex-end\");\n }\n /** Sets `alignSelf: \"center\"`. */\n get asc() {\n return this.add(\"alignSelf\", \"center\");\n }\n /** Sets `alignSelf: \"baseline\"`. */\n get asb() {\n return this.add(\"alignSelf\", \"baseline\");\n }\n /** Sets `alignSelf: \"stretch\"`. */\n get asStretch() {\n return this.add(\"alignSelf\", \"stretch\");\n }\n /** Sets `alignSelf: value`. */\n as(value: Properties[\"alignSelf\"]) {\n return this.add(\"alignSelf\", value);\n }\n /** Sets `alignItems: \"flex-start\"`. */\n get aifs() {\n return this.add(\"alignItems\", \"flex-start\");\n }\n /** Sets `alignItems: \"flex-end\"`. */\n get aife() {\n return this.add(\"alignItems\", \"flex-end\");\n }\n /** Sets `alignItems: \"start\"`. */\n get ais() {\n return this.add(\"alignItems\", \"start\");\n }\n /** Sets `alignItems: \"end\"`. */\n get aie() {\n return this.add(\"alignItems\", \"end\");\n }\n /** Sets `alignItems: \"center\"`. */\n get aic() {\n return this.add(\"alignItems\", \"center\");\n }\n /** Sets `alignItems: \"baseline\"`. */\n get aib() {\n return this.add(\"alignItems\", \"baseline\");\n }\n /** Sets `alignItems: \"stretch\"`. */\n get aiStretch() {\n return this.add(\"alignItems\", \"stretch\");\n }\n /** Sets `alignItems: value`. */\n ai(value: Properties[\"alignItems\"]) {\n return this.add(\"alignItems\", value);\n }\n /** Sets `placeSelf: \"auto\"`. */\n get psa() {\n return this.add(\"placeSelf\", \"auto\");\n }\n /** Sets `placeSelf: \"center\"`. */\n get psc() {\n return this.add(\"placeSelf\", \"center\");\n }\n /** Sets `placeSelf: \"start\"`. */\n get pss() {\n return this.add(\"placeSelf\", \"start\");\n }\n /** Sets `placeSelf: \"end\"`. */\n get pse() {\n return this.add(\"placeSelf\", \"end\");\n }\n /** Sets `placeSelf: \"flex-start\"`. */\n get psfs() {\n return this.add(\"placeSelf\", \"flex-start\");\n }\n /** Sets `placeSelf: \"flex-end\"`. */\n get psfe() {\n return this.add(\"placeSelf\", \"flex-end\");\n }\n /** Sets `placeSelf: \"stretch\"`. */\n get psStretch() {\n return this.add(\"placeSelf\", \"stretch\");\n }\n /** Sets `placeSelf: value`. */\n ps(value: Properties[\"placeSelf\"]) {\n return this.add(\"placeSelf\", value);\n }\n /** Sets `placeContent: \"center\"`. */\n get pcc() {\n return this.add(\"placeContent\", \"center\");\n }\n /** Sets `placeContent: \"start\"`. */\n get pcs() {\n return this.add(\"placeContent\", \"start\");\n }\n /** Sets `placeContent: \"end\"`. */\n get pce() {\n return this.add(\"placeContent\", \"end\");\n }\n /** Sets `placeContent: \"space-between\"`. */\n get pcsb() {\n return this.add(\"placeContent\", \"space-between\");\n }\n /** Sets `placeContent: \"space-around\"`. */\n get pcsa() {\n return this.add(\"placeContent\", \"space-around\");\n }\n /** Sets `placeContent: \"space-evenly\"`. */\n get pcse() {\n return this.add(\"placeContent\", \"space-evenly\");\n }\n /** Sets `placeContent: \"baseline\"`. */\n get pcb() {\n return this.add(\"placeContent\", \"baseline\");\n }\n /** Sets `placeContent: \"stretch\"`. */\n get pcStretch() {\n return this.add(\"placeContent\", \"stretch\");\n }\n /** Sets `placeContent: value`. */\n pc(value: Properties[\"placeContent\"]) {\n return this.add(\"placeContent\", value);\n }\n /** Sets `placeItems: \"center\"`. */\n get pic() {\n return this.add(\"placeItems\", \"center\");\n }\n /** Sets `placeItems: \"start\"`. */\n get pis() {\n return this.add(\"placeItems\", \"start\");\n }\n /** Sets `placeItems: \"end\"`. */\n get pie() {\n return this.add(\"placeItems\", \"end\");\n }\n /** Sets `placeItems: \"space-between\"`. */\n get pisb() {\n return this.add(\"placeItems\", \"space-between\");\n }\n /** Sets `placeItems: \"space-around\"`. */\n get pisa() {\n return this.add(\"placeItems\", \"space-around\");\n }\n /** Sets `placeItems: \"space-evenly\"`. */\n get pise() {\n return this.add(\"placeItems\", \"space-evenly\");\n }\n /** Sets `placeItems: \"baseline\"`. */\n get pib() {\n return this.add(\"placeItems\", \"baseline\");\n }\n /** Sets `placeItems: \"stretch\"`. */\n get piStretch() {\n return this.add(\"placeItems\", \"stretch\");\n }\n /** Sets `placeItems: value`. */\n pi(value: Properties[\"placeItems\"]) {\n return this.add(\"placeItems\", value);\n }\n /** Sets `flexBasis: \"100%\"`. */\n get fb1() {\n return this.add(\"flexBasis\", \"100%\");\n }\n /** Sets `flexBasis: \"50%\"`. */\n get fb2() {\n return this.add(\"flexBasis\", \"50%\");\n }\n /** Sets `flexBasis: \"33.333333%\"`. */\n get fb3() {\n return this.add(\"flexBasis\", \"33.333333%\");\n }\n /** Sets `flexBasis: \"25%\"`. */\n get fb4() {\n return this.add(\"flexBasis\", \"25%\");\n }\n /** Sets `flexBasis: \"20%\"`. */\n get fb5() {\n return this.add(\"flexBasis\", \"20%\");\n }\n /** Sets `flexBasis: \"16.666666%\"`. */\n get fb6() {\n return this.add(\"flexBasis\", \"16.666666%\");\n }\n /** Sets `flexBasis: \"14.285714%\"`. */\n get fb7() {\n return this.add(\"flexBasis\", \"14.285714%\");\n }\n /** Sets `flexBasis: \"12.5%\"`. */\n get fb0() {\n return this.add(\"flexBasis\", \"12.5%\");\n }\n /** Sets `flexBasis: value`. */\n fb(value: Properties[\"flexBasis\"]) {\n return this.add(\"flexBasis\", value);\n }\n /** Sets `flexGrow: 0`. */\n get fg0() {\n return this.add(\"flexGrow\", 0);\n }\n /** Sets `flexGrow: 1`. */\n get fg1() {\n return this.add(\"flexGrow\", 1);\n }\n /** Sets `flexGrow: value`. */\n flexGrow(value: Properties[\"flexGrow\"]) {\n return this.add(\"flexGrow\", value);\n }\n /** Sets `flexShrink: 0`. */\n get fs0() {\n return this.add(\"flexShrink\", 0);\n }\n /** Sets `flexShrink: 1`. */\n get fs1() {\n return this.add(\"flexShrink\", 1);\n }\n /** Sets `flexShrink: value`. */\n flexShrink(value: Properties[\"flexShrink\"]) {\n return this.add(\"flexShrink\", value);\n }\n /** Sets `flexDirection: \"row\"`. */\n get fdr() {\n return this.add(\"flexDirection\", \"row\");\n }\n /** Sets `flexDirection: \"row-reverse\"`. */\n get fdrr() {\n return this.add(\"flexDirection\", \"row-reverse\");\n }\n /** Sets `flexDirection: \"column\"`. */\n get fdc() {\n return this.add(\"flexDirection\", \"column\");\n }\n /** Sets `flexDirection: \"column-reverse\"`. */\n get fdcr() {\n return this.add(\"flexDirection\", \"column-reverse\");\n }\n /** Sets `flexDirection: value`. */\n fd(value: Properties[\"flexDirection\"]) {\n return this.add(\"flexDirection\", value);\n }\n /** Sets `flexWrap: \"wrap\"`. */\n get fww() {\n return this.add(\"flexWrap\", \"wrap\");\n }\n /** Sets `flexWrap: \"wrap-reverse\"`. */\n get fwr() {\n return this.add(\"flexWrap\", \"wrap-reverse\");\n }\n /** Sets `flexWrap: \"nowrap\"`. */\n get fwnw() {\n return this.add(\"flexWrap\", \"nowrap\");\n }\n /** Sets `flexWrap: value`. */\n flexWrap(value: Properties[\"flexWrap\"]) {\n return this.add(\"flexWrap\", value);\n }\n /** Sets `order: value`. */\n order(value: Properties[\"order\"]) {\n return this.add(\"order\", value);\n }\n\n // float\n /** Sets `float: \"left\"`. */\n get fl() {\n return this.add(\"float\", \"left\");\n }\n /** Sets `float: \"right\"`. */\n get fr() {\n return this.add(\"float\", \"right\");\n }\n /** Sets `float: value`. */\n float(value: Properties[\"float\"]) {\n return this.add(\"float\", value);\n }\n\n // fontWeight\n /** Sets `fontWeight: \"normal\"`. */\n get fwn() {\n return this.add(\"fontWeight\", \"normal\");\n }\n /** Sets `fontWeight: \"bold\"`. */\n get fwb() {\n return this.add(\"fontWeight\", \"bold\");\n }\n /** Sets `fontWeight: 100`. */\n get fw1() {\n return this.add(\"fontWeight\", 100);\n }\n /** Sets `fontWeight: 200`. */\n get fw2() {\n return this.add(\"fontWeight\", 200);\n }\n /** Sets `fontWeight: 300`. */\n get fw3() {\n return this.add(\"fontWeight\", 300);\n }\n /** Sets `fontWeight: 400`. */\n get fw4() {\n return this.add(\"fontWeight\", 400);\n }\n /** Sets `fontWeight: 500`. */\n get fw5() {\n return this.add(\"fontWeight\", 500);\n }\n /** Sets `fontWeight: 600`. */\n get fw6() {\n return this.add(\"fontWeight\", 600);\n }\n /** Sets `fontWeight: 700`. */\n get fw7() {\n return this.add(\"fontWeight\", 700);\n }\n /** Sets `fontWeight: 800`. */\n get fw8() {\n return this.add(\"fontWeight\", 800);\n }\n /** Sets `fontWeight: 900`. */\n get fw9() {\n return this.add(\"fontWeight\", 900);\n }\n /** Sets `fontWeight: value`. */\n fw(value: Properties[\"fontWeight\"]) {\n return this.add(\"fontWeight\", value);\n }\n\n // grid\n /** Sets `gridTemplateColumns: value`. */\n gtc(value: Properties[\"gridTemplateColumns\"]) {\n return this.add(\"gridTemplateColumns\", value);\n }\n /** Sets `gridTemplateRows: value`. */\n gtr(value: Properties[\"gridTemplateRows\"]) {\n return this.add(\"gridTemplateRows\", value);\n }\n /** Sets `gridRow: value`. */\n gr(value: Properties[\"gridRow\"]) {\n return this.add(\"gridRow\", value);\n }\n /** Sets `gridColumn: value`. */\n gc(value: Properties[\"gridColumn\"]) {\n return this.add(\"gridColumn\", value);\n }\n /** Sets `gridAutoRows: value`. */\n gar(value: Properties[\"gridAutoRows\"]) {\n return this.add(\"gridAutoRows\", value);\n }\n /** Sets `gridAutoColumns: value`. */\n gac(value: Properties[\"gridAutoColumns\"]) {\n return this.add(\"gridAutoColumns\", value);\n }\n /** Sets `gap: \"0px\"`. */\n get gap0() {\n return this.add(\"gap\", \"0px\");\n }\n /** Sets `gap: \"8px\"`. */\n get gap1() {\n return this.add(\"gap\", \"8px\");\n }\n /** Sets `gap: \"16px\"`. */\n get gap2() {\n return this.add(\"gap\", \"16px\");\n }\n /** Sets `gap: \"24px\"`. */\n get gap3() {\n return this.add(\"gap\", \"24px\");\n }\n /** Sets `gap: \"32px\"`. */\n get gap4() {\n return this.add(\"gap\", \"32px\");\n }\n /** Sets `gap: \"40px\"`. */\n get gap5() {\n return this.add(\"gap\", \"40px\");\n }\n /** Sets `gap: \"48px\"`. */\n get gap6() {\n return this.add(\"gap\", \"48px\");\n }\n /** Sets `gap: \"56px\"`. */\n get gap7() {\n return this.add(\"gap\", \"56px\");\n }\n /** Sets `gap: \"64px\"`. */\n get gap8() {\n return this.add(\"gap\", \"64px\");\n }\n /** Sets `gap: \"v\"`. */\n gap(v: number | string) {\n return this.add(\"gap\", maybeInc(v));\n }\n /** Sets `gap: px`. */\n gapPx(px: number) {\n return this.add(\"gap\", `${px}px`);\n }\n /** Sets `rowGap: \"0px\"`. */\n get rg0() {\n return this.add(\"rowGap\", \"0px\");\n }\n /** Sets `rowGap: \"8px\"`. */\n get rg1() {\n return this.add(\"rowGap\", \"8px\");\n }\n /** Sets `rowGap: \"16px\"`. */\n get rg2() {\n return this.add(\"rowGap\", \"16px\");\n }\n /** Sets `rowGap: \"24px\"`. */\n get rg3() {\n return this.add(\"rowGap\", \"24px\");\n }\n /** Sets `rowGap: \"32px\"`. */\n get rg4() {\n return this.add(\"rowGap\", \"32px\");\n }\n /** Sets `rowGap: \"40px\"`. */\n get rg5() {\n return this.add(\"rowGap\", \"40px\");\n }\n /** Sets `rowGap: \"48px\"`. */\n get rg6() {\n return this.add(\"rowGap\", \"48px\");\n }\n /** Sets `rowGap: \"56px\"`. */\n get rg7() {\n return this.add(\"rowGap\", \"56px\");\n }\n /** Sets `rowGap: \"64px\"`. */\n get rg8() {\n return this.add(\"rowGap\", \"64px\");\n }\n /** Sets `rowGap: \"v\"`. */\n rg(v: number | string) {\n return this.add(\"rowGap\", maybeInc(v));\n }\n /** Sets `rowGap: px`. */\n rgPx(px: number) {\n return this.add(\"rowGap\", `${px}px`);\n }\n /** Sets `columnGap: \"0px\"`. */\n get cg0() {\n return this.add(\"columnGap\", \"0px\");\n }\n /** Sets `columnGap: \"8px\"`. */\n get cg1() {\n return this.add(\"columnGap\", \"8px\");\n }\n /** Sets `columnGap: \"16px\"`. */\n get cg2() {\n return this.add(\"columnGap\", \"16px\");\n }\n /** Sets `columnGap: \"24px\"`. */\n get cg3() {\n return this.add(\"columnGap\", \"24px\");\n }\n /** Sets `columnGap: \"32px\"`. */\n get cg4() {\n return this.add(\"columnGap\", \"32px\");\n }\n /** Sets `columnGap: \"40px\"`. */\n get cg5() {\n return this.add(\"columnGap\", \"40px\");\n }\n /** Sets `columnGap: \"48px\"`. */\n get cg6() {\n return this.add(\"columnGap\", \"48px\");\n }\n /** Sets `columnGap: \"56px\"`. */\n get cg7() {\n return this.add(\"columnGap\", \"56px\");\n }\n /** Sets `columnGap: \"64px\"`. */\n get cg8() {\n return this.add(\"columnGap\", \"64px\");\n }\n /** Sets `columnGap: \"v\"`. */\n cg(v: number | string) {\n return this.add(\"columnGap\", maybeInc(v));\n }\n /** Sets `columnGap: px`. */\n cgPx(px: number) {\n return this.add(\"columnGap\", `${px}px`);\n }\n\n // height\n /** Sets `height: \"0px\"`. */\n get h0() {\n return this.add(\"height\", \"0px\");\n }\n /** Sets `height: \"8px\"`. */\n get h1() {\n return this.add(\"height\", \"8px\");\n }\n /** Sets `height: \"16px\"`. */\n get h2() {\n return this.add(\"height\", \"16px\");\n }\n /** Sets `height: \"24px\"`. */\n get h3() {\n return this.add(\"height\", \"24px\");\n }\n /** Sets `height: \"32px\"`. */\n get h4() {\n return this.add(\"height\", \"32px\");\n }\n /** Sets `height: \"40px\"`. */\n get h5() {\n return this.add(\"height\", \"40px\");\n }\n /** Sets `height: \"48px\"`. */\n get h6() {\n return this.add(\"height\", \"48px\");\n }\n /** Sets `height: \"56px\"`. */\n get h7() {\n return this.add(\"height\", \"56px\");\n }\n /** Sets `height: \"64px\"`. */\n get h8() {\n return this.add(\"height\", \"64px\");\n }\n /** Sets `height: \"auto\"`. */\n get ha() {\n return this.add(\"height\", \"auto\");\n }\n /** Sets `height: \"v\"`. */\n h(v: number | string) {\n return this.add(\"height\", maybeInc(v));\n }\n /** Sets `height: px`. */\n hPx(px: number) {\n return this.add(\"height\", `${px}px`);\n }\n /** Sets `height: \"25%\"`. */\n get h25() {\n return this.add(\"height\", \"25%\");\n }\n /** Sets `height: \"50%\"`. */\n get h50() {\n return this.add(\"height\", \"50%\");\n }\n /** Sets `height: \"75%\"`. */\n get h75() {\n return this.add(\"height\", \"75%\");\n }\n /** Sets `height: \"100%\"`. */\n get h100() {\n return this.add(\"height\", \"100%\");\n }\n /** Sets `height: \"25vh\"`. */\n get vh25() {\n return this.add(\"height\", \"25vh\");\n }\n /** Sets `height: \"50vh\"`. */\n get vh50() {\n return this.add(\"height\", \"50vh\");\n }\n /** Sets `height: \"75vh\"`. */\n get vh75() {\n return this.add(\"height\", \"75vh\");\n }\n /** Sets `height: \"100vh\"`. */\n get vh100() {\n return this.add(\"height\", \"100vh\");\n }\n /** Sets `height: \"fit-content\"`. */\n get hfc() {\n return this.add(\"height\", \"fit-content\");\n }\n /** Sets `height: \"max-content\"`. */\n get hmaxc() {\n return this.add(\"height\", \"max-content\");\n }\n /** Sets `height: \"min-content\"`. */\n get hminc() {\n return this.add(\"height\", \"min-content\");\n }\n /** Sets `minHeight: 0`. */\n get mh0() {\n return this.add(\"minHeight\", 0);\n }\n /** Sets `minHeight: \"25%\"`. */\n get mh25() {\n return this.add(\"minHeight\", \"25%\");\n }\n /** Sets `minHeight: \"50%\"`. */\n get mh50() {\n return this.add(\"minHeight\", \"50%\");\n }\n /** Sets `minHeight: \"75%\"`. */\n get mh75() {\n return this.add(\"minHeight\", \"75%\");\n }\n /** Sets `minHeight: \"100%\"`. */\n get mh100() {\n return this.add(\"minHeight\", \"100%\");\n }\n /** Sets `minHeight: \"100vh\"`. */\n get mvh100() {\n return this.add(\"minHeight\", \"100vh\");\n }\n /** Sets `minHeight: value`. */\n mh(value: Properties[\"minHeight\"]) {\n return this.add(\"minHeight\", value);\n }\n /** Sets `minHeight: px`. */\n mhPx(px: number) {\n return this.mh(`${px}px`);\n }\n /** Sets `maxHeight: \"0\"`. */\n get maxh0() {\n return this.add(\"maxHeight\", \"0\");\n }\n /** Sets `maxHeight: \"25%\"`. */\n get maxh25() {\n return this.add(\"maxHeight\", \"25%\");\n }\n /** Sets `maxHeight: \"50%\"`. */\n get maxh50() {\n return this.add(\"maxHeight\", \"50%\");\n }\n /** Sets `maxHeight: \"75%\"`. */\n get maxh75() {\n return this.add(\"maxHeight\", \"75%\");\n }\n /** Sets `maxHeight: \"100%\"`. */\n get maxh100() {\n return this.add(\"maxHeight\", \"100%\");\n }\n /** Sets `maxHeight: value`. */\n maxh(value: Properties[\"maxHeight\"]) {\n return this.add(\"maxHeight\", value);\n }\n /** Sets `maxHeight: px`. */\n maxhPx(px: number) {\n return this.maxh(`${px}px`);\n }\n /** Sets `height: px; width: px`. */\n\n sqPx(px: number) {\n return this.add(\"height\", `${px}px`).add(\"width\", `${px}px`);\n }\n\n // lineClamp\n /** Sets `overflow: \"hidden\"; display: \"-webkit-box\"; WebkitBoxOrient: \"vertical\"; textOverflow: \"ellipsis\"; WebkitLineClamp: 1`. */\n get lineClamp1() {\n return this.add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\"WebkitBoxOrient\", \"vertical\").add(\n \"textOverflow\",\n \"ellipsis\",\n ).add(\"WebkitLineClamp\", 1);\n }\n /** Sets `overflow: \"hidden\"; display: \"-webkit-box\"; WebkitBoxOrient: \"vertical\"; textOverflow: \"ellipsis\"; WebkitLineClamp: 2`. */\n get lineClamp2() {\n return this.add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\"WebkitBoxOrient\", \"vertical\").add(\n \"textOverflow\",\n \"ellipsis\",\n ).add(\"WebkitLineClamp\", 2);\n }\n /** Sets `overflow: \"hidden\"; display: \"-webkit-box\"; WebkitBoxOrient: \"vertical\"; textOverflow: \"ellipsis\"; WebkitLineClamp: 3`. */\n get lineClamp3() {\n return this.add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\"WebkitBoxOrient\", \"vertical\").add(\n \"textOverflow\",\n \"ellipsis\",\n ).add(\"WebkitLineClamp\", 3);\n }\n /** Sets `overflow: \"hidden\"; display: \"-webkit-box\"; WebkitBoxOrient: \"vertical\"; textOverflow: \"ellipsis\"; WebkitLineClamp: 4`. */\n get lineClamp4() {\n return this.add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\"WebkitBoxOrient\", \"vertical\").add(\n \"textOverflow\",\n \"ellipsis\",\n ).add(\"WebkitLineClamp\", 4);\n }\n /** Sets `overflow: \"hidden\"; display: \"-webkit-box\"; WebkitBoxOrient: \"vertical\"; textOverflow: \"ellipsis\"; WebkitLineClamp: 5`. */\n get lineClamp5() {\n return this.add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\"WebkitBoxOrient\", \"vertical\").add(\n \"textOverflow\",\n \"ellipsis\",\n ).add(\"WebkitLineClamp\", 5);\n }\n /** Sets `overflow: \"hidden\"; display: \"-webkit-box\"; WebkitBoxOrient: \"vertical\"; textOverflow: \"ellipsis\"; WebkitLineClamp: 6`. */\n get lineClamp6() {\n return this.add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\"WebkitBoxOrient\", \"vertical\").add(\n \"textOverflow\",\n \"ellipsis\",\n ).add(\"WebkitLineClamp\", 6);\n }\n /** Sets `WebkitLineClamp: \"unset\"`. */\n get lineClampNone() {\n return this.add(\"WebkitLineClamp\", \"unset\");\n }\n /** Sets `WebkitLineClamp: value`. */\n lineClamp(value: Properties[\"WebkitLineClamp\"]) {\n return this.add(\"WebkitLineClamp\", value).add(\"overflow\", \"hidden\").add(\"display\", \"-webkit-box\").add(\n \"WebkitBoxOrient\",\n \"vertical\",\n ).add(\"textOverflow\", \"ellipsis\");\n }\n\n // objectFit\n /** Sets `objectFit: \"contain\"`. */\n get objectContain() {\n return this.add(\"objectFit\", \"contain\");\n }\n /** Sets `objectFit: \"cover\"`. */\n get objectCover() {\n return this.add(\"objectFit\", \"cover\");\n }\n /** Sets `objectFit: \"fill\"`. */\n get objectFill() {\n return this.add(\"objectFit\", \"fill\");\n }\n /** Sets `objectFit: \"none\"`. */\n get objectNone() {\n return this.add(\"objectFit\", \"none\");\n }\n /** Sets `objectFit: \"scale-down\"`. */\n get objectScaleDown() {\n return this.add(\"objectFit\", \"scale-down\");\n }\n /** Sets `objectFit: value`. */\n objectFit(value: Properties[\"objectFit\"]) {\n return this.add(\"objectFit\", value);\n }\n\n // opacity\n /** Sets `opacity: \"0\"`. */\n get o0() {\n return this.add(\"opacity\", \"0\");\n }\n /** Sets `opacity: \"0.25\"`. */\n get o25() {\n return this.add(\"opacity\", \"0.25\");\n }\n /** Sets `opacity: \"0.5\"`. */\n get o50() {\n return this.add(\"opacity\", \"0.5\");\n }\n /** Sets `opacity: \"0.75\"`. */\n get o75() {\n return this.add(\"opacity\", \"0.75\");\n }\n /** Sets `opacity: \"1\"`. */\n get o100() {\n return this.add(\"opacity\", \"1\");\n }\n /** Sets `opacity: value`. */\n o(value: Properties[\"opacity\"]) {\n return this.add(\"opacity\", value);\n }\n\n // outline\n /** Sets `outline: \"1px solid\"`. */\n get outline1() {\n return this.add(\"outline\", \"1px solid\");\n }\n /** Sets `outline: \"1px solid transparent\"`. */\n get outlineTransparent() {\n return this.add(\"outline\", \"1px solid transparent\");\n }\n /** Sets `outline: \"0\"`. */\n get outline0() {\n return this.add(\"outline\", \"0\");\n }\n /** Sets `outline: value`. */\n outline(value: Properties[\"outline\"]) {\n return this.add(\"outline\", value);\n }\n\n // overflow\n /** Sets `overflow: \"visible\"`. */\n get ov() {\n return this.add(\"overflow\", \"visible\");\n }\n /** Sets `overflow: \"hidden\"`. */\n get oh() {\n return this.add(\"overflow\", \"hidden\");\n }\n /** Sets `overflow: \"scroll\"`. */\n get os() {\n return this.add(\"overflow\", \"scroll\");\n }\n /** Sets `overflow: \"auto\"`. */\n get oa() {\n return this.add(\"overflow\", \"auto\");\n }\n /** Sets `overflow: value`. */\n overflow(value: Properties[\"overflow\"]) {\n return this.add(\"overflow\", value);\n }\n /** Sets `overflowY: \"visible\"`. */\n get oyv() {\n return this.add(\"overflowY\", \"visible\");\n }\n /** Sets `overflowY: \"hidden\"`. */\n get oyh() {\n return this.add(\"overflowY\", \"hidden\");\n }\n /** Sets `overflowY: \"scroll\"`. */\n get oys() {\n return this.add(\"overflowY\", \"scroll\");\n }\n /** Sets `overflowY: \"auto\"`. */\n get oya() {\n return this.add(\"overflowY\", \"auto\");\n }\n /** Sets `overflowY: value`. */\n overflowY(value: Properties[\"overflowY\"]) {\n return this.add(\"overflowY\", value);\n }\n /** Sets `overflowX: \"visible\"`. */\n get oxv() {\n return this.add(\"overflowX\", \"visible\");\n }\n /** Sets `overflowX: \"hidden\"`. */\n get oxh() {\n return this.add(\"overflowX\", \"hidden\");\n }\n /** Sets `overflowX: \"scroll\"`. */\n get oxs() {\n return this.add(\"overflowX\", \"scroll\");\n }\n /** Sets `overflowX: \"auto\"`. */\n get oxa() {\n return this.add(\"overflowX\", \"auto\");\n }\n /** Sets `overflowX: value`. */\n overflowX(value: Properties[\"overflowX\"]) {\n return this.add(\"overflowX\", value);\n }\n\n // position\n /** Sets `position: \"absolute\"`. */\n get absolute() {\n return this.add(\"position\", \"absolute\");\n }\n /** Sets `position: \"fixed\"`. */\n get fixed() {\n return this.add(\"position\", \"fixed\");\n }\n /** Sets `position: \"static\"`. */\n get static() {\n return this.add(\"position\", \"static\");\n }\n /** Sets `position: \"relative\"`. */\n get relative() {\n return this.add(\"position\", \"relative\");\n }\n /** Sets `position: \"sticky\"`. */\n get sticky() {\n return this.add(\"position\", \"sticky\");\n }\n /** Sets `position: value`. */\n position(value: Properties[\"position\"]) {\n return this.add(\"position\", value);\n }\n\n // skins\n /** Sets `color: \"rgba(255,255,255,1)\"`. */\n get white() {\n return this.add(\"color\", \"rgba(255,255,255,1)\");\n }\n /** Sets `color: \"rgba(0,0,0,0)\"`. */\n get transparent() {\n return this.add(\"color\", \"rgba(0,0,0,0)\");\n }\n /** Sets `color: \"rgba(255, 253, 253, 1)\"`. */\n get gray50() {\n return this.add(\"color\", \"rgba(255, 253, 253, 1)\");\n }\n /** Sets `color: \"rgba(247, 245, 245, 1)\"`. */\n get gray100() {\n return this.add(\"color\", \"rgba(247, 245, 245, 1)\");\n }\n /** Sets `color: \"rgba(236, 235, 235, 1)\"`. */\n get gray200() {\n return this.add(\"color\", \"rgba(236, 235, 235, 1)\");\n }\n /** Sets `color: \"rgba(221, 220, 220, 1)\"`. */\n get gray300() {\n return this.add(\"color\", \"rgba(221, 220, 220, 1)\");\n }\n /** Sets `color: \"rgba(201, 201, 201, 1)\"`. */\n get gray400() {\n return this.add(\"color\", \"rgba(201, 201, 201, 1)\");\n }\n /** Sets `color: \"rgba(175, 175, 175, 1)\"`. */\n get gray500() {\n return this.add(\"color\", \"rgba(175, 175, 175, 1)\");\n }\n /** Sets `color: \"rgba(141, 141, 141, 1)\"`. */\n get gray600() {\n return this.add(\"color\", \"rgba(141, 141, 141, 1)\");\n }\n /** Sets `color: \"rgba(100, 100, 100, 1)\"`. */\n get gray700() {\n return this.add(\"color\", \"rgba(100, 100, 100, 1)\");\n }\n /** Sets `color: \"rgba(53, 53, 53, 1)\"`. */\n get gray800() {\n return this.add(\"color\", \"rgba(53, 53, 53, 1)\");\n }\n /** Sets `color: \"rgba(36, 36, 36, 1)\"`. */\n get gray900() {\n return this.add(\"color\", \"rgba(36, 36, 36, 1)\");\n }\n /** Sets `color: \"rgba(239, 246, 255, 1)\"`. */\n get blue50() {\n return this.add(\"color\", \"rgba(239, 246, 255, 1)\");\n }\n /** Sets `color: \"rgba(219, 234, 254, 1)\"`. */\n get blue100() {\n return this.add(\"color\", \"rgba(219, 234, 254, 1)\");\n }\n /** Sets `color: \"rgba(191, 219, 254, 1)\"`. */\n get blue200() {\n return this.add(\"color\", \"rgba(191, 219, 254, 1)\");\n }\n /** Sets `color: \"rgba(147, 197, 253, 1)\"`. */\n get blue300() {\n return this.add(\"color\", \"rgba(147, 197, 253, 1)\");\n }\n /** Sets `color: \"rgba(96, 165, 250, 1)\"`. */\n get blue400() {\n return this.add(\"color\", \"rgba(96, 165, 250, 1)\");\n }\n /** Sets `color: \"rgba(59, 130, 246, 1)\"`. */\n get blue500() {\n return this.add(\"color\", \"rgba(59, 130, 246, 1)\");\n }\n /** Sets `color: \"rgba(37, 99, 235, 1)\"`. */\n get blue600() {\n return this.add(\"color\", \"rgba(37, 99, 235, 1)\");\n }\n /** Sets `color: \"rgba(29, 78, 216, 1)\"`. */\n get blue700() {\n return this.add(\"color\", \"rgba(29, 78, 216, 1)\");\n }\n /** Sets `color: \"rgba(30, 64, 175, 1)\"`. */\n get blue800() {\n return this.add(\"color\", \"rgba(30, 64, 175, 1)\");\n }\n /** Sets `color: \"rgba(30, 58, 138, 1)\"`. */\n get blue900() {\n return this.add(\"color\", \"rgba(30, 58, 138, 1)\");\n }\n /** Sets `color: \"rgba(254, 242, 242, 1)\"`. */\n get red50() {\n return this.add(\"color\", \"rgba(254, 242, 242, 1)\");\n }\n /** Sets `color: \"rgba(254, 226, 226, 1)\"`. */\n get red100() {\n return this.add(\"color\", \"rgba(254, 226, 226, 1)\");\n }\n /** Sets `color: \"rgba(254, 202, 202, 1)\"`. */\n get red200() {\n return this.add(\"color\", \"rgba(254, 202, 202, 1)\");\n }\n /** Sets `color: \"rgba(252, 165, 165, 1)\"`. */\n get red300() {\n return this.add(\"color\", \"rgba(252, 165, 165, 1)\");\n }\n /** Sets `color: \"rgba(248, 113, 113, 1)\"`. */\n get red400() {\n return this.add(\"color\", \"rgba(248, 113, 113, 1)\");\n }\n /** Sets `color: \"rgba(239, 68, 68, 1)\"`. */\n get red500() {\n return this.add(\"color\", \"rgba(239, 68, 68, 1)\");\n }\n /** Sets `color: \"rgba(220, 38, 38, 1)\"`. */\n get red600() {\n return this.add(\"color\", \"rgba(220, 38, 38, 1)\");\n }\n /** Sets `color: \"rgba(185, 28, 28, 1)\"`. */\n get red700() {\n return this.add(\"color\", \"rgba(185, 28, 28, 1)\");\n }\n /** Sets `color: \"rgba(153, 27, 27, 1)\"`. */\n get red800() {\n return this.add(\"color\", \"rgba(153, 27, 27, 1)\");\n }\n /** Sets `color: \"rgba(127, 29, 29, 1)\"`. */\n get red900() {\n return this.add(\"color\", \"rgba(127, 29, 29, 1)\");\n }\n /** Sets `color: \"rgba(254, 252, 232, 1)\"`. */\n get yellow50() {\n return this.add(\"color\", \"rgba(254, 252, 232, 1)\");\n }\n /** Sets `color: \"rgba(254, 249, 195, 1)\"`. */\n get yellow100() {\n return this.add(\"color\", \"rgba(254, 249, 195, 1)\");\n }\n /** Sets `color: \"rgba(254, 240, 138, 1)\"`. */\n get yellow200() {\n return this.add(\"color\", \"rgba(254, 240, 138, 1)\");\n }\n /** Sets `color: \"rgba(253, 224, 71, 1)\"`. */\n get yellow300() {\n return this.add(\"color\", \"rgba(253, 224, 71, 1)\");\n }\n /** Sets `color: \"rgba(250, 204, 21, 1)\"`. */\n get yellow400() {\n return this.add(\"color\", \"rgba(250, 204, 21, 1)\");\n }\n /** Sets `color: \"rgba(234, 179, 8, 1)\"`. */\n get yellow500() {\n return this.add(\"color\", \"rgba(234, 179, 8, 1)\");\n }\n /** Sets `color: \"rgba(202, 138, 4, 1)\"`. */\n get yellow600() {\n return this.add(\"color\", \"rgba(202, 138, 4, 1)\");\n }\n /** Sets `color: \"rgba(161, 98, 7, 1)\"`. */\n get yellow700() {\n return this.add(\"color\", \"rgba(161, 98, 7, 1)\");\n }\n /** Sets `color: \"rgba(133, 77, 14, 1)\"`. */\n get yellow800() {\n return this.add(\"color\", \"rgba(133, 77, 14, 1)\");\n }\n /** Sets `color: \"rgba(113, 63, 18, 1)\"`. */\n get yellow900() {\n return this.add(\"color\", \"rgba(113, 63, 18, 1)\");\n }\n /** Sets `color: \"rgba(236, 253, 245, 1)\"`. */\n get green50() {\n return this.add(\"color\", \"rgba(236, 253, 245, 1)\");\n }\n /** Sets `color: \"rgba(209, 250, 229, 1)\"`. */\n get green100() {\n return this.add(\"color\", \"rgba(209, 250, 229, 1)\");\n }\n /** Sets `color: \"rgba(167, 243, 208, 1)\"`. */\n get green200() {\n return this.add(\"color\", \"rgba(167, 243, 208, 1)\");\n }\n /** Sets `color: \"rgba(110, 231, 183, 1)\"`. */\n get green300() {\n return this.add(\"color\", \"rgba(110, 231, 183, 1)\");\n }\n /** Sets `color: \"rgba(52, 211, 153, 1)\"`. */\n get green400() {\n return this.add(\"color\", \"rgba(52, 211, 153, 1)\");\n }\n /** Sets `color: \"rgba(16, 185, 129, 1)\"`. */\n get green500() {\n return this.add(\"color\", \"rgba(16, 185, 129, 1)\");\n }\n /** Sets `color: \"rgba(5, 150, 105, 1)\"`. */\n get green600() {\n return this.add(\"color\", \"rgba(5, 150, 105, 1)\");\n }\n /** Sets `color: \"rgba(4, 120, 87, 1)\"`. */\n get green700() {\n return this.add(\"color\", \"rgba(4, 120, 87, 1)\");\n }\n /** Sets `color: \"rgba(6, 95, 70, 1)\"`. */\n get green800() {\n return this.add(\"color\", \"rgba(6, 95, 70, 1)\");\n }\n /** Sets `color: \"rgba(6, 78, 59, 1)\"`. */\n get green900() {\n return this.add(\"color\", \"rgba(6, 78, 59, 1)\");\n }\n /** Sets `color: \"rgba(245, 243, 255, 1)\"`. */\n get purple50() {\n return this.add(\"color\", \"rgba(245, 243, 255, 1)\");\n }\n /** Sets `color: \"rgba(237, 233, 254, 1)\"`. */\n get purple100() {\n return this.add(\"color\", \"rgba(237, 233, 254, 1)\");\n }\n /** Sets `color: \"rgba(221, 214, 254, 1)\"`. */\n get purple200() {\n return this.add(\"color\", \"rgba(221, 214, 254, 1)\");\n }\n /** Sets `color: \"rgba(196, 181, 253, 1)\"`. */\n get purple300() {\n return this.add(\"color\", \"rgba(196, 181, 253, 1)\");\n }\n /** Sets `color: \"rgba(167, 139, 250, 1)\"`. */\n get purple400() {\n return this.add(\"color\", \"rgba(167, 139, 250, 1)\");\n }\n /** Sets `color: \"rgba(139, 92, 246, 1)\"`. */\n get purple500() {\n return this.add(\"color\", \"rgba(139, 92, 246, 1)\");\n }\n /** Sets `color: \"rgba(124, 58, 237, 1)\"`. */\n get purple600() {\n return this.add(\"color\", \"rgba(124, 58, 237, 1)\");\n }\n /** Sets `color: \"rgba(109, 40, 217, 1)\"`. */\n get purple700() {\n return this.add(\"color\", \"rgba(109, 40, 217, 1)\");\n }\n /** Sets `color: \"rgba(91, 33, 182, 1)\"`. */\n get purple800() {\n return this.add(\"color\", \"rgba(91, 33, 182, 1)\");\n }\n /** Sets `color: \"rgba(76, 29, 149, 1)\"`. */\n get purple900() {\n return this.add(\"color\", \"rgba(76, 29, 149, 1)\");\n }\n /** Sets `color: \"rgba(255, 247, 237, 1)\"`. */\n get orange50() {\n return this.add(\"color\", \"rgba(255, 247, 237, 1)\");\n }\n /** Sets `color: \"rgba(255, 237, 213, 1)\"`. */\n get orange100() {\n return this.add(\"color\", \"rgba(255, 237, 213, 1)\");\n }\n /** Sets `color: \"rgba(254, 215, 170, 1)\"`. */\n get orange200() {\n return this.add(\"color\", \"rgba(254, 215, 170, 1)\");\n }\n /** Sets `color: \"rgba(253, 186, 116, 1)\"`. */\n get orange300() {\n return this.add(\"color\", \"rgba(253, 186, 116, 1)\");\n }\n /** Sets `color: \"rgba(251, 146, 60, 1)\"`. */\n get orange400() {\n return this.add(\"color\", \"rgba(251, 146, 60, 1)\");\n }\n /** Sets `color: \"rgba(249, 115, 22, 1)\"`. */\n get orange500() {\n return this.add(\"color\", \"rgba(249, 115, 22, 1)\");\n }\n /** Sets `color: \"rgba(234, 88, 12, 1)\"`. */\n get orange600() {\n return this.add(\"color\", \"rgba(234, 88, 12, 1)\");\n }\n /** Sets `color: \"rgba(194, 65, 12, 1)\"`. */\n get orange700() {\n return this.add(\"color\", \"rgba(194, 65, 12, 1)\");\n }\n /** Sets `color: \"rgba(154, 52, 18, 1)\"`. */\n get orange800() {\n return this.add(\"color\", \"rgba(154, 52, 18, 1)\");\n }\n /** Sets `color: \"rgba(124, 45, 18, 1)\"`. */\n get orange900() {\n return this.add(\"color\", \"rgba(124, 45, 18, 1)\");\n }\n /** Sets `color: value`. */\n color(value: Properties[\"color\"]) {\n return this.add(\"color\", value);\n }\n /** Sets `backgroundColor: \"rgba(255,255,255,1)\"`. */\n get bgWhite() {\n return this.add(\"backgroundColor\", \"rgba(255,255,255,1)\");\n }\n /** Sets `backgroundColor: \"rgba(0,0,0,0)\"`. */\n get bgTransparent() {\n return this.add(\"backgroundColor\", \"rgba(0,0,0,0)\");\n }\n /** Sets `backgroundColor: \"rgba(255, 253, 253, 1)\"`. */\n get bgGray50() {\n return this.add(\"backgroundColor\", \"rgba(255, 253, 253, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(247, 245, 245, 1)\"`. */\n get bgGray100() {\n return this.add(\"backgroundColor\", \"rgba(247, 245, 245, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(236, 235, 235, 1)\"`. */\n get bgGray200() {\n return this.add(\"backgroundColor\", \"rgba(236, 235, 235, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(221, 220, 220, 1)\"`. */\n get bgGray300() {\n return this.add(\"backgroundColor\", \"rgba(221, 220, 220, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(201, 201, 201, 1)\"`. */\n get bgGray400() {\n return this.add(\"backgroundColor\", \"rgba(201, 201, 201, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(175, 175, 175, 1)\"`. */\n get bgGray500() {\n return this.add(\"backgroundColor\", \"rgba(175, 175, 175, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(141, 141, 141, 1)\"`. */\n get bgGray600() {\n return this.add(\"backgroundColor\", \"rgba(141, 141, 141, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(100, 100, 100, 1)\"`. */\n get bgGray700() {\n return this.add(\"backgroundColor\", \"rgba(100, 100, 100, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(53, 53, 53, 1)\"`. */\n get bgGray800() {\n return this.add(\"backgroundColor\", \"rgba(53, 53, 53, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(36, 36, 36, 1)\"`. */\n get bgGray900() {\n return this.add(\"backgroundColor\", \"rgba(36, 36, 36, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(239, 246, 255, 1)\"`. */\n get bgBlue50() {\n return this.add(\"backgroundColor\", \"rgba(239, 246, 255, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(219, 234, 254, 1)\"`. */\n get bgBlue100() {\n return this.add(\"backgroundColor\", \"rgba(219, 234, 254, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(191, 219, 254, 1)\"`. */\n get bgBlue200() {\n return this.add(\"backgroundColor\", \"rgba(191, 219, 254, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(147, 197, 253, 1)\"`. */\n get bgBlue300() {\n return this.add(\"backgroundColor\", \"rgba(147, 197, 253, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(96, 165, 250, 1)\"`. */\n get bgBlue400() {\n return this.add(\"backgroundColor\", \"rgba(96, 165, 250, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(59, 130, 246, 1)\"`. */\n get bgBlue500() {\n return this.add(\"backgroundColor\", \"rgba(59, 130, 246, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(37, 99, 235, 1)\"`. */\n get bgBlue600() {\n return this.add(\"backgroundColor\", \"rgba(37, 99, 235, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(29, 78, 216, 1)\"`. */\n get bgBlue700() {\n return this.add(\"backgroundColor\", \"rgba(29, 78, 216, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(30, 64, 175, 1)\"`. */\n get bgBlue800() {\n return this.add(\"backgroundColor\", \"rgba(30, 64, 175, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(30, 58, 138, 1)\"`. */\n get bgBlue900() {\n return this.add(\"backgroundColor\", \"rgba(30, 58, 138, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 242, 242, 1)\"`. */\n get bgRed50() {\n return this.add(\"backgroundColor\", \"rgba(254, 242, 242, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 226, 226, 1)\"`. */\n get bgRed100() {\n return this.add(\"backgroundColor\", \"rgba(254, 226, 226, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 202, 202, 1)\"`. */\n get bgRed200() {\n return this.add(\"backgroundColor\", \"rgba(254, 202, 202, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(252, 165, 165, 1)\"`. */\n get bgRed300() {\n return this.add(\"backgroundColor\", \"rgba(252, 165, 165, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(248, 113, 113, 1)\"`. */\n get bgRed400() {\n return this.add(\"backgroundColor\", \"rgba(248, 113, 113, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(239, 68, 68, 1)\"`. */\n get bgRed500() {\n return this.add(\"backgroundColor\", \"rgba(239, 68, 68, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(220, 38, 38, 1)\"`. */\n get bgRed600() {\n return this.add(\"backgroundColor\", \"rgba(220, 38, 38, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(185, 28, 28, 1)\"`. */\n get bgRed700() {\n return this.add(\"backgroundColor\", \"rgba(185, 28, 28, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(153, 27, 27, 1)\"`. */\n get bgRed800() {\n return this.add(\"backgroundColor\", \"rgba(153, 27, 27, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(127, 29, 29, 1)\"`. */\n get bgRed900() {\n return this.add(\"backgroundColor\", \"rgba(127, 29, 29, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 252, 232, 1)\"`. */\n get bgYellow50() {\n return this.add(\"backgroundColor\", \"rgba(254, 252, 232, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 249, 195, 1)\"`. */\n get bgYellow100() {\n return this.add(\"backgroundColor\", \"rgba(254, 249, 195, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 240, 138, 1)\"`. */\n get bgYellow200() {\n return this.add(\"backgroundColor\", \"rgba(254, 240, 138, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(253, 224, 71, 1)\"`. */\n get bgYellow300() {\n return this.add(\"backgroundColor\", \"rgba(253, 224, 71, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(250, 204, 21, 1)\"`. */\n get bgYellow400() {\n return this.add(\"backgroundColor\", \"rgba(250, 204, 21, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(234, 179, 8, 1)\"`. */\n get bgYellow500() {\n return this.add(\"backgroundColor\", \"rgba(234, 179, 8, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(202, 138, 4, 1)\"`. */\n get bgYellow600() {\n return this.add(\"backgroundColor\", \"rgba(202, 138, 4, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(161, 98, 7, 1)\"`. */\n get bgYellow700() {\n return this.add(\"backgroundColor\", \"rgba(161, 98, 7, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(133, 77, 14, 1)\"`. */\n get bgYellow800() {\n return this.add(\"backgroundColor\", \"rgba(133, 77, 14, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(113, 63, 18, 1)\"`. */\n get bgYellow900() {\n return this.add(\"backgroundColor\", \"rgba(113, 63, 18, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(236, 253, 245, 1)\"`. */\n get bgGreen50() {\n return this.add(\"backgroundColor\", \"rgba(236, 253, 245, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(209, 250, 229, 1)\"`. */\n get bgGreen100() {\n return this.add(\"backgroundColor\", \"rgba(209, 250, 229, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(167, 243, 208, 1)\"`. */\n get bgGreen200() {\n return this.add(\"backgroundColor\", \"rgba(167, 243, 208, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(110, 231, 183, 1)\"`. */\n get bgGreen300() {\n return this.add(\"backgroundColor\", \"rgba(110, 231, 183, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(52, 211, 153, 1)\"`. */\n get bgGreen400() {\n return this.add(\"backgroundColor\", \"rgba(52, 211, 153, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(16, 185, 129, 1)\"`. */\n get bgGreen500() {\n return this.add(\"backgroundColor\", \"rgba(16, 185, 129, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(5, 150, 105, 1)\"`. */\n get bgGreen600() {\n return this.add(\"backgroundColor\", \"rgba(5, 150, 105, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(4, 120, 87, 1)\"`. */\n get bgGreen700() {\n return this.add(\"backgroundColor\", \"rgba(4, 120, 87, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(6, 95, 70, 1)\"`. */\n get bgGreen800() {\n return this.add(\"backgroundColor\", \"rgba(6, 95, 70, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(6, 78, 59, 1)\"`. */\n get bgGreen900() {\n return this.add(\"backgroundColor\", \"rgba(6, 78, 59, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(245, 243, 255, 1)\"`. */\n get bgPurple50() {\n return this.add(\"backgroundColor\", \"rgba(245, 243, 255, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(237, 233, 254, 1)\"`. */\n get bgPurple100() {\n return this.add(\"backgroundColor\", \"rgba(237, 233, 254, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(221, 214, 254, 1)\"`. */\n get bgPurple200() {\n return this.add(\"backgroundColor\", \"rgba(221, 214, 254, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(196, 181, 253, 1)\"`. */\n get bgPurple300() {\n return this.add(\"backgroundColor\", \"rgba(196, 181, 253, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(167, 139, 250, 1)\"`. */\n get bgPurple400() {\n return this.add(\"backgroundColor\", \"rgba(167, 139, 250, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(139, 92, 246, 1)\"`. */\n get bgPurple500() {\n return this.add(\"backgroundColor\", \"rgba(139, 92, 246, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(124, 58, 237, 1)\"`. */\n get bgPurple600() {\n return this.add(\"backgroundColor\", \"rgba(124, 58, 237, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(109, 40, 217, 1)\"`. */\n get bgPurple700() {\n return this.add(\"backgroundColor\", \"rgba(109, 40, 217, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(91, 33, 182, 1)\"`. */\n get bgPurple800() {\n return this.add(\"backgroundColor\", \"rgba(91, 33, 182, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(76, 29, 149, 1)\"`. */\n get bgPurple900() {\n return this.add(\"backgroundColor\", \"rgba(76, 29, 149, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(255, 247, 237, 1)\"`. */\n get bgOrange50() {\n return this.add(\"backgroundColor\", \"rgba(255, 247, 237, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(255, 237, 213, 1)\"`. */\n get bgOrange100() {\n return this.add(\"backgroundColor\", \"rgba(255, 237, 213, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(254, 215, 170, 1)\"`. */\n get bgOrange200() {\n return this.add(\"backgroundColor\", \"rgba(254, 215, 170, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(253, 186, 116, 1)\"`. */\n get bgOrange300() {\n return this.add(\"backgroundColor\", \"rgba(253, 186, 116, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(251, 146, 60, 1)\"`. */\n get bgOrange400() {\n return this.add(\"backgroundColor\", \"rgba(251, 146, 60, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(249, 115, 22, 1)\"`. */\n get bgOrange500() {\n return this.add(\"backgroundColor\", \"rgba(249, 115, 22, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(234, 88, 12, 1)\"`. */\n get bgOrange600() {\n return this.add(\"backgroundColor\", \"rgba(234, 88, 12, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(194, 65, 12, 1)\"`. */\n get bgOrange700() {\n return this.add(\"backgroundColor\", \"rgba(194, 65, 12, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(154, 52, 18, 1)\"`. */\n get bgOrange800() {\n return this.add(\"backgroundColor\", \"rgba(154, 52, 18, 1)\");\n }\n /** Sets `backgroundColor: \"rgba(124, 45, 18, 1)\"`. */\n get bgOrange900() {\n return this.add(\"backgroundColor\", \"rgba(124, 45, 18, 1)\");\n }\n /** Sets `backgroundColor: value`. */\n bgColor(value: Properties[\"backgroundColor\"]) {\n return this.add(\"backgroundColor\", value);\n }\n /** Sets `fill: \"rgba(255,255,255,1)\"`. */\n get fWhite() {\n return this.add(\"fill\", \"rgba(255,255,255,1)\");\n }\n /** Sets `fill: \"rgba(0,0,0,0)\"`. */\n get fTransparent() {\n return this.add(\"fill\", \"rgba(0,0,0,0)\");\n }\n /** Sets `fill: \"rgba(255, 253, 253, 1)\"`. */\n get fGray50() {\n return this.add(\"fill\", \"rgba(255, 253, 253, 1)\");\n }\n /** Sets `fill: \"rgba(247, 245, 245, 1)\"`. */\n get fGray100() {\n return this.add(\"fill\", \"rgba(247, 245, 245, 1)\");\n }\n /** Sets `fill: \"rgba(236, 235, 235, 1)\"`. */\n get fGray200() {\n return this.add(\"fill\", \"rgba(236, 235, 235, 1)\");\n }\n /** Sets `fill: \"rgba(221, 220, 220, 1)\"`. */\n get fGray300() {\n return this.add(\"fill\", \"rgba(221, 220, 220, 1)\");\n }\n /** Sets `fill: \"rgba(201, 201, 201, 1)\"`. */\n get fGray400() {\n return this.add(\"fill\", \"rgba(201, 201, 201, 1)\");\n }\n /** Sets `fill: \"rgba(175, 175, 175, 1)\"`. */\n get fGray500() {\n return this.add(\"fill\", \"rgba(175, 175, 175, 1)\");\n }\n /** Sets `fill: \"rgba(141, 141, 141, 1)\"`. */\n get fGray600() {\n return this.add(\"fill\", \"rgba(141, 141, 141, 1)\");\n }\n /** Sets `fill: \"rgba(100, 100, 100, 1)\"`. */\n get fGray700() {\n return this.add(\"fill\", \"rgba(100, 100, 100, 1)\");\n }\n /** Sets `fill: \"rgba(53, 53, 53, 1)\"`. */\n get fGray800() {\n return this.add(\"fill\", \"rgba(53, 53, 53, 1)\");\n }\n /** Sets `fill: \"rgba(36, 36, 36, 1)\"`. */\n get fGray900() {\n return this.add(\"fill\", \"rgba(36, 36, 36, 1)\");\n }\n /** Sets `fill: \"rgba(239, 246, 255, 1)\"`. */\n get fBlue50() {\n return this.add(\"fill\", \"rgba(239, 246, 255, 1)\");\n }\n /** Sets `fill: \"rgba(219, 234, 254, 1)\"`. */\n get fBlue100() {\n return this.add(\"fill\", \"rgba(219, 234, 254, 1)\");\n }\n /** Sets `fill: \"rgba(191, 219, 254, 1)\"`. */\n get fBlue200() {\n return this.add(\"fill\", \"rgba(191, 219, 254, 1)\");\n }\n /** Sets `fill: \"rgba(147, 197, 253, 1)\"`. */\n get fBlue300() {\n return this.add(\"fill\", \"rgba(147, 197, 253, 1)\");\n }\n /** Sets `fill: \"rgba(96, 165, 250, 1)\"`. */\n get fBlue400() {\n return this.add(\"fill\", \"rgba(96, 165, 250, 1)\");\n }\n /** Sets `fill: \"rgba(59, 130, 246, 1)\"`. */\n get fBlue500() {\n return this.add(\"fill\", \"rgba(59, 130, 246, 1)\");\n }\n /** Sets `fill: \"rgba(37, 99, 235, 1)\"`. */\n get fBlue600() {\n return this.add(\"fill\", \"rgba(37, 99, 235, 1)\");\n }\n /** Sets `fill: \"rgba(29, 78, 216, 1)\"`. */\n get fBlue700() {\n return this.add(\"fill\", \"rgba(29, 78, 216, 1)\");\n }\n /** Sets `fill: \"rgba(30, 64, 175, 1)\"`. */\n get fBlue800() {\n return this.add(\"fill\", \"rgba(30, 64, 175, 1)\");\n }\n /** Sets `fill: \"rgba(30, 58, 138, 1)\"`. */\n get fBlue900() {\n return this.add(\"fill\", \"rgba(30, 58, 138, 1)\");\n }\n /** Sets `fill: \"rgba(254, 242, 242, 1)\"`. */\n get fRed50() {\n return this.add(\"fill\", \"rgba(254, 242, 242, 1)\");\n }\n /** Sets `fill: \"rgba(254, 226, 226, 1)\"`. */\n get fRed100() {\n return this.add(\"fill\", \"rgba(254, 226, 226, 1)\");\n }\n /** Sets `fill: \"rgba(254, 202, 202, 1)\"`. */\n get fRed200() {\n return this.add(\"fill\", \"rgba(254, 202, 202, 1)\");\n }\n /** Sets `fill: \"rgba(252, 165, 165, 1)\"`. */\n get fRed300() {\n return this.add(\"fill\", \"rgba(252, 165, 165, 1)\");\n }\n /** Sets `fill: \"rgba(248, 113, 113, 1)\"`. */\n get fRed400() {\n return this.add(\"fill\", \"rgba(248, 113, 113, 1)\");\n }\n /** Sets `fill: \"rgba(239, 68, 68, 1)\"`. */\n get fRed500() {\n return this.add(\"fill\", \"rgba(239, 68, 68, 1)\");\n }\n /** Sets `fill: \"rgba(220, 38, 38, 1)\"`. */\n get fRed600() {\n return this.add(\"fill\", \"rgba(220, 38, 38, 1)\");\n }\n /** Sets `fill: \"rgba(185, 28, 28, 1)\"`. */\n get fRed700() {\n return this.add(\"fill\", \"rgba(185, 28, 28, 1)\");\n }\n /** Sets `fill: \"rgba(153, 27, 27, 1)\"`. */\n get fRed800() {\n return this.add(\"fill\", \"rgba(153, 27, 27, 1)\");\n }\n /** Sets `fill: \"rgba(127, 29, 29, 1)\"`. */\n get fRed900() {\n return this.add(\"fill\", \"rgba(127, 29, 29, 1)\");\n }\n /** Sets `fill: \"rgba(254, 252, 232, 1)\"`. */\n get fYellow50() {\n return this.add(\"fill\", \"rgba(254, 252, 232, 1)\");\n }\n /** Sets `fill: \"rgba(254, 249, 195, 1)\"`. */\n get fYellow100() {\n return this.add(\"fill\", \"rgba(254, 249, 195, 1)\");\n }\n /** Sets `fill: \"rgba(254, 240, 138, 1)\"`. */\n get fYellow200() {\n return this.add(\"fill\", \"rgba(254, 240, 138, 1)\");\n }\n /** Sets `fill: \"rgba(253, 224, 71, 1)\"`. */\n get fYellow300() {\n return this.add(\"fill\", \"rgba(253, 224, 71, 1)\");\n }\n /** Sets `fill: \"rgba(250, 204, 21, 1)\"`. */\n get fYellow400() {\n return this.add(\"fill\", \"rgba(250, 204, 21, 1)\");\n }\n /** Sets `fill: \"rgba(234, 179, 8, 1)\"`. */\n get fYellow500() {\n return this.add(\"fill\", \"rgba(234, 179, 8, 1)\");\n }\n /** Sets `fill: \"rgba(202, 138, 4, 1)\"`. */\n get fYellow600() {\n return this.add(\"fill\", \"rgba(202, 138, 4, 1)\");\n }\n /** Sets `fill: \"rgba(161, 98, 7, 1)\"`. */\n get fYellow700() {\n return this.add(\"fill\", \"rgba(161, 98, 7, 1)\");\n }\n /** Sets `fill: \"rgba(133, 77, 14, 1)\"`. */\n get fYellow800() {\n return this.add(\"fill\", \"rgba(133, 77, 14, 1)\");\n }\n /** Sets `fill: \"rgba(113, 63, 18, 1)\"`. */\n get fYellow900() {\n return this.add(\"fill\", \"rgba(113, 63, 18, 1)\");\n }\n /** Sets `fill: \"rgba(236, 253, 245, 1)\"`. */\n get fGreen50() {\n return this.add(\"fill\", \"rgba(236, 253, 245, 1)\");\n }\n /** Sets `fill: \"rgba(209, 250, 229, 1)\"`. */\n get fGreen100() {\n return this.add(\"fill\", \"rgba(209, 250, 229, 1)\");\n }\n /** Sets `fill: \"rgba(167, 243, 208, 1)\"`. */\n get fGreen200() {\n return this.add(\"fill\", \"rgba(167, 243, 208, 1)\");\n }\n /** Sets `fill: \"rgba(110, 231, 183, 1)\"`. */\n get fGreen300() {\n return this.add(\"fill\", \"rgba(110, 231, 183, 1)\");\n }\n /** Sets `fill: \"rgba(52, 211, 153, 1)\"`. */\n get fGreen400() {\n return this.add(\"fill\", \"rgba(52, 211, 153, 1)\");\n }\n /** Sets `fill: \"rgba(16, 185, 129, 1)\"`. */\n get fGreen500() {\n return this.add(\"fill\", \"rgba(16, 185, 129, 1)\");\n }\n /** Sets `fill: \"rgba(5, 150, 105, 1)\"`. */\n get fGreen600() {\n return this.add(\"fill\", \"rgba(5, 150, 105, 1)\");\n }\n /** Sets `fill: \"rgba(4, 120, 87, 1)\"`. */\n get fGreen700() {\n return this.add(\"fill\", \"rgba(4, 120, 87, 1)\");\n }\n /** Sets `fill: \"rgba(6, 95, 70, 1)\"`. */\n get fGreen800() {\n return this.add(\"fill\", \"rgba(6, 95, 70, 1)\");\n }\n /** Sets `fill: \"rgba(6, 78, 59, 1)\"`. */\n get fGreen900() {\n return this.add(\"fill\", \"rgba(6, 78, 59, 1)\");\n }\n /** Sets `fill: \"rgba(245, 243, 255, 1)\"`. */\n get fPurple50() {\n return this.add(\"fill\", \"rgba(245, 243, 255, 1)\");\n }\n /** Sets `fill: \"rgba(237, 233, 254, 1)\"`. */\n get fPurple100() {\n return this.add(\"fill\", \"rgba(237, 233, 254, 1)\");\n }\n /** Sets `fill: \"rgba(221, 214, 254, 1)\"`. */\n get fPurple200() {\n return this.add(\"fill\", \"rgba(221, 214, 254, 1)\");\n }\n /** Sets `fill: \"rgba(196, 181, 253, 1)\"`. */\n get fPurple300() {\n return this.add(\"fill\", \"rgba(196, 181, 253, 1)\");\n }\n /** Sets `fill: \"rgba(167, 139, 250, 1)\"`. */\n get fPurple400() {\n return this.add(\"fill\", \"rgba(167, 139, 250, 1)\");\n }\n /** Sets `fill: \"rgba(139, 92, 246, 1)\"`. */\n get fPurple500() {\n return this.add(\"fill\", \"rgba(139, 92, 246, 1)\");\n }\n /** Sets `fill: \"rgba(124, 58, 237, 1)\"`. */\n get fPurple600() {\n return this.add(\"fill\", \"rgba(124, 58, 237, 1)\");\n }\n /** Sets `fill: \"rgba(109, 40, 217, 1)\"`. */\n get fPurple700() {\n return this.add(\"fill\", \"rgba(109, 40, 217, 1)\");\n }\n /** Sets `fill: \"rgba(91, 33, 182, 1)\"`. */\n get fPurple800() {\n return this.add(\"fill\", \"rgba(91, 33, 182, 1)\");\n }\n /** Sets `fill: \"rgba(76, 29, 149, 1)\"`. */\n get fPurple900() {\n return this.add(\"fill\", \"rgba(76, 29, 149, 1)\");\n }\n /** Sets `fill: \"rgba(255, 247, 237, 1)\"`. */\n get fOrange50() {\n return this.add(\"fill\", \"rgba(255, 247, 237, 1)\");\n }\n /** Sets `fill: \"rgba(255, 237, 213, 1)\"`. */\n get fOrange100() {\n return this.add(\"fill\", \"rgba(255, 237, 213, 1)\");\n }\n /** Sets `fill: \"rgba(254, 215, 170, 1)\"`. */\n get fOrange200() {\n return this.add(\"fill\", \"rgba(254, 215, 170, 1)\");\n }\n /** Sets `fill: \"rgba(253, 186, 116, 1)\"`. */\n get fOrange300() {\n return this.add(\"fill\", \"rgba(253, 186, 116, 1)\");\n }\n /** Sets `fill: \"rgba(251, 146, 60, 1)\"`. */\n get fOrange400() {\n return this.add(\"fill\", \"rgba(251, 146, 60, 1)\");\n }\n /** Sets `fill: \"rgba(249, 115, 22, 1)\"`. */\n get fOrange500() {\n return this.add(\"fill\", \"rgba(249, 115, 22, 1)\");\n }\n /** Sets `fill: \"rgba(234, 88, 12, 1)\"`. */\n get fOrange600() {\n return this.add(\"fill\", \"rgba(234, 88, 12, 1)\");\n }\n /** Sets `fill: \"rgba(194, 65, 12, 1)\"`. */\n get fOrange700() {\n return this.add(\"fill\", \"rgba(194, 65, 12, 1)\");\n }\n /** Sets `fill: \"rgba(154, 52, 18, 1)\"`. */\n get fOrange800() {\n return this.add(\"fill\", \"rgba(154, 52, 18, 1)\");\n }\n /** Sets `fill: \"rgba(124, 45, 18, 1)\"`. */\n get fOrange900() {\n return this.add(\"fill\", \"rgba(124, 45, 18, 1)\");\n }\n /** Sets `fill: value`. */\n fill(value: Properties[\"fill\"]) {\n return this.add(\"fill\", value);\n }\n\n // spacing\n /** Sets `marginTop: \"0px\"`. */\n get mt0() {\n return this.add(\"marginTop\", \"0px\");\n }\n /** Sets `marginTop: \"8px\"`. */\n get mt1() {\n return this.add(\"marginTop\", \"8px\");\n }\n /** Sets `marginTop: \"16px\"`. */\n get mt2() {\n return this.add(\"marginTop\", \"16px\");\n }\n /** Sets `marginTop: \"24px\"`. */\n get mt3() {\n return this.add(\"marginTop\", \"24px\");\n }\n /** Sets `marginTop: \"32px\"`. */\n get mt4() {\n return this.add(\"marginTop\", \"32px\");\n }\n /** Sets `marginTop: \"40px\"`. */\n get mt5() {\n return this.add(\"marginTop\", \"40px\");\n }\n /** Sets `marginTop: \"48px\"`. */\n get mt6() {\n return this.add(\"marginTop\", \"48px\");\n }\n /** Sets `marginTop: \"56px\"`. */\n get mt7() {\n return this.add(\"marginTop\", \"56px\");\n }\n /** Sets `marginTop: \"64px\"`. */\n get mt8() {\n return this.add(\"marginTop\", \"64px\");\n }\n /** Sets `marginTop: \"auto\"`. */\n get mta() {\n return this.add(\"marginTop\", \"auto\");\n }\n /** Sets `marginTop: \"v\"`. */\n mt(v: number | string) {\n return this.add(\"marginTop\", maybeInc(v));\n }\n /** Sets `marginTop: px`. */\n mtPx(px: number) {\n return this.add(\"marginTop\", `${px}px`);\n }\n /** Sets `marginRight: \"0px\"`. */\n get mr0() {\n return this.add(\"marginRight\", \"0px\");\n }\n /** Sets `marginRight: \"8px\"`. */\n get mr1() {\n return this.add(\"marginRight\", \"8px\");\n }\n /** Sets `marginRight: \"16px\"`. */\n get mr2() {\n return this.add(\"marginRight\", \"16px\");\n }\n /** Sets `marginRight: \"24px\"`. */\n get mr3() {\n return this.add(\"marginRight\", \"24px\");\n }\n /** Sets `marginRight: \"32px\"`. */\n get mr4() {\n return this.add(\"marginRight\", \"32px\");\n }\n /** Sets `marginRight: \"40px\"`. */\n get mr5() {\n return this.add(\"marginRight\", \"40px\");\n }\n /** Sets `marginRight: \"48px\"`. */\n get mr6() {\n return this.add(\"marginRight\", \"48px\");\n }\n /** Sets `marginRight: \"56px\"`. */\n get mr7() {\n return this.add(\"marginRight\", \"56px\");\n }\n /** Sets `marginRight: \"64px\"`. */\n get mr8() {\n return this.add(\"marginRight\", \"64px\");\n }\n /** Sets `marginRight: \"auto\"`. */\n get mra() {\n return this.add(\"marginRight\", \"auto\");\n }\n /** Sets `marginRight: \"v\"`. */\n mr(v: number | string) {\n return this.add(\"marginRight\", maybeInc(v));\n }\n /** Sets `marginRight: px`. */\n mrPx(px: number) {\n return this.add(\"marginRight\", `${px}px`);\n }\n /** Sets `marginBottom: \"0px\"`. */\n get mb0() {\n return this.add(\"marginBottom\", \"0px\");\n }\n /** Sets `marginBottom: \"8px\"`. */\n get mb1() {\n return this.add(\"marginBottom\", \"8px\");\n }\n /** Sets `marginBottom: \"16px\"`. */\n get mb2() {\n return this.add(\"marginBottom\", \"16px\");\n }\n /** Sets `marginBottom: \"24px\"`. */\n get mb3() {\n return this.add(\"marginBottom\", \"24px\");\n }\n /** Sets `marginBottom: \"32px\"`. */\n get mb4() {\n return this.add(\"marginBottom\", \"32px\");\n }\n /** Sets `marginBottom: \"40px\"`. */\n get mb5() {\n return this.add(\"marginBottom\", \"40px\");\n }\n /** Sets `marginBottom: \"48px\"`. */\n get mb6() {\n return this.add(\"marginBottom\", \"48px\");\n }\n /** Sets `marginBottom: \"56px\"`. */\n get mb7() {\n return this.add(\"marginBottom\", \"56px\");\n }\n /** Sets `marginBottom: \"64px\"`. */\n get mb8() {\n return this.add(\"marginBottom\", \"64px\");\n }\n /** Sets `marginBottom: \"auto\"`. */\n get mba() {\n return this.add(\"marginBottom\", \"auto\");\n }\n /** Sets `marginBottom: \"v\"`. */\n mb(v: number | string) {\n return this.add(\"marginBottom\", maybeInc(v));\n }\n /** Sets `marginBottom: px`. */\n mbPx(px: number) {\n return this.add(\"marginBottom\", `${px}px`);\n }\n /** Sets `marginLeft: \"0px\"`. */\n get ml0() {\n return this.add(\"marginLeft\", \"0px\");\n }\n /** Sets `marginLeft: \"8px\"`. */\n get ml1() {\n return this.add(\"marginLeft\", \"8px\");\n }\n /** Sets `marginLeft: \"16px\"`. */\n get ml2() {\n return this.add(\"marginLeft\", \"16px\");\n }\n /** Sets `marginLeft: \"24px\"`. */\n get ml3() {\n return this.add(\"marginLeft\", \"24px\");\n }\n /** Sets `marginLeft: \"32px\"`. */\n get ml4() {\n return this.add(\"marginLeft\", \"32px\");\n }\n /** Sets `marginLeft: \"40px\"`. */\n get ml5() {\n return this.add(\"marginLeft\", \"40px\");\n }\n /** Sets `marginLeft: \"48px\"`. */\n get ml6() {\n return this.add(\"marginLeft\", \"48px\");\n }\n /** Sets `marginLeft: \"56px\"`. */\n get ml7() {\n return this.add(\"marginLeft\", \"56px\");\n }\n /** Sets `marginLeft: \"64px\"`. */\n get ml8() {\n return this.add(\"marginLeft\", \"64px\");\n }\n /** Sets `marginLeft: \"auto\"`. */\n get mla() {\n return this.add(\"marginLeft\", \"auto\");\n }\n /** Sets `marginLeft: \"v\"`. */\n ml(v: number | string) {\n return this.add(\"marginLeft\", maybeInc(v));\n }\n /** Sets `marginLeft: px`. */\n mlPx(px: number) {\n return this.add(\"marginLeft\", `${px}px`);\n }\n /** Sets `marginLeft: \"0px\"; marginRight: \"0px\"`. */\n get mx0() {\n return this.add(\"marginLeft\", \"0px\").add(\"marginRight\", \"0px\");\n }\n /** Sets `marginLeft: \"8px\"; marginRight: \"8px\"`. */\n get mx1() {\n return this.add(\"marginLeft\", \"8px\").add(\"marginRight\", \"8px\");\n }\n /** Sets `marginLeft: \"16px\"; marginRight: \"16px\"`. */\n get mx2() {\n return this.add(\"marginLeft\", \"16px\").add(\"marginRight\", \"16px\");\n }\n /** Sets `marginLeft: \"24px\"; marginRight: \"24px\"`. */\n get mx3() {\n return this.add(\"marginLeft\", \"24px\").add(\"marginRight\", \"24px\");\n }\n /** Sets `marginLeft: \"32px\"; marginRight: \"32px\"`. */\n get mx4() {\n return this.add(\"marginLeft\", \"32px\").add(\"marginRight\", \"32px\");\n }\n /** Sets `marginLeft: \"40px\"; marginRight: \"40px\"`. */\n get mx5() {\n return this.add(\"marginLeft\", \"40px\").add(\"marginRight\", \"40px\");\n }\n /** Sets `marginLeft: \"48px\"; marginRight: \"48px\"`. */\n get mx6() {\n return this.add(\"marginLeft\", \"48px\").add(\"marginRight\", \"48px\");\n }\n /** Sets `marginLeft: \"56px\"; marginRight: \"56px\"`. */\n get mx7() {\n return this.add(\"marginLeft\", \"56px\").add(\"marginRight\", \"56px\");\n }\n /** Sets `marginLeft: \"64px\"; marginRight: \"64px\"`. */\n get mx8() {\n return this.add(\"marginLeft\", \"64px\").add(\"marginRight\", \"64px\");\n }\n /** Sets `marginLeft: \"auto\"; marginRight: \"auto\"`. */\n get mxa() {\n return this.add(\"marginLeft\", \"auto\").add(\"marginRight\", \"auto\");\n }\n /** Sets `marginLeft: \"v\"; marginRight: \"v\"`. */\n mx(v: number | string) {\n return this.add(\"marginLeft\", maybeInc(v)).add(\"marginRight\", maybeInc(v));\n }\n /** Sets `marginLeft: px; marginRight: px`. */\n mxPx(px: number) {\n return this.add(\"marginLeft\", `${px}px`).add(\"marginRight\", `${px}px`);\n }\n /** Sets `marginTop: \"0px\"; marginBottom: \"0px\"`. */\n get my0() {\n return this.add(\"marginTop\", \"0px\").add(\"marginBottom\", \"0px\");\n }\n /** Sets `marginTop: \"8px\"; marginBottom: \"8px\"`. */\n get my1() {\n return this.add(\"marginTop\", \"8px\").add(\"marginBottom\", \"8px\");\n }\n /** Sets `marginTop: \"16px\"; marginBottom: \"16px\"`. */\n get my2() {\n return this.add(\"marginTop\", \"16px\").add(\"marginBottom\", \"16px\");\n }\n /** Sets `marginTop: \"24px\"; marginBottom: \"24px\"`. */\n get my3() {\n return this.add(\"marginTop\", \"24px\").add(\"marginBottom\", \"24px\");\n }\n /** Sets `marginTop: \"32px\"; marginBottom: \"32px\"`. */\n get my4() {\n return this.add(\"marginTop\", \"32px\").add(\"marginBottom\", \"32px\");\n }\n /** Sets `marginTop: \"40px\"; marginBottom: \"40px\"`. */\n get my5() {\n return this.add(\"marginTop\", \"40px\").add(\"marginBottom\", \"40px\");\n }\n /** Sets `marginTop: \"48px\"; marginBottom: \"48px\"`. */\n get my6() {\n return this.add(\"marginTop\", \"48px\").add(\"marginBottom\", \"48px\");\n }\n /** Sets `marginTop: \"56px\"; marginBottom: \"56px\"`. */\n get my7() {\n return this.add(\"marginTop\", \"56px\").add(\"marginBottom\", \"56px\");\n }\n /** Sets `marginTop: \"64px\"; marginBottom: \"64px\"`. */\n get my8() {\n return this.add(\"marginTop\", \"64px\").add(\"marginBottom\", \"64px\");\n }\n /** Sets `marginTop: \"auto\"; marginBottom: \"auto\"`. */\n get mya() {\n return this.add(\"marginTop\", \"auto\").add(\"marginBottom\", \"auto\");\n }\n /** Sets `marginTop: \"v\"; marginBottom: \"v\"`. */\n my(v: number | string) {\n return this.add(\"marginTop\", maybeInc(v)).add(\"marginBottom\", maybeInc(v));\n }\n /** Sets `marginTop: px; marginBottom: px`. */\n myPx(px: number) {\n return this.add(\"marginTop\", `${px}px`).add(\"marginBottom\", `${px}px`);\n }\n /** Sets `marginTop: \"0px\"; marginBottom: \"0px\"; marginRight: \"0px\"; marginLeft: \"0px\"`. */\n get m0() {\n return this.add(\"marginTop\", \"0px\").add(\"marginBottom\", \"0px\").add(\"marginRight\", \"0px\").add(\"marginLeft\", \"0px\");\n }\n /** Sets `marginTop: \"8px\"; marginBottom: \"8px\"; marginRight: \"8px\"; marginLeft: \"8px\"`. */\n get m1() {\n return this.add(\"marginTop\", \"8px\").add(\"marginBottom\", \"8px\").add(\"marginRight\", \"8px\").add(\"marginLeft\", \"8px\");\n }\n /** Sets `marginTop: \"16px\"; marginBottom: \"16px\"; marginRight: \"16px\"; marginLeft: \"16px\"`. */\n get m2() {\n return this.add(\"marginTop\", \"16px\").add(\"marginBottom\", \"16px\").add(\"marginRight\", \"16px\").add(\n \"marginLeft\",\n \"16px\",\n );\n }\n /** Sets `marginTop: \"24px\"; marginBottom: \"24px\"; marginRight: \"24px\"; marginLeft: \"24px\"`. */\n get m3() {\n return this.add(\"marginTop\", \"24px\").add(\"marginBottom\", \"24px\").add(\"marginRight\", \"24px\").add(\n \"marginLeft\",\n \"24px\",\n );\n }\n /** Sets `marginTop: \"32px\"; marginBottom: \"32px\"; marginRight: \"32px\"; marginLeft: \"32px\"`. */\n get m4() {\n return this.add(\"marginTop\", \"32px\").add(\"marginBottom\", \"32px\").add(\"marginRight\", \"32px\").add(\n \"marginLeft\",\n \"32px\",\n );\n }\n /** Sets `marginTop: \"40px\"; marginBottom: \"40px\"; marginRight: \"40px\"; marginLeft: \"40px\"`. */\n get m5() {\n return this.add(\"marginTop\", \"40px\").add(\"marginBottom\", \"40px\").add(\"marginRight\", \"40px\").add(\n \"marginLeft\",\n \"40px\",\n );\n }\n /** Sets `marginTop: \"48px\"; marginBottom: \"48px\"; marginRight: \"48px\"; marginLeft: \"48px\"`. */\n get m6() {\n return this.add(\"marginTop\", \"48px\").add(\"marginBottom\", \"48px\").add(\"marginRight\", \"48px\").add(\n \"marginLeft\",\n \"48px\",\n );\n }\n /** Sets `marginTop: \"56px\"; marginBottom: \"56px\"; marginRight: \"56px\"; marginLeft: \"56px\"`. */\n get m7() {\n return this.add(\"marginTop\", \"56px\").add(\"marginBottom\", \"56px\").add(\"marginRight\", \"56px\").add(\n \"marginLeft\",\n \"56px\",\n );\n }\n /** Sets `marginTop: \"64px\"; marginBottom: \"64px\"; marginRight: \"64px\"; marginLeft: \"64px\"`. */\n get m8() {\n return this.add(\"marginTop\", \"64px\").add(\"marginBottom\", \"64px\").add(\"marginRight\", \"64px\").add(\n \"marginLeft\",\n \"64px\",\n );\n }\n /** Sets `marginTop: \"auto\"; marginBottom: \"auto\"; marginRight: \"auto\"; marginLeft: \"auto\"`. */\n get ma() {\n return this.add(\"marginTop\", \"auto\").add(\"marginBottom\", \"auto\").add(\"marginRight\", \"auto\").add(\n \"marginLeft\",\n \"auto\",\n );\n }\n /** Sets `marginTop: \"v\"; marginBottom: \"v\"; marginRight: \"v\"; marginLeft: \"v\"`. */\n m(v: number | string) {\n return this.add(\"marginTop\", maybeInc(v)).add(\"marginBottom\", maybeInc(v)).add(\"marginRight\", maybeInc(v)).add(\n \"marginLeft\",\n maybeInc(v),\n );\n }\n /** Sets `marginTop: px; marginBottom: px; marginRight: px; marginLeft: px`. */\n mPx(px: number) {\n return this.add(\"marginTop\", `${px}px`).add(\"marginBottom\", `${px}px`).add(\"marginRight\", `${px}px`).add(\n \"marginLeft\",\n `${px}px`,\n );\n }\n /** Sets `paddingTop: \"0px\"`. */\n get pt0() {\n return this.add(\"paddingTop\", \"0px\");\n }\n /** Sets `paddingTop: \"8px\"`. */\n get pt1() {\n return this.add(\"paddingTop\", \"8px\");\n }\n /** Sets `paddingTop: \"16px\"`. */\n get pt2() {\n return this.add(\"paddingTop\", \"16px\");\n }\n /** Sets `paddingTop: \"24px\"`. */\n get pt3() {\n return this.add(\"paddingTop\", \"24px\");\n }\n /** Sets `paddingTop: \"32px\"`. */\n get pt4() {\n return this.add(\"paddingTop\", \"32px\");\n }\n /** Sets `paddingTop: \"40px\"`. */\n get pt5() {\n return this.add(\"paddingTop\", \"40px\");\n }\n /** Sets `paddingTop: \"48px\"`. */\n get pt6() {\n return this.add(\"paddingTop\", \"48px\");\n }\n /** Sets `paddingTop: \"56px\"`. */\n get pt7() {\n return this.add(\"paddingTop\", \"56px\");\n }\n /** Sets `paddingTop: \"64px\"`. */\n get pt8() {\n return this.add(\"paddingTop\", \"64px\");\n }\n /** Sets `paddingTop: \"v\"`. */\n pt(v: number | string) {\n return this.add(\"paddingTop\", maybeInc(v));\n }\n /** Sets `paddingTop: px`. */\n ptPx(px: number) {\n return this.add(\"paddingTop\", `${px}px`);\n }\n /** Sets `paddingRight: \"0px\"`. */\n get pr0() {\n return this.add(\"paddingRight\", \"0px\");\n }\n /** Sets `paddingRight: \"8px\"`. */\n get pr1() {\n return this.add(\"paddingRight\", \"8px\");\n }\n /** Sets `paddingRight: \"16px\"`. */\n get pr2() {\n return this.add(\"paddingRight\", \"16px\");\n }\n /** Sets `paddingRight: \"24px\"`. */\n get pr3() {\n return this.add(\"paddingRight\", \"24px\");\n }\n /** Sets `paddingRight: \"32px\"`. */\n get pr4() {\n return this.add(\"paddingRight\", \"32px\");\n }\n /** Sets `paddingRight: \"40px\"`. */\n get pr5() {\n return this.add(\"paddingRight\", \"40px\");\n }\n /** Sets `paddingRight: \"48px\"`. */\n get pr6() {\n return this.add(\"paddingRight\", \"48px\");\n }\n /** Sets `paddingRight: \"56px\"`. */\n get pr7() {\n return this.add(\"paddingRight\", \"56px\");\n }\n /** Sets `paddingRight: \"64px\"`. */\n get pr8() {\n return this.add(\"paddingRight\", \"64px\");\n }\n /** Sets `paddingRight: \"v\"`. */\n pr(v: number | string) {\n return this.add(\"paddingRight\", maybeInc(v));\n }\n /** Sets `paddingRight: px`. */\n prPx(px: number) {\n return this.add(\"paddingRight\", `${px}px`);\n }\n /** Sets `paddingBottom: \"0px\"`. */\n get pb0() {\n return this.add(\"paddingBottom\", \"0px\");\n }\n /** Sets `paddingBottom: \"8px\"`. */\n get pb1() {\n return this.add(\"paddingBottom\", \"8px\");\n }\n /** Sets `paddingBottom: \"16px\"`. */\n get pb2() {\n return this.add(\"paddingBottom\", \"16px\");\n }\n /** Sets `paddingBottom: \"24px\"`. */\n get pb3() {\n return this.add(\"paddingBottom\", \"24px\");\n }\n /** Sets `paddingBottom: \"32px\"`. */\n get pb4() {\n return this.add(\"paddingBottom\", \"32px\");\n }\n /** Sets `paddingBottom: \"40px\"`. */\n get pb5() {\n return this.add(\"paddingBottom\", \"40px\");\n }\n /** Sets `paddingBottom: \"48px\"`. */\n get pb6() {\n return this.add(\"paddingBottom\", \"48px\");\n }\n /** Sets `paddingBottom: \"56px\"`. */\n get pb7() {\n return this.add(\"paddingBottom\", \"56px\");\n }\n /** Sets `paddingBottom: \"64px\"`. */\n get pb8() {\n return this.add(\"paddingBottom\", \"64px\");\n }\n /** Sets `paddingBottom: \"v\"`. */\n pb(v: number | string) {\n return this.add(\"paddingBottom\", maybeInc(v));\n }\n /** Sets `paddingBottom: px`. */\n pbPx(px: number) {\n return this.add(\"paddingBottom\", `${px}px`);\n }\n /** Sets `paddingLeft: \"0px\"`. */\n get pl0() {\n return this.add(\"paddingLeft\", \"0px\");\n }\n /** Sets `paddingLeft: \"8px\"`. */\n get pl1() {\n return this.add(\"paddingLeft\", \"8px\");\n }\n /** Sets `paddingLeft: \"16px\"`. */\n get pl2() {\n return this.add(\"paddingLeft\", \"16px\");\n }\n /** Sets `paddingLeft: \"24px\"`. */\n get pl3() {\n return this.add(\"paddingLeft\", \"24px\");\n }\n /** Sets `paddingLeft: \"32px\"`. */\n get pl4() {\n return this.add(\"paddingLeft\", \"32px\");\n }\n /** Sets `paddingLeft: \"40px\"`. */\n get pl5() {\n return this.add(\"paddingLeft\", \"40px\");\n }\n /** Sets `paddingLeft: \"48px\"`. */\n get pl6() {\n return this.add(\"paddingLeft\", \"48px\");\n }\n /** Sets `paddingLeft: \"56px\"`. */\n get pl7() {\n return this.add(\"paddingLeft\", \"56px\");\n }\n /** Sets `paddingLeft: \"64px\"`. */\n get pl8() {\n return this.add(\"paddingLeft\", \"64px\");\n }\n /** Sets `paddingLeft: \"v\"`. */\n pl(v: number | string) {\n return this.add(\"paddingLeft\", maybeInc(v));\n }\n /** Sets `paddingLeft: px`. */\n plPx(px: number) {\n return this.add(\"paddingLeft\", `${px}px`);\n }\n /** Sets `paddingLeft: \"0px\"; paddingRight: \"0px\"`. */\n get px0() {\n return this.add(\"paddingLeft\", \"0px\").add(\"paddingRight\", \"0px\");\n }\n /** Sets `paddingLeft: \"8px\"; paddingRight: \"8px\"`. */\n get px1() {\n return this.add(\"paddingLeft\", \"8px\").add(\"paddingRight\", \"8px\");\n }\n /** Sets `paddingLeft: \"16px\"; paddingRight: \"16px\"`. */\n get px2() {\n return this.add(\"paddingLeft\", \"16px\").add(\"paddingRight\", \"16px\");\n }\n /** Sets `paddingLeft: \"24px\"; paddingRight: \"24px\"`. */\n get px3() {\n return this.add(\"paddingLeft\", \"24px\").add(\"paddingRight\", \"24px\");\n }\n /** Sets `paddingLeft: \"32px\"; paddingRight: \"32px\"`. */\n get px4() {\n return this.add(\"paddingLeft\", \"32px\").add(\"paddingRight\", \"32px\");\n }\n /** Sets `paddingLeft: \"40px\"; paddingRight: \"40px\"`. */\n get px5() {\n return this.add(\"paddingLeft\", \"40px\").add(\"paddingRight\", \"40px\");\n }\n /** Sets `paddingLeft: \"48px\"; paddingRight: \"48px\"`. */\n get px6() {\n return this.add(\"paddingLeft\", \"48px\").add(\"paddingRight\", \"48px\");\n }\n /** Sets `paddingLeft: \"56px\"; paddingRight: \"56px\"`. */\n get px7() {\n return this.add(\"paddingLeft\", \"56px\").add(\"paddingRight\", \"56px\");\n }\n /** Sets `paddingLeft: \"64px\"; paddingRight: \"64px\"`. */\n get px8() {\n return this.add(\"paddingLeft\", \"64px\").add(\"paddingRight\", \"64px\");\n }\n /** Sets `paddingLeft: \"v\"; paddingRight: \"v\"`. */\n px(v: number | string) {\n return this.add(\"paddingLeft\", maybeInc(v)).add(\"paddingRight\", maybeInc(v));\n }\n /** Sets `paddingLeft: px; paddingRight: px`. */\n pxPx(px: number) {\n return this.add(\"paddingLeft\", `${px}px`).add(\"paddingRight\", `${px}px`);\n }\n /** Sets `paddingTop: \"0px\"; paddingBottom: \"0px\"`. */\n get py0() {\n return this.add(\"paddingTop\", \"0px\").add(\"paddingBottom\", \"0px\");\n }\n /** Sets `paddingTop: \"8px\"; paddingBottom: \"8px\"`. */\n get py1() {\n return this.add(\"paddingTop\", \"8px\").add(\"paddingBottom\", \"8px\");\n }\n /** Sets `paddingTop: \"16px\"; paddingBottom: \"16px\"`. */\n get py2() {\n return this.add(\"paddingTop\", \"16px\").add(\"paddingBottom\", \"16px\");\n }\n /** Sets `paddingTop: \"24px\"; paddingBottom: \"24px\"`. */\n get py3() {\n return this.add(\"paddingTop\", \"24px\").add(\"paddingBottom\", \"24px\");\n }\n /** Sets `paddingTop: \"32px\"; paddingBottom: \"32px\"`. */\n get py4() {\n return this.add(\"paddingTop\", \"32px\").add(\"paddingBottom\", \"32px\");\n }\n /** Sets `paddingTop: \"40px\"; paddingBottom: \"40px\"`. */\n get py5() {\n return this.add(\"paddingTop\", \"40px\").add(\"paddingBottom\", \"40px\");\n }\n /** Sets `paddingTop: \"48px\"; paddingBottom: \"48px\"`. */\n get py6() {\n return this.add(\"paddingTop\", \"48px\").add(\"paddingBottom\", \"48px\");\n }\n /** Sets `paddingTop: \"56px\"; paddingBottom: \"56px\"`. */\n get py7() {\n return this.add(\"paddingTop\", \"56px\").add(\"paddingBottom\", \"56px\");\n }\n /** Sets `paddingTop: \"64px\"; paddingBottom: \"64px\"`. */\n get py8() {\n return this.add(\"paddingTop\", \"64px\").add(\"paddingBottom\", \"64px\");\n }\n /** Sets `paddingTop: \"v\"; paddingBottom: \"v\"`. */\n py(v: number | string) {\n return this.add(\"paddingTop\", maybeInc(v)).add(\"paddingBottom\", maybeInc(v));\n }\n /** Sets `paddingTop: px; paddingBottom: px`. */\n pyPx(px: number) {\n return this.add(\"paddingTop\", `${px}px`).add(\"paddingBottom\", `${px}px`);\n }\n /** Sets `paddingTop: \"0px\"; paddingBottom: \"0px\"; paddingRight: \"0px\"; paddingLeft: \"0px\"`. */\n get p0() {\n return this.add(\"paddingTop\", \"0px\").add(\"paddingBottom\", \"0px\").add(\"paddingRight\", \"0px\").add(\n \"paddingLeft\",\n \"0px\",\n );\n }\n /** Sets `paddingTop: \"8px\"; paddingBottom: \"8px\"; paddingRight: \"8px\"; paddingLeft: \"8px\"`. */\n get p1() {\n return this.add(\"paddingTop\", \"8px\").add(\"paddingBottom\", \"8px\").add(\"paddingRight\", \"8px\").add(\n \"paddingLeft\",\n \"8px\",\n );\n }\n /** Sets `paddingTop: \"16px\"; paddingBottom: \"16px\"; paddingRight: \"16px\"; paddingLeft: \"16px\"`. */\n get p2() {\n return this.add(\"paddingTop\", \"16px\").add(\"paddingBottom\", \"16px\").add(\"paddingRight\", \"16px\").add(\n \"paddingLeft\",\n \"16px\",\n );\n }\n /** Sets `paddingTop: \"24px\"; paddingBottom: \"24px\"; paddingRight: \"24px\"; paddingLeft: \"24px\"`. */\n get p3() {\n return this.add(\"paddingTop\", \"24px\").add(\"paddingBottom\", \"24px\").add(\"paddingRight\", \"24px\").add(\n \"paddingLeft\",\n \"24px\",\n );\n }\n /** Sets `paddingTop: \"32px\"; paddingBottom: \"32px\"; paddingRight: \"32px\"; paddingLeft: \"32px\"`. */\n get p4() {\n return this.add(\"paddingTop\", \"32px\").add(\"paddingBottom\", \"32px\").add(\"paddingRight\", \"32px\").add(\n \"paddingLeft\",\n \"32px\",\n );\n }\n /** Sets `paddingTop: \"40px\"; paddingBottom: \"40px\"; paddingRight: \"40px\"; paddingLeft: \"40px\"`. */\n get p5() {\n return this.add(\"paddingTop\", \"40px\").add(\"paddingBottom\", \"40px\").add(\"paddingRight\", \"40px\").add(\n \"paddingLeft\",\n \"40px\",\n );\n }\n /** Sets `paddingTop: \"48px\"; paddingBottom: \"48px\"; paddingRight: \"48px\"; paddingLeft: \"48px\"`. */\n get p6() {\n return this.add(\"paddingTop\", \"48px\").add(\"paddingBottom\", \"48px\").add(\"paddingRight\", \"48px\").add(\n \"paddingLeft\",\n \"48px\",\n );\n }\n /** Sets `paddingTop: \"56px\"; paddingBottom: \"56px\"; paddingRight: \"56px\"; paddingLeft: \"56px\"`. */\n get p7() {\n return this.add(\"paddingTop\", \"56px\").add(\"paddingBottom\", \"56px\").add(\"paddingRight\", \"56px\").add(\n \"paddingLeft\",\n \"56px\",\n );\n }\n /** Sets `paddingTop: \"64px\"; paddingBottom: \"64px\"; paddingRight: \"64px\"; paddingLeft: \"64px\"`. */\n get p8() {\n return this.add(\"paddingTop\", \"64px\").add(\"paddingBottom\", \"64px\").add(\"paddingRight\", \"64px\").add(\n \"paddingLeft\",\n \"64px\",\n );\n }\n /** Sets `paddingTop: \"v\"; paddingBottom: \"v\"; paddingRight: \"v\"; paddingLeft: \"v\"`. */\n p(v: number | string) {\n return this.add(\"paddingTop\", maybeInc(v)).add(\"paddingBottom\", maybeInc(v)).add(\"paddingRight\", maybeInc(v)).add(\n \"paddingLeft\",\n maybeInc(v),\n );\n }\n /** Sets `paddingTop: px; paddingBottom: px; paddingRight: px; paddingLeft: px`. */\n pPx(px: number) {\n return this.add(\"paddingTop\", `${px}px`).add(\"paddingBottom\", `${px}px`).add(\"paddingRight\", `${px}px`).add(\n \"paddingLeft\",\n `${px}px`,\n );\n }\n\n // textAlign\n /** Sets `textAlign: \"left\"`. */\n get tal() {\n return this.add(\"textAlign\", \"left\");\n }\n /** Sets `textAlign: \"center\"`. */\n get tac() {\n return this.add(\"textAlign\", \"center\");\n }\n /** Sets `textAlign: \"right\"`. */\n get tar() {\n return this.add(\"textAlign\", \"right\");\n }\n /** Sets `textAlign: \"justify\"`. */\n get taj() {\n return this.add(\"textAlign\", \"justify\");\n }\n /** Sets `textAlign: value`. */\n ta(value: Properties[\"textAlign\"]) {\n return this.add(\"textAlign\", value);\n }\n\n // textDecoration\n /** Sets `textDecoration: \"none\"`. */\n get tdn() {\n return this.add(\"textDecoration\", \"none\");\n }\n /** Sets `textDecoration: \"line-through\"`. */\n get tdlt() {\n return this.add(\"textDecoration\", \"line-through\");\n }\n /** Sets `textDecoration: \"underline\"`. */\n get tdu() {\n return this.add(\"textDecoration\", \"underline\");\n }\n /** Sets `textDecoration: value`. */\n textDecoration(value: Properties[\"textDecoration\"]) {\n return this.add(\"textDecoration\", value);\n }\n\n // textTransform\n /** Sets `textTransform: \"capitalize\"`. */\n get ttc() {\n return this.add(\"textTransform\", \"capitalize\");\n }\n /** Sets `textTransform: \"lowercase\"`. */\n get ttl() {\n return this.add(\"textTransform\", \"lowercase\");\n }\n /** Sets `textTransform: \"uppercase\"`. */\n get ttu() {\n return this.add(\"textTransform\", \"uppercase\");\n }\n /** Sets `textTransform: \"none\"`. */\n get ttn() {\n return this.add(\"textTransform\", \"none\");\n }\n /** Sets `textTransform: value`. */\n tt(value: Properties[\"textTransform\"]) {\n return this.add(\"textTransform\", value);\n }\n\n // typeScale\n /** Sets `fontWeight: 400; fontSize: \"10px\"; lineHeight: \"14px\"`. */\n get tiny() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"10px\").add(\"lineHeight\", \"14px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"10px\"; lineHeight: \"14px\"`. */\n get tinyMd() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"10px\").add(\"lineHeight\", \"14px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"10px\"; lineHeight: \"14px\"`. */\n get tinySb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"10px\").add(\"lineHeight\", \"14px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"10px\"; lineHeight: \"14px\"`. */\n get tinyBd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"10px\").add(\"lineHeight\", \"14px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"12px\"; lineHeight: \"16px\"`. */\n get xs() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"12px\").add(\"lineHeight\", \"16px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"12px\"; lineHeight: \"16px\"`. */\n get xsMd() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"12px\").add(\"lineHeight\", \"16px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"12px\"; lineHeight: \"16px\"`. */\n get xsSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"12px\").add(\"lineHeight\", \"16px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"12px\"; lineHeight: \"16px\"`. */\n get xsBd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"12px\").add(\"lineHeight\", \"16px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"14px\"; lineHeight: \"20px\"`. */\n get sm() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"14px\"; lineHeight: \"20px\"`. */\n get smMd() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"14px\"; lineHeight: \"20px\"`. */\n get smSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"14px\"; lineHeight: \"20px\"`. */\n get smBd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"16px\"; lineHeight: \"24px\"`. */\n get base() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"16px\").add(\"lineHeight\", \"24px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"16px\"; lineHeight: \"24px\"`. */\n get baseMd() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"16px\").add(\"lineHeight\", \"24px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"16px\"; lineHeight: \"24px\"`. */\n get baseSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"16px\").add(\"lineHeight\", \"24px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"16px\"; lineHeight: \"24px\"`. */\n get baseBd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"16px\").add(\"lineHeight\", \"24px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"18px\"; lineHeight: \"28px\"`. */\n get lg() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"18px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"18px\"; lineHeight: \"28px\"`. */\n get lgMd() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"18px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"18px\"; lineHeight: \"28px\"`. */\n get lgSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"18px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"18px\"; lineHeight: \"28px\"`. */\n get lgBd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"18px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"20px\"; lineHeight: \"28px\"`. */\n get xl() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"20px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"20px\"; lineHeight: \"28px\"`. */\n get xlMd() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"20px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"20px\"; lineHeight: \"28px\"`. */\n get xlSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"20px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"20px\"; lineHeight: \"28px\"`. */\n get xlBd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"20px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"24px\"; lineHeight: \"32px\"`. */\n get xl2() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"24px\").add(\"lineHeight\", \"32px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"24px\"; lineHeight: \"32px\"`. */\n get xl2Md() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"24px\").add(\"lineHeight\", \"32px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"24px\"; lineHeight: \"32px\"`. */\n get xl2Sb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"24px\").add(\"lineHeight\", \"32px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"24px\"; lineHeight: \"32px\"`. */\n get xl2Bd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"24px\").add(\"lineHeight\", \"32px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"30px\"; lineHeight: \"36px\"`. */\n get xl3() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"30px\").add(\"lineHeight\", \"36px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"30px\"; lineHeight: \"36px\"`. */\n get xl3Md() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"30px\").add(\"lineHeight\", \"36px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"30px\"; lineHeight: \"36px\"`. */\n get xl3Sb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"30px\").add(\"lineHeight\", \"36px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"30px\"; lineHeight: \"36px\"`. */\n get xl3Bd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"30px\").add(\"lineHeight\", \"36px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"36px\"; lineHeight: \"40px\"`. */\n get xl4() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"36px\").add(\"lineHeight\", \"40px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"36px\"; lineHeight: \"40px\"`. */\n get xl4Md() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"36px\").add(\"lineHeight\", \"40px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"36px\"; lineHeight: \"40px\"`. */\n get xl4Sb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"36px\").add(\"lineHeight\", \"40px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"36px\"; lineHeight: \"40px\"`. */\n get xl4Bd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"36px\").add(\"lineHeight\", \"40px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"48px\"; lineHeight: \"48px\"`. */\n get xl5() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"48px\").add(\"lineHeight\", \"48px\");\n }\n /** Sets `fontWeight: 500; fontSize: \"48px\"; lineHeight: \"48px\"`. */\n get xl5Md() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"48px\").add(\"lineHeight\", \"48px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"48px\"; lineHeight: \"48px\"`. */\n get xl5Sb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"48px\").add(\"lineHeight\", \"48px\");\n }\n /** Sets `fontWeight: 700; fontSize: \"48px\"; lineHeight: \"48px\"`. */\n get xl5Bd() {\n return this.add(\"fontWeight\", 700).add(\"fontSize\", \"48px\").add(\"lineHeight\", \"48px\");\n }\n\n // typography\n /** Sets `maxWidth: \"30em\"`. */\n get measure() {\n return this.add(\"maxWidth\", \"30em\");\n }\n /** Sets `maxWidth: \"34em\"`. */\n get measureWide() {\n return this.add(\"maxWidth\", \"34em\");\n }\n /** Sets `maxWidth: \"20em\"`. */\n get measureNarrow() {\n return this.add(\"maxWidth\", \"20em\");\n }\n /** Sets `textIndent: \"1em\"; marginTop: 0; marginBottom: 0`. */\n get indent() {\n return this.add(\"textIndent\", \"1em\").add(\"marginTop\", 0).add(\"marginBottom\", 0);\n }\n /** Sets `fontVariant: \"small-caps\"`. */\n get smallCaps() {\n return this.add(\"fontVariant\", \"small-caps\");\n }\n /** Sets `whiteSpace: \"nowrap\"; overflow: \"hidden\"; textOverflow: \"ellipsis\"`. */\n get truncate() {\n return this.add(\"whiteSpace\", \"nowrap\").add(\"overflow\", \"hidden\").add(\"textOverflow\", \"ellipsis\");\n }\n /** Sets `fontSize: value`. */\n fs(value: Properties[\"fontSize\"]) {\n return this.add(\"fontSize\", value);\n }\n /** Sets `fontSize: px`. */\n fsPx(px: number) {\n return this.fs(`${px}px`);\n }\n /** Sets `lineHeight: value`. */\n lh(value: Properties[\"lineHeight\"]) {\n return this.add(\"lineHeight\", value);\n }\n /** Sets `lineHeight: px`. */\n lhPx(px: number) {\n return this.lh(`${px}px`);\n }\n\n // userSelect\n /** Sets `userSelect: \"none\"`. */\n get usn() {\n return this.add(\"userSelect\", \"none\");\n }\n /** Sets `userSelect: \"text\"`. */\n get ust() {\n return this.add(\"userSelect\", \"text\");\n }\n /** Sets `userSelect: \"all\"`. */\n get usAll() {\n return this.add(\"userSelect\", \"all\");\n }\n /** Sets `userSelect: \"auto\"`. */\n get usAuto() {\n return this.add(\"userSelect\", \"auto\");\n }\n /** Sets `userSelect: value`. */\n select(value: Properties[\"userSelect\"]) {\n return this.add(\"userSelect\", value);\n }\n\n // verticalAlign\n /** Sets `verticalAlign: \"baseline\"`. */\n get vaBaseline() {\n return this.add(\"verticalAlign\", \"baseline\");\n }\n /** Sets `verticalAlign: \"middle\"`. */\n get vam() {\n return this.add(\"verticalAlign\", \"middle\");\n }\n /** Sets `verticalAlign: \"top\"`. */\n get vat() {\n return this.add(\"verticalAlign\", \"top\");\n }\n /** Sets `verticalAlign: \"bottom\"`. */\n get vaBottom() {\n return this.add(\"verticalAlign\", \"bottom\");\n }\n /** Sets `verticalAlign: value`. */\n va(value: Properties[\"verticalAlign\"]) {\n return this.add(\"verticalAlign\", value);\n }\n\n // visibility\n /** Sets `visibility: \"visible\"`. */\n get vv() {\n return this.add(\"visibility\", \"visible\");\n }\n /** Sets `visibility: \"hidden\"`. */\n get vh() {\n return this.add(\"visibility\", \"hidden\");\n }\n /** Sets `visibility: value`. */\n visibility(value: Properties[\"visibility\"]) {\n return this.add(\"visibility\", value);\n }\n\n // whitespace\n /** Sets `whiteSpace: \"pre\"`. */\n get wsp() {\n return this.add(\"whiteSpace\", \"pre\");\n }\n /** Sets `whiteSpace: \"normal\"`. */\n get wsn() {\n return this.add(\"whiteSpace\", \"normal\");\n }\n /** Sets `whiteSpace: \"nowrap\"`. */\n get wsnw() {\n return this.add(\"whiteSpace\", \"nowrap\");\n }\n /** Sets `whiteSpace: \"break-spaces\"`. */\n get wsbs() {\n return this.add(\"whiteSpace\", \"break-spaces\");\n }\n /** Sets `whiteSpace: \"pre-wrap\"`. */\n get wspw() {\n return this.add(\"whiteSpace\", \"pre-wrap\");\n }\n /** Sets `whiteSpace: \"pre-line\"`. */\n get wspl() {\n return this.add(\"whiteSpace\", \"pre-line\");\n }\n /** Sets `whiteSpace: value`. */\n whiteSpace(value: Properties[\"whiteSpace\"]) {\n return this.add(\"whiteSpace\", value);\n }\n\n // width\n /** Sets `width: \"25%\"`. */\n get w25() {\n return this.add(\"width\", \"25%\");\n }\n /** Sets `width: \"50%\"`. */\n get w50() {\n return this.add(\"width\", \"50%\");\n }\n /** Sets `width: \"75%\"`. */\n get w75() {\n return this.add(\"width\", \"75%\");\n }\n /** Sets `width: \"100%\"`. */\n get w100() {\n return this.add(\"width\", \"100%\");\n }\n /** Sets `width: \"fit-content\"`. */\n get wfc() {\n return this.add(\"width\", \"fit-content\");\n }\n /** Sets `width: \"max-content\"`. */\n get wmaxc() {\n return this.add(\"width\", \"max-content\");\n }\n /** Sets `width: \"min-content\"`. */\n get wminc() {\n return this.add(\"width\", \"min-content\");\n }\n /** Sets `minWidth: 0`. */\n get mw0() {\n return this.add(\"minWidth\", 0);\n }\n /** Sets `minWidth: \"25%\"`. */\n get mw25() {\n return this.add(\"minWidth\", \"25%\");\n }\n /** Sets `minWidth: \"50%\"`. */\n get mw50() {\n return this.add(\"minWidth\", \"50%\");\n }\n /** Sets `minWidth: \"75%\"`. */\n get mw75() {\n return this.add(\"minWidth\", \"75%\");\n }\n /** Sets `minWidth: \"100%\"`. */\n get mw100() {\n return this.add(\"minWidth\", \"100%\");\n }\n /** Sets `minWidth: \"fit-content\"`. */\n get mwfc() {\n return this.add(\"minWidth\", \"fit-content\");\n }\n /** Sets `minWidth: \"min-content\"`. */\n get mwminc() {\n return this.add(\"minWidth\", \"min-content\");\n }\n /** Sets `minWidth: \"max-content\"`. */\n get mwmaxc() {\n return this.add(\"minWidth\", \"max-content\");\n }\n /** Sets `minWidth: value`. */\n mw(value: Properties[\"minWidth\"]) {\n return this.add(\"minWidth\", value);\n }\n /** Sets `minWidth: px`. */\n mwPx(px: number) {\n return this.mw(`${px}px`);\n }\n /** Sets `maxWidth: \"0\"`. */\n get maxw0() {\n return this.add(\"maxWidth\", \"0\");\n }\n /** Sets `maxWidth: \"25%\"`. */\n get maxw25() {\n return this.add(\"maxWidth\", \"25%\");\n }\n /** Sets `maxWidth: \"50%\"`. */\n get maxw50() {\n return this.add(\"maxWidth\", \"50%\");\n }\n /** Sets `maxWidth: \"75%\"`. */\n get maxw75() {\n return this.add(\"maxWidth\", \"75%\");\n }\n /** Sets `maxWidth: \"100%\"`. */\n get maxw100() {\n return this.add(\"maxWidth\", \"100%\");\n }\n /** Sets `maxWidth: \"fit-content\"`. */\n get maxwfc() {\n return this.add(\"maxWidth\", \"fit-content\");\n }\n /** Sets `maxWidth: \"min-content\"`. */\n get maxwminc() {\n return this.add(\"maxWidth\", \"min-content\");\n }\n /** Sets `maxWidth: \"max-content\"`. */\n get maxwmaxc() {\n return this.add(\"maxWidth\", \"max-content\");\n }\n /** Sets `maxWidth: value`. */\n maxw(value: Properties[\"maxWidth\"]) {\n return this.add(\"maxWidth\", value);\n }\n /** Sets `maxWidth: px`. */\n maxwPx(px: number) {\n return this.maxw(`${px}px`);\n }\n /** Sets `width: \"0px\"`. */\n get w0() {\n return this.add(\"width\", \"0px\");\n }\n /** Sets `width: \"8px\"`. */\n get w1() {\n return this.add(\"width\", \"8px\");\n }\n /** Sets `width: \"16px\"`. */\n get w2() {\n return this.add(\"width\", \"16px\");\n }\n /** Sets `width: \"24px\"`. */\n get w3() {\n return this.add(\"width\", \"24px\");\n }\n /** Sets `width: \"32px\"`. */\n get w4() {\n return this.add(\"width\", \"32px\");\n }\n /** Sets `width: \"40px\"`. */\n get w5() {\n return this.add(\"width\", \"40px\");\n }\n /** Sets `width: \"48px\"`. */\n get w6() {\n return this.add(\"width\", \"48px\");\n }\n /** Sets `width: \"56px\"`. */\n get w7() {\n return this.add(\"width\", \"56px\");\n }\n /** Sets `width: \"64px\"`. */\n get w8() {\n return this.add(\"width\", \"64px\");\n }\n /** Sets `width: \"auto\"`. */\n get wa() {\n return this.add(\"width\", \"auto\");\n }\n /** Sets `width: \"v\"`. */\n w(v: number | string) {\n return this.add(\"width\", maybeInc(v));\n }\n /** Sets `width: px`. */\n wPx(px: number) {\n return this.add(\"width\", `${px}px`);\n }\n\n // wordBreak\n /** Sets `wordBreak: \"normal\"`. */\n get wbn() {\n return this.add(\"wordBreak\", \"normal\");\n }\n /** Sets `wordBreak: \"break-all\"`. */\n get wbba() {\n return this.add(\"wordBreak\", \"break-all\");\n }\n /** Sets `wordBreak: \"keep-all\"`. */\n get wbka() {\n return this.add(\"wordBreak\", \"keep-all\");\n }\n /** Sets `wordBreak: \"break-word\"`. */\n get wbbw() {\n return this.add(\"wordBreak\", \"break-word\");\n }\n /** Sets `wordBreak: value`. */\n wordBreak(value: Properties[\"wordBreak\"]) {\n return this.add(\"wordBreak\", value);\n }\n\n // zIndex\n /** Sets `zIndex: 0`. */\n get z0() {\n return this.add(\"zIndex\", 0);\n }\n /** Sets `zIndex: 1`. */\n get z1() {\n return this.add(\"zIndex\", 1);\n }\n /** Sets `zIndex: 2`. */\n get z2() {\n return this.add(\"zIndex\", 2);\n }\n /** Sets `zIndex: 3`. */\n get z3() {\n return this.add(\"zIndex\", 3);\n }\n /** Sets `zIndex: 4`. */\n get z4() {\n return this.add(\"zIndex\", 4);\n }\n /** Sets `zIndex: 5`. */\n get z5() {\n return this.add(\"zIndex\", 5);\n }\n /** Sets `zIndex: 999`. */\n get z999() {\n return this.add(\"zIndex\", 999);\n }\n /** Sets `zIndex: 9999`. */\n get z9999() {\n return this.add(\"zIndex\", 9999);\n }\n /** Sets `zIndex: \"inherit\"`. */\n get zInherit() {\n return this.add(\"zIndex\", \"inherit\");\n }\n /** Sets `zIndex: \"initial\"`. */\n get zInitial() {\n return this.add(\"zIndex\", \"initial\");\n }\n /** Sets `zIndex: \"unset\"`. */\n get zUnset() {\n return this.add(\"zIndex\", \"unset\");\n }\n /** Sets `zIndex: value`. */\n z(value: Properties[\"zIndex\"]) {\n return this.add(\"zIndex\", value);\n }\n\n // fontFamily\n /** Sets `fontFamily: \"'Inter', sans-serif\"`. */\n get sansSerif() {\n return this.add(\"fontFamily\", \"'Inter', sans-serif\");\n }\n /** Sets `fontFamily: value`. */\n fontFamily(value: Properties[\"fontFamily\"]) {\n return this.add(\"fontFamily\", value);\n }\n\n // animation\n /** Sets `transition: \"background-color 200ms, border-color 200ms, box-shadow 200ms, left 200ms, right 200ms, margin 200ms\"`. */\n get transition() {\n return this.add(\n \"transition\",\n \"background-color 200ms, border-color 200ms, box-shadow 200ms, left 200ms, right 200ms, margin 200ms\",\n );\n }\n\n // buttonBase\n /** Sets `fontWeight: 500; fontSize: \"14px\"; lineHeight: \"20px\"; outline: 0; borderRadius: \"4px\"; display: \"inline-flex\"; alignItems: \"center\"; whiteSpace: \"nowrap\"; transition: \"background-color 200ms, border-color 200ms, box-shadow 200ms, left 200ms, right 200ms, margin 200ms\"`. */\n get buttonBase() {\n return this.add(\"fontWeight\", 500).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\").add(\"outline\", 0).add(\n \"borderRadius\",\n \"4px\",\n ).add(\"display\", \"inline-flex\").add(\"alignItems\", \"center\").add(\"whiteSpace\", \"nowrap\").add(\n \"transition\",\n \"background-color 200ms, border-color 200ms, box-shadow 200ms, left 200ms, right 200ms, margin 200ms\",\n );\n }\n\n // listReset\n /** Sets `padding: 0; margin: 0; listStyle: \"none\"`. */\n get listReset() {\n return this.add(\"padding\", 0).add(\"margin\", 0).add(\"listStyle\", \"none\");\n }\n\n // underlay\n /** Sets `position: \"fixed\"; top: 0; bottom: 0; left: 0; right: 0; display: \"flex\"; alignItems: \"center\"; justifyContent: \"center\"; backgroundColor: \"rgba(36,36,36,0.6)\"`. */\n get underlay() {\n return this.add(\"position\", \"fixed\").add(\"top\", 0).add(\"bottom\", 0).add(\"left\", 0).add(\"right\", 0).add(\n \"display\",\n \"flex\",\n ).add(\"alignItems\", \"center\").add(\"justifyContent\", \"center\").add(\"backgroundColor\", \"rgba(36,36,36,0.6)\");\n }\n\n // visuallyHidden\n /** Sets `position: \"absolute\"; overflow: \"hidden\"; clip: \"inset(50%)\"; clipPath: \"\"; border: 0; height: \"1px\"; margin: \"-1px\"; width: \"1px\"; padding: 0; whiteSpace: \"nowrap\"; opacity: 0`. */\n get visuallyHidden() {\n return this.add(\"position\", \"absolute\").add(\"overflow\", \"hidden\").add(\"clip\", \"inset(50%)\").add(\"clipPath\", \"\").add(\n \"border\",\n 0,\n ).add(\"height\", \"1px\").add(\"margin\", \"-1px\").add(\"width\", \"1px\").add(\"padding\", 0).add(\"whiteSpace\", \"nowrap\").add(\n \"opacity\",\n 0,\n );\n }\n\n // contentEmpty\n /** Sets `content: \"''\"`. */\n get contentEmpty() {\n return this.add(\"content\", \"''\");\n }\n\n // aliases\n\n get $(): T {\n return maybeImportant(sortObject(this.rules), this.opts.important);\n }\n\n if(bp: Breakpoint): CssBuilder<T>;\n if(cond: boolean): CssBuilder<T>;\n if(attr: string, value: boolean | string): CssBuilder<T>;\n if(arg: boolean | Breakpoint | string, value?: boolean | string): CssBuilder<T> {\n if (value !== undefined) {\n return this.newCss({ selector: `[${arg}='${value}']` });\n } else if (typeof arg === \"boolean\") {\n return this.newCss({ enabled: arg });\n } else {\n return this.newCss({ selector: Breakpoints[arg as Breakpoint] });\n }\n }\n\n get onHover() {\n return this.newCss({ selector: \":hover\" });\n }\n\n ifContainer(props: ContainerProps) {\n return this.newCss({ selector: Container(props) });\n }\n\n get ifPrint() {\n return this.newCss({ selector: \"@media print\" });\n }\n get ifSm() {\n return this.newCss({ selector: \"@media screen and (max-width:599px)\" });\n }\n get ifMd() {\n return this.newCss({ selector: \"@media screen and (min-width:600px) and (max-width:1024px)\" });\n }\n get ifSmOrMd() {\n return this.newCss({ selector: \"@media screen and (max-width:1024px)\" });\n }\n get ifMdAndUp() {\n return this.newCss({ selector: \"@media screen and (min-width:600px)\" });\n }\n get ifMdAndDown() {\n return this.newCss({ selector: \"@media screen and (max-width:1024px)\" });\n }\n get ifLg() {\n return this.newCss({ selector: \"@media screen and (min-width:1025px)\" });\n }\n get ifMdOrLg() {\n return this.newCss({ selector: \"@media screen and (min-width:600px)\" });\n }\n\n get else() {\n if (this.selector !== undefined) {\n if (this.selector.includes(\"not\")) {\n throw new Error(\"else was already called\");\n } else {\n return this.newCss({ selector: this.selector.replace(\"@media\", \"@media not\") });\n }\n }\n return this.newCss({ enabled: !this.enabled });\n }\n\n get important() {\n return this.newCss({ important: true });\n }\n\n /** Adds new properties, either a specific key/value or a Properties object, to the current css. */\n add<P extends Properties>(props: P): CssBuilder<T & P>;\n add<K extends keyof Properties>(prop: K, value: Properties[K]): CssBuilder<T & { [U in K]: Properties[K] }>;\n add<K extends keyof Properties>(propOrProperties: K | Properties, value?: Properties[K]): CssBuilder<any> {\n if (!this.enabled) {\n return this;\n }\n const newRules = typeof propOrProperties === \"string\" ? { [propOrProperties]: value } : propOrProperties;\n const rules = this.selector\n ? { ...this.rules, [this.selector]: { ...(this.rules as any)[this.selector], ...newRules } }\n : { ...this.rules, ...newRules };\n return this.newCss({ rules: rules as any });\n }\n\n /** Adds new properties, either a specific key/value or a Properties object, to a nested selector. */\n addIn<P extends Properties>(selector: string, props: P | undefined): CssBuilder<T & P>;\n addIn<K extends keyof Properties>(\n selector: string,\n prop: K,\n value: Properties[K],\n ): CssBuilder<T & { [U in K]: Properties[K] }>;\n addIn<K extends keyof Properties>(\n selector: string,\n propOrProperties: K | Properties,\n value?: Properties[K],\n ): CssBuilder<any> {\n const newRules = typeof propOrProperties === \"string\" ? { [propOrProperties]: value } : propOrProperties;\n if (!this.enabled) {\n return this;\n }\n if (newRules === undefined) {\n return this;\n }\n const rules = { ...this.rules, [selector]: { ...(this.rules as any)[selector], ...newRules } };\n return this.newCss({ rules: rules as any });\n }\n}\n\n/** Emotion treats the same rules, ordered differently as different classes, but naively they can be the same. */\nfunction sortObject<T extends object>(obj: T): T {\n return Object.keys(obj).sort().reduce((acc, key) => {\n acc[key as keyof T] = obj[key as keyof T];\n return acc;\n }, ({} as any) as T) as T;\n}\n\n/** Conditionally adds `important!` to everything. */\nfunction maybeImportant<T extends object>(obj: T, important: boolean): T {\n if (important) {\n Object.keys(obj).forEach((key) => {\n (obj as any)[key] = `${(obj as any)[key]} !important`;\n });\n }\n return obj;\n}\n\n/** Converts `inc` into pixels value with a `px` suffix. */\nexport function maybeInc(inc: number | string): string {\n return typeof inc === \"string\" ? inc : `${increment(inc)}px`;\n}\n\n/** Converts `inc` into pixels. */\nexport function increment(inc: number): number {\n return inc * 8;\n}\n\n/** Convert `pixels` to a `px` units string so it's not ambiguous. */\nexport function px(pixels: number): string {\n return `${pixels}px`;\n}\n\nexport enum Palette {\n White = \"rgba(255,255,255,1)\",\n Transparent = \"rgba(0,0,0,0)\",\n Gray50 = \"rgba(255, 253, 253, 1)\",\n Gray100 = \"rgba(247, 245, 245, 1)\",\n Gray200 = \"rgba(236, 235, 235, 1)\",\n Gray300 = \"rgba(221, 220, 220, 1)\",\n Gray400 = \"rgba(201, 201, 201, 1)\",\n Gray500 = \"rgba(175, 175, 175, 1)\",\n Gray600 = \"rgba(141, 141, 141, 1)\",\n Gray700 = \"rgba(100, 100, 100, 1)\",\n Gray800 = \"rgba(53, 53, 53, 1)\",\n Gray900 = \"rgba(36, 36, 36, 1)\",\n Blue50 = \"rgba(239, 246, 255, 1)\",\n Blue100 = \"rgba(219, 234, 254, 1)\",\n Blue200 = \"rgba(191, 219, 254, 1)\",\n Blue300 = \"rgba(147, 197, 253, 1)\",\n Blue400 = \"rgba(96, 165, 250, 1)\",\n Blue500 = \"rgba(59, 130, 246, 1)\",\n Blue600 = \"rgba(37, 99, 235, 1)\",\n Blue700 = \"rgba(29, 78, 216, 1)\",\n Blue800 = \"rgba(30, 64, 175, 1)\",\n Blue900 = \"rgba(30, 58, 138, 1)\",\n Red50 = \"rgba(254, 242, 242, 1)\",\n Red100 = \"rgba(254, 226, 226, 1)\",\n Red200 = \"rgba(254, 202, 202, 1)\",\n Red300 = \"rgba(252, 165, 165, 1)\",\n Red400 = \"rgba(248, 113, 113, 1)\",\n Red500 = \"rgba(239, 68, 68, 1)\",\n Red600 = \"rgba(220, 38, 38, 1)\",\n Red700 = \"rgba(185, 28, 28, 1)\",\n Red800 = \"rgba(153, 27, 27, 1)\",\n Red900 = \"rgba(127, 29, 29, 1)\",\n Yellow50 = \"rgba(254, 252, 232, 1)\",\n Yellow100 = \"rgba(254, 249, 195, 1)\",\n Yellow200 = \"rgba(254, 240, 138, 1)\",\n Yellow300 = \"rgba(253, 224, 71, 1)\",\n Yellow400 = \"rgba(250, 204, 21, 1)\",\n Yellow500 = \"rgba(234, 179, 8, 1)\",\n Yellow600 = \"rgba(202, 138, 4, 1)\",\n Yellow700 = \"rgba(161, 98, 7, 1)\",\n Yellow800 = \"rgba(133, 77, 14, 1)\",\n Yellow900 = \"rgba(113, 63, 18, 1)\",\n Green50 = \"rgba(236, 253, 245, 1)\",\n Green100 = \"rgba(209, 250, 229, 1)\",\n Green200 = \"rgba(167, 243, 208, 1)\",\n Green300 = \"rgba(110, 231, 183, 1)\",\n Green400 = \"rgba(52, 211, 153, 1)\",\n Green500 = \"rgba(16, 185, 129, 1)\",\n Green600 = \"rgba(5, 150, 105, 1)\",\n Green700 = \"rgba(4, 120, 87, 1)\",\n Green800 = \"rgba(6, 95, 70, 1)\",\n Green900 = \"rgba(6, 78, 59, 1)\",\n Purple50 = \"rgba(245, 243, 255, 1)\",\n Purple100 = \"rgba(237, 233, 254, 1)\",\n Purple200 = \"rgba(221, 214, 254, 1)\",\n Purple300 = \"rgba(196, 181, 253, 1)\",\n Purple400 = \"rgba(167, 139, 250, 1)\",\n Purple500 = \"rgba(139, 92, 246, 1)\",\n Purple600 = \"rgba(124, 58, 237, 1)\",\n Purple700 = \"rgba(109, 40, 217, 1)\",\n Purple800 = \"rgba(91, 33, 182, 1)\",\n Purple900 = \"rgba(76, 29, 149, 1)\",\n Orange50 = \"rgba(255, 247, 237, 1)\",\n Orange100 = \"rgba(255, 237, 213, 1)\",\n Orange200 = \"rgba(254, 215, 170, 1)\",\n Orange300 = \"rgba(253, 186, 116, 1)\",\n Orange400 = \"rgba(251, 146, 60, 1)\",\n Orange500 = \"rgba(249, 115, 22, 1)\",\n Orange600 = \"rgba(234, 88, 12, 1)\",\n Orange700 = \"rgba(194, 65, 12, 1)\",\n Orange800 = \"rgba(154, 52, 18, 1)\",\n Orange900 = \"rgba(124, 45, 18, 1)\",\n}\n\n/** A shortcut for defining Xss types. */\nexport type Xss<P extends keyof Properties> = Pick<Properties, P>;\n\n/** An entry point for Css expressions. CssBuilder is immutable so this is safe to share. */\nexport const Css = new CssBuilder({ rules: {}, enabled: true, important: false, selector: undefined });\n\nexport type Margin = \"margin\" | \"marginTop\" | \"marginRight\" | \"marginBottom\" | \"marginLeft\";\n\nexport type Padding = \"padding\" | \"paddingTop\" | \"paddingRight\" | \"paddingBottom\" | \"paddingLeft\";\n\nexport type Font = \"fontSize\" | \"fontWeight\" | \"lineHeight\";\n\nexport type Breakpoint = \"print\" | \"sm\" | \"md\" | \"smOrMd\" | \"mdAndUp\" | \"mdAndDown\" | \"lg\" | \"mdOrLg\";\nexport enum Breakpoints {\n print = \"@media print\",\n sm = \"@media screen and (max-width:599px)\",\n md = \"@media screen and (min-width:600px) and (max-width:1024px)\",\n smOrMd = \"@media screen and (max-width:1024px)\",\n mdAndUp = \"@media screen and (min-width:600px)\",\n mdAndDown = \"@media screen and (max-width:1024px)\",\n lg = \"@media screen and (min-width:1025px)\",\n mdOrLg = \"@media screen and (min-width:600px)\",\n}\n\n/**\n * Utility to help write `@container` queries\n *\n * @param name - The name of the container.\n * @param lt - The maximum width of the container inclusive.\n * @param gt - The minimum width of the container exclusive.\n */\ntype ContainerProps = { name?: string } & ({ lt: number } | { gt: number } | { lt: number; gt: number });\nexport function Container(props: ContainerProps) {\n const { name = \"\" } = props;\n const lt = \"lt\" in props ? props.lt : undefined;\n const gt = \"gt\" in props ? props.gt : undefined;\n\n const ltQuery = lt !== undefined ? `(max-width: ${lt}px)` : \"\";\n const gtQuery = gt !== undefined ? `(min-width: ${gt + 1}px)` : \"\";\n const query = [ltQuery, gtQuery].filter(Boolean).join(\" and \");\n\n return `@container ${name} ${query}`;\n}\n","import React, { PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nexport enum AutoSaveStatus {\n IDLE = \"idle\",\n SAVING = \"saving\",\n DONE = \"done\",\n ERROR = \"error\",\n}\n\nexport interface AutoSaveStatusContextType {\n status: AutoSaveStatus;\n /** Resets status to IDLE, particularly useful if \"Error\" or \"Done\" is stale */\n resetStatus: VoidFunction;\n errors: unknown[];\n /** Notifies AutoSaveContext that a request is in-flight */\n triggerAutoSave: VoidFunction;\n /** Notifies AutoSaveContext that a request has settled, optionally taking an error */\n resolveAutoSave: (error?: unknown) => void;\n}\n\nexport const AutoSaveStatusContext = React.createContext<AutoSaveStatusContextType>({\n status: AutoSaveStatus.IDLE,\n resetStatus() {},\n errors: [],\n triggerAutoSave() {},\n resolveAutoSave() {},\n});\n\ntype AutoSaveStatusProviderProps = PropsWithChildren<{\n /** After a successful save, reset Status back to `Idle` after this many milliseconds */\n resetToIdleTimeout?: number;\n}>;\n\nexport function AutoSaveStatusProvider({ children, resetToIdleTimeout = 6_000 }: AutoSaveStatusProviderProps) {\n const [status, setStatus] = useState(AutoSaveStatus.IDLE);\n const [errors, setErrors] = useState<unknown[]>([]);\n const [inFlight, setInFlight] = useState(0);\n const resetToIdleTimeoutRef = useRef<number | null>(null);\n\n /** Handles setting Status */\n useEffect(() => {\n if (inFlight > 0) return setStatus(AutoSaveStatus.SAVING);\n if (status === AutoSaveStatus.IDLE) return;\n if (errors.length) return setStatus(AutoSaveStatus.ERROR);\n return setStatus(AutoSaveStatus.DONE);\n }, [errors.length, inFlight, status]);\n\n const triggerAutoSave = useCallback(() => {\n setInFlight((c) => c + 1);\n setErrors([]);\n }, []);\n\n const resolveAutoSave = useCallback((error?: unknown) => {\n setInFlight((c) => Math.max(0, c - 1));\n if (error) setErrors((errs) => errs.concat(error));\n }, []);\n\n const resetStatus = useCallback(() => {\n setStatus(AutoSaveStatus.IDLE);\n setErrors([]);\n }, []);\n\n /** Resets AutoSaveStatus from \"Done\" to \"Idle\" after a timeout, if one is provided */\n useEffect(() => {\n if (resetToIdleTimeout === undefined) return;\n\n // Specifically avoid auto-reset if Errors are present\n if (status !== AutoSaveStatus.DONE) return;\n\n // Only run the latest Timeout\n if (resetToIdleTimeoutRef.current) clearTimeout(resetToIdleTimeoutRef.current);\n\n resetToIdleTimeoutRef.current = window.setTimeout(() => {\n resetStatus();\n resetToIdleTimeoutRef.current = null;\n }, resetToIdleTimeout);\n }, [resetStatus, resetToIdleTimeout, status]);\n\n const value = useMemo(\n () => ({ status, resetStatus, errors, triggerAutoSave, resolveAutoSave }),\n [errors, resetStatus, resolveAutoSave, status, triggerAutoSave],\n );\n\n return <AutoSaveStatusContext.Provider value={value}>{children}</AutoSaveStatusContext.Provider>;\n}\n","import { useContext } from \"react\";\nimport { AutoSaveStatusContext } from \"./AutoSaveStatusProvider\";\n\n/**\n * Provides access to the current auto-save status, i.e. idle/saving/done.\n *\n * Applications should generally instrument their network layer, i.e. GraphQL\n * mutations, to automatically update the auto-save status on any wire call,\n * and then just use this `useAutoSaveStatus` to \"show spinners\" in appropriate\n * places.\n *\n * See the `apolloHooks.ts` file in `internal-frontend` for an example.\n */\nexport function useAutoSaveStatus() {\n return useContext(AutoSaveStatusContext);\n}\n","import { DOMProps } from \"@react-types/shared\";\nimport React, { AriaAttributes, ReactNode } from \"react\";\nimport { maybeTooltip } from \"src/components/Tooltip\";\nimport { Css, increment, Margin, Palette, Xss } from \"src/Css\";\n\nexport interface IconProps extends AriaAttributes, DOMProps {\n /** The name of an icon */\n icon: IconKey;\n /** Defaults to currentColor */\n color?: Palette | \"inherit\" | \"currentColor\";\n bgColor?: Palette;\n /** The size of the icon in increments, i.e. 1 == 8px, default is 3 == 24px. */\n inc?: number;\n /** Styles overrides */\n xss?: Xss<Margin | \"visibility\" | \"flexShrink\">;\n tooltip?: ReactNode;\n}\n\nexport const Icon = React.memo((props: IconProps) => {\n const { icon, inc = 3, color = \"currentColor\", bgColor, xss, tooltip, ...other } = props;\n const size = increment(inc);\n return maybeTooltip({\n title: tooltip,\n placement: \"top\",\n children: (\n <svg\n aria-hidden={true}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n css={{\n // Spread these in b/c they don't type-check for some reason...\n ...({\n \"& > path\": Css.fill(color).$,\n \"& > rect\": Css.fill(color).$,\n } as any),\n ...(bgColor && Css.bgColor(bgColor).$),\n ...xss,\n }}\n data-icon={icon}\n {...other}\n >\n {Icons[icon]}\n </svg>\n ),\n });\n});\n\n/**\n * Map of icons paths mapped to their respective name.\n *\n * To add a new icon, follow these steps:\n * 1. Make sure the exported SVG has a viewbox of \"0 0 24 24\" as this component\n * is only compatible with 24x24 sized icons.\n * 2. Copy all elements between <svg>...</svg> (this is usually a <path> element)\n * 3. Remove all fill attributes as these will be controlled by the wrapping component\n */\nexport const Icons = {\n // Actions\n kanban: (\n <>\n <path d=\"M19.893 3.001H4C2.897 3.001 2 3.898 2 5.001V19.001C2 20.104 2.897 21.001 4 21.001H19.893C20.996 21.001 21.893 20.104 21.893 19.001V8V7V6V5.001V5C21.892 3.897 20.994 3.001 19.893 3.001ZM8 19.001H4V8H8V19.001ZM14 19.001H10V8H14V19.001ZM16 19.001V8H19.893L19.894 19.001H16Z\" />\n </>\n ),\n expand: <path d=\"M5 12H3V21H12V19H5V12ZM12 5H19V12H21V3H12V5Z\" />,\n collapse: (\n <path d=\"M16.121 6.465L14 4.344V10H19.656L17.535 7.879L20.707 4.707L19.293 3.293L16.121 6.465ZM4.70703 3.293L3.29303 4.707L6.46503 7.879L4.34403 10H10V4.344L7.87903 6.465L4.70703 3.293ZM19.656 14H14V19.656L16.121 17.535L19.293 20.707L20.707 19.293L17.535 16.121L19.656 14ZM6.46503 16.121L3.29303 19.293L4.70703 20.707L7.87903 17.535L10 19.656V14H4.34403L6.46503 16.121Z\" />\n ),\n drag: (\n <>\n <path d=\"M8 8C7.44772 8 7 7.55228 7 7L7 5C7 4.44772 7.44772 4 8 4L10 4C10.5523 4 11 4.44772 11 5L11 7C11 7.55228 10.5523 8 10 8L8 8Z\" />\n <path d=\"M8 14C7.44772 14 7 13.5523 7 13L7 11C7 10.4477 7.44772 10 8 10L10 10C10.5523 10 11 10.4477 11 11L11 13C11 13.5523 10.5523 14 10 14L8 14Z\" />\n <path d=\"M8 20C7.44772 20 7 19.5523 7 19L7 17C7 16.4477 7.44772 16 8 16L10 16C10.5523 16 11 16.4477 11 17L11 19C11 19.5523 10.5523 20 10 20L8 20Z\" />\n <path d=\"M14 8C13.4477 8 13 7.55228 13 7L13 5C13 4.44772 13.4477 4 14 4L16 4C16.5523 4 17 4.44772 17 5L17 7C17 7.55228 16.5523 8 16 8L14 8Z\" />\n <path d=\"M14 14C13.4477 14 13 13.5523 13 13L13 11C13 10.4477 13.4477 10 14 10L16 10C16.5523 10 17 10.4477 17 11L17 13C17 13.5523 16.5523 14 16 14L14 14Z\" />\n <path d=\"M14 20C13.4477 20 13 19.5523 13 19L13 17C13 16.4477 13.4477 16 14 16L16 16C16.5523 16 17 16.4477 17 17L17 19C17 19.5523 16.5523 20 16 20L14 20Z\" />\n </>\n ),\n move: <path d=\"M18 11H13V6H16L12 2L8 6H11V11H6V8L2 12L6 16V13H11V18H8L12 22L16 18H13V13H18V16L22 12L18 8V11Z\" />,\n x: (\n <path d=\"M16.192 6.34399L11.949 10.586L7.70697 6.34399L6.29297 7.75799L10.535 12L6.29297 16.242L7.70697 17.656L11.949 13.414L16.192 17.656L17.606 16.242L13.364 12L17.606 7.75799L16.192 6.34399Z\" />\n ),\n loader: (\n <path d=\"M12 22C17.421 22 22 17.421 22 12H20C20 16.337 16.337 20 12 20C7.663 20 4 16.337 4 12C4 7.664 7.663 4 12 4V2C6.579 2 2 6.58 2 12C2 17.421 6.579 22 12 22Z\" />\n ),\n link: (\n <>\n <path d=\"M8.46502 11.293C9.59802 10.16 11.574 10.16 12.707 11.293L13.414 12L14.828 10.586L14.121 9.879C13.178 8.935 11.922 8.414 10.586 8.414C9.25002 8.414 7.99402 8.935 7.05102 9.879L4.92902 12C2.98102 13.949 2.98102 17.122 4.92902 19.071C5.90402 20.046 7.18402 20.533 8.46402 20.533C9.74502 20.533 11.026 20.046 12 19.071L12.707 18.364L11.293 16.95L10.586 17.657C9.41602 18.824 7.51302 18.826 6.34302 17.657C5.17402 16.487 5.17402 14.584 6.34302 13.414L8.46502 11.293Z\" />\n <path d=\"M12 4.929L11.293 5.636L12.707 7.05L13.414 6.343C14.583 5.176 16.486 5.174 17.657 6.343C18.826 7.513 18.826 9.416 17.657 10.586L15.535 12.707C14.402 13.84 12.426 13.84 11.293 12.707L10.586 12L9.172 13.414L9.879 14.121C10.822 15.065 12.078 15.586 13.414 15.586C14.75 15.586 16.006 15.065 16.949 14.121L19.071 12C21.019 10.051 21.019 6.878 19.071 4.929C17.121 2.979 13.948 2.98 12 4.929Z\" />\n </>\n ),\n linkExternal: (\n <>\n <path d=\"M13 3L16.293 6.293L9.29297 13.293L10.707 14.707L17.707 7.707L21 11V3H13Z\" />\n <path d=\"M19 19H5V5H12L10 3H5C3.897 3 3 3.897 3 5V19C3 20.103 3.897 21 5 21H19C20.103 21 21 20.103 21 19V14L19 12V19Z\" />\n </>\n ),\n upload: (\n <>\n <path d=\"M11 15H13V9H16L12 4L8 9H11V15Z\" />\n <path d=\"M20 18H4V11H2V18C2 19.103 2.897 20 4 20H20C21.103 20 22 19.103 22 18V11H20V18Z\" />\n </>\n ),\n download: (\n <>\n <path d=\"M12 16L16 11H13V4H11V11H8L12 16Z\" />\n <path d=\"M20 18H4V11H2V18C2 19.103 2.897 20 4 20H20C21.103 20 22 19.103 22 18V11H20V18Z\" />\n </>\n ),\n checkboxChecked: (\n <>\n <path d=\"M7 5C5.897 5 5 5.897 5 7V17C5 18.103 5.897 19 7 19H17C18.103 19 19 18.103 19 17V7C19 5.897 18.103 5 17 5H7ZM7 17V7H17L17.002 17H7Z\" />\n <path d=\"M10.9958 12.5561L9.6998 11.2851L8.2998 12.7151L11.0038 15.3621L15.7028 10.7111L14.2968 9.28906L10.9958 12.5561Z\" />\n </>\n ),\n checkbox: (\n <path d=\"M7 5C5.897 5 5 5.897 5 7V17C5 18.103 5.897 19 7 19H17C18.103 19 19 18.103 19 17V7C19 5.897 18.103 5 17 5H7ZM7 17V7H17L17.002 17H7Z\" />\n ),\n check: (\n <path d=\"M9.99997 15.586L6.70697 12.293L5.29297 13.707L9.99997 18.414L19.707 8.70697L18.293 7.29297L9.99997 15.586Z\" />\n ),\n search: (\n <path d=\"M10 18C11.846 18 13.543 17.365 14.897 16.312L19.293 20.708L20.707 19.294L16.311 14.898C17.365 13.543 18 11.846 18 10C18 5.589 14.411 2 10 2C5.589 2 2 5.589 2 10C2 14.411 5.589 18 10 18ZM10 4C13.309 4 16 6.691 16 10C16 13.309 13.309 16 10 16C6.691 16 4 13.309 4 10C4 6.691 6.691 4 10 4Z\" />\n ),\n comment: (\n <path d=\"M12 2C6.486 2 2 5.589 2 10C2 12.908 3.898 15.516 7 16.934V22L12.34 17.995C17.697 17.852 22 14.32 22 10C22 5.589 17.514 2 12 2ZM12 16H11.667L9 18V15.583L8.359 15.336C5.67 14.301 4 12.256 4 10C4 6.691 7.589 4 12 4C16.411 4 20 6.691 20 10C20 13.309 16.411 16 12 16Z\" />\n ),\n commentFilled: (\n <path d=\"M10 0C4.486 0 0 3.589 0 8C0 10.908 1.898 13.516 5 14.934V20L10.34 15.995C15.697 15.852 20 12.32 20 8C20 3.589 15.514 0 10 0Z\" />\n ),\n plus: <path d=\"M19 11H13V5H11V11H5V13H11V19H13V13H19V11Z\" />,\n minus: <rect x=\"6\" y=\"11\" width=\"12\" height=\"2\" />,\n pencil: (\n <path d=\"M4.0031 21.0001C4.0841 21.0001 4.1651 20.9901 4.2451 20.9701L8.2451 19.9701C8.4211 19.9261 8.5821 19.8351 8.7101 19.7071L21.0031 7.41411C21.3811 7.03611 21.5891 6.53411 21.5891 6.00011C21.5891 5.46611 21.3811 4.96411 21.0031 4.58611L19.4171 3.00011C18.6611 2.24411 17.3451 2.24411 16.5891 3.00011L4.2961 15.2931C4.1681 15.4211 4.0771 15.5821 4.0331 15.7571L3.0331 19.7571C2.9471 20.0981 3.0481 20.4581 3.2961 20.7071C3.4851 20.8971 3.7411 21.0001 4.0031 21.0001ZM18.0031 4.41411L19.5891 6.00011L18.0031 7.58611L16.4171 6.00011L18.0031 4.41411ZM5.9061 16.5111L15.0031 7.41411L16.5891 9.00011L7.4911 18.0971L5.3771 18.6251L5.9061 16.5111Z\" />\n ),\n cloudUpload: (\n <>\n <path d=\"M13 19V15H16L12 10L8 15H11V19H13Z\" />\n <path d=\"M7 19H9V17H7C5.346 17 4 15.654 4 14C4 12.596 5.199 11.244 6.673 10.985L7.254 10.883L7.446 10.325C8.149 8.274 9.895 7 12 7C14.757 7 17 9.243 17 12V13H18C19.103 13 20 13.897 20 15C20 16.103 19.103 17 18 17H15V19H18C20.206 19 22 17.206 22 15C22 13.12 20.695 11.538 18.944 11.112C18.507 7.67 15.56 5 12 5C9.244 5 6.85 6.611 5.757 9.15C3.609 9.792 2 11.82 2 14C2 16.757 4.243 19 7 19Z\" />\n </>\n ),\n toggleOn: (\n <>\n <path d=\"M16 9C14.372 9 13 10.372 13 12C13 13.628 14.372 15 16 15C17.628 15 19 13.628 19 12C19 10.372 17.628 9 16 9Z\" />\n <path d=\"M16 6H8C4.704 6 2.018 8.682 2 11.986C2 11.991 2 11.995 2 12V12.016C2 12.02 2 12.024 2 12.028C2.015 15.322 4.703 18 8 18H16C19.309 18 22 15.309 22 12C22 8.691 19.309 6 16 6ZM16 16H8C5.798 16 4.004 14.208 4 12.01C4.004 9.799 5.798 8 8 8H16C18.206 8 20 9.794 20 12C20 14.206 18.206 16 16 16Z\" />\n </>\n ),\n trash: (\n <>\n <path d=\"M5.00293 20C5.00293 21.103 5.89993 22 7.00293 22H17.0029C18.1059 22 19.0029 21.103 19.0029 20V8H21.0029V6H18.0029H17.0029V4C17.0029 2.897 16.1059 2 15.0029 2H9.00293C7.89993 2 7.00293 2.897 7.00293 4V6H6.00293H3.00293V8H5.00293V20ZM9.00293 4H15.0029V6H9.00293V4ZM8.00293 8H16.0029H17.0029L17.0039 20H7.00293V8H8.00293Z\" />\n <path d=\"M9.00293 10H11.0029V18H9.00293V10ZM13.0029 10H15.0029V18H13.0029V10Z\" />\n </>\n ),\n refresh: (\n <path d=\"M10 11H7.101C7.101 10.997 7.101 10.994 7.102 10.991C7.167 10.672 7.265 10.357 7.393 10.054C7.519 9.75699 7.674 9.47099 7.854 9.20399C8.032 8.93999 8.238 8.69099 8.464 8.46399C8.691 8.23799 8.94 8.03199 9.206 7.85299C9.472 7.67299 9.757 7.51899 10.054 7.39299C10.356 7.26499 10.671 7.16699 10.992 7.10199C11.65 6.96699 12.349 6.96699 13.01 7.10199C13.328 7.16699 13.644 7.26499 13.947 7.39299C14.243 7.51799 14.528 7.67399 14.797 7.85399C15.063 8.03299 15.311 8.23799 15.535 8.46299L16.951 7.05099C16.637 6.73499 16.287 6.44699 15.915 6.19599C15.542 5.94399 15.142 5.72599 14.727 5.54999C14.302 5.36999 13.859 5.23299 13.412 5.14199C12.489 4.95299 11.513 4.95299 10.593 5.14199C10.144 5.23399 9.701 5.37099 9.277 5.55099C8.858 5.72699 8.458 5.94399 8.086 6.19599C7.716 6.44499 7.368 6.73299 7.05 7.04999C6.732 7.36699 6.445 7.71599 6.197 8.08499C5.945 8.45799 5.727 8.85799 5.551 9.27499C5.371 9.69899 5.234 10.142 5.143 10.59C5.115 10.725 5.1 10.863 5.08 11H2L6 15L10 11ZM14 13H16.899C16.898 13.003 16.899 13.006 16.898 13.008C16.832 13.332 16.734 13.647 16.606 13.946C16.483 14.239 16.328 14.525 16.147 14.794C15.968 15.058 15.762 15.308 15.534 15.536C15.309 15.761 15.061 15.966 14.795 16.146C14.527 16.326 14.242 16.481 13.946 16.607C13.643 16.735 13.328 16.833 13.008 16.898C12.351 17.033 11.651 17.033 10.991 16.898C10.672 16.833 10.357 16.735 10.054 16.607C9.757 16.481 9.471 16.326 9.204 16.146C8.94 15.968 8.691 15.762 8.464 15.536L7.05 16.95C7.367 17.267 7.716 17.555 8.085 17.804C8.458 18.056 8.858 18.274 9.275 18.45C9.699 18.63 10.142 18.767 10.59 18.858C11.051 18.952 11.525 19 12 19C12.475 19 12.949 18.952 13.408 18.858C13.857 18.767 14.301 18.629 14.725 18.449C15.14 18.273 15.54 18.056 15.913 17.804C16.285 17.553 16.635 17.264 16.948 16.95C17.265 16.633 17.553 16.284 17.803 15.913C18.057 15.536 18.275 15.136 18.448 14.726C18.626 14.306 18.763 13.863 18.856 13.41C18.883 13.275 18.899 13.137 18.919 13H22L18 8.99999L14 13Z\" />\n ),\n eyeball: (\n <>\n <path d=\"M12 9C10.358 9 9 10.359 9 12C9 13.642 10.358 15 12 15C13.641 15 15 13.642 15 12C15 10.359 13.641 9 12 9Z\" />\n <path d=\"M11.9998 5C4.3668 5 2.0728 11.617 2.0518 11.684L1.9458 12L2.0508 12.316C2.0728 12.383 4.3668 19 11.9998 19C19.6328 19 21.9268 12.383 21.9478 12.316L22.0538 12L21.9488 11.684C21.9268 11.617 19.6328 5 11.9998 5ZM11.9998 17C6.6488 17 4.5758 13.154 4.0738 12C4.5778 10.842 6.6518 7 11.9998 7C17.3508 7 19.4238 10.846 19.9258 12C19.4218 13.158 17.3478 17 11.9998 17Z\" />\n </>\n ),\n thumbsUp: (\n <path d=\"M20 8H14.388L15.511 4.633C15.713 4.025 15.611 3.351 15.236 2.831C14.861 2.311 14.253 2 13.612 2H12C11.703 2 11.422 2.132 11.231 2.36L6.531 8H4C2.897 8 2 8.897 2 10V19C2 20.103 2.897 21 4 21H7H17.307C18.136 21 18.888 20.479 19.18 19.702L21.937 12.351C21.979 12.239 22 12.12 22 12V10C22 8.897 21.103 8 20 8ZM4 10H6V19H4V10ZM20 11.819L17.307 19H8V9.362L12.468 4H13.614L12.052 8.683C11.949 8.988 12.001 9.323 12.189 9.584C12.377 9.846 12.679 10 13 10H20V11.819Z\" />\n ),\n verticalDots: (\n <path d=\"M12 10C10.9 10 10 10.9 10 12C10 13.1 10.9 14 12 14C13.1 14 14 13.1 14 12C14 10.9 13.1 10 12 10ZM12 4C10.9 4 10 4.9 10 6C10 7.1 10.9 8 12 8C13.1 8 14 7.1 14 6C14 4.9 13.1 4 12 4ZM12 16C10.9 16 10 16.9 10 18C10 19.1 10.9 20 12 20C13.1 20 14 19.1 14 18C14 16.9 13.1 16 12 16Z\" />\n ),\n star: (\n <path d=\"M10.9588 3.75641C11.2866 2.74787 12.7134 2.74786 13.0412 3.75641L14.7202 8.92341L18.1785 8.92354C18.1788 8.92354 18.1792 8.92354 18.1795 8.92354L20.1532 8.92361C21.2137 8.92365 21.6546 10.2806 20.7967 10.904L16.4014 14.0976L17.47 17.3866C17.4701 17.387 17.4702 17.3873 17.4703 17.3876L18.0801 19.2647C18.4078 20.2733 17.2534 21.112 16.3955 20.4887L12 17.2954L9.20214 19.328C9.20179 19.3283 9.20144 19.3285 9.20109 19.3288L7.60452 20.4887C6.74656 21.112 5.59223 20.2733 5.91989 19.2647L7.59858 14.0976L3.20334 10.904C2.34543 10.2807 2.78633 8.92365 3.8468 8.92361L5.82049 8.92354C5.82083 8.92354 5.82118 8.92354 5.82152 8.92354L9.27977 8.92341L10.9588 3.75641ZM6.60321 10.914L8.91787 12.5958C8.91818 12.596 8.91848 12.5962 8.91879 12.5965L9.29502 12.8698C9.67868 13.1486 9.83922 13.6427 9.69269 14.0937L9.54905 14.5359C9.54891 14.5363 9.54878 14.5367 9.54865 14.5371L8.6646 17.2583L11.3566 15.3026C11.7402 15.0239 12.2598 15.0239 12.6434 15.3026L13.0188 15.5753C13.0194 15.5757 13.02 15.5762 13.0206 15.5766L15.3354 17.2583L14.3073 14.0937C14.1608 13.6427 14.3213 13.1486 14.705 12.8698L17.3968 10.914L14.0694 10.9138C13.5952 10.9138 13.1749 10.6084 13.0283 10.1574L12 6.99297L11.1158 9.71405C11.1156 9.7144 11.1155 9.71474 11.1154 9.71508L10.9717 10.1574C10.8251 10.6084 10.4048 10.9138 9.93056 10.9138L6.60321 10.914Z\" />\n ),\n starFilled: (\n <>\n <path d=\"M11.0513 3.69095C11.3506 2.76968 12.654 2.76968 12.9534 3.69095L14.4722 8.36485C14.6061 8.77685 14.99 9.05579 15.4232 9.0558L20.3377 9.05599C21.3064 9.05603 21.7091 10.2956 20.9255 10.865L16.9497 13.7538C16.5992 14.0084 16.4526 14.4598 16.5864 14.8718L18.1049 19.5458C18.4042 20.4671 17.3498 21.2332 16.5661 20.6638L12.5901 17.7753C12.2396 17.5207 11.765 17.5207 11.4146 17.7753L7.43853 20.6638C6.65483 21.2332 5.6004 20.4671 5.89971 19.5458L7.4182 14.8718C7.55205 14.4598 7.4054 14.0084 7.05494 13.7538L3.07914 10.865C2.29548 10.2956 2.69823 9.05603 3.66692 9.05599L8.58142 9.0558C9.01461 9.05579 9.39854 8.77685 9.53242 8.36486L11.0513 3.69095Z\" />\n <path d=\"M11.0513 3.69095C11.3506 2.76968 12.654 2.76968 12.9534 3.69095L14.4722 8.36485C14.6061 8.77685 14.99 9.05579 15.4232 9.0558L20.3377 9.05599C21.3064 9.05603 21.7091 10.2956 20.9255 10.865L16.9497 13.7538C16.5992 14.0084 16.4526 14.4598 16.5864 14.8718L18.1049 19.5458C18.4042 20.4671 17.3498 21.2332 16.5661 20.6638L12.5901 17.7753C12.2396 17.5207 11.765 17.5207 11.4146 17.7753L7.43853 20.6638C6.65483 21.2332 5.6004 20.4671 5.89971 19.5458L7.4182 14.8718C7.55205 14.4598 7.4054 14.0084 7.05494 13.7538L3.07914 10.865C2.29548 10.2956 2.69823 9.05603 3.66692 9.05599L8.58142 9.0558C9.01461 9.05579 9.39854 8.77685 9.53242 8.36486L11.0513 3.69095Z\" />\n </>\n ),\n cloudSave: (\n <>\n <path d=\"M9 19H7C4.243 19 2 16.757 2 14C2 11.82 3.609 9.792 5.757 9.15C6.85 6.611 9.244 5 12 5C15.56 5 18.507 7.67 18.944 11.112C20.695 11.538 22 13.12 22 15C22 17.206 20.206 19 18 19H15H9ZM15 17H18C19.103 17 20 16.103 20 15C20 13.897 19.103 13 18 13H17V12C17 9.243 14.757 7 12 7C9.895 7 8.149 8.274 7.446 10.325L7.254 10.883L6.673 10.985C5.199 11.244 4 12.596 4 14C4 15.654 5.346 17 7 17H9H15Z\" />\n <rect x=\"9.67139\" y=\"14.6567\" width=\"6\" height=\"1.5\" transform=\"rotate(-45 9.67139 14.6567)\" />\n <rect x=\"9.31787\" y=\"12.1819\" width=\"3.5\" height=\"1.5\" transform=\"rotate(45 9.31787 12.1819)\" />\n </>\n ),\n attachment: (\n <path d=\"M5.70034 11.879L13.2477 4.15188C14.7481 2.61751 17.2048 2.61457 18.7439 4.15187C20.2147 5.69292 20.2456 8.1905 18.7439 9.72637L12.1677 16.4463C11.1677 17.4455 9.53953 17.4417 8.57861 16.4145L8.5763 16.4121C7.61217 15.4147 7.64468 13.8162 8.60983 12.8511L8.6113 12.8496L13.7859 7.56715C13.9307 7.42307 14.1608 7.40384 14.3248 7.56783L15.121 8.36403L15.1269 8.3691C15.2788 8.49929 15.2951 8.72507 15.1451 8.90458L9.9755 14.146C9.84287 14.2789 9.78341 14.4569 9.77747 14.6231C9.77157 14.7885 9.81776 14.9643 9.92515 15.0986L9.93923 15.1162L9.95684 15.1303C10.2011 15.3257 10.5715 15.346 10.8022 15.1153L17.3808 8.39291L17.3829 8.39073C18.1402 7.59359 18.1402 6.28461 17.3829 5.48747L17.3793 5.48379C16.6171 4.72167 15.3745 4.72167 14.6124 5.48379L14.6107 5.48549L7.06489 13.211L7.06402 13.2118C5.72803 14.5488 5.72839 16.7596 7.02689 18.0962C8.32851 19.4362 10.437 19.436 11.7387 18.0962L17.9191 11.7721C18.0556 11.6365 18.2859 11.6367 18.422 11.7728L19.2542 12.605L19.2601 12.6101C19.4197 12.7469 19.4187 12.9691 19.2846 13.1031L19.283 13.1048L13.1015 19.43C11.0256 21.5403 7.70624 21.5062 5.66445 19.4304C3.62176 17.3177 3.65669 13.9573 5.70034 11.879Z\" />\n ),\n archive: (\n <>\n <path\n fillRule=\"evenodd\"\n d=\"M19 10H5L5 18H19V10ZM3 8V18C3 19.1046 3.89543 20 5 20H19C20.1046 20 21 19.1046 21 18V8H3Z\"\n />\n <path\n fillRule=\"evenodd\"\n d=\"M3.81818 6V8H20.1818V6H3.81818ZM2.90909 4C2.40701 4 2 4.44772 2 5V9C2 9.55228 2.40701 10 2.90909 10H21.0909C21.593 10 22 9.55228 22 9V5C22 4.44772 21.593 4 21.0909 4H2.90909Z\"\n />\n <rect x=\"8\" y=\"11\" width=\"8\" height=\"2\" rx=\"1\" />\n </>\n ),\n unarchive: (\n <>\n <path d=\"M13 12V8H16L12 3L8 8H11V12H13Z\" />\n <path d=\"M17 10H19V18H5L5 10H7V8H3V18C3 19.1046 3.89543 20 5 20H19C20.1046 20 21 19.1046 21 18V8H17V10Z\" />\n <rect x=\"8\" y=\"15\" width=\"8\" height=\"2\" rx=\"1\" />\n </>\n ),\n duplicate: (\n <>\n <path d=\"M11 10H9V13H6V15H9V18H11V15H14V13H11V10Z\" />\n <path d=\"M4 22H16C17.103 22 18 21.103 18 20V8C18 6.897 17.103 6 16 6H4C2.897 6 2 6.897 2 8V20C2 21.103 2.897 22 4 22ZM4 8H16L16.002 20H4V8Z\" />\n <path d=\"M20 2H8V4H20V16H22V4C22 2.897 21.103 2 20 2Z\" />\n </>\n ),\n filter: (\n <path d=\"M7.625 4C7.14175 4 6.75 4.39797 6.75 4.88889V5.92952C5.73046 6.29559 5 7.28336 5 8.44444C5 9.60553 5.73046 10.5933 6.75 10.9594V19.1111C6.75 19.602 7.14175 20 7.625 20C8.10825 20 8.5 19.602 8.5 19.1111V10.9594C9.51954 10.5933 10.25 9.60553 10.25 8.44444C10.25 7.28336 9.51954 6.29559 8.5 5.92952V4.88889C8.5 4.39797 8.10825 4 7.625 4ZM8.5 8.44444C8.5 8.93537 8.10825 9.33333 7.625 9.33333C7.14175 9.33333 6.75 8.93537 6.75 8.44444C6.75 7.95353 7.14175 7.55556 7.625 7.55556C8.10825 7.55556 8.5 7.95353 8.5 8.44444ZM16.375 4C15.8917 4 15.5 4.39797 15.5 4.88889V12.1517C14.4805 12.5178 13.75 13.5056 13.75 14.6667C13.75 15.8277 14.4805 16.8156 15.5 17.1816V19.1111C15.5 19.602 15.8917 20 16.375 20C16.8583 20 17.25 19.602 17.25 19.1111V17.1816C18.2695 16.8156 19 15.8277 19 14.6667C19 13.5056 18.2695 12.5178 17.25 12.1517V4.88889C17.25 4.39797 16.8583 4 16.375 4ZM17.25 14.6667C17.25 15.1576 16.8583 15.5556 16.375 15.5556C15.8917 15.5556 15.5 15.1576 15.5 14.6667C15.5 14.1757 15.8917 13.7778 16.375 13.7778C16.8583 13.7778 17.25 14.1757 17.25 14.6667Z\" />\n ),\n // Alerts\n errorCircle: (\n <>\n <path d=\"M11.953 2C6.465 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.493 2 11.953 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.567 4 11.953 4C16.391 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n <path d=\"M11 7H13V14H11V7ZM11 15H13V17H11V15Z\" />\n </>\n ),\n checkCircle: (\n <>\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n <path d=\"M9.99909 13.587L7.70009 11.292L6.28809 12.708L10.0011 16.413L16.7071 9.70697L15.2931 8.29297L9.99909 13.587Z\" />\n </>\n ),\n infoCircle: (\n <>\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n <path d=\"M11 11H13V17H11V11ZM11 7H13V9H11V7Z\" />\n </>\n ),\n helpCircle: (\n <>\n <path d=\"M11.9999 6C9.83092 6 8.06592 7.765 8.06592 9.934H10.0659C10.0659 8.867 10.9339 8 11.9999 8C13.0659 8 13.9339 8.867 13.9339 9.934C13.9339 10.532 13.4529 10.966 12.7179 11.56C12.4629 11.767 12.2219 11.964 12.0269 12.159C11.0289 13.156 10.9999 14.215 10.9999 14.333V15H12.9999L12.9989 14.367C12.9999 14.351 13.0319 13.981 13.4399 13.574C13.5899 13.424 13.7789 13.274 13.9749 13.116C14.7539 12.485 15.9329 11.532 15.9329 9.934C15.9339 7.765 14.1689 6 11.9999 6ZM10.9999 16H12.9999V18H10.9999V16Z\" />\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n </>\n ),\n error: (\n <>\n <path d=\"M11.001 10H13.001V15H11.001V10ZM11 16H13V18H11V16Z\" />\n <path d=\"M13.7679 4.19994C13.4199 3.54494 12.7419 3.13794 11.9999 3.13794C11.2579 3.13794 10.5799 3.54494 10.2319 4.20094L2.89392 18.0639C2.56292 18.6899 2.58292 19.4249 2.94792 20.0319C3.31292 20.6379 3.95292 20.9999 4.66092 20.9999H19.3389C20.0469 20.9999 20.6879 20.6379 21.0529 20.0319C21.4169 19.4259 21.4379 18.6899 21.1069 18.0639L13.7679 4.19994ZM4.66092 18.9999L11.9999 5.13694L19.3439 18.9999H4.66092Z\" />\n </>\n ),\n xCircle: (\n <>\n <path d=\"M9.17181 16.2421L11.9998 13.4141L14.8278 16.2421L16.2418 14.8281L13.4138 12.0001L16.2418 9.17206L14.8278 7.75806L11.9998 10.5861L9.17181 7.75806L7.75781 9.17206L10.5858 12.0001L7.75781 14.8281L9.17181 16.2421Z\" />\n <path d=\"M12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22ZM12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4Z\" />\n </>\n ),\n flag: <path d=\"M19 4H6V2H4V20H3V22H4H6H7V20H6V15H19C19.553 15 20 14.552 20 14V5C20 4.448 19.553 4 19 4Z\" />,\n outlineFlag: (\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 2H4V20H3V22H7V20H6V15H19C19.5523 15 20 14.5523 20 14V5C20 4.44772 19.5523 4 19 4H6V2ZM6 6V13H18V6H6Z\"\n />\n ),\n add: (\n <>\n <path d=\"M13 7H11V11H7V13H11V17H13V13H17V11H13V7Z\" />\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n </>\n ),\n remove: (\n <>\n <path d=\"M7 11H17V13H7V11Z\" />\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n </>\n ),\n loaderCircle: (\n <>\n <path d=\"M12 22C13.1046 22 14 21.1046 14 20C14 18.8954 13.1046 18 12 18C10.8954 18 10 18.8954 10 20C10 21.1046 10.8954 22 12 22Z\" />\n <path d=\"M12 6C13.1046 6 14 5.10457 14 4C14 2.89543 13.1046 2 12 2C10.8954 2 10 2.89543 10 4C10 5.10457 10.8954 6 12 6Z\" />\n <path d=\"M6.34277 19.6572C7.44734 19.6572 8.34277 18.7618 8.34277 17.6572C8.34277 16.5527 7.44734 15.6572 6.34277 15.6572C5.2382 15.6572 4.34277 16.5527 4.34277 17.6572C4.34277 18.7618 5.2382 19.6572 6.34277 19.6572Z\" />\n <path d=\"M17.6572 8.34277C18.7618 8.34277 19.6572 7.44734 19.6572 6.34277C19.6572 5.2382 18.7618 4.34277 17.6572 4.34277C16.5527 4.34277 15.6572 5.2382 15.6572 6.34277C15.6572 7.44734 16.5527 8.34277 17.6572 8.34277Z\" />\n <path d=\"M4.00002 14.001C5.10514 14.001 6.00102 13.1051 6.00102 12C6.00102 10.8949 5.10514 9.99902 4.00002 9.99902C2.8949 9.99902 1.99902 10.8949 1.99902 12C1.99902 13.1051 2.8949 14.001 4.00002 14.001Z\" />\n <path d=\"M20 14C21.1046 14 22 13.1046 22 12C22 10.8954 21.1046 10 20 10C18.8954 10 18 10.8954 18 12C18 13.1046 18.8954 14 20 14Z\" />\n <path d=\"M6.34277 8.34424C7.44734 8.34424 8.34277 7.44881 8.34277 6.34424C8.34277 5.23967 7.44734 4.34424 6.34277 4.34424C5.2382 4.34424 4.34277 5.23967 4.34277 6.34424C4.34277 7.44881 5.2382 8.34424 6.34277 8.34424Z\" />\n <path d=\"M17.6572 19.6582C18.7618 19.6582 19.6572 18.7628 19.6572 17.6582C19.6572 16.5536 18.7618 15.6582 17.6572 15.6582C16.5527 15.6582 15.6572 16.5536 15.6572 17.6582C15.6572 18.7628 16.5527 19.6582 17.6572 19.6582Z\" />\n </>\n ),\n circleOutline: (\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2.001 17.515 6.487 22.001 12 22.001C17.514 22.001 22 17.515 22.001 12C22.001 6.486 17.515 2 12 2ZM12 20.001C7.59 20.001 4.001 16.412 4 12C4 7.589 7.589 4 12 4C16.412 4 20.001 7.589 20.001 12C20 16.412 16.411 20.001 12 20.001Z\" />\n ),\n // Arrows\n chevronsDown: (\n <>\n <path d=\"M12 15.586L7.70697 11.293L6.29297 12.707L12 18.414L17.707 12.707L16.293 11.293L12 15.586Z\" />\n <path d=\"M17.707 7.70697L16.293 6.29297L12 10.586L7.70697 6.29297L6.29297 7.70697L12 13.414L17.707 7.70697Z\" />\n </>\n ),\n chevronsRight: (\n <>\n <path d=\"M10.2959 7.71004L14.6209 12L10.2959 16.29L11.7039 17.71L17.4609 12L11.7039 6.29004L10.2959 7.71004Z\" />\n <path d=\"M6.7039 6.29004L5.2959 7.71004L9.6209 12L5.2959 16.29L6.7039 17.71L12.4609 12L6.7039 6.29004Z\" />\n </>\n ),\n sortUp: (\n <path d=\"M11 9H20V11H11V9ZM11 13H18V15H11V13ZM11 5H22V7H11V5ZM11 17H16V19H11V17ZM5 20H7V8H10L6 4L2 8H5V20Z\" />\n ),\n sortDown: (\n <path d=\"M6 20L10 16H7V4H5V16H2L6 20ZM11 8H20V10H11V8ZM11 12H18V14H11V12ZM11 4H22V6H11V4ZM11 16H16V18H11V16Z\" />\n ),\n chevronDown: (\n <path d=\"M16.293 9.29297L12 13.586L7.70697 9.29297L6.29297 10.707L12 16.414L17.707 10.707L16.293 9.29297Z\" />\n ),\n chevronUp: (\n <path d=\"M6.29297 13.2929L7.70697 14.7069L12 10.4139L16.293 14.7069L17.707 13.2929L12 7.58594L6.29297 13.2929Z\" />\n ),\n chevronLeft: (\n <path d=\"M13.2929 6.29297L7.58594 12L13.2929 17.707L14.7069 16.293L10.4139 12L14.7069 7.70697L13.2929 6.29297Z\" />\n ),\n chevronRight: (\n <path d=\"M10.707 17.707L16.414 12L10.707 6.29297L9.29297 7.70697L13.586 12L9.29297 16.293L10.707 17.707Z\" />\n ),\n arrowBack: (\n <path d=\"M20.9999 11H6.41394L11.7069 5.70697L10.2929 4.29297L2.58594 12L10.2929 19.707L11.7069 18.293L6.41394 13H20.9999V11Z\" />\n ),\n arrowLeft: (\n <path d=\"M20.9999 11H6.41394L11.7069 5.70697L10.2929 4.29297L2.58594 12L10.2929 19.707L11.7069 18.293L6.41394 13H20.9999V11Z\" />\n ),\n arrowUp: (\n <path d=\"M12.793 21.207L12.793 6.62097L18.086 11.914L19.5 10.5L11.793 2.79297L4.086 10.5L5.5 11.914L10.793 6.62097L10.793 21.207L12.793 21.207Z\" />\n ),\n arrowDown: (\n <path d=\"M10.7929 2.79303L10.7929 17.379L5.49994 12.086L4.08594 13.5L11.7929 21.207L19.4999 13.5L18.0859 12.086L12.7929 17.379L12.7929 2.79303L10.7929 2.79303Z\" />\n ),\n arrowRight: (\n <path d=\"M2.586 13L17.172 13L11.879 18.293L13.293 19.707L21 12L13.293 4.29303L11.879 5.70703L17.172 11L2.586 11L2.586 13Z\" />\n ),\n triangleLeft: <path d=\"M15 18L9 12L15 6L15 18Z\" />,\n triangleRight: <path d=\"M9 6L15 12L9 18L9 6Z\" />,\n triangleUp: <path d=\"M6 15L12 9L18 15L6 15Z\" />,\n triangleDown: <path d=\"M18 9L12 15L6 9H18Z\" />,\n menuClose: (\n <>\n <path d=\"M8 6H24V8H8V6ZM8 11H24V13H8V11ZM8 16H24V18H8V16Z\" />\n <path d=\"M5 8.94L1.94667 12L5 15.06L4.06 16L0.0599999 12L4.06 8L5 8.94Z\" />\n </>\n ),\n menuOpen: (\n <>\n <path d=\"M8 6H24V8H8V6ZM8 11H24V13H8V11ZM8 16H24V18H8V16Z\" />\n <path d=\"M0.0600583 15.06L3.11339 12L0.0600586 8.94L1.00006 8L5.00006 12L1.00006 16L0.0600583 15.06Z\" />\n </>\n ),\n arrowFromLeft: (\n <path d=\"M4 6H6V18H4V6ZM8 13H16.586L12.293 17.293L13.707 18.707L20.414 12L13.707 5.293L12.293 6.707L16.586 11H8V13Z\" />\n ),\n arrowFromBottom: (\n <path d=\"M6 18H18V20H6V18ZM12 3.586L5.293 10.293L6.707 11.707L11 7.414V16H13V7.414L17.293 11.707L18.707 10.293L12 3.586Z\" />\n ),\n arrowFromRight: (\n <path d=\"M18 6H20V18H18V6ZM16 11H7.414L11.707 6.707L10.293 5.293L3.586 12L10.293 18.707L11.707 17.293L7.414 13H16V11Z\" />\n ),\n arrowFromTop: (\n <path d=\"M6 4H18V6H6V4ZM12 20.414L18.707 13.707L17.293 12.293L13 16.586V8H11V16.586L6.707 12.293L5.293 13.707L12 20.414Z\" />\n ),\n subDirectoryRight: <path d=\"M14 13H8V5H6V14C6 14.553 6.447 15 7 15H14V18L19 14L14 10V13Z\" />,\n // Media\n camera: (\n <>\n <path d=\"M12 8C9.832 8 8 9.832 8 12C8 14.168 9.832 16 12 16C14.168 16 16 14.168 16 12C16 9.832 14.168 8 12 8ZM12 14C10.935 14 10 13.065 10 12C10 10.935 10.935 10 12 10C13.065 10 14 10.935 14 12C14 13.065 13.065 14 12 14Z\" />\n <path d=\"M20 5H17.414L14.707 2.293C14.52 2.105 14.266 2 14 2H10C9.734 2 9.48 2.105 9.293 2.293L6.586 5H4C2.897 5 2 5.897 2 7V18C2 19.103 2.897 20 4 20H20C21.103 20 22 19.103 22 18V7C22 5.897 21.103 5 20 5ZM4 18V7H7C7.266 7 7.52 6.895 7.707 6.707L10.414 4H13.586L16.293 6.707C16.48 6.895 16.734 7 17 7H20L20.002 18H4Z\" />\n </>\n ),\n email: (\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.7885 7.82129L11.9381 14.1015L4.13462 7.41281V18.0529H19.7885V7.82129ZM5.92342 6.13462L11.9851 11.3303L18.4797 6.13462H5.92342ZM2 20.1875V4H21.9231V6.02293L21.9673 6.07821L21.9231 6.11359V20.1875H2Z\"\n />\n ),\n fileBlank: (\n <path d=\"M19.937 8.68C19.926 8.648 19.917 8.617 19.904 8.586C19.855 8.48 19.794 8.379 19.708 8.293L13.708 2.293C13.622 2.207 13.521 2.146 13.415 2.097C13.385 2.083 13.353 2.075 13.321 2.064C13.237 2.036 13.151 2.018 13.062 2.013C13.04 2.011 13.021 2 13 2H6C4.897 2 4 2.897 4 4V20C4 21.103 4.897 22 6 22H18C19.103 22 20 21.103 20 20V9C20 8.979 19.989 8.96 19.987 8.938C19.982 8.85 19.965 8.764 19.937 8.68ZM16.586 8H14V5.414L16.586 8ZM6 20V4H12V9C12 9.553 12.447 10 13 10H18L18.002 20H6Z\" />\n ),\n folder: (\n <path d=\"M20 5H11.414L9.707 3.293C9.52 3.105 9.265 3 9 3H4C2.897 3 2 3.897 2 5V19C2 20.103 2.897 21 4 21H20C21.103 21 22 20.103 22 19V7C22 5.897 21.103 5 20 5ZM4 19V7H11H12H20L20.002 19H4Z\" />\n ),\n image: (\n <>\n <path d=\"M7.49902 11C8.32745 11 8.99902 10.3284 8.99902 9.5C8.99902 8.67157 8.32745 8 7.49902 8C6.6706 8 5.99902 8.67157 5.99902 9.5C5.99902 10.3284 6.6706 11 7.49902 11Z\" />\n <path d=\"M10.499 14L8.99902 12L5.99902 16H8.99902H11.999H17.999L13.499 10L10.499 14Z\" />\n <path d=\"M19.999 4H3.99902C2.89602 4 1.99902 4.897 1.99902 6V18C1.99902 19.103 2.89602 20 3.99902 20H19.999C21.102 20 21.999 19.103 21.999 18V6C21.999 4.897 21.102 4 19.999 4ZM3.99902 18V6H19.999L20.001 18H3.99902Z\" />\n </>\n ),\n file: (\n <>\n <path d=\"M19.903 8.586C19.854 8.48 19.793 8.379 19.707 8.293L13.707 2.293C13.621 2.207 13.52 2.146 13.414 2.097C13.384 2.083 13.352 2.075 13.32 2.064C13.236 2.036 13.15 2.018 13.061 2.013C13.04 2.011 13.021 2 13 2H6C4.897 2 4 2.897 4 4V20C4 21.103 4.897 22 6 22H18C19.103 22 20 21.103 20 20V9C20 8.979 19.989 8.96 19.987 8.938C19.982 8.849 19.965 8.763 19.936 8.679C19.926 8.647 19.917 8.616 19.903 8.586ZM16.586 8H14V5.414L16.586 8ZM6 20V4H12V9C12 9.553 12.447 10 13 10H18L18.002 20H6Z\" />\n <path d=\"M8 12H16V14H8V12ZM8 16H16V18H8V16ZM8 8H10V10H8V8Z\" />\n </>\n ),\n images: (\n <>\n <path d=\"M20 2H8C6.897 2 6 2.897 6 4V16C6 17.103 6.897 18 8 18H20C21.103 18 22 17.103 22 16V4C22 2.897 21.103 2 20 2ZM8 16V4H20L20.002 16H8Z\" />\n <path d=\"M4 8H2V20C2 21.103 2.897 22 4 22H16V20H4V8Z\" />\n <path d=\"M12 12L11 11L9 14H19L15 8L12 12Z\" />\n </>\n ),\n openBook: (\n <path d=\"M21 3H14C13.229 3 12.532 3.301 12 3.78C11.468 3.301 10.771 3 10 3H3C2.447 3 2 3.448 2 4V19C2 19.553 2.447 20 3 20H8.758C9.284 20 9.8 20.214 10.172 20.586L11.293 21.707C11.302 21.716 11.314 21.719 11.323 21.728C11.409 21.807 11.505 21.877 11.617 21.924C11.618 21.924 11.618 21.924 11.619 21.924C11.74 21.974 11.869 22 12 22C12.131 22 12.26 21.974 12.381 21.924C12.382 21.924 12.382 21.924 12.383 21.924C12.495 21.877 12.591 21.807 12.677 21.728C12.686 21.719 12.698 21.716 12.707 21.707L13.828 20.586C14.2 20.214 14.716 20 15.242 20H21C21.553 20 22 19.553 22 19V4C22 3.448 21.553 3 21 3ZM8.758 18H4V5H10C10.552 5 11 5.449 11 6V18.689C10.342 18.246 9.557 18 8.758 18ZM20 18H15.242C14.443 18 13.658 18.246 13 18.689V6C13 5.449 13.448 5 14 5H20V18Z\" />\n ),\n // Misc\n inbox: (\n <path d=\"M20 3H4C2.897 3 2 3.897 2 5V13V14V19C2 20.104 2.896 21 4 21H20C21.104 21 22 20.104 22 19V14V13V5C22 3.897 21.103 3 20 3ZM19 12H16H15.858C15.412 13.722 13.861 15 12 15C10.139 15 8.588 13.722 8.142 12H8H4V5H20V12H19Z\" />\n ),\n criticalPath: (\n <path d=\"M6.5 20H14.844C15.2 20.753 15.636 21.422 16.093 22H6.5C4.019 22 2 19.981 2 17.5C2 15.019 4.019 13 6.5 13H13.5C14.327 13 15 12.327 15 11.5C15 10.673 14.327 10 13.5 10H7.285C7.771 9.443 8.248 8.771 8.639 8H13.5C15.43 8 17 9.57 17 11.5C17 13.43 15.43 15 13.5 15H6.5C5.121 15 4 16.121 4 17.5C4 18.879 5.121 20 6.5 20ZM2 5C2 3.346 3.346 2 5 2C6.654 2 8 3.346 8 5C8 8.187 5 10 5 10C5 10 2 8.188 2 5ZM3.5 5C3.5 5.828 4.172 6.5 5 6.5C5.828 6.5 6.5 5.828 6.5 5C6.5 4.172 5.828 3.5 5 3.5C4.172 3.5 3.5 4.172 3.5 5ZM16 17C16 15.346 17.346 14 19 14C20.654 14 22 15.346 22 17C22 20.187 19 22 19 22C19 22 16 20.188 16 17ZM17.5 17C17.5 17.828 18.172 18.5 19 18.5C19.828 18.5 20.5 17.828 20.5 17C20.5 16.172 19.828 15.5 19 15.5C18.172 15.5 17.5 16.172 17.5 17Z\" />\n ),\n nested: <path d=\"M7 6.99994V16.3333L16.3333 16.3333V14.3333H9L9 6.99994H7Z\" />,\n estimate: (\n <path d=\"M11.4409 2.01586C5.9355 2.32427 1.70744 7.05416 2.01585 12.5595C2.03847 12.9633 2.08488 13.3602 2.15363 13.749L0 14.6172L4.55475 16.5548L6.49234 12L4.06026 12.9804C4.03868 12.8046 4.02277 12.627 4.01272 12.4477C3.766 8.04357 7.14864 4.25944 11.5527 4.01273C13.5759 3.89938 15.4683 4.55199 16.947 5.71769L17.9477 3.96644C16.1361 2.62291 13.8636 1.88014 11.4409 2.01586ZM12 11C10 11 10 10.374 10 9.99996C10 9.51596 10.701 8.99996 12 8.99996C13.185 8.99996 13.386 9.63796 13.4 10.018L14.4 9.99996H15.4C15.4 8.97396 14.734 7.53096 13 7.12096V6.01196H11V7.08496C9.029 7.41596 8 8.71196 8 9.99996C8 11.12 8.52 13 12 13C14 13 14 13.676 14 14C14 14.415 13.38 15 12 15C10.159 15 10.011 14.143 10 14H8C8 14.918 8.661 16.553 11 16.92V18H13V16.915C14.971 16.584 16 15.288 16 14C16 12.88 15.48 11 12 11ZM21.9318 10.9952C22.2403 16.5005 18.0122 21.2304 12.5068 21.5388C10.0841 21.6746 7.81163 20.9318 5.99999 19.5882L7.00071 17.837C8.47939 19.0027 10.3718 19.6553 12.395 19.542C16.7991 19.2952 20.1817 15.5111 19.935 11.107C19.9249 10.9277 19.909 10.75 19.8874 10.5743L17.4554 11.5547L19.3929 6.99994L23.9477 8.93752L21.7941 9.80568C21.8628 10.1944 21.9092 10.5914 21.9318 10.9952Z\" />\n ),\n commentItem: (\n <>\n <path d=\"M5.33333 7.18518C5.33333 6.57153 5.75973 6.07407 6.28571 6.07407H17.7143C18.2403 6.07407 18.6667 6.57153 18.6667 7.18518C18.6667 7.79883 18.2403 8.29629 17.7143 8.29629H6.28571C5.75973 8.29629 5.33333 7.79883 5.33333 7.18518Z\" />\n <path d=\"M5.33333 10.8889C5.33333 10.2752 5.75973 9.77777 6.28571 9.77777H17.7143C18.2403 9.77777 18.6667 10.2752 18.6667 10.8889C18.6667 11.5025 18.2403 12 17.7143 12H6.28571C5.75973 12 5.33333 11.5025 5.33333 10.8889Z\" />\n <path d=\"M3.11111 2C2.81643 2 2.53381 2.11706 2.32544 2.32544C2.11706 2.53381 2 2.81643 2 3.11111V15.7037C2 16.3173 2.49746 16.8148 3.11111 16.8148H11.5825L17.1942 21.7251C17.5223 22.0122 17.988 22.0808 18.385 21.9007C18.7821 21.7205 19.037 21.3248 19.037 20.8889V16.8148H20.8889C21.5025 16.8148 22 16.3173 22 15.7037V3.11111C22 2.49746 21.5025 2 20.8889 2H3.11111ZM4.22222 14.5926V4.22222H19.7778V14.5926H17.9259C17.3123 14.5926 16.8148 15.09 16.8148 15.7037V18.4402L12.7317 14.8675C12.5291 14.6903 12.2691 14.5926 12 14.5926H4.22222Z\" />\n </>\n ),\n todo: (\n <path d=\"M4.696 7.267L3.4 5.996L2 7.426L4.704 10.073L9.403 5.422L7.997 4L4.696 7.267ZM6 12H4V14H6V12ZM6 17H4V19H6V17ZM8 12H20V14H8V12ZM20 17H8V19H20V17ZM20 7H10V9H20V7Z\" />\n ),\n projectItem: (\n <path d=\"M14.1818 4C14.1818 3.44772 14.6295 3 15.1818 3H19C19.5523 3 20 3.44772 20 4V7.64286C20 8.19514 19.5523 8.64286 19 8.64286H15.1818C14.6295 8.64286 14.1818 8.19514 14.1818 7.64286V6.82143H6V11.5H12.2727V10.6786C12.2727 10.1263 12.7204 9.67857 13.2727 9.67857H17.0909C17.6432 9.67857 18.0909 10.1263 18.0909 10.6786V14.3214C18.0909 14.8737 17.6432 15.3214 17.0909 15.3214H13.2727C12.7204 15.3214 12.2727 14.8737 12.2727 14.3214V13.5H6V18.1786H10.3636V17.3571C10.3636 16.8049 10.8114 16.3571 11.3636 16.3571H15.1818C15.7341 16.3571 16.1818 16.8049 16.1818 17.3571V21C16.1818 21.5523 15.7341 22 15.1818 22H11.3636C10.8114 22 10.3636 21.5523 10.3636 21V20.1786H5C4.44772 20.1786 4 19.7309 4 19.1786V5.82143C4 5.26914 4.44772 4.82143 5 4.82143H14.1818V4ZM16.1818 6.64286V5H18V6.64286H16.1818ZM12.3636 20H14.1818V18.3571H12.3636V20ZM14.2727 13.3214H16.0909V11.6786H14.2727V13.3214Z\" />\n ),\n bill: (\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 11V19.5V21C20 21.3688 19.797 21.7077 19.4719 21.8817C19.1467 22.0557 18.7522 22.0366 18.4453 21.8321L17.25 21.0352L16.0547 21.8321C15.7188 22.056 15.2812 22.056 14.9453 21.8321L13.75 21.0352L12.5547 21.8321C12.2188 22.056 11.7812 22.056 11.4453 21.8321L10.25 21.0352L9.0547 21.8321C8.7188 22.056 8.2812 22.056 7.9453 21.8321L6.75 21.0352L5.5547 21.8321C5.24784 22.0366 4.8533 22.0557 4.52814 21.8817C4.20298 21.7077 4 21.3688 4 21V19.5V11V5C4 3.897 4.897 3 6 3H18C19.103 3 20 3.897 20 5L20 11ZM18 11V19.1315L17.8047 19.0013C17.4688 18.7773 17.0312 18.7773 16.6953 19.0013L15.5 19.7981L14.3047 19.0013C13.9688 18.7773 13.5312 18.7773 13.1953 19.0013L12 19.7981L10.8047 19.0013C10.4688 18.7773 10.0312 18.7773 9.6953 19.0013L8.5 19.7981L7.3047 19.0013C6.9688 18.7773 6.5312 18.7773 6.1953 19.0013L6 19.1315V11H5.99873L5.998 5L18 5L18 11ZM12 11.1608C10.5 11.1608 10.5 10.6386 10.5 10.3267C10.5 9.92292 11.0258 9.49249 12 9.49249C12.8888 9.49249 13.0395 10.0247 13.05 10.3417L13.8 10.3267H14.55C14.55 9.4708 14.0505 8.2671 12.75 7.92509V7H11.25V7.89506C9.77175 8.17117 9 9.25225 9 10.3267C9 11.2609 9.39 12.8292 12 12.8292C13.5 12.8292 13.5 13.3931 13.5 13.6633C13.5 14.0095 13.035 14.4975 12 14.4975C10.6193 14.4975 10.5083 13.7826 10.5 13.6633H9C9 14.4291 9.49575 15.793 11.25 16.0991V17H12.75V16.0949C14.2283 15.8188 15 14.7377 15 13.6633C15 12.7291 14.61 11.1608 12 11.1608Z\"\n />\n ),\n commitment: (\n <path d=\"M20.937 8.68L20.9276 8.65196L20.9276 8.65186C20.9203 8.62967 20.9132 8.60784 20.904 8.586C20.855 8.48 20.794 8.379 20.708 8.293L14.708 2.293C14.622 2.207 14.521 2.146 14.415 2.097C14.3943 2.08736 14.3727 2.08057 14.3509 2.07368L14.3508 2.07367C14.3409 2.07056 14.331 2.06742 14.321 2.064C14.237 2.036 14.151 2.018 14.062 2.013C14.0519 2.01208 14.0424 2.00925 14.033 2.00647L14.033 2.00647C14.0221 2.0032 14.0113 2 14 2H7C5.897 2 5 2.897 5 4V8H7V4H13V9C13 9.553 13.447 10 14 10H19L19.002 20H7V18H5V20C5 21.103 5.897 22 7 22H19C20.103 22 21 21.103 21 20V9C21 8.98867 20.9968 8.97792 20.9935 8.96697L20.9935 8.96694C20.9907 8.95761 20.9879 8.94812 20.987 8.938C20.982 8.85 20.965 8.764 20.937 8.68ZM17.586 8H15V5.414L17.586 8ZM11 10V12H3V10H11ZM9 14V16H1V14H9Z\" />\n ),\n document: (\n <>\n <path d=\"M6.97355 12C6.47678 12 6.07407 12.4975 6.07407 13.1111C6.07407 13.7248 6.47678 14.2222 6.97355 14.2222H17.1852C17.6819 14.2222 18.0847 13.7248 18.0847 13.1111C18.0847 12.4975 17.6819 12 17.1852 12H6.97355Z\" />\n <path d=\"M6.97355 15.7037C6.47678 15.7037 6.07407 16.2012 6.07407 16.8148C6.07407 17.4285 6.47678 17.9259 6.97355 17.9259H17.1852C17.6819 17.9259 18.0847 17.4285 18.0847 16.8148C18.0847 16.2012 17.6819 15.7037 17.1852 15.7037H6.97355Z\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 3.11111C2 2.49746 2.49746 2 3.11111 2H16.4444C16.7391 2 17.0217 2.11706 17.2301 2.32544L21.6746 6.76988C21.8829 6.97825 22 7.26087 22 7.55556V20.8889C22 21.5025 21.5025 22 20.8889 22H3.11111C2.49746 22 2 21.5025 2 20.8889V3.11111ZM19.6879 7.92593L16.0741 4.31209V7.92593H19.6879ZM13.8519 4.22222V9.03704C13.8519 9.65069 14.3493 10.1481 14.963 10.1481H19.7778V19.7778H4.22222V4.22222H13.8519Z\"\n />\n </>\n ),\n budgetReallocation: (\n <path d=\"M19.1121 9.51212L21.6 12L18.9107 14.6893L20.1107 15.8893L24 12L20.3121 8.31212L19.1121 9.51212ZM12 21.6L14.7107 18.8893L15.9107 20.0893L12 24L7.86653 19.8665L9.06653 18.6665L12 21.6ZM4.86653 14.4665L2.4 12L4.6651 9.73489L3.46511 8.53489L0 12L3.66653 15.6665L4.86653 14.4665ZM12 2.4L8.8651 5.53489L7.6651 4.33489L12 0L16.1121 4.11212L14.9121 5.31212L12 2.4ZM10 9.99996C10 10.374 10 11 12 11C15.48 11 16 12.88 16 14C16 15.288 14.971 16.584 13 16.915V18H11V16.92C8.661 16.553 8 14.918 8 14H10C10.011 14.143 10.159 15 12 15C13.38 15 14 14.415 14 14C14 13.676 14 13 12 13C8.52 13 8 11.12 8 9.99996C8 8.71196 9.029 7.41596 11 7.08496V6.01196H13V7.12096C14.734 7.53096 15.4 8.97396 15.4 9.99996H14.4L13.4 10.018C13.386 9.63796 13.185 8.99996 12 8.99996C10.701 8.99996 10 9.51596 10 9.99996Z\" />\n ),\n cog: (\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.845 17.866L2.845 16.136C2.293 15.181 2.621 13.955 3.576 13.403L4.081 13.111C4.027 12.742 4 12.371 4 12C4 11.629 4.027 11.257 4.081 10.888L3.576 10.596C2.621 10.045 2.293 8.819 2.845 7.864L3.844 6.135C4.375 5.216 5.651 4.872 6.575 5.403L7.104 5.709C7.686 5.253 8.325 4.878 9 4.598V4C9 2.897 9.897 2 11 2H13C14.103 2 15 2.897 15 4V4.598C15.675 4.878 16.314 5.253 16.896 5.71L17.425 5.404C18.348 4.871 19.625 5.216 20.156 6.136L21.155 7.865C21.707 8.82 21.379 10.045 20.424 10.597L19.919 10.889C19.973 11.257 20 11.629 20 12C20 12.371 19.973 12.742 19.919 13.113L20.424 13.405C21.379 13.956 21.707 15.182 21.155 16.137L20.156 17.866C19.623 18.785 18.348 19.127 17.425 18.597L16.896 18.291C16.314 18.747 15.675 19.122 15 19.402V20C15 21.103 14.103 22 13 22H11C9.897 22 9 21.103 9 20V19.402C8.325 19.122 7.686 18.747 7.104 18.29L6.575 18.596C5.654 19.127 4.376 18.783 3.845 17.866ZM6 12C6 12.461 6.058 12.925 6.171 13.378C6.278 13.811 6.087 14.263 5.7 14.486L4.576 15.137L5.576 16.866L6.72 16.204C6.876 16.114 7.048 16.07 7.22 16.07C7.47 16.07 7.718 16.163 7.908 16.345C8.591 16.992 9.415 17.475 10.292 17.744C10.713 17.872 11 18.261 11 18.7V20H13.002L13 18.7C13 18.261 13.287 17.872 13.708 17.744C14.585 17.476 15.409 16.992 16.092 16.345C16.413 16.037 16.897 15.982 17.28 16.203L18.425 16.864L19.423 15.135L18.3 14.486C17.913 14.263 17.722 13.811 17.829 13.378C17.942 12.925 18 12.461 18 12C18 11.538 17.942 11.074 17.83 10.622C17.722 10.19 17.913 9.738 18.3 9.514L19.424 8.865L18.424 7.136L17.28 7.797C16.898 8.017 16.413 7.962 16.092 7.655C15.409 7.008 14.585 6.525 13.708 6.256C13.287 6.128 13 5.739 13 5.3V4H11V5.3C11 5.739 10.713 6.128 10.292 6.256C9.415 6.524 8.591 7.008 7.908 7.655C7.587 7.962 7.104 8.018 6.72 7.797L5.575 7.135L4.577 8.864L5.7 9.514C6.087 9.737 6.278 10.189 6.17 10.622C6.058 11.074 6 11.538 6 12ZM16 12C16 14.206 14.206 16 12 16C9.794 16 8 14.206 8 12C8 9.794 9.794 8 12 8C14.206 8 16 9.794 16 12ZM14 12C14 10.916 13.084 10 12 10C10.916 10 10 10.916 10 12C10 13.084 10.916 14 12 14C13.084 14 14 13.084 14 12Z\"\n />\n ),\n abacus: (\n <path d=\"M2 3H4V21H2V3ZM20 3H22V21H20V3ZM5 13H7V14H9V13H11V14H13V13H17V14H19V13V11V10H17V11H13V10H11V11H9V10H7V11H5V13ZM5 4V5V7V8H7V7H15V8H17V7H19V5H17V4H15V5H7V4H5ZM5 17V19V20H7V19H9V20H11V19H19V17H11V16H9V17H7V16H5V17Z\" />\n ),\n hardHat: (\n <path d=\"M21 15C21.0005 14.3922 20.9402 13.7858 20.82 13.19C20.7025 12.6098 20.5248 12.0434 20.29 11.5C20.0673 10.972 19.7891 10.4692 19.46 10C19.1382 9.52142 18.7697 9.07591 18.36 8.67C17.9484 8.24581 17.4924 7.86698 17 7.54C16.5214 7.20905 16.0084 6.93077 15.47 6.71L15 6.52V5C15 4.73478 14.8946 4.48043 14.7071 4.29289C14.5196 4.10536 14.2652 4 14 4H10C9.73478 4 9.48043 4.10536 9.29289 4.29289C9.10536 4.48043 9 4.73478 9 5V6.52L8.5 6.71C7.97198 6.93269 7.46915 7.21092 7 7.54C6.51951 7.85928 6.07375 8.22795 5.67 8.64C5.24581 9.05165 4.86698 9.50759 4.54 10C4.20905 10.4786 3.93077 10.9916 3.71 11.53C3.4782 12.0745 3.30067 12.6406 3.18 13.22C3.06174 13.806 3.00145 14.4022 3 15V18H2V20H22V18H21V15ZM5 15C5.00102 14.5266 5.04791 14.0544 5.14 13.59C5.23104 13.1403 5.36844 12.7013 5.55 12.28C5.72529 11.864 5.93958 11.4656 6.19 11.09C6.69757 10.3423 7.34228 9.69757 8.09 9.19C8.38084 8.9986 8.68494 8.82817 9 8.68V15H11V6H13V15H15V8.68C15.3139 8.83035 15.6179 9.00069 15.91 9.19C16.2693 9.44497 16.6041 9.73288 16.91 10.05C17.2266 10.3535 17.5115 10.6886 17.76 11.05C18.0209 11.4208 18.239 11.82 18.41 12.24C18.5885 12.6625 18.7258 13.1012 18.82 13.55C18.9281 14.0261 18.9884 14.5119 19 15V18H5V15Z\" />\n ),\n task: (\n <>\n <path d=\"M20.0848 2.23047C20.5712 2.60462 20.6622 3.30222 20.288 3.78861L12.8806 13.4182C12.6857 13.6716 12.391 13.8288 12.072 13.8495C11.7529 13.8702 11.4404 13.7525 11.2143 13.5264L7.5106 9.82273C7.07668 9.38882 7.07668 8.6853 7.5106 8.25139C7.94451 7.81748 8.64802 7.81748 9.08194 8.25139L11.8908 11.0603L18.5266 2.43371C18.9008 1.94732 19.5984 1.85632 20.0848 2.23047Z\" />\n <path d=\"M2 3.11117C2 2.49752 2.49746 2.00006 3.11111 2.00006H12.7407C13.3543 2.00006 13.8518 2.49752 13.8518 3.11117C13.8518 3.72481 13.3543 4.22227 12.7407 4.22227H4.22221V19.7778H19.7777V10.5185C19.7777 9.90489 20.2752 9.40744 20.8888 9.40744C21.5025 9.40744 21.9999 9.90489 21.9999 10.5185V20.8889C21.9999 21.5025 21.5025 22 20.8888 22H3.11111C2.49746 22 2 21.5025 2 20.8889V3.11117Z\" />\n <path d=\"M6.97353 16.4445C6.47677 16.4445 6.07407 16.9419 6.07407 17.5556C6.07407 18.1692 6.47677 18.6667 6.97353 18.6667H17.7671C18.2639 18.6667 18.6666 18.1692 18.6666 17.5556C18.6666 16.9419 18.2639 16.4445 17.7671 16.4445H6.97353Z\" />\n </>\n ),\n dollar: (\n <path d=\"M15.999 8.5H17.999C17.999 5.663 15.244 4.369 12.999 4.071V2H10.999V4.071C8.75402 4.369 5.99902 5.663 5.99902 8.5C5.99902 11.206 8.66502 12.613 10.999 12.93V17.9C9.55102 17.649 7.99902 16.876 7.99902 15.5H5.99902C5.99902 18.089 8.42402 19.619 10.999 19.936V20.999V22H12.999V20.999V19.93C15.244 19.632 17.999 18.337 17.999 15.5C17.999 12.663 15.244 11.369 12.999 11.071V6.1C14.329 6.339 15.999 7.041 15.999 8.5ZM7.99902 8.5C7.99902 7.041 9.66902 6.339 10.999 6.1V10.899C9.62802 10.646 7.99902 9.897 7.99902 8.5ZM15.999 15.5C15.999 16.959 14.329 17.661 12.999 17.9V13.1C14.329 13.339 15.999 14.041 15.999 15.5Z\" />\n ),\n userCircle: (\n <>\n <path d=\"M12 2C6.579 2 2 6.579 2 12C2 15.189 3.592 18.078 6 19.924V20H6.102C7.77 21.245 9.813 22 12 22C14.187 22 16.23 21.245 17.898 20H18V19.924C20.408 18.078 22 15.19 22 12C22 6.579 17.421 2 12 2ZM8.074 18.927C8.371 17.582 9.568 16.573 11 16.573H13C14.432 16.573 15.629 17.583 15.926 18.927C14.758 19.604 13.416 20 12 20C10.584 20 9.242 19.604 8.074 18.927ZM17.61 17.641C16.853 15.841 15.072 14.573 13 14.573H11C8.928 14.573 7.146 15.842 6.39 17.641C4.923 16.182 4 14.176 4 12C4 7.663 7.663 4 12 4C16.337 4 20 7.663 20 12C20 14.176 19.077 16.182 17.61 17.641Z\" />\n <path d=\"M12 6C9.72 6 8 7.72 8 10C8 12.28 9.72 14 12 14C14.28 14 16 12.28 16 10C16 7.72 14.28 6 12 6ZM12 12C10.822 12 10 11.178 10 10C10 8.822 10.822 8 12 8C13.178 8 14 8.822 14 10C14 11.178 13.178 12 12 12Z\" />\n </>\n ),\n calendar: (\n <path d=\"M2.99902 6V8V20C2.99902 21.103 3.89602 22 4.99902 22H18.999C20.102 22 20.999 21.103 20.999 20V8V6C20.999 4.897 20.102 4 18.999 4H16.999V2H14.999V4H8.99902V2H6.99902V4H4.99902C3.89602 4 2.99902 4.897 2.99902 6ZM19.001 20H4.99902V8H18.999L19.001 20Z\" />\n ),\n calendarError: (\n <path d=\"M2.99902 8V6C2.99902 4.897 3.89602 4 4.99902 4H6.99902V2H8.99902V4H14.999V2H16.999V4H18.999C20.102 4 20.999 4.897 20.999 6V8V20C20.999 21.103 20.102 22 18.999 22H4.99902C3.89602 22 2.99902 21.103 2.99902 20V8ZM4.99902 20H19.001L18.999 7H4.99902V20ZM13 9H11V15H13V9ZM13 16H11V18H13V16Z\" />\n ),\n calendarX: (\n <>\n <path d=\"M8.293 16.293L9.707 17.707L12 15.414L14.293 17.707L15.707 16.293L13.414 14L15.707 11.707L14.293 10.293L12 12.586L9.707 10.293L8.293 11.707L10.586 14L8.293 16.293Z\" />\n <path d=\"M19 4H17V2H15V4H9V2H7V4H5C3.897 4 3 4.897 3 6V8V20C3 21.103 3.897 22 5 22H19C20.103 22 21 21.103 21 20V8V6C21 4.897 20.103 4 19 4ZM19.002 20H5V8H19L19.002 20Z\" />\n </>\n ),\n changeEvent: (\n <path d=\"M4 16.5262H6.28841L9.94864 12.4999L6.28841 8.47368H4V6.68421H7.08002L16.0274 16.5263H17.4211V13.842L21 17.4209L17.4211 20.9999V18.3158H15.2358L11.1578 13.8301L7.08002 18.3157H4V16.5262ZM13.36 11.4077L12.1508 10.0776L15.2358 6.68409H17.4211V4L21 7.57895L17.4211 11.1579V8.47357H16.0274L13.36 11.4077Z\" />\n ),\n buildingHouse: (\n <>\n <path d=\"M19.0002 2.00002H9.00019C7.89719 2.00002 7.00019 2.89702 7.00019 4.00002V9.58602L2.29319 14.293C2.00719 14.579 1.92119 15.009 2.07619 15.383C2.23119 15.757 2.59619 16 3.00019 16V17V21C3.00019 21.553 3.44819 22 4.00019 22H12.0002H20.0002C20.5532 22 21.0002 21.553 21.0002 21V4.00002C21.0002 2.89702 20.1032 2.00002 19.0002 2.00002ZM11.0002 20H5.00019V17V15V14.414L8.00019 11.414L11.0002 14.414V15V18V20ZM19.0002 20H13.0002V18V16C13.4042 16 13.7702 15.757 13.9242 15.383C14.0792 15.009 13.9932 14.579 13.7072 14.293L9.00019 9.58602V4.00002H19.0002V20Z\" />\n <path d=\"M11 6.00002H13V8.00002H11V6.00002ZM15 6.00002H17V8.00002H15V6.00002ZM15 10.031H17V12H15V10.031ZM15 14H17V16H15V14ZM7 15H9V17H7V15Z\" />\n </>\n ),\n house: (\n <path d=\"M5.00299 22H9.00299H15.003H19.003C20.106 22 21.003 21.103 21.003 20V11C21.003 10.735 20.898 10.48 20.71 10.293L12.71 2.29301C12.319 1.90201 11.687 1.90201 11.296 2.29301L3.29599 10.293C3.10799 10.48 3.00299 10.735 3.00299 11V20C3.00299 21.103 3.89999 22 5.00299 22ZM10.003 20V15H14.003V20H10.003ZM5.00299 11.414L12.003 4.41401L19.003 11.414L19.004 20H16.003V15C16.003 13.897 15.106 13 14.003 13H10.003C8.89999 13 8.00299 13.897 8.00299 15V20H5.00299V11.414Z\" />\n ),\n bell: (\n <path d=\"M19 13.586V10C19 6.783 16.815 4.073 13.855 3.258C13.562 2.52 12.846 2 12 2C11.154 2 10.438 2.52 10.145 3.258C7.185 4.074 5 6.783 5 10V13.586L3.293 15.293C3.105 15.48 3 15.734 3 16V18C3 18.553 3.447 19 4 19H20C20.553 19 21 18.553 21 18V16C21 15.734 20.895 15.48 20.707 15.293L19 13.586ZM19 17H5V16.414L6.707 14.707C6.895 14.52 7 14.266 7 14V10C7 7.243 9.243 5 12 5C14.757 5 17 7.243 17 10V14C17 14.266 17.105 14.52 17.293 14.707L19 16.414V17ZM12 22C13.311 22 14.407 21.166 14.818 20H9.182C9.593 21.166 10.689 22 12 22Z\" />\n ),\n customize: (\n <path d=\"M4 11H10C10.553 11 11 10.552 11 10V4C11 3.448 10.553 3 10 3H4C3.447 3 3 3.448 3 4V10C3 10.552 3.447 11 4 11ZM5 5H9V9H5V5ZM20 3H14C13.447 3 13 3.448 13 4V10C13 10.552 13.447 11 14 11H20C20.553 11 21 10.552 21 10V4C21 3.448 20.553 3 20 3ZM19 9H15V5H19V9ZM10 21C10.553 21 11 20.553 11 20V14C11 13.447 10.553 13 10 13H4C3.447 13 3 13.447 3 14V20C3 20.553 3.447 21 4 21H10ZM5 15H9V19H5V15ZM18 14H16V16H14V18H16V20H18V18H20V16H18V14Z\" />\n ),\n leaf: (\n <path d=\"M19.8703 4L18.9173 4.32242C17.2839 4.89837 15.5397 5.07512 13.8264 4.83829C12.0261 4.55473 10.1833 4.8067 8.52111 5.56373C7.63992 5.94454 6.86658 6.543 6.2715 7.30463C5.67642 8.06626 5.2785 8.96686 5.11397 9.92443C4.94661 10.8453 4.96373 11.791 5.16431 12.705C5.36489 13.619 5.74483 14.4826 6.28145 15.2443C6.2338 15.4136 6.18615 15.5829 6.14644 15.7521C5.82386 17.1442 5.66392 18.57 5.66991 20H7.25832C7.33298 18.8295 7.48957 17.6658 7.7269 16.5179C8.82881 17.1218 10.0645 17.4298 11.3167 17.4126C12.4846 17.4118 13.6404 17.1733 14.7159 16.7113C20.7598 14.0917 19.9656 5.37834 19.9656 5.01562L19.8703 4ZM14.0964 15.2282C12.0236 16.1229 9.54563 15.9698 8.15578 14.8655C8.39068 14.0683 8.71302 13.3005 9.11676 12.5763C9.43063 12.0551 9.80091 11.5712 10.2207 11.1335C10.6497 10.6911 11.1328 10.3065 11.6582 9.98892C12.744 9.33002 13.9481 8.89709 15.2004 8.71537V7.90932C13.7595 7.8587 12.3275 8.15711 11.0229 8.77985C9.68892 9.44044 8.55766 10.4576 7.75073 11.7219C7.45145 12.2048 7.18606 12.7085 6.95653 13.2292C6.58843 12.2735 6.48409 11.2341 6.65473 10.2227C6.76653 9.51459 7.05413 8.84705 7.49043 8.28298C7.92673 7.7189 8.49735 7.27685 9.14853 6.99849C10.0981 6.54804 11.1342 6.3168 12.1824 6.32141C12.6748 6.32141 13.1593 6.36977 13.6676 6.41008C15.2594 6.61852 16.8756 6.52284 18.4328 6.12796C18.3772 8.35264 17.9801 13.5516 14.0964 15.2282Z\" />\n ),\n floorPlan: (\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.60712 4.5C3.60712 4.08579 3.9429 3.75 4.35712 3.75H12.2143H16.1428H20.0714C20.4856 3.75 20.8214 4.08579 20.8214 4.5V20.2143C20.8214 20.6285 20.4856 20.9643 20.0714 20.9643H15.5512C15.4788 20.9876 15.4015 21.0002 15.3214 21.0002C15.2412 21.0002 15.1639 20.9876 15.0915 20.9643H4.35712C3.9429 20.9643 3.60712 20.6285 3.60712 20.2143V12.3571C3.60712 11.9429 3.9429 11.6071 4.35712 11.6071C4.77133 11.6071 5.10712 11.9429 5.10712 12.3571V19.4643H14.5714V17.8216C14.5714 17.4074 14.9071 17.0716 15.3214 17.0716C15.7356 17.0716 16.0714 17.4074 16.0714 17.8216V19.4643H19.3214V13.0716H19.3214L11.3571 13.0716V13.9643C11.3571 14.3785 11.0213 14.7143 10.6071 14.7143C10.1929 14.7143 9.85712 14.3785 9.85712 13.9643V12.3305L9.85707 12.3216L9.85712 12.3127V10.75C9.85712 10.3358 10.1929 10 10.6071 10C11.0213 10 11.3571 10.3358 11.3571 10.75V11.5716L19.3214 11.5716H19.3214V5.25H16.1428L16.0714 5.25V7.67857C16.0714 8.09279 15.7356 8.42857 15.3214 8.42857C14.9071 8.42857 14.5714 8.09278 14.5714 7.67857V5.25H12.2143H5.10712V6.46429C5.10712 6.8785 4.77133 7.21429 4.35712 7.21429C3.9429 7.21429 3.60712 6.8785 3.60712 6.46429V4.5Z\"\n />\n ),\n chair: (\n <path d=\"M17.25 12.8V5.6C17.25 4.7176 16.5773 4 15.75 4H8.25C7.42275 4 6.75 4.7176 6.75 5.6V12.8C6.33525 12.8 6 13.1576 6 13.6V20H7.5V16H16.5V20H18V13.6C18 13.1576 17.6648 12.8 17.25 12.8ZM15.75 5.6V12.8H14.25V5.6H15.75ZM12.75 5.6V12.8H11.25V5.6H12.75ZM8.25 5.6H9.75V12.8H8.25V5.6Z\" />\n ),\n bolt: (\n <path d=\"M17.168 8H13L13.806 3.165C13.907 2.555 13.438 2 12.819 2H7.66702C7.17802 2 6.76102 2.354 6.68102 2.835L5.01402 12.835C4.91202 13.445 5.38202 14 6.00002 14H10V22L18.01 9.541C18.438 8.875 17.96 8 17.168 8Z\" />\n ),\n checklistComplete: (\n <>\n <path d=\"M6.40005 19.6H17.6C18.4824 19.6 19.2 18.8824 19.2 18V6C19.2 5.1176 18.4824 4.4 17.6 4.4H16C16 3.9576 15.6424 3.6 15.2 3.6H8.80005C8.35765 3.6 8.00005 3.9576 8.00005 4.4H6.40005C5.51765 4.4 4.80005 5.1176 4.80005 6V18C4.80005 18.8824 5.51765 19.6 6.40005 19.6ZM6.40005 6H8.00005V7.6H16V6H17.6V18H6.40005V6Z\" />\n <path\n css={Css.green500.$}\n d=\"M11.2 12.8688L9.7656 11.4344L8.6344 12.5656L11.2 15.1312L15.3656 10.9656L14.2344 9.83438L11.2 12.8688Z\"\n />\n </>\n ),\n checklistNotComplete: (\n <path d=\"M6.40005 19.6H17.6C18.4824 19.6 19.2 18.8824 19.2 18V6C19.2 5.1176 18.4824 4.4 17.6 4.4H16C16 3.9576 15.6424 3.6 15.2 3.6H8.80005C8.35765 3.6 8.00005 3.9576 8.00005 4.4H6.40005C5.51765 4.4 4.80005 5.1176 4.80005 6V18C4.80005 18.8824 5.51765 19.6 6.40005 19.6ZM6.40005 6H8.00005V7.6H16V6H17.6V18H6.40005V6Z\" />\n ),\n faucet: (\n <>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M19 2L11 2V1L19 1V2Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.5 7L14.5 2L15.5 2L15.5 7L14.5 7Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6 11H22V8H3V15H6V11ZM7 16H2V7H23V12H7V16Z\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.24335 21.7762C5.35823 21.6723 5.5 21.4626 5.5 21C5.5 20.8857 5.4543 20.6946 5.30831 20.4252C5.16704 20.1646 4.96603 19.8932 4.74404 19.6368C4.66213 19.5423 4.5798 19.4525 4.5 19.369C4.4202 19.4525 4.33787 19.5423 4.25596 19.6368C4.03397 19.8932 3.83296 20.1646 3.69169 20.4252C3.5457 20.6946 3.5 20.8857 3.5 21C3.5 21.4626 3.64177 21.6723 3.75665 21.7762C3.88852 21.8955 4.12535 22 4.5 22C4.87465 22 5.11148 21.8955 5.24335 21.7762ZM4.5 23C5.60457 23 6.5 22.3807 6.5 21C6.5 19.6193 4.5 18 4.5 18C4.5 18 2.5 19.6193 2.5 21C2.5 22.3807 3.39543 23 4.5 23Z\"\n />\n </>\n ),\n bed: (\n <>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M22 12H2V18H22V12ZM1 11V19H23V11H1Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M20 2H4V11H20V2ZM3 1V12H21V1H3Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15 7H9V11H15V7ZM8 6V12H16V6H8Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M3.5 23V19H4.5V23H3.5Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M19.5 23V19H20.5V23H19.5Z\" />\n </>\n ),\n sqFeet: (\n <>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.958374 0.958328H6.95837V1.95833H1.95837V6.95833H0.958374V0.958328Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.958374 23.0417L0.958374 17.0417L1.95837 17.0417L1.95837 22.0417L6.95837 22.0417L6.95837 23.0417L0.958374 23.0417Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M23.0416 0.958328L23.0416 6.95833L22.0416 6.95833L22.0416 1.95833L17.0416 1.95833L17.0416 0.958328L23.0416 0.958328Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M23.0416 23.0417L17.0416 23.0417L17.0416 22.0417L22.0416 22.0417L22.0416 17.0417L23.0416 17.0417L23.0416 23.0417Z\"\n />\n </>\n ),\n ruler: (\n <path d=\"M20.875 7H3.125C1.953 7 1 7.897 1 9V15C1 16.103 1.953 17 3.125 17H20.875C22.047 17 23 16.103 23 15V9C23 7.897 22.047 7 20.875 7ZM20.875 15H3.125C3.068 15 3.029 14.984 3.012 14.984C3.005 14.984 3.001 14.986 3 14.992L2.988 9.046C2.995 9.036 3.04 9 3.125 9H5V12H7V9H9V13H11V9H13V12H15V9H17V13H19V9H20.875C20.954 9.001 20.997 9.028 21 9.008L21.012 14.954C21.005 14.964 20.96 15 20.875 15Z\" />\n ),\n palette: (\n <>\n <path d=\"M13.4001 2.09599C10.0421 1.63799 6.67106 2.89999 4.46306 5.42699C2.56506 7.60299 1.70206 10.509 2.09606 13.4C2.62606 17.294 5.55406 20.607 9.38106 21.646C10.2451 21.881 11.1261 22 11.9991 22L12.1411 21.999C13.1731 21.983 14.1141 21.45 14.6571 20.573C15.1981 19.697 15.2561 18.62 14.8101 17.694L14.6111 17.278C14.1931 16.41 14.4901 15.708 14.7051 15.366C15.2441 14.508 16.3321 14.156 17.2811 14.611L17.6931 14.808C18.1051 15.006 18.5431 15.107 18.9941 15.107C20.6271 15.107 21.9751 13.776 22.0001 12.14C22.0141 11.22 21.8951 10.291 21.6471 9.37999C20.6071 5.55399 17.2941 2.62599 13.4001 2.09599ZM18.5581 13.005L18.1461 12.808C16.3181 11.93 14.0761 12.61 13.0111 14.302C12.2731 15.478 12.1981 16.878 12.8071 18.144L13.0061 18.56C13.1571 18.874 13.1391 19.224 12.9551 19.521C12.7701 19.82 12.4631 19.995 12.1111 20H11.9991C11.3031 20 10.5981 19.904 9.90406 19.717C6.84106 18.886 4.50106 16.238 4.07806 13.131C3.75706 10.776 4.43006 8.50799 5.97106 6.74199C7.49106 4.99999 9.68906 3.99999 12.0001 3.99999C12.3741 3.99999 12.7541 4.02599 13.1311 4.07799C16.2381 4.50099 18.8861 6.84199 19.7171 9.90399C19.9151 10.634 20.0101 11.378 19.9991 12.111C19.9871 12.918 19.1541 13.294 18.5581 13.005Z\" />\n <path d=\"M7.5 16C8.32843 16 9 15.3284 9 14.5C9 13.6716 8.32843 13 7.5 13C6.67157 13 6 13.6716 6 14.5C6 15.3284 6.67157 16 7.5 16Z\" />\n <path d=\"M7.5 12C8.32843 12 9 11.3284 9 10.5C9 9.67157 8.32843 9 7.5 9C6.67157 9 6 9.67157 6 10.5C6 11.3284 6.67157 12 7.5 12Z\" />\n <path d=\"M10.5 9C11.3284 9 12 8.32843 12 7.5C12 6.67157 11.3284 6 10.5 6C9.67157 6 9 6.67157 9 7.5C9 8.32843 9.67157 9 10.5 9Z\" />\n <path d=\"M14.5 9C15.3284 9 16 8.32843 16 7.5C16 6.67157 15.3284 6 14.5 6C13.6716 6 13 6.67157 13 7.5C13 8.32843 13.6716 9 14.5 9Z\" />\n </>\n ),\n bath: (\n <path d=\"M21 10H7V7C7 5.897 7.897 5 9 5C10.103 5 11 5.897 11 7H13C13 4.794 11.206 3 9 3C6.794 3 5 4.794 5 7V10H3C2.447 10 2 10.447 2 11V13C2 15.606 3.674 17.823 6 18.65V22H8V19H16V22H18V18.65C20.326 17.823 22 15.606 22 13V11C22 10.447 21.553 10 21 10ZM20 13C20 15.206 18.206 17 16 17H8C5.794 17 4 15.206 4 13V12H20V13Z\" />\n ),\n car: (\n <>\n <path d=\"M20.772 10.156L19.404 6.051C18.995 4.824 17.852 4 16.559 4H7.441C6.148 4 5.005 4.824 4.596 6.051L3.228 10.156C2.508 10.459 2 11.171 2 12V17C2 17.753 2.423 18.402 3.039 18.743C3.026 18.809 3 18.869 3 18.938V21C3 21.553 3.447 22 4 22H5C5.553 22 6 21.553 6 21V19H18V21C18 21.553 18.447 22 19 22H20C20.553 22 21 21.553 21 21V18.938C21 18.869 20.974 18.808 20.961 18.743C21.577 18.402 22 17.753 22 17V12C22 11.171 21.492 10.459 20.772 10.156ZM4 17V12H20L20.002 17H4ZM7.441 6H16.558C16.989 6 17.371 6.274 17.507 6.684L18.613 10H5.387L6.492 6.684C6.629 6.274 7.011 6 7.441 6Z\" />\n <path d=\"M6.5 16C7.32843 16 8 15.3284 8 14.5C8 13.6716 7.32843 13 6.5 13C5.67157 13 5 13.6716 5 14.5C5 15.3284 5.67157 16 6.5 16Z\" />\n <path d=\"M17.5 16C18.3284 16 19 15.3284 19 14.5C19 13.6716 18.3284 13 17.5 13C16.6716 13 16 13.6716 16 14.5C16 15.3284 16.6716 16 17.5 16Z\" />\n </>\n ),\n basement: (\n <>\n <rect width=\"10\" height=\"2\" />\n <rect x=\"6\" y=\"5\" width=\"10\" height=\"2\" />\n <rect x=\"12\" y=\"10\" width=\"10\" height=\"2\" />\n </>\n ),\n cube: (\n <path d=\"M19.406 4.08601L10.406 0.0860059C10.146 -0.0289941 9.853 -0.0289941 9.593 0.0860059L0.593 4.08601C0.573 4.09501 0.559 4.11001 0.539 4.12101C0.511 4.13501 0.481 4.14401 0.455 4.16101C0.433 4.17601 0.416 4.19501 0.395 4.21101C0.367 4.23201 0.34 4.25501 0.315 4.27901C0.274 4.31801 0.238 4.36001 0.205 4.40501C0.185 4.43301 0.164 4.45801 0.146 4.48601C0.115 4.53901 0.0919999 4.59401 0.0699999 4.65101C0.0609999 4.67801 0.047 4.70301 0.039 4.73001C0.015 4.81701 0 4.90701 0 5.00001V15C0 15.396 0.232 15.753 0.594 15.914L9.594 19.914C9.724 19.972 9.862 20 10 20C10.139 20 10.273 19.961 10.402 19.904L10.406 19.914L19.406 15.914C19.768 15.753 20 15.396 20 15V5.00001C20 4.60401 19.768 4.24701 19.406 4.08601ZM10 2.09501L16.538 5.00001L10 7.90501L8.692 7.32401L3.463 5.00001L10 2.09501ZM2 14.351V6.53901L9 9.65001V17.461L2 14.351ZM11 17.461V9.65001L18 6.53901V14.351L11 17.461Z\" />\n ),\n // Navigation\n projects: (\n <path d=\"M4 6H6V8H4V6ZM4 11H6V13H4V11ZM4 16H6V18H4V16ZM20 8V6H18.8H9.2H8.023V8H9.2H18.8H20ZM8 11H20V13H8V11ZM8 16H20V18H8V16Z\" />\n ),\n tasks: (\n <>\n <path d=\"M5 22H19C20.103 22 21 21.103 21 20V5C21 3.897 20.103 3 19 3H17C17 2.447 16.553 2 16 2H8C7.447 2 7 2.447 7 3H5C3.897 3 3 3.897 3 5V20C3 21.103 3.897 22 5 22ZM5 5H7V7H17V5H19V20H5V5Z\" />\n <path d=\"M11 13.586L9.20697 11.793L7.79297 13.207L11 16.414L16.207 11.207L14.793 9.79297L11 13.586Z\" />\n </>\n ),\n finances: (\n <>\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n <path d=\"M12 11C10 11 10 10.374 10 9.99996C10 9.51596 10.701 8.99996 12 8.99996C13.185 8.99996 13.386 9.63796 13.4 10.018L14.4 9.99996H15.4C15.4 8.97396 14.734 7.53096 13 7.12096V6.01196H11V7.08496C9.029 7.41596 8 8.71196 8 9.99996C8 11.12 8.52 13 12 13C14 13 14 13.676 14 14C14 14.415 13.38 15 12 15C10.159 15 10.011 14.143 10 14H8C8 14.918 8.661 16.553 11 16.92V18H13V16.915C14.971 16.584 16 15.288 16 14C16 12.88 15.48 11 12 11Z\" />\n </>\n ),\n templates: (\n <>\n <path d=\"M20 2H10C8.897 2 8 2.897 8 4V8H4C2.897 8 2 8.897 2 10V20C2 21.103 2.897 22 4 22H14C15.103 22 16 21.103 16 20V16H20C21.103 16 22 15.103 22 14V4C22 2.897 21.103 2 20 2ZM4 20V10H14L14.002 20H4ZM20 14H16V10C16 8.897 15.103 8 14 8H10V4H20V14Z\" />\n <path d=\"M6 12H12V14H6V12ZM6 16H12V18H6V16Z\" />\n </>\n ),\n tradePartners: (\n <path d=\"M5.12204 21C5.50004 21.378 6.00204 21.586 6.53604 21.586C7.07004 21.586 7.57204 21.378 7.95004 21L12.286 16.664C13.002 16.885 13.745 16.997 14.503 16.997C16.506 16.997 18.39 16.218 19.805 14.802C21.951 12.655 22.592 9.453 21.437 6.644L20.867 5.256L16.623 9.499L14.502 7.377L18.745 3.134L17.356 2.563C16.446 2.189 15.485 2 14.499 2C12.496 2 10.613 2.78 9.19804 4.196C7.21304 6.18 6.51604 9.068 7.33604 11.714L3.00004 16.05C2.22004 16.829 2.22004 18.099 3.00004 18.878L5.12204 21ZM9.67004 12.209L9.41604 11.593C8.56804 9.532 9.03804 7.183 10.612 5.61C11.65 4.572 13.03 4 14.499 4C14.676 4 14.851 4.008 15.025 4.025L11.672 7.378L16.621 12.328L19.976 8.973C20.132 10.581 19.573 12.204 18.389 13.389C16.839 14.939 14.425 15.416 12.405 14.585L11.79 14.33L6.53604 19.586H6.53704L6.53604 20.586V19.586L4.41404 17.464L9.67004 12.209Z\" />\n ),\n menu: (\n <>\n <path d=\"M4 12C4 11.4477 4.44772 11 5 11H19C19.5523 11 20 11.4477 20 12V12C20 12.5523 19.5523 13 19 13H5C4.44772 13 4 12.5523 4 12V12ZM4 18C4 17.4477 4.44772 17 5 17H10H15C15.5523 17 16 17.4477 16 18V18C16 18.5523 15.5523 19 15 19H5C4.44772 19 4 18.5523 4 18V18Z\" />\n <path d=\"M20 6C20 5.44772 19.5523 5 19 5H5C4.44772 5 4 5.44772 4 6V6C4 6.55228 4.44772 7 5 7H19C19.5523 7 20 6.55228 20 6V6Z\" />\n </>\n ),\n tile: (\n <>\n <path d=\"M5 6H10.2V11.2H5V6ZM5 13.8H10.2V19H5V13.8ZM12.8 6H18V11.2H12.8V6ZM12.8 13.8H18V19H12.8V13.8Z\" />\n </>\n ),\n list: (\n <>\n <path d=\"M4 6H20V8H4V6ZM4 11H20V13H4V11ZM4 16H20V18H4V16Z\" />\n </>\n ),\n // Weather\n cloudy: (\n <>\n <path d=\"M 16.832031 18.316406 L 6.191406 18.316406 C 4.265625 18.316406 2.589844 16.707031 2.527344 14.808594 C 2.496094 13.832031 2.84375 12.914062 3.507812 12.222656 C 4.042969 11.652344 4.769531 11.273438 5.527344 11.148438 C 5.527344 11.050781 5.527344 10.988281 5.527344 10.894531 C 5.527344 7.832031 7.992188 5.367188 10.992188 5.367188 C 13.328125 5.367188 15.414062 6.882812 16.171875 9.09375 C 16.519531 9.03125 16.898438 9.03125 17.246094 9.0625 C 19.582031 9.253906 21.414062 11.179688 21.476562 13.515625 C 21.507812 14.808594 21.066406 16.011719 20.179688 16.925781 C 19.296875 17.808594 18.128906 18.316406 16.832031 18.316406 Z M 10.992188 6.316406 C 8.496094 6.316406 6.476562 8.367188 6.476562 10.894531 C 6.476562 11.085938 6.476562 11.304688 6.507812 11.527344 C 6.539062 11.652344 6.476562 11.777344 6.414062 11.90625 C 6.347656 12.03125 6.191406 12.0625 6.066406 12.0625 C 5.339844 12.09375 4.675781 12.378906 4.203125 12.882812 C 3.726562 13.390625 3.445312 14.085938 3.476562 14.777344 C 3.507812 16.167969 4.738281 17.367188 6.191406 17.367188 L 16.863281 17.367188 C 17.875 17.367188 18.824219 16.957031 19.519531 16.261719 C 20.210938 15.535156 20.589844 14.589844 20.558594 13.546875 C 20.496094 11.683594 19.042969 10.167969 17.210938 9.980469 C 16.800781 9.949219 16.390625 9.980469 16.011719 10.074219 C 15.761719 10.136719 15.507812 9.980469 15.445312 9.726562 C 14.875 7.738281 13.074219 6.316406 10.992188 6.316406 Z M 10.992188 6.316406\" />\n </>\n ),\n fog: (\n <>\n <path d=\"M 17.246094 7.800781 C 16.898438 7.769531 16.519531 7.769531 16.171875 7.832031 C 15.414062 5.621094 13.359375 4.105469 10.992188 4.105469 C 7.992188 4.105469 5.527344 6.601562 5.527344 9.632812 C 5.527344 9.726562 5.527344 9.789062 5.527344 9.882812 C 4.738281 10.011719 4.042969 10.390625 3.507812 10.957031 C 2.84375 11.652344 2.496094 12.570312 2.527344 13.546875 C 2.589844 15.441406 4.265625 17.050781 6.191406 17.050781 L 7.421875 17.050781 C 7.675781 17.050781 7.898438 16.832031 7.898438 16.578125 C 7.898438 16.328125 7.644531 16.105469 7.390625 16.105469 L 6.160156 16.105469 C 4.738281 16.105469 3.507812 14.9375 3.445312 13.515625 C 3.414062 12.789062 3.664062 12.125 4.171875 11.621094 C 4.644531 11.117188 5.339844 10.800781 6.035156 10.800781 C 6.160156 10.800781 6.285156 10.738281 6.382812 10.640625 C 6.476562 10.546875 6.507812 10.421875 6.476562 10.261719 C 6.445312 10.042969 6.445312 9.851562 6.445312 9.632812 C 6.445312 7.105469 8.464844 5.050781 10.960938 5.050781 C 13.011719 5.050781 14.8125 6.472656 15.347656 8.496094 C 15.414062 8.746094 15.664062 8.90625 15.917969 8.84375 C 16.328125 8.746094 16.707031 8.714844 17.117188 8.746094 C 19.011719 8.90625 20.464844 10.421875 20.527344 12.285156 C 20.558594 13.292969 20.179688 14.273438 19.484375 15 C 18.792969 15.726562 17.84375 16.105469 16.832031 16.105469 L 16.738281 16.105469 C 16.484375 16.105469 16.265625 16.328125 16.265625 16.578125 C 16.265625 16.832031 16.484375 17.050781 16.738281 17.050781 L 16.832031 17.050781 C 18.097656 17.050781 19.296875 16.546875 20.148438 15.664062 C 21.035156 14.746094 21.476562 13.546875 21.445312 12.253906 C 21.414062 9.914062 19.582031 7.988281 17.246094 7.800781 Z M 17.246094 7.800781 \" />\n <path d=\"M 9.160156 15.472656 L 15 15.472656 C 15.175781 15.472656 15.316406 15.613281 15.316406 15.789062 C 15.316406 15.964844 15.175781 16.105469 15 16.105469 L 9.160156 16.105469 C 8.984375 16.105469 8.84375 15.964844 8.84375 15.789062 C 8.84375 15.613281 8.984375 15.472656 9.160156 15.472656 Z M 9.160156 15.472656 \" />\n <path d=\"M 9.160156 17.367188 L 15 17.367188 C 15.175781 17.367188 15.316406 17.511719 15.316406 17.683594 C 15.316406 17.859375 15.175781 18 15 18 L 9.160156 18 C 8.984375 18 8.84375 17.859375 8.84375 17.683594 C 8.84375 17.511719 8.984375 17.367188 9.160156 17.367188 Z M 9.160156 17.367188 \" />\n <path d=\"M 9.160156 19.261719 L 15 19.261719 C 15.175781 19.261719 15.316406 19.40625 15.316406 19.578125 C 15.316406 19.753906 15.175781 19.894531 15 19.894531 L 9.160156 19.894531 C 8.984375 19.894531 8.84375 19.753906 8.84375 19.578125 C 8.84375 19.40625 8.984375 19.261719 9.160156 19.261719 Z M 9.160156 19.261719 \" />\n </>\n ),\n hail: (\n <>\n <path d=\"M 17.246094 7.484375 C 16.898438 7.453125 16.519531 7.453125 16.171875 7.515625 C 15.414062 5.304688 13.359375 3.789062 10.992188 3.789062 C 7.992188 3.789062 5.527344 6.285156 5.527344 9.316406 C 5.527344 9.410156 5.527344 9.472656 5.527344 9.570312 C 4.738281 9.695312 4.042969 10.074219 3.507812 10.640625 C 2.84375 11.335938 2.496094 12.253906 2.527344 13.230469 C 2.589844 15.125 4.265625 16.738281 6.191406 16.738281 L 7.421875 16.738281 C 7.675781 16.738281 7.898438 16.515625 7.898438 16.261719 C 7.898438 16.011719 7.644531 15.789062 7.390625 15.789062 L 6.160156 15.789062 C 4.738281 15.789062 3.507812 14.621094 3.445312 13.199219 C 3.414062 12.472656 3.664062 11.808594 4.171875 11.304688 C 4.644531 10.800781 5.339844 10.484375 6.035156 10.484375 C 6.160156 10.484375 6.285156 10.421875 6.382812 10.328125 C 6.476562 10.230469 6.507812 10.105469 6.476562 9.949219 C 6.445312 9.726562 6.445312 9.535156 6.445312 9.316406 C 6.445312 6.789062 8.464844 4.738281 10.960938 4.738281 C 13.011719 4.738281 14.8125 6.15625 15.347656 8.179688 C 15.414062 8.429688 15.664062 8.589844 15.917969 8.527344 C 16.328125 8.429688 16.707031 8.398438 17.117188 8.429688 C 19.011719 8.589844 20.464844 10.105469 20.527344 11.96875 C 20.558594 12.980469 20.179688 13.957031 19.484375 14.683594 C 18.792969 15.410156 17.84375 15.789062 16.832031 15.789062 L 16.738281 15.789062 C 16.484375 15.789062 16.265625 16.011719 16.265625 16.261719 C 16.265625 16.515625 16.484375 16.738281 16.738281 16.738281 L 16.832031 16.738281 C 18.097656 16.738281 19.296875 16.230469 20.148438 15.347656 C 21.035156 14.429688 21.476562 13.230469 21.445312 11.9375 C 21.414062 9.601562 19.582031 7.671875 17.246094 7.484375 Z M 17.246094 7.484375 \" />\n <path d=\"M 9.792969 15.472656 L 9.792969 12.316406 C 9.792969 12.125 9.664062 12 9.476562 12 C 9.285156 12 9.160156 12.125 9.160156 12.316406 L 9.160156 15.472656 C 9.160156 15.664062 9.285156 15.789062 9.476562 15.789062 C 9.664062 15.789062 9.792969 15.664062 9.792969 15.472656 Z M 9.792969 15.472656 \" />\n <path d=\"M 12.316406 17.367188 L 12.316406 12.316406 C 12.316406 12.125 12.191406 12 12 12 C 11.8125 12 11.6875 12.125 11.6875 12.316406 L 11.6875 17.367188 C 11.6875 17.558594 11.8125 17.683594 12 17.683594 C 12.191406 17.683594 12.316406 17.558594 12.316406 17.367188 Z M 12.316406 17.367188 \" />\n <path d=\"M 14.84375 15.632812 L 14.84375 12.316406 C 14.84375 12.125 14.71875 12 14.527344 12 C 14.339844 12 14.210938 12.125 14.210938 12.316406 L 14.210938 15.632812 C 14.210938 15.820312 14.339844 15.949219 14.527344 15.949219 C 14.71875 15.949219 14.84375 15.820312 14.84375 15.632812 Z M 14.84375 15.632812 \" />\n <path d=\"M 14.527344 18.949219 C 15.050781 18.949219 15.476562 18.523438 15.476562 18 C 15.476562 17.476562 15.050781 17.050781 14.527344 17.050781 C 14.003906 17.050781 13.582031 17.476562 13.582031 18 C 13.582031 18.523438 14.003906 18.949219 14.527344 18.949219 Z M 14.527344 18.949219 \" />\n <path d=\"M 9.476562 18.949219 C 10 18.949219 10.421875 18.523438 10.421875 18 C 10.421875 17.476562 10 17.050781 9.476562 17.050781 C 8.953125 17.050781 8.527344 17.476562 8.527344 18 C 8.527344 18.523438 8.953125 18.949219 9.476562 18.949219 Z M 9.476562 18.949219 \" />\n <path d=\"M 12.035156 20.527344 C 12.558594 20.527344 12.980469 20.101562 12.980469 19.578125 C 12.980469 19.054688 12.558594 18.632812 12.035156 18.632812 C 11.511719 18.632812 11.085938 19.054688 11.085938 19.578125 C 11.085938 20.101562 11.511719 20.527344 12.035156 20.527344 Z M 12.035156 20.527344 \" />\n </>\n ),\n ice: (\n <>\n <path d=\"M 11.78125 11.875 C 11.625 11.8125 11.433594 11.875 11.371094 12.03125 L 8.179688 19.769531 C 8.117188 19.925781 8.179688 20.117188 8.339844 20.179688 C 8.371094 20.210938 8.433594 20.210938 8.464844 20.210938 C 8.589844 20.210938 8.71875 20.148438 8.75 20.019531 L 11.9375 12.316406 C 12.035156 12.125 11.9375 11.9375 11.78125 11.875 Z M 11.78125 11.875 \" />\n <path d=\"M 13.738281 12.535156 C 13.582031 12.472656 13.390625 12.535156 13.328125 12.695312 L 10.675781 19.136719 C 10.613281 19.292969 10.675781 19.484375 10.832031 19.546875 C 10.863281 19.578125 10.929688 19.578125 10.960938 19.578125 C 11.085938 19.578125 11.210938 19.515625 11.242188 19.390625 L 13.898438 12.949219 C 13.960938 12.789062 13.898438 12.601562 13.738281 12.535156 Z M 13.738281 12.535156 \" />\n <path d=\"M 15.664062 13.199219 C 15.507812 13.136719 15.316406 13.199219 15.253906 13.359375 L 13.140625 18.441406 C 13.074219 18.601562 13.140625 18.789062 13.296875 18.851562 C 13.328125 18.882812 13.390625 18.882812 13.421875 18.882812 C 13.550781 18.882812 13.675781 18.820312 13.707031 18.695312 L 15.824219 13.609375 C 15.886719 13.453125 15.824219 13.261719 15.664062 13.199219 Z M 15.664062 13.199219 \" />\n <path d=\"M 17.246094 8.117188 C 16.898438 8.085938 16.519531 8.085938 16.171875 8.148438 C 15.414062 5.9375 13.359375 4.421875 10.992188 4.421875 C 7.992188 4.421875 5.527344 6.914062 5.527344 9.949219 C 5.527344 10.042969 5.527344 10.105469 5.527344 10.199219 C 4.738281 10.328125 4.042969 10.707031 3.507812 11.273438 C 2.84375 11.96875 2.496094 12.882812 2.527344 13.863281 C 2.589844 15.757812 4.265625 17.367188 6.191406 17.367188 L 7.421875 17.367188 C 7.675781 17.367188 7.898438 17.148438 7.898438 16.894531 C 7.898438 16.640625 7.644531 16.421875 7.390625 16.421875 L 6.160156 16.421875 C 4.738281 16.421875 3.507812 15.253906 3.445312 13.832031 C 3.414062 13.105469 3.664062 12.441406 4.171875 11.9375 C 4.644531 11.429688 5.339844 11.117188 6.035156 11.117188 C 6.160156 11.117188 6.285156 11.050781 6.382812 10.957031 C 6.476562 10.863281 6.507812 10.738281 6.476562 10.578125 C 6.445312 10.359375 6.445312 10.167969 6.445312 9.949219 C 6.445312 7.421875 8.464844 5.367188 10.960938 5.367188 C 13.011719 5.367188 14.8125 6.789062 15.347656 8.808594 C 15.414062 9.0625 15.664062 9.222656 15.917969 9.15625 C 16.328125 9.0625 16.707031 9.03125 17.117188 9.0625 C 19.011719 9.222656 20.464844 10.738281 20.527344 12.601562 C 20.558594 13.609375 20.179688 14.589844 19.484375 15.316406 C 18.792969 16.042969 17.84375 16.421875 16.832031 16.421875 L 16.738281 16.421875 C 16.484375 16.421875 16.265625 16.640625 16.265625 16.894531 C 16.265625 17.148438 16.484375 17.367188 16.738281 17.367188 L 16.832031 17.367188 C 18.097656 17.367188 19.296875 16.863281 20.148438 15.980469 C 21.035156 15.0625 21.476562 13.863281 21.445312 12.570312 C 21.414062 10.230469 19.582031 8.304688 17.246094 8.117188 Z M 17.246094 8.117188 \" />\n </>\n ),\n partlyCloudy: (\n <>\n <path d=\"M 16.898438 4.894531 C 17.085938 4.894531 17.210938 4.769531 17.210938 4.578125 L 17.210938 3.15625 C 17.210938 2.96875 17.085938 2.84375 16.898438 2.84375 C 16.707031 2.84375 16.582031 2.96875 16.582031 3.15625 L 16.582031 4.578125 C 16.582031 4.769531 16.707031 4.894531 16.898438 4.894531 Z M 16.898438 4.894531 \" />\n <path d=\"M 14.75 4.769531 L 14.875 5.085938 C 14.9375 5.210938 15.035156 5.273438 15.160156 5.273438 C 15.191406 5.273438 15.253906 5.273438 15.285156 5.242188 C 15.445312 5.179688 15.539062 4.988281 15.445312 4.832031 L 15.316406 4.515625 C 15.253906 4.359375 15.066406 4.261719 14.90625 4.359375 C 14.75 4.421875 14.6875 4.578125 14.75 4.769531 Z M 14.75 4.769531 \" />\n <path d=\"M 21.253906 6.949219 L 20.9375 7.074219 C 20.78125 7.136719 20.6875 7.328125 20.78125 7.484375 C 20.84375 7.609375 20.9375 7.671875 21.066406 7.671875 C 21.097656 7.671875 21.160156 7.671875 21.191406 7.640625 L 21.507812 7.515625 C 21.664062 7.453125 21.761719 7.261719 21.664062 7.105469 C 21.601562 6.980469 21.414062 6.882812 21.253906 6.949219 Z M 21.253906 6.949219 \" />\n <path d=\"M 18.507812 5.242188 C 18.539062 5.273438 18.601562 5.273438 18.632812 5.273438 C 18.761719 5.273438 18.886719 5.210938 18.917969 5.085938 L 19.042969 4.800781 C 19.105469 4.640625 19.042969 4.453125 18.886719 4.390625 C 18.726562 4.328125 18.539062 4.390625 18.476562 4.546875 L 18.316406 4.832031 C 18.253906 4.988281 18.347656 5.148438 18.507812 5.242188 Z M 18.507812 5.242188 \" />\n <path d=\"M 21.476562 10.671875 L 21.160156 10.546875 C 21 10.484375 20.8125 10.546875 20.75 10.707031 C 20.6875 10.863281 20.75 11.050781 20.90625 11.117188 L 21.222656 11.242188 C 21.253906 11.273438 21.316406 11.273438 21.347656 11.273438 C 21.476562 11.273438 21.601562 11.210938 21.632812 11.085938 C 21.726562 10.925781 21.664062 10.738281 21.476562 10.671875 Z M 21.476562 10.671875 \" />\n <path d=\"M 22.832031 8.777344 L 21.414062 8.777344 C 21.222656 8.777344 21.097656 8.90625 21.097656 9.09375 C 21.097656 9.285156 21.222656 9.410156 21.414062 9.410156 L 22.832031 9.410156 C 23.023438 9.410156 23.148438 9.285156 23.148438 9.09375 C 23.148438 8.90625 23.023438 8.777344 22.832031 8.777344 Z M 22.832031 8.777344 \" />\n <path d=\"M 20.085938 6.222656 C 20.179688 6.222656 20.246094 6.191406 20.308594 6.125 L 21.316406 5.117188 C 21.445312 4.988281 21.445312 4.800781 21.316406 4.671875 C 21.191406 4.546875 21.003906 4.546875 20.875 4.671875 L 19.867188 5.683594 C 19.738281 5.8125 19.738281 6 19.867188 6.125 C 19.929688 6.191406 19.992188 6.222656 20.085938 6.222656 Z M 20.085938 6.222656 \" />\n <path d=\"M 13.484375 6.125 C 13.550781 6.191406 13.644531 6.222656 13.707031 6.222656 C 13.769531 6.222656 13.863281 6.191406 13.929688 6.125 C 14.054688 6 14.054688 5.8125 13.929688 5.683594 L 12.917969 4.671875 C 12.792969 4.546875 12.601562 4.546875 12.476562 4.671875 C 12.347656 4.800781 12.347656 4.988281 12.476562 5.117188 Z M 13.484375 6.125 \" />\n <path d=\"M 14.9375 6.851562 C 15.476562 6.378906 16.171875 6.125 16.898438 6.125 C 18.539062 6.125 19.863281 7.453125 19.863281 9.09375 C 19.863281 9.410156 19.800781 9.726562 19.707031 10.011719 C 19.613281 10.261719 19.769531 10.515625 20.023438 10.609375 C 20.085938 10.640625 20.117188 10.640625 20.179688 10.640625 C 20.371094 10.640625 20.558594 10.515625 20.625 10.328125 C 20.75 9.949219 20.8125 9.535156 20.8125 9.09375 C 20.8125 6.914062 19.042969 5.179688 16.898438 5.179688 C 15.949219 5.179688 15.035156 5.527344 14.308594 6.15625 C 14.117188 6.316406 14.085938 6.632812 14.277344 6.820312 C 14.433594 7.011719 14.75 7.042969 14.9375 6.851562 Z M 14.9375 6.851562 \" />\n <path d=\"M 16.613281 10.167969 C 16.265625 10.136719 15.886719 10.136719 15.539062 10.199219 C 14.78125 7.988281 12.726562 6.472656 10.359375 6.472656 C 7.359375 6.472656 4.898438 8.96875 4.898438 12 C 4.898438 12.09375 4.898438 12.15625 4.898438 12.253906 C 4.105469 12.378906 3.414062 12.757812 2.875 13.328125 C 2.210938 14.019531 1.863281 14.9375 1.898438 15.914062 C 1.960938 17.808594 3.632812 19.421875 5.558594 19.421875 L 16.234375 19.421875 C 17.496094 19.421875 18.695312 18.914062 19.550781 18.03125 C 20.433594 17.117188 20.875 15.914062 20.84375 14.621094 C 20.78125 12.285156 18.949219 10.359375 16.613281 10.167969 Z M 18.855469 17.367188 C 18.160156 18.09375 17.210938 18.472656 16.203125 18.472656 L 5.558594 18.472656 C 4.140625 18.472656 2.90625 17.304688 2.84375 15.882812 C 2.8125 15.15625 3.066406 14.496094 3.570312 13.988281 C 4.042969 13.484375 4.707031 13.167969 5.433594 13.167969 C 5.558594 13.167969 5.6875 13.105469 5.78125 13.011719 C 5.875 12.914062 5.90625 12.757812 5.875 12.632812 C 5.84375 12.410156 5.84375 12.222656 5.84375 12 C 5.84375 9.472656 7.863281 7.421875 10.359375 7.421875 C 12.414062 7.421875 14.210938 8.84375 14.75 10.863281 C 14.8125 11.117188 15.066406 11.273438 15.316406 11.210938 C 15.726562 11.117188 16.105469 11.085938 16.519531 11.117188 C 18.382812 11.273438 19.832031 12.789062 19.898438 14.652344 C 19.929688 15.664062 19.550781 16.640625 18.855469 17.367188 Z M 18.855469 17.367188 \" />\n </>\n ),\n rain: (\n <>\n <path d=\"M 9.792969 19.011719 C 9.601562 19.011719 9.476562 19.136719 9.476562 19.328125 L 9.476562 21.316406 C 9.476562 21.503906 9.601562 21.632812 9.792969 21.632812 C 9.980469 21.632812 10.105469 21.503906 10.105469 21.316406 L 10.105469 19.328125 C 10.105469 19.136719 9.980469 19.011719 9.792969 19.011719 Z M 9.792969 19.011719 \" />\n <path d=\"M 9.792969 15.664062 C 9.601562 15.664062 9.476562 15.789062 9.476562 15.980469 L 9.476562 17.335938 C 9.476562 17.527344 9.601562 17.652344 9.792969 17.652344 C 9.980469 17.652344 10.105469 17.527344 10.105469 17.335938 L 10.105469 15.980469 C 10.105469 15.789062 9.980469 15.664062 9.792969 15.664062 Z M 9.792969 15.664062 \" />\n <path d=\"M 9.792969 12.472656 C 9.601562 12.472656 9.476562 12.601562 9.476562 12.789062 L 9.476562 14.019531 C 9.476562 14.210938 9.601562 14.335938 9.792969 14.335938 C 9.980469 14.335938 10.105469 14.210938 10.105469 14.019531 L 10.105469 12.789062 C 10.105469 12.601562 9.980469 12.472656 9.792969 12.472656 Z M 9.792969 12.472656 \" />\n <path d=\"M 12 18.316406 C 11.8125 18.316406 11.6875 18.441406 11.6875 18.632812 L 11.6875 19.769531 C 11.6875 19.957031 11.8125 20.085938 12 20.085938 C 12.191406 20.085938 12.316406 19.957031 12.316406 19.769531 L 12.316406 18.632812 C 12.316406 18.441406 12.191406 18.316406 12 18.316406 Z M 12 18.316406 \" />\n <path d=\"M 12 15.535156 C 11.8125 15.535156 11.6875 15.664062 11.6875 15.851562 L 11.6875 16.894531 C 11.6875 17.085938 11.8125 17.210938 12 17.210938 C 12.191406 17.210938 12.316406 17.085938 12.316406 16.894531 L 12.316406 15.851562 C 12.316406 15.695312 12.191406 15.535156 12 15.535156 Z M 12 15.535156 \" />\n <path d=\"M 12 12.472656 C 11.8125 12.472656 11.6875 12.601562 11.6875 12.789062 L 11.6875 13.957031 C 11.6875 14.148438 11.8125 14.273438 12 14.273438 C 12.191406 14.273438 12.316406 14.148438 12.316406 13.957031 L 12.316406 12.789062 C 12.316406 12.601562 12.191406 12.472656 12 12.472656 Z M 12 12.472656 \" />\n <path d=\"M 14.210938 17.367188 C 14.023438 17.367188 13.898438 17.496094 13.898438 17.683594 L 13.898438 18.316406 C 13.898438 18.503906 14.023438 18.632812 14.210938 18.632812 C 14.402344 18.632812 14.527344 18.503906 14.527344 18.316406 L 14.527344 17.683594 C 14.527344 17.496094 14.402344 17.367188 14.210938 17.367188 Z M 14.210938 17.367188 \" />\n <path d=\"M 14.210938 15.03125 C 14.023438 15.03125 13.898438 15.15625 13.898438 15.347656 L 13.898438 16.042969 C 13.898438 16.230469 14.023438 16.359375 14.210938 16.359375 C 14.402344 16.359375 14.527344 16.230469 14.527344 16.042969 L 14.527344 15.347656 C 14.527344 15.191406 14.402344 15.03125 14.210938 15.03125 Z M 14.210938 15.03125 \" />\n <path d=\"M 14.210938 12.472656 C 14.023438 12.472656 13.898438 12.601562 13.898438 12.789062 L 13.898438 13.707031 C 13.898438 13.894531 14.023438 14.019531 14.210938 14.019531 C 14.402344 14.019531 14.527344 13.894531 14.527344 13.707031 L 14.527344 12.789062 C 14.527344 12.601562 14.402344 12.472656 14.210938 12.472656 Z M 14.210938 12.472656 \" />\n <path d=\"M 17.246094 7.800781 C 16.898438 7.769531 16.519531 7.769531 16.171875 7.832031 C 15.414062 5.621094 13.359375 4.105469 10.992188 4.105469 C 7.992188 4.105469 5.527344 6.601562 5.527344 9.632812 C 5.527344 9.726562 5.527344 9.789062 5.527344 9.882812 C 4.738281 10.011719 4.042969 10.390625 3.507812 10.957031 C 2.84375 11.652344 2.496094 12.570312 2.527344 13.546875 C 2.589844 15.441406 4.265625 17.050781 6.191406 17.050781 L 7.421875 17.050781 C 7.675781 17.050781 7.898438 16.832031 7.898438 16.578125 C 7.898438 16.328125 7.644531 16.105469 7.390625 16.105469 L 6.160156 16.105469 C 4.738281 16.105469 3.507812 14.9375 3.445312 13.515625 C 3.414062 12.789062 3.664062 12.125 4.171875 11.621094 C 4.644531 11.117188 5.339844 10.800781 6.035156 10.800781 C 6.160156 10.800781 6.285156 10.738281 6.382812 10.640625 C 6.476562 10.546875 6.507812 10.421875 6.476562 10.261719 C 6.445312 10.042969 6.445312 9.851562 6.445312 9.632812 C 6.445312 7.105469 8.464844 5.050781 10.960938 5.050781 C 13.011719 5.050781 14.8125 6.472656 15.347656 8.496094 C 15.414062 8.746094 15.664062 8.90625 15.917969 8.84375 C 16.328125 8.746094 16.707031 8.714844 17.117188 8.746094 C 19.011719 8.90625 20.464844 10.421875 20.527344 12.285156 C 20.558594 13.292969 20.179688 14.273438 19.484375 15 C 18.792969 15.726562 17.84375 16.105469 16.832031 16.105469 L 16.738281 16.105469 C 16.484375 16.105469 16.265625 16.328125 16.265625 16.578125 C 16.265625 16.832031 16.484375 17.050781 16.738281 17.050781 L 16.832031 17.050781 C 18.097656 17.050781 19.296875 16.546875 20.148438 15.664062 C 21.035156 14.746094 21.476562 13.546875 21.445312 12.253906 C 21.414062 9.914062 19.582031 7.988281 17.246094 7.800781 Z M 17.246094 7.800781 \" />\n </>\n ),\n snow: (\n <>\n <path d=\"M 12.035156 13.894531 C 12.558594 13.894531 12.980469 13.46875 12.980469 12.949219 C 12.980469 12.425781 12.558594 12 12.035156 12 C 11.511719 12 11.085938 12.425781 11.085938 12.949219 C 11.085938 13.46875 11.511719 13.894531 12.035156 13.894531 Z M 12.035156 13.894531 \" />\n <path d=\"M 12.035156 17.367188 C 12.558594 17.367188 12.980469 16.945312 12.980469 16.421875 C 12.980469 15.898438 12.558594 15.472656 12.035156 15.472656 C 11.511719 15.472656 11.085938 15.898438 11.085938 16.421875 C 11.085938 16.945312 11.511719 17.367188 12.035156 17.367188 Z M 12.035156 17.367188 \" />\n <path d=\"M 14.527344 15.789062 C 15.050781 15.789062 15.476562 15.367188 15.476562 14.84375 C 15.476562 14.320312 15.050781 13.894531 14.527344 13.894531 C 14.003906 13.894531 13.582031 14.320312 13.582031 14.84375 C 13.582031 15.367188 14.003906 15.789062 14.527344 15.789062 Z M 14.527344 15.789062 \" />\n <path d=\"M 14.527344 19.261719 C 15.050781 19.261719 15.476562 18.839844 15.476562 18.316406 C 15.476562 17.792969 15.050781 17.367188 14.527344 17.367188 C 14.003906 17.367188 13.582031 17.792969 13.582031 18.316406 C 13.582031 18.839844 14.003906 19.261719 14.527344 19.261719 Z M 14.527344 19.261719 \" />\n <path d=\"M 9.476562 15.789062 C 10 15.789062 10.421875 15.367188 10.421875 14.84375 C 10.421875 14.320312 10 13.894531 9.476562 13.894531 C 8.953125 13.894531 8.527344 14.320312 8.527344 14.84375 C 8.527344 15.367188 8.953125 15.789062 9.476562 15.789062 Z M 9.476562 15.789062 \" />\n <path d=\"M 9.476562 19.261719 C 10 19.261719 10.421875 18.839844 10.421875 18.316406 C 10.421875 17.792969 10 17.367188 9.476562 17.367188 C 8.953125 17.367188 8.527344 17.792969 8.527344 18.316406 C 8.527344 18.839844 8.953125 19.261719 9.476562 19.261719 Z M 9.476562 19.261719 \" />\n <path d=\"M 12.035156 20.84375 C 12.558594 20.84375 12.980469 20.417969 12.980469 19.894531 C 12.980469 19.371094 12.558594 18.949219 12.035156 18.949219 C 11.511719 18.949219 11.085938 19.371094 11.085938 19.894531 C 11.085938 20.417969 11.511719 20.84375 12.035156 20.84375 Z M 12.035156 20.84375 \" />\n <path d=\"M 17.246094 7.800781 C 16.898438 7.769531 16.519531 7.769531 16.171875 7.832031 C 15.414062 5.621094 13.359375 4.105469 10.992188 4.105469 C 7.992188 4.105469 5.527344 6.601562 5.527344 9.632812 C 5.527344 9.726562 5.527344 9.789062 5.527344 9.882812 C 4.738281 10.011719 4.042969 10.390625 3.507812 10.957031 C 2.84375 11.652344 2.496094 12.570312 2.527344 13.546875 C 2.589844 15.441406 4.265625 17.050781 6.191406 17.050781 L 7.421875 17.050781 C 7.675781 17.050781 7.898438 16.832031 7.898438 16.578125 C 7.898438 16.328125 7.644531 16.105469 7.390625 16.105469 L 6.160156 16.105469 C 4.738281 16.105469 3.507812 14.9375 3.445312 13.515625 C 3.414062 12.789062 3.664062 12.125 4.171875 11.621094 C 4.644531 11.117188 5.339844 10.800781 6.035156 10.800781 C 6.160156 10.800781 6.285156 10.738281 6.382812 10.640625 C 6.476562 10.546875 6.507812 10.421875 6.476562 10.261719 C 6.445312 10.042969 6.445312 9.851562 6.445312 9.632812 C 6.445312 7.105469 8.464844 5.050781 10.960938 5.050781 C 13.011719 5.050781 14.8125 6.472656 15.347656 8.496094 C 15.414062 8.746094 15.664062 8.90625 15.917969 8.84375 C 16.328125 8.746094 16.707031 8.714844 17.117188 8.746094 C 19.011719 8.90625 20.464844 10.421875 20.527344 12.285156 C 20.558594 13.292969 20.179688 14.273438 19.484375 15 C 18.792969 15.726562 17.84375 16.105469 16.832031 16.105469 L 16.738281 16.105469 C 16.484375 16.105469 16.265625 16.328125 16.265625 16.578125 C 16.265625 16.832031 16.484375 17.050781 16.738281 17.050781 L 16.832031 17.050781 C 18.097656 17.050781 19.296875 16.546875 20.148438 15.664062 C 21.035156 14.746094 21.476562 13.546875 21.445312 12.253906 C 21.414062 9.914062 19.582031 7.988281 17.246094 7.800781 Z M 17.246094 7.800781 \" />\n </>\n ),\n sunny: (\n <>\n <path d=\"M 11.96875 4.390625 C 7.769531 4.390625 4.390625 7.769531 4.390625 11.96875 C 4.390625 16.167969 7.769531 19.546875 11.96875 19.546875 C 16.167969 19.546875 19.546875 16.167969 19.546875 11.96875 C 19.546875 7.769531 16.167969 4.390625 11.96875 4.390625 Z M 11.96875 18.601562 C 8.304688 18.601562 5.335938 15.632812 5.335938 11.96875 C 5.335938 8.304688 8.304688 5.335938 11.96875 5.335938 C 15.632812 5.335938 18.601562 8.304688 18.601562 11.96875 C 18.601562 15.632812 15.632812 18.601562 11.96875 18.601562 Z M 11.96875 18.601562 \" />\n <path d=\"M 11.96875 3.441406 C 12.15625 3.441406 12.285156 3.316406 12.285156 3.125 L 12.285156 0.316406 C 12.285156 0.125 12.15625 0 11.96875 0 C 11.777344 0 11.652344 0.125 11.652344 0.316406 L 11.652344 3.125 C 11.652344 3.316406 11.777344 3.441406 11.96875 3.441406 Z M 11.96875 3.441406 \" />\n <path d=\"M 7.832031 2.808594 L 8.304688 3.914062 C 8.367188 4.042969 8.464844 4.105469 8.589844 4.105469 C 8.621094 4.105469 8.683594 4.105469 8.714844 4.074219 C 8.875 4.011719 8.96875 3.820312 8.875 3.664062 L 8.398438 2.558594 C 8.335938 2.398438 8.148438 2.304688 7.988281 2.398438 C 7.832031 2.464844 7.769531 2.652344 7.832031 2.808594 Z M 7.832031 2.808594 \" />\n <path d=\"M 15.632812 20.019531 C 15.570312 19.863281 15.378906 19.769531 15.222656 19.863281 C 15.0625 19.925781 14.96875 20.117188 15.0625 20.273438 L 15.535156 21.378906 C 15.601562 21.503906 15.695312 21.570312 15.820312 21.570312 C 15.851562 21.570312 15.914062 21.570312 15.949219 21.535156 C 16.105469 21.472656 16.199219 21.285156 16.105469 21.125 Z M 15.632812 20.019531 \" />\n <path d=\"M 19.832031 8.714844 C 19.894531 8.84375 19.988281 8.90625 20.117188 8.90625 C 20.148438 8.90625 20.210938 8.90625 20.242188 8.875 L 21.347656 8.398438 C 21.503906 8.335938 21.601562 8.148438 21.503906 7.988281 C 21.410156 7.832031 21.253906 7.738281 21.09375 7.832031 L 19.988281 8.304688 C 19.863281 8.367188 19.769531 8.558594 19.832031 8.714844 Z M 19.832031 8.714844 \" />\n <path d=\"M 4.105469 15.222656 C 4.042969 15.0625 3.851562 14.96875 3.695312 15.0625 L 2.589844 15.535156 C 2.429688 15.601562 2.335938 15.789062 2.429688 15.949219 C 2.496094 16.074219 2.589844 16.136719 2.714844 16.136719 C 2.746094 16.136719 2.808594 16.136719 2.84375 16.105469 L 3.949219 15.632812 C 4.074219 15.570312 4.167969 15.378906 4.105469 15.222656 Z M 4.105469 15.222656 \" />\n <path d=\"M 15.222656 4.105469 C 15.253906 4.136719 15.316406 4.136719 15.347656 4.136719 C 15.472656 4.136719 15.601562 4.074219 15.632812 3.949219 L 16.105469 2.84375 C 16.167969 2.683594 16.105469 2.496094 15.949219 2.429688 C 15.789062 2.367188 15.601562 2.429688 15.535156 2.589844 L 15.0625 3.695312 C 15 3.851562 15.0625 4.042969 15.222656 4.105469 Z M 15.222656 4.105469 \" />\n <path d=\"M 8.714844 19.832031 C 8.558594 19.769531 8.367188 19.832031 8.304688 19.988281 L 7.832031 21.125 C 7.769531 21.285156 7.832031 21.472656 7.988281 21.535156 C 8.019531 21.570312 8.085938 21.570312 8.117188 21.570312 C 8.242188 21.570312 8.367188 21.503906 8.398438 21.378906 L 8.875 20.273438 C 8.9375 20.085938 8.875 19.894531 8.714844 19.832031 Z M 8.714844 19.832031 \" />\n <path d=\"M 21.378906 15.503906 L 20.273438 15.03125 C 20.117188 14.96875 19.925781 15.03125 19.863281 15.1875 C 19.800781 15.347656 19.863281 15.535156 20.019531 15.601562 L 21.125 16.074219 C 21.15625 16.105469 21.222656 16.105469 21.253906 16.105469 C 21.378906 16.105469 21.503906 16.042969 21.535156 15.914062 C 21.601562 15.757812 21.535156 15.601562 21.378906 15.503906 Z M 21.378906 15.503906 \" />\n <path d=\"M 2.558594 8.429688 L 3.664062 8.90625 C 3.695312 8.9375 3.757812 8.9375 3.789062 8.9375 C 3.914062 8.9375 4.042969 8.875 4.074219 8.746094 C 4.136719 8.589844 4.074219 8.398438 3.914062 8.335938 L 2.808594 7.832031 C 2.652344 7.769531 2.464844 7.832031 2.398438 7.988281 C 2.335938 8.148438 2.398438 8.335938 2.558594 8.429688 Z M 2.558594 8.429688 \" />\n <path d=\"M 11.96875 20.496094 C 11.777344 20.496094 11.652344 20.621094 11.652344 20.8125 L 11.652344 23.621094 C 11.652344 23.8125 11.777344 23.9375 11.96875 23.9375 C 12.15625 23.9375 12.285156 23.8125 12.285156 23.621094 L 12.285156 20.8125 C 12.285156 20.621094 12.15625 20.496094 11.96875 20.496094 Z M 11.96875 20.496094 \" />\n <path d=\"M 23.621094 11.652344 L 20.808594 11.652344 C 20.621094 11.652344 20.496094 11.777344 20.496094 11.96875 C 20.496094 12.15625 20.621094 12.285156 20.808594 12.285156 L 23.621094 12.285156 C 23.808594 12.285156 23.9375 12.15625 23.9375 11.96875 C 23.9375 11.777344 23.777344 11.652344 23.621094 11.652344 Z M 23.621094 11.652344 \" />\n <path d=\"M 3.441406 11.96875 C 3.441406 11.777344 3.316406 11.652344 3.125 11.652344 L 0.316406 11.652344 C 0.125 11.652344 0 11.777344 0 11.96875 C 0 12.15625 0.125 12.285156 0.316406 12.285156 L 3.125 12.285156 C 3.316406 12.285156 3.441406 12.125 3.441406 11.96875 Z M 3.441406 11.96875 \" />\n <path d=\"M 18.222656 6.03125 C 18.316406 6.03125 18.378906 6 18.441406 5.9375 L 20.429688 3.949219 C 20.558594 3.820312 20.558594 3.632812 20.429688 3.503906 C 20.304688 3.378906 20.117188 3.378906 19.988281 3.503906 L 18 5.496094 C 17.875 5.621094 17.875 5.808594 18 5.9375 C 18.0625 6 18.125 6.03125 18.222656 6.03125 Z M 18.222656 6.03125 \" />\n <path d=\"M 5.496094 18 L 3.503906 19.988281 C 3.378906 20.117188 3.378906 20.304688 3.503906 20.429688 C 3.570312 20.496094 3.664062 20.527344 3.726562 20.527344 C 3.789062 20.527344 3.882812 20.496094 3.949219 20.429688 L 5.9375 18.441406 C 6.0625 18.316406 6.0625 18.125 5.9375 18 C 5.8125 17.875 5.621094 17.875 5.496094 18 Z M 5.496094 18 \" />\n <path d=\"M 18.441406 18 C 18.316406 17.875 18.125 17.875 18 18 C 17.875 18.125 17.875 18.316406 18 18.441406 L 19.988281 20.429688 C 20.050781 20.496094 20.148438 20.527344 20.210938 20.527344 C 20.273438 20.527344 20.367188 20.496094 20.429688 20.429688 C 20.558594 20.304688 20.558594 20.117188 20.429688 19.988281 Z M 18.441406 18 \" />\n <path d=\"M 5.496094 5.9375 C 5.558594 6 5.652344 6.03125 5.714844 6.03125 C 5.777344 6.03125 5.875 6 5.9375 5.9375 C 6.0625 5.808594 6.0625 5.621094 5.9375 5.496094 L 3.949219 3.503906 C 3.820312 3.378906 3.632812 3.378906 3.503906 3.503906 C 3.378906 3.632812 3.378906 3.820312 3.503906 3.949219 Z M 5.496094 5.9375 \" />\n </>\n ),\n thunderstorms: (\n <>\n <path d=\"M 17.246094 7.484375 C 16.898438 7.453125 16.519531 7.453125 16.171875 7.515625 C 15.414062 5.304688 13.359375 3.789062 10.992188 3.789062 C 7.992188 3.789062 5.527344 6.285156 5.527344 9.316406 C 5.527344 9.410156 5.527344 9.472656 5.527344 9.570312 C 4.738281 9.695312 4.042969 10.074219 3.507812 10.640625 C 2.84375 11.335938 2.496094 12.253906 2.527344 13.230469 C 2.589844 15.125 4.265625 16.738281 6.191406 16.738281 L 7.421875 16.738281 C 7.675781 16.738281 7.898438 16.515625 7.898438 16.261719 C 7.898438 16.011719 7.644531 15.789062 7.390625 15.789062 L 6.160156 15.789062 C 4.738281 15.789062 3.507812 14.621094 3.445312 13.199219 C 3.414062 12.472656 3.664062 11.808594 4.171875 11.304688 C 4.644531 10.800781 5.339844 10.484375 6.035156 10.484375 C 6.160156 10.484375 6.285156 10.421875 6.382812 10.328125 C 6.476562 10.230469 6.507812 10.105469 6.476562 9.949219 C 6.445312 9.726562 6.445312 9.535156 6.445312 9.316406 C 6.445312 6.789062 8.464844 4.738281 10.960938 4.738281 C 13.011719 4.738281 14.8125 6.15625 15.347656 8.179688 C 15.414062 8.429688 15.664062 8.589844 15.917969 8.527344 C 16.328125 8.429688 16.707031 8.398438 17.117188 8.429688 C 19.011719 8.589844 20.464844 10.105469 20.527344 11.96875 C 20.558594 12.980469 20.179688 13.957031 19.484375 14.683594 C 18.792969 15.410156 17.84375 15.789062 16.832031 15.789062 L 16.738281 15.789062 C 16.484375 15.789062 16.265625 16.011719 16.265625 16.261719 C 16.265625 16.515625 16.484375 16.738281 16.738281 16.738281 L 16.832031 16.738281 C 18.097656 16.738281 19.296875 16.230469 20.148438 15.347656 C 21.035156 14.429688 21.476562 13.230469 21.445312 11.9375 C 21.414062 9.601562 19.582031 7.671875 17.246094 7.484375 Z M 17.246094 7.484375 \" />\n <path d=\"M 14.527344 15.535156 L 13.421875 15.535156 L 14.527344 12.882812 C 14.65625 12.601562 14.558594 12.285156 14.308594 12.125 C 14.210938 12.03125 14.085938 12 13.960938 12 C 13.800781 12 13.644531 12.0625 13.550781 12.15625 L 9.128906 16.105469 C 8.9375 16.292969 8.875 16.546875 8.96875 16.800781 C 9.066406 17.050781 9.285156 17.210938 9.570312 17.210938 L 10.675781 17.210938 L 9.476562 19.988281 C 9.347656 20.273438 9.445312 20.589844 9.695312 20.746094 C 9.792969 20.8125 9.917969 20.875 10.042969 20.875 C 10.203125 20.875 10.359375 20.8125 10.453125 20.714844 L 14.90625 16.640625 C 15.035156 16.515625 15.128906 16.359375 15.128906 16.167969 C 15.160156 15.820312 14.875 15.535156 14.527344 15.535156 Z M 10.074219 20.242188 L 11.402344 17.019531 L 11.9375 16.578125 L 9.539062 16.578125 L 13.960938 12.632812 L 12.695312 15.695312 C 12.601562 15.949219 12.695312 16.167969 12.980469 16.167969 L 14.558594 16.167969 Z M 10.074219 20.242188 \" />\n </>\n ),\n undoCircle: (\n <>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M-0.000124931 11.9995C-0.000124931 5.3827 5.35788 -0.000488281 11.9435 -0.000488281C18.5914 -0.000488281 23.9999 5.3827 23.9999 11.9995C23.9999 18.6163 18.6166 23.9994 11.9999 23.9994C5.38308 23.9994 -0.000124931 18.6163 -0.000124931 11.9995ZM2.39988 11.9995C2.39988 17.2926 6.70667 21.5995 11.9999 21.5995C17.2931 21.5995 21.5999 17.2926 21.5999 11.9995C21.5999 6.70631 17.2691 2.39951 11.9435 2.39951C6.68028 2.39951 2.39988 6.70631 2.39988 11.9995ZM14.3997 10.7995H9.59969V12.7994L5.59968 9.59941L9.59969 6.39941V8.79941H14.3997C16.6054 8.79941 18.3997 10.5938 18.3997 12.7994C18.3997 15.005 16.6054 16.7994 14.3997 16.7994H11.9997V14.8795H14.3997C15.723 14.8795 16.5565 14.1227 16.5565 12.7994C16.5565 11.4762 15.723 10.7995 14.3997 10.7995Z\"\n />\n </>\n ),\n windy: (\n <>\n <path d=\"M 23.429688 12.695312 L 23.210938 12.695312 C 22.957031 12.695312 22.738281 12.914062 22.738281 13.167969 C 22.738281 13.421875 22.957031 13.640625 23.210938 13.640625 L 23.429688 13.640625 C 23.683594 13.640625 23.90625 13.421875 23.90625 13.167969 C 23.90625 12.914062 23.683594 12.695312 23.429688 12.695312 Z M 23.429688 12.695312 \" />\n <path d=\"M 23.527344 12.695312 L 17.210938 12.695312 C 16.957031 12.695312 16.738281 12.914062 16.738281 13.167969 C 16.738281 13.421875 16.957031 13.640625 17.210938 13.640625 L 23.527344 13.640625 C 23.777344 13.640625 24 13.421875 24 13.167969 C 24 12.914062 23.777344 12.695312 23.527344 12.695312 Z M 23.527344 12.695312 \" />\n <path d=\"M 5.273438 14.9375 C 5.019531 14.9375 4.800781 15.15625 4.800781 15.410156 C 4.800781 16.390625 4.011719 17.179688 3.03125 17.179688 C 2.050781 17.179688 1.261719 16.390625 1.261719 15.410156 C 1.261719 14.429688 2.050781 13.640625 3.03125 13.640625 L 15 13.640625 C 15.253906 13.640625 15.472656 13.421875 15.472656 13.167969 C 15.472656 12.914062 15.253906 12.695312 15 12.695312 L 3.03125 12.695312 C 1.546875 12.695312 0.316406 13.925781 0.316406 15.410156 C 0.316406 16.894531 1.546875 18.125 3.03125 18.125 C 4.515625 18.125 5.746094 16.894531 5.746094 15.410156 C 5.746094 15.15625 5.527344 14.9375 5.273438 14.9375 Z M 5.273438 14.9375 \" />\n <path d=\"M 20.96875 15.535156 L 20.683594 15.535156 C 20.429688 15.535156 20.210938 15.757812 20.210938 16.011719 C 20.210938 16.261719 20.429688 16.484375 20.683594 16.484375 L 20.96875 16.484375 C 21.222656 16.484375 21.441406 16.261719 21.441406 16.011719 C 21.441406 15.757812 21.222656 15.535156 20.96875 15.535156 Z M 20.96875 15.535156 \" />\n <path d=\"M 21 15.535156 L 10.925781 15.535156 C 10.671875 15.535156 10.453125 15.757812 10.453125 16.011719 C 10.453125 16.261719 10.671875 16.484375 10.925781 16.484375 L 21 16.484375 C 21.253906 16.484375 21.472656 16.261719 21.472656 16.011719 C 21.472656 15.757812 21.253906 15.535156 21 15.535156 Z M 21 15.535156 \" />\n <path d=\"M 18.15625 10.800781 L 18.503906 10.800781 C 18.757812 10.800781 18.980469 10.578125 18.980469 10.328125 C 18.980469 10.074219 18.757812 9.851562 18.503906 9.851562 L 18.15625 9.851562 C 17.90625 9.851562 17.683594 10.074219 17.683594 10.328125 C 17.683594 10.578125 17.90625 10.800781 18.15625 10.800781 Z M 18.15625 10.800781 \" />\n <path d=\"M 5.90625 10.800781 L 18.15625 10.800781 C 18.410156 10.800781 18.632812 10.578125 18.632812 10.328125 C 18.632812 10.074219 18.410156 9.851562 18.15625 9.851562 L 5.90625 9.851562 C 4.925781 9.851562 4.136719 9.0625 4.136719 8.085938 C 4.136719 7.105469 4.925781 6.316406 5.90625 6.316406 C 6.882812 6.316406 7.671875 7.105469 7.671875 8.085938 C 7.671875 8.335938 7.894531 8.558594 8.148438 8.558594 C 8.398438 8.558594 8.621094 8.335938 8.621094 8.085938 C 8.621094 6.601562 7.390625 5.367188 5.90625 5.367188 C 4.421875 5.367188 3.191406 6.601562 3.191406 8.085938 C 3.191406 9.570312 4.421875 10.800781 5.90625 10.800781 Z M 5.90625 10.800781 \" />\n </>\n ),\n circle: (\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2Z\" />\n ),\n checkCircleFilled: (\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM10.001 16.413L6.288 12.708L7.7 11.292L9.999 13.587L15.293 8.293L16.707 9.707L10.001 16.413Z\" />\n ),\n cart: (\n <>\n <path d=\"M21.822 7.431C21.635 7.161 21.328 7 21 7H7.333L6.179 4.23C5.867 3.482 5.143 3 4.333 3H2V5H4.333L9.077 16.385C9.232 16.757 9.596 17 10 17H18C18.417 17 18.79 16.741 18.937 16.352L21.937 8.352C22.052 8.044 22.009 7.7 21.822 7.431ZM17.307 15H10.667L8.167 9H19.557L17.307 15Z\" />\n <path d=\"M10.5 21C11.3284 21 12 20.3284 12 19.5C12 18.6716 11.3284 18 10.5 18C9.67157 18 9 18.6716 9 19.5C9 20.3284 9.67157 21 10.5 21Z\" />\n <path d=\"M17.5 21C18.3284 21 19 20.3284 19 19.5C19 18.6716 18.3284 18 17.5 18C16.6716 18 16 18.6716 16 19.5C16 20.3284 16.6716 21 17.5 21Z\" />\n </>\n ),\n programChange: (\n <path\n d=\"M3.371 2.373c-1.259.729-2.274 1.34-2.256 1.358.018.018 1.057.624 2.309 1.346L5.7 6.39l.011-.955.01-.955h6.798l.01.955.011.956 2.278-1.316a159.652 159.652 0 0 0 2.309-1.346c.023-.023-4.384-2.608-4.573-2.682-.019-.008-.034.42-.034.95v.963h-6.8V2c0-.528-.013-.958-.03-.957-.016.002-1.06.6-2.319 1.33M1.24 15.54v7.9h15.84V7.64H1.24v7.9m19.506-7.654L19.404 10.2l-1.241 2.14.979.011.978.01v6.398l-.972.01-.973.011 1.329 2.293c.73 1.261 1.336 2.3 1.346 2.31.017.017 2.67-4.553 2.67-4.6 0-.013-.432-.023-.96-.023h-.96v-6.4h.96c.528 0 .96-.015.96-.033 0-.037-2.587-4.528-2.639-4.581-.018-.019-.079.044-.135.14M15.08 15.54v5.9H3.28V9.64h11.8v5.9\"\n fillRule=\"evenodd\"\n />\n ),\n architectural: (\n <path\n d=\"M19.42.256a3.573 3.573 0 0 0-.981.282c-1.12.472-2.032 1.538-2.337 2.732-.049.192-.133.82-.141 1.06-.001.016-3.565.03-7.921.03H.12V24h10.344c11.484 0 10.482.024 11.176-.269a4.103 4.103 0 0 0 2.24-2.304l.12-.314V3.314l-.1-.298a3.968 3.968 0 0 0-.99-1.61A4.136 4.136 0 0 0 20.9.3c-.437-.09-1.089-.11-1.48-.044m1.096 2.006c.7.165 1.299.73 1.5 1.415.057.195.064.865.064 6.45 0 3.428-.007 6.233-.016 6.233-.009 0-.148-.063-.31-.14-.396-.188-.986-.332-1.484-.363-.68-.041-1.486.123-2.05.418l-.235.12c-.02.009-.027-2.647-.015-6.24.019-5.745.027-6.273.089-6.475a2.079 2.079 0 0 1 2.457-1.418M15.958 13.41c-.01 6.574-.006 7.071.059 7.368.08.364.264.889.382 1.089a.667.667 0 0 1 .081.175c0 .024-2.703.038-7.16.038H2.16V6.36h13.808l-.01 7.05m-9.005-1.685c-2.623 2.255-2.651 2.28-2.754 2.479-.412.796.403 1.684 1.261 1.375.088-.032.165-.058.17-.058.005-.001.01.647.01 1.439v1.44H13v-3.084l.15.03c.376.074.66 0 .923-.241.229-.211.325-.421.326-.716a.886.886 0 0 0-.251-.663c-.133-.14-4.806-4.006-4.842-4.006-.011 0-1.07.902-2.353 2.005m3.277 1.334.77.633V16.4H7.64v-2.626l.847-.727c.737-.634.854-.721.91-.674.034.03.409.338.833.686m10.511 4.898c.446.157.876.515 1.141.952l.138.227.013.595c.011.509.001.634-.069.864a2.083 2.083 0 0 1-1.425 1.384c-1.077.28-2.195-.367-2.515-1.456-.092-.314-.084-.888.016-1.215.21-.678.833-1.251 1.536-1.411.326-.075.86-.047 1.165.06\"\n fillRule=\"evenodd\"\n />\n ),\n structural: (\n <path d=\"M7.304 4.48C3.778 7.516 2.447 8.64 2.377 8.64c-.073 0-.098.022-.1.09-.002.066-.224.28-.844.81-.949.812-1.04.928-1.044 1.343-.001.126.022.29.052.363.208.521.803.782 1.31.575.094-.039.458-.317.819-.626l.648-.555H4.28v-.917l3.869-3.332c2.127-1.832 3.907-3.362 3.954-3.399.084-.068.15-.015 3.781 2.982l3.696 3.051.011.807.011.808H21.531l.275.222c.339.274.511.35.794.35.38 0 .705-.201.892-.552.064-.119.086-.231.086-.44 0-.319-.083-.517-.304-.727C23.091 9.321 12.186.321 12.158.32c-.012 0-2.196 1.872-4.854 4.16M2.29 15.67l.01 2.03.99.011.99.01V13.64H2.279l.011 2.03m17.31.011v2.04l.99-.01.99-.011.01-2.03.011-2.03H19.6v2.041M2.28 21.793c0 1.166.025 1.322.259 1.595.078.091.227.207.331.258.183.091.231.094 1.3.107l1.11.013v-2.004l-.49-.011-.49-.011-.011-.49-.011-.49H2.28v1.033m17.311-.543-.011.49-.49.011-.49.011v2.004l1.11-.013c1.069-.013 1.117-.016 1.3-.107.104-.051.253-.167.331-.258.234-.273.259-.429.259-1.595V20.76h-1.998l-.011.49M7.64 22.76v1h3.12v-2H7.64v1m5.48 0v1h3.12v-2h-3.12v1\" />\n ),\n mep: (\n <path\n d=\"M8.32.262a2.994 2.994 0 0 0-.56.203c-.397.194-.922.713-1.109 1.097-.243.497-.25.572-.25 2.787L6.4 6.359l-1.33.01-1.33.011-.01 2.55-.011 2.55H5.274l.017 1.53c.018 1.686.026 1.752.296 2.55a5.657 5.657 0 0 0 3.483 3.52l.369.131.011 2.364.01 2.365 2.55.01 2.55.011v-4.715l.218-.064a5.731 5.731 0 0 0 3.936-4.122c.137-.554.166-.956.166-2.286V11.48H20.281l-.011-2.55-.01-2.55-1.308-.011-1.308-.01-.012-2.07-.012-2.069-.112-.32A2.565 2.565 0 0 0 15.913.316c-.251-.082-.37-.096-.833-.095-.615.001-.856.055-1.28.288-.375.206-.831.68-1.015 1.054-.253.515-.264.624-.264 2.827l-.001 1.97h-.994l-.017-2.05c-.013-1.697-.027-2.086-.078-2.256C11.155 1.13 10.437.451 9.536.26A3.38 3.38 0 0 0 8.32.262m.92 1.998c.247.128.24.07.24 1.989V6H8.4V4.278c0-1.88.001-1.891.231-2.015.142-.078.462-.079.609-.003m6.152.021c.244.149.248.179.248 2.038V6h-1.122l.011-1.757.011-1.757.1-.107a.68.68 0 0 1 .18-.141.775.775 0 0 1 .572.043M18.24 8.92v.56H5.76V8.36h12.48v.56m-1.37 4.03c-.015 1.219-.025 1.38-.101 1.659-.367 1.335-1.313 2.297-2.637 2.681-.303.087-.363.09-2.072.09H10.3l-.358-.112c-1.241-.388-2.15-1.298-2.527-2.528-.11-.358-.11-.368-.126-1.75l-.015-1.39h9.613l-.017 1.35m-4.31 7.731v1.281l-.55-.011-.55-.011-.011-1.27-.01-1.27h1.121v1.281\"\n fillRule=\"evenodd\"\n />\n ),\n designPackage: (\n <path\n d=\"M6.591 5.633A1308.744 1308.744 0 0 0 .876 10.58c-.445.429-.438 1.092.016 1.481.165.141.469.259.668.259.181 0 .452-.115.66-.28l.2-.158.01 4.759.01 4.759h19.52v-4.94c0-2.717.007-4.94.015-4.94s.091.027.185.06c.213.075.333.075.584.001.699-.208.942-1.094.444-1.615-.07-.073-.772-.665-1.56-1.315L20.197 7.47l.614-.625c.338-.344.681-.724.762-.845.289-.428.427-1.092.348-1.672-.092-.669-.347-1.197-.8-1.649-.516-.517-1.076-.756-1.841-.789-.391-.017-.509-.007-.779.067-.559.154-.72.268-1.654 1.173-.471.457-.868.83-.883.83-.015 0-.878-.702-1.919-1.56A241.53 241.53 0 0 0 12.146.843l-5.555 4.79m6.769-1.207c.627.518 1.14.954 1.14.968 0 .014-1.242 1.243-2.76 2.73l-2.76 2.703-.606 2.537a134.196 134.196 0 0 0-.595 2.547c.006.007 1.115-.207 2.466-.474l2.455-.486 3.04-3.032 3.04-3.032.568.466.567.467.003 4.79.002 4.79H4.44v-9.268l3.85-3.323c2.118-1.828 3.868-3.324 3.89-3.325.022-.001.553.423 1.18.942m6.256-.412c.202.155.304.372.304.652v.228l-.628.633c-.346.348-.641.633-.657.633-.024 0-.908-.711-1.067-.859-.042-.039.09-.184.672-.739l.725-.691.253.016c.199.013.283.04.398.127M16.657 7.14c.297.242.54.449.541.46.001.011-1.231 1.253-2.738 2.76l-2.74 2.74-.63.126c-.347.07-.635.122-.64.117-.006-.006.073-.351.175-.767l.185-.756 2.625-2.568c1.444-1.413 2.638-2.565 2.653-2.56.016.004.272.206.569.448\"\n fillRule=\"evenodd\"\n />\n ),\n updateDesignPackage: (\n <path\n d=\"M6.34 5.463C3.37 8.025.798 10.25.624 10.408c-.371.338-.478.537-.475.881a.953.953 0 0 0 .343.732c.165.141.469.259.67.259.173 0 .44-.111.636-.264l.182-.141.01 4.742L2 21.36h6.573c7.298 0 6.786.019 7.082-.269.234-.226.322-.427.322-.731 0-.393-.189-.697-.556-.894l-.161-.086-5.61-.011-5.61-.01v-9.267l3.863-3.329c2.125-1.831 3.884-3.32 3.91-3.309.067.029 2.285 1.867 2.299 1.905.006.017-1.116 1.136-2.494 2.486L9.112 10.3l-.213.012-.213.012-.062.268c-.033.147-.331 1.401-.662 2.785a111.038 111.038 0 0 0-.589 2.529c.007.007 1.118-.205 2.47-.471l2.457-.484 3.046-3.042 3.047-3.042.562.469.562.468.011 2.528c.012 2.477.014 2.532.097 2.711.108.235.337.456.56.541.209.08.612.061.803-.038.182-.094.374-.301.468-.506.08-.172.085-.255.096-1.87.007-.93.018-1.69.025-1.69.007 0 .083.029.168.065.196.082.539.056.762-.058.189-.097.398-.323.484-.524.126-.298.05-.767-.163-.997a34.338 34.338 0 0 0-1.108-.939 1093.61 1093.61 0 0 1-1.473-1.22l-.453-.376.678-.685c.738-.748.872-.943.993-1.456.089-.378.056-1.131-.065-1.49-.256-.759-.754-1.328-1.461-1.666a2.682 2.682 0 0 0-1.199-.252 2.34 2.34 0 0 0-1.139.263c-.306.151-.344.184-1.681 1.483l-.34.33-1.914-1.579a242.13 242.13 0 0 0-1.92-1.576c-.003.001-2.436 2.098-5.406 4.66m12.782-1.502c.235.12.371.352.391.666l.017.258-.638.641-.637.641-.497-.409a26.934 26.934 0 0 1-.557-.464c-.051-.047-.001-.114.38-.498.241-.244.561-.55.71-.68.253-.221.284-.236.472-.236.122 0 .262.032.359.081m-2.656 3.323.366.304-2.756 2.756L11.32 13.1l-.63.126c-.347.07-.636.121-.644.113a9.854 9.854 0 0 1 .159-.738l.173-.726.901-.892c.495-.491 1.693-1.667 2.661-2.614l1.759-1.72.201.165c.11.09.365.302.566.47m3.854 9.601c-.366.07-.687.404-.76.79-.022.119-.04.545-.04.948v.732l-.89.012c-.822.012-.902.02-1.05.099a1.007 1.007 0 0 0-.538.894c0 .377.202.712.538.894.148.079.228.087 1.046.099l.886.012.014.868c.013.809.02.879.106 1.054.051.104.163.251.248.328.149.134.474.265.66.265.186 0 .511-.131.66-.265.085-.077.197-.224.248-.328.086-.175.093-.245.106-1.054l.014-.868.886-.012c.962-.014 1.019-.026 1.28-.268.199-.185.266-.366.266-.725s-.067-.54-.266-.725c-.261-.242-.318-.254-1.28-.268l-.886-.012-.016-.868c-.017-.949-.034-1.029-.269-1.297-.225-.257-.599-.375-.963-.305\"\n fillRule=\"evenodd\"\n />\n ),\n exteriorStyle: (\n <path\n d=\"m11.378 2.08-1.158.998-.078-.109a6.796 6.796 0 0 0-.36-.405 4.617 4.617 0 0 0-4.099-1.383c-1.436.233-2.759 1.221-3.384 2.527-.35.73-.478 1.362-.446 2.192.023.599.106 1.025.292 1.488l.104.26-.157.166A6.027 6.027 0 0 0 .787 9.985a5.927 5.927 0 0 0-.001 3.855c.292.87.765 1.625 1.437 2.297a5.61 5.61 0 0 0 1.389 1.044l.349.186-.011 2.206-.01 2.207-1.97.01-1.97.011V23.8h24v-2h-1.52v-9.918l.185.117a.96.96 0 0 0 1.16-.088L24 11.75v-1.173l-.17-.165c-.093-.09-2.645-2.202-5.67-4.693a5312.503 5312.503 0 0 1-5.562-4.583c-.053-.046-.217.081-1.22.944M7.24 3.235c.756.241 1.446.931 1.684 1.685.115.363.141.94.06 1.319-.091.426-.279.79-.7 1.355-.203.272-.364.498-.357.504l.513.371c.275.199.598.449.718.556.477.428.946 1.215 1.13 1.895.079.293.092.434.091 1.02 0 .588-.013.723-.092.999-.394 1.371-1.392 2.39-2.749 2.807-.332.102-.41.11-1.078.112-.636.002-.757-.009-1.04-.09-1.153-.332-2.032-1.061-2.542-2.108-.323-.663-.378-.918-.375-1.74.002-.833.062-1.108.377-1.748.347-.703.705-1.093 1.56-1.7.253-.18.475-.339.493-.355.019-.015-.133-.25-.336-.522-.563-.753-.756-1.238-.756-1.895 0-1.182.858-2.263 1.999-2.52.362-.082 1.056-.054 1.4.055m9.305 3.745c2.917 2.404 3.954 3.281 3.952 3.34-.001.044-.006 2.501-.01 5.46l-.007 5.38H8.92v-3.793l.348-.186a5.61 5.61 0 0 0 1.389-1.044 5.558 5.558 0 0 0 1.082-1.465c1.153-2.22.814-4.862-.867-6.761l-.238-.269.103-.258c.22-.55.28-.906.282-1.664.001-.686.003-.702.095-.776.052-.042.393-.334.759-.65s.677-.574.691-.574c.014 0 1.806 1.467 3.981 3.26M6.92 19.54v1.62h-.96v-3.24h.96v1.62\"\n fillRule=\"evenodd\"\n />\n ),\n time: (\n <>\n <path d=\"M12 2C6.486 2 2 6.486 2 12C2 17.514 6.486 22 12 22C17.514 22 22 17.514 22 12C22 6.486 17.514 2 12 2ZM12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12C20 16.411 16.411 20 12 20Z\" />\n <path d=\"M13 7H11V13H17V11H13V7Z\" />\n </>\n ),\n lockOpen: (\n <path d=\"M17 8V7C17 4.243 14.757 2 12 2C9.243 2 7 4.243 7 7V10H6C4.897 10 4 10.897 4 12V20C4 21.103 4.897 22 6 22H18C19.103 22 20 21.103 20 20V12C20 10.897 19.103 10 18 10H9V7C9 5.346 10.346 4 12 4C13.654 4 15 5.346 15 7V8H17ZM18 12L18.002 20H6V12H18Z\" />\n ),\n map: (\n <>\n <path d=\"M12 14C14.206 14 16 12.206 16 10C16 7.794 14.206 6 12 6C9.794 6 8 7.794 8 10C8 12.206 9.794 14 12 14ZM12 8C13.103 8 14 8.897 14 10C14 11.103 13.103 12 12 12C10.897 12 10 11.103 10 10C10 8.897 10.897 8 12 8Z\" />\n <path d=\"M11.42 21.814C11.594 21.938 11.797 22 12 22C12.203 22 12.406 21.938 12.58 21.814C12.884 21.599 20.029 16.44 20 10C20 5.589 16.411 2 12 2C7.58897 2 3.99997 5.589 3.99997 9.995C3.97097 16.44 11.116 21.599 11.42 21.814ZM12 4C15.309 4 18 6.691 18 10.005C18.021 14.443 13.612 18.428 12 19.735C10.389 18.427 5.97897 14.441 5.99997 10C5.99997 6.691 8.69097 4 12 4Z\" />\n </>\n ),\n pin: (\n <path d=\"M12 22L13 20V17H18C18.553 17 19 16.553 19 16V14.414C19 13.888 18.786 13.372 18.414 13L17 11.586V8C17.553 8 18 7.553 18 7V4C18 2.897 17.103 2 16 2H8C6.897 2 6 2.897 6 4V7C6 7.553 6.448 8 7 8V11.586L5.586 13C5.213 13.372 5 13.888 5 14.414V16C5 16.553 5.448 17 6 17H11V20L12 22ZM8 4H16V6H8V4ZM7 14.414L8.707 12.707C8.895 12.52 9 12.266 9 12V8H15V12C15 12.266 15.105 12.52 15.293 12.707L17 14.414V15H7V14.414Z\" />\n ),\n};\n\nexport type IconKey = keyof typeof Icons;\n","import React, { ReactNode, useRef, useState } from \"react\";\nimport { mergeProps, useTooltip, useTooltipTrigger } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { usePopper } from \"react-popper\";\nimport { useTooltipTriggerState } from \"react-stately\";\nimport { Css, Palette } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\n// We combine react-popper and aria-tooltip to makeup the tooltip component for the following reasons:\n// Aria can handle all aspects of the tooltip accessibility and rendering it except handling the dynamic positioning aspect\n// Popper provides the functionality for positioning the tooltip wrt the trigger element\n\ninterface TooltipProps {\n /** The content that shows up when hovered */\n title: ReactNode;\n children: ReactNode;\n placement?: Placement;\n delay?: number;\n disabled?: boolean;\n bgColor?: Palette;\n}\n\nexport function Tooltip(props: TooltipProps) {\n const { placement, children, title, disabled, delay = 0, bgColor } = props;\n\n const state = useTooltipTriggerState({ delay, isDisabled: disabled });\n const triggerRef = useRef<HTMLElement>(null);\n const { triggerProps, tooltipProps: _tooltipProps } = useTooltipTrigger({ isDisabled: disabled }, state, triggerRef);\n const { tooltipProps } = useTooltip(_tooltipProps, state);\n const tid = useTestIds(props, \"tooltip\");\n\n return (\n <>\n <span\n ref={triggerRef}\n {...triggerProps}\n {...(!state.isOpen && typeof title === \"string\" ? { title } : {})}\n {...tid}\n // Add display contents to prevent the tooltip wrapping element from short-circuiting inherited styles (i.e. flex item positioning)\n // Once the element is `:active`, allow pointer events (i.e. click events) to pass through to the children.\n css={Css.display(\"contents\").addIn(\":active\", Css.add(\"pointerEvents\", \"none\").$).$}\n // Adding `draggable` as a hack to allow focus to continue through this element and into its children.\n // This is due to some code in React-Aria that prevents default due ot mobile browser inconsistencies,\n // and the only way they don't prevent default is if the element is draggable.\n // See https://github.com/adobe/react-spectrum/discussions/3058 for discussion related to this issue.\n draggable\n onDragStart={(e) => e.preventDefault()}\n >\n {children}\n </span>\n {state.isOpen && (\n <Popper\n {...mergeProps(_tooltipProps, tooltipProps)}\n triggerRef={triggerRef}\n content={title}\n placement={placement}\n bgColor={bgColor}\n />\n )}\n </>\n );\n}\n\n// The Placement type is not exported from the react-popper library, the values were taken out from there to create the type here\n// As necessary, more values can be pulled in from the ones available in the library\nexport type Placement = \"top\" | \"bottom\" | \"left\" | \"right\" | \"auto\";\n\ninterface PopperProps {\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n content: ReactNode;\n placement?: Placement;\n bgColor: Palette | undefined;\n}\n\nfunction Popper({ triggerRef, content, placement = \"auto\", bgColor = Palette.Gray900 }: PopperProps) {\n const popperRef = useRef(null);\n const [arrowRef, setArrowRef] = useState<HTMLDivElement | null>(null);\n // Since we use `display: contents;` on the `triggerRef`, then the element.offsetTop/Left/etc all equal `0`. This would make\n // the tooltip show in the top left of the document. So instead, we target either the first child, if available, or the parent element as the tooltip target.\n // It is possible there are no children if the element only has text content, which is the reasoning for the parentElement fallback.\n const targetElement = triggerRef.current\n ? (triggerRef.current.children[0] ?? triggerRef.current.parentElement)\n : null;\n\n const { styles, attributes } = usePopper(targetElement, popperRef.current, {\n modifiers: [\n { name: \"arrow\", options: { element: arrowRef } },\n { name: \"offset\", options: { offset: [0, 5] } },\n ],\n placement,\n });\n\n return createPortal(\n <div\n ref={popperRef}\n style={styles.popper}\n {...attributes.popper}\n css={Css.maxw(\"320px\").bgColor(bgColor).bshBasic.white.px1.py(\"4px\").br4.xs.add(\"zIndex\", 999999).$}\n >\n <div ref={setArrowRef} style={{ ...styles.arrow }} id=\"arrow\" />\n {content}\n </div>,\n document.body,\n );\n}\n\n// Helper function to conditionally wrap component with Tooltip if necessary.\nexport function maybeTooltip(props: Omit<TooltipProps, \"children\"> & { children: ReactNode }) {\n return props.title ? <Tooltip {...props} /> : <>{props.children}</>;\n}\n\n// Helper function for resolving showing the Tooltip text via a 'disabled' prop, or the 'tooltip' prop.\nexport function resolveTooltip(\n disabled?: boolean | ReactNode,\n tooltip?: ReactNode,\n readOnly?: boolean | ReactNode,\n): ReactNode | undefined {\n // If `disabled` is a ReactNode, then return that. Otherwise, return `tooltip`\n return typeof disabled !== \"boolean\" && disabled\n ? disabled\n : typeof readOnly !== \"boolean\" && readOnly\n ? readOnly\n : (tooltip ?? undefined);\n}\n","import { createContext, PropsWithChildren, useContext, useMemo } from \"react\";\nimport { GridStyle } from \"src/components/Table\";\nimport { Typography } from \"src/Css\";\n\nexport type InputStylePalette = \"success\" | \"warning\" | \"caution\" | \"info\";\n\nexport interface PresentationFieldProps {\n numberAlignment?: \"left\" | \"right\";\n /** Sets the label position or visibility. Defaults to \"above\" */\n labelStyle?: \"inline\" | \"hidden\" | \"above\" | \"left\";\n /** Defines the width property of the input field wrapper when using `labelStyle=\"left\"`. */\n labelLeftFieldWidth?: number | string;\n labelSuffix?: LabelSuffixStyle;\n // Typically used for compact fields in a table. Removes border and uses an box-shadow for focus behavior\n borderless?: boolean;\n // Typically used for highlighting editable fields in a table. Adds a border on hover.\n borderOnHover?: boolean;\n // Defines height of the field\n compact?: boolean;\n // Changes default font styles for input fields and Chips\n typeScale?: Typography;\n // If set to `false` then fields will not appear disabled, but will still be disabled.\n visuallyDisabled?: false;\n // If set error messages will be rendered as tooltips rather than below the field\n errorInTooltip?: true;\n /** Allow the fields to grow to the width of its container. By default, fields will extend up to 550px */\n fullWidth?: boolean;\n /** Changes bg and hoverBg; Takes priority over `contrast`; Useful when showing many fields w/in a table that require user attention; In no way should be used as a replacement for error/focus state */\n inputStylePalette?: InputStylePalette;\n}\n\nexport type PresentationContextProps = {\n /** `inputStylePalette` omitted because it is too dependent on the individual field use case to be controlled at this level */\n fieldProps?: Omit<PresentationFieldProps, \"inputStylePalette\">;\n gridTableStyle?: GridStyle;\n // Defines whether content should be allowed to wrap or not. `undefined` is treated as true.\n wrap?: boolean;\n};\n\nexport const PresentationContext = createContext<PresentationContextProps>({});\n\nexport function PresentationProvider(props: PropsWithChildren<PresentationContextProps>) {\n const { children, ...presentationProps } = props;\n\n // Check to see if we are nested within another PresentationContext. If so, make sure values already above us are passed through if not overwritten (except baseContext)\n const existingContext = usePresentationContext();\n\n const context: PresentationContextProps = useMemo(\n () => {\n const fieldProps = { ...existingContext.fieldProps, ...presentationProps.fieldProps };\n return { ...existingContext, ...presentationProps, fieldProps };\n },\n // Isn't this `presentationProps` always a new instance due to the `...` above?\n [presentationProps, existingContext],\n );\n\n return <PresentationContext.Provider value={context}>{children}</PresentationContext.Provider>;\n}\n\nexport function usePresentationContext() {\n return useContext(PresentationContext);\n}\n\n/**\n * Label settings for required/optional fields.\n *\n * We may want to just hard-code this behavior, so that it's very consistent,\n * but for now making it configurable.\n */\nexport type LabelSuffixStyle = {\n /** The suffix to use for required fields. */\n required?: string;\n /** The suffix to use for explicitly optional (i.e. `required=false`) fields. */\n optional?: string;\n};\n","import { ReactNode } from \"react\";\nimport { Icon, IconKey } from \"src/components/Icon\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { maybeTooltip } from \"src/components/Tooltip\";\nimport { Css, Margin, Only, Properties, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport type ChipType = \"caution\" | \"warning\" | \"success\" | \"light\" | \"dark\" | \"neutral\" | \"darkMode\" | \"info\";\n\n// exporting for using in type prop as constant - this could be moved and become a global list for colors\nexport const ChipTypes: Record<ChipType, ChipType> = {\n caution: \"caution\",\n warning: \"warning\",\n success: \"success\",\n light: \"light\",\n dark: \"dark\",\n neutral: \"neutral\",\n darkMode: \"darkMode\",\n info: \"info\",\n};\n\nexport interface ChipProps<X> {\n text: ReactNode;\n title?: ReactNode;\n xss?: X;\n type?: ChipType;\n compact?: boolean;\n icon?: IconKey;\n}\n\n/** Kinda like a chip, but read-only, so no `onClick` or `hover`. */\nexport function Chip<X extends Only<Xss<Margin | \"color\" | \"backgroundColor\">, X>>({\n type = ChipTypes.neutral,\n ...props\n}: ChipProps<X>) {\n const { fieldProps } = usePresentationContext();\n const { text, title, xss = {}, compact = fieldProps?.compact, icon } = props;\n const tid = useTestIds(props, \"chip\");\n\n return maybeTooltip({\n title,\n placement: \"bottom\",\n children: (\n <span\n css={{\n ...Css[compact ? \"xs\" : \"sm\"].dif.aic.gapPx(4).br16.pl1.px1.pyPx(2).gray900.$,\n ...typeStyles[type],\n ...xss,\n }}\n {...tid}\n >\n {icon && <Icon icon={icon} inc={2} xss={Css.fs0.$} />}\n <span css={Css.lineClamp1.wbba.$}>{text}</span>\n </span>\n ),\n });\n}\n\nconst typeStyles: Record<ChipType, Properties> = {\n caution: Css.bgYellow200.$,\n warning: Css.bgRed200.$,\n success: Css.bgGreen200.$,\n light: Css.bgWhite.$,\n dark: Css.bgGray900.white.$,\n neutral: Css.bgGray200.$,\n darkMode: Css.bgGray700.white.$,\n info: Css.bgBlue100.$,\n};\n","import { Chip } from \"src/components/Chip\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Margin, Only, Xss } from \"src/Css\";\n\ntype ChipsXss = Xss<Margin>;\n\nexport interface ChipValue {\n text: string;\n title: string;\n}\n\nexport interface ChipsProps<X> {\n values: string[] | ChipValue[];\n xss?: X;\n compact?: boolean;\n wrap?: boolean;\n}\n\n/** Renders a list of `Chip`s, with wrapping & appropriate margin between each `Chip`. */\nexport function Chips<X extends Only<ChipsXss, X>>(props: ChipsProps<X>) {\n const { wrap: presentationWrap } = usePresentationContext();\n const { values, compact, xss = {}, wrap = presentationWrap } = props;\n return (\n <div\n css={{\n ...Css.df.aifs.gap1.whiteSpace(\"normal\").$,\n ...(wrap !== false ? Css.add({ flexWrap: \"wrap\" }).$ : {}),\n ...xss,\n }}\n >\n {values.map((value, i) => {\n const { text, title } = (value.hasOwnProperty(\"text\") ? value : { text: value }) as ChipValue;\n return <Chip key={i} text={text} title={title} compact={compact} />;\n })}\n </div>\n );\n}\n","import memoizeOne from \"memoize-one\";\nimport { runInAction } from \"mobx\";\nimport React, { MutableRefObject, ReactElement, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Components, ListRange, Virtuoso, VirtuosoHandle } from \"react-virtuoso\";\nimport { getTableRefWidthStyles, Loader } from \"src/components\";\nimport { DiscriminateUnion, GridRowKind } from \"src/components/index\";\nimport { PresentationFieldProps, PresentationProvider } from \"src/components/PresentationContext\";\nimport { GridTableApi, GridTableApiImpl } from \"src/components/Table/GridTableApi\";\nimport { useSetupColumnSizes } from \"src/components/Table/hooks/useSetupColumnSizes\";\nimport { defaultStyle, GridStyle, GridStyleDef, resolveStyles, RowStyles } from \"src/components/Table/TableStyles\";\nimport {\n Direction,\n GridColumn,\n GridColumnWithId,\n GridTableXss,\n InfiniteScroll,\n Kinded,\n RenderAs,\n} from \"src/components/Table/types\";\nimport { assignDefaultColumnIds } from \"src/components/Table/utils/columns\";\nimport { GridRowLookup } from \"src/components/Table/utils/GridRowLookup\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport { EXPANDABLE_HEADER, isCursorBelowMidpoint, KEPT_GROUP, zIndices } from \"src/components/Table/utils/utils\";\nimport { Css, Only } from \"src/Css\";\nimport { useComputed } from \"src/hooks\";\nimport { useRenderCount } from \"src/hooks/useRenderCount\";\nimport { isPromise } from \"src/utils\";\nimport { GridDataRow, Row } from \"./components/Row\";\nimport { DraggedOver } from \"./utils/RowState\";\n\nlet runningInJest = false;\n\n/** Tells GridTable we're running in Jest, which forces as=virtual to be as=div, to work in jsdom. */\nexport function setRunningInJest() {\n runningInJest = true;\n}\n\nexport interface GridTableDefaults {\n style: GridStyle | GridStyleDef;\n stickyHeader: boolean;\n}\n\nlet defaults: GridTableDefaults = {\n style: defaultStyle,\n stickyHeader: false,\n};\n\n/** Configures the default/app-wide GridStyle. */\nexport function setDefaultStyle(style: GridStyle): void {\n defaults.style = style;\n}\n\n/** Configures the default/app-wide GridTable settings. */\nexport function setGridTableDefaults(opts: Partial<GridTableDefaults>): void {\n defaults = { ...defaults, ...opts };\n}\n\n/**\n * The sort settings for the current table; whether it's client-side or server-side.\n *\n * If client-side, GridTable will internally sort rows based on the current sort column's\n * GridCellContent.value for each cell.\n *\n * If server-side, we assume the rows are in the order as defined by `value`, and `onSort`\n * will be called when the user clicks a column to request changing the column/order.\n *\n * Note that we don't support multiple sort criteria, i.e. sort by column1 desc _and then_\n * column2 asc.\n */\nexport type GridSortConfig =\n | {\n on: \"client\";\n /** The optional initial column (index in columns) and direction to sort. */\n initial?: [string, Direction] | undefined;\n caseSensitive?: boolean;\n /** The optional primary sort column, this will be sorted first above/below table sort */\n primary?: [string, Direction] | undefined;\n }\n | {\n on: \"server\";\n /** The current sort by value + direction (if server-side sorting). */\n value?: [string, Direction];\n /** Callback for when the column is sorted (if server-side sorting). Parameters set to `undefined` is a signal to return to the initial sort state */\n onSort: (orderBy: string | undefined, direction: Direction | undefined) => void;\n };\n\n/** Allows listening to per-kind row selection changes. */\nexport type OnRowSelect<R extends Kinded> = {\n [K in R[\"kind\"]]?: DiscriminateUnion<R, \"kind\", K> extends { data: infer D }\n ? (data: D, isSelected: boolean, opts: { row: GridRowKind<R, K>; api: GridTableApi<R> }) => void\n : (data: undefined, isSelected: boolean, opts: { row: GridRowKind<R, K>; api: GridTableApi<R> }) => void;\n};\n\ntype DragEventType = React.DragEvent<HTMLElement>;\n\nexport type OnRowDragEvent<R extends Kinded> = (draggedRow: GridDataRow<R>, event: DragEventType) => void;\n\nexport interface GridTableProps<R extends Kinded, X> {\n id?: string;\n /**\n * The HTML used to create the table.\n *\n * By default a `div` will be used with CSS grid styles, but `table` tag can be used\n * with limited functionality but better multi-page printing/page break support.\n *\n * When using `table`, the column width and alignment is only supported using\n * px values.\n *\n * @example\n * { header: \"Name\", data: ({ name }) => name, w: \"75px\", align: \"right\" }\n */\n as?: RenderAs;\n /** The column definitions i.e. how each column should render each row kind. */\n columns: GridColumn<R>[];\n /** The rows of data (including any header/footer rows), to be rendered by the column definitions. */\n rows: GridDataRow<R>[];\n /** Optional row-kind-level styling / behavior like onClick/rowLinks. */\n rowStyles?: RowStyles<R>;\n /** Allow looking up prev/next of a row i.e. for SuperDrawer navigation. */\n rowLookup?: MutableRefObject<GridRowLookup<R> | undefined>;\n /** Whether the header row should be sticky. */\n stickyHeader?: boolean;\n stickyOffset?: number;\n /** Configures sorting via a hash, does not need to be stable. */\n sorting?: GridSortConfig;\n /** Shown in the first row slot, if there are no rows to show, i.e. 'No rows found'. */\n fallbackMessage?: string;\n /** Shown in the first row, kinda-like the fallbackMessage, but shown even if there are rows as well. */\n infoMessage?: string;\n /** Applies a client-side filter to rows, using either it's text value or `GridCellContent.value`. */\n filter?: string;\n /** Caps the client-side filter to a max number of rows. */\n filterMaxRows?: number;\n /** A combination of CSS settings to set the static look & feel (vs. rowStyles which is per-row styling). */\n style?: GridStyle | GridStyleDef;\n /**\n * If provided, collapsed rows on the table persists when the page is reloaded.\n *\n * This key should generally be unique to the page it's on, i.e. `specsTable_p:1_precon` would\n * be the collapsed state for project `p:1`'s precon stage specs & selections table.\n */\n persistCollapse?: string;\n xss?: X;\n /** Accepts the api, from `useGridTableApi`, that the caller wants to use for this table. */\n api?: GridTableApi<R>;\n /** Experimental, expecting to be removed - Specify the element in which the table should resize its columns against. If not set, the table will resize columns based on its owns container's width */\n resizeTarget?: MutableRefObject<HTMLElement | null>;\n /**\n * Defines which row in the table should be provided with an \"active\" styling.\n * Expected format is `${row.kind}_${row.id}`. This helps avoid id conflicts between rows of different types/kinds that may have the same id.\n * Example \"data_123\"\n */\n activeRowId?: string;\n /**\n * Defines which cell in the table should be provided with an \"active\" styling.\n * Expected format is `${row.kind}_${row.id}_${column.id}`.\n */\n activeCellId?: string;\n /**\n * Defines the session storage key for which columns are visible. If not provided, a default storage key will be used based on column order and/or `GridColumn.id`\n * This is beneficial when looking at the same table, but of a different subject (i.e. Project A's PreCon Schedule vs Project A's Construction schedule)\n */\n visibleColumnsStorageKey?: string;\n /**\n * Infinite scroll is only supported with `as=virtual` mode\n *\n ** `onEndReached` will be called when the user scrolls to the end of the list with the last item index as an argument.\n ** `endOffsetPx` is the number of pixels from the bottom of the list to eagerly trigger `onEndReached`. The default is is 500px.\n */\n infiniteScroll?: InfiniteScroll;\n /** Callback for when a row is selected or unselected. */\n onRowSelect?: OnRowSelect<R>;\n /**\n * Custom prefix rows for any CSV output, i.e. a header like \"Report X as of date Y with filter Z\".\n *\n * We except the `string[][]` to be an array of cells, and `copyToClipboard` and `downloadToCsv` will drop them into\n * the csv output basically unchanged, albeit we will escape any special chars like double quotes and newlines.\n */\n csvPrefixRows?: string[][];\n /** Drag & drop Callback. */\n onRowDrop?: (draggedRow: GridDataRow<R>, droppedRow: GridDataRow<R>, indexOffset: number) => void;\n}\n\n/**\n * Renders data in our table layout.\n *\n * Tables are essentially a matrix of columns and rows, and this `GridTable` API is setup\n * such that:\n *\n * - Rows are mostly data, tagged with a given `kind`\n * - I.e. this handles tables with nested/non-homogeneous rows because you can have a\n * row with `kind: \"parent\"` and another with `kind: \"child\"`\n * - Columns are mostly rendering logic\n * - I.e. each column defines it's behavior for each given row `kind`\n *\n * In a \"kind\" of cute way, headers are not modeled specially, i.e. they are just another\n * row `kind` along with the data rows. (Admittedly, out of pragmatism, we do apply some\n * special styling to the row that uses `kind: \"header\"`.)\n *\n * For some rationale of our current/historical rendering approaches, see the following doc:\n *\n * https://docs.google.com/document/d/1DFnlkDubK4nG_GLf_hB8yp0flnSNt_3IBh5iOicuaFM/edit#heading=h.9m9cpwgeqfc9\n */\nexport function GridTable<R extends Kinded, X extends Only<GridTableXss, X> = any>(props: GridTableProps<R, X>) {\n const {\n id = \"gridTable\",\n as = \"div\",\n columns: _columns,\n rows,\n style: maybeStyle = defaults.style,\n rowStyles,\n stickyHeader = defaults.stickyHeader,\n stickyOffset = 0,\n xss,\n filter,\n filterMaxRows,\n fallbackMessage = \"No rows found.\",\n infoMessage,\n persistCollapse,\n resizeTarget,\n activeRowId,\n activeCellId,\n visibleColumnsStorageKey,\n infiniteScroll,\n onRowSelect,\n onRowDrop: droppedCallback,\n csvPrefixRows,\n } = props;\n\n const columnsWithIds = useMemo(() => assignDefaultColumnIds(_columns), [_columns]);\n\n // We only use this in as=virtual mode, but keep this here for rowLookup to use\n const virtuosoRef = useRef<VirtuosoHandle | null>(null);\n // Stores the current rendered range of rows from virtuoso (used for determining if we can skip re-scrolling to a row if already in view)\n const virtuosoRangeRef = useRef<ListRange | null>(null);\n // Use this ref to watch for changes in the GridTable's container and resize columns accordingly.\n const resizeRef = useRef<HTMLDivElement>(null);\n\n const api = useMemo<GridTableApiImpl<R>>(\n () => {\n // Let the user pass in their own api handle, otherwise make our own\n const api = (props.api as GridTableApiImpl<R>) ?? new GridTableApiImpl();\n api.init(persistCollapse, virtuosoRef, virtuosoRangeRef);\n api.setActiveRowId(activeRowId);\n api.setActiveCellId(activeCellId);\n // Push the initial columns directly into tableState, b/c that is what\n // makes the tests pass, but then further updates we'll do through useEffect\n // to avoid \"Cannot update component during render\" errors.\n api.tableState.setColumns(columnsWithIds, visibleColumnsStorageKey);\n return api;\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.api],\n );\n\n const [draggedRow, _setDraggedRow] = useState<GridDataRow<R> | undefined>(undefined);\n const draggedRowRef = useRef(draggedRow);\n const setDraggedRow = (row: GridDataRow<R> | undefined) => {\n draggedRowRef.current = row;\n _setDraggedRow(row);\n };\n\n const style = resolveStyles(maybeStyle);\n const { tableState } = api;\n\n tableState.onRowSelect = onRowSelect;\n\n // Use a single useEffect to push props into the TableState observable, that\n // way we avoid React warnings when the observable mutations cause downstream\n // components to be marked for re-render. Mobx will ignore setter calls that\n // don't actually change the value, so we can do this in a single useEffect.\n useEffect(() => {\n // Use runInAction so mobx delays any reactions until all the mutations happen\n runInAction(() => {\n tableState.setRows(rows);\n tableState.setColumns(columnsWithIds, visibleColumnsStorageKey);\n tableState.setSearch(filter);\n tableState.setCsvPrefixRows(csvPrefixRows);\n tableState.activeRowId = activeRowId;\n tableState.activeCellId = activeCellId;\n });\n }, [tableState, rows, columnsWithIds, visibleColumnsStorageKey, activeRowId, activeCellId, filter, csvPrefixRows]);\n\n const columns: GridColumnWithId<R>[] = useComputed(() => {\n return tableState.visibleColumns as GridColumnWithId<R>[];\n }, [tableState]);\n\n // Initialize the sort state. This will only happen on the first render.\n // Once the `TableState.sort` is defined, it will not re-initialize.\n tableState.initSortState(props.sorting, columns);\n\n // We track render count at the table level, which seems odd (we should be able to track this\n // internally within each GridRow using a useRef), but we have suspicions that react-virtuoso\n // (or us) is resetting component state more than necessary, so we track render counts from\n // here instead.\n const { getCount } = useRenderCount();\n\n // Our column sizes use either `w` or `expandedWidth`, so see which columns are currently expanded\n const expandedColumnIds: string[] = useComputed(() => tableState.expandedColumnIds, [tableState]);\n const columnSizes = useSetupColumnSizes(style, columns, resizeTarget ?? resizeRef, expandedColumnIds);\n\n // allows us to unset children and grandchildren, etc.\n function recursiveSetDraggedOver(rows: GridDataRow<R>[], draggedOver: DraggedOver) {\n rows.forEach((r) => {\n tableState.maybeSetRowDraggedOver(r.id, draggedOver);\n if (r.children) {\n recursiveSetDraggedOver(r.children, draggedOver);\n }\n });\n }\n\n function onDragStart(row: GridDataRow<R>, evt: DragEventType) {\n if (!row.draggable || !droppedCallback) {\n return;\n }\n\n evt.dataTransfer.effectAllowed = \"move\";\n evt.dataTransfer.setData(\"text/plain\", JSON.stringify({ row }));\n setDraggedRow(row);\n }\n\n const onDragEnd = (row: GridDataRow<R>, evt: DragEventType) => {\n if (!row.draggable || !droppedCallback) {\n return;\n }\n\n evt.preventDefault();\n recursiveSetDraggedOver(rows, DraggedOver.None);\n };\n\n const onDrop = (row: GridDataRow<R>, evt: DragEventType) => {\n if (!row.draggable || !droppedCallback) {\n return;\n }\n\n evt.preventDefault();\n if (droppedCallback) {\n recursiveSetDraggedOver(rows, DraggedOver.None);\n\n try {\n const draggedRowData = JSON.parse(evt.dataTransfer.getData(\"text/plain\")).row;\n\n if (draggedRowData.id === row.id) {\n return;\n }\n\n const isBelow = isCursorBelowMidpoint(evt.currentTarget, evt.clientY);\n\n droppedCallback(draggedRowData, row, isBelow ? 1 : 0);\n } catch (e: any) {\n console.error(e.message, e.stack);\n }\n }\n };\n\n const onDragEnter = (row: GridDataRow<R>, evt: DragEventType) => {\n if (!row.draggable || !droppedCallback) {\n return;\n }\n\n evt.preventDefault();\n\n // set flags for css spacer\n // don't set none for the row we are entering\n recursiveSetDraggedOver(\n rows.filter((r) => r.id !== row.id),\n DraggedOver.None,\n );\n\n if (draggedRowRef.current) {\n if (draggedRowRef.current.id === row.id) {\n return;\n }\n\n // determine above or below\n const isBelow = isCursorBelowMidpoint(evt.currentTarget, evt.clientY);\n tableState.maybeSetRowDraggedOver(row.id, isBelow ? DraggedOver.Below : DraggedOver.Above, draggedRowRef.current);\n }\n };\n\n const onDragOver = (row: GridDataRow<R>, evt: DragEventType) => {\n if (!row.draggable || !droppedCallback) {\n return;\n }\n\n evt.preventDefault();\n\n if (draggedRowRef.current) {\n if (draggedRowRef.current.id === row.id || !evt.currentTarget) {\n tableState.maybeSetRowDraggedOver(row.id, DraggedOver.None, draggedRowRef.current);\n return;\n }\n\n // continuously determine above or below\n const isBelow = isCursorBelowMidpoint(evt.currentTarget, evt.clientY);\n tableState.maybeSetRowDraggedOver(row.id, isBelow ? DraggedOver.Below : DraggedOver.Above, draggedRowRef.current);\n }\n };\n\n // Flatten, hide-if-filtered, hide-if-collapsed, and component-ize the sorted rows.\n const [tableHeadRows, visibleDataRows, keptSelectedRows, tooManyClientSideRows]: [\n ReactElement[],\n ReactElement[],\n ReactElement[],\n boolean,\n ] = useComputed(() => {\n // Split out the header rows from the data rows so that we can put an `infoMessage` in between them (if needed).\n const headerRows: ReactElement[] = [];\n const expandableHeaderRows: ReactElement[] = [];\n const totalsRows: ReactElement[] = [];\n const keptSelectedRows: ReactElement[] = [];\n let visibleDataRows: ReactElement[] = [];\n\n const { visibleRows } = tableState;\n const hasExpandableHeader = visibleRows.some((rs) => rs.row.id === EXPANDABLE_HEADER);\n\n // Get the flat list or rows from the header down...\n visibleRows.forEach((rs) => {\n const row = (\n <Row\n key={rs.key}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDragEnd={onDragEnd}\n onDrop={onDrop}\n onDragEnter={onDragEnter}\n {...{\n as,\n rs,\n style,\n rowStyles,\n columnSizes,\n getCount,\n cellHighlight: \"cellHighlight\" in maybeStyle && maybeStyle.cellHighlight === true,\n omitRowHover: \"rowHover\" in maybeStyle && maybeStyle.rowHover === false,\n hasExpandableHeader,\n }}\n />\n );\n if (rs.kind === \"header\") {\n headerRows.push(row);\n } else if (rs.kind === \"expandableHeader\") {\n expandableHeaderRows.push(row);\n } else if (rs.kind === \"totals\") {\n totalsRows.push(row);\n } else if (rs.isKept || rs.kind === KEPT_GROUP) {\n keptSelectedRows.push(row);\n } else {\n visibleDataRows.push(row);\n }\n });\n\n // Once our header rows are created we can organize them in expected order.\n const tableHeadRows = expandableHeaderRows.concat(headerRows).concat(totalsRows);\n\n const tooManyClientSideRows = !!filterMaxRows && visibleDataRows.length > filterMaxRows;\n if (tooManyClientSideRows) {\n visibleDataRows = visibleDataRows.slice(0, filterMaxRows + keptSelectedRows.length);\n }\n\n return [tableHeadRows, visibleDataRows, keptSelectedRows, tooManyClientSideRows];\n }, [as, api, style, rowStyles, maybeStyle, columnSizes, getCount, filterMaxRows]);\n\n // Push back to the caller a way to ask us where a row is.\n // Refs are cheap to assign to, so we don't bother doing this in a useEffect\n if (props.rowLookup) props.rowLookup.current = api.lookup;\n\n const noData = visibleDataRows.length === 0;\n const firstRowMessage =\n (noData && fallbackMessage) || (tooManyClientSideRows && \"Hiding some rows, use filter...\") || infoMessage;\n\n const borderless = style?.presentationSettings?.borderless;\n const typeScale = style?.presentationSettings?.typeScale;\n const borderOnHover = style?.presentationSettings?.borderOnHover;\n const fieldProps: PresentationFieldProps = useMemo(\n () => ({\n labelStyle: \"hidden\",\n numberAlignment: \"right\",\n compact: true,\n errorInTooltip: true,\n // Avoid passing `undefined` as it will unset existing PresentationContext settings\n ...(borderless !== undefined ? { borderless } : {}),\n ...(typeScale !== undefined ? { typeScale } : {}),\n ...(borderOnHover !== undefined ? { borderOnHover } : {}),\n }),\n [borderOnHover, borderless, typeScale],\n );\n\n // If we're running in Jest, force using `as=div` b/c jsdom doesn't support react-virtuoso.\n // This enables still putting the application's business/rendering logic under test, and letting it\n // just trust the GridTable impl that, at runtime, `as=virtual` will (other than being virtualized)\n // behave semantically the same as `as=div` did for its tests.\n const _as = as === \"virtual\" && runningInJest ? \"div\" : as;\n const rowStateContext = useMemo(() => ({ tableState: tableState }), [tableState]);\n return (\n <TableStateContext.Provider value={rowStateContext}>\n <PresentationProvider fieldProps={fieldProps} wrap={style?.presentationSettings?.wrap}>\n <div ref={resizeRef} css={getTableRefWidthStyles(as === \"virtual\")} />\n {renders[_as](\n style,\n id,\n columns,\n visibleDataRows,\n keptSelectedRows,\n firstRowMessage,\n stickyHeader,\n xss,\n virtuosoRef,\n virtuosoRangeRef,\n tableHeadRows,\n stickyOffset,\n infiniteScroll,\n )}\n </PresentationProvider>\n </TableStateContext.Provider>\n );\n}\n\n// Determine which HTML element to use to build the GridTable\nconst renders: Record<RenderAs, typeof renderTable> = {\n table: renderTable,\n div: renderDiv,\n virtual: renderVirtual,\n};\n\n/** Renders table using divs with flexbox rows, which is the default render */\nfunction renderDiv<R extends Kinded>(\n style: GridStyle,\n id: string,\n columns: GridColumnWithId<R>[],\n visibleDataRows: ReactElement[],\n keptSelectedRows: ReactElement[],\n firstRowMessage: string | undefined,\n stickyHeader: boolean,\n xss: any,\n _virtuosoRef: MutableRefObject<VirtuosoHandle | null>,\n _virtuosoRangeRef: MutableRefObject<ListRange | null>,\n tableHeadRows: ReactElement[],\n stickyOffset: number,\n _infiniteScroll?: InfiniteScroll,\n): ReactElement {\n return (\n <div\n css={{\n // Use `fit-content` to ensure the width of the table takes up the full width of its content.\n // Otherwise, the table's width would be that of its container, which may not be as wide as the table itself.\n // In cases where we have sticky columns on a very wide table, then the container which the columns \"stick\" to (which is the table),\n // needs to be as wide as the table's content, or else we lose the \"stickiness\" once scrolling past width of the table's container.\n ...Css.mw(\"fit-content\").$,\n ...style.rootCss,\n ...(style.minWidthPx ? Css.mwPx(style.minWidthPx).$ : {}),\n ...xss,\n }}\n data-testid={id}\n >\n {/* Table Head */}\n <div\n css={{\n ...(style.firstRowCss && Css.addIn(\"& > div:first-of-type\", style.firstRowCss).$),\n ...Css.if(stickyHeader).sticky.topPx(stickyOffset).z(zIndices.stickyHeader).$,\n }}\n >\n {tableHeadRows}\n </div>\n\n {/* Table Body */}\n <div\n css={{\n ...(style.betweenRowsCss ? Css.addIn(`& > div > *`, style.betweenRowsCss).$ : {}),\n ...(style.firstNonHeaderRowCss ? Css.addIn(`& > div:first-of-type`, style.firstNonHeaderRowCss).$ : {}),\n ...(style.lastRowCss && Css.addIn(\"& > div:last-of-type\", style.lastRowCss).$),\n }}\n >\n {keptSelectedRows}\n {/* Show an info message if it's set. */}\n {firstRowMessage && (\n <div css={{ ...style.firstRowMessageCss }} data-gridrow>\n {firstRowMessage}\n </div>\n )}\n {visibleDataRows}\n </div>\n </div>\n );\n}\n\n/** Renders as a table, primarily/solely for good print support. */\nfunction renderTable<R extends Kinded>(\n style: GridStyle,\n id: string,\n columns: GridColumnWithId<R>[],\n visibleDataRows: ReactElement[],\n keptSelectedRows: ReactElement[],\n firstRowMessage: string | undefined,\n stickyHeader: boolean,\n xss: any,\n _virtuosoRef: MutableRefObject<VirtuosoHandle | null>,\n _virtuosoRangeRef: MutableRefObject<ListRange | null>,\n tableHeadRows: ReactElement[],\n stickyOffset: number,\n _infiniteScroll?: InfiniteScroll,\n): ReactElement {\n return (\n <table\n css={{\n ...Css.w100.add(\"borderCollapse\", \"separate\").add(\"borderSpacing\", \"0\").$,\n ...Css.addIn(\"& tr \", { pageBreakAfter: \"auto\", pageBreakInside: \"avoid\" }).$,\n ...Css.addIn(\"& > tbody > tr > * \", style.betweenRowsCss || {})\n // removes border between header and second row\n .addIn(\"& > tbody > tr:first-of-type\", style.firstNonHeaderRowCss || {}).$,\n ...Css.addIn(\"& > tbody > tr:last-of-type\", style.lastRowCss).$,\n ...Css.addIn(\"& > thead > tr:first-of-type\", style.firstRowCss).$,\n ...style.rootCss,\n ...(style.minWidthPx ? Css.mwPx(style.minWidthPx).$ : {}),\n ...xss,\n }}\n data-testid={id}\n >\n <thead css={Css.if(stickyHeader).sticky.topPx(stickyOffset).z(zIndices.stickyHeader).$}>{tableHeadRows}</thead>\n <tbody>\n {keptSelectedRows}\n {/* Show an all-column-span info message if it's set. */}\n {firstRowMessage && (\n <tr>\n <td colSpan={columns.length} css={{ ...style.firstRowMessageCss }}>\n {firstRowMessage}\n </td>\n </tr>\n )}\n {visibleDataRows}\n </tbody>\n </table>\n );\n}\n\n/**\n * Uses react-virtuoso to render rows virtually.\n *\n * It seems like react-virtuoso is the only one that can do _measured_ variable\n * sizes. I.e. react-window's variable list let's you provide a size, but it's\n * a size you lookup, not one that is measured from the DOM, see [1].\n *\n * I also tried react-virtual, which is headless and really small, but a) the\n * `measureRef` approach seems buggy [2] and b) rows were getting re-rendered\n * maybe due to [3] and they have no examples showing memoization, which is\n * concerning.\n *\n * react-virtuoso also seems like the most maintained (react-window is no\n * longer being actively worked on) and featureful library (like sticky headers),\n * so going with that for now.\n *\n * [1]: https://github.com/bvaughn/react-window/issues/6\n * [2]: https://github.com/tannerlinsley/react-virtual/issues/85\n * [3]: https://github.com/tannerlinsley/react-virtual/issues/108\n */\nfunction renderVirtual<R extends Kinded>(\n style: GridStyle,\n id: string,\n columns: GridColumnWithId<R>[],\n visibleDataRows: ReactElement[],\n keptSelectedRows: ReactElement[],\n firstRowMessage: string | undefined,\n stickyHeader: boolean,\n xss: any,\n virtuosoRef: MutableRefObject<VirtuosoHandle | null>,\n virtuosoRangeRef: MutableRefObject<ListRange | null>,\n tableHeadRows: ReactElement[],\n _stickyOffset: number,\n infiniteScroll?: InfiniteScroll,\n): ReactElement {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { footerStyle, listStyle } = useMemo(() => {\n const { paddingBottom, ...otherRootStyles } = style.rootCss ?? {};\n return { footerStyle: { paddingBottom }, listStyle: { ...style, rootCss: otherRootStyles } };\n }, [style]);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [fetchMoreInProgress, setFetchMoreInProgress] = useState(false);\n\n return (\n <Virtuoso\n overscan={5}\n ref={virtuosoRef}\n components={{\n // Applying a zIndex: 2 to ensure it stays on top of sticky columns\n TopItemList: React.forwardRef((props, ref) => (\n <div\n {...props}\n ref={ref as MutableRefObject<HTMLDivElement>}\n style={{ ...props.style, ...{ zIndex: zIndices.stickyHeader } }}\n />\n )),\n List: VirtualRoot(listStyle, columns as any, id, xss),\n Footer: () => {\n return (\n <div css={footerStyle}>\n {fetchMoreInProgress && (\n <div css={Css.h5.df.aic.jcc.$}>\n <Loader size={\"xs\"} />\n </div>\n )}\n </div>\n );\n },\n }}\n // Pin/sticky both the header row(s) + firstRowMessage to the top\n topItemCount={stickyHeader ? tableHeadRows.length : 0}\n itemContent={(index) => {\n // Since we have 3 arrays of rows: `tableHeadRows` and `visibleDataRows` and `keptSelectedRows` we must determine which one to render.\n\n if (index < tableHeadRows.length) {\n return tableHeadRows[index];\n }\n\n // Reset index\n index -= tableHeadRows.length;\n\n // Show keptSelectedRows if there are any\n if (index < keptSelectedRows.length) {\n return keptSelectedRows[index];\n }\n\n // Reset index\n index -= keptSelectedRows.length;\n\n // Show firstRowMessage as the first `filteredRow`\n if (firstRowMessage) {\n if (index === 0) {\n return (\n // Ensure the fallback message is the same width as the table\n <div css={getTableRefWidthStyles(true)}>\n <div css={{ ...style.firstRowMessageCss }}>{firstRowMessage}</div>\n </div>\n );\n }\n\n // Shift index -1 when there is a firstRowMessage to not skip the\n // first `filteredRow`\n index--;\n }\n\n // Lastly render the table body rows\n return visibleDataRows[index];\n }}\n rangeChanged={(newRange) => {\n virtuosoRangeRef.current = newRange;\n }}\n totalCount={tableHeadRows.length + (firstRowMessage ? 1 : 0) + visibleDataRows.length + keptSelectedRows.length}\n // When implementing infinite scroll, default the bottom `increaseViewportBy` to 500px. This creates the \"infinite\"\n // effect such that the next page of data is (hopefully) loaded before the user reaches the true bottom\n // Spreading these props due to virtuoso erroring when `increaseViewportBy` is undefined\n {...(infiniteScroll\n ? {\n increaseViewportBy: {\n bottom: infiniteScroll.endOffsetPx ?? 500,\n top: 0,\n },\n // Add a `index > 0` check b/c Virtuoso is calling this in storybook\n // with `endReached(0)` at odd times, like on page unload/story load,\n // which then causes our test data to have duplicate ids in it.\n endReached: (index) => {\n if (index === 0) return;\n\n const result = infiniteScroll.onEndReached(index);\n if (isPromise(result)) {\n setFetchMoreInProgress(true);\n result.finally(() => setFetchMoreInProgress(false));\n }\n },\n }\n : {})}\n />\n );\n}\n\n/**\n * A table might render two of these components to represent two virtual lists.\n * This generally happens when `topItemCount` prop is used and React-Virtuoso\n * creates to Virtual lists where the first represents, generally, the header\n * rows and the second represents the non-header rows (list rows).\n *\n * The main goal of this custom component is to:\n * - Customize the list wrapper to our styles\n *\n * We wrap this in memoizeOne so that React.createElement sees a\n * consistent/stable component identity, even though technically we have a\n * different \"component\" per the given set of props (solely to capture as\n * params that we can't pass through react-virtuoso's API as props).\n */\nconst VirtualRoot = memoizeOne<(gs: GridStyle, columns: GridColumn<any>[], id: string, xss: any) => Components[\"List\"]>(\n (gs, _columns, id, xss) => {\n return React.forwardRef(function VirtualRoot({ style, children }, ref) {\n // This VirtualRoot list represent the header when no styles are given. The\n // table list generally has styles to scroll the page for windowing.\n const isHeader = Object.keys(style || {}).length === 0;\n\n // This re-renders each time we have new children in the viewport\n return (\n <div\n ref={ref}\n style={{ ...style, ...{ minWidth: \"fit-content\" } }}\n css={{\n // Add an extra `> div` due to Item + itemContent both having divs\n ...Css.addIn(\"& > div + div > div > *\", gs.betweenRowsCss || {}).$,\n // Table list styles only\n ...(isHeader\n ? Css.addIn(\"& > div:first-of-type > *\", gs.firstRowCss).$\n : {\n ...Css.addIn(\"& > div:first-of-type\", gs.firstNonHeaderRowCss).$,\n ...Css.addIn(\"& > div:last-of-type > *\", gs.lastRowCss).$,\n }),\n ...gs.rootCss,\n ...(gs.minWidthPx ? Css.mwPx(gs.minWidthPx).$ : {}),\n ...xss,\n }}\n data-testid={id}\n >\n {children}\n </div>\n );\n });\n },\n);\n","import { comparer } from \"mobx\";\nimport { computedFn } from \"mobx-utils\";\nimport { MutableRefObject, useMemo } from \"react\";\nimport { ListRange, VirtuosoHandle } from \"react-virtuoso\";\nimport {\n applyRowFn,\n createRowLookup,\n GridRowLookup,\n GridTableScrollOptions,\n isGridCellContent,\n isJSX,\n MaybeFn,\n shouldSkipScrollTo,\n} from \"src/components/index\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { DiscriminateUnion, Kinded } from \"src/components/Table/types\";\nimport { TableState } from \"src/components/Table/utils/TableState\";\nimport { isDefined } from \"src/utils\";\n\n/**\n * Creates an `api` handle to drive a `GridTable`.\n *\n * ```\n * const api = useGridTableApi<Row>();\n * const count = useComputed(() => api.getSelectedRows().length, [api]);\n * ...\n * return <GridTable api={api} />\n * ```\n *\n * This is very similar to a `useRef`, except that the parent function has\n * immediate access to `api` and can use it for `useComputed`, instead of\n * having to wait for `ref.current` to be set after the child `GridTable`\n * has run.\n */\nexport function useGridTableApi<R extends Kinded>(): GridTableApi<R> {\n return useMemo(() => new GridTableApiImpl<R>(), []);\n}\n\n/** Provides an imperative API for an application page to interact with the table. */\nexport type GridTableApi<R extends Kinded> = {\n /** Scrolls row `index` into view; only supported with `as=virtual` and after a `useEffect`.\n *\n * Defaults \"smooth\" behavior; Use {index, behavior: \"auto\"} for instant scroll in cases where grid table has many, many records and the scroll effect is undesirable.\n * */\n scrollToIndex(index: GridTableScrollOptions): void;\n\n /** Returns the currently-visible rows. */\n getVisibleRows(): GridDataRow<R>[];\n /** Returns the currently-visible rows of the given `kind`. */\n getVisibleRows<K extends R[\"kind\"]>(kind: K): GridDataRow<DiscriminateUnion<R, \"kind\", K>>[];\n\n /** Returns the ids of currently-selected rows. */\n getSelectedRowIds(): string[];\n getSelectedRowIds<K extends R[\"kind\"]>(kind: K): string[];\n /** Returns the currently-selected rows. */\n getSelectedRows(): GridDataRow<R>[];\n /** Returns the currently-selected rows of the given `kind`. */\n getSelectedRows<K extends R[\"kind\"]>(kind: K): GridDataRow<DiscriminateUnion<R, \"kind\", K>>[];\n /** Set selected state of a row by id. */\n selectRow(id: string, selected?: boolean): void;\n /** De-selects all selected rows. */\n clearSelections(): void;\n\n /** Whether a row is currently collapsed. */\n isCollapsedRow(id: string): boolean;\n /** Toggle collapse state of a row by id. */\n toggleCollapsedRow(id: string): void;\n\n /** Sets the internal state of 'activeRowId' */\n setActiveRowId(id: string | undefined): void;\n /** Sets the internal state of 'activeCellId' */\n setActiveCellId(id: string | undefined): void;\n\n /** Deletes a row from the table, i.e. so it's not detected as kept. */\n deleteRows(ids: string[]): void;\n\n getVisibleColumnIds(): string[];\n setVisibleColumns(ids: string[]): void;\n\n /**\n * Triggers the table's current content to be downloaded as a CSV file.\n *\n * This currently assumes client-side pagination/sorting, i.e. we have the full dataset in memory.\n */\n downloadToCsv(fileName: string): void;\n\n /**\n * Copies the table's current content to the clipboard.\n *\n * This currently assumes client-side pagination/sorting, i.e. we have the full dataset in memory.\n */\n copyToClipboard(): Promise<void>;\n};\n\n/** Adds per-row methods to the `api`, i.e. for getting currently-visible children. */\nexport type GridRowApi<R extends Kinded> = GridTableApi<R> & {\n getVisibleChildren(): GridDataRow<R>[];\n getVisibleChildren<K extends R[\"kind\"]>(kind: K): GridDataRow<DiscriminateUnion<R, \"kind\", K>>[];\n getSelectedChildren(): GridDataRow<R>[];\n getSelectedChildren<K extends R[\"kind\"]>(kind: K): GridDataRow<DiscriminateUnion<R, \"kind\", K>>[];\n};\n\n// Using `FooImpl`to keep the public GridTableApi definition separate.\nexport class GridTableApiImpl<R extends Kinded> implements GridTableApi<R> {\n // This is public to GridTable but not exported outside of Beam\n readonly tableState: TableState<R> = new TableState(this);\n virtuosoRef: MutableRefObject<VirtuosoHandle | null> = { current: null };\n virtuosoRangeRef: MutableRefObject<ListRange | null> = { current: null };\n lookup!: GridRowLookup<R>;\n\n constructor() {\n // This instance gets spread into each row's GridRowApi, so bind the methods up-front\n bindMethods(this);\n // Memoize these so that if the user is creating new `data` instances on every render, they\n // can use `getSelectedRowIds` to observer a stable list of `[pi:1, pi:2]`, etc.\n this.getVisibleRowsImpl = computedFn(this.getVisibleRowsImpl, { equals: comparer.shallow });\n this.getVisibleRowIdsImpl = computedFn(this.getVisibleRowIdsImpl, { equals: comparer.shallow });\n this.getSelectedRowsImpl = computedFn(this.getSelectedRowsImpl, { equals: comparer.shallow });\n this.getSelectedRowIdsImpl = computedFn(this.getSelectedRowIdsImpl, { equals: comparer.shallow });\n }\n\n /** Called once by the GridTable when it takes ownership of this api instance. */\n init(\n persistCollapse: string | undefined,\n virtuosoRef: MutableRefObject<VirtuosoHandle | null>,\n virtuosoRangeRef: MutableRefObject<ListRange | null>,\n ) {\n // Technically this drives both row-collapse and column-expanded\n if (persistCollapse) this.tableState.loadCollapse(persistCollapse);\n this.virtuosoRef = virtuosoRef;\n this.virtuosoRangeRef = virtuosoRangeRef;\n this.lookup = createRowLookup(this, virtuosoRef, virtuosoRangeRef);\n }\n\n public scrollToIndex(indexOrOptions: GridTableScrollOptions): void {\n if (!this.virtuosoRef.current) return;\n\n const scrollToOpts =\n typeof indexOrOptions === \"number\" ? { index: indexOrOptions, behavior: \"smooth\" as const } : indexOrOptions;\n\n if (shouldSkipScrollTo(scrollToOpts.index, this.virtuosoRangeRef)) return;\n\n this.virtuosoRef.current.scrollToIndex(scrollToOpts);\n }\n\n public getSelectedRowIds(kind?: string): string[] {\n return this.getSelectedRowIdsImpl(kind ?? undefined);\n }\n\n // impl with required param for computedFn\n private getSelectedRowIdsImpl(kind: string | undefined): string[] {\n return this.tableState.selectedRows.filter((rs) => !kind || rs.kind === kind).map((rs) => rs.row.id);\n }\n\n public getSelectedRows(kind?: string): any {\n return this.getSelectedRowsImpl(kind ?? undefined);\n }\n\n // impl with required param for computedFn\n private getSelectedRowsImpl(kind: string | undefined): any {\n return this.tableState.selectedRows.filter((rs) => !kind || rs.kind === kind).map((rs) => rs.row);\n }\n\n // The `any` is not great, but getting the overload to handle the optional kind is annoying\n public getVisibleRows(kind?: string): any {\n return this.getVisibleRowsImpl(kind ?? undefined);\n }\n\n // impl with required param for computedFn\n private getVisibleRowsImpl(kind: string | undefined) {\n return this.tableState.visibleRows.filter((row) => !kind || row.kind === kind).map((rs) => rs.row);\n }\n\n public getVisibleRowIds(kind?: string): any {\n return this.getVisibleRowIdsImpl(kind ?? undefined);\n }\n\n // impl with required param for computedFn\n private getVisibleRowIdsImpl(kind: string | undefined) {\n return this.tableState.visibleRows.filter((row) => !kind || row.kind === kind).map((rs) => rs.row.id);\n }\n\n public clearSelections(id?: string) {\n this.tableState.selectRow(\"header\", false);\n }\n\n public setActiveRowId(id: string | undefined) {\n this.tableState.activeRowId = id;\n }\n\n public setActiveCellId(id: string | undefined) {\n this.tableState.activeCellId = id;\n }\n\n public selectRow(id: string, selected: boolean = true) {\n this.tableState.selectRow(id, selected);\n }\n\n public toggleCollapsedRow(id: string) {\n this.tableState.toggleCollapsed(id);\n }\n\n public isCollapsedRow(id: string) {\n return this.tableState.isCollapsed(id);\n }\n\n public setVisibleColumns(ids: string[]) {\n this.tableState.setVisibleColumns(ids);\n }\n\n public getVisibleColumnIds() {\n return this.tableState.visibleColumnIds;\n }\n\n public deleteRows(ids: string[]) {\n this.tableState.deleteRows(ids);\n }\n\n public downloadToCsv(fileName: string): void {\n // Create a link element, set the download attribute with the provided filename\n const link = document.createElement(\"a\");\n if (link.download === undefined) throw new Error(\"This browser does not support the download attribute.\");\n // Create a Blob from the CSV content\n const url = URL.createObjectURL(\n new Blob([this.generateCsvContent().join(\"\\n\")], { type: \"text/csv;charset=utf-8;\" }),\n );\n link.setAttribute(\"href\", url);\n // Strip .csv so we can replace `.`s and then add it back...\n // (We replace dots to prevent them from messing up the file name extension.)\n const downloadName = fileName.replace(/\\.csv$/, \"\").replace(/\\./g, \"_\") + \".csv\";\n link.setAttribute(\"download\", downloadName);\n link.style.visibility = \"hidden\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n public copyToClipboard(): Promise<void> {\n // Copy the CSV content to the clipboard\n const content = this.generateCsvContent().join(\"\\n\");\n return navigator.clipboard.writeText(content).catch((err) => {\n // Let the user know the copy failed...\n window.alert(\"Failed to copy to clipboard, probably due to browser restrictions.\");\n throw err;\n });\n }\n\n // visibleForTesting, not part of the GridTableApi\n // ...although maybe it could be public someday, to allow getting the raw the CSV content\n // and then sending it somewhere else, like directly to a gsheet.\n public generateCsvContent(): string[] {\n const csvPrefixRows = this.tableState.csvPrefixRows?.map((row) => row.map(escapeCsvValue).join(\",\")) ?? [];\n // Convert the array of rows into CSV format\n const dataRows = this.tableState.visibleRows.map((rs) => {\n const values = this.tableState.visibleCsvColumns.map((c) => {\n // Just guessing for level=1\n const maybeContent = applyRowFn(c, rs.row, this as any as GridRowApi<R>, 1, true, undefined);\n if (isGridCellContent(maybeContent)) {\n const cell = maybeContent;\n const content = maybeApply(cell.content);\n // Anything not isJSX (like a string) we can put into the CSV directly\n if (!isJSX(content)) return content;\n // Otherwise use the value/sortValue values\n return isDefined(cell.value) ? maybeApply(cell.value) : cell.sortValue ? maybeApply(cell.sortValue) : \"-\"; // Do we need the \"-\" handling unclear if we use it ever\n } else {\n // ReactNode\n return isJSX(maybeContent) ? \"-\" : maybeContent;\n }\n });\n return values.map(toCsvString).map(escapeCsvValue).join(\",\");\n });\n return [...csvPrefixRows, ...dataRows];\n }\n}\n\nfunction toCsvString(value: any): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return value.toString();\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n return String(value);\n}\n\nfunction escapeCsvValue(value: string): string {\n // Wrap values with special chars in quotes, and double quotes themselves\n if (value.includes('\"') || value.includes(\",\") || value.includes(\"\\n\")) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction bindMethods(instance: any): void {\n Object.getOwnPropertyNames(Object.getPrototypeOf(instance)).forEach((key) => {\n if (instance[key] instanceof Function && key !== \"constructor\") instance[key] = instance[key].bind(instance);\n });\n}\n\nexport function maybeApply<T>(maybeFn: MaybeFn<T>): T {\n return typeof maybeFn === \"function\" ? (maybeFn as any)() : maybeFn;\n}\n","import { makeAutoObservable, observable, reaction } from \"mobx\";\nimport React from \"react\";\nimport { Kinded, OnRowSelect, sortFn } from \"src/components\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { GridSortConfig } from \"src/components/Table/GridTable\";\nimport { GridTableApi } from \"src/components/Table/GridTableApi\";\nimport { Direction, GridColumnWithId } from \"src/components/Table/types\";\nimport { ColumnStates } from \"src/components/Table/utils/ColumnStates\";\nimport { DraggedOver, RowState } from \"src/components/Table/utils/RowState\";\nimport { RowStates } from \"src/components/Table/utils/RowStates\";\nimport { ASC, DESC, HEADER, KEPT_GROUP, reservedRowKinds } from \"src/components/Table/utils/utils\";\n\n// A parent row can be partially selected when some children are selected/some aren't.\nexport type SelectedState = \"checked\" | \"unchecked\" | \"partial\";\n\n/**\n * Stores the collapsed & selected state of rows.\n *\n * I.e. this implements \"collapse parent\" --> \"hides children\", and\n * \"select parent\" --> \"select parent + children\".\n *\n * There should be a single, stable `RowStateStore` instance per `GridTable`, so\n * that children don't have to re-render even as we incrementally add/remove rows\n * to the table (i.e. the top-level rows identity changes, but each row within it\n * may not).\n *\n * We use mobx ObservableSets/ObservableMaps to drive granular re-rendering of rows/cells\n * that need to change their toggle/select on/off in response to parent/child\n * changes.\n */\nexport class TableState<R extends Kinded> {\n private persistCollapse: string | undefined;\n // The current list of rows, basically a useRef.current. Only shallow reactive.\n private rows: GridDataRow<R>[] = [];\n // The current list of columns, basically a useRef.current. Only ref reactive.\n public columns: GridColumnWithId<R>[] = [];\n public readonly api: GridTableApi<R>;\n private readonly rowStates = new RowStates(this);\n private readonly columnStates = new ColumnStates<R>();\n // Keeps track of the 'active' row, formatted `${row.kind}_${row.id}`\n activeRowId: string | undefined = undefined;\n // Keeps track of the 'active' cell, formatted `${row.kind}_${row.id}_${column.name}`\n activeCellId: string | undefined = undefined;\n /** Stores the current client-side type-ahead search/filter. */\n search: string[] = [];\n /** Stores whether CSVs should have some prefix rows. */\n csvPrefixRows: string[][] | undefined = undefined;\n\n // Tracks the current `sortConfig`\n public sortConfig: GridSortConfig | undefined;\n // Tracks the active sort column(s), so GridTable or SortHeaders can reactively\n // re-render (for GridTable, only if client-side sorting)\n public sort: SortState = {};\n // Keep track of the `initialSortState` so we can (1) revert back to it, and (2) properly derive next sort state\n private initialSortState: SortState | undefined;\n // The server-side `onSort` callback, if any.\n private onSort: ((orderBy: any | undefined, direction: Direction | undefined) => void) | undefined;\n onRowSelect: OnRowSelect<any> | undefined = undefined;\n\n /**\n * Creates the `RowState` for a given `GridTable`.\n */\n constructor(api: GridTableApi<any>) {\n this.api = api;\n // Make ourselves an observable so that mobx will do caching of .collapseIds so\n // that it'll be a stable identity for GridTable to useMemo against.\n makeAutoObservable(this, {\n // We use `ref`s so that observables can watch the immutable data change w/o deeply proxy-ifying Apollo fragments\n rows: observable.ref,\n columns: observable.ref,\n search: observable.ref,\n } as any);\n // If the kept rows went from empty to not empty, then introduce the SELECTED_GROUP row as collapsed\n reaction(\n () => [...this.keptRows.values()],\n (curr, prev) => {\n if (prev.length === 0 && curr.length > 0) {\n this.rowStates.get(KEPT_GROUP).collapsed = true;\n }\n },\n );\n }\n\n loadCollapse(persistCollapse: string): void {\n this.persistCollapse = persistCollapse;\n this.rowStates.storage.load(persistCollapse);\n this.columnStates.loadExpanded(persistCollapse);\n }\n\n initSortState(sortConfig: GridSortConfig | undefined, columns: GridColumnWithId<R>[]) {\n if (this.sortConfig) {\n return;\n }\n\n this.sortConfig = sortConfig;\n\n if (sortConfig?.on === \"client\") {\n const { initial, primary } = sortConfig;\n const primaryKey: string | undefined = primary?.[0];\n const persistentSortData = primaryKey\n ? { persistent: { columnId: primaryKey, direction: primary?.[1] ?? ASC } }\n : {};\n\n if (initial === undefined && \"initial\" in sortConfig) {\n // if explicitly set to `undefined`, then do not sort\n this.initialSortState = undefined;\n } else if (initial) {\n this.initialSortState = { current: { columnId: initial[0], direction: initial[1] }, ...persistentSortData };\n } else {\n // If no explicit sortState, assume 1st column ascending\n const firstSortableColumn = columns.find((c) => c.clientSideSort !== false)?.id;\n this.initialSortState = firstSortableColumn\n ? { current: { columnId: firstSortableColumn, direction: ASC }, ...persistentSortData }\n : undefined;\n }\n } else {\n this.initialSortState = sortConfig?.value\n ? { current: { columnId: sortConfig?.value[0], direction: sortConfig?.value[1] } }\n : undefined;\n }\n\n // Only change `this.sort` if `initialSortState` is defined.\n if (this.initialSortState) {\n this.sort = this.initialSortState;\n }\n\n this.onSort = sortConfig?.on === \"server\" ? sortConfig.onSort : undefined;\n }\n\n setSortKey(clickedColumnId: string) {\n if (this.sortConfig) {\n const newState = deriveSortState(this.sort, clickedColumnId, this.initialSortState);\n this.sort = newState ?? {};\n if (this.onSort) {\n const { columnId, direction } = newState?.current ?? {};\n this.onSort(columnId, direction);\n }\n }\n }\n\n get sortState(): SortState | undefined {\n return this.sort.current ? this.sort : undefined;\n }\n\n /** Returns a client-side sort function, if applicable. */\n get sortFn(): ((a: RowState<R>, b: RowState<R>) => number) | undefined {\n const { sortState, sortConfig, visibleColumns } = this;\n if (!sortState || sortConfig?.on !== \"client\") return undefined;\n // sortRows.ts wants to sort based on the GridDataRow, so make a small `rowStateFn` adapter\n const dataRowFn = sortFn(visibleColumns, sortState, !!sortConfig.caseSensitive);\n return (a: RowState<R>, b: RowState<R>) => dataRowFn(a.row as any, b.row as any);\n }\n\n // Updates the list of rows and regenerates the collapsedRows property if needed.\n setRows(rows: GridDataRow<R>[]): void {\n this.rowStates.setRows(rows);\n this.rows = rows;\n }\n\n setColumns(columns: GridColumnWithId<R>[], visibleColumnsStorageKey: string | undefined): void {\n if (columns !== this.columns) {\n this.columnStates.setColumns(columns, visibleColumnsStorageKey);\n this.columns = columns;\n }\n }\n\n setSearch(search: string | undefined): void {\n // Break up \"foo bar\" into `[foo, bar]` and a row must match both `foo` and `bar`\n this.search = (search && search.split(/ +/)) || [];\n }\n\n setCsvPrefixRows(csvPrefixRows: string[][] | undefined): void {\n this.csvPrefixRows = csvPrefixRows;\n }\n\n get visibleRows(): RowState<R>[] {\n return this.rowStates.visibleRows;\n }\n\n /** Returns visible columns, i.e. those that are visible + any expanded children. */\n get visibleColumns(): GridColumnWithId<R>[] {\n return this.columnStates.allVisibleColumns(\"web\").map((cs) => cs.column);\n }\n\n /** Returns visible columns, i.e. those that are visible + any expanded children. */\n get visibleCsvColumns(): GridColumnWithId<R>[] {\n return this.columnStates.allVisibleColumns(\"csv\").map((cs) => cs.column);\n }\n\n /** Implements GridTableApi.visibleColumnIds. */\n get visibleColumnIds(): string[] {\n return this.visibleColumns.map((cs) => cs.id);\n }\n\n setVisibleColumns(ids: string[]) {\n this.columnStates.setVisibleColumns(ids);\n }\n\n get expandedColumnIds(): string[] {\n return this.columnStates.expandedColumns.map((cs) => cs.column.id);\n }\n\n isExpandedColumn(columnId: string): boolean {\n return this.columnStates.get(columnId).isExpanded;\n }\n\n toggleExpandedColumn(columnId: string) {\n this.columnStates.get(columnId).toggleExpanded();\n }\n\n numberOfExpandedChildren(columnId: string): number {\n // Should this be only _visible_ children?\n return this.columnStates.get(columnId).children?.length ?? 0;\n }\n\n loadExpandedColumns(columnId: string): Promise<void> {\n return this.columnStates.get(columnId).doExpand();\n }\n\n /**\n * Returns selected data rows (non-header, non-totals, etc.), ignoring rows that\n * have `row.selectable !== false`.\n */\n get selectedRows(): RowState<R>[] {\n return this.rowStates.allStates.filter((rs) => rs.isSelected && !reservedRowKinds.includes(rs.row.kind));\n }\n\n /** Returns kept group row, with the latest kept children, if any. */\n get keptRowGroup(): GridDataRow<R> {\n return this.rowStates.get(KEPT_GROUP).row;\n }\n\n /** Returns kept rows, i.e. those that were user-selected but then client-side or server-side filtered. */\n get keptRows(): GridDataRow<R>[] {\n return this.rowStates.keptRows.map((rs) => rs.row);\n }\n\n // Should be called in an Observer/useComputed to trigger re-renders\n getSelected(id: string): SelectedState {\n const rs = this.rowStates.get(id);\n // The header has special behavior to \"see through\" selectable parents\n return id === HEADER ? rs.selectedStateForHeader : rs.selectedState;\n }\n\n selectRow(id: string, selected: boolean): void {\n this.rowStates.get(id).select(selected);\n }\n\n get collapsedIds(): string[] {\n return this.rowStates.collapsedRows.map((rs) => rs.row.id);\n }\n\n // Should be called in an Observer/useComputed to trigger re-renders\n isCollapsed(id: string): boolean {\n return this.rowStates.get(id).collapsed;\n }\n\n toggleCollapsed(id: string): void {\n this.rowStates.toggleCollapsed(id);\n }\n\n deleteRows(ids: string[]): void {\n this.rows = this.rows.filter((row) => !ids.includes(row.id));\n this.rowStates.delete(ids);\n }\n\n maybeSetRowDraggedOver(\n id: string,\n draggedOver: DraggedOver,\n requireSameParentRow: GridDataRow<R> | undefined = undefined,\n ): void {\n this.rowStates.maybeSetRowDraggedOver(id, draggedOver, requireSameParentRow);\n }\n}\n\n/** Provides a context for rows to access their table's `TableState`. */\nexport const TableStateContext = React.createContext<{ tableState: TableState<any> }>({\n get tableState(): TableState<any> {\n throw new Error(\"No TableStateContext provider\");\n },\n});\n\n// Exported for testing purposes\nexport function deriveSortState(\n currentSortState: SortState,\n clickedKey: string,\n initialSortState: SortState | undefined,\n): SortState | undefined {\n // If the current sort state is not defined then sort ASC on the clicked key.\n if (!currentSortState.current) {\n return { ...initialSortState, current: { columnId: clickedKey, direction: ASC } };\n }\n\n const {\n current: { columnId: currentKey, direction: currentDirection },\n } = currentSortState;\n\n // If clicking a new column, then sort ASC on the clicked key\n if (clickedKey !== currentKey) {\n return { ...initialSortState, current: { columnId: clickedKey, direction: ASC } };\n }\n\n // If there is an `initialSortState` and we're clicking on that same key, then flip the sort.\n // Handles cases where the initial sort is DESC so that we can allow for DESC to ASC sorting.\n if (initialSortState && initialSortState.current?.columnId === clickedKey) {\n return {\n ...initialSortState,\n current: { columnId: clickedKey, direction: (currentDirection as any as string) === ASC ? DESC : ASC },\n };\n }\n\n // Otherwise when clicking the current column, toggle through sort states\n if ((currentDirection as any as string) === ASC) {\n // if ASC -> go to desc\n return { ...initialSortState, current: { columnId: clickedKey, direction: DESC } };\n }\n\n // Else, direction is already DESC, so revert to original sort value.\n return initialSortState;\n}\n\ntype ColumnSort = {\n columnId: string;\n direction: Direction;\n};\n\nexport type SortState = {\n current?: ColumnSort;\n /** The persistent sort is always applied first, i.e. for schedules, probably. */\n persistent?: ColumnSort;\n};\n\nexport type SortOn = \"client\" | \"server\" | undefined;\n","import { camelCase } from \"change-case\";\nimport { makeAutoObservable } from \"mobx\";\nimport { GridColumnWithId, Kinded } from \"src\";\nimport { ColumnState } from \"src/components/Table/utils/ColumnState\";\nimport { ColumnStorage } from \"src/components/Table/utils/ColumnStorage\";\n\n/** A reactive/observable wrapper around our columns. */\nexport class ColumnStates<R extends Kinded> {\n // The top-level list of columns\n private columns: ColumnState<R>[] = [];\n private map = new Map<string, ColumnState<R>>();\n private storage = new ColumnStorage(this);\n\n constructor() {\n makeAutoObservable(this);\n }\n\n /**\n * Updates our internal columns states when `props.columns` changes.\n *\n * We handle sessionStorage here b/c we allow the user to either provide their own\n * storage key, or calc the storage key based on the currently-visible columns.\n * So like you expand a column, and new columns show up, but we'll remember they\n * were hidden last time you looked at this specific expansion of columns.\n */\n setColumns(columns: GridColumnWithId<R>[], visibleColumnsStorageKey: string | undefined): void {\n if (columns.some((c) => c.canHide)) {\n // We optionally auto-calc visible columns based on the currently-_potentially_-visible columns\n visibleColumnsStorageKey ??= camelCase(columns.map((c) => c.id).join());\n this.loadVisible(visibleColumnsStorageKey);\n }\n this.columns = columns.map((c) => this.addColumn(c));\n // After the very first non-zero `setColumns`, we disconnect from sessionStorage\n if (columns.length > 0) this.storage.done();\n }\n\n /** Adds a column to our state, i.e. maybe a dynamically loaded column. */\n addColumn(column: GridColumnWithId<R>): ColumnState<R> {\n const existing = this.map.get(column.id);\n if (!existing) {\n const cs = new ColumnState(this, this.storage, column);\n this.map.set(column.id, cs);\n return cs;\n } else {\n existing.column = column;\n // Any time a column is re-added (i.e. props.columns changed), re-expand it\n // TODO: verify this eslint ignore\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n if (existing.isExpanded) existing.doExpand(true);\n return existing;\n }\n }\n\n /** Returns the `ColumnState` for the given `id`. */\n get(id: string): ColumnState<R> {\n const cs = this.map.get(id);\n if (!cs) throw new Error(`No ColumnState for ${id}`);\n return cs;\n }\n\n /** Returns all currently-expanded columns. */\n get expandedColumns(): ColumnState<R>[] {\n return this.columns.filter((cs) => cs.isExpanded);\n }\n\n /** Returns a flat list of all visible columns. */\n allVisibleColumns(showIn: \"web\" | \"csv\"): ColumnState<R>[] {\n return this.columns\n .flatMap((cs) => cs.maybeSelfAndChildren)\n .filter((cs) => !cs.column.showIn || cs.column.showIn === showIn)\n .filter((cs) => (showIn === \"csv\" ? !cs.column.isAction : true));\n }\n\n setVisibleColumns(ids: string[]): void {\n for (const cs of this.map.values()) {\n cs.setVisible(ids.includes(cs.column.id));\n }\n }\n\n loadExpanded(storageKey: string): void {\n this.storage.loadExpanded(storageKey);\n }\n\n loadVisible(storageKey: string): void {\n this.storage.loadVisible(storageKey);\n }\n}\n","import { makeAutoObservable, observable } from \"mobx\";\nimport { GridColumnWithId, Kinded } from \"src/components/Table/types\";\nimport { assignDefaultColumnIds } from \"src/components/Table/utils/columns\";\nimport { ColumnStates } from \"src/components/Table/utils/ColumnStates\";\nimport { ColumnStorage } from \"src/components/Table/utils/ColumnStorage\";\nimport { isFunction } from \"src/utils/index\";\n\n/**\n * A reactive/observable wrapper around each GridColumn.\n *\n * This is primarily for tracking visible/expanded columns for tables\n * that use the expandable columns feature.\n */\nexport class ColumnState<R extends Kinded> {\n column: GridColumnWithId<R>;\n children: ColumnState<R>[] | undefined = undefined;\n private visible = true;\n private expanded = false;\n\n constructor(\n private states: ColumnStates<R>,\n storage: ColumnStorage<R>,\n column: GridColumnWithId<R>,\n ) {\n this.column = column;\n // If the user sets `canHide: true`, we default to hidden unless they set `initVisible: true`\n this.visible = storage.wasVisible(column.id) ?? (column.canHide ? (column.initVisible ?? false) : true);\n if (this.visible && (storage.wasExpanded(column.id) ?? column.initExpanded)) {\n this.expanded = true;\n // TODO: verify this eslint ignore\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.doExpand();\n }\n makeAutoObservable(this, { column: observable.ref }, { name: `ColumnState@${column.id}` });\n }\n\n setVisible(visible: boolean): void {\n const wasVisible = this.visible;\n this.visible = visible;\n // If an expandable header is becoming visible for the 1st time, expand it\n if (!wasVisible && visible && this.column.initExpanded && this.children === undefined) {\n this.expanded = true;\n // TODO: verify this eslint ignore\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.doExpand();\n }\n }\n\n get isExpanded(): boolean {\n return this.expanded;\n }\n\n toggleExpanded(): void {\n const wasExpanded = this.expanded;\n this.expanded = !this.expanded;\n // The first time we expand, fetch our children. Note that ExpandableHeader\n // technically pre-loads our children, so it can show a spinner while loading,\n // and only after loading is complete, tell our column to expand.\n // TODO: verify this eslint ignore\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n if (!wasExpanded) this.doExpand();\n }\n\n /** Calls the `column.expandColumns` function, if set, and adds the resulting columns. */\n async doExpand(force: boolean = false): Promise<void> {\n const { expandColumns } = this.column;\n // If we've already got the children, don't re-expand unless forced (i.e. props.columns changed)\n if (this.children !== undefined && !force) return;\n if (isFunction(expandColumns)) {\n const ecs = await expandColumns();\n this.children = assignDefaultColumnIds(ecs).map((ec) => this.states.addColumn(ec));\n } else if (expandColumns) {\n this.children = expandColumns.map((ec) => this.states.addColumn(ec as GridColumnWithId<R>));\n }\n }\n\n /** Returns this column, if visible, and its children, if expanded. */\n get maybeSelfAndChildren(): ColumnState<R>[] {\n if (!this.visible) {\n return [];\n } else if (this.expanded && this.children) {\n // Maybe do the `hideOnExpand` thing here? Seems cute, but the Row rendering still\n // needs to do the \"look back to the prior column for the expandableHeader cell\" logic.\n // if (this.column.hideOnExpand) {\n // return this.children.flatMap((c) => c.selfAndMaybeChildren);\n // }\n return [this, ...this.children.flatMap((c) => c.maybeSelfAndChildren)];\n } else {\n return [this];\n }\n }\n}\n","import { useContext } from \"react\";\nimport { GridDataRow, HEADER, IconButton, IconButtonProps, KEPT_GROUP, TableStateContext } from \"src/components/index\";\nimport { useComputed } from \"src/hooks\";\n\nexport interface GridTableCollapseToggleProps extends Pick<IconButtonProps, \"compact\"> {\n row: GridDataRow<any>;\n}\n\n/** Provides a chevron icons to collapse/un-collapse for parent/child tables. */\nexport function CollapseToggle(props: GridTableCollapseToggleProps) {\n const { row, compact } = props;\n const { tableState } = useContext(TableStateContext);\n\n const isCollapsed = useComputed(() => tableState.isCollapsed(row.id), [tableState]);\n const iconKey = isCollapsed ? \"chevronRight\" : \"chevronDown\";\n const headerIconKey = isCollapsed ? \"chevronsRight\" : \"chevronsDown\";\n\n // If we're not a header and not the selected group row, only render a toggle if we have child rows to actually collapse\n const isHeader = row.kind === HEADER;\n const isKeptGroup = row.kind === KEPT_GROUP;\n const hasChildren = row.children ? row.children.length > 0 : false;\n if (!isHeader && !isKeptGroup && !hasChildren) {\n return null;\n }\n\n return (\n <IconButton\n onClick={() => tableState.toggleCollapsed(row.id)}\n icon={isHeader ? headerIconKey : iconKey}\n compact={compact}\n />\n );\n}\n","import equal from \"fast-deep-equal\";\nimport { useEffect, useState } from \"react\";\nimport { safeEntries } from \"src/utils/index\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { Breakpoint, Breakpoints } from \"../Css\";\n\ntype BreakpointsType = Record<Breakpoint, boolean>;\n\n/**\n * A React hook to return a record of responsive breakpoints that updates on resize.\n *\n * @example\n * const breakpoints = useBreakpoint();\n * if (breakpoints.mdAndDown) { ...do something cool }\n */\nexport function useBreakpoint(): BreakpointsType {\n const [breakpoints, setBreakpoints] = useState(matchMediaBreakpoints());\n\n const handleResize = useDebouncedCallback(() => {\n const newBps = matchMediaBreakpoints();\n if (equal(breakpoints, newBps)) return;\n\n setBreakpoints(newBps);\n }, 250);\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleResize);\n // Remove event listener on cleanup\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [handleResize]);\n\n return breakpoints;\n}\n\nfunction matchMediaBreakpoints(): BreakpointsType {\n const bps = {} as BreakpointsType;\n safeEntries(Breakpoints).forEach(([name, bp]) => {\n bps[name] = window.matchMedia(bp.replace(\"@media \", \"\")).matches;\n });\n return bps;\n}\n","import { autorun, IReactionDisposer } from \"mobx\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { shallowEqual } from \"src/utils/shallowEqual\";\n\ninterface Current<T> {\n // Track the mobx autorunner\n runner: IReactionDisposer | undefined;\n // Track the current value, as we only re-calc on changes\n value: T | undefined;\n // Track whether our autorun has actually run; sometimes it won't, i.e. if mobx\n // is already in a \"run reactions\" loop, we'll see useMemo complete before\n // we've had a chance to calc the value.\n hasRan: boolean;\n}\n\n/**\n * Evaluates a computed function `fn` to a regular value and triggers a re-render whenever it changes.\n *\n * Some examples:\n *\n * ```ts\n * // Good, watching a single value\n * const firstName = useComputed(() => author.firstName, [author]);\n *\n * // Good, watching multiple values in a single `useComputed`\n * const { firstName, lastName } = useComputed(() => {\n * // Make sure to read the values\n * const { firstName, lastName } = author;\n * return { firstName, lastName };\n * }, [author]);\n *\n * // Good, watching a form-state field\n * const firstName = useComputed(() => {\n * return formState.firstName.value;\n * }, [formState]);\n *\n * // Good, watching an observable `formState` + a POJO/immutable `items` which is not an observable\n * const item = useComputed(() => {\n * return items.find((i) => i.id === formState.itemId.value);\n * }, [formState, items]);\n *\n * // Bad, fn and deps are \"watching the same thing\".\n * const firstName = useComputed(() => {\n * return formState.firstName.value;\n * }, [formState.firstName.value]);\n * ```\n *\n * Note that the difference between the `fn` and the `deps` is:\n *\n * - `fn` is \"which values we are watching in the observable\" (i.e. store or `formState`), and\n * - `deps` is \"which observable we're watching\" (i.e. store or `formState`)\n *\n * So the `deps` array shouldn't overlap with any of the \"watched values\" of the `fn` lambda,\n * other than the root observer itself (which admittedly should rarely change, i.e. our stores\n * are generally global-ish/very stable, but can change if the user switches pages i.e. \"from\n * editing author:1 t editing author:2\").\n */\nexport function useComputed<T>(fn: (prev: T | undefined) => T, deps: readonly any[]): T {\n // We always return the useRef value, and use this just to trigger re-renders\n const [, setTick] = useState(0);\n\n const ref = useRef<Current<T>>({\n runner: undefined,\n value: undefined,\n hasRan: false,\n });\n\n // We use a `useMemo` b/c we want this to synchronously calc, so that even\n // the very 1st render can use the result of our computed, i.e. instead of\n // with `useEffect`, which would only get calc'd after the 1st render has\n // already been done.\n useMemo(() => {\n const { current } = ref;\n // If deps has changed, unhook the previous observer\n if (current.runner) {\n current.runner();\n }\n // If deps has changed, we're already re-running, so don't trigger a 2nd one\n current.hasRan = false;\n current.runner = autorun(() => {\n const { value: oldValue, hasRan } = current;\n // Always eval fn() (even on 1st render) to register our observable.\n const newValue = fn(oldValue);\n // If we've already run and the value hasn't changed, don't trigger a re-render\n //\n // Also, we avoid a deep equality, b/c if a `useComputed` is returning something complicated/cyclic,\n // like ReactElement, deep equality will crawl into the guts of React/ReactFiber and cycle/infinite loop.\n if (hasRan && shallowEqual(newValue, oldValue)) return;\n // Only change the identity of `current.value` after we've checked that it's not shallow equal\n current.value = newValue;\n current.hasRan = true;\n // Only trigger a re-render if this is not the 1st autorun. Note\n // that if deps has changed, we're inherently in a re-render so also\n // don't need to trigger an additional re-render.\n if (hasRan) {\n // This can cause 'Cannot update a component while rendering a different component'\n // if one component (the mutator) is updating observable from directly\n // within it's render method. Usually this is rare and can be avoided by\n // only updating observables from within useEffect.\n setTick((tick) => tick + 1);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n\n // unsubscribe the autorun when we're unmounted\n useEffect(() => {\n return ref.current.runner;\n }, []);\n\n // Occasionally autorun will not have run yet, in which case we have to just\n // accept running the eval fn twice (here to get the value for the 1st render,\n // and again for mobx to watch what observables we touch).\n if (!ref.current.hasRan) {\n ref.current.value = fn(undefined);\n }\n\n // We can use `!` here b/c we know that `autorun` set current\n return ref.current.value!;\n}\n","/**\n * An inlined version of shallowEach, see https://github.com/facebook/react/issues/16919\n */\nexport function shallowEqual(objA: any, objB: any): boolean {\n if (Object.is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (let i = 0; i < keysA.length; i++) {\n const currentKey = keysA[i];\n if (!objB.hasOwnProperty(currentKey) || !Object.is(objA[currentKey], objB[currentKey])) {\n return false;\n }\n }\n\n return true;\n}\n","import { useState } from \"react\";\nimport { FilterDefs } from \"src\";\nimport { safeEntries } from \"src/utils\";\n\ninterface UsePersistedFilterProps<F> {\n filterDefs: FilterDefs<F>;\n}\n\ninterface FilterHook<F> {\n filter: F;\n setFilter: (filter: F) => void;\n}\n\nexport function useFilter<F>({ filterDefs }: UsePersistedFilterProps<F>): FilterHook<F> {\n const [filter, setFilter] = useState<F>(\n Object.fromEntries(\n safeEntries(filterDefs)\n .filter(([key, def]) => def(key as string).defaultValue !== undefined)\n .map(([key, def]) => [key, def(key as string).defaultValue]),\n ) as F,\n );\n\n return { setFilter, filter };\n}\n","import { useMemo } from \"react\";\nimport { useQueryState } from \"src/hooks/useQueryState\";\nimport { safeEntries } from \"src/utils/index\";\n\nexport interface GroupByHook<G extends string> {\n /** The current group by value. */\n value: G;\n /** Called when the group by have changed. */\n setValue: (groupBy: G) => void;\n /** The list of group by options. */\n options: Array<{ id: G; name: string }>;\n}\n\nexport function useGroupBy<G extends string>(opts: Record<G, string>): GroupByHook<G> {\n const options: { id: G; name: string }[] = useMemo(\n () => safeEntries(opts).map(([key, value]) => ({ id: key, name: value })),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const [value, setValue] = useQueryState(\"groupBy\", options[0].id);\n return { value, setValue, options };\n}\n","import { useCallback } from \"react\";\nimport { StringParam, useQueryParams } from \"use-query-params\";\n\nexport type UseQueryState<V> = [V, (value: V) => void];\n\n/**\n * Very similar to `useState` but persists in the query string.\n *\n * It currently doesn't fallback on session storage, which maybe it should if\n * this is used for group bys, b/c that is what usePersistedFilter does.\n *\n * Also only supports string values right now.\n */\nexport function useQueryState<V extends string = string>(name: string, initialValue: V): UseQueryState<V> {\n const [params, setParams] = useQueryParams({ [name]: StringParam });\n const value = (params[name] as V) || initialValue;\n const setValue = useCallback((value: V) => setParams({ [name]: value }, \"pushIn\"), [name, setParams]);\n return [value, setValue];\n}\n","import { HTMLAttributes } from \"react\";\nimport { useHover as AriaUseHover } from \"react-aria\";\n\ninterface useHoverProps {\n // Handler that is called when a hover interaction starts\n onHoverStart?: VoidFunction;\n // Handler that is called when a hover interaction ends\n onHoverEnd?: VoidFunction;\n // Handler that is called when hover state changes\n onHoverChange?: (isHovering: boolean) => void;\n // If the hover events should be disabled\n disabled?: boolean;\n}\n\n// Handles hover pointer interactions for an element.\nexport function useHover(props: useHoverProps): { hoverProps: HTMLAttributes<HTMLElement>; isHovered: boolean } {\n const { disabled: isDisabled, ...others } = props;\n return AriaUseHover({ isDisabled, ...others });\n}\n","import { useEffect, useMemo } from \"react\";\nimport { FilterDefs } from \"src/components\";\nimport { useSessionStorage } from \"src/hooks\";\nimport { safeEntries, safeKeys } from \"src/utils\";\nimport { JsonParam, useQueryParams } from \"use-query-params\";\n\ninterface UsePersistedFilterProps<F> {\n filterDefs: FilterDefs<F>;\n storageKey: string;\n}\n\ninterface PersistedFilterHook<F> {\n filter: F;\n setFilter: (filter: F) => void;\n}\n\n/**\n * Persists filter details in both browser storage and query parameters.\n * If a valid filter is present in the query params, then that will be used.\n * Otherwise it looks at browser storage, and finally the defaultFilter prop.\n */\nexport function usePersistedFilter<F>({ storageKey, filterDefs }: UsePersistedFilterProps<F>): PersistedFilterHook<F> {\n const filterKeys = Object.keys(filterDefs);\n const defaultFilter = useMemo(\n () =>\n Object.fromEntries(\n safeEntries(filterDefs)\n .filter(([key, def]) => def(key as string).defaultValue !== undefined)\n .map(([key, def]) => [key, def(key as string).defaultValue]),\n ),\n [filterDefs],\n );\n const [{ filter: queryParamsFilter }, setQueryParams] = useQueryParams({ filter: JsonParam });\n const [storedFilter, setStoredFilter] = useSessionStorage<F>(storageKey, queryParamsFilter ?? defaultFilter);\n const isQueryParamFilterValid = hasValidFilterKeys(queryParamsFilter, filterKeys);\n const filter: F = isQueryParamFilterValid ? queryParamsFilter : (storedFilter ?? defaultFilter);\n\n const setFilter = (filter: F) => setQueryParams({ filter });\n\n useEffect(\n () => {\n if (queryParamsFilter === undefined) {\n // if there is no filter in the query params, use stored filter\n // \"replaceIn\" replaces the url in history instead of creating a new history item\n // back button will go to previous url\n setQueryParams({ filter: storedFilter }, \"replaceIn\");\n } else if (!isQueryParamFilterValid) {\n // if there are invalid query params, fallback to the default filters\n setQueryParams({ filter: defaultFilter }, \"replaceIn\");\n } else if (JSON.stringify(queryParamsFilter) !== JSON.stringify(storedFilter)) {\n // if there is a valid filter in query params and its different from the\n // current storedFilter, use query params filter\n setStoredFilter(queryParamsFilter);\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [storedFilter, setStoredFilter, setQueryParams, queryParamsFilter],\n );\n\n return { setFilter, filter };\n}\n\n// check for valid filter keys in the query params\nfunction hasValidFilterKeys<F>(queryParamsFilter: F, definedKeys: (keyof F)[]): queryParamsFilter is F {\n return queryParamsFilter && safeKeys(queryParamsFilter).every((key) => definedKeys.includes(key as keyof F));\n}\n","import { useCallback, useState } from \"react\";\n\ntype UseSessionStorage<T> = [T, (value: T) => void];\n\nexport function useSessionStorage<T>(key: string, defaultValue: T): UseSessionStorage<T> {\n let hasSessionStorage = false;\n try {\n hasSessionStorage = !!window.sessionStorage;\n } catch (e) {\n // Catch errors if browser storage access is denied\n }\n\n const [state, setState] = useState(() => {\n if (!hasSessionStorage) {\n return defaultValue;\n }\n const parsed = getParsedStorage(key);\n if (parsed) {\n return parsed;\n }\n sessionStorage.setItem(key, JSON.stringify(defaultValue));\n return defaultValue;\n });\n\n const setAndSave = useCallback(\n (value: T) => {\n if (hasSessionStorage && value) {\n sessionStorage.setItem(key, JSON.stringify(value));\n }\n setState(value);\n },\n [hasSessionStorage, key],\n );\n\n return [state, setAndSave];\n}\n\nfunction getParsedStorage(key: string) {\n try {\n const storedString = sessionStorage.getItem(key);\n return storedString && JSON.parse(storedString);\n } catch (e) {\n sessionStorage.removeItem(key);\n }\n}\n","import { useContext } from \"react\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport { useComputed } from \"src/hooks\";\nimport { Checkbox } from \"src/inputs\";\n\ninterface SelectToggleProps {\n id: string;\n disabled?: boolean;\n}\n\n/** Provides a checkbox to show/drive this row's selected state. */\nexport function SelectToggle({ id, disabled }: SelectToggleProps) {\n const { tableState } = useContext(TableStateContext);\n const state = useComputed(() => tableState.getSelected(id), [tableState]);\n const selected = state === \"checked\" ? true : state === \"unchecked\" ? false : \"indeterminate\";\n\n return (\n <Checkbox\n checkboxOnly={true}\n disabled={disabled}\n label=\"Select\"\n onChange={(selected) => tableState.selectRow(id, selected)}\n selected={selected}\n />\n );\n}\n","import { Key, ReactNode, useRef } from \"react\";\nimport { useComboBox, useOverlayPosition } from \"react-aria\";\nimport { Item, useComboBoxState } from \"react-stately\";\nimport { Icon } from \"src/components\";\nimport { Popover } from \"src/components/internal\";\nimport { PresentationFieldProps } from \"src/components/PresentationContext\";\nimport { disabledOptionToKeyedTuple } from \"src/inputs/internal/ComboBoxBase\";\nimport { ListBox } from \"src/inputs/internal/ListBox\";\nimport { TextFieldBase, TextFieldBaseProps } from \"src/inputs/TextFieldBase\";\nimport { Value, valueToKey } from \"src/inputs/Value\";\n\nexport interface AutocompleteProps<T>\n extends Pick<PresentationFieldProps, \"labelStyle\">,\n Pick<TextFieldBaseProps<any>, \"label\" | \"clearable\" | \"startAdornment\" | \"fullWidth\"> {\n onSelect: (item: T) => void;\n /** A function that returns how to render the an option in the menu. If not set, `getOptionLabel` will be used */\n getOptionMenuLabel?: (o: T) => ReactNode;\n /** A function that returns the string value of the option. Used for accessibility purposes */\n getOptionLabel: (o: T) => string;\n /** A function that returns a unique key for an option */\n getOptionValue: (o: T) => string;\n /** Called when the input value changes */\n onInputChange: (value: string | undefined) => void;\n /** The current value of the input */\n value: string | undefined;\n /** The list of options to choose from */\n options: T[];\n /** The placeholder text to show when the input is empty */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** A list of options that are disabled. Can be either the option itself or an object with the option and a reason why it is disabled */\n disabledOptions?: (Value | { value: Value; reason: string })[];\n}\n\nexport function Autocomplete<T extends object>(props: AutocompleteProps<T>) {\n const {\n onSelect,\n getOptionLabel,\n getOptionValue,\n getOptionMenuLabel,\n onInputChange,\n value = \"\",\n options,\n disabled,\n disabledOptions,\n ...others\n } = props;\n\n const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);\n\n const comboBoxProps = {\n isDisabled: !!disabled,\n disabledKeys: Object.keys(disabledOptionsWithReasons),\n onInputChange: onInputChange,\n inputValue: value,\n items: options,\n // Allow the user to type in a value that is not in the list. Allows for the text to stay in the input when the user clicks away\n allowsCustomValue: true,\n children: (item: T) => (\n <Item key={getOptionValue(item)} textValue={getOptionLabel(item)}>\n {getOptionMenuLabel ? getOptionMenuLabel(item) : getOptionLabel(item)}\n </Item>\n ),\n onSelectionChange: (key: Key) => {\n const selectedItem = options.find((i) => getOptionValue(i) === key);\n if (selectedItem) {\n onInputChange(getOptionLabel(selectedItem));\n onSelect(selectedItem);\n }\n },\n ...others,\n };\n\n const state = useComboBoxState<T>(comboBoxProps);\n const inputWrapRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef(null);\n const listBoxRef = useRef(null);\n const popoverRef = useRef(null);\n const { inputProps, listBoxProps, labelProps } = useComboBox(\n {\n ...comboBoxProps,\n inputRef,\n listBoxRef,\n popoverRef,\n // When the input is focused and there are options, open the menu\n onFocus: () => options.length > 0 && state.open(),\n },\n state,\n );\n\n // useOverlayPosition moves the overlay to the top of the DOM to avoid any z-index issues. Uses the `targetRef` to DOM placement\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: inputWrapRef,\n overlayRef: popoverRef,\n scrollRef: listBoxRef,\n isOpen: state.isOpen,\n onClose: state.close,\n placement: \"bottom left\",\n });\n\n positionProps.style = {\n ...positionProps.style,\n width: inputWrapRef?.current?.clientWidth,\n // Ensures the menu never gets too small.\n minWidth: 200,\n };\n\n return (\n <>\n <TextFieldBase\n inputRef={inputRef}\n inputWrapRef={inputWrapRef}\n inputProps={inputProps}\n labelProps={labelProps}\n onChange={onInputChange}\n clearable\n // Respect if caller to passes in `startAdornment={undefined}`\n startAdornment={\"startAdornment\" in props ? props.startAdornment : <Icon icon=\"search\" />}\n {...others}\n />\n {state.isOpen && (\n <Popover\n triggerRef={inputRef}\n popoverRef={popoverRef}\n positionProps={positionProps}\n onClose={() => state.close()}\n isOpen={state.isOpen}\n minWidth={200}\n >\n <ListBox\n {...listBoxProps}\n positionProps={positionProps}\n state={state}\n listBoxRef={listBoxRef}\n getOptionValue={(o) => valueToKey(getOptionValue(o))}\n getOptionLabel={getOptionLabel}\n disabledOptionsWithReasons={disabledOptionsWithReasons}\n />\n </Popover>\n )}\n </>\n );\n}\n","import { DayPicker, Matcher } from \"react-day-picker\";\nimport { Day } from \"src/components/internal/DatePicker/Day\";\nimport { Header, YearSkipHeader } from \"src/components/internal/DatePicker/Header\";\nimport { WeekHeader } from \"src/components/internal/DatePicker/WeekHeader\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\nimport \"./DatePicker.css\";\n\nexport interface DatePickerProps {\n value?: Date;\n onSelect: (value: Date) => void;\n disabledDays?: Matcher | Matcher[];\n dottedDays?: Matcher[];\n useYearPicker?: boolean;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const { value, onSelect, disabledDays, dottedDays, useYearPicker } = props;\n const tid = useTestIds(props, \"datePicker\");\n\n return (\n <div css={Css.dib.bgWhite.xs.$} {...tid}>\n <DayPicker\n components={{ Caption: useYearPicker ? YearSkipHeader : Header, Head: WeekHeader, Day }}\n // DatePicker only allows for a single date to be `selected` (per our props) though DayPicker expects an array of dates\n selected={value ? [value] : []}\n defaultMonth={value ?? new Date()}\n onDayClick={(day, modifiers) => {\n if (modifiers.disabled) return;\n // Set the day value\n onSelect(day);\n }}\n disabled={disabledDays}\n modifiers={{ indicatorDot: dottedDays ?? [] }}\n />\n </div>\n );\n}\n","import { useRef } from \"react\";\nimport { DayProps, useDayRender } from \"react-day-picker\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\n/** Follows the same pattern as defined by the React-Day-Picker 'Day' component, plus sprinkling our own styling */\nexport function Day(props: DayProps) {\n // Was hoping we could pass the `datePicker` testid through, but was breaking something.\n const tid = useTestIds(props, \"datePickerDay\");\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { isHidden, isButton, activeModifiers, buttonProps, divProps } = useDayRender(\n props.date,\n props.displayMonth,\n buttonRef,\n );\n\n if (isHidden) {\n return <></>;\n }\n if (!isButton) {\n return <div {...divProps} />;\n }\n\n const { className, children, ...otherProps } = buttonProps;\n const {\n selected = false,\n indicatorDot = false,\n disabled = false,\n today = false,\n range_middle = false,\n range_start = false,\n range_end = false,\n } = activeModifiers;\n\n // It is possible that we have selected only one day for the range. In this case the date will be both the start and end.\n // When this happens, do not show styling as if there is an existing range.\n const showRangeStyles = !(range_end === true && range_start === true);\n const showActiveStyles = !disabled;\n\n return (\n <button\n {...otherProps}\n ref={buttonRef}\n type=\"button\"\n css={{\n ...Css.relative.pbPx(4).outline0.if(disabled).cursorNotAllowed.$,\n // Do not apply interaction styles for disabled or already selected days.\n ...(!selected &&\n !disabled && {\n \"&:hover:not(:active) > div\": Css.bgGray100.$,\n }),\n ...(!disabled && { \"&:active > div\": Css.bgGray400.gray900.$ }),\n \"&:focus:not(:active) > div\": Css.ba.bcBlue700.if(selected).bcBlue900.$,\n ...(showRangeStyles &&\n range_start &&\n Css.addIn(\":after\", { ...rangeBaseStyles, ...Css.rightPx(-2).wPx(8).$ }).$),\n ...(showRangeStyles && range_end && Css.addIn(\":after\", { ...rangeBaseStyles, ...Css.wPx(8).leftPx(-2).$ }).$),\n ...(showRangeStyles && range_middle && Css.addIn(\":after\", { ...rangeBaseStyles, ...Css.leftPx(-2).$ }).$),\n }}\n {...tid}\n >\n <div\n css={{\n ...Css.oh.gray900.relative.z1.br4.df.aic.jcc.wPx(28).hPx(30).mtPx(2).br4.$,\n ...(today && !range_middle && Css.bgGray100.$),\n ...(selected && !range_middle && Css.white.bgBlue700.$),\n ...(disabled && Css.gray500.$),\n }}\n >\n <div css={Css.mtPx(-2).$}>{children}</div>\n {indicatorDot && (\n <div\n // Using `absolute` position as to not change the placement of the day's number when this is introduced\n css={\n Css.absolute\n .bottomPx(4)\n .wPx(4)\n .hPx(4)\n .bgBlue700.br4.if(selected && !range_middle).bgWhite.$\n }\n {...tid.indicatorDot}\n />\n )}\n </div>\n </button>\n );\n}\n\nconst rangeBaseStyles = Css.absolute.topPx(2).contentEmpty.hPx(30).wPx(32).bgBlue100.$;\n","import { addMonths, addYears, format } from \"date-fns\";\nimport { CaptionProps, useNavigation } from \"react-day-picker\";\nimport { IconButton } from \"src/components/IconButton\";\nimport { Css, Palette } from \"src/Css\";\n\nexport function Header(props: CaptionProps) {\n const { displayMonth } = props;\n const { goToMonth } = useNavigation();\n\n return (\n <div css={Css.df.jcsb.aic.mlPx(12).mrPx(2).hPx(32).$}>\n <h1 css={Css.base.$}>{format(displayMonth, \"MMMM yyyy\")}</h1>\n <div>\n <IconButton color={Palette.Gray700} icon=\"chevronLeft\" onClick={() => goToMonth(addMonths(displayMonth, -1))} />\n <IconButton color={Palette.Gray700} icon=\"chevronRight\" onClick={() => goToMonth(addMonths(displayMonth, 1))} />\n </div>\n </div>\n );\n}\n\n// Header with year skip option\nexport function YearSkipHeader(props: CaptionProps) {\n const { displayMonth } = props;\n const { goToMonth } = useNavigation();\n\n return (\n <div css={Css.df.jcsb.aic.mlPx(12).mrPx(12).hPx(32).$}>\n <div css={Css.df.fdr.jcsb.$}>\n <IconButton color={Palette.Gray700} icon=\"chevronLeft\" onClick={() => goToMonth(addMonths(displayMonth, -1))} />\n <h1 css={Css.base.$}>{format(displayMonth, \"MMM\")}</h1>\n <IconButton color={Palette.Gray700} icon=\"chevronRight\" onClick={() => goToMonth(addMonths(displayMonth, 1))} />\n </div>\n <div css={Css.df.fdr.jcsb.$}>\n <IconButton color={Palette.Gray700} icon=\"chevronLeft\" onClick={() => goToMonth(addYears(displayMonth, -1))} />\n <h1 css={Css.base.$}>{format(displayMonth, \"yyyy\")}</h1>\n <IconButton color={Palette.Gray700} icon=\"chevronRight\" onClick={() => goToMonth(addYears(displayMonth, 1))} />\n </div>\n </div>\n );\n}\n","import { AriaButtonProps } from \"@react-types/button\";\nimport { RefObject, useMemo } from \"react\";\nimport { useButton, useFocusRing, useHover } from \"react-aria\";\nimport { Icon, IconProps, maybeTooltip, navLink, resolveTooltip } from \"src/components\";\nimport { Css, Palette } from \"src/Css\";\nimport { useGetRef } from \"src/hooks/useGetRef\";\nimport { BeamButtonProps, BeamFocusableProps } from \"src/interfaces\";\nimport { noop } from \"src/utils\";\nimport { getButtonOrLink } from \"src/utils/getInteractiveElement\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport interface IconButtonProps extends BeamButtonProps, BeamFocusableProps {\n /** The icon to use within the button. */\n icon: IconProps[\"icon\"];\n color?: Palette;\n bgColor?: Palette;\n /** The size of the icon, in increments, defaults to 3 which is 24px. */\n inc?: number;\n /** HTML attributes to apply to the button element when it is being used to trigger a menu. */\n menuTriggerProps?: AriaButtonProps;\n buttonRef?: RefObject<HTMLButtonElement>;\n /** Whether to show a 16x16px version of the IconButton */\n compact?: boolean;\n /** Whether to display the contrast variant */\n contrast?: boolean;\n /** Denotes if this button is used to download a resource. Uses the anchor tag with the `download` attribute */\n download?: boolean;\n /** Provides label for screen readers - Will become a required soon */\n label?: string;\n}\n\nexport function IconButton(props: IconButtonProps) {\n const {\n onClick: onPress,\n disabled,\n color,\n bgColor,\n icon,\n autoFocus,\n inc,\n buttonRef,\n tooltip,\n menuTriggerProps,\n openInNew,\n compact = false,\n contrast = false,\n download = false,\n forceFocusStyles = false,\n label,\n } = props;\n const isDisabled = !!disabled;\n const ariaProps = { onPress, isDisabled, autoFocus, ...menuTriggerProps };\n const ref = useGetRef(buttonRef);\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: typeof onPress === \"string\" ? noop : onPress,\n elementType: typeof onPress === \"string\" ? \"a\" : \"button\",\n },\n ref,\n );\n const { focusProps, isFocusVisible } = useFocusRing(ariaProps);\n const { hoverProps, isHovered } = useHover(ariaProps);\n const testIds = useTestIds(props, icon);\n\n const styles = useMemo(\n () => ({\n ...iconButtonStylesReset,\n ...(compact ? iconButtonCompact : iconButtonNormal),\n ...(isHovered && (contrast ? iconButtonContrastStylesHover : iconButtonStylesHover)),\n ...(isFocusVisible || forceFocusStyles ? iconButtonStylesFocus : {}),\n ...(isDisabled && iconButtonStylesDisabled),\n ...(bgColor && Css.bgColor(bgColor).$),\n }),\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isHovered, isFocusVisible, isDisabled, compact],\n );\n const iconColor = contrast ? contrastIconColor : defaultIconColor;\n\n const buttonAttrs = {\n ...testIds,\n ...buttonProps,\n ...focusProps,\n ...hoverProps,\n className: typeof onPress === \"string\" ? navLink : undefined,\n ref: ref as any,\n css: styles,\n \"aria-label\": label,\n };\n const buttonContent = (\n <Icon\n icon={icon}\n color={color || (isDisabled ? Palette.Gray400 : iconColor)}\n bgColor={bgColor}\n inc={compact ? 2 : inc}\n />\n );\n\n // If we're disabled b/c of a non-boolean ReactNode, or the caller specified tooltip text, then show it in a tooltip\n return maybeTooltip({\n title: resolveTooltip(disabled, tooltip),\n placement: \"top\",\n children: getButtonOrLink(buttonContent, onPress, buttonAttrs, openInNew, download),\n });\n}\n\nconst defaultIconColor = Palette.Gray900;\nconst contrastIconColor = Palette.White;\nconst iconButtonStylesReset = Css.bcTransparent.bss.bgTransparent.cursorPointer.outline0.dif.aic.jcc.transition.$;\nconst iconButtonNormal = Css.hPx(28).wPx(28).br8.bw2.$;\nconst iconButtonCompact = Css.hPx(18).wPx(18).br4.bw1.$;\nexport const iconButtonStylesHover = Css.bgGray200.$;\nexport const iconButtonContrastStylesHover = Css.bgGray700.$;\nconst iconButtonStylesFocus = Css.bcBlue700.$;\nconst iconButtonStylesDisabled = Css.cursorNotAllowed.$;\n","import { MutableRefObject, RefObject, useRef } from \"react\";\n\n/**\n * Replaces code like `const ref = passedRef || useRef(null)` which was triggering rules-of-hooks violations. Used\n * to sometimes accept a caller's ref, or if they did not pass one, use an internal one anyway.\n */\nexport const useGetRef = <T extends HTMLElement>(maybeRef: RefObject<T> | undefined): MutableRefObject<T | null> => {\n const newRef = useRef(null);\n return maybeRef || newRef;\n};\n","import { Interpolation, Theme } from \"@emotion/react\";\nimport { PressEvent } from \"@react-types/shared\";\nimport { HTMLAttributes, ReactNode } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { isAbsoluteUrl } from \"src/utils/index\";\n\nexport function getButtonOrLink(\n content: ReactNode,\n // PressEvent set by React-Aria's `useButton`.\n onClick: ((e: PressEvent) => void) | VoidFunction | string | undefined,\n attrs: HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & { css?: Interpolation<Theme> },\n openInNew: boolean = false,\n downloadLink: boolean = false,\n): JSX.Element {\n return typeof onClick === \"string\" ? (\n isAbsoluteUrl(onClick) || openInNew || downloadLink ? (\n <a\n {...attrs}\n href={onClick}\n {...(downloadLink ? { download: \"\" } : { target: \"_blank\", rel: \"noreferrer noopener\" })}\n >\n {content}\n </a>\n ) : (\n <Link {...(attrs as any)} to={onClick}>\n {content}\n </Link>\n )\n ) : (\n // Cast `onClick` as VoidFunction this is the type if will be if not overwritten by `attrs` (which happens via Button.tsx)\n // Type `(e: PressEvent) => {}` is only used but Button.tsx, which passes the `onClick` prop as part of the `attrs`.\n <button onClick={onClick as VoidFunction} {...attrs}>\n {content}\n </button>\n );\n}\n","import { addDays, format, startOfWeek } from \"date-fns\";\nimport { Css } from \"src/Css\";\n\nexport function WeekHeader() {\n const start = startOfWeek(new Date());\n const days = [];\n for (let i = 0; i < 7; i++) {\n days.push(addDays(start, i));\n }\n\n // Copies the existing structure and classes defined by React-Day-Picker. Adds in Beam styling and formatting.\n return (\n <thead className=\"rdp-head\">\n <tr className=\"rdp-head_row\">\n {days.map((day) => (\n <th scope=\"col\" css={Css.p1.pbPx(12).xs.gray400.$} key={format(day, \"EEEE\")}>\n <span aria-hidden=\"true\">{format(day, \"EEEEE\")}</span>\n <span className=\"rdp-vhidden\">{format(day, \"EEEE\")}</span>\n </th>\n ))}\n </tr>\n </thead>\n );\n}\n","import { HTMLAttributes, PropsWithChildren } from \"react\";\nimport { Css } from \"src/Css\";\n\ninterface DatePickerOverlayProps {\n overlayProps: HTMLAttributes<HTMLElement>;\n}\n\n// Small wrapper around DatePicker to provide necessary styling and state handling when displayed as an overlay.\nexport function DatePickerOverlay({ overlayProps, children }: PropsWithChildren<DatePickerOverlayProps>) {\n return (\n <div css={Css.br4.bshModal.$} {...overlayProps}>\n {children}\n </div>\n );\n}\n","import { DayPicker, Matcher } from \"react-day-picker\";\nimport { Day } from \"src/components/internal/DatePicker/Day\";\nimport { Header, YearSkipHeader } from \"src/components/internal/DatePicker/Header\";\nimport { WeekHeader } from \"src/components/internal/DatePicker/WeekHeader\";\nimport { Css } from \"src/Css\";\nimport { DateRange } from \"src/types\";\nimport { useTestIds } from \"src/utils\";\nimport \"./DatePicker.css\";\n\nexport interface DateRangePickerProps {\n range: DateRange | undefined;\n onSelect: (range: DateRange | undefined) => void;\n disabledDays?: Matcher | Matcher[];\n dottedDays?: Matcher[];\n useYearPicker?: boolean;\n}\n\nexport function DateRangePicker(props: DateRangePickerProps) {\n const { range, onSelect, disabledDays, dottedDays, useYearPicker } = props;\n const tid = useTestIds(props, \"datePicker\");\n\n return (\n <div css={Css.dib.bgWhite.xs.$} {...tid}>\n <DayPicker\n mode=\"range\"\n selected={range}\n components={{ Caption: useYearPicker ? YearSkipHeader : Header, Head: WeekHeader, Day }}\n defaultMonth={range?.to ?? new Date()}\n onSelect={(selection, day, activeModifiers) => {\n // Disallow returning disabled dates.\n if (activeModifiers.disabled) return;\n onSelect(selection);\n }}\n disabled={disabledDays}\n modifiers={{ indicatorDot: dottedDays ?? [] }}\n />\n </div>\n );\n}\n","import { camelCase } from \"change-case\";\nimport { HTMLAttributes, PropsWithChildren, useEffect, useMemo, useRef, useState } from \"react\";\nimport { FocusScope, useFilter, useMenu } from \"react-aria\";\nimport { Item, Section, useTreeData, useTreeState } from \"react-stately\";\nimport { MenuItem, MenuSection } from \"src/components\";\nimport { MenuSectionImpl } from \"src/components/internal/MenuSection\";\nimport { Css } from \"src/Css\";\nimport { MenuSearchField } from \"src/inputs/internal/MenuSearchField\";\nimport { useTestIds } from \"src/utils\";\n\ninterface MenuProps<T> {\n ariaMenuProps: HTMLAttributes<HTMLElement>;\n onClose: VoidFunction;\n items: MenuItem[];\n searchable?: boolean;\n persistentItems?: MenuItem[];\n contrast: boolean;\n selectedItem: string | undefined;\n onChange: ((key: string) => void) | undefined;\n}\n\nexport function Menu<T>(props: PropsWithChildren<MenuProps<T>>) {\n const { ariaMenuProps, items, persistentItems, onClose, searchable, contrast, selectedItem, onChange } = props;\n // Build out the Menu's Tree data to include the Persistent Action, if any. This is a collection of Nodes that is used\n // by React-Aria to keep track of item states such as focus, and provide hooks for calling those actions.\n const tree = useTreeData({\n initialItems: [items, persistentItems ? persistentItems : []].map(\n (i, idx) => ({ label: idx === 0 ? \"items\" : \"persistent\", items: i }) as MenuSection,\n ),\n getKey: (item) => camelCase(item.label),\n getChildren: (item) => (item as MenuSection).items ?? [],\n });\n\n const [search, setSearch] = useState<string | undefined>(undefined);\n const { contains } = useFilter({ sensitivity: \"base\" });\n\n // Filter our tree data items based on the search term\n const filteredTree = useMemo(() => {\n const { items, ...others } = tree;\n const [itemsSection, persistentSection] = items;\n\n if (search) {\n const filteredChildren = itemsSection.children.filter((item) => contains(item.value.label, search));\n const { items, ...otherValues } = itemsSection.value;\n const filteredValue = items?.filter((item) => contains(item.label, search));\n return {\n ...others,\n items: [\n { ...itemsSection, value: { ...otherValues, children: filteredChildren, items: filteredValue } },\n persistentSection,\n ],\n };\n } else {\n return tree;\n }\n }, [tree, search, contains]);\n\n const menuChildren = useMemo(() => {\n return filteredTree.items.map(({ value: s }) => (\n <Section key={s.label.replace(/\"/g, \"\")} title={s.label} items={s.items}>\n {(item) => <Item key={item.label.replace(/\"/g, \"\")}>{item.label}</Item>}\n </Section>\n ));\n }, [filteredTree]);\n\n const state = useTreeState({\n children: menuChildren,\n items: filteredTree.items.map((i) => i.value),\n selectionMode: typeof onChange === \"function\" ? \"single\" : \"none\",\n disallowEmptySelection: typeof onChange === \"function\",\n selectedKeys: selectedItem ? [selectedItem] : undefined,\n onSelectionChange: (keys) => {\n keys !== \"all\" && onChange && onChange([...keys.values()].map((k) => k.toString())[0]);\n },\n });\n\n const menuRef = useRef(null);\n const { menuProps } = useMenu<any>({ ...ariaMenuProps, autoFocus: searchable ? false : true }, state, menuRef);\n const tid = useTestIds(props);\n\n // Bulk updates of MenuItems below. If we find this to be of sluggish performance, then we can change to be more surgical in our updating.\n // If our list of items change, update the \"items\" menu section. (key is based on label in `getKey` above)\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => filteredTree.update(\"items\", { label: \"items\", items } as MenuSection), [items]);\n return (\n <FocusScope>\n <div\n // Using `max-height: inherit` allows us to take advantage of the height set on the overlay container, which updates based on the available space for the overlay within the viewport\n css={{\n ...Css.df.fdc.myPx(4).bgWhite.outline0.br4.bshBasic.maxh(\"inherit\").oa.if(contrast).bgGray900.$,\n \"&:hover\": Css.bshHover.$,\n }}\n >\n {searchable && (\n <MenuSearchField\n label=\"\"\n value={search}\n placeholder=\"Search...\"\n labelStyle=\"inline\"\n onChange={setSearch}\n {...tid}\n />\n )}\n <ul css={Css.listReset.$} {...menuProps} ref={menuRef} {...tid.menu}>\n {/* It is possible to have, at most, 2 sections: One for items, and one for persisted items */}\n {[...state.collection].map((item) => (\n <MenuSectionImpl\n key={item.key}\n section={item}\n state={state}\n onClose={onClose}\n contrast={contrast}\n {...tid}\n />\n ))}\n </ul>\n </div>\n </FocusScope>\n );\n}\n","import { Node } from \"@react-types/shared\";\nimport { useMenuSection, useSeparator } from \"react-aria\";\nimport { TreeState } from \"react-stately\";\nimport { MenuItem } from \"src/components/ButtonMenu\";\nimport { MenuItemImpl } from \"src/components/internal\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ninterface MenuSectionProps {\n section: Node<MenuItem>;\n state: TreeState<MenuItem>;\n onClose: VoidFunction;\n contrast: boolean;\n}\n\nexport function MenuSectionImpl(props: MenuSectionProps) {\n const { section, state, onClose, contrast } = props;\n const { itemProps, groupProps } = useMenuSection(props.section);\n const { separatorProps } = useSeparator({ elementType: \"li\" });\n const isPersistentSection = section.key !== state.collection.getFirstKey();\n const tid = useTestIds(props);\n\n return (\n <>\n {isPersistentSection && <li {...separatorProps} css={Css.bt.bcGray200.$} />}\n <li {...itemProps} css={Css.gray900.if(!isPersistentSection).oa.if(contrast).white.$}>\n <ul css={Css.listReset.$} {...groupProps} {...tid[isPersistentSection ? \"persistentItems\" : \"menuItems\"]}>\n {[...section.childNodes].map((item) => (\n <MenuItemImpl key={item.key} item={item} state={state} onClose={onClose} contrast={contrast} {...tid} />\n ))}\n </ul>\n </li>\n </>\n );\n}\n","import { useTextField } from \"@react-aria/textfield\";\nimport { useRef } from \"react\";\nimport { Icon } from \"src/components\";\nimport { Only } from \"src/Css\";\nimport { BeamTextFieldProps, TextFieldXss } from \"src/interfaces\";\nimport { useTestIds } from \"src/utils\";\nimport { TextFieldBase } from \"../TextFieldBase\";\n\ninterface TextFieldProps<X> extends BeamTextFieldProps<X> {}\n\nexport function MenuSearchField<X extends Only<TextFieldXss, X>>(props: TextFieldProps<X>) {\n const tid = useTestIds(props);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const { labelProps, inputProps } = useTextField({ ...props }, inputRef);\n\n return (\n <TextFieldBase\n label=\"\"\n labelProps={labelProps}\n inputProps={inputProps}\n startAdornment={<Icon icon=\"search\" />}\n {...tid.search}\n />\n );\n}\n","import type { NumberFieldAria } from \"@react-aria/numberfield\";\nimport React, {\n ChangeEvent,\n FocusEvent,\n InputHTMLAttributes,\n LabelHTMLAttributes,\n MutableRefObject,\n ReactNode,\n TextareaHTMLAttributes,\n useState,\n} from \"react\";\nimport { chain, mergeProps, useFocusWithin, useHover } from \"react-aria\";\nimport { Icon, IconButton, maybeTooltip } from \"src/components\";\nimport { HelperText } from \"src/components/HelperText\";\nimport { InlineLabel, Label } from \"src/components/Label\";\nimport { InputStylePalette, usePresentationContext } from \"src/components/PresentationContext\";\nimport { BorderHoverChild, BorderHoverParent } from \"src/components/Table/components/Row\";\nimport { Css, Only, Palette } from \"src/Css\";\nimport { getLabelSuffix } from \"src/forms/labelUtils\";\nimport { useGetRef } from \"src/hooks/useGetRef\";\nimport { ErrorMessage } from \"src/inputs/ErrorMessage\";\nimport { getFieldWidth } from \"src/inputs/utils\";\nimport { BeamTextFieldProps, TextFieldInternalProps, TextFieldXss } from \"src/interfaces\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport interface TextFieldBaseProps<X>\n extends Pick<\n BeamTextFieldProps<X>,\n | \"label\"\n | \"required\"\n | \"errorMsg\"\n | \"errorInTooltip\"\n | \"onBlur\"\n | \"onFocus\"\n | \"helperText\"\n | \"labelStyle\"\n | \"placeholder\"\n | \"compact\"\n | \"borderless\"\n | \"borderOnHover\"\n | \"visuallyDisabled\"\n | \"fullWidth\"\n | \"xss\"\n | \"inputStylePalette\"\n >,\n Partial<Pick<BeamTextFieldProps<X>, \"onChange\">> {\n labelProps?: LabelHTMLAttributes<HTMLLabelElement>;\n inputProps: InputHTMLAttributes<HTMLInputElement> | TextareaHTMLAttributes<HTMLTextAreaElement>;\n inputRef?: MutableRefObject<HTMLInputElement | HTMLTextAreaElement | null>;\n inputWrapRef?: MutableRefObject<HTMLDivElement | null>;\n multiline?: boolean;\n groupProps?: NumberFieldAria[\"groupProps\"];\n endAdornment?: ReactNode;\n startAdornment?: ReactNode;\n contrast?: boolean;\n clearable?: boolean;\n // TextArea specific\n textAreaMinHeight?: number;\n tooltip?: ReactNode;\n hideErrorMessage?: boolean;\n // If set, the helper text will always be shown (usually we hide the helper text if read only)\n alwaysShowHelperText?: boolean;\n // Replaces empty input field and placeholder with node\n // IE: Multiselect renders list of selected items in the input field\n unfocusedPlaceholder?: ReactNode;\n /** Allow focusing without selecting, i.e. to let the user keep typing after we've pre-filled text + called focus, like the Add New component. */\n selectOnFocus?: boolean;\n}\n\n// Used by both TextField and TextArea\nexport function TextFieldBase<X extends Only<TextFieldXss, X>>(props: TextFieldBaseProps<X>) {\n const { fieldProps, wrap = false } = usePresentationContext();\n const { labelLeftFieldWidth = \"50%\" } = fieldProps ?? {};\n const {\n label,\n required,\n labelProps,\n inputProps,\n inputRef,\n inputWrapRef,\n groupProps,\n compact = fieldProps?.compact ?? false,\n errorMsg,\n helperText,\n multiline = false,\n onChange,\n onBlur,\n onFocus,\n xss,\n endAdornment,\n startAdornment,\n labelStyle = fieldProps?.labelStyle ?? \"above\",\n contrast = false,\n borderless = fieldProps?.borderless ?? false,\n borderOnHover = fieldProps?.borderOnHover ?? false,\n textAreaMinHeight = 96,\n clearable = false,\n tooltip,\n visuallyDisabled = fieldProps?.visuallyDisabled ?? true,\n errorInTooltip = fieldProps?.errorInTooltip ?? false,\n hideErrorMessage = false,\n alwaysShowHelperText = false,\n fullWidth = fieldProps?.fullWidth ?? false,\n unfocusedPlaceholder,\n selectOnFocus = true,\n inputStylePalette,\n } = props;\n\n const typeScale = fieldProps?.typeScale ?? (inputProps.readOnly && labelStyle !== \"hidden\" ? \"smMd\" : \"sm\");\n const internalProps: TextFieldInternalProps = (props as any).internalProps || {};\n const { compound = false, forceFocus = false, forceHover = false } = internalProps;\n const errorMessageId = `${inputProps.id}-error`;\n const labelSuffix = getLabelSuffix(required);\n const ElementType: React.ElementType = multiline ? \"textarea\" : \"input\";\n const tid = useTestIds(props, defaultTestId(label));\n const [isFocused, setIsFocused] = useState(false);\n const { hoverProps, isHovered } = useHover({});\n const { focusWithinProps } = useFocusWithin({ onFocusWithinChange: setIsFocused });\n const fieldRef = useGetRef(inputRef);\n\n const maybeSmaller = compound ? 2 : 0;\n const fieldHeight = 40;\n const compactFieldHeight = 32;\n\n const [bgColor, hoverBgColor, disabledBgColor] = inputStylePalette\n ? getInputStylePalette(inputStylePalette)\n : contrast\n ? [Palette.Gray700, Palette.Gray600, Palette.Gray700]\n : borderOnHover\n ? // Use transparent backgrounds to blend with the table row hover color\n [Palette.Transparent, Palette.Blue100, Palette.Gray100]\n : borderless && !compound\n ? [Palette.Gray100, Palette.Gray200, Palette.Gray200]\n : [Palette.White, Palette.Gray100, Palette.Gray100];\n\n const fieldMaxWidth = getFieldWidth(fullWidth);\n\n const fieldStyles = {\n container: Css.df.fdc.w100.maxw(fieldMaxWidth).relative.if(labelStyle === \"left\").maxw100.fdr.gap2.jcsb.aic.$,\n inputWrapper: {\n ...Css[typeScale].df.aic.br4.px1.w100\n .bgColor(bgColor)\n .gray900.if(contrast && !inputStylePalette)\n .white.if(labelStyle === \"left\")\n .w(labelLeftFieldWidth).$,\n // When borderless then perceived vertical alignments are misaligned. As there is no longer a border, then the field looks oddly indented.\n // This typically happens in tables when a column has a mix of static text (i.e. \"roll up\" rows and table headers) and input fields.\n // To remedy this perceived misalignment then we increase the width by the horizontal padding applied (16px), and set a negative margin left margin to re-center the field.\n // Note: Do not modify width and position of 'compound' fields.\n ...(borderless && !compound\n ? Css.bcTransparent.w(\"calc(100% + 16px)\").ml(-1).$\n : Css.bcGray300.if(contrast).bcGray700.$),\n // Do not add borders to compound fields. A compound field is responsible for drawing its own borders\n ...(!compound ? Css.ba.$ : {}),\n ...(borderOnHover && Css.br4.ba.bcTransparent.add(\"transition\", \"border-color 200ms\").$),\n ...(borderOnHover && Css.if(isHovered).bgColor(hoverBgColor).ba.bcBlue300.$),\n ...{\n // Highlight the field when hovering over the row in a table, unless some other edit component (including ourselves) is hovered\n [`.${BorderHoverParent}:hover:not(:has(.${BorderHoverChild}:hover)) &`]: Css.ba.bcBlue300.$,\n },\n // When multiline is true, then we want to allow the field to grow to the height of the content, but not shrink below the minHeight\n // Otherwise, set fixed heights values accordingly.\n ...(multiline\n ? Css.mhPx(fieldHeight - maybeSmaller)\n .if(compact)\n .mhPx(compactFieldHeight - maybeSmaller).$\n : Css.hPx(fieldHeight - maybeSmaller)\n .if(compact)\n .hPx(compactFieldHeight - maybeSmaller).$),\n },\n inputWrapperReadOnly: {\n ...Css[typeScale].df.aic.w100.gray900\n .if(contrast && !inputStylePalette)\n .white.if(labelStyle === \"left\")\n .w(labelLeftFieldWidth).$,\n // If we are hiding the label, then we are typically in a table. Keep the `mh` in this case to ensure editable and non-editable fields in a single table row line up properly\n ...(labelStyle === \"hidden\" &&\n Css.mhPx(fieldHeight - maybeSmaller)\n .if(compact)\n .mhPx(compactFieldHeight - maybeSmaller).$),\n },\n input: {\n ...Css.w100.mw0.outline0.fg1.bgColor(bgColor).$,\n // Not using Truss's inline `if` statement here because `addIn` properties do not respect the if statement.\n ...(contrast && !inputStylePalette && Css.addIn(\"&::selection\", Css.bgGray800.$).$),\n // Make the background transparent when highlighting the field on hover\n ...(borderOnHover && Css.bgTransparent.$),\n // For \"multiline\" fields we add top and bottom padding of 7px for compact, or 11px for non-compact, to properly match the height of the single line fields\n ...(multiline ? Css.br4.pyPx(compact ? 7 : 11).add(\"resize\", \"none\").$ : Css.truncate.$),\n },\n hover: Css.bgColor(hoverBgColor).if(contrast).bcGray600.$,\n focus: Css.bcBlue700.if(contrast).bcBlue500.if(borderOnHover).bgColor(hoverBgColor).bcBlue500.$,\n disabled: visuallyDisabled\n ? Css.cursorNotAllowed.gray600.bgColor(disabledBgColor).if(contrast).gray500.$\n : Css.cursorNotAllowed.$,\n error: Css.bcRed600.if(contrast).bcRed400.$,\n };\n\n // Watch for each WIP change, convert empty to undefined, and call the user's onChange\n function onDomChange(e: ChangeEvent<HTMLInputElement>) {\n if (onChange) {\n let value: string | undefined = e.target.value;\n if (value === \"\") {\n value = undefined;\n }\n onChange(value);\n }\n }\n\n const onFocusChained = chain((e: FocusEvent<HTMLInputElement> | FocusEvent<HTMLTextAreaElement>) => {\n if (selectOnFocus) e.target.select();\n }, onFocus);\n\n // Simulate clicking `ElementType` when using an unfocused placeholder\n function handleUnfocusedPlaceholderClick(e: React.MouseEvent<HTMLDivElement>) {\n e.stopPropagation();\n fieldRef.current?.click();\n }\n\n const showFocus = (isFocused && !inputProps.readOnly) || forceFocus;\n const showHover = (isHovered && !inputProps.disabled && !inputProps.readOnly && !isFocused) || forceHover;\n\n return (\n <>\n <div css={fieldStyles.container} {...groupProps} {...focusWithinProps}>\n {/* TODO: place the label */}\n {label && labelStyle !== \"inline\" && (\n <Label\n labelProps={labelProps}\n hidden={labelStyle === \"hidden\" || compound}\n label={label}\n inline={labelStyle !== \"above\"}\n suffix={labelSuffix}\n contrast={contrast}\n {...tid.label}\n />\n )}\n {maybeTooltip({\n title: tooltip,\n placement: \"top\",\n children: inputProps.readOnly ? (\n <div\n css={{\n // Use input wrapper to get common styles, but then we need to override some\n ...fieldStyles.inputWrapperReadOnly,\n ...(multiline ? Css.fdc.aifs.gap2.$ : Css.if(wrap === false).truncate.$),\n ...xss,\n }}\n className={BorderHoverChild}\n data-readonly=\"true\"\n {...tid}\n >\n {labelStyle === \"inline\" && label && (\n <InlineLabel multiline={multiline} labelProps={labelProps} label={label} {...tid.label} />\n )}\n {multiline\n ? (inputProps.value as string | undefined)?.split(\"\\n\\n\").map((p, i) => (\n <p key={i} css={Css.py1.$}>\n {p.split(\"\\n\").map((sentence, j) => (\n <span key={j}>\n {sentence}\n <br />\n </span>\n ))}\n </p>\n ))\n : inputProps.value}\n </div>\n ) : (\n <div\n css={{\n ...fieldStyles.inputWrapper,\n ...(inputProps.disabled ? fieldStyles.disabled : {}),\n ...(showFocus ? fieldStyles.focus : {}),\n ...(showHover ? fieldStyles.hover : {}),\n // Only show error styles if the field is not disabled, following the pattern that the error message is also hidden\n ...(errorMsg && !inputProps.disabled ? fieldStyles.error : {}),\n ...Css.if(multiline).aifs.oh.mhPx(textAreaMinHeight).$,\n }}\n // Class name used for the grid table on row hover for highlighting\n className={BorderHoverChild}\n {...hoverProps}\n ref={inputWrapRef as any}\n onClick={unfocusedPlaceholder ? handleUnfocusedPlaceholderClick : undefined}\n >\n {labelStyle === \"inline\" && label && (\n <InlineLabel multiline={multiline} labelProps={labelProps} label={label} {...tid.label} />\n )}\n {startAdornment && <span css={Css.df.aic.asc.fs0.br4.pr1.$}>{startAdornment}</span>}\n {unfocusedPlaceholder && (\n <div\n // Setting -1 tabIndex as this is a scrollable container, which is focusable by default.\n // However, we want the user's focus to move to the field element, which will hide this container.\n tabIndex={-1}\n {...tid.unfocusedPlaceholderContainer}\n css={{\n ...Css.df.asc.w100.maxhPx(74).oa.$,\n ...fieldStyles.input,\n ...(showHover ? fieldStyles.hover : {}),\n ...(inputProps.disabled ? fieldStyles.disabled : {}),\n ...(isFocused && Css.visuallyHidden.$),\n }}\n >\n {unfocusedPlaceholder}\n </div>\n )}\n <ElementType\n {...mergeProps(\n inputProps,\n { onBlur, onFocus: onFocusChained, onChange: onDomChange },\n { \"aria-invalid\": Boolean(errorMsg), ...(labelStyle === \"hidden\" ? { \"aria-label\": label } : {}) },\n )}\n {...(errorMsg ? { \"aria-errormessage\": errorMessageId } : {})}\n ref={fieldRef as any}\n rows={multiline ? 1 : undefined}\n css={{\n ...fieldStyles.input,\n ...(inputProps.disabled ? fieldStyles.disabled : {}),\n ...(showHover ? fieldStyles.hover : {}),\n ...(unfocusedPlaceholder && !isFocused && Css.visuallyHidden.$),\n ...xss,\n }}\n {...tid}\n />\n {isFocused && clearable && onChange && inputProps.value && (\n <IconButton\n icon=\"xCircle\"\n color={Palette.Gray700}\n onClick={() => {\n onChange(undefined);\n // Reset focus to input element\n fieldRef.current?.focus();\n }}\n />\n )}\n {errorInTooltip && errorMsg && !hideErrorMessage && (\n <span css={Css.df.aic.asc.pl1.fs0.$}>\n <Icon icon=\"error\" color={Palette.Red600} tooltip={errorMsg} />\n </span>\n )}\n {endAdornment && <span css={Css.df.aic.asc.pl1.fs0.$}>{endAdornment}</span>}\n </div>\n ),\n })}\n {/* Compound fields will handle their own error and helper text.\n * Do not show error or helper text when 'readOnly' or disabled\n except if alwaysShowHelperText is provided */}\n {labelStyle !== \"left\" &&\n (alwaysShowHelperText || (!compound && !inputProps.disabled && !inputProps.readOnly)) && (\n <>\n {errorMsg && !errorInTooltip && (\n <ErrorMessage id={errorMessageId} errorMsg={errorMsg} hidden={hideErrorMessage} {...tid.errorMsg} />\n )}\n {helperText && <HelperText helperText={helperText} {...tid.helperText} />}\n </>\n )}\n </div>\n {/* Error message and helper text for \"left\" labelStyle */}\n {labelStyle === \"left\" &&\n (alwaysShowHelperText ||\n (!compound &&\n !inputProps.disabled &&\n !inputProps.readOnly &&\n ((errorMsg && !errorInTooltip) || helperText))) && (\n // Reduces the margin between the error/helper text and input field\n <div css={Css.mtPx(-8).$}>\n {errorMsg && !errorInTooltip && (\n <ErrorMessage id={errorMessageId} errorMsg={errorMsg} hidden={hideErrorMessage} {...tid.errorMsg} />\n )}\n {helperText && <HelperText helperText={helperText} {...tid.helperText} />}\n </div>\n )}\n </>\n );\n}\n\nfunction getInputStylePalette(inputStylePalette: InputStylePalette): [Palette, Palette, Palette] {\n switch (inputStylePalette) {\n case \"success\":\n return [Palette.Green50, Palette.Green100, Palette.Green50];\n case \"caution\":\n return [Palette.Yellow50, Palette.Yellow100, Palette.Yellow50];\n case \"warning\":\n return [Palette.Red50, Palette.Red100, Palette.Red50];\n case \"info\":\n return [Palette.Blue50, Palette.Blue100, Palette.Blue50];\n default:\n return [Palette.White, Palette.Gray100, Palette.Gray100];\n }\n}\n","import { ReactNode } from \"react\";\nimport { Css } from \"src/Css\";\n\n/**\n * A helper component for consistently showing helper text below form fields.\n */\nexport function HelperText(props: { helperText: string | ReactNode; contrast?: boolean }) {\n const { helperText, contrast = false, ...others } = props;\n return (\n <div css={Css.gray700.xs.mtPx(4).if(contrast).gray100.$} {...others}>\n {helperText}\n </div>\n );\n}\n","import React, { LabelHTMLAttributes, ReactNode } from \"react\";\nimport { VisuallyHidden } from \"react-aria\";\nimport { Icon } from \"src\";\nimport { Css, Font, Only, Palette, Xss } from \"src/Css\";\n\ntype LabelXss = Font | \"color\";\n\ninterface LabelProps<X> {\n // We don't usually have `fooProps`-style props, but this is for/from react-aria\n labelProps?: LabelHTMLAttributes<HTMLLabelElement>;\n label: string;\n suffix?: string;\n // If set, it is recommended to wrap in an element with `position: relative;` set, as the label will have an absolute position.\n hidden?: boolean;\n contrast?: boolean;\n multiline?: boolean;\n tooltip?: ReactNode;\n // Removes margin bottom if true - This is different from InlineLabel. InlineLabel expects to be rendered visually within the field element. Rather just on the same line.\n inline?: boolean;\n xss?: X;\n}\n\n/** An internal helper component for rendering form labels. */\nfunction LabelComponent<X extends Only<Xss<LabelXss>, X>>(props: LabelProps<X>) {\n const { labelProps, label, hidden, suffix, contrast = false, tooltip, inline, xss, ...others } = props;\n const labelEl = (\n <label\n {...labelProps}\n {...others}\n css={{\n ...Css.dif.aic.gap1.sm.gray700\n .mbPx(inline ? 0 : 4)\n .if(contrast)\n .white.if(!inline).asfs.$,\n ...xss,\n }}\n >\n {label}\n {suffix && ` ${suffix}`}\n {tooltip && (\n <span css={Css.fs0.$}>\n <Icon icon=\"infoCircle\" tooltip={tooltip} inc={2} color={contrast ? Palette.White : Palette.Gray700} />\n </span>\n )}\n </label>\n );\n return hidden ? <VisuallyHidden>{labelEl}</VisuallyHidden> : labelEl;\n}\n\nexport const Label = React.memo(LabelComponent) as typeof LabelComponent;\n\ntype InlineLabelProps = Omit<LabelProps<unknown>, \"xss\" | \"inline\">;\n/** Used for showing labels within text fields. */\nexport function InlineLabel({ labelProps, label, contrast, multiline = false, ...others }: InlineLabelProps) {\n return (\n <label\n {...labelProps}\n {...others}\n css={Css.smMd.wsnw.gray900.prPx(4).add(\"color\", \"currentColor\").asc.if(multiline).asfs.pt1.$}\n >\n {label}:\n </label>\n );\n}\n","import { observer } from \"mobx-react\";\nimport { ReactElement, useCallback, useContext, useRef } from \"react\";\nimport {\n defaultRenderFn,\n headerRenderFn,\n RenderCellFn,\n rowClickRenderFn,\n rowLinkRenderFn,\n} from \"src/components/Table/components/cell\";\nimport { KeptGroupRow } from \"src/components/Table/components/KeptGroupRow\";\nimport { GridStyle, RowStyles } from \"src/components/Table/TableStyles\";\nimport { DiscriminateUnion, GridColumnWithId, IfAny, Kinded, Pin, RenderAs } from \"src/components/Table/types\";\nimport { DraggedOver, RowState } from \"src/components/Table/utils/RowState\";\nimport { ensureClientSideSortValueIsSortable } from \"src/components/Table/utils/sortRows\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport {\n applyRowFn,\n DragData,\n EXPANDABLE_HEADER,\n getAlignment,\n getFirstOrLastCellCss,\n getJustification,\n HEADER,\n isGridCellContent,\n KEPT_GROUP,\n maybeApplyFunction,\n reservedRowKinds,\n toContent,\n TOTALS,\n zIndices,\n} from \"src/components/Table/utils/utils\";\nimport { Css, Palette } from \"src/Css\";\nimport { AnyObject } from \"src/types\";\nimport { isFunction } from \"src/utils\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\ninterface RowProps<R extends Kinded> {\n as: RenderAs;\n rs: RowState<R>;\n style: GridStyle;\n rowStyles: RowStyles<R> | undefined;\n columnSizes: string[];\n getCount: (id: string) => object;\n cellHighlight: boolean;\n omitRowHover: boolean;\n hasExpandableHeader: boolean;\n onDragStart?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDragEnd?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDrop?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDragEnter?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDragOver?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n // onDrag?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void; // currently unused\n // onDragLeave?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void; // currently unused\n}\n\n// We extract Row to its own mini-component primarily so we can React.memo'ize it.\nfunction RowImpl<R extends Kinded, S>(props: RowProps<R>): ReactElement {\n const {\n as,\n rs,\n style,\n rowStyles,\n columnSizes,\n getCount,\n cellHighlight,\n omitRowHover,\n hasExpandableHeader,\n onDragStart,\n onDragEnd,\n onDrop,\n onDragEnter,\n onDragOver,\n ...others\n } = props;\n\n const { tableState } = useContext(TableStateContext);\n // We're wrapped in observer, so can access these without useComputeds\n const { api, visibleColumns: columns } = tableState;\n const { row, api: rowApi, isActive, isKept: isKeptRow, isLastKeptRow, level } = rs;\n\n // We treat the \"header\" and \"totals\" kind as special for \"good defaults\" styling\n const isHeader = row.kind === HEADER;\n const isTotals = row.kind === TOTALS;\n const isExpandableHeader = row.kind === EXPANDABLE_HEADER;\n const isKeptGroupRow = row.kind === KEPT_GROUP;\n const rowStyle = rowStyles?.[row.kind as R[\"kind\"]];\n const RowTag = as === \"table\" ? \"tr\" : \"div\";\n const sortOn = tableState.sortConfig?.on;\n\n const revealOnRowHoverClass = \"revealOnRowHover\";\n\n const showRowHoverColor = !reservedRowKinds.includes(row.kind) && !omitRowHover && style.rowHoverColor !== \"none\";\n\n const rowStyleCellCss = maybeApplyFunction(row as any, rowStyle?.cellCss);\n const levelStyle = style.levels && (typeof style.levels === \"function\" ? style.levels(level) : style.levels[level]);\n const levelIndent = levelStyle?.rowIndent;\n\n const containerCss = {\n ...Css.add(\"transition\", \"padding 0.25s ease-in-out\").$,\n ...(rs.isDraggedOver === DraggedOver.Above && Css.ptPx(25).$),\n ...(rs.isDraggedOver === DraggedOver.Below && Css.pbPx(25).$),\n };\n\n const rowCss = {\n ...(!reservedRowKinds.includes(row.kind) && style.nonHeaderRowCss),\n // Optionally include the row hover styles, by default they should be turned on.\n ...(showRowHoverColor && {\n // Even though backgroundColor is set on the cellCss, the hover target is the row.\n \"&:hover > *\": Css.bgColor(style.rowHoverColor ?? Palette.Blue100).$,\n }),\n ...(!reservedRowKinds.includes(row.kind) &&\n style.nonHeaderRowHoverCss && {\n // Need to spread this to make TS happy.\n \":hover\": { ...style.nonHeaderRowHoverCss },\n }),\n ...(levelIndent && Css.mlPx(levelIndent).$),\n // For virtual tables use `display: flex` to keep all cells on the same row. For each cell in the row use `fn` to ensure they stay their defined widths\n ...(as === \"table\" ? {} : Css.relative.df.fg1.fs1.addIn(\"&>*\", Css.fn.$).$),\n // Apply `cursorPointer` to the row if it has a link or `onClick` value.\n ...((rowStyle?.rowLink || rowStyle?.onClick) && { \"&:hover\": Css.cursorPointer.$ }),\n ...maybeApplyFunction(row as any, rowStyle?.rowCss),\n ...{\n [`> .${revealOnRowHoverClass} > *`]: Css.vh.$,\n [`:hover > .${revealOnRowHoverClass} > *`]: Css.vv.$,\n },\n ...(isLastKeptRow && Css.addIn(\"&>*\", style.keptLastRowCss).$),\n };\n\n let currentColspan = 1;\n // Keep a running count of how many expanded columns are being shown.\n let currentExpandedColumnCount: number = 0;\n let foundFirstContentColumn = false;\n let minStickyLeftOffset = 0;\n let expandColumnHidden = false;\n\n // used to render the whole row when dragging with the handle\n const ref = useRef<HTMLTableRowElement>(null);\n\n // debounce drag over callback to avoid excessive re-renders\n const dragOverCallback = useCallback(\n (row: GridDataRow<R>, evt: React.DragEvent<HTMLElement>) => onDragOver?.(row, evt),\n [onDragOver],\n );\n // when the event is not called, we still need to call preventDefault\n const onDragOverDebounced = useDebouncedCallback(dragOverCallback, 100);\n\n const RowContent = () => (\n <RowTag css={rowCss} {...others} data-gridrow {...getCount(row.id)} ref={ref} className={BorderHoverParent}>\n {isKeptGroupRow ? (\n <KeptGroupRow as={as} style={style} columnSizes={columnSizes} row={row} colSpan={columns.length} />\n ) : (\n columns.map((column, columnIndex) => {\n // If the expandable column was hidden, then we need to look at the previous column to format the `expandHeader` and 'header' kinds correctly.\n const maybeExpandedColumn = expandColumnHidden ? columns[columnIndex - 1] : column;\n\n // Figure out if this column should be considered 'expanded' or not. If the column is hidden on expand, then we need to look at the previous column to see if it's expanded.\n const isExpanded = tableState.isExpandedColumn(maybeExpandedColumn.id);\n // If the column is hidden on expand, we don't want to render it. We'll flag that it was hidden, so on the next column we can render this column's \"expandHeader\" property.\n if (column.hideOnExpand && isExpanded) {\n expandColumnHidden = true;\n return <></>;\n }\n\n // Need to keep track of the expanded columns so we can add borders as expected for the header rows\n const numExpandedColumns = isExpanded\n ? tableState.numberOfExpandedChildren(maybeExpandedColumn.id)\n ? // Subtract 1 if the column is hidden on expand, since we're not rendering it.\n tableState.numberOfExpandedChildren(maybeExpandedColumn.id) - (maybeExpandedColumn.hideOnExpand ? 1 : 0)\n : 0\n : 0;\n\n // If we're rendering the Expandable Header row, then we might need to render the previous column's `expandHeader` property in the case where the column is hidden on expand.\n column = isExpandableHeader ? maybeExpandedColumn : column;\n\n const { wrapAction = true, isAction = false } = column;\n\n const isFirstContentColumn = !isAction && !foundFirstContentColumn;\n const applyFirstContentColumnStyles = !isHeader && isFirstContentColumn;\n foundFirstContentColumn ||= applyFirstContentColumnStyles;\n\n // When using the variation of the table with an EXPANDABLE_HEADER, then our HEADER and TOTAL rows have special border styling\n // Keep track of the when we get to the last expanded column so we can apply this styling properly.\n if (hasExpandableHeader && (isHeader || isTotals)) {\n // When the value of `currentExpandedColumnCount` is 0, then we have started over.\n // If the current column `isExpanded`, then store the number of expandable columns.\n if (currentExpandedColumnCount === 0 && isExpanded) {\n currentExpandedColumnCount = numExpandedColumns;\n } else if (currentExpandedColumnCount > 0) {\n // If value is great than 0, then decrement. Once the value equals 0, then the special styling will be applied below.\n currentExpandedColumnCount -= 1;\n }\n }\n\n // Reset the expandColumnHidden flag once done with logic based upon it.\n expandColumnHidden = false;\n\n // Decrement colspan count and skip if greater than 1.\n if (currentColspan > 1) {\n currentColspan -= 1;\n return null;\n }\n\n // Combine all our drag stuff into a mini-context/parameter object...\n const dragData: DragData<R> = {\n rowRenderRef: ref,\n onDragStart,\n onDragEnd,\n onDrop,\n onDragEnter,\n onDragOver: onDragOverDebounced,\n };\n\n const maybeContent = applyRowFn(column as GridColumnWithId<R>, row, rowApi, level, isExpanded, dragData);\n\n // Only use the `numExpandedColumns` as the `colspan` when rendering the \"Expandable Header\"\n currentColspan =\n isGridCellContent(maybeContent) && typeof maybeContent.colspan === \"number\"\n ? maybeContent.colspan\n : isExpandableHeader\n ? numExpandedColumns + 1\n : 1;\n const revealOnRowHover = isGridCellContent(maybeContent) ? maybeContent.revealOnRowHover : false;\n\n const canSortColumn =\n (sortOn === \"client\" && column.clientSideSort !== false) ||\n (sortOn === \"server\" && !!column.serverSideSortKey);\n const alignment = getAlignment(column, maybeContent);\n const justificationCss = getJustification(column, maybeContent, as, alignment);\n const isExpandable =\n isFunction(column.expandColumns) ||\n (column.expandColumns && column.expandColumns.length > 0) ||\n column.expandedWidth !== undefined;\n\n const content = toContent(\n maybeContent,\n isHeader,\n canSortColumn,\n sortOn === \"client\",\n style,\n as,\n alignment,\n column,\n isExpandableHeader,\n isExpandable,\n minStickyLeftOffset,\n isKeptRow,\n );\n\n ensureClientSideSortValueIsSortable(\n sortOn,\n isHeader || isTotals || isExpandableHeader,\n column,\n columnIndex,\n maybeContent,\n );\n\n const maybeSticky = ((isGridCellContent(maybeContent) && maybeContent.sticky) || column.sticky) ?? undefined;\n const maybeStickyColumnStyles =\n maybeSticky && columnSizes\n ? {\n ...Css.sticky.z(zIndices.stickyColumns).bgWhite.$,\n ...(maybeSticky === \"left\"\n ? Css.left(columnIndex === 0 ? 0 : `calc(${columnSizes.slice(0, columnIndex).join(\" + \")})`).$\n : {}),\n ...(maybeSticky === \"right\"\n ? Css.right(\n columnIndex + 1 === columnSizes.length\n ? 0\n : `calc(${columnSizes.slice(columnIndex + 1 - columnSizes.length).join(\" + \")})`,\n ).$\n : {}),\n }\n : {};\n\n // This relies on our column sizes being defined in pixel values, which is currently true as we calculate to pixel values in the `useSetupColumnSizes` hook\n minStickyLeftOffset += maybeSticky === \"left\" ? parseInt(columnSizes[columnIndex].replace(\"px\", \"\"), 10) : 0;\n\n const cellId = `${row.kind}_${row.id}_${column.id}`;\n const applyCellHighlight = cellHighlight && !!column.id && !isHeader && !isTotals;\n const isCellActive = tableState.activeCellId === cellId;\n\n // Note that it seems expensive to calc a per-cell class name/CSS-in-JS output,\n // vs. setting global/table-wide CSS like `style.cellCss` on the root grid div with\n // a few descendent selectors. However, that approach means the root grid-applied\n // CSS has a high-specificity and so its harder for per-page/per-cell business logic\n // to override it. So, we just calc the combined table-wide+per-cell-overridden CSS here,\n // in a very CSS-in-JS idiomatic manner.\n //\n // In practice we've not seen any performance issues with this from our \"large but\n // not Google spreadsheets\" tables.\n const cellCss = {\n // Adding `display: flex` so we can align content within the cells, unless it is displayed as a `table`, then use `table-cell`.\n ...Css.df.if(as === \"table\").dtc.$,\n // Apply sticky column/cell styles\n ...maybeStickyColumnStyles,\n // Apply any static/all-cell styling\n ...style.cellCss,\n // Then override with first/last cell styling\n ...getFirstOrLastCellCss(style, columnIndex, columns),\n // Then override with per-cell/per-row justification\n ...justificationCss,\n // Then apply any header-specific override\n ...(isHeader && style.headerCellCss),\n // Then apply any totals-specific override\n ...(isTotals && style.totalsCellCss),\n ...(isTotals && hasExpandableHeader && Css.boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`).$),\n // Then apply any expandable header specific override\n ...(isExpandableHeader && style.expandableHeaderCss),\n // Conditionally apply the right border styling for the header or totals row when using expandable tables\n // Only apply if not the last column in the table AND when this column is the last column in the group of expandable column or not expanded AND\n ...(hasExpandableHeader &&\n columns.length - 1 !== columnIndex &&\n (isHeader || isTotals) &&\n currentExpandedColumnCount === 0 &&\n Css.boxShadow(`inset -1px -1px 0 ${Palette.Gray200}`).$),\n // Or level-specific styling\n ...(!isHeader && !isTotals && !isExpandableHeader && levelStyle?.cellCss),\n // Level specific styling for the first content column\n ...(applyFirstContentColumnStyles && levelStyle?.firstContentColumn),\n // The specific cell's css (if any from GridCellContent)\n ...rowStyleCellCss,\n // Apply active row styling for non-nested card styles.\n ...(isActive ? Css.bgColor(style.activeBgColor ?? Palette.Blue50).$ : {}),\n // Add any cell specific style overrides\n ...(isGridCellContent(maybeContent) && maybeContent.typeScale ? Css[maybeContent.typeScale].$ : {}),\n // And any cell specific css\n ...(isGridCellContent(maybeContent) && maybeContent.css ? maybeContent.css : {}),\n // Apply cell highlight styles to active cell and hover\n ...Css.if(applyCellHighlight && isCellActive).br4.boxShadow(`inset 0 0 0 1px ${Palette.Blue700}`).$,\n // Define the width of the column on each cell. Supports col spans.\n // If we have a 'levelIndent' defined, then subtract that amount from the first content column's width to ensure all columns will still line up properly\n width: `calc(${columnSizes.slice(columnIndex, columnIndex + currentColspan).join(\" + \")}${\n applyFirstContentColumnStyles && levelIndent ? ` - ${levelIndent}px` : \"\"\n })`,\n };\n\n const cellClassNames = revealOnRowHover ? revealOnRowHoverClass : undefined;\n\n const cellOnClick = applyCellHighlight ? () => api.setActiveCellId(cellId) : undefined;\n const tooltip = isGridCellContent(maybeContent) ? maybeContent.tooltip : undefined;\n\n const renderFn: RenderCellFn<any> =\n (rowStyle?.renderCell || rowStyle?.rowLink) && wrapAction\n ? rowLinkRenderFn(as, currentColspan)\n : isHeader || isTotals || isExpandableHeader\n ? headerRenderFn(column, as, currentColspan)\n : rowStyle?.onClick && wrapAction\n ? rowClickRenderFn(as, api, currentColspan)\n : defaultRenderFn(as, currentColspan);\n\n return renderFn(columnIndex, cellCss, content, row, rowStyle, cellClassNames, cellOnClick, tooltip);\n })\n )}\n </RowTag>\n );\n\n return row.draggable ? (\n <div\n css={containerCss}\n // these events are necessary to get the dragged-over row for the drop event\n // and spacer styling\n onDrop={(evt) => onDrop?.(row, evt)}\n onDragEnter={(evt) => onDragEnter?.(row, evt)}\n onDragOver={(evt) => {\n // when the event isn't called due to debounce, we still need to\n // call preventDefault for the drop event to fire\n evt.preventDefault();\n onDragOverDebounced(row, evt);\n }}\n >\n {RowContent()}\n </div>\n ) : (\n <>{RowContent()}</>\n );\n}\n\n/**\n * Memoizes rows so that re-rendering the table doesn't re-render every single row.\n *\n * We used to have a custom `propsAreEqual` method that would only compare `props.rows`\n * on the `data` attribute, b/c our `createRows` methods do not create stable row identities;\n * i.e. if one row changes, they all change.\n *\n * However, now RowState.row synthesizes a `row` that only reactively changes when\n * that row's `data` explicitly changes, so we no longer need a custom `propsAreEqual` here.\n */\n// Declared as a const + `as typeof RowImpl` to work with generics, see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-656596623\nexport const Row = observer(RowImpl) as typeof RowImpl;\n\n/** A specific kind of row, including the GridDataRow props. */\nexport type GridRowKind<R extends Kinded, P extends R[\"kind\"]> = DiscriminateUnion<R, \"kind\", P> & {\n id: string;\n children: GridDataRow<R>[];\n selectable?: false;\n};\n\n/**\n * The data for any row in the table, marked by `kind` so that each column knows how to render it.\n *\n * Each `kind` should contain very little presentation logic, i.e. mostly just off-the-wire data from\n * a GraphQL query.\n *\n * The presentation concerns instead mainly live in each GridColumn definition, which will format/render\n * each kind's data for that specific row+column (i.e. cell) combination.\n */\nexport type GridDataRow<R extends Kinded> = {\n kind: R[\"kind\"];\n /** Combined with the `kind` to determine a table wide React key. */\n id: string;\n /** A list of parent/grand-parent ids for collapsing parent/child rows. */\n children?: GridDataRow<R>[];\n /**\n * Whether to pin this sort to the first/last of its parent's children.\n *\n * By default, pinned rows are always shown/not filtered out, however providing\n * the pin `filter: true` property will allow pinned rows to be hidden\n * while filtering.\n */\n pin?: \"first\" | \"last\" | Pin;\n data: unknown;\n /** Whether to have the row collapsed (children not visible) on initial load. This will be ignore in subsequent re-renders of the table */\n initCollapsed?: boolean;\n /** Whether to have the row selected on initial load. This will be ignore in subsequent re-renders of the table */\n initSelected?: boolean;\n /** Whether row can be selected */\n selectable?: false;\n /** Whether this row should infer its selected state based on its children's selected state */\n inferSelectedState?: false;\n /** Whether this row is draggable, usually to allow drag & drop reordering of rows */\n draggable?: boolean;\n} & IfAny<R, AnyObject, DiscriminateUnion<R, \"kind\", R[\"kind\"]>>;\n\n// Used by TextFieldBase to set a border when the row is being hovered over\nexport const BorderHoverParent = \"BorderHoverParent\";\nexport const BorderHoverChild = \"BorderHoverChild\";\n","import { ReactNode } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { navLink } from \"src/components/CssReset\";\nimport { GridTableApi } from \"src/components/Table/GridTableApi\";\nimport { RowStyle } from \"src/components/Table/TableStyles\";\nimport { GridCellAlignment, GridColumnWithId, Kinded, MaybeFn, RenderAs } from \"src/components/Table/types\";\nimport { Css, Properties, Typography } from \"src/Css\";\n\n/**\n * Allows a cell to be more than just a RectNode, i.e. declare its alignment or\n * primitive value for filtering and sorting.\n *\n * For a given column, the `GridColumn` can either return a static `GridCellContent`, or\n * more likely use a function that returns a per-column/per-row `GridCellContent` that defines\n * the value (and it's misc alignment/css/etc) for this specific cell.\n */\nexport type GridCellContent = {\n /** The JSX content of the cell. Virtual tables that client-side sort should use a function to avoid perf overhead. */\n content: MaybeFn<ReactNode>;\n alignment?: GridCellAlignment;\n /** Allow value to be a function in case it's a dynamic value i.e. reading from an inline-edited proxy. */\n value?: MaybeFn<number | string | Date | boolean | null | undefined>;\n /** The value to use specifically for sorting (i.e. if `value` is used for filtering); defaults to `value`. */\n sortValue?: MaybeFn<number | string | Date | boolean | null | undefined>;\n colspan?: number;\n typeScale?: Typography;\n /** Allows the cell to stay in place when the user scrolls horizontally, i.e. frozen columns. */\n sticky?: \"left\" | \"right\";\n /** If provided, content of the cell will be wrapped within a <button /> or <a /> tag depending on if the value is a function or a string. */\n onClick?: VoidFunction | string;\n /** Custom css to apply directly to this cell, i.e. cell-specific borders. */\n css?: Properties;\n /** Allows cell to reveal content when the user hovers over a row. Content must be wrapped in an element in order to be hidden. IE <div>{value}</div>*/\n revealOnRowHover?: true;\n /** Tooltip to add to a cell */\n tooltip?: ReactNode;\n};\n\n/** Allows rendering a specific cell. */\nexport type RenderCellFn<R extends Kinded> = (\n idx: number,\n css: Properties,\n content: ReactNode,\n row: R,\n rowStyle: RowStyle<R> | undefined,\n classNames: string | undefined,\n onClick: VoidFunction | undefined,\n tooltip: ReactNode | undefined,\n) => ReactNode;\n\n/** Renders our default cell element, i.e. if no row links and no custom renderCell are used. */\nexport const defaultRenderFn: (as: RenderAs, colSpan: number) => RenderCellFn<any> =\n (as: RenderAs, colSpan) => (key, css, content, row, rowStyle, classNames: string | undefined, onClick, tooltip) => {\n const Cell = as === \"table\" ? \"td\" : \"div\";\n return (\n <Cell\n key={key}\n css={{ ...css, ...Css.cursor(\"default\").$ }}\n className={classNames}\n onClick={onClick}\n {...(as === \"table\" && { colSpan })}\n >\n {content}\n </Cell>\n );\n };\n\n/**\n * Sets up the `GridContext` so that header cells can access the current sort settings.\n * Used for the Header, Totals, and Expanded Header row's cells.\n * */\nexport const headerRenderFn: (column: GridColumnWithId<any>, as: RenderAs, colSpan: number) => RenderCellFn<any> =\n (column, as, colSpan) => (key, css, content, row, rowStyle, classNames: string | undefined, onClick, tooltip) => {\n const Cell = as === \"table\" ? \"th\" : \"div\";\n return (\n <Cell key={key} css={{ ...css }} className={classNames} {...(as === \"table\" && { colSpan })}>\n {content}\n </Cell>\n );\n };\n\n/** Renders a cell element when a row link is in play. */\nexport const rowLinkRenderFn: (as: RenderAs, colSpan: number) => RenderCellFn<any> =\n (as: RenderAs, colSpan) => (key, css, content, row, rowStyle, classNames: string | undefined, onClick, tooltip) => {\n const to = rowStyle!.rowLink!(row);\n if (as === \"table\") {\n return (\n <td key={key} css={{ ...css }} className={classNames} colSpan={colSpan}>\n <Link to={to} css={Css.tdn.color(\"unset\").db.$} className={navLink}>\n {content}\n </Link>\n </td>\n );\n }\n return (\n <Link key={key} to={to} css={{ ...Css.tdn.color(\"unset\").$, ...css }} className={`${navLink} ${classNames}`}>\n {content}\n </Link>\n );\n };\n\n/** Renders a cell that will fire the RowStyle.onClick. */\nexport const rowClickRenderFn: (as: RenderAs, api: GridTableApi<any>, colSpan: number) => RenderCellFn<any> =\n (as: RenderAs, api: GridTableApi<any>, colSpan) =>\n (key, css, content, row, rowStyle, classNames: string | undefined, onClick, tooltip) => {\n const Cell = as === \"table\" ? \"td\" : \"div\";\n return (\n <Cell\n {...{ key }}\n css={{ ...css }}\n className={classNames}\n onClick={(e) => {\n rowStyle!.onClick!(row, api);\n onClick && onClick();\n }}\n {...(as === \"table\" && { colSpan })}\n >\n {content}\n </Cell>\n );\n };\n","import { css, Global } from \"@emotion/react\";\nimport { Palette } from \"src/Css\";\n\n/**\n * Applies a CSS Reset that is based on modern-normalize + TW customizations.\n */\nexport function CssReset() {\n return <Global styles={[modernNormalizeReset, tailwindPreflightReset, ourReset]} />;\n}\n\n// Certain `a` tags in the app we want to opt-out of the default `a` / `a:visited` look\n// & feel and always be the same non-visited blue (or whatever color they want).\n// The is primarily for navigation, like breadcrumb links or tab links.\nexport const navLink = \"navLink\";\n\nconst ourReset = css`\n a:not(.${navLink}) {\n color: ${Palette.Blue700};\n }\n\n a:visited:not(.${navLink}) {\n color: ${Palette.Blue500};\n }\n\n /**\n * Beam animations\n */\n @keyframes loadingDots {\n 0% {\n background-color: ${Palette.Gray600};\n }\n 50%,\n 100% {\n background-color: ${Palette.Gray300};\n }\n }\n @keyframes loadingDotsContrast {\n 0% {\n background-color: ${Palette.Gray200};\n }\n 50%,\n 100% {\n background-color: ${Palette.Gray500};\n }\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.6;\n }\n }\n`;\n\n// Copy/pasted from TW which uses this as their base reset.\nconst modernNormalizeReset = css`\n /*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n /*\nDocument\n========\n*/\n\n /**\nUse a better box model (opinionated).\n*/\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n /**\nUse a more readable tab size (opinionated).\n*/\n\n :root {\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n }\n\n /**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\n html {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n }\n\n /*\nSections\n========\n*/\n\n /**\nRemove the margin in all browsers.\n*/\n\n body {\n margin: 0;\n }\n\n /**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\n body {\n font-family:\n system-ui,\n -apple-system,\n /* Firefox supports this but not yet system-ui */ \"Segoe UI\",\n Roboto,\n Helvetica,\n Arial,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\";\n }\n\n /*\nGrouping content\n================\n*/\n\n /**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\n hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n }\n\n /*\nText-level semantics\n====================\n*/\n\n /**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n abbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n /**\nAdd the correct font weight in Edge and Safari.\n*/\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\n code,\n kbd,\n samp,\n pre {\n font-family: ui-monospace, SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace; /* 1 */\n font-size: 1em; /* 2 */\n }\n\n /**\nAdd the correct font size in all browsers.\n*/\n\n small {\n font-size: 80%;\n }\n\n /**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /*\nTabular data\n============\n*/\n\n /**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\n table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n }\n\n /*\nForms\n=====\n*/\n\n /**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\n button,\n input,\n optgroup,\n select,\n textarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n }\n\n /**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\n button,\n select {\n /* 1 */\n text-transform: none;\n }\n\n /**\n Correct the inability to style clickable types in iOS and Safari.\n */\n\n button,\n [type=\"button\"],\n [type=\"submit\"] {\n -webkit-appearance: button;\n }\n\n /**\nRemove the inner border and padding in Firefox.\n*/\n\n /**\nRestore the focus styles unset by the previous rule.\n*/\n\n /**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n /**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\n legend {\n padding: 0;\n }\n\n /**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\n progress {\n vertical-align: baseline;\n }\n\n /**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n /**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n [type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n }\n\n /**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n /**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n /*\nInteractive\n===========\n*/\n\n /*\nAdd the correct display in Chrome and Safari.\n*/\n\n summary {\n display: list-item;\n }\n\n /**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n /**\n * Removes the default spacing and border for appropriate elements.\n */\n\n blockquote,\n dl,\n dd,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n hr,\n figure,\n p,\n pre {\n margin: 0;\n }\n\n button {\n background-color: transparent;\n background-image: none;\n }\n\n /**\n * Work around a Firefox/IE bug where the transparent button background\n * results in a loss of the default button focus styles.\n */\n fieldset {\n margin: 0;\n padding: 0;\n }\n`;\n\n// See https://tailwindcss.com/docs/preflight\nconst tailwindPreflightReset = css`\n /**\n * Tailwind custom reset styles\n */\n\n /**\n * 1. Use the user's configured sans font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n html {\n font-family:\n Inter,\n ui-sans-serif,\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n \"Segoe UI\",\n Roboto,\n \"Helvetica Neue\",\n Arial,\n \"Noto Sans\",\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"; /* 1 */\n line-height: 1.5; /* 2 */\n }\n\n /**\n * Inherit font-family and line-height from html so users can set them as\n * a class directly on the html element.\n */\n\n body {\n font-family: inherit;\n line-height: inherit;\n }\n\n /**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like details where the content\n * is wrapped by a div with box-sizing set to content-box.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n * 2. Setting border width to 0 removes the default border from elements\n * like the button and fieldset\n */\n\n *,\n ::before,\n ::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n }\n\n /*\n * Ensure horizontal rules are visible by default\n */\n\n hr {\n border-top-width: 1px;\n }\n\n /**\n * Undo the border-style: none reset that Normalize applies to images so that\n * our border-{width} utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\n img {\n border-style: solid;\n }\n\n textarea {\n resize: vertical;\n }\n\n input::-moz-placeholder,\n textarea::-moz-placeholder {\n color: #9ca3af;\n }\n\n input:-ms-input-placeholder,\n textarea:-ms-input-placeholder {\n color: #9ca3af;\n }\n\n input::placeholder,\n textarea::placeholder {\n color: #9ca3af;\n }\n\n button,\n [role=\"button\"] {\n cursor: pointer;\n }\n\n table {\n border-collapse: collapse;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n /**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\n a {\n color: inherit;\n text-decoration: inherit;\n }\n\n /**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\n button,\n input,\n optgroup,\n select,\n textarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n }\n\n /**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\n pre,\n code,\n kbd,\n samp {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n }\n\n /**\n * Make replaced elements display: block by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with svg added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block;\n vertical-align: middle;\n }\n\n /**\n * Constrain images and videos to the parent width and preserve\n * their instrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n`;\n\n// We don't technically use these b/c we assume it interferes with MUI/etc\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst tailwindFormResets = css`\n [type=\"text\"],\n [type=\"email\"],\n [type=\"url\"],\n [type=\"password\"],\n [type=\"number\"],\n [type=\"date\"],\n [type=\"month\"],\n [type=\"search\"],\n [type=\"tel\"],\n [type=\"time\"],\n [multiple],\n textarea,\n select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n border-radius: 0px;\n padding-top: 0.5rem;\n padding-right: 0.75rem;\n padding-bottom: 0.5rem;\n padding-left: 0.75rem;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n\n [type=\"text\"]:focus,\n [type=\"email\"]:focus,\n [type=\"url\"]:focus,\n [type=\"password\"]:focus,\n [type=\"number\"]:focus,\n [type=\"date\"]:focus,\n [type=\"month\"]:focus,\n [type=\"search\"]:focus,\n [type=\"tel\"]:focus,\n [type=\"time\"]:focus,\n [multiple]:focus,\n textarea:focus,\n select:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty, /*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n border-color: #2563eb;\n }\n\n input::-moz-placeholder,\n textarea::-moz-placeholder {\n color: #6b7280;\n opacity: 1;\n }\n\n input:-ms-input-placeholder,\n textarea:-ms-input-placeholder {\n color: #6b7280;\n opacity: 1;\n }\n\n input::placeholder,\n textarea::placeholder {\n color: #6b7280;\n opacity: 1;\n }\n\n select {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n }\n\n [multiple] {\n background-image: initial;\n background-position: initial;\n background-repeat: unset;\n background-size: initial;\n padding-right: 0.75rem;\n -webkit-print-color-adjust: unset;\n color-adjust: unset;\n }\n\n [type=\"checkbox\"],\n [type=\"radio\"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 0;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n display: inline-block;\n vertical-align: middle;\n background-origin: border-box;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n flex-shrink: 0;\n height: 1rem;\n width: 1rem;\n color: #2563eb;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n }\n\n [type=\"checkbox\"] {\n border-radius: 0px;\n }\n\n [type=\"radio\"] {\n border-radius: 100%;\n }\n\n [type=\"checkbox\"]:focus,\n [type=\"radio\"]:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty, /*!*/ /*!*/);\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n }\n\n [type=\"checkbox\"]:checked,\n [type=\"radio\"]:checked {\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n }\n\n [type=\"checkbox\"]:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n }\n\n [type=\"radio\"]:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n }\n\n [type=\"checkbox\"]:checked:hover,\n [type=\"checkbox\"]:checked:focus,\n [type=\"radio\"]:checked:hover,\n [type=\"radio\"]:checked:focus {\n border-color: transparent;\n background-color: currentColor;\n }\n\n [type=\"checkbox\"]:indeterminate {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n }\n\n [type=\"checkbox\"]:indeterminate:hover,\n [type=\"checkbox\"]:indeterminate:focus {\n border-color: transparent;\n background-color: currentColor;\n }\n\n [type=\"file\"] {\n background: unset;\n border-color: inherit;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-size: unset;\n line-height: inherit;\n }\n\n [type=\"file\"]:focus {\n outline: 1px auto -webkit-focus-ring-color;\n }\n`;\n","import { useContext } from \"react\";\nimport { Icon } from \"src/components\";\nimport { CollapseToggle, GridDataRow, GridStyle, RenderAs, TableStateContext } from \"src/components/Table\";\nimport { Css } from \"src/Css\";\nimport { useComputed } from \"src/hooks\";\nimport { pluralize } from \"src/utils\";\n\ninterface KeptGroupRowProps {\n as: RenderAs;\n columnSizes: string[];\n style: GridStyle;\n row: GridDataRow<any>;\n colSpan: number;\n}\n\nexport function KeptGroupRow(props: KeptGroupRowProps) {\n const { as, columnSizes, style, row, colSpan } = props;\n const CellTag = as === \"table\" ? \"td\" : \"div\";\n const { tableState } = useContext(TableStateContext);\n const numHiddenSelectedRows: number = useComputed(() => tableState.keptRows.length, [tableState]);\n\n return (\n <CellTag\n css={{\n ...style.cellCss,\n ...style.keptGroupRowCss,\n ...Css.pl0.w(`calc(${columnSizes.join(\" + \")})`).$,\n }}\n {...(as === \"table\" ? { colSpan } : {})}\n >\n <div css={Css.df.aic.gapPx(12).$}>\n {/* Mimic the collapse column styles to make sure it lines up as expected */}\n <div css={Css.wPx(38).df.jcc.$}>\n <CollapseToggle row={row} compact />\n </div>\n\n <div css={Css.df.aic.gap1.$}>\n <Icon icon=\"infoCircle\" inc={2} />\n {`${numHiddenSelectedRows} selected ${pluralize(numHiddenSelectedRows, \"row\")} hidden due to filters`}\n </div>\n </div>\n </CellTag>\n );\n}\n","import { useCallback, useMemo, useRef } from \"react\";\nimport { useMenuTrigger } from \"react-aria\";\nimport { useMenuTriggerState } from \"react-stately\";\nimport { Button } from \"src/components/Button\";\nimport {\n isIconButton,\n isNavLinkButton,\n isTextButton,\n labelOr,\n OverlayTrigger,\n OverlayTriggerProps,\n} from \"src/components/internal/OverlayTrigger\";\nimport { GridTableApi } from \"src/components/Table/GridTableApi\";\nimport { GridColumn, Kinded } from \"src/components/Table/types\";\nimport { Css } from \"src/Css\";\nimport { useComputed } from \"src/hooks\";\nimport { CheckboxGroup } from \"src/inputs\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface EditColumnsButtonProps<R extends Kinded>\n extends Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\"> {\n columns: GridColumn<R>[];\n title?: string;\n api: GridTableApi<R>;\n // for storybook purposes\n defaultOpen?: boolean;\n}\n\nexport function EditColumnsButton<R extends Kinded>(props: EditColumnsButtonProps<R>) {\n const { defaultOpen, disabled, columns, trigger, title, api } = props;\n const state = useMenuTriggerState({ isOpen: defaultOpen });\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { menuTriggerProps } = useMenuTrigger({ isDisabled: !!disabled }, state, buttonRef);\n const tid = useTestIds(\n props,\n isTextButton(trigger)\n ? labelOr(trigger, \"editColumnsButton\")\n : isNavLinkButton(trigger)\n ? defaultTestId(trigger.navLabel)\n : isIconButton(trigger)\n ? trigger.icon\n : trigger.name,\n );\n\n const options = useMemo(\n () =>\n columns\n // Only include options that can be hidden\n .filter((column) => column.canHide)\n // And have the `name` property defined\n .filter((column) => {\n if (!column.name || column.name.length === 0 || !column.id || column.id.length === 0) {\n console.warn(\"Column is missing 'name' and/or 'id' property required by the Edit Columns button\", column);\n return false;\n }\n return true;\n })\n .map((column) => ({ label: column.name!, value: column.id! })),\n [columns],\n );\n\n const selectedValues = useComputed(() => api.getVisibleColumnIds(), [api]);\n const setSelectedValues = useCallback(\n (ids: string[]) => {\n // Doesn't `options` already filter us to non-hidden/valid-id columns? I.e. could we just do:\n // api.setVisibleColumns(ids);\n api.setVisibleColumns(\n columns.filter((column) => (column.canHide ? ids.includes(column.id!) : true)).map((c) => c.id!),\n );\n },\n [columns, api],\n );\n\n return (\n <OverlayTrigger {...props} menuTriggerProps={menuTriggerProps} state={state} buttonRef={buttonRef} {...tid}>\n <div\n css={{\n ...Css.bgWhite.py5.px3.maxwPx(380).bshBasic.$,\n \"&:hover\": Css.bshHover.$,\n }}\n >\n <div css={Css.gray500.xsSb.mb1.ttu.$}>{title || \"Select columns to show\"}</div>\n <CheckboxGroup\n label={title || \"Select columns to show\"}\n onChange={(values) => setSelectedValues(values)}\n values={selectedValues}\n options={options}\n columns={2}\n labelStyle=\"hidden\"\n />\n <div css={Css.mt1.$}>\n <Button variant={\"tertiary\"} label={\"Clear selections\"} onClick={() => setSelectedValues([])} />\n </div>\n </div>\n </OverlayTrigger>\n );\n}\n","import { AriaButtonProps } from \"@react-types/button\";\nimport { ButtonHTMLAttributes, ReactNode, RefObject, useMemo, useState } from \"react\";\nimport { useButton, useFocusRing, useHover } from \"react-aria\";\nimport { Icon, IconProps, Loader, maybeTooltip, navLink, resolveTooltip } from \"src/components\";\nimport { Css, Palette, Properties } from \"src/Css\";\nimport { useGetRef } from \"src/hooks/useGetRef\";\nimport { BeamButtonProps, BeamFocusableProps } from \"src/interfaces\";\nimport { isAbsoluteUrl, isPromise, noop } from \"src/utils\";\nimport { getButtonOrLink } from \"src/utils/getInteractiveElement\";\nimport { useTestIds } from \"src/utils/useTestIds\";\nimport { labelOr } from \"./internal/OverlayTrigger\";\n\nexport interface ButtonProps extends BeamButtonProps, BeamFocusableProps {\n label: ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n icon?: IconProps[\"icon\"] | null;\n /** Displays contents after the Button's label. Will be ignored for Buttons rendered as a link with an absolute URL */\n endAdornment?: ReactNode;\n /** HTML attributes to apply to the button element when it is being used to trigger a menu. */\n menuTriggerProps?: AriaButtonProps;\n buttonRef?: RefObject<HTMLElement>;\n /** Allow for setting \"submit\" | \"button\" | \"reset\" on button element */\n type?: ButtonHTMLAttributes<HTMLButtonElement>[\"type\"];\n /** Denotes if this button is used to download a resource. Uses the anchor tag with the `download` attribute */\n download?: boolean;\n contrast?: boolean;\n\n /** Additional text to further customize button during an async request is in progress. */\n labelInFlight?: string;\n}\n\nexport function Button(props: ButtonProps) {\n const {\n onClick: onPress,\n disabled,\n endAdornment,\n menuTriggerProps,\n tooltip,\n openInNew,\n download,\n contrast = false,\n forceFocusStyles = false,\n labelInFlight,\n ...otherProps\n } = props;\n const asLink = typeof onPress === \"string\";\n const showExternalLinkIcon = (asLink && isAbsoluteUrl(onPress)) || openInNew;\n const [asyncInProgress, setAsyncInProgress] = useState(false);\n const isDisabled = !!disabled;\n const ariaProps = { onPress, isDisabled: isDisabled || asyncInProgress, ...otherProps, ...menuTriggerProps };\n const {\n label,\n // Default the icon based on other properties.\n icon = download ? \"download\" : showExternalLinkIcon ? \"linkExternal\" : undefined,\n variant = \"primary\",\n size = \"sm\",\n buttonRef,\n } = ariaProps;\n const ref = useGetRef(buttonRef);\n const tid = useTestIds(props, labelOr(ariaProps, \"button\"));\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n onPress: asLink\n ? noop\n : (e) => {\n const result = onPress(e);\n if (isPromise(result)) {\n setAsyncInProgress(true);\n result.finally(() => setAsyncInProgress(false));\n }\n return result;\n },\n elementType: asLink ? \"a\" : \"button\",\n },\n ref as RefObject<HTMLElement>,\n );\n const { isFocusVisible, focusProps } = useFocusRing(ariaProps);\n const { hoverProps, isHovered } = useHover(ariaProps);\n const { baseStyles, hoverStyles, disabledStyles, pressedStyles, focusStyles } = useMemo(\n () => getButtonStyles(variant, size, contrast),\n [variant, size, contrast],\n );\n\n const buttonContent = (\n <>\n {icon && <Icon xss={iconStyles[size]} icon={icon} />}\n {labelInFlight && asyncInProgress ? labelInFlight : label}\n {(endAdornment || asyncInProgress) && (\n <span css={Css.ml1.$}>{asyncInProgress ? <Loader size={\"xs\"} contrast={contrast} /> : endAdornment}</span>\n )}\n </>\n );\n\n const buttonAttrs = {\n ref: ref as any,\n ...buttonProps,\n ...focusProps,\n ...hoverProps,\n className: asLink ? navLink : undefined,\n css: {\n ...Css.buttonBase.tt(\"inherit\").$,\n ...baseStyles,\n ...(isHovered && !isPressed ? hoverStyles : {}),\n ...(isPressed ? pressedStyles : {}),\n ...(isDisabled || asyncInProgress ? { ...disabledStyles, ...Css.cursorNotAllowed.$ } : {}),\n ...(isFocusVisible || forceFocusStyles ? focusStyles : {}),\n },\n ...tid,\n };\n\n // If we're disabled b/c of a non-boolean ReactNode, or the caller specified tooltip text, then show it in a tooltip\n return maybeTooltip({\n title: resolveTooltip(disabled, tooltip),\n placement: \"top\",\n children: getButtonOrLink(buttonContent, onPress, buttonAttrs, openInNew, download),\n });\n}\n\nfunction getButtonStyles(variant: ButtonVariant, size: ButtonSize, contrast: boolean) {\n const styles = variantStyles(contrast)[variant];\n if (variant === \"text\") {\n // The text variant does not support the 'size'. The 'size' prop only effects the button's height and padding which is not relevant for this variant.\n return styles;\n }\n return {\n ...styles,\n baseStyles: { ...styles.baseStyles, ...sizeStyles[size] },\n };\n}\n\nconst variantStyles: (contrast: boolean) => Record<\n ButtonVariant,\n {\n baseStyles: Properties;\n hoverStyles: Properties;\n disabledStyles: Properties;\n pressedStyles: Properties;\n focusStyles: Properties;\n }\n> = (contrast) => ({\n primary: {\n baseStyles: Css.bgBlue600.white.$,\n hoverStyles: Css.bgBlue700.$,\n pressedStyles: Css.bgBlue800.$,\n disabledStyles: Css.bgBlue200.if(contrast).gray600.bgBlue900.$,\n focusStyles: Css.bshFocus.if(contrast).boxShadow(`0 0 0 2px ${Palette.White}`).$,\n },\n\n secondary: {\n baseStyles: Css.bgWhite.bcGray300.bw1.ba.gray800.$,\n hoverStyles: Css.bgGray100.if(contrast).bgGray300.$,\n pressedStyles: Css.bgGray200.if(contrast).bgGray100.$,\n disabledStyles: Css.bgWhite.gray400.$,\n focusStyles: Css.bshFocus.if(contrast).boxShadow(`0 0 0 2px ${Palette.White}`).$,\n },\n\n tertiary: {\n baseStyles: Css.bgTransparent.blue600.if(contrast).white.$,\n hoverStyles: Css.bgGray100.if(contrast).bgGray700.white.$,\n pressedStyles: Css.blue800.if(contrast).bgWhite.gray900.$,\n disabledStyles: Css.gray400.if(contrast).gray700.$,\n focusStyles: Css.bshFocus.if(contrast).boxShadow(`0 0 0 2px ${Palette.Blue400}`).bgGray700.white.$,\n },\n\n tertiaryDanger: {\n baseStyles: Css.bgTransparent.red600.if(contrast).red400.$,\n hoverStyles: Css.bgGray100.if(contrast).bgGray700.white.$,\n pressedStyles: Css.red800.if(contrast).bgWhite.gray900.$,\n disabledStyles: Css.gray400.if(contrast).gray700.$,\n focusStyles: Css.boxShadow(`0px 0px 0px 2px ${Palette.White}, 0px 0px 0px 4px ${Palette.Red500}`)\n .if(contrast)\n .boxShadow(`0px 0px 0px 2px ${Palette.Red500}`).$,\n },\n\n danger: {\n baseStyles: Css.bgRed600.white.$,\n hoverStyles: Css.bgRed700.$,\n pressedStyles: Css.bgRed800.$,\n disabledStyles: Css.bgRed200.if(contrast).bgRed900.gray600.$,\n focusStyles: Css.bshDanger.if(contrast).boxShadow(`0 0 0 2px ${Palette.White}`).$,\n },\n\n caution: {\n baseStyles: Css.bgYellow200.gray900.$,\n hoverStyles: Css.bgYellow300.$,\n pressedStyles: Css.bgYellow400.$,\n disabledStyles: Css.bgYellow200.if(contrast).bgYellow900.white.$,\n focusStyles: Css.bshDanger.if(contrast).boxShadow(`0 0 0 2px ${Palette.White}`).$,\n },\n\n text: {\n baseStyles: Css.blue700.add(\"fontSize\", \"inherit\").if(contrast).blue400.$,\n hoverStyles: Css.blue600.if(contrast).blue300.$,\n pressedStyles: Css.blue700.if(contrast).blue200.$,\n disabledStyles: Css.blue300.if(contrast).blue700.$,\n focusStyles: Css.bshFocus.if(contrast).boxShadow(`0 0 0 2px ${Palette.White}`).$,\n },\n // Todo: handle contrast variant\n textSecondary: {\n baseStyles: Css.gray900.add(\"fontSize\", \"inherit\").$,\n hoverStyles: Css.bgGray100.$,\n pressedStyles: Css.gray900.$,\n disabledStyles: Css.bgWhite.gray400.$,\n focusStyles: Css.gray900.$,\n },\n});\n\nconst sizeStyles: Record<ButtonSize, Properties> = {\n sm: Css.hPx(32).pxPx(12).$,\n md: Css.hPx(40).px2.$,\n lg: Css.hPx(48).px3.$,\n};\n\nconst iconStyles: Record<ButtonSize, IconProps[\"xss\"]> = {\n sm: Css.mrPx(4).$,\n md: Css.mr1.$,\n lg: Css.mrPx(10).$,\n};\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"tertiary\"\n | \"tertiaryDanger\"\n | \"caution\"\n | \"danger\"\n | \"text\"\n | \"textSecondary\";\n","import { AriaButtonProps } from \"@react-types/button\";\nimport type { Placement } from \"@react-types/overlays\";\nimport { MutableRefObject, ReactElement, ReactNode, useRef } from \"react\";\nimport { useOverlayPosition } from \"react-aria\";\nimport { MenuTriggerState } from \"react-stately\";\nimport { AvatarButton, AvatarButtonProps } from \"src/components/Avatar/AvatarButton\";\nimport { Button, ButtonProps, ButtonVariant } from \"src/components/Button\";\nimport { Icon } from \"src/components/Icon\";\nimport { IconButton, IconButtonProps } from \"src/components/IconButton\";\nimport { Popover } from \"src/components/internal\";\nimport { NavLink, NavLinkProps } from \"src/components/NavLink\";\nimport { Css } from \"src/Css\";\nimport { noop, useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface TextButtonTriggerProps extends Pick<ButtonProps, \"label\" | \"variant\" | \"size\" | \"icon\"> {}\ninterface IconButtonTriggerProps extends Pick<IconButtonProps, \"icon\" | \"color\" | \"compact\" | \"contrast\" | \"inc\"> {}\ninterface AvatarButtonTriggerProps extends Pick<AvatarButtonProps, \"src\" | \"name\" | \"size\"> {}\ninterface NavLinkButtonTriggerProps extends Pick<NavLinkProps, \"active\" | \"variant\" | \"icon\"> {\n navLabel: string;\n}\n\nexport interface OverlayTriggerProps {\n trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps;\n /** Defaults to \"left\" */\n placement?: \"left\" | \"right\";\n /** Whether the Button is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n /** Text to be shown via a tooltip when the user hovers over the button */\n tooltip?: ReactNode;\n /** The component to be shown within the overlay */\n children: ReactElement;\n /** Props returned by the useMenuTrigger hook to be passed to the button element */\n menuTriggerProps: AriaButtonProps;\n /** Ref for the button element */\n buttonRef: MutableRefObject<HTMLButtonElement | null>;\n /** Result of the useMenuTriggerState hook */\n state: MenuTriggerState;\n /** Prop set the style of the button element */\n variant?: ButtonVariant;\n hideEndAdornment?: boolean;\n showActiveBorder?: boolean;\n contrast?: boolean;\n}\n\nexport function OverlayTrigger(props: OverlayTriggerProps) {\n const {\n trigger,\n buttonRef,\n menuTriggerProps,\n placement,\n state,\n disabled,\n tooltip,\n children,\n variant,\n hideEndAdornment,\n showActiveBorder = false,\n contrast = false,\n } = props;\n const popoverRef = useRef(null);\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: buttonRef,\n overlayRef: popoverRef,\n shouldFlip: true,\n isOpen: state.isOpen,\n onClose: state.close,\n placement: (placement ? `bottom ${placement}` : \"bottom left\") as Placement,\n offset: showActiveBorder ? 4 : undefined,\n });\n const tid = useTestIds(\n props,\n isTextButton(trigger)\n ? defaultTestId(labelOr(trigger, \"overlayTrigger\"))\n : isNavLinkButton(trigger)\n ? defaultTestId(trigger.navLabel)\n : isIconButton(trigger)\n ? trigger.icon\n : trigger.name,\n );\n\n return (\n // Add `line-height: 0` to prevent the Icon button and Avatar buttons from inheriting the line-height, causing them to be taller than they should.\n <div css={Css.dib.add(\"lineHeight\", 0).$}>\n {isTextButton(trigger) ? (\n <Button\n variant={variant ? variant : \"secondary\"}\n contrast={contrast}\n {...trigger}\n menuTriggerProps={menuTriggerProps}\n buttonRef={buttonRef}\n endAdornment={!hideEndAdornment ? <Icon icon={state.isOpen ? \"chevronUp\" : \"chevronDown\"} /> : null}\n disabled={disabled}\n tooltip={tooltip}\n onClick={menuTriggerProps.onPress ?? noop}\n forceFocusStyles={showActiveBorder && state.isOpen}\n {...tid}\n />\n ) : isNavLinkButton(trigger) ? (\n <NavLink\n {...trigger}\n label={trigger.navLabel}\n disabled={!!disabled}\n contrast={contrast}\n menuTriggerProps={menuTriggerProps}\n buttonRef={buttonRef}\n {...tid}\n />\n ) : isIconButton(trigger) ? (\n <IconButton\n {...trigger}\n menuTriggerProps={menuTriggerProps}\n buttonRef={buttonRef}\n {...tid}\n disabled={disabled}\n tooltip={tooltip}\n onClick={menuTriggerProps.onPress ?? noop}\n forceFocusStyles={showActiveBorder && state.isOpen}\n />\n ) : (\n <AvatarButton\n {...trigger}\n menuTriggerProps={menuTriggerProps}\n buttonRef={buttonRef}\n {...tid}\n disabled={disabled}\n tooltip={tooltip}\n onClick={menuTriggerProps.onPress ?? noop}\n forceFocusStyles={showActiveBorder && state.isOpen}\n />\n )}\n {state.isOpen && (\n <Popover\n triggerRef={buttonRef}\n popoverRef={popoverRef}\n positionProps={positionProps}\n onClose={() => state.close()}\n isOpen={state.isOpen}\n >\n {children}\n </Popover>\n )}\n </div>\n );\n}\n\nexport function isTextButton(\n trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps,\n): trigger is TextButtonTriggerProps {\n return trigger && typeof trigger === \"object\" && \"label\" in trigger;\n}\nexport function isIconButton(\n trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps,\n): trigger is IconButtonTriggerProps {\n return trigger && typeof trigger === \"object\" && \"icon\" in trigger;\n}\n\nexport function isNavLinkButton(\n trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps,\n): trigger is NavLinkButtonTriggerProps {\n return trigger && typeof trigger === \"object\" && \"navLabel\" in trigger;\n}\n\nexport function labelOr(trigger: { label: unknown }, fallback: string): string {\n return typeof trigger.label === \"string\" ? trigger.label : fallback;\n}\n","import { AriaButtonProps } from \"@react-types/button\";\nimport { RefObject, useMemo } from \"react\";\nimport { useButton, useFocusRing, useHover } from \"react-aria\";\nimport { maybeTooltip, navLink, resolveTooltip } from \"src/components\";\nimport { Avatar, AvatarProps } from \"src/components/Avatar/Avatar\";\nimport { Css, Palette } from \"src/Css\";\nimport { useGetRef } from \"src/hooks/useGetRef\";\nimport { BeamButtonProps, BeamFocusableProps } from \"src/interfaces\";\nimport { noop } from \"src/utils\";\nimport { getButtonOrLink } from \"src/utils/getInteractiveElement\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport interface AvatarButtonProps extends AvatarProps, BeamButtonProps, BeamFocusableProps {\n menuTriggerProps?: AriaButtonProps;\n buttonRef?: RefObject<HTMLButtonElement>;\n}\n\nexport function AvatarButton(props: AvatarButtonProps) {\n const {\n onClick: onPress,\n disabled,\n autoFocus,\n buttonRef,\n tooltip,\n menuTriggerProps,\n openInNew,\n forceFocusStyles = false,\n ...avatarProps\n } = props;\n const isDisabled = !!disabled;\n const ariaProps = { onPress, isDisabled, autoFocus, ...menuTriggerProps };\n const ref = useGetRef(buttonRef);\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n onPress: typeof onPress === \"string\" ? noop : onPress,\n elementType: typeof onPress === \"string\" ? \"a\" : \"button\",\n },\n ref,\n );\n const { focusProps, isFocusVisible } = useFocusRing(ariaProps);\n const { hoverProps, isHovered } = useHover(ariaProps);\n const tid = useTestIds(props, avatarProps.name);\n\n const styles = useMemo(\n () => ({\n ...resetStyles,\n ...(isHovered && hoverStyles),\n ...(isPressed && pressedStyles),\n ...(isFocusVisible || forceFocusStyles ? focusStyles : {}),\n ...(isDisabled && disabledStyles),\n }),\n [isHovered, isFocusVisible, isDisabled, isPressed, forceFocusStyles],\n );\n\n const buttonAttrs = {\n ...tid.button,\n ...buttonProps,\n ...focusProps,\n ...hoverProps,\n className: typeof onPress === \"string\" ? navLink : undefined,\n ref: ref as any,\n css: styles,\n };\n\n // If we're disabled b/c of a non-boolean ReactNode, or the caller specified tooltip text, then show it in a tooltip\n return maybeTooltip({\n // Default the tooltip to the avatar's name, if defined.\n title: resolveTooltip(disabled, tooltip ?? avatarProps.name),\n placement: \"top\",\n // Disable the auto-tooltip in Avatar to prevent nested tooltips which can cause issues with interactions\n children: getButtonOrLink(<Avatar {...avatarProps} {...tid} disableTooltip />, onPress, buttonAttrs, openInNew),\n });\n}\n\nconst resetStyles = Css.br100.cursorPointer.outline0.relative.$;\nexport const hoverStyles = Css.boxShadow(`0 0 4px ${Palette.Gray900}`).$;\nconst focusStyles = Css.bshFocus.$;\nconst disabledStyles = Css.cursorNotAllowed.$;\nexport const pressedStyles = Css.addIn(\n \":after\",\n Css.br100.bgGray900.contentEmpty.w100.h100.absolute.top0.left0.add(\"opacity\", \"0.2\").$,\n).$;\n","import { useState } from \"react\";\nimport { Icon } from \"src/components/Icon\";\nimport { maybeTooltip } from \"src/components/Tooltip\";\nimport { Css, Typography } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\nexport interface AvatarProps {\n src: string | undefined;\n name?: string;\n size?: AvatarSize;\n showName?: boolean;\n disableTooltip?: boolean;\n}\n\nexport function Avatar({ src, name, size = \"md\", showName = false, disableTooltip = false, ...others }: AvatarProps) {\n const tid = useTestIds(others, \"avatar\");\n const px = sizeToPixel[size];\n const [showFallback, setShowFallback] = useState(src === undefined);\n // Define min-width as well as width to prevent the image from shrinking when displayed within a flex-child that allows shrinking.\n const styles = Css.br100.wPx(px).hPx(px).mwPx(px).oh.$;\n\n const img = showFallback ? (\n <div css={{ ...styles, ...Css[sizeToFallbackTypeScale[size]].bgGray400.gray100.df.aic.jcc.$ }} {...tid}>\n {name ? nameToInitials(name) : <Icon icon=\"userCircle\" inc={sizeToIconInc[size]} />}\n </div>\n ) : (\n <img\n src={src}\n alt={name}\n css={{ ...styles, ...Css.objectCover.$ }}\n onError={() => setShowFallback(true)}\n loading=\"lazy\"\n {...tid}\n />\n );\n\n return showName && name ? (\n <div css={Css.dif.aic.gap1.if(size === \"lg\" || size === \"xl\").fdc.$}>\n {img}\n <span css={Css[sizeToTypeScale[size]].$}>{name}</span>\n </div>\n ) : (\n maybeTooltip({ title: disableTooltip ? undefined : name, children: img, placement: \"top\" })\n );\n}\n\nexport type AvatarSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst sizeToPixel: Record<AvatarSize, number> = {\n sm: 24,\n md: 36,\n lg: 48,\n xl: 72,\n};\n\nconst sizeToFallbackTypeScale: Record<AvatarSize, Typography> = {\n sm: \"tiny\",\n md: \"sm\",\n lg: \"lg\",\n xl: \"xl3\",\n};\n\nconst sizeToIconInc: Record<AvatarSize, number> = {\n sm: 2.5,\n md: 4,\n lg: 5,\n xl: 8,\n};\n\nconst sizeToTypeScale: Record<AvatarSize, Typography> = {\n sm: \"smMd\",\n md: \"smMd\",\n lg: \"base\",\n xl: \"base\",\n};\n\nfunction nameToInitials(name: string) {\n return (\n name\n .split(\" \")\n .map((n) => (n.length > 0 ? n[0].toUpperCase() : \"\"))\n .join(\"\")\n // Return at most 3 initials\n .slice(0, 3)\n );\n}\n","import { AriaButtonProps } from \"@react-types/button\";\nimport { RefObject, useMemo } from \"react\";\nimport { mergeProps, useButton, useFocusRing, useHover } from \"react-aria\";\nimport type { IconKey } from \"src/components\";\nimport { navLink } from \"src/components\";\nimport { Css, Properties } from \"src/Css\";\nimport { useGetRef } from \"src/hooks/useGetRef\";\nimport { BeamFocusableProps } from \"src/interfaces\";\nimport { getButtonOrLink } from \"src/utils/getInteractiveElement\";\nimport { Icon } from \"./Icon\";\n\nexport interface NavLinkProps extends BeamFocusableProps {\n /** active indicates the user is on the current page */\n active?: boolean;\n disabled?: boolean;\n /** if `href` isn't provided, it is treated as a <button> */\n href?: string;\n label: string;\n icon?: IconKey;\n variant: NavLinkVariant;\n openInNew?: boolean;\n contrast?: boolean;\n /** HTML attributes to apply to the button element when it is being used to trigger a menu. */\n menuTriggerProps?: AriaButtonProps;\n buttonRef?: RefObject<HTMLElement>;\n}\n\ntype NavLinkVariant = \"side\" | \"global\";\n\nexport function NavLink(props: NavLinkProps) {\n const {\n disabled: isDisabled,\n label,\n openInNew,\n contrast = false,\n menuTriggerProps,\n buttonRef,\n ...otherProps\n } = props;\n const ariaProps = { children: label, isDisabled, ...menuTriggerProps, ...otherProps };\n const { href, active = false, icon = false, variant } = ariaProps;\n const ref = useGetRef(buttonRef);\n const { buttonProps, isPressed } = useButton({ ...ariaProps, elementType: href ? \"a\" : \"button\" }, ref);\n const { hoverProps, isHovered } = useHover({ isDisabled });\n const { isFocusVisible, focusProps } = useFocusRing(ariaProps);\n\n const { baseStyles, activeStyles, focusRingStyles, hoverStyles, disabledStyles, pressedStyles } = useMemo(\n () => getNavLinkStyles(variant, contrast),\n [variant, contrast],\n );\n\n const linkAttributes = {\n className: navLink,\n ref: ref,\n /** does not focus if disabled */\n tabIndex: isDisabled ? -1 : 0,\n /** aria-current represents the current page within a set of pages */\n \"aria-current\": active ? (\"page\" as const) : undefined,\n css: {\n ...baseStyles,\n ...(active && activeStyles),\n ...(isDisabled && disabledStyles),\n ...(isFocusVisible && focusRingStyles),\n ...(isHovered && hoverStyles),\n ...(isPressed && pressedStyles),\n },\n };\n\n const linkContent = (\n <>\n {label}\n {icon && (\n <span css={Css.ml1.$}>\n <Icon icon={icon} />\n </span>\n )}\n </>\n );\n\n return getButtonOrLink(linkContent, href, { ...mergeProps(buttonProps, focusProps, hoverProps), ...linkAttributes });\n}\n\nexport function getNavLinkStyles(variant: NavLinkVariant, contrast: boolean) {\n return navLinkVariantStyles(contrast)[variant];\n}\n\nconst baseStyles = Css.df.aic.hPx(32).pyPx(6).px1.br4.smMd.outline0.$;\n\nconst navLinkVariantStyles: (contrast: boolean) => Record<\n NavLinkVariant,\n {\n baseStyles: Properties;\n hoverStyles: Properties;\n disabledStyles: Properties;\n focusRingStyles: Properties;\n activeStyles: Properties;\n pressedStyles: Properties;\n }\n> = (contrast) => ({\n side: {\n baseStyles: { ...baseStyles, ...Css.gray700.if(contrast).gray600.$ },\n activeStyles: Css.blue700.bgBlue50.if(contrast).white.bgGray700.$,\n disabledStyles: Css.gray400.cursorNotAllowed.if(contrast).gray800.$,\n focusRingStyles: Css.bgBlue50.bshFocus.if(contrast).bgGray700.white.$,\n hoverStyles: Css.gray700.bgGray100.if(contrast).bgGray800.gray600.$,\n pressedStyles: Css.gray700.bgGray200.if(contrast).bgGray200.gray800.$,\n },\n global: {\n baseStyles: { ...baseStyles, ...Css.add(\"width\", \"max-content\").gray500.$ },\n activeStyles: Css.white.bgGray900.$,\n disabledStyles: Css.gray400.cursorNotAllowed.$,\n focusRingStyles: Css.gray500.bgGray900.add(\n \"boxShadow\",\n `0px 1px 2px rgba(0, 0, 0, 0.05), 0px 0px 0px 2px #242424, 0px 0px 0px 4px #0EA5E9`,\n ).$,\n hoverStyles: Css.gray500.bgGray900.$,\n pressedStyles: Css.gray500.bgGray700.$,\n },\n});\n","import { ReactNode, useCallback, useContext } from \"react\";\nimport { Icon } from \"src/components/Icon\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport { Css, Palette, Properties } from \"src/Css\";\nimport { useComputed, useHover } from \"src/hooks\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\ninterface SortHeaderProps {\n content: string;\n xss?: Properties;\n iconOnLeft?: boolean;\n sortKey: string;\n tooltipEl?: ReactNode;\n}\n\n/**\n * Wraps column header names with up/down sorting icons.\n *\n * GridTable will use this automatically if the header content is just a text string.\n *\n * Alternatively, callers can also:\n *\n * - Instantiate this SortHeader directly with some customizations in `xss`, or\n * - Write their own component that uses `GridSortContext` to access the column's\n * current sort state + `toggleSort` function\n */\nexport function SortHeader(props: SortHeaderProps) {\n const { content, xss, iconOnLeft = false, sortKey, tooltipEl } = props;\n const { isHovered, hoverProps } = useHover({});\n const { tableState } = useContext(TableStateContext);\n const current = useComputed(() => tableState.sortState?.current, [tableState]);\n const sorted = sortKey === current?.columnId ? current?.direction : undefined;\n const toggleSort = useCallback(() => tableState.setSortKey(sortKey), [sortKey, tableState]);\n\n const tid = useTestIds(props, \"sortHeader\");\n\n const icon = (\n <span css={Css.fs0.$}>\n <Icon\n icon={sorted === \"DESC\" ? \"sortDown\" : \"sortUp\"}\n color={sorted !== undefined ? Palette.Blue700 : Palette.Gray400}\n xss={{\n ...Css.ml1.if(iconOnLeft).mr1.ml0.$,\n ...Css.visibility(\"hidden\")\n .if(isHovered || sorted !== undefined)\n .visibility(\"visible\").$,\n }}\n inc={2}\n {...tid.icon}\n />\n </span>\n );\n return (\n <div {...tid} css={{ ...Css.df.aic.h100.cursorPointer.usn.$, ...xss }} {...hoverProps} onClick={toggleSort}>\n {iconOnLeft && icon}\n <span css={Css.lineClamp2.$}>{content}</span>\n {tooltipEl}\n {!iconOnLeft && icon}\n </div>\n );\n}\n","import { useResizeObserver } from \"@react-aria/utils\";\nimport { MutableRefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport { GridStyle } from \"src/components/Table/TableStyles\";\nimport { GridColumnWithId, Kinded } from \"src/components/Table/types\";\nimport { calcColumnSizes } from \"src/components/Table/utils/columns\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\n/**\n * Calculates an array of sizes for each of our columns.\n *\n * We originally supported CSS grid-template-column definitions which allowed fancier,\n * dynamic/content-based widths, but have eventually dropped it mainly due to:\n *\n * 1. In virtual tables, a) the table never has all of the rows in DOM at a single time,\n * so any \"content-based\" widths will change as you scroll the table, which is weird, and\n * b) a sticky header and rows are put in different DOM parent elements by react-virtuoso,\n * so wouldn't arrive at the same \"content-based\" widths.\n *\n * 2. Using CSS grid but still have a row-level div for hover/focus targeting required\n * a \"fake\" `display: contents` div that couldn't have actually any styles applied to it.\n *\n * So we've just got with essentially fixed/deterministic widths, i.e. `px` or `percent` or\n * `fr`.\n *\n * Disclaimer that we roll our own `fr` b/c we're not in CSS grid anymore.\n */\nexport function useSetupColumnSizes<R extends Kinded>(\n style: GridStyle,\n columns: GridColumnWithId<R>[],\n resizeRef: MutableRefObject<HTMLElement | null>,\n expandedColumnIds: string[],\n): string[] {\n // Calculate the column sizes immediately rather than via the `debounce` method.\n // We do this for Storybook integrations that may use MockDate. MockDate changes the behavior of `new Date()`,\n // which is used internally by `useDebounce`, so the frozen clock means the callback is never called.\n const calculateImmediately = useRef<boolean>(true);\n const [tableWidth, setTableWidth] = useState<number | undefined>();\n\n // Calc our initial/first render sizes where we won't have a width yet\n const [columnSizes, setColumnSizes] = useState<string[]>(\n calcColumnSizes(columns, tableWidth, style.minWidthPx, expandedColumnIds),\n );\n\n const setTableAndColumnWidths = useCallback(\n (width: number) => {\n setTableWidth(width);\n setColumnSizes(calcColumnSizes(columns, width, style.minWidthPx, expandedColumnIds));\n },\n [setTableWidth, setColumnSizes, columns, style, expandedColumnIds],\n );\n\n // Used to recalculate our columns sizes when columns change\n useEffect(\n () => {\n if (!calculateImmediately.current) {\n const width = resizeRef.current?.clientWidth;\n width && setTableAndColumnWidths(width);\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [columns, setTableAndColumnWidths],\n );\n\n const setTableAndColumnWidthsDebounced = useDebouncedCallback(setTableAndColumnWidths, 100);\n\n const onResize = useCallback(\n () => {\n const target = resizeRef.current;\n if (target && target.clientWidth !== tableWidth) {\n if (calculateImmediately.current) {\n calculateImmediately.current = false;\n setTableAndColumnWidths(target.clientWidth);\n } else {\n setTableAndColumnWidthsDebounced(target.clientWidth);\n }\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tableWidth, setTableAndColumnWidths, setTableAndColumnWidthsDebounced],\n );\n\n useResizeObserver({ ref: resizeRef, onResize });\n\n return columnSizes;\n}\n","import { ReactNode } from \"react\";\nimport { PresentationContextProps, PresentationFieldProps } from \"src/components/PresentationContext\";\nimport { DiscriminateUnion, GridDataRow, GridTableApi, RenderCellFn } from \"src/components/Table/index\";\nimport { Kinded } from \"src/components/Table/types\";\nimport { Css, Palette, Properties, Typography } from \"src/Css\";\nimport { safeKeys } from \"src/utils\";\n\n/** Completely static look & feel, i.e. nothing that is based on row kinds/content. */\nexport interface GridStyle {\n /** Applied to the base div element. */\n rootCss?: Properties;\n /** Applied with the owl operator between rows for rendering border lines. */\n betweenRowsCss?: Properties;\n /** Applied on the last row of the table. */\n lastRowCss?: Properties;\n /** Applied on the first row of the table (could be the Header or Totals row). */\n firstRowCss?: Properties;\n /** Applied to every non-header row of the table */\n nonHeaderRowCss?: Properties;\n /** Applied to the first non-header row, i.e. if you want to cancel out `betweenRowsCss`. */\n firstNonHeaderRowCss?: Properties;\n /** Applied to all cell divs (via a selector off the base div). */\n cellCss?: Properties;\n /**\n * Applied to the header row divs.\n *\n * NOTE `as=virtual`: When using a virtual table with the goal of adding space\n * between the header and the first row use `firstNonHeaderRowCss` with a\n * margin-top instead. Using `headerCellCss` will not work since the header\n * rows are wrapper with Chrome rows.\n */\n headerCellCss?: Properties;\n /** Applied to 'kind: \"totals\"' cells */\n totalsCellCss?: Properties;\n /** Applied to 'kind: \"expandableHeader\"' cells */\n expandableHeaderCss?: Properties;\n /** Applied to the first cell of all rows, i.e. for table-wide padding or left-side borders. */\n firstCellCss?: Properties;\n /** Applied to the last cell of all rows, i.e. for table-wide padding or right-side borders. */\n lastCellCss?: Properties;\n /** Applied if there is a fallback/overflow message showing. */\n firstRowMessageCss?: Properties;\n /** Applied on hover if a row has a rowLink/onClick set. */\n rowHoverColor?: Palette | \"none\";\n /** Applied on hover of a row */\n nonHeaderRowHoverCss?: Properties;\n /** Default content to put into an empty cell */\n emptyCell?: ReactNode;\n presentationSettings?: Pick<PresentationFieldProps, \"borderless\" | \"borderOnHover\" | \"typeScale\"> &\n Pick<PresentationContextProps, \"wrap\">;\n /** Minimum table width in pixels. Used when calculating columns sizes */\n minWidthPx?: number;\n /** Css to apply at each level of a parent/child nested table. */\n levels?:\n | Record<\n number,\n {\n /** Number of pixels to indent the row. This value will be subtracted from the \"first content column\" width. First content column is the first column that is not an 'action' column (i.e. non-checkbox or non-collapse button column) */\n rowIndent?: number;\n cellCss?: Properties;\n firstContentColumn?: Properties;\n }\n >\n | ((level: number) => { rowIndent?: number; cellCss?: Properties; firstContentColumn?: Properties });\n /** Allows for customization of the background color used to denote an \"active\" row */\n activeBgColor?: Palette;\n /** Defines styles for the group row which holds the selected rows that have been filtered out */\n keptGroupRowCss?: Properties;\n /** Defines styles for the last row `keptGroup` to provide separation from the rest of the table */\n keptLastRowCss?: Properties;\n}\n\n// If adding a new `GridStyleDef`, ensure if it added to the `defKeys` in the `resolveStyles` function below\nexport interface GridStyleDef {\n /** Changes the height of the rows when `rowHeight: fixed` to provide more space between rows for input fields. */\n inlineEditing?: boolean;\n /** Adds styling for grouped rows */\n grouped?: boolean;\n /** 'fixed' height rows do not allow text to wrap. 'flexible' allows for wrapping. Defaults to `flexible` */\n rowHeight?: \"fixed\" | \"flexible\";\n /** Enables cells Highlight and hover */\n cellHighlight?: boolean;\n /** Applies a white background to the whole table, including header and group rows. */\n allWhite?: boolean;\n /** Whether to apply a border around the whole table */\n bordered?: boolean;\n /** Whether to show a hover effect on rows. Defaults to true */\n rowHover?: boolean;\n /** Defines the vertical alignment of the content of the cells for the whole table (not including the 'header' rows). Defaults to `center` */\n vAlign?: \"top\" | \"center\" | \"bottom\";\n /** Defines the Typography for the table body's cells (not the header). This only applies to rows that are not nested/grouped */\n cellTypography?: Typography;\n /** Defines if the table should highlight the row on hover. Defaults to true */\n highlightOnHover?: boolean;\n}\n\n// Returns a \"blessed\" style of GridTable\nfunction memoizedTableStyles() {\n const cache: Record<string, GridStyle> = {};\n return (props: GridStyleDef = {}) => {\n const {\n inlineEditing = false,\n grouped = false,\n rowHeight = \"flexible\",\n cellHighlight = false,\n allWhite = false,\n bordered = false,\n vAlign = \"center\",\n cellTypography = \"xs\" as const,\n highlightOnHover = true,\n } = props;\n\n const key = safeKeys(props)\n .sort()\n .map((k) => `${k}_${props[k]}`)\n .join(\"|\");\n\n if (!cache[key]) {\n const alignItems = vAlign === \"center\" ? \"center\" : vAlign === \"top\" ? \"flex-start\" : \"flex-end\";\n const groupedLevels = {\n 0: {\n cellCss: {\n ...Css.xsMd.mhPx(56).gray700.bgGray100.boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`).$,\n ...(allWhite && Css.bgWhite.$),\n },\n firstContentColumn: { ...Css.smMd.$, ...(allWhite && Css.smBd.gray900.$) },\n },\n 2: { firstContentColumn: Css.tiny.pl3.$ },\n // Add 12 more pixels of padding for each level of nesting\n 3: { firstContentColumn: Css.tiny.plPx(36).$ },\n };\n const defaultLevels = { 1: { firstContentColumn: Css.tiny.pl3.$ } };\n\n cache[key] = {\n emptyCell: \"-\",\n firstRowMessageCss: {\n ...Css.tac.py3.$,\n ...(allWhite && Css.bgWhite.$),\n ...(bordered && Css.bl.br.bcGray200.$),\n },\n headerCellCss: {\n // We want to support headers having two lines of wrapped text, and could add a `lineClamp2` here, but\n // lineClamp requires `display: webkit-box`, which disables `align-items: center` (requires `display: flex/grid`)\n // Header's will add `lineClamp2` more locally in their renders.\n // Also `unset`-ing the white-space: nowrap defined in `cellCss` below.\n ...Css.gray700.xsMd.bgGray200.aic.pxPx(12).whiteSpace(\"unset\").hPx(40).$,\n ...(allWhite && Css.bgWhite.$),\n },\n totalsCellCss: Css.bgWhite.gray700.bgGray100.xsMd.hPx(totalsRowHeight).pPx(12).$,\n expandableHeaderCss: Css.bgWhite.gray900.xsMd.wsn\n .hPx(expandableHeaderRowHeight)\n .pxPx(12)\n .py0.boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`)\n .addIn(\"&:not(:last-of-type)\", Css.boxShadow(`inset -1px -1px 0 ${Palette.Gray200}`).$).$,\n cellCss: {\n ...Css[cellTypography].gray900.bgWhite.ai(alignItems).pxPx(12).boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`)\n .$,\n ...(rowHeight === \"flexible\" ? Css.pyPx(12).$ : Css.wsnw.hPx(inlineEditing ? 48 : 36).$),\n ...(cellHighlight ? { \"&:hover\": Css.bgGray100.$ } : {}),\n ...(bordered && { \"&:first-child\": Css.bl.bcGray200.$, \"&:last-child\": Css.br.bcGray200.$ }),\n },\n firstRowCss: {\n ...Css.addIn(\"& > *:first-of-type\", Css.borderRadius(\"8px 0 0 0 \").$).addIn(\n \"& > *:last-of-type\",\n Css.borderRadius(\"0 8px 0 0\").$,\n ).$,\n ...(bordered && Css.addIn(\"& > *\", Css.bt.bcGray200.$).$),\n },\n // Only apply border radius styles to the last row when using the `bordered` style table.\n lastRowCss: bordered\n ? Css.addIn(\"& > *:first-of-type\", Css.borderRadius(\"0 0 0 8px\").$).addIn(\n \"& > *:last-of-type\",\n Css.borderRadius(\"0 0 8px 0\").$,\n ).$\n : Css.addIn(\"> *\", Css.bsh0.$).$,\n presentationSettings: {\n borderless: true,\n typeScale: \"xs\",\n wrap: rowHeight === \"flexible\",\n borderOnHover: highlightOnHover,\n },\n levels: grouped ? groupedLevels : defaultLevels,\n rowHoverColor: Palette.Blue50,\n keptGroupRowCss: Css.bgYellow100.gray900.xsMd.df.aic.$,\n keptLastRowCss: Css.boxShadow(\"inset 0px -14px 8px -11px rgba(63,63,63,.18)\").$,\n };\n }\n\n return cache[key];\n };\n}\n\nexport const getTableStyles = memoizedTableStyles();\n\nexport const totalsRowHeight = 40;\nexport const expandableHeaderRowHeight = 40;\n\n/** Defines row-specific styling for each given row `kind` in `R` */\nexport type RowStyles<R extends Kinded> = {\n [P in R[\"kind\"]]?: RowStyle<DiscriminateUnion<R, \"kind\", P>>;\n};\n\nexport interface RowStyle<R extends Kinded> {\n /** Applies this css to the wrapper row, i.e. for row-level hovers. */\n rowCss?: Properties | ((row: R) => Properties);\n /** Applies this css to each cell in the row. */\n cellCss?: Properties | ((row: R) => Properties);\n /** Renders the cell element, i.e. a link to get whole-row links. */\n renderCell?: RenderCellFn<R>;\n /** Whether the row should be a link. */\n rowLink?: (row: R) => string;\n /** Fired when the row is clicked, similar to rowLink but for actions that aren't 'go to this link'. */\n onClick?: (row: GridDataRow<R>, api: GridTableApi<R>) => void;\n}\n\n/** Our original table look & feel/style. */\nexport const defaultStyle: GridStyle = getTableStyles({});\n\n/** Tightens up the padding of rows, great for rows that have form elements in them. */\nexport const condensedStyle: GridStyle = {\n ...getTableStyles({ rowHeight: \"fixed\" }),\n firstRowMessageCss: {\n ...getTableStyles({ rowHeight: \"fixed\" }).firstRowMessageCss,\n ...Css.xs.gray900.$,\n },\n};\n\n/** Renders each row as a card.\n * TODO: Add `cardStyle` option to `getTableStyles` and remove this.\n * */\nexport const cardStyle: GridStyle = {\n ...defaultStyle,\n betweenRowsCss: {},\n nonHeaderRowCss: Css.br4.oh.ba.bcGray400.mt2.add(\"transition\", \"all 240ms\").$,\n firstRowCss: Css.bl.br.bcGray200.borderRadius(\"8px 8px 0 0\").oh.$,\n cellCss: Css.p2.$,\n // Undo the card look & feel for the header\n headerCellCss: {\n ...defaultStyle.headerCellCss,\n ...Css.p1.m0.xsMd.gray700.$,\n },\n rowHoverColor: \"none\",\n nonHeaderRowHoverCss: Css.bshHover.bcGray700.$,\n // this will allow having N amount of nested childs without having to define each level margin\n levels: (level) => ({ rowIndent: level > 0 ? 24 * level : undefined }),\n};\n\nexport function resolveStyles(style: GridStyle | GridStyleDef): GridStyle {\n const defKeysRecord: Record<keyof GridStyleDef, boolean> = {\n inlineEditing: true,\n grouped: true,\n rowHeight: true,\n cellHighlight: true,\n allWhite: true,\n bordered: true,\n rowHover: true,\n vAlign: true,\n cellTypography: true,\n highlightOnHover: true,\n };\n const keys = safeKeys(style);\n const defKeys = safeKeys(defKeysRecord);\n if (keys.length === 0 || keys.some((k) => defKeys.includes(k))) {\n return getTableStyles(style as GridStyleDef);\n }\n return style as GridStyle;\n}\n","import { ReactNode } from \"react\";\nimport { GridCellContent } from \"src/components/Table/components/cell\";\nimport { GridRowKind } from \"src/components/Table/components/Row\";\nimport { GridRowApi } from \"src/components/Table/GridTableApi\";\nimport { Margin, Xss } from \"src/Css\";\n\nexport type Kinded = { kind: string };\nexport type GridTableXss = Xss<Margin>;\nexport type RenderAs = \"div\" | \"table\" | \"virtual\";\nexport type Direction = \"ASC\" | \"DESC\";\n\nexport type MaybeFn<T> = T | (() => T);\nexport type GridCellAlignment = \"left\" | \"right\" | \"center\";\n\nexport type GridTableScrollOptions =\n | number\n | {\n /** The index of the row to scroll to */\n index: number;\n behavior?: \"auto\" | \"smooth\";\n /**\n * How to position the row in the viewport\n */\n align?: \"start\" | \"center\" | \"end\";\n };\n\n/**\n * Given an ADT of type T, performs a look up and returns the type of kind K.\n *\n * See https://stackoverflow.com/a/50125960/355031\n */\nexport type DiscriminateUnion<T, K extends keyof T, V extends T[K]> = T extends Record<K, V> ? T : never;\n\n/**\n * Defines how a single column will render each given row `kind` in `R`.\n *\n * The `S` generic is either:\n *\n * - For server-side sorting, it's the sortKey to pass back to the server to\n * request \"sort by this column\".\n *\n * - For client-side sorting, it's type `number`, to represent the current\n * column being sorted, in which case we use the GridCellContent.value.\n */\nexport type GridColumn<R extends Kinded> = {\n /** Require a render function for each row `kind`. */\n [K in R[\"kind\"]]:\n | string // static data, i.e. `firstNameColumn = { header: \"First Name\" }`\n | GridCellContent // static-ish cell, i.e. `firstNameColumn = { header: { content: ... } }`\n // Functions for dynamic data, i.e. `firstNameColumn = { header: (data) => data.firstName }`\n | (DiscriminateUnion<R, \"kind\", K> extends { data: infer D }\n ? (\n data: D,\n opts: { row: GridRowKind<R, K>; api: GridRowApi<R>; level: number; expanded: boolean },\n ) => ReactNode | GridCellContent\n : (\n data: undefined,\n opts: { row: GridRowKind<R, K>; api: GridRowApi<R>; level: number; expanded: boolean },\n ) => ReactNode | GridCellContent);\n} & {\n /**\n * The column's width.\n * - Only px, percentage, or fr units are supported, due to each GridRow acting as an independent table. This ensures consistent alignment between rows.\n * - Numbers are treated as `fr` units\n * - The default value is `1fr`\n */\n w?: number | string;\n /** Represents the width the column will get when expanded. This prop is treated the same as the `GridColumn.w` prop.\n * Example: Collapsed state shows number of books. Expanded state shows titles of books.\n */\n expandedWidth?: number | string;\n /** The minimum width the column can shrink to. This must be defined in pixels */\n mw?: string;\n /** The column's default alignment for each cell. */\n align?: GridCellAlignment;\n /** Whether the column can be sorted (if client-side sorting). Defaults to true if sorting client-side. */\n clientSideSort?: boolean;\n /** This column's sort by value (if server-side sorting). */\n serverSideSortKey?: string;\n /** Allows the column to stay in place when the user scrolls horizontally */\n sticky?: \"left\" | \"right\";\n /** Prevent column from supporting RowStyle.onClick/rowLink in order to avoid nested interactivity. Defaults to true */\n wrapAction?: false;\n /** Used as a signal to defer adding the row's level indentation styling */\n isAction?: true;\n /** Column id that will be used to generate an unique identifier for every row cell */\n id?: string;\n /** String identifier of the column. Typically the same text content as in column header. This is used to in things like the Edit Columns Button */\n name?: string;\n /** Flag that will allow to know which columns are hide-able */\n canHide?: boolean;\n /** Flag that will allow to know which hide-able columns are visible on initial load */\n initVisible?: boolean;\n /** A list of columns that should only be shown when this column is \"expanded\" */\n expandColumns?: GridColumn<R>[] | (() => Promise<GridColumn<R>[]>);\n /** Determines whether the group should initially be expanded on load of the table */\n initExpanded?: boolean;\n /** Determines whether this column should be hidden when expanded (only the 'expandColumns' would show) */\n hideOnExpand?: boolean;\n /** Determines whether a column is csv-only or web-only. */\n showIn?: \"csv\" | \"web\";\n};\n\n/**\n * Adds an `id` to `GridColumn`, for use in storage/APIs.\n *\n * Ideally we'd require this on `GridColumn` itself, but that would be\n * a large breaking change for a lot of tables that don't need column ids.\n */\nexport type GridColumnWithId<R extends Kinded> = GridColumn<R> & {\n id: string;\n expandColumns?: GridColumnWithId<R>[] | (() => Promise<GridColumn<R>[]>);\n};\n\nexport const nonKindGridColumnKeys = [\n \"w\",\n \"mw\",\n \"align\",\n \"serverSideSortKey\",\n \"clientSideSort\",\n \"sticky\",\n \"wrapAction\",\n \"isAction\",\n \"id\",\n \"canHide\",\n \"initVisible\",\n \"expandColumns\",\n \"initExpanded\",\n \"hideOnExpand\",\n \"showIn\",\n];\n\n/**\n * Used to indicate where to pin the DataRow and if whether it should be filtered or always visible, setting `filter` to `true` will hide this row\n * if it doesn't match the provided filtering search term\n */\nexport type Pin = { at: \"first\" | \"last\"; filter?: boolean };\n\n// Use IfAny so that GridDataRow<any> doesn't devolve into any\nexport type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;\n\nexport type InfiniteScroll = {\n /** will be called when the user scrolls to the end of the list with the last item index as an argument. Return a promise to automatically show a loading spinner. */\n onEndReached: (index: number) => void | Promise<void>;\n /** The number of pixels from the bottom of the list to eagerly trigger `onEndReached`. The default is 500px. */\n endOffsetPx?: number;\n};\n","import { MutableRefObject } from \"react\";\nimport { ListRange, VirtuosoHandle } from \"react-virtuoso\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { GridTableApiImpl } from \"src/components/Table/GridTableApi\";\nimport { DiscriminateUnion, GridColumnWithId, Kinded, nonKindGridColumnKeys } from \"src/components/Table/types\";\n\n/**\n * Allows a caller to ask for the currently shown rows, given the current sorting/filtering.\n *\n * We will probably end up generalizing this into a GridTableApi that exposes more\n * actions i.e. scrolling to a row and selection state.\n */\nexport interface GridRowLookup<R extends Kinded> {\n /** Returns both the immediate next/prev rows, as well as `[kind].next/prev` values, ignoring headers. */\n lookup(\n row: GridDataRow<R>,\n additionalFilter?: (row: GridDataRow<R>) => boolean,\n ): NextPrev<R> & {\n [P in R[\"kind\"]]: NextPrev<DiscriminateUnion<R, \"kind\", P>>;\n };\n\n /** Returns the list of currently filtered/sorted rows, without headers. */\n currentList(): readonly GridDataRow<R>[];\n\n /**\n * Scroll's to the row with the given kind + id. Requires using `as=virtual`.\n * Will skip re-scrolling to a row if it's already visible.\n */\n scrollTo(kind: R[\"kind\"], id: string): void;\n}\n\ninterface NextPrev<R extends Kinded> {\n next: GridDataRow<R> | undefined;\n prev: GridDataRow<R> | undefined;\n}\n\nexport function createRowLookup<R extends Kinded>(\n api: GridTableApiImpl<R>,\n virtuosoRef: MutableRefObject<VirtuosoHandle | null>,\n virtuosoRangeRef: MutableRefObject<ListRange | null>,\n): GridRowLookup<R> {\n return {\n scrollTo(kind, id) {\n if (virtuosoRef.current === null) {\n // In theory we could support as=div and as=table by finding the DOM\n // element and calling .scrollIntoView, just not doing that yet.\n throw new Error(\"scrollTo is only supported for as=virtual\");\n }\n\n const index = api.tableState.visibleRows.findIndex((r) => r && r.kind === kind && r.row.id === id);\n\n if (shouldSkipScrollTo(index, virtuosoRangeRef)) return;\n\n virtuosoRef.current.scrollToIndex({ index, behavior: \"smooth\" });\n },\n currentList() {\n return api.tableState.visibleRows.map((rs) => rs.row);\n },\n lookup(row, additionalFilter = () => true) {\n const rows = this.currentList().filter(additionalFilter);\n const columns = api.tableState.visibleColumns;\n // Ensure we have `result.kind = {}` for each kind\n const result: any = Object.fromEntries(getKinds(columns).map((kind) => [kind, {}]));\n // This is an admittedly cute/fancy scan, instead of just `rows.findIndex`, but\n // we do it this way so that we can do kind-aware prev/next detection.\n let key: \"prev\" | \"next\" = \"prev\";\n for (let i = 0; i < rows.length; i++) {\n const each = rows[i];\n // Flip from prev to next when we find it\n if (each.kind === row.kind && each.id === row.id) {\n key = \"next\";\n } else {\n if (key === \"prev\") {\n // prev always overwrites what was there before\n result[key] = each;\n result[each.kind][key] = each;\n } else {\n // next only writes first seen\n result[key] ??= each;\n result[each.kind][key] ??= each;\n }\n }\n }\n return result;\n },\n };\n}\n\nexport function getKinds<R extends Kinded>(columns: GridColumnWithId<R>[]): R[] {\n return Object.keys(columns.find((c) => !c.isAction) || {}).filter(\n (key) => !nonKindGridColumnKeys.includes(key),\n ) as any;\n}\n\n/** Optionally takes into consideration if a row is already in view before attempting to scroll to it. */\nexport function shouldSkipScrollTo(index: number, virtuosoRangeRef: MutableRefObject<ListRange | null>) {\n if (!virtuosoRangeRef.current) return false;\n\n const isAlreadyInView =\n // Add 1 on each end to account for \"overscan\" where the next out of view row is usually already rendered. This isn't a perfect solution,\n // but our current \"overscan\" is only set to 50px, so it should be close enough and the library recommended alternative of adding an\n // intersection observer to each row seems like a not worth it performance hit (https://github.com/petyosi/react-virtuoso/issues/118)\n index >= virtuosoRangeRef.current.startIndex - 1 && index <= virtuosoRangeRef.current.endIndex + 1;\n\n return isAlreadyInView;\n}\n","import { GridDataRow } from \"src/components/Table/components/Row\";\n\n/**\n * A helper for making `Row` type aliases of simple/flat tables that are just header + data.\n *\n * Unlike `SimpleHeaderAndDataOf`, we keep `T` in a separate `data`, which is useful\n * when rows are mobx proxies and we need proxy accesses to happen within the column\n * rendering.\n */\nexport type SimpleHeaderAndData<T> =\n | { kind: \"header\" }\n // We put `id` here so that GridColumn can match against `extends { data, id }`,\n // kinda looks like we should combine Row and GridDataRow, i.e. Rows always have ids,\n // they already have kinds, and need to have ids when passed to rows anyway...\n | { kind: \"data\"; data: T; id: string };\n\n/** A const for a marker header row. */\nexport const simpleHeader = { kind: \"header\" as const, id: \"header\", data: undefined };\nexport const simpleExpandableHeader = { kind: \"expandableHeader\" as const, id: \"expandableHeader\", data: undefined };\n\n/** Like `simpleRows` but for `SimpleHeaderAndData`. */\nexport function simpleDataRows<R extends SimpleHeaderAndData<D>, D>(\n data: Array<D & { id: string }> | undefined = [],\n): GridDataRow<R>[] {\n // @ts-ignore Not sure why this doesn't type-check, something esoteric with the DiscriminateUnion type\n return [simpleHeader, ...data.map((data) => ({ kind: \"data\" as const, data, id: data.id }))];\n}\n","import { ReactNode, useContext, useState } from \"react\";\nimport { Icon } from \"src/components/Icon\";\nimport { GridColumnWithId, Kinded, RenderAs } from \"src/components/Table/types\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport { zIndices } from \"src/components/Table/utils/utils\";\nimport { Css } from \"src/Css\";\nimport { useComputed, useHover } from \"src/hooks\";\nimport { isFunction } from \"src/utils\";\nimport { Loader } from \"../../Loader\";\n\ninterface ExpandableHeaderProps<R extends Kinded> {\n title: string;\n column: GridColumnWithId<R>;\n minStickyLeftOffset: number;\n as: RenderAs;\n tooltipEl?: ReactNode;\n}\n\nexport function ExpandableHeader<R extends Kinded>(props: ExpandableHeaderProps<R>) {\n const { title, column, minStickyLeftOffset, as, tooltipEl } = props;\n const { tableState } = useContext(TableStateContext);\n const expandedColumnIds = useComputed(() => tableState.expandedColumnIds, [tableState]);\n const isExpanded = expandedColumnIds.includes(column.id);\n const [isLoading, setIsLoading] = useState(false);\n // Do not apply sticky styles when rendering as table. Currently the table does not properly respect column widths, causing the sticky offsets to be incorrect\n const applyStickyStyles = isExpanded && as !== \"table\";\n const { hoverProps, isHovered } = useHover({});\n\n return (\n <button\n {...hoverProps}\n css={Css.df.xsMd.aic.jcsb.gap2.px1.hPx(32).mxPx(-8).w(\"calc(100% + 16px)\").br4.blue700.if(isHovered).bgGray100.$}\n onClick={async () => {\n if (isFunction(column.expandColumns)) {\n setIsLoading(true);\n await tableState.loadExpandedColumns(column.id);\n setIsLoading(false);\n }\n // manually calling this as loadExpandedColumns does not toggle\n tableState.toggleExpandedColumn(column.id);\n }}\n data-testid=\"expandableColumn\"\n >\n <span\n css={\n Css.df.aic\n .if(applyStickyStyles)\n .sticky.leftPx(minStickyLeftOffset + 12)\n .pr2.mr2.bgWhite.z(zIndices.expandableHeaderTitle)\n .if(isHovered).bgGray100.$\n }\n >\n <span css={Css.tal.lineClamp2.$}>{title}</span>\n {tooltipEl}\n </span>\n\n <span css={Css.if(applyStickyStyles).sticky.rightPx(12).z(zIndices.expandableHeaderIcon).$}>\n {isLoading ? <Loader size=\"xs\" /> : <Icon icon={isExpanded ? \"chevronLeft\" : \"chevronRight\"} inc={2} />}\n </span>\n </button>\n );\n}\n","import { Css, Palette } from \"src/Css\";\n\ninterface LoaderProps {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n contrast?: boolean;\n}\n\nexport function Loader({ size = \"lg\", contrast = false }: LoaderProps) {\n const [dimensions, borderSize] = sizeToPixels[size];\n const [bgColor, spinnerColor] = contrast ? [Palette.Gray600, Palette.Gray200] : [Palette.White, Palette.Blue700];\n\n return (\n <div\n aria-label=\"Loading\"\n css={\n Css.br100.ba\n .hPx(dimensions)\n .wPx(dimensions)\n .bc(bgColor)\n .bw(`${borderSize}px`)\n .add(\"borderTopColor\", spinnerColor)\n .add(\"textIndent\", \"-999px\")\n .add(\"animationName\", \"spin\")\n .add(\"animationDuration\", \"800ms\")\n .add(\"animationIterationCount\", \"infinite\")\n .add(\"animationTimingFunction\", \"linear\")\n .add(\"transform\", \"translateZ(0)\").$\n }\n />\n );\n}\n\ntype LoaderSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\nconst sizeToPixels: Record<LoaderSize, [number, number]> = {\n xs: [16, 2],\n sm: [32, 4],\n md: [64, 8],\n lg: [96, 12],\n};\n","import { ReactNode } from \"react\";\nimport { Icon } from \"src/components/Icon\";\nimport { GridCellContent } from \"src/components/Table/components/cell\";\nimport { ExpandableHeader } from \"src/components/Table/components/ExpandableHeader\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { SortHeader } from \"src/components/Table/components/SortHeader\";\nimport { GridRowApi } from \"src/components/Table/GridTableApi\";\nimport { GridStyle } from \"src/components/Table/TableStyles\";\nimport { GridCellAlignment, GridColumnWithId, Kinded, RenderAs } from \"src/components/Table/types\";\nimport { Css, Palette, Properties } from \"src/Css\";\nimport { getButtonOrLink } from \"src/utils/getInteractiveElement\";\n\n/** If a column def return just string text for a given row, apply some default styling. */\nexport function toContent(\n maybeContent: ReactNode | GridCellContent,\n isHeader: boolean,\n canSortColumn: boolean,\n isClientSideSorting: boolean,\n style: GridStyle,\n as: RenderAs,\n alignment: GridCellAlignment,\n column: GridColumnWithId<any>,\n isExpandableHeader: boolean,\n isExpandable: boolean,\n minStickyLeftOffset: number,\n isKeptSelectedRow: boolean,\n): ReactNode {\n // Rows within the kept selection group cannot be collapsed\n if (isKeptSelectedRow && column.id === \"beamCollapseColumn\") {\n return <></>;\n }\n\n let content = isGridCellContent(maybeContent) ? maybeContent.content : maybeContent;\n if (typeof content === \"function\") {\n // Actually create the JSX by calling `content()` here (which should be as late as\n // possible, i.e. only for visible rows if we're in a virtual table).\n content = content();\n } else if (as === \"virtual\" && canSortColumn && isClientSideSorting && isJSX(content)) {\n // When using client-side sorting, we call `applyRowFn` not only during rendering, but\n // up-front against all rows (for the currently sorted column) to determine their\n // sort values.\n //\n // Pedantically this means that any table using client-side sorting should not\n // build JSX directly in its GridColumn functions, but this overhead is especially\n // noticeable for large/virtualized tables, so we only enforce using functions\n // for those tables.\n throw new Error(\n \"GridTables with as=virtual & sortable columns should use functions that return JSX, instead of JSX\",\n );\n }\n const tooltip = isGridCellContent(maybeContent) ? maybeContent.tooltip : undefined;\n const tooltipEl = tooltip ? (\n <span css={Css.fs0.mlPx(4).$}>\n <Icon icon=\"infoCircle\" tooltip={tooltip} inc={2} color={Palette.Gray600} />\n </span>\n ) : null;\n\n content =\n isGridCellContent(maybeContent) && !!maybeContent.onClick\n ? getButtonOrLink(content, maybeContent.onClick, {\n css: Css.maxw100.blue700.ta(\"inherit\").if(style?.presentationSettings?.wrap === false).truncate.$,\n })\n : content;\n\n if (content && typeof content === \"string\" && isHeader && canSortColumn) {\n return (\n <SortHeader\n content={content}\n iconOnLeft={alignment === \"right\"}\n sortKey={column.serverSideSortKey ?? column.id}\n tooltipEl={tooltipEl}\n />\n );\n } else if (content && typeof content === \"string\" && isExpandableHeader && isExpandable) {\n return (\n <ExpandableHeader\n title={content}\n column={column}\n minStickyLeftOffset={minStickyLeftOffset}\n as={as}\n tooltipEl={tooltipEl}\n />\n );\n } else if (content && typeof content === \"string\" && isExpandableHeader) {\n return (\n <>\n <span css={Css.lineClamp2.$}>{content}</span>\n {tooltipEl}\n </>\n );\n } else if (!isContentEmpty(content) && isHeader && typeof content === \"string\") {\n return (\n <>\n <span css={Css.lineClamp2.$} title={content}>\n {content}\n </span>\n {tooltipEl}\n </>\n );\n } else if (!isHeader && content && style?.presentationSettings?.wrap === false && typeof content === \"string\") {\n // In order to truncate the text properly, then we need to wrap it in another element\n // as our cell element is a flex container, which don't allow for applying truncation styles directly on it.\n return (\n <>\n <span css={Css.truncate.mw0.$} title={content}>\n {content}\n </span>\n {tooltipEl}\n </>\n );\n } else if (!isHeader && !isExpandableHeader && style.emptyCell && isContentEmpty(content)) {\n // If the content is empty and the user specified an `emptyCell` node, return that.\n return style.emptyCell;\n }\n return (\n <>\n {content}\n {tooltipEl}\n </>\n );\n}\n\nexport function isGridCellContent(content: ReactNode | GridCellContent): content is GridCellContent {\n return typeof content === \"object\" && !!content && \"content\" in content;\n}\n\nconst emptyValues = [\"\", null, undefined] as any[];\n\nfunction isContentEmpty(content: ReactNode): boolean {\n return emptyValues.includes(content);\n}\n\nexport type DragData<R extends Kinded> = {\n rowRenderRef: React.RefObject<HTMLTableRowElement>;\n onDragStart?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDragEnd?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDrop?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDragEnter?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n onDragOver?: (row: GridDataRow<R>, event: React.DragEvent<HTMLElement>) => void;\n};\n\n/** Return the content for a given column def applied to a given row. */\nexport function applyRowFn<R extends Kinded>(\n column: GridColumnWithId<R>,\n row: GridDataRow<R>,\n api: GridRowApi<R>,\n level: number,\n expanded: boolean,\n dragData?: DragData<R>,\n): ReactNode | GridCellContent {\n // Usually this is a function to apply against the row, but sometimes it's a hard-coded value, i.e. for headers\n const maybeContent = column[row.kind];\n if (typeof maybeContent === \"function\") {\n // Auto-destructure data\n return (maybeContent as Function)((row as any)[\"data\"], { row: row as any, api, level, expanded, dragData });\n } else {\n return maybeContent;\n }\n}\n\nexport const ASC = \"ASC\" as const;\nexport const DESC = \"DESC\" as const;\nexport const emptyCell: GridCellContent = { content: () => <></>, value: \"\" };\n\nexport function getFirstOrLastCellCss<R extends Kinded>(\n style: GridStyle,\n columnIndex: number,\n columns: GridColumnWithId<R>[],\n): Properties {\n return {\n ...(columnIndex === 0 ? style.firstCellCss : {}),\n ...(columnIndex === columns.length - 1 ? style.lastCellCss : {}),\n };\n}\n\n/** A heuristic to detect the result of `React.createElement` / i.e. JSX. */\nexport function isJSX(content: any): boolean {\n return typeof content === \"object\" && content && \"type\" in content && \"props\" in content;\n}\n\nconst alignmentToJustify: Record<GridCellAlignment, Properties[\"justifyContent\"]> = {\n left: \"flex-start\",\n center: \"center\",\n right: \"flex-end\",\n};\nconst alignmentToTextAlign: Record<GridCellAlignment, Properties[\"textAlign\"]> = {\n left: \"left\",\n center: \"center\",\n right: \"right\",\n};\n\nexport function getAlignment(\n column: GridColumnWithId<any>,\n maybeContent: ReactNode | GridCellContent,\n): GridCellAlignment {\n return (isGridCellContent(maybeContent) && maybeContent.alignment) || column.align || \"left\";\n}\n\n// For alignment, use: 1) cell def, else 2) column def, else 3) left.\nexport function getJustification(\n column: GridColumnWithId<any>,\n maybeContent: ReactNode | GridCellContent,\n as: RenderAs,\n alignment: GridCellAlignment,\n) {\n // Always apply text alignment.\n const textAlign = Css.add(\"textAlign\", alignmentToTextAlign[alignment]).$;\n if (as === \"table\") {\n return textAlign;\n }\n return { ...Css.jc(alignmentToJustify[alignment]).$, ...textAlign };\n}\n\n/** Look at a row and get its filter value. */\nfunction filterValue(value: ReactNode | GridCellContent): any {\n let maybeFn: any = value;\n if (value && typeof value === \"object\") {\n if (\"value\" in value) {\n maybeFn = value.value;\n } else if (\"content\" in value) {\n maybeFn = value.content;\n }\n }\n // Watch for functions that need to read from a potentially-changing proxy\n if (maybeFn instanceof Function) {\n return maybeFn();\n }\n return maybeFn;\n}\n\nexport function maybeApplyFunction<T>(\n row: T,\n maybeFn: Properties | ((row: T) => Properties) | undefined,\n): Properties | undefined {\n return typeof maybeFn === \"function\" ? maybeFn(row) : maybeFn;\n}\n\nexport function matchesFilter(maybeContent: ReactNode | GridCellContent, filter: string): boolean {\n const value = filterValue(maybeContent);\n if (typeof value === \"string\") {\n return value.toLowerCase().includes(filter.toLowerCase());\n } else if (typeof value === \"number\") {\n return Number(filter) === value;\n }\n return false;\n}\n\nexport const HEADER = \"header\";\nexport const TOTALS = \"totals\";\n/** Tables expandable columns get an extra header. */\nexport const EXPANDABLE_HEADER = \"expandableHeader\";\nexport const KEPT_GROUP = \"keptGroup\";\nexport const reservedRowKinds = [HEADER, TOTALS, EXPANDABLE_HEADER, KEPT_GROUP];\n\nexport const zIndices = {\n stickyHeader: 4,\n stickyColumns: 3,\n expandableHeaderTitle: 2,\n expandableHeaderIcon: 1,\n};\n\n/** Loads an array from sessionStorage, if it exists, or `undefined`. */\nexport function loadArrayOrUndefined(key: string) {\n const ids = sessionStorage.getItem(key);\n return ids ? JSON.parse(ids) : undefined;\n}\n\nexport function insertAtIndex<T>(array: Array<T>, element: T, index: number): Array<T> {\n return [...array.slice(0, index), element, ...array.slice(index, array.length)];\n}\n\nexport function isCursorBelowMidpoint(target: HTMLElement, clientY: number) {\n const style = window.getComputedStyle(target);\n const rect = target.getBoundingClientRect();\n\n const pt = parseFloat(style.getPropertyValue(\"padding-top\"));\n const pb = parseFloat(style.getPropertyValue(\"padding-bottom\"));\n\n return clientY > rect.top + pt + (rect.height - pb) / 2;\n}\n\nexport function recursivelyGetContainingRow<R extends Kinded>(\n rowId: string,\n rowArray: GridDataRow<R>[],\n parent?: GridDataRow<R>,\n): { array: GridDataRow<R>[]; parent: GridDataRow<R> | undefined } | undefined {\n if (rowArray.some((row) => row.id === rowId)) {\n return { array: rowArray, parent };\n }\n\n for (let i = 0; i < rowArray.length; i++) {\n if (!rowArray[i].children) {\n continue;\n }\n\n const result = recursivelyGetContainingRow(rowId, rowArray[i].children!, rowArray[i]);\n if (result) {\n return result;\n }\n }\n\n return undefined;\n}\n\nexport function getTableRefWidthStyles(isVirtual: boolean) {\n // If virtualized take some pixels off the width to accommodate when virtuoso's scrollbar is introduced.\n // Otherwise a horizontal scrollbar will _always_ appear once the vertical scrollbar is needed\n return Css.w100.if(isVirtual).w(\"calc(100% - 20px)\").$;\n}\n","import { ReactNode } from \"react\";\nimport { GridCellContent } from \"src/components/Table/components/cell\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { GridColumnWithId, Kinded, Pin } from \"src/components/Table/types\";\nimport { SortOn, SortState } from \"src/components/Table/utils/TableState\";\nimport { applyRowFn } from \"src/components/Table/utils/utils\";\n\n// Returns a shallow copy of the `rows` parameter sorted based on `sortState`\n// We really only use this for tests; in production the RowState.visibleSortedChildren uses the sortFn\nexport function sortRows<R extends Kinded>(\n columns: GridColumnWithId<R>[],\n rows: GridDataRow<R>[],\n sortState: SortState,\n caseSensitive: boolean,\n): GridDataRow<R>[] {\n const fn = sortFn(columns, sortState, caseSensitive);\n // Sort this level first\n const sorted = [...rows].sort(fn);\n // Recursively sort child rows\n sorted.forEach((row, i) => {\n if (row.children) {\n sorted[i].children = sortRows(columns, row.children, sortState, caseSensitive);\n }\n });\n return sorted;\n}\n\n/** Creates a comparator for two GridDataRows based on the current sortState. */\nexport function sortFn<R extends Kinded>(\n columns: GridColumnWithId<R>[],\n sortState: SortState,\n caseSensitive: boolean,\n): (a: GridDataRow<R>, b: GridDataRow<R>) => number {\n // When client-side sort, the sort value is the column index\n const { current, persistent } = sortState ?? {};\n const { columnId, direction } = current ?? {};\n const { columnId: persistentSortColumnId, direction: persistentSortDirection } = persistent ?? {};\n\n const column = columns.find((c) => c.id! === columnId);\n const invert = direction === \"DESC\";\n const primaryInvert = persistentSortDirection === \"DESC\";\n const primaryColumn = persistentSortColumnId && columns.find((c) => c.id! === persistentSortColumnId);\n\n return (a, b) => {\n if (a.pin || b.pin) {\n // If both rows are pinned, we don't sort within them, because by pinning the page is taking\n // explicit ownership over the order of the rows (and we also don't support \"levels of pins\",\n // i.e. for change events putting \"just added\" rows `pin: last` and the \"add new\" row `pin: lastest`).\n const aPin = getPin(a.pin);\n const bPin = getPin(b.pin);\n const ap = aPin === \"first\" ? -1 : aPin === \"last\" ? 1 : 0;\n const bp = bPin === \"first\" ? -1 : bPin === \"last\" ? 1 : 0;\n return ap === bp ? 0 : ap < bp ? -1 : 1;\n } else if (primaryColumn) {\n // When primary key exist sort that priority first\n const primaryCompare = compare(primaryColumn, a, b, primaryInvert, caseSensitive);\n // if both rows are not primary sort equivalent\n if (primaryCompare !== 0) return primaryCompare;\n // Fall through to the secondary sort\n }\n return column ? compare(column, a, b, invert, caseSensitive) : 0;\n };\n}\n\nfunction getPin(pin: string | Pin | undefined) {\n return typeof pin === \"string\" ? pin : pin?.at;\n}\n\nfunction compare<R extends Kinded>(\n column: GridColumnWithId<R>,\n a: GridDataRow<R>,\n b: GridDataRow<R>,\n invert: boolean,\n caseSensitive: boolean,\n) {\n const v1 = sortValue(applyRowFn(column, a, {} as any, 0, false), caseSensitive);\n const v2 = sortValue(applyRowFn(column, b, {} as any, 0, false), caseSensitive);\n const v1e = v1 === null || v1 === undefined;\n const v2e = v2 === null || v2 === undefined;\n if ((v1e && v2e) || v1 === v2) {\n return 0;\n } else if (v1e || v1 < v2) {\n return invert ? 1 : -1;\n } else if (v2e || v1 > v2) {\n return invert ? -1 : 1;\n } else {\n return 0;\n }\n}\n\n/** Look at a row and get its sort value. */\nfunction sortValue(value: ReactNode | GridCellContent, caseSensitive: boolean): any {\n // Check sortValue and then fallback on value\n let maybeFn: any = value;\n if (value && typeof value === \"object\") {\n // Look for GridCellContent.sortValue, then GridCellContent.value\n if (\"sortValue\" in value) {\n maybeFn = value.sortValue;\n } else if (\"value\" in value) {\n maybeFn = value.value;\n } else if (\"content\" in value) {\n maybeFn = value.content;\n }\n }\n // Watch for functions that need to read from a potentially-changing proxy\n if (maybeFn instanceof Function) {\n maybeFn = maybeFn();\n }\n\n // If it is a string, then always lower case it for comparisons\n return typeof maybeFn === \"string\" && !caseSensitive ? maybeFn.toLowerCase() : maybeFn;\n}\n\nexport function ensureClientSideSortValueIsSortable(\n sortOn: SortOn,\n isHeader: boolean,\n column: GridColumnWithId<any>,\n idx: number,\n maybeContent: ReactNode | GridCellContent,\n): void {\n if (process.env.NODE_ENV !== \"production\" && !isHeader && sortOn === \"client\" && column.clientSideSort !== false) {\n const value = sortValue(maybeContent, false);\n if (!canClientSideSort(value)) {\n const columnIdentifier = !column.id.startsWith(\"beamColumn_\") ? column.id : (column.name ?? idx);\n throw new Error(\n `Column ${columnIdentifier} passed an unsortable value, use GridCellContent or clientSideSort=false`,\n );\n }\n }\n}\n\nfunction canClientSideSort(value: any): boolean {\n const t = typeof value;\n return (\n value === null || t === \"undefined\" || t === \"number\" || t === \"string\" || t === \"boolean\" || value instanceof Date\n );\n}\n","import { GridDataRow } from \"src/components/Table/components/Row\";\n\nexport function visit(rows: GridDataRow<any>[], fn: (row: GridDataRow<any>) => void): void {\n const todo = [...rows];\n while (todo.length > 0) {\n const row = todo.pop()!;\n fn(row);\n if (row.children) {\n todo.push(...row.children);\n }\n }\n}\n","import { makeAutoObservable, observable, reaction } from \"mobx\";\nimport { Kinded } from \"src\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { GridRowApi } from \"src/components/Table/GridTableApi\";\nimport { RowStates } from \"src/components/Table/utils/RowStates\";\nimport { SelectedState } from \"src/components/Table/utils/TableState\";\nimport { applyRowFn, HEADER, KEPT_GROUP, matchesFilter, reservedRowKinds } from \"src/components/Table/utils/utils\";\n\nexport enum DraggedOver {\n None,\n Above, // In this case this means higher on the screen which means a lower y value and a lower row index\n Below, // In this case this means lower on the screen which means a higher y value and a higher row index\n}\n\n/**\n * A reactive/observable state of each GridDataRow's current behavior.\n *\n * We set up the RowStates in a tree, just like GridDataRow, to make business logic\n * that uses parent/children easier to write, i.e. selected-ness and collapsed-ness.\n */\nexport class RowState<R extends Kinded> {\n /** Our row, not actually observed, b/c each `createRows` calc creates unstable rows. */\n private _row!: GridDataRow<R>;\n /** Our data, only ref observed, so we don't crawl into GraphQL fragments. */\n private _data: unknown;\n /** Our children row states, as of the latest `props.rows`, without any filtering applied. */\n children: RowState<R>[] | undefined = undefined;\n /** Whether we are *directly* selected. */\n selected = false;\n /** Whether we are collapsed. */\n collapsed = false;\n /** Whether we are dragged over. */\n isDraggedOver: DraggedOver = DraggedOver.None;\n /**\n * Whether our `row` had been in `props.rows`, but then removed _while being\n * selected_, i.e. potentially by server-side filters.\n *\n * We have had a large foot-gun where users \"select a row\", change the filters,\n * the row disappears (filtered out), and the user clicks \"Go!\", but the table\n * thinks their previously-selected row is gone (b/c it's not in view), and\n * then the row is inappropriately deleted/unassociated/etc. (b/c in the user's\n * head, it is \"still selected\").\n *\n * To avoid this, we by default keep selected rows, as \"kept rows\", to make\n * extra sure the user wants them to go away.\n *\n * Soft-deleted rows are rows that were removed from `props.rows` (i.e. we\n * suspect are just hidden by a changed server-side-filter), and hard-deleted\n * rows are rows the page called `api.deleteRow` and confirmed it should be\n * actively removed.\n */\n removed: false | \"soft\" | \"hard\" = false;\n private isCalculatingDirectMatch = false;\n\n constructor(\n private states: RowStates<R>,\n public parent: RowState<R> | undefined,\n row: GridDataRow<R>,\n ) {\n this.row = row;\n this.selected = !!row.initSelected;\n this.collapsed = states.storage.wasCollapsed(row.id) ?? !!row.initCollapsed;\n makeAutoObservable(\n this,\n // 'as any' because the fields are private so don't show up in the type\n {\n _row: false,\n _data: observable.ref,\n isCalculatingDirectMatch: false,\n } as any,\n { name: `RowState@${row.id}` },\n );\n // Ideally we could hook up this reaction conditionally, but for the header RowState,\n // we're initialized by GridTableApiImpl, before TableState.onRowSelect has a chance\n // to be set to GridTableProps.onRowSelect, so for now just always hook up this reaction.\n reaction(\n () => this.selectedState,\n (state) => {\n const isSelected = state === \"checked\";\n const tableFn = states.table.onRowSelect?.[this.row.kind];\n tableFn && tableFn(this.row.data as any, isSelected, { row, api: states.table.api });\n },\n );\n }\n\n /** Returns a stable-ish row identity that will only change if our `data` changes. */\n get row(): GridDataRow<R> {\n // This is a noop, but makes mobx see `_data` as a dependency\n return Object.assign(this._row, { data: this._data });\n }\n\n /** Accepts a new unstable row, i.e. each `createRows` creates a new row literal. */\n set row(row: GridDataRow<R>) {\n // If `_data` is a stable GraphQL fragment, but row is just a new literal around\n // it, this won't actually cause any reactivity changes. But once _data does change,\n // then anyone watching `.row` will see the new row instance + new data.\n this._row = row;\n this._data = row.data;\n }\n\n /**\n * Whether we match a client-side filter; true if no filter is in place.\n *\n * We should try and keep this based solely on \"does/does not match the filter\",\n * and do any overrides for things like pinning/kept rows/etc. elsewhere.\n */\n get isMatched(): boolean {\n return (\n this.isDirectlyMatched ||\n // A matched parent means show all it's children\n this.hasDirectlyMatchedParent ||\n // An unmatched parent but with matched children means show the parent\n this.hasDirectlyMatchedChildren\n );\n }\n\n /**\n * Whether we are effectively selected, for `GridTableApi.getSelectedRows`.\n *\n * Note that we don't use \"I'm selected || my parent is selected\" logic here, because whether a child is selected\n * is actually based on whether it was _visible at the time the parent was selected_. So, we can't just assume\n * \"a parent being selected means the child is also selected\", and instead parents have to push selected-ness down\n * to their visible children explicitly.\n */\n get isSelected(): boolean {\n // We consider group rows selected if all of their children are selected.\n if (this.isParent) return this.selectedState === \"checked\";\n return this.selected;\n }\n\n /** The UI state for checked/unchecked + \"partially checked\" for parents. */\n get selectedState(): SelectedState {\n // Parent `selectedState` is special b/c it does not directly depend on the parent's own selected-ness,\n // but instead depends on the current visible children. I.e. a parent might be \"selected\", but then the\n // client-side filter changes, a child reappears, and we need to transition to partial-ness.\n // If there are no selectable children, we should return \"checked\" if the parent is selected.\n if (this.isParent && this.hasSelectableChildren) {\n // Use visibleChildren b/c if filters are hiding some of our children, we still want to show fully selected\n const children = this.visibleChildren.filter((c) => c.row.selectable !== false);\n const allChecked = children.every((child) => child.selectedState === \"checked\");\n const allUnchecked = children.every((child) => child.selectedState === \"unchecked\");\n return children.length === 0 ? \"unchecked\" : allChecked ? \"checked\" : allUnchecked ? \"unchecked\" : \"partial\";\n }\n return this.selected ? \"checked\" : \"unchecked\";\n }\n\n /**\n * A special SelectedState that \"sees through\"/ignores inferSelectedState, so the header works.\n *\n * I.e. a row might have `inferSelectedState: false`, so is showing unchecked, but the header\n * wants to show partial-ness whenever any given child is selected.\n */\n get selectedStateForHeader(): SelectedState {\n // If there are no selectable children, we should return \"checked\" if the parent is selected.\n if (this.children && this.hasSelectableChildren) {\n const children = this.visibleChildren.filter((c) => c.row.selectable !== false || c.isParent);\n const allChecked = children.every((child) => child.selectedStateForHeader === \"checked\");\n const allUnchecked = children.every((child) => child.selectedStateForHeader === \"unchecked\");\n // For the header purposes, if this is a selectable-row (i.e. not inferSelectedState) make sure\n // both the row itself & all children are \"all checked\" or \"not all checked\", otherwise consider\n // ourselves partially selected.\n if ((allUnchecked || children.length === 0) && (this.inferSelectedState || !this.selected)) {\n return \"unchecked\";\n } else if (allChecked && (this.inferSelectedState || this.selected)) {\n return \"checked\";\n } else {\n return \"partial\";\n }\n }\n return this.selected ? \"checked\" : \"unchecked\";\n }\n\n /**\n * Called to explicitly select/unselect this row.\n *\n * This could be either because the user clicked directly on us, or because we're a visible\n * child of a selected parent row.\n */\n select(selected: boolean): void {\n if (this.row.selectable !== false) {\n this.selected = selected;\n }\n\n if (this.inferSelectedState) {\n for (const child of this.visibleChildren) {\n child.select(selected);\n }\n }\n }\n\n /** Marks the row as removed from `props.rows`, to potentially become kept. */\n markRemoved(): void {\n // The kept group is never in `props.rows`, so ignore asks to delete it\n if (this.row.kind === KEPT_GROUP) return;\n this.removed = this.selected && this.removed !== \"hard\" ? \"soft\" : \"hard\";\n }\n\n toggleCollapsed(): void {\n this.collapsed = !this.collapsed;\n }\n\n /** Whether this is a selected-but-filtered-out row that we should hoist to the top. */\n get isKept(): boolean {\n // this row is \"kept\" if it is selected, and:\n // - it is not matched (hidden by filter) (being hidden by collapse is okay)\n // - or it has (probably) been server-side filtered\n return (\n this.selected &&\n // Headers, totals, etc., do not need keeping\n !this.isReservedKind &&\n !this.isParent &&\n (!this.isMatched || this.removed === \"soft\")\n );\n }\n\n get isLastKeptRow(): boolean {\n if (!this.isKept) return false;\n const { keptRows } = this.states.table;\n return keptRows[keptRows.length - 1] === this;\n }\n\n get key(): string {\n return `${this.row.kind}-${this.row.id}`;\n }\n\n get kind(): string {\n return this.row.kind;\n }\n\n get isActive(): boolean {\n return this.states.table.activeRowId === `${this.row.kind}_${this.row.id}`;\n }\n\n get level(): number {\n // Make the header level -1, so the top-level rows are level 0\n return !this.parent ? -1 : this.parent.level + 1;\n }\n\n private get inferSelectedState(): boolean {\n return this.row.inferSelectedState !== false;\n }\n\n /** Returns this row and, if we're not collapsed, our children. */\n get selfAndMaybeChildren(): RowState<R>[] {\n // The header always returns all children/top rows, even if collapsed\n if (this.children && (!this.collapsed || this.row.kind === HEADER)) {\n return [this, ...this.visibleSortedChildren.flatMap((c) => c.selfAndMaybeChildren)];\n } else {\n return [this];\n }\n }\n\n private get visibleChildren(): RowState<R>[] {\n // The keptGroup is special and its children are the dynamically kept rows\n if (this.row.kind === KEPT_GROUP) return this.states.keptRows;\n return (\n this.children?.filter(\n (rs) =>\n // Reserved rows are always visible, even though they're not considered matched.\n // ...except for the kept group: its `isMatched` will become true whenever it has\n // any kept row children, as they will cause its hasDirectlyMatchedChildren to be true.\n (rs.isReservedKind && rs.row.kind !== KEPT_GROUP) || rs.isMatched || rs.isPinned,\n ) ?? []\n );\n }\n\n // This is a copy/paste of visibleChildren, but using isDirectlyMatched instead of isMatched\n // to avoid a cycle, i.e.:\n //\n // 1. A parent row evals its own isDirectlyMatched\n // 2. The parent row has a cell that calculates \"sum of visible children\"\n // 3. To know whether the sum cell matches the filter, \"1234\", we need to render the cell\n // 4. If rendering the parent cell called `visibleChildren` directly, that method checks\n // \"is the parent directly matched?\" (so that child of matched parents are always shown),\n // but now we've looped--deciding the content of the parent cell itself requires knowing\n // if the parent cell matched (b/c that controls which children are visible).\n //\n // We side-step this by assuming that the `GridRowApi.getVisibleChildren` can use the\n // slightly-less accurate \"my children are visible if they're directly matched\".\n private get visibleDirectlyMatchedChildren(): RowState<R>[] {\n if (this.row.kind === KEPT_GROUP) return this.states.keptRows;\n return (\n this.children?.filter(\n (rs) =>\n (rs.isReservedKind && rs.row.kind !== KEPT_GROUP) ||\n rs.isDirectlyMatched ||\n rs.hasDirectlyMatchedChildren ||\n rs.isPinned,\n ) ?? []\n );\n }\n\n /** The `visibleChildren`, but with the current sort config applied. */\n private get visibleSortedChildren(): RowState<R>[] {\n let rows = this.visibleChildren;\n const { sortFn } = this.states.table;\n // We need to make a copy for mobx to see the sort as a change, and also to not mutate\n // the original/unsorted array if we need to revert to the original sort order.\n if (sortFn) rows = [...rows].sort(sortFn);\n return rows;\n }\n\n private get hasSelectableChildren(): boolean {\n return this.visibleChildren.some((c) => c.row.selectable !== false);\n }\n\n /**\n * Returns whether this row should act like a parent.\n *\n * This means \"has children\" and \"does not have inferSelectedState: false\"\n * set. I.e. `inferSelectedState: false` allows a parent with children to\n * still act as its own selectable identity.\n *\n * We also check `children.length > 0`, because sometimes pages will calc a\n * row's children as `children = someList.map(...)`, and if the list is empty,\n * they want the row to be selectable.\n */\n private get isParent(): boolean {\n // Check for KEPT_GROUP b/c it has `this.children = []` but we synthesize its children in `visibleChildren`\n return !!this.children && (this.children.length > 0 || this.row.id === KEPT_GROUP) && this.inferSelectedState;\n }\n\n private get isPinned(): boolean {\n return typeof this.row.pin === \"string\" || (!!this.row.pin && this.row.pin.filter !== true);\n }\n\n // mobx will cache this getter for us\n public get api(): GridRowApi<R> {\n const rs = this;\n // Copy the GridTableApi + the getVisibleChildren GridRowApi method\n return {\n ...this.states.table.api,\n // The caller can invoke this observable without their own useComputed,\n // b/c we wrap all rows in an observer\n getVisibleChildren(kind?: R[\"kind\"]): GridDataRow<R>[] {\n // Avoid infinite loop if a cell asks for getVisibleChildren while calculating isMatched\n const children = rs.isCalculatingDirectMatch\n ? rs.visibleDirectlyMatchedChildren.map((cs) => cs.row)\n : rs.visibleChildren.map((cs) => cs.row);\n return !kind ? children : children.filter((r) => r.kind === kind);\n },\n getSelectedChildren(kind?: R[\"kind\"]): GridDataRow<R>[] {\n const children = (rs.children ?? []).filter((cs) => cs.isSelected).map((cs) => cs.row);\n return !kind ? children : children.filter((r) => r.kind === kind);\n },\n } as any;\n }\n\n public get isReservedKind(): boolean {\n return reservedRowKinds.includes(this.row.kind);\n }\n\n /** A dedicated method to \"looking down\" recursively, to avoid loops in `isMatched`. */\n private get hasDirectlyMatchedChildren(): boolean {\n // The keptGroup is special and its children are the dynamically kept rows\n if (this.row.kind === KEPT_GROUP) return this.states.keptRows.length > 0;\n return !!this.children && this.children.some((c) => c.isDirectlyMatched || c.hasDirectlyMatchedChildren);\n }\n\n /** A dedicated method to \"looking up\" recursively, to avoid loops in `isMatched`. */\n private get hasDirectlyMatchedParent(): boolean {\n return !!this.parent && (this.parent.isDirectlyMatched || this.parent.hasDirectlyMatchedParent);\n }\n\n private get isDirectlyMatched(): boolean {\n this.isCalculatingDirectMatch = true;\n try {\n // Reserved rows like the header can never be directly matched, and treating them\n // as matched currently throws off the header's select all/etc. behavior\n if (this.isReservedKind) return false;\n // Ignore hard-deleted rows, i.e. from `api.deleteRows`; in theory any hard-deleted\n // rows should be removed from `this.children` anyway, by a change to `props.rows`,\n // but just in case the user calls _only_ `api.deleteRows`, and expects the row to\n // go away, go ahead and filter them out here.\n if (this.removed === \"hard\") return false;\n // Reacts to either search state or visibleColumns state changing\n const { visibleColumns, search } = this.states.table;\n return search.every((term) =>\n visibleColumns\n .map((c) => applyRowFn(c, this.row, this.api, 0, false))\n .some((maybeContent) => matchesFilter(maybeContent, term)),\n );\n } finally {\n this.isCalculatingDirectMatch = false;\n }\n }\n\n /** Used by node when doing `console.log(rs)`. */\n [Symbol.for(\"nodejs.util.inspect.custom\")](): string {\n return `RowState@${this.row.id}`;\n }\n}\n","import { usePresentationContext } from \"src/components/PresentationContext\";\n\nexport function getLabelSuffix(required: boolean | undefined): string | undefined {\n // We promise to always call `getLabelSuffix` deterministically\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { fieldProps } = usePresentationContext();\n if (required === true) {\n return fieldProps?.labelSuffix?.required;\n } else if (required === false) {\n return fieldProps?.labelSuffix?.optional;\n } else {\n return undefined;\n }\n}\n","import { VisuallyHidden } from \"react-aria\";\nimport { Icon } from \"src/components\";\nimport { Css } from \"src/Css\";\n\ninterface ErrorMessageProps {\n /** The dom id for `aria-errormessage` to point to us. */\n id?: string;\n errorMsg: string;\n contrast?: boolean;\n hidden?: boolean;\n}\n/**\n * A helper component for consistently showing error messages across form fields.\n *\n * Not currently exported as part of our public API.\n */\nexport function ErrorMessage(props: ErrorMessageProps) {\n const { id, errorMsg, contrast = false, hidden = false, ...others } = props;\n const errorEl = errorMsg ? (\n <div css={Css.red600.sm.df.mtPx(4).if(contrast).red400.$}>\n <span css={Css.fs0.$}>\n <Icon icon=\"error\" />\n </span>\n {/* Put `...others` on the span b/c it's probably the data-testid. */}\n <span id={id} css={Css.ml1.mtPx(2).$} {...others}>\n {errorMsg}\n </span>\n </div>\n ) : (\n <></>\n );\n return hidden ? <VisuallyHidden>{errorEl}</VisuallyHidden> : errorEl;\n}\n","export function getFieldWidth(fullWidth: boolean | undefined) {\n return fullWidth ? \"100%\" : \"550px\";\n}\n","import { Node } from \"@react-types/shared\";\nimport { useRef } from \"react\";\nimport { useHover, useMenuItem } from \"react-aria\";\nimport { useHistory } from \"react-router\";\nimport { Link } from \"react-router-dom\";\nimport { TreeState } from \"react-stately\";\nimport { Avatar } from \"src/components/Avatar\";\nimport { IconMenuItemType, ImageMenuItemType, MenuItem } from \"src/components/ButtonMenu\";\nimport { Icon } from \"src/components/Icon\";\nimport { maybeTooltip, resolveTooltip } from \"src/components/Tooltip\";\nimport { Css, Palette } from \"src/Css\";\nimport { isAbsoluteUrl, useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface MenuItemProps {\n item: Node<MenuItem>;\n state: TreeState<MenuItem>;\n onClose: VoidFunction;\n contrast: boolean;\n}\n\nexport function MenuItemImpl(props: MenuItemProps) {\n const { item, state, onClose, contrast } = props;\n const menuItem = item.value;\n if (!menuItem) {\n return null;\n }\n\n const { disabled, onClick, label, destructive } = menuItem;\n const isDisabled = Boolean(disabled);\n const isSelected = state.selectionManager.selectedKeys.has(label);\n const isFocused = state.selectionManager.focusedKey === item.key;\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const ref = useRef<HTMLLIElement>(null);\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const history = useHistory();\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { hoverProps, isHovered } = useHover({});\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const tid = useTestIds(props);\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { menuItemProps } = useMenuItem(\n {\n key: item.key,\n isDisabled,\n onAction: () => {\n if (typeof onClick === \"string\") {\n // if it is an absolute URL, then open in new window. Assuming this should leave the App\n if (isAbsoluteUrl(onClick)) {\n // We want to do `window.open(url, \"_blank\", \"noopener,noreferrer\")` but that Safari treats\n // that as \"open in new window\", this happens when safari has the \"Open pages in tabs instead of windows\" set to \"Automatically\" (which is the default)\n // see https://support.apple.com/guide/safari/tabs-ibrw1045/mac (Open pages in tabs instead of windows) for other behaviors\n //\n // So we do this instead, and at least null out the opener\n // as a way to manually mimic the `\"noopener\"` flag.\n (window.open(onClick, \"_blank\") as Window).opener = null;\n return;\n }\n\n // Otherwise, it is a relative URL and we'll assume it is still within the App.\n history.push(onClick);\n return;\n }\n onClick && onClick();\n },\n onClose,\n },\n state,\n ref,\n );\n\n return (\n <li\n {...menuItemProps}\n {...hoverProps}\n ref={ref}\n css={{\n ...Css.df.aic.py1.px2.cursorPointer.outline0.mh(\"42px\").sm.$,\n ...(menuItem.hasDivider ? Css.bb.bcGray700.$ : {}),\n ...(!isDisabled && isHovered ? (contrast ? Css.bgGray800.$ : Css.bgGray100.$) : {}),\n ...(isFocused ? Css.add(\"boxShadow\", `inset 0 0 0 1px ${Palette.Blue700}`).$ : {}),\n ...(isDisabled ? Css.gray500.cursorNotAllowed.$ : {}),\n ...(destructive ? Css.red600.$ : {}),\n ...(isSelected ? Css.fw5.$ : {}),\n }}\n {...tid[defaultTestId(menuItem.label)]}\n >\n {maybeTooltip({\n title: resolveTooltip(disabled),\n placement: \"right\",\n children: renderMenuItem(menuItem, isSelected, isDisabled, contrast),\n })}\n </li>\n );\n}\n\nfunction renderMenuItem(menuItem: MenuItem, isSelected: boolean, isDisabled: boolean, contrast: boolean) {\n return (\n <div css={Css.df.w100.aic.jcsb.gap2.$}>\n <div css={Css.df.aic.$}>\n {maybeWrapInLink(\n menuItem.onClick,\n isIconMenuItem(menuItem) ? (\n <IconMenuItem {...menuItem} />\n ) : isImageMenuItem(menuItem) ? (\n <ImageMenuItem {...menuItem} />\n ) : (\n menuItem.label\n ),\n isDisabled,\n )}\n </div>\n {isSelected && (\n <Icon\n icon=\"check\"\n color={\n !contrast ? (isDisabled ? Palette.Gray400 : Palette.Blue700) : isDisabled ? Palette.Gray500 : Palette.White\n }\n />\n )}\n </div>\n );\n}\n\nfunction ImageMenuItem(item: ImageMenuItemType) {\n const { src, size = 24, label, isAvatar = false } = item;\n return (\n <>\n <span css={Css.fs0.mr2.$}>\n {isAvatar ? (\n <Avatar src={src} name={label} size={size === 24 ? \"sm\" : \"lg\"} />\n ) : (\n <img width={size} src={src} css={Css.br4.$} alt={label} />\n )}\n </span>\n {label}\n </>\n );\n}\n\nfunction IconMenuItem(item: IconMenuItemType) {\n const { icon, label } = item;\n return (\n <>\n <span css={Css.fs0.mr2.$}>\n <Icon icon={icon} />\n </span>\n {label}\n </>\n );\n}\n\nfunction maybeWrapInLink(\n onClick: MenuItem[\"onClick\"],\n content: JSX.Element | string,\n disabled: boolean | undefined,\n): JSX.Element {\n if (disabled || typeof onClick !== \"string\") {\n return <>{content}</>;\n }\n\n return isAbsoluteUrl(onClick) ? (\n <a href={onClick} target=\"_blank\" rel=\"noopener noreferrer\" className=\"navLink\" css={Css.df.aic.jcsb.w100.$}>\n {content}\n <span css={Css.fs0.ml2.$}>\n <Icon icon=\"linkExternal\" />\n </span>\n </a>\n ) : (\n <Link className=\"navLink\" to={onClick}>\n {content}\n </Link>\n );\n}\n\nfunction isIconMenuItem(item: MenuItem): item is IconMenuItemType {\n return item && typeof item === \"object\" && \"icon\" in item;\n}\n\nfunction isImageMenuItem(item: MenuItem): item is ImageMenuItemType {\n return item && typeof item === \"object\" && \"src\" in item;\n}\n","import { ReactNode, useRef } from \"react\";\nimport { useMenuTrigger } from \"react-aria\";\nimport { useMenuTriggerState } from \"react-stately\";\nimport {\n isIconButton,\n isNavLinkButton,\n isTextButton,\n labelOr,\n OverlayTrigger,\n OverlayTriggerProps,\n} from \"src/components/internal/OverlayTrigger\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { ButtonVariant } from \"./Button\";\nimport { ContextualModal } from \"./internal/ContextualModal\";\n\nexport interface ButtonModalProps\n extends Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\" | \"showActiveBorder\"> {\n content: ReactNode | ((close: () => void) => ReactNode);\n title?: string;\n variant?: ButtonVariant;\n storybookDefaultOpen?: boolean;\n hideEndAdornment?: boolean;\n}\n\nexport function ButtonModal(props: ButtonModalProps) {\n const { storybookDefaultOpen, trigger, disabled, content, title } = props;\n const state = useMenuTriggerState({ isOpen: storybookDefaultOpen });\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { menuTriggerProps } = useMenuTrigger({ isDisabled: !!disabled }, state, buttonRef);\n const tid = useTestIds(\n props,\n isTextButton(trigger)\n ? labelOr(trigger, \"buttonModal\")\n : isNavLinkButton(trigger)\n ? defaultTestId(trigger.navLabel)\n : isIconButton(trigger)\n ? trigger.icon\n : trigger.name,\n );\n\n return (\n <OverlayTrigger {...props} menuTriggerProps={menuTriggerProps} state={state} buttonRef={buttonRef} {...tid}>\n <ContextualModal content={content} title={title} close={state.close} />\n </OverlayTrigger>\n );\n}\n","import { ReactNode } from \"react\";\nimport { FocusScope } from \"react-aria\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\nexport interface ContextualModalProps {\n content: ReactNode | ((close: () => void) => ReactNode);\n title?: string;\n close: () => void;\n}\n\nexport function ContextualModal(props: ContextualModalProps) {\n const { content, title, close } = props;\n const tid = useTestIds(props, \"popup\");\n return (\n <FocusScope restoreFocus autoFocus>\n <div css={Css.p3.df.fdc.gap3.bgWhite.bshModal.br4.maxh(\"inherit\").oa.$} {...tid}>\n {title && (\n <div css={Css.lg.tac.$} {...tid.title}>\n {title}\n </div>\n )}\n <div {...tid.content}>{typeof content === \"function\" ? content(close) : content}</div>\n </div>\n </FocusScope>\n );\n}\n","import { Avatar, AvatarSize } from \"src/components/Avatar/Avatar\";\nimport { ButtonModal } from \"src/components/ButtonModal\";\nimport { Css } from \"src/Css\";\n\nexport interface AvatarGroupProps {\n avatars: { src: string | undefined; name?: string }[];\n size?: AvatarSize;\n}\n\nexport function AvatarGroup(props: AvatarGroupProps) {\n const { avatars, size = \"md\" } = props;\n\n // If there are 8 or fewer avatars, show them all. Otherwise, show the first 7 and a menu with the rest.\n const maxVisibleAvatars = avatars.length <= 8 ? 8 : 7;\n const visibleAvatars = avatars.slice(0, maxVisibleAvatars);\n const menuAvatars = avatars.slice(maxVisibleAvatars);\n\n return (\n <div css={Css.df.aic.gap1.xsSb.$}>\n <div css={Css.df.aic.$}>\n {visibleAvatars.map((avatar, idx) => (\n <div\n key={avatar.src ?? idx}\n css={\n Css.br100.ba.bcWhite\n .add(\"borderWidth\", \"3px\")\n .if(idx > 0)\n .mlPx(-1 * sizeToOverlap[size]).$\n }\n >\n <Avatar src={avatar.src} name={avatar.name} size={size} />\n </div>\n ))}\n </div>\n {menuAvatars.length > 0 && (\n <ButtonModal\n trigger={{ label: `+ ${menuAvatars.length} more`, variant: \"text\" }}\n hideEndAdornment\n content={\n <div css={Css.df.fdc.gap1.mPx(-12).$}>\n {menuAvatars.map((a, idx) => (\n <Avatar key={a.src ?? idx} src={a.src} name={a.name} showName size=\"md\" />\n ))}\n </div>\n }\n />\n )}\n </div>\n );\n}\n\nconst sizeToOverlap: Record<AvatarSize, number> = {\n sm: 9,\n md: 9,\n lg: 15,\n xl: 22,\n};\n","import React, { MutableRefObject } from \"react\";\nimport { DismissButton, OverlayContainer, useOverlay } from \"react-aria\";\n\ninterface PopoverProps extends React.PropsWithChildren<any> {\n triggerRef: MutableRefObject<HTMLElement | null>;\n popoverRef: MutableRefObject<HTMLDivElement | null>;\n positionProps: React.HTMLAttributes<Element>;\n onClose: () => void;\n isOpen: boolean;\n}\n\n/** Popover is used for generating menus and list-boxes */\nexport function Popover(props: PopoverProps) {\n const { triggerRef, popoverRef, positionProps, children, onClose, isOpen, ...others } = props;\n const { overlayProps } = useOverlay(\n {\n onClose,\n isOpen,\n isDismissable: true,\n shouldCloseOnInteractOutside: (e) => {\n // By default when passing `isDismissable: true` then Popover will `stopPropagation` of the PointerDown event, which is used nearly everywhere in React-Aria (like for clicking buttons)\n // We do not want that propagation to be stopped, but we still want the overlay to be dismissable.\n // When providing `isDimissable: true`, then you can also provide this callback function, `shouldCloseOnInteractOutside`\n // By returning `false` in this function it will no longer call `stopPropagation`, but it also will not call `onHide` for us, so we need to call `onClose` ourselves.\n\n // If we clicked the trigger element (or within it), then that will call a `state.toggle` for us.\n // Return early if that happens.\n if (triggerRef.current?.contains(e)) {\n return true;\n }\n // Do not close the Popover if the user is interacting with a tribute menu, dialog or alert on top of it, otherwise close it.\n return !(e.closest(\".tribute-container\") || e.closest(\"[role='dialog']\") || e.closest(\"[role='alert']\"));\n },\n ...others,\n },\n popoverRef,\n );\n\n return (\n <OverlayContainer>\n <div {...{ ...overlayProps, ...positionProps }} ref={popoverRef}>\n {children}\n <DismissButton onDismiss={() => onClose()} />\n </div>\n </OverlayContainer>\n );\n}\n","import { Selection } from \"@react-types/shared\";\nimport React, { Key, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useButton, useComboBox, useFilter, useOverlayPosition } from \"react-aria\";\nimport { Item, useComboBoxState, useMultipleSelectionState } from \"react-stately\";\nimport { resolveTooltip } from \"src/components\";\nimport { Popover } from \"src/components/internal\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { ComboBoxInput } from \"src/inputs/internal/ComboBoxInput\";\nimport { ListBox } from \"src/inputs/internal/ListBox\";\nimport { getFieldWidth } from \"src/inputs/utils\";\nimport { keyToValue, Value, valueToKey } from \"src/inputs/Value\";\nimport { BeamFocusableProps } from \"src/interfaces\";\nimport { useDebounce } from \"use-debounce\";\n\n/** Base props for either `SelectField` or `MultiSelectField`. */\nexport interface ComboBoxBaseProps<O, V extends Value> extends BeamFocusableProps, PresentationFieldProps {\n /** Renders `opt` in the dropdown menu, defaults to the `getOptionLabel` prop. `isUnsetOpt` is only defined for single SelectField */\n getOptionMenuLabel?: (opt: O, isUnsetOpt?: boolean, isAddNewOption?: boolean) => string | ReactNode;\n getOptionValue: (opt: O) => V;\n getOptionLabel: (opt: O) => string;\n /** The current value; it can be `undefined`, even if `V` cannot be. */\n values: V[] | undefined;\n onSelect: (values: V[], opts: O[]) => void;\n multiselect?: boolean;\n disabledOptions?: (V | { value: V; reason: string })[];\n options: OptionsOrLoad<O>;\n /** Whether the field is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n required?: boolean;\n errorMsg?: string;\n helperText?: string | ReactNode;\n /** Allow placing an icon/decoration within the input field. */\n fieldDecoration?: (opt: O) => ReactNode;\n /** Sets the form field label. */\n label: string;\n // Whether the field is readOnly. If a ReactNode, it's treated as a \"readOnly reason\" that's shown in a tooltip.\n readOnly?: boolean | ReactNode;\n onBlur?: () => void;\n onFocus?: () => void;\n sizeToContent?: boolean;\n /**\n * The text to show when nothing is selected, i.e. could be \"All\" for filters.\n *\n * Unlike `unsetLabel`, this does not add an explicit option for the user to select.\n */\n nothingSelectedText?: string;\n /** When set the SelectField is expected to be put on a darker background */\n contrast?: boolean;\n /** Placeholder content */\n placeholder?: string;\n /**\n * If set, prepends an option with an `undefined` value at the top of the list to allow\n * unsetting the field.\n *\n * Unlike `nothingSelectedText`, which provides the label for empty value state, but doesn't\n * add an option for the user to explicitly select the empty state.\n *\n * Only available for Single Select Fields.\n */\n unsetLabel?: string;\n hideErrorMessage?: boolean;\n /* Allows input to wrap to multiple lines */\n multiline?: boolean;\n /* Callback for user searches */\n onSearch?: (search: string) => void;\n /* Only supported on single Select fields */\n onAddNew?: (v: string) => void;\n}\n\n/**\n * Provides a non-native select/dropdown widget that allows the user to type to filter the options.\n *\n * The `O` type is a list of options to show, the `V` is the primitive value of a\n * given `O` (i.e. it's id) that you want to use as the current/selected value.\n *\n * Note that the `V extends Key` constraint come from react-aria,\n * and so we cannot easily change them.\n */\nexport function ComboBoxBase<O, V extends Value>(props: ComboBoxBaseProps<O, V>): JSX.Element {\n const { fieldProps } = usePresentationContext();\n const {\n disabled,\n readOnly,\n onSelect,\n options: propOptions,\n multiselect = false,\n values: propValues,\n nothingSelectedText = \"\",\n contrast,\n disabledOptions,\n borderless,\n unsetLabel,\n inputStylePalette: propsInputStylePalette,\n getOptionLabel: propOptionLabel,\n getOptionValue: propOptionValue,\n getOptionMenuLabel: propOptionMenuLabel,\n fullWidth = fieldProps?.fullWidth ?? false,\n onSearch,\n onAddNew,\n ...otherProps\n } = props;\n const labelStyle = otherProps.labelStyle ?? fieldProps?.labelStyle ?? \"above\";\n\n // Memoize the callback functions and handle the `unset` option if provided.\n const getOptionLabel = useCallback(\n (o: O) =>\n unsetLabel && o === unsetOption\n ? unsetLabel\n : onAddNew && o === addNewOption\n ? addNewOption.name\n : propOptionLabel(o),\n // propOptionLabel is basically always a lambda, so don't dep on it\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [unsetLabel],\n );\n const getOptionValue = useCallback(\n (o: O) =>\n unsetLabel && o === unsetOption\n ? (undefined as V)\n : onAddNew && o === addNewOption\n ? (addNewOption.id as V)\n : propOptionValue(o),\n // propOptionValue is basically always a lambda, so don't dep on it\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [unsetLabel],\n );\n const getOptionMenuLabel = useCallback(\n (o: O) =>\n propOptionMenuLabel\n ? propOptionMenuLabel(o, Boolean(unsetLabel) && o === unsetOption, Boolean(onAddNew) && o === addNewOption)\n : getOptionLabel(o),\n // propOptionMenuLabel is basically always a lambda, so don't dep on it\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [unsetLabel, getOptionLabel],\n );\n\n // Call `initializeOptions` to prepend the `unset` option if the `unsetLabel` was provided.\n const options = useMemo(\n () => initializeOptions(propOptions, getOptionValue, unsetLabel, !!onAddNew),\n // If the caller is using { current, load, options }, memoize on only `current` and `options` values.\n // ...and don't bother on memoizing on getOptionValue b/c it's basically always a lambda\n // eslint-disable-next-line react-hooks/exhaustive-deps\n Array.isArray(propOptions)\n ? [propOptions, unsetLabel, onAddNew]\n : [propOptions.current, propOptions.options, unsetLabel, onAddNew],\n );\n\n const values = useMemo(() => propValues ?? [], [propValues]);\n const inputStylePalette = useMemo(() => propsInputStylePalette, [propsInputStylePalette]);\n\n const selectedOptions = useMemo(\n () => options.filter((o) => values.includes(getOptionValue(o))),\n [options, values, getOptionValue],\n );\n\n const { contains } = useFilter({ sensitivity: \"base\" });\n const isDisabled = !!disabled;\n const isReadOnly = !!readOnly;\n\n // Do a one-time initialize of fieldState\n const [fieldState, setFieldState] = useState<FieldState>(() => {\n return {\n inputValue: getInputValue(selectedOptions, getOptionLabel, multiselect, nothingSelectedText, isReadOnly),\n searchValue: undefined,\n optionsLoading: false,\n };\n });\n\n const { searchValue } = fieldState;\n const filteredOptions = useMemo(() => {\n return !searchValue\n ? options\n : options.filter((o) => contains(getOptionLabel(o), searchValue) || o === addNewOption);\n }, [options, searchValue, getOptionLabel, contains]);\n\n /** Resets field's input value and filtered options list for cases where the user exits the field without making changes (on Escape, or onBlur) */\n function resetField() {\n setFieldState((prevState) => ({ ...prevState, searchValue: undefined }));\n }\n\n function onSelectionChange(keys: Selection): void {\n // We don't currently handle the \"all\" case\n if (keys === \"all\") {\n return;\n }\n\n // `onSelectionChange` may be called even if the selection's didn't change.\n // For example, we trigger this `onBlur` of SelectFieldInput in order to reset the input's value.\n // In those cases, we do not need to again call `onSelect` so let's avoid it if we can.\n const selectionChanged = !(\n keys.size === state.selectionManager.selectedKeys.size &&\n [...keys].every((value) => state.selectionManager.selectedKeys.has(value))\n );\n\n if (multiselect && keys.size === 0) {\n selectionChanged && onSelect([], []);\n return;\n }\n\n const selectedKeys = [...keys.values()];\n const selectedOptions = options.filter((o) => selectedKeys.includes(valueToKey(getOptionValue(o))));\n\n if (!multiselect && selectedOptions[0] === addNewOption && onAddNew) {\n onAddNew(fieldState.inputValue);\n state.close();\n return;\n }\n\n selectionChanged && onSelect(selectedKeys.map(keyToValue) as V[], selectedOptions);\n\n if (!multiselect) {\n // Close menu upon selection change only for Single selection mode\n state.close();\n }\n }\n\n function onInputChange(value: string) {\n if (value !== fieldState.inputValue) {\n setFieldState((prevState) => ({ ...prevState, inputValue: value, searchValue: value }));\n }\n }\n\n async function maybeInitLoad() {\n if (!Array.isArray(propOptions)) {\n setFieldState((prevState) => ({ ...prevState, optionsLoading: true }));\n await propOptions.load();\n setFieldState((prevState) => ({ ...prevState, optionsLoading: false }));\n }\n }\n\n const firstOpen = useRef(true);\n function onOpenChange(isOpen: boolean) {\n if (firstOpen.current && isOpen) {\n // TODO: verify this eslint ignore\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n maybeInitLoad();\n firstOpen.current = false;\n }\n // When using the multiselect field, always empty the input upon open.\n if (multiselect && isOpen) {\n setFieldState((prevState) => ({ ...prevState, inputValue: \"\" }));\n }\n }\n\n // Used to calculate the rendered width of the combo box (input + button)\n const comboBoxRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const inputWrapRef = useRef<HTMLDivElement | null>(null);\n const listBoxRef = useRef<HTMLDivElement | null>(null);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n\n // `disabledKeys` from ComboBoxState does not support additional meta for showing a disabled reason to the user\n // This lookup map helps us cleanly prune out the optional reason text, then access it further down the component tree\n const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);\n\n const comboBoxProps = {\n ...otherProps,\n disabledKeys: Object.keys(disabledOptionsWithReasons),\n inputValue: fieldState.inputValue,\n items: filteredOptions,\n isDisabled,\n isReadOnly,\n onInputChange,\n onOpenChange,\n children: (item: any) => (\n <Item key={valueToKey(getOptionValue(item))} textValue={getOptionLabel(item)}>\n {getOptionMenuLabel(item)}\n </Item>\n ),\n };\n\n const state = useComboBoxState<any>({\n ...comboBoxProps,\n allowsEmptyCollection: true,\n // We don't really allow custom values, as we reset the input value once a user `blur`s the input field.\n // Though, setting `allowsCustomValue: true` prevents React-Aria/Stately from attempting to reset the input field's value when the menu closes.\n allowsCustomValue: true,\n // useComboBoxState.onSelectionChange will be executed if a keyboard interaction (Enter key) is used to select an item\n onSelectionChange: (key) => {\n // ignore undefined/null keys - `null` can happen if input field's value is completely deleted after having a value assigned.\n if (key) {\n const selectedKeys = state.selectionManager.selectedKeys;\n // Create the `newSelection` Set depending on the value type of SelectField.\n const newSelection: Set<Key> = new Set(!multiselect ? [key] : [...selectedKeys, key]);\n // Use only the `multipleSelectionState` to manage selected keys\n state.selectionManager.setSelectedKeys(newSelection);\n }\n },\n });\n\n const selectedKeys = useMemo(() => {\n return selectedOptions.map((o) => valueToKey(getOptionValue(o)));\n }, [selectedOptions, getOptionValue]);\n // @ts-ignore - `selectionManager.state` exists, but not according to the types\n state.selectionManager.state = useMultipleSelectionState({\n selectionMode: multiselect ? \"multiple\" : \"single\",\n // Do not allow an empty selection if single select mode\n disallowEmptySelection: !multiselect,\n selectedKeys,\n onSelectionChange,\n });\n\n const [debouncedSearch] = useDebounce(searchValue, 300);\n\n // Reset inputValue when closed or selected changes\n useEffect(() => {\n if (state.isOpen && multiselect && !debouncedSearch) {\n // When a single-select is open, with \"inputValue=Blue\", when \"Blue\" is actually\n // selected (our value changes), the box will close immediately, so the inputValue\n // will get reset in the `!isOpen` case.\n //\n // When a multi-select is open, with \"inputValue=Blue\", when \"Blue\" is actually\n // selected (our value changes), we leave the box open, and we want to reset\n // the \"inputValue=(empty) so the user can now type \"inputType=Green\".\n //\n // ...unless the multi-select is using onSearch, in which case we want to let them\n // only explicitly trigger a new `onSearch` by changing the existing inputValue,\n // i.e. they might want to keep typing \"Blueish\".\n setFieldState((prevState) => ({\n ...prevState,\n inputValue: \"\",\n searchValue: \"\",\n }));\n } else if (!state.isOpen) {\n setFieldState((prevState) => ({\n ...prevState,\n searchValue: \"\",\n inputValue: getInputValue(selectedOptions, getOptionLabel, multiselect, nothingSelectedText, isReadOnly),\n }));\n }\n }, [state.isOpen, selectedOptions, getOptionLabel, multiselect, nothingSelectedText, isReadOnly, debouncedSearch]);\n\n // Call on search callback when the user types in the input field\n useEffect(() => {\n onSearch?.(debouncedSearch ?? \"\");\n }, [onSearch, debouncedSearch]);\n\n // For the most part, the returned props contain `aria-*` and `id` attributes for accessibility purposes.\n const {\n buttonProps: triggerProps,\n inputProps,\n listBoxProps,\n labelProps,\n } = useComboBox(\n {\n ...comboBoxProps,\n inputRef,\n buttonRef: triggerRef,\n listBoxRef,\n popoverRef,\n },\n state,\n );\n\n const { buttonProps } = useButton({ ...triggerProps, isDisabled: isDisabled || isReadOnly }, triggerRef);\n\n // useOverlayPosition moves the overlay to the top of the DOM to avoid any z-index issues. Uses the `targetRef` to DOM placement\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: inputWrapRef,\n overlayRef: popoverRef,\n scrollRef: listBoxRef,\n shouldFlip: true,\n isOpen: state.isOpen,\n onClose: state.close,\n placement: \"bottom left\",\n offset: borderless ? 8 : 4,\n });\n\n positionProps.style = {\n ...positionProps.style,\n width: comboBoxRef?.current?.clientWidth,\n // Ensures the menu never gets too small.\n minWidth: 200,\n };\n\n const fieldMaxWidth = getFieldWidth(fullWidth);\n\n return (\n <div css={Css.df.fdc.w100.maxw(fieldMaxWidth).if(labelStyle === \"left\").maxw100.$} ref={comboBoxRef}>\n <ComboBoxInput\n {...otherProps}\n inputStylePalette={inputStylePalette}\n fullWidth={fullWidth}\n buttonProps={buttonProps}\n buttonRef={triggerRef}\n inputProps={inputProps}\n inputRef={inputRef}\n inputWrapRef={inputWrapRef}\n listBoxRef={listBoxRef}\n state={state}\n labelProps={labelProps}\n selectedOptions={selectedOptions}\n getOptionValue={getOptionValue}\n getOptionLabel={getOptionLabel}\n contrast={contrast}\n nothingSelectedText={nothingSelectedText}\n borderless={borderless}\n tooltip={resolveTooltip(disabled, undefined, readOnly)}\n resetField={resetField}\n />\n {state.isOpen && (\n <Popover\n triggerRef={triggerRef}\n popoverRef={popoverRef}\n positionProps={positionProps}\n onClose={() => state.close()}\n isOpen={state.isOpen}\n minWidth={200}\n >\n <ListBox\n {...listBoxProps}\n positionProps={positionProps}\n state={state}\n listBoxRef={listBoxRef}\n selectedOptions={selectedOptions}\n getOptionLabel={getOptionLabel}\n getOptionValue={(o) => valueToKey(getOptionValue(o))}\n contrast={contrast}\n horizontalLayout={labelStyle === \"left\"}\n loading={fieldState.optionsLoading}\n disabledOptionsWithReasons={disabledOptionsWithReasons}\n />\n </Popover>\n )}\n </div>\n );\n}\n\ntype FieldState = {\n inputValue: string;\n // We need separate `searchValue` vs. `inputValue` b/c we might be showing the\n // currently-loaded option in the input, without the user having typed a filter yet.\n searchValue: string | undefined;\n optionsLoading: boolean;\n};\n\n/** Allows lazy-loading select fields, which is useful for pages w/lots of fields the user may not actually use. */\nexport type OptionsOrLoad<O> =\n | O[]\n | {\n /** The initial option(s) to show before the user interacts with the dropdown. */\n current: O | O[] | undefined;\n /** Fired when the user interacts with the dropdown, to load the real options. */\n load: () => Promise<unknown>;\n /** The full list of options, after load() has been fired. */\n options: O[] | undefined;\n };\n\ntype UnsetOption = { id: undefined; name: string };\n\nfunction getInputValue<O>(\n selectedOptions: O[],\n getOptionLabel: (o: O) => string,\n multiselect: boolean,\n nothingSelectedText: string,\n readOnly?: boolean,\n) {\n return selectedOptions.length === 1\n ? getOptionLabel(selectedOptions[0])\n : readOnly && selectedOptions.length > 0\n ? selectedOptions.map(getOptionLabel).join(\", \")\n : multiselect && selectedOptions.length === 0\n ? nothingSelectedText\n : \"\";\n}\n\n/** Transforms/simplifies `optionsOrLoad` into just options, with unsetLabel maybe added. */\nexport function initializeOptions<O, V extends Value>(\n optionsOrLoad: OptionsOrLoad<O>,\n getOptionValue: (opt: O) => V,\n unsetLabel: string | undefined,\n addNew: boolean,\n): O[] {\n const opts: O[] = [];\n if (unsetLabel) {\n opts.push(unsetOption as unknown as O);\n }\n if (Array.isArray(optionsOrLoad)) {\n opts.push(...optionsOrLoad);\n } else {\n const { options, current } = optionsOrLoad;\n if (options) {\n opts.push(...options);\n }\n // Add the `current` to the list of options in the event it is not already there.\n if (current) {\n const toCheck = Array.isArray(current) ? current : [current];\n toCheck.forEach((current) => {\n const value = getOptionValue(current);\n const found = options && options.find((o) => getOptionValue(o) === value);\n if (!found) {\n opts.push(current);\n }\n });\n }\n }\n if (addNew) {\n opts.push(addNewOption as unknown as O);\n }\n return opts;\n}\n\n/** A marker option to automatically add an \"Unset\" option to the start of options. */\nexport const unsetOption = {};\nexport const addNewOption = { id: \"new\", name: \"Add New\" };\n\nexport function disabledOptionToKeyedTuple(\n disabledOption: Value | { value: Value; reason: string },\n): [React.Key, string | undefined] {\n if (typeof disabledOption === \"object\" && disabledOption !== null) {\n return [valueToKey(disabledOption.value), disabledOption.reason];\n } else {\n return [valueToKey(disabledOption), undefined];\n }\n}\n","import React, {\n ChangeEvent,\n InputHTMLAttributes,\n Key,\n LabelHTMLAttributes,\n MutableRefObject,\n ReactNode,\n useState,\n} from \"react\";\nimport { mergeProps } from \"react-aria\";\nimport { ComboBoxState } from \"react-stately\";\nimport { Chips, Icon, Tooltip } from \"src/components\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { useGrowingTextField } from \"src/inputs/hooks/useGrowingTextField\";\nimport { TextFieldBase } from \"src/inputs/TextFieldBase\";\nimport { useTreeSelectFieldProvider } from \"src/inputs/TreeSelectField/TreeSelectField\";\nimport { isLeveledNode } from \"src/inputs/TreeSelectField/utils\";\nimport { Value } from \"src/inputs/Value\";\nimport { maybeCall } from \"src/utils\";\n\ninterface ComboBoxInputProps<O, V extends Value> extends PresentationFieldProps {\n buttonProps: any;\n buttonRef: MutableRefObject<HTMLButtonElement | null>;\n inputProps: InputHTMLAttributes<HTMLInputElement>;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n inputWrapRef: MutableRefObject<HTMLDivElement | null>;\n listBoxRef?: MutableRefObject<HTMLDivElement | null>;\n state: ComboBoxState<O>;\n fieldDecoration?: (opt: O) => ReactNode;\n errorMsg?: string;\n required?: boolean;\n helperText?: string | ReactNode;\n onBlur?: () => void;\n onFocus?: () => void;\n labelProps: LabelHTMLAttributes<HTMLLabelElement>;\n label: string;\n selectedOptions: O[];\n selectedOptionsLabels?: string[];\n getOptionValue: (opt: O) => V;\n getOptionLabel: (opt: O) => string;\n sizeToContent?: boolean;\n contrast?: boolean;\n nothingSelectedText: string;\n tooltip?: ReactNode;\n resetField: VoidFunction;\n hideErrorMessage?: boolean;\n isTree?: boolean;\n /* Allows input to wrap to multiple lines */\n multiline?: boolean;\n}\n\nexport function ComboBoxInput<O, V extends Value>(props: ComboBoxInputProps<O, V>) {\n const {\n inputProps,\n buttonProps,\n buttonRef,\n errorMsg,\n state,\n fieldDecoration,\n onBlur,\n onFocus,\n selectedOptions,\n selectedOptionsLabels,\n getOptionValue,\n getOptionLabel,\n sizeToContent = false,\n contrast = false,\n nothingSelectedText,\n resetField,\n isTree,\n listBoxRef,\n inputRef,\n inputWrapRef,\n multiline = false,\n ...otherProps\n } = props;\n\n const { wrap = false } = usePresentationContext();\n\n // Allow the field to wrap whether the caller has explicitly set `multiline=true` or the `PresentationContext.wrap=true`\n const allowWrap = wrap || multiline;\n const { collapsedKeys, setCollapsedKeys } = useTreeSelectFieldProvider();\n\n const [isFocused, setIsFocused] = useState(false);\n const isMultiSelect = state.selectionManager.selectionMode === \"multiple\";\n const showNumSelection = isMultiSelect && state.selectionManager.selectedKeys.size > 1;\n // Show selections as chips when using multiselect when unfocused\n const showChipSelection = isMultiSelect && state.selectionManager.selectedKeys.size > 0;\n // For MultiSelect only show the `fieldDecoration` when input is not in focus.\n const showFieldDecoration =\n (!isMultiSelect || (isMultiSelect && !isFocused)) && fieldDecoration && selectedOptions.length === 1;\n\n const multilineProps = allowWrap ? { textAreaMinHeight: 0, multiline: true } : {};\n\n const chipLabels = isTree ? selectedOptionsLabels || [] : selectedOptions.map((o) => getOptionLabel(o));\n\n useGrowingTextField({\n // This says: When using a multiselect, then only enable the growing textfield when we are focused on it.\n // Because otherwise, we're not displaying the input element that dictates the height (we're displaying <Chips/>). This would cause incorrect calculations\n disabled: (isMultiSelect && (!allowWrap || !isFocused)) || (!isMultiSelect && !allowWrap),\n inputRef,\n inputWrapRef,\n value: inputProps.value,\n });\n\n return (\n <TextFieldBase\n {...otherProps}\n {...multilineProps}\n unfocusedPlaceholder={\n showChipSelection && <Chips compact={otherProps.compact} values={chipLabels} wrap={allowWrap} />\n }\n inputRef={inputRef}\n inputWrapRef={inputWrapRef}\n errorMsg={errorMsg}\n contrast={contrast}\n xss={otherProps.labelStyle !== \"inline\" && !inputProps.readOnly ? Css.fw5.$ : {}}\n startAdornment={\n (showNumSelection && (\n <Tooltip title={<SelectedOptionBullets labels={chipLabels} />}>\n <span\n css={Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$}\n data-testid=\"selectedOptionsCount\"\n >\n {isTree ? selectedOptionsLabels?.length : state.selectionManager.selectedKeys.size}\n </span>\n </Tooltip>\n )) ||\n (showFieldDecoration && fieldDecoration(selectedOptions[0]))\n }\n endAdornment={\n !inputProps.readOnly && (\n <button\n {...buttonProps}\n disabled={inputProps.disabled}\n ref={buttonRef}\n css={{\n ...Css.br4.outline0.gray700.if(contrast).gray400.$,\n ...(inputProps.disabled ? Css.cursorNotAllowed.gray400.if(contrast).gray600.$ : {}),\n }}\n data-testid=\"toggleListBox\"\n >\n <Icon icon={state.isOpen ? \"chevronUp\" : \"chevronDown\"} />\n </button>\n )\n }\n inputProps={{\n ...mergeProps(inputProps, { \"aria-invalid\": Boolean(errorMsg), onInput: () => state.open() }),\n // Not merging the following as we want them to overwrite existing events\n ...{\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n // We need to do some custom logic when using MultiSelect, as react-aria/stately Combobox doesn't support multiselect out of the box.\n if (isMultiSelect) {\n if (isTree) {\n const item = state.collection.getItem(state.selectionManager.focusedKey);\n if (item && (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\")) {\n if (!isLeveledNode(item)) return;\n const leveledOption = item.value;\n\n if (!leveledOption) return;\n const [option] = leveledOption;\n\n e.stopPropagation();\n e.preventDefault();\n if (option && option.children && option.children.length > 0) {\n if (collapsedKeys.includes(item.key) && e.key === \"ArrowRight\") {\n setCollapsedKeys((prevKeys: Key[]) => prevKeys.filter((k) => k !== item.key));\n } else if (!collapsedKeys.includes(item.key) && e.key === \"ArrowLeft\") {\n setCollapsedKeys((prevKeys: Key[]) => [...prevKeys, item.key]);\n }\n }\n return;\n }\n }\n\n // Enter should toggle the focused item.\n if (e.key === \"Enter\") {\n // Prevent form submissions if menu is open.\n if (state.isOpen) {\n e.preventDefault();\n }\n\n state.selectionManager.toggleSelection(state.selectionManager.focusedKey);\n return;\n }\n\n // By default, the Escape key would \"revert\" changes,\n // but we just want to close the menu and leave the reset of the field state as is.\n if (e.key === \"Escape\") {\n state.close();\n return;\n }\n }\n\n // Handle single selection Escape key press\n // When a user hits `Escape`, then react-aria calls `state.revert`, which uses `state.selectedKey` to\n // reset the field to its previous value. However, because we use a the Multiple Selection State manager,\n // then our `state.selectedKey` isn't set. So we need to properly reset the state ourselves.\n if (e.key === \"Escape\") {\n state.close();\n resetField();\n return;\n }\n\n inputProps.onKeyDown && inputProps.onKeyDown(e);\n },\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\n // Prevent user from entering any content that has new line characters.\n const target = e.target as unknown as HTMLTextAreaElement;\n target.value = target.value.replace(/[\\n\\r]/g, \"\");\n // Call existing onChange handler if any.\n inputProps.onChange && inputProps.onChange(e);\n },\n onBlur: (e: React.FocusEvent) => {\n // Do not call onBlur if readOnly or interacting within the input wrapper (such as the menu trigger button), or anything within the listbox.\n if (\n inputProps.readOnly ||\n (props.inputWrapRef.current && props.inputWrapRef.current.contains(e.relatedTarget as HTMLElement)) ||\n (props.listBoxRef?.current && props.listBoxRef.current.contains(e.relatedTarget as HTMLElement))\n ) {\n return;\n }\n\n // We purposefully override onBlur here instead of using mergeProps, b/c inputProps.onBlur\n // goes into useComboBox's onBlur, which calls setFocused(false), which in useComboBoxState\n // detects a) there is no props.selectedKey (b/c we don't pass it), and b) there is an\n // `inputValue`, so it thinks it needs to call `resetInputValue()`.\n setIsFocused(false);\n maybeCall(onBlur);\n state.close();\n\n // Always call `resetField` onBlur, this ensures the field's `input.value` resets\n // to what it should be in case it doesn't currently match.\n resetField();\n },\n onFocus: () => {\n if (inputProps.readOnly) return;\n setIsFocused(true);\n maybeCall(onFocus);\n },\n onClick: () => {\n if (inputProps.readOnly) return;\n buttonRef.current?.click();\n },\n size:\n // If sizeToContent, then, in order of precedence, base it of from:\n // 1. input's value if any\n // 2. If is MultiSelect and only one option is chosen, then use the length of that option to define the width to avoid size jumping on blur.\n // 3. Use `nothingSelectedText`\n // 4. Default to \"1\"\n // And do not allow it to grow past a size of 20.\n // TODO: Combine logic to determine the input's value. Similar logic is used in ComboBoxBase, though it is intertwined with other state logic. Such as when to open/close menu, or filter the options within that menu, etc...\n sizeToContent\n ? Math.min(\n String(\n inputProps.value ||\n (isMultiSelect && selectedOptions.length === 1 && getOptionLabel(selectedOptions[0])) ||\n nothingSelectedText ||\n \"\",\n ).length || 1,\n 20,\n )\n : undefined,\n },\n }}\n />\n );\n}\n\nfunction SelectedOptionBullets({ labels = [] }: { labels: string[] | undefined }) {\n return <div>{labels?.map((label) => <li key={label}>{label}</li>)}</div>;\n}\n","import { useLayoutEffect } from \"@react-aria/utils\";\nimport { MutableRefObject, useCallback } from \"react\";\n\ninterface GrowingTextFieldProps {\n inputRef: MutableRefObject<HTMLTextAreaElement | HTMLInputElement | null>;\n inputWrapRef: MutableRefObject<HTMLDivElement | null>;\n value: number | string | readonly string[] | undefined;\n disabled?: boolean;\n}\n\nexport function useGrowingTextField({ inputRef, inputWrapRef, value, disabled }: GrowingTextFieldProps) {\n // not in stately because this is so we know when to re-measure, which is a spectrum design\n const onHeightChange = useCallback(() => {\n if (disabled) return;\n const input = inputRef.current;\n const inputWrap = inputWrapRef.current;\n if (input && inputWrap) {\n const prevAlignment = input.style.alignSelf;\n input.style.alignSelf = \"start\";\n input.style.height = \"auto\";\n // Adding 2px to height avoids showing the scrollbar. This is to compensate for the border due to `box-sizing: border-box;`\n inputWrap.style.height = `${input.scrollHeight + 2}px`;\n // Set the textarea's height back to 100% so it takes up the full `inputWrap`\n input.style.height = \"100%\";\n input.style.alignSelf = prevAlignment;\n }\n }, [inputRef, disabled, inputWrapRef]);\n\n useLayoutEffect(() => {\n if (disabled) {\n // reset the height property if it was flipped to disabled\n if (inputWrapRef.current) {\n inputWrapRef.current.style.removeProperty(\"height\");\n }\n return;\n }\n\n if (inputRef.current) {\n // Temp hack until we can figure out a better way to ensure proper measurements when rendered through a portal (i.e. Modals)\n if (inputRef.current.scrollHeight === 0) {\n setTimeout(() => onHeightChange(), 0);\n return;\n }\n onHeightChange();\n // This is a hack to re-measure the height of the textarea after all the content has been rendered (i.e. after multiple GridTable children have been rendered)\n // See the InVirtualizedTable storybook for reproducing this behavior\n setTimeout(() => onHeightChange(), 200);\n }\n }, [onHeightChange, value, inputRef, disabled, inputWrapRef]);\n}\n","import React, {\n Dispatch,\n Key,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useButton, useComboBox, useFilter, useOverlayPosition } from \"react-aria\";\nimport { Item, useComboBoxState, useMultipleSelectionState } from \"react-stately\";\nimport { resolveTooltip } from \"src/components\";\nimport { Popover } from \"src/components/internal\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { Value } from \"src/inputs/index\";\nimport { disabledOptionToKeyedTuple } from \"src/inputs/internal/ComboBoxBase\";\nimport { ComboBoxInput } from \"src/inputs/internal/ComboBoxInput\";\nimport { ListBox } from \"src/inputs/internal/ListBox\";\nimport {\n findOption,\n findOptions,\n flattenOptions,\n LeveledOption,\n NestedOption,\n NestedOptionsOrLoad,\n TreeFieldState,\n TreeSelectResponse,\n} from \"src/inputs/TreeSelectField/utils\";\nimport { getFieldWidth } from \"src/inputs/utils\";\nimport { keyToValue, valueToKey } from \"src/inputs/Value\";\nimport { BeamFocusableProps } from \"src/interfaces\";\nimport { HasIdAndName, Optional } from \"src/types\";\n\nexport interface TreeSelectFieldProps<O, V extends Value> extends BeamFocusableProps, PresentationFieldProps {\n /** Renders `opt` in the dropdown menu, defaults to the `getOptionLabel` prop. `isUnsetOpt` is only defined for single SelectField */\n getOptionMenuLabel?: (opt: O, isUnsetOpt?: boolean) => string | ReactNode;\n getOptionValue: (opt: O) => V;\n getOptionLabel: (opt: O) => string;\n /** The current value; it can be `undefined`, even if `V` cannot be. */\n values: V[] | undefined;\n onSelect: (options: TreeSelectResponse<O, V>) => void;\n options: NestedOptionsOrLoad<O>;\n /** Whether the field is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n required?: boolean;\n errorMsg?: string;\n helperText?: string | ReactNode;\n /** Allow placing an icon/decoration within the input field. */\n fieldDecoration?: (opt: O) => ReactNode;\n /** Sets the form field label. */\n label: string;\n // Whether the field is readOnly. If a ReactNode, it's treated as a \"readOnly reason\" that's shown in a tooltip.\n readOnly?: boolean | ReactNode;\n onBlur?: () => void;\n onFocus?: () => void;\n sizeToContent?: boolean;\n /** The text to show when nothing is selected, i.e. could be \"All\" for filters. */\n nothingSelectedText?: string;\n /** When set the SelectField is expected to be put on a darker background */\n contrast?: boolean;\n /** Placeholder content */\n placeholder?: string;\n hideErrorMessage?: boolean;\n /** Whether to have all groups collapsed on initial load. Can also be configured individually, which overrides this behavior.\n * @default false */\n defaultCollapsed?: boolean;\n /** Allow the field's height to grow up to a predefined height (currently 72px), then scroll. */\n multiline?: boolean;\n /** Which selected options to display as chips in the input field when not focused.\n * @default root */\n chipDisplay?: \"all\" | \"leaf\" | \"root\";\n disabledOptions?: V[];\n}\n\nexport function TreeSelectField<O, V extends Value>(props: TreeSelectFieldProps<O, V>): JSX.Element;\nexport function TreeSelectField<O extends HasIdAndName<V>, V extends Value>(\n props: Optional<TreeSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element;\nexport function TreeSelectField<O, V extends Value>(\n props: Optional<TreeSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element {\n const {\n getOptionValue = (opt: O) => (opt as any).id, // if unset, assume O implements HasId\n getOptionLabel = (opt: O) => (opt as any).name, // if unset, assume O implements HasName\n options,\n onSelect,\n values,\n defaultCollapsed = false,\n ...otherProps\n } = props;\n\n const [collapsedKeys, setCollapsedKeys] = useState<Key[]>([]);\n\n useEffect(() => {\n setCollapsedKeys(\n !Array.isArray(options)\n ? []\n : defaultCollapsed\n ? options.map((o) => getOptionValue(o))\n : options\n .flatMap(flattenOptions)\n .filter((o) => o.defaultCollapsed)\n .map((o) => getOptionValue(o)),\n );\n // Explicitly ignoring `getOptionValue` as it typically isn't memo'd\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options, defaultCollapsed]);\n\n const contextValue = useMemo<CollapsedChildrenState<O, V>>(\n () => ({ collapsedKeys, setCollapsedKeys, getOptionValue }),\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [collapsedKeys, setCollapsedKeys],\n );\n\n return (\n <CollapsedContext.Provider value={contextValue}>\n <TreeSelectFieldBase\n {...otherProps}\n options={options}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n values={values}\n onSelect={({ all, leaf, root }) => {\n onSelect({ all, leaf, root });\n }}\n />\n </CollapsedContext.Provider>\n );\n}\n\nexport function useTreeSelectFieldProvider<O, V extends Value>() {\n return useContext(CollapsedContext);\n}\n\ninterface CollapsedChildrenState<O, V extends Value> {\n collapsedKeys: Key[];\n setCollapsedKeys: Dispatch<SetStateAction<Key[]>>;\n getOptionValue: (opt: O) => V;\n}\n// create the context to hold the collapsed state, default should be false\nexport const CollapsedContext = React.createContext<CollapsedChildrenState<any, any>>({\n collapsedKeys: [],\n setCollapsedKeys: () => {},\n getOptionValue: () => ({}) as any,\n});\n\nfunction TreeSelectFieldBase<O, V extends Value>(props: TreeSelectFieldProps<O, V>) {\n const { fieldProps } = usePresentationContext();\n const {\n values,\n options,\n getOptionValue,\n getOptionLabel,\n getOptionMenuLabel = getOptionLabel,\n disabled,\n readOnly,\n labelStyle,\n borderless,\n contrast = false,\n nothingSelectedText = \"\",\n onSelect,\n defaultCollapsed = false,\n placeholder,\n fullWidth = fieldProps?.fullWidth ?? false,\n chipDisplay = \"root\",\n disabledOptions,\n ...otherProps\n } = props;\n\n const isDisabled = !!disabled;\n const isReadOnly = !!readOnly;\n const initialOptions = Array.isArray(options) ? options : options.current;\n const { contains } = useFilter({ sensitivity: \"base\" });\n\n const { collapsedKeys } = useTreeSelectFieldProvider();\n\n // `disabledKeys` from ComboBoxState does not support additional meta for showing a disabled reason to the user\n // This lookup map helps us cleanly prune out the optional reason text, then access it further down the component tree\n const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);\n\n const initTreeFieldState: () => TreeFieldState<O> = useCallback(() => {\n // Figure out which options should be considered selected.\n // This is a bit of a complex process because:\n // 1. The `values` array could contain the values of the parent options, but not the children. So those children should be considered selected.\n // 2. The `values` array could contain the values of the children, but not the parent. So the parent should be considered selected if all children are.\n\n // Create a list of all selected values - using a Set to immediately dedupe the list.\n const selectedKeys: Set<Key> = new Set(\n values?.flatMap((v) => {\n // Find the options that matches the value. These could be parents or a children.\n const foundOptions = findOptions(initialOptions, valueToKey(v), getOptionValue);\n // Go through the `foundOptions` and get the keys of the options and its children if it has any.\n return foundOptions.flatMap(({ option }) => selectOptionAndAllChildren(option));\n }),\n );\n\n function selectOptionAndAllChildren(maybeParent: NestedOption<O>): string[] {\n // Check if the maybeParent has children, if so, return those as selected keys\n // Do in a recursive way so that children may have children\n return [\n valueToKey(getOptionValue(maybeParent)),\n ...(maybeParent.children?.flatMap(selectOptionAndAllChildren) ?? []),\n ];\n }\n\n // It is possible that all the children of a parent were considered selected `values`, but the parent wasn't included in the `values` array.\n // In this case, the parent also should be considered a selected option.\n function areAllChildrenSelected(maybeParent: NestedOption<O>): boolean {\n const isSelected = selectedKeys.has(valueToKey(getOptionValue(maybeParent)));\n // If already selected, or the options does not have children, then return its current state.\n if (isSelected || !maybeParent.children || maybeParent.children.length === 0) return isSelected;\n\n // If we do have children, then check if all children are selected.\n // if all are selected, then push this parent to the selectedKeys\n const areAllSelected = maybeParent.children.every(areAllChildrenSelected);\n if (areAllSelected) {\n selectedKeys.add(valueToKey(getOptionValue(maybeParent)));\n }\n return areAllSelected;\n }\n\n initialOptions.forEach(areAllChildrenSelected);\n\n // Using the `selectedKeys` Set, find the corresponding options that are selected. As it's a Set, its already deduped.\n const selectedOptions: NestedOption<O>[] = [...selectedKeys].flatMap((key) => {\n // Find the first matching option, then this list will also be already deduped.\n const maybeOption = findOption(initialOptions, key, getOptionValue);\n if (!maybeOption) return [];\n return [maybeOption.option];\n });\n\n // Store a list of the selected option labels so we can quickly refer to them later\n const selectedOptionsLabels =\n chipDisplay === \"root\"\n ? initialOptions.flatMap((o) => getTopLevelSelections(o, selectedKeys, getOptionValue)).map(getOptionLabel)\n : chipDisplay === \"leaf\"\n ? selectedOptions.filter((o) => !o.children || o.children.length === 0).map(getOptionLabel)\n : selectedOptions.map(getOptionLabel);\n\n const filteredOptions = initialOptions.flatMap((o) => levelOptions(o, 0, false, collapsedKeys, getOptionValue));\n\n return {\n selectedKeys: [...selectedKeys],\n inputValue:\n selectedOptions.length === 1\n ? getOptionLabel([...selectedOptions][0])\n : isReadOnly && selectedOptions.length > 0\n ? selectedOptionsLabels.join(\", \")\n : selectedOptions.length === 0\n ? nothingSelectedText\n : \"\",\n filteredOptions,\n selectedOptions,\n allOptions: initialOptions,\n selectedOptionsLabels,\n optionsLoading: false,\n allowCollapsing: true,\n };\n }, [\n initialOptions,\n values,\n chipDisplay,\n getOptionLabel,\n isReadOnly,\n nothingSelectedText,\n getOptionValue,\n collapsedKeys,\n ]);\n\n // Initialize the TreeFieldState\n const [fieldState, setFieldState] = useState<TreeFieldState<O>>(() => initTreeFieldState());\n\n useEffect(() => {\n // We don't want to do this if initialOptions is not an array, because we would be lazy loading `allOptions`\n if (Array.isArray(options)) {\n setFieldState((prevState) => ({ ...prevState, allOptions: options }));\n }\n }, [options]);\n\n // Reset the TreeFieldState if the values array changes and doesn't match the selectedOptions\n useEffect(() => {\n // if the values does not match the values in the fieldState, then update the fieldState\n const selectedKeys = fieldState.selectedOptions.map((o) => valueToKey(getOptionValue(o)));\n if (\n // If the values were cleared\n (values === undefined && selectedKeys.length !== 0) ||\n // Or values were set, but they don't match the selected keys\n (values && (values.length !== selectedKeys.length || !values.every((v) => selectedKeys.includes(valueToKey(v)))))\n ) {\n // Then reinitialize\n setFieldState(initTreeFieldState());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getOptionValue, initTreeFieldState, values]);\n\n // React to collapsed keys and update the filtered options\n const reactToCollapse = useRef(false);\n useEffect(\n () => {\n // Do not run this effect on first render. Otherwise we'd be triggering a re-render on first render.\n if (reactToCollapse.current) {\n setFieldState(({ allOptions, inputValue, ...others }) => ({\n allOptions,\n inputValue,\n ...others,\n filteredOptions: allOptions.flatMap((o) =>\n levelOptions(o, 0, inputValue.length > 0, collapsedKeys, getOptionValue).filter(([option]) =>\n contains(getOptionLabel(option), inputValue),\n ),\n ),\n }));\n }\n reactToCollapse.current = true;\n },\n // Only react to collapseKey changes. Other deps should be stable (`contains`, `getOptionLabel`, `getOptionValue`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [collapsedKeys],\n );\n\n // Update the filtered options when the input value changes\n const onInputChange = useCallback(\n (inputValue: string) => {\n setFieldState((prevState) => {\n return {\n ...prevState,\n inputValue,\n allowCollapsing: inputValue.length === 0,\n filteredOptions: prevState.allOptions.flatMap((o) =>\n levelOptions(o, 0, inputValue.length > 0, collapsedKeys, getOptionValue).filter(([option]) =>\n contains(getOptionLabel(option), inputValue),\n ),\n ),\n };\n });\n },\n [collapsedKeys, contains, getOptionLabel, getOptionValue],\n );\n\n // Handle loading of the options in the case that they are loaded via a Promise.\n const maybeInitLoad = useCallback(\n async (\n options: NestedOptionsOrLoad<O>,\n fieldState: TreeFieldState<O>,\n setFieldState: React.Dispatch<React.SetStateAction<TreeFieldState<O>>>,\n ) => {\n if (!Array.isArray(options)) {\n setFieldState((prevState) => ({ ...prevState, optionsLoading: true }));\n const loadedOptions = (await options.load()).options;\n const filteredOptions = loadedOptions.flatMap((o) =>\n levelOptions(o, 0, fieldState.inputValue.length > 0, collapsedKeys, getOptionValue).filter(([option]) =>\n contains(getOptionLabel(option), fieldState.inputValue),\n ),\n );\n\n // Ensure the `unset` option is prepended to the top of the list if `unsetLabel` was provided\n setFieldState((prevState) => ({\n ...prevState,\n filteredOptions,\n allOptions: loadedOptions,\n optionsLoading: false,\n }));\n }\n },\n [collapsedKeys, contains, getOptionLabel, getOptionValue],\n );\n\n // Only on the first open of the listbox, we want to load the options if they haven't been loaded yet.\n const firstOpen = useRef(true);\n function onOpenChange(isOpen: boolean) {\n if (firstOpen.current && isOpen) {\n // TODO: verify this eslint ignore\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n maybeInitLoad(options, fieldState, setFieldState);\n firstOpen.current = false;\n }\n if (isOpen) {\n // reset the input field to allow the user to start typing to filter\n setFieldState((prevState) => ({\n ...prevState,\n inputValue: \"\",\n filteredOptions: prevState.allOptions.flatMap((o) => levelOptions(o, 0, false, collapsedKeys, getOptionValue)),\n }));\n }\n }\n\n // This is _always_ going to appear new. Maybe `useMemo`?\n const comboBoxProps = {\n ...otherProps,\n disabledKeys: Object.keys(disabledOptionsWithReasons),\n placeholder: !values || values.length === 0 ? placeholder : \"\",\n label: props.label,\n inputValue: fieldState.inputValue,\n // where we might want to do flatmap and return diff kind of array (children ? add level prop) inside children callback - can put markup wrapper div adds padding\n // so we're not doing it multiple places\n items: fieldState.filteredOptions,\n isDisabled,\n isReadOnly,\n onInputChange,\n onOpenChange,\n children: ([item]: LeveledOption<O>) => (\n // what we're telling it to render. look at padding here - don't have to pass down to tree option - filtered options is where we're flat mapping\n <Item key={valueToKey(getOptionValue(item))} textValue={getOptionLabel(item)}>\n {getOptionMenuLabel(item)}\n </Item>\n ),\n };\n\n const state = useComboBoxState<any>({\n ...comboBoxProps,\n allowsEmptyCollection: true,\n allowsCustomValue: true,\n });\n\n // @ts-ignore - `selectionManager.state` exists, but not according to the types. We are tricking the ComboBox state to support multiple selections.\n state.selectionManager.state = useMultipleSelectionState({\n selectionMode: \"multiple\",\n selectedKeys: fieldState.selectedKeys,\n onSelectionChange: (newKeys) => {\n if (newKeys === \"all\") {\n // We do not support an \"All\" option\n return;\n }\n\n // First figure out which keys changed so we can correctly determine which affiliated options may need to be updated as well.\n const existingKeys = state.selectionManager.selectedKeys;\n const addedKeys = new Set([...newKeys].filter((x) => !existingKeys.has(x)));\n const removedKeys = new Set([...existingKeys].filter((x) => !newKeys.has(x)));\n\n // Make sure there are changes before we do anything.\n if (addedKeys.size > 0 || removedKeys.size > 0) {\n // Quickly return out of this if all selections are removed\n if (newKeys.size === 0) {\n setFieldState((prevState) => ({\n ...prevState,\n inputValue: nothingSelectedText,\n selectedKeys: [],\n selectedOptions: [],\n }));\n onSelect({\n all: { values: [], options: [] },\n leaf: { values: [], options: [] },\n root: { values: [], options: [] },\n });\n return;\n }\n\n // `onSelectionChange` is only ever going to be adding or removing 1 key at a time.\n // The below logic for adding/removing using a forEach loop is just to make TS happy.\n // This may look like a lot of logic, but in the execution it will only ever be adding/removing 1 key at a time, so it really isn't as bad as it looks.\n\n // For added keys, we need to see if any other options should be added as well.\n [...addedKeys].forEach((key) => {\n const maybeOptions = findOptions(fieldState.allOptions, key, getOptionValue);\n if (maybeOptions.length === 0) return;\n\n for (const { option, parents } of maybeOptions) {\n // If the newly added option has children, then consider the children to be newly added keys as well.\n if (option && option.children && option.children.length > 0) {\n const childrenKeys = option.children\n .flatMap(flattenOptions)\n .map((o) => valueToKey(getOptionValue(o)))\n .filter((childKey) => {\n // remove children that are disabled\n return !state.disabledKeys.has(childKey);\n });\n [key, ...childrenKeys].forEach(addedKeys.add, addedKeys);\n }\n\n // If this was a child that was selected, then see if every other child is also selected, and if so, consider the parent selected.\n // Walk up the parents and determine their state.\n for (const parent of parents.reverse()) {\n const allChecked = parent.children?.every((child) => {\n const childKey = valueToKey(getOptionValue(child));\n return addedKeys.has(childKey) || existingKeys.has(childKey) || state.disabledKeys.has(childKey);\n });\n if (allChecked) {\n addedKeys.add(valueToKey(getOptionValue(parent)));\n }\n }\n }\n });\n\n // For removed keys, we need to also unselect any children and parents of the removed key\n [...removedKeys].forEach((key) => {\n // Grab the option and parents of the option that was removed\n const maybeOptions = findOptions(fieldState.allOptions, key, getOptionValue);\n if (maybeOptions.length === 0) return;\n\n for (const { option, parents } of maybeOptions) {\n // If the option has children, then we need to unselect those children as well\n if (option.children && option.children.length > 0) {\n // Ensure we do not impact children that are disabled. They shouldn't be able to toggled on/off\n const childrenKeys = option.children\n .flatMap(flattenOptions)\n .map((o) => valueToKey(getOptionValue(o)))\n .filter((key) => !state.disabledKeys.has(key));\n [key, ...childrenKeys].forEach(removedKeys.add, removedKeys);\n }\n\n // If the option has parents, then we need to unselect those parents as well\n if (parents.length > 0) {\n const parentKeys = parents.map((o) => valueToKey(getOptionValue(o)));\n [key, ...parentKeys].forEach(removedKeys.add, removedKeys);\n }\n }\n });\n\n // Create the lists to update our TreeState with\n const selectedKeys = new Set([...existingKeys, ...addedKeys].filter((x) => !removedKeys.has(x)));\n const selectedOptions = [...selectedKeys]\n // Find the first option as it could be duplicated, but we only want one of them.\n .map((key) => findOption(fieldState.allOptions, key, getOptionValue)?.option)\n .filter((o) => o) as NestedOption<O>[]; // filter out undefined\n\n // Our `onSelect` callback provides three things:\n // 1. ALL selected values + options\n // 2. Only the top level selected values + options\n // 3. Only the leaf selected values + options\n\n // For the top level and leaf selections, we need to do some extra work to determine which options are the top level and leaf.\n const allRootOptions = fieldState.allOptions.flatMap((o) =>\n getTopLevelSelections(o, selectedKeys, getOptionValue),\n );\n // dedupe selected root options\n const rootOptions = allRootOptions.filter(\n (o, idx, self) => idx === self.findIndex((t) => getOptionValue(o) === getOptionValue(t)),\n );\n const rootValues = rootOptions.map(getOptionValue);\n\n // Finally get the list of options that are just the \"leaf\" options, meaning they have no children.\n const leafOptions = selectedOptions.filter((o) => !o.children || o.children.length === 0);\n const leafValues = leafOptions.map(getOptionValue);\n\n setFieldState((prevState) => ({\n ...prevState,\n // Since we reset the list of options upon selection changes, then set the `inputValue` to empty string to reflect that.\n inputValue: \"\",\n filteredOptions: initialOptions.flatMap((o) => levelOptions(o, 0, false, collapsedKeys, getOptionValue)),\n selectedKeys: [...selectedKeys],\n selectedOptions,\n selectedOptionsLabels:\n chipDisplay === \"root\"\n ? rootOptions.map(getOptionLabel)\n : chipDisplay === \"leaf\"\n ? leafOptions.map(getOptionLabel)\n : selectedOptions.map(getOptionLabel),\n }));\n\n onSelect({\n all: { values: [...selectedKeys].map((key) => keyToValue(key)), options: selectedOptions },\n leaf: { values: leafValues, options: leafOptions },\n root: { values: rootValues, options: rootOptions },\n });\n }\n },\n });\n\n // Resets the TreeFieldState when the 'blur' event is triggered on the input.\n function resetField() {\n const { inputValue, selectedOptions } = fieldState;\n if (\n inputValue !== nothingSelectedText ||\n (selectedOptions.length === 1 && inputValue !== getOptionLabel(selectedOptions[0]))\n ) {\n setFieldState((prevState) => ({\n ...prevState,\n inputValue:\n selectedOptions.length === 1\n ? getOptionLabel(selectedOptions[0])\n : selectedOptions.length === 0\n ? nothingSelectedText\n : \"\",\n filteredOptions: initialOptions.flatMap((o) => levelOptions(o, 0, false, collapsedKeys, getOptionValue)),\n allowCollapsing: true,\n }));\n }\n }\n\n const comboBoxRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const inputWrapRef = useRef<HTMLDivElement | null>(null);\n const listBoxRef = useRef<HTMLDivElement | null>(null);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n\n const {\n buttonProps: triggerProps,\n inputProps,\n listBoxProps,\n labelProps,\n } = useComboBox(\n {\n ...comboBoxProps,\n inputRef,\n buttonRef: triggerRef,\n listBoxRef,\n popoverRef,\n },\n state,\n );\n const { buttonProps } = useButton({ ...triggerProps, isDisabled: isDisabled || isReadOnly }, triggerRef);\n\n // useOverlayPosition moves the overlay to the top of the DOM to avoid any z-index issues. Uses the `targetRef` to DOM placement\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: inputWrapRef,\n overlayRef: popoverRef,\n scrollRef: listBoxRef,\n shouldFlip: true,\n isOpen: state.isOpen,\n onClose: state.close,\n placement: \"bottom left\",\n offset: borderless ? 8 : 4,\n });\n\n positionProps.style = {\n ...positionProps.style,\n width: comboBoxRef?.current?.clientWidth,\n // Ensures the menu never gets too small.\n minWidth: 320,\n };\n\n const fieldMaxWidth = getFieldWidth(fullWidth);\n\n return (\n <div css={Css.df.fdc.w100.maxw(fieldMaxWidth).if(labelStyle === \"left\").maxw100.$} ref={comboBoxRef}>\n <ComboBoxInput\n {...otherProps}\n fullWidth={fullWidth}\n labelStyle={labelStyle}\n buttonProps={buttonProps}\n buttonRef={triggerRef}\n inputProps={inputProps}\n inputRef={inputRef}\n inputWrapRef={inputWrapRef}\n listBoxRef={listBoxRef}\n state={state}\n labelProps={labelProps}\n selectedOptions={fieldState.selectedOptions}\n selectedOptionsLabels={fieldState.selectedOptionsLabels}\n getOptionValue={getOptionValue}\n getOptionLabel={getOptionLabel}\n contrast={contrast}\n borderless={borderless}\n tooltip={resolveTooltip(disabled, undefined, readOnly)}\n resetField={resetField}\n nothingSelectedText={nothingSelectedText}\n isTree\n />\n {state.isOpen && (\n <Popover\n triggerRef={triggerRef}\n popoverRef={popoverRef}\n positionProps={positionProps}\n onClose={() => state.close()}\n isOpen={state.isOpen}\n minWidth={320}\n >\n <ListBox\n {...listBoxProps}\n positionProps={positionProps}\n state={state}\n listBoxRef={listBoxRef}\n selectedOptions={fieldState.selectedOptions}\n getOptionLabel={getOptionLabel}\n getOptionValue={(o) => valueToKey(getOptionValue(o))}\n contrast={contrast}\n horizontalLayout={labelStyle === \"left\"}\n loading={fieldState.optionsLoading}\n allowCollapsing={fieldState.allowCollapsing}\n isTree\n />\n </Popover>\n )}\n </div>\n );\n}\n\nfunction levelOptions<O, V extends Value>(\n o: NestedOption<O>,\n level: number,\n filtering: boolean,\n collapsedKeys: Key[],\n getOptionValue: (o: O) => V,\n): LeveledOption<O>[] {\n // If a user is filtering, then do not provide level to the options as the various paddings may look quite odd.\n const actualLevel = filtering ? 0 : level;\n return [\n [o, actualLevel],\n // Flat map the children if the parent is not collapsed or if we are filtering (for the search results)\n ...(o.children?.length && (!collapsedKeys.includes(valueToKey(getOptionValue(o))) || filtering)\n ? o.children.flatMap((oc: NestedOption<O>) =>\n levelOptions(oc, actualLevel + 1, filtering, collapsedKeys, getOptionValue),\n )\n : []),\n ];\n}\n\n// Given an option and the selected keys, it will return the top most selected option in the option's tree.\n// This could be a parent of the option, or the option itself.\nfunction getTopLevelSelections<O, V extends Value>(\n o: NestedOption<O>,\n selectedKeys: Set<Key>,\n getOptionValue: (o: O) => V,\n): NestedOption<O>[] {\n // If this element is already selected, return early. Do not bother looking through children.\n if (selectedKeys.has(valueToKey(getOptionValue(o)))) return [o];\n // If this element has no children, then look through the children for top level selected options.\n if (o.children) return [...o.children.flatMap((c) => getTopLevelSelections(c, selectedKeys, getOptionValue))];\n return [];\n}\n","import React, { Key, MutableRefObject, useEffect, useRef, useState } from \"react\";\nimport { useListBox } from \"react-aria\";\nimport { SelectState } from \"react-stately\";\nimport { Css } from \"src/Css\";\nimport { persistentItemHeight, sectionSeparatorHeight } from \"src/inputs/internal/constants\";\nimport { ListBoxSection } from \"src/inputs/internal/ListBoxSection\";\nimport { ListBoxToggleChip } from \"src/inputs/internal/ListBoxToggleChip\";\nimport { VirtualizedOptions } from \"src/inputs/internal/VirtualizedOptions\";\n\ninterface ListBoxProps<O, V extends Key> {\n listBoxRef: MutableRefObject<HTMLDivElement | null>;\n state: SelectState<O>;\n selectedOptions?: O[];\n getOptionLabel: (opt: O) => string;\n getOptionValue: (opt: O) => V;\n contrast?: boolean;\n horizontalLayout?: boolean;\n positionProps: React.HTMLAttributes<Element>;\n loading?: boolean | (() => JSX.Element);\n disabledOptionsWithReasons?: Record<string, string | undefined>;\n isTree?: boolean;\n allowCollapsing?: boolean;\n}\n\n/** A ListBox is an internal component used by SelectField and MultiSelectField to display the list of options */\nexport function ListBox<O, V extends Key>(props: ListBoxProps<O, V>) {\n const {\n state,\n listBoxRef,\n selectedOptions = [],\n getOptionLabel,\n getOptionValue,\n contrast = false,\n positionProps,\n horizontalLayout = false,\n loading,\n disabledOptionsWithReasons = {},\n isTree,\n allowCollapsing,\n } = props;\n const { listBoxProps } = useListBox({ disallowEmptySelection: true, ...props }, state, listBoxRef);\n const positionMaxHeight = positionProps.style?.maxHeight;\n // The popoverMaxHeight will be based on the value defined by the positionProps returned from `useOverlayPosition` (which will always be a defined as a `number` based on React-Aria's `calculatePosition`).\n // If `maxHeight` is set use that, otherwise use `maxPopoverHeight` as a default, per UX guidelines.\n // (`positionMaxHeight` should always be set and defined as a number, but we need to do these type checks to make TS happy)\n const popoverMaxHeight =\n positionMaxHeight && typeof positionMaxHeight === \"number\"\n ? Math.min(positionMaxHeight, maxPopoverHeight)\n : maxPopoverHeight;\n const [popoverHeight, setPopoverHeight] = useState(popoverMaxHeight);\n const isMultiSelect = state.selectionManager.selectionMode === \"multiple\";\n const firstItem = state.collection.at(0);\n const hasSections = firstItem && firstItem.type === \"section\";\n // Create a reference for measuring the MultiSelect's selected list's height. Used for re-evaluating `popoverHeight`.\n const selectedList = useRef<HTMLUListElement>(null);\n const firstRender = useRef(true);\n // Keep track of the virtuoso list height to properly update the ListBox's height.\n // Using a ref, this itself should not trigger a rerender, only `popoverHeight` changes will trigger a rerender.\n const virtuosoListHeight = useRef<number>(0);\n const onListHeightChange = (listHeight: number) => {\n virtuosoListHeight.current = listHeight;\n // The \"listHeight\" is only the list of options.\n // For multiple selects we need to also account for the height of the list of currently selected elements when re-evaluating.\n // Using `offsetHeight` to account for borders\n const height = (selectedList.current?.offsetHeight || 0) + listHeight;\n\n // Using Math.min to choose between the smaller height, either the total height of the List (`height` arg), or the maximum height defined by the space allotted on screen or our hard coded max.\n // If there are ListBoxSections, then we assume it is the persistent section with a single item and account for that height.\n setPopoverHeight(\n Math.min(popoverMaxHeight, hasSections ? height + persistentItemHeight + sectionSeparatorHeight : height),\n );\n };\n\n useEffect(\n () => {\n // Reevaluate the list height when introducing or removing the MultiSelect's options list.\n // Do not call `onListHeightChange` on the first render. Only when the selectedKeys size has actually changed between empty and not empty.\n if (\n !firstRender.current &&\n isMultiSelect &&\n (state.selectionManager.selectedKeys.size === 0 || state.selectionManager.selectedKeys.size === 1)\n ) {\n onListHeightChange(virtuosoListHeight.current);\n }\n firstRender.current = false;\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.selectionManager.selectedKeys.size],\n );\n\n return (\n <div\n css={{\n // If `horizontalLayout`, then that means `labelStyle === \"left\"`. In this case the label the the field both take 50% of the horizontal space.\n // Add `w50` in that case to ensure the ListBox is only the width of the field. If the width definitions ever change, we need to update here as well.\n ...Css.bgWhite.br4.w100.bshBasic.hPx(popoverHeight).df.fdc.if(contrast).bgGray700.if(horizontalLayout).w50.$,\n \"&:hover\": Css.bshHover.$,\n }}\n ref={listBoxRef}\n {...listBoxProps}\n >\n {isMultiSelect && !isTree && state.selectionManager.selectedKeys.size > 0 && (\n <ul\n css={Css.listReset.pt2.pl2.pb1.pr1.df.bb.bcGray200.add(\"flexWrap\", \"wrap\").maxh(\"50%\").oa.$}\n ref={selectedList}\n >\n {selectedOptions.map((o) => (\n <ListBoxToggleChip\n key={getOptionValue(o)}\n state={state}\n option={o}\n getOptionValue={getOptionValue}\n getOptionLabel={getOptionLabel}\n disabled={state.disabledKeys.has(getOptionValue(o))}\n />\n ))}\n </ul>\n )}\n\n <ul css={Css.listReset.fg1.$}>\n {hasSections ? (\n [...state.collection].map((section) => (\n <ListBoxSection\n key={section.key}\n section={section}\n state={state}\n contrast={contrast}\n onListHeightChange={onListHeightChange}\n popoverHeight={popoverHeight}\n // Only scroll on focus if using VirtualFocus (used for ComboBoxState (SelectField), but not SelectState (ChipSelectField))\n scrollOnFocus={(props as any).shouldUseVirtualFocus}\n disabledOptionsWithReasons={disabledOptionsWithReasons}\n />\n ))\n ) : (\n <VirtualizedOptions\n state={state}\n items={[...state.collection]}\n onListHeightChange={onListHeightChange}\n contrast={contrast}\n // Only scroll on focus if using VirtualFocus (used for ComboBoxState (SelectField), but not SelectState (ChipSelectField))\n scrollOnFocus={(props as any).shouldUseVirtualFocus}\n loading={loading}\n disabledOptionsWithReasons={disabledOptionsWithReasons}\n isTree={isTree}\n allowCollapsing={allowCollapsing}\n />\n )}\n </ul>\n </div>\n );\n}\n\n// UX specified maximum height for a ListBox (in pixels)\nconst maxPopoverHeight = 512;\n","export const persistentItemHeight = 42;\nexport const sectionSeparatorHeight = 1;\n","import { Node } from \"@react-types/shared\";\nimport { useListBoxSection, useSeparator } from \"react-aria\";\nimport { SelectState } from \"react-stately\";\nimport { Css } from \"src/Css\";\nimport { persistentItemHeight, sectionSeparatorHeight } from \"src/inputs/internal/constants\";\nimport { Option } from \"src/inputs/internal/Option\";\nimport { VirtualizedOptions } from \"src/inputs/internal/VirtualizedOptions\";\n\ninterface ListBoxSectionProps<O> {\n section: Node<O>;\n state: SelectState<O>;\n contrast: boolean;\n onListHeightChange: (height: number) => void;\n popoverHeight: number;\n scrollOnFocus?: boolean;\n disabledOptionsWithReasons: Record<string, string | undefined>;\n}\n\n// Creates a section of options within a ListBox.\n// Currently only expects two possible sections; 1. The list of options, and 2. A persistent action (in that order).\nexport function ListBoxSection<O>(props: ListBoxSectionProps<O>) {\n const { section, state, contrast, onListHeightChange, popoverHeight, scrollOnFocus, disabledOptionsWithReasons } =\n props;\n const { itemProps, groupProps } = useListBoxSection(section);\n const { separatorProps } = useSeparator({ elementType: \"li\" });\n const isPersistentSection = section.key !== state.collection.getFirstKey();\n const childNodes = [...section.childNodes];\n\n return (\n <>\n {isPersistentSection && <li {...separatorProps} css={Css.bt.bcGray200.$} />}\n <li {...itemProps} css={Css.if(!isPersistentSection).oa.$}>\n {/* Styles assume only one Persistent Item is ever shown. Will need to adjust if that ever changes */}\n <ul\n css={\n Css.listReset.if(!isPersistentSection).hPx(popoverHeight - sectionSeparatorHeight - persistentItemHeight).$\n }\n {...groupProps}\n >\n {isPersistentSection ? (\n childNodes.map((item) => (\n <Option\n key={item.key}\n item={item}\n state={state}\n contrast={contrast}\n disabledReason={disabledOptionsWithReasons[item.key]}\n />\n ))\n ) : (\n <VirtualizedOptions\n state={state}\n items={childNodes}\n onListHeightChange={onListHeightChange}\n contrast={contrast}\n scrollOnFocus={scrollOnFocus}\n disabledOptionsWithReasons={disabledOptionsWithReasons}\n />\n )}\n </ul>\n </li>\n </>\n );\n}\n","import { Node } from \"@react-types/shared\";\nimport { useRef } from \"react\";\nimport { mergeProps, useHover, useOption } from \"react-aria\";\nimport { ListState, TreeState } from \"react-stately\";\nimport { maybeTooltip } from \"src/components\";\nimport { Icon } from \"src/components/Icon\";\nimport { Css, Palette } from \"src/Css\";\nimport { isPersistentKey } from \"src/inputs/ChipSelectField\";\n\ninterface OptionProps<O> {\n item: Node<O>;\n state: ListState<O> | TreeState<O>;\n contrast?: boolean;\n scrollToIndex?: (index: number) => void;\n disabledReason?: string;\n}\n/** Represents a single option within a ListBox - used by SelectField and MultiSelectField */\nexport function Option<O>(props: OptionProps<O>) {\n const { item, state, contrast = false, scrollToIndex, disabledReason } = props;\n const ref = useRef<HTMLLIElement>(null);\n const { hoverProps, isHovered } = useHover({});\n\n const themeStyles = {\n item: Css.gray900.if(contrast).white.$,\n hover: Css.bgGray100.if(contrast).bgGray600.$,\n disabled: Css.cursorNotAllowed.gray400.if(contrast).gray500.$,\n focus: Css.add(\"boxShadow\", `inset 0 0 0 1px ${!contrast ? Palette.Blue700 : Palette.Blue500}`).$,\n };\n\n // Get props for the option element.\n // Prevent options from receiving browser focus via shouldUseVirtualFocus.\n const { optionProps, isDisabled, isFocused, isSelected } = useOption(\n { key: item.key, shouldSelectOnPressUp: true, shouldFocusOnHover: false },\n state,\n ref,\n );\n\n return maybeTooltip({\n title: disabledReason,\n placement: \"right\",\n children: (\n <li\n {...mergeProps(optionProps, hoverProps)}\n data-label={item.textValue}\n ref={ref as any}\n css={{\n ...Css.df.aic.jcsb.py1.px2.mh(\"42px\").outline0.cursorPointer.sm.$,\n // Assumes only one Persistent Item per list - will need to change to utilize Sections if that assumption is incorrect.\n ...(isPersistentKey(item.key) ? Css.bt.bcGray200.$ : {}),\n ...themeStyles.item,\n ...(isHovered && !isDisabled ? themeStyles.hover : {}),\n ...(isFocused ? themeStyles.focus : {}),\n ...(isDisabled ? themeStyles.disabled : {}),\n }}\n >\n {item.rendered}\n {isSelected && (\n <span css={Css.fs0.$}>\n <Icon\n icon=\"check\"\n color={\n !contrast\n ? isDisabled\n ? Palette.Gray400\n : Palette.Blue700\n : isDisabled\n ? Palette.Gray500\n : Palette.White\n }\n />\n </span>\n )}\n </li>\n ),\n });\n}\n","import { camelCase } from \"change-case\";\nimport { Key, ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { mergeProps, useButton, useFocus, useOverlayPosition, useSelect } from \"react-aria\";\nimport { Item, Section, useListData, useSelectState } from \"react-stately\";\nimport { Icon, maybeTooltip, resolveTooltip } from \"src/components\";\nimport { Popover } from \"src/components/internal\";\nimport { Label } from \"src/components/Label\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { ChipTextField } from \"src/inputs/ChipTextField\";\nimport { ListBox } from \"src/inputs/internal/ListBox\";\nimport { ListBoxChip } from \"src/inputs/internal/ListBoxChip\";\nimport { Value, valueToKey } from \"src/inputs/Value\";\nimport { HasIdAndName, Optional } from \"src/types\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultOptionLabel, defaultOptionValue } from \"src/utils/options\";\n\nexport interface ChipSelectFieldProps<O, V extends Value> {\n label: string;\n value: V;\n options: O[];\n placeholder?: string;\n onSelect: (value: V, opt: O | undefined) => void;\n getOptionValue: (opt: O) => V;\n getOptionLabel: (opt: O) => string;\n // Callback fired when focus removes from the input\n onBlur?: () => void;\n // Callback fired when focus is set to the input\n onFocus?: () => void;\n // Whether to show the \"X\"/clear button on the Chip\n clearable?: boolean;\n // If set, appends \"Create new\" option to list. When \"Create new\" is chosen, then the SelectField is replaced with the ChipTextField for creating a new option.\n onCreateNew?: (value: string) => Promise<void>;\n // Whether the Button is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip.\n disabled?: boolean | ReactNode;\n}\n\nexport function ChipSelectField<O, V extends Value>(props: ChipSelectFieldProps<O, V>): JSX.Element;\nexport function ChipSelectField<O extends HasIdAndName<V>, V extends Value>(\n props: Optional<ChipSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element;\nexport function ChipSelectField<O, V extends Value>(\n props: Optional<ChipSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element {\n const firstRender = useRef(true);\n const { fieldProps } = usePresentationContext();\n const {\n label,\n value,\n disabled = false,\n placeholder = \"Select an option\",\n options,\n onSelect,\n getOptionValue = defaultOptionValue, // if unset, assume O implements HasId\n getOptionLabel = defaultOptionLabel, // if unset, assume O implements HasName\n onFocus,\n onBlur,\n clearable = false,\n onCreateNew,\n } = props;\n const tid = useTestIds(props, \"chipSelectField\");\n const typeScale = fieldProps?.typeScale ?? \"sm\";\n const isDisabled = !!disabled;\n const showClearButton = !disabled && clearable && !!value;\n const chipStyles = useMemo(() => Css[typeScale].tal.bgGray300.gray900.br16.pxPx(10).pyPx(2).$, [typeScale]);\n // Controls showing the focus border styles.\n const [visualFocus, setVisualFocus] = useState(false);\n const [isClearFocused, setIsClearFocused] = useState(false);\n const { focusProps } = useFocus({\n onFocus: (e) => {\n // Do not call `onFocus` if focus was returned to the trigger element from the Popover\n if (popoverRef.current && popoverRef.current.contains(e.relatedTarget as HTMLElement)) {\n return;\n }\n\n maybeCall(onFocus);\n },\n onBlur: (e) => {\n // Do not call onBlur if focus moved to within the Popover\n if ((popoverRef.current && popoverRef.current.contains(e.relatedTarget as HTMLElement)) || showInput) {\n return;\n }\n\n maybeCall(onBlur);\n },\n // Do not change visual focus state if select menu is opened\n onFocusChange: (isFocused) => !state.isOpen && setVisualFocus(isFocused),\n });\n const { focusProps: clearFocusProps } = useFocus({ onFocusChange: setIsClearFocused });\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const listBoxRef = useRef(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Using `ListData` in order to dynamically update the items\n const listData = useListData<O | ListBoxSection<O>>({\n initialItems: !onCreateNew\n ? options\n : [\n { title: \"Options\", options },\n { title: \"Actions\", isPersistent: true, options: [createNewOpt as unknown as O] },\n ],\n initialSelectedKeys: [valueToKey(value)],\n getKey: (item) => (isListBoxSection(item) ? item.title : getOptionValue(item)),\n });\n\n useEffect(\n () => {\n // Avoid unnecessary update of `options` on first render. We define the initial set of items based on the options in the `useListData` hook.\n if (!firstRender.current) {\n if (onCreateNew) {\n // if we have the options in a section, update that section\n listData.update(\"Options\", { title: \"Options\", options });\n } else {\n // otherwise, reset the list completely. We could traverse through the list and update/add/remove when needed, though this is simpler for now.\n listData.remove(...state.collection.getKeys());\n listData.append(...options);\n }\n }\n firstRender.current = false;\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options],\n );\n\n const selectChildren = useMemo(\n () =>\n listData.items.map((s) => {\n if (isListBoxSection(s)) {\n return (\n <Section key={camelCase(s.title)} title={s.title} items={s.options}>\n {(item) => {\n if (isPersistentItem(item)) {\n return (\n <Item key={item.id} textValue={item.name}>\n {item.name}\n </Item>\n );\n }\n\n const label = getOptionLabel(item);\n return (\n <Item key={getOptionValue(item)} textValue={label}>\n <ListBoxChip label={label} />\n </Item>\n );\n }}\n </Section>\n );\n }\n\n const label = getOptionLabel(s);\n return (\n <Item key={getOptionValue(s)} textValue={label}>\n <ListBoxChip label={label} />\n </Item>\n );\n }),\n [listData.items, getOptionLabel, getOptionValue],\n );\n\n const selectHookProps = {\n label,\n isDisabled,\n items: listData.items,\n children: selectChildren,\n autoFocus: true,\n disallowEmptySelection: false,\n };\n\n const state = useSelectState<any>({\n ...selectHookProps,\n selectedKey: valueToKey(value),\n onSelectionChange: (key) => {\n if (key === createNewOpt.id) {\n setShowInput(true);\n return;\n }\n const selectedItem = options.find((o) => getOptionValue(o) === key);\n if (selectedItem) {\n onSelect(key as V, selectedItem);\n }\n // Per UX, we do not want to show visual focus upon selection change.\n setVisualFocus(false);\n },\n onOpenChange: (isOpen) => {\n if (!isOpen) {\n // When closing, reset the focus to the button element. This is to retain \"tab position\" in the document, allowing hte user to hit \"Tab\" and move to the next tabbable element.\n // If the menu closed due to a user selecting an option, then the field will not visually appear focused.\n buttonRef.current?.focus();\n } else {\n // If opened, set visual focus to true. It is possible to be in a state where the browser focus is on this element, but we are not \"visually\" focused (see `onSelectionChange`). If the user opens the menu again, we should trigger the visual focus.\n setVisualFocus(true);\n }\n },\n });\n\n const { labelProps, triggerProps, valueProps, menuProps } = useSelect(selectHookProps, state, buttonRef);\n\n const { buttonProps } = useButton({ ...triggerProps, isDisabled }, buttonRef);\n const { overlayProps } = useOverlayPosition({\n targetRef: buttonRef,\n overlayRef: popoverRef,\n scrollRef: listBoxRef,\n shouldFlip: true,\n isOpen: state.isOpen,\n onClose: state.close,\n placement: \"bottom left\",\n offset: 8,\n });\n\n overlayProps.style = {\n ...overlayProps.style,\n width: wrapperRef?.current?.clientWidth,\n // Ensures the menu never gets too small.\n minWidth: 200,\n };\n\n // State management for the \"Create new\" flow with ChipTextField.\n const [showInput, setShowInput] = useState(false);\n\n return (\n <>\n {showInput && onCreateNew && (\n <CreateNewField\n onBlur={() => setShowInput(false)}\n onEnter={async (value) => {\n await onCreateNew(value);\n setShowInput(false);\n }}\n {...tid.createNewField}\n />\n )}\n {maybeTooltip({\n title: resolveTooltip(disabled),\n placement: \"top\",\n children: (\n <div\n ref={wrapperRef}\n css={{\n ...chipStyles,\n ...Css.dif.relative.p0.mwPx(32).if(!value).bgGray200.$,\n ...(visualFocus ? Css.bshFocus.$ : {}),\n ...(showInput ? Css.dn.$ : {}),\n }}\n >\n <Label label={label} labelProps={labelProps} hidden {...tid.label} />\n <button\n {...mergeProps(focusProps, buttonProps)}\n ref={buttonRef}\n css={{\n ...Css.tal.br16.pxPx(10).pyPx(2).outline0.if(showClearButton).prPx(4).borderRadius(\"16px 0 0 16px\").$,\n ...(isDisabled ? Css.cursorNotAllowed.gray700.$ : {}),\n \"&:hover:not(:disabled)\": Css.bgGray400.if(!value).bgGray300.$,\n }}\n title={state.selectedItem ? state.selectedItem.textValue : placeholder}\n {...tid}\n >\n <span {...valueProps} css={Css.lineClamp1.wbba.$}>\n {state.selectedItem ? state.selectedItem.textValue : placeholder}\n </span>\n </button>\n {showClearButton && (\n <button\n {...clearFocusProps}\n css={{\n ...Css.prPx(4).borderRadius(\"0 16px 16px 0\").outline0.$,\n \"&:hover\": Css.bgGray400.$,\n ...(isClearFocused ? Css.boxShadow(`0px 0px 0px 2px rgba(3,105,161,1)`).$ : {}),\n }}\n onClick={() => {\n onSelect(undefined as any, undefined as any);\n setIsClearFocused(false);\n }}\n aria-label=\"Remove\"\n {...tid.clearButton}\n >\n <Icon icon=\"x\" inc={typeScale === \"xs\" ? 2 : undefined} />\n </button>\n )}\n </div>\n ),\n })}\n {state.isOpen && (\n <Popover\n triggerRef={buttonRef}\n popoverRef={popoverRef}\n positionProps={overlayProps}\n onClose={state.close}\n isOpen={state.isOpen}\n shouldCloseOnBlur={true}\n >\n <ListBox\n {...menuProps}\n listBoxRef={listBoxRef}\n state={state}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n positionProps={overlayProps}\n />\n </Popover>\n )}\n </>\n );\n}\n\nexport const persistentItemPrefix = \"persistentItem:\";\ntype PersistentItem = { id: string; name: string };\nconst createNewOpt = {\n id: `${persistentItemPrefix}createNew`,\n name: \"Create new\",\n};\n\nexport function isPersistentItem<T extends PersistentItem>(opt: any): opt is PersistentItem {\n return typeof opt === \"object\" && \"id\" in opt && isPersistentKey(opt.id);\n}\n\nexport function isPersistentKey(key: Key): boolean {\n return typeof key === \"string\" && key.startsWith(persistentItemPrefix);\n}\n\ntype ListBoxSection<O> = { title: string; options: O[]; isPersistent?: boolean };\nexport function isListBoxSection<O>(obj: O | ListBoxSection<O>): obj is ListBoxSection<O> {\n return obj && typeof obj === \"object\" && \"options\" in obj;\n}\n\ninterface CreateNewFieldProps {\n onBlur: VoidFunction;\n onEnter: (value: string) => void;\n}\n\n// Wrapper for the ChipTextField used in the \"Create New\" flow on ChipSelectField\nfunction CreateNewField(props: CreateNewFieldProps) {\n const { onBlur, onEnter } = props;\n const [value, setValue] = useState<string>(\"Add new\");\n const tid = useTestIds(props);\n\n return (\n <ChipTextField\n autoFocus\n label=\"Add new\"\n value={value}\n onChange={setValue}\n onEnter={() => onEnter(value)}\n onBlur={onBlur}\n {...tid}\n />\n );\n}\n","import { KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport { useFocus } from \"react-aria\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { maybeCall, useTestIds } from \"src/utils\";\n\ninterface ChipTextFieldProps {\n // Label is not visible in the component, but required for accessibility purposes\n label: string;\n // Current value of the input element\n value?: string;\n // Whether the input is required. Adds aria-required attribute\n required?: boolean;\n // Whether to call `onBlur` when the user presses the \"Escape\" key while focused on the input.\n // @default `true`\n blurOnEscape?: false;\n // Callback fired when the user changes the value of the input\n onChange: (value: string) => void;\n // Callback fired when focus removes from the input\n onBlur?: () => void;\n // Callback fired when focus is set to the input\n onFocus?: () => void;\n // Callback when the user presses the \"Enter\" key while focused on the input\n onEnter?: () => void;\n autoFocus?: boolean;\n}\n\n// A TextField styled to look like a Chip\nexport function ChipTextField(props: ChipTextFieldProps) {\n const { autoFocus, onFocus, onBlur, onEnter, onChange, required, label, value, blurOnEscape = true } = props;\n const { fieldProps } = usePresentationContext();\n // Use a ref for the value to not cause a re-render when it changes, avoiding cursor position resetting.\n const valueRef = useRef(value);\n const tid = useTestIds(props, \"chipField\");\n const [isFocused, setIsFocused] = useState(false);\n const { focusProps } = useFocus({\n onFocus: (e) => {\n if (fieldRef.current) {\n // The range/selection logic is to select the text within the field on focus\n const range = document.createRange();\n range.selectNodeContents(fieldRef.current);\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n maybeCall(onFocus);\n },\n onBlur: () => maybeCall(onBlur),\n onFocusChange: setIsFocused,\n });\n\n const fieldRef = useRef<HTMLSpanElement>(null);\n const typeScale = fieldProps?.typeScale ?? \"sm\";\n\n useEffect(\n () => {\n autoFocus && fieldRef.current?.focus();\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // React doesn't like contentEditable because it takes the children of the node out of React's scope. This is fine in this case as it is just a text value and we are managing it.\n return (\n <span\n ref={fieldRef}\n contentEditable\n suppressContentEditableWarning={true}\n aria-required={required}\n aria-label={label}\n onKeyDown={(e: KeyboardEvent<HTMLElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n maybeCall(onEnter);\n } else if (blurOnEscape && e.key === \"Escape\") {\n (e.target as HTMLElement).blur();\n }\n }}\n onInput={(e: KeyboardEvent<HTMLElement>) => {\n const target = e.target as HTMLElement;\n if (\"inputType\" in e.nativeEvent && e.nativeEvent.inputType === \"insertFromPaste\") {\n // Clean up any formatting from pasted text\n target.innerHTML = target.textContent?.replace(/[A\\n\\r]/g, \" \") ?? \"\";\n }\n onChange(target.textContent ?? \"\");\n }}\n {...focusProps}\n css={{\n ...Css[typeScale].dib.br16.pl1.pxPx(10).pyPx(2).gray900.bgGray300.outline0.mwPx(32).$,\n ...(isFocused ? Css.bshFocus.$ : {}),\n }}\n {...tid}\n >\n {valueRef.current}\n </span>\n );\n}\n","import { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\n\ninterface ListBoxChipProps {\n label: string;\n}\n\nexport function ListBoxChip({ label }: ListBoxChipProps) {\n const { fieldProps } = usePresentationContext();\n\n return (\n <span\n css={Css[fieldProps?.typeScale ?? \"sm\"].tal.bgGray300.gray900.br16.pxPx(10).pyPx(2).lineClamp1.wbba.$}\n title={label}\n >\n {label}\n </span>\n );\n}\n","import { Key } from \"react\";\n\n/**\n * The values we support in select fields.\n *\n * react-aria's selectionManager is really picky about only knowing about\n * `string`s or `number`s (basically `Key` from react) for what it can track\n * as \"is currently selected\".\n *\n * This is pretty constricting, so we loosen this to be a few more primitives\n * that we can deterministically convert back/forth.\n *\n * TODO: ...could we just use the option index value as the key, and call that\n * good? I.e. selection state would just be \"these indexes are currently selected\".\n */\nexport type Value = string | number | null | undefined | boolean;\n\nexport function keyToValue<V extends Value>(key: Key): V {\n if (typeof key === \"number\") {\n // react-aria's selection manager always returns strings, so we probably\n // won't actually hit this line, but just in case.\n return key as V;\n } else if (typeof key === \"string\") {\n if (key === \"__VALUE:null\") {\n return null as V;\n } else if (key === \"__VALUE:undefined\") {\n return undefined as V;\n } else if (key.startsWith(\"__VALUE:boolean:\")) {\n return (key.split(\":\")[2] === \"true\") as V;\n } else if (key.startsWith(\"__VALUE:number\")) {\n return Number(key.split(\":\")[2]) as V;\n } else {\n return key as V;\n }\n } else {\n throw new Error(`Unsupported key ${key}`);\n }\n}\n\nexport function valueToKey(value: Value): string {\n if (typeof value === \"string\") {\n return value;\n } else if (typeof value === \"number\") {\n // Despite using the Key type, react-aria's select manager always returns strings,\n // so tag this value as really being a number.\n return `__VALUE:number:${value}`;\n } else if (typeof value === \"boolean\") {\n return `__VALUE:boolean:${value}`;\n } else if (value === null) {\n return \"__VALUE:null\";\n } else if (value === undefined) {\n return \"__VALUE:undefined\";\n } else {\n throw new Error(`Unsupported value ${value}`);\n }\n}\n","import { fail } from \"src/utils\";\n\n// This `any` is currently on purpose to ignore type errors in ChipSelectField\nexport function defaultOptionValue<O>(opt: O): any {\n if (typeof opt !== \"object\" || !opt) fail(`Option ${opt} has no id or code`);\n // Use `in` because returning undefined is fine\n return \"id\" in opt ? opt.id : \"code\" in opt ? opt.code : fail(`Option ${JSON.stringify(opt)} has no id or code`);\n}\n\nexport function defaultOptionLabel<O>(opt: O): any {\n if (typeof opt !== \"object\" || !opt) fail(`Option ${opt} has no id or code`);\n // Use `in` because returning undefined is fine\n return \"name\" in opt\n ? opt.name\n : \"displayName\" in opt\n ? opt.displayName\n : \"label\" in opt\n ? opt.label\n : fail(`Option ${JSON.stringify(opt)} has no displayName, label, or name`);\n}\n","import { Node } from \"@react-types/shared\";\nimport { useEffect, useRef } from \"react\";\nimport { SelectState } from \"react-stately\";\nimport { Virtuoso, VirtuosoHandle } from \"react-virtuoso\";\nimport { LoadingDots } from \"src/inputs/internal/LoadingDots\";\nimport { Option } from \"src/inputs/internal/Option\";\nimport { TreeOption } from \"src/inputs/TreeSelectField/TreeOption\";\nimport { isLeveledNode, LeveledOption } from \"src/inputs/TreeSelectField/utils\";\n\ninterface VirtualizedOptionsProps<O> {\n state: SelectState<O>;\n items: Node<O>[] | Node<LeveledOption<O>>[];\n onListHeightChange: (height: number) => void;\n contrast: boolean;\n // Whether we should auto-scroll to the item in focus. Should only be used when Options are using \"virtual focus\". Should not be used if focus is triggered on clicking an element.\n scrollOnFocus?: boolean;\n // Adds 'Loading' footer to the list\n loading?: boolean | (() => JSX.Element);\n disabledOptionsWithReasons: Record<string, string | undefined>;\n isTree?: boolean;\n allowCollapsing?: boolean;\n}\n\n// Displays ListBox options in a virtualized container for performance reasons\nexport function VirtualizedOptions<O>(props: VirtualizedOptionsProps<O>) {\n const {\n state,\n items,\n onListHeightChange,\n contrast,\n scrollOnFocus,\n loading,\n disabledOptionsWithReasons,\n isTree,\n allowCollapsing,\n } = props;\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const focusedItem = state.collection.getItem(state.selectionManager.focusedKey);\n const selectedItem =\n state.selectionManager.selectedKeys.size > 0\n ? state.collection.getItem([...state.selectionManager.selectedKeys.values()][0])\n : undefined;\n\n // Handle scrolling to the item in focus when navigating options via Keyboard - this should only be applied when using a \"virtual focus\", such as a ComboBox where the browser's focus remains in the <input /> element.\n useEffect(\n () => {\n if (scrollOnFocus && virtuosoRef.current && focusedItem?.index) {\n virtuosoRef.current.scrollToIndex({ index: focusedItem.index, align: \"center\" });\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [focusedItem],\n );\n\n return (\n <Virtuoso\n ref={virtuosoRef}\n key={items.length}\n totalListHeightChanged={onListHeightChange}\n totalCount={items.length}\n {...(process.env.NODE_ENV === \"test\"\n ? {\n // We don't really need to set this, but it's handy for tests, which would\n // otherwise render just 1 row. A better way to do this would be to jest.mock\n // out Virtuoso with an impl that just rendered everything, but doing this for now.\n initialItemCount: items.length,\n }\n : {\n // Ensure the selected item is visible when the list renders\n // This seems to break tests, so only add in the non-test environment.\n initialTopMostItemIndex: selectedItem ? selectedItem.index : 0,\n })}\n itemContent={(idx) => {\n const item = items[idx];\n if (item) {\n if (isTree && isLeveledNode(item)) {\n return (\n <TreeOption\n key={item.key}\n item={item}\n state={state}\n contrast={contrast}\n // scrollToIndex={scrollOnFocus ? undefined : virtuosoRef.current?.scrollToIndex}\n allowCollapsing={allowCollapsing}\n />\n );\n }\n if (!isLeveledNode(item)) {\n return (\n <Option\n key={item.key}\n item={item}\n state={state}\n contrast={contrast}\n // Only send scrollToIndex functionality forward if we are not auto-scrolling on focus.\n scrollToIndex={scrollOnFocus ? undefined : virtuosoRef.current?.scrollToIndex}\n disabledReason={disabledOptionsWithReasons[item.key]}\n />\n );\n }\n }\n }}\n components={\n !loading\n ? {}\n : {\n Footer: typeof loading === \"function\" ? loading : () => <LoadingDots contrast={contrast} />,\n }\n }\n />\n );\n}\n","import { Css, Palette } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\nexport function LoadingDots({ contrast }: { contrast: boolean }) {\n const circleCss = Css.hPx(8)\n .wPx(8)\n .br4.bgColor(contrast ? Palette.Gray500 : Palette.Gray300)\n .add(\"animationName\", contrast ? \"loadingDotsContrast\" : \"loadingDots\")\n .add(\"animationDuration\", \"800ms\")\n .add(\"animationIterationCount\", \"infinite\")\n .add(\"animationTimingFunction\", \"linear\")\n .add(\"animationDirection\", \"alternate\").$;\n const tid = useTestIds({});\n\n return (\n <div css={Css.py2.df.jcc.$} {...tid.loadingDots}>\n <div\n aria-label=\"Loading\"\n css={{\n ...circleCss,\n ...Css.relative\n .add(\"animationDelay\", \"300ms\")\n\n .addIn(\"&:before, &:after\", {\n ...circleCss,\n ...Css.add(\"content\", \"' '\").absolute.dib.$,\n })\n .addIn(\"&:before\", Css.leftPx(-12).add(\"animationDelay\", \"0\").$)\n .addIn(\"&:after\", Css.rightPx(-12).add(\"animationDelay\", \"600ms\").$).$,\n }}\n />\n </div>\n );\n}\n","import { Node } from \"@react-types/shared\";\nimport { useRef } from \"react\";\nimport { useHover, useOption } from \"react-aria\";\nimport { ListState } from \"react-stately\";\nimport { Icon } from \"src/components\";\nimport { Css, Palette } from \"src/Css\";\nimport { StyledCheckbox } from \"src/inputs/CheckboxBase\";\nimport { useTreeSelectFieldProvider } from \"src/inputs/TreeSelectField/TreeSelectField\";\nimport { LeveledOption, NestedOption } from \"src/inputs/TreeSelectField/utils\";\nimport { Value, valueToKey } from \"src/inputs/Value\";\nimport { useTestIds } from \"src/utils\";\n\ninterface TreeOptionProps<O> {\n item: Node<LeveledOption<O>>;\n state: ListState<O>;\n contrast?: boolean;\n allowCollapsing?: boolean;\n}\n/** Represents a single option within a ListBox - used by SelectField, MultiSelectField, and TreeSelectField */\nexport function TreeOption<O>(props: TreeOptionProps<O>) {\n const { item, state, contrast = false, allowCollapsing = true } = props;\n const leveledOption = item.value;\n if (!leveledOption) return null;\n\n const [option, level]: [NestedOption<O>, number] = leveledOption;\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const ref = useRef<HTMLElement>(null);\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { hoverProps, isHovered } = useHover({});\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const tid = useTestIds(props, \"treeOption\");\n\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { collapsedKeys, setCollapsedKeys, getOptionValue } = useTreeSelectFieldProvider<O, Value>();\n\n // TODO: validate this eslint-disable with https://app.shortcut.com/homebound-team/story/40045\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { optionProps, isDisabled, isFocused, isSelected } = useOption(\n { key: item.key, shouldSelectOnPressUp: true, shouldFocusOnHover: false },\n state,\n ref,\n );\n\n // If this item is not selected, then determine if some of its children are selected to show the indeterminate state.\n // Note: If `isSelected` will be true if all of the children were selected. That auto-parent-selection happens in the `onSelect` callback in TreeSelectField.\n const isIndeterminate = !isSelected && option.children?.some((o) => hasSelectedChildren(o, state, getOptionValue));\n\n const listItemStyles = {\n item: Css.gray900.if(contrast).white.$,\n hover: Css.bgGray100.if(contrast).bgGray600.$,\n disabled: Css.cursorNotAllowed.gray400.if(contrast).gray500.$,\n focus: Css.add(\"boxShadow\", `inset 0 0 0 1px ${!contrast ? Palette.Blue700 : Palette.Blue500}`).$,\n };\n\n return (\n <li\n {...hoverProps}\n css={{\n ...Css.df.aic.jcsb.gap1.pl2.mh(\"42px\").outline0.cursorPointer.sm.plPx(16 + level * 8).$,\n ...listItemStyles.item,\n ...(isHovered && !isDisabled ? listItemStyles.hover : {}),\n ...(isFocused ? listItemStyles.focus : {}),\n ...(isDisabled ? listItemStyles.disabled : {}),\n }}\n >\n {allowCollapsing && (\n <span css={Css.wPx(18).fs0.df.aic.$}>\n {option.children && option.children?.length > 0 && (\n <button\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setCollapsedKeys((prevKeys) =>\n collapsedKeys.includes(item.key) ? prevKeys.filter((k) => k !== item.key) : [...prevKeys, item.key],\n );\n return false;\n }}\n css={Css.br4.hPx(16).wPx(16).bgTransparent.onHover.bgGray300.$}\n {...tid[`collapseToggle_${item.key}`]}\n >\n <Icon icon={collapsedKeys.includes(item.key) ? \"triangleRight\" : \"triangleDown\"} inc={2} />\n </button>\n )}\n </span>\n )}\n <span css={Css.df.aic.gap1.h100.fg1.py1.pr2.$} ref={ref} {...optionProps} data-label={item.textValue}>\n <StyledCheckbox\n isDisabled={isDisabled}\n isSelected={isSelected}\n isIndeterminate={isIndeterminate}\n {...tid[item.key.toString()]}\n />\n <div css={Css.pl1.$}>{item.rendered}</div>\n </span>\n </li>\n );\n}\n\nfunction hasSelectedChildren<O, V extends Value>(\n childOption: NestedOption<O>,\n state: ListState<O>,\n getOptionValue: (o: O) => V,\n): boolean {\n if (childOption.children && childOption.children.length > 0) {\n return childOption.children.some((child) => hasSelectedChildren(child, state, getOptionValue));\n }\n return state.selectionManager.isSelected(valueToKey(getOptionValue(childOption)));\n}\n","import { InputHTMLAttributes, ReactNode, useRef } from \"react\";\nimport { mergeProps, useFocusRing, useHover, VisuallyHidden } from \"react-aria\";\nimport { HelperText } from \"src/components/HelperText\";\nimport { Css, Palette, px } from \"src/Css\";\nimport { ErrorMessage } from \"src/inputs/ErrorMessage\";\nimport { BeamFocusableProps } from \"src/interfaces\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface CheckboxAriaProps {\n description?: string | undefined;\n onChange?: (selected: boolean) => void;\n autoFocus?: boolean | undefined;\n isSelected: boolean | undefined;\n isDisabled: boolean;\n isIndeterminate: boolean;\n}\nexport interface CheckboxBaseProps extends BeamFocusableProps {\n ariaProps: CheckboxAriaProps;\n description?: string;\n isDisabled?: boolean;\n isIndeterminate?: boolean;\n inputProps: InputHTMLAttributes<HTMLInputElement>;\n isSelected?: boolean;\n label: string;\n checkboxOnly?: boolean;\n errorMsg?: string;\n helperText?: string | ReactNode;\n /** If false this will be wrap in a div element instead of the label\n * Expects implementer to wrap within a label element to work properly\n * @default true\n */\n withLabelElement?: boolean;\n}\n\nexport function CheckboxBase(props: CheckboxBaseProps) {\n const {\n ariaProps,\n description,\n isDisabled = false,\n isIndeterminate = false,\n inputProps,\n label,\n errorMsg,\n helperText,\n checkboxOnly = false,\n withLabelElement = true,\n } = props;\n const ref = useRef(null);\n const { isFocusVisible, focusProps } = useFocusRing(ariaProps);\n const tid = useTestIds(props, defaultTestId(label));\n\n const Tag = withLabelElement ? \"label\" : \"div\";\n\n return (\n <Tag\n css={\n Css.df.cursorPointer.relative\n // Prevents accidental checkbox clicks due to label width being longer\n // than the content.\n .w(\"max-content\")\n .maxw(px(320))\n .if(description !== undefined)\n .maxw(px(344))\n .if(isDisabled).cursorNotAllowed.$\n }\n aria-label={label}\n >\n <VisuallyHidden>\n <input ref={ref} {...mergeProps(inputProps, focusProps)} {...tid} data-indeterminate={isIndeterminate} />\n </VisuallyHidden>\n <StyledCheckbox {...props} isFocusVisible={isFocusVisible} {...tid} />\n {!checkboxOnly && (\n // Use a mtPx(-2) to better align the label with the checkbox.\n // Not using align-items: center as the checkbox would align with all content below, where we really want it to stay only aligned with the label\n <div css={Css.ml1.mtPx(-2).$}>\n {label && <div css={{ ...labelStyles, ...(isDisabled && disabledColor) }}>{label}</div>}\n {description && <div css={{ ...descStyles, ...(isDisabled && disabledColor) }}>{description}</div>}\n {errorMsg && <ErrorMessage errorMsg={errorMsg} {...tid.errorMsg} />}\n {helperText && <HelperText helperText={helperText} {...tid.helperText} />}\n </div>\n )}\n </Tag>\n );\n}\n\nconst baseStyles = Css.hPx(16).mw(px(16)).relative.ba.bcGray300.br4.bgWhite.transition.$;\nconst filledBoxStyles = Css.bcBlue700.bgBlue700.$;\nconst filledBoxHoverStyles = Css.bgBlue900.$;\nconst disabledBoxStyles = Css.bgGray50.bcGray100.$;\nconst disabledSelectedBoxStyles = Css.bgGray400.bcGray400.$;\nconst disabledColor = Css.gray300.$;\nconst focusRingStyles = Css.bshFocus.$;\nconst hoverBorderStyles = Css.bcBlue900.$;\nconst markStyles = { \">svg\": Css.absolute.topPx(-1).leftPx(-1).$ };\nconst labelStyles = Css.smMd.$;\nconst descStyles = Css.sm.gray700.$;\n\ninterface StyledCheckboxProps {\n isDisabled?: boolean;\n isIndeterminate?: boolean;\n isSelected?: boolean;\n isFocusVisible?: boolean;\n}\n\nexport function StyledCheckbox(props: StyledCheckboxProps) {\n const { isDisabled = false, isIndeterminate = false, isSelected, isFocusVisible } = props;\n const { hoverProps, isHovered } = useHover({ isDisabled });\n const markIcon = isIndeterminate ? dashSmall : isSelected ? checkmarkSmall : \"\";\n const tid = useTestIds(props);\n return (\n <span\n {...hoverProps}\n css={{\n ...baseStyles,\n ...(((isSelected && !isDisabled) || isIndeterminate) && filledBoxStyles),\n ...(((isSelected && !isDisabled) || isIndeterminate) && isHovered && filledBoxHoverStyles),\n ...(isDisabled && disabledBoxStyles),\n ...(isDisabled && isSelected && disabledSelectedBoxStyles),\n ...(isFocusVisible && focusRingStyles),\n ...(isHovered && hoverBorderStyles),\n ...markStyles,\n }}\n aria-hidden=\"true\"\n data-checked={isSelected ? true : isIndeterminate ? \"mixed\" : false}\n {...tid.checkbox}\n >\n {markIcon}\n </span>\n );\n}\n\nconst checkmarkSmall = (\n <svg width=\"16\" height=\"16\">\n <path\n d=\"M6.66669 10.3907L4.47135 8.19533L3.52869 9.138L6.66669 12.276L13.138 5.80467L12.1954 4.862L6.66669 10.3907Z\"\n fill={Palette.White}\n />\n </svg>\n);\n\nconst dashSmall = (\n <svg width=\"16\" height=\"16\">\n <rect x=\"4\" y=\"7.5\" width=\"8\" height=\"1.35\" fill={Palette.White} />\n </svg>\n);\n","import { Node } from \"@react-types/shared\";\nimport { Key } from \"react\";\nimport { Value } from \"src/inputs/Value\";\n\ntype FoundOption<O> = { option: NestedOption<O>; parents: NestedOption<O>[] };\nexport type NestedOption<O> = O & { children?: NestedOption<O>[]; defaultCollapsed?: boolean };\nexport type NestedOptionsOrLoad<O> =\n | NestedOption<O>[]\n | { current: NestedOption<O>[]; load: () => Promise<{ options: NestedOption<O>[] }> };\nexport type LeveledOption<O> = [NestedOption<O>, number];\n\nexport type TreeFieldState<O> = {\n inputValue: string;\n filteredOptions: LeveledOption<O>[];\n selectedKeys: Key[];\n selectedOptions: NestedOption<O>[];\n /** These are the labels of the top-level selected values\n * (e.g. [\"d1c1\", \"d1c1p1\", \"d2c2p1\"] will be [\"d1c1\", \"d2c2p1\"]).\n */\n selectedOptionsLabels: string[];\n allOptions: NestedOption<O>[];\n optionsLoading: boolean;\n allowCollapsing: boolean;\n};\n\nexport type TreeSelectResponse<O, V extends Value> = {\n all: { values: V[]; options: O[] };\n leaf: { values: V[]; options: O[] };\n root: { values: V[]; options: O[] };\n};\n\n/** Finds first option by Key, and returns it + any parents. */\nexport function findOption<O, V extends Value>(\n options: NestedOption<O>[],\n key: Key,\n getOptionValue: (o: O) => V,\n): FoundOption<O> | undefined {\n // This is technically an array of \"maybe FoundOption\"\n const todo: FoundOption<O>[] = options.map((option) => ({ option, parents: [] }));\n while (todo.length > 0) {\n const curr = todo.pop()!;\n if (getOptionValue(curr.option) === key) {\n return curr;\n } else if (curr.option.children) {\n // Search our children and pass along us as the parent\n todo.push(...curr.option.children.map((option) => ({ option, parents: [...curr.parents, curr.option] })));\n }\n }\n return undefined;\n}\n\n/** Finds all options by Key, and returns it + any parents. */\nexport function findOptions<O, V extends Value>(\n options: NestedOption<O>[],\n key: Key,\n getOptionValue: (o: O) => V,\n): FoundOption<O>[] {\n // This is technically an array of \"maybe FoundOption\"\n const todo: FoundOption<O>[] = options.map((option) => ({ option, parents: [] }));\n const found = [];\n while (todo.length > 0) {\n const curr = todo.pop()!;\n if (getOptionValue(curr.option) === key) {\n found.push(curr);\n } else if (curr.option.children) {\n // Search our children and pass along us as the parent\n todo.push(...curr.option.children.map((option) => ({ option, parents: [...curr.parents, curr.option] })));\n }\n }\n return found;\n}\n\nexport function flattenOptions<O>(o: NestedOption<O>): NestedOption<O>[] {\n return [o, ...(o.children?.length ? o.children.flatMap((oc: NestedOption<O>) => flattenOptions(oc)) : [])];\n}\n\nexport function isLeveledOption<O>(option: LeveledOption<O> | any): option is LeveledOption<O> {\n return Array.isArray(option) && option.length === 2 && typeof option[1] === \"number\";\n}\n\nexport function isLeveledNode<O>(node: Node<O> | Node<LeveledOption<O>>): node is Node<LeveledOption<O>> {\n return isLeveledOption(node.value);\n}\n","import { Key } from \"react\";\nimport { SelectState } from \"react-stately\";\nimport { ToggleChip } from \"src/components\";\nimport { Css } from \"src/Css\";\n\ninterface ListBoxToggleChipProps<O, V extends Key> {\n state: SelectState<O>;\n option: O;\n getOptionLabel: (opt: O) => string;\n getOptionValue: (opt: O) => V;\n disabled?: boolean;\n}\n\n/** Chip used to display selections within ListBox when using the MultiSelectField */\nexport function ListBoxToggleChip<O, V extends Key>(props: ListBoxToggleChipProps<O, V>) {\n const { state, option, getOptionLabel, getOptionValue, disabled = false } = props;\n return (\n <li css={Css.mr1.mb1.$}>\n <ToggleChip\n text={getOptionLabel(option)}\n onClick={() => {\n state.selectionManager.toggleSelection(String(getOptionValue(option)));\n }}\n disabled={disabled}\n />\n </li>\n );\n}\n","import { ReactNode, useRef } from \"react\";\nimport { useCheckbox } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { CheckboxBase } from \"src/inputs/CheckboxBase\";\n\nexport interface CheckboxProps {\n label: string;\n /** If false this will be wrap in a div element instead of the label\n * Expects implementer to wrap within a label element to work properly\n * @default true\n */\n withLabelElement?: boolean;\n checkboxOnly?: boolean;\n selected: boolean | \"indeterminate\";\n /** Handler that is called when the element's selection state changes. */\n onChange: (selected: boolean) => void;\n /** Additional text displayed below label */\n description?: string;\n disabled?: boolean;\n errorMsg?: string;\n helperText?: string | ReactNode;\n /** Callback fired when focus removes from the component */\n onBlur?: () => void;\n /** Callback fired when focus is set to the component */\n onFocus?: () => void;\n}\n\nexport function Checkbox(props: CheckboxProps) {\n const { label, disabled: isDisabled = false, selected, ...otherProps } = props;\n // Treat indeterminate as false so that clicking on indeterminate always goes --> true.\n const isSelected = selected === true;\n const isIndeterminate = selected === \"indeterminate\";\n const ariaProps = { isSelected, isDisabled, isIndeterminate, ...otherProps };\n const checkboxProps = { ...ariaProps, \"aria-label\": label };\n const ref = useRef(null);\n const toggleState = useToggleState(ariaProps);\n const { inputProps } = useCheckbox(checkboxProps, toggleState, ref);\n\n return (\n <CheckboxBase\n ariaProps={ariaProps}\n isDisabled={isDisabled}\n isIndeterminate={isIndeterminate}\n isSelected={isSelected}\n inputProps={inputProps}\n label={label}\n {...otherProps}\n />\n );\n}\n","import { ReactNode, useRef } from \"react\";\nimport { useCheckboxGroup, useCheckboxGroupItem } from \"react-aria\";\nimport { CheckboxGroupState, useCheckboxGroupState } from \"react-stately\";\nimport { HelperText } from \"src/components/HelperText\";\nimport { Label } from \"src/components/Label\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { CheckboxBase } from \"src/inputs/CheckboxBase\";\nimport { ErrorMessage } from \"src/inputs/ErrorMessage\";\nimport { useTestIds } from \"src/utils\";\n\nexport interface CheckboxGroupItemOption {\n /** Additional text displayed below label */\n description?: string;\n disabled?: boolean;\n label: string;\n /** The value of the CheckboxGroup item, stored in value array in state. */\n value: string;\n}\n\nexport interface CheckboxGroupProps extends Pick<PresentationFieldProps, \"labelStyle\"> {\n label: string;\n /** Called when a checkbox is selected or deselected */\n onChange: (values: string[]) => void;\n /** Options for the checkboxes contained within the CheckboxGroup. */\n options: CheckboxGroupItemOption[];\n /** The values currently selected. */\n values: string[];\n errorMsg?: string;\n helperText?: string | ReactNode;\n /** Called when the component loses focus */\n onBlur?: () => void;\n /** Called when the component is in focus */\n onFocus?: () => void;\n /** Number of columns to display checkboxes */\n columns?: number;\n}\n\nexport function CheckboxGroup(props: CheckboxGroupProps) {\n const { fieldProps } = usePresentationContext();\n const {\n options,\n label,\n labelStyle = fieldProps?.labelStyle ?? \"above\",\n values,\n errorMsg,\n helperText,\n onBlur,\n onFocus,\n columns = 1,\n } = props;\n\n const state = useCheckboxGroupState({ ...props, value: values });\n const { groupProps, labelProps } = useCheckboxGroup(props, state);\n const tid = useTestIds(props);\n\n return (\n <div {...groupProps} css={Css.if(labelStyle === \"left\").df.fdr.$} onBlur={onBlur} onFocus={onFocus} {...tid}>\n {labelStyle !== \"hidden\" && (\n <div css={Css.if(labelStyle === \"left\").w50.$}>\n <Label label={label} {...labelProps} {...tid.label} />\n </div>\n )}\n <div css={Css.dg.gtc(`repeat(${columns}, auto)`).gap2.$}>\n {options.map((option) => (\n <CheckboxGroupItem\n key={option.value}\n {...option}\n groupState={state}\n selected={state.value.includes(option.value)}\n />\n ))}\n </div>\n {errorMsg && <ErrorMessage errorMsg={errorMsg} {...tid.errorMsg} />}\n {helperText && <HelperText helperText={helperText} {...tid.helperText} />}\n </div>\n );\n}\n\ninterface CheckboxGroupItemProps {\n /** Additional text displayed below label */\n description?: string;\n disabled?: boolean;\n /**\n * Indeterminism is presentational only.\n * The indeterminate visual representation remains regardless of user interaction.\n */\n indeterminate?: boolean;\n selected: boolean;\n label: string;\n value: string;\n groupState: CheckboxGroupState;\n}\n\nfunction CheckboxGroupItem(props: CheckboxGroupItemProps) {\n const {\n label,\n indeterminate: isIndeterminate = false,\n disabled: isDisabled = false,\n description,\n selected: isSelected,\n groupState,\n value = \"\",\n ...otherProps\n } = props;\n const ariaProps = { isSelected, isDisabled, isIndeterminate, value, ...otherProps };\n const checkboxProps = { ...ariaProps, \"aria-label\": label };\n const ref = useRef(null);\n const { inputProps } = useCheckboxGroupItem(checkboxProps, groupState, ref);\n\n return (\n <CheckboxBase\n ariaProps={ariaProps}\n description={description}\n isDisabled={isDisabled}\n isIndeterminate={isIndeterminate}\n isSelected={isSelected}\n inputProps={inputProps}\n label={label}\n {...otherProps}\n />\n );\n}\n","import { format, parse } from \"date-fns\";\nimport { useState } from \"react\";\nimport { DateFieldProps } from \"src/inputs\";\nimport { maybeCall, useTestIds } from \"src/utils\";\n\n/** Mocks out `DateField` as a text `<input>` field. */\nexport function DateFieldMock(props: DateFieldProps) {\n const { onChange = () => {}, errorMsg, onBlur, onFocus } = props;\n const [value, setValue] = useState(props.value ? format(props.value, \"MM/dd/yy\") : \"\");\n const tid = useTestIds(props, \"date\");\n return (\n <input\n {...tid}\n data-error={!!errorMsg}\n value={value}\n onChange={(e) => {\n const { value } = e.target;\n setValue(value);\n onChange(parse(value, \"MM/dd/yy\", new Date()));\n }}\n onBlur={() => maybeCall(onBlur)}\n onFocus={() => maybeCall(onFocus)}\n disabled={!!props.disabled}\n readOnly={!!props.readOnly}\n data-disabled-days={JSON.stringify(props.disabledDays)}\n />\n );\n}\n","import { ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { FocusScope, useButton, useOverlayPosition, useOverlayTrigger, useTextField } from \"react-aria\";\nimport { isDateRange, Matcher } from \"react-day-picker\";\nimport { useOverlayTriggerState } from \"react-stately\";\nimport { Icon, IconButton, resolveTooltip } from \"src/components\";\nimport { DatePicker, DateRangePicker, Popover } from \"src/components/internal\";\nimport { DatePickerOverlay } from \"src/components/internal/DatePicker/DatePickerOverlay\";\nimport { Css, Palette, Properties } from \"src/Css\";\nimport {\n DateFieldMode,\n dateFormats,\n formatDate,\n formatDateRange,\n getDateFormat,\n isValidDate,\n parseDate,\n parseDateRange,\n} from \"src/inputs/DateFields/utils\";\nimport { TextFieldBase, TextFieldBaseProps } from \"src/inputs/TextFieldBase\";\nimport { DateRange } from \"src/types\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\nexport interface DateFieldBaseProps\n extends Pick<\n TextFieldBaseProps<Properties>,\n \"borderless\" | \"visuallyDisabled\" | \"labelStyle\" | \"compact\" | \"fullWidth\"\n > {\n label: string;\n /** Called when the component loses focus */\n onBlur?: () => void;\n /** Called when the component is in focus. */\n onFocus?: () => void;\n /** Whether the field is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n errorMsg?: string;\n required?: boolean;\n /** Whether the field is readOnly. If a ReactNode, it's treated as a \"readOnly reason\" that's shown in a tooltip. */\n readOnly?: boolean | ReactNode;\n helperText?: string | ReactNode;\n placeholder?: string;\n format?: keyof typeof dateFormats;\n iconLeft?: boolean;\n hideCalendarIcon?: boolean;\n /**\n * Set custom logic for individual dates or date ranges to be disabled in the picker\n * exposed from `react-day-picker`: https://react-day-picker.js.org/api/DayPicker#modifiers\n */\n disabledDays?: Matcher | Matcher[];\n onEnter?: VoidFunction;\n /** for storybook */\n defaultOpen?: boolean;\n onChange: ((value: Date | undefined) => void) | ((value: DateRange | undefined) => void);\n mode: DateFieldMode;\n /** Range filters should only allow a full DateRange or nothing */\n isRangeFilterField?: boolean;\n /** Render header that skips years in addition to months */\n useYearPicker?: boolean;\n}\n\nexport interface DateSingleFieldBaseProps extends DateFieldBaseProps {\n mode: \"single\";\n value: Date | undefined;\n onChange: (value: Date | undefined) => void;\n}\n\nexport interface DateRangeFieldBaseProps extends DateFieldBaseProps {\n mode: \"range\";\n value: DateRange | undefined;\n onChange: (value: DateRange | undefined) => void;\n}\n\nexport function DateFieldBase(props: DateRangeFieldBaseProps | DateSingleFieldBaseProps) {\n const {\n label,\n disabled,\n required,\n value,\n onFocus,\n onBlur,\n // Pull `onChange` out of the props, but we're not directly using it. Do not want to keep it in `...others`\n onChange: _onChange,\n errorMsg,\n helperText,\n readOnly,\n format = \"short\",\n iconLeft = false,\n hideCalendarIcon = false,\n disabledDays,\n onEnter,\n defaultOpen,\n mode,\n isRangeFilterField = false,\n useYearPicker = false,\n ...others\n } = props;\n\n const isRangeMode = mode === \"range\";\n const inputRef = useRef<HTMLInputElement | null>(null);\n const inputWrapRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const overlayRef = useRef<HTMLDivElement | null>(null);\n // Local focus ref used to avoid updating WIP values\n const isFocused = useRef(false);\n const dateFormat = getDateFormat(format);\n // The `wipValue` allows the \"range\" mode to set the value to `undefined`, even if the `onChange` response cannot be undefined.\n // This makes working within the DateRangePicker much more user-friendly.\n const [wipValue, setWipValue] = useState(value);\n const [inputValue, setInputValue] = useState(\n (isRangeMode ? formatDateRange(props.value, dateFormat) : formatDate(props.value, dateFormat)) ?? \"\",\n );\n const tid = useTestIds(props, defaultTestId(label));\n const isDisabled = !!disabled;\n const isReadOnly = !!readOnly;\n\n const textFieldProps = {\n ...others,\n label,\n isDisabled,\n isReadOnly,\n \"aria-haspopup\": \"dialog\" as const,\n value: inputValue,\n };\n\n const state = useOverlayTriggerState({ isOpen: defaultOpen });\n\n const { labelProps, inputProps } = useTextField(\n {\n ...textFieldProps,\n // Setting `inputMode` to none. This disables the virtual keyboard from being triggered on touch devices\n inputMode: \"none\",\n onFocus: () => {\n isFocused.current = true;\n maybeCall(onFocus);\n\n if (wipValue && dateFormat !== dateFormats.short) {\n // When focused, change to use the \"short\" date format, as it is simpler to update by hand and parse.\n setInputValue(\n (isRangeMode\n ? formatDateRange(props.value, dateFormats.short)\n : formatDate(props.value, dateFormats.short)) ?? \"\",\n );\n }\n },\n onBlur: (e) => {\n // Resets the ref variables when the input loses focus.\n isFocused.current = false;\n\n // If interacting with the overlay or the input, then assume the user is still working within the DatePicker and return early to not trigger onBlur functionality.\n if (\n (inputWrapRef.current && inputWrapRef.current.contains(e.relatedTarget as Node)) ||\n (overlayRef.current && overlayRef.current.contains(e.relatedTarget as Node))\n ) {\n return;\n }\n\n // Otherwise, if we are actually leaving the DatePicker component, then\n const parsedDate = isRangeMode\n ? parseDateRange(inputValue, dateFormats.short)\n : parseDate(inputValue, dateFormats.short);\n // If the user leaves the input and has an invalid date, reset to previous value.\n if (!isParsedDateValid(parsedDate)) {\n setWipValue(value);\n setInputValue(\n (isRangeMode ? formatDateRange(props.value, dateFormat) : formatDate(props.value, dateFormat)) ?? \"\",\n );\n } else if (dateFormat !== dateFormats.short) {\n // Or if we need to reset the dateFormat back from `short` to whatever the user specified\n setInputValue(\n (isRangeMode ? formatDateRange(props.value, dateFormat) : formatDate(props.value, dateFormat)) ?? \"\",\n );\n }\n\n // Only call `onBlur` if the DatePicker is closed, meaning the user has actually left the DateField component.\n if (!state.isOpen) {\n maybeCall(onBlur);\n }\n },\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n maybeCall(onEnter);\n inputRef.current?.blur();\n }\n },\n },\n inputRef,\n );\n const { triggerProps, overlayProps } = useOverlayTrigger({ type: \"dialog\" }, state, buttonRef);\n const { buttonProps } = useButton(\n { ...triggerProps, isDisabled: isDisabled || isReadOnly, onPress: state.open },\n buttonRef,\n );\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: inputWrapRef,\n overlayRef,\n shouldFlip: true,\n isOpen: state.isOpen,\n onClose: state.close,\n placement: \"bottom left\",\n shouldUpdatePosition: true,\n offset: 4,\n });\n\n // Handle case where the input value is updated from outside the component.\n useEffect(() => {\n // Avoid updating any WIP values.\n if (!isFocused.current && !state.isOpen) {\n setWipValue(value);\n setInputValue(\n (isRangeMode ? formatDateRange(props.value, dateFormat) : formatDate(props.value, dateFormat)) ?? \"\",\n );\n }\n // We don't want to update the internal `wipValue` or `inputValue` back to `value` just because focus state changes or the overlay opens\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, dateFormat]);\n\n // Create a type safe `onChange` to handle both Single and Range date fields.\n const onChange = useCallback(\n (d: Date | DateRange | undefined) => {\n setWipValue(d);\n if (d && isParsedDateValid(d)) {\n if (isRangeMode && isDateRange(d)) {\n props.onChange(d);\n return;\n }\n\n if (!isRangeMode && !isDateRange(d)) {\n props.onChange(d);\n return;\n }\n } else {\n props.onChange(undefined);\n return;\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isRangeMode, props.onChange],\n );\n\n // If showing the short date format, \"01/01/20\", so set size to 8. If medium (Wed, Nov 23) use 10 characters (leaving out the `,` character in the count because it is so small)\n // Otherwise the long format can be `undefined`.\n // Setting the size attribute only impacts the fields when displayed in a container that doesn't allow the field to grow to its max width, such as in an inline container.\n // TODO: figure this out... seems weird to have now that we support multiple dates formats....\n // How do other applications handle this defined sizing? Appears they use hard coded widths depending on format, which is similar here (using `size` instead of css `width`).\n // But would also need to allow for the input to be `fullWidth`, which is basically also what we're accomplishing here... so maybe fine?\n const inputSize = !isRangeMode ? (format === \"short\" ? 8 : format === \"medium\" ? 10 : undefined) : undefined;\n\n // Support input range filter field w/ a clear btn that will appear when overlay is closed and input is not focused\n const clearButton = (\n <>\n {inputValue !== \"\" && !state.isOpen && (\n <IconButton\n icon=\"xCircle\"\n color={Palette.Gray700}\n onClick={() => {\n setInputValue(\"\");\n onChange(undefined);\n }}\n />\n )}\n </>\n );\n\n const calendarButton = (\n <button\n ref={buttonRef}\n {...buttonProps}\n disabled={isDisabled}\n css={Css.if(isDisabled).cursorNotAllowed.$}\n {...tid.calendarButton}\n >\n <Icon icon=\"calendar\" color={isDisabled ? Palette.Gray400 : Palette.Gray700} />\n </button>\n );\n\n const EndFieldButtons = (\n <>\n {isRangeFilterField && clearButton}\n {!hideCalendarIcon && calendarButton}\n </>\n );\n\n return (\n <>\n <TextFieldBase\n {...textFieldProps}\n // Display focus styles while the Picker is open\n {...{ internalProps: { forceFocus: state.isOpen } }}\n errorMsg={errorMsg}\n helperText={helperText}\n required={required}\n labelProps={labelProps}\n inputProps={{ ...inputProps, size: inputSize, onClick: state.open }}\n inputRef={inputRef}\n inputWrapRef={inputWrapRef}\n onChange={(v) => {\n // hide the calendar if the user is manually entering the date\n state.close();\n if (v) {\n setInputValue(v);\n // If changing the value directly (vs using the DatePicker), then we always use the short format\n const parsed = isRangeMode ? parseDateRange(v, dateFormats.short) : parseDate(v, dateFormats.short);\n onChange(parsed);\n }\n // User has deleted all text in field\n else if (v === undefined) {\n setInputValue(\"\");\n }\n }}\n endAdornment={!iconLeft && EndFieldButtons}\n startAdornment={!hideCalendarIcon && iconLeft && calendarButton}\n tooltip={resolveTooltip(disabled, undefined, readOnly)}\n {...others}\n />\n {state.isOpen && (\n <Popover\n triggerRef={inputWrapRef}\n popoverRef={overlayRef}\n positionProps={positionProps}\n onClose={state.close}\n isOpen={state.isOpen}\n >\n <FocusScope autoFocus contain restoreFocus>\n <DatePickerOverlay overlayProps={overlayProps}>\n {isRangeMode ? (\n <DateRangePicker\n range={wipValue as DateRange | undefined}\n disabledDays={disabledDays}\n onSelect={(dr) => {\n // Note: Do not close date range picker on select to allow the user to select multiple dates at a time\n setInputValue(formatDateRange(dr, dateFormats.short) ?? \"\");\n onChange(dr);\n }}\n useYearPicker={isRangeFilterField || useYearPicker}\n {...tid.datePicker}\n />\n ) : (\n <DatePicker\n value={wipValue as Date | undefined}\n disabledDays={disabledDays}\n onSelect={(d) => {\n state.close();\n setInputValue(formatDate(d, dateFormats.short) ?? \"\");\n onChange(d);\n }}\n useYearPicker={useYearPicker}\n {...tid.datePicker}\n />\n )}\n </DatePickerOverlay>\n </FocusScope>\n </Popover>\n )}\n </>\n );\n}\n\nfunction isParsedDateValid(d: DateRange | Date | undefined): boolean {\n // Only consider a DateRange valid when both `from` and `to` values are valid dates\n return d !== undefined && (!isDateRange(d) || (isDateRange(d) && isValidDate(d.from) && isValidDate(d.to)));\n}\n","import { format as dateFnsFormat, parse as dateFnsParse, isDate } from \"date-fns\";\nimport { DateRange } from \"src/types\";\n\nexport type DateFieldModeTuple = readonly [\"range\", DateRange] | readonly [\"single\", Date];\nexport type DateFieldMode = \"single\" | \"range\";\n\nexport const dateFormats = {\n short: \"MM/dd/yy\",\n medium: \"EEE, MMM d\",\n long: \"EEEE LLLL d, uuuu\",\n};\n\nexport function getDateFormat(format: keyof typeof dateFormats | undefined) {\n return format ? dateFormats[format] : dateFormats.short;\n}\n\nexport function formatDate(date: Date | undefined, format: string) {\n if (!date) return \"\";\n return dateFnsFormat(date as Date, format);\n}\n\nexport function formatDateRange(date: DateRange | undefined, format: string) {\n if (!date) return \"\";\n const { from, to } = date as DateRange;\n const fromFormatted = from ? dateFnsFormat(from, format) : \"\";\n const toFormatted = to ? dateFnsFormat(to, format) : \"\";\n // return `undefined` if both dates are improperly formatted\n return !fromFormatted && !toFormatted ? undefined : `${fromFormatted} - ${toFormatted}`;\n}\n\nexport function parseDate(str: string, format: string): Date | undefined {\n return parseDateString(str, format);\n}\n\nexport function parseDateRange(str: string, format: string): DateRange | undefined {\n const [from = \"\", to = \"\"] = str.split(\"-\");\n const fromDate = parseDateString(from.trim(), format);\n const toDate = parseDateString(to.trim(), format);\n // In the event the user mixes up the to/from dates then correct them.\n if (toDate && fromDate && toDate < fromDate) {\n return { from: toDate, to: fromDate };\n }\n // If both dates are undefined, return undefined rather than { from: undefined; to: undefined }\n if (toDate === undefined && fromDate === undefined) {\n return undefined;\n }\n return { from: fromDate, to: toDate };\n}\n\nfunction parseDateString(str: string, format: string): Date | undefined {\n // Copy/pasted from react-day-picker so that typing \"2/2/2\" doesn't turn into \"02/02/0002\"\n const split = str.split(\"/\");\n if (split.length !== 3) {\n return undefined;\n }\n // Wait for the year to be 2 chars\n if (split[2].length !== 2) {\n return undefined;\n }\n const month = parseInt(split[0], 10) - 1;\n const day = parseInt(split[1], 10);\n const year = parseInt(split[2], 10);\n // This is also ~verbatim copy/pasted from react-day-picker\n if (\n isNaN(year) ||\n String(year).length > 4 ||\n isNaN(month) ||\n isNaN(day) ||\n day <= 0 ||\n day > 31 ||\n month < 0 ||\n month >= 12\n ) {\n return undefined;\n }\n\n const parsed = dateFnsParse(str, format, new Date());\n if (!isValidDate(parsed)) {\n return undefined;\n }\n return parsed;\n}\n\nexport function isValidDate(d: Date | undefined): boolean {\n return d !== undefined && isDate(d) && d.toString() !== \"Invalid Date\";\n}\n","import { ComponentType } from \"react\";\n\nlet useMock = process.env.NODE_ENV === \"test\";\n\n/**\n * Toggles our mock DateField/RichTextField components.\n *\n * This defaults to true in test suites, but can be disabled if you\n * _really_ want to test against the real component.\n */\nexport function setUseMockComponents(value: boolean) {\n useMock = value;\n}\n\n// HOC that conditionally swaps components\nexport function withTestMock<P>(Component: ComponentType<P>, MockComponent: ComponentType<P>) {\n return (props: P) => {\n const SelectedComponent = useMock ? MockComponent : Component;\n // @ts-ignore something about emotion causes an error with the `P` generic\n return <SelectedComponent {...props} />;\n };\n}\n","import { DateFieldMock } from \"src/inputs/DateFields/DateField.mock\";\nimport { DateFieldBase, DateSingleFieldBaseProps } from \"src/inputs/DateFields/DateFieldBase\";\nimport { withTestMock } from \"src/utils/withTestMock\";\n\nexport interface DateFieldProps extends Omit<DateSingleFieldBaseProps, \"mode\"> {}\n\nexport function DateFieldImpl(props: DateFieldProps) {\n return <DateFieldBase {...props} mode=\"single\" />;\n}\n\nexport const DateField = withTestMock(DateFieldImpl, DateFieldMock);\n","import { DateFieldBase, DateRangeFieldBaseProps } from \"src/inputs/DateFields/DateFieldBase\";\n\nexport interface DateRangeFieldProps extends Omit<DateRangeFieldBaseProps, \"mode\"> {}\n\nexport function DateRangeField(props: DateRangeFieldProps) {\n return <DateFieldBase {...props} mode=\"range\" />;\n}\n","import { RefObject, useMemo } from \"react\";\nimport { useCheckbox, useHover, VisuallyHidden } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { Icon, IconProps, maybeTooltip, resolveTooltip } from \"src/components\";\nimport { Css, Palette } from \"src/Css\";\nimport { useGetRef } from \"src/hooks/useGetRef\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\nexport interface IconCardProps {\n /** The icon to use within the card. */\n icon: IconProps[\"icon\"];\n label: string;\n selected?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange?: (selected: boolean) => void;\n cardRef?: RefObject<HTMLInputElement>;\n disabled?: boolean;\n tooltip?: string;\n}\n\nexport function IconCard(props: IconCardProps) {\n const {\n selected: isSelected = false,\n disabled: isDisabled = false,\n icon,\n cardRef,\n label,\n tooltip,\n ...otherProps\n } = props;\n const ref = useGetRef(cardRef);\n const ariaProps = { isSelected, isDisabled, ...otherProps };\n const checkboxProps = { ...ariaProps, \"aria-label\": label };\n\n const { hoverProps, isHovered } = useHover({ isDisabled });\n const toggleState = useToggleState(ariaProps);\n const { inputProps } = useCheckbox(checkboxProps, toggleState, ref);\n\n const styles = useMemo(\n () => ({\n ...baseStyles,\n ...(isHovered && iconCardStylesHover),\n ...(isSelected && selectedStyles),\n ...(isDisabled && disabledStyles),\n }),\n [isDisabled, isHovered, isSelected],\n );\n\n const tid = useTestIds(props, defaultTestId(label));\n\n return maybeTooltip({\n title: resolveTooltip(isDisabled, tooltip),\n placement: \"top\",\n children: (\n <button css={styles} {...hoverProps} onClick={toggleState.toggle} disabled={isDisabled} {...tid}>\n <VisuallyHidden>\n <input ref={ref} {...inputProps} {...tid.value} />\n </VisuallyHidden>\n <Icon icon={icon} inc={4} color={isDisabled ? Palette.Gray300 : Palette.Gray900} />\n <span css={Css.xsMd.if(isDisabled).gray300.$}>{label}</span>\n </button>\n ),\n });\n}\n\nconst baseStyles = Css.df.fdc.aic.jcc.wPx(130).hPx(114).ba.br8.bcGray300.bgWhite.gap(\"12px\").p2.tac.$;\nexport const selectedStyles = Css.bw2.bcBlue500.bgBlue50.$;\nconst disabledStyles = Css.bcGray200.bgGray50.$;\nexport const iconCardStylesHover = Css.bgGray100.$;\n","import { useState } from \"react\";\nimport { Button } from \"src/components/Button\";\nimport { Label } from \"src/components/Label\";\nimport { SelectField, Value } from \"src/inputs\";\nimport { ComboBoxBaseProps } from \"src/inputs/internal/ComboBoxBase\";\nimport { Optional } from \"src/types\";\nimport { Css, useTestIds } from \"..\";\n\nexport interface MultiLineSelectFieldProps<O, V extends Value> extends Exclude<ComboBoxBaseProps<O, V>, \"unsetLabel\"> {\n values: V[];\n options: O[];\n getOptionValue: (opt: O) => V;\n getOptionLabel: (opt: O) => string;\n onSelect: (values: V[], opts: O[]) => void;\n}\n\nexport function MultiLineSelectField<O, V extends Value>(\n props: Optional<MultiLineSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element {\n const {\n options,\n values,\n onSelect,\n getOptionValue = (opt: O) => (opt as any).id,\n getOptionLabel = (opt: O) => (opt as any).name,\n labelStyle,\n ...otherProps\n } = props;\n\n const tid = useTestIds(props, \"\");\n const [isDisplayed, setIsDisplayed] = useState(true);\n\n // Set the available options by filtering already selected options\n const currentOptions = options.filter((o) => !values.includes(getOptionValue(o)));\n\n return (\n <div css={Css.mt1.if(labelStyle === \"left\").df.$}>\n {labelStyle !== \"hidden\" && (\n <div css={Css.if(labelStyle === \"left\").w50.$}>\n <Label {...tid.label} label={props.label} />\n </div>\n )}\n <div css={Css.if(labelStyle === \"left\").w50.$}>\n {values.map((value, index) => {\n return (\n <div css={Css.mb1.pl1.df.$} key={index}>\n <div css={Css.truncate.w100.$}>\n <SelectField\n {...otherProps}\n {...tid.selectField}\n labelStyle=\"hidden\"\n value={value}\n onSelect={() => {}}\n options={options}\n getOptionValue={getOptionValue}\n getOptionLabel={getOptionLabel}\n compact={true}\n readOnly={true}\n />\n </div>\n <Button\n {...tid.deleteSelected}\n variant=\"tertiary\"\n label={\"\"}\n aria-label={`Delete selected ${otherProps.label}`}\n icon={\"x\"}\n onClick={() => {\n const selectedOptions = options.filter(\n (o) => values.includes(getOptionValue(o)) && getOptionValue(o) !== value,\n );\n const selectedValues = selectedOptions.map((o) => getOptionValue(o));\n\n onSelect(selectedValues, selectedOptions);\n // Display the input field if there are no selected values\n if (selectedOptions.length === 0) setIsDisplayed(true);\n }}\n />\n </div>\n );\n })}\n {isDisplayed && (\n <div css={Css.mb1.$}>\n <SelectField\n {...tid.selectField}\n label={otherProps.label}\n labelStyle=\"hidden\"\n getOptionValue={getOptionValue}\n getOptionLabel={getOptionLabel}\n value={\"\" as string}\n onSelect={(value) => {\n onSelect([...values, value], options);\n setIsDisplayed(false);\n }}\n options={currentOptions}\n disabled={otherProps.disabled}\n />\n </div>\n )}\n <Button\n {...tid.addAnother}\n label=\"Add Another\"\n variant=\"tertiary\"\n onClick={() => setIsDisplayed(true)}\n disabled={isDisplayed || currentOptions.length === 0}\n />\n </div>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\nimport { Value } from \"src/inputs\";\nimport { ComboBoxBase, ComboBoxBaseProps } from \"src/inputs/internal/ComboBoxBase\";\nimport { HasIdAndName, Optional } from \"src/types\";\n\nexport interface MultiSelectFieldProps<O, V extends Value>\n extends Exclude<ComboBoxBaseProps<O, V>, \"unsetLabel\" | \"addNew\"> {\n /** Renders `opt` in the dropdown menu, defaults to the `getOptionLabel` prop. */\n getOptionMenuLabel?: (opt: O) => string | ReactNode;\n getOptionValue: (opt: O) => V;\n getOptionLabel: (opt: O) => string;\n values: V[];\n onSelect: (values: V[], opts: O[]) => void;\n}\n\n/**\n * Provides a non-native multiselect/dropdown widget.\n *\n * The `O` type is a list of options to show, the `V` is the primitive value of a\n * given `O` (i.e. it's id) that you want to use as the current/selected value.\n */\nexport function MultiSelectField<O, V extends Value>(props: MultiSelectFieldProps<O, V>): JSX.Element;\nexport function MultiSelectField<O extends HasIdAndName<V>, V extends Value>(\n props: Optional<MultiSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element;\nexport function MultiSelectField<O, V extends Value>(\n props: Optional<MultiSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element {\n const {\n getOptionValue = (opt: O) => (opt as any).id, // if unset, assume O implements HasId\n getOptionLabel = (opt: O) => (opt as any).name, // if unset, assume O implements HasName\n ...otherProps\n } = props;\n return <ComboBoxBase multiselect getOptionLabel={getOptionLabel} getOptionValue={getOptionValue} {...otherProps} />;\n}\n","import { NumberParser } from \"@internationalized/number\";\nimport { ReactNode, useMemo, useRef } from \"react\";\nimport { mergeProps, useLocale, useNumberField } from \"react-aria\";\nimport { NumberFieldStateOptions, useNumberFieldState } from \"react-stately\";\nimport { resolveTooltip } from \"src/components\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Xss } from \"src/Css\";\nimport { maybeCall } from \"src/utils\";\nimport { TextFieldBase } from \"./TextFieldBase\";\n\nexport type NumberFieldType = \"cents\" | \"dollars\" | \"percent\" | \"basisPoints\" | \"days\" | \"mills\";\n\n// exported for testing purposes\nexport interface NumberFieldProps extends Pick<PresentationFieldProps, \"labelStyle\" | \"fullWidth\"> {\n label: string;\n /** If set, the label will be defined as 'aria-label` on the input element */\n type?: NumberFieldType;\n value: number | undefined;\n onChange: (value: number | undefined) => void;\n compact?: boolean;\n clearable?: boolean;\n /** Whether the field is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n required?: boolean;\n errorMsg?: string;\n helperText?: string | ReactNode;\n onBlur?: () => void;\n onFocus?: () => void;\n /* Whether the field is readOnly. If a ReactNode, it's treated as a \"readOnly reason\" that's shown in a tooltip. */\n readOnly?: boolean | ReactNode;\n /** Styles overrides */\n xss?: Xss<\"textAlign\" | \"justifyContent\">;\n // If set, all positive values will be prefixed with \"+\". (Zero will not show +/-)\n displayDirection?: boolean;\n numFractionDigits?: number;\n numIntegerDigits?: number;\n // Override for default formatting based on `type`.\n numberFormatOptions?: Intl.NumberFormatOptions;\n truncate?: boolean;\n onEnter?: VoidFunction;\n placeholder?: string;\n // If set error messages will be rendered as tooltips rather than below the field\n errorInTooltip?: true;\n /** Whether to show comma separation for group numbers.\n * @default true */\n useGrouping?: boolean;\n hideErrorMessage?: boolean;\n // Typically used for compact fields in a table. Removes border and uses an box-shadow for focus behavior\n borderless?: boolean;\n sizeToContent?: boolean;\n // If set, the helper text will always be shown (usually we hide the helper text if read only)\n alwaysShowHelperText?: boolean;\n // If set, the component will only accept positive values\n positiveOnly?: boolean;\n}\n\nexport function NumberField(props: NumberFieldProps) {\n // Determine default alignment based on presentation context\n const { fieldProps } = usePresentationContext();\n const alignment = fieldProps?.numberAlignment === \"right\" ? Css.tar.jcfe.$ : Css.tal.jcfs.$;\n const {\n disabled,\n required,\n readOnly,\n type,\n label,\n onBlur,\n onFocus,\n errorMsg,\n helperText,\n value,\n onChange,\n xss,\n displayDirection = false,\n numFractionDigits = type === \"dollars\" ? 2 : undefined,\n truncate = false,\n onEnter,\n numberFormatOptions,\n numIntegerDigits,\n useGrouping = true,\n sizeToContent = false,\n positiveOnly = false,\n ...otherProps\n } = props;\n\n const isDisabled = !!disabled;\n const isReadOnly = !!readOnly;\n const factor =\n type === \"percent\" ? 100 : type === \"cents\" ? 100 : type === \"mills\" ? 1_000 : type === \"basisPoints\" ? 10_000 : 1;\n\n const signDisplay = displayDirection ? \"always\" : \"auto\";\n const defaultFormatOptions: Intl.NumberFormatOptions = useMemo(\n () => ({\n [truncate ? \"maximumFractionDigits\" : \"minimumFractionDigits\"]: numFractionDigits,\n ...(numIntegerDigits !== undefined && { minimumIntegerDigits: numIntegerDigits }),\n useGrouping,\n signDisplay,\n }),\n [truncate, numIntegerDigits, useGrouping, signDisplay, numFractionDigits],\n );\n const { locale } = useLocale();\n // If formatOptions isn't memo'd, a useEffect in useNumberStateField will cause jank,\n // see: https://github.com/adobe/react-spectrum/issues/1893.\n const formatOptions: Intl.NumberFormatOptions | undefined = useMemo(() => {\n if (numberFormatOptions !== undefined) {\n return numberFormatOptions;\n }\n\n const typeFormat =\n type === \"percent\"\n ? { style: \"percent\" }\n : type === \"basisPoints\"\n ? { style: \"percent\", minimumFractionDigits: 2 }\n : type === \"cents\"\n ? { style: \"currency\", currency: \"USD\", minimumFractionDigits: 2 }\n : type === \"mills\"\n ? { style: \"currency\", currency: \"USD\", minimumFractionDigits: 3 }\n : type === \"dollars\"\n ? { style: \"currency\", currency: \"USD\", minimumFractionDigits: numFractionDigits ?? 2 }\n : type === \"days\"\n ? { style: \"unit\", unit: \"day\", unitDisplay: \"long\" as const, maximumFractionDigits: 0 }\n : {};\n\n return { ...defaultFormatOptions, ...typeFormat } as any;\n }, [type, numberFormatOptions, defaultFormatOptions, numFractionDigits]);\n const numberParser = useMemo(() => new NumberParser(locale, formatOptions), [locale, formatOptions]);\n\n // Keep a ref the last \"before WIP\" value that we passed into react-aria.\n //\n // This is b/c NumberFieldStateProps.onChange only actually calls during\n // `onBlur`, with the committed value. But we want our FieldStates to have\n // the latest WIP value, i.e. so that validation rules can be reacting\n // real time.\n //\n // However, if we treat useNumberField as \"too controlled\" and keep passing\n // in the latest WIP value, they'll see it as a state change and reset the\n // user's cursor.\n //\n // So just keep them out of the loop on `value` changes while that is happening.\n type ValueRef = { wip: true; value: number | undefined } | { wip: false };\n const valueRef = useRef<ValueRef>({ wip: false });\n\n // We can use this for both useNumberFieldState + useNumberField\n const useProps: NumberFieldStateOptions = {\n locale,\n // We want percents && cents to be integers, useNumberFieldState excepts them as decimals\n value: valueRef.current.wip ? valueRef.current.value : value === undefined ? Number.NaN : value / factor,\n // // This is called on blur with the final/committed value.\n onChange: (value) => {\n onChange(formatValue(value, factor, numFractionDigits, numIntegerDigits, positiveOnly));\n },\n onFocus: () => {\n valueRef.current = { wip: true, value: value === undefined ? Number.NaN : value / factor };\n },\n onBlur: () => {\n valueRef.current = { wip: false };\n },\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n maybeCall(onEnter);\n inputRef.current?.blur();\n }\n },\n validationState: errorMsg !== undefined ? \"invalid\" : \"valid\",\n label: label,\n isDisabled,\n isReadOnly,\n formatOptions,\n ...otherProps,\n };\n\n const state = useNumberFieldState(useProps);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const { labelProps, inputProps, groupProps } = useNumberField(useProps, state, inputRef);\n\n // Pretty janky, but if readOnly=true, then TextFieldBase doesn't create an input element,\n // but useNumberField _really_ wants the ref to be set, so give it a throw-away element.\n if (readOnly && !inputRef.current) {\n inputRef.current = document.createElement(\"input\");\n }\n\n return (\n <TextFieldBase\n xss={{ ...alignment, ...xss }}\n groupProps={groupProps}\n labelProps={labelProps}\n label={label}\n required={required}\n inputProps={mergeProps(inputProps, {\n size: sizeToContent ? String(inputProps.value ?? \"\").length || 1 : undefined,\n })}\n // This is called on each DOM change, to push the latest value into the field\n onChange={(rawInputValue) => {\n const parsedValue = numberParser.parse(rawInputValue || \"\");\n onChange(formatValue(parsedValue, factor, numFractionDigits, numIntegerDigits, positiveOnly));\n }}\n inputRef={inputRef}\n onBlur={onBlur}\n onFocus={onFocus}\n errorMsg={errorMsg}\n helperText={helperText}\n tooltip={resolveTooltip(disabled, undefined, readOnly)}\n {...otherProps}\n />\n );\n}\n\nexport function formatValue(\n value: number,\n factor: number,\n numFractionDigits: number | undefined,\n numIntegerDigits: number | undefined,\n positiveOnly: boolean = false,\n): number | undefined {\n // We treat percents & cents as (mostly) integers, while useNumberField wants decimals, so\n // undo that via `* factor` and `Math.round`, but also keep any specifically-requested `numFractionDigits`,\n // i.e. for `type=percent value=12.34`, `value` will be `0.1234` that we want turn into `12.34`.\n const maybeAdjustForDecimals = numFractionDigits ? Math.pow(10, numFractionDigits) : 1;\n // Reverse the integer/decimal conversion\n const decimalAdjusted = Number.isNaN(value)\n ? undefined\n : Math.round((positiveOnly ? Math.abs(value) : value) * factor * maybeAdjustForDecimals) / maybeAdjustForDecimals;\n\n if (numIntegerDigits === undefined || decimalAdjusted === undefined) {\n return decimalAdjusted;\n }\n\n // If `numIntegerDigits` is defined, then we must truncate that manually, so that 1234.56 can turn into 34.56\n const fractionalValue = Math.round((decimalAdjusted % 1) * maybeAdjustForDecimals) / maybeAdjustForDecimals;\n const maybeNegate = decimalAdjusted < 0 ? -1 : 1;\n const trimmedInteger = Number(\n Math.trunc(Math.abs(decimalAdjusted))\n .toString()\n .slice(-1 * numIntegerDigits),\n );\n return (trimmedInteger + fractionalValue) * maybeNegate;\n}\n","import { Fragment, ReactNode, useMemo, useRef } from \"react\";\nimport { useFocusRing, useHover, useRadio, useRadioGroup } from \"react-aria\";\nimport { RadioGroupState, useRadioGroupState } from \"react-stately\";\nimport { maybeTooltip, resolveTooltip } from \"src/components\";\nimport { HelperText } from \"src/components/HelperText\";\nimport { Label } from \"src/components/Label\";\nimport { PresentationFieldProps } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { ErrorMessage } from \"src/inputs/ErrorMessage\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nlet nextNameId = 0;\n\nexport interface RadioFieldOption<K extends string> {\n // testId?: string;\n /** The label for a specific option, i.e. \"Cheddar\". */\n label: string;\n /** An optional longer description to render under the label. */\n description?: string | (() => ReactNode);\n /** The undisplayed value, i.e. an id of some sort. */\n value: K;\n /** Disable only specific option, with an optional reason */\n disabled?: boolean | ReactNode;\n}\n\nexport interface RadioGroupFieldProps<K extends string> extends Pick<PresentationFieldProps, \"labelStyle\"> {\n /** The label for the choice itself, i.e. \"Favorite Cheese\". */\n label: string;\n /** The currently selected option value (i.e. an id). */\n value: K | undefined;\n /** Called when an option is selected. We don't support unselecting. */\n onChange: (value: K) => void;\n /** The list of options. */\n options: RadioFieldOption<K>[];\n disabled?: boolean;\n errorMsg?: string;\n helperText?: string | ReactNode;\n onBlur?: () => void;\n onFocus?: () => void;\n}\n\n/**\n * Provides a radio group with label.\n *\n * This is generally meant to be used in a form vs. being raw radio buttons.\n *\n * TODO: Add hover (non selected and selected) styles\n */\nexport function RadioGroupField<K extends string>(props: RadioGroupFieldProps<K>) {\n const { label, labelStyle, value, onChange, options, disabled = false, errorMsg, helperText, ...otherProps } = props;\n\n // useRadioGroupState uses a random group name, so use our name\n const name = useMemo(() => `radio-group-${++nextNameId}`, []);\n const state = useRadioGroupState({\n name,\n value,\n onChange: (value) => onChange(value as K),\n isDisabled: disabled,\n isReadOnly: false,\n });\n const tid = useTestIds(props, defaultTestId(label));\n\n // We use useRadioGroup b/c it does neat keyboard up/down stuff\n // TODO: Pass read only, required, error message to useRadioGroup\n const { labelProps, radioGroupProps } = useRadioGroup({ label, isDisabled: disabled }, state);\n\n return (\n // default styling to position `<Label />` above.\n <div css={Css.df.fdc.gap1.aifs.if(labelStyle === \"left\").fdr.gap2.jcsb.$}>\n <Label label={label} {...labelProps} {...tid.label} hidden={labelStyle === \"hidden\"} />\n <div {...radioGroupProps}>\n {options.map((option) => {\n const isDisabled = state.isDisabled || !!option.disabled;\n return (\n <Fragment key={option.value}>\n {maybeTooltip({\n title: resolveTooltip(option.disabled),\n placement: \"bottom\",\n children: (\n <Radio\n parentId={name}\n option={option}\n state={{ ...state, isDisabled }}\n {...otherProps}\n {...tid[option.value]}\n />\n ),\n })}\n </Fragment>\n );\n })}\n {errorMsg && <ErrorMessage errorMsg={errorMsg} {...tid.errorMsg} />}\n {helperText && <HelperText helperText={helperText} />}\n </div>\n </div>\n );\n}\n\n// Not meant to be standalone, but its own component so it can use hooks\nfunction Radio<K extends string>(props: {\n parentId: string;\n option: RadioFieldOption<K>;\n state: RadioGroupState;\n onBlur?: () => void;\n onFocus?: () => void;\n}) {\n const {\n parentId,\n option: { description, label, value },\n state,\n ...others\n } = props;\n const disabled = state.isDisabled;\n\n const labelId = `${parentId}-${value}-label`;\n const descriptionId = `${parentId}-${value}-description`;\n const ref = useRef<HTMLInputElement>(null);\n const { inputProps } = useRadio({ value, \"aria-labelledby\": labelId }, state, ref);\n const { focusProps, isFocusVisible } = useFocusRing();\n const { hoverProps, isHovered } = useHover({ isDisabled: disabled });\n\n return (\n <label css={Css.df.cursorPointer.mb1.if(disabled).add(\"cursor\", \"initial\").$} {...hoverProps}>\n <input\n type=\"radio\"\n ref={ref}\n css={{\n ...radioReset,\n ...radioDefault,\n ...(!disabled && state.selectedValue === value ? radioChecked : radioUnchecked),\n ...(disabled ? radioDisabled : {}),\n ...(isHovered ? radioHover : {}),\n ...(isFocusVisible ? radioFocus : {}),\n // Nudge down so the center of the circle lines up with the label text\n ...Css.mtPx(2).mr1.$,\n }}\n disabled={disabled}\n aria-labelledby={labelId}\n {...inputProps}\n {...focusProps}\n // Put others here b/c it could have data-testid in it or onX events.\n {...others}\n />\n <div>\n <div\n id={labelId}\n css={Css.smMd.gray800.if(disabled).gray400.$}\n {...(description ? { \"aria-describedby\": descriptionId } : {})}\n >\n {label}\n </div>\n {description && (\n <div id={descriptionId} css={Css.sm.gray700.if(disabled).gray400.$}>\n {typeof description === \"function\" ? description() : description}\n </div>\n )}\n </div>\n </label>\n );\n}\n\nconst whiteCircle =\n \"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='4'/%3e%3c/svg%3e\";\n\n// Didn't put these in radioReset yet, are they needed?\n// color-adjust: exact;\n// -webkit-print-color-adjust: exact;\n\nexport const radioReset = {\n ...Css.add(\"appearance\", \"none\").p0.dib.vam.add(\"userSelect\", \"none\").fs0.h2.w2.br100.$,\n ...Css.add(\"outline\", \"0px solid transparent\").$,\n};\n\nexport const radioDefault = {\n // By default we're a white circle with a gray border\n ...Css.bgWhite.bcGray300.ba.$,\n // Set the \"selected\" color that will be used by background=currentColor + box shadow, but is initially ignored\n ...Css.blue700.$,\n // Apply our default transitions\n ...Css.transition.$,\n};\n\n// Unchecked means a gray border\nexport const radioUnchecked = Css.cursorPointer.bcGray300.$;\n\n// Checked means a blue circle (achieved by a blue background + white dot background image)\nexport const radioChecked = {\n // Make the background become the current (blue) color\n ...Css.add(\"backgroundColor\", \"currentColor\")\n .add(\"backgroundSize\", \"100% 100%\")\n .add(\"backgroundPosition\", \"center\")\n .add(\"backgroundRepeat\", \"no-repeat\").$,\n // And use backgroundImage to draw a white dot in the middle of the background\n ...Css.add(\"backgroundImage\", `url(\"${whiteCircle}\")`).$,\n // Make our border the same color as the dot\n ...Css.add(\"borderColor\", \"currentColor\").$,\n};\n\n// When active draw another circle via boxShadow\nexport const radioFocus = {\n // The box shadow ends up drawing over this afaict?\n ...Css.add(\"outline\", \"2px solid transparent\").add(\"outlineOffset\", \"2px\").$,\n // Draw 1st box shadow of white/outline, 2nd box current (blue) of another outline\n ...Css.bshFocus.$,\n};\n\nexport const radioHover = {\n // Change both the dot and the border to a darker blue\n ...Css.blue900.bcBlue900.$,\n};\n\nexport const radioDisabled = {\n ...Css.cursorNotAllowed.gray100.$,\n ...Css.add(\"backgroundColor\", \"currentColor\")\n .add(\"backgroundSize\", \"100% 100%\")\n .add(\"backgroundPosition\", \"center\")\n .add(\"backgroundRepeat\", \"no-repeat\").$,\n};\n","import { Global } from \"@emotion/react\";\nimport DOMPurify from \"dompurify\";\nimport { ChangeEvent, createElement, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Label } from \"src/components/Label\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Palette } from \"src/Css\";\nimport { RichTextFieldMock } from \"src/inputs/RichTextField.mock\";\nimport { maybeCall, noop } from \"src/utils\";\nimport { withTestMock } from \"src/utils/withTestMock\";\nimport Tribute from \"tributejs\";\nimport \"tributejs/dist/tribute.css\";\nimport \"trix/dist/trix\";\nimport \"trix/dist/trix.css\";\n\nexport interface RichTextFieldProps extends Pick<PresentationFieldProps, \"fullWidth\"> {\n /** The initial html value to show in the trix editor. */\n value: string | undefined;\n onChange: (html: string | undefined, text: string | undefined, mergeTags: string[]) => void;\n /**\n * A list of tags/names to show in a popup when the user `@`-s.\n *\n * Currently we don't support mergeTags being updated.\n */\n mergeTags?: string[];\n label?: string;\n autoFocus?: boolean;\n placeholder?: string;\n /** Called when the component loses focus */\n onBlur?: () => void;\n /** Called when the component is in focus. */\n onFocus?: () => void;\n /** For rendering formatted text */\n readOnly?: boolean;\n}\n\nexport const RichTextField = withTestMock(RichTextFieldImpl, RichTextFieldMock);\n\n/**\n * Provides a simple rich text editor based on trix.\n *\n * See [trix]{@link https://github.com/basecamp/trix}.\n *\n * We also integrate [tributejs]{@link https://github.com/zurb/tribute} for @ mentions.\n */\nexport function RichTextFieldImpl(props: RichTextFieldProps) {\n const { fieldProps } = usePresentationContext();\n const {\n mergeTags,\n label,\n value = \"\",\n onChange,\n onBlur = noop,\n onFocus = noop,\n readOnly,\n fullWidth = fieldProps?.fullWidth ?? false,\n } = props;\n\n // We get a reference to the Editor instance after trix-init fires\n const [editor, setEditor] = useState<Editor>();\n const editorElement = useRef<HTMLElement>();\n\n // Keep track of what we pass to onChange, so that we can make ourselves keep looking\n // like a controlled input, i.e. by only calling loadHTML if a new incoming `value` !== `currentHtml`,\n // otherwise we'll constantly call loadHTML and reset the user's cursor location.\n const currentHtml = useRef<string | undefined>(undefined);\n\n // Use a ref for onChange b/c so trixChange always has the latest\n const onChangeRef = useRef<RichTextFieldProps[\"onChange\"]>(onChange);\n onChangeRef.current = onChange;\n const onBlurRef = useRef<RichTextFieldProps[\"onBlur\"]>(onBlur);\n onBlurRef.current = onBlur;\n const onFocusRef = useRef<RichTextFieldProps[\"onFocus\"]>(onFocus);\n onFocusRef.current = onFocus;\n\n // Generate a unique id to be used for matching `trix-initialize` event for this instance.\n const id = useMemo(() => {\n if (readOnly) return;\n\n const id = `trix-editor-${trixId}`;\n trixId++;\n\n function onEditorInit(e: Event) {\n const targetEl = e.target as HTMLElement;\n if (targetEl.id === id) {\n editorElement.current = targetEl;\n const editor = (editorElement.current as any).editor;\n setEditor(editor);\n if (mergeTags !== undefined) {\n attachTributeJs(mergeTags, editorElement.current!);\n }\n\n currentHtml.current = value;\n editor.loadHTML(value || \"\");\n // Remove listener once we've initialized\n window.removeEventListener(\"trix-initialize\", onEditorInit);\n\n function trixChange(e: ChangeEvent) {\n const { textContent, innerHTML } = e.target;\n const onChange = onChangeRef.current;\n // If the user only types whitespace, treat that as undefined\n if ((textContent || \"\").trim() === \"\") {\n currentHtml.current = undefined;\n onChange && onChange(undefined, undefined, []);\n } else {\n currentHtml.current = innerHTML;\n const mentions = extractIdsFromMentions(mergeTags || [], textContent || \"\");\n onChange && onChange(innerHTML, textContent || undefined, mentions);\n }\n }\n\n const trixBlur = () => maybeCall(onBlurRef.current);\n const trixFocus = () => maybeCall(onFocusRef.current);\n\n // We don't want to allow file attachment for now. In addition to hiding the button, also disable drag-and-drop\n // https://github.com/basecamp/trix#storing-attached-files\n const preventDefault = (e: any) => e.preventDefault();\n window.addEventListener(\"trix-file-accept\", preventDefault);\n\n editorElement.current.addEventListener(\"trix-change\", trixChange as any);\n editorElement.current.addEventListener(\"trix-blur\", trixBlur);\n editorElement.current.addEventListener(\"trix-focus\", trixFocus);\n }\n }\n\n // Attaching listener to the `window` to we're listening prior to render.\n // The <trix-editor /> web component's `trix-initialize` event may fire before a `useEffect` hook in the component is executed, making it difficult ot attach the event listener locally.\n window.addEventListener(\"trix-initialize\", onEditorInit);\n return id;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [readOnly]);\n\n useEffect(() => {\n // If our value prop changes (without the change coming from us), reload it\n if (!readOnly && editor && value !== currentHtml.current) {\n editor.loadHTML(value || \"\");\n }\n }, [value, readOnly, editor]);\n\n const { placeholder, autoFocus } = props;\n\n if (!readOnly) {\n return (\n <div css={Css.w100.if(!fullWidth).maxw(\"550px\").$}>\n {/* TODO: Not sure what to pass to labelProps. */}\n {label && <Label labelProps={{}} label={label} />}\n <div css={{ ...Css.br4.bgWhite.$, ...trixCssOverrides }}>\n {/* \"hidden\" input element should to be in the DOM prior to the trix-editor element in order for initialize to fire properly (https://github.com/basecamp/trix/issues/254#issuecomment-321814353) */}\n <input type=\"hidden\" id={`input-${id}`} value={value} />\n {createElement(\"trix-editor\", {\n id: id,\n input: `input-${id}`,\n // Autofocus attribute is case sensitive since this is standard HTML\n ...(autoFocus ? { autofocus: true } : {}),\n ...(placeholder ? { placeholder } : {}),\n })}\n </div>\n <Global styles={[tributeOverrides]} />\n </div>\n );\n } else {\n return (\n <div css={Css.w100.if(!fullWidth).maxw(\"550px\").$}>\n {label && <Label label={label} />}\n <div\n css={Css.mh(\"120px\").bgWhite.sm.gray900.bn.p1.br4.bcGray300.ba.$}\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(value) || placeholder || \"\" }}\n data-readonly=\"true\"\n ></div>\n </div>\n );\n }\n}\n\nfunction attachTributeJs(mergeTags: string[], editorElement: HTMLElement) {\n const values = mergeTags.map((value) => ({ value }));\n const tribute = new Tribute({\n trigger: \"@\",\n lookup: \"value\",\n /** Not using allowSpaces due to a bug: {@link https://github.com/zurb/tribute/issues/606}\n * This will prevent lookups that include a space. However, it can still tag a name with spaces in it. Just the autocomplete menu will disappear once the user types a space. */\n allowSpaces: false,\n /** {@link https://github.com/zurb/tribute#hide-menu-when-no-match-is-returned} */\n noMatchTemplate: () => `<span style:\"visibility: hidden;\"></span>`,\n // According to the Tribute Types, `original.value` should always be present.\n // However, we have received errors in DataDog for \"Cannot read properties of undefined (reading 'original')\", so we're adding some checks.\n selectTemplate: (item) =>\n item?.original?.value ? `<span style=\"color: ${Palette.Blue700};\">@${item.original.value}</span>` : \"\",\n values,\n });\n // In dev mode, this fails because jsdom doesn't support contentEditable. Note that\n // before create-react-app 4.x / a newer jsdom, the trix-initialize event wasn't\n // even fired during unit tests anyway.\n try {\n tribute.attach(editorElement!);\n } catch {}\n}\n\nconst trixCssOverrides = {\n ...Css.relative.add({ wordBreak: \"break-word\" }).br4.bcGray300.ba.$,\n // Put the toolbar on the bottom\n ...Css.df.fdcr.gap1.$,\n // Some basic copy/paste from TextFieldBase\n \"& trix-editor\": Css.bgWhite.sm.gray900.bn.p1.$,\n // Highlight on focus\n \"&:focus-within\": Css.bcBlue700.$,\n \"& trix-toolbar\": Css.m1.$,\n // Make the buttons closer to ours\n \"& .trix-button:not(:first-of-type)\": Css.bn.$,\n \"& .trix-button-group\": Css.bn.m0.$,\n \"& .trix-button\": Css.bgWhite.sm.$,\n // Height is hard-coded to 1.6 in trix, and the default width is wider than we want\n \"& .trix-button--icon\": Css.w(\"1.6em\").p0.mxPx(4).bn.$,\n // icons are hard-coded svg's, so this is a simpler way to get lighter gray for now\n \"& .trix-button--icon::before\": Css.add(\"opacity\", \"0.3\").$,\n // trix defaults to is active = blue bg - turn that off + make icon darker\n \"& .trix-button.trix-active\": Css.bgWhite.add(\"opacity\", \"0.7\").$,\n // We don't support file attachment yet, so hide that control for now.\n \"& .trix-button-group--file-tools\": Css.dn.$,\n // Other things that are unused and we want to hide\n \"& .trix-button--icon-heading-1\": Css.dn.$,\n \"& .trix-button--icon-code\": Css.dn.$,\n \"& .trix-button--icon-quote\": Css.dn.$,\n \"& .trix-button--icon-increase-nesting-level\": Css.dn.$,\n \"& .trix-button--icon-decrease-nesting-level\": Css.dn.$,\n \"& .trix-button-group--history-tools\": Css.dn.$,\n};\n\n// Style the @ mention box\nconst tributeOverrides = {\n \".tribute-container\": Css.add({ minWidth: \"300px\" }).$,\n \".tribute-container > ul\": Css.sm.bgWhite.ba.br4.bcBlue700.oh.$,\n};\n\nfunction extractIdsFromMentions(mergeTags: string[], content: string): string[] {\n return mergeTags.filter((tag) => content.includes(`@${tag}`));\n}\n\n// There aren't types for trix, so add our own. For now `loadHTML` is all we call anyway.\ntype Editor = {\n loadHTML(html: string): void;\n};\n\n// Used for creating unique identified for each trix-editor instance\nlet trixId = 1;\n","import { camelCase } from \"change-case\";\nimport { useState } from \"react\";\nimport { useTestIds } from \"src/utils\";\nimport { RichTextFieldProps } from \"./RichTextField\";\n\n/** Mocks out `RichTextField` as a text `<input>` field. */\nexport function RichTextFieldMock(props: RichTextFieldProps) {\n const { onBlur = () => {}, onFocus = () => {}, readOnly } = props;\n const [value, setValue] = useState(props.value || \"\");\n const tid = useTestIds(props, defaultTestId(props.label || \"richTextField\"));\n return (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => {\n const { value } = e.target;\n setValue(value);\n props.onChange(value, value, props.mergeTags || []);\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n readOnly={readOnly}\n {...tid}\n />\n );\n}\n\nfunction defaultTestId(label: string): string {\n return camelCase(label);\n}\n","import { useMemo } from \"react\";\nimport { Value } from \"src/inputs\";\nimport { ComboBoxBase, ComboBoxBaseProps, unsetOption } from \"src/inputs/internal/ComboBoxBase\";\nimport { HasIdIsh, HasNameIsh, Optional } from \"src/types\";\nimport { defaultOptionLabel, defaultOptionValue } from \"src/utils/options\";\n\nexport interface SelectFieldProps<O, V extends Value>\n extends Omit<ComboBoxBaseProps<O, V>, \"values\" | \"onSelect\" | \"multiselect\"> {\n /** The current value; it can be `undefined`, even if `V` cannot be. */\n value: V | undefined;\n /**\n * Called when a value is selected, or `undefined` if `unsetLabel` is being used.\n *\n * Ideally callers that didn't pass `unsetLabel` would not have to handle the ` | undefined` here.\n */\n onSelect: (value: V | undefined, opt: O | undefined) => void;\n}\n\n/**\n * Provides a non-native select/dropdown widget.\n *\n * The `O` type is a list of options to show, the `V` is the primitive value of a\n * given `O` (i.e. it's id) that you want to use as the current/selected value.\n */\nexport function SelectField<O extends HasIdIsh<V> & HasNameIsh, V extends Value>(\n props: Optional<SelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element;\nexport function SelectField<O extends HasIdIsh<V>, V extends Value>(\n props: Optional<SelectFieldProps<O, V>, \"getOptionValue\">,\n): JSX.Element;\nexport function SelectField<O extends HasNameIsh, V extends Value>(\n props: Optional<SelectFieldProps<O, V>, \"getOptionLabel\">,\n): JSX.Element;\nexport function SelectField<O, V extends Value>(props: SelectFieldProps<O, V>): JSX.Element;\nexport function SelectField<O, V extends Value>(\n props: Optional<SelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element {\n const {\n getOptionValue = defaultOptionValue,\n getOptionLabel = defaultOptionLabel,\n options,\n onSelect,\n value,\n ...otherProps\n } = props;\n const values = useMemo(() => [value], [value]);\n return (\n <ComboBoxBase\n {...otherProps}\n options={options}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n values={values}\n onSelect={(values, options) => {\n // If the user used `unsetLabel`, then values will be `[undefined]` and options `[unsetOption]`\n if (values.length > 0 && options.length > 0) {\n const option = options[0];\n onSelect(values[0], option === unsetOption ? undefined : option);\n }\n }}\n />\n );\n}\n","import { ReactNode, useRef } from \"react\";\nimport { useFocusRing, useHover, useSwitch, VisuallyHidden } from \"react-aria\";\nimport { resolveTooltip } from \"src/components\";\nimport { Label } from \"src/components/Label\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Palette } from \"src/Css\";\nimport { Icon } from \"../components/Icon\";\nimport { toToggleState, useTestIds } from \"../utils\";\n\nexport interface SwitchProps {\n /** Whether the element should receive focus on render. */\n autoFocus?: boolean;\n /** Whether to render a compact version of Switch */\n compact?: boolean;\n /** Whether the field is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n /** Input label */\n label: string;\n /** Where to put the label. */\n labelStyle?: \"form\" | \"inline\" | \"filter\" | \"hidden\" | \"left\" | \"centered\"; // TODO: Update `labelStyle` to make consistent with other `labelStyle` properties in the library\n /** Whether to hide the label */\n hideLabel?: boolean;\n /** Handler when the interactive element state changes. */\n onChange: (value: boolean) => void;\n /** Whether the switch is selected */\n selected: boolean;\n /** Whether to include icons like the check mark */\n withIcon?: boolean;\n /** Adds tooltip for the switch */\n tooltip?: ReactNode;\n}\n\nexport function Switch(props: SwitchProps) {\n const { fieldProps } = usePresentationContext();\n const { labelLeftFieldWidth = \"50%\" } = fieldProps ?? {};\n const {\n selected: isSelected,\n disabled = false,\n onChange,\n withIcon,\n compact = false,\n label,\n labelStyle = \"inline\",\n hideLabel = false,\n ...otherProps\n } = props;\n const isDisabled = !!disabled;\n const ariaProps = { isSelected, isDisabled, ...otherProps };\n const state = toToggleState(isSelected, onChange);\n const ref = useRef(null);\n const { inputProps } = useSwitch({ ...ariaProps, \"aria-label\": label }, state, ref);\n const { isFocusVisible: isKeyboardFocus, focusProps } = useFocusRing(otherProps);\n const { hoverProps, isHovered } = useHover(ariaProps);\n const tooltip = resolveTooltip(disabled, props.tooltip);\n const tid = useTestIds(otherProps, label);\n\n return (\n <label\n {...hoverProps}\n css={{\n ...Css.relative.cursorPointer.df.wmaxc.usn.$,\n ...(labelStyle === \"form\" && Css.fdc.$),\n ...(labelStyle === \"left\" && Css.w100.aic.jcsb.$),\n ...(labelStyle === \"inline\" && Css.gap2.aic.$),\n ...(labelStyle === \"filter\" && Css.jcsb.gap1.aic.wa.sm.$),\n ...(labelStyle === \"centered\" && Css.fdc.aic.$),\n ...(isDisabled && Css.cursorNotAllowed.gray400.$),\n }}\n >\n {labelStyle !== \"inline\" && labelStyle !== \"hidden\" && (\n <div>\n <Label\n label={label}\n tooltip={tooltip}\n xss={Css.if(labelStyle === \"filter\").gray900.$}\n inline={labelStyle === \"left\" || labelStyle === \"filter\"}\n />\n </div>\n )}\n <div css={Css.if(labelStyle === \"left\").w(labelLeftFieldWidth).$}>\n {/* Background */}\n <div\n aria-hidden=\"true\"\n css={{\n ...Css.wPx(40).hPx(toggleHeight(compact)).bgGray200.br12.relative.transition.$,\n ...(isHovered && switchHoverStyles),\n ...(isKeyboardFocus && switchFocusStyles),\n ...(isDisabled && Css.bgGray300.$),\n ...(isSelected && Css.bgBlue700.$),\n ...(isSelected && isHovered && switchSelectedHoverStyles),\n }}\n >\n {/* Circle */}\n <div\n css={{\n ...switchCircleDefaultStyles(compact),\n ...(isDisabled && Css.bgGray100.$),\n ...(isSelected && switchCircleSelectedStyles(compact)),\n }}\n >\n {/* Icon */}\n {withIcon && (\n <Icon icon={isSelected ? \"check\" : \"x\"} color={isSelected ? Palette.Blue700 : Palette.Gray400} />\n )}\n </div>\n </div>\n </div>\n {/* Since we are using childGap, we must wrap the label in an element and\n match the height of the icon for horizontal alignment */}\n {labelStyle === \"inline\" && (\n <Label label={label} tooltip={tooltip} inline xss={Css.smMd.gray900.if(compact).add(\"lineHeight\", \"1\").$} />\n )}\n <VisuallyHidden>\n <input ref={ref} {...inputProps} {...focusProps} {...tid} />\n </VisuallyHidden>\n </label>\n );\n}\n\n/** Styles */\n// Element sizes\nconst toggleHeight = (isCompact: boolean) => (isCompact ? 16 : 24);\nconst circleDiameter = (isCompact: boolean) => (isCompact ? 12 : 20);\n\n// Switcher/Toggle element styles\nexport const switchHoverStyles = Css.bgGray400.$;\nexport const switchFocusStyles = Css.bshFocus.$;\nexport const switchSelectedHoverStyles = Css.bgBlue900.$;\n\n// Circle inside Switcher/Toggle element styles\nfunction switchCircleDefaultStyles(isCompact: boolean) {\n return {\n ...Css.wPx(circleDiameter(isCompact))\n .hPx(circleDiameter(isCompact))\n .br100.bgWhite.bshBasic.absolute.leftPx(2)\n .topPx(2).transition.df.aic.jcc.$,\n svg: Css.hPx(toggleHeight(isCompact) / 2).wPx(toggleHeight(isCompact) / 2).$,\n };\n}\n\n/**\n * Affecting the `left` property due to transitions only working when there is\n * a previous value to work from.\n *\n * Calculation is as follows:\n * - `100%` is the toggle width\n * - `${circleDiameter(isCompact)}px` is the circle diameter\n * - `2px` is to keep 2px edge spacing.\n */\nfunction switchCircleSelectedStyles(isCompact: boolean) {\n return Css.left(`calc(100% - ${circleDiameter(isCompact)}px - 2px);`).$;\n}\n","import { useRef } from \"react\";\nimport { mergeProps, useTextField } from \"react-aria\";\nimport { resolveTooltip } from \"src/components\";\nimport { Only } from \"src/Css\";\nimport { useGrowingTextField } from \"src/inputs/hooks/useGrowingTextField\";\nimport { TextFieldBase } from \"src/inputs/TextFieldBase\";\nimport { BeamTextFieldProps, TextFieldXss } from \"src/interfaces\";\nimport { maybeCall } from \"src/utils\";\n\n// Exported for test purposes\nexport interface TextAreaFieldProps<X> extends BeamTextFieldProps<X> {\n // Does not allow the user to enter new line characters and removes minimum height for textarea.\n preventNewLines?: boolean;\n // `onEnter` is only triggered when `preventNewLines` is set to `true`\n onEnter?: VoidFunction;\n}\n\n/** Returns a <textarea /> element that auto-adjusts height based on the field's value */\nexport function TextAreaField<X extends Only<TextFieldXss, X>>(props: TextAreaFieldProps<X>) {\n const {\n value = \"\",\n disabled = false,\n readOnly = false,\n onBlur,\n onFocus,\n preventNewLines,\n onEnter,\n ...otherProps\n } = props;\n const isDisabled = !!disabled;\n const isReadOnly = !!readOnly;\n const textFieldProps = { ...otherProps, value, isDisabled, isReadOnly };\n const inputRef = useRef<HTMLTextAreaElement | null>(null);\n const inputWrapRef = useRef<HTMLDivElement | null>(null);\n\n useGrowingTextField({ inputRef, inputWrapRef, value });\n\n const { labelProps, inputProps } = useTextField(\n {\n ...textFieldProps,\n inputElementType: \"textarea\",\n ...(preventNewLines\n ? {\n onKeyDown: (e) => {\n // Prevent user from typing the new line character\n if (e.key === \"Enter\") {\n e.preventDefault();\n maybeCall(onEnter);\n inputRef.current?.blur();\n }\n },\n onInput: (e) => {\n // Prevent user from pasting content that has new line characters and replace with empty space.\n const target = e.target as HTMLTextAreaElement;\n target.value = target.value.replace(/[\\n\\r]/g, \" \");\n },\n }\n : {}),\n },\n inputRef,\n );\n\n return (\n <TextFieldBase\n {...mergeProps(otherProps, { onBlur, onFocus })}\n multiline\n labelProps={labelProps}\n inputProps={inputProps}\n inputRef={inputRef}\n inputWrapRef={inputWrapRef}\n textAreaMinHeight={preventNewLines ? 0 : undefined}\n tooltip={resolveTooltip(disabled, undefined, readOnly)}\n />\n );\n}\n","import { MutableRefObject, ReactNode, useRef } from \"react\";\nimport { mergeProps, useTextField } from \"react-aria\";\nimport { resolveTooltip } from \"src/components\";\nimport { Only } from \"src/Css\";\nimport { TextFieldBase } from \"src/inputs/TextFieldBase\";\nimport { BeamTextFieldProps, TextFieldXss } from \"src/interfaces\";\nimport { maybeCall } from \"src/utils\";\n\n// exported for testing purposes\nexport interface TextFieldProps<X> extends BeamTextFieldProps<X> {\n compact?: boolean;\n clearable?: boolean;\n api?: MutableRefObject<TextFieldApi | undefined>;\n onEnter?: VoidFunction;\n /**\n * Allows a TextField to opt-in to bubbling up the escape key event to its parent.\n *\n * Usually this is a bad idea, because escape-in-a-modal might lose the user's WIP (without\n * sufficient \"are you sure\" checking), and so instead we let callers opt-in to this.\n *\n * Note that react-aria's `useSearchField` / `useComboBox` seems to have this built-in:\n * https://github.com/adobe/react-spectrum/issues/5480\n */\n onEscapeBubble?: boolean;\n endAdornment?: ReactNode;\n startAdornment?: ReactNode;\n hideErrorMessage?: boolean;\n /** Allow focusing without selecting, i.e. to let the user keep typing after we've pre-filled text + called focus, like the Add New component. */\n selectOnFocus?: boolean;\n}\n\nexport function TextField<X extends Only<TextFieldXss, X>>(props: TextFieldProps<X>) {\n const {\n disabled = false,\n readOnly = false,\n required,\n errorMsg,\n value = \"\",\n onBlur,\n onFocus,\n api,\n onEnter,\n onEscapeBubble,\n hideErrorMessage,\n ...otherProps\n } = props;\n\n const isDisabled = !!disabled;\n const isReadOnly = !!readOnly;\n const textFieldProps = {\n ...otherProps,\n isDisabled,\n isReadOnly,\n isRequired: required,\n validationState: errorMsg ? (\"invalid\" as const) : (\"valid\" as const),\n value,\n };\n const inputRef = useRef<HTMLInputElement | null>(null);\n const { labelProps, inputProps } = useTextField(\n {\n ...textFieldProps,\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n maybeCall(onEnter);\n inputRef.current?.blur();\n } else if (e.key === \"Escape\" && onEscapeBubble) {\n // Allow closing modals from within text fields...\n e.continuePropagation();\n }\n },\n },\n inputRef,\n );\n\n // Construct our TextFieldApi to give access to some imperative methods\n if (api) {\n api.current = {\n focus: () => inputRef.current && inputRef.current.focus(),\n };\n }\n\n return (\n <TextFieldBase\n {...mergeProps(textFieldProps, { onBlur, onFocus })}\n errorMsg={errorMsg}\n required={required}\n labelProps={labelProps}\n inputProps={inputProps}\n inputRef={inputRef}\n tooltip={resolveTooltip(disabled, undefined, readOnly)}\n hideErrorMessage={hideErrorMessage}\n />\n );\n}\n\nexport type TextFieldApi = {\n focus: VoidFunction;\n};\n","import { ReactNode, useRef, useState } from \"react\";\nimport { useFocusRing, useHover, usePress, useSwitch, VisuallyHidden } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { Icon, IconKey, maybeTooltip, resolveTooltip } from \"src/components\";\nimport { Css } from \"src/Css\";\nimport { isPromise, useTestIds } from \"src/utils\";\n\nexport interface ToggleButtonProps {\n /** Input label */\n label: string;\n selected?: boolean;\n onChange: ((selected: boolean) => void) | ((selected: boolean) => Promise<void>);\n autoFocus?: boolean;\n icon?: IconKey;\n /** Whether the field is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n tooltip?: ReactNode;\n}\n\nexport function ToggleButton(props: ToggleButtonProps) {\n const { selected: isSelected = false, disabled = false, label, onChange, icon, ...otherProps } = props;\n const [asyncInProgress, setAsyncInProgress] = useState(false);\n const isDisabled = !!disabled || asyncInProgress;\n const ariaProps = { \"aria-label\": label, isSelected, isDisabled, ...otherProps };\n const state = useToggleState({\n ...ariaProps,\n onChange: (e) => {\n const result = onChange(e);\n if (isPromise(result)) {\n setAsyncInProgress(true);\n result.finally(() => setAsyncInProgress(false));\n }\n return result;\n },\n });\n const labelRef = useRef(null);\n const ref = useRef(null);\n const tid = useTestIds(props, label);\n const { isPressed, pressProps } = usePress({ ref: labelRef, isDisabled });\n const { inputProps } = useSwitch(ariaProps, state, ref);\n const { isFocusVisible: isKeyboardFocus, focusProps } = useFocusRing({ ...otherProps, within: true });\n const { hoverProps, isHovered } = useHover({ isDisabled });\n\n const tooltip = resolveTooltip(disabled);\n\n const labelAttrs = {\n ...focusProps,\n ...hoverProps,\n ...pressProps,\n css: {\n ...Css.br4.dif.aic.gap1.bgTransparent.gray500.hPx(32).plPx(4).pr1.relative.cursorPointer.w(\"max-content\").smMd.usn\n .$,\n ...(isHovered && toggleHoverStyles),\n ...(isPressed && togglePressStyles),\n ...(isSelected && !isDisabled && Css.blue700.$),\n ...(isKeyboardFocus && toggleFocusStyles),\n ...(isDisabled && Css.gray300.cursorNotAllowed.$),\n },\n ...tid,\n };\n\n return maybeTooltip({\n title: tooltip,\n placement: \"top\",\n children: (\n <label {...labelAttrs}>\n {icon && <Icon icon={icon} />}\n {label}\n <VisuallyHidden>\n <input ref={ref} {...inputProps} {...tid.value} />\n </VisuallyHidden>\n </label>\n ),\n });\n}\n\n/** Styles */\n// Toggle element styles\nexport const toggleHoverStyles = Css.bgGray100.$;\nexport const toggleFocusStyles = Css.bshFocus.$;\nexport const togglePressStyles = Css.bgGray300.$;\n","import { ReactNode, useRef } from \"react\";\nimport { useCheckboxGroup, useCheckboxGroupItem, useFocusRing, VisuallyHidden } from \"react-aria\";\nimport { CheckboxGroupState, useCheckboxGroupState } from \"react-stately\";\nimport { maybeTooltip, resolveTooltip } from \"src/components\";\nimport { Label } from \"src/components/Label\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Palette, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\ntype ToggleChipXss = Xss<\"color\" | \"backgroundColor\">;\n\ntype ToggleChipItemProps = {\n label: string;\n value: string;\n startAdornment?: ReactNode;\n /**\n * Whether the interactive element is disabled.\n *\n * If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip.\n */\n disabled?: boolean | ReactNode;\n};\n\nexport interface ToggleChipGroupProps extends Pick<PresentationFieldProps, \"labelStyle\"> {\n label: string;\n options: ToggleChipItemProps[];\n values: string[];\n onChange: (values: string[]) => void;\n xss?: ToggleChipXss;\n}\n\nexport function ToggleChipGroup(props: ToggleChipGroupProps) {\n const { fieldProps } = usePresentationContext();\n const { labelLeftFieldWidth = \"50%\" } = fieldProps ?? {};\n const { values, label, labelStyle = fieldProps?.labelStyle ?? \"above\", options, xss } = props;\n const state = useCheckboxGroupState({ ...props, value: values });\n const { groupProps, labelProps } = useCheckboxGroup(props, state);\n const tid = useTestIds(props, \"toggleChip\");\n\n return (\n <div {...groupProps} css={Css.relative.df.fdc.if(labelStyle === \"left\").fdr.gap2.maxw100.jcsb.$}>\n <Label label={label} {...labelProps} hidden={labelStyle === \"hidden\"} inline={labelStyle !== \"above\"} />\n <div\n css={\n Css.df.gap1\n .add(\"flexWrap\", \"wrap\")\n .if(labelStyle === \"left\")\n .w(labelLeftFieldWidth).$\n }\n >\n {options.map((o) => (\n <ToggleChip\n key={o.value}\n value={o.value}\n groupState={state}\n selected={state.value.includes(o.value)}\n label={o.label}\n disabled={o.disabled}\n startAdornment={o.startAdornment}\n xss={xss}\n {...tid[o.value]}\n />\n ))}\n </div>\n </div>\n );\n}\n\ninterface ToggleChipProps {\n label: string;\n value: string;\n groupState: CheckboxGroupState;\n selected: boolean;\n /**\n * Whether the interactive element is disabled.\n *\n * If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip.\n */\n disabled?: boolean | ReactNode;\n startAdornment?: ReactNode;\n xss?: ToggleChipXss;\n}\n\nfunction ToggleChip(props: ToggleChipProps) {\n const { label, value, groupState, selected: isSelected, disabled = false, startAdornment, xss, ...others } = props;\n const isDisabled = !!disabled;\n const ref = useRef(null);\n const { inputProps } = useCheckboxGroupItem({ value, \"aria-label\": label, isDisabled }, groupState, ref);\n const { isFocusVisible, focusProps } = useFocusRing();\n const tooltip = resolveTooltip(disabled);\n\n return maybeTooltip({\n title: tooltip,\n placement: \"top\",\n children: (\n <label\n css={{\n ...Css.relative.dif.gap1.aic.br16.sm.px1.cursorPointer.pyPx(4).bgGray200.if(isDisabled).cursorNotAllowed\n .gray600.pr1.$,\n ...(isSelected\n ? {\n ...Css.color(xss?.color ?? Palette.White).bgColor(xss?.backgroundColor ?? Palette.Blue700).$,\n \":hover:not([data-disabled='true'])\": Css.bgColor(xss?.backgroundColor ?? Palette.Blue800).$,\n }\n : { \":hover:not([data-disabled='true'])\": Css.bgGray300.$ }),\n ...(isFocusVisible ? Css.bshFocus.$ : {}),\n }}\n data-selected={isSelected}\n data-disabled={isDisabled}\n aria-disabled={isDisabled}\n {...others}\n >\n <VisuallyHidden>\n <input {...inputProps} {...focusProps} />\n </VisuallyHidden>\n {startAdornment}\n {label}\n </label>\n ),\n });\n}\n","import { Icon } from \"src\";\nimport { CollapseToggle } from \"src/components/Table/components/CollapseToggle\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { SelectToggle } from \"src/components/Table/components/SelectToggle\";\nimport { GridColumn, GridColumnWithId, Kinded, nonKindGridColumnKeys } from \"src/components/Table/types\";\nimport { DragData, emptyCell } from \"src/components/Table/utils/utils\";\nimport { Css } from \"src/Css\";\nimport { isFunction, newMethodMissingProxy } from \"src/utils\";\n\n/** Provides default styling for a GridColumn representing a Date. */\nexport function column<T extends Kinded>(columnDef: GridColumn<T>): GridColumn<T> {\n return { ...columnDef };\n}\n\n/** Provides default styling for a GridColumn representing a Date. */\nexport function dateColumn<T extends Kinded>(columnDef: GridColumn<T>): GridColumn<T> {\n return { ...columnDef, align: \"left\" };\n}\n\n/**\n * Provides default styling for a GridColumn representing a Numeric value (Price, percentage, PO #, etc.). */\nexport function numericColumn<T extends Kinded>(columnDef: GridColumn<T>): GridColumn<T> {\n return { ...columnDef, align: \"right\" };\n}\n\n/** Provides default styling for a GridColumn representing an Action. */\nexport function actionColumn<T extends Kinded>(columnDef: GridColumn<T>): GridColumn<T> {\n return { clientSideSort: false, ...columnDef, align: \"center\", isAction: true, wrapAction: false };\n}\n\n/**\n * Provides default styling for a GridColumn containing a checkbox.\n *\n * We allow either no `columnDef` at all, or a partial column def (i.e. to say a Totals row should\n * not have a `SelectToggle`, b/c we can provide the default behavior a `SelectToggle` for basically\n * all rows.\n */\nexport function selectColumn<T extends Kinded>(columnDef?: Partial<GridColumn<T>>): GridColumn<T> {\n const base = {\n ...nonKindDefaults(),\n id: \"beamSelectColumn\",\n clientSideSort: false,\n align: \"center\",\n // Defining `w: 40px` to accommodate for the `16px` wide checkbox and `12px` of padding on either side.\n w: \"40px\",\n wrapAction: false,\n isAction: true,\n // Select Column should not display the select toggle for `expandableHeader` or `totals` row kinds\n expandableHeader: emptyCell,\n totals: emptyCell,\n // Use any of the user's per-row kind methods if they have them.\n ...columnDef,\n };\n // Use newMethodMissingProxy so the user can use whatever kinds they want, i.e. `myRowKind: () => ...Toggle... `\n return newMethodMissingProxy(base, (key) => {\n return (data: any, { row }: { row: GridDataRow<any> }) => ({\n content: <SelectToggle id={row.id} disabled={row.selectable === false} />,\n });\n }) as any;\n}\n\n/**\n * Provides default styling for a GridColumn containing a collapse icon.\n *\n * We allow either no `columnDef` at all, or a partial column def (i.e. to say a Totals row should\n * not have a `CollapseToggle`, b/c we can provide the default behavior a `CollapseToggle` for basically\n * all rows.\n */\nexport function collapseColumn<T extends Kinded>(columnDef?: Partial<GridColumn<T>>): GridColumn<T> {\n const base = {\n ...nonKindDefaults(),\n id: \"beamCollapseColumn\",\n clientSideSort: false,\n align: \"center\",\n // Defining `w: 38px` based on the designs\n w: \"38px\",\n wrapAction: false,\n isAction: true,\n // Collapse Column should not display the collapse toggle for `expandableHeader` or `totals` row kinds\n expandableHeader: emptyCell,\n totals: emptyCell,\n ...columnDef,\n };\n // Use newMethodMissingProxy so the user can use whatever kinds they want, i.e. `myRowKind: () => ...Collapse... `\n return newMethodMissingProxy(base, (key) => {\n return (data: any, { row, level }: { row: GridDataRow<any>; level: number }) => ({\n content: <CollapseToggle row={row} compact={level > 0} />,\n });\n }) as any;\n}\n\n// Keep keys like `w` and `mw` from hitting the method missing proxy\nfunction nonKindDefaults() {\n return Object.fromEntries(nonKindGridColumnKeys.map((key) => [key, undefined]));\n}\n\n/**\n * Calculates column widths using a flexible `calc()` definition that allows for consistent column alignment without the use of `<table />`, CSS Grid, etc layouts.\n * Enforces only fixed-sized units (% and px)\n */\nexport function calcColumnSizes<R extends Kinded>(\n columns: GridColumnWithId<R>[],\n tableWidth: number | undefined,\n tableMinWidthPx: number = 0,\n expandedColumnIds: string[],\n): string[] {\n // For both default columns (1fr) as well as `w: 4fr` columns, we translate the width into an expression that looks like:\n // calc((100% - allOtherPercent - allOtherPx) * ((myFr / totalFr))`\n //\n // Which looks _a lot_ like how `fr` units just work out-of-the-box.\n //\n // Unfortunately, something about having our header & body rows in separate divs (which is controlled\n // by react-virtuoso), even if they have the same width, for some reason `fr` units between the two\n // will resolve every slightly differently, where as this approach they will match exactly.\n const { claimedPercentages, claimedPixels, totalFr } = columns.reduce(\n (acc, { id, w: _w, expandedWidth }) => {\n const w = expandedColumnIds.includes(id) && expandedWidth !== undefined ? expandedWidth : _w;\n\n if (typeof w === \"undefined\") {\n return { ...acc, totalFr: acc.totalFr + 1 };\n } else if (typeof w === \"number\") {\n return { ...acc, totalFr: acc.totalFr + w };\n } else if (w.endsWith(\"fr\")) {\n return { ...acc, totalFr: acc.totalFr + Number(w.replace(\"fr\", \"\")) };\n } else if (w.endsWith(\"px\")) {\n return { ...acc, claimedPixels: acc.claimedPixels + Number(w.replace(\"px\", \"\")) };\n } else if (w.endsWith(\"%\")) {\n return { ...acc, claimedPercentages: acc.claimedPercentages + Number(w.replace(\"%\", \"\")) };\n } else {\n throw new Error(\"Beam Table column width definition only supports px, percentage, or fr units\");\n }\n },\n { claimedPercentages: 0, claimedPixels: 0, totalFr: 0 },\n );\n\n // In the event a column defines a fractional unit (fr) as the `w` value and a `mw` value in pixels,\n // it is possible that the min-width value will kick in and throw off our claimedPixel and totalFr calculations.\n // Once a `tableWidth` is defined, then we can adjust the claimedPixels and totalFr based on minWidth being present for any columns\n let adjustedClaimedPixels = claimedPixels;\n let adjustedTotalFr = totalFr;\n if (tableWidth) {\n columns.forEach(({ w, mw }) => {\n const frUnit = parseFr(w);\n if (mw === undefined || frUnit === undefined) return;\n\n const mwPx = Number(mw.replace(\"px\", \"\"));\n const calcedWidth =\n (tableWidth - (claimedPercentages / 100) * tableWidth - adjustedClaimedPixels) * (frUnit / adjustedTotalFr);\n // If the calculated width is less than the minWidth, then this column will be sized via pixels instead of `fr` units.\n if (calcedWidth < mwPx) {\n // Adjust the claimedPixels and totalFr accordingly\n adjustedClaimedPixels += mwPx;\n adjustedTotalFr -= frUnit;\n }\n });\n }\n\n // This is our \"fake but for some reason it lines up better\" fr calc\n function fr(myFr: number, mw: number): string {\n // If the tableWidth, then return a pixel value\n if (tableWidth) {\n const widthBasis = Math.max(tableWidth, tableMinWidthPx);\n const calcedWidth =\n (widthBasis - (claimedPercentages / 100) * widthBasis - adjustedClaimedPixels) * (myFr / adjustedTotalFr);\n\n return `${Math.max(calcedWidth, mw)}px`;\n }\n // Otherwise return the `calc()` value\n return `((100% - ${claimedPercentages}% - ${claimedPixels}px) * (${myFr} / ${totalFr}))`;\n }\n\n const sizes = columns.map(({ id, expandedWidth, w: _w, mw: _mw }) => {\n // Ensure `mw` is a pixel value if defined\n if (_mw !== undefined && !_mw.endsWith(\"px\")) {\n throw new Error(\"Beam Table column minWidth definition only supports pixel units\");\n }\n const mw = _mw ? Number(_mw.replace(\"px\", \"\")) : 0;\n const w = expandedColumnIds.includes(id) && expandedWidth !== undefined ? expandedWidth : _w;\n\n if (typeof w === \"undefined\") {\n return fr(1, mw);\n } else if (typeof w === \"string\") {\n if (w.endsWith(\"%\") || w.endsWith(\"px\")) {\n return w;\n } else if (w.endsWith(\"fr\")) {\n return fr(Number(w.replace(\"fr\", \"\")), mw);\n } else {\n throw new Error(\"Beam Table column width definition only supports px, percentage, or fr units\");\n }\n } else {\n return fr(w, mw);\n }\n });\n\n return sizes;\n}\n\n/** Assign column ids if missing. */\nexport function assignDefaultColumnIds<T extends Kinded>(columns: GridColumn<T>[]): GridColumnWithId<T>[] {\n return columns.map((c, idx) => {\n const { expandColumns } = c;\n // If `expandColumns` is a function, we don't instrument it atm.\n const expandColumnsWithId = isFunction(expandColumns)\n ? expandColumns\n : expandColumns?.map((ec, ecIdx) => ({\n ...ec,\n id: ec.id ?? `${generateColumnId(idx)}_${ecIdx}`,\n // Defining this as undefined to make TS happy for now.\n // If we do not explicitly set to `undefined`, TS thinks `expandColumns` could still be of type GridColumn<T> (not WithId).\n // We only support a single level of expanding columns, so this is safe to do.\n expandColumns: undefined,\n }));\n // We use `Object.assign` instead of spreading the `c` property to maintain\n // the proxy objects if the user used selectColumn/collapseColumn, which have\n // method-missing hooks that render empty cells for any non-header rows.\n return Object.assign(c, {\n id: c.id ?? generateColumnId(idx),\n expandColumns: expandColumnsWithId,\n });\n });\n}\n\nexport const generateColumnId = (columnIndex: number) => `beamColumn_${columnIndex}`;\n\nexport function dragHandleColumn<T extends Kinded>(columnDef?: Partial<GridColumn<T>>): GridColumn<T> {\n const base = {\n ...nonKindDefaults(),\n id: \"beamDragHandleColumn\",\n clientSideSort: false,\n align: \"center\",\n w: \"40px\",\n wrapAction: false,\n isAction: true,\n expandableHeader: emptyCell,\n totals: emptyCell,\n // Use any of the user's per-row kind methods if they have them.\n ...columnDef,\n };\n\n return newMethodMissingProxy(base, (key) => {\n return (data: any, { row, dragData }: { row: GridDataRow<T>; dragData: DragData<T> }) => {\n if (!dragData) return;\n const { rowRenderRef: ref, onDragStart, onDragEnd, onDrop, onDragEnter, onDragOver } = dragData;\n\n return {\n content: row.draggable ? (\n <div\n draggable={row.draggable}\n onDragStart={(evt) => {\n // show the whole row being dragged when dragging with the handle\n ref.current && evt.dataTransfer.setDragImage(ref.current, 0, 0);\n return onDragStart?.(row, evt);\n }}\n onDragEnd={(evt) => onDragEnd?.(row, evt)}\n onDrop={(evt) => onDrop?.(row, evt)}\n onDragEnter={(evt) => onDragEnter?.(row, evt)}\n onDragOver={(evt) => onDragOver?.(row, evt)}\n css={Css.ma.cursorPointer.$}\n >\n <Icon icon=\"drag\" />\n </div>\n ) : undefined,\n };\n };\n }) as any;\n}\n\nfunction parseFr(w: string | number | undefined): number | undefined {\n return typeof w === \"number\"\n ? w\n : typeof w === \"undefined\"\n ? 1\n : typeof w === \"string\" && w.endsWith(\"fr\")\n ? Number(w.replace(\"fr\", \"\"))\n : undefined;\n}\n","import { autorun, reaction } from \"mobx\";\nimport { Kinded } from \"src/components/Table/types\";\nimport { ColumnStates } from \"src/components/Table/utils/ColumnStates\";\nimport { loadArrayOrUndefined } from \"src/components/Table/utils/utils\";\n\n/** Loads/saves the column state from sessionStorage. */\nexport class ColumnStorage<R extends Kinded> {\n private expandedIds: string[] | undefined;\n private visibleIds: string[] | undefined;\n\n constructor(private states: ColumnStates<R>) {}\n\n loadExpanded(persistCollapse: string): void {\n const key = `expandedColumn_${persistCollapse}`;\n this.expandedIds = loadArrayOrUndefined(key);\n reaction(\n () => this.states.expandedColumns.map((cs) => cs.column.id),\n (columnIds) => sessionStorage.setItem(key, JSON.stringify(columnIds)),\n );\n }\n\n loadVisible(storageKey: string): void {\n this.visibleIds = loadArrayOrUndefined(storageKey);\n // Unlike the others, where we only store the value on change, we immediately\n // store this value (but I'm not sure why...), hence using `autorun`.\n autorun(() => {\n const columnIds = this.states.allVisibleColumns(\"web\").map((cs) => cs.column.id);\n sessionStorage.setItem(storageKey, JSON.stringify(columnIds));\n });\n }\n\n wasExpanded(id: string): boolean | undefined {\n return this.expandedIds?.includes(id);\n }\n\n wasVisible(id: string): boolean | undefined {\n return this.visibleIds?.includes(id);\n }\n\n done() {\n this.expandedIds = undefined;\n }\n}\n","import { ObservableMap } from \"mobx\";\nimport { Kinded } from \"src\";\nimport { GridDataRow } from \"src/components/Table/components/Row\";\nimport { DraggedOver, RowState } from \"src/components/Table/utils/RowState\";\nimport { RowStorage } from \"src/components/Table/utils/RowStorage\";\nimport { TableState } from \"src/components/Table/utils/TableState\";\nimport { HEADER, KEPT_GROUP, reservedRowKinds } from \"src/components/Table/utils/utils\";\n\n/**\n * Manages our tree of observable RowStates that manage each GridDataRow's behavior.\n */\nexport class RowStates<R extends Kinded> {\n // A flat map of all row id -> RowState\n private map = new ObservableMap<string, RowState<R>>();\n readonly table: TableState<R>;\n readonly storage = new RowStorage(this);\n // Pre-create the header to drive select-all/etc. behavior, even if the user\n // doesn't pass an explicit `header` GridDataRow in `rows.props`\n private readonly header: RowState<R>;\n // Pre-create our keptGroupRow for if/when we need it.\n private keptGroupRow: RowState<R>;\n /** The first level of rows, i.e. not the header (or kept group), but the totals + top-level children. */\n private topRows: RowState<R>[] = [];\n\n constructor(table: TableState<R>) {\n this.table = table;\n this.header = this.createHeaderRow();\n this.keptGroupRow = this.createKeptGroupRow(this.header);\n this.map.set(this.header.row.id, this.header);\n this.map.set(this.keptGroupRow.row.id, this.keptGroupRow);\n }\n\n /** Returns a flat list of all of our RowStates. */\n get allStates(): RowState<R>[] {\n return [...this.map.values()];\n }\n\n /** Returns the `RowState` for the given `id`. We should probably require `kind`. */\n get(id: string): RowState<R> {\n const rs = this.map.get(id);\n if (!rs) throw new Error(`No RowState for ${id}`);\n return rs;\n }\n\n /**\n * Merge a new set of `rows` prop into our state.\n *\n * Any missing rows are marked as `wasRemoved` so we can consider them \"kept\" if they're also selected.\n */\n setRows(rows: GridDataRow<R>[]): void {\n const states = this;\n const map = this.map;\n // Keep track of ids as we add them, to detect duplicates\n const seenIds = new Set<string>();\n // Keep track of existing rows, so we can mark any that are missing as removed\n const maybeKept = new Set(this.map.values());\n\n function addRowAndChildren(parent: RowState<R> | undefined, row: GridDataRow<R>): RowState<R> {\n // This should really be kind+id, but nearly all of our existing API uses just ids,\n // b/c we assume our ids are tagged/unique across parent/child kinds anyway. So go\n // ahead and enforce \"row.id must be unique across kinds\" b/c pragmatically that is\n // baked into the current API signatures.\n const key = row.id;\n\n if (seenIds.has(key)) {\n throw new Error(`Duplicate row id ${key}`);\n } else {\n seenIds.add(key);\n }\n\n let state = map.get(key);\n if (!state) {\n state = new RowState(states, parent, row);\n map.set(key, state);\n } else {\n state.parent = parent;\n state.row = row;\n state.removed = false;\n maybeKept.delete(state);\n }\n state.children = row.children?.map((child) => addRowAndChildren(state, child));\n return state;\n }\n\n // Probe for the header row, so we can create it as a root RowState, even\n // though we don't require the user to model their GridDataRows that way.\n const headerRow = rows.find((r) => r.kind === HEADER);\n this.header.row = headerRow || (missingHeader as GridDataRow<R>);\n // Add the top-level rows\n this.topRows = rows.filter((row) => row !== headerRow).map((row) => addRowAndChildren(this.header, row));\n // Always add the keptGroupRow, and we'll use keptGroupRow.isMatched=true/false to keep it\n // from messing up \"header is all selected\" if its hidden/when there are no kept rows.\n this.header.children = [this.keptGroupRow, ...this.topRows];\n\n // Then mark any remaining as removed\n for (const state of maybeKept) (state as any).markRemoved();\n\n // After the first load of real data, we detach collapse state, to respect\n // any incoming initCollapsed.\n if (this.topRows.some((rs) => !reservedRowKinds.includes(rs.row.kind))) {\n this.storage.done();\n }\n }\n\n /** Fully delete `ids`, so they don't show up in kept rows anymore. */\n delete(ids: string[]) {\n for (const id of ids) {\n const rs = this.map.get(id);\n if (rs) rs.removed = \"hard\";\n this.map.delete(id);\n }\n }\n\n /** Implements special collapse behavior, which is just the header's collapse/uncollapse. */\n toggleCollapsed(id: string): void {\n const rs = this.get(id);\n if (rs === this.header) {\n if (rs.collapsed) {\n // The header being \"opened\" opens everything\n for (const rs of this.allStates) rs.collapsed = false;\n } else {\n // The header being \"closed\" marks all non-leaf rows as collapsed,\n // so that when the user re-opens them, they open a level at a time.\n for (const rs of this.allStates) {\n if (rs.children) rs.collapsed = true;\n }\n }\n } else {\n rs.toggleCollapsed();\n // Ignore the kept group\n const topGroupRows = this.topRows.filter((rs) => !rs.isReservedKind && rs.children);\n if (topGroupRows.length > 0) {\n // The header might still be collapsed, even though the user has opened all the top-level rows\n if (topGroupRows.every((rs) => !rs.collapsed)) this.header.collapsed = false;\n // Alternatively, if the user has collapsed all top-level rows, then collapse the header as well.\n if (topGroupRows.every((rs) => rs.collapsed)) this.header.collapsed = true;\n }\n }\n }\n\n get visibleRows(): RowState<R>[] {\n const rows = this.header.selfAndMaybeChildren;\n if (this.header.row === missingHeader) {\n rows.splice(0, 1);\n }\n return rows;\n }\n\n /** Returns kept rows, i.e. those that were user-selected but then client-side or server-side filtered. */\n get keptRows(): RowState<R>[] {\n return this.allStates.filter((rs) => rs.isKept);\n }\n\n get collapsedRows(): RowState<R>[] {\n return this.allStates.filter((rs) => rs.collapsed);\n }\n\n private createHeaderRow(): RowState<R> {\n // We'll switch the rs.row from the `missingHeader` to the real header from the props.rows later\n return new RowState(this, undefined, missingHeader as GridDataRow<R>);\n }\n\n /** Create our synthetic \"group row\" for kept rows, that users never pass in, but we self-inject as needed. */\n private createKeptGroupRow(header: RowState<R>): RowState<R> {\n // The \"group row\" for selected rows that are hidden by filters and add the children\n const keptGroupRow: GridDataRow<any> = {\n id: KEPT_GROUP,\n kind: KEPT_GROUP,\n initCollapsed: true,\n selectable: false,\n data: undefined,\n children: [],\n pin: { at: \"first\", filter: true },\n };\n const rs = new RowState(this, header, keptGroupRow);\n // Make the RowState behave like a parent, even though we calc its visibleChildren.\n rs.children = [];\n return rs;\n }\n\n maybeSetRowDraggedOver(\n id: string,\n draggedOver: DraggedOver,\n requireSameParentRow: GridDataRow<R> | undefined = undefined,\n ): void {\n const rs = this.get(id);\n\n if (requireSameParentRow) {\n const requireParentRowState = this.get(requireSameParentRow.id);\n if (requireParentRowState.parent?.row?.id !== rs.parent?.row?.id) return;\n }\n\n // if this is an expanded parent and draggedOver is Below then we want to set this on this rows bottom-most child\n if (!rs.collapsed && rs.children && rs.children?.length > 0 && draggedOver === DraggedOver.Below) {\n let rowState = rs;\n // recursively find the bottom-most child\n while (rowState.children && rowState.children?.length > 0) {\n rowState = rowState.children[rowState.children.length - 1];\n }\n\n rowState.isDraggedOver = draggedOver;\n return;\n }\n\n // this allows a single-row re-render\n if (rs.isDraggedOver === draggedOver) return;\n rs.isDraggedOver = draggedOver;\n }\n}\n\nconst missingHeader = { kind: \"header\" as const, id: \"header\", data: \"MISSING\" };\n","import { reaction } from \"mobx\";\nimport { Kinded } from \"src\";\nimport { RowStates } from \"src/components/Table/utils/RowStates\";\nimport { loadArrayOrUndefined } from \"src/components/Table/utils/utils\";\n\n/**\n * Manages loading/saving our currently-collapsed rows to session storage.\n *\n * This is useful for pages that the user has to go in-out/out-of a lot, and\n * want it to restore, as much as possible, like their previous visit. Granted,\n * we try to superdrawer most of these experiences to avoid the user having to\n * jump off-page.\n *\n * Unlike most of our other states, this is not directly reactive/an observable,\n * although we do reactive to collapsedRows changing to persist the new state.\n */\nexport class RowStorage<R extends Kinded> {\n private historicalIds: string[] | undefined;\n\n constructor(private states: RowStates<R>) {}\n\n load(persistCollapse: string): void {\n // Load what our previously collapsed rows were\n this.historicalIds = loadArrayOrUndefined(persistCollapse);\n // And store new collapsed rows going forward\n reaction(\n () => this.states.collapsedRows.map((rs) => rs.row.id),\n (rowIds) => sessionStorage.setItem(persistCollapse, JSON.stringify(rowIds)),\n );\n }\n\n /** Once the first real-data load is done, we ignore historical ids so that we prefer any new data's `initCollapsed`. */\n done() {\n this.historicalIds = undefined;\n }\n\n /**\n * Returns if this row had been collapsed.\n *\n * Technically we return `undefined` if a) there is no persisted state for this row, or b) we are\n * past the first real-data load, and thus should prefer new incoming rows' `initCollapsed` flag.\n */\n wasCollapsed(id: string): boolean | undefined {\n return this.historicalIds?.includes(id);\n }\n}\n","import { useCallback, useRef } from \"react\";\n\n/**\n * A hook to add `data-render=${count}` to an element.\n *\n * This will output even in production mode, which in theory is not necessary\n * and we could/should avoid, but it should also be np.\n *\n * The intent is to leave it \"always on\" for dev & tests, so that engineers\n * and test suites can very easily grab \"what was the render count of that?\"\n * w/o bringing in one-off modes/tools.\n *\n * (One-off modes/tools are more appropriate for truly adhoc performance\n * but the intent is to use this in GridTable where \"what's the render count?\"\n * will be a common question.)\n */\nexport function useRenderCount(): { getCount: (id: string) => object } {\n const ref = useRef<Map<string, number>>(new Map());\n const getCount = useCallback((id: string) => {\n const count = ref.current.get(id) || 1;\n ref.current.set(id, count + 1);\n return { \"data-render\": count };\n }, []);\n return { getCount };\n}\n","import { Icon } from \"src/components/Icon\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Margin, Only, Palette, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\ntype ToggleChipXss = Xss<Margin>;\n\nexport interface ToggleChipProps<X> {\n text: string;\n onClick: () => void;\n xss?: X;\n disabled?: boolean;\n}\n\nexport function ToggleChip<X extends Only<ToggleChipXss, X>>(props: ToggleChipProps<X>) {\n const { text, onClick, xss = {}, disabled = false } = props;\n const { fieldProps } = usePresentationContext();\n // If compact, then use a smaller type scale\n const compact = fieldProps?.compact;\n const tid = useTestIds(props, \"chip\");\n return (\n <button\n type=\"button\"\n css={{\n ...Css[compact ? \"xs\" : \"sm\"].dif.aic.br16.pl1\n // Use a lower right-padding to get closer to the `X` circle when not disabled\n .prPx(2)\n .pyPx(2)\n .gray900.bgGray200.if(disabled)\n .gray600.pr1.mhPx(compact ? 20 : 28).$,\n \"&:hover:not(:disabled)\": Css.bgGray300.$,\n \"&:disabled\": Css.cursorNotAllowed.$,\n ...xss,\n }}\n disabled={disabled}\n onClick={onClick}\n {...tid}\n >\n <span css={Css.prPx(6).tal.lineClamp1.wbba.if(disabled).pr0.$} title={text}>\n {text}\n </span>\n {!disabled && (\n <span css={Css.fs0.br16.bgGray400.$}>\n <Icon icon=\"x\" color={Palette.Gray700} inc={compact ? 2 : undefined} />\n </span>\n )}\n </button>\n );\n}\n","import { ToggleChip } from \"src/components/ToggleChip\";\nimport { Css, Margin, Only, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\ntype ToggleChipXss = Xss<Margin>;\n\nexport interface ToggleChipsProps<T, X> {\n values: T[];\n getLabel: (value: T) => string;\n onRemove: (value: T) => void;\n xss?: X;\n}\n\n/** Renders a list of `Chip`s, with wrapping & appropriate margin between each `Chip`. */\nexport function ToggleChips<T, X extends Only<ToggleChipXss, X>>(props: ToggleChipsProps<T, X>) {\n const { values, getLabel, onRemove, xss } = props;\n const tid = useTestIds(props, \"toggleChips\");\n return (\n <div css={{ ...Css.df.add(\"flexWrap\", \"wrap\").gap1.$, ...xss }} {...tid}>\n {values.map((value) => (\n <ToggleChip key={getLabel(value)} text={getLabel(value)} onClick={() => onRemove(value)} {...tid.chip} />\n ))}\n </div>\n );\n}\n","import { useId, useResizeObserver } from \"@react-aria/utils\";\nimport { Dispatch, ReactNode, SetStateAction, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFocusRing } from \"react-aria\";\nimport { Icon } from \"src/components/Icon\";\nimport { Css, Only, Padding, Palette, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ntype AccordionXss = Xss<Padding>;\n\nexport interface AccordionProps<X = AccordionXss> {\n title: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n defaultExpanded?: boolean;\n size?: AccordionSize;\n /** Adds a top border (enabled by default) */\n topBorder?: boolean;\n /** Adds a bottom border (disabled by default) */\n bottomBorder?: boolean;\n /**\n * Used by AccordionList\n * Allows multiple accordions to be expanded simultaneously (enabled by default)\n */\n index?: number;\n setExpandedIndex?: Dispatch<SetStateAction<number | undefined>>;\n /** Turns the title into a button. If provided, disables expand/collapse on title text */\n titleOnClick?: VoidFunction;\n /** Used by Accordion list. Sets default padding to 0 for nested accordions */\n omitPadding?: boolean;\n /** Styles overrides for padding */\n xss?: X;\n /** Modifies the typography, padding, icon size and background color of the accordion header */\n compact?: boolean;\n}\n\nexport function Accordion<X extends Only<AccordionXss, X>>(props: AccordionProps<X>) {\n const {\n title,\n children,\n size,\n disabled = false,\n defaultExpanded = false,\n compact = false,\n topBorder = compact ? false : true,\n bottomBorder = false,\n index,\n setExpandedIndex,\n titleOnClick,\n omitPadding = false,\n xss,\n } = props;\n const tid = useTestIds(props, \"accordion\");\n const id = useId();\n const [expanded, setExpanded] = useState(defaultExpanded && !disabled);\n const { isFocusVisible, focusProps } = useFocusRing();\n const contentRef = useRef<HTMLDivElement>(null);\n // On initial render, if the accordion is expanded, then set `height` to auto to avoid unnecessary animation on render.\n const [contentHeight, setContentHeight] = useState(expanded ? \"auto\" : \"0\");\n\n useEffect(() => {\n setExpanded(defaultExpanded && !disabled);\n }, [defaultExpanded, disabled]);\n\n useEffect(() => {\n // When the `expanded` value changes - If true, it means the Accordion's content has been rendered, Otherwise, it's been hidden\n // Then when the content is displayed, the calculate its height so we can give this value to the container to animate height smoothly.\n // When content is removed, simply set the height back to 0\n setContentHeight(expanded && contentRef.current ? `${contentRef.current.scrollHeight}px` : \"0\");\n }, [expanded]);\n\n // Using a resizing observer to check if the content of the accordion changes (i.e. lazy loaded image, auto-sizing textarea, etc..),\n // If it does change, then we need to update the container's height accordingly. Only update the height if the accordion is expanded.\n // Note - This may result in two `setContentHeight` calls when the accordion opens: (1) via the above `useEffect` and (2) in `onResize`\n // Both `setContentHeight` calls _should_ set the same value, so no unnecessary re-renders would be triggered, making this a harmless additional set call.\n const onResize = useCallback(() => {\n if (contentRef.current && expanded) {\n setContentHeight(`${contentRef.current.scrollHeight}px`);\n }\n }, [expanded, setContentHeight]);\n useResizeObserver({ ref: contentRef, onResize });\n\n const toggle = useCallback(() => {\n setExpanded((prev) => !prev);\n if (setExpandedIndex) setExpandedIndex(index);\n }, [index, setExpandedIndex]);\n\n const touchableStyle = useMemo(\n () => ({\n ...Css.df.jcsb.gapPx(12).aic.p2.baseMd.outline(\"none\").onHover.bgGray100.if(!!titleOnClick).baseSb.$,\n ...(compact && Css.smMd.pl2.prPx(10).py1.bgGray100.mbPx(4).br8.onHover.bgGray200.$),\n ...(compact && !!titleOnClick && Css.br0.$),\n ...(disabled && Css.gray500.$),\n ...(isFocusVisible && Css.boxShadow(`inset 0 0 0 2px ${Palette.Blue700}`).$),\n ...xss,\n }),\n [compact, disabled, isFocusVisible, titleOnClick, xss],\n );\n\n return (\n <div\n {...tid.container}\n css={{\n ...Css.bcGray300.if(topBorder).bt.if(bottomBorder).bb.$,\n ...(size ? Css.wPx(accordionSizes[size]).$ : {}),\n }}\n >\n {titleOnClick ? (\n <div {...focusProps} aria-controls={id} aria-expanded={expanded} css={Css.df.$}>\n <button {...tid.title} disabled={disabled} css={{ ...touchableStyle, ...Css.fg1.$ }} onClick={titleOnClick}>\n {title}\n </button>\n <button\n {...tid.toggle}\n disabled={disabled}\n css={{ ...touchableStyle, ...Css.px2.jcfe.if(compact).pxPx(10).$ }}\n onClick={toggle}\n >\n <RotatingChevronIcon expanded={expanded} />\n </button>\n </div>\n ) : (\n <button\n {...tid.title}\n {...focusProps}\n aria-controls={id}\n aria-expanded={expanded}\n disabled={disabled}\n css={{ ...Css.w100.$, ...touchableStyle }}\n onClick={toggle}\n >\n <span css={Css.fg1.tal.$}>{title}</span>\n <RotatingChevronIcon expanded={expanded} />\n </button>\n )}\n <div\n {...tid.details}\n id={id}\n aria-hidden={!expanded}\n css={Css.oh.h(contentHeight).add(\"transition\", \"height 250ms ease-in-out\").$}\n >\n {expanded && (\n <div css={Css.px2.pb2.pt1.if(omitPadding).p0.$} ref={contentRef} {...tid.content}>\n {children}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction RotatingChevronIcon(props: { expanded: boolean }) {\n return (\n <span\n css={{\n ...Css.fs0.$,\n transition: \"transform 250ms linear\",\n transform: props.expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n }}\n >\n <Icon icon=\"chevronDown\" />\n </span>\n );\n}\n\nexport type AccordionSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nconst accordionSizes: Record<AccordionSize, number> = {\n xs: 240,\n sm: 360,\n md: 480,\n lg: 600,\n};\n","import { useState } from \"react\";\nimport { useTestIds } from \"..\";\nimport { Accordion, AccordionProps, AccordionSize } from \"./Accordion\";\n\ninterface AccordionListProps {\n accordions: AccordionProps[];\n /** Allows multiple accordions to be expanded simultaneously (enabled by default) */\n allowMultipleExpanded?: boolean;\n size?: AccordionSize;\n /** Modifies the typography, padding, icon size and background color of the accordion header */\n compact?: boolean;\n}\n\nexport function AccordionList(props: AccordionListProps) {\n const { accordions, size, allowMultipleExpanded = true, compact = false } = props;\n const [expandedIndex, setExpandedIndex] = useState<number | undefined>(\n accordions.findIndex((a) => a.defaultExpanded),\n );\n const tid = useTestIds(props, \"accordionList\");\n\n return (\n <>\n {accordions.map((accordionProps, index, arr) => (\n <Accordion\n key={index}\n {...accordionProps}\n {...tid}\n compact={compact}\n size={size}\n bottomBorder={compact ? false : index === arr.length - 1}\n defaultExpanded={!allowMultipleExpanded && expandedIndex === index}\n index={index}\n setExpandedIndex={setExpandedIndex}\n />\n ))}\n </>\n );\n}\n","import { useEffect } from \"react\";\nimport { Css, Palette } from \"src/Css\";\nimport { assertNever } from \"src/types\";\nimport { AutoSaveStatus, IconProps, Tooltip, useAutoSaveStatus } from \".\";\nimport { Icon } from \"./Icon\";\n\ninterface AutoSaveIndicatorProps {\n hideOnIdle?: boolean;\n doNotReset?: boolean;\n}\n\nexport function AutoSaveIndicator({ hideOnIdle, doNotReset }: AutoSaveIndicatorProps) {\n const { status, resetStatus, errors } = useAutoSaveStatus();\n\n useEffect(\n () => {\n if (doNotReset) return;\n /**\n * Any time AutoSaveIndicator dismounts, most likely on Page Navigation,\n * state should clear before the next Indicator mounts\n */\n return () => resetStatus();\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n switch (status) {\n case AutoSaveStatus.IDLE:\n return hideOnIdle ? null : <Indicator icon=\"cloudSave\" />;\n case AutoSaveStatus.SAVING:\n return <Indicator icon=\"refresh\" text=\"Saving...\" />;\n case AutoSaveStatus.DONE:\n return <Indicator icon=\"cloudSave\" text=\"Saved\" />;\n case AutoSaveStatus.ERROR:\n return (\n /**\n * Tooltip is expanding to fill as much available space as it can, possibly\n * rendering it far away from the Icon/Text. Wrap it with a div to constrain\n * it.\n */\n <div css={Css.dif.$}>\n <Tooltip title={String(errors)} placement=\"bottom\">\n <Indicator icon=\"error\" color={Palette.Red500} text=\"Error saving\" />\n </Tooltip>\n </div>\n );\n default:\n assertNever(status);\n }\n}\n\ninterface IndicatorProps {\n icon: IconProps[\"icon\"];\n color?: IconProps[\"color\"];\n text?: string;\n}\nfunction Indicator({ text, icon, color }: IndicatorProps) {\n return (\n <div data-testid=\"autoSave\" css={Css.df.gap1.aic.gray700.smMd.$}>\n <Icon icon={icon} color={color} />\n {text}\n </div>\n );\n}\n","// Import and re-export DateRange type so other apps do not need a direct dependency on react-day-picker\nimport React from \"react\";\nimport { DateRange as _DateRange } from \"react-day-picker\";\nexport type { _DateRange as DateRange };\n\nexport type HasIdIsh<V = string> = { id: V } | { code: V };\nexport type HasNameIsh = { name: string } | { displayName: string } | { label: string };\nexport type HasIdAndName<V = string> = { id: V; name: string };\n\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;\nexport type CheckFn = () => boolean;\nexport type CanCloseCheck = { check: CheckFn; discardText?: string; continueText?: string } | CheckFn;\nexport function assertNever(x: never): never {\n throw new Error(\"Unexpected object: \" + x);\n}\nexport type AnyObject = Record<string, unknown>;\nexport type ChildrenOnly = { children: React.ReactNode };\n","import { ReactNode } from \"react\";\nimport { Icon, IconKey } from \"src/components/Icon\";\nimport { IconButton } from \"src/components/IconButton\";\nimport { Css, Palette, Properties } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\nexport interface BannerProps {\n type: BannerTypes;\n message: ReactNode;\n onClose?: VoidFunction;\n showIcon?: boolean;\n}\n\nexport function Banner(props: BannerProps) {\n const { type, message, onClose = false, showIcon = true, ...others } = props;\n const tid = useTestIds(others, \"banner\");\n return (\n <div css={{ ...variantStyles[type], ...Css.df.aic.w100.gap1.p2.gray900.base.bshBasic.$ }} {...tid} role=\"alert\">\n {showIcon && (\n <span css={Css.fs0.$}>\n <Icon icon={typeToIcon[type]} {...tid.type} color={Palette.Gray900} />\n </span>\n )}\n <span css={Css.fg1.$} {...tid.message}>\n {message}\n </span>\n {onClose && (\n <span css={Css.lh(0).$}>\n <IconButton icon=\"x\" onClick={onClose} {...tid.close} color={Palette.Gray900} />\n </span>\n )}\n </div>\n );\n}\nconst typeToIcon: Record<BannerTypes, IconKey> = {\n success: \"checkCircle\",\n info: \"infoCircle\",\n warning: \"error\",\n alert: \"errorCircle\",\n error: \"xCircle\",\n};\n\nconst variantStyles: Record<BannerTypes, Properties> = {\n success: Css.bgGreen100.gray900.$,\n info: Css.bgBlue100.gray900.$,\n warning: Css.bgYellow200.gray900.$,\n alert: Css.bgGray200.gray900.$,\n error: Css.bgRed100.gray900.$,\n};\n\nexport type BannerTypes = \"error\" | \"warning\" | \"success\" | \"info\" | \"alert\";\n","import { createContext, MutableRefObject, PropsWithChildren, useContext, useMemo, useReducer, useRef } from \"react\";\nimport { OverlayProvider } from \"react-aria\";\nimport { AutoSaveStatusProvider } from \"src/components/AutoSaveStatus/index\";\nimport { Modal, ModalProps } from \"src/components/Modal/Modal\";\nimport { PresentationContextProps, PresentationProvider } from \"src/components/PresentationContext\";\nimport { SnackbarProvider } from \"src/components/Snackbar/SnackbarContext\";\nimport { SuperDrawer } from \"src/components/SuperDrawer/SuperDrawer\";\nimport { ContentStack } from \"src/components/SuperDrawer/useSuperDrawer\";\nimport { CanCloseCheck, CheckFn } from \"src/types\";\nimport { EmptyRef } from \"src/utils/index\";\nimport { RightPaneProvider } from \"./Layout\";\nimport { ToastProvider } from \"./Toast/ToastContext\";\n\n/** The internal state of our Beam context; see useModal and useSuperDrawer for the public APIs. */\nexport interface BeamContextState {\n modalState: MutableRefObject<ModalProps | undefined>;\n modalCanCloseChecks: MutableRefObject<CheckFn[]>;\n /** The div for ModalHeader to portal into. */\n modalHeaderDiv: HTMLDivElement;\n /** The div for ModalBody to portal into; note this can't be a ref b/c Modal hasn't set the ref at the time ModalBody renders. */\n modalBodyDiv: HTMLDivElement;\n /** The div for ModalFooter to portal into. */\n modalFooterDiv: HTMLDivElement;\n /** SuperDrawer contentStack, i.e. the main/non-detail content + 0-N detail contents. */\n drawerContentStack: MutableRefObject<readonly ContentStack[]>;\n /** Checks when closing SuperDrawer, for the main/non-detail drawer content. */\n drawerCanCloseChecks: MutableRefObject<CanCloseCheck[]>;\n /** Checks when closing SuperDrawer Details, a double array to keep per-detail lists. */\n drawerCanCloseDetailsChecks: MutableRefObject<CanCloseCheck[][]>;\n /** The div for SuperDrawerHeader to portal into. */\n sdHeaderDiv: HTMLDivElement;\n}\n\n/** This is only exported internally, for useModal and useSuperDrawer, it's not a public API. */\nexport const BeamContext = createContext<BeamContextState>({\n modalState: new EmptyRef(),\n modalCanCloseChecks: new EmptyRef(),\n modalHeaderDiv: undefined!,\n modalBodyDiv: undefined!,\n modalFooterDiv: undefined!,\n drawerContentStack: new EmptyRef(),\n drawerCanCloseChecks: new EmptyRef(),\n drawerCanCloseDetailsChecks: new EmptyRef(),\n sdHeaderDiv: undefined!,\n});\n\ninterface BeamProviderProps extends PropsWithChildren<PresentationContextProps> {}\n\nexport function BeamProvider({ children, ...presentationProps }: BeamProviderProps) {\n // We want the identity of these to be stable, b/c they end up being used as dependencies\n // in both useModal's and useSuperDrawer's return values, which means the end-application's\n // dependencies as well, i.e. things like GridTable rowStyles will memoize on openInDrawer.\n // So we use refs + a tick.\n const [, tick] = useReducer((prev) => prev + 1, 0);\n const modalRef = useRef<ModalProps | undefined>();\n const modalHeaderDiv = useMemo(() => document.createElement(\"div\"), []);\n const modalBodyDiv = useMemo(() => {\n const el = document.createElement(\"div\");\n // Ensure this wrapping div takes up the full height of its container in the case of a virtualized table within.\n el.style.height = \"100%\";\n return el;\n }, []);\n const modalCanCloseChecksRef = useRef<CheckFn[]>([]);\n const modalFooterDiv = useMemo(() => document.createElement(\"div\"), []);\n const drawerContentStackRef = useRef<ContentStack[]>([]);\n const drawerCanCloseChecks = useRef<CanCloseCheck[]>([]);\n const drawerCanCloseDetailsChecks = useRef<CanCloseCheck[][]>([]);\n const sdHeaderDiv = useMemo(() => document.createElement(\"div\"), []);\n\n // We essentially expose the refs, but with our own getters/setters so that we can\n // have the setters call `tick` to re-render this Provider\n const context = useMemo<BeamContextState>(() => {\n return {\n // These two keys need to trigger re-renders on change\n modalState: new PretendRefThatTicks(modalRef, tick),\n drawerContentStack: new PretendRefThatTicks(drawerContentStackRef, tick),\n // The rest we don't need to re-render when these are mutated, so just expose as-is\n modalCanCloseChecks: modalCanCloseChecksRef,\n modalHeaderDiv,\n modalBodyDiv,\n modalFooterDiv,\n drawerCanCloseChecks,\n drawerCanCloseDetailsChecks,\n sdHeaderDiv,\n };\n }, [modalBodyDiv, modalFooterDiv, modalHeaderDiv, sdHeaderDiv]);\n\n return (\n <BeamContext.Provider value={{ ...context }}>\n <PresentationProvider {...presentationProps}>\n <RightPaneProvider>\n <AutoSaveStatusProvider>\n <SnackbarProvider>\n {/* OverlayProvider is required for Modals generated via React-Aria */}\n <ToastProvider>\n <OverlayProvider>\n {children}\n {modalRef.current && <Modal {...modalRef.current} />}\n </OverlayProvider>\n <SuperDrawer />\n </ToastProvider>\n </SnackbarProvider>\n </AutoSaveStatusProvider>\n </RightPaneProvider>\n </PresentationProvider>\n </BeamContext.Provider>\n );\n}\n\n/** Looks like a ref, but invokes a re-render on set (w/o changing the setter identity). */\nclass PretendRefThatTicks<T> implements MutableRefObject<T> {\n constructor(\n private ref: MutableRefObject<T>,\n private tick: () => void,\n ) {}\n get current(): T {\n return this.ref.current;\n }\n set current(value) {\n this.ref.current = value;\n this.tick();\n }\n}\n\nexport function useBeamContext() {\n return useContext(BeamContext);\n}\n","import { useResizeObserver } from \"@react-aria/utils\";\nimport { MutableRefObject, PropsWithChildren, ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { FocusScope, OverlayContainer, useDialog, useModal, useOverlay, usePreventScroll } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { AutoSaveStatusProvider } from \"src/components\";\nimport { useBeamContext } from \"src/components/BeamContext\";\nimport { IconButton } from \"src/components/IconButton\";\nimport { useModal as ourUseModal } from \"src/components/Modal/useModal\";\nimport { Css, Only, Xss } from \"src/Css\";\nimport { useBreakpoint } from \"src/hooks\";\nimport { useTestIds } from \"src/utils\";\nimport { ModalProvider } from \"./ModalContext\";\n\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n\nexport interface ModalProps {\n /**\n * The modal size, defaults to `md`.\n *\n * If setting just `size: sm`, we'll use default a height. If the designer requests a specific\n * height, i.e. to pixel-perfect match the content, then use `size: { width: ..., height: pixels }`.\n */\n size?: ModalSize | { width: ModalSize; height: number };\n /** The content of the modal; for consistent styling use a fragment with `<ModalBody />` and `<ModalFooter />`. */\n content: ReactNode;\n /** Force scrolling i.e. to avoid content jumping left/right as scroll bar goes away/comes back. */\n forceScrolling?: boolean;\n /** Adds a callback that is called _after_ close has definitely happened. */\n onClose?: VoidFunction;\n /** Imperative API for interacting with the Modal */\n api?: MutableRefObject<ModalApi | undefined>;\n /** Adds a border for the header. */\n drawHeaderBorder?: boolean;\n /**\n * Defaults to `true`\n * Renders `x` icon and closes modal when users click outside of it.\n *\n * When false, relies on you to provide a way to close the modal, i.e. a cancel or confirm button.\n * Useful if you definitely need to force the user to make a choice.\n * */\n allowClosing?: boolean;\n}\n\nexport type ModalApi = {\n setSize: (size: ModalProps[\"size\"]) => void;\n};\n\n/**\n * Internal component for displaying a Modal; see `useModal` for the public API.\n *\n * Provides underlay, modal container, and header. Will disable scrolling of page under the modal.\n */\nexport function Modal(props: ModalProps) {\n const { size = \"md\", content, forceScrolling, api, drawHeaderBorder = false, allowClosing = true } = props;\n const isFixedHeight = typeof size !== \"string\";\n const ref = useRef(null);\n const { modalBodyDiv, modalFooterDiv, modalHeaderDiv } = useBeamContext();\n const { closeModal } = ourUseModal();\n const { overlayProps, underlayProps } = useOverlay(\n {\n ...props,\n isOpen: true,\n onClose: closeModal,\n isDismissable: true,\n shouldCloseOnInteractOutside: (el) => {\n // Do not close the Modal if the user is interacting with the Tribute mentions dropdown (via RichTextField) or with another 3rd party dialog (such as a lightbox) on top of it.\n return (\n allowClosing &&\n !(el.closest(\".tribute-container\") || el.closest(\"[role='dialog']\") || el.closest(\"[role='alert']\"))\n );\n },\n },\n ref,\n );\n const { modalProps } = useModal();\n const { dialogProps, titleProps } = useDialog({ role: \"dialog\" }, ref);\n const [[width, height], setSize] = useState(getSize(size));\n const modalBodyRef = useRef<HTMLDivElement | null>(null);\n const modalFooterRef = useRef<HTMLDivElement | null>(null);\n const modalHeaderRef = useRef<HTMLHeadingElement | null>(null);\n const testId = useTestIds({}, testIdPrefix);\n usePreventScroll();\n const { sm } = useBreakpoint();\n\n if (api) {\n api.current = { setSize: (size = \"md\") => setSize(getSize(size)) };\n }\n\n const [hasScroll, setHasScroll] = useState(forceScrolling ?? false);\n\n useResizeObserver({\n ref: modalBodyRef,\n onResize: useCallback(\n () => {\n const target = modalBodyRef.current!;\n if (forceScrolling === undefined && !isFixedHeight) {\n setHasScroll(target.scrollHeight > target.clientHeight);\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n ),\n });\n\n // Even though we use raw-divs for the createPortal calls, we do actually need to\n // use refs + useEffect to stitch those raw divs back into the React component tree.\n useEffect(\n () => {\n modalHeaderRef.current!.appendChild(modalHeaderDiv);\n modalBodyRef.current!.appendChild(modalBodyDiv);\n modalFooterRef.current!.appendChild(modalFooterDiv);\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [modalBodyRef, modalFooterRef, modalHeaderRef],\n );\n\n return (\n <ModalProvider>\n <OverlayContainer>\n <AutoSaveStatusProvider>\n <div css={Css.underlay.z4.$} {...underlayProps} {...testId.underlay}>\n <FocusScope contain restoreFocus autoFocus>\n <div\n css={\n Css.br24.bgWhite.bshModal.oh\n .maxh(\"90vh\")\n .df.fdc.wPx(width)\n .mhPx(defaultMinHeight)\n .if(isFixedHeight)\n .hPx(height)\n .if(sm)\n .add(\"height\", \"100dvh\")\n .add(\"width\", \"100dvw\")\n .maxh(\"none\").br0.$\n }\n ref={ref}\n {...overlayProps}\n {...dialogProps}\n {...modalProps}\n {...testId}\n >\n {/*\n Setup three children (header, content, footer), and flex grow the content.\n\n Use `fdrr` so that the close icon won't sit between \"modal header search field\"\n and the modal body results in the DOM focus order, i.e. in our global search modal.\n */}\n <header css={Css.df.fdrr.p3.fs0.if(drawHeaderBorder).bb.bcGray200.$}>\n <span css={Css.fs0.pl1.$}>\n {allowClosing && <IconButton icon=\"x\" onClick={closeModal} {...testId.titleClose} />}\n </span>\n <h1 css={Css.fg1.xl2Sb.gray900.$} ref={modalHeaderRef} {...titleProps} {...testId.title} />\n </header>\n <main ref={modalBodyRef} css={Css.fg1.oya.if(hasScroll).bb.bcGray200.if(!!forceScrolling).oys.$}>\n {/* We'll include content here, but we expect ModalBody and ModalFooter to use their respective portals. */}\n {content}\n </main>\n <footer css={Css.fs0.$}>\n <div ref={modalFooterRef} />\n </footer>\n </div>\n </FocusScope>\n </div>\n </AutoSaveStatusProvider>\n </OverlayContainer>\n </ModalProvider>\n );\n}\n\nexport function ModalHeader({ children }: { children: ReactNode }): JSX.Element {\n const { modalHeaderDiv } = useBeamContext();\n return createPortal(<>{children}</>, modalHeaderDiv);\n}\n\n/** Provides consistent styling and the scrolling behavior for a modal's primary content. */\nexport function ModalBody({\n children,\n virtualized = false,\n}: PropsWithChildren<{ virtualized?: boolean }>): JSX.Element {\n const { modalBodyDiv } = useBeamContext();\n const testId = useTestIds({}, testIdPrefix);\n return createPortal(\n // If `virtualized`, then we are expecting the `children` will handle their own scrollbar, so have the overflow hidden and adjust padding\n <div css={Css.h100.if(virtualized).oh.pl3.else.px3.$} {...testId.content}>\n {children}\n </div>,\n modalBodyDiv,\n );\n}\n\ntype ModalFooterXss = Xss<\"justifyContent\" | \"alignItems\">;\n\n/** Provides consistent styling for modal footers, i.e. where actions are placed. */\nexport function ModalFooter<X extends Only<ModalFooterXss, X>>({\n children,\n xss,\n}: {\n children: ReactNode;\n xss?: X;\n}): JSX.Element {\n const { modalFooterDiv } = useBeamContext();\n const testId = useTestIds({}, testIdPrefix);\n return createPortal(\n <div css={{ ...Css.p3.df.aic.jcfe.gap1.$, ...xss }} {...testId.footer}>\n {children}\n </div>,\n modalFooterDiv,\n );\n}\n\nconst testIdPrefix = \"modal\";\n\nconst widths: Record<ModalSize, number> = {\n sm: 320,\n md: 480,\n lg: 640,\n xl: 800,\n xxl: 900,\n};\n\nconst defaultMinHeight = 204;\n\nfunction getSize(size: ModalSize | { width: ModalSize; height: number }): [number, number] {\n if (typeof size === \"string\") {\n return [widths[size], defaultMinHeight];\n } else {\n return [widths[size.width], size.height];\n }\n}\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { useBeamContext } from \"src/components/BeamContext\";\nimport { CheckFn } from \"src/types\";\nimport { maybeCall } from \"src/utils\";\nimport { ModalApi, ModalProps } from \"./Modal\";\nimport { useModalContext } from \"./ModalContext\";\n\nexport interface UseModalHook {\n openModal: (props: ModalProps) => void;\n closeModal: VoidFunction;\n addCanClose: (canClose: CheckFn) => void;\n setSize: (size: ModalProps[\"size\"]) => void;\n inModal: boolean;\n}\n\nexport function useModal(): UseModalHook {\n const { modalState, modalCanCloseChecks } = useBeamContext();\n const { inModal } = useModalContext();\n const lastCanClose = useRef<CheckFn | undefined>();\n const api = useRef<ModalApi>();\n useEffect(() => {\n return () => {\n modalCanCloseChecks.current = modalCanCloseChecks.current.filter((c) => c !== lastCanClose.current);\n };\n }, [modalCanCloseChecks]);\n return useMemo(\n () => ({\n openModal(props) {\n // TODO Check already open?\n // TODO Check can leave?\n modalState.current = { ...props, api };\n },\n closeModal() {\n // TODO: Should remove checks\n for (const canCloseModal of modalCanCloseChecks.current) {\n if (!canCloseModal()) {\n return;\n }\n }\n maybeCall(modalState.current?.onClose);\n modalState.current = undefined;\n },\n // TODO: Rename as a breaking change\n addCanClose(canClose) {\n modalCanCloseChecks.current = [\n // Only allow one canClose per component at a time; this lets the caller avoid useMemo'ing their lambda\n ...modalCanCloseChecks.current.filter((c) => c !== lastCanClose.current),\n canClose,\n ];\n lastCanClose.current = canClose;\n },\n setSize(size: ModalProps[\"size\"]) {\n if (modalState.current && modalState.current.api?.current) {\n modalState.current.api.current.setSize(size);\n }\n },\n inModal,\n }),\n [inModal, modalState, modalCanCloseChecks],\n );\n}\n","import { createContext, ReactNode, useContext, useMemo } from \"react\";\n\ninterface ModalContextState {\n inModal: boolean;\n}\n\nexport const ModalContext = createContext<ModalContextState>({ inModal: false });\n\ninterface ModalProviderProps {\n children: ReactNode;\n}\n\nexport function ModalProvider({ children }: ModalProviderProps) {\n const value = useMemo(() => ({ inModal: true }), []);\n return <ModalContext.Provider value={value}>{children}</ModalContext.Provider>;\n}\n\nexport function useModalContext(): ModalContextState {\n return useContext(ModalContext);\n}\n","import React, { createContext, useContext, useMemo, useState } from \"react\";\nimport { SnackbarNoticeProps } from \"src/components/Snackbar/SnackbarNotice\";\nimport { ChildrenOnly } from \"src/types\";\nimport { Offset, Snackbar } from \"./Snackbar\";\n\nexport type SnackbarContextProps = {\n setNotices: React.Dispatch<React.SetStateAction<SnackbarNoticeProps[]>>;\n setOffset: React.Dispatch<React.SetStateAction<Offset>>;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextProps>({ setNotices: () => {}, setOffset: () => {} });\n\nexport function SnackbarProvider(props: ChildrenOnly) {\n const [notices, setNotices] = useState<SnackbarNoticeProps[]>([]);\n const [offset, setOffset] = useState<Offset>({});\n const contextValue = useMemo(() => ({ setNotices, setOffset }), []);\n return (\n <SnackbarContext.Provider value={contextValue}>\n {props.children}\n <Snackbar notices={notices} offset={offset} />\n </SnackbarContext.Provider>\n );\n}\n\nexport function useSnackbarContext() {\n return useContext(SnackbarContext);\n}\n","import { ReactNode } from \"react\";\nimport { Button, ButtonProps } from \"src/components/Button\";\nimport { Icon, IconProps } from \"src/components/Icon\";\nimport { IconButton } from \"src/components/IconButton\";\nimport { Css, Palette } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\nexport type SnackbarNoticeTypes = \"error\" | \"warning\" | \"success\" | \"info\" | \"alert\";\nexport interface SnackbarNoticeProps {\n /** Adds action button to the right of the notice */\n action?: Pick<ButtonProps, \"label\" | \"onClick\" | \"variant\">;\n /** Does not allow the user to close the notice manually. Notice will fade away in 10s. Value will be ignored if 'persistent' is set to 'true'. */\n hideCloseButton?: boolean;\n message: ReactNode;\n /** This notice will persist on the screen until systematically closed by the app or by the user clicking the close button. */\n persistent?: boolean;\n /** Defines the icon that will show on the left side of the notification. */\n icon?: SnackbarNoticeTypes;\n /** Unique identifier to allow notice to close itself */\n id: string;\n /** Removes the snackbar notice from the stack */\n onClose: () => void;\n}\n\nexport function SnackbarNotice(props: SnackbarNoticeProps) {\n const { icon, message, action, hideCloseButton, persistent, onClose } = props;\n const tid = useTestIds(props, \"snackbar\");\n // Only allow the \"close\" button to be hidden if not a `persistent` notice. Otherwise we could get in a state where the user cannot remove the notice from the screen.\n const reallyHideClose = hideCloseButton && !persistent;\n return (\n <div css={Css.white.bgGray800.br4.base.df.aic.maxwPx(420).$} {...tid} role=\"alert\">\n {icon && (\n <span css={Css.fs0.plPx(12).$}>\n <Icon {...typeToIcon[icon]} {...tid.icon} />\n </span>\n )}\n\n <span\n css={Css.lineClamp3.pr2.myPx(12).plPx(icon ? 8 : 16).$}\n // Provide a 'title' attribute if we can in case the text is truncated\n {...(typeof message === \"string\" ? { title: message } : undefined)}\n {...tid.message}\n >\n {message}\n </span>\n\n {(action || !reallyHideClose) && (\n <span css={Css.fs0.df.aic.$}>\n {action && (\n <span css={Css.ttu.sm.prPx(!reallyHideClose && action.variant !== \"text\" ? 4 : 8).$}>\n <Button contrast {...action} {...tid.action} />\n </span>\n )}\n {!reallyHideClose && (\n <span css={Css.pr1.add(\"lineHeight\", 0).$}>\n <IconButton icon=\"x\" contrast onClick={onClose} {...tid.close} />\n </span>\n )}\n </span>\n )}\n </div>\n );\n}\n\nconst typeToIcon: Record<SnackbarNoticeTypes, Pick<IconProps, \"icon\" | \"color\">> = {\n // Can change to a Tupple with IconKey and color?\n error: { icon: \"xCircle\", color: Palette.Red400 },\n warning: { icon: \"error\", color: Palette.Yellow300 },\n success: { icon: \"checkCircle\", color: Palette.Green300 },\n info: { icon: \"infoCircle\", color: Palette.Blue300 },\n alert: { icon: \"errorCircle\", color: Palette.White },\n};\n","import { SnackbarNotice, SnackbarNoticeProps } from \"src/components/Snackbar/SnackbarNotice\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ninterface SnackbarProps {\n notices: SnackbarNoticeProps[];\n offset: Offset;\n}\n\nexport function Snackbar({ notices, offset }: SnackbarProps) {\n const tid = useTestIds({});\n return (\n <div\n {...tid.snackbarWrapper}\n css={Css.fixed.z999.bottomPx(offset.bottom ?? defaultOffset.bottom).left3.df.fdc.aifs.gapPx(12).$}\n >\n {notices.map((data) => (\n <SnackbarNotice key={data.id} {...data} />\n ))}\n </div>\n );\n}\n\nexport type Offset = {\n bottom?: number;\n};\n\nconst defaultOffset: Required<Offset> = {\n bottom: 24,\n};\n","import { Global } from \"@emotion/react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ReactPortal, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AutoSaveStatusProvider, IconButton, OpenInDrawerOpts, useSuperDrawer } from \"src/components\";\nimport { useBeamContext } from \"src/components/BeamContext\";\nimport { Css, px } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\nimport { SuperDrawerWidth } from \"./utils\";\n\n/**\n * Global drawer component.\n *\n * The aim of this drawer is to give extra details regarding a page content\n * without the need to change pages.\n *\n * NOTE: Since this component is a global component, meaning there is only one\n * per application shared between all children components of the application, we\n * needed to be strategic in its DOM placement and zIndex. That is why we are\n * using React.createPortal to append this component to the body so that\n * it can be nested at the highest level of the application and share the stacking\n * context with the application and any other global components. Having the\n * application set its zIndex at the body level will guarantee that no children\n * can ever \"break out\" of the stacking order and overlap global components.\n *\n * TLDR: Long term plan is to have all applications using Beam set their zIndex\n * to 0 and have SuperDrawer zIndex be 3 to give space to place other global\n * components (most likely Modal) between the application and SuperDrawer or\n * above the SuperDrawer.\n */\nexport function SuperDrawer(): ReactPortal | null {\n const { drawerContentStack: contentStack, sdHeaderDiv } = useBeamContext();\n const { closeDrawer } = useSuperDrawer();\n const headerRef = useRef<HTMLDivElement | null>(null);\n const testId = useTestIds({}, \"superDrawer\");\n // Get the latest element on the stack\n // We use undefined, nullish operators and empty object here to allow AnimatePresence\n // to animate the drawers exit transition when our stack is empty\n const currentContent = contentStack.current[contentStack.current.length - 1]?.opts;\n const { content } = currentContent ?? {};\n\n // Also get the first / non-detail element on the stack\n const firstContent = contentStack.current[0]?.opts as OpenInDrawerOpts;\n\n const { width = SuperDrawerWidth.Normal } = firstContent ?? {};\n\n useEffect(\n () => {\n if (headerRef.current?.childNodes.length === 0 && content) {\n headerRef.current.appendChild(sdHeaderDiv);\n }\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [headerRef, content],\n );\n\n return createPortal(\n <AnimatePresence>\n {content && (\n <>\n {/* Prevent scrolling when the SuperDrawer opens */}\n <Global styles={{ body: Css.oh.$ }} />\n {/* Overlay */}\n <motion.div\n {...testId}\n // Key is required for framer-motion animations\n key=\"superDrawer\"\n // TODO: Should this color be part of the Palette?\n // z-index of 3 is used to give flexibility for future overlapping content\n // Not using `inset` due to Safari 14.0.x not supporting this CSS property.\n css={Css.fixed.df.jcfe.add(\"backgroundColor\", \"rgba(36,36,36,0.2)\").top0.right0.bottom0.left0.z3.$}\n // Initial styles (acts similar to `from` in keyframe animations)\n initial={{ opacity: 0 }}\n // Rendered styles (acts similar to `to` in keyframe animations)\n animate={{ opacity: 1 }}\n // Unmount styles\n exit={{ opacity: 0, transition: { delay: 0.2 } }}\n onClick={closeDrawer}\n >\n {/* Content container */}\n <motion.aside\n key=\"superDrawerContainer\"\n css={Css.bgWhite.h100.maxw(px(width)).w100.df.fdc.relative.$}\n // Keeping initial x to 1040 as this will still work if the container is smaller\n initial={{ x: width }}\n animate={{ x: 0 }}\n // Custom transitions settings for the translateX animation\n transition={{ ease: \"linear\", duration: 0.2, delay: 0.2 }}\n exit={{ transition: { ease: \"linear\", duration: 0.2 }, x: width }}\n // Preventing clicks from triggering parent onClick\n onClick={(e) => e.stopPropagation()}\n >\n <AutoSaveStatusProvider>\n <header css={Css.p3.bb.bcGray200.df.aic.jcsb.gap3.$}>\n {/* Provide default styling for the `h1` tag within SuperDrawer to help with consistency */}\n <div ref={headerRef} css={Css.gray900.fg1.addIn(\"& h1\", Css.xl2Sb.$).$}></div>\n <IconButton icon=\"x\" onClick={closeDrawer} {...testId.close} />\n </header>\n {content}\n </AutoSaveStatusProvider>\n </motion.aside>\n </motion.div>\n </>\n )}\n </AnimatePresence>,\n document.body,\n );\n}\n","export enum SuperDrawerWidth {\n Small = 560,\n Normal = 1040,\n}\n","import { cloneElement, ReactElement } from \"react\";\nimport { useScrollableParent } from \"src/components/Layout/ScrollableParent\";\nimport { Css } from \"src/Css\";\n\n/** Provides a way to extend the full width of the ScrollableParent */\nexport function FullBleed({ children, omitPadding = false }: { children: ReactElement; omitPadding?: boolean }) {\n const { pr, pl } = useScrollableParent();\n return !pr && !pl\n ? children\n : cloneElement(children, {\n style: Css.ml(`-${pl}`).mr(`-${pr}`).if(!omitPadding).pl(pl).pr(pr).$,\n });\n}\n","import {\n createContext,\n Dispatch,\n PropsWithChildren,\n SetStateAction,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Css, Properties } from \"src/Css\";\n\ninterface ScrollableParentContextProps {\n scrollableEl: HTMLElement | null;\n pr: string | number;\n pl: string | number;\n setPortalTick: Dispatch<SetStateAction<number>>;\n}\n\nconst ScrollableParentContext = createContext<ScrollableParentContextProps>({\n scrollableEl: null,\n pr: 0,\n pl: 0,\n setPortalTick: (v) => {},\n});\n\n// Allow any css to be applied to the ScrollableParent container.\ninterface ScrollableParentContextProviderProps {\n xss?: Properties;\n // I.e. for blueprint we use the `main` tag in our layouts.\n tagName?: keyof JSX.IntrinsicElements;\n}\n\n/**\n * Provides a pattern for implementing \"multiple sticky\" components.\n *\n * In css, `position: sticky` is great for pinning 1 element to the top of a container.\n *\n * However, in UX patterns, we're often asked to pin multiple DOM elements that are actually\n * spread across multiple React components. For example:\n *\n * - Sticky a Header (in FooPage)\n * - Sticky the table filter & actions (in FooTable)\n * - Sticky the table header row(s) (in GridTable)\n *\n * Historically the way we did this was passing `stickyOffset`s around, where the header would be\n * `top: 0px`, the filter & actions would be `top: ${headerPx}px`, and the table header rows would\n * be `top: ${headerPx + filterActionsPx}px`.\n *\n * However, this is brittle as the `headerPx` / `filterActionsPx` are likely dynamic.\n *\n * `ScrollableParent` solves this by putting all the stickied content (except the table header rows)\n * into a single div, and then having the page use `ScrollableContent` to mark what should actually\n * scroll, which then we \"pull up\" to be a sibling div of \"everything that was stickied\".\n *\n * See [this miro](https://miro.com/app/board/o9J_l-FQ-RU=/) and how we need to \"cut the component in half\".\n */\nexport function ScrollableParent(props: PropsWithChildren<ScrollableParentContextProviderProps>) {\n const { children, xss, tagName: Tag = \"div\" as keyof JSX.IntrinsicElements } = props;\n const scrollableEl = useMemo(() => {\n const el = document.createElement(\"div\");\n // Ensure this wrapping div takes up the full height of its container\n el.style.height = \"100%\";\n return el;\n }, []);\n const [, setTick] = useState(0);\n const hasScrollableContent = scrollableEl.childNodes.length > 0;\n const scrollableRef = useRef<HTMLDivElement | null>(null);\n const { paddingLeft, paddingRight, ...otherXss } = xss || {};\n const context: ScrollableParentContextProps = {\n scrollableEl,\n pl: paddingLeft ?? 0,\n pr: paddingRight ?? 0,\n setPortalTick: setTick,\n };\n\n useEffect(() => {\n scrollableRef.current!.appendChild(scrollableEl);\n }, [scrollableEl]);\n\n return (\n <ScrollableParentContext.Provider value={context}>\n {/* mh0/mw0 will respect the flexbox boundaries of the \"flex-direction\" if set on a parent.\n * Otherwise, the flex-item's min-height/width is based on the content of the flex-item, which maybe overflow the container.\n * See https://stackoverflow.com/questions/42130384/why-should-i-specify-height-0-even-if-i-specified-flex-basis-0-in-css3-flexbox */}\n <Tag css={{ ...Css.mh0.mw0.fg1.df.fdc.$, ...otherXss }}>\n <div\n css={{\n ...Css.pl(context.pl).pr(context.pr).$,\n ...(!hasScrollableContent ? { ...Css.oa.h100.$, ...scrollContainerBottomPadding } : undefined),\n }}\n >\n {children}\n </div>\n {/* Set fg1 to take up the remaining space in the viewport.*/}\n <div css={Css.fg1.oa.$} ref={scrollableRef} />\n </Tag>\n </ScrollableParentContext.Provider>\n );\n}\n\nexport function useScrollableParent() {\n return useContext(ScrollableParentContext);\n}\n\n// Styles to wrap around the scrollable content in order to give padding beneath the content within the scrollable container.\nexport const scrollContainerBottomPadding = Css.addIn(\"&:after\", Css.contentEmpty.db.h2.$).$;\n","import { Css } from \"src/Css\";\nimport { ChildrenOnly } from \"src/types\";\n\n/** Intended to wrap the whole application to prevent the browser's native scrolling behavior while also taking the full height of the viewport */\nexport function PreventBrowserScroll({ children }: ChildrenOnly) {\n return (\n // Take over the full viewport and hide any overflown content.\n // Using `-webkit-fill-available`, otherwise `height: 100vh` includes the app bars in mobile Safari. See https://allthingssmitty.com/2020/05/11/css-fix-for-100vh-in-mobile-webkit/\n // Setting the multiple \"(min|max-)height\" properties is necessary, as Truss will turn this into an object and there can only be one `height` property.\n <div css={Css.oh.vh100.mh(\"-webkit-fill-available\").maxh(\"-webkit-fill-available\").$}>\n {/* Provides a fallback for scrolling the application if nested scrolling isn't needed, or forgotten */}\n <div css={Css.h100.df.fdc.mh0.oa.$}>{children}</div>\n </div>\n );\n}\n","import React, { ReactNode, useCallback, useContext, useMemo, useState } from \"react\";\n\nexport interface OpenRightPaneOpts {\n content: ReactNode;\n}\n\nexport type RightPaneLayoutContextProps = {\n openInPane: (opts: OpenRightPaneOpts) => void;\n closePane: () => void;\n clearPane: () => void;\n isRightPaneOpen: boolean;\n rightPaneContent: ReactNode;\n};\n\nexport const RightPaneContext = React.createContext<RightPaneLayoutContextProps>({\n openInPane: () => {},\n closePane: () => {},\n clearPane: () => {},\n isRightPaneOpen: false,\n rightPaneContent: null,\n});\n\nexport function RightPaneProvider({ children }: { children: ReactNode }) {\n // Note: separating the pane content from isOpen state to prevent animating when updating content.\n const [rightPaneContent, setRightPaneContent] = useState<ReactNode>(undefined);\n const [isRightPaneOpen, setIsRightPaneOpen] = useState<boolean>(false);\n\n const openInPane = useCallback(\n (opts: OpenRightPaneOpts) => {\n setRightPaneContent(opts?.content);\n setIsRightPaneOpen(true);\n },\n [setRightPaneContent],\n );\n const closePane = useCallback(() => setIsRightPaneOpen(false), []);\n const clearPane = useCallback(() => setRightPaneContent(undefined), [setRightPaneContent]);\n\n const context = useMemo(\n () => ({ openInPane, closePane, clearPane, rightPaneContent, isRightPaneOpen }),\n [openInPane, closePane, rightPaneContent, clearPane, isRightPaneOpen],\n );\n\n return <RightPaneContext.Provider value={context}>{children}</RightPaneContext.Provider>;\n}\n\nexport function useRightPaneContext() {\n return useContext(RightPaneContext);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { ReactElement, useEffect } from \"react\";\nimport { Css, Palette } from \"src/Css\";\nimport { useRightPaneContext } from \"./RightPaneContext\";\n\nexport function RightPaneLayout(props: {\n children: ReactElement;\n paneBgColor?: Palette;\n paneWidth?: number;\n defaultPaneContent?: ReactElement;\n}) {\n const { children, paneBgColor = Palette.White, paneWidth = 450, defaultPaneContent } = props;\n const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = useRightPaneContext();\n\n // Close pane on page unmount because otherwise the next page that has a right pane will show our stale content\n useEffect(() => closePane, [closePane]);\n\n return (\n <div css={Css.h100.df.oxh.$}>\n <>\n <div\n css={{\n ...Css.w(`calc(100% - ${paneWidth + 24}px)`).add(\"transition\", \"width .2s linear\").h100.mr3.oxa.$,\n ...Css.if(!isRightPaneOpen).w100.mr0.$,\n ...Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$,\n }}\n >\n {children}\n </div>\n\n <div css={Css.relative.if(!!defaultPaneContent).wPx(paneWidth).$}>\n {defaultPaneContent && (\n <div\n css={\n Css.h100\n .wPx(paneWidth)\n .left(0)\n .absolute.add(\"transition\", \"all .3s ease-in-out\")\n .if(isRightPaneOpen)\n .add(\"opacity\", 0)\n .left(100).$\n }\n >\n {defaultPaneContent}\n </div>\n )}\n\n <AnimatePresence>\n {isRightPaneOpen && (\n <motion.div\n layout=\"position\"\n key=\"rightPane\"\n data-testid=\"rightPaneContent\"\n css={Css.bgColor(paneBgColor).h100.wPx(paneWidth).$}\n // Keeping initial x to offset pane width and space between panel and page content\n initial={{ x: paneWidth + 24, position: \"absolute\" }}\n animate={{ x: 0 }}\n transition={{ ease: \"linear\", duration: 0.2 }}\n exit={{ transition: { ease: \"linear\", duration: 0.2 }, x: paneWidth }}\n // Clear the content of the detail pane when the animation is completed and only when pane is closing\n onAnimationComplete={(definition: { x: number }) => definition.x !== 0 && clearPane()}\n >\n {rightPaneContent}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </>\n </div>\n );\n}\n","import { OpenRightPaneOpts, useRightPaneContext } from \"./RightPaneContext\";\n\nexport interface UseRightPaneHook {\n /** Opens a right pane */\n openRightPane: (opts: OpenRightPaneOpts) => void;\n /** Closes the right pane */\n closeRightPane: () => void;\n}\n\nexport function useRightPane(): UseRightPaneHook {\n const { openInPane, closePane } = useRightPaneContext();\n return {\n openRightPane: openInPane,\n closeRightPane: closePane,\n };\n}\n","import { ReactNode, ReactPortal, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { scrollContainerBottomPadding, useScrollableParent } from \"src/components/Layout/ScrollableParent\";\nimport { Css, Palette } from \"src/Css\";\n\ninterface ScrollableContentProps {\n children: ReactNode;\n virtualized?: boolean;\n omitBottomPadding?: true;\n bgColor?: Palette;\n}\n\n/**\n * Helper component for placing scrollable content within a `ScrollableParent`.\n *\n * See the docs on `ScrollableParent.\n *\n * Note that you should not use this \"just to get a scrollbar\", instead just use `Css.oa.$`\n * or what not; this is only for implementing page-level patterns that need multiple stickied\n * components (page header, tab bar, table filter & actions).\n */\nexport function ScrollableContent(props: ScrollableContentProps): ReactPortal | JSX.Element {\n const { children, virtualized = false, omitBottomPadding, bgColor } = props;\n const { scrollableEl, setPortalTick, pl, pr } = useScrollableParent();\n\n useEffect(() => {\n // The below `tick` logic is a way to detect whether the ScrollableContent is being used.\n // The ScrollableParent sets scrolling style based on whether or not there are children inside of the `scrollableEl` portal.\n setPortalTick((prev) => prev + 1);\n // Ensure a tick happens on unmount in the event the next component loaded does not utilize `ScrollableContent`\n return () => setPortalTick((prev) => prev + 1);\n }, [setPortalTick]);\n\n // Escape hatch specifically for tests where a \"ScrollableParent\" context may not be present.\n if (!scrollableEl) {\n return <>{children}</>;\n }\n\n return createPortal(\n <div\n css={{\n ...Css.h100.pr(pr).pl(pl).if(virtualized).pr0.$,\n ...(bgColor && Css.bgColor(bgColor).$),\n ...(!omitBottomPadding && !virtualized && scrollContainerBottomPadding),\n }}\n >\n {children}\n </div>,\n scrollableEl,\n );\n}\n","import React, { createContext, ReactNode, useCallback, useContext, useMemo, useState } from \"react\";\nimport { BannerProps } from \"src/components\";\n\nexport interface ToastNoticeProps extends Omit<BannerProps, \"onClose\"> {}\n\nexport type ToastContextProps = {\n notice: ToastNoticeProps | undefined;\n setNotice: React.Dispatch<React.SetStateAction<ToastNoticeProps | undefined>>;\n clear: () => void;\n};\n\nexport const ToastContext = createContext<ToastContextProps>({\n setNotice: () => {\n throw new Error(\"Missing ToastProvider\");\n },\n clear: () => {},\n notice: undefined,\n});\n\nexport function ToastProvider(props: { children: ReactNode }) {\n const [notice, setNotice] = useState<ToastNoticeProps>();\n const clear = useCallback(() => setNotice(undefined), [setNotice]);\n const contextValue = useMemo(() => ({ setNotice, notice, clear }), [notice, clear]);\n return <ToastContext.Provider value={contextValue}>{props.children}</ToastContext.Provider>;\n}\n\nexport function useToastContext() {\n return useContext(ToastContext);\n}\n","import { useRef } from \"react\";\nimport { useMenuTrigger } from \"react-aria\";\nimport { useMenuTriggerState } from \"react-stately\";\nimport { DatePicker, DatePickerProps } from \"src/components/internal/DatePicker/DatePicker\";\nimport { DatePickerOverlay } from \"src/components/internal/DatePicker/DatePickerOverlay\";\nimport {\n isIconButton,\n isNavLinkButton,\n isTextButton,\n labelOr,\n OverlayTrigger,\n OverlayTriggerProps,\n} from \"src/components/internal/OverlayTrigger\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface ButtonDatePickerProps\n extends DatePickerProps,\n Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\"> {\n defaultOpen?: boolean;\n}\n\nexport function ButtonDatePicker(props: ButtonDatePickerProps) {\n const { defaultOpen, disabled, trigger, onSelect, ...datePickerProps } = props;\n const state = useMenuTriggerState({ isOpen: defaultOpen });\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { menuTriggerProps, menuProps } = useMenuTrigger({ isDisabled: !!disabled }, state, buttonRef);\n const tid = useTestIds(\n props,\n isTextButton(trigger)\n ? defaultTestId(labelOr(trigger, \"buttonDatePicker\"))\n : isNavLinkButton(trigger)\n ? defaultTestId(trigger.navLabel)\n : isIconButton(trigger)\n ? trigger.icon\n : trigger.name,\n );\n\n return (\n <OverlayTrigger {...props} menuTriggerProps={menuTriggerProps} state={state} buttonRef={buttonRef} {...tid}>\n <DatePickerOverlay overlayProps={menuProps}>\n <DatePicker\n {...datePickerProps}\n onSelect={(d) => {\n onSelect(d);\n state.close();\n }}\n {...tid.datePicker}\n />\n </DatePickerOverlay>\n </OverlayTrigger>\n );\n}\n","import { ReactNode, useRef } from \"react\";\nimport { useButton, useFocusRing, useHover } from \"react-aria\";\nimport { Icon, IconProps } from \"src/components/Icon\";\nimport { maybeTooltip, resolveTooltip } from \"src/components/Tooltip\";\nimport { Css, Properties } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\nexport interface ButtonGroupProps {\n buttons: ButtonGroupButton[];\n /** Disables all buttons in ButtonGroup */\n disabled?: boolean;\n size?: ButtonGroupSize;\n}\n\nexport type ButtonGroupButton = {\n icon?: IconProps[\"icon\"];\n iconColor?: IconProps[\"color\"];\n iconInc?: IconProps[\"inc\"];\n text?: ReactNode;\n onClick?: VoidFunction;\n /** Disables the button. Pass a ReactNode to disable the button and show a tooltip */\n disabled?: boolean | ReactNode;\n /** Indicates the active/selected button, as in a tab or toggle. */\n active?: boolean;\n /** Adds tooltip to the button */\n tooltip?: ReactNode;\n};\n\nexport function ButtonGroup(props: ButtonGroupProps) {\n const { buttons, disabled = false, size = \"sm\" } = props;\n const tid = useTestIds(props, \"buttonGroup\");\n return (\n // Adding `line-height: 0` prevent inheriting line-heights that might throw off sizing within the button group.\n <div {...tid} css={Css.df.lh(0).add({ ...sizeStyles[size] }).$}>\n {buttons.map(({ disabled: buttonDisabled, ...buttonProps }, i) => (\n // Disable the button if the ButtonGroup is disabled or if the current button is disabled.\n <GroupButton key={i} {...buttonProps} disabled={disabled || buttonDisabled} size={size} {...tid} />\n ))}\n </div>\n );\n}\n\ninterface GroupButtonProps extends ButtonGroupButton {\n size: ButtonGroupSize;\n}\n\nfunction GroupButton(props: GroupButtonProps) {\n const { icon, iconInc, iconColor, text, active, onClick: onPress, disabled, size, tooltip, ...otherProps } = props;\n const ariaProps = { onPress, isDisabled: !!disabled, ...otherProps };\n const ref = useRef(null);\n const { buttonProps, isPressed } = useButton(ariaProps, ref);\n const { isFocusVisible, focusProps } = useFocusRing();\n const { hoverProps, isHovered } = useHover(ariaProps);\n const tid = useTestIds(props);\n\n return (\n <span css={getButtonStyles()}>\n {maybeTooltip({\n title: resolveTooltip(disabled, tooltip),\n placement: \"top\",\n children: (\n <button\n ref={ref}\n {...buttonProps}\n {...focusProps}\n {...hoverProps}\n css={{\n ...Css.buttonBase.px2.br0.h100.$,\n \"&:disabled\": Css.gray400.cursorNotAllowed.bcGray300.$,\n ...(isFocusVisible ? defaultFocusRingStyles : {}),\n ...(active ? activeStyles : {}),\n ...(isPressed ? pressedStyles : isHovered ? hoverStyles : {}),\n ...(icon ? iconStyles[size] : {}),\n }}\n {...tid[defaultTestId((typeof text === \"string\" && text) || icon || \"button\")]}\n >\n {icon && (\n <Icon xss={Css.if(!!text).mrPx(4).$} icon={icon} color={disabled ? undefined : iconColor} inc={iconInc} />\n )}\n {text}\n </button>\n ),\n })}\n </span>\n );\n}\n\nconst pressedStyles = Css.bgGray200.$;\nconst activeStyles = Css.bgGray300.$;\nconst hoverStyles = Css.bgGray100.$;\nconst defaultFocusRingStyles = Css.relative.z2.bshFocus.$;\n\nfunction getButtonStyles() {\n return {\n ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,\n // Our first button should have a rounded left border\n \"&:first-of-type\": Css.add(\"borderRadius\", \"4px 0 0 4px\").$,\n // Our last button should have a rounded right border\n \"&:last-of-type\": Css.add(\"borderRadius\", \"0 4px 4px 0\").$,\n // Nudge buttons one pixel to the left so they visually share a border\n \"&:not(:first-of-type)\": Css.mlPx(-1).$,\n };\n}\n\nconst sizeStyles: Record<ButtonGroupSize, Properties> = {\n xs: Css.hPx(28).$,\n sm: Css.hPx(32).$,\n md: Css.hPx(40).$,\n};\n\nconst iconStyles: Record<ButtonGroupSize, Properties> = {\n xs: Css.pxPx(2).$,\n sm: Css.pxPx(4).$,\n md: Css.px1.$,\n};\n\ntype ButtonGroupSize = \"xs\" | \"sm\" | \"md\";\n","import { ReactNode, useRef } from \"react\";\nimport { useMenuTrigger } from \"react-aria\";\nimport { useMenuTriggerState } from \"react-stately\";\nimport { IconProps } from \"src/components/Icon\";\nimport { Menu } from \"src/components/internal/Menu\";\nimport {\n isIconButton,\n isNavLinkButton,\n isTextButton,\n labelOr,\n OverlayTrigger,\n OverlayTriggerProps,\n} from \"src/components/internal/OverlayTrigger\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface ButtonMenuBaseProps\n extends Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\" | \"showActiveBorder\"> {\n items: MenuItem[];\n persistentItems?: MenuItem[];\n searchable?: boolean;\n // for storybook purposes\n defaultOpen?: boolean;\n contrast?: boolean;\n}\n\ninterface SelectionButtonMenuProps extends ButtonMenuBaseProps {\n /** Display a menu item as selected based. Use the Menu Item's label to identify */\n selectedItem: string | undefined;\n onChange: (key: string) => void;\n}\n\nexport function ButtonMenu(props: ButtonMenuBaseProps | SelectionButtonMenuProps) {\n const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;\n\n let selectedItem, onChange;\n if (isSelectionButtonMenuProps(props)) {\n selectedItem = props.selectedItem;\n onChange = props.onChange;\n }\n\n const state = useMenuTriggerState({ isOpen: defaultOpen });\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { menuTriggerProps, menuProps } = useMenuTrigger({ isDisabled: !!disabled }, state, buttonRef);\n const tid = useTestIds(\n props,\n isTextButton(trigger)\n ? labelOr(trigger, \"buttonMenu\")\n : isNavLinkButton(trigger)\n ? defaultTestId(trigger.navLabel)\n : isIconButton(trigger)\n ? trigger.icon\n : trigger.name,\n );\n\n return (\n <OverlayTrigger\n {...props}\n menuTriggerProps={menuTriggerProps}\n state={state}\n buttonRef={buttonRef}\n {...tid}\n contrast={contrast}\n >\n <Menu\n ariaMenuProps={menuProps}\n onClose={() => state.close()}\n items={items}\n persistentItems={persistentItems}\n searchable={searchable}\n contrast={contrast}\n selectedItem={selectedItem}\n onChange={onChange}\n {...tid}\n />\n </OverlayTrigger>\n );\n}\n\ntype MenuItemBase = {\n label: string;\n /** If the `onClick` property is set as a string, then the menu item will be rendered as a link with the `onClick` value being the href */\n onClick: string | VoidFunction;\n /** Whether the interactive element is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n destructive?: boolean;\n hasDivider?: boolean;\n};\n\nexport type IconMenuItemType = MenuItemBase & {\n icon: IconProps[\"icon\"];\n};\n\nexport type ImageMenuItemType = MenuItemBase & {\n src: string;\n size?: 24 | 48;\n isAvatar?: boolean;\n};\n\nexport type DividerMenuItemType = MenuItemBase & {\n hasDivider: boolean;\n};\n\nexport type MenuItem = MenuItemBase | IconMenuItemType | ImageMenuItemType | DividerMenuItemType;\n// This is done just to adapt to the React-Aria API for generating Sectioned lists of Menu Items.\nexport type MenuSection = MenuItem & { items?: MenuItem[] };\n\nfunction isSelectionButtonMenuProps(\n props: ButtonMenuBaseProps | SelectionButtonMenuProps,\n): props is SelectionButtonMenuProps {\n return typeof props === \"object\" && \"selectedItem\" in props && \"onChange\" in props;\n}\n","import { ReactNode } from \"react\";\nimport { Css } from \"src/Css\";\n\nexport function Copy(props: { children: string | ReactNode }) {\n return (\n <div\n css={{\n ...Css.sm.gray700.mt2.mb3.wPx(480).$,\n \"& > p\": Css.my2.$,\n }}\n >\n {props.children}\n </div>\n );\n}\n","import equal from \"fast-deep-equal\";\nimport React, { KeyboardEvent, ReactNode, useCallback, useRef } from \"react\";\nimport { Css, Palette, Properties, useTestIds } from \"src\";\nimport { isDefined } from \"src/utils\";\nimport { DnDGridContext } from \"./DnDGridContext\";\n\nexport interface DnDGridProps {\n children: ReactNode;\n /** CSS Grid styles for the grid container. */\n gridStyles?: GridStyles;\n /** Defines the styling for the GridItem that is actively being moved */\n activeItemStyles?: Properties;\n /** Returns the new order of the GridItems. */\n onReorder: (items: string[]) => void;\n}\n\nexport function DnDGrid(props: DnDGridProps) {\n const { children, gridStyles, onReorder, activeItemStyles } = props;\n const gridEl = useRef<HTMLDivElement>(null);\n const dragEl = useRef<HTMLElement>();\n const cloneEl = useRef<HTMLElement>();\n const initialOrder = useRef<string[]>();\n const reorderViaKeyboard = useRef(false);\n const transformFrom = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n const tid = useTestIds(props, \"dndGrid\");\n\n /** Helper function to return an array of GridItems HTMLElements in the DOM */\n const getGridItems = useCallback((): HTMLElement[] => {\n return gridEl.current ? Array.from(gridEl.current.querySelectorAll(`[${gridItemIdKey}]`)) : [];\n }, []);\n\n /** Helper function that returns the current order of the GridItems `ids` in the DOM */\n const getGridItemIdOrder = useCallback(() => {\n return getGridItems()\n .map((child) => child.getAttribute(gridItemIdKey))\n .filter(isDefined);\n }, [getGridItems]);\n\n /** Initializes common state when initiating the 'reorder' process, either by cursor or keyboard */\n const initReorder = useCallback(() => {\n if (gridEl.current && dragEl.current) {\n // Store the current order of the GridItems for comparing against before calling onReorder.\n initialOrder.current = getGridItemIdOrder();\n // Add the customizable 'active' styles to the GridItem being moved.\n dragEl.current.classList.add(activeGridItemClass);\n }\n }, [getGridItemIdOrder]);\n\n /** Saves the new order of the GridItems and resets common state */\n const commitReorder = useCallback(() => {\n if (gridEl.current && dragEl.current) {\n // If the order has changed, call onReorder\n const currentOrder = getGridItemIdOrder();\n if (!equal(currentOrder, initialOrder.current)) onReorder(currentOrder);\n // Reset common state\n dragEl.current.classList.remove(activeGridItemClass);\n dragEl.current = undefined;\n reorderViaKeyboard.current = false;\n // And update the initial order to the current order.\n initialOrder.current = currentOrder;\n }\n }, [onReorder, getGridItemIdOrder]);\n\n /** Resets common state and reverts the order of the GridItems to the initial order */\n const cancelReorder = useCallback(() => {\n if (gridEl.current && dragEl.current && initialOrder.current) {\n // Determine if the order has actually changed before reverting.\n const currentOrder = getGridItemIdOrder();\n if (!equal(currentOrder, initialOrder.current)) {\n const initialIndex = initialOrder.current.indexOf(dragEl.current.getAttribute(gridItemIdKey) ?? \"\");\n // If GridItem was initially the last item in the grid, then we need to append it to the end of the other `GridItems`\n if (initialIndex === initialOrder.current.length - 1) {\n const gridItems = getGridItems();\n const lastGridItem = gridItems[gridItems.length - 1];\n // If there is another sibling (meaning there is a non-`GridItem` element after the last `gridItem`), then insert before that.\n gridEl.current.insertBefore(dragEl.current, lastGridItem.nextSibling);\n } else {\n // If this GridItem was not the last item in the grid, then we need to insert it before the next GridItem.\n const nextSiblingIndex = initialOrder.current[initialIndex + 1];\n const nextSibling = gridEl.current.querySelector(`[${gridItemIdKey}=\"${nextSiblingIndex}\"]`);\n if (nextSibling) {\n gridEl.current.insertBefore(dragEl.current, nextSibling);\n }\n }\n }\n\n // And finally reset common state.\n dragEl.current.classList.remove(activeGridItemClass);\n dragEl.current = undefined;\n reorderViaKeyboard.current = false;\n }\n }, [getGridItemIdOrder, getGridItems]);\n\n /** Handles moving the GridItem based on cursor position */\n const onMove = useCallback((e: MouseOrTouchEvent) => {\n if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {\n // Get the current position of the pointer.\n const clientX = \"clientX\" in e ? e.clientX : e.touches[0].clientX;\n const clientY = \"clientY\" in e ? e.clientY : e.touches[0].clientY;\n\n // Update the transform property to move the element along with the pointer's position.\n const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;\n const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;\n const x = clientX - transformFrom.current.x - left;\n const y = clientY - transformFrom.current.y - top;\n dragEl.current.style.transform = `translate(${x}px, ${y}px)`;\n\n // For touch devices we need to use `document.elementFromPoint` to determine which element is under the cursor/dragged element. For non-touch screens, setting `pointer-events: none` does this for us.\n const maybeTarget = \"touches\" in e ? document.elementFromPoint(clientX, clientY) : e.target;\n const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : undefined;\n\n // Figure out if we need to move the placeholder element based on the `dragEl`'s new position.\n if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {\n const targetPos = target.getBoundingClientRect();\n const isHalfwayPassedTarget =\n (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 ||\n (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;\n\n // Only insert the placeholder if it's not already in the correct position.\n const shouldInsert =\n (isHalfwayPassedTarget && target.nextSibling !== cloneEl.current) ||\n (!isHalfwayPassedTarget && target.previousSibling !== cloneEl.current);\n\n if (shouldInsert) {\n gridEl.current.insertBefore(cloneEl.current, isHalfwayPassedTarget ? target.nextSibling : target);\n }\n }\n }\n }, []);\n\n /** Handles the initiation of the dragging process */\n const onDragStart = useCallback(\n (e: MouseOrTouchEvent) => {\n if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {\n initReorder();\n\n // Determine the position of the pointer relative to the element being dragged.\n const gridRect = gridEl.current.getBoundingClientRect();\n const rect = dragEl.current.getBoundingClientRect();\n const clientX = \"clientX\" in e ? e.clientX : e.touches[0].clientX;\n const clientY = \"clientY\" in e ? e.clientY : e.touches[0].clientY;\n const top = rect.top - gridRect.top;\n const left = rect.left - gridRect.left;\n\n // Store the pointer's offset from the tile being moved to help correctly position the element as we drag it around.\n transformFrom.current = { x: clientX - left, y: clientY - top };\n\n // Duplicate the draggable element as a placeholder to show as a drop target\n cloneEl.current = dragEl.current.cloneNode() as HTMLElement;\n cloneEl.current?.setAttribute(\n \"style\",\n `border-width: 2px; border-color: ${Palette.Gray400}; border-style: dashed; width:${rect.width}px; height:${rect.height}px;`,\n );\n // Denote this is a \"clone\" so we can easily identify it later.\n cloneEl.current?.setAttribute(gridCloneKey, \"true\");\n // Remove the id attribute from the clone to avoid duplicate ids on the page.\n cloneEl.current.removeAttribute(\"id\");\n // Ensure this element does not close the `active` styles as well.\n cloneEl.current?.classList.remove(activeGridItemClass);\n // And finally place it in the DOM after the element being dragged. If there is no `nextSibling`, then it is appended to the grid element.\n gridEl.current.insertBefore(cloneEl.current, dragEl.current.nextSibling);\n\n // Apply styles to the actual element to make it look like it's being dragged.\n // This will remove it from the normal flow of the page, allowing the clone above to take its place.\n dragEl.current.setAttribute(\n \"style\",\n `pointer-events: none; position:fixed; z-index: 9999; top:${top}px; left:${left}px; width:${rect.width}px; height:${rect.height}px;`,\n );\n // Applies cursor styling to the Grid element.\n gridEl.current.style.cursor = \"grabbing\";\n\n // Add event listeners to move the element as the user drags it around.\n gridEl.current.addEventListener(\"mousemove\", onMove);\n gridEl.current.addEventListener(\"touchmove\", onMove);\n }\n },\n [initReorder, onMove],\n );\n\n /** Handles the end of the dragging process */\n const onDragEnd = useCallback(\n (e: MouseOrTouchEvent) => {\n if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {\n e.preventDefault();\n cloneEl.current.replaceWith(dragEl.current);\n\n // Remove any placeholder elements.\n gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());\n // Clear custom styling\n dragEl.current.removeAttribute(\"style\");\n gridEl.current.style.cursor = \"auto\";\n // And unset the `cloneEl`\n cloneEl.current = undefined;\n\n // Commit the changes to the GridItem order\n commitReorder();\n // Remove event listeners.\n gridEl.current.removeEventListener(\"mousemove\", onMove);\n gridEl.current.removeEventListener(\"touchmove\", onMove);\n }\n },\n [commitReorder, onMove],\n );\n\n /** Handles keyboard interaction when the active element is one of the \"drag handles\" */\n const onDragHandleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n const moveHandle = e.target;\n\n if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {\n const isSpaceKey = e.key === \" \";\n // Check to see if we should activate moving via keyboard\n if (isSpaceKey && !reorderViaKeyboard.current) {\n e.preventDefault();\n reorderViaKeyboard.current = true;\n document.addEventListener(\"pointerdown\", cancelReorder);\n initReorder();\n return;\n }\n\n if (!reorderViaKeyboard.current) {\n return;\n }\n\n const isEnterKey = e.key === \"Enter\";\n const isTabKey = e.key === \"Tab\";\n // Use Enter or Space keys as a signal to commit the move\n if (isEnterKey || isSpaceKey || isTabKey) {\n if (!isTabKey) {\n e.preventDefault();\n }\n commitReorder();\n if (isEnterKey) {\n moveHandle.blur();\n }\n document.removeEventListener(\"pointerdown\", cancelReorder);\n return;\n }\n\n // Use the Escape key to signal canceling the move\n if (e.key === \"Escape\") {\n e.preventDefault();\n cancelReorder();\n document.removeEventListener(\"pointerdown\", cancelReorder);\n return;\n }\n\n // Check to see if we should move the element\n const movingLeft = [\"ArrowLeft\", \"ArrowUp\"].includes(e.key);\n const movingRight = [\"ArrowRight\", \"ArrowDown\"].includes(e.key);\n\n if (movingLeft || movingRight) {\n e.preventDefault();\n\n // Give the moveEl an \"active\" state to help identify which element is being moved\n const gridItems = getGridItems();\n const currentIndex = gridItems\n .map((child) => child.getAttribute(gridItemIdKey))\n .filter(isDefined)\n .indexOf(dragEl.current.getAttribute(gridItemIdKey)!);\n\n const newIndex = movingLeft ? currentIndex - 1 : currentIndex + 2;\n // If we are at the last GridItem, then check to see if there are any elements after it that may not be sortable, but we still want to insert before them.\n const insertBeforeElement = gridItems[newIndex] ?? gridItems[gridItems.length - 1].nextSibling;\n if ((movingLeft && currentIndex > 0) || (movingRight && currentIndex < gridItems.length - 1)) {\n gridEl.current.insertBefore(dragEl.current, insertBeforeElement);\n }\n // Put the focus back on the move handle in case it was moved\n moveHandle.focus();\n }\n }\n },\n [cancelReorder, commitReorder, initReorder, getGridItems],\n );\n\n return (\n <DnDGridContext.Provider value={{ dragEl, onDragHandleKeyDown }}>\n <div\n ref={gridEl}\n css={{\n ...Css.ctis.dg.addIn(`& .${activeGridItemClass}`, activeItemStyles ?? Css.bshModal.$).$,\n ...gridStyles,\n }}\n onTouchStart={onDragStart}\n onMouseDown={onDragStart}\n onTouchEnd={onDragEnd}\n onMouseUp={onDragEnd}\n {...tid}\n >\n {children}\n </div>\n </DnDGridContext.Provider>\n );\n}\n\ntype GridStyles = Pick<\n Properties,\n | \"gridTemplate\"\n | \"gridTemplateColumns\"\n | \"gridTemplateRows\"\n | \"gridTemplateAreas\"\n | \"gridAutoFlow\"\n | \"gridAutoColumns\"\n | \"gridAutoRows\"\n | \"gap\"\n | \"columnGap\"\n | \"rowGap\"\n>;\n\nexport const gridItemIdKey = \"dndgrid-itemid\";\nconst gridCloneKey = \"dndgrid-clone\";\nconst activeGridItemClass = \"dndgrid-active\";\n\n// Create a union of the mouse and touch events, both native and react synthetics.\n// This simplifies the type signature of the event handlers.\ntype MouseOrTouchEvent = MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent;\n","import React, { createContext, KeyboardEvent, useContext } from \"react\";\n\ninterface DnDGridContextProps {\n dragEl: React.MutableRefObject<HTMLElement | undefined>;\n onDragHandleKeyDown: (e: KeyboardEvent) => void;\n}\n\nexport const DnDGridContext = createContext<DnDGridContextProps>({\n dragEl: { current: undefined },\n onDragHandleKeyDown: () => {},\n});\n\nexport function useDnDGridContext() {\n return useContext(DnDGridContext);\n}\n","import { mergeProps, useFocusRing, useHover } from \"react-aria\";\nimport { Css, Icon, IconKey, Palette, useTestIds } from \"src\";\nimport { DnDGridItemProps } from \"src/components/DnDGrid/useDnDGridItem\";\n\nexport interface DnDGridItemHandleProps {\n dragHandleProps: DnDGridItemProps[\"dragHandleProps\"];\n icon?: IconKey;\n compact?: boolean;\n color?: Palette;\n}\n\n/** Provides a specific handle element for dragging a GridItem. Includes handling behaviors and interactions */\nexport function DnDGridItemHandle(props: DnDGridItemHandleProps) {\n const { dragHandleProps, icon = \"move\", compact = false, color } = props;\n const { focusProps, isFocusVisible } = useFocusRing();\n const { hoverProps, isHovered } = useHover({});\n const tid = useTestIds(props, \"dragHandle\");\n\n const iconButtonNormal = Css.hPx(28).wPx(28).br8.bw2.$;\n const iconButtonCompact = Css.hPx(18).wPx(18).br4.bw1.$;\n\n return (\n <button\n css={{\n ...(compact ? iconButtonCompact : iconButtonNormal),\n ...Css.cursor(\"grab\").bcTransparent.bss.bgTransparent.outline0.dif.aic.jcc.transition.if(isFocusVisible)\n .bcBlue700.$,\n ...(isHovered && Css.bgGray200.$),\n }}\n {...mergeProps(dragHandleProps, focusProps, hoverProps)}\n {...tid}\n >\n <Icon icon={icon} inc={compact ? 2 : undefined} color={color} />\n </button>\n );\n}\n","import React, { KeyboardEvent, useMemo } from \"react\";\nimport { gridItemIdKey } from \"src/components/DnDGrid/DnDGrid\";\nimport { useDnDGridContext } from \"src/components/DnDGrid/DnDGridContext\";\n\nexport interface useDnDGridItemProps {\n id: React.Key;\n itemRef: React.RefObject<HTMLElement>;\n}\n\n/** Provides props for a GridItem to be draggable */\nexport function useDnDGridItem(props: useDnDGridItemProps) {\n const { id, itemRef } = props;\n const { dragEl, onDragHandleKeyDown } = useDnDGridContext();\n\n const { dragItemProps, dragHandleProps } = useMemo(\n () => {\n function initDraggable() {\n if (itemRef.current) {\n dragEl.current = itemRef.current;\n }\n }\n\n return {\n dragItemProps: { [gridItemIdKey]: id },\n dragHandleProps: {\n onMouseDown: initDraggable,\n onTouchStart: initDraggable,\n onKeyDown: (e: KeyboardEvent) => {\n initDraggable();\n onDragHandleKeyDown(e);\n },\n },\n };\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragEl, id, itemRef],\n );\n\n return { dragHandleProps, dragItemProps };\n}\n\nexport type DnDGridItemProps = ReturnType<typeof useDnDGridItem>;\n","import { capitalCase } from \"change-case\";\n\n/**\n * Guesses a label based on an `id`-ish string, i.e. even an id of\n * `homeownerContractId` will return `Homeowner Contract`.\n *\n * This is primarily useful for our `Bound...` controls where we'll\n * have a known id/key for a given form state field.\n */\nexport function defaultLabel(id: string): string {\n return capitalCase(id).replace(/Ids?$/, \"\").trim();\n}\n","import { defaultLabel } from \"src/utils/defaultLabel\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { TestIds } from \"src/utils/useTestIds\";\n\n/**\n * Provides behavior common to most filters.\n *\n * Note that we don't export this outside of beam; downstream projects can still\n * implement their own filters using the `Filter` interface, but just to keep OO\n * coupling to a minimum, we treat this base class as an internal implementation\n * detail.\n */\nexport class BaseFilter<V, P extends { label?: string; defaultValue?: V }> {\n constructor(\n protected key: string,\n protected props: P,\n ) {}\n\n get label(): string {\n return this.props.label || defaultLabel(this.key);\n }\n\n get defaultValue() {\n return this.props.defaultValue;\n }\n\n protected testId(tid: TestIds): object {\n return tid[defaultTestId(this.label)];\n }\n}\n","import { cloneElement } from \"react\";\nimport { Css } from \"src/Css\";\nimport { TextFieldInternalProps } from \"src/interfaces\";\n\n/** Internal component to help create compound fields */\nexport function CompoundField({ children }: { children: JSX.Element[] }) {\n if (children?.length !== 2) {\n throw new Error(\"CompoundField requires two children components\");\n }\n const commonStyles = Css.df.aic.fs1.maxwPx(550).bt.bb.bcGray300.$;\n const internalProps: TextFieldInternalProps = { compound: true };\n\n return (\n <div\n css={{\n ...Css.df.$,\n \"&:focus-within > div:nth-of-type(2)\": Css.bgBlue700.$, // Separation line when inputs are focused\n }}\n >\n <div\n css={{\n ...commonStyles,\n ...Css.bl.borderRadius(\"4px 0 0 4px\").$,\n \"&:focus-within\": Css.bcBlue700.$,\n }}\n >\n {cloneElement(children[0], {\n internalProps,\n })}\n </div>\n {/* Separation line */}\n <div css={Css.wPx(1).fn.bgGray300.$} />\n\n <div\n css={{\n ...commonStyles,\n ...Css.fg1.br.borderRadius(\"0 4px 4px 0\").$,\n \"&:focus-within\": Css.bcBlue700.$,\n }}\n >\n {cloneElement(children[1], {\n internalProps,\n })}\n </div>\n </div>\n );\n}\n","import { Key } from \"react\";\nimport { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { CompoundField } from \"src/components/internal/CompoundField\";\nimport { Label } from \"src/components/Label\";\nimport { DateField, SelectField, Value } from \"src/inputs\";\nimport { TestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\nexport type DateFilterProps<O, V extends Value, DV extends DateFilterValue<V>> = {\n label: string;\n operations: O[];\n getOperationValue: (o: O) => V;\n getOperationLabel: (o: O) => string;\n defaultValue?: DV;\n};\n\nexport type DateFilterValue<V extends Value> = { op: V; value: Date };\n\nexport function dateFilter<O, V extends Key>(\n props: DateFilterProps<O, V, DateFilterValue<V>>,\n): (key: string) => Filter<DateFilterValue<V>> {\n return (key) => new DateFilter(key, props);\n}\n\n// Custom option that allows for not selecting an operation\nconst anyOption = {} as any;\n\nclass DateFilter<O, V extends Key, DV extends DateFilterValue<V>>\n extends BaseFilter<DV, DateFilterProps<O, V, DV>>\n implements Filter<DV>\n{\n render(value: DV, setValue: (value: DV | undefined) => void, tid: TestIds, inModal: boolean, vertical: boolean) {\n const { label, operations, getOperationValue, getOperationLabel } = this.props;\n\n return (\n <>\n {vertical && <Label label={label} />}\n <CompoundField>\n <SelectField\n compact\n sizeToContent\n options={[\n // Always show the 'Any' option\n anyOption as O,\n ...operations,\n ]}\n getOptionValue={(o) => (o === anyOption ? (undefined as any) : getOperationValue(o))}\n getOptionLabel={(o) => (o === anyOption ? \"Any\" : getOperationLabel(o))}\n value={value?.op}\n onSelect={(op) =>\n // default the selected date to today if it doesn't exist in the filter's value\n setValue(op ? ({ op, value: value?.value ? new Date(value.value) : new Date() } as DV) : undefined)\n }\n label={inModal ? `${label} date filter operation` : label}\n labelStyle={!inModal && !vertical ? \"inline\" : inModal || vertical ? \"hidden\" : \"above\"}\n nothingSelectedText=\"Any\"\n {...tid[`${defaultTestId(this.label)}_dateOperation`]}\n />\n <DateField\n compact\n labelStyle=\"inline\"\n value={value?.value ? new Date(value.value) : new Date()}\n label=\"Date\"\n onChange={(d) => setValue({ ...value, value: d })}\n disabled={!value}\n {...tid[`${defaultTestId(this.label)}_dateField`]}\n />\n </CompoundField>\n </>\n );\n }\n}\n","import { Matcher } from \"react-day-picker\";\nimport { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { Label } from \"src/components/Label\";\nimport { DateRangeField } from \"src/inputs\";\nimport { DateRange } from \"src/types\";\nimport { TestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\nexport type DateRangeFilterProps<O extends string> = {\n label: string;\n defaultValue?: DateRangeFilterValue<O>;\n placeholderText?: string;\n disabledDays?: Matcher | Matcher[];\n // For storybook to support showing dateRange and date filters in same Filter component\n testFieldLabel?: string;\n};\n\n// Using op (as in `op: \"between\"`) to align with what is expected from DateFilter at this time.\n// In the future we should remove that coupling and rely on user to map returned value\nexport type DateRangeFilterValue<O extends string> = { op: O; value: DateRange | undefined };\n\nexport function dateRangeFilter<O extends string>(\n props: DateRangeFilterProps<O>,\n): (key: string) => Filter<DateRangeFilterValue<O>> {\n return (key) => new DateRangeFilter(key, props);\n}\n\nclass DateRangeFilter<O extends string>\n extends BaseFilter<DateRangeFilterValue<O>, DateRangeFilterProps<O>>\n implements Filter<DateRangeFilterValue<O>>\n{\n render(\n value: DateRangeFilterValue<O>,\n setValue: (value: DateRangeFilterValue<O> | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ) {\n const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;\n return (\n <>\n {vertical && <Label label={label} />}\n <DateRangeField\n compact\n labelStyle=\"inline\"\n isRangeFilterField\n placeholder={placeholderText}\n label={testFieldLabel ?? \"Date\"}\n // Making sure that DateRange is Date type and not string before passing. Will never have undefined from/to\n value={\n value?.value\n ? { from: new Date(value.value.from as Date), to: new Date(value.value.to as Date) }\n : undefined\n }\n onChange={(d) => (d ? setValue({ op: defaultValue?.op, value: d } as any) : setValue(undefined))}\n disabledDays={disabledDays}\n {...tid[`${defaultTestId(this.label)}_dateField`]}\n />\n </>\n );\n }\n}\n","import { Key } from \"react\";\nimport { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { disabledOptionToKeyedTuple } from \"src/inputs/internal/ComboBoxBase\";\nimport { MultiSelectField, MultiSelectFieldProps } from \"src/inputs/MultiSelectField\";\nimport { ToggleChipGroup } from \"src/inputs/ToggleChipGroup\";\nimport { Value } from \"src/inputs/Value\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { TestIds } from \"src/utils/useTestIds\";\n\nexport type MultiFilterProps<O, V extends Value> = Omit<\n MultiSelectFieldProps<O, V>,\n \"values\" | \"onSelect\" | \"label\"\n> & {\n defaultValue?: V[];\n label?: string;\n};\n\nexport function multiFilter<O, V extends Key>(props: MultiFilterProps<O, V>): (key: string) => Filter<V[]> {\n return (key) => new MultiFilter(key, props);\n}\n\nclass MultiFilter<O, V extends Value> extends BaseFilter<V[], MultiFilterProps<O, V>> implements Filter<V[]> {\n render(\n value: V[] | undefined,\n setValue: (value: V[] | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ): JSX.Element {\n if (\n inModal &&\n Array.isArray(this.props.options) &&\n this.props.options.length > 0 &&\n this.props.options.length <= 8\n ) {\n const { disabledOptions } = this.props;\n const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);\n const disabledKeys = Object.keys(disabledOptionsWithReasons);\n return (\n <ToggleChipGroup\n label={this.label}\n options={this.props.options.map((o: O) => {\n const value = this.props.getOptionValue(o);\n const disabled = value && disabledKeys.includes(value.toString());\n const disabledReason = disabled ? disabledOptionsWithReasons[value.toString()] : undefined;\n return {\n label: this.props.getOptionLabel(o),\n value: value as string,\n disabled: disabledReason ?? disabled,\n };\n })}\n onChange={(values) => {\n setValue(values.length === 0 ? undefined : (values as V[]));\n }}\n values={(value as string[]) || []}\n labelStyle=\"hidden\"\n {...tid[defaultTestId(this.label)]}\n />\n );\n }\n\n const { defaultValue, nothingSelectedText, ...props } = this.props;\n return (\n <MultiSelectField<O, V>\n {...props}\n compact={!vertical}\n label={this.label}\n values={value || []}\n labelStyle={inModal ? \"hidden\" : !inModal && !vertical ? \"inline\" : \"above\"}\n sizeToContent={!inModal && !vertical}\n onSelect={(values) => {\n setValue(values.length === 0 ? undefined : values);\n }}\n nothingSelectedText={nothingSelectedText ?? \"All\"}\n {...this.testId(tid)}\n />\n );\n }\n}\n","import { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { CompoundField } from \"src/components/internal/CompoundField\";\nimport { Label } from \"src/components/Label\";\nimport { TestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { Css } from \"../../Css\";\nimport { NumberField, NumberFieldType } from \"../../inputs/NumberField\";\n\nexport type NumberRangeFilterProps<DV extends NumberRangeFilterValue> = {\n label: string;\n numberFieldType?: NumberFieldType;\n defaultValue?: DV;\n // Support edge cases. Overrides numberFieldType\n numberFormatOptions?: Intl.NumberFormatOptions;\n};\n\nexport type NumberRangeFilterValue = { min: number; max: number };\n\nexport function numberRangeFilter(\n props: NumberRangeFilterProps<NumberRangeFilterValue>,\n): (key: string) => Filter<NumberRangeFilterValue> {\n return (key) => new NumberRangeFilter(key, props);\n}\n\nclass NumberRangeFilter<DV extends NumberRangeFilterValue>\n extends BaseFilter<DV, NumberRangeFilterProps<DV>>\n implements Filter<DV>\n{\n render(value: DV, setValue: (value: DV | undefined) => void, tid: TestIds, inModal: boolean, vertical: boolean) {\n const { label, numberFieldType, numberFormatOptions } = this.props;\n const min = value?.min ?? undefined;\n const max = value?.max ?? undefined;\n\n return (\n <>\n {/* In vertical view, we stack the number fields */}\n {vertical && (\n <div {...tid}>\n <Label label={label} />\n <div css={Css.pb1.$}>\n <NumberField\n labelStyle=\"inline\"\n clearable\n label=\"Min\"\n value={min}\n type={numberFieldType}\n numberFormatOptions={numberFormatOptions}\n onChange={(minVal) => {\n const maxValue = max ? { max } : {};\n setValue(minVal || max ? ({ min: minVal, ...maxValue } as DV) : undefined);\n }}\n {...tid[`${defaultTestId(label)}_min_vertical`]}\n />\n </div>\n <NumberField\n labelStyle=\"inline\"\n clearable\n label=\"Max\"\n value={max}\n type={numberFieldType}\n numberFormatOptions={numberFormatOptions}\n onChange={(maxVal) => {\n const minValue = min ? { min } : {};\n setValue(maxVal || min ? ({ max: maxVal, ...minValue } as DV) : undefined);\n }}\n {...tid[`${defaultTestId(label)}_max_vertical`]}\n />\n </div>\n )}\n\n {/* In horizontal / modal view, we wrap the number fields in a compound field */}\n {!vertical && (\n <CompoundField {...tid}>\n <NumberField\n compact\n sizeToContent={!inModal}\n labelStyle=\"inline\"\n clearable\n // When in horizontal view, we combine the filter label with the min / max labels as all filter labels are displayed inline\n label={!inModal ? `${label} Min` : \"Min\"}\n value={min}\n type={numberFieldType}\n numberFormatOptions={numberFormatOptions}\n onChange={(minVal) => {\n const maxValue = max ? { max } : {};\n setValue(minVal || max ? ({ min: minVal, ...maxValue } as DV) : undefined);\n }}\n {...tid[`${defaultTestId(label)}_min`]}\n />\n <NumberField\n compact\n sizeToContent={!inModal}\n labelStyle=\"inline\"\n clearable\n label={!inModal ? `${label} Max` : \"Max\"}\n value={max}\n type={numberFieldType}\n numberFormatOptions={numberFormatOptions}\n onChange={(maxVal) => {\n const minValue = min ? { min } : {};\n setValue(maxVal || min ? ({ max: maxVal, ...minValue } as DV) : undefined);\n }}\n {...tid[`${defaultTestId(label)}_max`]}\n />\n </CompoundField>\n )}\n </>\n );\n }\n}\n","import { Key } from \"react\";\nimport { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { SelectField, SelectFieldProps } from \"src/inputs/SelectField\";\nimport { Value } from \"src/inputs/Value\";\nimport { TestIds } from \"src/utils/useTestIds\";\n\nexport type SingleFilterProps<O, V extends Value> = Omit<SelectFieldProps<O, V>, \"value\" | \"onSelect\" | \"label\"> & {\n defaultValue?: V;\n label?: string;\n};\n\nexport function singleFilter<O, V extends Key>(props: SingleFilterProps<O, V>): (key: string) => Filter<V> {\n return (key) => new SingleFilter(key, props);\n}\n\n// Make an option that we'll sneak into every select field\nconst allOption = {} as any;\n\nclass SingleFilter<O, V extends Key> extends BaseFilter<V, SingleFilterProps<O, V>> implements Filter<V> {\n render(\n value: V | undefined,\n setValue: (value: V | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ) {\n const {\n label,\n defaultValue,\n options: maybeOptions,\n getOptionLabel,\n getOptionValue,\n nothingSelectedText,\n ...props\n } = this.props;\n\n const options = Array.isArray(maybeOptions)\n ? [allOption as O, ...maybeOptions]\n : { ...maybeOptions, current: maybeOptions.current };\n\n return (\n <SelectField<O, V>\n {...props}\n options={options}\n getOptionValue={(o) => (o === allOption ? (undefined as any as V) : getOptionValue(o))}\n getOptionLabel={(o) => (o === allOption ? (nothingSelectedText ?? \"All\") : getOptionLabel(o))}\n compact={!vertical}\n value={value}\n label={this.label}\n labelStyle={inModal ? \"hidden\" : !inModal && !vertical ? \"inline\" : \"above\"}\n sizeToContent={!inModal && !vertical}\n nothingSelectedText={nothingSelectedText ?? \"All\"}\n onSelect={(value) => setValue(value || undefined)}\n {...this.testId(tid)}\n />\n );\n }\n}\n","import { Key } from \"react\";\nimport { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { TreeSelectField, TreeSelectFieldProps, Value } from \"src/inputs\";\nimport { TreeSelectResponse } from \"src/inputs/TreeSelectField/utils\";\nimport { TestIds } from \"src/utils\";\n\nexport type TreeFilterProps<O, V extends Value> = Omit<TreeSelectFieldProps<O, V>, \"values\" | \"onSelect\" | \"label\"> & {\n defaultValue?: V[];\n label?: string;\n /** Defines which of the tree values to use in the filter - \"root\", \"leaf\", or \"all\"\n * @default \"root\" */\n filterBy?: TreeFilterBy;\n};\n\ntype TreeFilterBy = keyof TreeSelectResponse<any, any>;\n\nexport function treeFilter<O, V extends Key>(props: TreeFilterProps<O, V>): (key: string) => Filter<V[]> {\n return (key) => new TreeFilter(key, props);\n}\n\nclass TreeFilter<O, V extends Value> extends BaseFilter<V[], TreeFilterProps<O, V>> implements Filter<V[]> {\n render(\n value: V[] | undefined,\n setValue: (value: V[] | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ): JSX.Element {\n const { defaultValue, nothingSelectedText, filterBy = \"root\", ...props } = this.props;\n return (\n <TreeSelectField<O, V>\n {...props}\n label={this.label}\n values={value}\n compact={!vertical}\n labelStyle={inModal ? \"hidden\" : !inModal && !vertical ? \"inline\" : \"above\"}\n sizeToContent={!inModal && !vertical}\n onSelect={(options) => {\n const values = options[filterBy].values;\n setValue(values.length === 0 ? undefined : values);\n }}\n nothingSelectedText={nothingSelectedText ?? \"All\"}\n {...this.testId(tid)}\n />\n );\n }\n}\n","import { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { SelectField } from \"src/inputs/SelectField\";\nimport { TestIds } from \"src/utils/useTestIds\";\n\nexport type BooleanOption = [boolean | undefined, string];\n\nexport interface BooleanFilterProps {\n options?: BooleanOption[];\n label?: string;\n defaultValue?: undefined | boolean;\n}\n\nexport function booleanFilter(props: BooleanFilterProps): (key: string) => Filter<boolean> {\n return (key) => new BooleanFilter(key, props);\n}\n\nclass BooleanFilter extends BaseFilter<boolean, BooleanFilterProps> implements Filter<boolean> {\n render(\n value: boolean | undefined,\n setValue: (value: boolean | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ): JSX.Element {\n // Our options are a list of tuples\n const { options = defaultBooleanOptions, label, defaultValue, ...props } = this.props;\n return (\n <SelectField<BooleanOption, string>\n {...props}\n compact={!vertical}\n label={this.label}\n // We use `String(value)` so that `undefined` becomes \"undefined\"\n value={String(value)}\n labelStyle={inModal ? \"hidden\" : !inModal && !vertical ? \"inline\" : \"above\"}\n sizeToContent={!inModal && !vertical}\n options={options}\n getOptionValue={(o) => String(o[0])}\n getOptionLabel={(o) => o[1]}\n onSelect={(value) => {\n // Change our string \"true\" / \"false\" / \"undefined\" back to boolean | undefined\n const parsedValue = value === \"undefined\" ? undefined : value === \"true\";\n setValue(parsedValue);\n }}\n {...this.testId(tid)}\n />\n );\n }\n}\n\nconst defaultBooleanOptions: BooleanOption[] = [\n [undefined, \"Any\"],\n [true, \"Yes\"],\n [false, \"No\"],\n];\n","import { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { Checkbox } from \"src/inputs\";\nimport { TestIds } from \"src/utils/useTestIds\";\n\nexport type CheckboxFilterProps<V> = {\n label?: string;\n onValue?: V | undefined;\n offValue?: V | undefined;\n defaultValue?: V | undefined;\n};\n\n/**\n * Provides a two-state \"on/off\" filter.\n *\n * By default the on/off values are `on === true` and `off === undefined`.\n *\n * You can flip the on/off values by passing `onValue: false`, in which case\n * `on === false` and off === undefined`.\n *\n * Or you can set on/off directly, by passing both `onValue` and `offValue`, even to\n * non-boolean values, i.e. `onValue: \"foo\", offValue: \"bar\"`.\n */\nexport function checkboxFilter<V = boolean>(props: CheckboxFilterProps<V>): (key: string) => Filter<V> {\n return (key) =>\n new CheckboxFilter(key, {\n // If the user has set the offValue, that should be the default b/c we're only a two-state\n defaultValue: props.offValue,\n ...props,\n });\n}\n\nclass CheckboxFilter<V> extends BaseFilter<V, CheckboxFilterProps<V>> implements Filter<V> {\n render(\n value: V | undefined,\n setValue: (value: V | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ): JSX.Element {\n const { defaultValue, onValue = true as any as V, offValue = undefined, ...props } = this.props;\n return (\n <Checkbox\n {...props}\n selected={value === undefined ? false : value === onValue}\n label={this.label}\n onChange={(on) => {\n setValue(on ? onValue : offValue);\n }}\n {...this.testId(tid)}\n />\n );\n }\n\n get hideLabelInModal() {\n return true;\n }\n}\n","import { ReactNode, useState } from \"react\";\nimport { Button } from \"src/components/Button\";\nimport { Filter, FilterImpls, filterTestIdPrefix, updateFilter } from \"src/components/Filters\";\nimport { ModalBody, ModalFooter, ModalHeader, useModal } from \"src/components/Modal\";\nimport { Css } from \"src/Css\";\nimport { omitKey, safeEntries, safeKeys, useTestIds } from \"src/utils\";\n\ninterface FilterModalProps<F> {\n filter: F;\n filters: FilterImpls<F>;\n onApply: (f: F) => void;\n}\n\nexport function FilterModal<F>(props: FilterModalProps<F>) {\n const { filter, filters, onApply } = props;\n const testId = useTestIds(props, filterTestIdPrefix);\n const { closeModal } = useModal();\n // Local copy of the filter that we'll use to manage the modal's state separate from the rest of the Filter\n const [modalFilter, setModalFilter] = useState<F>(filter);\n\n return (\n <>\n <ModalHeader>More Filters</ModalHeader>\n <ModalBody>\n <div css={Css.df.fdc.$}>\n {safeEntries(filters).map(([key, f]: [keyof F, Filter<any>]) => (\n <ModalFilterItem key={key as string} label={f.hideLabelInModal ? undefined : f.label}>\n {f.render(\n modalFilter[key],\n (value) => setModalFilter(updateFilter(modalFilter, key, value)),\n testId,\n true,\n false,\n )}\n </ModalFilterItem>\n ))}\n </div>\n </ModalBody>\n <ModalFooter xss={Css.jcsb.$}>\n <Button\n label=\"Clear\"\n variant=\"tertiary\"\n disabled={safeKeys(filters).filter((fk) => modalFilter[fk] !== undefined).length === 0}\n onClick={() =>\n // Only remove the filters keys that exist in the modal.\n setModalFilter(safeKeys(filters).reduce((acc, fk) => omitKey(fk, acc), modalFilter))\n }\n {...testId.modalClear}\n />\n <div css={Css.df.gap1.$}>\n <Button label=\"Cancel\" variant=\"tertiary\" onClick={closeModal} {...testId.modalClose} />\n <Button\n label=\"Apply\"\n onClick={() => {\n onApply(modalFilter);\n closeModal();\n }}\n {...testId.modalApply}\n />\n </div>\n </ModalFooter>\n </>\n );\n}\n\n// Wraps a filter component to be displayed in the Filter Modal\nexport function ModalFilterItem({ label, children }: { label?: string; children: ReactNode }) {\n return (\n <div css={Css.mb4.if(!label).bt.bcGray200.$}>\n {label && <h2 css={Css.baseMd.mb2.$}>{label}</h2>}\n <div css={Css.if(!label).pt3.$}>{children}</div>\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport { Modal, ModalProps } from \"src/components/Modal/Modal\";\nimport { useModal } from \"src/components/Modal/useModal\";\n\nexport interface OpenModalProps {\n /** The custom modal content to show. */\n children: JSX.Element;\n /** The size to use. */\n size?: ModalProps[\"size\"];\n /** Whether to force the modal to stay open. This is useful for stories where ruler/tape extensions cause the modal to close. */\n keepOpen?: boolean;\n}\n\n/**\n * A component for testing open modals in stories and unit tests.\n *\n * Currently, calling `render(<ModalComponent />)` in a test currently doesn't work, because\n * nothing has called `useModal` to get the header & footer mounted into the DOM.\n *\n * So instead tests can call:\n *\n * ```tsx\n * render(\n * <OpenModal>\n * <ModalComponent />\n * </OpenModal>\n * );\n * ```\n *\n * And `OpenModal` will do a boilerplate `openModal` call, so that the content\n * shows up in the DOM as expected.\n */\nexport function OpenModal(props: OpenModalProps): JSX.Element {\n const { openModal } = useModal();\n const { size, children, keepOpen } = props;\n useEffect(() => {\n if (!keepOpen) {\n openModal({ size, content: children });\n }\n }, [keepOpen, openModal, size, children]);\n if (keepOpen) {\n return <Modal size={size} content={children} />;\n } else {\n return <div>dummy content</div>;\n }\n}\n","import { memo, useMemo } from \"react\";\nimport { Button } from \"src/components/Button\";\nimport { Filter, FilterDefs, FilterImpls, FilterModal, filterTestIdPrefix, updateFilter } from \"src/components/Filters\";\nimport { useModal } from \"src/components/Modal\";\nimport { Css } from \"src/Css\";\nimport { SelectField } from \"src/inputs/SelectField\";\nimport { Value } from \"src/inputs/Value\";\nimport { safeEntries, safeKeys, useTestIds } from \"src/utils\";\n\ninterface FilterProps<F extends Record<string, unknown>, G extends Value = string> {\n /** List of filters */\n filterDefs: FilterDefs<F>;\n /** The current filter value. */\n filter: F;\n /** Called when the filters have changed. */\n onChange: (filter: F) => void;\n groupBy?: {\n /** The current group by value. */\n value: G;\n /** Called when the group by have changed. */\n setValue: (groupBy: G) => void;\n /** The list of group by options. */\n options: Array<{ id: G; name: string }>;\n };\n /** Specifies the layout of the filters. If not supplied it will use the default (horizontal) layout. Using the 'vertical' layout will also remove the \"More Filters\" button/modal */\n vertical?: boolean;\n /** Specifies the number of in line filters before more filters modal */\n numberOfInlineFilters?: number;\n}\n\nfunction Filters<F extends Record<string, unknown>, G extends Value = string>(props: FilterProps<F, G>) {\n const { filter, onChange, filterDefs, groupBy, vertical = false, numberOfInlineFilters = groupBy ? 3 : 4 } = props;\n const testId = useTestIds(props, filterTestIdPrefix);\n\n const { openModal } = useModal();\n const [pageFilters, modalFilters] = useMemo(() => {\n // Take the FilterDefs that have a `key => ...` factory and eval it\n const impls = safeEntries(filterDefs).map(([key, fn]) => [key, fn(key as string)]);\n // If we have more than numberOfInlineFilters depending on groupby,\n if (!vertical && impls.length > numberOfInlineFilters) {\n // Then return up to the numberOfInlineFilters, and the remainder in the modal.\n return [\n Object.fromEntries(impls.slice(0, numberOfInlineFilters - 1)) as FilterImpls<F>,\n Object.fromEntries(impls.slice(numberOfInlineFilters - 1)) as FilterImpls<F>,\n ];\n }\n // Otherwise, we don't have enough to show the modal, so only use page filter keys\n return [Object.fromEntries(impls) as FilterImpls<F>, {} as FilterImpls<F>];\n }, [numberOfInlineFilters, vertical, filterDefs]);\n\n const numModalFilters = safeKeys(modalFilters).filter((fk) => filter[fk] !== undefined).length;\n\n const maybeGroupByField = groupBy ? (\n <div>\n <SelectField\n label=\"Group by\"\n compact={!vertical}\n labelStyle={!vertical ? \"inline\" : \"above\"}\n sizeToContent={!vertical}\n options={groupBy.options}\n getOptionValue={(o) => o.id}\n getOptionLabel={(o) => o.name}\n value={groupBy.value}\n onSelect={(g) => g && groupBy.setValue(g)}\n />\n </div>\n ) : null;\n\n // Return list of filter components. `onSelect` should update the `filter`\n return (\n <div\n css={{\n ...(vertical ? Css.df.fdc.gap2.$ : Css.df.aic.gap1.$),\n }}\n {...testId}\n >\n {maybeGroupByField}\n\n {safeEntries(pageFilters).map(([key, f]: [keyof F, Filter<any>]) => (\n <div key={key as string}>\n {f.render(filter[key], (value) => onChange(updateFilter(filter, key, value)), testId, false, vertical)}\n </div>\n ))}\n\n {Object.keys(modalFilters).length > 0 && (\n <Button\n label=\"More Filters\"\n endAdornment={\n numModalFilters > 0 && (\n <span css={Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$}>{numModalFilters}</span>\n )\n }\n variant=\"secondary\"\n onClick={() =>\n openModal({\n // Spreading `props` to pass along `data-testid`\n content: <FilterModal {...props} filter={filter} onApply={onChange} filters={modalFilters} />,\n })\n }\n {...testId.moreFiltersBtn}\n />\n )}\n {Object.keys(filter).length > 0 && (\n <div>\n <Button label=\"Clear\" variant=\"tertiary\" onClick={() => onChange({} as F)} {...testId.clearBtn} />\n </div>\n )}\n </div>\n );\n}\n\n// memo doesn't support generic parameters, so cast the result to the correct type\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-849543638\nconst _Filters = memo(Filters) as typeof Filters;\nexport { _Filters as Filters };\n","import { BaseFilter } from \"src/components/Filters/BaseFilter\";\nimport { Filter } from \"src/components/Filters/types\";\nimport { Switch } from \"src/inputs/Switch\";\nimport { TestIds } from \"src/utils/useTestIds\";\n\nexport type ToggleFilterProps<V> = {\n label?: string;\n onValue?: V | undefined;\n offValue?: V | undefined;\n defaultValue?: V | undefined;\n};\n\n/**\n * Provides a two-state \"on/off\" filter.\n *\n * By default the on/off values are `on === true` and `off === undefined`.\n *\n * You can flip the on/off values by passing `onValue: false`, in which case\n * `on === false` and off === undefined`.\n *\n * Or you can set on/off directly, by passing both `onValue` and `offValue`, even to\n * non-boolean values, i.e. `onValue: \"foo\", offValue: \"bar\"`.\n */\nexport function toggleFilter<V = boolean>(props: ToggleFilterProps<V>): (key: string) => Filter<V> {\n return (key) =>\n new ToggleFilter(key, {\n // If the user has set the offValue, that should be the default b/c we're only a two-state\n defaultValue: props.offValue,\n ...props,\n });\n}\n\nclass ToggleFilter<V> extends BaseFilter<V, ToggleFilterProps<V>> implements Filter<V> {\n render(\n value: V | undefined,\n setValue: (value: V | undefined) => void,\n tid: TestIds,\n inModal: boolean,\n vertical: boolean,\n ): JSX.Element {\n const { defaultValue, onValue = true as any as V, offValue = undefined, ...props } = this.props;\n return (\n <Switch\n {...props}\n selected={value === undefined ? false : value === onValue}\n label={this.label}\n labelStyle={inModal || vertical ? \"filter\" : \"inline\"}\n onChange={(on) => {\n setValue(on ? onValue : offValue);\n }}\n {...this.testId(tid)}\n />\n );\n }\n\n get hideLabelInModal() {\n return true;\n }\n}\n","import { omitKey } from \"src/utils\";\n\nexport function updateFilter<F, K extends keyof F>(currentFilter: F, key: K, value: F[K] | undefined): F {\n if (value === undefined) {\n return omitKey(key, currentFilter);\n } else {\n return { ...currentFilter, [key]: value };\n }\n}\n\nexport const filterTestIdPrefix = \"filter\";\n","import { PropsWithChildren } from \"react\";\nimport { useResponsiveGrid, useResponsiveGridProps } from \"src/components\";\n\nexport interface ResponsiveGridProps extends PropsWithChildren<useResponsiveGridProps> {}\n\n/** Helper component for generating a responsive grid */\nexport function ResponsiveGrid(props: ResponsiveGridProps) {\n const { children, ...hookProps } = props;\n const { gridStyles } = useResponsiveGrid(hookProps);\n return <div css={{ ...gridStyles }}>{children}</div>;\n}\n","import { PropsWithChildren } from \"react\";\nimport { useResponsiveGridItem } from \"src\";\n\nexport interface ResponsiveGridItemProps\n extends PropsWithChildren<{\n colSpan: number;\n }> {}\n\n/** Helper component for generating grid items with the ResponsiveGrid */\nexport function ResponsiveGridItem(props: ResponsiveGridItemProps) {\n const { colSpan, children } = props;\n const { gridItemProps } = useResponsiveGridItem({ colSpan });\n return <div {...gridItemProps}>{children}</div>;\n}\n","import { useMemo } from \"react\";\nimport { Css, Properties } from \"src\";\nimport { gridItemDataAttribute } from \"src/components/Grid/utils\";\n\nexport interface useResponsiveGridProps {\n minColumnWidth: number;\n gap: number;\n columns: number;\n}\n\n/**\n * Returns the styles for a responsive grid.\n * Use in tandem with the `useResponsiveGridItem` hook to generate props for each grid item to ensure proper behavior at breakpoints.\n */\nexport function useResponsiveGrid(props: useResponsiveGridProps): { gridStyles: Properties } {\n const { minColumnWidth, gap, columns } = props;\n\n const gridStyles = useMemo(() => {\n const gapCount = columns - 1;\n const totalGapWidth = gap * gapCount;\n const maxColumnWidth = `calc((100% - ${totalGapWidth}px) / ${columns})`;\n const gridTemplateColumns = `repeat(auto-fill, minmax(max(${minColumnWidth}px, ${maxColumnWidth}), 1fr))`;\n const gridGap = `${gap}px`;\n\n // Generate the container queries for each possible colspan for grid items.\n const gridItemSpanStyles = Array.from({ length: columns }, (_, i) => {\n const span = i + 1;\n // Generate the CSS selectors for each grid item that spans `span` columns.\n const targets = Array.from(\n { length: columns - span },\n (_, s) => `& > [${gridItemDataAttribute}='${s + span + 1}']`,\n ).join(\", \");\n\n // Define the breakpoint values for the container query.\n const minWidth = span === 1 ? 0 : minColumnWidth * span + gap * i;\n const maxWidth = minColumnWidth * (span + 1) + gap * span;\n\n const style = {\n // Using the `targets` selector, add the container query for the grid item.\n // `targets` may be empty when the span is the same as the number of columns.\n ...(targets\n ? Css.addIn(targets, Css.ifContainer({ gt: minWidth, lt: maxWidth }).gc(`span ${span}`).$).$\n : undefined),\n // Add the default style for the grid item as a helper for the implementer to not have to define their `grid-column: span X`\n // Uses `&&` selector to change the selector value to avoid being overridden by above container query.\n ...(span !== 1\n ? Css.addIn(\n `&& > [${gridItemDataAttribute}='${span}']`,\n Css.ifContainer({ gt: minWidth }).gc(`span ${span}`).$,\n ).$\n : undefined),\n };\n\n return style;\n }).filter((s) => Object.keys(s).length > 0);\n\n return {\n ...Css.dg.gtc(gridTemplateColumns).ctis.gap(gridGap).$,\n ...Object.assign({}, ...gridItemSpanStyles),\n };\n }, [minColumnWidth, gap, columns]);\n\n return { gridStyles };\n}\n","export const gridItemDataAttribute = \"data-grid-item-span\";\n","import { gridItemDataAttribute } from \"src/components/Grid/utils\";\n\nexport function useResponsiveGridItem({ colSpan = 1 }: { colSpan?: number }) {\n return { gridItemProps: { [gridItemDataAttribute]: colSpan } };\n}\n","import React, { ReactNode, useContext, useMemo } from \"react\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"../utils\";\nimport SpinnerGifBase64 from \"./HbLoadingSpinner.base64\";\n\ninterface HbLoadingSpinnerProps {\n /** Reverts loading text to `Loading...` if true. May override global noQuips by passing in noQuips={false}. */\n noQuips?: boolean;\n /** Contextually relevant quips, like \"Where did I put that invoice?\" on some invoice page. Will override global noQuips if non-empty. */\n extraQuips?: ReadonlyArray<string>;\n extraQuipsOnly?: boolean;\n /** No text at all */\n iconOnly?: boolean;\n}\n\nexport function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }: HbLoadingSpinnerProps) {\n const ctx = useContext(HbLoadingSpinnerContext);\n const tid = useTestIds({}, \"hbSpinner\");\n\n const quip = useMemo(() => {\n const allQuips = extraQuipsOnly && extraQuips.length !== 0 ? extraQuips : [...ctx.quips, ...extraQuips];\n\n // If quips are off globally but custom quips were provided, then override global\n const forceQuips = extraQuips.length !== 0 || noQuips === false;\n if ((ctx.noQuips && !forceQuips) || noQuips || allQuips.length === 0) return \"Loading...\";\n\n return allQuips[Math.floor(Math.random() * allQuips.length)];\n }, [ctx.noQuips, ctx.quips, extraQuips, extraQuipsOnly, noQuips]);\n\n return (\n <div css={Css.df.fdc.jcc.aic.$} {...tid}>\n <img\n src={SpinnerGifBase64}\n data-chromatic=\"ignore\" // Chromatic timing would snapshot this on different frames of the 24-frame gif, so ignore it\n css={\n Css.add({\n // Image is white-on-black, so this flips it to black-on-white for our almost-always white backgrounds\n filter: \"invert(1)\",\n }).$\n }\n alt=\"loading\"\n {...tid.gif}\n />\n {!iconOnly && (\n <div\n data-chromatic=\"ignore\" // ignore spapshotting on randomized loading quips -- Mostly for consumers so their snapshots aren't constantly triggering\n {...tid.quip}\n >\n {quip}\n </div>\n )}\n </div>\n );\n}\n\nconst dotDotDot = (str: string) => str.concat(\"...\");\n\n/** Quips for Homebound's Mission Statement. Internal. */\nexport const HB_QUIPS_MISSION: ReadonlyArray<string> = [\n \"Loading\",\n \"One Team\",\n \"On a Mission\",\n \"Executing Relentlessly\",\n \"Building Better\",\n \"In Service of Our Customers\",\n].map(dotDotDot);\n\n/** Fun quips internal employees should recognize. Internal. */\nexport const HB_QUIPS_FLAVOR: ReadonlyArray<string> = [\"HOM is HOW\", \"Scaling Massively\", \"#LoveIt\"].map(dotDotDot);\n\ninterface HbLoadingSpinnerContextType {\n quips: string[];\n noQuips: boolean;\n}\n\nconst HbLoadingSpinnerContext = React.createContext<HbLoadingSpinnerContextType>({\n quips: [\"Loading...\"],\n noQuips: false,\n});\n\ninterface HbSpinnerProviderProps {\n /**\n * Quips the loading spinner will use for your app. Suggest importing and using HB_QUIPS_MISSION and\n * HB_QUIPS_EXTRA for internal apps. Can also add fun app-specific quips like \"Loading the blue into\n * BluePrint\" or \"Overriding the Underwriting\"\n */\n quips?: string[];\n children: ReactNode;\n}\n\nexport function HbSpinnerProvider({ quips = [], children }: HbSpinnerProviderProps) {\n const state = useMemo<HbLoadingSpinnerContextType>(() => ({ quips, noQuips: quips.length === 0 }), [quips]);\n return <HbLoadingSpinnerContext.Provider value={state}>{children}</HbLoadingSpinnerContext.Provider>;\n}\n","export default \"data:image/gif,GIF89a%80%00%80%00%E7%00%00%00%00%00%0D%0D%0D%16%16%16%1C%1C%1C%22%22%22%26%26%26%2A%2A%2A...222555888%3B%3B%3B%3D%3D%3D%40%40%40BBBEEEGGGIIIKKKMMMOOOQQQSSSUUUVVVXXXZZZ%5C%5C%5C%5D%5D%5D___%60%60%60bbbccceeefffhhhiiijjjlllmmmnnnpppqqqrrrsssuuuvvvwwwxxxyyyzzz%7C%7C%7C%7D%7D%7D~~~%7F%7F%7F%80%80%80%81%81%81%82%82%82%83%83%83%84%84%84%85%85%85%86%86%86%87%87%87%88%88%88%89%89%89%8A%8A%8A%8B%8B%8B%8C%8C%8C%8D%8D%8D%8E%8E%8E%8F%8F%8F%90%90%90%91%91%91%92%92%92%93%93%93%94%94%94%95%95%95%96%96%96%97%97%97%98%98%98%99%99%99%9A%9A%9A%9B%9B%9B%9C%9C%9C%9D%9D%9D%9E%9E%9E%9F%9F%9F%A0%A0%A0%A1%A1%A1%A2%A2%A2%A3%A3%A3%A4%A4%A4%A5%A5%A5%A6%A6%A6%A7%A7%A7%A8%A8%A8%A9%A9%A9%AA%AA%AA%AB%AB%AB%AC%AC%AC%AD%AD%AD%AE%AE%AE%AF%AF%AF%B0%B0%B0%B1%B1%B1%B2%B2%B2%B3%B3%B3%B4%B4%B4%B5%B5%B5%B6%B6%B6%B7%B7%B7%B8%B8%B8%B9%B9%B9%BA%BA%BA%BB%BB%BB%BC%BC%BC%BD%BD%BD%BE%BE%BE%BF%BF%BF%C0%C0%C0%C1%C1%C1%C2%C2%C2%C3%C3%C3%C4%C4%C4%C5%C5%C5%C6%C6%C6%C7%C7%C7%C8%C8%C8%C9%C9%C9%CA%CA%CA%CB%CB%CB%CC%CC%CC%CD%CD%CD%CE%CE%CE%CF%CF%CF%D0%D0%D0%D1%D1%D1%D2%D2%D2%D3%D3%D3%D4%D4%D4%D5%D5%D5%D6%D6%D6%D7%D7%D7%D8%D8%D8%D9%D9%D9%DA%DA%DA%DB%DB%DB%DC%DC%DC%DD%DD%DD%DE%DE%DE%DF%DF%DF%E0%E0%E0%E1%E1%E1%E2%E2%E2%E3%E3%E3%E4%E4%E4%E5%E5%E5%E6%E6%E6%E7%E7%E7%E8%E8%E8%E9%E9%E9%EA%EA%EA%EB%EB%EB%EC%EC%EC%ED%ED%ED%EE%EE%EE%EF%EF%EF%F0%F0%F0%F1%F1%F1%F2%F2%F2%F3%F3%F3%F4%F4%F4%F5%F5%F5%F6%F6%F6%F7%F7%F7%F8%F8%F8%F9%F9%F9%FA%FA%FA%FB%FB%FB%FC%FC%FC%FD%FD%FD%FE%FE%FE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%21%FF%0BNETSCAPE2.0%03%01%00%00%00%21%FE%11Created%20with%20GIMP%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%DD%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%EC7%80%80%C7%02%02%EC%0D%40%99%F2%E4%CA%92%2F%5B%E6%5B%99%B1%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%BB%B6%ED%DB%B8s%EB%DE%CD%BB%B7%EF%DF%C0%83%D7%0E%08%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FC%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF7%03%88%1E-Z%80%E9%01%04%0A%188p%00A%82%05%0D%1EH%A8%C0%964i%D3%02P%ABn%FD%9A%01%5C%DB%A3O%EB%5EM%17x%00%DC%A8%EF%1A%3F%0E%BA%B9%F3%E7%D0%A3K%9FN%BD%BA%F5%EB%D8%B3k%DF%CE%BD%3B%CA%80%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%20%03%88%160%80%40%81%03%09%16%40%B0%D0%A1%04%8C%1EK%B0%90%89%B3%87%D0%A2H%966y%0A5%AAT%29S%A7P%A5J%A5J%D5%AA%E3%C8Y%B1Z%15U%F4h%D2%04%0C%20X%F0%80B%06%11%2Cp%14%A1%22%06%0E%9FB%8D%2A%B7m%02E%EAT%AAU%AD%5C%BD%82%05%2B%96%AC%F7%B2f%C9%9FO%D5y%00%E8%A8%19%3C%60%5D%C2%05%8F%25Y%981%87%1F%88DrI%27%A2%94%82%8A%2A%E9%AD%D7%1E%7C%F1%CD7KU%F6A%27%9D%02%0EH%80%C1%07%29%D0%10%84%13%5D%ACq%C7%20%8CL%A2%09y%A7%A8%C2J%2B%EB%C5%E2%DE%7B%12NhU%85%A5I%B7%80%03%13l%20%C2%0A7%18AE%18o%ECQ%88%23%96p%12%8A%82%E8%B5%F8b%84%F2%7D%E5%9C%00%D0%15p%A1~%11P%60%01%06%1Al%D0A%07%1E%7C%00%C2%97%21%84%29f%08%A0%95i%E6%99h%A6%A9%E6%9Al%B6%E9%E6%9Bp%C6%29%E7%9Ctf%15%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%14%03%88%160%80%80%01%04%0D%26p%40%81C%89%965w%02%25z4%C9R%A6M%9D%3C%7D%FA%04%2AT%28Q%A3F%91%22U%AAxqS%A6N%9DB%C5%1CU%AA%E7%AA%A2%ABZE%FD%E8%E8%D2%06%124%A8%00%82%05%8F%27a%E4%D6%FCI%14%E9%12%A7O%A1%88%27_%0E%9D%3A%2BV%AD%E2%BB%9A%FF%EA%15%AC%FB%B0b%E9%8F%25%AB%BF%7F%A4%A2%05%20%80i%0A%3C%60%01%08-%F8%10%05%19t%00%B2%C8%24%99t%02%CA%28%A5%24%E7%5C%2A%D3%AD%F2%5E%7C%F2%D5g%1F~%FB%F1%E7%DF%7F%00%8A%86%5D%81%07%BA%F0%83%14%0C%06%C2%08%25%9Ax%22%0A%29%16b%E8%1E%7C%1C%D2W%1F%88%FB%8D%D8%DF%2C%B2%285%DA%80%D99%60A%08.%001E%19u%0C%D2H%25%9BLX%0A%7B%D3m%98%A3%2B%3B%F2%28%A2%8F%B3%00%F9T%80%A4%99%96%00%03%0FHP%C1%05%19l%C0A%07%1Dx%E0%C1%07p%C6%F9%01%08t%D6i%27%08%21%E4%A9%E7%9E%21%80%E6%E7%9F%80%06%2A%E8%A0%84%16j%E8%A1%88%26%AA%E8%A2%8C6%9AU%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%0E%03%88%1EP%E0%00%83%0A%20%60%0C%C1%82%A6%CE%9FC%8C%1EE%9AD%A9%92%25K%970e%CA%A4I%D3%A6M%9C8u%F2D%FC%D3%27P%A0B%29%17%25j%94sR%A4JI%9F%5E%CA%94%F5S%D8%7F%8A%0E0%80%80%01%05%116%EF%A4%E0%21%A5L%1DA%8B%22U%CA%04%7C%B8%F1%E4%A1%98%3F%9F~%1D%3B%2AT%A9R%A9%DA%BF%AA%3F%AB%FF%AD%04%18%A0%2B%04%BE%F2%8A%2BA%05%20%00i%08%9C%16%02%0CFl%E1%06%1F%88%3C%B2%1Ep%9E%1C%97%9C%7C%A3%40%27%5D%7D%F7%DD%A7%1F%7F%FE%01%28%60%2B%04%BAb%E0%2B%B0%BC%92%A0%82%DE%29%00%81%06%27%E8%10E%19v%0C%D2%C8%24%98l%D2%89%86%F1%3D%17%DD%87%D8%9D%22b~%24%AE%F2%1F%2B%27%A6X%E0%8A-%0A%25%9A%00%04%98FAjFh%E1%86%1F%89Dr%89%8F%C7q%E8au%A6%D8w%E4~%AA%94%C8%E4%89%28%3E%C9%22%2Cp%C2b%D4%94%0C.%E0%80%04%15%5C%90%81%06%1Bp%E0g%07%80%06%DA%81%07%84%16Z%E8%07%88%26%AA%28%A2%204%EA%E8%A3%8E%82%26%E9%A4%94Vj%E9%A5%98f%AA%E9%A6%9Cv%EA%E9%A7%A0%86%9AU%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%08%03%88%1EP%00%C1%03%0C%26t%40%19%23%87%8F%A0C%8A%185r%F4%A86%A4H%B8%25%E9%9E4%89%92%EFJ%C0%2BY%1An%E9%92qL%982e%D2%C4%5C%D3%A6%E7%9C6q%9A%DE%A9%BA%A7%EB%D8u%8E.%DD%E0B%89%1CQ%CC%F2%D4%09%94%C8%91%24J%C2%8D_J%BE%9C9t%EA%D5%3Ba%FFD%FF%13%28P%A1%F2%87%12%C5%7F%94%FFQ%A4%04X%CA%80%03%9Ab%E0%29%A6h%17%C0%00%04%1C%C0%40%05%22%D4%B0D%18s%FC%91%C8%23%93Tb%9Cr%ED9%27%1D%7C%D8yR%DF%7D%F8%E9%C7_%7F%FE%05%28%20%81%06%1Ex%CA%8B%A7%28%28%00%01%06%28%20%C1%070%18%D1%05%1C~%20%82aq%ED%3D%F7a%7C%F2%898%E2%7D%26%A2%F8%9F%8A%04%B2%E8%E2%8B%A8D%89%CAN%DB%25%00%C1%06%2A%00%81%05%1B%7C%F8H%89%25%CB%7D%C8I%7C%F3%D9%87d%89%FB%9D%B8%E4%8AN%3E%09%A5%94R%FA%24%9A%00%A4%21%B0%C0%03%12TpA%06%19h%A0%C1%06%80%06%1A%28%07%84%16j%28%A1%1D%24%AA%E8%A2%8Bz%E0%E8%A3%90F%EA%01h%94Vj%E9%A5%98f%AA%E9%A6%9Cv%EA%E9%A7%A0%86%2A%EA%A8Y%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%03%03%04%18P%E0%40%83%0B%25r%3C%11%03gO%A0B%87%10%25%9A%AD%A86%ED%DA%B8%15%CDN%A4%BB7%EE%DD%BAy%E7%BE%1D%5C%B8%EF%E0%BF%13%D1%0C%20%80t%82%07%1AR%F8%B0%92%06%8F%A0D%8D%1EE%92%C4%BD%BB%F7%EF%E0%C3%A7%8B%1FO%DE%FB%F2%D1%05%9EkX%01%C4%CA%9A%3C%83%149%8A4i%12%A5%FB%F8%F3%EB%DF%CF%1F%BF%FD%FE%00%F27%C9y%A4%21%F0%C0%06%ECa%B1%C6%1E%850%02%89%7D%95D%18%A1%25%14JXI%85%17Z%22%21%86%16%5E8%A1%86%19n%D8%21%85%20~%18%E1y%02%10%A0%9E%0A%40d%D1%06%1F%874%22%09%25%17%5Eb%E3%8D8%E6%A8%E3%8E%3C%F6%E8%E3%8D8%89%D6%1C%01%06%400%81%05%17%60%90A%06%1A4%E9%E4%93PF%29%E5%94TV%F9%24hXf%A9%E5%96%5Cv%E9%E5%97%60%86%29%E6%98d%96i%E6%99Y%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CD%01%02%08%20%60%40A%84%0E%2C~P13%87O%A0B%87b%CB%8Em%A8P%21B%84%06%09%DA%1D%A8%F7%9F%DF%7F%FC%F4%E9%C3%87%CF%9E%3Dz%F2%E0%C1s%E7%8E%9D%E7u%EA%D0%A13G%8E%9C8p%E0%BCq%D3%A6%3B%9B5%E0%D3%FE%88Gs%C6%8C%992%2CC%8B%1Ep%80%81%85%115%96%80%81%C3%A7%90%A2F%8F%20Az%C4%FF%91%23G%8D%04%C8%08%23%8B%2C%A2%88%22%89%24%82%C8%82%87%D4f%5Bn%BC%05%02%08%20%C1%F9a%21q%C7%21%97%87r%CDE7%1Du%D6e%97%DD%1B%DD%B5%14%DA%00%05%24%E0%00%06%27%EC%20%85%19u%00%82%08~%91Hbc%248%EE%E7%DF%7F%0062%20%81%08%2A%88%88l%0E%E2F%C8n%82%F4Fa%85%C3%19%A7%21%87%CEy%08%A2u%D8%C1a%A2%00%03%94%26%01%07%2C%04%91%C5%1Az%10%B2%C8%23%92L2%09%25fNrc%8E%FD%FD%17%A0%8F%05%1A%98%A0%82%B4%15%09%21oK%06G%9C%93%7Bl%98Gs%D0IG%5Du%E9%89F%40%7B%15%880%83%12_%C4%F1%07%22%8EHB%09%25%95T%3A%29%9Aj%AE%19%89%8En%0A8%A0%9C%092H%DB%83%10%2A%B9%E4%85%C5e%98%1Cs%80z%08ShNX%12P%C0%01%09%28%B0%00%03%0C4%D0%40%06%BC%F6%EA%2B%06%C0%06%8B%C1%05%C4%16k%EC%05%16%24%ABl%B2%154%EBl%B3%14D%2Bm%B4%13Tkm%B5%12d%AB%EDg%DCv%EB%ED%B7%E0%86%2B%EE%B8%E4%96k%EE%B9%E8%A6%AB%EE%BAj%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%C9%01%02%08%20%60%40%01%84%0C%25j%24%D1%92%A6N%1FA%87%10%25%9A%8D%08%D1%A1C%85%0A%0D%12%14%28%D0%9F%3F~%F8%F0%D9%93%07%CF%1D%3Bu%E8%CC%91%03%E7%8D%9B6m%D6%A8I%83%C6L%192c%C2%84%F9%E2e%8B%96%2CX%AC%FET%A1%22%25%0A%94%27M%98%2CY%92%C4H%91%21A%80%FC%F8%D1c%87%8E%1C7j%94%14%3D%A0%00%02%07%16%8C0%83%11Z%A8q%87%20%894%F2H%24%92H%12I%24%90%3C%E2H%23%8C0%B2%08m%B8%11B%08o%80%00%D7%C7py%E4q%5Crr0%F7%06t%D2Qg%1D%19bl%E7%05%17%DEeq%85%15TLQ%1E%14N%A8%97%04%12%EE%11%21%84%7C%3E%F00Rh%A2%11p%C0%02%12p%B0%82%0FR%94A%C7%1F%884%12%C9%24TR%E9%60%24%12Nh%E1%85%B6e%B8%5B%20%1D%06%07%A2q%C9-%17Gsm%B0%91%E2%19%2B%8A%01%06w%5Ch%F1%DD%8C5Jq%5Ez%EC%F1H%C4%10%3F%FE%20Rh%02%08%D0_%02%A7%95p%C3%12%5E%C0%D1%C7%21RRR%C9%A3%95Pb%25%84YR%B8%88%22%89%D8fH%21%84%7C%19%A6pz%14wG%99r%9C%F9%9C%9A%D3%B1%89%5D%18%60x%F1%E2w%B4%E1%D1xc%8EK%28%91%C4%11F%EC%19%C4%90%82%1A%C9%40%05%20%C0%40%04%16j%E4A%08%23%91Pb%C9%25%CC%5EbI%A4%92%3A%18%A1%23Z%5E%9A%E9%21%9Bn%D8%1Bp%C1%ED%11%EA%88%CA%99x%EA%1A%2A%5E%97%5D%AB%5D%C4%18%5E%156F%F1%04%AD%EC%E1J%C4I%80%0E%40%40%01%07%24%A0%C0%02%0C0%D0%C0%BF%00%03%DC%2F%06%04%13%7C%C1%C1%07%5B%A0%B0%05%154%5C%01%05%10S0%C1%C4%13K%60q%04%18G%00%C1%C6%1B%3F%E0%F1%03%0E%84%EC%40%C0%FD%96%BC%C0%C9%27%2B%A0%B2%02%09%7C%E6%F2%CB0%C7%2C%F3%CC4%D7l%F3%CD8%E7%AC%F3%CE%3C%F7%ACV%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%C3%01%02%0C%20%60%00A%83%09%1AH%C8%10%22%25L%9B%3B%7F%0A%25b%E4%E8%91mG%8E%1A1R%94%08%D1%A1B%84%06%05%02%F4%C7%0F%9F%3Dy%EE%D8%A13%27%CE%9B6m%D6%A49c%86%8C%980%5E%BAh%C1r%A5%CA%94%28P%9A%FE0Y%92%C4%08%91%20%40%7C%F0%D0%81%C3%06%0D%191%5E%B8%60%A1%02%C5%89%12%25F%8C%00%01%C2C%87%0D%1Ah%90%C1%05%16T%80Qh%02%90%A6%80%03%14t%90%C2%0DH%60qF%1D%7F%20%E2%88%24%95Xr%C9%86%97XR%09%25%93H%12%C9%23%B91%B2Ho%86%00%27%08q%7D%EC%A1Gru%D0%21%87s%D1MW%9D%18%60x%C1%C5vVP%21E%14O4%B1%04%12F%14%21Dz%EB%B5%F7%5E%7C-%AC%A0B%0A%27%98%40%C2%08%21%F4%E7%1F%07%01bPQh%01%080%9A%01%098PA%07%28%DC%90%84%16h%D4%11H%22%8FPrI%26%9A%C4%99I%26%1D~%18%E2%88%25%9E%E8%5B%21%83%08%12%C8%1F-%EA%81%C7%1D1%CA%01%C7s%D2%A1qc%8E%3Bb%D1%E3%8FN%8CW%1E%11G%AA%C7%9E%7B3%C47%DF%93QN%29%02%08%1F%5C%B9A%06%5B%22HZ%98%15x%90%02%0Eg%AAq%87%20%EB%8BDR%09%26%9Al%C2%C9%26%9B%C8%B9%A1%87w%92%A8%9B%9E%BF%11%B2%22%A0%7C%08J%A8%8C%87F%A7%86%A2%D61%CA%A3%8FPD%3A%A4y%95%26%89i%0C04%C9%A9%94T%82%EA%1F%80%14%21%F8%E5%82%A9%AA%80%83%12%5B%AC%91%07%21%8CHr%89%26%9Ct%22o%27%9C%DC%AAI%26%98%D4y%27%24y%F6%16%EC%B0%C6%BDx%AC%A1%88%DA%D8%AC%8E%CF%FE%18%E4%90G%18%89%E4%A54d%FA%82%B6Pr%FBi%A8%1Dp%90%11%97%5E%12P%40i%09%28%B0%00%03%0D%94%EC%C0%C9%27%97%AC%F2%CA%0C%B4%EC%F2%02%16%C4%5C%60%05%15P%60%F3%048K%A0s%04%3CC%E0%F3%03%40%A7%5C%F2%CB%0B%14%AD%C0%D1%09%24%9D%00%02L%1F%E0%B4%D3%06Dm%40%01TWM%C0%D5%04%7C%A6%F5%D6%5Cw%ED%F5%D7%60%87-%F6%D8d%97m%F6%D9h%A7%ADV%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9s%C4%00%01%F6%82%0E%20%20%B4%5E%D2%A4%09%188%80%80%01%84%0A%1AD%A8%A0%01%84%09%961m%EE%FC1%B4%E8%D1%24K%972i%D2%B4i%93%A6L%99.Y%B2T%89%D2%24I%90%1E9b%B4%28%11%A2C%85%06%05%FA%E3%87%CF%9E%3Cw%EA%FE%CC%89%F3%A6%CD%9A4f%C8%8C%09%E3%85K%96%2BU%A4%40q%C2D%C9%11%22B~%F4%D8%91%C3%06%8D%180%B8%C0%82%0A%28%98%40%C2%08%21%7C%E0A%07%1Ch%90%01%06%16T%40%C1%04%12D%00%C1%03%0F4%D0%C0%02%0B%28%E0a%02%08%20%20P%00%03%0CP%C0%01%09%B8F%81%06%21%AC%60%C3%10Pla%86%1C%7B%10%B2%88%24%97h%D2%09%28%A2%8C2%0A%29%3E%8E%22%8A%28%A0%80%F2I%27%9Cpr%1C%26%974%27I%24%D2Q%97%08v%84l%D7%9D%1Ex%D8A%87%1Cp%98%97%C6%19e%88%01%86%17%5BdaE%7CP4%B1D%12F%0C%01%84%0F%3C%E4p%03%0D3%048%60%81%07%86%00%C2%82%0DfpA%84%13Vx%A1%03%1A2%D0%E1%87%00%90%A8%1A%02%0B%3C%40A%06%20%A4%20%C3%0FKdA%06%1Cz%0C%B2H%24%96l%F2I%28%A2%90R%CA%A8%A3%92%02%A4%28%A1%18%E9%09%92%C6%25g%89s%FE%D09%D2%08%23%D6%19B%88%20%DBy%07%9Ex%E4y%99%5E%18_t%A1%05%16VL%21%05%7D%F6%E1%A7%9F%0E8%D80C%0C%2F%B4%B0B%0Ax%22%A8%60%07%1B%3C%F8g%A0%12%400h%03%86r%E8a%A2%27%26%D0%40%04%17x%60B%0C%3D%24aE%18m%E0%11H%22%9Cn%E2I%A8%A3%9Ar%8A%29%FC%9AR%AA%90%A9~%B2%AA%92%99%60%C2%1C%25OJ%D7Hu%88%14r%2B%20Wf%B9%25%1Cn%B0%A1%06%98c%8C%B9%85%16%F0%C9%E7%C4%9Am%02%D1%03%0F%CC%D6%20%83%9D%2A%A4pB%09%23%88%00%C2%07%0C%3A%08%A1%84%14Z%08%01%A1%E0%8A%AB%00%00%02%A4%F8%DA%06%23%B4%90%83%11S%7C%A1F%1D%7F%20%F2H%25%9E%E2%7B%CA%29%A8D%8D%CA%D3%FC%96r%2A%AAF%B2%BA%E4%AB%CFE%B7%B0%22%D7e%B7%5D%1F%DF%857%B1%AFd%00%DBE%99%C5J%F1D%13%C9%06%A1%DF%0E%CD%D2p%B2%B4%04%9AP%82w%08%09.%B8%81%06%18l%3BA%CD%DF%86%DB%E1%88%A4%090%00%01%04%14%B0Z%02%0A%2C%C0%00%03%0D8%E0%00%86%98g%AE9%86%96wn%B9%86%A0%83%3B%F9%E8%1C%96%EE%E1%E0%83KPa%046c%FE%B9%E8%86%7F%98%00%88%21%1E%60%FB%01%06%E4%5E%C0%EE%BB3%CEx%89%C0%03%2F%C0%F0%C4%97%06%9Ag%C8%27%AF%FC%F2%CC7%EF%FC%F3%D0G%2F%FD%F4%D4Wo%FD%F5%7B%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1c%AD%01%FAF%0E%40yo%00%01%98%23%E7%0D0%A03%01%02z%03%140p%E0%80%01%BD%02%12%28%60%E0%80%81%5E%02%0F%24P%B80A%EF%81%0C%1CB%94%F0%A0w%01%8A%163t%B8%D0%1B%C1%07%91%25R%84%E8%D5p%C5%0B%994V%F4%8ExC%27%8F%1F4z%5B%0CB%B4%E8Q%1D%BD6%26%FEY%CA%B4%E9%8F%5E%1F%9EB%89%22eH%AF%10S%A7R%A9Z%A4%D7%08%2BV%ADZ5%D2%9B%C4%D5%AB%FF%8E%E8%A5D%2C%04%C6%F2%88%80%B2%24%28%CB%2B%AA%A8%92%CA%83%A8%A0r%CA%84%A6%94ba%29%A4%8C2%8A%28%A1%80%02%8A%27%9Et%C2%89%26%99%60r%89%25%95L%22I%24%8F8%C2%C8%22%89%1Cb%08%21%82%FC%E1%07%1Fz%DCa%07%1Dr%C0%D1%C6%1Ai%98A%86%18_p%A1%05%16UH%F1%04%13K%20a%C4%10%40%F4%A0%03%0E5%CC%10%83%0B%2C%A4%80B%09%24%8C%10%C2%07%1Dp%A0A%06%17TP%01%05%13D%00%C1%03%0E%B4%C6%C0%02%0A%24%90%00%02%08%94V%9A%01%05%E4%F9%D9g%00%2C%A1%E0%9F%05%C2%02%CB%7F%AE%E4%97%1F%2B%AB4%98J%84%A7T%98%21%87%A0%7C%22%E2%26%99%9CH%C9%24%91%40%E2%22%8C%87%14%22H%207%EA%81%87%1Ds%C4%F1%06%1Bj%9C%21d%18%5E%1C%99%24%14%FEM4Y%84%10%3F%F0%A0%C3%0D4%C8%00C%0B%2B%A4p%82%09%24%7C%E9A%07%1Bh%80%81%05%15L%20%81%9A%0F%B0%D9%C0%9B%0AD%3Bg%9D%A6%E5Y%C0%9E%A0-1%CB%2C%7F%CA%12%A8%A0%AF%B8Rh%2B%F7%AD%92%28%84%8Db%B8a%87%9Fx%C2%C9%26%24%A2%A8%22%8B%8DpZ%08%21%81%FC%C1%C7%1E%A3%F2%E8%23%90%AB%B6%8A%85%15SD%E1%C4%12I%3C%19%E5%94U%C6%F0%02%0B%2A%FCJ%82%08%20%80%B9A%06%18%94%89%A6%9Ak%3A%F0%2C%B4q%D2Y%27%9Ez%EE%D9%E7%B6%DC%2A%F8%ED%A0%E1%8E%5B%AE%83%8B%A6%FB%28%BB%21%8EX%A9%25%94%AC%F8H%23%8C%28%82%C8%8C%F9%F6%B1G%1Ew%D4%D1%A3%1B%00%93%C1%2A%17YXA%85%92%08%1BAD%10%3E%EC%80%83%0D3%C8%F0B%0B%2A%A0%00%AC%08_%86i%EC%05%C8%A6%19A%04%CE2%00%B2%02t%DAi%ED%B5%7Cj%8B2%A0%04%82%DB%B2%A1%88%2A%2Aa%A0%85%18%8A%02i%CD%94Z%8Ai%8B%2F%C6%E8%29%207%12%5D%07%1D%A6%A2z%C6%90_t%A1%C5%15%AF2%A1%C4%11%B3%D6%9A%83%0D4%C4%00%83%0B%BD%9EP%82%97%1F%0C%7B1%D9%C9.%DBq%03%CF.%00%27%DBmW%5B2h%05%9C%CD1%04%B8%E7%AE%FB%EE%CD%F6%EE%3B%9Bm%06%EF1%EB%AC%ABm%BC%EB%AEG%AB%BC%9Cr%E6%DEl%9B%C4%AB%9D%BC%B4%D3Rk%9A%01%D8%BF%8Dmg%DC%0F%80%D9%F7%99Q%26%FE%F8%E4k%F6%D8%F9%E8%A7%AF%FE%FA%EC%B7%EF%FE%FB%F0%C7%2F%FF%FC%F4%D7o%FF%FD%F8%DF%14%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%85%06%000xo%80%C3%87%F5%06%18%C0X%40a%BC%02%0AH.%40%40%EF%80%04%98%13%18%D0%5B%00%82g%08%0C%F4%22%D0%B0%A1%F4%04%BD%0DV%B0%60%B1%E2%83%5E%0AB%86%C8%86%A1%D7%03%97%DB%5C%8A%E8EAg%8E%EF%2Czg%1C%1A~%28%8D%5E%1E%95%2AY%B2tG%AF%10P%D0A%01%D2k%E4%94%F5S%86%F4%26a%C5%9D%95%22%BDK%5E%FE%B9%1A%DF%08%3C%2CX%AF%5E9%D2%CB%24%96%7BX%EB%F32%91%25%CB%FD%23%F6%F4%EB%DF%97%9F%3F%D6~%BC%F3%D5%E7%1F~%F4%0D%C8_%81%FF%DD%15%A0~%04%DAG%20%83%07B%08%60%7F%09%DA%B5%04%85%E0a%98%D7%85%08f%D8%E1%86%05%C6%E2J%2A%A9%A0%82%8Au%A6%94%A2b%29%A4%8C%22J%28%A1%80%F2%89%27%9Dp%B2I%26%98%5CbI%25%94H%12%C9%23%8D0%A2%08%22%87%14BH%20%7F%F8%B1G%1Ev%D4%21%07%1Cm%AC%91%86%19d%88%01F%17Z%60Q%85%14O0%B1D%12E%08%F1C%0F%3A%D8%40C%0C0%B8%B0B%0A%26%900B%08%1Ft%C0%81%06%19%5C%60A%05%14H%10%81g%0E4%C0%C0%02%0B%28%A0%40%02%08%1C%60%E8%01%06%18%20%19%01%8C%12%C0%D8%A3%02D%0A%00%87%EE%BD%87%9Ex%ADd%CA%CA%2A%AB%A8R%E2%89%29%B6%F8%E2%8C5%DE%A8c%8F%3F%069%A4%21G%FE%D1%C7%1E%FEx%D8AG%1Co%B0%A1%C6%19f%8Cq%A5%16WP%21%05%14M%28q%04%11A%F4%B0%03%0E6%CC%10%83%9A%29%9CP%C2%08%22%80%E0%01%07%1Bh%80%C1%9D%13%E8%19%C1%03%0E%FC%09%A8%A0%98%15%8A%E8d%8D%3A%FA%E8%00%91%0A0i%7F%96%A6%E7J%A6%ADl%DA%E9%A7%A7%84%EAb%8C4r%A2I%26%A7%FA%08%24%23%89%20b%24%92%AF%C6J%87%1Co%B4%A1%06%1Ae%E8%8Ae%AF%5C2%21%2C%11%40%90%89C%0D%CA2%7B%82%09oJ%DB%C1%06%19%60pA%05%D9J%00%01%B7%0Cx%0B.%02%E2%2A%BAh%B9%E7%A6%BBn%88%B1%9C%E7.%BC%DC%CDkb%BD%2C%DEK%AA%BE%FCZ%82%EA%BFC%0E%EC%2A%AC%B2%3E%A90%C3b%7C%C1%85%16V%F8%DA%E5%C4%15%EBp%F1%0Ci%AE%E9%2C%B4%1E%83%7C-%C9z%9E%DC%A7%9F%81%0E%CA%B2%A1.S%D6h%CC2s%28%E0y%97%8E%A7%29%A7%9E%96%C8%B3%A8%A1%7C%F2I%87%A9A%0F%DD%C8%22%01%1B%5Dp%1D%07C%B9%C6%19e4%8De%D4%11%0B%3BD%C5%C7%26%9Bu%0A%28%3C%1BB%D7%21%8F%9C%ED%9E%DC%F6%A92%A1-%93%BB6%DB%EAv%F6%D9%E9%A8%7B%F6%C0%EA%AC%B3%EE%C0%EB%B07%20%FB%EC%29%A7%0C%E8%ED%82%82%9B%19%CBg%1B%2A%BB%ED%DF%0E%1A%AE%B8%88%26%3A%99%DA%A3C%9An%BA%885%EF%BC%F3%81E%2F%FD%F4%D4Wo%FD%F5%D8g%AF%FD%F6%DCw%EF%FD%F7%E0%87%2F%FE%F8%E4%8B%14%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%9F%06%0007nB%01%02%02%E8%B5k0%C0%00%02%80%07%E0%D5%5B7n%80%03%0A%10%208%60%A0%00%81%01%03%0A%C7%3DPA%C2%03%07%0C%16%24%40%60%40r%DC%05%23%3Ch%B8P%B9A%01%BE%04%25%D8%80%A1%A2%04%08%07%9E%F9jx%82%04%88%0E%13%A8%0D%8E0%03%26%8B%14%1C%B9%0B%B6%D8S%07N%9A%25%C1%09%D6%60%84h%90%1F%2F%C9%07%F2%D0tI%92%237%D1%05%0A%19%15%AA%D3%26%3D%D9%01%FE%14Iu%AA%D4%28A%E1%91%B4b%B5%2A%15%A2%F0J%5E%B9j%D5j%11%7CX%B0%E47%0A%BF%24V%2C%FC%8E%F0%27%8B%2C%FF%05%98%DD%12%03%FA%F7HxL%24%18%CB%82%07%3A%08at%08%12%F8%A0%80%16N%98%5C%83%192h%21%2C%1A%06%D7%A0%7F%17f7%A2%82%1E%92%18bnL%F8%07%20%83.%C2b%60t-%FE%27%23%8C.%CE%98%5C%7F6%EA%28b%8C%3E%B2%08%24%7FC%1Eh%E3%2B%FB%1D%88_~IR%B8%24%92%FC%3D%D9%E4%8E%F8%BD%02%A5%92%F9%5D%E9d%96S%06%B7D%96%AEt%99%5B%7CV%BA%C2%08%7CV%CAwfvd%BA%12%26%9A%F2%99%19%5E%12e%B6%B2J%29x%922%8A%28%A2%84%02%CA%27%9Ex%D2%09%27%9Bh%82%C9%25%96TB%89%24%91%3C%D2%08%23%8A%24r%88%21%84%04%F2%87%1F%7C%E8%81%87%1Dt%C8%01G%1Bk%A4a%06%19b%80%E1%85%16XT%21%C5%13L%2C%91%84%11%FEC%FC%D0%83%0E7%D4%20C%0C%2F%B0%A0%C2%09%25%8C%20B%08%1Ft%C0%81%06%19%90V%01%05%12D%00%C1e%0Dd%A6%80%02%9B%29%B6%18c%05T%EB%18%60%8FA%06%19%5E%DC%E2%05%40%9B%F4%AD%C7%9E%2A%A9%A0%82%CA%29%A6%E4%D9%E7%9F%82%16%9A%C9%25%95L%C2%A8%A3%8C%24%82H%21%84%08r%E9%1Ey%DC%D1%29%1Cn%84%3Aj%18_p%91%85%15SH%01E%13J%1CA%04%10%B3%E2P%C3%0C%B8%EA%8A%82%09%24%88%00B%B0%C3bp%81%05%15L%90%EC%B2%0E4%BB%C0%02%D0J%CBXc%D6b%9B%AD%B6%DDr%FBm%9C%E1%B22n%B9%A7%A0%5B%8A%9E%EB%02%EA%9D%A1%89%CA%0B%89%A3%8BH%8A%AF%A5%7D%F0%CB%A9%A7%A0%A2a%C6%18ax%B1%05%16%08G%C1%EA%ABC%40%AC%83%C42%C0%E0%C2%0A%29%F0%3AB%08%1Bw%B0%81%06%18X%60%01%05%22%2B%CB%AC%C9%29%2Bv%00%B5%D5b%AB%ED%DD%82%C5%0C%00%FE%9D%F3%D1g%F3%2A%AB%90%7B%AE%CE%3C%FB%F9%C9%A0%85b%12t%24%908%C2H%D1%87%14%22H%20%98jZG%A7o%80zF%19%A5v%A1%C5%15%AA.%BC%04%12E%08%F1%03%0F%B4%D2%D0%F5%D7a%F7J%F6%07%1Cl%90A%DA%21%27%ABl%C9%26%A3%1C%F7%DC%2C%D7m%F7%DD1%7B%CBw%CD%E3%0A%AE%F3%CE%3D%0BJ%E8%BB%96%2C%DA%A8%E3%8A%20rH%BE%80%60%DAo%1Ds%C4%E1%06%1B%A2%92A%B0%E7VP%B1%2A%13J%90%1E%84%0F%3B%E4p%83%EA%2F%B4%B0%C2%C5%19%03%EB%81%D9%C5%AE%DD%F6%B2%0F4%D0%C0%C9%28G%3B-%CB.%7B%D9%B6%82%27%00%00%14%00%02%08L%E0%03%16%C8%40%06%3A%E0%81%10%C4%9D%FE%F4%C7%80%0Af%86%7F%BA%7BV%026%E8%3F%B9%CDme%06%60%99%067%E8A%DE%85%D0Z%D7%0A%0C%DE%F2%D6-%C2%B8%F0%850%0C%8F%0CgH%C3%1A%DA%F0%868%CC%A1%0Ew%C8%C3%1E%FA%F0%87%0D%40%0C%A2%10%87H%C4%22%1Aq%25%01%01%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%ACY%89%01%02%9C%AD%18%40%40Z%B5%00%E0%AE%5D%18%A0%80%01%02%04%06%08p%9Bv%AE%C2%00%0B%228Pp%E0%EE%00%BDr%FD%16%0CP%21%C5%08%0E%15%200Hp%20%AFb%84%1D%964%09RC%05%88%0C%13%1E%28%18p%D9%A0%860x%DA%88%B1%B2%A4G%8C%13%1E%1A%24.%0D%21%8D%25H%88%FC%D0Q%F3EJ%11%12%05J%13%2C%E0%25%14%29P%9A%285%2A%C4G%0E%94%08%C2%07%06x%02%AA%D5%AAT%A5Du%C2%24i%8F%8C%E8%03k%FEX%82%05%EBU%2BV%AAN%91%CAD%854%F8%0E%85d%C9%8AE%FE%95%ABV%A8%E64%00%0F%E0A%1EX%F2%C9G_y%84t%C0%9F%40J%CC2K%80%F3%C5rI%0E%07%0E%94%C4%82%0C%8A%22%C5l%FC%25%C1%20%2Bi%1C%10aAJ0%08%C9%87%06%85%18%E0%88%24%12%B4%84%88%29%AA%18%60%2C%8F%B48%D0%8A%02%C6%28%23%00%26%CEg%A3%8C%26%C6%02%E3%8D%00%AC%E8%23%2C%8E%00%29%24%7DE%DE%B8%84%8F%F4%ED%D8%E2%92C%3A%99%22%94%E4%25%29%23%95D%1A9d%96J%0E%08K%23F%D6%F7%0A%98J%8AI%E6%95f%86%F9%8A%7Dg%3E%B9%A6%2B%AE0b%E4%9Bq%CE%09g%2Br%2Ay%27%9EF%DE%D7%0A%9Fz%FE%D9%CA%22%7D%0AJ%E8%8DJ%08%CA%CA%A1%3C%FE%C9%CA%A2%40%26z%1E%2B%8AD%EA%E8%2A%95%DE%88%C4%A3%AC%AC%92%08%90%9Bv%EA%29%A8%8F%AE%A2%CA%A7%9A%AEb%AA%2A%88%80%AA%AA%2A%FE%A9%B4%9A%AA%2A%B0%CA%2A%23%12%A6%A6%12%2B%90G%D0%9A%0A%2A%87%00i%84%AE%A8%00%2B%EC%AF%A8%9Cb%C8%B1%C5%2A%0Bd%11%BF%9EbJ%21%CF6k%0A%29%9Dp%B2%C9%26%9Adr%89%25%95P2%89%24%91%3C%E2H%23%8B%24%82%C8%21%86%10%22%08%20%7F%F4%B1G%1Ew%D8A%87%1Cp%B4%C1%86%1Ah%981F%18_p%A1%05%16VL%11%85%13L%2C%91%84%11C%00%E1%C3%0E9%DCP%83%0C1%BC%C0%82%0A%28%98P%C2%08%22%80%F0A%07%1Ch%90%01%06%17TP%C1%04%12D%00%C1%03%0E8%D0%C0%02%0A%24%90%00%02%07%14V%00%5Ez%F1%F5%16DE%24kJ%29%A5%902%8A%28%A1%80%F2%89%27%D9n%92%09%26%E0RB.%24%8E0%92.%22%ED%0A%F2%87%1F%7C%CCk%2F%BEn%EC%7BF%19%FFz%C1E%16VP%21%05%14O0%91%C4%11D8%0C%F1%0D4%C8%00%83%0B%17g%BCq%08%20x%00%B2%FE%C8%24W%40%01%CA%2A%B3%DC%00%030%2B%10%B3%CD7%E7%95%B3%CE%0F%15q%8A%B4%40%93Bt%D1%9F%24%DD%ED%B7%95%8C%5B.%BA%EA%1ER%88%20%81%F8%21%2F%BDu%CC%01%C7%1Bm%AC%91%86%19d%00%DC%85%16WTa0%C2J%1CQ%84%10%3F%F0%A0%03%0E5%C4%FDB%0B%2B%A4pB%09%24t%AC7%07%1Bh%40%B2%05%7F%A7%1C%B8%CB%2F%1B~%B8%01%D4%27%9E%D7%5E%D8c%88%90%E3%3F%07%3D4%E5Hk%AB%09%D3%E1%92k.%23%8A%24%E29%21%81%5C%CD%87%1Exl%0DG%D7i%A0%016%18%5DlA%B6%D9O4%A10%C3n%8BX%DC%E6%C6%82%14d%8C%04%23%08%C1%07%3C%80%BC%E4a%C0%02~s%DE%CAZ68%98%CD%8Cf53%40%016%A88%EC%F1%A5%21D%80%9C%D0D%21%0A%A3UN%7C%DE%0A%D7%24%CAu%AE%A9%19%E2s%A1%CB%1A%E9%E6%10%07%D4%A9%8Eu%00%13X%ECf%C7%04%25%20%A1%08%84A%C8%DD%EEj0%83%8A%01Ox%1B%EB%D8%02%917%B2%0B0%0Fp%13t%19%E1%2Cx%C1%0Cn%F0f%87Y%DC%CE%16B%80%07%B0%ACe%60%A4%60%03%C68F%06%98%D1%8C%0BHc%1A%A5g8%99%B9%11%01p%84c%CD%E6H%BD%3A%5E%91%83x%21%C0%1C%0BS%BD%3B%E6%11gY%CC%A2%07%B3%F7%96B%1A%B2%2F%40J%A4%22%17%C9%C8F%3A%F2%91%90%8C%A4%24%27I%C9JZ%F2%92%98%CC%A4%267%C9%C9N%C6%24%20%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%2B%C4%00%5E%3F%0A%18%1B%A0l%D8%8C%04%0E%14%180%40%80%D9%B3%15%0FP%90%C0%00%C1Z%B2p%27%2AX%21%A3%84%86%08u%0B%10%18%006%EF%C3%03A%C6P%19%22%83D%06%BA%07%06%18~8%60%C9%A0%40t%C8P%11%12%83%84%06%07%92%277%1C%22%89S%25F%81%E6%90%91%12D%C5%02%D1%0DO%28JeJ%94iF%7F%E4x9%21%00%F6%C2%0C%7DZ%B5Z%95%AA%94mJ%89%AC%28%F0%AD0%01%1AU%AF%5C%B5b%B5%0AU%29Py40O%28%C0J%29X%AF%A2%FE%0Bg%A5%2AR%8D%ED%09%81h%82%05%3E%BC%F4V%A0%B2%F4Fo%B0%04%22%F6%EC%DD%BBJ%15%E75%FD%82%12%E8%F1J%2C%F8%85%F7J%2B%81%5C%F0_A%06%90%A1J%2C%10%E6%17%DD%23%2B%2CHP%00Q%88B%20~%EDu%E2%84%85%04%D5%60%09%84%1B%B6w%8A%18%04%80%28P%07%84%90%18%21%7B%AD%E0%E1%80%8A%008%80%C7%2B%B2%90X%60%21%1E%D0%28P%12%B2%E4%A8%23%2C%97%E0%E0%E3%40H%08I%A2%28Q%14v%24%00H%E8%B8%0A%1A%07%3CIP%12%2F%3AbeAQn%A8%E5%96%03%25%C1%E1%97%60%02%20f~%8D%94%F9%A3%84i%AA%29%A6%81m%96%89%84~q%82%99Dt%D21%A2%A6%99%AE%BC%A7%A7%9B%7D%0A%F7%A7%9C%EF%B5%B2%C8%9EH%087%DD%A1n%8E%C7%0A%A3e%26%E1%A8%22%88%B2b%E9%2A%89T%BA%CA%A6%99%AA%89%04u%AB%A8%D2%A9%9C%A1%AA%A2%0A%22%88%86%9AJ%2A%A8z%AA%CA%AA%FE%A8%B4%2A%27%AC%A8%1C%B2%E7%11%A9%A0%82%CA%29%86%DC%AA%EB%29%A6%F4%AA%E6%11%BB%9AbJ%21%7B%1A%01%AC%29%A5%20%AB%A6%11%C6%96B%0A%21%7B%16%C1%2C%29%A4%0CR%AD%B4%A4%8C%22%C8%B6%DD%8A%F2%AD%9AD%84%1BJ%20%7B%0E1%CA%28%A1%9C%BB%A7%10%A2%88%12%0A%28%80%EC%19D%BB%A0%7C%F2%87%BD%F9~%E2%89%1F%7B%02%91%AF%27%9D%00%AC%26%10%FEz%C2%09%1F%01%7BB%F0%26%0C%AB%F9C%27%9Dp%B2%C9%1E%7B%F6%C0%89%C5%9A%E8%91%F1%26%9Bh%82I%1E%1Fk%92%C9%25x%EC%C9%83%C9%97Xr%C7%9E%3B%9ClI%25%920%B2H%22%88%1CbH%21%84%08%12%C8%1F~%F0%B1%87%1Ex%D8Q%C7%1Cr%C0%E1F%1Bk%A8%91%86%19d%8C%11%06%18%5El%A1%05%16VP%21%05%14N0%B1D%12G%14%21D%10%3F%F0%A0%03%0E7%D40C%0C0%BC%D0%C2%0A%29%9C%60B%09%24%8C%10%02%08%1Et%C0%81%FE%06%19%60%60A%05%15L%00A%03%0A%24p%80%01%83%B55%D2%0E-WB%C9%24%92%40%F2H%236%E3%7C%08%CF%3E%03%DD%C7%1Ey%DCQ%07%1DI%C3%D1%06%1BN%9F%11u%18%5ET%9D%C5%15UL%21%C5%13M%2C%A1%04%12E%0C%11%84%0Ff%A3M%C3%DA%2F%B8%C0%02%DC%28%CCM%82%08%20%7C%90%F7%06%7C%FB%1Dx%04%0F4%B0%80%E1%82%B5%E5%E4G%3A%CC%FCx%24%91%3C%E2%88%CD%8A%E4%8C%F9%CFAs%EE9%E8q%BC1%BA%D3f%94%21%F5%17%5Dh%B1z%EB%AF%7B%3D%BB%11%B6%E3%AEC%0Ei%F3%EE%BB%0A%29%04_%C2%08%22%08%C1%07%F4%B6%B7%BE%5D%A0%02%14%98%80%04%20%E0%00%06%28%00%01%06%88%9E%5BB%A2%03%C7ANr%8Eh%C4%CD%BC%D73%F0%09%ADs%9F%93C%1CDG%3A4%40m%7D%ED%C3%9A%15%A6%10%85%27x%0DlF%18%9B%FD%F0%A76%B6%ED%2Fns%03%A0%00%F3%C6%01%E4a%E0%02%B5%7FK%E0%02%1F%C0%80%E7A0q%13%FCH%0E%28%21%89HH%AE%11%1A%B4%DC%F7%80%264%3D%8CO%84%24%5C%C3%D3N%E7%85%14Z%A1u-%8C%1D%D8jw%3B%B3%D1pm0%B8%A1%DC%FEG%3C%E3%E9%0Dy%7D%0B%E2%04%26%10%01%066%80%01%09%40%C0%E1%06%E3%96%B7p%84%00%0C%08d%20%17%40%C8B%2A%E0%90%88L%80%22%15%89%80F%3A%F2%00%90%8C%A4%01%26I%C9%08%16%E0%92%98%24%80%267%998%B6%0C%C0%92%98%14%0C%27%3B%E9I%B6%8C%E5%94%7D%2C%CB%F4%F6%C4%CAV%BA%F2%95%B0%8C%A5%2CgI%CBZ%DA%F2%96%B8%CC%A5.w%C9%CB%5E%FA%F2%97%C0%E4I%40%00%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%95g%80%00UO%0E%18%20%00kV%91%01%10%280%40%80%EB%D5%AF%1F%1Dt%B8%E0%20A%01%B3%5E%D1j%BC%10%E4%07%8B%0E%12%16%1C%20%20%40%80%5C%8D%14%BA%C8%F9%B2%C4%06%09%0C%0F%DC%FA%FD%7B%D1A%99I%8A%F6%A4%B1%12%C4%C5%07%0A%08%E22%9EX%00%0B%A7P%9A%20%0D%A2%13%86%09%0E%0F%066W%0C%D0%A4%93%AAS%A3%3AUR%C4gM%93%0A%AA%2B%C6%90%D4%8A%D5%2AT%A5%40G%F2%E3c%40%EE%89%1B%02%B5Z%EE%3B%95%A9Q%9B%C8%2C8.qA%1BU%CB%7B77%D5g%03%F5%88%04%B6%FE%90%CA%CE%7C%95%2AH3%BEGD%D2%C9%15y%ED%9A%8E%A8%87x%82%91%2B%F7%E4Y%91%2A%93z~C%0C%7C%B4%82_v%AC%A4%A2%C7%04%FE5%94%C0%19%A8%BC%C7%CA%83%88%84%90%20C%02X1%CA%80%CC%B1BI%0E%132%F4C%26%18j%07J%16%8Bu%88%10%09%86%DC%97%1F%2B%A7%C01%9D%89%08Ip%87%80%2B%AE%F2%C7%050%22d%80%18%A7%84%F8%20%23%2B%E4xP%00N%7C%F2%9Ev%9B0%21%E4A3L%A2%22%81%FA%81A%C0%92%05q%A0%1C%86%0F%A6R%87%03T%12%E4%80%1D%AB%F8%B8%8A%20%1DtY%D0%11%3Ejh%83%99%06%19q%A4%27Nh%C6%A6%40Edh%0A%19%FD%CDY%90%9B%0F%B2%B2%88%9E%08%15%D1%E7%2A%8A%00z%90%11%AB%24%BAJ%22%86%B6i%9E%2A%AA0%DA%28AE%3C%9A%0A%22%93R%AAJ%2A%A9%A0%82i%A6tr%8A%8A%A7%A0%D29%2A%2A%A7%18R%2A%00E%A0z%8A%29%FE%AA%96J%C4%AB%A6%94R%C8%AAD%D4ZJ%29%84%AC%3A%C4%AE%A4%902%08%AE%A5%902%CA%28%82%F8j%AC%28%A2%24%5B%AA%10%A3%88%12J%28%81%AC%2A%84%B4%A1%80%02%C8%AAAd%0B%CA%27%7Fp%FB%C9%B8%9E%F8%21%AE%27%9Et%D2%C7%AA%40%A4%DB%09%27%7C%B0%FB%EE%26%9B%EC%B1%EA%0F%9Cl%A2%89%26z%AC%EA%83%BE%99%60%92%C7%AA%3D%04%7C%89%25w%10%7C%B0%25%95%D8%B1%2A%0F%0CSBI%1D%AB%EEP%09%25%93HB%C7%AA%3AL%92q%24s%AC%9A%83%24%91%40%F2%88%1C%AB%E2%10%C9%23%8F8%02%C7%AA7%B4%DC%08%23n%ACjC%233%2F%D2%C6%AA50%B2%88%22%89%AC%B1%2A%0D%40%23r%88%1A%AB%CE%60%F4%21%85%A4%B1%AA%0CL%13B%88%19%AB%C6P%08%21%82%08R%C6%AA0%0C%22H%20%80%90%B1%EA%0B%60%FF%E1%87%18%AB%BA%60%B6%1F%7C%80%B1j%0Bl%EF%A1%87%17%AB%B2%B0%C7%1Ey%E0%D1%C5%FE%AA%2A%E4%91%C7%1Dv%CC%D1F%1Bl%AC%91%06%1Af%94A%06%19c%84%01%86%17%5El%A1E%16X%5Ca%05%15RD%01%85%13M0%B1%84%12H%1CQ%C4%10A%00%F1%83%0F%3C%EC%90%03%0E6%D4%40%C3%0C1%C0%00%83%0B-%B0%B0%82%0A%28%A0p%82%09%24%8C0%82%08%20%7C%E0%01%07%1A%60P%81%04%0F%2C%80%C0%5E%5D%C9y%92%0A%80%D7A%C7%1Cr%C4%01%C7%1Bm%ACa8%E2f0%EE%B8%17%5Dp%219%16VT%81%B9%14P%3C%D1%C4%12K%24%81D%11D%90%0E%04%EA%3B%E8%80%C3%0D6%BC.%03%0C%2F%D0n%7B%0A%29%D0%9D%09J%F0%BB%10%80%C0%03%1D%D8%80%06.%40%81%084%40yo%B9%CAYR%92%02%E9Q%CFzopC%F6%D4%90%863t%8F%0Cbx%5C%F8%B4%A0%85%CA%5DN%0A%E8S%9F%E7%92p%04%23%10A%08B%A8%0B%0Fx%60%3F%FC%D5%60%062%88%DD%0Bjw%BB%00%EE%AE%04%F1%BD%03%9E%F0%3A%C0%81%0Dd%80%81%11p%80%F2%C82%80%09%A6%04%05t%A8%DE%F5%06%B7%06%0E%22nqb%08%C3%17%C0GB%13Va%0A%29%EC%DC%E7%90%60%84%D1%09%C1t%A8%D3%C1%EAn%E0%3A%1C%F2%CF%05%B6S%81%0F%07%18D%03%0E%B1%88%19%C0%00%12%1F%C0%00%04%18%E0-%5DY%C9%09%E4p%3D%0Dj%EFp%89%03%E1%F7%BA%20%B9%2CX%EE%8B%99%7B%82%13%3C%07%3A%D1%0D%21%86%F3%EBA%FDX%D7%3A%1C%C6%A0%7F-X%C1%0A%E6%08%C4%DF%89%20%04C%24%A2%02%8Fh%01%0A%20%8F%01%098%00%20%9DW%12%01%20%E0%96%B8%5C%DE%01v%C9%CB%03%18%E0%97%C0%FCe%01%86I%CCb%12%E0%98%C8L%E6V%96%C9Lf%F6%A5%2F%C9Tf3%B9%D2%17%09%D2rU%D8%CC%A66%B7%C9%CDnz%F3%9B%E0%0C%A78%C7I%CEr%9A%F3%9C%E8L%A7%3A%D7%C9%CE%A1%04%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5Dj1%80S%A6%2F%05%14%280%20%00T%96%02%1CDP%40%D5%EAU%94%02%3C%B8%F8%40%81%C1%01%02%02%9E~%25Y%E2%0A%14%1C%24.8%40%405%EDZ%91%27%E4%F8Yc%C5G%0A%0D%10%12%14%10p7%24%869%9A%22%09%82%B3%85%88%0B%0F%12%0Ex-%DCq%81%1AR%A4%3AQ2D%07%8C%92%19%18%08P%F6X%E0%0B%A9U%A8Hy%AA%94%28O%99%1E%0CF%7B%FC%A1%A9%15%2B%D4%A5%40%5Db%04%C7%84%EC%8E1%22%B5%B2%7D%3BU%A9P%93%A2%88%FE%ADqC%A0%E1%C3o%ABB5%AAMl%E6%19%21%C4Q%05%9D%D5%EDU%A9%02%FEu%C0%9E%B1%80%96Q%D1%BD%7F%8FT%83%3C%C6%00M%3A%A9%9F%BFJ%13%12%F7%18a%40R%BF%AA%7F%FFQd%18%80%9FE%1A%FC%E1%DF%81%A8%D1%E1%C0%80%15-%B0%06%2A%07%AA%22a%2A%82x%C0%20E%04d%11%8A%7F%12N%08%C9%0C%17RTD%26%1DN%98J%2A%98%18%11%E2D%26%20R%E2%89%27%862%86%80%2BBtA%1E%A8%A8%92%8A%89%A8%98r%87%045B%94%00%19%A4%C0%08%23%2A%A8%14%F2A%90%0F%09%20%C5%27G%22%89d%2470%F9%10%0F%93H%29%E5%29%A7pb%05aV24B%20Hri%E6%29%A2%B0%A1%40%98%0CE0%87%29eri%8A%29%A5%ECQ%01%9B%0B%15%E0E%28g%CE9%E7%21%28%E0%A9P%00Jd%22%A7%9FtR%92%84%A0%0A%C1%D0%08%A2t%96RJ%27Z%0C%C0%28B%1A%EC%E1%A7%A4%9C%8A%02G%03%97%1E%D4%00%1C%A4pZ%0Af%A4%8C%B2%C7%06%A1%22%14%84%A9%FE%98%8D2%0A%232%B4%9A%10%10%A8%A6%3A%0A%25HLf%ABA%3F%C8%2Ak%27%5E%D0%F8%2BB%3F%88%12J%28%A2%08r%ECB%3F%84%02%CA%B4%80%3C%AB%D0%0F%D3~%F2%C9%1F%D6%26%E4%83%B6%9Ex%E2G%B7%08%F9%10n%27%9D%8CK%AEA%3Dp%E2%EE%26%7C%ACk%10%0F%9B%D4%AB%C9%1E%F2%16%C4%83%26%9Ad%92%89%1E%F9%12%B4C%26%98%5Cr%09%1E%01%0F%A4%C3%25%96XR%C9%1D%09%0B%A4C%25%95PBI%1D%11%03%90%03%25%93L%22%09%1D%19%E3%20%89%24%91D2G%C67D%02%C9%23%8F%C8%91%B1%0D%8F8%E2H%23pd%5CC%23%8D0%B2%88%1B%19%D3%B0%C8%22%8A%24%D2F%CF%89%24%82%08%22kd%3C%C3%21L%1B%92F%C62%14R%08%21%84%A0%91q%0C%83%0C%22%88%20fd%0CC%20%81%00%F2%07%19%19%BF%F0%C7%1F~%F8%21F%C6.%F8%C1%07%1F%7B%80%91q%0B%7B%E8%A1G%1E%5Ed%BCB%FE%1Ex%DCq%07%17%19%AB%60G%1D%84k%91q%0At%D01%87%1CXd%8C%82%1Cr%C4%01%87%15%19%9F%00%C7%1Bo%B8QE%C6%25%B4%D1%06%1BlH%911%09k%AC%A1F%1AQd%3CB%1Ai%9Ca%86%13%19%8B%60F%19d%90%B1D%C6%21%901%86%18a%2C%1A1%08a%80%F1%85%17Gd%FC%81%17%5Et%C1E%11%19%7B%C0%C5%16Zh%21D%C6%1Cd%81%C5%15W%FC%40%BD%15VTAE%0F%19k0%85%14%E4%EF%90q%06Q%40%F1%C4%139d%8C%81%13M4%C1%C4%12F%14Q%C4%10C%08%11D%10%3F%F4%EFC%0F%3C%E0%C1%0Ev%A0%83%1C%E4%00%077%B0A%0Dh%C0%C0%19%C8%20%06%10%84%C1%0B%5E%E0%02%17%B4%80%05%2CX%81%0AT%90%02%14x%F0%04%26%08a%09H0%82%12%8A%20%04%1F%E8%00%070P%81%084%00%01%06%40%8BZb%82%81%25%D8P%09I%40%C2%11%EAW%04%22%E4O%7F%FE%40%F8%C1%FF%00%28%40%02%1E%F0%06%09%B4A%03g%E0%40%09R%D0%82%17%5C%81%069%D8A%14%9C%E0%8A%22%24%E1%09A%E0%01%0Eh%C0%02%13p%80%02b%98%16_%BD%E4%02I%C8%E1%0E%7B%F8%C3%20%00%21%88%3F%00%E0%00uP%40%1C%20P%81%0Bd%A2%0C%1E%18%03%09B%11%83R%A4%A2%15%B1h%82%12%8C%90%84%238a%08%40%90B%0Ed%C0%02%12%10%E3Y%CA8%13%0B%F0%D0%87%40%F4%DF%FF%04X%40%03%DE%11%8F5p%60%04%9DH%C1%28n0%05%A8%FC%60%21%0F%89%C8D%86%60%91%1F%F0%80%07T%B8%81GFR%01t%29%A3%19%5BR%816%BEq%88%014b%0E%90%98%C0%1A%2C%90%06%7B%7C%A0%13%2B%D8%82%28j0%95W%04%A1%21%5B%29%02E%C22%96%B3%E4%00%076%A0%01%16Fr%010%AC%CA%0C_%12%00%02%98%F3%9C%E8L%27%01%06%C0%CEv%BA%F3%9D%F0%7C%A7%00%E6I%CFz%DA%93%9E%E8%27t%E7%3C%9D%B2%CB%8C%F9%F3%9F%00%0D%A8%40%07J%D0%82%1A%F4%A0%08M%A8B%17%CA%D0%86%3A%F4%A1%10%8D%A8D%A1%12%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05%28%29%94%85%01R%99A%24u%8A%24h%8D%0B%01O%5B%9EH%94%8A%D4TAo%B2%E8%80%905e%06%3E%ACX%A1%1A%C5%89%EA%1B-AVP%18P%96%24%038%AB%5C%B5Z%B5v%13%A4%40o%E3j%80P%A0.H%02%5EJ%B9Z%BC%B7o%A2%3Fn%B2%C4%DD%00%21A%81%00%869%FE%D0%B4Xo%2BV%AANy%22%B3%C0%82%15%C9%2B%28%5B%1E%809%F3%C5%17%90Z%B5%F2%2C%5B%AD%1D%0A%04%3D%E8P%A1%BA%C0%00%01%AD%5DK%D4%C0G%B6q%E3%AB%06%7D8H%00C%EF%DF%C1%85%3B%5C%B0%26%D5%F1%E3%8CV%2C%2C%C0%605p%E9%0E%0B%FE%7C%21%95%B6%7CyH2%1E%12%F0%1D%20%3Ax%84%3E0%ADZ%C5j%3E%7DV%9B%98%B8o%18%E0%FB%7B%8408b%DF%80%AB%8CB%86%01%16%ED%F7%9F%06~%A8%E2%E0%83%0E%A2B%87%03%FFu%F4%C0%1B%A6%A4%A2%E1%86%1A%06%E2A%85%1C%11p%05%28%1A%A2%82%0A%87%8F%D0%00%E2F%01%2C%91%89%89%26%9E%02%E3%25F%AC%B8%91%0B%8C%9C%A2%E3%8E%3A%82%22%06%826b%94%C1%1E%A5%98b%E4%91%A6%90%22%07%85A%5E%A4%80%19%A2%94%22%E5%94R%FA%C1A%93%17%0D%40%C5%26%A4t%E9e%97%8C%C4%80%E5E%40H2%CA%99h%8EB%CA%24B%8Ci%D1%08%81%88%22%E7%9Crn%E2%05%90nJT%81%1C%A0%84%E2%E7%9F%A1%7C%22G%04yN%84%40%17%9B%80%A2%E8%A2%8A%FA%D1A%A1%12%09%B0%04%25%9FTji%A5%89%CC%00%A9D5%24%D2%C9%A7%9E%84%1A%AA%24P%60%B5%E9C%1F%D8%C1%C9%AA%AC%AE%8A%09%19%FE%09%9C%FA%D0%03hd%B2%C9%AD%B8n%A2%89%1C%13%C8%1A%DE%14%94h%22l%26%C4%0A%CB%07%09%BE%F2%07%C4%22%97%5C%82%89%B3%CF%5E%82%08%10%C96%94%82%1F%96d%ABm%B6%8EDAW%B5%0AY%C0%06%25%95%94K%C9%B9%94LB%1A%B8%0A-%00F%24%93%C4%2B%EF%24%92%B4q%01%BB%0B%D5%10%C9%BE%91H%C2%2F%1F%2A%E0%CB%10%0D%8F%14l%B0%20%3C%28%28pA34%E2%C8%C3%89%3CQ%D8%C2%0C%C9%C0%C8%C5%8C%C0A%B1C1%28%E2%B1%22ml%DCP%0C%88%94%8C%08%1B%223%04%83%21%85%18b%88%1A%29%2F%F4%02%214%13%82F%CC%0A%B9%20%C8%CE%82%98%81sB-%00%22%F4%1Fd%FC%8C%10%0B~%24%ED%C7%18F%1F%B4%02%1F%7BD%1DF%D3%06%A9%90%C7%D5yxAuA%29%D8%E1%F5%1D%5DlM%10%0At%94M%87%16b%0Ft%82%1Cl%CB%81E%DA%02%99%00%C7%DCpX%017%00%25%B4%A1w%FE%1BU%DCM%C2%1A%80%AF%21%C5%DD%23%A4ax%1AQ%DC-%82%19e%98a%86%13w%870%C6%18b%88%B1%C4%DD%20%80%A1%F9%17I%DC%FD%81%17%5Et%D1%C5%11w%7B%B0%85%16%A8%13qw%07X%5C%81%05%16m%C2%BD%81%15UTa%C5%0Fwk%20%C5%EER%F4pw%06P%04%0F%85%0Ewc%D0D%13L4%81C%F1K%28%A1%C4%125%DC%7D%C1%11%D4%1F%A1%29%DC%16%10%A1%3D%11b%C2MA%10%E0%07%F1%C2%DD%13%FC%E0%C3%F9-%DC-%01%0F%3B%B4%AF%1D%DC%12%E4%80C%0E9%A4pw%046%E4o%C3%09wC0%C3%FF30%C1%DD%1E%10%83%02%C6%60%04ws%80%0B%5C%F0%02%17%84%E0n%0D%60%81%04Y%00%02%08%AA%E0%82%29%F8%10%DC%18%80%82%0E%9E%E0Q%1B%2C%81%09LP%82%0D%DCm%01%24%18%81%0AE%C0B%16%86%E0%85%2F%14A%0C%5B%28%C3%19%CE%D0%854%8C%21%0CuH%C3%1A%86%00%04%F5%1F%E8%00%070P%81%084%20%01%07%20%00p%14%16%13%05%C8%B0%87-%84%A1%0BC%20%82%11D%91%8AP%CC%21%14m%B8%C5%17%02%D1%03%1C%C8%80%05%24pD%03%10%805L%84%89%02%40%C0%C6%1F%FE%90%8D%40%04%E2%07%E0%E8E8%CE%11%8Ex%CC%23%08%DE%18G6%DE%B1%8F%1F%08%E4%07%3C%D0%81%0D%10%D1%88%080%E3%12s%92%80Az%C0%91%81%F4%80%24%1F9IAF%B2%92%8E%AC%24%26%059IIv%A0%93%93%EC%80%289%B0%01%0D%5C%60%02%10%60%00%02%7C%B3H%9C%24%60%94B%14%A5%2Cg%09KZ%8A%92%90%1C%C8%E5%2C9%60KX%E6%92%97%B5%24%25%295%20F%09%3C%60%01%ABD%A3N%FA%23%80f%3A%F3%99%D0%8C%A64%A7I%CDj%3E%F37KL%E3%DD%B6%C9%CDnz%F3%9B%E0%0C%A78%C7I%CEr%9A%F3%9C%E8L%A7%3A%D7%C9%CEv%BA%F3%9D%C2%09%08%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05X%19%E5%07%03R%99E8%C1%9A%CA%AAM%82%A7-O0z%C5%F5%D5TX%A4%AC%04%C0%8A2%03%9FV%AE%5Cu%5D%FBJ%D2%0A%B2%24%19%BCI%856%AD%5D%B5k%5B%E1y%00%F7%23%01.%A3Z%09%1E%9C%D6%14%AB%BBi%5B%8D%922%B6%AFF%1F%97XIf5%B8U%2A9%0FF8r%85v%F0%AAT%89H8%BE%E8%A2%D1%AAU%93%27%AB%DAc%81%A0%13R%83Y%A9%3A5JS%18%04%A3%25f%C8%93J%95%AA%D3%C0U%11%02q%F0%81%1D%D4%9FK%85%CA%E4%A8%0E%8B%DC%0E%17%A4%29%95%AA%BA%EF%EB%8CT%2Cl1i6%29O%95%14%FE%E99%F3%E3%2At%84%04%B6%7CB%C5%BE%BA%7BG1%1C%0E%E8%02J%14%27I%85%E8%84YBCB%E3%F3%03%ED%40%89%29%A7%14%C8%DE%29%A8%60%B2%C4%7F%0EQ%60G%26%8F%04%F2%86%16E%C0%F0%01%04%03%00%08%40%0B%89%94%E2%A1%29%04%16%F8%89%18%06T%E4%C2%1E%7C%A4A%85%0F%2Ah%00A%02%04%40%87A%1E%A3%90B%8A%87%1F%92%22%87%03%18%0D%B0C%18O%E0P%C2%05%0E%20P%C0%00%0C%3E%E5%40%1A%9F%8C%E2d%8D6%92%E2G%07%1C5%40%C3%0C%22T%C0%C0%01%04%08%10%40%92E%11%20%C5%25%A1%84%22%CA%99%A28%B9%88%0C%209%90%81%04%0B%180%80%97O%05%40%04%24%9F%7C%02%CA%9Ee%86%12%89%10%23%05%90%40%02G%D2y%94%0A%83x%A2%A8%27y%E6%89I%17%25%96%14%C0%9C_%1Ae%81%1C%9Bp%A2i%27%9Cz%B2%C9%1A%0D%A8T%29Q%09ta%89%26%9Al%A2j%A6%9C%D8%A1%81%86%FE%1D%0D%B0%84%23%97%60%92%C9%AD%99%A0%3AH%0B%B0v%84%03%21%95Tb%C9%B0%97%D4%8A%08%0F%BDr%D4%C1%1C%92L2%09%25%D0%0A%FB%88%15%05%24%AB%91%04d%3C%12%C9%B6%92t%3B%89%24g%F0e-F%07%3C%81%88%23%8E%3C%A2.%24%90D%22%C7%AB%E3%5E%14%40%0F%81%2C%C2%08%23%8D%E4%8B%EE%1Eo%C5%7B%91%0Au%20%82H%22%8A%2Cb0%23%82%10%01%A6%BF%10a0F%21%86%18r%C8%21%02%27R%88%15%B81L%D1%02T%04%22%C8%20%84%10R%08%C4%86%84%01%81%C6%14%0D%00D%1E%7F%00%12%88%C7%82%7C%9C%06%95%28K%14%C0%0Bp%F0%D1%87%1F%3C%FF%D1%B2%1Cl%D6%2CQ%07c%E4%91%87%1E%7B%A0%C8%07%1Fv%FC%20%80%D0%11%3D%20E%1Du%D8q%C7%1Dx%18%8D%C7%13%19C%ED%D0%01F%C0%21%C7%1Ct%D0A%B5%1DuX%11%81%D7%11%91%F0%06%1Cp%C71%F6%1Ca%7C%C0%B6D%22%B0%D1%86%FE%1Bo%BC%5DF%BFwG%24B%1Ak%AC%C1F%1A8d%18%B8D%21%9C%81F%1AjH%B18E%20%94a%86%19g%401%F9D%1F%8CA%C6%E7Ml.%91%07%60%84%11%86%18K%88%1EQ%07%5E%B4%FEE%12%AAC%C4%C1%16%5Cp%D1%85%11%B1%3F%B4%01%16Yh%A1%05%11%B9%3B%B4A%15VXq%05%A0%C13%94%81%14SPQ%C5%0F%C93%84%01%14QH%21E%0F%D1%2F%84A%13N%3C%01%C5%0E%D9%2Bt%C1%12%E47%91C%F8%09Y%80%04%12I%2Ca%03%FA%08UP%84%11F%1CA%03%FC%07Q%20%C4%10C%10%114%FE%04%A1%C0%0F%80%10%84%20%C0%00%80%05%99%00%0Fz%E0%03%1F%F0%0A%81%03%91%80%0Et%B0%03%1E%3C%07%82%02%89%C0%0Dp%90%03%1Dh%07%83%00%80%00%0Dj%60%83%1B%A0%00%84%00x%80%0Cf0B%13%A0%F0%010%80A%0Cd%20%1A%10%3A%A0%05.p%01%0CF%80%C2%06%AC%80%05%FE%2ChA%08z%98%02%15%A8%60%05%C4%01%21%03N%80%02%14%A4%C0%03%28%5C%00%09L%60%82%13p%20%8A%23%20A%09J%B0%01%14%2A%40%04%22%18%C1%082%E0E%10%84%E0%8Cd%04a%02%3C%F0%816%5E%00%85%09%E8%40%07%3C%E0%81%D6%80%10%01%1B%E0%80%1E%2B%80B%04h%E0%8F%1B%98%00%0A%0F%80%01%0Cd%20%03%82%04%E1%01%2Cp%81%0B%60%40%02%83%AC%40%05%18%B96%10%1A%80%02%98%AC%80%B80h%80%09L%80%02%13%E0%11%08%0B%10%01%09x2T%A3%84%40%04V%89J%0C%16%E0%01%0F%80%00%04%18%80%C2%028%00%96%B8%C4%A5%2Ce%B9%CAR%9A%D2%93%99%94%A4%24-%40LF%16%B2%90%87%CC%00%207%90G%3Dr%40%8E%1C%D8%40%06.P%81%084%20%01%07%28%D4%C2pB%00%07x%D3%9B%B9%DC%A5%2A%7B%29%81r~2%98%C3ld%23%91y%C8e6S%8E%F0%EC%80%1E5p%01%0A%CC%12%01%06%B1%E8%D2%A8zB%00%064%E0%9F%0D%F8f.c%B9Kr%9A%F3%93%C0%1Cf1%D7%89%CC%3Fj%80%99%10%8D%E6%064%80%81%0AH%C0%01%0A%C8%26%A5%B6y%93%01%2C%80%01%FE%04%E87Gz%CB%82%1A%B4%9C%BF%3Cg%26%17zLej%C0%A5%7F%3C%A4%05%260%CB%04%E4%13I%1C%ED%E8GA%CA%D3%90%8A%14%9C%B0%14g%2FW%89RO%26T%A1%EA%3C%A6R%2F%60%01%0AD%C0%01%0B0%D2F%83%F2%A5%AAZ%F5%AAX%CD%AAV%B7%EA%A5%00%08%A0%ABXE%A1X%C7J%D6%B2%9A%F5%AChM%ABZ%D7%CA%D6%B6%BA%F5%ADp%8D%AB%5C%E7J%D7%BA%DA%95m%01%01%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05T%01%C5%E7%02R%99C2%B5%9A%9A%8A%0D%82%A7-M%20Z%C5%8A%D5%D4%A9%A1%AA%04%C0%8A%12C%9ET%AB%D2v%F5%FA%15%D2%0A%B2%24%17%AC%29%95J%95%DD%B4%5C%BB~eu%E7%01%DC%8F%03%B0%7CB%85%2A%95%E1%BB%A4R%AD%FD%DA%AA%94%D8%BF%1BuH2u%EA%14%E1%C2%AAJ%BDq%20%82%D1Z%B6S%25%A9%80%7Cq%C5%A1R%A8MQ%B6l%0AO%05%82LD%E5%05%CD%B7%01i%89%17%E4%88%1AE%8A%14%EAR%A6J%01%FAp%D0A%1DU%8B%BF%8A%AAr%DB%A1%021%9DB%89%DA%CD%DB%F7%A1%14%0B%5BH%9A%CD%F8%91%89%E6%09%09%FET%B1%F4%09%14%28%E9%D4%11%BDp8%C0%0B%A9%BC%8CU%B5%B9%0A%9E%60%8DE%9D%3Ay%F2T%FE%BC%A4%23cAd%81%1Fj%81%D6J%27D%D4%07%00%0A%7Fh%B2%09%27%9C%E8%C7%DF%25%5D%18PQ%0E%99%7C%B6%D6%2A%86pp%5B%05m%5C%92I%26%9A8%08%A1%26j%D8v%11%01_%98%82%D7%2A%AA%A4r%0A%28a%14%00%17%03%5EDR%89%25%97%88H%A2%26ul%C0%D1%07%88%D8%15%E3%29%A5%84%B2%09%21%2C%3C5%C0%11%89H2%C9%24%94X%C2%E3%25%81%B4%00R%11%9C%C8X%8A%28%9DT%B2%88%1FS%2CPT%009%00%F2%C8%23%90D%22%25%25%95%14%B2%C3H%0B%BCA%CA%28%9Fd%02%09%21u%90%C1%84%06%01%02%25%82%1C%8C0%D2%88%23l%BA%C9%C8%146%96%04%82%20%9AL%92%08%1Fk%60Q%84%0C%1C4%DA%93%04a%1C%92%88%22%8B%18%8Ah%23%60%98%89R%00E%10%12%88%1Ca4%91%03%0A%FE%1AD%60%E1N%070%11H%21%86%1C%82%C8%A7%8B%2C%92%86%05-%29%C0%C4%19V%08%F1%02%08%144%80%40%01%81%D6%24%C0%0Ew%04%22%C8%20%84%14r%88%AEt%7C%07%D3%04%3A%D8%60%82%06%10%28%60%00%01%034%2B%93%0Am%F8%E1%C7%1F%80H%5B%ED%1D2%D0%14%C0%04%1BL%C0%C0%01%E4%0A%60%EEK%16p%91%87%1E%7B%F0%D1%C7%BA%81%EC%81%04%017%09%A0%40%02%05%0C%A0%EF%BE%2C5%C0%C4%1Cu%DC%81%C7%BF%01%F3a%05%03%3B%090%80%C3%10%ABT%40%0Ek%C4%21%07%1Du%D8aq%1E%5EP%00T%C8%A7%AE%40F%1Bn%C0%01%87%1C%27%F7%19%82%82%1Eup%05%1Ai%A8%B1%06%CD6%A71%03%CC%3CO%F4%00%11c%90a%C6%19i%A4%B1%06%1Bi%041k%D2%19%1Dp%03%17_%84%21%06%19e%98%01t%12%A6b%8D%91%00%27T%A1%C5%16%5Dx%D1%F5%D7O%B8lvF%1C%2CQ%85%15Xd%A1%05%FE%17%5ExA%C5%08sg%14A%0FPH1%05%15V%5C%81%85%16V%A8%20%40%E0%17%21%F0%C2%12L4%F1D%14%86SA%C5%0C%9AB%3E%11%01%26%10%81D%12KP%EE%04%14Q%D8P%B6%E7%14M%10%C4%10E%18q%04%12J0%E1%C3%04%ACc%24%C1%0F%40%BC%1E%BB%0F%19%E4.8%0F%3E%F0%FE%C3%07%8F%0B%8FQ%04%3A%EC%D0%83%0FZ%2A%9F%11%048%E4%D0%7C%93%D2c%04A%0D6T%3FZ%F6%17%3D0%03%0D5%DC%80%1D%F8%169%10%83%0C%E3%9F%80~%FA.%C0%10%C3%0C%DA%BE%3FQ%03-%B8%F0%02%0C%24%D8OQ%03%2B%60A%FE%00%E7%3F%890%00%05%2A%08%20%08%0Ah%C0%13%A0%20%05%2AX%20%03%21%B2%00%12%98%C0%81%1E%98%20D%140%82%12%5C%D0C%1At%8E%08F%40%82%12%08%29%84%0DQ%40%08F8%02%0D%A0%B0%21%09%F8%00%08V%18%BC%17.%24%01%1E%F8%80%0C1%60%C3%85%20%80%03%FE%1D%F0%80%07%80%D5%C3%84%20%60%03%1B%00%22%11%8Bx%10%04d%40%03H%94%1B%13%0Dr%00%0C%3CQ%03%B8%9B%22%15%2F%60%C5%0CdQ%8B%041%80%05.%C0%C5%08%80%B1%20%06%A0%40%05%2C%60%013%9Eq%20%06%98%00%05%D4%08%817%C2Q%02%12%90%A3_%EC%08%80%02D%00%8F%13p%00%1F%FB%08%81%08%18REv%24%C0%03%20PH%8E%F1%91%00%0Ex%C0%22%1D%99%C8%068%20%92%AB%3B%23%01%1A%60I%07d%12%8C%04%60%00%03%2C%A9%80A%0E%60%01%0B%18e%02L%89%CAT%AE%92%8F%03P%80%02RI%1F%3B%0E%20%01%09%40e-%DFxKY.%60%97g%BC%25.%15p%80A%0A%00%01%B8L%401%F9xLd%26%E0jo%14%C0%01%0E%80%00%04%40%F3%8C%D2%9C%A65%8Di%00m%22%60%9A%DEL%E60%5B%99%CAQF2%92%8C%8C%40%21%F3%28%C7%0A%B8s%8Dc%24%A3%05%2A0%01%084%40%99%E3%C3%12%80%BE%8A%22%00%03t%13%9C%D4%AC%A63e9Kr%8A%B2%93%E8d%24%04%F0%98G5%BA3%9E%F2%A4g%04%3Ci%CD%7C%05%00i%1D%2B%40%01%FC%F9%CF%80%3A3%99%045%28%27-%29%C9E%1A%F2%8F%13H%E9%1A%DFY%01%0A%D4%D3%01%0Cx%A6E%2F%CAO%8D%DA%D4%9F%00%15%E8%40%7D%D9%CAQr%F2%92%095%24%20%E7%D8R%97J%00%020Uf%C3%1Ev%94%00%D8T%A3%1C%ED%A8GA%8A%CA%82%A2%D2%A7%24%5Dd%21%85%9A%D2%09H%40%9D0U%805AFS%05%5D%F4%AChM%ABZ%D7%CAV%8C%0E%F2%ADp%8D%AB%5C%E7J%D7%BA%DA%F5%AEx%CD%AB%5E%F7%CA%D7%BE%FA%F5%AF%80%0D%AC%60%07%AB%BC%80%00%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05D%D1t%C7%02R%99%3E%26%99%3Auj%14%1A%04O%5B%8E%08D%AA%94%A9%A9%A7Pq%92%12%20%2BJ%0BqB%89%1A%D5%D5%EBTT%A8%18%A50KR%01%99M%A0%D4%AEm%FB5%2C%AASt%1C%D0%FD8%20%0A%25O%9F%40%E5%5D%3B%AA%D3%28%AFT%E1%A6%02Ev%F0F%1A%876q%EA%84Xq%A8Ni%1A%800%04%D9o%2AU%8E%E6Z%B6Xb%0F%A6L%9A4s%FE%E4%29%0E%05%82H8%81E%95%EA4%AA%3A%0DVK%A4%60%86R%25K%AFcs%E2t%87%C3A%07qJ%99%3E%AD%0A%D4%14%E1%0E%11Xi%24i%92%F1K%C9%FB%FE%94X%B8%C2Q%E4%DE%AAT%ADj4%1E%3B%C2%01I%0C9z%14%A9%3B%25K%97%FC%A8p8%60K%28%D3%E9%AD%82%CA%1AX%B9G%D0%0Ax%2C%C2H%23%F3%D57%89%21%3E%94%05Q%05%7B%98%C2%1Bz%AB%AC%D2%09%11%06%02%00%02%1B%86%20%92%88%82%0CB%A2%88%14%05TtC%25%17%06%98a%22%1D%08%17%C1%16%81%0CR%C8%21%22%2A%C2%C8%22%5E%2C%80%11%01%5D%8C%82%5E%80%AC%9C%B2%86%01t%25%B0%84%1E~%00%22%08%217%22%82%C8%19%17p%E4%81%21C%AA%B7%0A%2B%9C%04%F1%D4%006%C0%A1%C7%1E%7D%FC%11%C8%93%85%C0%D1%9EGDl%82%E1%96%AC%B4%92%C8%06F%A9%60F%1Dw%E0%A1%07%1F~%98IG%0C%23-%00%C7%29%E9%A9%C7J%9C%A6%7C1%80P%19d%01%87%1Ct%E0%99%C7%1E%7C%DCQ%04%01%26%89%B0%88%8B%87%1Ez%C9%0C%3F5%80%C4%1Al%B8%F1%E8%1Ct%D8q%87%13%09%A4%14%80%14%FE%A0h%09%27%2B%AB%FC%11%C1N%05%D4%40%C6%19i%90j%AA%1CrTq%2BK%0E%D0qZ%86%19%AA%92%8A%27P%E0%24%C0%09Y%84A%86%19%BC%AE%D1%86%1B%5C%C4%08S%0B%91%14%9A%CA_%A5%88%12%C8%075m%D0%04%17%5E%80%21-%B5ix%B1fL%04x%21%24%2A%A6%90%12%0A%27%960%D2%04%A609%D0%83%15Xh%81%EE%17%D2~A%C3%A26Y%B0G%29%A3%80%C2I%25%8E%10%92%07%18t%B6%84%00%0CPHA%05%C0Yl%E1%85%17%3E%B4%AAS%0D%8DlRI%23%83%DC%A1%06%17L%A4%90bJ%03%88pD%13Od%BC%F1%15Z%0C%21XO%04%3C%91H%CAih%B1%04%0F-%7C%A0%00J%18%F4%60D%12K0%E1D%14%1A%1B%E1TP%14p%11%F4%12%3B%B4%10%C2%05%10%24%20%00I%10%C8%00%84%10D%1C%C1%B4%D3H%84%20%E1P%1C%08%A1%03%0B%20p%BD%C0%01%05%7C%0D%12%02%26%E8%C0%83%FE%0Fc%97%9D%04%12%29%F0k%94%00%16%7C%60%C1%03%0A%D0%3D%80%00koD%40%074%DC%80%83%DE%7C%0B%21%04%0B%07%D0E%00%03s%17%B0x%E3%19%05%40%01%0B1%CC%40%83%0D%93%F3%D0%83%0B%0C%087%40%01%040%DEQ%03%25%B0%D0%C2%0B1%C8p%3A%0E1%DCf%A0%00%B2k%84%00%07%27%A0%A0%82%ED%B8%CB%00%C3%05%A0w%F8%A3%05%22%8CPB%F1%C7%BB%E0%02%07%08%3B%AF%91%00%11x%00B%08%D2%9BP%7C%0A%1C%20%A9%3DG%08t%E0%C1%07%20DO%82%09%1F%88%7C%3E%FA%1C%A8%FFA%08%22x%D0%FA%FC%1E%1D%B0A%FD%1E%E8%C0%03%9A%C7%BF%8C%1C%40%03%1B%D8%40%07%A6V%C0%FEe%00%81%1C%A8%40%03%3Fr%80%0B%60%E0%81%13%98%A0G%0C%60%01%0Bf%20%83%1A%E4%88%01%2A%D0%C1%0F%86P%84%14%A8%80%05%25p%C2%8D%14%80%02%29%B4%C0%B0Z%88%11%03L%60%02%29%84%00%0D3R%00%09H%00%87%FE%0F%D8%21F%0A%00%01%1FN%60gB%AC%08%11%23%E0C%24%26q%22%04x%00%04%22%10%81%E0%3C%91%22%04p%80%14%23%B0%BF%2BJ%24%8BZ%84%40%17%BD%08%11%024%C0%01Z%1C%23%19%1D%B2%B93%3E%C0Gk%84%C8%00%16pF%07%1C-%8E%0F%99%23%03%1A%D0%00%F9%E1%91%21zd%00%03%FC%F8G%85%E8q%01%0B%20d%21%DF%83HD%2Ar%91%06%19%80%02%1AY%20H%26d%00%09%98%E4%02%2Ai%C9%83%60R%01%A0%CC%5C%27%DF%83%80%04dR%94%A3%8C%24%02J%99%00T%A6%92%20%03X%E5%2A%CD%F7J%82%08%40%96%08%A0e-%05%22%80%03%F82%97%BB%B4%A5%01~%A9%CB%5D%0A%C0%00%C3%3C%401kyLd%D2-%98%03%11%40%01%0A%80%CC%97AS%9A%D4%7C%264%01%80Md%0A.%98%01%20%00%01%A8%F9%CD%5D%86s%9C%B0%DB%26%00%CE9%CEr%D6%92%9D%E2T%27%3C%B3%07Nq%8A%93%9E%E6%BF%24%C0%00%EE%29%CF%01%EC%D3%9E%E8%9C%A63%7DI%D0%03%AC%D2%94%A0D%E4%1E%D1%A8%C5%07%A0%B1%01%9CS%40%02%10%407%7D2.%00%185K%00%FC%09Pq%C2n%9A%D94%E8AM%99IM%EE%B1%8E%0DEcD%27j%00%CF%5D%94%80G%D9%A8%3F%FF%09P%90%86%D4%A0%24E%E8%24%05%29H%3E%F2q%A5%14m%E9%E70%0AS%A3%C8%94%A3%1D%0D%285%939%D2%92%26T%A1%9C%5B%80Dg%09%BB%A1%165%A63EjRm%9AL%91%96T%A7%9A%9C%AA2%ABj%D5%ABj%90%A8hM%ABY%D5%C9%D6%B6%BA%F5%ADp%8D%AB%5C%E7J%D7%BA%DA%F5%AEx%CD%AB%5E%F7%CA%D7%BE%FA%F5%AF%80%5Dd%40%00%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05%20i%D4%86%02R%996%0Aa%CA%B4%E9%12%98%03O%5Bz%98S%C9%D2%A5L%9A6q%92%B4%24%40V%94%12%C8%3C%92D%A9%2B%A6%B0%9C%3Ay%22d%E2%2CI%04U%129%82%14i%12%25%AF%60%C5z%FA%E4%A9M%03%BB%1F%05%08%09%B4%88%91%A3G%91%D8Vzd%09%AE%DCO%A0.51%8BXc%8A9%87%10%25Z%D4ho%24G%5E%18p%E0c%193%A8P%87%EAv%B6%D8%C1L%A0A%85B7v%D4%88L%04%82A%24%C5%1D%FCZT%A87%0CfK%7C%20%85%CF%1F%40%82%08%15%12%BD%28%0D%86%83%0C%D2l%BA%5C%7CT%A6%27%CA%1D%FE%1A%10B%27%0F%9F%3E%7Fn%E7n%F3a%E1%89B%C4C%89%1AE%8A%14%A2%11%E1%13%0A%A8%B1%86%8E%1D%3Cz%F0%E1%07tm%88%E0%90%00U%60%82%99%7C%F4%952%0A%1A%08%E4W%D0%07%5E%BC%11%C7%1Cu%DC%91%C7%1E~%C8%21%03g%0FM%40%C7%27%0C6h%0A%26BH%08%80%05R%A4%B1F%1Bp%C8AG%1Dx%D01%04%01%15%CD%E0%08%83%A4%94R%8A%29%A7%14%C2%81r%0B%04A%86%19h%A8%C1%86%85r%C8%B1D%02%18%11%80%05%27%F3%F5%08%E4%29%A4%A4a%80%5D%06%CC%B0%05%18b%94q%86%8Bm%BC%21%C5o%1Bq%10H%83%3F%9E%82%0A%2A%99%FC%F0%94%00%23D%91%05%17%5E%84AF%19If1%E4G%40Xb%E5%29n%A6%92%CA%21%1A%18%B5%01%12TX%81%85%16%5D%7C%A1%A7%16%24%8C%A4%C0%1A%A3%B4Yh%2A%A4x1%80P%0F%E8%D0%04%14RTq%85%16xj%11%C3%A7%25%81pH%9B%FE%A8%18%AA%CA%2A%96%CC%F0%13%02%2B%1C%A1%04%13ND1%85%A3Z%DC%B0%25J%01%3C%D1%09%A1%B1%AA2%AB%2A%7F%A0%99%D3%00%1F%F80%84%11I%2C%C1%C4%13RP%B1Cr%2C9%20G%29o%A6%A2%EC%2A%AB%88B%05N%01XP%03%0F%3F%08A%84%AEK8%01%C4%041%B1%F0H%AC%E2%CE%CA%0A%2B%8F%C86%D3%03%2C%DC%90%C3%0E%3D%001m%12%40%5C7%D3%00%5D%8C%22%2B%B9%AC%B4%A2%0A%1BX%C1t%80%080%CCP%03%0E%3A%B0%1B%C4%0F%21%08p%93%05%7C%88%0Bq%2B%28%7B%92bK%04d%A0B%0B%2F%C4%40%83%0D%03%F3%60B%01%3B%E5p%89%BE%11%A3%EC%CA%22%89%A6%14%40%04%24%A0%A0%02%0B.%C0%20C%0D7%A4%10aO%04xa%CA%2A%FB%A2%8C%F2%29b%B0Z%12%03%1F%90P%C2%09%29%AC%D0%82%0B1%A8%E0%80P%1F%20Bu%CF%3E_%22%C3%5D%18%80%00%82%08%24%98%604%0B%29%D0%5BT%FE%11%9E%EC%CBv%2B%AB%E8q%D8G%04D%C0%81%07%1F%80%10%C2%08_%9Fp%81%C8G%25%A0F%2AT%93%BBJ%2A%A8l%E2DG%028%90%81%06%1Bt%80x%08tc%80%E3Y%230%A2%8A%A1%A7%982%0A%28%9D%F0%F1%27F%09P%60%01%06%19l%C0%81%E8%20%600%2Cb%01H%D1I%29%A4%84%D2I%26%948B%88%12%A7Sd%00%04%13T%60%C1%05%B8%87%9E%81%02%12%3A%C0F%27%9A%24%8FH%20x%BC%91E%D0%11%0D%C0%40%04%12L%40%81%F4%17d%80%01%B7%2A%02P%C2%1E%89%08%A2G%1Cgp%21%C5%11%274%CF%90%00%09p%C0%03%20%20%81%F4%D9%CE%02%0E%00Q%FC%00%20%00%1F%B8%21%0D_%A8B%12x0%83%14%7C%00~%09%09%C0%01%1A%D0%00%01B%20%02%E8%A3%80%03%B4%B6%40%82%2C%60%07K%00%82%0DV0%02%0E%5C%E0%01%0C1%1F%03%3A%E8%C1%088%C0%7F%254%88%03LP%02%0F%60%40%02%FE%23%8C%E1%02fHC%07%FC.%87%19d%C0%04%1E%C0%80%23%26d%00Cd%80%14%9D%88D%85%08%C0%00TD%C8%00%14%B0%80%21B%A9%8A%1F%D9%22%17%17%F0E0vD%8C%5D%2C%A3%1972%80%04%24%C0%8Bk%3Cc%02%B8%C8%80%A7%C5Q%23m%7C%E3%02%ECxG%8C%00p%8E%7B%EC%A3F%FE%C8E%3E%0A%B2%22%02%40%00%02%14%A0%80%8A%1D%D2%22%89D%80%1B%1D%F9H%8ADR%92%94%AC%A4D.%89%80%2Cj%F2%40%078%80%22%3D%F9%C9%FF%85R%94%A4%2C%A5%15%0D%10%CAN%AAr%93XD%E5%2B%23%22%80%02%B0%F2%008%9B%E5Cj%19%CB%5C%EA%B2%21W%BC%A5%2F%7F%B9%90%00%D8%12%8B%C3%24f%06%8Fi%00%1C%2A%F3%20%C6%2C%80-%9D%F9%CC%82%04%80%00%D2%2C%005%AB9%90kfs%9B%DC%04%C05%B1%A9%CDp%22d%9C%D2%04%277%C7%89MuV%93%9D%E54%A7A%E0%E9%CEg%B2%93%00%24%C1%94%A7%40%EE%99O%7D%F2S%9F%D6%1C%00%01%06%DAOy%06%60%00%02%C5%27%40%09r%D0%84%16%D4%9C%0D%15%E8C%C3%19Q%85.t%9F%08%CD%E8E1%9AQ%C8%5D4%A2%03%F0%E8B%03%20%80%8EnT%9C%25E%A8H%01J%D2%8C%BAt%A0%03%CD%A64%B1h%80c%CA%14%9F%2A%15%40%00v%AA%C0%05%924%A5%2F%85%299e%AAM%98%22%14%9F%02H%2AO%C5%C9%D4%1C%FE4%A9.M%A8P%C9i%D4%A4ZU%A7%3B%ED%E3S%A3%9AQ%82J%15%A9%21U%AAY%B2%AA%D5%ABv%94%ABQ%D5%A9Z%B1z%D2%B6%BA%F5%ADp%8D%AB%5C%E7J%D7%BA%DA%F5%AEx%CD%AB%5E%F7%CA%D7%BE%FA%F5%AF%80%0D%AC%60%B9%19%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%03%DC%B8%A3%05%02R%99%28%DA%FC%11D%28%10%14%03O%5BZ%E0%B2%87%8F%9F%40%82%0A%1D%F2%E3%23%40V%94%0D%98%D0%B9%93%C7%2BXB%86%10%29%92%F3%E1%2CI%03%3F%DA%C8%A9%C3v%8F%1F%40T%E3%2Ab%C4%E8%CB%02%BB%1F%05%BC%20%D3%06%8E%9C%B5y%F6%F4%C9%F3g%90%D8D%8B%1A%3DB%24%C4%2Cb%8D%1C%AE%A0Q%D3%E6%CDc%3Bx%EC0I%60%01%8DXD%99%1DA%8A%A4%27%C4%E7%8B%13%96%88%21s%26%CD%1A7%8E%E7%40i%40%90%86%1F%D8%8C%1C%3D%8A4i%12%19%05%B7%25%2A%C0%B1%C5K%182f%7C%97%9E%22%E1%A0%82%2C%88%18%FEi%8E%24%89R%A5FG%A2%3B%24%B0b%0A%96%EAa%C6%98%19%5D%E5%C2B%10u%1A%C9%964%A9%D2%A5L~%80%A0%5EB%01%84%B0%C4%14U%5C%A1E%17%60%88Q%C6%14%198%24%40%12%88%2C7%09%25%96%60%A2%09%26%60%1C0%60A%13%F8%C0%C4%13R%24%A8%05%17%5EXA%82D%10%A0%C1%1C%86%FFm%C2%C9%23%3C%7C%08%40%032%1C%A1%C4%12NDA%85%15YX%E1%C2%00%15%B1%10%88y%FFi%22%A3%27%7Dh%10%DD%01%26%001D%11I%2C%D1%04%14RPA%03V%17%11%F0%04%24%19%2A%C9I%27%9Fp2%06%97Y%0D%D0%01%0E%3C%FC%20D%11HX%09%05%0E%0Cp%94%81%1D%97%88%D9%89%27%A0%84%22%89%0EO%05%40%C1%0B6%E4%C0%83%0FA%10%A1%23%0F%13%80%A4%03%23%9Bl%B2%E7%27%A0%882J%20%11%16%F5%00%0A0%CC%60%03%0E%3B%F8%20%E5%0E%F6%89%94%00%19%99p%E2%09%A5%A1X%EA%89%16%FED%06%85%C0%07%2B%B8%D0%E9%A7%3A%F4%B0%C3%07%02%98%E4%C1%1F%7B%F6i%29%29%A5D%12%C3O%04%5CpB%0A%B5%C2%20C%0D7%E0%20%02%01%29%05%A0D%25%AC%8EBl%29%A5%F0%11%C1N%01%40%10%02%09%26%A0%B0B%0B%2F%C40%03%09%1E%B2%D4%C0%1A%9F%B4%3A%0A%B7%A6%9C%E2%89%1491%C0A%08%22%90%8B%82%0A%2C%B8%60B%9D0%A5%A0%C8%B0%A5%D4%7B%0A%2A%8C%94P%13%02%17p%F0%01%BF%23%94p%82%0A%258%40%D3%00YtB%AC%C2%A8%A4b%8A%1Ah%BAD%40%04%19l%D0%81%07%20%88P1%09%13xVS%05x%24%7C%CA%C2%A9%A8%A2%0A%27A%B8%24%40%03%17%5C%80%81%06%1C%B0%CC%AF%05%B1%E6d%03%25%F5%86%9C%F3%2A%AC%24%E2d%B5%08H%40A%05Bk%A0%F2%07%16%14%E0%13%01%5C%88%E2%B4%2A%AB%40%5DJ%18I%DF%E5%40%04V%5B%20t%06%1AX%D0.P%1E%1426%D4%AC%B4r%89%FE%0C%24%0D%B0%C0%03%10%B0%7D%B5%D0%16%40W%14%11%9C%E8%8Cw%2B%8C%F3A%5Cb%070%D0%80%03%10%40%20%C1%04%15T%C0%80%CCE%25%90%06%2Ae%B3%92w%2B%AE%90bEG%01%18%B0%C0%02%92%3B%008%DB%0D%F4z%D6%08%8C%2CN%BA%2B%AFD%E2pF%04%28%B0%BA%E4%93%BB%DE%40%DAg%050%85%28%A3%BB%82%FB%2B%AC%B81%F7D%03%1C%A0%80%EF%AC%B7%DE%80%D7%03%3EPG%DE%CA%BF%F2%0A%2C%B0%80%22%C4D%02%18%80%00%02%09L%EF%3B%03%0C%94%FC%E1%0B%95%90%EE%FD%F7%B0%C4%82H%05%0F%05%40%C0%01%E7%A3%9F%BE%EF%07%E0%9C%8D%00%40%800%A0by%E0%8BE%2CTA%06%E2%1Dd%00%050%80%01%F8w%BE%F4%05p%80%08%C9%40%21%BC%07%BE%FA%C5%02%14%CF%3BH%00%0A%40%C2%09R%F0%00%B2%C3%60Bz%D0%09%FA%D5%0F%08%0C%19a%09%0Fp%00%038P%85%079%40%1BX%01%3E%404D%86%FE%12%B4%21%0E%21%22%82F%84%E2q%0B%91%21%09%A95%C4%88P%C0%21J%2C%00%13%9B%E8%11%FD%95p%8AT%E4%88%FE%08%10A%ECeQ%8B%04%E0%A2%01%B0%F8%C5%8Cl1%82d%2C%E3E%CE%28E5n%84%8Dit%23E%B6%C8%C58%CAQ%22tl%E3%1D%D7%18%C6%3A%EE%91%8Fa%D4%E3%1F%E7%D8GA%0E%12%8F%85%B4%E3%21c%D8G%02%DCp%91%8Cl%24%24%11%D9%C7GN%92%40%8D%B4%E4%25E%98%C9M%E6o%00%95%F4%24%14A%19FM%8Ar%20%01%20%A5%23O%19%C3%01%90%D2%94%ACL%E5%2BY%99DW%82%12%96%A7%94%A5-i%A9%10%5D%BA%92%97%04%B2%E5%2F%81%29Ba%E2R%94%BE%3C%A6%27%7D%99Bb%12D%96%02%18%403%9D%29%90%00%08%E0%9A%D2%A4fA%ACyM%01%08%90%9A%DC%BC%E67%9D%19Noj%F3%99%DD4%E79%AB%E9%CD%00%B8s%9D%A8t%E78%C1YMx%DA%F3%9E%F8%27%CC%A7%3E%F7%C9%CF~%FA%F3%9F%00%0D%A8%40%07J%D0%82%1A%F4%A0%08M%A8B%17%CA%D0%86%3A%F4%A1%10%8D%A8D5%12%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%03%8C%A8%D2C%01R%99%19%96p%F1%12%06%CC%0D%02O%5B%3A%E0a%25%CB%16%AAd%CC%80Y%915%25%02%18Q%A6t%FD%1A%86%CC%994k%B0X%28K%92%80%89%24N%D2%AE%05%FBv%8D%9B7I%10%D0%FD%18%60%C3%8F%24K%F2%AA%CD%C2%25%0B%98%B0p%DB%C0%91%D3FF%80%C1%1B%21%CC%10R%04Ib%BDVf%18x%D0%C4%0C%5C7p%E6%D4%B9C%26%03%E6%8B%0BV%F0%F8%C1%D9s%5E%295%12%10%2C%11f%8Dd9%AB%F3%EC%91%22%F8u%C4%02%1Fn%E8%98-%C4%08b%267%18%1C%3C%20%E4wp%3E~%EE%E00%EEP%00%86%174%94%FE%CF%1ER%24%C9%0D%07%0B1x%01~%27%0Fv%40%82%D6h%E0%9E0%80%84%14%2Fb%84%D7%D1%83v%0D%08%0E%05p%C3%1Bw%E8%81%5D%20%82%14B%88%14%06%D0W%90%02%22%AC%D0%C2%0B2%D4%A0%5C%0F6%CC%15%11%03T%B8%F7G%20%83%14rH%22~%C8%E0%20%00%07l%60%02%0A%2B%B8%00C%858%D8%C0%81%00%15%89%D0%C6%87%21%8E%B8H%23oh%88%19%01%15%8CP%C2%09%29HH%E1%0C%1F%60u%D1%00%40%F0%91%23%22%3B%3A%C2%C8%15%05%D0%25%00%04%1F%880%02%09%26%14%D9%02%0C%21%1C%C0%11%05f%88%88%88%22%8C8%02%89%24%84%CC%90%95%02%1Ax%00B%08B%9E%80%82%0A%23%2C%00%D2%0B%7B%40%D9%88%9A%92LR%89%1D%3E%0E%85%40%05%1Al%D0%C1%07tr%29B%03%23%21%60E%22%7F%AEII%25%97L%22%05%8DA%11%10%C1%05%19%24%BA%28%08%23%84%20%C1e%25e%20%07%A0%97%5E%92%89%26%FE%87%B0%F0%93%00%0BP%60%01%A8%1Ap%D0%81%07%1FL%C0%E9I%01%00%81H%A0%98%BE%BA%C9%26t%3C%B0S%00%08%400%81%AD%B8%EAZ%81%92%2B-%10%86%24%95Xb%2C%27%9ET%C2DN%A3E%20%C1%B3%15%E0j%81%980%91%F0%87%AB%9Al%D2%89%27%9F%80R%88%085%11%B0%C0%03%10D%10%C1%B3%B7VP%9CL%03H1I%BB%EF%C6%1B%CA%27d4%08%93%00%094%E0%80%03%10%E4%FB%2C%05%0B%A0Z%D3%04pl%C2m%BC%A2%8CBJ%25%3D%B8%14%C0%01%0B0%C0%80%03%F8%8A%3B%01%03%BF%E2%24%03%23%F0%82%D21%29%A5%94B%08%06%2B%11%90%C0%02%25%9F%9Cr%03%03%F8D%80%15%9A%80%12%8A%C75%9B%12%8A%17A%9B4%00%02%09%28%C0%B3%C9%0D%3C%C0%00%B5%3Fm%F0G%28%A2%D0%5C%8A%29%A7%A02%09%0C%24%09%60%40%02h%2B%205%03%0D0%A00Q%3FT%E25%D8%A8%A4%82J%1E%90%12F%C0%FE%01%07%40%1D5%CF%0B%1C%60qQ%08%90%21%CA%D7a%A7%A2%8A%2A%A0P%E1%D1%00%06%18%C07%02P%AB-8%5D%21%1CB%B7%E2%AA%AC%C2%8A%23%24h%24%40%01%05D.9%E5%09%1C%D0rY%01%40%E1I%DD%8B%7B%CEJ%2Al%A0KQ%00%03%10%40%BA%E4%7DS%DE4w%0F%C8%81J%E7%B2%B7%D2%8A%27%40L%84%3B%01%CC%93%5E%3A%DF%BF%9F%D8%82%24%AB%14%DF%8A%2B%AE%1CR%01D%020%EF%BD%F3%06%60%7D%A2%40%04%7CQ%0A%2B%AC%18%EF%CA%2B%AF%A42F%F4%08%090%40%EE%DF%93N%C0%E0%E3%13%84%C1%20%E9%AB%FF%0A%2C%9F%B0%1DBp7%3F%EF%E9%EE~%F9%5B%08%0F6%E1%BFW%FC%80%21%04%A4%1F%01%06%B0%BA%04%22%E4%00kX%C5%FA%00%D1%10%02z%AF%82%16TH%08%1A%11%8A%BC-%24%82%13%0C%A1D%B6%D7%C1%F9%E5%0E~%2A%DC%08%0Aa%18%C3%8C%CC%B0%86%1E%B9%21%0E9%A2%C3%1Dj%A4%87%A7%3E%C4%08%10%83h%91%21%12%F1v.%9C%DF%11%85%98D%10.%11%22%11T%E2%13%2B%12E%1AN1%40I%B4%E2%15%21%98%C5-%2A%AF%8B%5E%8CH%00%04%20%3F%0A%86Q%8Cd%9C%9F%13%CF8%402%CAo%8Dl4%C8%18%DD%88%BF8%D6%C7%8D%02%A8%A3%1D%DBHF%3D%EEQ%8E%01%18%A3%1F%FFH%90%CB%04r%90%84%2CH%20%13%C9%C8F%3A%F2%91%90%8C%A4%24%27I%C9JZ%F2%92%98%CC%A4%267%C9%C9Nz%F2%93%A0%0C%A5%28GI%CAR%9A%F2%94%A8L%A5%2AW%C9%CAV%BA%F2%95%B0%8C%A5%2CgI%CBZ%DA%B2%86%01%01%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%40%27%BC%10a%00%A9%CC%06%29f%D8%C8%81%E3%83%00%A7-%0F%80x%11%83%C6%0D%1D%3C%7C%E8%C8%805%25%81%0C%2A%5C%C0%90Q%E3%2B%8F%1FB%8A%DCpP%96%A4%80%09%25R%B0P%3B%A3%06%0E%1D%3D%80%0C1%A2dI%8B%02u%3F%06p%10%C2%04%0A%15-%B8J%AD%01%18%08%91%23J%98%3CY%02%221G%04%1BF%940%91bE%E4%182%3A%10H%E0%22%C8%E5%25M%A0H%A9B%24%82%E7%8B%06.%84%08%21%FA%F1%0A%17%2F%3C%20%1Eh%01H%92%25N%A2L%B1%82E%0B%8E%A6%B7%23%0E%88%E0%01D%08%11%24L%9C%80%FC%E1%C0A%02%2A%90%FEK%A1%C2%7C%8B%97%2C%27%A2%3B%0C%D0%20%03%87%EA%22D%9FH%01%02%C1%C2%07%3E%C6%5B%C9%C2%E5K%182QH%A0%9EB%0AX%90%C1%06%EF%81%80%5D%09%1E%24%B0%1E%09Q4%D7%C5%17b%94q%C6%19%3B%100%60A%05HpA%06%1A%20%08%DF%07%0DH%84%80%0E%E6%811%86%19h%A8%C1%06%19%25l%08%00%01%0EP%60%C1%87%1Ap%D0%C1%07%1E%40%10%40E%18H%F1%9F%19i%AC%D1%06%1Cr%60a%DBm%02%2C%20%C1%04%15X%80%C1%81%1Cp%20%C1U%17%09%D0%02%18D%B2%E1%06%92u%D0Q%84%86e%05%90%C0%03%11L%40A%05%17%60%10%E2%04dj%E4%80%13F%BE%11%C7%1Cu%E0%A1%C7%1B%28%60e%80%03%10D%F0%A4%8D%1FR%E0%DDG%23%8C%81%24%1Dv%E4%B1G%1F%7F%90%21%60Q%04%2C%E0%C0%03%81%0EZ%C1%04%F6%89d%C0%10p0%9A%07%1F~%00%22%C8%1FD%60%09%94%00%094%D0%C0%A5%FE%99R%40%81%02%3F%964A%17w%E8Aj%20%83%14rH%1D%24%FC%14%80%01%0B0%F0%EA%03%98%A6%C9%40%AD%27%05%20%C3%1C%90%F2%EAk%22%8A%98Q%E2N%05%28%B0%40%B1%C7%06%CA%C0%00-%25%10%85%1F%82%102%ED%22%8D%18%12DN%04%20%A0-%B7%C72%10%A7K%1D%B4A%88%21%88%24%82%EE%23%91%E0%E1AM%02%1C%80%40%02%0Ahk%AC%03%0D%0C%27%93%00D%04%82%88%22%8C8%C2%EF%24%91h%A1%B0K%01%14%80%C0%C6%04%1B%CC%C0%A16A%20%06%BA%8E%40%22%C9%24%95X%A2%88%0D%18%13%20%F0%C0%04o%BB%C0%01%CC%E2%A4B%1F%FCJBI%25%97d%A2%89%1E%16%AC%24%80%01%06%1C%20p%021%23%A0%EAN%030%C1%C8%24%94X%D2%F3%26%9CXb%C5%D2%23eL%B4%D1G%2B%80%00%B8Aa%40G%CA%98hBu%27%9F%2C%C2%02I%01%0CP%C0%DBE%BF%8C%C0%BCB%E1%A0%88%CFT%7B%F2%09%FE%28%A0%C8%C1%00Hm%13%40%C0%DB%05p%3D%B7S%07tqI%DE%7B%87%22J%26Ox%24%80%E0%82%C3m4%015%23%E5%C1%1F%9D%E8%0D%8A%E3%A3%94%82%88%08%1A%05%40y%E5p%17%909V%01%28Q%C9%E7%A2%8CBJ%29%A6%8C%82%06t%14%B5%3D%C0%E9%84%13%80%B5g%0E%B0%01J%EC%B3%9Br%0A%2A%98%F40Q%00%02%0C%E0%3C%EF%05%FC%AE%9E%0A%8C%CCN%FB%F1%A8%A4%22%08%05%10%E9%EE%FC%F3%82%83-%23A%03h%F1%C9%F5%D9%AB%A2J%29%60%88%9F%10%F3%DF%C7O%C0%00%AB%8F%2F%D0%05~%18%9F%7D%2A%AA%AC%B2%09%EE%08a%5E%F3%E2%E7%BC%FA%D9%8F%209%B0D%FAV%B1%0A%E5-D%80%03%2C%E0%01%1Br%804%98%A2%7F%7Ch%88%00%BFg%C0%09%22%04%04%89%E8%C4%B5%1E%28%80%12%96%D0%83%12%E1%9E%06M%28%80%0E%A2%F0%22%10l%E1%0B%15%C3B%17%CE0w5%BC%A1G%02%C0C%19%EA%90%23i%3Cd%9E%0D%7F%28%91%20%0E%91%88E%3C%22%12%23%A2%C4%25%3A%F1%89P%8C%A2%14%A7H%C5%2AZ%F1%8AX%CC%A2%16%B7%C8%C5.z%F1%8B%60%0C%A3%18%C7H%C62%9A%F1%8ChL%A3%1A%D7%C8%C66%BA%F1%8Dp%8C%A3%1C%E7H%C7%3A%DA%F1%8Ex%CC%A3%1E%F7%C8%C7%3E%FA%F1%8F%80%0C%A4%20%07I%C8B%1A%F2%90%88L%E4%15%03%02%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%40%3Bdy%02%01%A9%CC%05%2F%9A%8C%B9CH%CB%01%A7-%07H0%81C%EA%1DD%95%28E%09%80%15e%00%03%102p%F5%0A%16%D4%A9G%2C%CA%96%14%60%40A%DA%B5S%DB%9Ej%E5jOS%B9%1F%03%0C%20P%F7nW%2Fu%F4%B6%82%25K%95%16%B2%807%06%100%B8%B0Z%1B%2A%0EPhS%C9%EDbY%B4jaj%11%19c%80%D3%94%09%DB%CDp%A1%00A%1F%97%F62%0E%5D%8BV%1F%07%A5%2B%9E%9E%5CY%C1%82%01%07%1B%C8Y5%BBV-%5B%B6%1C%E7%9E%B8%3B5%01%01%0B%5D%5C%02m%1C9%F2K%29%96Cl.%002%C3%01dZ%FEU%B7nk%16%9D%04%DA%1B%EE%F6%FE%10%C3%A1%E3%E4%91%9BZ%92~%21%FB%89%3FD%C5%B7%1E%09D%FD%90%05%9C%01%CB~%B6%C82%C7U%FF%7D%24%82%24%04%DAR%8A%11%09%82%C4%04%2A%0DF%D2A%84%1E1%A0%07-%04%BEb%06p%18rd%82%25%0D%82%82C%88%1C%05%A0%05%2B%04%D6%82%C8%04%28n%04%81%1F%F0%C5%B7%8A%161n%24C%27%0Db%97cF%04%08H%A0%2Cr%20%F8%A3E%19%20%D2%A0%29G%1C%89%11%10%A3T%C8%81%93%16%05%18K%87g%80H%E5D%0B6%F8%89%0D%5BV4a%8B%82%E0%16%A6D%0A%CC1%0B%817%9E9%D1%09%24%12h%C9%09nF%A4%22%8B%FB%19hd%9D%0DE%40%23%81%A5%14%C1%27D3%F0H%20%23%16%0C%EAP%90%03%EE%F7J%96%8A6%B4%01%23%04%92%B2g%A4%0A%05%11%25yC%60%FA%10%02r%C8%82%5C%21%9EFD%02%25%A8%98Y%2AD%89%AE%EA%EA%ABN%B0%C6%2A%EB%AC%B4%D6j%EB%AD%B8%E6%AA%EB%AE%BC%F6%EA%EB%AF%C0%06%2B%EC%B0%C4%16k%EC%B1%C8%26%AB%EC%B2%CC6%EB%EC%B3%D0F%2B%ED%B4%D4Vk%ED%B5%D8f%AB%ED%B6%DCv%EB%ED%B7%E0%86%2B%EE%B8%E4%96k%EE%B9%E8%A6%AB%EE%BA%D9%06%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9D%CA2%00%D5%95%01%AC%5E%3D%99%B5%EB%D6%92%5D%05%0C%200%E0k%C8%B0b%09%18%40%40%C0%EC%C7%ACi%0B%20%60%20AB%01%B7%1D%03%0C%18P%E0%80%82%07%17B%B0%00%21%00%2F%C7%01%06%124%98%C0%01%C5%0D%25RB%18%DE%28%40%01%04%0C%22b%08%A9r%06%0F%9A%0A%933%06X%D0A%85%0E%26_%E2%04r4%E9J%D9%D0%17%0B%98%28rE%8D%1ED%94%3C%95%AAD%036F%0F%5B%E8%08z%A4I%14%AAV%AF%08M%F0m%F1%00%94D%96%3E%99Z%E5%2A%D6%ACTZ%98%5B%1CQhT%AAV%B0d%FE%CD%A2U%EBR%0A%ED%14%07t%29%F5J%3C%F9Z%B6d%C99%80~%E2%85A%B2%DE%C3%B7e%CB%D4%91%FA%13%F9%20J-%FB%F1%C7_%24%1C%00%18Q%01f%C4b%E0%83%AF%9C%F1%9A%82%0E%89%20%C9%83%0F~b%03%85%101%81%0A%86%FC%D5%22%88%03%1C%3A%A4%C0%1C%B3%80h%CB%2A%D9%95%D8%D0%09%96%A8h%8B%25%27%B8%C8P%00Z%B0%A2%A2%2Cs%D0g%A3B%11%F8Q%E0%83%A5%14%F1%E3B3t%22%23%23%16%1C%99%10%01g%C0%A2b%84%13%3AY%D0%06%8C%A8H%8A%8FV%1E%14%C4%28%18%0E%D1%A5B%08%C8%21%0B%7F%85%8C%C9%10%09%94%A0B%A2%9A%0C5%09%E7%9Ct%D6i%E7%9Dx%E6%A9%E7%9E%7C%F6%E9%E7%9F%80%06%2A%E8%A0%84%16j%E8%A1%88%26%AA%E8%A2%8C6%EA%E8%A3%90F%2A%E9%A4%94Vj%E9%A5%98f%AA%E9%A6%9Cv%EA%E9%A7%A0%86%2A%EA%A8%A4%96j%EA%A9%A8%A6%AA%EA%AA%AC%B6%EA%EA%AB%03%0E%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%ACY%AD%01%02%9C%B5%98%B6%AD%DA%B5%0F%DD%A6%15%40%17n%DC%B9%02%06%0C%20P%60%80%DD%86%01%F2%EA%E5%7B%00A%02%BF%7F%15%06%D8%5B%C0%00%02%05%0D%20Pp%20%20%B1%C2%01%07%120x0%01C%07%12%28%28XN%28%40%81%04%0B%1CD%A8%90%C1%E3%88%8F%07%A3%11%2A%E8p%02F%0E%22O%B2%90YC%84%40l%83%03%3E%00Yb%25%CC%9A%3A~%0C%FD%91%F1%DB%60%84%26i%E4%EC%21%C4H%12%26O%7B%264%27%28%80G%9FD%91%2C%84q%0AU%0A%15%A90%88%B7%03%90%00g%13%28R%A7T%B1r%F5%E9%80z%826%28%A5%9A%0F%2BV%90%FB%05%1D%C0%06%2B%B1%C82%08%80%07%8D%10I%29%0E%20%88%90%05%0EF%28%E1%84%14Vh%E1%85%18f%A8%E1%86%1Cv%E8%E1%87%20%86%28%E2%88%24%96h%E2%89%28%A6%A8%E2%8A%2C%B6%E8%E2%8B0%C6%28%E3%8C4%D6h%E3%8D8%E6%A8%E3%8E%3C%F6%E8%E3%8F%40%06%29%E4%90D%16i%E4%91H%26%A9%E4%92%40%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%CE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%DBk%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%CE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%DBk%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%CE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%DBk%40%00%3B\";\n","import { Css } from \"src/Css\";\n\ntype Sizes = \"sm\" | \"md\" | \"lg\";\n\nexport type LoadingSkeletonProps = {\n rows?: number;\n columns?: number;\n size?: Sizes;\n randomizeWidths?: boolean;\n contrast?: boolean;\n};\n\nexport function LoadingSkeleton({\n rows = 1,\n columns = 1,\n size = \"md\",\n randomizeWidths = false,\n contrast = false,\n}: LoadingSkeletonProps) {\n const cellArray = [...Array(columns)];\n const rowArray = [...Array(rows)];\n\n const rowHeight = sizeToPixels[size];\n\n const rowCells = (rowNumber: number) => {\n const flexGrowForCell = randomizeWidths ? getRandomizedFlexBasisByRowIndex(rowNumber) : 1;\n\n return cellArray.map((_, i) => (\n <div\n key={`row-${rowNumber}-cell-${i}`}\n css={\n Css.br4\n .add(\"animation\", \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\")\n .add(\"flexGrow\", flexGrowForCell)\n .bgGray300.if(contrast).bgGray700.$\n }\n />\n ));\n };\n\n return (\n <div aria-label=\"Loading\">\n {rowArray.map((_, i) => (\n <div key={`row-${i}`} css={Css.df.gap1.mb1.hPx(rowHeight).$}>\n {rowCells(i)}\n </div>\n ))}\n </div>\n );\n}\n\n/** Create the illusion of random widths by cycling through a list of widths that look nice in order */\nfunction getRandomizedFlexBasisByRowIndex(rowIndex: number) {\n const randomizedFlexBasisValues = [0.65, 0.8, 0.75, 0.9, 0.8, 0.85, 0.8, 0.95];\n const valueIndex = rowIndex % randomizedFlexBasisValues.length;\n return randomizedFlexBasisValues[valueIndex];\n}\n\nconst sizeToPixels: Record<Sizes, number> = {\n sm: 16,\n md: 24,\n lg: 32,\n};\n","import { useLayoutEffect, useResizeObserver } from \"@react-aria/utils\";\nimport { PropsWithChildren, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Css } from \"src\";\n\nexport type MaxLinesProps = PropsWithChildren<{\n maxLines: number;\n}>;\n\nexport function MaxLines({ maxLines, children }: MaxLinesProps) {\n const elRef = useRef<HTMLDivElement>(null);\n const [hasMore, setHasMore] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n // When first rendered it will not be expanded and we'll have the `lineClamp` styles applied.\n // Determine if we need the show more/less buttons.\n // If the content is larger, then we need to set the height of the collapsed content to return to.\n useLayoutEffect(() => {\n if (!elRef.current) return;\n // If the content overflows, then set the `hasMore` state to true.\n setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);\n }, []);\n\n // Whenever the content changes, reset state\n useEffect(() => {\n setExpanded(false);\n }, [children]);\n\n const onResize = useCallback(() => {\n // Listen for changes in the content height and determine if we still need the \"show more/less\" buttons.\n // This content can change if the user resizes the window, or if the `props.children` change.\n // The tricky part here is that setting `lineClamp` styles also triggers a resize event.\n // We'll need to be aware of when this is triggered from our own `lineClamp` styles, vs externally.\n if (!elRef.current) return;\n !expanded && setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);\n }, [expanded]);\n useResizeObserver({ ref: elRef, onResize });\n\n return (\n <div>\n <div ref={elRef} css={Css.if(!expanded).lineClamp(maxLines).$}>\n {children}\n </div>\n\n {hasMore && (\n <button css={Css.db.smMd.$} onClick={() => setExpanded((prev) => !prev)}>\n {expanded ? \"Show Less\" : \"Show More\"}\n </button>\n )}\n </div>\n );\n}\n","import { Dispatch } from \"react\";\nimport { IconButton } from \"src/components\";\nimport { Css, Palette } from \"src/Css\";\nimport { SelectField } from \"src/inputs\";\nimport { useTestIds } from \"src/utils\";\n\n/**\n * Page settings, either a pageNumber+pageSize or offset+limit.\n *\n * This component is implemented in terms of \"page number + page size\",\n * but our backend wants offset+limit, so we accept both and translate.\n */\nexport type PageSettings = PageNumberAndSize | OffsetAndLimit;\nexport type PageNumberAndSize = { pageNumber: number; pageSize: number };\nexport type OffsetAndLimit = { offset: number; limit: number };\n\n// Use OffsetAndLimit as our default b/c that's what backend filters expect\nexport const defaultPage: OffsetAndLimit = { offset: 0, limit: 100 };\n\ninterface PaginationProps {\n page: readonly [PageNumberAndSize, Dispatch<PageNumberAndSize>] | readonly [OffsetAndLimit, Dispatch<OffsetAndLimit>];\n totalCount: number;\n pageSizes?: number[];\n}\n\nexport function Pagination(props: PaginationProps) {\n const { totalCount, pageSizes = [100, 500, 1000] } = props;\n const [page, setPage] = props.page;\n const { pageSize, pageNumber } = toPageNumberSize(page);\n const pageOptions = pageSizes.map((size) => ({ id: size, name: String(size) }));\n\n const hasPrevPage = pageNumber > 1;\n const hasNextPage = pageNumber < totalCount / pageSize;\n // Create the `1 - 100 of 1000` or `0 of 0`\n const first = pageSize * (pageNumber - 1) + (totalCount ? 1 : 0);\n const last = Math.min(pageSize * pageNumber, totalCount);\n // When no rows, show '0 of 0' instead of '0 - 0 of 0'\n const showLast = totalCount > 0;\n\n // Convert the new page back to whatever format the caller wants\n function set(newPage: PageNumberAndSize): void {\n if (\"pageNumber\" in props.page[0]) {\n setPage(newPage as any);\n } else {\n setPage(toLimitAndOffset(newPage) as any);\n }\n }\n\n const tid = useTestIds(props, \"pagination\");\n return (\n <div css={Css.df.bcGray200.bt.xs.gray500.px2.pt2.$} {...tid}>\n <div css={Css.df.mya.mr2.$} {...tid.pageSizeLabel}>\n Page size:\n </div>\n <div css={Css.wPx(78).$}>\n <SelectField\n compact\n label=\"Page Size\"\n labelStyle=\"hidden\"\n options={pageOptions}\n value={pageSize}\n onSelect={(val) => set({ pageNumber: 1, pageSize: val! })}\n {...tid.pageSize}\n />\n </div>\n <div css={Css.mla.mya.df.$}>\n <div css={Css.df.mya.mr2.$} {...tid.pageInfoLabel}>\n {first} {showLast ? `- ${last}` : \"\"} of {totalCount}\n </div>\n <IconButton\n icon=\"chevronLeft\"\n color={hasPrevPage ? Palette.Blue700 : Palette.Gray200}\n onClick={() => set({ pageNumber: pageNumber - 1, pageSize })}\n disabled={!hasPrevPage}\n {...tid.previousIcon}\n />\n <IconButton\n icon=\"chevronRight\"\n color={hasNextPage ? Palette.Blue700 : Palette.Gray200}\n onClick={() => set({ pageNumber: pageNumber + 1, pageSize })}\n disabled={!hasNextPage}\n {...tid.nextIcon}\n />\n </div>\n </div>\n );\n}\n\nexport function toLimitAndOffset(page: PageSettings): OffsetAndLimit {\n return \"limit\" in page\n ? page\n : {\n // E.g. on first page the offset is 0, second page the offset is 100, then 200, etc.\n offset: (page.pageNumber - 1) * page.pageSize,\n limit: page.pageSize,\n };\n}\n\nexport function toPageNumberSize(page: PageSettings): PageNumberAndSize {\n return \"pageNumber\" in page\n ? page\n : {\n pageNumber: Math.floor(page.offset / page.limit) + 1,\n pageSize: page.limit,\n };\n}\n","import { useResizeObserver } from \"@react-aria/utils\";\nimport { ReactNode, useCallback, useMemo, useRef, useState } from \"react\";\nimport { Css, Palette, Properties, useTestIds } from \"src\";\n\ninterface ScrollShadowsProps {\n children: ReactNode;\n /** Allows for styling the container */\n xss?: Properties;\n /** Set to true if the container scrolls horizontally */\n horizontal?: boolean;\n /** Defines the background color for the shadows */\n bgColor?: Palette;\n}\nexport function ScrollShadows(props: ScrollShadowsProps) {\n const { children, xss, horizontal = false, bgColor = Palette.White } = props;\n const { height = \"auto\", width = \"auto\" } = xss ?? {};\n const tid = useTestIds(props);\n\n // This is admittedly extremely hacky. It expects the background color to be in the format \"rgba(255, 255, 255, 1)\".\n // If we ever change how we define our color palette in Beam, then this will break and will need to be fixed.\n if (!bgColor.includes(\"rgba\")) {\n throw new Error(\"ScrollShadows: bgColor prop must be in the format 'rgba(255, 255, 255, 1)'\");\n }\n\n const [showStartShadow, setShowStartShadow] = useState(false);\n const [showEndShadow, setShowEndShadow] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // The shadow styles will rarely every change. Memoize them to avoid recomputing them when we don't have to.\n const [startShadowStyles, endShadowStyles] = useMemo(() => {\n const transparentBgColor = bgColor.replace(/,1\\)$/, \",0)\");\n const commonStyles = Css.absolute.z3.add({ pointerEvents: \"none\" }).$;\n const startShadowStyles = !horizontal ? Css.top0.left0.right0.hPx(40).$ : Css.left0.top0.bottom0.wPx(25).$;\n const endShadowStyles = !horizontal ? Css.bottom0.left0.right0.hPx(40).$ : Css.right0.top0.bottom0.wPx(25).$;\n const startGradient = `linear-gradient(${!horizontal ? 180 : 90}deg, ${bgColor} 0%, ${transparentBgColor} 92%);`;\n const endGradient = `linear-gradient(${!horizontal ? 0 : 270}deg, ${bgColor} 0%, ${transparentBgColor} 92%);`;\n\n return [\n { ...commonStyles, ...startShadowStyles, ...Css.add(\"background\", startGradient).$ },\n { ...commonStyles, ...endShadowStyles, ...Css.add(\"background\", endGradient).$ },\n ];\n }, [horizontal, bgColor]);\n\n const updateScrollProps = useCallback(\n (el: HTMLDivElement) => {\n const { scrollTop, scrollHeight, clientHeight, scrollWidth, scrollLeft, clientWidth } = el;\n\n const start = horizontal ? scrollLeft : scrollTop;\n const end = horizontal ? scrollWidth : scrollHeight;\n const boxSize = horizontal ? clientWidth : clientHeight;\n setShowStartShadow(start > 0);\n setShowEndShadow(start + boxSize < end);\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Use a ResizeObserver to update the scroll props to determine if the shadows should be shown.\n // This executes on render and subsequent resizes which could be due to content/`children` changes (such as responses from APIs).\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const onResize = useCallback(() => scrollRef.current && updateScrollProps(scrollRef.current), []);\n useResizeObserver({ ref: scrollRef, onResize });\n\n return (\n <div\n css={\n Css.relative.oh\n .h(height)\n .w(width)\n .df.fd(!horizontal ? \"column\" : \"row\").$\n }\n {...tid}\n >\n {showStartShadow && <div css={startShadowStyles} />}\n {showEndShadow && <div css={endShadowStyles} />}\n <div\n css={{\n ...xss,\n ...Css.oa.fg1.addIn(\"&::-webkit-scrollbar\", { display: \"none\" }).add(\"scrollbarWidth\", \"none\").$,\n }}\n onScroll={(e) => updateScrollProps(e.currentTarget)}\n ref={scrollRef}\n >\n {children}\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect } from \"react\";\nimport { useSnackbarContext } from \"src/components/Snackbar/SnackbarContext\";\nimport { SnackbarNoticeProps } from \"src/components/Snackbar/SnackbarNotice\";\nimport { maybeCall } from \"src/utils\";\nimport { Offset } from \"./Snackbar\";\n\nexport interface UseSnackbarHook {\n triggerNotice: (props: TriggerNoticeProps) => { close: () => void };\n closeNotice: (id: string) => void;\n /**\n * A custom hook that components may call to notify snackbar it should offset,\n * such as a bottom-mounted Stepper component that ought not be covered by\n * notifications. Behaves like a useEffect, and will clean up on dismount.\n * (Known issue: If multiple components call this, last-to-render takes\n * precedence and first-to-dismount unsets everything)\n */\n useSnackbarOffset: (offset: Offset) => void;\n}\n\nexport function useSnackbar(): UseSnackbarHook {\n const { setNotices, setOffset } = useSnackbarContext();\n\n const onClose = useCallback(\n (noticeId: string) => {\n setNotices((prev) => {\n let returnValue = prev;\n\n // check to see if the notice is still in our existing stack, if so then remove it. Otherwise it was manually closed, so return the existing value.\n if (prev.some(({ id }) => id === noticeId)) {\n returnValue = prev.filter(({ id }) => id !== noticeId);\n }\n\n // For good measure, reset the snackbarId when notices array is emptied.\n if (returnValue.length === 0) {\n snackbarId = 1;\n }\n\n return returnValue;\n });\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const triggerNotice = useCallback(\n (props: TriggerNoticeProps) => {\n // Sets `noticeId` to the current value of `snackbarId` and then increments.\n const noticeId = props.id ?? `beamSnackbar:${snackbarId++}`;\n let maybeTimeout: number | undefined;\n\n if (!props.persistent) {\n maybeTimeout = window.setTimeout(() => {\n onClose(noticeId);\n // Auto close in 10s\n }, 10_000);\n }\n\n setNotices((prev) =>\n prev.concat({\n ...props,\n id: noticeId,\n onClose: () => {\n // Because we reset the `snackbarId` if the notices array is empty, then we need to call `clearTimeout` to ensure we don't accidentally close the wrong notice\n clearTimeout(maybeTimeout);\n onClose(noticeId);\n maybeCall(props.onClose);\n },\n }),\n );\n\n return {\n close: () => {\n // Because we reset the `snackbarId` if the notices array is empty, then we need to call `clearTimeout` to ensure we don't accidentally close the wrong notice\n clearTimeout(maybeTimeout);\n onClose(noticeId);\n },\n };\n },\n [onClose, setNotices],\n );\n\n const closeNotice = useCallback((id: string) => onClose(id), [onClose]);\n\n const useSnackbarOffset = ({ bottom }: Offset) =>\n useEffect(() => {\n setOffset({ bottom });\n return () => setOffset({});\n }, [bottom]);\n\n return { triggerNotice, closeNotice, useSnackbarOffset };\n}\n\nlet snackbarId = 1;\n\n// Make `id` optional. Allows for implementations to systematically close an alert by a provided id.\nexport interface TriggerNoticeProps extends Omit<SnackbarNoticeProps, \"id\" | \"onClose\"> {\n id?: string;\n onClose?: () => void;\n}\n","import { useRef } from \"react\";\nimport { useButton, useFocusRing, useHover } from \"react-aria\";\nimport { Icon } from \"src/components/Icon\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\nexport interface Step {\n label: string;\n state: \"incomplete\" | \"complete\" | \"error\";\n disabled?: boolean;\n value: string;\n}\n\nexport interface StepperProps {\n steps: Step[];\n // The 'value' of the Step that should be displayed\n currentStep: Step[\"value\"];\n onChange: (stepValue: string) => void;\n}\n\nexport function Stepper(props: StepperProps) {\n const { steps, currentStep, onChange } = props;\n if (steps.length === 0) {\n throw new Error(\"Stepper must be initialized with at least one step\");\n }\n const tid = useTestIds(props, \"stepper\");\n\n // calc progress based on last completed step - return -1 when no steps completed\n const lastCompletedStep = steps.map((step) => step.state).lastIndexOf(\"complete\");\n const maxStepWidth = 200;\n const minStepWidth = 100;\n const gap = 8;\n\n return (\n <nav aria-label=\"steps\" css={Css.df.fdc.w100.$} {...tid}>\n <ol css={Css.listReset.df.gapPx(gap).$}>\n {steps.map((step) => {\n const isCurrent = currentStep === step.value;\n return (\n <li\n css={Css.df.fg1.fdc.maxwPx(maxStepWidth).mwPx(minStepWidth).$}\n key={step.label}\n aria-current={isCurrent}\n {...tid.step}\n >\n <StepButton {...step} onClick={() => onChange(step.value)} isCurrent={isCurrent} {...tid.stepButton} />\n </li>\n );\n })}\n </ol>\n <div\n css={\n Css.mt1.bgGray300\n .hPx(4)\n .maxwPx(steps.length * maxStepWidth + (steps.length - 1) * gap)\n .mwPx(steps.length * minStepWidth + (steps.length - 1) * gap).w100.$\n }\n >\n <div\n css={\n Css.bgBlue600.add(\"transition\", \"width 200ms\").h100.w(`${((lastCompletedStep + 1) / steps.length) * 100}%`)\n .$\n }\n />\n </div>\n </nav>\n );\n}\n\ninterface StepButtonProps extends Step {\n onClick: VoidFunction;\n isCurrent: boolean;\n}\n\nfunction StepButton(props: StepButtonProps) {\n const { label, disabled, state, isCurrent, onClick } = props;\n const ariaProps = { onPress: onClick, isDisabled: disabled };\n const ref = useRef(null);\n const { buttonProps, isPressed } = useButton(ariaProps, ref);\n const { isFocusVisible, focusProps } = useFocusRing();\n const { hoverProps, isHovered } = useHover(ariaProps);\n const focusRingStyles = state === \"error\" ? Css.bshDanger.$ : Css.bshFocus.$;\n const tid = useTestIds(props, \"stepButton\");\n\n return (\n <button\n ref={ref}\n {...buttonProps}\n {...focusProps}\n {...hoverProps}\n css={{\n ...Css.buttonBase.$,\n ...Css.tal.w100.h100.sm.gray700.add(\"whiteSpace\", \"initial\").if(state === \"error\").red600.$,\n ...(isCurrent ? Css.blue700.if(state === \"error\").red800.$ : {}),\n ...(isHovered && !isPressed ? Css.blue800.if(state === \"error\").red500.$ : {}),\n ...(isPressed ? Css.blue500.if(state === \"error\").red900.$ : {}),\n ...(disabled ? Css.gray400.cursorNotAllowed.if(state === \"error\").red200.$ : {}),\n ...(isFocusVisible ? focusRingStyles : {}),\n }}\n {...tid[defaultTestId(label)]}\n >\n <span css={Css.fs0.mrPx(4).$}>\n <StepIcon state={state} isHovered={isHovered} isPressed={isPressed} isCurrent={isCurrent} />\n </span>\n {label}\n </button>\n );\n}\n\ninterface StepIconProps {\n state: StepButtonProps[\"state\"];\n isHovered?: boolean;\n isPressed?: boolean;\n isCurrent?: boolean;\n}\n\nfunction StepIcon({ state, isHovered = false, isPressed = false, isCurrent = false }: StepIconProps) {\n if (state === \"error\") {\n return <Icon icon=\"errorCircle\" />;\n }\n\n if (state === \"complete\") {\n return <Icon icon=\"check\" />;\n }\n\n // Otherwise state is \"incomplete\", return the custom circle \"icon\"\n return (\n <div css={Css.wPx(24).hPx(24).df.aic.jcc.$}>\n <div\n css={\n Css.wPx(10)\n .hPx(10)\n .ba.bw2.br100.add(\"color\", \"currentColor\")\n .if(isHovered || isPressed || isCurrent)\n .add(\"backgroundColor\", \"currentColor\").$\n }\n />\n </div>\n );\n}\n","import { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useBeamContext } from \"src/components/BeamContext\";\nimport { ButtonGroup } from \"src/components/ButtonGroup\";\nimport { OpenInDrawerOpts } from \"src/components/SuperDrawer/useSuperDrawer\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ninterface SuperDrawerHeaderProps {\n children: ReactNode;\n hideControls?: boolean;\n}\n\ninterface SuperDrawerHeaderStructuredProps {\n title: string | ReactNode;\n left?: ReactNode;\n right?: ReactNode;\n hideControls?: boolean;\n}\n\nexport function SuperDrawerHeader(props: SuperDrawerHeaderProps | SuperDrawerHeaderStructuredProps): JSX.Element {\n const { hideControls } = props;\n const { sdHeaderDiv, drawerContentStack: contentStack } = useBeamContext();\n const firstContent = contentStack.current[0]?.opts as OpenInDrawerOpts;\n const { onPrevClick, onNextClick } = firstContent ?? {};\n const currentContent = contentStack.current[contentStack.current.length - 1]?.opts;\n const isDetail = currentContent !== firstContent;\n const tid = useTestIds({}, \"superDrawerHeader\");\n\n return createPortal(\n <div css={Css.df.aic.jcsb.gap3.$} {...tid}>\n {isStructuredProps(props) ? (\n <div css={Css.df.jcsb.aic.gap2.fg1.$}>\n <div css={Css.fg1.df.aic.gap2.$}>\n {typeof props.title === \"string\" ? <h1>{props.title}</h1> : props.title}\n {props.left}\n </div>\n {props.right && <div css={Css.fs0.$}>{props.right}</div>}\n </div>\n ) : (\n <div css={Css.fg1.$}>{props.children}</div>\n )}\n {!hideControls && (\n <div css={Css.fs0.if(isDetail).vh.$}>\n <ButtonGroup\n buttons={[\n { icon: \"chevronLeft\", onClick: () => onPrevClick && onPrevClick(), disabled: !onPrevClick },\n { icon: \"chevronRight\", onClick: () => onNextClick && onNextClick(), disabled: !onNextClick },\n ]}\n {...tid.actions}\n />\n </div>\n )}\n </div>,\n sdHeaderDiv,\n );\n}\n\nfunction isStructuredProps(\n props: SuperDrawerHeaderProps | SuperDrawerHeaderStructuredProps,\n): props is SuperDrawerHeaderStructuredProps {\n return typeof props === \"object\" && \"title\" in props;\n}\n","import { Button, ModalBody, ModalFooter, ModalHeader } from \"src/components\";\nimport { useBeamContext } from \"../BeamContext\";\n\ninterface ConfirmCloseModalProps {\n onClose: () => void;\n discardText?: string;\n continueText?: string;\n}\n\n/** Modal content to appear when a close checks fails */\nexport function ConfirmCloseModal(props: ConfirmCloseModalProps) {\n const { onClose, discardText = \"Discard Changes\", continueText = \"Continue Editing\" } = props;\n const { modalState } = useBeamContext();\n\n // TODO: Change to closeModal from useModal when canCloseChecks are reset\n function closeModal() {\n // Not using closeModal from useModal since the canClose checks are not reset\n // after a close and could/will cause other close attempts to fail.\n modalState.current = undefined;\n }\n\n return (\n <>\n <ModalHeader>Are you sure you want to cancel?</ModalHeader>\n <ModalBody>\n <p>Any changes you've made so far will be lost.</p>\n </ModalBody>\n <ModalFooter>\n <Button\n variant=\"tertiary\"\n label={discardText}\n onClick={() => {\n // The order of these calls doesn't really matter; close this modal and tell the call to do their close\n onClose();\n closeModal();\n }}\n />\n <Button label={continueText} onClick={closeModal} />\n </ModalFooter>\n </>\n );\n}\n","import { motion } from \"framer-motion\";\nimport { ReactNode } from \"react\";\nimport { useBeamContext } from \"src/components/BeamContext\";\nimport { Button, ButtonProps } from \"src/components/Button\";\nimport { OpenInDrawerOpts, useSuperDrawer } from \"src/components/SuperDrawer/useSuperDrawer\";\nimport { Css } from \"src/Css\";\nimport { SuperDrawerWidth } from \"./utils\";\n\ninterface SuperDrawerContentProps {\n children: ReactNode;\n /**\n * Actions represents an array of button props with represents that different\n * actions that can be conducted in the SuperDrawer page.\n *\n * Ex: A `cancel` and `submit` button\n * */\n actions?: ButtonProps[];\n}\n\n/**\n * Helper component to place the given children and actions into the appropriate\n * DOM format to render inside the SuperDrawer.\n *\n * NOTE: This does not include the header props since the caller will be the one\n * that knows how to handle the title, prev/next link and the onClose handler.\n */\nexport const SuperDrawerContent = ({ children, actions }: SuperDrawerContentProps) => {\n const { closeDrawerDetail } = useSuperDrawer();\n const { drawerContentStack: contentStack } = useBeamContext();\n\n // Determine if the current element is a new content element or an detail element\n const { kind } = contentStack.current[contentStack.current.length - 1] ?? {};\n const firstContent = contentStack.current[0]?.opts as OpenInDrawerOpts;\n\n const { width = SuperDrawerWidth.Normal } = firstContent ?? {};\n\n function wrapWithMotionAndMaybeBack(children: ReactNode): ReactNode {\n if (kind === \"open\") {\n return (\n <motion.div key=\"content\" css={Css.p3.fg1.oa.$}>\n {children}\n </motion.div>\n );\n } else if (kind === \"detail\") {\n return (\n <motion.div\n key=\"content\"\n css={Css.px3.pt2.pb3.fg1.$}\n animate={{ overflow: \"auto\" }}\n transition={{ overflow: { delay: 0.3 } }}\n >\n <Button label=\"Back\" icon=\"chevronLeft\" variant=\"tertiary\" onClick={closeDrawerDetail} />\n <motion.div\n initial={{ x: width, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n transition={{ ease: \"linear\", duration: 0.3, opacity: { delay: 0.15 } }}\n exit={{ x: width, opacity: 0 }}\n css={Css.pt2.$}\n >\n {children}\n </motion.div>\n </motion.div>\n );\n } else {\n // Hides content changes when closing the drawer\n // TODO: Potentially use a boolean to trigger close action so content does\n // not need to disappear during exit.\n return <motion.div key=\"content\" css={Css.p3.fg1.$} style={{ overflow: \"auto\" }} />;\n }\n }\n\n return (\n <>\n {wrapWithMotionAndMaybeBack(children)}\n {/* Optionally render footer section with row of given footer buttons */}\n {actions && (\n <footer css={Css.bt.bcGray200.p3.df.aic.jcfe.$}>\n <div css={Css.df.gap1.$}>\n {actions.map((buttonProps, i) => (\n <Button key={i} {...buttonProps} />\n ))}\n </div>\n </footer>\n )}\n </>\n );\n};\n","import { ReactNode, useMemo } from \"react\";\nimport { useBeamContext } from \"src/components/BeamContext\";\nimport { CanCloseCheck } from \"src/types\";\nimport { useModal } from \"../Modal\";\nimport { ConfirmCloseModal } from \"./ConfirmCloseModal\";\nimport { SuperDrawerWidth } from \"./utils\";\n\nexport interface OpenInDrawerOpts {\n /** Invokes left, disabled if undefined. */\n onPrevClick?: () => void;\n /** Invokes right, disabled if undefined. */\n onNextClick?: () => void;\n /** Adds a callback that is called _after_ close has definitely happened. */\n onClose?: () => void;\n content: ReactNode;\n /** Adds the ability to change the SuperDrawer width based on some pre-defined values */\n width?: SuperDrawerWidth;\n}\n\nexport interface OpenDetailOpts {\n content: ReactNode;\n}\n\nexport type ContentStack = { kind: \"open\"; opts: OpenInDrawerOpts } | { kind: \"detail\"; opts: OpenDetailOpts };\n\n/** The public API for interacting with `useSuperDrawer`. */\nexport interface UseSuperDrawerHook {\n /** Opens a new drawer, throwing away the current drawer is one exists. */\n openInDrawer: (opts: OpenInDrawerOpts) => void;\n /** Closes the entire drawer, returns false is the previous drawer can't be closed. */\n closeDrawer: () => void;\n /** Opens a detail view in the current drawer. */\n openDrawerDetail: (opts: OpenDetailOpts) => void;\n /** Closes the detail view, or the entire drawer if there was no detail view. */\n closeDrawerDetail: () => void;\n /** Returns whether the drawer is currently open. */\n isDrawerOpen: boolean;\n /**\n * Adds a check when attempting to close the SuperDrawer by clicking on the\n * overlay, the \"X\" button or calling `closeDrawer()`. If any checks returns\n * false, a confirmation modal will appear allowing the user to confirm\n * the action.\n */\n addCanCloseDrawerCheck: (canCloseCheck: CanCloseCheck) => void;\n /**\n * Adds a check when attempting to close a SuperDrawer detail by clicking the\n * \"back\" button or calling `closeDrawerDetail()`. If any checks returns\n * false, a confirmation modal will appear allowing the user to confirm\n * the action.\n */\n addCanCloseDrawerDetailCheck: (canCloseCheck: CanCloseCheck) => void;\n}\n\nexport function useSuperDrawer(): UseSuperDrawerHook {\n const {\n drawerContentStack: contentStack,\n modalState,\n drawerCanCloseChecks: canCloseChecks,\n drawerCanCloseDetailsChecks: canCloseDetailsChecks,\n } = useBeamContext();\n const { openModal } = useModal();\n\n function canCloseDrawerDetails(i: number, doChange: VoidFunction) {\n for (const canCloseDrawerDetail of canCloseDetailsChecks.current[i] ?? []) {\n if (!canClose(canCloseDrawerDetail)) {\n openModal({ content: <ConfirmCloseModal onClose={doChange} {...canCloseDrawerDetail} /> });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Validates whether a new Superdrawer can be opened / whether the current Superdrawer can be closed, performing an\n * action to \"do on change\" when all validations (or close confirmations from the user) have passed.\n * Breaking the validation into a separate function allows openInDrawer\n * to validate the drawer's state without closing it\n * @param doChange - A lambda to run once all validations have passed (or once the user has confirmed that they want to close)\n * */\n function maybeChangeDrawer(doChange: VoidFunction) {\n const contentStackLength = contentStack.current.length;\n if (contentStackLength === 0) {\n doChange();\n return;\n }\n\n // Attempt to close each drawer details\n for (let i = contentStackLength - 2; i >= 0; i--) {\n if (!canCloseDrawerDetails(i, doChange)) {\n return;\n }\n }\n\n // Attempt to close the drawer\n for (const canCloseDrawer of canCloseChecks.current) {\n if (!canClose(canCloseDrawer)) {\n openModal({\n content: <ConfirmCloseModal onClose={doChange} {...canCloseDrawer} />,\n });\n return;\n }\n }\n doChange();\n }\n\n // Separate close actions to reference then in actions\n const closeActions = useMemo(\n () => {\n return {\n /** Attempts to close the drawer. If any checks fail, a confirmation modal will appear */\n closeDrawer() {\n /** Reset the contentStack, all checks and modalState */\n function onClose() {\n const first = contentStack.current[0];\n if (first?.kind === \"open\" && first.opts.onClose) {\n first.opts.onClose();\n }\n contentStack.current = [];\n canCloseChecks.current = [];\n canCloseDetailsChecks.current = [];\n }\n maybeChangeDrawer(onClose);\n return;\n },\n\n closeDrawerDetail() {\n if (contentStack.current.length < 2) return;\n\n // Attempt to close the current drawer details\n if (!canCloseDrawerDetails(contentStack.current.length - 2, onClose)) {\n return;\n }\n\n /** Pop an element from the contentStacks and details checks */\n function onClose() {\n // Pop contentStack and the current canCloseDrawerDetailsCheck\n contentStack.current = contentStack.current.slice(0, -1);\n canCloseDetailsChecks.current = canCloseDetailsChecks.current.slice(0, -1);\n // Reset Modal state\n modalState.current = undefined;\n }\n\n onClose();\n },\n };\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [canCloseChecks, canCloseDetailsChecks, contentStack, modalState, openModal],\n );\n\n // useMemo the actions separately from the dynamic isDrawerOpen value\n const actions = useMemo(\n () => {\n return {\n // TODO: Maybe we should rename to openDrawer as a breaking change (to match openDrawerDetail)\n openInDrawer(opts: OpenInDrawerOpts) {\n // When opening a new SuperDrawer, check if we can close the previous\n // SuperDrawer content. Bail if it fails\n // TODO: There needs to be try again logic here...\n maybeChangeDrawer(() => {\n contentStack.current = [{ kind: \"open\", opts }];\n });\n },\n openDrawerDetail(opts: OpenDetailOpts) {\n // TODO: Check modal open?\n if (!contentStack.current.length) {\n throw new Error(\"openInDrawer was not called before openDrawerDetail\");\n }\n contentStack.current = [...contentStack.current, { kind: \"detail\", opts }];\n },\n /** Add a new close check to SuperDrawer */\n addCanCloseDrawerCheck(canCloseCheck: CanCloseCheck) {\n // Check if we can add a canCloseDrawer check\n const stackLength = contentStack.current.length;\n if (!stackLength) {\n console.error(\"Cannot add canCloseDrawerCheck when the SuperDrawer is not open\");\n return;\n }\n\n canCloseChecks.current = [...canCloseChecks.current, canCloseCheck];\n },\n /** Add a new close check to the current SuperDrawer detail */\n addCanCloseDrawerDetailCheck(canCloseCheck: CanCloseCheck) {\n // Check if we can add a canCloseDrawerDetailCheck\n const stackLength = contentStack.current.length;\n if (stackLength <= 1) {\n console.error(\"Cannot add canCloseDrawerDetailCheck when no SuperDrawer details drawer is open\");\n return;\n }\n\n // Add canCloseDetails check to the current details content\n canCloseDetailsChecks.current[stackLength - 2] = [\n ...(canCloseDetailsChecks.current[stackLength - 2] ?? []),\n canCloseCheck,\n ];\n },\n };\n },\n // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [canCloseChecks, canCloseDetailsChecks, closeActions, contentStack],\n );\n\n return {\n ...actions,\n ...closeActions,\n isDrawerOpen: contentStack.current.length > 0,\n };\n}\n\nfunction canClose(canCloseCheck: CanCloseCheck): boolean {\n return (\n (typeof canCloseCheck === \"function\" && canCloseCheck()) ||\n (typeof canCloseCheck !== \"function\" && canCloseCheck.check())\n );\n}\n","import { camelCase } from \"change-case\";\nimport { HTMLAttributes, KeyboardEvent, ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { mergeProps, useFocusRing, useHover } from \"react-aria\";\nimport { matchPath, Route } from \"react-router\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { FullBleed, IconKey, maybeTooltip, resolveTooltip } from \"src/components\";\nimport { Css, Margin, Only, Padding, Xss } from \"src/Css\";\nimport { BeamFocusableProps } from \"src/interfaces\";\nimport { AnyObject } from \"src/types\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { Icon } from \"./Icon\";\n\nexport interface Tab<V extends string = string> {\n name: string;\n value: V;\n // Suffixes label with specified Icon. If `icon` and `endAdornment` are supplied, only the `icon` will be displayed\n icon?: IconKey;\n // Suffixes label with specified node. Expected to be used for cases where the decoration is not just an icon.\n endAdornment?: ReactNode;\n /** Whether the Tab is disabled. If a ReactNode, it's treated as a \"disabled reason\" that's shown in a tooltip. */\n disabled?: boolean | ReactNode;\n}\n\ntype TabsContentXss = Xss<Margin | Padding | \"backgroundColor\">;\n\nexport interface TabsProps<V extends string, X> {\n ariaLabel?: string;\n // the selected tab is connected to the contents displayed\n selected: V;\n tabs: Tab<V>[];\n onChange: (value: V) => void;\n contentXss?: X;\n // Allow for showing the tabs even if there is only one enabled tab\n alwaysShowAllTabs?: boolean;\n // Adds a bottom border to the Tabs container\n includeBottomBorder?: boolean;\n // Content to be placed to the far right of the tabs\n right?: ReactNode;\n}\n\n// Tabs can be rendered as Links (omit \"onChange\") and we'll use React-Router for matching (omit \"selected\")/\nexport interface RouteTabsProps<V extends string, X> extends Omit<TabsProps<V, X>, \"onChange\" | \"selected\" | \"tabs\"> {\n tabs: RouteTab<V>[];\n}\n// A Route Tab has a `href` prop rather than a `value` prop\nexport interface RouteTab<V extends string = string> extends Omit<Tab<V>, \"value\"> {\n href: V;\n // This is a React-Router path(s) to match the current URL to. Matching on the path(s) is what dictates which TabContent to render\n path: string | string[];\n}\n\nexport interface TabWithContent<V extends string = string> extends Omit<Tab<V>, \"render\"> {\n render: () => ReactNode;\n}\n\nexport interface RouteTabWithContent<V extends string = string> extends Omit<RouteTab<V>, \"render\"> {\n render: () => ReactNode;\n}\n\ninterface RequiredRenderTabs<V extends string, X> extends Omit<TabsProps<V, X>, \"tabs\"> {\n tabs: TabWithContent<V>[];\n}\n\ninterface RequiredRenderRouteTabs<V extends string, X> extends Omit<RouteTabsProps<V, X>, \"tabs\"> {\n tabs: RouteTabWithContent<V>[];\n}\n\n/**\n * Provides a list of tabs and their content.\n *\n * The caller is responsible for using `selected` / `onChange` to control\n * the current tab.\n *\n * If you want to tease apart Tabs from their TabContent, you can use the `Tab`\n * and `TabContent` components directly.\n */\nexport function TabsWithContent<V extends string, X extends Only<TabsContentXss, X>>(\n props: RequiredRenderTabs<V, X> | RequiredRenderRouteTabs<V, X>,\n) {\n // Do not apply default top padding styles if the tabs are being hidden. This avoids unnecessary white space being added\n const styles = hideTabs(props) ? {} : Css.pt3.$;\n return (\n <>\n <Tabs {...props} />\n <TabContent {...props} contentXss={{ ...styles, ...props.contentXss }} />\n </>\n );\n}\n\nexport function TabContent<V extends string>(\n props: Omit<RequiredRenderTabs<V, AnyObject>, \"onChange\"> | RequiredRenderRouteTabs<V, AnyObject>,\n) {\n const tid = useTestIds(props, \"tab\");\n const { tabs, contentXss = {} } = props;\n const location = useLocation();\n const selectedTab = isRouteTabs(props)\n ? props.tabs.find((t) => {\n const paths = Array.isArray(t.path) ? t.path : [t.path];\n return paths.some((p) => !!matchPath(location.pathname, { path: p, exact: true }));\n }) || tabs[0]\n : props.tabs.find((tab) => tab.value === props.selected) || tabs[0];\n const uniqueValue = uniqueTabValue(selectedTab);\n\n return (\n // Using FullBleed to allow the tab's bgColor to extend to the edges of the <ScrollableContent /> element.\n // Omit the padding from `FullBleed` if the caller passes in the `paddingLeft/Right` styles.\n <FullBleed omitPadding={\"paddingLeft\" in contentXss || \"paddingRight\" in contentXss}>\n <div\n aria-labelledby={`${uniqueValue}-tab`}\n id={`${uniqueValue}-tabPanel`}\n role=\"tabpanel\"\n tabIndex={0}\n {...tid.panel}\n css={contentXss as any}\n >\n {isRouteTab(selectedTab) ? <Route path={selectedTab.path} render={selectedTab.render} /> : selectedTab.render()}\n </div>\n </FullBleed>\n );\n}\n\n/** The top list of tabs. */\nexport function Tabs<V extends string>(props: TabsProps<V, AnyObject> | RouteTabsProps<V, AnyObject>) {\n const { ariaLabel, tabs, includeBottomBorder, right, ...others } = props;\n const location = useLocation();\n const selected = isRouteTabs(props)\n ? uniqueTabValue(\n props.tabs.find((t) => !!matchPath(location.pathname, { path: t.path, exact: true })) || props.tabs[0],\n )\n : props.selected;\n const { isFocusVisible, focusProps } = useFocusRing();\n const tid = useTestIds(others, \"tabs\");\n const [active, setActive] = useState(selected);\n const ref = useRef<HTMLDivElement>(null);\n\n // Whenever selected changes, reset active\n useEffect(() => setActive(selected), [selected]);\n\n // the active tab is highlighted, but not necessarily \"selected\"\n // the selected tab dictates what is displayed in the content panel\n function onKeyUp(e: KeyboardEvent) {\n // left and right arrow keys update the active tab\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n const nextTabValue = getNextTabValue(active, e.key, tabs);\n setActive(nextTabValue);\n\n // Ensure the browser's focus follows the active element.\n document.getElementById(`${nextTabValue}-tab`)?.focus();\n }\n }\n\n // clicking on a tab sets it to selected and active\n function onClick(value: V) {\n !isRouteTabs(props) && props.onChange(value);\n }\n\n // bluring out resets active to whatever selected is\n function onBlur(e: FocusEvent) {\n // only reset active state if we've moved focus out of the tab list\n if (!(ref.current && ref.current.contains(e.relatedTarget as Node))) {\n setActive(selected);\n }\n }\n\n return (\n <div css={{ ...Css.df.aic.oa.wsnw.gap1.$, ...(includeBottomBorder ? { ...Css.bb.bcGray200.$ } : {}) }}>\n {/* Do not show if we should hide the tabs */}\n {!hideTabs(props) && (\n <div ref={ref} css={Css.dif.gap1.asfe.$} aria-label={ariaLabel} role=\"tablist\" {...tid}>\n {tabs.map((tab) => {\n const uniqueValue = uniqueTabValue(tab);\n return (\n <TabImpl\n active={active === uniqueValue}\n focusProps={focusProps}\n isFocusVisible={isFocusVisible}\n key={uniqueValue}\n onClick={onClick}\n onKeyUp={onKeyUp}\n onBlur={onBlur}\n tab={tab}\n {...tid[defaultTestId(uniqueValue)]}\n />\n );\n })}\n </div>\n )}\n {/* ref for actions specific to a tab. Targeting the immediate div (tabActionsEl) to set default styles */}\n {right && <div css={Css.mla.df.aic.gap1.pb1.$}>{right}</div>}\n </div>\n );\n}\n\ninterface TabImplProps<V extends string> extends BeamFocusableProps {\n /** active indicates the current tab is highlighted */\n active: boolean;\n onClick: (value: V) => void;\n onKeyUp: (e: KeyboardEvent) => void;\n onBlur: (e: FocusEvent) => void;\n focusProps: HTMLAttributes<HTMLElement>;\n isFocusVisible: boolean;\n tab: Tab<V> | RouteTab<V>;\n}\n\nfunction TabImpl<V extends string>(props: TabImplProps<V>) {\n const { tab, onClick, active, onKeyUp, onBlur, focusProps, isFocusVisible = false, ...others } = props;\n const { disabled = false, name: label, icon, endAdornment } = tab;\n const isDisabled = !!disabled;\n const { hoverProps, isHovered } = useHover({ isDisabled });\n const { baseStyles, activeStyles, focusRingStyles, hoverStyles, disabledStyles, activeHoverStyles } = useMemo(\n () => getTabStyles(),\n [],\n );\n const uniqueValue = uniqueTabValue(tab);\n\n const tabProps = {\n \"aria-controls\": `${uniqueValue}-tabPanel`,\n \"aria-selected\": active,\n \"aria-disabled\": isDisabled || undefined,\n id: `${uniqueValue}-tab`,\n role: \"tab\",\n tabIndex: active ? 0 : -1,\n ...others,\n css: {\n ...baseStyles,\n ...(active && activeStyles),\n ...(isDisabled && disabledStyles),\n ...(isHovered && hoverStyles),\n ...(isHovered && active && activeHoverStyles),\n ...(isFocusVisible && active && focusRingStyles),\n },\n };\n const interactiveProps = mergeProps(focusProps, hoverProps, {\n onKeyUp,\n onBlur,\n ...(isRouteTab(tab) ? {} : { onClick: () => onClick(tab.value) }),\n });\n\n const tabLabel = (\n <>\n {label}\n {(icon || endAdornment) && <span css={Css.ml1.$}>{icon ? <Icon icon={icon} /> : endAdornment}</span>}\n </>\n );\n\n return isDisabled ? (\n maybeTooltip({\n title: resolveTooltip(disabled),\n placement: \"top\",\n children: <div {...tabProps}>{tabLabel}</div>,\n })\n ) : isRouteTab(tab) ? (\n <Link {...{ ...tabProps, ...interactiveProps }} className=\"navLink\" to={tab.href}>\n {tabLabel}\n </Link>\n ) : (\n <button {...{ ...tabProps, ...interactiveProps }}>{tabLabel}</button>\n );\n}\n\nexport function getTabStyles() {\n const borderBottomWidthPx = 4;\n const verticalPaddingPx = 6;\n // Decrease the bottom padding by the same amount of the new border width to prevent text layout shift\n const borderBottomStyles = Css.bb\n .add(\"borderBottomWidth\", `${borderBottomWidthPx}px`)\n .pbPx(verticalPaddingPx - borderBottomWidthPx).$;\n\n return {\n baseStyles: Css.df.aic.hPx(32).pyPx(verticalPaddingPx).px1.outline0.gray700.add(\"width\", \"fit-content\")\n .cursorPointer.sm.$,\n activeStyles: Css.add(borderBottomStyles).bcBlue700.smMd.gray900.$,\n disabledStyles: Css.gray400.cursorNotAllowed.$,\n focusRingStyles: Css.bgBlue50.bshFocus.$,\n hoverStyles: Css.add(borderBottomStyles).bcGray400.$,\n activeHoverStyles: Css.bgBlue50.add(borderBottomStyles).bcBlue700.$,\n };\n}\n\nexport function getNextTabValue<V extends string>(\n selected: V,\n key: \"ArrowLeft\" | \"ArrowRight\",\n tabs: Tab<V>[] | RouteTab<V>[],\n): V {\n const enabledTabs: RouteTab<V>[] | Tab<V>[] = (tabs as any[]).filter((tab) => tab.disabled !== true);\n const tabsToScan = key === \"ArrowRight\" ? enabledTabs : enabledTabs.reverse();\n const currentIndex = tabsToScan.findIndex((tab) => uniqueTabValue(tab) === selected);\n const nextIndex = currentIndex === tabsToScan.length - 1 ? 0 : currentIndex + 1;\n return uniqueTabValue(tabsToScan[nextIndex]);\n}\n\nfunction isRouteTabs(\n props: Omit<TabsProps<any, any>, \"onChange\"> | RouteTabsProps<any, any>,\n): props is RouteTabsProps<any, any> {\n const { tabs } = props;\n return tabs.length > 0 && isRouteTab(tabs[0]);\n}\n\nfunction isRouteTab(tab: Tab<any> | RouteTab<any>): tab is RouteTab<any> {\n return \"path\" in tab;\n}\n\nfunction uniqueTabValue(tab: Tab<any> | RouteTab<any>) {\n return isRouteTab(tab) ? camelCase(tab.name) : tab.value;\n}\n\n// Determines whether we should hide the Tab panel. Returns true if there is only one enabled tab and `alwaysShowAllTabs` is falsey.\nfunction hideTabs(props: Omit<TabsProps<any, AnyObject>, \"onChange\"> | RouteTabsProps<any, AnyObject>) {\n return props.alwaysShowAllTabs ? false : (props.tabs as any[]).filter((t) => !t.disabled).length === 1;\n}\n","import { useResizeObserver } from \"@react-aria/utils\";\nimport { ReactNode, useRef, useState } from \"react\";\nimport { Icon, IconKey, maybeTooltip } from \"src/components\";\nimport { Css, Margin, Only, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ntype TagXss = Margin | \"backgroundColor\" | \"color\";\nexport type TagType = \"info\" | \"caution\" | \"warning\" | \"success\" | \"neutral\";\ninterface TagProps<X> {\n text: ReactNode;\n // Defaults to \"neutral\"\n type?: TagType;\n xss?: X;\n icon?: IconKey;\n /** A tooltip will automatically be displayed if the text is truncated. Set to true to prevent this behavior.\n * @default false */\n preventTooltip?: boolean;\n}\n\n/** Tag used for indicating a status */\nexport function Tag<X extends Only<Xss<TagXss>, X>>(props: TagProps<X>) {\n const { text, type, xss, preventTooltip = false, ...otherProps } = props;\n const typeStyles = getStyles(type);\n const tid = useTestIds(otherProps);\n const [showTooltip, setShowTooltip] = useState(false);\n const ref = useRef<HTMLSpanElement>(null);\n useResizeObserver({\n ref,\n onResize: () => {\n if (ref.current) {\n setShowTooltip(ref.current.offsetHeight < ref.current.scrollHeight);\n }\n },\n });\n\n return maybeTooltip({\n title: !preventTooltip && showTooltip ? text : undefined,\n children: (\n <span {...tid} css={{ ...Css.dif.tinySb.ttu.aic.gapPx(4).pxPx(6).pyPx(2).gray900.br4.$, ...typeStyles, ...xss }}>\n {/* Nesting `lineClamp` styles as the padding bottom set would expose the remainder of the text if applied on the same element */}\n {/* Using `lineClamp1` instead of `truncate` as `truncate` requires a width set to properly truncate and `lineClamp` can smartly do it based on the parent's width */}\n {otherProps.icon && (\n <span css={Css.fs0.$}>\n <Icon icon={otherProps.icon} inc={1.5} />\n </span>\n )}\n <span ref={ref} css={Css.lineClamp1.wbba.$}>\n {text}\n </span>\n </span>\n ),\n });\n}\n\nfunction getStyles(type?: TagType) {\n switch (type) {\n case \"info\":\n return Css.bgBlue100.$;\n case \"caution\":\n return Css.bgYellow200.$;\n case \"warning\":\n return Css.bgRed200.$;\n case \"success\":\n return Css.bgGreen200.$;\n default:\n // Neutral case\n return Css.bgGray200.$;\n }\n}\n","import { Banner } from \"src/components\";\nimport { useTestIds } from \"src/utils\";\nimport { useToastContext } from \"./ToastContext\";\n\nexport function Toast() {\n const { setNotice, notice } = useToastContext();\n const tid = useTestIds({}, \"toast\");\n return <>{notice && <Banner {...notice} {...tid} onClose={() => setNotice(undefined)} />}</>;\n}\n","import { useCallback } from \"react\";\nimport { ToastNoticeProps, useToastContext } from \"./ToastContext\";\n\nexport interface UseToastProps {\n showToast: (props: ToastNoticeProps) => void;\n clear: () => void;\n}\nexport function useToast(): UseToastProps {\n const { setNotice, clear } = useToastContext();\n const showToast = useCallback((props: ToastNoticeProps) => setNotice(props), [setNotice]);\n\n return { showToast, clear };\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Checkbox, CheckboxProps } from \"src/inputs\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundCheckboxFieldProps = Omit<CheckboxProps, \"selected\" | \"onChange\" | \"label\"> & {\n field: FieldState<boolean | null | undefined>;\n /** Make optional so that callers can override if they want to. */\n onChange?: (values: boolean) => void;\n label?: string;\n};\n\n/** Wraps `Checkbox` and binds it to a form field. */\nexport function BoundCheckboxField(props: BoundCheckboxFieldProps) {\n const {\n field,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onFocus,\n onBlur,\n disabled,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <Checkbox\n label={label}\n selected={field.value ?? false}\n onChange={(selected) => {\n // We are triggering blur manually for checkbox fields due to its transactional nature\n onChange(selected);\n field.maybeAutoSave();\n }}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n disabled={disabled || field.readOnly}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { CheckboxGroup, CheckboxGroupProps } from \"src/inputs\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundCheckboxGroupFieldProps = Omit<CheckboxGroupProps, \"values\" | \"onChange\" | \"label\"> & {\n field: FieldState<string[] | null | undefined>;\n /** Make optional so that callers can override if they want to. */\n onChange?: (values: string[]) => void;\n label?: string;\n};\n\n/** Wraps `CheckboxGroup` and binds it to a form field.\n * To make the field agnostic to the order of selected values, add `strictOrder: false` to the field's ObjectConfig */\nexport function BoundCheckboxGroupField(props: BoundCheckboxGroupFieldProps) {\n const {\n field,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <CheckboxGroup\n label={label}\n values={field.value || []}\n onChange={(values) => {\n onChange(values);\n field.maybeAutoSave();\n }}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Value } from \"src/inputs\";\nimport { ChipSelectField, ChipSelectFieldProps } from \"src/inputs/ChipSelectField\";\nimport { HasIdAndName, Optional } from \"src/types\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\ninterface BoundChipSelectFieldProps<O, V extends Value>\n extends Omit<ChipSelectFieldProps<O, V>, \"onSelect\" | \"label\" | \"value\"> {\n // Allow `onSelect` to be overridden to do more than just `field.set`.\n onSelect?: (option: V | undefined) => void;\n field: FieldState<V | null | undefined>;\n label?: string;\n}\n\nexport function BoundChipSelectField<O, V extends Value>(props: BoundChipSelectFieldProps<O, V>): JSX.Element;\nexport function BoundChipSelectField<O extends HasIdAndName<V>, V extends Value>(\n props: Optional<BoundChipSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element;\nexport function BoundChipSelectField<O, V extends Value>(\n props: Optional<BoundChipSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element {\n const {\n field,\n getOptionValue = (opt: O) => (opt as any).id, // if unset, assume O implements HasId\n getOptionLabel = (opt: O) => (opt as any).name, // if unset, assume O implements HasName\n onSelect = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n onCreateNew,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n\n return (\n <Observer>\n {() => (\n <ChipSelectField\n label={label}\n value={field.value ?? undefined}\n onSelect={(value) => {\n onSelect(value);\n field.maybeAutoSave();\n }}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n onCreateNew={\n onCreateNew\n ? async (v) => {\n await onCreateNew(v);\n field.maybeAutoSave();\n }\n : undefined\n }\n {...others}\n {...testId}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { DateField, DateFieldProps } from \"src/inputs\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundDateFieldProps = Omit<DateFieldProps, \"label\" | \"value\" | \"onChange\"> & {\n field: FieldState<Date | null | undefined>;\n // Make optional as it'll create a label from the field's key if not present\n label?: string;\n // Optional in case the page wants extra behavior\n onChange?: (value: Date | undefined) => void;\n};\n\n/** Wraps `TextField` and binds it to a form field. */\nexport function BoundDateField(props: BoundDateFieldProps) {\n const {\n field,\n readOnly,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n onEnter,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <DateField\n label={label}\n value={field.value || undefined}\n onChange={(value) => {\n onChange(value);\n field.maybeAutoSave();\n }}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n onEnter={() => {\n maybeCall(onEnter);\n field.maybeAutoSave();\n }}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { DateRangeField, DateRangeFieldProps } from \"src/inputs\";\nimport { DateRange } from \"src/types\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundDateRangeFieldProps = Omit<DateRangeFieldProps, \"label\" | \"value\" | \"onChange\"> & {\n field: FieldState<DateRange | null | undefined>;\n // Make optional as it'll create a label from the field's key if not present\n label?: string;\n // Optional in case the page wants extra behavior\n onChange?: (value: DateRange | undefined) => void;\n};\n\n/** Wraps `TextField` and binds it to a form field. */\nexport function BoundDateRangeField(props: BoundDateRangeFieldProps) {\n const {\n field,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n onEnter,\n readOnly,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <DateRangeField\n label={label}\n value={field.value || undefined}\n onChange={(value) => {\n onChange(value);\n field.maybeAutoSave();\n }}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n onEnter={() => {\n maybeCall(onEnter);\n field.maybeAutoSave();\n }}\n readOnly={readOnly || field.readOnly}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { IconProps } from \"src/components\";\nimport { IconCard, IconCardProps } from \"src/inputs\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundIconCardFieldProps = Omit<IconCardProps, \"label\" | \"selected\" | \"onChange\"> & {\n field: FieldState<boolean | null | undefined>;\n icon: IconProps[\"icon\"];\n /** Make optional so that callers can override if they want to. */\n onChange?: (values: boolean) => void;\n label?: string;\n};\n\n/** Wraps `IconCard` and binds it to a form field. */\nexport function BoundIconCardField(props: BoundIconCardFieldProps) {\n const { icon, field, onChange = (value) => field.set(value), label = defaultLabel(field.key), ...others } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <IconCard\n icon={icon}\n label={label}\n selected={field.value ?? false}\n onChange={(selected) => {\n // We are triggering blur manually for checkbox fields due to its transactional nature\n onChange(selected);\n field.maybeAutoSave();\n }}\n disabled={field.readOnly}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Value } from \"src/inputs\";\nimport { IconCardGroup, IconCardGroupProps } from \"src/inputs/IconCardGroup\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundIconCardGroupFieldProps<V extends Value> = Omit<\n IconCardGroupProps<V>,\n \"label\" | \"values\" | \"onChange\"\n> & {\n field: FieldState<V[] | null | undefined>;\n /** Make optional so that callers can override if they want to. */\n onChange?: (values: V[]) => void;\n label?: string;\n};\n\n/** Wraps `IconCardGroup` and binds it to a form field. */\nexport function BoundIconCardGroupField<V extends Value>(props: BoundIconCardGroupFieldProps<V>) {\n const { field, onChange = (value) => field.set(value), label = defaultLabel(field.key), ...others } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <IconCardGroup\n label={label}\n values={field.value || []}\n onChange={(values) => {\n // We are triggering blur manually for checkbox fields due to its transactional nature\n onChange(values);\n field.maybeAutoSave();\n }}\n disabled={field.readOnly}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { ReactNode, useCallback, useMemo, useState } from \"react\";\nimport { mergeProps, useField } from \"react-aria\";\nimport { HelperText } from \"src/components/HelperText\";\nimport { IconProps } from \"src/components/Icon\";\nimport { Label } from \"src/components/Label\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { Value } from \"src/inputs\";\nimport { IconCard } from \"src/inputs/IconCard\";\nimport { useTestIds } from \"src/utils\";\nimport { ErrorMessage } from \"./ErrorMessage\";\n\nexport interface IconCardGroupItemOption<V extends Value> {\n icon: IconProps[\"icon\"];\n label: string;\n disabled?: boolean;\n /** The value of the IconCardGroup item, stored in value array in state. */\n value: V;\n /** Exclusive: if true, this option will override all other options when selected. */\n exclusive?: boolean;\n}\n\nexport interface IconCardGroupProps<V extends Value> extends Pick<PresentationFieldProps, \"labelStyle\"> {\n label: string;\n /** Called when a card is selected */\n onChange: (values: V[]) => void;\n /** Options for the cards contained within the IconCardGroup. */\n options: IconCardGroupItemOption<V>[];\n /** The values currently selected. */\n values: V[];\n errorMsg?: string;\n helperText?: string | ReactNode;\n disabled?: boolean;\n}\n\nexport function IconCardGroup<V extends Value>(props: IconCardGroupProps<V>) {\n const { fieldProps } = usePresentationContext();\n const {\n options,\n label,\n labelStyle = fieldProps?.labelStyle ?? \"above\",\n values,\n errorMsg,\n helperText,\n disabled: isDisabled = false,\n onChange,\n } = props;\n\n const [selected, setSelected] = useState<V[]>(values);\n\n const exclusiveOptions = useMemo(() => options.filter((o) => o.exclusive), [options]);\n\n const toggleValue = useCallback(\n (value: V) => {\n if (isDisabled) return;\n\n const option = options.find((o) => o.value === value);\n if (!option) return;\n\n let newSelected: V[] = [];\n if (selected.includes(value)) {\n newSelected = selected.filter((v) => v !== value);\n } else {\n if (option.exclusive) {\n newSelected = [value];\n } else {\n newSelected = [...selected, value];\n\n // Filter out any exclusive options as a non-exclusive option was selected.\n newSelected = newSelected.filter((v) => !exclusiveOptions.some((o) => o.value === v));\n }\n }\n setSelected(newSelected);\n onChange(newSelected);\n },\n [exclusiveOptions, isDisabled, onChange, options, selected],\n );\n\n const tid = useTestIds(props);\n\n const { labelProps, fieldProps: fieldPropsAria } = useField(props);\n\n const groupProps = mergeProps(tid, {\n role: \"group\",\n \"aria-disabled\": isDisabled || undefined,\n ...fieldPropsAria,\n });\n\n return (\n <div {...groupProps}>\n {labelStyle !== \"hidden\" && (\n <div css={Css.if(labelStyle === \"left\").w50.$}>\n <Label label={label} {...labelProps} {...tid.label} />\n </div>\n )}\n <div css={Css.df.gap2.add({ flexWrap: \"wrap\" }).$}>\n {options.map((option) => {\n const { icon, label, disabled } = option;\n const isSelected = selected.includes(option.value);\n return (\n <IconCard\n key={option.label}\n icon={icon}\n label={label}\n selected={isSelected}\n disabled={disabled}\n onChange={() => toggleValue(option.value)}\n {...tid[option.label]}\n />\n );\n })}\n </div>\n {errorMsg && <ErrorMessage errorMsg={errorMsg} {...tid.errorMsg} />}\n {helperText && <HelperText helperText={helperText} {...tid.helperText} />}\n </div>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { MultiLineSelectField, MultiLineSelectFieldProps, Value } from \"src/inputs\";\nimport { HasIdAndName, Optional } from \"src/types\";\nimport { maybeCall } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport type BoundMultiLineSelectFieldProps<O, V extends Value> = Omit<\n MultiLineSelectFieldProps<O, V>,\n \"values\" | \"onSelect\" | \"label\"\n> & {\n // Allow `onSelect` to be overridden to do more than just `field.set`.\n onSelect?: (values: V[], opts: O[]) => void;\n field: FieldState<V[] | null | undefined>;\n label?: string;\n};\n\n/**\n * Wraps `MultiLineSelectField` and binds it to a form field.\n */\nexport function BoundMultiLineSelectField<O, V extends Value>(props: BoundMultiLineSelectFieldProps<O, V>): JSX.Element;\nexport function BoundMultiLineSelectField<O extends HasIdAndName<V>, V extends Value>(\n props: Optional<BoundMultiLineSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element;\nexport function BoundMultiLineSelectField<O, V extends Value>(\n props: Optional<BoundMultiLineSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element {\n const {\n field,\n options,\n readOnly,\n getOptionValue = (opt: O) => (opt as any).id, // if unset, assume O implements HasId\n getOptionLabel = (opt: O) => (opt as any).name, // if unset, assume O implements HasName\n onSelect = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <MultiLineSelectField<O, V>\n label={label}\n values={(field.value as V[]) ?? []}\n onSelect={(values, options) => {\n onSelect(values, options);\n field.maybeAutoSave();\n }}\n options={options}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n {...others}\n {...testId}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { MultiSelectField, MultiSelectFieldProps, Value } from \"src/inputs\";\nimport { HasIdAndName, Optional } from \"src/types\";\nimport { maybeCall } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport type BoundMultiSelectFieldProps<O, V extends Value> = Omit<\n MultiSelectFieldProps<O, V>,\n \"values\" | \"onSelect\" | \"label\"\n> & {\n // Allow `onSelect` to be overridden to do more than just `field.set`.\n onSelect?: (values: V[], opts: O[]) => void;\n field: FieldState<V[] | null | undefined>;\n label?: string;\n};\n\n/**\n * Wraps `MultiSelectField` and binds it to a form field.\n *\n * To ease integration with \"select this fooId\" inputs, we can take a list\n * of objects, `T` (i.e. `TradePartner[]`), but accept a field of type `V`\n * (i.e. `string`).\n *\n * The caller has to tell us how to turn `T` into `V`, which is usually a\n * lambda like `t => t.id`.\n */\nexport function BoundMultiSelectField<O, V extends Value>(props: BoundMultiSelectFieldProps<O, V>): JSX.Element;\nexport function BoundMultiSelectField<O extends HasIdAndName<V>, V extends Value>(\n props: Optional<BoundMultiSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element;\nexport function BoundMultiSelectField<O, V extends Value>(\n props: Optional<BoundMultiSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element {\n const {\n field,\n options,\n readOnly,\n getOptionValue = (opt: O) => (opt as any).id, // if unset, assume O implements HasId\n getOptionLabel = (opt: O) => (opt as any).name, // if unset, assume O implements HasName\n onSelect = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <MultiSelectField<O, V>\n label={label}\n values={(field.value as V[]) ?? []}\n onSelect={(values, options) => {\n onSelect(values, options);\n field.maybeAutoSave();\n }}\n options={options}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n {...others}\n {...testId}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { NumberField, NumberFieldProps } from \"src/inputs/NumberField\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundNumberFieldProps = Omit<NumberFieldProps, \"value\" | \"onChange\" | \"label\"> & {\n // Make optional as it'll create a label from the field's key if not present\n label?: string;\n field: FieldState<number | null | undefined>;\n // Optional in case the page wants extra behavior\n onChange?: (value: number | undefined) => void;\n};\n\n/** Wraps `NumberField` and binds it to a form field. */\nexport function BoundNumberField(props: BoundNumberFieldProps) {\n const {\n field,\n readOnly,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key.replace(/(InCents|InMills)$/, \"\")),\n type = field.key.endsWith(\"InCents\") ? \"cents\" : field.key.endsWith(\"InMills\") ? \"mills\" : undefined,\n onFocus,\n onBlur,\n onEnter,\n ...others\n } = props;\n const testId = useTestIds(props, label || field.key);\n return (\n <Observer>\n {() => (\n <NumberField\n label={label}\n value={typeof field.value === \"number\" ? field.value : undefined}\n onChange={onChange}\n type={type}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onEnter={() => {\n maybeCall(onEnter);\n field.maybeAutoSave();\n }}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { RadioGroupField, RadioGroupFieldProps } from \"src/inputs\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundRadioGroupFieldProps<K extends string> = Omit<\n RadioGroupFieldProps<K>,\n \"value\" | \"onChange\" | \"label\"\n> & {\n field: FieldState<K | null | undefined>;\n /** Make optional so that callers can override if they want to. */\n onChange?: (value: K) => void;\n label?: string;\n};\n\n/** Wraps `TextField` and binds it to a form field. */\nexport function BoundRadioGroupField<K extends string>(props: BoundRadioGroupFieldProps<K>) {\n const {\n field,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <RadioGroupField<K>\n label={label}\n value={field.value || undefined}\n onChange={(value) => {\n onChange(value);\n field.maybeAutoSave();\n }}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { RichTextField, RichTextFieldProps } from \"src/inputs/RichTextField\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundRichTextFieldProps = Omit<RichTextFieldProps, \"value\" | \"onChange\"> & {\n field: FieldState<string | null | undefined>;\n // Optional in case the page wants extra behavior\n onChange?: (value: string | undefined) => void;\n};\n\n/** Wraps `RichTextField` and binds it to a form field. */\nexport function BoundRichTextField(props: BoundRichTextFieldProps) {\n const {\n field,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n readOnly,\n onFocus,\n onBlur,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <RichTextField\n label={label}\n value={field.value || undefined}\n onChange={onChange}\n // TODO: Potentially support this in the future?\n // errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n readOnly={readOnly ?? field.readOnly}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { CompoundField } from \"src/components/internal/CompoundField\";\nimport { Only } from \"src/Css\";\nimport { BoundSelectField, BoundSelectFieldProps, BoundTextField, BoundTextFieldProps } from \"src/forms/index\";\nimport { Value } from \"src/inputs/Value\";\nimport { TextFieldXss } from \"src/interfaces\";\nimport { HasIdAndName, Optional } from \"src/types\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ninterface BoundSelectAndTextFieldProps<O, V extends Value, X> {\n selectFieldProps: CompoundSelectFieldProps<O, V>;\n textFieldProps: CompoundTextFieldProps<X>;\n compact?: boolean;\n}\n\nexport function BoundSelectAndTextField<O, V extends Value, X extends Only<TextFieldXss, X>>(\n props: BoundSelectAndTextFieldProps<O, V, X>,\n): JSX.Element;\nexport function BoundSelectAndTextField<O extends HasIdAndName<V>, V extends Value, X extends Only<TextFieldXss, X>>(\n props: Omit<BoundSelectAndTextFieldProps<O, V, X>, \"selectFieldProps\"> & {\n selectFieldProps: Optional<CompoundSelectFieldProps<O, V>, \"getOptionValue\" | \"getOptionLabel\">;\n },\n): JSX.Element;\nexport function BoundSelectAndTextField<O extends HasIdAndName<V>, V extends Value, X extends Only<TextFieldXss, X>>(\n props: Omit<BoundSelectAndTextFieldProps<O, V, X>, \"selectFieldProps\"> & {\n selectFieldProps: Optional<CompoundSelectFieldProps<O, V>, \"getOptionLabel\" | \"getOptionValue\">;\n },\n): JSX.Element {\n const { selectFieldProps, textFieldProps, compact = true } = props;\n const tid = useTestIds(props);\n return (\n <CompoundField>\n <BoundSelectField\n {...tid[defaultTestId(selectFieldProps.label ?? selectFieldProps.field.key)]}\n {...selectFieldProps}\n sizeToContent\n compact={compact}\n />\n <BoundTextField\n {...tid[defaultTestId(textFieldProps.label ?? textFieldProps.field.key)]}\n {...textFieldProps}\n compact={compact}\n />\n </CompoundField>\n );\n}\n\ntype CompoundSelectFieldProps<O, V extends Value> = Omit<BoundSelectFieldProps<O, V>, \"compact\">;\ntype CompoundTextFieldProps<X> = Omit<BoundTextFieldProps<X>, \"compact\">;\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { SelectField, SelectFieldProps, Value } from \"src/inputs\";\nimport { HasIdIsh, HasNameIsh, Optional } from \"src/types\";\nimport { maybeCall } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\nimport { defaultOptionLabel, defaultOptionValue } from \"src/utils/options\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport type BoundSelectFieldProps<O, V extends Value> = Omit<SelectFieldProps<O, V>, \"value\" | \"onSelect\" | \"label\"> & {\n /** Optional, to allow `onSelect` to be overridden to do more than just `field.set`. */\n onSelect?: (value: V | undefined, opt: O | undefined) => void;\n /** The field we'll read/write data from. */\n field: FieldState<V | null | undefined>;\n /** An optional label, defaults to the humanized field key, i.e. `authorId` -> `Author`. */\n label?: string;\n};\n\n/**\n * Wraps `SelectField` and binds it to a form field.\n *\n * To ease integration with GraphQL inputs that want to put `{ authorId: \"a:1\" }` on\n * the wire, we generally expect the FieldState type to be a string/tagged id, but the\n * `options` prop to be the full list of id+name options like `AuthorFragment[]`.\n *\n * If `AuthorFragment` type matches `HasIdIsh` and `HasNameIsh`, we'll automatically use\n * the `id` and `name` fields from it, otherwise callers need to provide `getOptionValue`\n * and `getOptionLabel` to adapt the option, i.e. `getOptionLabel={(author) => author.otherName}`.\n *\n * Note: there are four overloads here to handle each combination of \"HasIdIsh and HasNameId\",\n * \"only has HasIdIsh\", \"only has HasNameIsh\", and \"neither\".\n */\nexport function BoundSelectField<T extends HasIdIsh<V> & HasNameIsh, V extends Value>(\n props: Optional<BoundSelectFieldProps<T, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element;\nexport function BoundSelectField<T extends HasIdIsh<V>, V extends Value>(\n props: Optional<BoundSelectFieldProps<T, V>, \"getOptionValue\">,\n): JSX.Element;\nexport function BoundSelectField<T extends HasNameIsh, V extends Value>(\n props: Optional<BoundSelectFieldProps<T, V>, \"getOptionLabel\">,\n): JSX.Element;\nexport function BoundSelectField<T, V extends Value>(props: BoundSelectFieldProps<T, V>): JSX.Element;\nexport function BoundSelectField<T extends object, V extends Value>(\n props: Optional<BoundSelectFieldProps<T, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element {\n const {\n field,\n options,\n readOnly,\n getOptionValue = defaultOptionValue,\n getOptionLabel = defaultOptionLabel,\n onSelect = (value) => field.set(value),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <SelectField<T, V>\n label={label}\n value={field.value ?? undefined}\n onSelect={(value, opt) => {\n onSelect(value, opt);\n field.maybeAutoSave();\n }}\n options={options}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n {...others}\n {...testId}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Switch, SwitchProps } from \"src/inputs\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundSwitchFieldProps = Omit<SwitchProps, \"selected\" | \"onChange\" | \"label\"> & {\n field: FieldState<boolean | null | undefined>;\n /** Make optional so that callers can override if they want to. */\n onChange?: (value: boolean) => void;\n label?: string;\n};\n\n/** Wraps `Switch` and binds it to a form field. */\nexport function BoundSwitchField(props: BoundSwitchFieldProps) {\n const {\n field,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n labelStyle = \"form\",\n disabled,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <Switch\n label={label}\n labelStyle={labelStyle}\n selected={field.value ?? false}\n onChange={(selected) => {\n onChange(selected);\n field.maybeAutoSave();\n }}\n disabled={disabled || field.readOnly}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Only } from \"src/Css\";\nimport { TextAreaField, TextAreaFieldProps } from \"src/inputs\";\nimport { TextFieldXss } from \"src/interfaces\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundTextAreaFieldProps<X> = Omit<TextAreaFieldProps<X>, \"value\" | \"onChange\" | \"label\"> & {\n // Make optional as it'll create a label from the field's key if not present\n label?: string;\n field: FieldState<string | null | undefined>;\n // Optional in case the page wants extra behavior\n onChange?: (value: string | undefined) => void;\n};\n\n/** Wraps `TextAreaField` and binds it to a form field. */\nexport function BoundTextAreaField<X extends Only<TextFieldXss, X>>(props: BoundTextAreaFieldProps<X>) {\n const {\n field,\n readOnly,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onFocus,\n onBlur,\n onEnter,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <TextAreaField\n label={label}\n value={field.value || undefined}\n onChange={onChange}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n onEnter={() => {\n maybeCall(onEnter);\n field.maybeAutoSave();\n }}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Only } from \"src/Css\";\nimport { TextField, TextFieldProps } from \"src/inputs\";\nimport { TextFieldXss } from \"src/interfaces\";\nimport { maybeCall, useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundTextFieldProps<X> = Omit<TextFieldProps<X>, \"value\" | \"onChange\" | \"label\"> & {\n // Make optional as it'll create a label from the field's key if not present\n label?: string;\n field: FieldState<string | null | undefined>;\n // Optional in case the page wants extra behavior\n onChange?: (value: string | undefined) => void;\n};\n\n/** Wraps `TextField` and binds it to a form field. */\nexport function BoundTextField<X extends Only<TextFieldXss, X>>(props: BoundTextFieldProps<X>) {\n const {\n field,\n readOnly,\n onBlur,\n onFocus,\n onChange = (value) => field.set(value),\n label = defaultLabel(field.key),\n onEnter,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <TextField\n label={label}\n value={field.value || undefined}\n onChange={onChange}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n onBlur={() => {\n maybeCall(onBlur);\n field.blur();\n }}\n onFocus={() => {\n maybeCall(onFocus);\n field.focus();\n }}\n onEnter={() => {\n maybeCall(onEnter);\n field.maybeAutoSave();\n }}\n {...testId}\n {...others}\n />\n )}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { ToggleChipGroup, ToggleChipGroupProps } from \"src/inputs\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\n\nexport type BoundToggleChipGroupFieldProps = Omit<ToggleChipGroupProps, \"values\" | \"onChange\" | \"label\"> & {\n field: FieldState<string[] | null | undefined>;\n /** Make optional so that callers can override if they want to. */\n onChange?: (values: string[]) => void;\n label?: string;\n};\n\n/** Wraps `ToggleChipGroup` and binds it to a form field. */\nexport function BoundToggleChipGroupField(props: BoundToggleChipGroupFieldProps) {\n const { field, onChange = (value) => field.set(value), label = defaultLabel(field.key), ...others } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => <ToggleChipGroup label={label} values={field.value || []} onChange={onChange} {...testId} {...others} />}\n </Observer>\n );\n}\n","import { FieldState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { TreeSelectField, TreeSelectFieldProps, Value } from \"src/inputs\";\nimport { TreeSelectResponse } from \"src/inputs/TreeSelectField/utils\";\nimport { HasIdAndName, Optional } from \"src/types\";\nimport { maybeCall } from \"src/utils\";\nimport { defaultLabel } from \"src/utils/defaultLabel\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\nexport type BoundTreeSelectFieldProps<O, V extends Value> = Omit<\n TreeSelectFieldProps<O, V>,\n \"values\" | \"onSelect\" | \"label\"\n> & {\n // Allow `onSelect` to be overridden to do more than just `field.set`.\n onSelect?: (options: TreeSelectResponse<O, V>) => void;\n field: FieldState<V[] | null | undefined>;\n label?: string;\n};\n\n/**\n * Wraps `TreeSelectField` and binds it to a form field.\n *\n * To ease integration with \"select this fooId\" inputs, we can take a list\n * of objects, `T` (i.e. `TradePartner[]`), but accept a field of type `V`\n * (i.e. `string`).\n *\n * The caller has to tell us how to turn `T` into `V`, which is usually a\n * lambda like `t => t.id`.\n */\nexport function BoundTreeSelectField<T, V extends Value>(props: BoundTreeSelectFieldProps<T, V>): JSX.Element;\nexport function BoundTreeSelectField<T extends HasIdAndName<V>, V extends Value>(\n props: Optional<BoundTreeSelectFieldProps<T, V>, \"getOptionLabel\" | \"getOptionValue\">,\n): JSX.Element;\nexport function BoundTreeSelectField<T extends object, V extends Value>(\n props: Optional<BoundTreeSelectFieldProps<T, V>, \"getOptionValue\" | \"getOptionLabel\">,\n): JSX.Element {\n const {\n field,\n options,\n readOnly,\n getOptionValue = (opt: T) => (opt as any).id, // if unset, assume O implements HasId\n getOptionLabel = (opt: T) => (opt as any).name, // if unset, assume O implements HasName\n onSelect = (options) => field.set(options.all.values),\n label = defaultLabel(field.key),\n onBlur,\n onFocus,\n ...others\n } = props;\n const testId = useTestIds(props, field.key);\n return (\n <Observer>\n {() => (\n <TreeSelectField<T, V>\n label={label}\n values={field.value ?? undefined}\n onSelect={(options) => {\n onSelect(options);\n field.maybeAutoSave();\n }}\n options={options}\n readOnly={readOnly ?? field.readOnly}\n errorMsg={field.touched ? field.errors.join(\" \") : undefined}\n required={field.required}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n onBlur={() => {\n field.blur();\n maybeCall(onBlur);\n }}\n onFocus={() => {\n field.focus();\n maybeCall(onFocus);\n }}\n {...others}\n {...testId}\n />\n )}\n </Observer>\n );\n}\n","import { Css, Margin, Xss } from \"src/Css\";\n\nexport interface FormHeadingProps {\n title: string;\n xss?: Xss<Margin>;\n // This is passed automatically by FormLines\n isFirst?: boolean;\n}\n\nexport function FormHeading(props: FormHeadingProps) {\n const { title, xss, isFirst = false, ...others } = props;\n return (\n <h3\n css={{\n ...Css.baseMd.$,\n // Add space before the heading, but only if it's not first.\n ...(!isFirst && Css.mt4.$),\n ...xss,\n }}\n {...others}\n >\n {title}\n </h3>\n );\n}\n\n// https://github.com/gaearon/react-hot-loader/issues/304#issuecomment-456569720\nFormHeading.isFormHeading = true;\n","import { Children, cloneElement, ReactNode } from \"react\";\nimport { useModal } from \"src/components\";\nimport { PresentationFieldProps, PresentationProvider } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\n\nexport type FormWidth =\n /** 320px. */\n | \"sm\"\n /** 480px, works well in a small, single-stack form. */\n | \"md\"\n /** 550px, works well for showing side-by-side/double-stack fields. */\n | \"lg\"\n /** 100%, works well for showing full width fields, or deferring to the parent width. */\n | \"full\";\n\nexport interface FormLinesProps\n extends Pick<PresentationFieldProps, \"labelStyle\" | \"labelLeftFieldWidth\" | \"labelSuffix\" | \"compact\"> {\n /** Let the user interleave group-less lines and grouped lines. */\n children: ReactNode;\n width?: FormWidth;\n /** Increment property (e.g. 1 = 8px). Defines space between form fields */\n gap?: number;\n}\n\n/**\n * Applies standard Form layout/size/spacing between lines.\n *\n * Lines can either be individual form fields, or a group of form fields\n * (see the `FieldGroup` component), where they will be laid out side-by-side.\n */\nexport function FormLines(props: FormLinesProps) {\n const { inModal } = useModal();\n const {\n children,\n width = inModal ? \"full\" : \"lg\",\n labelSuffix,\n labelStyle,\n compact,\n gap = 2,\n labelLeftFieldWidth,\n } = props;\n let firstFormHeading = true;\n\n // Only overwrite `fieldProps` if new values are explicitly set. Ensures we only set to `undefined` if explicitly set.\n const newFieldProps = {\n ...(\"labelSuffix\" in props ? { labelSuffix } : {}),\n ...(\"labelStyle\" in props ? { labelStyle } : {}),\n ...(\"compact\" in props ? { compact } : {}),\n ...(\"labelLeftFieldWidth\" in props ? { labelLeftFieldWidth } : {}),\n ...(width === \"full\" ? { fullWidth: true } : {}),\n };\n\n return (\n <PresentationProvider fieldProps={newFieldProps}>\n <div\n css={{\n // Note that we're purposefully not using display:flex so that our children's margins will collapse.\n ...Css.w(sizes[width]).$,\n // Purposefully use this instead of childGap3 to put margin-bottom on the last line\n \"& > *\": Css.mb(gap).$,\n }}\n >\n {Children.map(children, (child) => {\n if (child && typeof child === \"object\" && \"type\" in child && (child.type as any).isFormHeading) {\n const clone = cloneElement(child, { isFirst: firstFormHeading });\n firstFormHeading = false;\n return clone;\n } else {\n return child;\n }\n })}\n </div>\n </PresentationProvider>\n );\n}\n\n/** Draws a line between form lines. */\nexport function FormDivider() {\n return <div css={Css.hPx(1).my2.bgGray200.$} />;\n}\n\n/** Groups multiple fields side-by-side. */\nexport function FieldGroup(props: {\n /** The legend/title for this group. */\n title?: string;\n children: JSX.Element[];\n /** An array of widths for each child, if a number we use `fr` units. */\n widths?: Array<number | string>;\n}) {\n // TODO Actually use title\n const { title, children, widths = [] } = props;\n const gtc = children\n .map((_, i) => {\n const width = widths[i] || 1;\n return typeof width === `number` ? `${width}fr` : width;\n })\n .join(\" \");\n return <div css={Css.dg.gap2.gtc(gtc).$}>{children}</div>;\n}\n\nconst sizes: Record<FormWidth, string> = {\n full: \"100%\",\n lg: \"550px\",\n md: \"480px\",\n sm: \"320px\",\n};\n","import { useId } from \"@react-aria/utils\";\nimport { ReactNode } from \"react\";\nimport { PresentationFieldProps, usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css } from \"src/Css\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\nimport { useTestIds } from \"src/utils/useTestIds\";\n\ninterface StaticFieldProps {\n label: ReactNode;\n value?: string;\n children?: ReactNode;\n // Does not currently support \"inline\" or \"hidden\".\n labelStyle?: PresentationFieldProps[\"labelStyle\"];\n}\n\nexport function StaticField(props: StaticFieldProps) {\n const { fieldProps } = usePresentationContext();\n const { label, labelStyle = fieldProps?.labelStyle ?? \"above\", value, children } = props;\n const tid = useTestIds(props, typeof label === \"string\" ? defaultTestId(label) : \"staticField\");\n const id = useId();\n return (\n <div css={Css.if(labelStyle === \"left\").df.jcsb.maxw100.$} {...tid.container}>\n <label css={Css.db.sm.gray700.mbPx(4).$} htmlFor={id} {...tid.label}>\n {label}\n </label>\n <div id={id} css={Css.smMd.gray900.df.aic.if(labelStyle === \"left\").w50.$} {...tid}>\n {value || children}\n </div>\n </div>\n );\n}\n","import { ObjectState } from \"@homebound/form-state\";\nimport { Button, ButtonProps, useComputed } from \"src\";\n\nexport type SubmitButtonProps<T> = Omit<ButtonProps, \"label\"> & {\n label?: ButtonProps[\"label\"];\n form: ObjectState<T>;\n};\n\n/** Provides a Button that will auto-disable if `formState` is invalid. */\nexport function SubmitButton<T>(props: SubmitButtonProps<T>) {\n const { form, disabled, onClick, label = \"Submit\", ...others } = props;\n if (typeof onClick === \"string\") {\n throw new Error(\"SubmitButton.onClick doesn't support strings yet\");\n }\n // Enable the button whenever the form is dirty, even if the form is partially invalid,\n // because submitting will then force-touch all fields and show all errors instead of\n // just errors-so-far.\n const dirty = useComputed(() => form.dirty, [form]);\n return (\n <Button\n label={label}\n disabled={disabled || !dirty}\n onClick={(e) => {\n // canSave will touch any not-yet-keyed-in fields to show errors\n if (form.canSave()) {\n void onClick(e);\n }\n }}\n {...others}\n />\n );\n}\n"],"mappings":"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;AAAA;AAAA;AAAA,gEAIA;AAAA;AAAA;AAAA;AAAA;AAAA,gEAKA;AAAA;AAAA;AAAA;AAAA,gEAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBzC,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuT7B,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwM/B,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["px","Palette","Breakpoints","AutoSaveStatus","React","useRef","useState","jsx","useRef","useState","Fragment","jsx","jsxs","React","useContext","useMemo","jsx","jsx","jsxs","jsx","React","useEffect","useMemo","useRef","useState","Virtuoso","useMemo","makeAutoObservable","observable","reaction","React","camelCase","makeAutoObservable","makeAutoObservable","observable","useContext","useEffect","useState","useState","useEffect","useEffect","useMemo","useRef","useState","useState","useRef","useMemo","useEffect","useState","useState","useMemo","useCallback","value","useMemo","value","useEffect","useMemo","useQueryParams","useMemo","filter","useEffect","useCallback","useState","jsx","useContext","useContext","useRef","useComboBox","useOverlayPosition","Item","useComboBoxState","useRef","Fragment","jsx","jsxs","useRef","useMemo","useHover","useRef","jsx","jsx","useHover","useMemo","jsx","jsxs","format","jsx","jsxs","format","jsx","jsx","DayPicker","jsx","DayPicker","useEffect","useMemo","useRef","useState","useFilter","Fragment","jsx","jsxs","useRef","useState","mergeProps","useHover","jsx","React","jsx","jsxs","React","useCallback","useContext","useRef","Link","jsx","jsx","css","column","Link","useContext","useCallback","useMemo","useRef","useMemo","useState","useButton","useFocusRing","useHover","useRef","useMemo","useButton","useFocusRing","useHover","useState","jsx","jsxs","px","useState","jsx","useButton","useFocusRing","useHover","useMemo","useMemo","mergeProps","useButton","useFocusRing","useHover","Fragment","jsx","jsxs","useButton","useHover","useFocusRing","baseStyles","activeStyles","focusRingStyles","hoverStyles","disabledStyles","pressedStyles","useMemo","mergeProps","jsx","jsxs","useRef","Fragment","jsx","jsxs","useState","useButton","useFocusRing","useHover","baseStyles","hoverStyles","disabledStyles","pressedStyles","focusStyles","useMemo","jsx","jsxs","useRef","useMemo","column","useCallback","useCallback","useContext","jsx","jsxs","useContext","useCallback","useCallback","useEffect","useRef","useState","useDebouncedCallback","useRef","useState","useCallback","useEffect","data","useContext","useState","jsx","jsx","jsxs","column","useContext","useState","Fragment","jsx","jsxs","column","column","jsx","jsxs","useContext","sortFn","useDebouncedCallback","Fragment","jsx","useContext","useRef","useCallback","row","column","VisuallyHidden","Fragment","jsx","jsxs","VisuallyHidden","Fragment","jsx","jsxs","useState","useHover","mergeProps","jsx","useRef","jsx","jsxs","useState","useFilter","useMemo","items","useRef","useEffect","useRef","useHover","Link","useRef","useMenuTrigger","useMenuTriggerState","FocusScope","jsx","jsxs","FocusScope","jsx","useMenuTriggerState","useRef","useMenuTrigger","jsx","jsxs","Fragment","jsx","jsxs","useRef","useHover","Link","jsx","jsxs","useCallback","useEffect","useMemo","useRef","useState","useButton","useComboBox","useFilter","useOverlayPosition","Item","useComboBoxState","useMultipleSelectionState","useState","mergeProps","useCallback","React","useCallback","useContext","useEffect","useMemo","useRef","useState","useButton","useFilter","useOverlayPosition","Item","useEffect","useRef","useState","useSeparator","useRef","mergeProps","useHover","camelCase","useEffect","useMemo","useRef","useState","mergeProps","useButton","useFocus","useOverlayPosition","Item","Section","useEffect","useRef","useState","jsx","useRef","useState","useEffect","jsx","Fragment","jsx","jsxs","useRef","useMemo","useState","useFocus","useEffect","Section","Item","label","camelCase","useButton","useOverlayPosition","value","mergeProps","jsx","jsxs","useRef","useHover","mergeProps","useEffect","useRef","jsx","useRef","useHover","useOption","useRef","mergeProps","useFocusRing","useHover","VisuallyHidden","jsx","jsxs","useRef","useFocusRing","Tag","VisuallyHidden","mergeProps","baseStyles","useHover","jsx","jsxs","useRef","useHover","useOption","jsx","useRef","useEffect","Fragment","jsx","jsxs","useSeparator","jsx","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","useState","useEffect","useMemo","useContext","React","useFilter","useCallback","useRef","options","fieldState","setFieldState","Item","key","useButton","useOverlayPosition","jsx","useState","mergeProps","jsx","jsxs","useCallback","useMemo","useFilter","useState","selectedKeys","selectedOptions","useRef","Item","useComboBoxState","useMultipleSelectionState","useEffect","useComboBox","useButton","useOverlayPosition","current","Fragment","jsx","jsxs","Item","useComboBoxState","useRef","useComboBox","useOverlayPosition","useRef","jsx","useRef","useRef","jsx","jsxs","useRef","format","useState","jsx","useState","format","value","useCallback","useEffect","useRef","useState","FocusScope","useButton","useOverlayPosition","useTextField","format","Fragment","jsx","jsxs","format","useRef","useState","useTextField","useButton","useOverlayPosition","useEffect","useCallback","FocusScope","jsx","jsx","jsx","jsx","useMemo","useCheckbox","useHover","VisuallyHidden","useToggleState","jsx","jsxs","useHover","useToggleState","useCheckbox","useMemo","baseStyles","disabledStyles","VisuallyHidden","useState","jsx","jsxs","useState","jsx","useMemo","useRef","mergeProps","jsx","useMemo","useRef","value","mergeProps","Fragment","useMemo","useRef","useFocusRing","useHover","jsx","jsxs","useMemo","value","Fragment","useRef","useFocusRing","useHover","Global","useEffect","useMemo","useRef","useState","camelCase","useState","jsx","useState","defaultTestId","value","camelCase","jsx","jsxs","useState","useRef","useMemo","id","trixChange","e","onChange","editor","useEffect","Global","useMemo","jsx","useMemo","values","options","useRef","useFocusRing","useHover","VisuallyHidden","jsx","jsxs","useRef","useFocusRing","useHover","VisuallyHidden","useRef","mergeProps","useTextField","jsx","useRef","useTextField","mergeProps","useRef","mergeProps","useTextField","jsx","useRef","useTextField","mergeProps","useRef","useState","useFocusRing","useHover","useSwitch","VisuallyHidden","useToggleState","jsx","jsxs","useState","useToggleState","useRef","useSwitch","useFocusRing","useHover","VisuallyHidden","useRef","useCheckboxGroup","useCheckboxGroupItem","useFocusRing","VisuallyHidden","useCheckboxGroupState","jsx","jsxs","useCheckboxGroupState","useCheckboxGroup","ToggleChip","useRef","useCheckboxGroupItem","useFocusRing","VisuallyHidden","jsx","useContext","selected","jsx","sizes","column","makeAutoObservable","observable","autorun","reaction","reaction","autorun","makeAutoObservable","camelCase","column","reaction","reaction","rs","makeAutoObservable","observable","reaction","React","useMemo","useCallback","useRef","jsx","jsxs","useMemo","useRef","api","useState","useEffect","rows","keptSelectedRows","visibleDataRows","tableHeadRows","tooManyClientSideRows","Virtuoso","React","VirtualRoot","jsx","jsxs","jsx","useResizeObserver","useCallback","useEffect","useMemo","useRef","useState","useFocusRing","jsx","jsxs","useState","useFocusRing","useRef","useEffect","useCallback","useResizeObserver","useMemo","useState","Fragment","jsx","useState","useEffect","jsx","jsxs","useEffect","jsx","jsxs","variantStyles","createContext","useContext","useMemo","useRef","useResizeObserver","useCallback","useEffect","useRef","useState","FocusScope","OverlayContainer","useModal","useOverlay","createPortal","useEffect","useMemo","useRef","createContext","useContext","useMemo","jsx","useRef","useEffect","useMemo","canClose","Fragment","jsx","jsxs","useRef","useOverlay","useModal","useState","size","useResizeObserver","useCallback","useEffect","OverlayContainer","FocusScope","createPortal","createContext","useContext","useMemo","useState","jsx","jsxs","typeToIcon","jsx","jsx","jsxs","createContext","useState","useMemo","useContext","Global","useEffect","useRef","createPortal","SuperDrawerWidth","Fragment","jsx","jsxs","createElement","useRef","useEffect","createPortal","Global","createContext","useContext","useEffect","useMemo","useRef","useState","jsx","jsxs","createContext","Tag","useMemo","useState","useRef","useEffect","useContext","jsx","React","useCallback","useContext","useMemo","useState","jsx","AnimatePresence","motion","useEffect","Fragment","jsx","jsxs","useEffect","AnimatePresence","motion","useEffect","createPortal","Fragment","jsx","useEffect","createPortal","createContext","useCallback","useContext","useMemo","useState","jsx","jsx","jsxs","createContext","useRef","useMemo","useContext","useRef","useMenuTrigger","useMenuTriggerState","jsx","useMenuTriggerState","useRef","useMenuTrigger","useRef","useButton","useFocusRing","useHover","jsx","jsxs","sizeStyles","useRef","useButton","useFocusRing","useHover","getButtonStyles","pressedStyles","hoverStyles","iconStyles","useRef","useMenuTrigger","useMenuTriggerState","jsx","useMenuTriggerState","useRef","useMenuTrigger","jsx","equal","useCallback","useRef","createContext","useContext","jsx","useRef","useCallback","equal","mergeProps","useFocusRing","useHover","jsx","useFocusRing","useHover","iconButtonNormal","iconButtonCompact","mergeProps","useMemo","useMemo","cloneElement","jsx","jsxs","cloneElement","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsx","value","Fragment","jsx","jsxs","jsx","value","jsx","jsx","value","jsx","useState","useEffect","jsx","useEffect","Fragment","jsx","jsxs","useState","useMemo","jsx","jsxs","useMemo","jsx","jsx","jsx","useMemo","useMemo","_","React","useContext","useMemo","jsx","jsxs","useContext","useMemo","React","jsx","sizeToPixels","useLayoutEffect","useResizeObserver","useCallback","useEffect","useRef","useState","jsx","jsxs","useRef","useState","useLayoutEffect","useEffect","useCallback","useResizeObserver","jsx","jsxs","useResizeObserver","useCallback","useMemo","useRef","useState","jsx","jsxs","useState","useRef","useMemo","startShadowStyles","endShadowStyles","useCallback","useResizeObserver","useCallback","useEffect","useCallback","useEffect","useRef","useButton","useFocusRing","useHover","jsx","jsxs","useRef","useButton","useFocusRing","useHover","focusRingStyles","createPortal","jsx","jsxs","createPortal","Fragment","jsx","jsxs","motion","useMemo","jsx","useMemo","Fragment","jsx","jsxs","children","motion","camelCase","useEffect","useMemo","useRef","useState","mergeProps","useFocusRing","useHover","Link","Fragment","jsx","jsxs","useFocusRing","useState","useRef","useEffect","useHover","baseStyles","activeStyles","focusRingStyles","hoverStyles","disabledStyles","useMemo","mergeProps","Link","camelCase","useResizeObserver","useRef","useState","jsx","jsxs","typeStyles","useState","useRef","useResizeObserver","Fragment","jsx","useCallback","useCallback","jsx","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","useCallback","useMemo","useState","mergeProps","jsx","jsxs","useState","useMemo","useCallback","mergeProps","label","jsx","Observer","Observer","jsx","Observer","options","Observer","jsx","Observer","options","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","jsx","jsxs","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","options","Observer","jsx","cloneElement","jsx","cloneElement","widths","useId","jsx","jsxs","useId","jsx"]}
|