@homebound/beam 3.0.0-alpha.2 → 3.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZPT2ZR5B.js → chunk-CDR3ZVBW.jsx} +0 -1
- package/dist/index.cjs +4745 -5088
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -9
- package/dist/index.d.ts +11 -9
- package/dist/{index.js → index.jsx} +4574 -4919
- package/dist/utils/{rtlUtils.js → rtlUtils.jsx} +1 -2
- package/package.json +5 -5
- package/dist/chunk-ZPT2ZR5B.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/utils/rtlUtils.js.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Css.ts","../src/components/AutoSaveStatus/AutoSaveStatusProvider.tsx","../src/components/AutoSaveStatus/useAutoSaveStatus.ts","../src/components/Chip.tsx","../src/components/Icon.tsx","../src/components/Tooltip.tsx","../src/components/PresentationContext.tsx","../src/components/Chips.tsx","../src/components/Table/GridTable.tsx","../src/components/Loader.tsx","../src/components/Table/GridTableApi.ts","../src/components/Table/types.ts","../src/components/Table/utils/GridRowLookup.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/components/IconButton.tsx","../src/hooks/useGetRef.ts","../src/utils/getInteractiveElement.tsx","../src/components/Table/components/ExpandableHeader.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/SortHeader.tsx","../src/components/Table/utils/utils.tsx","../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/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/ColumnResizeHandle.tsx","../src/components/Layout/ScrollableParent.tsx","../src/components/Table/components/KeptGroupRow.tsx","../src/components/Table/TableStyles.tsx","../src/components/Table/utils/RowState.ts","../src/components/Table/utils/sortRows.ts","../src/components/Table/components/Row.css.ts","../src/forms/labelUtils.ts","../src/inputs/ErrorMessage.tsx","../src/inputs/utils.ts","../src/components/internal/MenuItem.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/AvatarButton.tsx","../src/components/ButtonModal.tsx","../src/components/internal/OverlayTrigger.tsx","../src/components/Button.tsx","../src/components/NavLink.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/components/Table/hooks/useColumnResizeHandlers.ts","../src/components/Table/hooks/useScrollStorage.ts","../src/components/Table/hooks/useSetupColumnSizes.ts","../src/components/Table/hooks/useColumnResizing.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/FormPageLayout.tsx","../src/forms/BoundCheckboxField.tsx","../src/utils/defaultLabel.ts","../src/forms/BoundCheckboxGroupField.tsx","../src/forms/BoundChipSelectField.tsx","../src/forms/BoundDateField.tsx","../src/forms/BoundDateRangeField.tsx","../src/forms/BoundForm.tsx","../src/forms/BoundIconCardField.tsx","../src/forms/BoundIconCardGroupField.tsx","../src/inputs/IconCardGroup.tsx","../src/forms/BoundListField.tsx","../src/forms/BoundMultiLineSelectField.tsx","../src/forms/BoundMultiSelectField.tsx","../src/forms/BoundNumberField.tsx","../src/forms/BoundRadioGroupField.tsx","../src/forms/BoundRichTextField.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/FormLines.tsx","../src/components/internal/CompoundField.tsx","../src/forms/BoundSelectAndTextField.tsx","../src/forms/FormHeading.tsx","../src/forms/StaticField.tsx","../src/forms/SubmitButton.tsx","../src/components/RightSidebar.tsx","../src/components/Toast/ToastContext.tsx","../src/components/Toast/Toast.tsx","../src/components/Layout/PageHeaderBreadcrumbs.tsx","../src/components/Layout/FullBleed.tsx","../src/components/Layout/GridTableLayout/GridTableLayout.tsx","../src/components/ButtonMenu.tsx","../src/components/Filters/FilterDropdownMenu.tsx","../src/components/CountBadge.tsx","../src/components/Filters/BaseFilter.ts","../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/Pagination.tsx","../src/components/Table/components/EditColumnsButton.tsx","../src/components/Table/TableActions.tsx","../src/components/Layout/ScrollableContent.tsx","../src/components/Layout/GridTableLayout/QueryTable.tsx","../src/components/LoadingSkeleton.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/ButtonDatePicker.tsx","../src/components/ButtonGroup.tsx","../src/components/Card.tsx","../src/components/Tag.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/components/Grid/ResponsiveGrid.tsx","../src/components/Grid/utils.ts","../src/components/Grid/ResponsiveGridItem.tsx","../src/components/Grid/useResponsiveGrid.ts","../src/components/Grid/useResponsiveGridItem.ts","../src/components/HbLoadingSpinner.tsx","../src/components/HbLoadingSpinner.base64.ts","../src/components/MaxLines.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/Table/utils/simpleHelpers.ts","../src/components/Table/utils/visitor.ts","../src/components/Tabs.tsx","../src/components/Toast/useToast.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// Target: native (build-time plugin)\n\nimport { trussProps } from \"@homebound/truss/runtime\";\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\n/** A marker token used with `when`/`markerOf` etc. */\nexport type Marker = symbol;\n\nexport type Typography = \"xs2\" | \"xs2Sb\" | \"xs\" | \"xsSb\" | \"sm\" | \"smSb\" | \"md\" | \"mdSb\" | \"lg\" | \"xl\" | \"xl2\";\n\n// Augment React types so JSX elements accept the `css` prop\ndeclare module \"react\" {\n interface HTMLAttributes<T> {\n css?: Properties;\n }\n interface SVGAttributes<T> {\n css?: Properties;\n }\n}\n\ntype Opts<T> = { rules: T; enabled: boolean; selector: string | undefined; elseApplied: boolean };\n\nclass CssBuilder<T extends Properties> {\n constructor(private opts: Opts<T>) {}\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 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 xs2() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"10px\").add(\"lineHeight\", \"14px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"10px\"; lineHeight: \"14px\"`. */\n get xs2Sb() {\n return this.add(\"fontWeight\", 600).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: 600; fontSize: \"12px\"; lineHeight: \"16px\"`. */\n get xsSb() {\n return this.add(\"fontWeight\", 600).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: 600; fontSize: \"14px\"; lineHeight: \"20px\"`. */\n get smSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\");\n }\n /** Sets `fontWeight: 400; fontSize: \"16px\"; lineHeight: \"24px\"`. */\n get md() {\n return this.add(\"fontWeight\", 400).add(\"fontSize\", \"16px\").add(\"lineHeight\", \"24px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"16px\"; lineHeight: \"24px\"`. */\n get mdSb() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"16px\").add(\"lineHeight\", \"24px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"18px\"; lineHeight: \"28px\"`. */\n get lg() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"18px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"20px\"; lineHeight: \"28px\"`. */\n get xl() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"20px\").add(\"lineHeight\", \"28px\");\n }\n /** Sets `fontWeight: 600; fontSize: \"30px\"; lineHeight: \"36px\"`. */\n get xl2() {\n return this.add(\"fontWeight\", 600).add(\"fontSize\", \"30px\").add(\"lineHeight\", \"36px\");\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: 600; fontSize: \"14px\"; lineHeight: \"20px\"; outline: 0; borderRadius: \"8px\"; 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\", 600).add(\"fontSize\", \"14px\").add(\"lineHeight\", \"20px\").add(\"outline\", 0).add(\n \"borderRadius\",\n \"8px\",\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: \"none\"; 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\", \"none\")\n .add(\"border\", 0).add(\"height\", \"1px\").add(\"margin\", \"-1px\").add(\"width\", \"1px\").add(\"padding\", 0).add(\n \"whiteSpace\",\n \"nowrap\",\n ).add(\"opacity\", 0);\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 this.rules as any;\n }\n\n get onHover() {\n return this.newCss({ selector: \":hover\" });\n }\n get onFocus() {\n return this.newCss({ selector: \":focus\" });\n }\n get onFocusVisible() {\n return this.newCss({ selector: \":focus-visible\" });\n }\n get onFocusWithin() {\n return this.newCss({ selector: \":focus-within\" });\n }\n get onActive() {\n return this.newCss({ selector: \":active\" });\n }\n get onDisabled() {\n return this.newCss({ selector: \":disabled\" });\n }\n\n /** Marks this element as a default hover marker (for ancestor pseudo selectors). */\n get marker(): CssBuilder<T> {\n return this;\n }\n\n /** Marks this element with a user-defined marker. */\n markerOf(_marker: Marker): CssBuilder<T> {\n return this;\n }\n\n /** Creates a marker token for use with markerOf() and when(). */\n newMarker(): Marker {\n return Symbol(\"truss-marker\");\n }\n\n typography(key: Typography): CssBuilder<T> {\n return (this as any)[key];\n }\n\n /**\n * Styles after this `when` are applied based on a relationship + pseudo selector.\n *\n * `when(\"ancestor\", \":hover\")` — react to ancestor hover\n * `when(\"descendant\", \":focus\")` — react to descendant focus\n * `when(\"siblingAfter\", \":hover\")` — react to a following sibling's hover\n */\n when(\n relationship: \"ancestor\" | \"descendant\" | \"anySibling\" | \"siblingBefore\" | \"siblingAfter\",\n pseudo: string,\n ): CssBuilder<T>;\n /**\n * Styles after this `when` are applied based on a relationship-to-marker + pseudo selector.\n *\n * `when(\"ancestor\", marker, \":hover\")` — react to a specific ancestor's hover\n */\n when(\n relationship: \"ancestor\" | \"descendant\" | \"anySibling\" | \"siblingBefore\" | \"siblingAfter\",\n marker: Marker,\n pseudo: string,\n ): CssBuilder<T>;\n when(_relationship: string, _pseudoOrMarker: string | Marker, _pseudo?: string): CssBuilder<T> {\n return this;\n }\n\n ifContainer(_props: { name?: string; lt?: number; gt?: number }) {\n return this;\n }\n\n /** Apply styles within a pseudo-element (e.g. `\"::placeholder\"`, `\"::selection\"`). */\n element(_pseudoElement: string): CssBuilder<T> {\n return this;\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 /** Conditionally apply styles when `cond` is true. */\n if(cond: boolean): CssBuilder<T>;\n /** Apply styles within a media query (e.g. `Breakpoints.sm` or a raw `@media` string). */\n if(mediaQuery: string): CssBuilder<T>;\n if(condOrMediaQuery: boolean | string): CssBuilder<T> {\n if (typeof condOrMediaQuery === \"boolean\") {\n return new CssBuilder({ ...this.opts, enabled: condOrMediaQuery, elseApplied: false });\n }\n return this.newCss({ selector: condOrMediaQuery, elseApplied: false });\n }\n\n get else(): CssBuilder<T> {\n if (this.selector !== undefined) {\n if (this.opts.elseApplied) {\n throw new Error(\"else was already called\");\n }\n return this.newCss({ selector: invertMediaQuery(this.selector), elseApplied: true });\n }\n if (this.opts.elseApplied) {\n throw new Error(\"else was already called\");\n }\n return new CssBuilder({ ...this.opts, enabled: !this.enabled, elseApplied: true });\n }\n\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>(propOrStyles: K | Properties, value?: Properties[K]): CssBuilder<any> {\n if (!this.enabled) {\n return this;\n }\n\n const newRules = typeof propOrStyles === \"string\" ? { [propOrStyles]: value } : propOrStyles;\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 /** Inline a partial style hash, skipping any undefined values. */\n addCss<P extends Properties>(props: P): CssBuilder<T & P> {\n return this.add(omitUndefinedValues(props));\n }\n\n /** Convert a style hash into `{ className, style }` props for manual spreading into non-`css=` contexts. */\n props(styles: Properties): Record<string, unknown> {\n return trussProps(styles as any);\n }\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\n/** Converts `inc` into pixels value with a `px` suffix. */\nexport function maybeInc(inc: number | string): string {\n return typeof inc === \"string\" ? inc : `${inc * 8}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\nfunction omitUndefinedValues<T extends object>(value: T): T {\n const entries = Object.entries(value).filter(function ([, entryValue]) {\n return entryValue !== undefined;\n });\n return Object.fromEntries(entries) as T;\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, selector: undefined, elseApplied: false });\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\nfunction invertMediaQuery(query: string): string {\n const screenPrefix = \"@media screen and \";\n if (query.startsWith(screenPrefix)) {\n const conditions = query.slice(screenPrefix.length).trim();\n const rangeMatch = conditions.match(/^(min-width: (d+)px) and (max-width: (d+)px)$/);\n if (rangeMatch) {\n const min = Number(rangeMatch[1]);\n const max = Number(rangeMatch[2]);\n return `@media screen and (max-width: ${min - 1}px), screen and (min-width: ${max + 1}px)`;\n }\n const minMatch = conditions.match(/^(min-width: (d+)px)$/);\n if (minMatch) {\n return `@media screen and (max-width: ${Number(minMatch[1]) - 1}px)`;\n }\n const maxMatch = conditions.match(/^(max-width: (d+)px)$/);\n if (maxMatch) {\n return `@media screen and (min-width: ${Number(maxMatch[1]) + 1}px)`;\n }\n }\n return query.replace(\"@media\", \"@media not\");\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 { ReactNode, useMemo } 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 // Defaults to \"neutral\"\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>>(props: ChipProps<X>) {\n const { fieldProps } = usePresentationContext();\n const { text, title, xss = {}, compact = fieldProps?.compact, icon, type = ChipTypes.neutral } = props;\n const tid = useTestIds(props, \"chip\");\n\n const styles = useMemo(\n () => ({\n ...chipBaseStyles(compact),\n ...typeStyles[type],\n ...xss,\n }),\n [type, xss, compact],\n );\n\n return maybeTooltip({\n title,\n placement: \"bottom\",\n children: (\n <span css={styles} {...tid}>\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.bgRed100.$,\n success: Css.bgGreen100.$,\n light: Css.bgWhite.$,\n dark: Css.bgGray900.white.$,\n neutral: Css.bgGray200.$,\n darkMode: Css.bgGray700.white.$,\n info: Css.bgBlue100.$,\n};\n\nexport const chipBaseStyles = (compact?: boolean) =>\n Css.xsSb.dif.aic.br16.px1.gapPx(4).pyPx(pyHeight(compact)).mhPx(minhPx(compact)).gray900.bgGray200.$;\n\nconst pyHeight = (compact?: boolean) => (compact ? 2 : 4);\nconst minhPx = (compact?: boolean) => (compact ? 20 : 24);\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 ...Css.fill(color).$,\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 history: (\n <>\n <path d=\"M12 8V13H17V11H14V8H12Z\" />\n <path d=\"M21.292 8.49699C21.066 7.96199 20.787 7.44699 20.463 6.96799C20.141 6.48999 19.772 6.04199 19.364 5.63499C18.956 5.22799 18.51 4.85999 18.032 4.53699C17.55 4.21099 17.035 3.93299 16.504 3.70799C15.959 3.47799 15.39 3.30099 14.814 3.18299C13.633 2.93999 12.37 2.93899 11.188 3.18299C10.609 3.30099 10.041 3.47799 9.498 3.70699C8.967 3.93199 8.453 4.20999 7.969 4.53699C7.492 4.85899 7.043 5.22899 6.636 5.63599C6.229 6.04299 5.859 6.49199 5.537 6.96799C5.211 7.45199 4.932 7.96599 4.708 8.49599C4.478 9.03999 4.301 9.60899 4.183 10.186C4.062 10.778 4 11.388 4 12C4 12.008 4.001 12.017 4.001 12.025H2L5 16L8 12.025H6.001C6.001 12.017 6 12.008 6 12C6 11.523 6.048 11.048 6.142 10.588C6.234 10.139 6.371 9.69799 6.55 9.27499C6.724 8.86299 6.941 8.46199 7.195 8.08699C7.445 7.71599 7.733 7.36799 8.05 7.04999C8.367 6.73199 8.716 6.44499 9.086 6.19499C9.462 5.94099 9.863 5.72399 10.276 5.54899C10.697 5.36999 11.139 5.23299 11.589 5.14099C12.508 4.95199 13.493 4.95299 14.412 5.14099C14.859 5.23299 15.302 5.36999 15.725 5.54899C16.138 5.72299 16.538 5.94099 16.913 6.19299C17.283 6.44399 17.633 6.73199 17.95 7.04899C18.267 7.36499 18.554 7.71399 18.805 8.08599C19.057 8.45799 19.274 8.85799 19.45 9.27499C19.628 9.69199 19.764 10.133 19.858 10.586C19.952 11.049 20 11.524 20 12C20 12.476 19.952 12.951 19.858 13.41C19.764 13.865 19.628 14.306 19.45 14.724C19.274 15.14 19.057 15.539 18.804 15.913C18.554 16.284 18.267 16.633 17.95 16.949C17.633 17.266 17.283 17.554 16.914 17.804C16.538 18.057 16.139 18.275 15.725 18.45C15.302 18.629 14.86 18.766 14.412 18.858C13.494 19.046 12.51 19.047 11.589 18.858C11.14 18.766 10.699 18.629 10.276 18.45C9.864 18.276 9.463 18.059 9.088 17.805C8.717 17.555 8.369 17.267 8.051 16.95L6.637 18.364C7.044 18.772 7.492 19.141 7.969 19.463C8.452 19.789 8.967 20.068 9.497 20.292C10.041 20.522 10.61 20.699 11.187 20.817C11.778 20.938 12.388 21 13 21C13.612 21 14.223 20.938 14.813 20.817C15.39 20.699 15.959 20.523 16.503 20.293C17.035 20.068 17.55 19.789 18.034 19.462C18.51 19.14 18.957 18.771 19.364 18.364C19.771 17.957 20.14 17.509 20.462 17.033C20.787 16.553 21.066 16.038 21.292 15.504C21.52 14.966 21.697 14.398 21.817 13.812C21.938 13.22 22 12.61 22 12C22 11.39 21.938 10.78 21.817 10.186C21.697 9.60199 21.52 9.03399 21.292 8.49699Z\" />\n </>\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 mapGlobe: (\n <>\n <path d=\"M11.2129 4.40332C15.9783 5.07921 19.6435 9.17389 19.6436 14.126C19.6431 19.5499 15.2462 23.947 9.82227 23.9473C4.3981 23.9472 0.000449837 19.5501 0 14.126C3.26246e-05 10.6909 1.76449 7.66868 4.43555 5.91309C4.97787 6.78284 5.68212 7.68751 6.30469 8.51758C6.57225 8.87427 6.99356 9.08496 7.43945 9.08496C7.88503 9.08471 8.30486 8.87402 8.57227 8.51758C9.21495 7.66068 9.94538 6.72456 10.4941 5.8291C10.7611 5.39343 11.0192 4.91418 11.2129 4.40332ZM14.3027 7.0166C13.8528 7.73139 12.83 9.0382 11.0723 9.63965C10.8471 9.7169 10.7432 9.97543 10.8604 10.1826C11.0865 10.5819 11.305 11.189 10.8447 11.5693C10.2541 12.0571 9.37351 11.5528 8.76953 11.0879C8.51057 10.8886 8.1518 10.8734 7.88672 11.0645C7.86681 11.0788 7.84593 11.0932 7.82617 11.1084C7.49446 11.3634 7.44111 11.8425 7.70996 12.1631C8.1235 12.6557 8.87333 13.4496 9.50391 13.5801C10.4292 13.7711 10.7487 12.7181 11.6104 12.8457C12.4723 12.9735 14.0048 14.4739 14.1963 15.1123C14.3826 15.7368 13.1573 19.0388 10.3711 20.9766C10.2286 21.0755 10.0473 21.1088 9.87988 21.0635C9.63936 20.9981 9.29646 20.8479 9.04688 20.5068C8.94232 20.3639 8.91805 20.1754 8.96582 20.0049L9.25195 18.9863C9.35297 18.6262 9.25585 18.2408 8.99414 17.9736C8.65757 17.6303 8.09552 17.1051 7.23633 16.4385C6.88701 16.1675 6.71436 15.7269 6.79395 15.292L6.92969 14.5488C6.98123 14.267 6.87985 13.9801 6.66211 13.7939C5.81469 13.07 3.69178 11.2062 3.18359 10.292C3.0117 9.98259 2.96659 9.60824 2.99316 9.22656C2.00188 10.606 1.41701 12.2977 1.41699 14.126C1.41744 18.7676 5.18055 22.5302 9.82227 22.5303C14.4638 22.53 18.2261 18.7674 18.2266 14.126C18.2265 11.132 16.6597 8.50549 14.3027 7.0166ZM9.71387 4.30566C9.21389 5.35966 8.32771 6.48364 7.43945 7.66797C6.80362 6.82019 6.1675 6.00374 5.67383 5.22168C6.90351 4.64774 8.27105 4.32127 9.71387 4.30566Z\" />\n <path d=\"M7.43848 0.0527344C8.92278 0.0527344 10.1259 1.25595 10.126 2.74023C10.126 4.22459 8.78231 5.87619 7.43848 7.66797C6.09464 5.87619 4.75098 4.22459 4.75098 2.74023C4.75107 1.25601 5.95425 0.0528239 7.43848 0.0527344ZM7.4375 1.84473C6.94279 1.84478 6.54203 2.24552 6.54199 2.74023C6.54199 3.23499 6.94276 3.63569 7.4375 3.63574C7.93229 3.63574 8.33301 3.23502 8.33301 2.74023C8.33296 2.24549 7.93226 1.84473 7.4375 1.84473Z\" />\n </>\n ),\n buildings: (\n <>\n <path d=\"M14.1787 3.58594V23.6494H0V3.60449L7.08887 0.347656L14.1787 3.58594ZM3.42285 20.2275H5.86719V17.7832H3.42285V20.2275ZM8.31348 17.7832V20.2275H10.7578V17.7832H8.31348ZM3.42285 16.3174H5.86719V13.873H3.42285V16.3174ZM8.31348 16.3174H10.7578V13.873H8.31348V16.3174ZM3.42285 12.4062H5.86719V9.96191H3.42285V12.4062ZM8.31348 12.4062H10.7578V9.96191H8.31348V12.4062ZM3.42285 8.49414H5.86719V6.0498H3.42285V8.49414ZM8.31348 8.49414H10.7578V6.0498H8.31348V8.49414Z\" />\n <path d=\"M22 23.6523H15.6445V8.00684H22V23.6523ZM17.5996 18.7617V21.2061H20.0439V18.7617H17.5996ZM17.5996 17.2959H20.0439V14.8516H17.5996V17.2959ZM17.5996 13.3828H20.0439V10.9385H17.5996V13.3828Z\" />\n </>\n ),\n community: (\n <>\n <path d=\"M6.41018 0.520509C6.61589 0.334405 6.93017 0.334214 7.13576 0.520509L11.1797 4.20899C11.1553 4.22924 11.1302 4.24904 11.1065 4.27051L11.1016 4.27539L7.85549 7.23535V6.22266H5.69045V8.96289C5.69045 9.2644 5.44619 9.51172 5.14846 9.51172H3.52444C3.22683 9.51157 2.98342 9.26431 2.98342 8.96289V5.12598H2.0635C1.81449 5.12598 1.70074 4.8129 1.88479 4.64844L6.41018 0.520509ZM10.5615 8.96289C10.5615 9.2644 10.3183 9.51172 10.0205 9.51172H8.39651C8.24437 9.51169 8.10738 9.44603 8.00881 9.34277L10.5615 7.01465V8.96289Z\" />\n <path d=\"M17.1572 9.34291C17.0587 9.44563 16.9212 9.5099 16.7695 9.5099H15.1465C14.8488 9.5099 14.6045 9.26356 14.6045 8.96205V7.01283L17.1572 9.34291ZM18.0312 0.519664C18.237 0.333296 18.5511 0.333282 18.7568 0.519664L23.2822 4.64759C23.4717 4.81205 23.3525 5.12509 23.1035 5.12513H22.1836V8.96205C22.1836 9.26356 21.9393 9.5099 21.6416 9.5099H20.0176C19.72 9.5097 19.4766 9.26344 19.4766 8.96205V6.22084H17.3115V7.23451L14.0654 4.27455L14.0615 4.26966L13.9873 4.20814L18.0312 0.519664Z\" />\n <path d=\"M11.4999 23.0724V20.3314H13.6652V23.0724C13.6652 23.3739 13.9087 23.6206 14.2065 23.6206H15.8304C16.1282 23.6206 16.3718 23.3739 16.3718 23.0724V19.235H17.292C17.541 19.235 17.6601 18.9225 17.4706 18.758L12.9452 14.63C12.7395 14.4436 12.4255 14.4436 12.2198 14.63L7.69438 18.758C7.51033 18.9225 7.62401 19.235 7.87301 19.235H8.79326V23.0724C8.79326 23.3739 9.03685 23.6206 9.33458 23.6206H10.9585C11.2563 23.6206 11.4999 23.3739 11.4999 23.0724Z\" />\n <path d=\"M5.58006 11.3107C5.78576 11.1243 6.09994 11.1243 6.30564 11.3107L9.85057 14.5441L7.02537 17.1232V17.0119H4.86033V19.7531C4.86025 20.0544 4.6168 20.3007 4.31932 20.3009H2.69529C2.39761 20.3009 2.15338 20.0545 2.1533 19.7531V15.9152H1.23338C0.984396 15.9152 0.870698 15.6031 1.05467 15.4386L5.58006 11.3107ZM9.7324 19.7531C9.73232 20.0545 9.48809 20.3009 9.19041 20.3009H8.79393V19.2355H7.87303L7.78709 19.2208C7.6013 19.1588 7.53481 18.9029 7.69529 18.7589L9.7324 16.9005V19.7531Z\" />\n <path d=\"M19.6914 11.3107C19.8971 11.1243 20.2113 11.1243 20.417 11.3107L24.9424 15.4386C25.1317 15.6031 25.0126 15.9151 24.7637 15.9152H23.8438V19.7531C23.8437 20.0546 23.5995 20.3009 23.3018 20.3009H21.6777C21.3802 20.3008 21.1367 20.0545 21.1367 19.7531V17.0119H18.9717V17.9953C18.8742 17.8308 18.7485 17.6744 18.5908 17.5324L15.7305 14.924L19.6914 11.3107ZM17.4707 18.7599C17.6361 18.9038 17.5666 19.1596 17.3799 19.2218L17.292 19.2365H16.373V20.0773C16.3062 19.9861 16.2647 19.8747 16.2646 19.7531V17.6583L17.4707 18.7599Z\" />\n <path d=\"M9.79104 14.4903H9.33498C9.03726 14.4903 8.79299 14.244 8.79299 13.9425V13.5792L9.79104 14.4903ZM12.2197 5.50009C12.4254 5.31377 12.7397 5.31377 12.9453 5.50009L17.4707 9.62802C17.6602 9.79248 17.541 10.1046 17.292 10.1046H16.3721V12.0899L14.0469 14.212C13.9882 14.2653 13.934 14.3213 13.8838 14.379C13.7522 14.2788 13.6651 14.1211 13.6651 13.9425V11.2013H11.5V13.8009L8.79299 11.3321V10.1046H7.87307C7.62406 10.1046 7.51031 9.79248 7.69436 9.62802L12.2197 5.50009Z\" />\n </>\n ),\n subdivision: (\n <>\n <path d=\"M11.6839 19.3029V16.1255H14.3134V19.3029C14.3134 19.6524 14.6092 19.9384 14.9708 19.9384H16.9429C17.3045 19.9384 17.6003 19.6524 17.6003 19.3029V14.8546H18.7178C19.0202 14.8546 19.1648 14.4923 18.9348 14.3017L13.4391 9.51654C13.1893 9.30048 12.808 9.30048 12.5582 9.51654L7.06249 14.3017C6.83898 14.4923 6.97703 14.8546 7.27943 14.8546H8.39697V19.3029C8.39697 19.6524 8.69279 19.9384 9.05435 19.9384H11.0265C11.388 19.9384 11.6839 19.6524 11.6839 19.3029Z\" />\n <path d=\"M18.1924 13.6522V14.0096C18.1924 14.3591 17.9151 14.6454 17.5762 14.6454H15.7275C15.3886 14.6453 15.1113 14.3591 15.1113 14.0096V10.9705L18.1924 13.6522ZM19.0127 4.22348C19.2468 4.00753 19.6037 4.00755 19.8379 4.22348L24.9902 9.00863C25.2059 9.19927 25.0706 9.56134 24.7871 9.56137H23.7393V14.0096C23.7393 14.3591 23.462 14.6454 23.123 14.6454H21.2744C20.9355 14.6454 20.6582 14.3591 20.6582 14.0096V10.8319H18.1924V11.6473L14.4893 8.42367L19.0127 4.22348Z\" />\n <path d=\"M6.51074 4.22342C6.76055 4.00765 7.14191 4.00746 7.3916 4.22342L11.8965 8.14628C11.7871 8.21111 11.6819 8.28632 11.583 8.37186L11.5791 8.37479L8.26562 11.2586V10.8328H5.63574V13.7146C5.5094 13.9545 5.44783 14.2082 5.4414 14.4598C5.32235 14.5742 5.15865 14.6453 4.97851 14.6453H3.00683C2.64527 14.6453 2.34863 14.3591 2.34863 14.0096V9.56131H1.23144C0.929131 9.56122 0.791165 9.1992 1.01464 9.00858L6.51074 4.22342ZM11.5527 14.0096C11.5527 14.3589 11.2568 14.6451 10.8955 14.6453H8.92285C8.56131 14.6453 8.26562 14.3591 8.26562 14.0096V13.2644L11.5527 10.4031V14.0096ZM12.9775 9.35624C12.9324 9.47072 12.8212 9.56131 12.6699 9.56131H12.5205L12.5723 9.51639C12.6879 9.41638 12.8318 9.36363 12.9775 9.35624Z\" />\n </>\n ),\n lot: (\n <>\n <path d=\"M1.28481 17.9291C1.68761 18.0252 1.93583 18.4306 1.83991 18.8335L1.68148 19.4996H2.36957C2.78374 19.4997 3.11896 19.836 3.11896 20.2501C3.11871 20.6641 2.78359 20.9995 2.36957 20.9995H1.68148C0.712759 20.9995 -0.00204962 20.095 0.222017 19.1527L0.381609 18.4854C0.47768 18.0826 0.881956 17.8332 1.28481 17.9291ZM6.49699 19.4996L6.64849 19.5146C6.99008 19.5847 7.24638 19.8878 7.24638 20.2501C7.24616 20.6122 6.98991 20.9144 6.64849 20.9845L6.49699 20.9995H5.1208C4.70687 20.9994 4.37166 20.664 4.37141 20.2501C4.37141 19.836 4.70672 19.4997 5.1208 19.4996H6.49699ZM10.6244 19.4996C11.0386 19.4996 11.3738 19.8359 11.3738 20.2501C11.3736 20.6641 11.0384 20.9995 10.6244 20.9995H9.24822C8.8343 20.9994 8.49909 20.664 8.49883 20.2501C8.49883 19.836 8.83415 19.4998 9.24822 19.4996H10.6244ZM14.7518 19.4996C15.166 19.4996 15.5012 19.8359 15.5012 20.2501C15.501 20.6641 15.1659 20.9995 14.7518 20.9995H13.3756C12.9617 20.9994 12.6265 20.664 12.6263 20.2501C12.6263 19.836 12.9616 19.4998 13.3756 19.4996H14.7518ZM18.8793 19.4996C19.2935 19.4996 19.6298 19.8359 19.6298 20.2501C19.6296 20.6641 19.2933 20.9995 18.8793 20.9995H17.5031C17.0892 20.9993 16.7539 20.664 16.7537 20.2501C16.7537 19.836 17.089 19.4998 17.5031 19.4996H18.8793ZM22.7765 17.9511C23.1826 17.8707 23.5771 18.1348 23.6578 18.5409L23.7896 19.2082C23.9734 20.1356 23.2641 20.9995 22.3186 20.9995H21.6305C21.2166 20.9993 20.8814 20.664 20.8811 20.2501C20.8811 19.836 21.2164 19.4998 21.6305 19.4996H22.3186L22.1868 18.8335L22.1717 18.682C22.1737 18.333 22.421 18.0216 22.7765 17.9511ZM23.1293 15.8741C23.2099 16.2803 22.9456 16.6757 22.5395 16.7565C22.1333 16.8371 21.7378 16.5728 21.6571 16.1667L21.3923 14.8333L22.1289 14.6875L22.8644 14.5407L23.1293 15.8741ZM2.47481 16.1667C2.37869 16.5694 1.97442 16.8177 1.57161 16.7218C1.16887 16.6257 0.920596 16.2214 1.01651 15.8186L2.47481 16.1667ZM2.23658 13.9301C2.63953 14.026 2.88878 14.4303 2.79284 14.8333L2.47481 16.1667L1.74508 15.992L1.01651 15.8186L1.33338 14.4852C1.42946 14.0824 1.83377 13.8342 2.23658 13.9301ZM21.9821 13.9509C22.3883 13.8703 22.7837 14.1345 22.8644 14.5407L21.3923 14.8333C21.3117 14.4271 21.576 14.0317 21.9821 13.9509ZM22.3348 11.8739C22.4154 12.2802 22.1513 12.6756 21.745 12.7562C21.3894 12.8266 21.0426 12.6329 20.9077 12.311L20.8638 12.1664L20.5989 10.833L21.3344 10.6873L22.0699 10.5405L22.3348 11.8739ZM3.18951 9.92985C3.59224 10.0259 3.84052 10.4302 3.74461 10.833L3.42774 12.1664L3.37801 12.3099C3.23088 12.626 2.87702 12.8065 2.52454 12.7227C2.12159 12.6268 1.87234 12.2213 1.96828 11.8184L2.28631 10.485C2.38252 10.0824 2.78676 9.83396 3.18951 9.92985ZM21.1887 9.95182C21.5948 9.87125 21.9891 10.1345 22.0699 10.5405L20.5989 10.833C20.5183 10.4268 20.7826 10.0325 21.1887 9.95182ZM19.9374 5.99902C20.6533 5.99902 21.2703 6.50534 21.4096 7.20753L21.5414 7.87481L21.5553 8.02515C21.5534 8.37415 21.3073 8.68547 20.9516 8.75604C20.5963 8.82651 20.2496 8.63336 20.1144 8.31195L20.0704 8.16624L19.9374 7.50011H19.0828C18.6686 7.50011 18.3323 7.16379 18.3323 6.74957C18.3323 6.33535 18.6686 5.99902 19.0828 5.99902H19.9374ZM5.39373 5.99902C5.80794 5.99902 6.14427 6.33535 6.14427 6.74957C6.14427 7.16379 5.80794 7.50011 5.39373 7.50011H4.5391L4.37951 8.16624C4.28352 8.56913 3.87923 8.81843 3.47631 8.7225C3.07363 8.62647 2.82552 8.22204 2.92121 7.8193L3.07964 7.15202C3.24058 6.47639 3.84455 5.99902 4.5391 5.99902H5.39373ZM10.5273 5.99902C10.9415 5.99904 11.2778 6.33536 11.2778 6.74957C11.2778 7.16378 10.9415 7.5001 10.5273 7.50011H8.81571C8.40174 7.49982 8.06632 7.16361 8.06632 6.74957C8.06632 6.33553 8.40174 5.99931 8.81571 5.99902H10.5273ZM15.6608 5.99902C16.0748 5.99932 16.4102 6.33554 16.4102 6.74957C16.4102 7.1636 16.0748 7.49982 15.6608 7.50011H13.9493C13.535 7.50011 13.1987 7.16378 13.1987 6.74957C13.1987 6.33536 13.535 5.99903 13.9493 5.99902H15.6608Z\" />\n <path d=\"M10.6309 14.7413V10.9913H13.6309V14.7413C13.6309 15.1538 13.9684 15.4913 14.3809 15.4913H16.6309C17.0434 15.4913 17.3809 15.1538 17.3809 14.7413V9.4913H18.6559C19.0009 9.4913 19.1659 9.0638 18.9034 8.8388L12.6334 3.19125C12.3484 2.93625 11.9134 2.93625 11.6284 3.19125L5.35831 8.8388C5.10331 9.0638 5.26081 9.4913 5.60581 9.4913H6.88082V14.7413C6.88082 15.1538 7.21833 15.4913 7.63083 15.4913H9.88085C10.2934 15.4913 10.6309 15.1538 10.6309 14.7413Z\" />\n </>\n ),\n houseFilled: (\n <>\n <path d=\"M9.82369 19.9192V14.5155H14.1715V19.9192C14.1715 20.5137 14.6606 21 15.2584 21H18.5193C19.1171 21 19.6062 20.5137 19.6062 19.9192V12.3539H21.454C21.954 12.3539 22.1932 11.7379 21.8127 11.4137L12.7258 3.27559C12.3128 2.90814 11.6824 2.90814 11.2693 3.27559L2.18245 11.4137C1.81288 11.7379 2.04114 12.3539 2.54114 12.3539H4.38895V19.9192C4.38895 20.5137 4.87808 21 5.4759 21H8.73674C9.33456 21 9.82369 20.5137 9.82369 19.9192Z\" />\n </>\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, Padding, Palette, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\n// We combine react-popper and aria-tooltip to make up 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\ntype TooltipXss = Xss<Padding | \"borderRadius\">;\n\n/** Note: Only 1 tooltip is ever on screen at a time */\ninterface TooltipProps {\n /** The content that shows up when hovered */\n title: ReactNode;\n children: ReactNode;\n placement?: Placement;\n /**\n * The delay for the tooltip to appear.\n *\n * Note: If tooltip `A` is still showing when tooltip `B` is triggered, tooltip `B`'s `delay` property will be ignored and it will render immediately.\n * @default 0\n */\n delay?: number;\n disabled?: boolean;\n bgColor?: Palette;\n xss?: TooltipXss;\n}\n\n// Small delay to allow mouse to cross the gap between trigger and tooltip\nconst gapCrossingDelay = 100;\n\nexport function Tooltip(props: TooltipProps) {\n const { placement, children, title, disabled, delay = 0, bgColor, xss } = props;\n\n const state = useTooltipTriggerState({ delay, closeDelay: gapCrossingDelay, 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 css={Css.display(\"contents\").$}\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 xss={xss}\n onMouseEnter={() => state.open(true)}\n onMouseLeave={() => state.close()}\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 xss?: TooltipXss;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n}\n\nfunction Popper(props: PopperProps) {\n const {\n triggerRef,\n content,\n placement = \"auto\",\n xss,\n bgColor = Palette.Gray900,\n onMouseEnter,\n onMouseLeave,\n ...ariaProps\n } = props;\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 {...ariaProps}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n css={{\n ...Css.maxw(\"320px\").bgColor(bgColor).bshBasic.white.px1.py(\"4px\").br4.xs.z(999999).$,\n ...xss,\n }}\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 type { GridStyle } from \"src/components/Table/TableStyles\";\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 // Required fields should always show asterisk\n fieldProps: { labelSuffix: { required: \"*\" } },\n});\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 { 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 { Loader } from \"src/components/Loader\";\nimport { PresentationFieldProps, PresentationProvider } from \"src/components/PresentationContext\";\nimport { GridTableApi, GridTableApiImpl } from \"src/components/Table/GridTableApi\";\nimport { useColumnResizeHandlers } from \"src/components/Table/hooks/useColumnResizeHandlers\";\nimport { useScrollStorage } from \"src/components/Table/hooks/useScrollStorage\";\nimport { useSetupColumnSizes } from \"src/components/Table/hooks/useSetupColumnSizes\";\nimport {\n defaultStyle,\n GridStyle,\n GridStyleDef,\n resolveStyles,\n RowStyles,\n tableRowPrintBreakCss,\n} from \"src/components/Table/TableStyles\";\nimport type { DiscriminateUnion } from \"src/components/Table/types\";\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 {\n EXPANDABLE_HEADER,\n getTableRefWidthStyles,\n HEADER,\n isCursorBelowMidpoint,\n KEPT_GROUP,\n TOTALS,\n zIndices,\n} 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 type { GridDataRow, GridRowKind } from \"./components/Row\";\nimport { 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 /**\n * If true, scroll position persists when the page is reloaded (only applies to `as=virtual` without infinite scroll, where it defaults to true).\n *\n * The storage key is automatically generated using the current URL pathname and the table's `id`.\n */\n persistScrollPosition?: boolean;\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 /** Disable column resizing functionality. Defaults to false. */\n disableColumnResizing?: boolean;\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 persistScrollPosition,\n resizeTarget,\n activeRowId,\n activeCellId,\n visibleColumnsStorageKey,\n infiniteScroll,\n onRowSelect,\n onRowDrop: droppedCallback,\n csvPrefixRows,\n disableColumnResizing = false,\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 // Ref to the table container element (for column resize guide line)\n const tableContainerRef = useRef<HTMLElement | null>(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, tableWidth, resizedWidths, setResizedWidth, setResizedWidths, resetColumnWidths } =\n useSetupColumnSizes(\n style,\n columns,\n resizeTarget ?? resizeRef,\n expandedColumnIds,\n visibleColumnsStorageKey,\n disableColumnResizing,\n );\n\n // Store resetColumnWidths on the API instance so it can be called from EditColumnsButton\n useEffect(() => {\n api.resetColumnWidthsFn = !disableColumnResizing ? resetColumnWidths : undefined;\n }, [api, resetColumnWidths, disableColumnResizing]);\n\n // Handle column resize logic with proportional distribution\n const { handleColumnResize, calculatePreviewWidth } = useColumnResizeHandlers(\n columns,\n columnSizes,\n tableWidth,\n setResizedWidth,\n setResizedWidths,\n );\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 const bodyRowsCount = visibleRows.filter((rs) => ![HEADER, EXPANDABLE_HEADER, TOTALS].includes(rs.kind)).length;\n const onlyKeptBodyRows =\n bodyRowsCount > 0 &&\n visibleRows.every(\n (rs) =>\n // For our purposes, \"body rows\" are any non-header / non-totals rows.\n [HEADER, EXPANDABLE_HEADER, TOTALS].includes(rs.kind) || rs.isKept || rs.kind === KEPT_GROUP,\n );\n let bodyRowsSeen = 0;\n let foundFirstBodyRow = false;\n let foundFirstHeadRow = false;\n\n // Get the flat list or rows from the header down...\n visibleRows.forEach((rs) => {\n const isHeadRow = [HEADER, EXPANDABLE_HEADER, TOTALS].includes(rs.kind);\n const isFirstHeadRow = isHeadRow && !foundFirstHeadRow;\n const isBodyRow = ![HEADER, EXPANDABLE_HEADER, TOTALS].includes(rs.kind);\n const isFirstBodyRow = isBodyRow && !foundFirstBodyRow;\n if (isHeadRow) foundFirstHeadRow = true;\n if (isBodyRow) bodyRowsSeen += 1;\n if (isBodyRow) foundFirstBodyRow = true;\n const isLastBodyRow = isBodyRow && bodyRowsSeen === bodyRowsCount && !onlyKeptBodyRows;\n\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 isFirstHeadRow,\n isFirstBodyRow,\n isLastBodyRow,\n resizedWidths,\n setResizedWidth: handleColumnResize,\n disableColumnResizing,\n calculatePreviewWidth,\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(\n () => ({ tableState: tableState, tableContainerRef }),\n [tableState, tableContainerRef],\n );\n\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 tableContainerRef,\n persistScrollPosition,\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 tableContainerRef?: MutableRefObject<HTMLElement | null>,\n _persistScrollPosition?: boolean,\n): ReactElement {\n return (\n <div\n ref={tableContainerRef as MutableRefObject<HTMLDivElement | null>}\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 css={Css.if(stickyHeader).sticky.topPx(stickyOffset).z(zIndices.stickyHeader).$}>{tableHeadRows}</div>\n\n {/* Table Body */}\n <div>\n {keptSelectedRows}\n {/* Show an info message if it's set. */}\n {firstRowMessage && (\n <div\n css={{\n ...(keptSelectedRows.length === 0 && style.firstBodyRowCss),\n ...style.firstRowMessageCss,\n ...(visibleDataRows.length === 0 && style.lastRowCss),\n ...(visibleDataRows.length === 0 && style.lastRowCellCss),\n ...(visibleDataRows.length === 0 && style.lastRowFirstCellCss),\n ...(visibleDataRows.length === 0 && style.lastRowLastCellCss),\n }}\n data-gridrow\n >\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 tableContainerRef?: MutableRefObject<HTMLElement | null>,\n _persistScrollPosition?: boolean,\n): ReactElement {\n return (\n <table\n ref={tableContainerRef as MutableRefObject<HTMLTableElement | null>}\n css={{\n ...Css.w100.add(\"borderCollapse\", \"separate\").add(\"borderSpacing\", \"0\").$,\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 css={{\n ...tableRowPrintBreakCss,\n ...(keptSelectedRows.length === 0 && style.firstBodyRowCss),\n ...(visibleDataRows.length === 0 && style.lastRowCss),\n }}\n >\n <td\n colSpan={columns.length}\n css={{\n ...style.betweenRowsCss,\n ...style.firstRowMessageCss,\n ...(visibleDataRows.length === 0 && style.lastRowCellCss),\n ...(visibleDataRows.length === 0 && style.lastRowFirstCellCss),\n ...(visibleDataRows.length === 0 && style.lastRowLastCellCss),\n }}\n >\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 _tableContainerRef?: MutableRefObject<HTMLElement | null>,\n persistScrollPosition: boolean = infiniteScroll === undefined, // Enabled by default if infinite scroll is not enabled\n): ReactElement {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [fetchMoreInProgress, setFetchMoreInProgress] = useState(false);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { getScrollIndex, setScrollIndex } = useScrollStorage(id, persistScrollPosition);\n\n const savedScrollIndex = getScrollIndex();\n const topItemCount = stickyHeader ? tableHeadRows.length : 0;\n\n // Validate that saved scroll index is within bounds of current data.\n // This handles cases where filters (via query params) reduce the data set,\n // preventing \"Zero-sized element\" errors when Virtuoso tries to scroll to a row that doesn't exist.\n const validatedScrollIndex =\n savedScrollIndex !== undefined && savedScrollIndex < visibleDataRows.length ? savedScrollIndex : undefined;\n\n // Use a key to force Virtuoso to remount when data first loads (if we have a saved scroll position).\n const virtuosoKey = !!validatedScrollIndex && visibleDataRows.length > 0 ? \"with-data\" : \"virtuoso\";\n return (\n <Virtuoso\n key={virtuosoKey}\n overscan={5}\n ref={virtuosoRef}\n {...(validatedScrollIndex !== undefined ? { initialTopMostItemIndex: validatedScrollIndex } : {})}\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(style, columns as any, id, xss),\n Footer: () => {\n return (\n <div\n css={\n Css.if(style.virtualFooterPaddingBottomPx !== undefined).pbPx(style.virtualFooterPaddingBottomPx ?? 0).$\n }\n >\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={topItemCount}\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\n css={{\n ...getTableRefWidthStyles(true),\n ...(keptSelectedRows.length === 0 && style.firstBodyRowCss),\n ...(visibleDataRows.length === 0 && style.lastRowCss),\n }}\n >\n <div\n css={{\n ...style.firstRowMessageCss,\n ...(visibleDataRows.length === 0 && style.lastRowCellCss),\n ...(visibleDataRows.length === 0 && style.lastRowFirstCellCss),\n ...(visibleDataRows.length === 0 && style.lastRowLastCellCss),\n }}\n >\n {firstRowMessage}\n </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 // Don't persist scroll position for infinite scroll tables. On page refresh, the saved\n // index may point to a row that hasn't been fetched yet (since data loads progressively),\n // causing Virtuoso to fail with \"Zero-sized element\" when it tries to scroll to that index.\n if (!infiniteScroll && visibleDataRows.length > 0) {\n setScrollIndex(newRange.startIndex);\n }\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 void 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 re-renders each time we have new children in the viewport\n return (\n <div\n ref={ref}\n style={style}\n css={{\n ...gs.rootCss,\n ...(gs.minWidthPx ? Css.mwPx(gs.minWidthPx).$ : {}),\n ...Css.add(\"minWidth\", \"fit-content\").$,\n ...xss,\n }}\n data-testid={id}\n >\n {children}\n </div>\n );\n });\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 { comparer } from \"mobx\";\nimport { computedFn } from \"mobx-utils\";\nimport { MutableRefObject, useMemo } from \"react\";\nimport { ListRange, VirtuosoHandle } from \"react-virtuoso\";\nimport type { GridDataRow } from \"src/components/Table/components/Row\";\nimport type { DiscriminateUnion, GridTableScrollOptions, Kinded, MaybeFn } from \"src/components/Table/types\";\nimport type { GridRowLookup } from \"src/components/Table/utils/GridRowLookup\";\nimport { createRowLookup, shouldSkipScrollTo } from \"src/components/Table/utils/GridRowLookup\";\nimport { TableState } from \"src/components/Table/utils/TableState\";\nimport { applyRowFn, isGridCellContent, isJSX } from \"src/components/Table/utils/utils\";\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 resetColumnWidths(): 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 resetColumnWidthsFn?: () => void;\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 resetColumnWidths(): void {\n this.resetColumnWidthsFn?.();\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 { ReactNode } from \"react\";\nimport { GridCellContent } from \"src/components/Table/components/cell\";\nimport type { 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 hide-able columns to be hidden on initial load */\n initHidden?: 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 \"initHidden\",\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 type { 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 { makeAutoObservable, observable, reaction } from \"mobx\";\nimport React from \"react\";\nimport type { GridDataRow } from \"src/components/Table/components/Row\";\nimport type { GridSortConfig, OnRowSelect } from \"src/components/Table/GridTable\";\nimport type { GridTableApi } from \"src/components/Table/GridTableApi\";\nimport { Direction, GridColumnWithId, Kinded } 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 { sortFn } from \"src/components/Table/utils/sortRows\";\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<{\n tableState: TableState<any>;\n tableContainerRef?: React.MutableRefObject<HTMLElement | null>;\n}>({\n get tableState(): TableState<any> {\n throw new Error(\"No TableStateContext provider\");\n },\n tableContainerRef: undefined,\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 `initHidden: false`\n this.visible = storage.wasVisible(column.id) ?? (column.canHide ? !(column.initHidden ?? true) : 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 type { IconButtonProps } from \"src/components/IconButton\";\nimport { IconButton } from \"src/components/IconButton\";\nimport type { GridDataRow } from \"src/components/Table/components/Row\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport { HEADER, KEPT_GROUP } from \"src/components/Table/utils/utils\";\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 { 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 /** Whether to display the circle variant */\n circle?: boolean;\n /** Indicates that the button is active/selected */\n active?: 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 active = false,\n compact = false,\n contrast = false,\n circle = 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 ...(circle ? iconButtonCircle : compact ? iconButtonCompact : iconButtonNormal),\n ...(isHovered &&\n (contrast ? iconButtonContrastStylesHover : circle ? iconButtonCircleStylesHover : iconButtonStylesHover)),\n ...(isFocusVisible || forceFocusStyles ? (circle ? iconButtonCircleStylesFocus : iconButtonStylesFocus) : {}),\n ...(active ? (contrast ? iconButtonContrastStylesHover : activeStyles) : {}),\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 : circle ? circleIconColor : 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.props(styles),\n \"aria-label\": label,\n };\n const buttonContent = (\n <Icon\n icon={icon}\n color={\n color ||\n (isDisabled\n ? Palette.Gray400\n : circle && (isHovered || active || isFocusVisible)\n ? defaultIconColor\n : iconColor)\n }\n bgColor={bgColor}\n inc={compact ? 2 : circle ? 2.5 : 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 ?? label, tooltip),\n placement: \"top\",\n children: getButtonOrLink(buttonContent, onPress, buttonAttrs, openInNew, download),\n });\n}\n\nconst defaultIconColor = Palette.Gray900;\nconst contrastIconColor = Palette.White;\nconst circleIconColor = Palette.Gray700;\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.$;\nconst iconButtonCircle = Css.br100.wPx(48).hPx(48).bcGray300.ba.bw1.df.jcc.aic.$;\nexport const iconButtonStylesHover = Css.bgGray200.$;\nexport const iconButtonContrastStylesHover = Css.bgGray700.$;\nexport const iconButtonCircleStylesHover = Css.bgBlue100.bcBlue200.$;\nconst iconButtonStylesFocus = Css.bcBlue700.$;\nconst iconButtonCircleStylesFocus = Css.bgBlue100.bcBlue700.$;\nconst iconButtonStylesDisabled = Css.cursorNotAllowed.$;\nconst activeStyles = Css.bgGray200.bcGray200.$;\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 { PressEvent } from \"@react-types/shared\";\nimport { HTMLAttributes, ReactNode } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Properties } from \"src/Css\";\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?: Properties },\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 { 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.xs.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 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\nexport interface 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 { 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 { 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 type { 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(\n content,\n maybeContent.onClick,\n Css.props(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 colspan: number = 1,\n): Properties {\n return {\n ...(columnIndex === 0 ? style.firstCellCss : {}),\n ...(columnIndex + colspan >= columns.length ? 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 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 try {\n const ids = sessionStorage.getItem(key);\n return ids ? JSON.parse(ids) : undefined;\n } catch (e) {\n // If the stored value is invalid JSON (e.g., the string \"undefined\"), remove it\n sessionStorage.removeItem(key);\n return undefined;\n }\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, 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 | ReactNode;\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 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, useCallback, 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 type AutocompleteProps<T> = {\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} & Pick<PresentationFieldProps, \"labelStyle\"> &\n Pick<TextFieldBaseProps<any>, \"label\" | \"clearable\" | \"startAdornment\" | \"fullWidth\">;\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 // Memoize the children callback to prevent infinite re-render loops with react-aria v3.33+.\n // See ComboBoxBase.tsx for detailed explanation.\n const comboBoxChildren = useCallback(\n (item: T) => (\n <Item key={getOptionValue(item)} textValue={getOptionLabel(item)}>\n {getOptionMenuLabel ? getOptionMenuLabel(item) : getOptionLabel(item)}\n </Item>\n ),\n [getOptionValue, getOptionLabel, getOptionMenuLabel],\n );\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: comboBoxChildren,\n onSelectionChange: (key: Key | null) => {\n if (key == null) return;\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\";\nimport \"./day.css\";\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 className=\"beam-day-button\"\n css={Css.relative.pbPx(4).outline0.if(disabled).cursorNotAllowed.$}\n {...(selected && { \"data-selected\": \"\" })}\n {...(disabled && { \"data-disabled\": \"\" })}\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 {/* Range indicator shown behind the selected day */}\n {showRangeStyles && range_start && <span css={{ ...rangeBaseStyles, ...Css.rightPx(-2).wPx(8).$ }} />}\n {showRangeStyles && range_end && <span css={{ ...rangeBaseStyles, ...Css.wPx(8).leftPx(-2).$ }} />}\n {showRangeStyles && range_middle && <span css={{ ...rangeBaseStyles, ...Css.leftPx(-2).$ }} />}\n </button>\n );\n}\n\nconst rangeBaseStyles = Css.absolute.topPx(2).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.md.$}>{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.md.$}>{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.md.$}>{format(displayMonth, \"yyyy\")}</h1>\n <IconButton color={Palette.Gray700} icon=\"chevronRight\" onClick={() => goToMonth(addYears(displayMonth, 1))} />\n </div>\n </div>\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 { PropsWithChildren, useEffect, useMemo, useRef, useState } from \"react\";\nimport { AriaMenuOptions, 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\ntype MenuProps<T> = {\n ariaMenuProps: AriaMenuOptions<T>;\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 css={{\n // Using `max-height: inherit` allows us to take advantage of the height set on the overlay container,\n // which updates based on the available space for the overlay within the viewport\n ...Css.df.fdc.myPx(4).outline0.br4.bshBasic.maxh(\"inherit\").oa.$,\n ...Css.bgWhite.if(contrast).bgGray900.$,\n ...Css.onHover.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 } from \"src/components/Table/components/Row\";\n// Side-effect import: injects CSS for the border-hover-on-row pattern\nimport \"src/components/Table/components/Row.css.ts\";\nimport { Css, increment, Only, Palette } from \"src/Css\";\nimport { useLabelSuffix } 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 type TextFieldBaseProps<X> = {\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} & 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\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 ?? \"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 = useLabelSuffix(required, inputProps.readOnly);\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.typography(typeScale)\n .df.aic.br8.pxPx(textFieldBasePadding)\n .w100.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 // 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 // Border-hover-on-row styling is handled by Row.css.ts (imported above as a side-effect)\n inputWrapperReadOnly: {\n ...Css.typography(typeScale)\n .df.aic.w100.gray900.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.bgTransparent.if(contrast && !inputStylePalette).element(\"::selection\").bgGray800.$,\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\n ? Css.br4.pyPx(compact ? 7 : textFieldBaseMultilineTopPadding).add(\"resize\", \"none\").$\n : Css.truncate.$),\n },\n hover: Css.bgColor(hoverBgColor).if(contrast).bcGray600.$,\n focus: Css.bcBlue700.bgColor(hoverBgColor).if(contrast).bcBlue500.if(borderOnHover).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 // Only select on real user focus events, not synthetic ones (e.g., react-aria's dispatchVirtualFocus).\n if (selectOnFocus && e.isTrusted) 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\n// Used in `useGrowingTextField` when `maxLines` adds/removes scrollbar\nexport const textFieldBasePadding = increment(1);\n// Prevents text from being cutoff\n// We don't care about `compact` using 7 because we have no `compact` TextAreaField\nexport const textFieldBaseMultilineTopPadding = 11;\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.sm.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 React, { ReactElement, useCallback, useContext, useRef } from \"react\";\nimport { mergeProps } from \"react-aria\";\nimport {\n defaultRenderFn,\n headerRenderFn,\n RenderCellFn,\n rowClickRenderFn,\n rowLinkRenderFn,\n} from \"src/components/Table/components/cell\";\nimport { ColumnResizeHandle } from \"src/components/Table/components/ColumnResizeHandle\";\nimport { KeptGroupRow } from \"src/components/Table/components/KeptGroupRow\";\nimport { ResizedWidths } from \"src/components/Table/hooks/useColumnResizing\";\nimport { GridStyle, RowStyles, tableRowPrintBreakCss } from \"src/components/Table/TableStyles\";\nimport { DiscriminateUnion, GridColumnWithId, IfAny, Kinded, Pin, RenderAs } from \"src/components/Table/types\";\nimport { parseWidthToPx } from \"src/components/Table/utils/columns\";\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 reservedRowKinds,\n toContent,\n TOTALS,\n zIndices,\n} from \"src/components/Table/utils/utils\";\nimport { Css, Palette, Properties } 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 isFirstHeadRow: boolean;\n isFirstBodyRow: boolean;\n isLastBodyRow: boolean;\n /* column resizers */\n resizedWidths: ResizedWidths;\n setResizedWidth: (columnId: string, width: number, columnIndex: number) => void;\n disableColumnResizing: boolean;\n calculatePreviewWidth: (columnId: string, newWidth: number, columnIndex: number) => number;\n /* Drag handlers */\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\nfunction 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\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 isFirstHeadRow,\n isFirstBodyRow,\n isLastBodyRow,\n resizedWidths,\n setResizedWidth,\n disableColumnResizing = true,\n calculatePreviewWidth,\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 isBodyRow = !isHeader && !isTotals && !isExpandableHeader;\n // `isFirstHeadCellRow` drives first-row cell styling; when there is no expandable header,\n // treat either a header or a totals row as the first head row so totals-first tables\n // receive the correct top styling.\n const isFirstHeadCellRow = isExpandableHeader || (!hasExpandableHeader && (isHeader || isTotals));\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 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 ...(isFirstBodyRow && style.firstBodyRowCss),\n ...(isFirstHeadRow && style.firstRowCss),\n ...(as === \"table\" && tableRowPrintBreakCss),\n // Optionally include the row hover styles, by default they should be turned on.\n ...(showRowHoverColor && Css.onHover.bgColor(style.rowHoverColor ?? Palette.Blue100).$),\n ...(levelIndent && Css.mlPx(levelIndent).$),\n // For virtual tables use `display: flex` to keep all cells on the same row.\n ...(as === \"table\" ? {} : Css.relative.df.fg1.fs1.$),\n ...(isLastBodyRow && style.lastRowCss),\n // Apply `cursorPointer` to the row if it has a link or `onClick` value.\n ...((rowStyle?.rowLink || rowStyle?.onClick) && Css.onHover.cursorPointer.$),\n ...maybeApplyFunction(row as any, rowStyle?.rowCss),\n // keptLastRowCss is now applied per-cell in cellCss below\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\n as={as}\n style={style}\n columnSizes={columnSizes}\n row={row}\n colSpan={columns.length}\n isLastBodyRow={isLastBodyRow}\n />\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 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\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 // For virtual tables (non-table), use `flex: none` to ensure cells stay their defined widths.\n ...Css.df.if(as === \"table\").dtc.else.fn.$,\n // Apply sticky column/cell styles\n ...maybeStickyColumnStyles,\n // Apply any static/all-cell styling\n ...style.cellCss,\n // Apply between-row cell styling for body rows.\n ...(isBodyRow && style.betweenRowsCss),\n ...(isFirstHeadCellRow && style.firstRowCellCss),\n ...(isLastBodyRow && style.lastRowCellCss),\n // Then override with first/last cell styling\n ...getFirstOrLastCellCss(style, columnIndex, columns, currentColspan),\n ...(columnIndex === 0 && isFirstHeadCellRow && style.firstRowFirstCellCss),\n ...(columnIndex === columns.length - 1 && isFirstHeadCellRow && style.firstRowLastCellCss),\n ...(columnIndex === 0 && isLastBodyRow && style.lastRowFirstCellCss),\n ...(columnIndex === columns.length - 1 && isLastBodyRow && style.lastRowLastCellCss),\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 // Add right border on expandable header cells except the last column\n ...(isExpandableHeader &&\n columnIndex + currentColspan < columns.length &&\n style.expandableHeaderNonLastColumnCss),\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 columnIndex + currentColspan < columns.length &&\n (isHeader || isTotals) &&\n currentExpandedColumnCount === 0 &&\n Css.boxShadow(`inset -1px -1px 0 ${Palette.Gray200}`).$),\n // Or level-specific styling\n ...(isBodyRow && 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\n ? Css.typography(maybeContent.typeScale).$\n : {}),\n // And any cell specific css\n ...(isGridCellContent(maybeContent) && maybeContent.css ? maybeContent.css : {}),\n // Apply kept last row styling per-cell\n ...(isLastKeptRow && style.keptLastRowCss),\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 ...Css.w(\n `calc(${columnSizes.slice(columnIndex, columnIndex + currentColspan).join(\" + \")}${\n applyFirstContentColumnStyles && levelIndent ? ` - ${levelIndent}px` : \"\"\n })`,\n ).$,\n };\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 const cellElement = renderFn(columnIndex, cellCss, content, row, rowStyle, undefined, cellOnClick, tooltip);\n\n // Add resize handle for header rows when resizing is enabled\n // Only add handle on the right border (not for the last column)\n // Skip action columns (selectColumn, collapseColumn, actionColumn) as they should not be resizable\n if (\n !disableColumnResizing &&\n isHeader &&\n columnIndex < columns.length - 1 &&\n currentColspan === 1 &&\n !column.isAction\n ) {\n // Parse current width - if not in pixels, use a fallback or skip resize handle\n const currentSizeStr = columnSizes[columnIndex];\n const minWidthPx = column.mw ? parseInt(column.mw.replace(\"px\", \"\"), 10) : 100;\n // This fallback shouldn't happen in practice: columns are locked to pixel widths on first resize,\n // and resizedWidths should always contain the current width after that point. However, we handle\n // the edge case of initial render with percentage/calc() columns before any resize has occurred.\n const currentWidthPx =\n parseWidthToPx(currentSizeStr, undefined) ?? resizedWidths?.[column.id] ?? minWidthPx;\n\n // The resize handle uses position:absolute, which needs a positioning context (relative/sticky/fixed).\n // Only add position:relative if the cell isn't already sticky, since sticky provides its own positioning context.\n // Overriding sticky with relative would break the sticky behavior and cause gaps in the header.\n const cellElementWithHandle = React.cloneElement(\n cellElement as React.ReactElement,\n mergeProps(\n (cellElement as React.ReactElement).props,\n Css.props({ ...(!maybeSticky && Css.relative.$) }),\n {\n children: (\n <>\n {(cellElement as React.ReactElement).props.children}\n <ColumnResizeHandle\n columnId={column.id}\n columnIndex={columnIndex}\n currentWidth={currentWidthPx}\n minWidth={minWidthPx}\n onResize={(colId, width) => setResizedWidth?.(colId, width, columnIndex)}\n calculatePreviewWidth={calculatePreviewWidth}\n />\n </>\n ),\n },\n ),\n );\n return cellElementWithHandle;\n }\n\n return cellElement;\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 = \"beam-bhp\";\nexport const BorderHoverChild = \"beam-bhc\";\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 /** 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={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 \"./CssReset.css\";\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\n/**\n * Applies a CSS Reset that is based on modern-normalize + TW customizations.\n *\n * The reset styles are now in CssReset.css and are loaded via a side-effect\n * import. This component is kept for API compatibility — render it at the top\n * of your app to ensure the CSS file is included in the bundle.\n */\nexport function CssReset() {\n return null;\n}\n","import React, { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { useScrollableParent } from \"src/components/Layout/ScrollableParent\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ntype ColumnResizeHandleProps = {\n columnId: string;\n columnIndex: number;\n currentWidth: number;\n minWidth: number;\n onResize: (columnId: string, newWidth: number, columnIndex: number) => void;\n calculatePreviewWidth: (columnId: string, newWidth: number, columnIndex: number) => number;\n};\n\n/**\n * Fallback: Find the nearest scrollable ancestor element via DOM traversal.\n * Only used when ScrollableParent context is not available.\n */\nfunction findScrollableParent(element: HTMLElement | null): HTMLElement | null {\n if (!element) return null;\n\n let parent = element.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n const overflowY = style.overflowY;\n const overflow = style.overflow;\n\n // Check if this element is scrollable\n if (overflowY === \"auto\" || overflowY === \"scroll\" || overflow === \"auto\" || overflow === \"scroll\") {\n // Verify it actually has scrollable content\n if (parent.scrollHeight > parent.clientHeight) {\n return parent;\n }\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n}\n\n/**\n * Resize handle component that appears on column borders.\n * Allows users to drag to resize columns.\n */\nexport function ColumnResizeHandle({\n columnId,\n columnIndex,\n currentWidth,\n minWidth,\n onResize,\n calculatePreviewWidth,\n}: ColumnResizeHandleProps) {\n const { tableContainerRef } = useContext(TableStateContext);\n const { scrollableEl } = useScrollableParent(); // Get scrollable element from context\n const [isDragging, setIsDragging] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n const [guideLineX, setGuideLineX] = useState<number | null>(null);\n const [guideLineTop, setGuideLineTop] = useState<number>(0);\n const [guideLineHeight, setGuideLineHeight] = useState<number>(0);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(0);\n const startHandleRightRef = useRef<number>(0);\n const handleRef = useRef<HTMLDivElement>(null);\n const rafRef = useRef<number | null>(null);\n const pendingMouseXRef = useRef<number | null>(null);\n const scrollableParentRef = useRef<HTMLElement | null>(null);\n const tid = useTestIds({}, \"columnResizeHandle\");\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n startXRef.current = e.clientX;\n startWidthRef.current = currentWidth;\n\n // Store the original handle position\n const rect = handleRef.current?.getBoundingClientRect();\n if (rect) {\n // overlap guide line with handle\n const handleCenter = rect.right - rect.width / 2;\n startHandleRightRef.current = handleCenter;\n setGuideLineX(handleCenter);\n }\n\n // Find the scrollable parent container\n // Prefer scrollableEl from ScrollableParent context (avoids expensive DOM traversal)\n // Note: scrollableEl is a portal element, so the actual scrollable container is its parent\n // Fall back to findScrollableParent for tables not wrapped in ScrollableParent\n if (scrollableEl?.parentElement) {\n // scrollableEl is a portal element, its parent is the actual scrollable container\n scrollableParentRef.current = scrollableEl.parentElement;\n } else {\n scrollableParentRef.current = tableContainerRef?.current\n ? findScrollableParent(tableContainerRef.current)\n : null;\n }\n\n // Calculate bounds - use intersection of scrollable parent and table\n if (tableContainerRef?.current) {\n const tableRect = tableContainerRef.current.getBoundingClientRect();\n\n if (scrollableParentRef.current) {\n const scrollRect = scrollableParentRef.current.getBoundingClientRect();\n // Use the intersection of both rectangles\n const top = Math.max(tableRect.top, scrollRect.top);\n const bottom = Math.min(tableRect.bottom, scrollRect.bottom);\n setGuideLineTop(top);\n setGuideLineHeight(Math.max(0, bottom - top));\n } else {\n // No scrollable parent, just use table bounds\n setGuideLineTop(tableRect.top);\n setGuideLineHeight(tableRect.height);\n }\n } else if (rect) {\n // Fallback: make our handle the guide line\n // We'll see this happen in cases where we have a plain GridTable not GridTableLayout\n // It won't extend the entire table but it will serve its purpose\n setGuideLineTop(rect.top);\n setGuideLineHeight(rect.height);\n }\n\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n },\n [currentWidth, tableContainerRef, scrollableEl],\n );\n\n // Update guide line bounds based on current scroll position\n const updateGuideLineBounds = useCallback(() => {\n if (tableContainerRef?.current) {\n const tableRect = tableContainerRef.current.getBoundingClientRect();\n\n if (scrollableParentRef.current) {\n const scrollRect = scrollableParentRef.current.getBoundingClientRect();\n // Use the intersection of both rectangles\n const top = Math.max(tableRect.top, scrollRect.top);\n const bottom = Math.min(tableRect.bottom, scrollRect.bottom);\n setGuideLineTop(top);\n setGuideLineHeight(Math.max(0, bottom - top));\n } else {\n // No scrollable parent, just use table bounds\n setGuideLineTop(tableRect.top);\n setGuideLineHeight(tableRect.height);\n }\n }\n }, [tableContainerRef]);\n\n // Update guide line position using requestAnimationFrame for smooth performance\n const updateGuideLine = useCallback(() => {\n if (pendingMouseXRef.current === null) {\n // Even if there's no mouse movement, update bounds in case of scroll\n updateGuideLineBounds();\n return;\n }\n\n const deltaX = pendingMouseXRef.current - startXRef.current;\n const requestedWidth = Math.max(minWidth, startWidthRef.current + deltaX);\n\n // Calculate the accurate final width using the preview function\n // This accounts for distribution to right columns and all constraints\n let finalWidth = requestedWidth;\n finalWidth = calculatePreviewWidth(columnId, requestedWidth, columnIndex);\n\n // Calculate where the guide line should be based on the final width\n const widthChange = finalWidth - startWidthRef.current;\n setGuideLineX(startHandleRightRef.current + widthChange);\n\n // Update guide line bounds if scrollable parent has scrolled\n updateGuideLineBounds();\n\n pendingMouseXRef.current = null;\n rafRef.current = null;\n }, [minWidth, calculatePreviewWidth, columnId, columnIndex, updateGuideLineBounds]);\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging) return;\n\n // Store the mouse position\n pendingMouseXRef.current = e.clientX;\n\n // Schedule an update using requestAnimationFrame if one isn't already scheduled\n if (rafRef.current === null) {\n rafRef.current = requestAnimationFrame(updateGuideLine);\n }\n },\n [isDragging, updateGuideLine],\n );\n\n // Update guide line bounds when scrolling occurs during drag\n const handleScroll = useCallback(() => {\n if (!isDragging) return;\n // Schedule bounds update using requestAnimationFrame to batch scroll events\n // This avoids expensive getBoundingClientRect() calls on every scroll event\n // Reuse the same rafRef as mouse move - updateGuideLine handles both cases\n if (rafRef.current === null) {\n rafRef.current = requestAnimationFrame(updateGuideLine);\n }\n }, [isDragging, updateGuideLine]);\n\n const handleMouseUp = useCallback(\n (e: MouseEvent) => {\n if (!isDragging) return;\n\n const deltaX = e.clientX - startXRef.current;\n const newWidth = Math.max(minWidth, startWidthRef.current + deltaX);\n // Note: onResize (handleColumnResize) will enforce actual constraints via calculateResizeUpdates\n onResize(columnId, newWidth, columnIndex);\n\n setIsDragging(false);\n setGuideLineX(null);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n },\n [isDragging, columnId, minWidth, onResize, columnIndex],\n );\n\n useEffect(() => {\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n // Listen for scroll events on the scrollable parent container\n const scrollableEl = scrollableParentRef.current;\n if (scrollableEl) {\n scrollableEl.addEventListener(\"scroll\", handleScroll, { passive: true });\n }\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n if (scrollableEl) {\n scrollableEl.removeEventListener(\"scroll\", handleScroll);\n }\n // Cancel any pending animation frame\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n pendingMouseXRef.current = null;\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp, handleScroll]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n }, []);\n\n return (\n <>\n <div\n ref={handleRef}\n onMouseDown={handleMouseDown}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => !isDragging && setIsHovering(false)}\n css={\n Css.absolute.top0.bottom0.right0\n .wPx(4)\n .mrPx(-2)\n .z(10)\n .cursor(\"col-resize\")\n .onHover.bgGray700.if(isHovering || isDragging).bgGray700.$\n }\n {...tid.handle}\n data-column-id={columnId}\n data-column-index={columnIndex}\n />\n {isDragging && guideLineX !== null && (\n <div\n css={\n Css.fixed\n .topPx(guideLineTop)\n .hPx(guideLineHeight)\n .leftPx(guideLineX)\n .wPx(4)\n .bgGray700.add(\"pointerEvents\", \"none\")\n .z9999.add(\"transform\", \"translateX(-50%)\").$\n }\n {...tid.guideLine}\n />\n )}\n </>\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, maybeInc, Properties } from \"src/Css\";\n\ninterface ScrollableParentContextProps {\n scrollableEl: HTMLElement | null;\n paddingRight: string;\n paddingLeft: string;\n setPortalTick: Dispatch<SetStateAction<number>>;\n}\n\nconst ScrollableParentContext = createContext<ScrollableParentContextProps>({\n scrollableEl: null,\n paddingRight: \"0px\",\n paddingLeft: \"0px\",\n setPortalTick: (v) => {},\n});\n\n// Allow any css to be applied to the ScrollableParent container.\ninterface ScrollableParentContextProviderProps {\n xss?: Properties;\n px?: string | number;\n pl?: string | number;\n pr?: string | number;\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, px, pl = px ?? 0, pr = px ?? 0, tagName: Tag = \"div\" as keyof JSX.IntrinsicElements } = props;\n const paddingLeft = maybeInc(pl);\n const paddingRight = maybeInc(pr);\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 context: ScrollableParentContextProps = {\n scrollableEl,\n paddingLeft,\n paddingRight,\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.$, ...xss }}>\n <div\n css={{\n ...Css.pl(context.paddingLeft).pr(context.paddingRight).$,\n ...(!hasScrollableContent ? Css.oa.h100.$ : undefined),\n }}\n >\n {children}\n {/* Spacer to ensure bottom padding is part of the scrollable height */}\n {!hasScrollableContent && <div css={Css.h2.$} />}\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","import { useContext } from \"react\";\nimport { Icon } from \"src/components/Icon\";\nimport { CollapseToggle } from \"src/components/Table/components/CollapseToggle\";\nimport type { GridDataRow } from \"src/components/Table/components/Row\";\nimport type { GridStyle } from \"src/components/Table/TableStyles\";\nimport type { RenderAs } from \"src/components/Table/types\";\nimport { TableStateContext } from \"src/components/Table/utils/TableState\";\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 isLastBodyRow: boolean;\n}\n\n/**\n * Renders the synthetic group row for kept rows.\n *\n * Kept rows are user-selected leaf rows that are not currently visible in the\n * table results because a client-side search or server-side filter removed\n * them from the active dataset. We keep these rows selected and grouped so\n * users can still review or unselect them before taking bulk actions.\n */\nexport function KeptGroupRow(props: KeptGroupRowProps) {\n const { as, columnSizes, style, row, colSpan, isLastBodyRow } = 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.betweenRowsCss,\n ...(isLastBodyRow && style.lastRowCellCss),\n ...(isLastBodyRow && style.lastRowFirstCellCss),\n ...(isLastBodyRow && style.lastRowLastCellCss),\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 { ReactNode } from \"react\";\nimport { PresentationContextProps, PresentationFieldProps } from \"src/components/PresentationContext\";\nimport type { RenderCellFn } from \"src/components/Table/components/cell\";\nimport type { GridDataRow } from \"src/components/Table/components/Row\";\nimport type { GridTableApi } from \"src/components/Table/GridTableApi\";\nimport { DiscriminateUnion, 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 /** Extra bottom padding for the virtual-table footer loader/spacer, in pixels. */\n virtualFooterPaddingBottomPx?: number;\n /**\n * Applied as the base body-row cell styling (commonly used for row separators).\n * This is applied to body rows broadly (including the last body row); use\n * `lastRowCellCss`/`lastRowCss` to adjust/cancel any final-row treatment.\n */\n betweenRowsCss?: Properties;\n /** Applied on the last row of the table, typically to override/cancel `betweenRowsCss`. */\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 body row, i.e. if you want to cancel out `betweenRowsCss`. */\n firstBodyRowCss?: 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 `firstBodyRowCss` 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 expandable header cells that are not the last table column. */\n expandableHeaderNonLastColumnCss?: 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 to every cell in the first table-head row (expandableHeader/header/totals). */\n firstRowCellCss?: Properties;\n /** Applied to the first cell in the first table-head row. */\n firstRowFirstCellCss?: Properties;\n /** Applied to the last cell in the first table-head row. */\n firstRowLastCellCss?: Properties;\n /** Applied to every cell in the last table-body row. */\n lastRowCellCss?: Properties;\n /** Applied to the first cell in the last table-body row. */\n lastRowFirstCellCss?: Properties;\n /** Applied to the last cell in the last table-body row. */\n lastRowLastCellCss?: 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 /** 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.xsSb.mhPx(56).gray700.bgGray100.boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`).$,\n ...(allWhite && Css.bgWhite.$),\n },\n firstContentColumn: { ...Css.sm.$, ...(allWhite && Css.smSb.gray900.$) },\n },\n 2: { firstContentColumn: Css.xs.pl3.$ },\n // Add 12 more pixels of padding for each level of nesting\n 3: { firstContentColumn: Css.xs.plPx(36).$ },\n };\n const defaultLevels = { 1: { firstContentColumn: Css.xs.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.xsSb.bgGray200.aic.pxPx(12).whiteSpace(\"unset\").hPx(40).$,\n ...(allWhite && Css.bgWhite.$),\n },\n totalsCellCss: Css.bgWhite.gray700.bgGray100.xsSb.hPx(totalsRowHeight).pPx(12).$,\n expandableHeaderCss: Css.bgWhite.gray900.xsSb.wsn\n .hPx(expandableHeaderRowHeight)\n .pxPx(12)\n .py0.boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`).$,\n // Draw a 1px divider inside the cell on the right edge and bottom edge.\n // Using `inset` keeps the line inside the cell so it doesn't change layout.\n expandableHeaderNonLastColumnCss: Css.boxShadow(`inset -1px -1px 0 ${Palette.Gray200}`).$,\n cellCss: {\n ...Css.typography(cellTypography)\n .gray900.bgWhite.ai(alignItems)\n .pxPx(12)\n .boxShadow(`inset 0 -1px 0 ${Palette.Gray200}`).$,\n ...(rowHeight === \"flexible\" ? Css.pyPx(12).$ : Css.wsnw.hPx(inlineEditing ? 48 : 36).$),\n ...(cellHighlight ? Css.onHover.bgGray100.$ : {}),\n },\n firstCellCss: bordered ? Css.bl.bcGray200.$ : undefined,\n lastCellCss: bordered ? Css.br.bcGray200.$ : undefined,\n firstRowCellCss: bordered ? Css.bt.bcGray200.$ : undefined,\n firstRowFirstCellCss: Css.borderRadius(\"8px 0 0 0 \").$,\n firstRowLastCellCss: Css.borderRadius(\"0 8px 0 0\").$,\n // Keep `betweenRowsCss` on all body rows, but on the final body row\n // remove the inset shadow and, when bordered, replace it with a true bottom border.\n lastRowCellCss: bordered ? Css.bsh0.bb.bcGray200.$ : Css.bsh0.$,\n // Only apply bottom corner radii to the final body-row cells when using `bordered`.\n lastRowFirstCellCss: bordered ? Css.borderRadius(\"0 0 0 8px\").$ : undefined,\n lastRowLastCellCss: bordered ? Css.borderRadius(\"0 0 8px 0\").$ : undefined,\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.xsSb.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;\nexport const tableRowPrintBreakCss = Css.add(\"pageBreakAfter\", \"auto\").add(\"pageBreakInside\", \"avoid\").$;\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: {} as Properties,\n nonHeaderRowCss: Css.br4.oh.ba.bcGray400.mt2.add(\"transition\", \"all 240ms\").onHover.bshHover.bcGray700.$,\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.xsSb.gray700.$,\n },\n rowHoverColor: \"none\",\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 { makeAutoObservable, observable, reaction } from \"mobx\";\nimport { Kinded } from \"src\";\nimport type { 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 { ReactNode } from \"react\";\nimport { GridCellContent } from \"src/components/Table/components/cell\";\nimport type { 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 { Css } from \"src/Css\";\n\n/**\n * Styles for the \"border highlight on row hover\" pattern.\n *\n * When a table row (`.beam-bhp`) is hovered, all child fields (`.beam-bhc`)\n * get a blue border — unless the field itself is being hovered directly.\n */\nexport const css = {\n \".beam-bhp:hover:not(:has(.beam-bhc:hover)) .beam-bhc\": Css.ba.bcBlue300.$,\n};\n","import { usePresentationContext } from \"src/components/PresentationContext\";\n\n// We promise to always call `getLabelSuffix` deterministically\nexport function useLabelSuffix(required: boolean | undefined, readOnly: boolean | undefined): string | undefined {\n const { fieldProps } = usePresentationContext();\n if (readOnly) return undefined;\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 { 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.typography(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.typography(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: \"xs2\",\n md: \"sm\",\n lg: \"lg\",\n xl: \"xl2\",\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: \"smSb\",\n md: \"smSb\",\n lg: \"md\",\n xl: \"md\",\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 { 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 /** Storybook-only visual state overrides for snapshotting pseudo-interactions. */\n __storyState?: {\n hovered?: boolean;\n focusVisible?: boolean;\n pressed?: boolean;\n };\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 __storyState,\n ...avatarProps\n } = props;\n const isDisabled = !!disabled;\n const ariaProps = { onPress, isDisabled, autoFocus, ...menuTriggerProps };\n const ref = useGetRef(buttonRef);\n const { buttonProps, isPressed: isPressedFromEvents } = 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: isFocusVisibleFromEvents } = useFocusRing(ariaProps);\n const { hoverProps, isHovered: isHoveredFromEvents } = useHover(ariaProps);\n const isHovered = __storyState?.hovered ?? isHoveredFromEvents;\n const isFocusVisible = __storyState?.focusVisible ?? isFocusVisibleFromEvents;\n const isPressed = __storyState?.pressed ?? isPressedFromEvents;\n const tid = useTestIds(props, avatarProps.name);\n\n const styles = useMemo(\n () => ({\n ...resetStyles,\n ...(isHovered && hoverStyles),\n // pressed state is handled by rendering a pressedOverlayCss span\n ...(isFocusVisible || forceFocusStyles ? focusStyles : {}),\n ...(isDisabled && disabledStyles),\n }),\n [isHovered, isFocusVisible, isDisabled, 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.props(styles),\n };\n\n const content = (\n <>\n <Avatar {...avatarProps} {...tid} disableTooltip />\n {isPressed && <span css={pressedOverlayCss} />}\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 // 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(content, 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 pressedOverlayCss = Css.br100.bgGray900.w100.h100.absolute.top0.left0\n .add(\"opacity\", \"0.2\")\n .add(\"pointerEvents\", \"none\").$;\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 type ButtonModalProps = {\n content: ReactNode | ((close: () => void) => ReactNode);\n title?: string;\n variant?: ButtonVariant;\n storybookDefaultOpen?: boolean;\n hideEndAdornment?: boolean;\n} & Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\" | \"showActiveBorder\">;\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 { AriaButtonProps } from \"@react-types/button\";\nimport type { Placement } from \"@react-types/overlays\";\nimport type { PressEvent } from \"@react-types/shared\";\nimport { MutableRefObject, ReactElement, ReactNode, useMemo, 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\n// FIXME: The `popover` doesn't automatically get focus in all use cases so we cant tab through inputs/buttons immediately without\n// a second click on the popover\n// - EX: EditColumnsButton\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 // react-aria v3.33+ changed useMenuTrigger so that mouse/virtual clicks call state.open() instead\n // of state.toggle(), breaking click-to-close behavior (specifically for our rtl-utils `click(...)`\n // helper which uses lighter-weight virtual events instead of real mouse events).\n // Override onPressStart to restore the toggle-on-click behavior for all pointer types.\n const wrappedMenuTriggerProps = useMemo<AriaButtonProps>(\n () => ({\n ...menuTriggerProps,\n onPressStart: (e: PressEvent) => {\n if (e.pointerType !== \"touch\" && e.pointerType !== \"keyboard\") {\n // Mouse/virtual clicks should toggle, not just open\n state.toggle(e.pointerType === \"virtual\" ? \"first\" : null);\n } else {\n menuTriggerProps.onPressStart?.(e);\n }\n },\n }),\n [menuTriggerProps, state],\n );\n\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={wrappedMenuTriggerProps}\n buttonRef={buttonRef}\n endAdornment={!hideEndAdornment ? <Icon icon={state.isOpen ? \"chevronUp\" : \"chevronDown\"} /> : null}\n disabled={disabled}\n tooltip={tooltip}\n onClick={wrappedMenuTriggerProps.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={wrappedMenuTriggerProps}\n buttonRef={buttonRef}\n {...tid}\n />\n ) : isIconButton(trigger) ? (\n <IconButton\n {...trigger}\n menuTriggerProps={wrappedMenuTriggerProps}\n buttonRef={buttonRef}\n {...tid}\n disabled={disabled}\n tooltip={tooltip}\n onClick={wrappedMenuTriggerProps.onPress ?? noop}\n forceFocusStyles={showActiveBorder && state.isOpen}\n />\n ) : (\n <AvatarButton\n {...trigger}\n menuTriggerProps={wrappedMenuTriggerProps}\n buttonRef={buttonRef}\n {...tid}\n disabled={disabled}\n tooltip={tooltip}\n onClick={wrappedMenuTriggerProps.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 { 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 /** Shows pressed/active styles (useful when a menu is open) */\n active?: boolean;\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 active = 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 = \"md\",\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 void 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.props({\n ...Css.buttonBase.tt(\"inherit\").$,\n ...baseStyles,\n ...(isHovered && !isPressed && !active ? hoverStyles : {}),\n ...(isPressed || active ? 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: Css.add(styles.baseStyles).add(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.blue600.$,\n hoverStyles: Css.bgGray100.if(contrast).bgGray300.$,\n pressedStyles: Css.bgGray200.if(contrast).bgGray100.$,\n disabledStyles: Css.bgWhite.blue300.$,\n focusStyles: Css.bshFocus.if(contrast).boxShadow(`0 0 0 2px ${Palette.White}`).$,\n },\n\n secondaryBlack: {\n baseStyles: Css.bgWhite.bcGray300.bw1.ba.gray900.$,\n hoverStyles: Css.bgGray100.if(contrast).bgGray700.white.$,\n pressedStyles: Css.bgGray100.gray900.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.Gray900}`)\n .if(contrast)\n .boxShadow(`0px 0px 0px 2px ${Palette.Gray500}`).$,\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 quaternary: {\n baseStyles: Css.bgTransparent.gray900.if(contrast).gray400.$,\n hoverStyles: Css.bgGray100.if(contrast).bgGray700.white.$,\n pressedStyles: Css.gray900.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.Gray900}`)\n .if(contrast)\n .boxShadow(`0px 0px 0px 2px ${Palette.Gray500}`).$,\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.blue600.add(\"fontSize\", \"inherit\").$,\n hoverStyles: Css.bgGray100.$,\n pressedStyles: Css.blue600.$,\n disabledStyles: Css.bgWhite.blue300.$,\n focusStyles: Css.blue600.$,\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 | \"secondaryBlack\"\n | \"tertiary\"\n | \"tertiaryDanger\"\n | \"caution\"\n | \"danger\"\n | \"quaternary\"\n | \"text\"\n | \"textSecondary\";\n","import { AriaButtonProps } from \"@react-types/button\";\nimport { ReactNode, 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: ReactNode;\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 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.props({\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(\n linkContent,\n href,\n mergeProps(buttonProps, focusProps, hoverProps, linkAttributes, { className: navLink }),\n );\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.smSb.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 } 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 { Key as AriaKey } from \"@react-types/shared\";\nimport React, { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useButton, useComboBox, useFilter, useOverlayPosition } from \"react-aria\";\nimport { Item, useComboBoxState } 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 type ComboBoxBaseProps<O, V extends Value> = {\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 /** Returns the display label for an option. Used for rendering and for sorting when `autoSort` is enabled. */\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 * When true (default), options are sorted alphabetically by their label.\n * Set to false to maintain the original order of options.\n */\n autoSort?: boolean;\n} & BeamFocusableProps &\n PresentationFieldProps;\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 autoSort = true,\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, getOptionLabel, unsetLabel, !!onAddNew, autoSort),\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, autoSort]\n : [propOptions.current, propOptions.options, unsetLabel, onAddNew, autoSort],\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 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 // Memoize the children callback to prevent infinite re-render loops.\n // react-aria's useValueId does in-render state updates when selectedItems changes reference.\n // Without memoization, each render creates a new children function → useCollection rebuilds →\n // selectedItems gets a new reference → useValueId triggers re-render → infinite loop.\n const comboBoxChildren = useCallback(\n (item: any) => (\n <Item key={valueToKey(getOptionValue(item))} textValue={getOptionLabel(item)}>\n {getOptionMenuLabel(item)}\n </Item>\n ),\n [getOptionValue, getOptionLabel, getOptionMenuLabel],\n );\n\n const selectedKeys = useMemo(() => {\n return selectedOptions.map((o) => valueToKey(getOptionValue(o)));\n }, [selectedOptions, getOptionValue]);\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: comboBoxChildren,\n };\n\n const state = useComboBoxState<any, \"single\" | \"multiple\">({\n ...comboBoxProps,\n allowsEmptyCollection: true,\n selectionMode: multiselect ? \"multiple\" : \"single\",\n // For multi-select, disable close-on-blur to prevent `commitValue` from calling `onChange`\n // with a stale `displayValue` (the controlled `value` prop before React re-renders).\n // We handle menu close manually in ComboBoxInput's onBlur via `state.toggle()`.\n ...(multiselect ? { shouldCloseOnBlur: false } : {}),\n // Use the new value/onChange API for native multi-select support\n value: multiselect ? selectedKeys : (selectedKeys[0] ?? null),\n // Don't call state.close() inside onChange — `state.close` is mapped to `commitValue` which\n // re-triggers onChange, causing an infinite loop. The native state handles menu close automatically\n // for single-select (closes on value change) and multi-select (stays open).\n onChange: (newValue: AriaKey | AriaKey[] | null) => {\n if (multiselect) {\n const keys = (newValue as AriaKey[]) ?? [];\n const newSelectedOptions = options.filter((o) => keys.includes(valueToKey(getOptionValue(o))));\n onSelect(keys.map(keyToValue) as V[], newSelectedOptions);\n } else {\n const key = newValue as AriaKey | null;\n if (key === selectedKeys[0]) return; // Skip if value hasn't changed\n if (key === null || key === undefined) {\n onSelect([], []);\n return;\n }\n const selectedOption = options.find((o) => valueToKey(getOptionValue(o)) === key);\n if (selectedOption === addNewOption && onAddNew) {\n onAddNew(fieldState.inputValue);\n return;\n }\n onSelect([keyToValue(key)] as V[], selectedOption ? [selectedOption] : []);\n }\n },\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 // For multi-select, use toggle() instead of close() to avoid commitValue(), which\n // calls onChange(displayValue) with a potentially stale controlled value. For single-select,\n // close() (i.e. commitValue) is correct — it commits the input text to the selected value.\n onClose: multiselect ? () => state.toggle() : 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 // See useOverlayPosition onClose comment above for why toggle vs close.\n onClose={() => (multiselect ? state.toggle() : 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 getOptionLabel: (opt: O) => string,\n unsetLabel: string | undefined,\n addNew: boolean,\n autoSort: boolean,\n): O[] {\n const result: O[] = [];\n if (unsetLabel) {\n result.push(unsetOption as unknown as O);\n }\n\n // Collect user options in a separate array so we can sort them independently\n // while keeping special options (unsetOption, addNewOption) at their fixed positions\n const userOptions: O[] = [];\n if (Array.isArray(optionsOrLoad)) {\n userOptions.push(...optionsOrLoad);\n } else {\n const { options, current } = optionsOrLoad;\n if (options) {\n userOptions.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 userOptions.push(current);\n }\n });\n }\n }\n\n // Sort user options if autoSort is enabled\n result.push(...(autoSort ? sortOptions(userOptions, getOptionLabel) : userOptions));\n\n if (addNew) {\n result.push(addNewOption as unknown as O);\n }\n return result;\n}\n\n/** Sorts options alphabetically using getOptionLabel, case-insensitive */\nfunction sortOptions<O>(options: O[], getOptionLabel: (opt: O) => string): O[] {\n return [...options].sort((a, b) => {\n const labelA = getOptionLabel(a).toLowerCase();\n const labelB = getOptionLabel(b).toLowerCase();\n return labelA.localeCompare(labelB);\n });\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 { Key as AriaKey } from \"@react-types/shared\";\nimport React, {\n ChangeEvent,\n InputHTMLAttributes,\n LabelHTMLAttributes,\n MutableRefObject,\n ReactNode,\n useState,\n} from \"react\";\nimport { mergeProps } from \"react-aria\";\nimport { ComboBoxState } from \"react-stately\";\nimport { Chips, CountBadge, 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\ntype ComboBoxInputProps<O, V extends Value> = {\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} & PresentationFieldProps;\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 <CountBadge\n count={isTree ? (selectedOptionsLabels?.length ?? 0) : state.selectionManager.selectedKeys.size}\n data-testid=\"selectedOptionsCount\"\n />\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 // Tree-specific: ArrowLeft/ArrowRight to collapse/expand nodes\n if (isMultiSelect && isTree) {\n const focusedKey = state.selectionManager.focusedKey;\n if (focusedKey == null) return;\n const item = state.collection.getItem(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: AriaKey[]) => prevKeys.filter((k) => k !== item.key));\n } else if (!collapsedKeys.includes(item.key) && e.key === \"ArrowLeft\") {\n setCollapsedKeys((prevKeys: AriaKey[]) => [...prevKeys, item.key]);\n }\n }\n return;\n }\n }\n\n // Prevent form submissions when the menu is open and Enter is pressed.\n if (e.key === \"Enter\" && state.isOpen) {\n e.preventDefault();\n }\n\n // For multi-select Tab, don't pass to native handler. The native handler calls\n // state.commit() → selectionManager.select(focusedKey) which toggles the focused\n // item's selection, inadvertently deselecting it on Tab-out.\n // Let the browser handle Tab navigation naturally; our onBlur handles menu close.\n if (isMultiSelect && e.key === \"Tab\") {\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 setIsFocused(false);\n maybeCall(onBlur);\n state.setFocused(false);\n\n // For multi-select, we use shouldCloseOnBlur: false to prevent `commitValue` from\n // calling onChange with stale data. So we close the menu manually via toggle.\n if (isMultiSelect && state.isOpen) {\n state.toggle();\n }\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 (\n <div>\n {labels?.map((label) => (\n <li key={label}>{label}</li>\n ))}\n </div>\n );\n}\n","import { useLayoutEffect } from \"@react-aria/utils\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport { textFieldBaseMultilineTopPadding, textFieldBasePadding } from \"../TextFieldBase\";\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 maxLines?: number;\n}\n\nexport function useGrowingTextField({ inputRef, inputWrapRef, value, disabled, maxLines }: GrowingTextFieldProps) {\n // Get the actual line height from the rendered element\n const getLineHeight = useCallback((element: HTMLTextAreaElement): number => {\n const computedStyle = window.getComputedStyle(element);\n const lineHeight = computedStyle.lineHeight;\n\n // If line-height is \"normal\" for some reason, calculate it as 1.2x font size (standard browser behavior)\n if (lineHeight === \"normal\") {\n const fontSize = parseFloat(computedStyle.fontSize);\n return fontSize * 1.2;\n }\n\n return parseFloat(lineHeight);\n }, []);\n\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\n // Adding 2px to avoid scrollbar due to border-box when maxLines not used\n const naturalHeight = input.scrollHeight + 2;\n\n let finalHeight = naturalHeight;\n\n // If maxLines is specified, calculate max height and constrain if needed\n if (maxLines && input instanceof HTMLTextAreaElement) {\n const lineHeight = getLineHeight(input);\n // +2 for border compensation\n const maxHeight = maxLines * lineHeight + 2;\n // + TextFieldBaseMultilineTopPadding to prevent text from being cutoff when displaying max lines\n finalHeight = Math.min(naturalHeight, maxHeight) + textFieldBaseMultilineTopPadding;\n\n // Enable/disable scrolling based on whether content exceeds limit\n // Swap padding from parentwrapper to input so scrollbar is flush with border\n if (naturalHeight > maxHeight) {\n input.style.overflowY = \"auto\";\n input.style.paddingRight = `${textFieldBasePadding}px`;\n inputWrap.style.paddingRight = \"0px\";\n } else {\n input.style.overflowY = \"hidden\";\n input.style.paddingRight = \"0px\";\n inputWrap.style.paddingRight = `${textFieldBasePadding}px`;\n }\n }\n\n inputWrap.style.height = `${finalHeight}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, maxLines, getLineHeight]);\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 { Key as AriaKey } from \"@react-types/shared\";\nimport React, {\n Dispatch,\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 } 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 type TreeSelectFieldProps<O, V extends Value> = {\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} & BeamFocusableProps &\n PresentationFieldProps;\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<AriaKey[]>([]);\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\ntype CollapsedChildrenState<O, V extends Value> = {\n collapsedKeys: AriaKey[];\n setCollapsedKeys: Dispatch<SetStateAction<AriaKey[]>>;\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<AriaKey> = 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 // Memoize the children callback to prevent infinite re-render loops with react-aria v3.33+.\n // See ComboBoxBase.tsx for detailed explanation.\n const comboBoxChildren = useCallback(\n ([item]: LeveledOption<O>) => (\n <Item key={valueToKey(getOptionValue(item))} textValue={getOptionLabel(item)}>\n {getOptionMenuLabel(item)}\n </Item>\n ),\n [getOptionValue, getOptionLabel, getOptionMenuLabel],\n );\n\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 items: fieldState.filteredOptions,\n isDisabled,\n isReadOnly,\n onInputChange,\n onOpenChange,\n children: comboBoxChildren,\n };\n\n const state = useComboBoxState<any, \"multiple\">({\n ...comboBoxProps,\n allowsEmptyCollection: true,\n selectionMode: \"multiple\",\n // Prevent commitValue from calling onChange with stale displayValue on blur.\n // Menu close is handled manually in ComboBoxInput's onBlur via state.toggle().\n shouldCloseOnBlur: false,\n value: fieldState.selectedKeys,\n onChange: (newValue: AriaKey[]) => {\n const newKeys = new Set(newValue);\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 // `onChange` 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 // Use toggle() instead of close() to avoid commitValue(), which calls onChange(displayValue)\n // with a potentially stale controlled value. See ComboBoxBase.tsx for details.\n onClose: () => state.toggle(),\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 // See useOverlayPosition onClose comment above for why toggle vs close.\n onClose={() => state.toggle()}\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: AriaKey[],\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<AriaKey>,\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 { Key as AriaKey } from \"@react-types/shared\";\nimport React, { MutableRefObject, useEffect, useRef, useState } from \"react\";\nimport { useListBox } from \"react-aria\";\nimport { ListState } 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\n// ListBox uses ListState (collection + selectionManager) as its state type,\n// which is the shared base of both SelectState and ComboBoxState.\ntype ListBoxProps<O, V extends AriaKey> = {\n listBoxRef: MutableRefObject<HTMLDivElement | null>;\n state: ListState<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 AriaKey>(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 Css.bgWhite.br4.w100.bshBasic.hPx(popoverHeight).df.fdc.if(contrast).bgGray700.if(horizontalLayout).w50.onHover\n .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 { ListState } 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\ntype ListBoxSectionProps<O> = {\n section: Node<O>;\n state: ListState<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 {\n chipBaseStyles,\n chipDisabledStyles,\n chipHoverOnlyStyles,\n Icon,\n maybeTooltip,\n resolveTooltip,\n} from \"src/components\";\nimport { Popover } from \"src/components/internal\";\nimport { Label } from \"src/components/Label\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Palette } 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 = { ...chipBaseStyles(), ...Css.pyPx(2).gap0.aiStretch.$ };\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.relative.p0.mwPx(32).$,\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 ? chipDisabledStyles : chipHoverOnlyStyles),\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 ...chipHoverOnlyStyles,\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\" color={Palette.Gray600} 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 { chipBaseStyles } from \"src/components\";\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\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 ...chipBaseStyles(fieldProps?.compact),\n ...Css.mwPx(32).outline0.$,\n ...(isFocused && Css.bshFocus.$),\n }}\n {...tid}\n >\n {valueRef.current}\n </span>\n );\n}\n","import { chipBaseStyles } from \"src/components\";\nimport { 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 css={{ ...chipBaseStyles(fieldProps?.compact), ...Css.truncate.dib.$ }} title={label}>\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\n// Keys are embedded in element IDs and `data-key` attributes; colons in keys\n// produce invalid CSS selectors in jsdom, so we use `--` as a separator.\nconst VALUE_PREFIX = \"__VALUE--\";\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 // Support both old (colon) and new (double-dash) separators for backward compatibility\n if (key === `${VALUE_PREFIX}null` || key === \"__VALUE:null\") {\n return null as V;\n } else if (key === `${VALUE_PREFIX}undefined` || key === \"__VALUE:undefined\") {\n return undefined as V;\n } else if (key.startsWith(`${VALUE_PREFIX}boolean--`) || key.startsWith(\"__VALUE:boolean:\")) {\n const parts = key.includes(\"--boolean--\") ? key.split(\"--\") : key.split(\":\");\n return (parts[parts.length - 1] === \"true\") as V;\n } else if (key.startsWith(`${VALUE_PREFIX}number--`) || key.startsWith(\"__VALUE:number:\")) {\n const parts = key.includes(\"--number--\") ? key.split(\"--\") : key.split(\":\");\n return Number(parts[parts.length - 1]) 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_PREFIX}number--${value}`;\n } else if (typeof value === \"boolean\") {\n return `${VALUE_PREFIX}boolean--${value}`;\n } else if (value === null) {\n return `${VALUE_PREFIX}null`;\n } else if (value === undefined) {\n return `${VALUE_PREFIX}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 { getInteractionModality } from \"@react-aria/interactions\";\nimport { Node } from \"@react-types/shared\";\nimport { useEffect, useRef } from \"react\";\nimport { ListState } 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\ntype VirtualizedOptionsProps<O> = {\n state: ListState<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 focusedKey = state.selectionManager.focusedKey;\n const focusedItem = focusedKey != null ? state.collection.getItem(focusedKey) : null;\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 // Only scroll for keyboard-initiated focus changes. Scrolling on pointer/mouse focus changes\n // causes Virtuoso to recycle DOM nodes mid-press, which breaks React Aria's usePress lifecycle\n // (the pointerup event is lost, so onPress/onSelect never fires).\n useEffect(\n () => {\n if (!!scrollOnFocus && getInteractionModality() === \"keyboard\" && 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 dotCss = 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 aria-label=\"Loading\" css={Css.df.gapPx(4).$}>\n <div css={{ ...dotCss, ...Css.add(\"animationDelay\", \"0ms\").$ }} />\n <div css={{ ...dotCss, ...Css.add(\"animationDelay\", \"300ms\").$ }} />\n <div css={{ ...dotCss, ...Css.add(\"animationDelay\", \"600ms\").$ }} />\n </div>\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, maybeTooltip } from \"src/components\";\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 /** Tooltip content is set when disabled prop is a ReactNode via `Checkbox` component */\n tooltip?: ReactNode;\n /**\n * Removes maxwidth restrictions on the checkbox container\n * label, helperText, errorMsg, description props extend full width of the checkbox container as necessary\n * @default false\n */\n fullWidth?: 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 tooltip,\n fullWidth = false,\n } = props;\n const ref = useRef(null);\n const { isFocusVisible, focusProps } = useFocusRing(ariaProps);\n const tid = useTestIds(props, defaultTestId(label));\n\n const maxWidth = fullWidth ? \"none\" : description !== undefined ? px(344) : px(320);\n const Tag = withLabelElement ? \"label\" : \"div\";\n\n return maybeTooltip({\n title: tooltip,\n placement: \"top\",\n children: (\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(maxWidth)\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}\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 markSvgStyles = Css.absolute.topPx(-1).leftPx(-1).$;\nconst labelStyles = Css.sm.$;\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 }}\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\" css={markSvgStyles}>\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\" css={markSvgStyles}>\n <rect x=\"4\" y=\"7.5\" width=\"8\" height=\"1.35\" fill={Palette.White} />\n </svg>\n);\n","import { Key as AriaKey, Node } from \"@react-types/shared\";\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: AriaKey[];\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: AriaKey,\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: AriaKey,\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 as AriaKey } from \"@react-types/shared\";\nimport { ListState } from \"react-stately\";\nimport { ToggleChip } from \"src/components\";\nimport { Css } from \"src/Css\";\n\ntype ListBoxToggleChipProps<O, V extends AriaKey> = {\n state: ListState<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 AriaKey>(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 { resolveTooltip } from \"src/components\";\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 /** Additional text displayed below label */\n description?: string;\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 helperText?: string | ReactNode;\n /**\n * Removes maxwidth restrictions on the checkbox container\n * label, helperText, errorMsg, description props extend full width of the checkbox container as necessary\n * @default false\n */\n fullWidth?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange: (selected: boolean) => void;\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 = 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: !!disabled, 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={ariaProps.isDisabled}\n isIndeterminate={isIndeterminate}\n isSelected={isSelected}\n inputProps={inputProps}\n label={label}\n tooltip={resolveTooltip(disabled)}\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 { useLabelSuffix } from \"src/forms/labelUtils\";\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 required?: boolean;\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 required,\n } = props;\n\n const state = useCheckboxGroupState({ ...props, value: values });\n const { groupProps, labelProps } = useCheckboxGroup(props, state);\n const tid = useTestIds(props);\n const labelSuffix = useLabelSuffix(required, false);\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} suffix={labelSuffix} />\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 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.xs.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 type MultiSelectFieldProps<O, V extends Value> = {\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} & Exclude<ComboBoxBaseProps<O, V>, \"unsetLabel\" | \"addNew\">;\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 // Tracks the last value we sent to the parent via onChange, so the render-time sync\n // can distinguish \"echo of user typing\" from \"genuinely external value change\".\n const lastSentRef = useRef<number | undefined>(undefined);\n\n // Render-time sync: if the value prop changed externally while focused, update valueRef.\n // We compare against lastSentRef to avoid reacting to echoes of our own onChange calls,\n // which would cause react-aria to reformat the input and break cursor position.\n const propValue = value === undefined ? Number.NaN : value / factor;\n if (valueRef.current.wip && !Object.is(valueRef.current.value, propValue)) {\n const lastSentInternal = lastSentRef.current === undefined ? Number.NaN : lastSentRef.current / factor;\n if (!Object.is(propValue, lastSentInternal)) {\n // Genuinely external change — update what react-aria sees\n valueRef.current.value = propValue;\n }\n }\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 lastSentRef.current = value;\n },\n onBlur: () => {\n valueRef.current = { wip: false };\n lastSentRef.current = undefined;\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 const formatted = formatValue(parsedValue, factor, numFractionDigits, numIntegerDigits, positiveOnly);\n lastSentRef.current = formatted;\n onChange(formatted);\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 type 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 type RadioGroupFieldProps<K extends string> = {\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} & Pick<PresentationFieldProps, \"labelStyle\">;\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 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}\n isOptionDisabled={!!option.disabled}\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 // Per-option disabled flag, kept separate from state to avoid spreading RadioGroupState.\n // react-aria uses a WeakMap keyed by the state object identity to store radio group\n // metadata, so spreading state into a new object breaks the lookup.\n isOptionDisabled?: boolean;\n onBlur?: () => void;\n onFocus?: () => void;\n}) {\n const {\n parentId,\n option: { description, label, value },\n state,\n isOptionDisabled,\n ...others\n } = props;\n\n const labelId = `${parentId}-${value}-label`;\n const descriptionId = `${parentId}-${value}-description`;\n const ref = useRef<HTMLInputElement>(null);\n // Pass per-option isDisabled via useRadio's props rather than overriding state.isDisabled.\n // useRadio merges props.isDisabled with state.isDisabled internally (props.isDisabled || state.isDisabled).\n const { inputProps, isDisabled } = useRadio(\n { value, \"aria-labelledby\": labelId, isDisabled: isOptionDisabled },\n state,\n ref,\n );\n const disabled = isDisabled;\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.sm.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 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\";\nimport \"./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 className=\"beam-trix-editor\">\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 </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\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 type SelectFieldProps<O, V extends Value> = {\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} & Omit<ComboBoxBaseProps<O, V>, \"values\" | \"onSelect\" | \"multiselect\">;\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 /** Storybook-only visual state overrides for snapshotting pseudo-interactions. */\n __storyState?: {\n hovered?: boolean;\n focusVisible?: boolean;\n };\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 __storyState,\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: isFocusVisibleFromEvents, focusProps } = useFocusRing(otherProps);\n const { hoverProps, isHovered: isHoveredFromEvents } = useHover(ariaProps);\n const isFocusVisible = __storyState?.focusVisible ?? isFocusVisibleFromEvents;\n const isHovered = __storyState?.hovered ?? isHoveredFromEvents;\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(toggleWidth(compact)).hPx(toggleHeight(compact)).bgGray200.br12.relative.transition.$,\n ...(isHovered && switchHoverStyles),\n ...(isFocusVisible && 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\n icon={isSelected ? \"check\" : \"x\"}\n color={isSelected ? Palette.Blue700 : Palette.Gray400}\n inc={toggleHeight(compact) / 16}\n />\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.sm.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 toggleWidth = (isCompact: boolean) => (isCompact ? 32 : 40);\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 };\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 // Maximum number of lines before scrolling is enabled, must be >= 5 to take effect; If not provided, the textarea will grow indefinitely.\n maxLines?: number;\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 maxLines,\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, maxLines });\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 /** Storybook-only visual state overrides for snapshotting pseudo-interactions. */\n __storyState?: {\n hovered?: boolean;\n pressed?: boolean;\n focusVisible?: boolean;\n };\n}\n\nexport function ToggleButton(props: ToggleButtonProps) {\n const { selected: isSelected = false, disabled = false, label, onChange, icon, __storyState, ...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 void result.finally(() => setAsyncInProgress(false));\n }\n return result;\n },\n });\n const labelRef = useRef(null);\n const ref = useRef(null);\n const tid = useTestIds(otherProps, label);\n const { isPressed: isPressedFromEvents, pressProps } = usePress({ ref: labelRef, isDisabled });\n const { inputProps } = useSwitch(ariaProps, state, ref);\n const { isFocusVisible: isFocusVisibleFromEvents, focusProps } = useFocusRing({ ...otherProps, within: true });\n const { hoverProps, isHovered: isHoveredFromEvents } = useHover({ isDisabled });\n\n const isHovered = __storyState?.hovered ?? isHoveredFromEvents;\n const isPressed = __storyState?.pressed ?? isPressedFromEvents;\n const isFocusVisible = __storyState?.focusVisible ?? isFocusVisibleFromEvents;\n\n const tooltip = resolveTooltip(disabled);\n\n const labelAttrs = {\n ...focusProps,\n ...hoverProps,\n ...pressProps,\n ...Css.props({\n ...Css.br4.dif.aic.gap1.bgTransparent.gray500.hPx(32).plPx(4).pr1.relative.cursorPointer.w(\"max-content\").sm.usn\n .$,\n ...(isHovered && toggleHoverStyles),\n ...(isPressed && togglePressStyles),\n ...(isSelected && !isDisabled && Css.blue700.$),\n ...(isFocusVisible && 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 { useLabelSuffix } from \"src/forms/labelUtils\";\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 readonly?: boolean;\n};\n\nexport interface ToggleChipGroupProps extends Pick<PresentationFieldProps, \"labelStyle\"> {\n label: string;\n options: ToggleChipItemProps[];\n values: string[];\n readonly?: boolean;\n required?: boolean;\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 {\n values,\n label,\n labelStyle = fieldProps?.labelStyle ?? \"above\",\n options,\n required,\n xss,\n readonly = false,\n } = props;\n const state = useCheckboxGroupState({ ...props, isReadOnly: readonly, value: values });\n const { groupProps, labelProps } = useCheckboxGroup(props, state);\n const tid = useTestIds(props, \"toggleChip\");\n const labelSuffix = useLabelSuffix(required, false);\n\n return (\n <div {...groupProps} css={Css.relative.df.fdc.if(labelStyle === \"left\").fdr.gap2.maxw100.jcsb.$}>\n <Label\n label={label}\n {...labelProps}\n hidden={labelStyle === \"hidden\"}\n inline={labelStyle !== \"above\"}\n suffix={labelSuffix}\n />\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 readonly={o.readonly}\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 readonly?: boolean;\n startAdornment?: ReactNode;\n xss?: ToggleChipXss;\n}\n\nfunction ToggleChip(props: ToggleChipProps) {\n const {\n label,\n value,\n groupState,\n selected: isSelected,\n disabled = false,\n readonly = false,\n startAdornment,\n xss,\n ...others\n } = props;\n const isDisabled = !!disabled;\n const isReadOnly = !!readonly;\n const ref = useRef(null);\n const { inputProps } = useCheckboxGroupItem({ value, \"aria-label\": label, isReadOnly, isDisabled }, groupState, ref);\n const { isFocusVisible, focusProps } = useFocusRing();\n const tooltip = resolveTooltip(disabled);\n const chipStateCss = isSelected\n ? Css.color(xss?.color ?? Palette.White)\n .bgColor(xss?.backgroundColor ?? Palette.Blue700)\n .if(!isDisabled)\n .onHover.bgColor(xss?.backgroundColor ?? Palette.Blue800).$\n : isDisabled\n ? Css.bgGray200.cursorNotAllowed.gray600.$\n : !groupState.isReadOnly\n ? Css.bgGray200.onHover.bgGray300.$\n : Css.bgGray200.$;\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).pr1.$,\n ...chipStateCss,\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 type { GridDataRow } from \"src/components/Table/components/Row\";\nimport { SelectToggle } from \"src/components/Table/components/SelectToggle\";\nimport { ResizedWidths } from \"src/components/Table/hooks/useColumnResizing\";\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 { canHide: true, initHidden: false, ...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 { canHide: true, initHidden: false, ...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 { canHide: true, initHidden: false, ...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\nexport function parseWidthToPx(widthStr: string | undefined, tableWidth: number | undefined): number | null {\n if (!widthStr) return null;\n\n if (widthStr.endsWith(\"px\")) {\n const parsed = parseInt(widthStr.replace(\"px\", \"\"), 10);\n return isNaN(parsed) ? null : parsed;\n }\n\n if (widthStr.endsWith(\"%\") && tableWidth) {\n const percent = parseFloat(widthStr.replace(\"%\", \"\"));\n if (isNaN(percent)) return null;\n return Math.round((percent / 100) * tableWidth);\n }\n\n // For calc() or other complex expressions, return null\n // These should never happen since we've run calcColumnSizes already resolved to px\n // by the time resizing happens\n return null;\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 resizedWidths?: ResizedWidths,\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 // Use resized width if available, otherwise use expanded width or original width\n const resizedWidth = resizedWidths?.[id];\n const w =\n resizedWidth !== undefined\n ? `${resizedWidth}px`\n : expandedColumnIds.includes(id) && expandedWidth !== undefined\n ? expandedWidth\n : _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 // Use resized width if available, otherwise use expanded width or original width\n const resizedWidth = resizedWidths?.[id];\n const w =\n resizedWidth !== undefined\n ? `${resizedWidth}px`\n : expandedColumnIds.includes(id) && expandedWidth !== undefined\n ? expandedWidth\n : _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 type { 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\";\nimport { ResizedWidths } from \"src/components/Table/hooks/useColumnResizing\";\nimport { GridColumnWithId, Kinded } from \"src/components/Table/types\";\nimport { parseWidthToPx } from \"src/components/Table/utils/columns\";\n\ntype ColumnWidthInfo = {\n id: string;\n currentWidth: number;\n minWidth: number;\n};\n\ntype DistributionResult = {\n updates: ResizedWidths;\n actualAdjustment: number;\n};\n\n/**\n * Hook to manage column resize handlers and calculations.\n * Handles the complex logic of distributing width changes across columns\n * while maintaining table width and respecting minimum widths.\n */\nexport function useColumnResizeHandlers<R extends Kinded>(\n columns: GridColumnWithId<R>[],\n columnSizes: string[],\n tableWidth: number | undefined,\n setResizedWidth: (columnId: string, width: number) => void,\n setResizedWidths: (widths: ResizedWidths | ((prev: ResizedWidths) => ResizedWidths)) => void,\n): {\n handleColumnResize: (columnId: string, newWidth: number, columnIndex: number) => void;\n calculatePreviewWidth: (columnId: string, newWidth: number, columnIndex: number) => number;\n} {\n // Track whether columns have been locked to pixel widths in this session.\n // Separate from resizedWidths.length because persisted widths don't trigger locking.\n // TODO: Could add a \"Reset Column Widths\" button to clear resizedWidths and unlock.\n const hasLockedColumnsRef = useRef<boolean>(false);\n\n // Helper to distribute adjustment proportionally among right columns\n const distributeAdjustment = useCallback(\n (rightColumns: Array<ColumnWidthInfo>, totalRightWidth: number, adjustment: number): DistributionResult => {\n const updates: ResizedWidths = {};\n let remainingAdjustment = adjustment;\n\n // Distribute the adjustment across all right columns proportionally\n rightColumns.forEach((col) => {\n const proportion = totalRightWidth > 0 ? col.currentWidth / totalRightWidth : 1 / rightColumns.length;\n const colAdjustment = adjustment * proportion;\n const newColWidth = Math.max(col.minWidth, col.currentWidth + colAdjustment);\n\n updates[col.id] = newColWidth;\n remainingAdjustment -= newColWidth - col.currentWidth;\n });\n\n return { updates, actualAdjustment: adjustment - remainingAdjustment };\n },\n [],\n );\n\n const calculateResizeUpdates = useCallback(\n (\n columnId: string,\n newWidth: number,\n columnIndex: number,\n ): { updates: ResizedWidths; hasRightColumns: boolean } | null => {\n if (!tableWidth || !columnSizes || columnSizes.length === 0) {\n return null;\n }\n\n const currentSizeStr = columnSizes[columnIndex];\n const currentWidth = parseWidthToPx(currentSizeStr, tableWidth) ?? 0;\n const resizedColumn = columns[columnIndex];\n const resizedColumnMinWidth = resizedColumn.mw ? parseInt(resizedColumn.mw.replace(\"px\", \"\"), 10) : 0;\n const clampedNewWidth = Math.max(resizedColumnMinWidth, newWidth);\n const delta = clampedNewWidth - currentWidth;\n\n if (delta === 0) {\n return { updates: {}, hasRightColumns: false };\n }\n\n // Find right columns and calculate how much they can shrink\n const rightColumns: Array<ColumnWidthInfo> = [];\n let totalRightWidth = 0;\n\n for (let i = columnIndex + 1; i < columns.length; i++) {\n const col = columns[i];\n // Skip action columns\n if (col.isAction) {\n continue;\n }\n\n const sizeStr = columnSizes[i];\n const width = parseWidthToPx(sizeStr, tableWidth) ?? 0;\n const minWidth = col.mw ? parseInt(col.mw.replace(\"px\", \"\"), 10) : 0;\n\n rightColumns.push({\n id: col.id,\n currentWidth: width,\n minWidth,\n });\n totalRightWidth += width;\n }\n\n // If no resizable columns to the right, just update this column\n if (rightColumns.length === 0) {\n return { updates: { [columnId]: clampedNewWidth }, hasRightColumns: false };\n }\n\n // Distribute the opposite of the delta to right columns to keep table width constant\n // If we shrink by 30, right columns grow by 30. If we grow by 30, right columns shrink by 30.\n const distributionResult = distributeAdjustment(rightColumns, totalRightWidth, -delta);\n\n // Always use the actual distributed amount to ensure table width stays constant\n // actualAdjustment is the amount that was successfully distributed to right columns\n // We adjust the resized column by the opposite of this to maintain constant table width\n const actualAdjustment = distributionResult.actualAdjustment;\n const finalResizedWidth = currentWidth - actualAdjustment;\n\n // Enforce minWidth on the final resized width as well\n // This ensures we never shrink below the column's minimum width\n const clampedFinalWidth = Math.max(resizedColumnMinWidth, finalResizedWidth);\n\n const updates: ResizedWidths = {\n [columnId]: clampedFinalWidth,\n ...distributionResult.updates,\n };\n\n return { updates, hasRightColumns: true };\n },\n [tableWidth, columnSizes, columns, distributeAdjustment],\n );\n\n // Calculate the preview width for a column resize (without applying it) so our guide line is accurate\n const calculatePreviewWidth = useCallback(\n (columnId: string, newWidth: number, columnIndex: number): number => {\n const result = calculateResizeUpdates(columnId, newWidth, columnIndex);\n if (!result) {\n return newWidth;\n }\n return result.updates[columnId] ?? newWidth;\n },\n [calculateResizeUpdates],\n );\n\n const handleColumnResize = useCallback(\n (columnId: string, newWidth: number, columnIndex: number) => {\n const result = calculateResizeUpdates(columnId, newWidth, columnIndex);\n\n if (!result) {\n setResizedWidth(columnId, newWidth);\n return;\n }\n\n if (Object.keys(result.updates).length === 0) {\n return;\n }\n\n // On first manual resize, lock all columns to pixel widths to prevent fr unit shifting.\n // We check hasLockedColumnsRef instead of resizedWidths.length because persisted widths\n // from sessionStorage don't count as manual resizes in this session.\n if (!hasLockedColumnsRef.current) {\n const lockedWidths: ResizedWidths = {};\n columnSizes.forEach((sizeStr, idx) => {\n const col = columns[idx];\n\n // Don't resize action col\n if (col.isAction) return;\n const currentWidth = parseWidthToPx(sizeStr, tableWidth) ?? 0;\n lockedWidths[col.id] = currentWidth;\n });\n\n setResizedWidths((prev) => ({\n ...prev,\n ...lockedWidths,\n ...result.updates,\n }));\n hasLockedColumnsRef.current = true;\n return;\n }\n\n setResizedWidths(result.updates);\n },\n [calculateResizeUpdates, setResizedWidths, columnSizes, columns, setResizedWidth, tableWidth],\n );\n\n return {\n handleColumnResize,\n calculatePreviewWidth,\n };\n}\n","import { useMemo } from \"react\";\n\n/**\n * Track a table's scroll row index in `sessionStorage`, scoped to pathname + search + `tableId`.\n * Key: `scrollPosition_${window.location.pathname}${window.location.search}_${tableId}`. Browser-only.\n * If `enabled` is false, reads return `undefined` (writes still allowed).\n *\n * Including search params ensures that different filter states have separate scroll positions,\n * preventing invalid scroll restoration when filters change the data set size.\n *\n * @param tableId - Stable table identifier for the route.\n * @param enabled - Disable reads; defaults to true.\n */\nexport function useScrollStorage(tableId: string, enabled: boolean = true) {\n const storageKey = `scrollPosition_${window.location.pathname}${window.location.search}_${tableId}`;\n\n return useMemo(\n () => ({\n getScrollIndex: () => {\n if (!enabled) return undefined;\n const value = sessionStorage.getItem(storageKey);\n return value === null ? undefined : parseInt(value, 10);\n },\n setScrollIndex: (index: number) => {\n sessionStorage.setItem(storageKey, index.toString());\n },\n }),\n [storageKey, enabled],\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 { ResizedWidths, useColumnResizing } from \"src/components/Table/hooks/useColumnResizing\";\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 visibleColumnsStorageKey: string | undefined,\n disableColumnResizing: boolean,\n): {\n columnSizes: string[];\n tableWidth: number | undefined;\n resizedWidths: ResizedWidths;\n setResizedWidth: (columnId: string, width: number) => void;\n setResizedWidths: (widths: ResizedWidths | ((prev: ResizedWidths) => ResizedWidths)) => void;\n resetColumnWidths: () => void;\n} {\n // Call useColumnResizing to manage column width state and persistence\n const { resizedWidths, setResizedWidth, setResizedWidths, resetColumnWidths } = useColumnResizing(\n disableColumnResizing ? undefined : visibleColumnsStorageKey,\n );\n\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 // Track previous table width to detect container resize\n const prevTableWidthRef = useRef<number | undefined>(tableWidth);\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, resizedWidths),\n );\n\n const setTableAndColumnWidths = useCallback(\n (width: number) => {\n setTableWidth(width);\n setColumnSizes(calcColumnSizes(columns, width, style.minWidthPx, expandedColumnIds, resizedWidths));\n },\n [setTableWidth, setColumnSizes, columns, style, expandedColumnIds, resizedWidths],\n );\n\n // Scale resized column widths when container width changes\n useEffect(() => {\n if (!prevTableWidthRef.current) {\n prevTableWidthRef.current = tableWidth;\n return;\n }\n\n if (!tableWidth) return;\n\n const prevWidth = prevTableWidthRef.current;\n const widthChanged = Math.abs(tableWidth - prevWidth) > 1; // Allow 1px tolerance for subpixel rounding\n\n if (widthChanged) {\n const scale = tableWidth / prevWidth;\n\n setResizedWidths((currentResizedWidths: ResizedWidths): ResizedWidths => {\n if (!currentResizedWidths || Object.keys(currentResizedWidths).length === 0) {\n return currentResizedWidths;\n }\n\n const scaledWidths: ResizedWidths = {};\n Object.entries(currentResizedWidths).forEach(([id, width]) => {\n scaledWidths[id] = Math.round(width * scale);\n });\n\n return scaledWidths;\n });\n\n prevTableWidthRef.current = tableWidth;\n }\n }, [tableWidth, setResizedWidths]);\n\n // Used to recalculate our columns sizes when columns or resized widths 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, resizedWidths, 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, tableWidth, resizedWidths, setResizedWidth, setResizedWidths, resetColumnWidths };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type ResizedWidths = Record<string, number>;\n\n/**\n * Hook to manage column resizing state and persistence.\n * Stores resized column widths in sessionStorage with debounced writes (500ms).\n *\n * @param storageKey - Unique key for sessionStorage. If undefined, persistence is disabled.\n */\nexport function useColumnResizing(storageKey: string | undefined): {\n resizedWidths: ResizedWidths;\n setResizedWidth: (columnId: string, width: number) => void;\n setResizedWidths: (widths: ResizedWidths | ((prev: ResizedWidths) => ResizedWidths)) => void;\n resetColumnWidths: () => void;\n} {\n const [resizedWidths, setResizedWidths] = useState<ResizedWidths>(() => {\n if (!storageKey) return {};\n try {\n const stored = sessionStorage.getItem(`columnWidths_${storageKey}`);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n });\n\n // Debounced persistence to session storage - prevents blocking main thread during fast dragging\n const persistToStorage = useDebouncedCallback((widths: ResizedWidths) => {\n if (!storageKey) return;\n\n const key = `columnWidths_${storageKey}`;\n try {\n sessionStorage.setItem(key, JSON.stringify(widths));\n } catch {\n // Ignore storage errors\n }\n }, 500);\n\n useEffect(() => {\n persistToStorage(resizedWidths);\n }, [resizedWidths, persistToStorage]);\n\n const setResizedWidth = useCallback((columnId: string, width: number) => {\n setResizedWidths((prev) => ({\n ...prev,\n [columnId]: width,\n }));\n }, []);\n\n const batchSetResizedWidths = useCallback((widths: ResizedWidths | ((prev: ResizedWidths) => ResizedWidths)) => {\n if (typeof widths === \"function\") {\n setResizedWidths(widths);\n } else {\n setResizedWidths((prev) => ({\n ...prev,\n ...widths,\n }));\n }\n }, []);\n\n const resetColumnWidths = useCallback(() => {\n setResizedWidths({});\n }, []);\n\n return {\n resizedWidths,\n setResizedWidth,\n setResizedWidths: batchSetResizedWidths,\n resetColumnWidths,\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, IconKey } from \"src/components/Icon\";\nimport { usePresentationContext } from \"src/components/PresentationContext\";\nimport { Css, Margin, Only, Palette, Xss } from \"src/Css\";\nimport { useHover } from \"src/hooks\";\nimport { useTestIds } from \"src/utils/useTestIds\";\nimport { chipBaseStyles } from \"./Chip\";\n\ntype ToggleChipXss = Xss<Margin>;\n\nexport interface ToggleChipProps<X> {\n text: string;\n onClick: () => void;\n xss?: X;\n disabled?: boolean;\n icon?: IconKey;\n}\n\nexport function ToggleChip<X extends Only<ToggleChipXss, X>>(props: ToggleChipProps<X>) {\n const { text, onClick, xss = {}, disabled = false, icon } = props;\n const { fieldProps } = usePresentationContext();\n const { hoverProps, isHovered } = useHover({});\n\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 ...chipBaseStyles(compact),\n ...(isHovered && !disabled && chipHoverStyles),\n // Use a lower right-padding to get closer to the `X` circle when clearable, i.e. not disabled\n ...(!disabled && Css.prPx(4).$),\n ...(disabled && { ...chipDisabledStyles, ...Css.pr1.$ }),\n ...xss,\n }}\n disabled={disabled}\n onClick={onClick}\n {...hoverProps}\n {...tid}\n >\n {icon && (\n <span css={Css.fs0.$} {...tid.icon}>\n <Icon icon={icon} color={Palette.Gray900} inc={2} />\n </span>\n )}\n <span css={Css.tal.lineClamp1.wbba.if(disabled).pr0.$} title={text}>\n {text}\n </span>\n {/* x icon is not displayed when chip is disabled */}\n {!disabled && (\n <span css={{ ...Css.fs0.br16.bgGray200.$, ...(isHovered && chipHoverStyles) }} {...tid.x}>\n <Icon icon=\"x\" color={Palette.Gray600} inc={2} />\n </span>\n )}\n </button>\n );\n}\n\nexport const chipHoverStyles = Css.bgGray300.$;\nexport const chipHoverOnlyStyles = Css.onHover.bgGray300.$;\nexport const chipDisabledStyles = Css.gray600.cursorNotAllowed.$;\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, 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 onToggle?: VoidFunction;\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 onToggle,\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 // Use a state-based ref so that useResizeObserver re-subscribes when the content div mounts/unmounts.\n // In react-aria v3.33+, useResizeObserver wraps onResize in useEffectEvent, so only ref/box changes in the deps\n // trigger re-subscription. A plain useRef never changes identity, so the observer would not be created when the\n // conditionally-rendered content div appears.\n const [contentEl, setContentEl] = useState<HTMLDivElement | null>(null);\n const contentRef = useMemo(() => ({ current: contentEl }), [contentEl]);\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 && contentEl ? `${contentEl.scrollHeight}px` : \"0\");\n }, [expanded, contentEl]);\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 // Note - react-aria v3.33+ wraps onResize in useEffectEvent, so changes to onResize's identity\n // do NOT cause useResizeObserver to re-subscribe. Only `ref` changes trigger that (see\n // contentRef/useMemo above). The useCallback deps here still matter for closure freshness\n // (so the callback sees current values), just not for re-subscription.\n const onResize = useCallback(() => {\n if (contentEl && expanded) {\n setContentHeight(`${contentEl.scrollHeight}px`);\n }\n }, [expanded, contentEl, setContentHeight]);\n useResizeObserver({ ref: contentRef, onResize });\n\n const toggle = useCallback(() => {\n setExpanded((prev) => !prev);\n if (setExpandedIndex) setExpandedIndex(index);\n if (onToggle) onToggle();\n }, [index, setExpandedIndex, onToggle]);\n\n const touchableStyle = useMemo(\n () => ({\n ...Css.df.jcsb.gapPx(12).aic.p2.md.outline(\"none\").onHover.bgGray100.if(!!titleOnClick).onHover.mdSb.$,\n ...(compact && Css.sm.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={setContentEl} {...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 .add(\"transition\", \"transform 250ms linear\")\n .add(\"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.smSb.$}>\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.md.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),\n // with another 3rd party dialog (such as a lightbox), or with a tooltip on top of it.\n return (\n allowClosing &&\n !(\n el.closest(\".tribute-container\") ||\n el.closest(\"[role='dialog']\") ||\n el.closest(\"[role='alert']\") ||\n el.closest(\"[role='tooltip']\")\n )\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.xl2.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.md.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 // Using z9999 to ensure notifications appear above all other UI elements, including FormPageLayout\n css={Css.fixed.z9999.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 { 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 // Prevent body scrolling when the SuperDrawer opens\n useEffect(() => {\n if (content) {\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = \"\";\n };\n }\n }, [content]);\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 {/* 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 <div ref={headerRef} css={Css.gray900.fg1.$}></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 { ObjectState } from \"@homebound/form-state\";\nimport React, { createRef, RefObject, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useButton, useFocusRing } from \"react-aria\";\nimport { Css, Palette } from \"src/Css\";\nimport { BoundForm, BoundFormInputConfig, SubmitButton } from \"src/forms\";\nimport { useHover } from \"src/hooks\";\nimport { useTestIds } from \"src/utils\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { Icon, IconKey } from \"../Icon\";\nimport { RIGHT_SIDEBAR_MIN_WIDTH, RightSidebar, SidebarContentProps } from \"../RightSidebar\";\nimport { Toast } from \"../Toast/Toast\";\nimport { useToastContext } from \"../Toast/ToastContext\";\nimport { HeaderBreadcrumb, PageHeaderBreadcrumbs } from \"./PageHeaderBreadcrumbs\";\n\ntype FormSection<F> = {\n title?: string;\n icon?: IconKey;\n rows: BoundFormInputConfig<F>;\n};\n\nexport type FormSectionConfig<F> = FormSection<F>[];\n\ntype ActionButtonProps = Pick<ButtonProps, \"onClick\" | \"label\" | \"disabled\" | \"tooltip\">;\n\ntype FormPageLayoutProps<F> = {\n pageTitle: string;\n breadCrumb?: HeaderBreadcrumb | HeaderBreadcrumb[];\n formState: ObjectState<F>;\n formSections: FormSectionConfig<F>;\n submitAction: ActionButtonProps;\n cancelAction?: ActionButtonProps;\n tertiaryAction?: ActionButtonProps;\n rightSideBar?: SidebarContentProps[];\n};\n\n/** In order to make the multiple stacked sticky elements work (Header, then sidebar below) we need to set the header height.\n * The alternate solution was to have multiple defined grid areas for the fixed header vs body below, but this becomes more complex\n * to manage when adding in a max content width container for the page while keeping the page scrollbar to the far right of the page.\n * Rather than wrapping the page in a max-width div, we use \"gutter\" columns `minMax(0, auto)` that kick in when all other columns have met their max widths.\n */\nconst headerHeightPx = 120;\nconst maxContentWidthPx = 1600;\n\nfunction FormPageLayoutComponent<F>(props: FormPageLayoutProps<F>) {\n const { formSections, formState, rightSideBar } = props;\n const tids = useTestIds(props, \"formPageLayout\");\n\n // Create a ref for each section here so we can coordinate both the `scrollIntoView`\n // and the `IntersectionObserver` behaviors between the `LeftNav` and `FormSections` children\n const sectionsWithRefs = useMemo(\n () =>\n formSections.map((section, id) => ({\n section,\n ref: createRef<HTMLElement>(),\n // Unique key for each section to use in the observer\n sectionKey: `section-${section.title ?? id}`,\n })),\n [formSections],\n );\n\n // The grid columns are defined as: \"left-nav, form-content, right-sidebar\"\n const gridColumns = `minMax(100px, 250px) minMax(350px, 1000px) minMax(${RIGHT_SIDEBAR_MIN_WIDTH}, 380px)`;\n\n return (\n // This page is `fixed` to the full screen to allow it to act as a full screen modal while content is mounted below\n // since this layout will be replacing most superdrawers/sidebars, we keep the listing mounted below to preserve the users's\n // scroll position & filters\n // Adding \"align-items: start\" allows \"position: sticky\" to work within a grid for the sidebars\n <div css={Css.fixed.top0.bottom0.left0.right0.z(1000).oya.bgWhite.df.jcc.aifs.$} {...tids}>\n <div css={Css.w100.maxwPx(maxContentWidthPx).dg.gtc(gridColumns).gtr(\"auto 1fr\").cg3.ais.$}>\n <PageHeader {...props} {...tids.pageHeader} />\n <LeftNav sectionsWithRefs={sectionsWithRefs} {...tids} />\n <FormSections sectionsWithRefs={sectionsWithRefs} formState={formState} {...tids} />\n {rightSideBar && (\n <aside css={Css.gr(2).gc(\"3 / 4\").sticky.topPx(headerHeightPx).$}>\n <RightSidebar content={rightSideBar} headerHeightPx={headerHeightPx} />\n </aside>\n )}\n </div>\n </div>\n );\n}\n\nexport const FormPageLayout = React.memo(FormPageLayoutComponent) as typeof FormPageLayoutComponent;\n\nfunction PageHeader<F>(props: FormPageLayoutProps<F>) {\n const { pageTitle, breadCrumb, submitAction, cancelAction, tertiaryAction, formState } = props;\n const { notice } = useToastContext();\n const tids = useTestIds(props);\n\n return (\n <header css={Css.gr(1).gc(\"1 / 4\").sticky.top0.bgWhite.z5.if(!notice).hPx(headerHeightPx).$} {...tids}>\n <Toast />\n <div css={Css.py2.px3.df.jcsb.aic.$}>\n <div>\n {breadCrumb && <PageHeaderBreadcrumbs breadcrumb={breadCrumb} />}\n <h1 css={Css.xl2.$} {...tids.pageTitle}>\n {pageTitle}\n </h1>\n </div>\n\n <div css={Css.df.gap1.$}>\n {tertiaryAction && (\n <Button\n label={tertiaryAction.label}\n onClick={tertiaryAction.onClick}\n variant=\"tertiary\"\n disabled={tertiaryAction.disabled}\n tooltip={tertiaryAction.tooltip}\n />\n )}\n {cancelAction && (\n <Button\n label={cancelAction.label}\n onClick={cancelAction.onClick}\n variant=\"quaternary\"\n disabled={cancelAction.disabled}\n tooltip={cancelAction.tooltip}\n />\n )}\n <SubmitButton form={formState} {...submitAction} />\n </div>\n </div>\n </header>\n );\n}\n\ntype SectionWithRefs<F> = {\n ref: RefObject<HTMLElement>;\n section: FormSection<F>;\n sectionKey: string;\n};\n\ntype FormSectionsProps<F> = {\n formState: ObjectState<F>;\n sectionsWithRefs: SectionWithRefs<F>[];\n};\n\nfunction FormSections<F>(props: FormSectionsProps<F>) {\n const { sectionsWithRefs, formState } = props;\n\n const tids = useTestIds(props);\n // Adding extra bottom padding for multi-section forms allows the scroll-to behavior to get more of the bottom section in view\n const bottomPaddingPx = sectionsWithRefs.length > 1 ? 200 : 0;\n\n return (\n <article css={Css.gr(2).gc(\"2 / 3\").pbPx(bottomPaddingPx).pr2.$}>\n {sectionsWithRefs.map(({ section, ref, sectionKey }, i) => (\n // Subgrid here allows for icon placement to the left of the section content\n <section\n key={sectionKey}\n // `sectionKey` as the `id` is used by the IntersectionObserver to determine which section is currently in view\n id={sectionKey}\n ref={ref}\n // scrollMarginTop here ensures the top of the section is properly aligned when calling `scrollIntoView`\n css={Css.dg.gtc(\"50px 1fr\").gtr(\"auto\").mbPx(72).add(\"scrollMarginTop\", `${headerHeightPx}px`).$}\n {...tids.formSection}\n >\n <div css={Css.gc(1).$}>{section.icon && <Icon icon={section.icon} inc={3.5} />}</div>\n <div css={Css.gc(2).$}>\n {section.title && <h2 css={Css.xl.mb3.$}>{section.title}</h2>}\n <BoundForm formState={formState} rows={section.rows} />\n </div>\n </section>\n ))}\n </article>\n );\n}\n\nfunction LeftNav<F>(props: { sectionsWithRefs: SectionWithRefs<F>[] }) {\n const { sectionsWithRefs } = props;\n const tids = useTestIds(props);\n\n // Ignore sections that don't have titles defined\n const sectionWithTitles = useMemo(\n () => sectionsWithRefs.filter(({ section }) => !!section.title),\n [sectionsWithRefs],\n );\n\n const activeSection = useActiveSection(sectionWithTitles);\n\n return (\n <aside css={Css.gr(2).gc(\"1 / 2\").sticky.topPx(headerHeightPx).px3.df.fdc.gap1.$} {...tids.nav}>\n {sectionWithTitles.map((sectionWithRef) => (\n <SectionNavLink\n key={`nav-${sectionWithRef.sectionKey}`}\n sectionWithRef={sectionWithRef}\n activeSection={activeSection}\n {...tids}\n />\n ))}\n </aside>\n );\n}\n\n// Use inset box shadow rather than thick border to avoid the button text reflowing when the border is applied\nconst activeStyles = Css.smSb.boxShadow(`inset 3px 0px 0 0px ${Palette.Blue600}`).$;\nconst hoverStyles = Css.bgBlue50.smSb.blue900.boxShadow(`inset 3px 0px 0 0px ${Palette.Blue900}`).$;\nconst defaultFocusRingStyles = Css.relative.z2.bshFocus.$;\n\nfunction SectionNavLink<F>(props: { sectionWithRef: SectionWithRefs<F>; activeSection: string | null }) {\n const { sectionWithRef, activeSection } = props;\n const { section, ref: sectionRef } = sectionWithRef;\n\n const active = activeSection === sectionWithRef.sectionKey;\n\n const handleNavClick = useCallback(() => {\n sectionRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }, [sectionRef]);\n\n const tids = useTestIds(props);\n\n const buttonRef = useRef(null);\n const { buttonProps, isPressed } = useButton({ onPress: handleNavClick }, buttonRef);\n const { isFocusVisible, focusProps } = useFocusRing();\n const { hoverProps, isHovered } = useHover({});\n\n return (\n <button\n ref={buttonRef}\n {...buttonProps}\n {...focusProps}\n {...hoverProps}\n css={{\n ...Css.buttonBase.wsn.tal.smSb.blue600.px2.py1.br0.h100.$,\n ...(isFocusVisible ? defaultFocusRingStyles : {}),\n ...(active ? activeStyles : {}),\n ...(isPressed ? activeStyles : isHovered ? hoverStyles : {}),\n }}\n {...tids.sectionNavLink}\n >\n {section.title}\n </button>\n );\n}\n\n/**\n * Hook that wraps the browser `IntersectionObserver` API with a setState\n * in order to display the currently in-view section via the sidebar nav */\nfunction useActiveSection<F>(sectionsWithRefs: SectionWithRefs<F>[]) {\n const [activeSection, setActiveSection] = useState<string | null>(null);\n\n // Use debounced callback to prevent rapid processing of intersection events during scrolling\n // This also prevents flickering when the user is scrolling slowly next to a section boundary\n const debouncedIntersectionCallback = useDebouncedCallback(\n (entries: IntersectionObserverEntry[]) => {\n // Filter to only sections that are intersecting and have a significant portion visible\n const sectionsInView = entries\n .filter((entry) => entry.isIntersecting && entry.intersectionRatio > 0.2)\n .sort((a, b) => {\n // First sort by how much of the section is visible\n const ratioDiff = b.intersectionRatio - a.intersectionRatio;\n if (Math.abs(ratioDiff) > 0.05) return ratioDiff;\n\n // If visibility is similar, prefer the section closer to the top of the viewport\n const aTop = a.boundingClientRect.top;\n const bTop = b.boundingClientRect.top;\n return aTop - bTop;\n });\n\n if (sectionsInView[0]) {\n setActiveSection(sectionsInView[0].target.id);\n }\n },\n 200,\n { maxWait: 500 },\n );\n\n useEffect(() => {\n // Ensure the browser supports the Intersection Observer API (and skip in tests where it's not available)\n if (!(\"IntersectionObserver\" in window)) return;\n\n const observer = new IntersectionObserver((entries) => debouncedIntersectionCallback(entries), {\n /**\n * Creating rules to determine when a section is \"in view\" is a real challenge given the section sizes\n * are unknown and will likely be mixed (optimizing for large sections makes tracking small sections\n * more difficult and vice versa). This approach attempts to solve for this by creating a narrowed\n * \"focus zone\" trying to approximate where a users attention is likely to be. In this case, blocking\n * out the top 25% and bottom 35% of the viewport to focus on the middle-top 40%.\n */\n rootMargin: \"-25% 0px -35% 0px\",\n // Multiple threshold points allow for more granular detection of section visibility\n threshold: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],\n });\n\n sectionsWithRefs.forEach(({ ref }) => {\n if (ref.current) {\n observer.observe(ref.current);\n }\n });\n\n return () => {\n sectionsWithRefs.forEach(({ ref }) => {\n if (ref.current) {\n observer.unobserve(ref.current);\n }\n });\n };\n }, [sectionsWithRefs, debouncedIntersectionCallback]);\n\n return activeSection;\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 { 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 { 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 required={field.required}\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\ntype BoundChipSelectFieldProps<O, V extends 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} & Omit<ChipSelectFieldProps<O, V>, \"onSelect\" | \"label\" | \"value\">;\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, ObjectState } from \"@homebound/form-state\";\nimport { ReactNode, useCallback, useMemo } from \"react\";\nimport { LoadingSkeleton } from \"src/components\";\nimport { Css, Only, Properties } from \"src/Css\";\nimport { useComputed } from \"src/hooks\";\nimport { Value } from \"src/inputs/Value\";\nimport { TextFieldXss } from \"src/interfaces\";\nimport { fail, useTestIds } from \"src/utils\";\nimport { BoundCheckboxField, BoundCheckboxFieldProps } from \"./BoundCheckboxField\";\nimport { BoundCheckboxGroupField, BoundCheckboxGroupFieldProps } from \"./BoundCheckboxGroupField\";\nimport { BoundDateField, BoundDateFieldProps } from \"./BoundDateField\";\nimport { BoundDateRangeField, BoundDateRangeFieldProps } from \"./BoundDateRangeField\";\nimport { BoundIconCardField, BoundIconCardFieldProps } from \"./BoundIconCardField\";\nimport { BoundIconCardGroupField, BoundIconCardGroupFieldProps } from \"./BoundIconCardGroupField\";\nimport { isListFieldRow, ListField, ListFieldConfig, ListFieldKey } from \"./BoundListField\";\nimport { BoundMultiLineSelectField, BoundMultiLineSelectFieldProps } from \"./BoundMultiLineSelectField\";\nimport { BoundMultiSelectField, BoundMultiSelectFieldProps } from \"./BoundMultiSelectField\";\nimport { BoundNumberField, BoundNumberFieldProps } from \"./BoundNumberField\";\nimport { BoundRadioGroupField, BoundRadioGroupFieldProps } from \"./BoundRadioGroupField\";\nimport { BoundRichTextField, BoundRichTextFieldProps } from \"./BoundRichTextField\";\nimport { BoundSelectField, BoundSelectFieldProps } from \"./BoundSelectField\";\nimport { BoundSwitchField, BoundSwitchFieldProps } from \"./BoundSwitchField\";\nimport { BoundTextAreaField, BoundTextAreaFieldProps } from \"./BoundTextAreaField\";\nimport { BoundTextField, BoundTextFieldProps } from \"./BoundTextField\";\nimport { BoundToggleChipGroupField, BoundToggleChipGroupFieldProps } from \"./BoundToggleChipGroupField\";\nimport { BoundTreeSelectField, BoundTreeSelectFieldProps } from \"./BoundTreeSelectField\";\nimport { FormLines } from \"./FormLines\";\n\ntype BoundFieldInputFnReturn = { component: ReactNode; minWidth: Properties[\"minWidth\"] };\ntype BoundFieldInputFn<F> = (field: ObjectState<F>[keyof F]) => BoundFieldInputFnReturn;\n\n// To aid in discoverability of the optional override via IntelliSense, we can enumerate each form key `foo`\n// as `reactNodeFoo` as well as allow for any non-form key related `reactNodeBar` to be rendered as-is.\ntype CapitalizeFirstLetter<S extends string> = S extends `${infer First}${infer Rest}`\n ? `${Uppercase<First>}${Rest}`\n : S;\nconst reactNodePrefix = \"reactNode\";\ntype TReactNodePrefix<S extends string> = `${typeof reactNodePrefix}${CapitalizeFirstLetter<S>}`;\ntype CustomReactNodeKey = `${typeof reactNodePrefix}${string}`;\ntype ReactNodeOrFn<F> = ReactNode | ((formState: ObjectState<F>) => ReactNode);\n\nexport const listFieldPrefix = \"listField\";\ntype TListFieldPrefix<S extends string> = `${typeof listFieldPrefix}${CapitalizeFirstLetter<S>}`;\n\nexport type BoundFormRowInputs<F> = Partial<\n {\n [K in keyof F]: BoundFieldInputFn<F>;\n } & {\n [K in CustomReactNodeKey]: ReactNodeOrFn<F>;\n } & {\n [K in keyof F as TReactNodePrefix<K & string>]: ReactNodeOrFn<F>;\n } & {\n [K in ListFieldKey<F> as TListFieldPrefix<K & string>]: ListFieldConfig<F, K>;\n }\n>;\n\nexport type BoundFormInputConfig<F> = BoundFormRowInputs<F>[];\n\nexport type BoundFormProps<F> = {\n rows: BoundFormInputConfig<F>;\n formState: ObjectState<F>;\n};\n\n/**\n * A wrapper around the \"Bound\" form components for the form-state library to render a standard (and responsive) form layout.\n * * Each row is an object of bound input components keyed by their formState key, which are rendered in a responsive flex layout.\n * * Alternatively keys can be prefixed with \"reactNode\" to render any custom JSX node as-is.\n * * Example usage:\n * ```tsx\n * <BoundFormComponent\n rows={[\n { firstName: boundTextField(), middleInitial: boundTextField(), lastName: boundTextField() },\n { bio: boundTextAreaField() },\n { reactNodeExample: <div>Custom JSX node</div> },\n ]}\n formState={formState}\n />\n * ```\n */\nexport function BoundForm<F>(props: BoundFormProps<F>) {\n const { rows, formState } = props;\n\n const tid = useTestIds({}, \"boundForm\");\n\n const getRowKey = useCallback((row: BoundFormRowInputs<F>, rowType: string) => {\n return `${rowType}-${Object.keys(row).join(\"-\")}`;\n }, []);\n\n return (\n <div {...tid}>\n <FormLines width=\"full\" gap={3.5}>\n {rows.map((row) =>\n isListFieldRow(row) ? (\n <ListField key={getRowKey(row, \"listField\")} row={row} formState={formState} />\n ) : (\n <FormRow key={getRowKey(row, \"fieldGroup\")} row={row} formState={formState} />\n ),\n )}\n </FormLines>\n </div>\n );\n}\n\nexport function FormRow<F>({ row, formState }: { row: BoundFormRowInputs<F>; formState: ObjectState<F> }) {\n const tid = useTestIds({}, \"boundFormRow\");\n\n /** Extract the bound input components with their sizing config or render any \"custom\" JSX node as-is */\n const componentsWithConfig = useMemo(() => {\n return Object.entries(row).map(([key, fieldFnOrCustomNode]) => {\n if (typeof fieldFnOrCustomNode === \"function\" && !isCustomReactNodeKey(key)) {\n const field = formState[key as keyof F] ?? fail(`Field ${key.toString()} not found in formState`);\n const fieldFn =\n (fieldFnOrCustomNode as BoundFormRowInputs<F>[keyof F]) ??\n fail(`Field function not defined for key ${key.toLocaleString()}`);\n const { component, minWidth } = fieldFn(field);\n\n return { component, key, minWidth };\n }\n\n // Handle reactNode fields that are functions (to get access to nested formState list rows)\n if (isCustomReactNodeKey(key) && typeof fieldFnOrCustomNode === \"function\") {\n const nodeAsFunction = fieldFnOrCustomNode as (formState: ObjectState<F>) => ReactNode;\n return { component: nodeAsFunction(formState), key };\n }\n\n return { component: fieldFnOrCustomNode as ReactNode, key };\n });\n }, [row, formState]);\n\n // We can hook into the formState loading state and show a skeleton from that matches the real forms layout\n const isLoading = useComputed(() => formState.loading, [formState]);\n\n // Prefer to evenly distribute the available space to each item, but leave some room for the \"gap\" padding\n // Then fall back to each item's \"min-width\" to allow for input-specific sizing when the available space is small\n const itemFlexBasis = 100 / componentsWithConfig.length - 3;\n\n return (\n <div css={Css.df.fww.aic.gap2.$} {...tid}>\n {componentsWithConfig.map(({ component, key, minWidth }) => (\n <div css={Css.mw(minWidth).fb(`${itemFlexBasis}%`).fg1.$} key={key.toString()}>\n {isLoading ? <LoadingSkeleton size=\"lg\" /> : component}\n </div>\n ))}\n </div>\n );\n}\n\nfunction isCustomReactNodeKey(key: string | number | symbol): key is CustomReactNodeKey {\n return key.toString().startsWith(reactNodePrefix);\n}\n\n/**\n * These field component functions are thin wrappers around the `BoundFoo` components which omit\n * certain props that the caller doesn't need to pass or we specifically want to restrict to drive UX consistency.\n */\n\n// We map the `field` to the bound component automatically for the caller.\ntype KeysToOmit = \"field\";\n\n// Potential TODO: add type overloads for the different HasIdIsh/HasNameIsh combinations, maybe there's a generic way to introspect those types?\nexport function boundSelectField<O, V extends Value>(props: Omit<BoundSelectFieldProps<O, V>, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundSelectField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundMultiSelectField<O, V extends Value>(props: Omit<BoundMultiSelectFieldProps<O, V>, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundMultiSelectField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundMultilineSelectField<O, V extends Value>(\n props: Omit<BoundMultiLineSelectFieldProps<O, V>, KeysToOmit>,\n) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundMultiLineSelectField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundTextField<X extends Only<TextFieldXss, X>>(props?: Omit<BoundTextFieldProps<X>, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundTextField field={field} {...props} />,\n minWidth: \"150px\",\n });\n}\n\nexport function boundTextAreaField<X extends Only<TextFieldXss, X>>(\n props?: Omit<BoundTextAreaFieldProps<X>, KeysToOmit>,\n) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundTextAreaField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundNumberField(props?: Omit<BoundNumberFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundNumberField field={field} {...props} />,\n minWidth: \"150px\",\n });\n}\n\nexport function boundDateField(props?: Omit<BoundDateFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundDateField field={field} {...props} />,\n minWidth: \"150px\",\n });\n}\n\nexport function boundDateRangeField(props?: Omit<BoundDateRangeFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundDateRangeField field={field} {...props} />,\n minWidth: \"150px\",\n });\n}\n\nexport function boundCheckboxField(props?: Omit<BoundCheckboxFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundCheckboxField field={field} {...props} />,\n minWidth: \"min-content\",\n });\n}\n\nexport function boundCheckboxGroupField(props: Omit<BoundCheckboxGroupFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundCheckboxGroupField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundIconCardField(props: Omit<BoundIconCardFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundIconCardField field={field} {...props} />,\n minWidth: \"150px\",\n });\n}\n\nexport function boundIconCardGroupField<V extends Value>(props: Omit<BoundIconCardGroupFieldProps<V>, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundIconCardGroupField field={field} {...props} />,\n minWidth: \"100%\",\n });\n}\n\nexport function boundRadioGroupField<K extends string>(props: Omit<BoundRadioGroupFieldProps<K>, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundRadioGroupField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundRichTextField(props?: Omit<BoundRichTextFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundRichTextField field={field} {...props} />,\n minWidth: \"200px\",\n });\n}\n\nexport function boundSwitchField(props?: Omit<BoundSwitchFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundSwitchField field={field} labelStyle=\"inline\" {...props} />,\n minWidth: \"min-content\",\n });\n}\n\nexport function boundToggleChipGroupField(props: Omit<BoundToggleChipGroupFieldProps, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundToggleChipGroupField field={field} {...props} />,\n minWidth: \"100%\",\n });\n}\n\nexport function boundTreeSelectField<O, V extends Value>(props: Omit<BoundTreeSelectFieldProps<O, V>, KeysToOmit>) {\n return (field: FieldState<any>): BoundFieldInputFnReturn => ({\n component: <BoundTreeSelectField field={field} {...props} />,\n minWidth: \"200px\",\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 { ListFieldState, ObjectState } from \"@homebound/form-state\";\nimport { Observer } from \"mobx-react\";\nimport { Button, ButtonMenu } from \"src/components\";\nimport { Css } from \"src/Css\";\nimport { useComputed } from \"src/hooks\";\nimport { fail, useTestIds } from \"src/utils\";\nimport { BoundFormInputConfig, BoundFormRowInputs, FormRow, listFieldPrefix } from \"./BoundForm\";\n\n// Helper type to identify array type fields in the input type that contain objects\n// Where books: Books[] would be a valid listField, but bookIds: string[] would not\nexport type ListFieldKey<F> = {\n [K in keyof F]: F[K] extends (infer T)[] | null | undefined ? (T extends object ? K : never) : never;\n}[keyof F];\n\n// Helper type to get the nested field keys from the listField input type\nexport type ListSubFields<F, K extends keyof F> = F[K] extends (infer T)[] | null | undefined ? T : never;\n\nexport type ListFieldConfig<F, K extends keyof F> = {\n name: string;\n onNew: (objectState: ListFieldState<ListSubFields<F, K>>) => void;\n rows: BoundFormInputConfig<ListSubFields<F, K>>;\n /** `onDelete` combined with `filterDeleted` specifies how to handle the deletion of a listField row.\n * it is passed the both the top-level `listFieldState` as well as the individual row/record `objectState`.\n * If left blank, the delete action menu will not be shown. */\n onDelete?: (listFieldState: ObjectState<F>[K], rowObjectState: ObjectState<ListSubFields<F, K>>) => void;\n filterDeleted?: (rowObjectState: ObjectState<ListSubFields<F, K>>) => boolean;\n};\n\nexport function ListField<F>({ row, formState }: { row: BoundFormRowInputs<F>; formState: ObjectState<F> }) {\n const listFieldEntry = Object.entries(row).find(([key, _]) => isListFieldKey(key))!;\n const [prefixedFormKey, fieldConfig] = listFieldEntry;\n // Convert the prefixed listField key back to the original form key by stripping the prefix and lowercasing the first letter\n const listFieldKey = prefixedFormKey.replace(new RegExp(`^listField(.)`), (_, c) =>\n c.toLowerCase(),\n ) as ListFieldKey<F>;\n const listFieldConfig = fieldConfig as ListFieldConfig<F, keyof F>;\n const listFieldObjectState = formState[listFieldKey] as unknown as ListFieldState<ListSubFields<F, keyof F>>;\n\n const { filterDeleted, onNew } = listFieldConfig;\n const tid = useTestIds({}, \"listField\");\n\n const filteredRows = useComputed(\n () =>\n filterDeleted\n ? listFieldObjectState.rows.filter((rowState) => filterDeleted(rowState))\n : listFieldObjectState.rows,\n [filterDeleted],\n );\n\n // Ensure all list rows are valid (satisfied rules) before allowing the user to add a new row\n const listIsValid = useComputed(() => listFieldObjectState.valid, [filteredRows]);\n\n return (\n <Observer>\n {() => (\n <div css={Css.df.fdc.gap3.$} {...tid}>\n {filteredRows.map((rowState: ObjectState<ListSubFields<F, keyof F>>, index: number) => (\n <ListFieldRowInputs\n key={`listFieldRowInputs-${listFieldKey}-${index}`}\n rowState={rowState}\n rowNumber={index + 1}\n listFieldConfig={listFieldConfig}\n formState={formState}\n listFieldKey={listFieldKey}\n />\n ))}\n <div>\n <Button\n icon=\"plus\"\n label={`Add ${listFieldConfig.name}`}\n onClick={() => onNew(listFieldObjectState)}\n variant=\"secondary\"\n disabled={!listIsValid}\n />\n </div>\n </div>\n )}\n </Observer>\n );\n}\n\nfunction ListFieldRowInputs<F>({\n rowState,\n rowNumber,\n listFieldConfig,\n formState,\n listFieldKey,\n}: {\n rowState: ObjectState<ListSubFields<F, keyof F>>;\n rowNumber: number;\n listFieldConfig: ListFieldConfig<F, keyof F>;\n formState: ObjectState<F>;\n listFieldKey: ListFieldKey<F>;\n}) {\n const { onDelete } = listFieldConfig;\n const tid = useTestIds({}, \"listFieldRow\");\n\n return (\n <>\n <div css={Css.df.jcsb.$} {...tid}>\n <span css={Css.mdSb.$} {...tid.name}>\n {listFieldConfig.name} {rowNumber}\n </span>\n {onDelete && (\n <ButtonMenu\n trigger={{ icon: \"verticalDots\" }}\n items={[{ label: \"Delete\", onClick: () => onDelete(formState[listFieldKey], rowState) }]}\n {...tid.menu}\n />\n )}\n </div>\n {listFieldConfig.rows.map((row, rowIndex) => (\n <FormRow key={`listField-${listFieldKey}-row-${rowIndex}`} row={row} formState={rowState} />\n ))}\n </>\n );\n}\n\nexport function isListFieldKey(key: string | number | symbol): key is ListFieldKey<unknown> {\n return key.toString().startsWith(listFieldPrefix);\n}\n\nexport function isListFieldRow<F>(row: BoundFormRowInputs<F>) {\n const rowKeys = Object.keys(row);\n const maybeListFieldKey = rowKeys.find((key) => isListFieldKey(key));\n if (maybeListFieldKey) {\n if (rowKeys.length > 1) fail(\"List fields cannot be combined with other fields in the same row\");\n return true;\n }\n return false;\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 { 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 {() => (\n <ToggleChipGroup\n label={label}\n required={field.required}\n values={field.value || []}\n onChange={onChange}\n {...testId}\n {...others}\n />\n )}\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 { 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 type FormLinesProps = {\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} & Pick<PresentationFieldProps, \"labelStyle\" | \"labelLeftFieldWidth\" | \"labelSuffix\" | \"compact\">;\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 {/* Use flex column + gap for spacing between lines, and pb for bottom spacing.*/}\n <div css={Css.df.fdc.gap(gap).pb(gap).w(sizes[width]).$}>\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 }\n return child;\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).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 { FocusEvent, cloneElement, useState } 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 // TODO(stylex): Replace focus event tracking with stylex.when.ancestor once we migrate to stylex.\n const [hasFocusWithin, setHasFocusWithin] = useState(false);\n\n function onFocusCapture() {\n setHasFocusWithin(true);\n }\n\n function onBlurCapture(e: FocusEvent<HTMLDivElement>) {\n const nextFocusedElement = e.relatedTarget;\n if (nextFocusedElement instanceof Node && e.currentTarget.contains(nextFocusedElement)) {\n return;\n }\n setHasFocusWithin(false);\n }\n\n return (\n <div css={Css.df.$} onFocusCapture={onFocusCapture} onBlurCapture={onBlurCapture}>\n <div\n css={{\n ...commonStyles,\n ...Css.bl.borderRadius(\"4px 0 0 4px\").$,\n ...(hasFocusWithin && Css.bcBlue700.$),\n }}\n >\n {cloneElement(children[0], {\n internalProps,\n })}\n </div>\n {/* Separation line */}\n <div css={{ ...Css.wPx(1).fn.bgGray300.$, ...(hasFocusWithin && Css.bgBlue700.$) }} />\n\n <div\n css={{\n ...commonStyles,\n ...Css.fg1.br.borderRadius(\"0 4px 4px 0\").$,\n ...(hasFocusWithin && Css.bcBlue700.$),\n }}\n >\n {cloneElement(children[1], {\n internalProps,\n })}\n </div>\n </div>\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 { 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 // Add space before the heading, but only if it's not first.\n <h3 css={{ ...Css.md.if(!isFirst).mt1.$, ...xss }} {...others}>\n {title}\n </h3>\n );\n}\n\n// https://github.com/gaearon/react-hot-loader/issues/304#issuecomment-456569720\nFormHeading.isFormHeading = true;\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.sm.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 { useLocalObservable } from \"mobx-react\";\nimport { useComputed } from \"src\";\nimport { Button, ButtonProps } from \"src/components/Button\";\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\n const state = useLocalObservable(() => ({ clicked: false }));\n\n const canSubmit = useComputed(() => {\n // We generally prefer to \"enable when dirty && valid\", *but* when creating new entities,\n // showing Save as enabled can be a good way for the user to \"try and save\" and get all the\n // previously-hidden error messages to show up (b/c `canSave` touches the form fields).\n return form.isNewEntity && !state.clicked ? true : form.dirty && form.valid;\n }, [form]);\n return (\n <Button\n label={label}\n disabled={disabled || !canSubmit}\n onClick={(e) => {\n // canSave will touch any not-yet-keyed-in fields to show errors\n state.clicked = true;\n if (form.canSave()) {\n return onClick(e);\n }\n }}\n {...others}\n />\n );\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { ReactNode, useState } from \"react\";\nimport { Css, Palette } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\nimport { IconKey } from \"./Icon\";\nimport { IconButton } from \"./IconButton\";\n\nexport type SidebarContentProps = {\n icon: IconKey;\n render: () => ReactNode;\n};\n\nexport type RightSidebarProps = {\n content: SidebarContentProps[];\n headerHeightPx: number;\n};\n\n/** Exporting this value allows layout components to coordinate responsive column sizing\n * while avoiding layout shift when the sidebar is opened */\nexport const RIGHT_SIDEBAR_MIN_WIDTH = \"250px\";\n\nexport function RightSidebar({ content, headerHeightPx }: RightSidebarProps) {\n const [selectedIcon, setSelectedIcon] = useState<IconKey | undefined>(undefined);\n const tid = useTestIds({}, \"rightSidebar\");\n\n return (\n <>\n {/* Vertical icons when closed, positioned absolutely to avoid layout shift when the sidebar is opened */}\n <div css={Css.df.jcfe.absolute.right0.pr3.$}>\n <AnimatePresence>\n {!selectedIcon && (\n <motion.div\n css={Css.df.fdc.gap2.z1.$}\n initial={{ x: \"100%\", opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: \"100%\", opacity: 0 }}\n transition={{ ease: [0.51, 0.92, 0.24, 1], duration: 0.3, delay: 0.2 }}\n >\n <IconButtonList content={content} selectedIcon={selectedIcon} onIconClick={setSelectedIcon} />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <AnimatePresence>\n {selectedIcon && (\n <motion.div\n key=\"rightSidebar\"\n initial={{ x: \"100%\", opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n transition={{ delay: 0.2, ease: [0.51, 0.92, 0.24, 1], duration: 0.3 }}\n exit={{ transition: { ease: \"linear\", duration: 0.2 }, x: \"100%\" }}\n css={Css.w100.mw(RIGHT_SIDEBAR_MIN_WIDTH).z0.maxh(`calc(100vh - ${headerHeightPx}px)`).oya.pl4.pr3.$}\n >\n <>\n {/* Sticky header section */}\n <div css={Css.sticky.top0.bgWhite.$}>\n {/* Close button */}\n <div css={Css.absolute.leftPx(-24).top0.df.fdc.aic.$}>\n <IconButton\n bgColor={Palette.White}\n circle\n onClick={() => setSelectedIcon(undefined)}\n icon=\"x\"\n inc={3.5}\n />\n {/* vertical line */}\n <div css={Css.absolute.topPx(48).h(\"calc(100vh - 168px)\").wPx(1).bgGray300.$} />\n </div>\n {/* Horizontal icons when opened */}\n <div css={Css.df.aic.jcfe.gap2.mb3.$}>\n <IconButtonList content={content} selectedIcon={selectedIcon} onIconClick={setSelectedIcon} />\n </div>\n </div>\n\n {/* Content area */}\n {selectedIcon && (\n <div {...tid.content} css={Css.pl3.$}>\n {content.find((sidebar) => sidebar.icon === selectedIcon)?.render()}\n </div>\n )}\n </>\n </motion.div>\n )}\n </AnimatePresence>\n </>\n );\n}\n\ntype IconButtonListProps = {\n content: SidebarContentProps[];\n selectedIcon: IconKey | undefined;\n onIconClick: (icon: IconKey) => void;\n};\n\n/** Shared component for rendering the list of icon buttons */\nfunction IconButtonList({ content, selectedIcon, onIconClick }: IconButtonListProps) {\n return (\n <>\n {content.map(({ icon }) => (\n <IconButton\n // selectedIcon is added to key to reset the active state\n key={`${icon}-${selectedIcon}`}\n circle\n active={icon === selectedIcon}\n onClick={() => onIconClick(icon)}\n icon={icon}\n inc={3.5}\n />\n ))}\n </>\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 { 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 { Fragment, ReactNode, useMemo, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Css } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\nexport type HeaderBreadcrumb = {\n href: string;\n label: string;\n right?: ReactNode;\n};\n\ntype PageHeaderBreadcrumbsProps = {\n breadcrumb: HeaderBreadcrumb | HeaderBreadcrumb[];\n};\n\nexport function PageHeaderBreadcrumbs({ breadcrumb }: PageHeaderBreadcrumbsProps) {\n const tids = useTestIds({}, \"pageHeaderBreadcrumbs\");\n const breadcrumbs = useMemo(() => (Array.isArray(breadcrumb) ? breadcrumb : [breadcrumb]), [breadcrumb]);\n const [collapsed, setCollapsed] = useState(true);\n\n function renderBreadcrumb(bc: HeaderBreadcrumb, index: number, hideDivisor?: boolean) {\n return (\n // Adding index to key to prevent rendering issues when multiple items have the same label\n <Fragment key={`${bc.label}-${index}`}>\n {index > 0 && !hideDivisor && <span css={Css.smSb.gray700.mx1.myPx(2).$}>/</span>}\n <Link to={bc.href} css={Css.smSb.gray700.onHover.gray900.$} className=\"navLink\" {...tids.navLink}>\n {bc.label}\n </Link>\n {bc.right}\n </Fragment>\n );\n }\n\n return (\n <div css={Css.df.aic.mbPx(4).$}>\n {breadcrumbs.length > 3 && collapsed ? (\n <>\n {renderBreadcrumb(breadcrumbs[0], 0)}\n <button {...tids.expand} css={Css.gray700.pxPx(8).$} onClick={() => setCollapsed(false)}>\n ...\n </button>\n {renderBreadcrumb(breadcrumbs[breadcrumbs.length - 2], breadcrumbs.length - 2, true)}\n {renderBreadcrumb(breadcrumbs[breadcrumbs.length - 1], breadcrumbs.length - 1)}\n </>\n ) : (\n breadcrumbs.map((bc, i) => renderBreadcrumb(bc, i))\n )}\n </div>\n );\n}\n","import { mergeProps, TrussStyleHash } from \"@homebound/truss/runtime\";\nimport { 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 { paddingRight, paddingLeft } = useScrollableParent();\n const { className, style, ...others } = children.props;\n\n return paddingRight === \"0px\" && paddingLeft === \"0px\"\n ? children\n : cloneElement(\n children,\n // The child might already have className/style set, let Css.props also create\n // a className/style, and then mergeProps the two together.\n //\n // ...for some reason this keeps the Layout top padding better than using\n // react-aria's more generic mergeProps.\n {\n ...mergeProps(\n className,\n style,\n // ScrollableParent applies horizontal padding to its content column, so FullBleed\n // inverts that padding with negative margins before re-applying it to the child.\n Css.ml(invertSpacing(paddingLeft))\n .mr(invertSpacing(paddingRight))\n .if(!omitPadding)\n .pl(paddingLeft)\n .pr(paddingRight).$ as TrussStyleHash,\n ),\n ...others,\n },\n );\n}\n\nfunction invertSpacing(value: string) {\n return `calc(${value} * -1)`;\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { Button, ButtonProps } from \"src/components/Button\";\nimport { ButtonMenu, ButtonMenuProps } from \"src/components/ButtonMenu\";\nimport { FilterDropdownMenu } from \"src/components/Filters/FilterDropdownMenu\";\nimport { Icon } from \"src/components/Icon\";\nimport { OffsetAndLimit, Pagination } from \"src/components/Pagination\";\nimport { GridDataRow } from \"src/components/Table\";\nimport { EditColumnsButton } from \"src/components/Table/components/EditColumnsButton\";\nimport { GridTable, GridTableProps } from \"src/components/Table/GridTable\";\nimport { GridTableApiImpl } from \"src/components/Table/GridTableApi\";\nimport { TableActions } from \"src/components/Table/TableActions\";\nimport { GridTableXss, Kinded } from \"src/components/Table/types\";\nimport { Css, Only, Palette } from \"src/Css\";\nimport { useComputed, useGroupBy, usePersistedFilter, UsePersistedFilterProps, useSessionStorage } from \"src/hooks\";\nimport { TextField } from \"src/inputs/TextField\";\nimport { useTestIds } from \"src/utils\";\nimport { useDebounce } from \"use-debounce\";\nimport { StringParam, useQueryParams } from \"use-query-params\";\nimport { FullBleed } from \"../FullBleed\";\nimport { HeaderBreadcrumb, PageHeaderBreadcrumbs } from \"../PageHeaderBreadcrumbs\";\nimport { ScrollableContent } from \"../ScrollableContent\";\nimport { QueryResult, QueryTable, QueryTableProps } from \"./QueryTable\";\n\n// Omit to force all action button menus to look the same\ntype ActionButtonMenuProps = Omit<ButtonMenuProps, \"trigger\">;\n\ntype ActionButtonProps = Pick<ButtonProps, \"onClick\" | \"label\" | \"disabled\" | \"tooltip\">;\n\ntype OmittedTableProps = \"filter\" | \"stickyHeader\" | \"style\" | \"rows\";\n\n// To wrap the `QueryTable` behavior, we allow a user to pass in EITHER `rows` OR `query` + `createRows` to opt-in to the QueryTable behavior\ntype BaseTableProps<R extends Kinded, X extends Only<GridTableXss, X>> = Omit<GridTableProps<R, X>, OmittedTableProps>;\ntype GridTablePropsWithRows<R extends Kinded, X extends Only<GridTableXss, X>> = BaseTableProps<R, X> & {\n rows: GridTableProps<R, X>[\"rows\"];\n query?: never;\n createRows?: never;\n};\ntype QueryTablePropsWithQuery<R extends Kinded, X extends Only<GridTableXss, X>, QData> = BaseTableProps<R, X> & {\n query: QueryResult<QData>;\n createRows: (data: QData | undefined) => GridDataRow<R>[];\n getPageInfo?: (data: QData) => { hasNextPage: boolean };\n emptyFallback?: string;\n keepHeaderWhenLoading?: boolean;\n rows?: never;\n};\nfunction isGridTableProps<R extends Kinded, X extends Only<GridTableXss, X>, QData>(\n props: GridTablePropsWithRows<R, X> | QueryTablePropsWithQuery<R, X, QData>,\n): props is GridTablePropsWithRows<R, X> {\n return \"rows\" in props;\n}\n\nexport type GridTableLayoutProps<\n F extends Record<string, unknown>,\n R extends Kinded,\n X extends Only<GridTableXss, X>,\n QData,\n> = {\n pageTitle: string;\n tableProps: GridTablePropsWithRows<R, X> | QueryTablePropsWithQuery<R, X, QData>;\n breadcrumb?: HeaderBreadcrumb | HeaderBreadcrumb[];\n layoutState?: ReturnType<typeof useGridTableLayoutState<F>>;\n /** Renders a ButtonMenu with \"verticalDots\" icon as trigger */\n actionMenu?: ActionButtonMenuProps;\n primaryAction?: ActionButtonProps;\n secondaryAction?: ActionButtonProps;\n tertiaryAction?: ActionButtonProps;\n hideEditColumns?: boolean;\n totalCount?: number;\n};\n\n/**\n * A layout component that combines a table with a header, actions buttons, filters, and pagination.\n *\n * This component can render either a `GridTable` or wrapped `QueryTable` based on the provided props:\n *\n * - For static data or custom handled loading states, use `rows` to pass in the data directly:\n * ```tsx\n * <GridTableLayout\n * tableProps={{\n * rows: [...],\n * columns: [...],\n * }}\n * />\n * ```\n *\n * - To take advantage of data/loading/error states directly from an Apollo query, use `query` and `createRows`:\n * ```tsx\n * <GridTableLayout\n * tableProps={{\n * query,\n * createRows: (data) => [...],\n * columns: [...],\n * }}\n * />\n * ```\n *\n * Pagination is rendered when `totalCount` is provided. Use `layoutState.page` for server query variables.\n */\nfunction GridTableLayoutComponent<\n F extends Record<string, unknown>,\n R extends Kinded,\n X extends Only<GridTableXss, X>,\n QData,\n>(props: GridTableLayoutProps<F, R, X, QData>) {\n const {\n pageTitle,\n breadcrumb,\n tableProps,\n layoutState,\n primaryAction,\n secondaryAction,\n tertiaryAction,\n actionMenu,\n hideEditColumns = false,\n totalCount,\n } = props;\n\n const tid = useTestIds(props);\n const columns = tableProps.columns;\n\n const hasHideableColumns = useMemo(() => {\n if (hideEditColumns) return false;\n validateColumns(columns);\n return columns.some((c) => c.canHide);\n }, [columns, hideEditColumns]);\n\n // Use user-provided API if available, otherwise create our own\n const api = useMemo<GridTableApiImpl<R>>(\n () => (tableProps.api as GridTableApiImpl<R>) ?? new GridTableApiImpl(),\n [tableProps.api],\n );\n const clientSearch = layoutState?.search === \"client\" ? layoutState.searchString : undefined;\n const showTableActions = layoutState?.filterDefs || layoutState?.search || hasHideableColumns;\n const isVirtualized = tableProps.as === \"virtual\";\n\n // Sync API changes back to persisted state when persistedColumns is provided\n const visibleColumnIds = useComputed(() => api.getVisibleColumnIds(), [api]);\n useEffect(() => {\n if (layoutState?.setVisibleColumnIds) {\n layoutState.setVisibleColumnIds(visibleColumnIds);\n }\n }, [visibleColumnIds, layoutState]);\n\n const visibleColumnsStorageKey = layoutState?.persistedColumnsStorageKey;\n\n return (\n <>\n <Header\n pageTitle={pageTitle}\n breadcrumb={breadcrumb}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n tertiaryAction={tertiaryAction}\n actionMenu={actionMenu}\n />\n {showTableActions && (\n <TableActions\n right={\n hasHideableColumns && (\n <EditColumnsButton\n columns={columns}\n api={api}\n tooltip=\"Display columns\"\n trigger={{ icon: \"kanban\", size: \"md\", label: \"\", variant: \"secondaryBlack\" }}\n {...tid.editColumnsButton}\n />\n )\n }\n >\n {layoutState?.search && <SearchBox onSearch={layoutState.setSearchString} />}\n {layoutState?.filterDefs && (\n <FilterDropdownMenu\n filterDefs={layoutState.filterDefs}\n filter={layoutState.filter}\n onChange={layoutState.setFilter}\n groupBy={layoutState.groupBy}\n />\n )}\n </TableActions>\n )}\n <ScrollableContent virtualized={isVirtualized}>\n {isGridTableProps(tableProps) ? (\n <GridTable\n {...tableProps}\n api={api}\n filter={clientSearch}\n style={{ allWhite: true }}\n stickyHeader\n disableColumnResizing={false}\n visibleColumnsStorageKey={visibleColumnsStorageKey}\n />\n ) : (\n <QueryTable\n {...(tableProps as QueryTableProps<R, QData, X>)}\n api={api}\n filter={clientSearch}\n style={{ allWhite: true }}\n stickyHeader\n disableColumnResizing={false}\n visibleColumnsStorageKey={visibleColumnsStorageKey}\n />\n )}\n {layoutState && totalCount !== undefined && (\n <Pagination\n page={[layoutState.page, layoutState._pagination.setPage]}\n totalCount={totalCount}\n pageSizes={layoutState._pagination.pageSizes}\n {...tid.pagination}\n />\n )}\n </ScrollableContent>\n </>\n );\n}\n\nexport const GridTableLayout = React.memo(GridTableLayoutComponent) as typeof GridTableLayoutComponent;\n\n// Force columns to have a name and id property for all our table layouts\nfunction validateColumns(columns: readonly { id?: string; name?: string }[]): void {\n for (const col of columns) {\n if (!col.id || !col.name) {\n throw new Error(\"Columns must have id and name properties when EditColumnsButtons is enabled\");\n }\n }\n}\n\n/** Configuration for pagination in GridTableLayout */\nexport type PaginationConfig = {\n /** Available page size options */\n pageSizes?: number[];\n /** Storage key for persisting page size preference */\n storageKey?: string;\n};\n\n/**\n * A wrapper around standard filter, grouping, search, and pagination state hooks.\n * * `client` search will use the built-in grid table search functionality.\n * * `server` search will return `searchString` as a debounced search string to query the server.\n * * Use `pagination` config to customize page sizes or storage key. Use `page` for server query variables.\n */\nexport function useGridTableLayoutState<F extends Record<string, unknown>>({\n persistedFilter,\n persistedColumns,\n search,\n groupBy: maybeGroupBy,\n pagination,\n}: {\n persistedFilter?: UsePersistedFilterProps<F>;\n persistedColumns?: { storageKey: string };\n search?: \"client\" | \"server\";\n groupBy?: Record<string, string>;\n /** Customize pagination page sizes or storage key */\n pagination?: PaginationConfig;\n}) {\n // Because we can't conditionally render a hook, we still call it with a fallback value.\n const filterFallback = { filterDefs: {}, storageKey: \"unset-filter\" } as UsePersistedFilterProps<F>;\n const { filter, setFilter } = usePersistedFilter<F>(persistedFilter ?? filterFallback);\n const groupBy = useGroupBy(maybeGroupBy ?? { none: \"none\" });\n\n const [searchString, setSearchString] = useState<string | undefined>(\"\");\n\n const columnsFallback = \"unset-columns\";\n const [visibleColumnIds, setVisibleColumnIds] = useSessionStorage<string[] | undefined>(\n persistedColumns?.storageKey ?? columnsFallback,\n undefined,\n );\n\n // Pagination state\n const paginationFallbackKey = \"unset-pagination\";\n const pageSizes = pagination?.pageSizes ?? [100, 500, 1000];\n const [persistedPageSize, setPersistedPageSize] = useSessionStorage<number>(\n pagination?.storageKey ?? paginationFallbackKey,\n 100, // default page size\n );\n\n const [page, setPage] = useState<OffsetAndLimit>({\n offset: 0,\n limit: persistedPageSize,\n });\n\n // Persist page size and reset to first page when filters/search change\n useEffect(() => {\n if (page.limit !== persistedPageSize) setPersistedPageSize(page.limit);\n setPage((prev) => ({ ...prev, offset: 0 }));\n }, [page.limit, persistedPageSize, setPersistedPageSize, filter, searchString]);\n\n return {\n filter,\n setFilter,\n filterDefs: persistedFilter?.filterDefs,\n searchString,\n setSearchString,\n search,\n groupBy: maybeGroupBy ? groupBy : undefined,\n visibleColumnIds: persistedColumns ? visibleColumnIds : undefined,\n setVisibleColumnIds: persistedColumns ? setVisibleColumnIds : undefined,\n persistedColumnsStorageKey: persistedColumns?.storageKey,\n /** Current page offset/limit - use this for server query variables */\n page,\n /** @internal Used by GridTableLayout component */\n _pagination: { setPage, pageSizes },\n };\n}\n\ntype HeaderProps = {\n pageTitle: string;\n breadcrumb?: HeaderBreadcrumb | HeaderBreadcrumb[];\n primaryAction?: ActionButtonProps;\n secondaryAction?: ActionButtonProps;\n tertiaryAction?: ActionButtonProps;\n actionMenu?: ActionButtonMenuProps;\n};\n\nfunction Header(props: HeaderProps) {\n const { pageTitle, breadcrumb, primaryAction, secondaryAction, tertiaryAction, actionMenu } = props;\n const tids = useTestIds(props);\n\n return (\n <FullBleed>\n <header css={{ ...Css.p3.mb3.mhPx(50).bgWhite.df.jcsb.aic.$ }} {...tids.header}>\n <div>\n {breadcrumb && <PageHeaderBreadcrumbs breadcrumb={breadcrumb} />}\n <h1 css={Css.xl2.mt1.$} {...tids.pageTitle}>\n {pageTitle}\n </h1>\n </div>\n {/* Flex wrap reverse and justify flex end allows the buttons to wrap naturally/responsively on smaller screens */}\n <div css={Css.df.fwr.jcfe.gap1.aic.$}>\n {tertiaryAction && <Button {...tertiaryAction} variant=\"tertiary\" />}\n {secondaryAction && <Button {...secondaryAction} variant=\"secondary\" />}\n {primaryAction && <Button {...primaryAction} />}\n {actionMenu && <ButtonMenu {...actionMenu} trigger={{ icon: \"verticalDots\" }} />}\n </div>\n </header>\n </FullBleed>\n );\n}\n\nfunction SearchBox({ onSearch }: { onSearch(filter: string): void }) {\n const [{ search: initialValue }, setQueryParams] = useQueryParams({ search: StringParam });\n const [value, setValue] = useState<string>(initialValue || \"\");\n\n const [debouncedSearch] = useDebounce(value, 300);\n\n useEffect(() => {\n onSearch(debouncedSearch);\n setQueryParams({ search: debouncedSearch || undefined }, \"replaceIn\");\n }, [debouncedSearch, onSearch, setQueryParams]);\n\n return (\n <div css={Css.wPx(244).$}>\n <TextField\n label=\"Search\"\n labelStyle=\"hidden\"\n value={value}\n onChange={(v) => setValue(v ?? \"\")}\n placeholder={\"Search\"}\n clearable\n startAdornment={<Icon icon=\"search\" color={Palette.Gray700} />}\n />\n </div>\n );\n}\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\ntype ButtonMenuBaseProps = {\n items: MenuItem[];\n persistentItems?: MenuItem[];\n searchable?: boolean;\n // for storybook purposes\n defaultOpen?: boolean;\n contrast?: boolean;\n} & Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\" | \"showActiveBorder\">;\n\ntype SelectionButtonMenuProps = {\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} & ButtonMenuBaseProps;\n\nexport type ButtonMenuProps = ButtonMenuBaseProps | SelectionButtonMenuProps;\n\nexport function ButtonMenu(props: ButtonMenuProps) {\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 { memo, useMemo, useState } from \"react\";\nimport { Button } from \"src/components/Button\";\nimport { CountBadge } from \"src/components/CountBadge\";\nimport { Filter, FilterDefs, FilterImpls, filterTestIdPrefix, updateFilter } from \"src/components/Filters\";\nimport { Icon } from \"src/components/Icon\";\nimport { ToggleChip } from \"src/components/ToggleChip\";\nimport { Css } from \"src/Css\";\nimport { SelectField } from \"src/inputs/SelectField\";\nimport { Value } from \"src/inputs/Value\";\nimport { isDefined, safeEntries, safeKeys, useTestIds } from \"src/utils\";\n\n/**\n * FilterDropdownMenu is a newer filter UI pattern that shows a \"Filter\" button\n * which expands to reveal filter controls in a row below, with chips displayed\n * when closed to indicate active filters.\n *\n * Note: We expect the existing `Filters` component to eventually become\n * `FilterDropdownMenu`, but it hasn't been rolled out everywhere yet.\n */\ninterface FilterDropdownMenuProps<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}\n\nfunction FilterDropdownMenu<F extends Record<string, unknown>, G extends Value = string>(\n props: FilterDropdownMenuProps<F, G>,\n) {\n const { filter, onChange, filterDefs, groupBy } = props;\n const testId = useTestIds(props, filterTestIdPrefix);\n\n const [isOpen, setIsOpen] = useState(false);\n\n // Calculate the number of active filters for badge count\n const activeFilterCount = useMemo(() => getActiveFilterCount(filter), [filter]);\n\n // Convert FilterDefs to FilterImpls\n const filterImpls = useMemo(() => buildFilterImpls(filterDefs), [filterDefs]);\n\n // Render all filters, with non-checkbox filters first, then checkbox filters\n const renderFilters = () => {\n const entries = safeEntries(filterImpls);\n const nonCheckbox = entries.filter(([_, f]) => !f.hideLabelInModal);\n const checkbox = entries.filter(([_, f]) => f.hideLabelInModal);\n\n return [...nonCheckbox, ...checkbox].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, false)}\n </div>\n ));\n };\n\n return (\n <>\n <Button\n label=\"Filter\"\n icon=\"filter\"\n size=\"md\"\n endAdornment={\n <div css={Css.df.aic.gap1.$}>\n {activeFilterCount > 0 && <CountBadge count={activeFilterCount} />}\n <Icon icon={isOpen ? \"chevronUp\" : \"chevronDown\"} />\n </div>\n }\n variant=\"secondaryBlack\"\n onClick={() => setIsOpen(!isOpen)}\n active={isOpen}\n {...testId.button}\n />\n\n {/* When open, show all filter controls in a new row below */}\n {isOpen && (\n <div css={Css.df.aic.fww.gap1.w100.$}>\n {groupBy && (\n <SelectField\n label=\"Group by\"\n labelStyle=\"inline\"\n sizeToContent\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 )}\n\n {/* Render all filters (non-checkbox first, then checkbox) */}\n {renderFilters()}\n\n {/* Clear button at end of filter controls */}\n {activeFilterCount > 0 && (\n <Button label=\"Clear\" variant=\"tertiary\" onClick={() => onChange({} as F)} {...testId.clearBtn} />\n )}\n </div>\n )}\n\n {/* Filter chips (and clear button) shown when dropdown is closed */}\n {!isOpen && (\n <FilterChips\n filter={filter}\n filterImpls={filterImpls}\n onChange={onChange}\n onClear={() => onChange({} as F)}\n testId={testId}\n />\n )}\n </>\n );\n}\n\ninterface FilterChipsProps<F extends Record<string, unknown>> {\n filter: F;\n filterImpls: ReturnType<typeof buildFilterImpls<F>>;\n onChange: (filter: F) => void;\n onClear: () => void;\n testId: ReturnType<typeof useTestIds>;\n}\n\nfunction FilterChips<F extends Record<string, unknown>>({\n filter,\n filterImpls,\n onChange,\n onClear,\n testId,\n}: FilterChipsProps<F>) {\n const chips = safeEntries(filterImpls).flatMap(([key]) => {\n const value = filter[key];\n if (!isDefined(value)) return [];\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n const chipKey = `${String(key)}_${item}`;\n const newArray = value.filter((v) => v !== item);\n return (\n <ToggleChip\n key={chipKey}\n text={titleCase(String(item))}\n onClick={() => onChange(updateFilter(filter, key, newArray.length > 0 ? (newArray as any) : undefined))}\n {...testId[`chip_${chipKey}`]}\n />\n );\n });\n }\n\n return (\n <ToggleChip\n key={String(key)}\n text={titleCase(String(value))}\n onClick={() => onChange(updateFilter(filter, key, undefined))}\n {...testId[`chip_${String(key)}`]}\n />\n );\n });\n\n if (chips.length === 0) return null;\n\n return (\n <div css={Css.df.gap1.fww.aic.order(1).$}>\n {chips}\n <Button label=\"Clear\" variant=\"tertiary\" onClick={onClear} {...testId.clearBtn} />\n </div>\n );\n}\n\n/** Convert FilterDefs to FilterImpls by evaluating the factory functions */\nfunction buildFilterImpls<F extends Record<string, unknown>>(filterDefs: FilterDefs<F>): FilterImpls<F> {\n return Object.fromEntries(safeEntries(filterDefs).map(([key, fn]) => [key, fn(key as string)])) as FilterImpls<F>;\n}\n\n/** Capitalize the first letter of each word */\nfunction titleCase(str: string): string {\n return str\n .split(\" \")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\n/** Calculate the number of active (non-undefined) filters */\nfunction getActiveFilterCount<F extends Record<string, unknown>>(filter: F): number {\n return safeKeys(filter).filter((key) => filter[key] !== undefined).length;\n}\n\n// memo doesn't support generic parameters, so cast the result to the correct type\nconst _FilterDropdownMenu = memo(FilterDropdownMenu) as typeof FilterDropdownMenu;\nexport { _FilterDropdownMenu as FilterDropdownMenu };\n","import { Css, Only, Palette, Xss } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\n\ntype CountBadgeXss = \"color\";\n\nexport interface CountBadgeProps<X> {\n count: number;\n /** Background color of the badge. Defaults to Blue700. */\n bgColor?: Palette;\n color?: Palette;\n hideIfZero?: boolean;\n}\n\n/**\n * CountBadge displays a numeric count in a circular badge.\n * Automatically adjusts size for counts > 100 (increases from 16px to 18px).\n */\nexport function CountBadge<X extends Only<Xss<CountBadgeXss>, X>>(props: CountBadgeProps<X>) {\n const { count, bgColor = Palette.Blue700, color = Palette.White, hideIfZero = false, ...otherProps } = props;\n const tid = useTestIds(otherProps, \"countBadge\");\n\n if (hideIfZero && count === 0) return null;\n\n return (\n <span\n {...tid}\n css={{\n ...Css.sqPx(count > 100 ? 18 : 16).$, // Use larger size for counts > 100\n ...Css.fs0.br100.xs2Sb.df.aic.jcc.bgColor(bgColor).$,\n ...Css.color(color).$,\n }}\n >\n {count}\n </span>\n );\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 { 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 Value>(\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 Value, 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 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 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 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 { 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 Value>(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 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 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 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 { 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 Value>(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 Value> 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 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 { 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 Value>(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 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 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=\"quaternary\" 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.md.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 { CountBadge } from \"src/components/CountBadge\";\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 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={<CountBadge count={numModalFilters} hideIfZero />}\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 { 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 autoSort={false}\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 { Fragment, 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 { Switch } from \"src/inputs\";\nimport { useTestIds } from \"src/utils\";\nimport { defaultTestId } from \"src/utils/defaultTestId\";\n\ntype EditColumnsButtonProps<R extends Kinded> = {\n columns: GridColumn<R>[];\n api: GridTableApi<R>;\n // for storybook purposes\n defaultOpen?: boolean;\n} & Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\">;\n\nexport function EditColumnsButton<R extends Kinded>(props: EditColumnsButtonProps<R>) {\n const { defaultOpen, disabled, columns, trigger, 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 // Reset column widths before updating visible columns to ensure the table maintains\n // its full width and distributes removed column widths among remaining columns\n // We do this because trying to maintain the size of a removed column and redistribute it was very finnicky. But it\n // should be possible\n api.resetColumnWidths();\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 css={Css.dg.gtc(\"1fr auto\").gap2.bgWhite.p2.maxwPx(326).onHover.bshHover.$}>\n {options.map((option) => (\n <Fragment key={option.value}>\n <div css={Css.sm.truncate.pr1.$}>{option.label}</div>\n <Switch\n compact\n selected={selectedValues.includes(option.value)}\n onChange={(value) =>\n setSelectedValues(\n value ? [...selectedValues, option.value] : selectedValues.filter((v) => v !== option.value),\n )\n }\n labelStyle=\"hidden\"\n label={option.label}\n {...tid[`option${option.value}`]}\n />\n </Fragment>\n ))}\n <div css={Css.gc(\"1 / -1\").df.jcc.$}>\n <Button variant=\"tertiary\" label=\"Reset Column Widths\" onClick={() => api.resetColumnWidths()} />\n </div>\n </div>\n </OverlayTrigger>\n );\n}\n","import { ReactNode } from \"react\";\nimport { Css, Margin, Only, Xss } from \"src/Css\";\n\ntype TableActionsXss = Xss<Margin>;\n\ninterface TableActionsProps<X> {\n xss?: X;\n children: ReactNode;\n /** Content pinned to the right (e.g., column picker). */\n right?: ReactNode;\n}\n\n/** Provides layout and spacing for actions above a table (Filters, Search, EditColumns, etc.) */\nexport function TableActions<X extends Only<TableActionsXss, X>>(props: TableActionsProps<X>) {\n const { xss, children, right } = props;\n return (\n <div css={{ ...Css.df.gap1.aic.jcsb.aifs.pb2.$, ...xss }}>\n <div css={Css.df.gap1.aic.fww.$}>{children}</div>\n {right}\n </div>\n );\n}\n","import { ReactNode, ReactPortal, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { 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, paddingLeft, paddingRight } = 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 const showBottomSpacer = !omitBottomPadding && !virtualized;\n\n return createPortal(\n <div\n css={{\n ...Css.h100.pr(paddingRight).pl(paddingLeft).if(virtualized).pr0.$,\n ...(bgColor && Css.bgColor(bgColor).$),\n }}\n >\n {children}\n {showBottomSpacer && <div css={Css.h2.$} />}\n </div>,\n scrollableEl,\n );\n}\n","import { useMemo } from \"react\";\nimport { LoadingSkeleton, LoadingSkeletonProps } from \"src/components/LoadingSkeleton\";\nimport type { GridDataRow } from \"src/components/Table/components/Row\";\nimport { GridTable, GridTableProps } from \"src/components/Table/GridTable\";\nimport { GridTableXss, Kinded } from \"src/components/Table/types\";\nimport { Only } from \"src/Css\";\n\nexport type QueryResult<QData> = {\n loading: boolean;\n error?: { message: string };\n data?: QData;\n};\n\nexport type QueryTableProps<R extends Kinded, QData, X> = Omit<GridTableProps<R, X>, \"rows\" | \"fallback\"> & {\n query: QueryResult<QData>;\n emptyFallback?: string;\n /** Creates the rows given the data; needs to accept undefined so we can create the header row. */\n createRows: (data: QData | undefined) => GridDataRow<R>[];\n getPageInfo?: (data: QData) => {\n hasNextPage: boolean;\n };\n keepHeaderWhenLoading?: boolean;\n};\n\n/**\n * An adaption of GridTable that binds directly to an Apollo QueryResult.\n *\n * This handles the data/loading/error states internally within the table, i.e. we'll show a fallbackMessage\n * for loading/error states, instead of the entire table blinking in/out.\n */\nexport function QueryTable<R extends Kinded, QData, X extends Only<GridTableXss, X> = any>(\n props: QueryTableProps<R, QData, X>,\n) {\n const { emptyFallback, query, createRows, getPageInfo, columns, keepHeaderWhenLoading, ...others } = props;\n\n // Always call createRows to get the header, even if we're loading/error'd. We do force data=undefined\n // if loading/error though b/c while making/loading a 2nd query, Apollo will keep the 1st query's data.\n // This is arguably a better UX if we could show a spinner-new-results-coming-soon + the\n // old-results-are-still-here at the same time.\n const data = query.loading || query.error ? undefined : query.data;\n const rows = useMemo(() => createRows(data), [createRows, data]);\n\n // Detect our `pageInfo` response pattern\n const hasNextPage = data && getPageInfo && getPageInfo(data).hasNextPage;\n const infoMessage = hasNextPage ? \"Too many rows\" : undefined;\n\n // loading/error/empty can all use the one fallback prop.\n const fallbackMessage = query.loading ? \"Loading…\" : query.error ? `Error: ${query.error.message}` : emptyFallback;\n\n const headers = rows.filter((row) => row.kind === \"header\");\n\n return query.loading ? (\n <div>\n {keepHeaderWhenLoading ? (\n <GridTable {...{ columns, ...others }} rows={headers} fallbackMessage={fallbackMessage} />\n ) : (\n <LoadingTable columns={columns.length} />\n )}\n </div>\n ) : (\n <GridTable {...{ rows, columns, fallbackMessage, infoMessage, ...others }} />\n );\n}\n\nexport type LoadingTableProps = Pick<LoadingSkeletonProps, \"columns\">;\n\nfunction LoadingTable(props: LoadingTableProps) {\n const { columns } = props;\n return (\n <>\n {/* Header row */}\n <LoadingSkeleton rows={1} columns={1} />\n {/* Line Item rows - default to 5 rows/columns */}\n <LoadingSkeleton rows={5} columns={columns ?? 5} />\n </>\n );\n}\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 { 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 { 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\ntype ButtonDatePickerProps = {\n defaultOpen?: boolean;\n} & DatePickerProps &\n Pick<OverlayTriggerProps, \"trigger\" | \"placement\" | \"disabled\" | \"tooltip\">;\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 // Destructure autoFocus from menuProps since it's not a valid DOM attribute\n const {\n menuTriggerProps,\n menuProps: { autoFocus: _af, ...menuProps },\n } = 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).$, ...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\n key={i}\n {...buttonProps}\n disabled={disabled || buttonDisabled}\n size={size}\n isFirst={i === 0}\n isLast={i === buttons.length - 1}\n {...tid}\n />\n ))}\n </div>\n );\n}\n\ninterface GroupButtonProps extends ButtonGroupButton {\n size: ButtonGroupSize;\n isFirst: boolean;\n isLast: boolean;\n}\n\nfunction GroupButton(props: GroupButtonProps) {\n const {\n icon,\n iconInc,\n iconColor,\n text,\n active,\n onClick: onPress,\n disabled,\n size,\n tooltip,\n isFirst,\n isLast,\n ...otherProps\n } = 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(isFirst, isLast)}>\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.onDisabled.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(isFirst: boolean, isLast: boolean) {\n return {\n ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,\n // Our first button should have a rounded left border.\n ...(isFirst && Css.add(\"borderRadius\", \"4px 0 0 4px\").$),\n // Our last button should have a rounded right border.\n ...(isLast && Css.add(\"borderRadius\", \"0 4px 4px 0\").$),\n // Nudge buttons one pixel to the left so they visually share a border.\n ...(!isFirst && 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, useMemo } from \"react\";\nimport { useHover } from \"react-aria\";\nimport { Css, Palette } from \"src/Css\";\nimport { useTestIds } from \"src/utils\";\nimport { ButtonMenu, MenuItem } from \"./ButtonMenu\";\nimport { Tag, TagType } from \"./Tag\";\n\nexport type CardType = \"card\" | \"list\";\nexport type ImageFitType = \"contain\" | \"cover\";\nexport type CardTag = {\n text: string;\n type?: TagType;\n};\n\nexport interface CardProps {\n title: string;\n subtitle: string;\n detailContent?: ReactNode;\n imgSrc: string;\n // contain displays entire image, cover fills the space\n imageFit?: ImageFitType;\n type?: CardType;\n bordered?: boolean;\n disabled?: boolean;\n buttonMenuItems?: MenuItem[];\n tag?: CardTag;\n}\n\nexport function Card(props: CardProps) {\n const {\n title,\n subtitle,\n detailContent,\n imgSrc,\n imageFit = \"contain\",\n type = \"card\",\n bordered = false,\n disabled: isDisabled = false,\n buttonMenuItems,\n tag,\n } = props;\n const tid = useTestIds(props, \"card\");\n const { hoverProps, isHovered } = useHover({ isDisabled });\n const isList = type === \"list\";\n const imgHeight = isList ? 96 : bordered ? 224 : 256;\n\n const styles = useMemo(\n () => ({\n ...baseStyles(type),\n ...(isList && listStyles),\n ...(bordered && borderedStyles),\n ...(isHovered && cardHoverStyles),\n ...(isDisabled && disabledStyles),\n }),\n [isDisabled, isHovered, bordered, type, isList],\n );\n\n return (\n <div css={styles} {...hoverProps} {...tid}>\n {/* Image */}\n <div\n css={{\n ...Css.hPx(imgHeight).ba.br8.bcGray300.oh.df.asc.jsc.relative.add(\"filter\", \"brightness(1)\").$,\n ...(isHovered && !isList && imageHoverStyles),\n }}\n >\n <img css={Css.w100.h100.objectFit(imageFit).$} src={imgSrc} alt={title} {...tid.img} />\n </div>\n {/* Vertical Dots Button Menu */}\n {isHovered && buttonMenuItems && (\n <div css={Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$}>\n <ButtonMenu\n trigger={{ icon: \"verticalDots\", color: isList ? Palette.Gray700 : Palette.White }}\n items={buttonMenuItems}\n />\n </div>\n )}\n {/* Tag */}\n {tag && (\n <div css={Css.absolute.left1.topPx(4).$}>\n <Tag type={tag?.type} text={tag?.text} {...tid.tag} />\n </div>\n )}\n {/* Titles and detailContent */}\n <div css={Css.df.fdc.aifs.gap1.$}>\n <div>\n <div css={Css.xsSb.gray700.$} {...tid.subtitle}>\n {subtitle}\n </div>\n <div css={Css.smSb.gray900.if(isHovered).blue700.$} {...tid.title}>\n {title}\n </div>\n </div>\n <div {...tid.details}>{detailContent}</div>\n </div>\n </div>\n );\n}\n\nconst width = { card: 256, list: 520 };\nconst baseStyles = (type: CardType) => Css.wPx(width[type]).bgWhite.df.fdc.gap1.relative.$;\nconst listStyles = Css.df.fdr.gap2.$;\nconst borderedStyles = Css.ba.br8.bcGray300.p2.$;\nconst disabledStyles = Css.add(\"opacity\", 0.5).add(\"transition\", \"opacity 0.3s ease\").$;\nconst cardHoverStyles = Css.bcGray400.cursorPointer.$;\nconst imageHoverStyles = Css.bgWhite.add(\"filter\", \"brightness(0.3)\").add(\"transition\", \"filter 0.3s ease\").$;\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.xs2Sb.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 { ReactNode } from \"react\";\nimport { Css } from \"src/Css\";\nimport \"./Copy.css\";\n\nexport function Copy(props: { children: string | ReactNode }) {\n return (\n <div\n className=\"beam-copy\"\n css={{\n ...Css.sm.gray700.mt2.mb3.wPx(480).$,\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 { clearInlineStyles, isDefined, setInlineStyles } 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 const activeStyles = activeItemStyles ?? Css.bshModal.$;\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 setInlineStyles(dragEl.current, activeStyles);\n }\n }, [getGridItemIdOrder, activeStyles]);\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 clearInlineStyles(dragEl.current, activeStyles);\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, activeStyles]);\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 clearInlineStyles(dragEl.current, activeStyles);\n dragEl.current = undefined;\n reorderViaKeyboard.current = false;\n }\n }, [getGridItemIdOrder, getGridItems, activeStyles]);\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 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 // Use viewport coordinates since we're using position: fixed and we expect this component to be offset (above and to the left) by other elements in the DOM.\n const top = rect.top;\n const left = rect.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 // 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.style.pointerEvents = \"none\";\n dragEl.current.style.position = \"fixed\";\n dragEl.current.style.zIndex = \"9999\";\n dragEl.current.style.top = `${top}px`;\n dragEl.current.style.left = `${left}px`;\n dragEl.current.style.width = `${rect.width}px`;\n dragEl.current.style.height = `${rect.height}px`;\n setInlineStyles(dragEl.current, activeStyles);\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, activeStyles],\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.$,\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\";\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 { PropsWithChildren, useMemo } from \"react\";\nimport { useResponsiveGrid, useResponsiveGridProps } from \"src/components\";\nimport { ResponsiveGridContext } from \"src/components/Grid/utils\";\n\nexport interface ResponsiveGridProps extends PropsWithChildren<useResponsiveGridProps> {}\n\n/** Helper component for generating a responsive grid */\nexport function ResponsiveGrid(props: ResponsiveGridProps) {\n const { children, minColumnWidth, gap, columns } = props;\n const { gridStyles } = useResponsiveGrid({ minColumnWidth, gap, columns });\n const config = useMemo(() => ({ minColumnWidth, gap, columns }), [minColumnWidth, gap, columns]);\n return (\n <ResponsiveGridContext.Provider value={config}>\n <div css={{ ...gridStyles }}>{children}</div>\n </ResponsiveGridContext.Provider>\n );\n}\n","import { createContext } from \"react\";\n\nexport const gridItemDataAttribute = \"data-grid-item-span\";\n\nexport interface ResponsiveGridConfig {\n minColumnWidth: number;\n gap: number;\n columns: number;\n}\n\nexport const ResponsiveGridContext = createContext<ResponsiveGridConfig | undefined>(undefined);\n","import { PropsWithChildren } from \"react\";\nimport { useResponsiveGridItem } from \"src\";\n\nexport type ResponsiveGridItemProps = 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, gridItemStyles } = useResponsiveGridItem({ colSpan });\n return (\n <div {...gridItemProps} css={{ ...gridItemStyles }}>\n {children}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { Css, Properties } from \"src\";\n\nexport interface useResponsiveGridProps {\n minColumnWidth: number;\n gap: number;\n columns: number;\n}\n\n/**\n * Returns container styles for a responsive CSS grid.\n *\n * ## Layout algorithm\n *\n * The grid uses `auto-fill` columns with a clamped width:\n *\n * ```\n * grid-template-columns: repeat(auto-fill, minmax(max(minColumnWidth, maxColumnWidth), 1fr))\n * ```\n *\n * where `maxColumnWidth = (100% - totalGapWidth) / columns`.\n *\n * - The `max(minColumnWidth, maxColumnWidth)` clamp means each column is *at\n * least* `minColumnWidth` wide, but when the container is wide enough to fit\n * all `columns`, each column grows to fill the space equally.\n * - `auto-fill` lets the browser drop columns automatically as the container\n * shrinks — once there isn't room for the next column at `minColumnWidth`,\n * the grid reflows to fewer columns.\n * - The grid is also a CSS `container` (`container-type: inline-size`) so that\n * child items can use `@container` queries to adapt their `grid-column` span\n * based on the grid's current width. See `useResponsiveGridItem`.\n *\n * ### Trade-offs\n *\n * **Pros**\n * - Fully CSS-driven reflow — no JS resize observers or manual breakpoint\n * bookkeeping; the browser handles column count changes natively.\n * - Container queries keep span adjustments scoped to the grid's own width\n * rather than the viewport, so the grid works correctly inside any layout\n * (sidebars, split panes, etc.).\n *\n * **Cons**\n * - `auto-fill` can produce an empty trailing column when the container is\n * slightly wider than `columns * minColumnWidth` but not wide enough for\n * `columns + 1` full columns.\n * - Items that span multiple columns need coordinated `@container` queries\n * (via `useResponsiveGridItem`) to gracefully reduce their span — without\n * those styles an item requesting e.g. `span 3` will overflow or leave\n * blank tracks when only 2 columns fit.\n *\n * ## Usage\n *\n * When using the hooks directly (without `ResponsiveGrid`), pass the same\n * config object to both hooks so that items can compute their container query\n * breakpoints:\n *\n * ```tsx\n * const gridConfig = { minColumnWidth: 276, columns: 4, gap: 24 };\n * const { gridStyles } = useResponsiveGrid(gridConfig);\n * const { gridItemProps, gridItemStyles } = useResponsiveGridItem({ colSpan: 3, gridConfig });\n * ```\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 // When the container is wide enough for all `columns`, each column gets an\n // equal share of the remaining space after gaps are subtracted.\n const maxColumnWidth = `calc((100% - ${totalGapWidth}px) / ${columns})`;\n // The minmax clamp: columns are at least minColumnWidth, but scale up to\n // fill available space (1fr). auto-fill drops columns when they no longer fit.\n const gridTemplateColumns = `repeat(auto-fill, minmax(max(${minColumnWidth}px, ${maxColumnWidth}), 1fr))`;\n const gridGap = `${gap}px`;\n\n return Css.dg.gtc(gridTemplateColumns).ctis.gap(gridGap).$;\n }, [minColumnWidth, gap, columns]);\n\n return { gridStyles };\n}\n","import { useContext, useEffect, useMemo } from \"react\";\nimport { Properties } from \"src\";\nimport { gridItemDataAttribute, ResponsiveGridConfig, ResponsiveGridContext } from \"src/components/Grid/utils\";\n\n/**\n * The responsive grid logic we use is heavily dependent on @container queries\n * that are extremely dynamic -- i.e. not just \"here are our sm/md/lg breakpoints\",\n * but the caller can pass in truly adhoc min-size/max-size numbers, that then need\n * added into our `@container ${...} ${...}` classes.\n *\n * Truss v2 fundamentally does not support dynamic selectors like that (neither did\n * StyleX, which we briefly prototyped), and so this component has its own custom\n * class/style management, which is basically a mini-/adhoc-implementation of Emotion,\n * i.e. managing a `style` tag and injecting classes into it at runtime.\n *\n * This is not amazing, but it's the only place in Beam where we do this, and the code\n * really isn't that bad, so :shrug: it's what we're doing for now/to unblock Truss v2.\n */\nconst injectedResponsiveGridClasses = new Set<string>();\nlet responsiveGridStyleEl: HTMLStyleElement | undefined;\n\ninterface UseResponsiveGridItemProps {\n /** How many grid columns this item should span. Defaults to 1. */\n colSpan?: number;\n /**\n * The grid configuration for computing container-query breakpoints.\n *\n * When items are rendered inside a `ResponsiveGrid` (or a manual\n * `ResponsiveGridContext.Provider`), this is picked up from context\n * automatically and can be omitted.\n *\n * When using the hooks directly (i.e. `useResponsiveGrid` +\n * `useResponsiveGridItem` without a Provider), this **must** be supplied\n * so the item can generate the correct `@container` query styles.\n * Pass the same config object you gave to `useResponsiveGrid`:\n *\n * ```tsx\n * const gridConfig = { minColumnWidth: 276, columns: 4, gap: 24 };\n * const { gridStyles } = useResponsiveGrid(gridConfig);\n * const { gridItemProps, gridItemStyles } = useResponsiveGridItem({ colSpan: 3, gridConfig });\n * ```\n */\n gridConfig?: ResponsiveGridConfig;\n}\n\n/**\n * Returns props and styles for a responsive grid item.\n *\n * - `gridItemProps` — a data attribute used to identify the item's requested\n * column span. Spread this onto the item's root element.\n * - `gridItemStyles` — `@container` query CSS that gracefully reduces the\n * item's `grid-column` span as the grid container shrinks. Apply these to\n * the item's `css` prop.\n *\n * The container query breakpoints are derived from the grid config (see\n * `UseResponsiveGridItemProps.gridConfig`). When `colSpan` is 1 or the\n * config is unavailable, `gridItemStyles` will be an empty object.\n */\nexport function useResponsiveGridItem(props: UseResponsiveGridItemProps): {\n gridItemProps: Record<string, string | number>;\n gridItemStyles: Properties;\n} {\n const { colSpan = 1, gridConfig } = props;\n const contextConfig = useContext(ResponsiveGridContext);\n // Prefer explicitly passed config over context, so hook-only callers\n // (without a ResponsiveGridContext.Provider) can still get grid item styles.\n const config = gridConfig ?? contextConfig;\n\n const { className, cssText } = useMemo(() => {\n if (!config || colSpan <= 1) return { className: \"\", cssText: \"\" };\n const { minColumnWidth, gap } = config;\n const className = responsiveGridItemClassName(config, colSpan);\n const rules: string[] = [];\n\n for (let span = 1; span < colSpan; span++) {\n const minWidth = span === 1 ? 0 : minColumnWidth * span + gap * (span - 1);\n const maxWidth = minColumnWidth * (span + 1) + gap * span;\n rules.push(\n `@container (min-width: ${minWidth + 1}px) and (max-width: ${maxWidth}px) { .${className} { grid-column: span ${span}; } }`,\n );\n }\n\n const fullSpanMinWidth = minColumnWidth * colSpan + gap * (colSpan - 1);\n rules.push(`@container (min-width: ${fullSpanMinWidth + 1}px) { .${className} { grid-column: span ${colSpan}; } }`);\n\n return { className, cssText: rules.join(\"\\n\") };\n }, [config, colSpan]);\n\n useResponsiveGridItemStyle(className, cssText);\n\n return {\n gridItemProps: { [gridItemDataAttribute]: colSpan, ...(className ? { className } : {}) },\n gridItemStyles: {},\n };\n}\n\nfunction useResponsiveGridItemStyle(className: string, cssText: string) {\n useEffect(\n function () {\n if (!className || !cssText || typeof document === \"undefined\") return;\n\n if (!responsiveGridStyleEl) {\n responsiveGridStyleEl = document.createElement(\"style\");\n responsiveGridStyleEl.setAttribute(\"data-responsive-grid-item-styles\", \"true\");\n document.head.appendChild(responsiveGridStyleEl);\n }\n\n if (!injectedResponsiveGridClasses.has(className)) {\n responsiveGridStyleEl.textContent = `${responsiveGridStyleEl.textContent}\\n${cssText}`.trim();\n injectedResponsiveGridClasses.add(className);\n }\n },\n [className, cssText],\n );\n}\n\nfunction responsiveGridItemClassName(config: ResponsiveGridConfig, colSpan: number) {\n return `responsive-grid-item-${config.minColumnWidth}-${config.gap}-${config.columns}-${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 // Image is white-on-black, so this flips it to black-on-white for our almost-always white backgrounds\n Css.add(\"filter\", \"invert(1)\").$\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 { 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.sm.$} onClick={() => setExpanded((prev) => !prev)}>\n {expanded ? \"Show Less\" : \"Show More\"}\n </button>\n )}\n </div>\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 tid = useTestIds(props);\n const { height, width } = props.xss ?? {};\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 [horizontal],\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 const onResize = useCallback(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);\n useResizeObserver({ ref: scrollRef, onResize });\n\n return (\n <div\n css={\n Css.df\n .fd(!horizontal ? \"column\" : \"row\")\n .relative.oh.h(\"auto\")\n .w(\"auto\")\n // Allow the caller to pass in their own height/width\n .addCss({ height, width }).$\n }\n {...tid}\n >\n <div css={{ ...startShadowStyles, ...Css.o(showStartShadow ? 1 : 0).$ }} data-chromatic=\"ignore\" />\n <div css={{ ...endShadowStyles, ...Css.o(showEndShadow ? 1 : 0).$ }} data-chromatic=\"ignore\" />\n <div\n css={{\n ...xss,\n ...Css.oa.fg1.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 <h1 css={Css.xl2.$}>{props.title}</h1>\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=\"quaternary\"\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 type { 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 type { 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 { 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 /** If you want to set your own padding in `contentXss`, you can disable the default FullBleed padding here. */\n omitFullBleedPadding?: boolean;\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 = {}, omitFullBleedPadding = false } = 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={omitFullBleedPadding}>\n <div\n aria-labelledby={`${uniqueValue}-tab`}\n id={`${uniqueValue}-tabPanel`}\n role=\"tabpanel\"\n tabIndex={0}\n {...tid.panel}\n css={contentXss}\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.props({\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 {...mergeProps(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.bcBlue700.smSb.gray900.$, ...borderBottomStyles },\n disabledStyles: Css.gray400.cursorNotAllowed.$,\n focusRingStyles: Css.bgBlue50.bshFocus.$,\n hoverStyles: { ...Css.bcGray400.$, ...borderBottomStyles },\n activeHoverStyles: { ...Css.bgBlue50.bcBlue700.$, ...borderBottomStyles },\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 { 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"],"mappings":"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","names":["px","Palette","Breakpoints","AutoSaveStatus","useMemo","React","useRef","useState","jsx","useRef","useState","Fragment","jsx","jsxs","React","useContext","useMemo","jsx","jsx","jsxs","useMemo","jsx","React","useEffect","useMemo","useRef","useState","Virtuoso","jsx","useMemo","makeAutoObservable","observable","reaction","React","camelCase","makeAutoObservable","makeAutoObservable","observable","useContext","useMemo","useRef","jsx","jsx","useMemo","useContext","useState","useEffect","useState","useState","useEffect","useEffect","useMemo","useRef","useState","useState","useRef","useMemo","useEffect","useState","useState","useMemo","useCallback","value","useMemo","value","useHover","useEffect","useMemo","useQueryParams","useMemo","filter","useEffect","useCallback","useState","jsx","jsxs","column","useContext","useState","useHover","useCallback","useContext","jsx","jsxs","useHover","useContext","useCallback","Fragment","jsx","jsxs","column","jsx","useContext","useContext","useCallback","useRef","useComboBox","useOverlayPosition","Item","useComboBoxState","useRef","Fragment","jsx","jsxs","useRef","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","React","useCallback","useContext","useRef","mergeProps","Link","jsx","css","column","Link","useCallback","useContext","useEffect","useRef","useState","createContext","useContext","useEffect","useMemo","useRef","useState","jsx","jsxs","createContext","px","Tag","useMemo","useState","useRef","useEffect","useContext","Fragment","jsx","jsxs","useContext","useState","useRef","useCallback","useEffect","scrollableEl","useContext","jsx","jsxs","useContext","sortFn","column","useDebouncedCallback","Fragment","jsx","jsxs","useContext","useRef","useCallback","row","column","React","mergeProps","width","VisuallyHidden","Fragment","jsx","jsxs","VisuallyHidden","Fragment","jsx","jsxs","useState","useHover","mergeProps","jsx","useRef","jsx","jsxs","useState","useFilter","useMemo","items","useRef","useEffect","useRef","useHover","Link","useState","jsx","jsxs","px","useState","useMemo","useButton","useFocusRing","useHover","Fragment","jsx","jsxs","useButton","useFocusRing","useHover","useMemo","useRef","useMemo","useRef","useMemo","useState","useButton","useFocusRing","useHover","Fragment","jsx","jsxs","useState","useButton","useFocusRing","useHover","baseStyles","hoverStyles","disabledStyles","pressedStyles","focusStyles","useMemo","useMemo","mergeProps","useButton","useFocusRing","useHover","Fragment","jsx","jsxs","useButton","useHover","useFocusRing","baseStyles","activeStyles","focusRingStyles","hoverStyles","disabledStyles","pressedStyles","useMemo","mergeProps","jsx","jsxs","useMemo","useRef","FocusScope","jsx","jsxs","FocusScope","jsx","useRef","jsx","jsxs","Fragment","jsx","jsxs","useRef","useHover","Link","jsx","jsxs","useCallback","useEffect","useMemo","useRef","useState","useButton","useComboBox","useFilter","useOverlayPosition","Item","useComboBoxState","useState","mergeProps","useCallback","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","useState","useFocus","useEffect","useMemo","Section","Item","label","camelCase","useButton","useOverlayPosition","value","mergeProps","jsx","jsxs","useRef","useHover","mergeProps","useEffect","useRef","jsx","jsxs","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","useRef","Item","useComboBoxState","useEffect","useComboBox","useButton","useOverlayPosition","current","Fragment","jsx","jsxs","useCallback","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","useEffect","useMemo","useRef","useState","camelCase","useState","jsx","useState","defaultTestId","value","camelCase","jsx","jsxs","useState","useRef","useMemo","id","trixChange","e","onChange","editor","useEffect","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","useRef","useCallback","width","useMemo","useCallback","useEffect","useRef","useState","useCallback","useEffect","useState","useDebouncedCallback","widths","width","useDebouncedCallback","useRef","useState","useCallback","width","useEffect","useCallback","useRef","jsx","jsxs","useMemo","useRef","api","useState","useEffect","rows","keptSelectedRows","visibleDataRows","tableHeadRows","tooManyClientSideRows","Virtuoso","React","VirtualRoot","jsx","jsxs","useHover","jsx","useResizeObserver","useCallback","useEffect","useMemo","useState","useFocusRing","jsx","jsxs","useState","useFocusRing","useMemo","useEffect","useCallback","useResizeObserver","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","width","useState","size","useResizeObserver","useCallback","useEffect","OverlayContainer","FocusScope","createPortal","createContext","useContext","useMemo","useState","jsx","jsxs","typeToIcon","jsx","jsx","jsxs","createContext","useState","useMemo","useContext","useEffect","useRef","createPortal","SuperDrawerWidth","Fragment","jsx","jsxs","createElement","useRef","width","useEffect","createPortal","React","useCallback","useEffect","useMemo","useRef","useState","useButton","useFocusRing","jsx","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","useCallback","useMemo","Observer","jsx","Observer","Observer","useCallback","useMemo","useState","mergeProps","jsx","jsxs","useState","useMemo","useCallback","mergeProps","label","jsx","Observer","Observer","Fragment","jsx","jsxs","Observer","Observer","jsx","Observer","options","Observer","jsx","Observer","options","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","Observer","Observer","jsx","options","Observer","jsx","width","widths","jsx","useCallback","useMemo","cloneElement","useState","jsx","jsxs","useState","cloneElement","jsx","jsxs","jsx","useId","jsx","jsxs","useId","jsx","useDebouncedCallback","AnimatePresence","motion","useState","Fragment","jsx","jsxs","headerHeightPx","useState","AnimatePresence","motion","createContext","useCallback","useContext","useMemo","useState","jsx","Fragment","jsx","Fragment","useMemo","useState","Link","Fragment","jsx","jsxs","useMemo","useState","Link","jsx","jsxs","useMemo","React","activeStyles","hoverStyles","useCallback","useRef","useButton","useFocusRing","useHover","useState","useDebouncedCallback","useEffect","observer","mergeProps","cloneElement","cloneElement","mergeProps","React","useEffect","useMemo","useState","useRef","useMenuTrigger","useMenuTriggerState","jsx","useMenuTriggerState","useRef","useMenuTrigger","memo","useMemo","useState","jsx","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","Fragment","jsx","jsxs","useState","useMemo","memo","jsx","jsxs","Fragment","useCallback","useMemo","useRef","useMenuTrigger","useMenuTriggerState","jsx","jsxs","useMenuTriggerState","useRef","useMenuTrigger","useMemo","column","useCallback","Fragment","jsx","jsxs","useDebounce","StringParam","useQueryParams","useEffect","createPortal","Fragment","jsx","jsxs","useEffect","createPortal","useMemo","jsx","sizeToPixels","Fragment","jsx","jsxs","useMemo","Fragment","jsx","jsxs","useMemo","useEffect","Header","React","useState","useQueryParams","StringParam","useDebounce","jsx","React","useCallback","useContext","useMemo","useState","jsx","AnimatePresence","motion","useEffect","Fragment","jsx","jsxs","useEffect","AnimatePresence","motion","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","defaultFocusRingStyles","activeStyles","hoverStyles","iconStyles","useMemo","useHover","useResizeObserver","useRef","useState","jsx","jsxs","typeStyles","useState","useRef","useResizeObserver","jsx","jsxs","useHover","useMemo","baseStyles","disabledStyles","jsx","equal","useCallback","useRef","createContext","useContext","jsx","useRef","activeStyles","useCallback","equal","mergeProps","useFocusRing","useHover","jsx","useFocusRing","useHover","iconButtonNormal","iconButtonCompact","mergeProps","useMemo","useMemo","useMemo","createContext","jsx","useMemo","jsx","useMemo","useMemo","useContext","useEffect","useMemo","useContext","useMemo","className","useEffect","React","useContext","useMemo","jsx","jsxs","useContext","useMemo","React","useLayoutEffect","useResizeObserver","useCallback","useEffect","useRef","useState","jsx","jsxs","useRef","useState","useLayoutEffect","useEffect","useCallback","useResizeObserver","useResizeObserver","useCallback","useMemo","useRef","useState","jsx","jsxs","width","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","width","children","motion","data","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","useCallback","useCallback"]}
|