@stenajs-webui/grid 19.0.0-next.2 → 19.0.0-next.21

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/GridHooksTable.tsx","../src/features/table-ui/components/CrudStatusIndicator.tsx","../src/features/table-ui/components/ModifiedField.tsx","../src/features/table-ui/components/table/TableCell.tsx","../src/config/TableConfig.ts","../src/features/table-ui/components/table/SmallTableCell.tsx","../src/features/table-ui/components/table/SortOrderIcon.tsx","../src/features/table-ui/components/table/TableHeadItem.tsx","../src/features/table-ui/components/table/SmallTableHead.tsx","../src/features/table-ui/components/table/TableColumnGroupHead.tsx","../src/features/table-ui/components/table/TableHeadRow.tsx","../src/features/table-ui/components/table/TableRow.tsx","../src/features/grid-cell/hooks/UseRevertableValue.ts","../src/features/grid-cell/hooks/UseEditableCell.ts","../src/util/bounds/NumberBoundsWrapper.ts","../src/util/NumberBoundsWrapper.ts","../src/util/DirectionCalculator.ts","../src/util/DomIdValidator.tsx","../src/util/GridHookOptionsValidator.ts","../src/features/grid-cell/hooks/UseGridNavigationOptionsFromContext.ts","../src/features/grid-cell/hooks/UseGridNavigation.ts","../src/features/grid-cell/hooks/UseGridCell.ts","../src/features/table-ui/components/cells/EditableTextCellWithCrudAndModified.tsx","../src/features/standard-table/context/StandardTableStateContext.ts","../src/features/standard-table/redux/StandardTableActionsAndSelectors.ts","../src/features/standard-table/redux/ReducerIdFactory.ts","../src/features/standard-table/redux/StandardTableReducer.ts","../src/features/standard-table/hooks/UseStandardTableConfig.ts","../src/features/standard-table/context/GroupConfigsAndIdsForRowsContext.ts","../src/features/standard-table/context/OnKeyDownContext.ts","../src/features/standard-table/context/OnSortOrderChangeContext.ts","../src/features/standard-table/context/StandardTableColumnOrderContext.ts","../src/features/standard-table/context/StandardTableVariantContext.ts","../src/features/standard-table/context/StickyPropsPerColumnContext.ts","../src/features/standard-table/context/TotalNumColumnsContext.ts","../src/features/standard-table/features/column-groups/ColumnGroupFactory.ts","../src/features/standard-table/util/CellBorderCalculator.ts","../src/features/standard-table/hooks/UseColumnConfigById.ts","../src/features/standard-table/features/column-groups/ColumnInGroup.tsx","../src/features/standard-table/features/column-groups/StickyHeaderPropsFactory.ts","../src/features/standard-table/features/column-groups/ColumnGroupRow.tsx","../src/features/standard-table/features/column-index-per-column-id/ColumnIndexCalculator.ts","../src/features/standard-table/features/column-index-per-column-id/ColumnIndexPerColumnIdContext.ts","../src/features/standard-table/features/sticky-columns/StickyColumnGroupValidator.ts","../src/features/standard-table/features/sticky-columns/StickyColumnGroupOffsetCalculator.ts","../src/features/standard-table/features/sticky-columns/StickyPropsPerColumnCalculator.ts","../src/features/standard-table/util/ActionsFactory.ts","../src/features/standard-table/hooks/UseLocalStateTableContext.ts","../src/features/standard-table/util/ColumnCounter.ts","../src/features/standard-table/components/ColGroups.tsx","../src/features/standard-table/features/sorting/MultitypeComparator.ts","../src/features/standard-table/hooks/UseColumnValueResolver.ts","../src/features/standard-table/features/checkboxes/StandardTableRowCheckbox.tsx","../src/features/standard-table/util/IdListPartial.ts","../src/features/standard-table/features/checkboxes/UseRowCheckbox.ts","../src/features/standard-table/features/expand-collapse/UseExpandCollapseActions.ts","../src/features/standard-table/features/expand-collapse/StandardTableRowExpandButton.tsx","../src/features/standard-table/hooks/UseCellBackground.ts","../src/features/standard-table/util/LabelFormatter.ts","../src/features/standard-table/components/StandardTableCellUi.tsx","../src/features/standard-table/components/TextCell.tsx","../src/features/standard-table/components/StandardTableCell.tsx","../src/features/standard-table/components/StandardTableRowExpansion.tsx","../src/features/standard-table/components/TrWithHoverBackground.tsx","../src/features/standard-table/components/StandardTableRow.tsx","../src/features/standard-table/features/summary-row/SummaryRowVisibilityCalculator.ts","../src/features/standard-table/features/summary-row/components/SummaryCell.tsx","../src/features/standard-table/features/summary-row/SummaryCellColSpanCalculator.ts","../src/features/standard-table/features/summary-row/components/StandardTableSummaryRow.tsx","../src/features/standard-table/features/summary-row/components/SummaryRowSwitcher.tsx","../src/features/standard-table/util/FilterItemsOnEnabledCheckboxes.ts","../src/features/standard-table/components/StandardTableRowList.tsx","../src/features/standard-table/components/StandardTableContent.tsx","../src/features/standard-table/features/checkboxes/UseTableHeadCheckbox.ts","../src/features/standard-table/features/expand-collapse/UseTableHeadExpandCollapse.ts","../src/features/standard-table/features/sorting/UseTableSortHeader.ts","../src/features/standard-table/components/StandardTableHeadItem.tsx","../src/features/standard-table/components/StandardTableHeadRow.tsx","../src/features/standard-table/components/StandardTable.tsx","../src/features/standard-table/config/StandardTableColumnConfig.ts","../src/features/standard-table/helpers/cell-renderers/editable-text-cell/EditableTextCell.tsx","../src/features/standard-table/helpers/cell-renderers/editable-text-cell/EditableTextCellWithStatus.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode, useMemo } from \"react\";\n\ninterface GridHooksTableProps extends GridHooksContextValue {\n children?: ReactNode;\n}\n\ninterface GridHooksContextValue {\n /**\n * Total number of rows in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numRows?: number;\n /**\n * Total number of columns in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numCols?: number;\n /**\n * An ID for the table, must be unique for every table in page. Must be set in cell hook or in GridHooksTable prop.\n */\n tableId?: string;\n /**\n * If true, navigation will wrap around the table. If false, navigation stops at table edge.\n */\n wrap?: boolean;\n}\n\nexport const GridHooksContext = React.createContext<GridHooksContextValue>({});\n\nexport const GridHooksTable: React.FC<GridHooksTableProps> = ({\n children,\n numCols,\n numRows,\n tableId,\n wrap,\n}) => {\n const contextProps = useMemo<GridHooksContextValue>(\n () => ({ numCols, numRows, tableId, wrap }),\n [numCols, numRows, tableId, wrap]\n );\n\n return (\n <GridHooksContext.Provider value={contextProps}>\n {children}\n </GridHooksContext.Provider>\n );\n};\n","import { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons/faExclamationTriangle\";\nimport { Icon, InputSpinner } from \"@stenajs-webui/elements\";\nimport { CrudStatus } from \"@stenajs-webui/redux\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\n\ninterface Props {\n crudStatus?: CrudStatus;\n}\n\nexport const hasIndicatorContent = (status: CrudStatus): boolean => {\n const { loading, creating, deleting, updating, hasError } = status;\n return Boolean(loading || creating || deleting || updating || hasError);\n};\n\nexport const CrudStatusIndicator: React.FC<Props> = ({ crudStatus }) => {\n if (!crudStatus || !hasIndicatorContent(crudStatus)) {\n return null;\n }\n\n const { errorMessage, hasError, loading, creating, deleting, updating } =\n crudStatus;\n\n if (loading || creating || deleting || updating) {\n return <InputSpinner color={cssColor(\"--lhds-color-ui-500\")} />;\n }\n\n if (hasError) {\n const icon = (\n <Icon\n icon={faExclamationTriangle}\n color={cssColor(\"--lhds-color-orange-600\")}\n size={14}\n />\n );\n return (\n <>\n {errorMessage ? (\n <Tooltip label={errorMessage} zIndex={100}>\n {icon}\n </Tooltip>\n ) : (\n icon\n )}\n </>\n );\n }\n return null;\n};\n","import { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons/faExclamationTriangle\";\nimport { Indent, Space, Text } from \"@stenajs-webui/core\";\nimport { Icon, stenaArrowRight } from \"@stenajs-webui/elements\";\nimport { EntityCrudStatus, ModifiedFieldItemState } from \"@stenajs-webui/redux\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport {\n CrudStatusIndicator,\n hasIndicatorContent,\n} from \"./CrudStatusIndicator\";\n\ninterface Props {\n warningOnEmpty?: string;\n isEditable?: boolean;\n value?: string;\n crudStatus?: EntityCrudStatus;\n modifiedField?: ModifiedFieldItemState;\n}\n\nexport const ModifiedField: React.FC<Props> = ({\n isEditable,\n warningOnEmpty,\n value,\n modifiedField,\n crudStatus,\n}) => {\n const showEmptyFieldWarning =\n warningOnEmpty && modifiedField?.modified && modifiedField?.newValue === \"\";\n\n const hasCrudIndicator = crudStatus && hasIndicatorContent(crudStatus);\n\n const hasRightIcon = showEmptyFieldWarning || hasCrudIndicator;\n\n return (\n <>\n <Text\n color={isEditable ? \"var(--swui-primary-action-color)\" : undefined}\n variant={modifiedField?.modified ? \"bold\" : undefined}\n >\n {value}\n </Text>\n {modifiedField?.newValue !== undefined && (\n <>\n <Indent>\n <Icon icon={stenaArrowRight} size={12} />\n </Indent>\n <Text color={\"var(--swui-primary-action-color)\"} variant={\"bold\"}>\n {modifiedField.newValue}\n </Text>\n </>\n )}\n {hasRightIcon && <Space />}\n {showEmptyFieldWarning ? (\n <Tooltip label={warningOnEmpty!} zIndex={100}>\n <Icon\n icon={faExclamationTriangle}\n color={cssColor(\"--lhds-color-orange-600\")}\n size={14}\n />\n </Tooltip>\n ) : (\n <CrudStatusIndicator crudStatus={crudStatus} />\n )}\n </>\n );\n};\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\n\nexport interface TableCellProps extends BoxProps {}\n\nexport const TableCell: React.FC<TableCellProps> = ({\n alignItems = \"center\",\n justifyContent = \"flex-start\",\n overflow = \"hidden\",\n indent = 1,\n ...boxProps\n}) => {\n return (\n <Row\n height={\"100%\"}\n alignItems={alignItems}\n justifyContent={justifyContent}\n overflow={overflow}\n indent={indent}\n {...boxProps}\n />\n );\n};\n","export const tableBorderColor = \"var(--lhds-color-ui-300)\";\nexport const tableBorderColorExpanded = \"var(--lhds-color-blue-500)\";\nexport const tableBackgroundColorExpanded = \"var(--lhds-color-blue-50)\";\nexport const tableBackgroundHoverColorExpanded = \"var(--lhds-color-blue-100)\";\nexport const tableBorder = `1px solid ${tableBorderColor}`;\nexport const tableBorderHidden = `1px solid transparent`;\nexport const tableBorderLeft = `var(--swui-expand-highlight-border-width) solid transparent`;\nexport const tableBorderLeftExpanded = `var(--swui-expand-highlight-border-width) solid ${tableBorderColorExpanded}`;\nexport const defaultTableRowHeight = \"40px\";\nexport const defaultTableHeadRowHeight = \"40px\";\nexport const smallTableRowWidth = \"40px\";\n","import * as React from \"react\";\nimport { TableCell, TableCellProps } from \"./TableCell\";\nimport { smallTableRowWidth } from \"../../../../config/TableConfig\";\n\ninterface Props extends TableCellProps {}\n\nexport const SmallTableCell: React.FC<Props> = (props) => {\n return (\n <TableCell\n width={smallTableRowWidth}\n justifyContent={\"center\"}\n {...props}\n />\n );\n};\n","import { IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\nimport { faSortAlphaDown } from \"@fortawesome/free-solid-svg-icons/faSortAlphaDown\";\nimport { faSortAlphaUp } from \"@fortawesome/free-solid-svg-icons/faSortAlphaUp\";\nimport { faSortAmountDownAlt } from \"@fortawesome/free-solid-svg-icons/faSortAmountDownAlt\";\nimport { faSortAmountUpAlt } from \"@fortawesome/free-solid-svg-icons/faSortAmountUpAlt\";\nimport { faSortNumericDown } from \"@fortawesome/free-solid-svg-icons/faSortNumericDown\";\nimport { faSortNumericUp } from \"@fortawesome/free-solid-svg-icons/faSortNumericUp\";\nimport { Box, exhaustSwitchCaseElseThrow } from \"@stenajs-webui/core\";\nimport { Icon } from \"@stenajs-webui/elements\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport * as React from \"react\";\n\nexport type SortOrderDirection = \"up\" | \"down\";\nexport type SortOrderIconVariant = \"numeric\" | \"alpha\" | \"amount\";\n\ninterface Props {\n direction: SortOrderDirection;\n iconVariant?: SortOrderIconVariant;\n}\n\nexport const SortOrderIcon: React.FC<Props> = ({\n iconVariant = \"amount\",\n direction,\n}) => {\n return (\n <Box width={\"14px\"}>\n <Icon\n size={14}\n color={cssColor(\"--lhds-color-ui-500\")}\n icon={getIcon(direction, iconVariant)}\n />\n </Box>\n );\n};\n\nexport const getIcon = (\n arrow: SortOrderDirection,\n iconType: SortOrderIconVariant\n): IconDefinition => {\n switch (iconType) {\n case \"alpha\":\n return arrow === \"up\" ? faSortAlphaUp : faSortAlphaDown;\n case \"numeric\":\n return arrow === \"up\" ? faSortNumericUp : faSortNumericDown;\n case \"amount\":\n return arrow === \"up\" ? faSortAmountUpAlt : faSortAmountDownAlt;\n default:\n return exhaustSwitchCaseElseThrow(iconType);\n }\n};\n","import { faEllipsisV } from \"@fortawesome/free-solid-svg-icons/faEllipsisV\";\nimport { Box, BoxProps, Heading, Row, Space } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n Icon,\n InputSpinner,\n stenaInfoCircle,\n} from \"@stenajs-webui/elements\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport {\n ButtonWithPopoverProps,\n Popover,\n Tooltip,\n TooltipProps,\n} from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { CSSProperties, useRef } from \"react\";\nimport {\n SortOrderDirection,\n SortOrderIcon,\n SortOrderIconVariant,\n} from \"./SortOrderIcon\";\n\nexport interface TableHeadProps extends BoxProps {\n label?: string;\n infoIconTooltipText?: string;\n popoverContent?: ButtonWithPopoverProps[\"children\"];\n loading?: boolean;\n arrow?: SortOrderDirection;\n onClick?: () => void;\n selected?: boolean;\n alignRight?: boolean;\n sortOrderIconVariant?: SortOrderIconVariant;\n appendTooltipTo?: TooltipProps[\"appendTo\"];\n}\n\nexport const TableHeadItem: React.FC<TableHeadProps> = React.memo(\n ({\n label,\n arrow,\n onClick,\n children,\n selected,\n popoverContent,\n loading,\n infoIconTooltipText,\n overflow = \"hidden\",\n alignRight,\n sortOrderIconVariant,\n appendTooltipTo,\n ...boxProps\n }) => {\n const containerRef = useRef(null);\n\n const cursorStyle = onClick\n ? ({ cursor: \"pointer\", userSelect: \"none\" } as CSSProperties)\n : undefined;\n\n const hasOnlyChildren = !label && !arrow && !infoIconTooltipText;\n\n return (\n <Row\n height={\"100%\"}\n alignItems={\"center\"}\n ref={containerRef}\n overflow={overflow}\n justifyContent={alignRight ? \"flex-end\" : \"flex-start\"}\n borderTop={\"2px solid transparent\"}\n borderBottom={`2px solid ${\n selected ? cssColor(\"--lhds-color-blue-500\") : \"transparent\"\n }`}\n {...boxProps}\n >\n <Row alignItems={\"center\"} indent>\n {!arrow && alignRight && (\n <>\n <Space />\n <Box width={\"14px\"} />\n <Space num={0.5} />\n </>\n )}\n\n {(children || label) && (\n <Row onClick={onClick} style={cursorStyle} alignItems={\"center\"}>\n {children && (\n <>\n {children}\n {!hasOnlyChildren && <Space num={0.5} />}\n </>\n )}\n {arrow && alignRight && (\n <>\n <Space />\n <SortOrderIcon\n direction={arrow}\n iconVariant={sortOrderIconVariant}\n />\n <Space num={0.5} />\n </>\n )}\n {label && (\n <Heading variant={\"h6\"} style={{ textAlign: \"left\" }}>\n {label}\n </Heading>\n )}\n {arrow && !alignRight && (\n <>\n <Space num={0.5} />\n <SortOrderIcon\n direction={arrow}\n iconVariant={sortOrderIconVariant}\n />\n <Space />\n </>\n )}\n </Row>\n )}\n\n {infoIconTooltipText && (\n <>\n <Space />\n <Row onClick={(ev) => ev.stopPropagation()}>\n <Tooltip\n label={infoIconTooltipText}\n zIndex={\"var(--swui-sticky-popover-z-index)\" as any}\n appendTo={appendTooltipTo}\n >\n <Icon\n icon={stenaInfoCircle}\n size={14}\n color={cssColor(\"--lhds-color-blue-400\")}\n />\n </Tooltip>\n <Space />\n </Row>\n </>\n )}\n </Row>\n\n <Row>\n {loading ? (\n <InputSpinner />\n ) : popoverContent ? (\n <Popover\n content={popoverContent}\n trigger={\"click\"}\n zIndex={1000}\n disablePadding\n variant={\"outlined\"}\n arrow={false}\n >\n <FlatButton leftIcon={faEllipsisV} size={\"small\"} />\n </Popover>\n ) : null}\n </Row>\n\n {!arrow && !alignRight && (\n <>\n <Space />\n <Box width={\"14px\"} />\n <Space num={0.5} />\n </>\n )}\n </Row>\n );\n }\n);\n","import * as React from \"react\";\nimport { smallTableRowWidth } from \"../../../../config/TableConfig\";\nimport { TableHeadItem, TableHeadProps } from \"./TableHeadItem\";\n\ninterface Props extends TableHeadProps {}\n\nexport const SmallTableHead: React.FC<Props> = (props) => {\n return (\n <TableHeadItem\n width={smallTableRowWidth}\n justifyContent={\"center\"}\n {...props}\n />\n );\n};\n","import { Box, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { TableHeadItem } from \"./TableHeadItem\";\nimport { defaultTableHeadRowHeight } from \"../../../../config/TableConfig\";\n\ninterface Props {\n label?: string;\n flex?: number;\n width?: string;\n indent?: number;\n height?: string;\n}\n\nexport const TableColumnGroupHead: React.FC<Props> = ({\n label,\n flex,\n width,\n indent = 1,\n height = defaultTableHeadRowHeight,\n}) => {\n return (\n <TableHeadItem width={width} flex={flex} height={height}>\n <Box indent={indent} spacing>\n <Text variant={\"bold\"}>{label}</Text>\n </Box>\n </TableHeadItem>\n );\n};\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { defaultTableHeadRowHeight } from \"../../../../config/TableConfig\";\n\nexport interface TableHeadRowProps extends BoxProps {\n style?: React.CSSProperties;\n height?: string;\n}\n\nexport const TableHeadRow: React.FC<TableHeadRowProps> = React.memo(\n ({ style, height = defaultTableHeadRowHeight, ...boxProps }) => {\n return <Row style={style} height={height} {...boxProps} />;\n }\n);\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport {\n defaultTableHeadRowHeight,\n tableBorder,\n tableBorderHidden,\n} from \"../../../../config/TableConfig\";\nimport styles from \"./TableRow.module.css\";\nimport cx from \"classnames\";\n\ninterface Props extends BoxProps {\n hideBorderTop?: boolean;\n}\n\nexport const TableRow: React.FC<Props> = ({\n hideBorderTop,\n height = defaultTableHeadRowHeight,\n className,\n ...boxProps\n}) => {\n return (\n <Row\n borderTop={hideBorderTop ? tableBorderHidden : tableBorder}\n height={height}\n className={cx(styles.tableRow, className)}\n {...boxProps}\n />\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface RevertableValue<TValue> {\n value: TValue;\n setValue: (value: TValue) => void;\n setRevertValue: (revertValue: TValue) => void;\n revert: () => void;\n commit: () => void;\n getValue: () => TValue;\n}\n\nexport const useRevertableValue = <TValue>(\n initialValue: TValue\n): RevertableValue<TValue> => {\n const [value, setValueInternal] = useState<TValue>(initialValue);\n const revertValue = useRef<TValue>(initialValue);\n const valueRef = useRef<TValue>(initialValue);\n\n const setValue = useCallback(\n (value: TValue) => {\n setValueInternal(value);\n valueRef.current = value;\n },\n [setValueInternal, valueRef]\n );\n\n useEffect(() => {\n setValue(initialValue);\n }, [setValue, initialValue]);\n\n const revert = useCallback(() => {\n if (revertValue) {\n setValue(revertValue.current);\n }\n }, [setValue, revertValue]);\n\n const commit = useCallback(\n (commitValue?: TValue) => {\n revertValue.current = value;\n if (commitValue) {\n setValue(commitValue);\n }\n },\n [value, setValue]\n );\n\n const setRevertValue = useCallback(\n (value: TValue) => (revertValue.current = value),\n [revertValue]\n );\n\n const getValue = useCallback(() => valueRef.current, [valueRef]);\n\n return {\n value,\n setValue,\n setRevertValue,\n revert,\n commit,\n getValue,\n };\n};\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { RevertableValue, useRevertableValue } from \"./UseRevertableValue\";\n\nexport type AllowedInputType =\n | \"all\"\n | \"numeric\"\n | \"alphanumeric\"\n | \"letters\"\n | \"none\";\n\ntype OnStartEditingFunc = (keyEvent?: KeyDownEvent) => void;\ntype TransformEnteredValueFunc<TValue> = (value?: string) => TValue;\n\nexport interface UseEditableCellOptions<TValue> {\n /**\n * Specifies if cell is editable.\n */\n isEditable?: boolean;\n /**\n * Types of keyboard input that will start editing and pre-fill editor.\n */\n allowedInputType?: AllowedInputType;\n /**\n * Callback that is invoked when editing a cell is started.\n * @param keyEvent\n */\n onStartEditing?: OnStartEditingFunc;\n /**\n * Callback that is invoked when editing a cell stops.\n */\n onStopEditing?: () => void;\n /**\n * Callback that is invoked when editing a cell is finished with a value result.\n * @param value\n */\n onChange?: (value: TValue | undefined) => void;\n /**\n * Transform entered input to TValue.\n * @param value\n */\n transformEnteredValue?: TransformEnteredValueFunc<TValue>;\n}\n\nexport interface UseEditableCellResult<TValue> {\n onKeyDown: React.KeyboardEventHandler;\n isEditing: boolean;\n startEditing: OnStartEditingFunc;\n stopEditing: () => void;\n stopEditingAndRevert: () => void;\n lastKeyEvent: KeyDownEvent | undefined;\n revertableValue: RevertableValue<TValue>;\n onDoubleClick: () => void;\n}\n\nexport interface KeyDownEvent {\n altKey: boolean;\n charCode: number;\n ctrlKey: boolean;\n key: string;\n keyCode: number;\n locale: string;\n location: number;\n metaKey: boolean;\n repeat: boolean;\n shiftKey: boolean;\n which: number;\n}\n\nconst createKeyDownEvent = (event: React.KeyboardEvent): KeyDownEvent => ({\n altKey: event.altKey,\n charCode: event.charCode,\n ctrlKey: event.ctrlKey,\n key: event.key,\n keyCode: event.keyCode,\n locale: event.locale,\n location: event.location,\n metaKey: event.metaKey,\n repeat: event.repeat,\n shiftKey: event.shiftKey,\n which: event.which,\n});\n\n// tslint:disable-next-line:no-any\nconst defaultTransformEnteredValue = (value: any) => value;\n\nexport const useEditableCell = <TValue>(\n value: TValue,\n {\n isEditable = false,\n allowedInputType = \"all\",\n onChange,\n onStartEditing,\n onStopEditing,\n transformEnteredValue = defaultTransformEnteredValue,\n }: UseEditableCellOptions<TValue>\n): UseEditableCellResult<TValue> => {\n const [isEditing, setIsEditing] = useState(false);\n const [lastKeyEvent, setLastKeyEvent] = useState<KeyDownEvent | undefined>(\n undefined\n );\n const revertableValue = useRevertableValue<TValue>(value);\n const { getValue, revert, setValue, setRevertValue } = revertableValue;\n\n const startEditing = useCallback(\n (keyEvent?: KeyDownEvent) => {\n if (isEditable) {\n setValue(value);\n setRevertValue(value);\n setIsEditing(true);\n if (onStartEditing) {\n onStartEditing(keyEvent);\n }\n }\n },\n [isEditable, onStartEditing, setRevertValue, setValue, value]\n );\n\n const stopEditing = useCallback(() => {\n if (isEditable) {\n setIsEditing(false);\n if (onStopEditing) {\n onStopEditing();\n }\n if (onChange) {\n onChange(getValue());\n }\n }\n }, [isEditable, onChange, onStopEditing, getValue, setIsEditing]);\n\n const stopEditingAndRevert = useCallback(() => {\n if (isEditable) {\n setIsEditing(false);\n if (onStopEditing) {\n onStopEditing();\n }\n revert();\n }\n }, [isEditable, onStopEditing, revert, setIsEditing]);\n\n const onKeyDown = useMemo(\n () =>\n createKeyDownHandler(\n isEditing,\n isEditable,\n startEditing,\n setLastKeyEvent,\n allowedInputType,\n transformEnteredValue,\n revertableValue\n ),\n [\n isEditing,\n isEditable,\n startEditing,\n setLastKeyEvent,\n allowedInputType,\n transformEnteredValue,\n revertableValue,\n ]\n );\n\n return {\n onKeyDown,\n isEditing,\n lastKeyEvent,\n revertableValue,\n startEditing,\n stopEditing,\n stopEditingAndRevert,\n onDoubleClick: startEditing,\n };\n};\n\nconst allowsNumerics = (allowedInputType: AllowedInputType): boolean =>\n allowedInputType === \"all\" ||\n allowedInputType === \"numeric\" ||\n allowedInputType === \"alphanumeric\";\nconst allowsLetters = (allowedInputType: AllowedInputType): boolean =>\n allowedInputType === \"all\" ||\n allowedInputType === \"alphanumeric\" ||\n allowedInputType === \"letters\";\n\nconst isCharacter = (key: string): boolean => !!key.match(/^[-+*<>]$/);\nconst isLetter = (key: string): boolean => !!key.match(/^[a-zA-Z0-9]$/);\nconst isNumeric = (key: string): boolean => !isNaN(parseInt(key, 10));\n\nconst createKeyDownHandler =\n <TValue>(\n _: boolean, // isEditing\n isEditable: boolean,\n startEditing: OnStartEditingFunc,\n setLastKeyEvent: (lastKeyEvent: KeyDownEvent | undefined) => void,\n allowedInputType: AllowedInputType,\n transformEnteredValue: TransformEnteredValueFunc<TValue>,\n revertableValue: RevertableValue<TValue>\n ): React.KeyboardEventHandler =>\n (e) => {\n if (e.ctrlKey || e.metaKey || e.shiftKey) {\n return;\n }\n\n if (e.key === \"Enter\" && isEditable) {\n setLastKeyEvent(undefined);\n startEditing();\n revertableValue.commit();\n e.preventDefault();\n e.stopPropagation();\n } else if (isEditable) {\n // TODO Find nice way to allow full user control, while also providing simplicity.\n const lastKeyEvent = createKeyDownEvent(e);\n if (\n (isNumeric(e.key) && allowsNumerics(allowedInputType)) ||\n (isLetter(e.key) && allowsLetters(allowedInputType)) ||\n isCharacter(e.key)\n ) {\n startEditing(lastKeyEvent);\n setLastKeyEvent(lastKeyEvent);\n revertableValue.commit();\n revertableValue.setValue(transformEnteredValue(lastKeyEvent.key));\n e.preventDefault();\n e.stopPropagation();\n }\n }\n };\n","export const wrapBounds = (\n x: number,\n y: number,\n maxX: number,\n maxY: number\n): { realX: number; realY: number } => {\n let realX = x;\n let realY = y;\n if (y > maxY) {\n realY = 0;\n }\n if (y < 0) {\n realY = maxY;\n }\n if (x > maxX) {\n realX = 0;\n }\n if (x < 0) {\n realX = maxX;\n }\n return {\n realX,\n realY,\n };\n};\n\nexport const wrapBoundsNextLine = (\n x: number,\n y: number,\n maxX: number,\n maxY: number\n): { realX: number; realY: number } => {\n let realX = x;\n let realY = y;\n while (realX < 0) {\n realY--;\n realX += maxX + 1;\n }\n while (realX > maxX) {\n realY++;\n realX -= maxX + 1;\n }\n if (y > maxY) {\n realY = 0;\n }\n if (y < 0) {\n realY = maxY;\n }\n return {\n realX: limitRange(realX, 0, maxX),\n realY: limitRange(realY, 0, maxY),\n };\n};\n\nexport const limitRange = (val: number, min: number, max: number): number => {\n return Math.max(Math.min(val, max), min);\n};\n","import { limitRange, wrapBounds } from \"./bounds/NumberBoundsWrapper\";\nimport { CellIndices } from \"./DirectionCalculator\";\n\nexport const clampPos = (\n pos: CellIndices,\n numRows: number,\n numCols: number\n): CellIndices => {\n return {\n rowIndex: limitRange(pos.rowIndex, 0, numRows),\n colIndex: limitRange(pos.colIndex, 0, numCols),\n };\n};\n\nexport const wrapPos = (\n pos: CellIndices,\n numRows: number,\n numCols: number\n): CellIndices => {\n const wrapped = wrapBounds(pos.colIndex, pos.rowIndex, numCols, numRows);\n return {\n rowIndex: wrapped.realY,\n colIndex: wrapped.realX,\n };\n};\n","import { clampPos, wrapPos } from \"./NumberBoundsWrapper\";\n\nexport type MoveDirection = \"right\" | \"left\" | \"down\" | \"up\";\n\nexport interface CellIndices {\n rowIndex: number;\n colIndex: number;\n}\n\nexport type TableEdgeMoveMode = \"clamped\" | \"wrapped\" | \"unlimited\";\n\nexport const getNextPositionWrappedOrClamped = (\n rowIndex: number,\n colIndex: number,\n numRows: number,\n numCols: number,\n direction: MoveDirection,\n edgeMode: TableEdgeMoveMode = \"clamped\"\n): CellIndices => {\n const posNotWrapped = getNextPosition(rowIndex, colIndex, direction);\n if (edgeMode === \"clamped\") {\n return clampPos(posNotWrapped, numRows - 1, numCols - 1);\n }\n if (edgeMode === \"wrapped\") {\n return wrapPos(posNotWrapped, numRows - 1, numCols - 1);\n }\n return posNotWrapped;\n};\n\nexport const getNextPosition = (\n rowIndex: number,\n colIndex: number,\n direction: MoveDirection\n): CellIndices => {\n if (direction === \"up\") {\n return {\n rowIndex: rowIndex - 1,\n colIndex,\n };\n }\n if (direction === \"down\") {\n return {\n rowIndex: rowIndex + 1,\n colIndex,\n };\n }\n if (direction === \"left\") {\n return {\n rowIndex,\n colIndex: colIndex - 1,\n };\n }\n if (direction === \"right\") {\n return {\n rowIndex,\n colIndex: colIndex + 1,\n };\n }\n return {\n rowIndex,\n colIndex,\n };\n};\n","export const ensureDomIdIsCorrect = (id: string): string => {\n return id.replace(/^[^a-z]+|[^\\w:.-]+/gi, \"\");\n};\n","import { UseGridCellOptions } from \"../features/grid-cell/hooks/UseGridCell\";\nimport { ValidatedUseGridNavigationOptions } from \"../features/grid-cell/hooks/UseGridNavigation\";\n\nexport const validateGridHookOptions = <TValue>(\n options: UseGridCellOptions<TValue>\n): ValidatedUseGridNavigationOptions => {\n if (!options.tableId) {\n throw new Error(\"tableId is required.\");\n }\n if (options.numRows == null) {\n throw new Error(\"numRows is required.\");\n }\n if (options.numCols == null) {\n throw new Error(\"numCols is required.\");\n }\n\n return options as ValidatedUseGridNavigationOptions;\n};\n","import { useContext, useMemo } from \"react\";\nimport { GridHooksContext } from \"../../../components/GridHooksTable\";\nimport { validateGridHookOptions } from \"../../../util/GridHookOptionsValidator\";\nimport {\n UseGridNavigationOptions,\n ValidatedUseGridNavigationOptions,\n} from \"./UseGridNavigation\";\n\nexport const useGridNavigationOptionsFromContext = (\n options: UseGridNavigationOptions\n): ValidatedUseGridNavigationOptions => {\n const context = useContext(GridHooksContext);\n\n return useMemo(\n () =>\n validateGridHookOptions({\n ...context,\n ...options,\n }),\n [context, options]\n );\n};\n","import { KeyboardEvent, useMemo } from \"react\";\nimport {\n CellIndices,\n getNextPositionWrappedOrClamped,\n MoveDirection,\n TableEdgeMoveMode,\n} from \"../../../util/DirectionCalculator\";\nimport { ensureDomIdIsCorrect } from \"../../../util/DomIdValidator\";\nimport { useGridNavigationOptionsFromContext } from \"./UseGridNavigationOptionsFromContext\";\n\nexport interface UseGridNavigationOptions {\n /**\n * The row index for current cell.\n */\n rowIndex: number;\n /**\n * The column index for current cell.\n */\n colIndex: number;\n /**\n * Total number of rows in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numRows?: number;\n /**\n * Total number of columns in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numCols?: number;\n /**\n * An ID for the table, must be unique for every table in page. Must be set in cell hook or in GridHooksTable prop.\n */\n tableId?: string;\n /**\n * Edge mode. Defines how to behave when user tries to navigate outside of the table.\n * Can be 'wrapped', 'clamped' or 'unlimited'.\n * wrapped = focuses on other side of table.\n * clamped = focus stays on same cell\n * unlimited = focus is not controlled, it will try to focus on next item.\n */\n edgeMode?: TableEdgeMoveMode;\n /**\n * Callback that is invoked when user navigates to new cell by keyboard.\n */\n onCellMove?: CellMoveHandler;\n /**\n * Callback that is invoked when user navigates but don't move to new cell by keyboard.\n */\n onCellNavigation?: CellNavigationHandler;\n}\n\nexport interface ValidatedUseGridNavigationOptions {\n rowIndex: number;\n colIndex: number;\n numRows: number;\n numCols: number;\n tableId: string;\n edgeMode?: TableEdgeMoveMode;\n onCellMove?: CellMoveHandler;\n onCellNavigation?: CellNavigationHandler;\n}\n\nexport interface UseGridNavigationResult {\n requiredProps: GridNavigationRequiredProps;\n moveHandler: MoveHandler;\n focusOnCell: FocusOnCellFunc;\n}\n\n/**\n * Props that must be passed to element with focus.\n */\nexport interface GridNavigationRequiredProps {\n tabIndex: number;\n onKeyDown: (e: KeyboardEvent) => boolean;\n id: string;\n}\n\nexport type CellMoveHandler = (event: OnCellMoveEvent) => void;\nexport type CellNavigationHandler = (event: OnCellNavigationEvent) => void;\n\nexport interface OnCellMoveEvent {\n direction: MoveDirection;\n fromRowIndex: number;\n fromColIndex: number;\n rowDidChange: boolean;\n colDidChange: boolean;\n rowIndex: number;\n colIndex: number;\n}\n\nexport interface OnCellNavigationEvent extends OnCellMoveEvent {\n cellDidChange: boolean;\n}\n\nexport const useGridNavigation = (\n options: UseGridNavigationOptions\n): UseGridNavigationResult => {\n const {\n rowIndex,\n colIndex,\n numRows,\n numCols,\n tableId,\n edgeMode,\n onCellMove,\n onCellNavigation,\n } = useGridNavigationOptionsFromContext(options);\n\n const moveHandler = useMemo(\n () =>\n createMoveHandler(\n tableId,\n rowIndex,\n colIndex,\n numRows,\n numCols,\n edgeMode,\n onCellMove,\n onCellNavigation\n ),\n [\n tableId,\n rowIndex,\n colIndex,\n numRows,\n numCols,\n edgeMode,\n onCellMove,\n onCellNavigation,\n ]\n );\n\n const onKeyDown = useMemo(\n () => createKeyDownHandler(moveHandler),\n [moveHandler]\n );\n\n const id = useMemo(\n () => createCellId(tableId, rowIndex, colIndex),\n [tableId, rowIndex, colIndex]\n );\n\n const requiredProps = useMemo(\n () => ({\n tabIndex: 0,\n onKeyDown,\n id,\n }),\n [onKeyDown, id]\n );\n\n return {\n focusOnCell,\n moveHandler,\n requiredProps,\n };\n};\n\ntype MoveHandler = (direction: MoveDirection) => void;\n\nconst createMoveHandler =\n (\n tableId: string,\n rowIndex: number,\n colIndex: number,\n numRows: number,\n numCols: number,\n edgeMode?: TableEdgeMoveMode,\n onCellMove?: CellMoveHandler,\n onCellNavigation?: CellNavigationHandler\n ): MoveHandler =>\n (direction) => {\n const pos = getNextPositionWrappedOrClamped(\n rowIndex,\n colIndex,\n numRows,\n numCols,\n direction,\n edgeMode\n );\n\n const colDidChange = colIndex !== pos.colIndex;\n const rowDidChange = rowIndex !== pos.rowIndex;\n\n if (colDidChange || rowDidChange) {\n if (onCellMove) {\n onCellMove({\n direction,\n fromRowIndex: rowIndex,\n fromColIndex: colIndex,\n rowIndex: pos.rowIndex,\n colIndex: pos.colIndex,\n colDidChange,\n rowDidChange,\n });\n }\n focusOnCell(tableId, pos);\n }\n\n if (onCellNavigation) {\n onCellNavigation({\n direction,\n fromRowIndex: rowIndex,\n fromColIndex: colIndex,\n rowIndex: pos.rowIndex,\n colIndex: pos.colIndex,\n colDidChange,\n rowDidChange,\n cellDidChange: colDidChange || rowDidChange,\n });\n }\n };\n\nconst createCellId = (\n tableId: string,\n rowIndex: number,\n colIndex: number\n): string => ensureDomIdIsCorrect(`table-${tableId}-${rowIndex}-${colIndex}`);\n\nconst createKeyDownHandler =\n (moveHandler: MoveHandler) =>\n (e: KeyboardEvent): boolean => {\n if (e.key === \"ArrowLeft\") {\n moveHandler(\"left\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else if (e.key === \"ArrowUp\") {\n moveHandler(\"up\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else if (e.key === \"ArrowRight\") {\n moveHandler(\"right\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else if (e.key === \"ArrowDown\") {\n moveHandler(\"down\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else {\n return false;\n }\n };\n\ntype FocusOnCellFunc = (tableId: string, pos: CellIndices) => void;\n\nexport const focusOnCell: FocusOnCellFunc = (tableId, pos) => {\n const el = document.getElementById(\n createCellId(tableId, pos.rowIndex, pos.colIndex)\n );\n if (el) {\n el.focus();\n }\n};\n","import { KeyboardEventHandler, useCallback, useMemo } from \"react\";\nimport { MoveDirection } from \"../../../util/DirectionCalculator\";\nimport {\n KeyDownEvent,\n useEditableCell,\n UseEditableCellOptions,\n} from \"./UseEditableCell\";\nimport {\n GridNavigationRequiredProps,\n useGridNavigation,\n UseGridNavigationOptions,\n} from \"./UseGridNavigation\";\nimport { useGridNavigationOptionsFromContext } from \"./UseGridNavigationOptionsFromContext\";\n\nexport type UseGridCellOptions<TValue> = UseGridNavigationOptions &\n UseEditableCellOptions<TValue>;\n\nexport interface UseGridCellResult<TValue> {\n /**\n * The current value in the editor. Pass this as value to form field components.\n */\n editorValue: TValue;\n /**\n * The setter for current value in the editor. Pass this as onChange to form field components.\n * @param editorValue\n */\n setEditorValue: (editorValue: TValue) => void;\n /**\n * Reverts the value of form field to the value before user started editing. This is invoked by stopEditingAndRevert.\n */\n revertEditorValue: () => void;\n /**\n * Props that must be passed to the cell DOM element which can be focused.\n */\n requiredProps: GridCellRequiredProps;\n /**\n * Moves focus to a new cell in the specified direction.\n * @param direction\n */\n move: (direction: MoveDirection) => void;\n /**\n * Opens the editor. invokes onStartEdit if provided.\n */\n startEditing: () => void;\n /**\n * Closes the editor and invokes onChange with the editor value entered by user.\n */\n stopEditing: () => void;\n /**\n * Closes the editor and reverts editor value to the previous value. Does not invoke onChange.\n */\n stopEditingAndRevert: () => void;\n /**\n * Closes the editor and moves focus to a new cell in the specified direction. Invokes onChange with editor value.\n * @param direction\n */\n stopEditingAndMove: (direction: MoveDirection) => void;\n /**\n * True if cell is currently in editing mode.\n */\n isEditing: boolean;\n /**\n * Contains last key event if editor was started by any key other than Enter.\n */\n lastKeyEvent: KeyDownEvent | undefined;\n}\n\nexport interface GridCellRequiredProps\n extends Pick<GridNavigationRequiredProps, \"tabIndex\" | \"id\"> {\n onKeyDown: KeyboardEventHandler;\n onDoubleClick: () => void;\n}\n\n// tslint:disable:no-any\n/**\n * Hook for cell in a grid. Combines navigation and editable cell.\n * @param value The value of the current cell.\n * @param options Options for hook.\n */\nexport const useGridCell = <TValue>(\n value: TValue,\n options: UseGridCellOptions<TValue>\n): UseGridCellResult<TValue> => {\n const { tableId } = useGridNavigationOptionsFromContext(options);\n const nav = useGridNavigation(options);\n const edit = useEditableCell(value, options);\n\n const cellCoordinates = useMemo(\n () => ({\n rowIndex: options.rowIndex,\n colIndex: options.colIndex,\n }),\n [options.rowIndex, options.colIndex]\n );\n\n const startEditing = useCallback(() => {\n edit.startEditing();\n nav.focusOnCell(tableId, cellCoordinates);\n }, [edit, nav, tableId, cellCoordinates]);\n\n const stopEditing = useCallback(() => {\n edit.stopEditing();\n nav.focusOnCell(tableId, cellCoordinates);\n }, [edit, nav, tableId, cellCoordinates]);\n\n const stopEditingAndRevert = useCallback(() => {\n edit.stopEditingAndRevert();\n nav.focusOnCell(tableId, cellCoordinates);\n }, [edit, nav, tableId, cellCoordinates]);\n\n const stopEditingAndMove = useCallback(\n (direction: MoveDirection) => {\n edit.stopEditing();\n nav.moveHandler(direction);\n },\n [edit, nav]\n );\n\n const move = useCallback(\n (direction: MoveDirection) => {\n nav.moveHandler(direction);\n },\n [nav]\n );\n\n const onKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n if (!edit.isEditing) {\n const consumed = nav.requiredProps.onKeyDown(e);\n if (!consumed) {\n edit.onKeyDown(e);\n }\n }\n },\n [edit, nav.requiredProps]\n );\n\n const requiredProps = useMemo(\n () => ({\n ...nav.requiredProps,\n onKeyDown,\n onDoubleClick: edit.onDoubleClick,\n }),\n [onKeyDown, edit.onDoubleClick, nav.requiredProps]\n );\n\n return {\n isEditing: edit.isEditing,\n lastKeyEvent: edit.lastKeyEvent,\n editorValue: edit.revertableValue.value,\n setEditorValue: edit.revertableValue.setValue,\n revertEditorValue: edit.revertableValue.revert,\n requiredProps,\n move,\n startEditing,\n stopEditing,\n stopEditingAndRevert,\n stopEditingAndMove,\n };\n};\n","import { faArrowRight } from \"@fortawesome/free-solid-svg-icons/faArrowRight\";\nimport { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons/faExclamationTriangle\";\nimport { Indent, Row, Space, Text } from \"@stenajs-webui/core\";\nimport { Icon } from \"@stenajs-webui/elements\";\nimport { TextInput } from \"@stenajs-webui/forms\";\nimport {\n EntityCrudStatusRedux,\n ModifiedFieldRedux,\n} from \"@stenajs-webui/redux\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { KeyboardEventHandler, useCallback } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n tableBorder,\n defaultTableRowHeight,\n} from \"../../../../config/TableConfig\";\nimport {\n useGridCell,\n UseGridCellOptions,\n} from \"../../../grid-cell/hooks/UseGridCell\";\nimport {\n CrudStatusIndicator,\n hasIndicatorContent,\n} from \"../CrudStatusIndicator\";\n\ninterface Props<TStoreState> {\n value?: string;\n entityId: string;\n isEditable?: boolean;\n rowIndent?: boolean;\n allowedInputType: UseGridCellOptions<string>[\"allowedInputType\"];\n modifiedFieldsRedux: ModifiedFieldRedux<TStoreState>;\n crudStatusRedux: EntityCrudStatusRedux<TStoreState>;\n rowIndex: number;\n colIndex: number;\n numRows: number;\n numCols: number;\n warningOnEmpty?: string;\n}\n\nexport const EditableTextCellWithCrudAndModified =\n function EditableTextCellWithCrudAndModified<TStoreState>({\n allowedInputType,\n value = \"\",\n entityId,\n isEditable,\n rowIndent,\n crudStatusRedux,\n modifiedFieldsRedux,\n colIndex,\n rowIndex,\n numCols,\n numRows,\n warningOnEmpty,\n }: Props<TStoreState>) {\n const enableGridCell = true;\n\n const dispatch = useDispatch();\n\n const modifiedFieldsState = useSelector(\n modifiedFieldsRedux.selectors.getState\n );\n const crudStatusState = useSelector(crudStatusRedux.selectors.getState);\n\n const modifiedField = modifiedFieldsState.entities[entityId];\n const crudStatus = crudStatusState.entities[entityId];\n\n const onChangeHandler = useCallback(\n (newValue: string | undefined = \"\") => {\n if (newValue === value) {\n dispatch(modifiedFieldsRedux.actions.clearEntity(entityId));\n } else {\n dispatch(\n modifiedFieldsRedux.actions.setEntity({\n id: entityId,\n originalValue: value,\n newValue,\n modified: true,\n })\n );\n }\n },\n [dispatch, entityId, modifiedFieldsRedux.actions, value]\n );\n\n const {\n isEditing,\n stopEditing,\n editorValue,\n setEditorValue,\n stopEditingAndRevert,\n stopEditingAndMove,\n lastKeyEvent,\n requiredProps: { onKeyDown, ...requiredProps },\n } = useGridCell(value, {\n rowIndex,\n colIndex,\n numCols,\n numRows,\n tableId: \"serviceManningMatrixTable\",\n onChange: onChangeHandler,\n isEditable,\n allowedInputType,\n });\n\n const onKeyDownHandler = useCallback<KeyboardEventHandler>(\n (ev) => {\n if (ev.key === \"Delete\") {\n dispatch(modifiedFieldsRedux.actions.clearEntity(entityId));\n dispatch(\n crudStatusRedux.actions.setEntityFields(entityId, {\n hasError: false,\n errorMessage: undefined,\n })\n );\n } else {\n onKeyDown(ev);\n }\n },\n [\n onKeyDown,\n entityId,\n dispatch,\n modifiedFieldsRedux.actions,\n crudStatusRedux.actions,\n ]\n );\n\n return (\n <Row\n height={defaultTableRowHeight}\n width={\"100%\"}\n borderBottom={tableBorder}\n hoverBackground={\"var(--ui7)\"}\n alignItems={\"center\"}\n >\n {rowIndent && <Indent num={rowIndent} />}\n <Row\n width={\"100%\"}\n height={\"100%\"}\n justifyContent={\"flex-end\"}\n alignItems={\"center\"}\n border={\"1px solid transparent\"}\n borderRadius={enableGridCell ? \"4px\" : undefined}\n focusBorder={\n enableGridCell && !isEditing\n ? \"1px solid var(--primary-action-color)\"\n : undefined\n }\n hoverBorder={\n enableGridCell && !isEditing ? \"var(--ui5) solid 1px;\" : undefined\n }\n onKeyDown={onKeyDownHandler}\n {...(enableGridCell ? requiredProps : undefined)}\n >\n <Indent row alignItems={\"center\"}>\n {isEditing ? (\n <TextInput\n onValueChange={setEditorValue}\n value={editorValue}\n onDone={stopEditing}\n onEsc={stopEditingAndRevert}\n autoFocus\n selectAllOnMount={!lastKeyEvent}\n onMove={stopEditingAndMove}\n />\n ) : (\n <>\n <Text\n color={isEditable ? \"var(--primary-action-color)\" : undefined}\n variant={modifiedField?.modified ? \"bold\" : undefined}\n >\n {value}\n </Text>\n {modifiedField?.newValue !== undefined && (\n <>\n <Indent>\n <Icon icon={faArrowRight} size={12} />\n </Indent>\n <Text\n color={\"var(--primary-action-color)\"}\n variant={\"bold\"}\n >\n {modifiedField.newValue}\n </Text>\n </>\n )}\n {crudStatus && hasIndicatorContent(crudStatus) && (\n <Space num={2} />\n )}\n {warningOnEmpty &&\n modifiedField?.modified &&\n modifiedField?.newValue === \"\" ? (\n <Tooltip label={warningOnEmpty} zIndex={100}>\n <Icon\n icon={faExclamationTriangle}\n color={\"var(--ui-alert1)\"}\n size={14}\n />\n </Tooltip>\n ) : (\n <CrudStatusIndicator crudStatus={crudStatus} />\n )}\n </>\n )}\n </Indent>\n </Row>\n {rowIndent && <Indent num={rowIndent} />}\n </Row>\n );\n };\n","import { createContext, Dispatch } from \"react\";\nimport { StandardTableConfig } from \"../config/StandardTableConfig\";\nimport { StandardTableState } from \"../redux/StandardTableReducer\";\nimport {\n StandardTableAction,\n StandardTableActions,\n} from \"../util/ActionsFactory\";\n\nexport interface StandardTableInternalActionsContext<\n TColumnKey extends string\n> {\n dispatch: Dispatch<StandardTableAction<TColumnKey>>;\n actions: StandardTableActions<TColumnKey>;\n}\n\n/**\n * A combination of dispatch, state and actions. This is used to\n * connect the table to a state.\n */\nexport interface TableContext<TColumnKey extends string> {\n dispatch: Dispatch<StandardTableAction<TColumnKey>>;\n state: StandardTableState<TColumnKey>;\n actions: StandardTableActions<TColumnKey>;\n}\n\nexport const StandardTableTableIdContext = createContext<string>(\"\");\n\nexport const StandardTableStateContext = createContext<StandardTableState<any>>(\n undefined as any\n);\n\nexport const StandardTableActionsContext = createContext<\n StandardTableInternalActionsContext<any>\n>(undefined as any);\n\nexport const StandardTableConfigContext = createContext<\n StandardTableConfig<any, any, any>\n>(undefined as any);\n","import {\n createEntityActions,\n createSelectedIdsActions,\n createSortOrderActions,\n EntityActions,\n EntitySelectors,\n SelectedIdsActions,\n SelectedIdsSelectors,\n SortOrderActions,\n SortOrderSelectors,\n} from \"@stenajs-webui/redux\";\nimport { StandardTableStateFields } from \"./StandardTableReducer\";\n\nexport interface InternalStandardTableActions<TColumnKey extends string> {\n sortOrder: SortOrderActions<TColumnKey>;\n selectedIds: SelectedIdsActions;\n expandedRows: SelectedIdsActions;\n fields: EntityActions<StandardTableStateFields>;\n}\n\nexport interface StandardTableSelectors<\n TStoreState,\n TColumnKey extends string\n> {\n sortOrder: SortOrderSelectors<TStoreState, TColumnKey>;\n selectedIds: SelectedIdsSelectors<TStoreState>;\n expandedRows: SelectedIdsSelectors<TStoreState>;\n fields: EntitySelectors<TStoreState, StandardTableStateFields>;\n}\n\nexport interface StandardTableActionsAndSelectors<\n TStoreState,\n TColumnKey extends string\n> {\n actions: InternalStandardTableActions<TColumnKey>;\n selectors: StandardTableSelectors<TStoreState, TColumnKey>;\n}\n\nexport const createInternalStandardTableActions = <\n TColumnKey extends string\n>(): InternalStandardTableActions<TColumnKey> => ({\n sortOrder: createSortOrderActions<TColumnKey>(),\n selectedIds: createSelectedIdsActions(),\n expandedRows: createSelectedIdsActions(),\n fields: createEntityActions<StandardTableStateFields>(),\n});\n","type ReducerIdSuffix = \"selectedIds\" | \"expandedRows\" | \"sortOrder\" | \"fields\";\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: ReducerIdSuffix\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createEntityReducer,\n createSelectedIdsReducer,\n createSelectedIdsReducerInitialState,\n createSortOrderReducer,\n createSortOrderReducerInitialState,\n EntityState,\n reducerIdGate,\n SelectedIdsState,\n SortOrderState,\n} from \"@stenajs-webui/redux\";\nimport { getReducerIdFor } from \"./ReducerIdFactory\";\nimport { combineReducers, Reducer } from \"redux\";\nimport { StandardTableAction } from \"../util/ActionsFactory\";\n\nexport interface StandardTableState<TColumnKey extends string> {\n sortOrder: SortOrderState<TColumnKey>;\n selectedIds: SelectedIdsState;\n expandedRows: SelectedIdsState;\n fields: EntityState<StandardTableStateFields>;\n}\n\nexport interface StandardTableStateFields {\n lastSelectedId?: string;\n}\n\nexport const createStandardTableInitialState = <TColumnKey extends string>(\n sortBy: TColumnKey | undefined = undefined,\n desc: boolean = false,\n selectedIds: string[] = [],\n expandedRows: string[] = []\n): StandardTableState<TColumnKey> => ({\n sortOrder: createSortOrderReducerInitialState(sortBy, desc),\n selectedIds: createSelectedIdsReducerInitialState(selectedIds),\n expandedRows: createSelectedIdsReducerInitialState(expandedRows),\n fields: { lastSelectedId: undefined },\n});\n\nexport type StandardTableReducer<TColumnKey extends string> = Reducer<\n StandardTableState<TColumnKey>,\n StandardTableAction<TColumnKey>\n>;\n\nexport const createStandardTableReducer = <TColumnKey extends string>(\n reducerId: string,\n initialState?: Partial<StandardTableState<TColumnKey>>\n): StandardTableReducer<TColumnKey> => {\n const sortOrder = reducerIdGate(\n getReducerIdFor(reducerId, \"sortOrder\"),\n createSortOrderReducer<TColumnKey>(initialState?.sortOrder)\n );\n const selectedIds = reducerIdGate(\n getReducerIdFor(reducerId, \"selectedIds\"),\n createSelectedIdsReducer(initialState?.selectedIds)\n );\n const expandedRows = reducerIdGate(\n getReducerIdFor(reducerId, \"expandedRows\"),\n createSelectedIdsReducer(initialState?.expandedRows)\n );\n const fields = reducerIdGate(\n getReducerIdFor(reducerId, \"fields\"),\n createEntityReducer<StandardTableStateFields>(initialState?.fields ?? {})\n );\n\n return combineReducers({\n sortOrder,\n selectedIds,\n expandedRows,\n fields,\n });\n};\n","import { useContext } from \"react\";\nimport { StandardTableConfig } from \"../config/StandardTableConfig\";\nimport {\n StandardTableActionsContext,\n StandardTableConfigContext,\n StandardTableInternalActionsContext,\n StandardTableStateContext,\n StandardTableTableIdContext,\n} from \"../context/StandardTableStateContext\";\nimport { StandardTableState } from \"../redux/StandardTableReducer\";\n\nexport const useStandardTableId = (): string =>\n useContext(StandardTableTableIdContext);\n\nexport const useStandardTableConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(): StandardTableConfig<TItem, TColumnKey, TColumnGroupKey> =>\n useContext(StandardTableConfigContext);\n\nexport const useStandardTableState = <\n TColumnKey extends string\n>(): StandardTableState<TColumnKey> => useContext(StandardTableStateContext);\n\nexport const useStandardTableActions = <\n TColumnKey extends string\n>(): StandardTableInternalActionsContext<TColumnKey> =>\n useContext(StandardTableActionsContext);\n","import { createContext, useContext, useMemo } from \"react\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { GroupConfigAndId } from \"../features/column-groups/ColumnGroupFactory\";\n\nexport const GroupConfigsAndIdsForRowsContext = createContext<\n Array<GroupConfigAndId<any>>\n>([]);\n\nexport const useGroupConfigsAndIdsForRows = <\n TColumnKey extends string\n>(): Array<GroupConfigAndId<TColumnKey>> =>\n useContext<Array<GroupConfigAndId<TColumnKey>>>(\n GroupConfigsAndIdsForRowsContext\n );\n\nexport const useTotalNumColumnsForRows = () => {\n const config = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n let offset = 0;\n if (config.enableExpandCollapse) {\n offset++;\n }\n if (config.showRowCheckbox) {\n offset++;\n }\n return (\n offset +\n useMemo(\n () =>\n groupConfigsAndIds\n .map((c) => c.groupConfig.columnOrder.length)\n .reduce((sum, item) => sum + item, 0),\n [groupConfigsAndIds]\n )\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { StandardTableOnKeyDown } from \"../types/StandardTableEvents\";\n\nexport const OnKeyDownContext = createContext<\n StandardTableOnKeyDown<any, any> | undefined\n>(undefined);\n\nexport const useOnKeyDownContext = <TItem, TColumnKey extends string>() =>\n useContext(OnKeyDownContext) as\n | StandardTableOnKeyDown<TItem, TColumnKey>\n | undefined;\n","import { createContext, useContext } from \"react\";\nimport { StandardTableOnSortOrderChange } from \"../types/StandardTableEvents\";\n\nexport const OnSortOrderChangeContext = createContext<\n StandardTableOnSortOrderChange<any> | undefined\n>(undefined);\n\nexport const useOnSortOrderChangeContext = <TColumnKey extends string>() =>\n useContext(OnSortOrderChangeContext) as\n | StandardTableOnSortOrderChange<TColumnKey>\n | undefined;\n","import { createContext, useContext } from \"react\";\n\nexport const StandardTableColumnGroupOrderContext = createContext<\n Array<string> | undefined\n>(undefined);\n\nexport const StandardTableUsingColumnGroupsContext =\n createContext<boolean>(false);\n\nexport const useColumnGroupOrderContext = <TColumnGroupKey extends string>() =>\n useContext(StandardTableColumnGroupOrderContext) as Array<TColumnGroupKey>;\n","import { createContext, useContext } from \"react\";\nimport { StandardTableVariant } from \"../components/StandardTable\";\n\nexport const StandardTableVariantContext =\n createContext<StandardTableVariant>(\"standard\");\n\nexport const useStandardTableVariant = () =>\n useContext(StandardTableVariantContext);\n","import { createContext, useContext } from \"react\";\nimport { StickyPropsPerColumn } from \"../features/sticky-columns/types\";\n\nexport const StickyPropsPerColumnContext = createContext<\n StickyPropsPerColumn<string>\n>({});\n\nexport const useStickyPropsPerColumnContext = () =>\n useContext(StickyPropsPerColumnContext);\n","import { createContext, useContext } from \"react\";\n\nexport const TotalNumColumnsContext = createContext<number>(0);\n\nexport const useTotalNumColumns = () => useContext(TotalNumColumnsContext);\n","import { compact } from \"lodash\";\nimport { StandardTableColumnGroupConfig } from \"../../config/StandardTableColumnGroupConfig\";\nimport {\n StandardTableConfigWithGroups,\n StandardTableConfigWithNoGroups,\n} from \"../../config/StandardTableConfig\";\n\nexport interface GroupConfigAndId<TColumnKey extends string> {\n groupId: string;\n groupConfig: StandardTableColumnGroupConfig<TColumnKey>;\n}\n\nexport const createGroupConfigAndIdsForRows = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n columnGroups:\n | StandardTableConfigWithGroups<\n TItem,\n TColumnKey,\n TColumnGroupKey\n >[\"columnGroups\"]\n | undefined,\n columnGroupOrder:\n | StandardTableConfigWithGroups<\n TItem,\n TColumnKey,\n TColumnGroupKey\n >[\"columnGroupOrder\"]\n | undefined,\n columnOrder:\n | StandardTableConfigWithNoGroups<TItem, TColumnKey>[\"columnOrder\"]\n | undefined\n): Array<GroupConfigAndId<TColumnKey>> => {\n if (columnGroups) {\n return compact(\n columnGroupOrder?.map((groupId) => {\n const groupConfig = columnGroups?.[groupId];\n return {\n groupId,\n groupConfig,\n };\n }) ?? []\n )\n .filter((item) => (item.groupConfig?.columnOrder.length ?? 0) > 0)\n .map<GroupConfigAndId<TColumnKey>>(\n (p) => p as GroupConfigAndId<TColumnKey>\n );\n }\n return [\n {\n groupId: \"virtual\",\n groupConfig: {\n label: \"\",\n columnOrder: columnOrder ?? [],\n },\n },\n ];\n};\n","import { tableBorder } from \"../../../config/TableConfig\";\n\nexport const getCellBorder = (\n borderFromGroup: string | boolean | undefined,\n disableBorderLeft: boolean | undefined,\n borderLeft: string | boolean | undefined\n): string | undefined => {\n if (borderFromGroup) {\n if (borderFromGroup === true) {\n return tableBorder;\n }\n return borderFromGroup;\n }\n if (disableBorderLeft) {\n return undefined;\n }\n\n if (!borderLeft) {\n return undefined;\n }\n if (borderLeft === true) {\n return tableBorder;\n }\n return borderLeft;\n};\n\nexport const getCellBorderFromGroup = (\n groupIndex: number,\n columnIndexInGroup: number,\n groupBorderLeft: string | boolean | undefined\n): string | undefined => {\n if (groupIndex === 0 || columnIndexInGroup !== 0) {\n return undefined;\n }\n if (groupBorderLeft) {\n if (groupBorderLeft === true) {\n return tableBorder;\n }\n return groupBorderLeft;\n }\n return undefined;\n};\n","import { StandardTableColumnConfig } from \"../config/StandardTableColumnConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableConfig } from \"./UseStandardTableConfig\";\n\nexport const useColumnConfigById = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n columnId: string\n): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> => {\n const { columns } = useStandardTableConfig();\n const column = columns[columnId];\n if (!column) {\n throw new Error(\"No config for column with id=\" + columnId);\n }\n return column;\n};\n\nexport const useFirstColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> | undefined => {\n const config = useStandardTableConfig();\n const columnId =\n useGroupConfigsAndIdsForRows()?.[0]?.groupConfig.columnOrder?.[0];\n return columnId ? config.columns[columnId] : undefined;\n};\n\nexport const useLastColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> | undefined => {\n const config = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n const groupConfigAndId = groupConfigsAndIds[groupConfigsAndIds.length - 1];\n const columnId =\n groupConfigAndId?.groupConfig.columnOrder[\n groupConfigAndId.groupConfig.columnOrder.length - 1\n ] ?? undefined;\n return columnId ? config.columns[columnId] : undefined;\n};\n","import { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons/faExclamationTriangle\";\nimport { Heading, Indent, Row, Space } from \"@stenajs-webui/core\";\nimport { Icon, InputSpinner } from \"@stenajs-webui/elements\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport { StandardTableColumnGroupConfig } from \"../../config/StandardTableColumnGroupConfig\";\nimport { useColumnConfigById } from \"../../hooks/UseColumnConfigById\";\nimport { useStandardTableConfig } from \"../../hooks/UseStandardTableConfig\";\n\ninterface ColumnGroupColumnItemProps<TColumnKey extends string> {\n groupConfig: StandardTableColumnGroupConfig<TColumnKey>;\n columnId: TColumnKey;\n isFirstGroup: boolean;\n isLastGroup: boolean;\n borderFromGroup?: string;\n colSpan: number;\n}\n\nexport const ColumnInGroup = function ColumnGroupColumnItem<\n TColumnKey extends string\n>({\n columnId,\n groupConfig,\n borderFromGroup,\n colSpan,\n isFirstGroup,\n isLastGroup,\n}: ColumnGroupColumnItemProps<TColumnKey>) {\n const { label, render, contentLeft, contentRight, loading, error } =\n groupConfig;\n const { width, minWidth, zIndex, borderLeft } = useColumnConfigById(columnId);\n const config = useStandardTableConfig();\n const { stickyHeader, headerRowOffsetTop } = config;\n\n const stickyColumnGroups =\n \"columnGroupOrder\" in config ? config.stickyColumnGroups : undefined;\n\n const activeBorder = getActiveBorder(borderFromGroup, borderLeft);\n const isStickyFirstGroup =\n isFirstGroup &&\n (stickyColumnGroups === \"first\" || stickyColumnGroups === \"both\");\n const isStickyLastGroup =\n isLastGroup &&\n (stickyColumnGroups === \"last\" || stickyColumnGroups === \"both\");\n\n const isSticky = isStickyFirstGroup || isStickyLastGroup || stickyHeader;\n const isStickyGroup = isStickyFirstGroup || isStickyLastGroup;\n\n return (\n <th\n colSpan={colSpan}\n style={\n {\n position: isSticky ? \"sticky\" : undefined,\n height: \"var(--current-row-height)\",\n width: width,\n minWidth: minWidth ?? width ?? \"20px\",\n background: isSticky ? \"white\" : \"transparent\",\n left: isStickyFirstGroup ? `var(--current-left-offset)` : undefined,\n right: isStickyLastGroup ? `0px` : undefined,\n top: stickyHeader ? headerRowOffsetTop ?? \"0px\" : undefined,\n borderLeft: activeBorder,\n zIndex:\n stickyHeader && isStickyGroup\n ? \"var(--swui-sticky-column-group-label-z-index)\"\n : isStickyGroup\n ? \"var(--swui-sticky-group-group-z-index)\"\n : stickyHeader\n ? zIndex ?? \"var(--swui-sticky-header-column-group-z-index)\"\n : zIndex ?? 1,\n boxShadow: isStickyFirstGroup\n ? \"var(--swui-sticky-column-shadow-right)\"\n : isStickyLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : undefined,\n } as CSSProperties\n }\n >\n <Row alignItems={\"center\"}>\n {\n <>\n {contentLeft && (\n <>\n <Space />\n {contentLeft}\n <Space num={0.5} />\n </>\n )}\n {render ? (\n render(groupConfig)\n ) : (\n <Indent>\n <Heading variant={\"h5\"} whiteSpace={\"nowrap\"}>\n {label}\n </Heading>\n </Indent>\n )}\n {contentRight && (\n <>\n <Space num={0.5} />\n {contentRight}\n </>\n )}\n {(error || loading) && <Indent />}\n {loading ? (\n <InputSpinner />\n ) : error ? (\n <Tooltip\n label={error}\n placement={\"bottom\"}\n appendTo={document.body}\n >\n <Icon\n icon={faExclamationTriangle}\n color={cssColor(\"--lhds-color-red-500\")}\n size={14}\n />\n </Tooltip>\n ) : undefined}\n </>\n }\n </Row>\n </th>\n );\n};\n\nconst getActiveBorder = (\n borderFromGroup: string | undefined,\n borderFromColumn: string | boolean | undefined\n): string | undefined => {\n if (borderFromGroup) {\n return borderFromGroup;\n }\n if (borderFromColumn) {\n return \"1px solid transparent\";\n }\n return undefined;\n};\n","import { Property } from \"csstype\";\nimport { CSSProperties } from \"react\";\n\nexport const createStickyHeaderProps = (\n stickyHeader: boolean | undefined,\n stickyColumn: boolean | undefined,\n headerRowOffsetTop: string | undefined,\n zIndexFromConfig: number | undefined\n): CSSProperties => ({\n top: stickyHeader\n ? getTopPosition(stickyHeader, headerRowOffsetTop)\n : undefined,\n background: stickyHeader || stickyColumn ? \"white\" : undefined,\n position: stickyHeader || stickyColumn ? \"sticky\" : undefined,\n boxShadow: stickyColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex:\n stickyHeader || stickyColumn\n ? zIndexFromConfig ??\n (\"var(--swui-sticky-header-z-index)\" as Property.ZIndex)\n : zIndexFromConfig,\n});\n\nconst getTopPosition = (\n stickyHeader: boolean | undefined,\n headerRowOffsetTop: string | undefined\n) => {\n if (stickyHeader && headerRowOffsetTop) {\n return headerRowOffsetTop;\n } else if (headerRowOffsetTop) {\n return headerRowOffsetTop;\n } else if (stickyHeader) {\n return 0;\n }\n return undefined;\n};\n","import * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport {\n defaultTableRowHeight,\n tableBorderLeft,\n} from \"../../../../config/TableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableConfig } from \"../../hooks/UseStandardTableConfig\";\nimport { getCellBorderFromGroup } from \"../../util/CellBorderCalculator\";\nimport { ColumnInGroup } from \"./ColumnInGroup\";\nimport { createStickyHeaderProps } from \"./StickyHeaderPropsFactory\";\n\ninterface ColumnGroupRowProps {\n height?: string;\n}\n\nexport const ColumnGroupRow = React.memo(function ColumnGroupRow({\n height = defaultTableRowHeight,\n}: ColumnGroupRowProps) {\n const groupConfigAndIds = useGroupConfigsAndIdsForRows();\n const config = useStandardTableConfig();\n\n const {\n showHeaderCheckbox,\n enableExpandCollapse,\n rowIndent,\n zIndex,\n stickyHeader,\n stickyCheckboxColumn,\n headerRowOffsetTop,\n } = config;\n\n const stickyHeaderProps = createStickyHeaderProps(\n stickyHeader,\n stickyCheckboxColumn,\n headerRowOffsetTop,\n zIndex\n );\n\n const zIndexForCells = (\n stickyHeader\n ? \"var(--swui-sticky-column-group-label-z-index)\"\n : \"var(--swui-sticky-group-group-z-index)\"\n ) as CSSProperties[\"zIndex\"];\n\n return (\n <tr\n style={{\n height: height,\n borderLeft: tableBorderLeft,\n }}\n >\n {rowIndent && <th style={stickyHeaderProps} />}\n {enableExpandCollapse && (\n <th\n style={{\n ...stickyHeaderProps,\n width: \"var(--swui-expand-cell-width)\",\n left: stickyCheckboxColumn ? \"0px\" : undefined,\n zIndex: zIndexForCells,\n }}\n />\n )}\n {showHeaderCheckbox && (\n <th\n style={{\n ...stickyHeaderProps,\n left:\n stickyCheckboxColumn && enableExpandCollapse\n ? \"var(--swui-expand-cell-width)\"\n : stickyCheckboxColumn\n ? \"0px\"\n : undefined,\n zIndex: zIndexForCells,\n }}\n />\n )}\n {groupConfigAndIds.map(({ groupConfig, groupId }, groupIndex) => (\n <ColumnInGroup\n isFirstGroup={groupIndex === 0}\n isLastGroup={groupIndex === groupConfigAndIds.length - 1}\n groupConfig={groupConfig}\n columnId={groupConfig.columnOrder[0]}\n key={groupId}\n colSpan={groupConfig.columnOrder.length}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n 0,\n groupConfig.borderLeft\n )}\n />\n ))}\n {rowIndent && <th style={stickyHeaderProps} />}\n <th style={stickyHeaderProps} />\n </tr>\n );\n});\n","import { StandardTableColumnConfig } from \"../../config/StandardTableColumnConfig\";\nimport { StandardTableConfig } from \"../../config/StandardTableConfig\";\nimport { createGroupConfigAndIdsForRows } from \"../column-groups/ColumnGroupFactory\";\n\nexport type ColumnIndexPerColumnId<TColumnKey extends string> = Record<\n TColumnKey,\n number\n>;\n\nexport interface ColumnIndexPerColumnIdCalculationResult<\n TColumnKey extends string\n> {\n columnIndexPerColumnId: ColumnIndexPerColumnId<TColumnKey>;\n numNavigableColumns: number;\n}\n\nexport const calculateColumnIndexPerColumnId = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>\n): ColumnIndexPerColumnIdCalculationResult<TColumnKey> => {\n const groupConfigs = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n let columnIndexPerColumnId = {} as ColumnIndexPerColumnId<TColumnKey>;\n let currentIndex = 0;\n if (config.showRowCheckbox) {\n currentIndex++;\n }\n if (config.enableExpandCollapse) {\n currentIndex++;\n }\n groupConfigs.forEach((conf) => {\n conf.groupConfig.columnOrder.forEach((columnId) => {\n if (isColumnNavigable(config.columns[columnId])) {\n columnIndexPerColumnId[columnId] = currentIndex++;\n }\n });\n });\n return {\n columnIndexPerColumnId,\n numNavigableColumns: currentIndex,\n };\n};\n\nconst isColumnNavigable = <TItem, TColumnKey extends string>(\n columnConfig: StandardTableColumnConfig<TItem, unknown, TColumnKey>\n): boolean => !columnConfig.disableGridCell;\n","import { createContext, useContext } from \"react\";\nimport { ColumnIndexPerColumnIdCalculationResult } from \"./ColumnIndexCalculator\";\n\nexport const ColumnIndexPerColumnIdContext = createContext<\n ColumnIndexPerColumnIdCalculationResult<string>\n>({\n columnIndexPerColumnId: {},\n numNavigableColumns: 0,\n});\n\nexport const useColumnIndexPerColumnIdContext = <TColumnKey extends string>() =>\n useContext(\n ColumnIndexPerColumnIdContext\n ) as ColumnIndexPerColumnIdCalculationResult<TColumnKey>;\n","import {\n StandardTableConfig,\n StandardTableConfigWithGroups,\n} from \"../../config/StandardTableConfig\";\n\nexport const ensureConfigHasValidSticky = <TItem, TColumnKey extends string>(\n config: StandardTableConfig<TItem, TColumnKey>\n): void => {\n if (\"columnGroupOrder\" in config) {\n ensureNoColumnsAreSticky(config);\n if (\n config.stickyColumnGroups === \"first\" ||\n config.stickyColumnGroups === \"both\"\n ) {\n ensureAllColumnsInGroupHasFixedWidth(config, 0);\n }\n if (\n config.stickyColumnGroups === \"last\" ||\n config.stickyColumnGroups === \"both\"\n ) {\n ensureAllColumnsInGroupHasFixedWidth(\n config,\n config.columnGroupOrder.length - 1\n );\n }\n }\n};\n\nexport const ensureNoColumnsAreSticky = <TItem, TColumnKey extends string>(\n config: StandardTableConfig<TItem, TColumnKey>\n): void => {\n const columnIds = Object.keys(config.columns);\n columnIds.forEach((columnId) => {\n const columnConfig = config.columns[columnId];\n if (columnConfig.sticky) {\n throw new Error(\n \"Columns can not be sticky when column groups are used. columnId: \" +\n columnId\n );\n }\n });\n};\n\nexport const ensureAllColumnsInGroupHasFixedWidth = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>,\n columnGroupIndex: number\n): void => {\n if (!config.columnGroupOrder || config.columnGroupOrder.length === 0) {\n throw new Error(\n \"columnGroupOrder required when validating column group fixed width.\"\n );\n }\n\n const columnGroupId = config.columnGroupOrder[columnGroupIndex];\n const columnGroupConfig = config.columnGroups?.[columnGroupId];\n\n if (!columnGroupConfig) {\n throw new Error(\n \"Column group does not exist. Column group id = \" + columnGroupId\n );\n }\n\n columnGroupConfig.columnOrder.forEach((columnId) => {\n const columnConfig = config.columns[columnId];\n if (columnConfig.width == null) {\n throw new Error(\n \"All columns in sticky column group must have width set.\"\n );\n }\n });\n};\n","import {\n StandardTableConfig,\n StandardTableConfigWithGroups,\n} from \"../../config/StandardTableConfig\";\n\nexport type OffsetPerColumn<TColumnKey extends string> = Record<\n TColumnKey,\n string\n>;\n\n/**\n * This methods assumes that the config has already been validated to be correct.\n * @param config\n */\nexport const calculateOffsetForColumnInStickyColumnGroups = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): OffsetPerColumn<TColumnKey> => {\n const left =\n config.stickyColumnGroups === \"first\" ||\n config.stickyColumnGroups === \"both\"\n ? calculateOffsetForColumns(\n getColumnIdsForLeftSideStickyGroup(config),\n config.columns,\n true\n )\n : undefined;\n\n const right =\n config.stickyColumnGroups === \"last\" || config.stickyColumnGroups === \"both\"\n ? calculateOffsetForColumns(\n getColumnIdsForRightSideStickyGroup(config),\n config.columns,\n false\n )\n : undefined;\n\n return {\n ...left,\n ...right,\n } as OffsetPerColumn<TColumnKey>;\n};\n\nexport const calculateOffsetForColumns = <TItem, TColumnKey extends string>(\n columnIds: Array<TColumnKey>,\n columns: StandardTableConfig<TItem, TColumnKey>[\"columns\"],\n includeOffsetForCheckboxAndExpand: boolean\n): OffsetPerColumn<TColumnKey> => {\n const r = {} as OffsetPerColumn<TColumnKey>;\n const widths: Array<string> = [\n includeOffsetForCheckboxAndExpand ? \"var(--current-left-offset)\" : \"0px\",\n ];\n for (let i = 0; i < columnIds.length; i++) {\n const columnId = columnIds[i];\n const columnConfig = columns?.[columnId];\n r[columnId] = getCalcForWidths(widths);\n widths.push(columnConfig?.width ?? \"0px\");\n }\n return r;\n};\n\nconst getCalcForWidths = (widths: Array<string>): string => {\n if (widths.length === 0) {\n return \"0px\";\n }\n if (widths.length === 1) {\n return widths[0];\n }\n return \"calc(\" + widths.join(\" + \") + \")\";\n};\n\nexport const getColumnIdsForLeftSideStickyGroup = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): Array<TColumnKey> => {\n const columnGroupId = config.columnGroupOrder?.[0];\n if (!columnGroupId) {\n return [];\n }\n const columnGroupConfig = config.columnGroups?.[columnGroupId];\n return columnGroupConfig?.columnOrder ?? [];\n};\n\nexport const getColumnIdsForRightSideStickyGroup = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): Array<TColumnKey> => {\n const columnGroupId =\n config.columnGroupOrder?.[config.columnGroupOrder?.length - 1];\n if (!columnGroupId) {\n return [];\n }\n const columnGroupConfig = config.columnGroups?.[columnGroupId];\n\n if (!columnGroupConfig) {\n return [];\n }\n\n const r = [...columnGroupConfig.columnOrder];\n r.reverse();\n return r;\n};\n","import {\n StandardTableConfig,\n StandardTableConfigWithGroups,\n StandardTableConfigWithNoGroups,\n} from \"../../config/StandardTableConfig\";\nimport { calculateOffsetForColumnInStickyColumnGroups } from \"./StickyColumnGroupOffsetCalculator\";\nimport { StickyPropsPerColumn } from \"./types\";\n\nexport const getStickyPropsPerColumn = <TItem, TColumnKey extends string>(\n config: StandardTableConfig<TItem, TColumnKey>\n): StickyPropsPerColumn<TColumnKey> => {\n if (\"columnGroups\" in config) {\n return getStickyPropsPerColumnWithGroups(config);\n } else {\n return getStickyPropsPerColumnWithNoGroups(config);\n }\n};\n\nexport const getStickyPropsPerColumnWithNoGroups = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithNoGroups<TItem, TColumnKey>\n): StickyPropsPerColumn<TColumnKey> => {\n const columnIds = Object.keys(config.columns) as Array<TColumnKey>;\n\n return columnIds.reduce<StickyPropsPerColumn<TColumnKey>>((sum, columnId) => {\n const columnConfig = config.columns[columnId];\n const sticky = Boolean(columnConfig.sticky);\n sum[columnId] = {\n sticky,\n left: sticky\n ? `calc(var(--current-left-offset) + ${columnConfig.left ?? \"0px\"})`\n : undefined,\n right: sticky ? columnConfig.right : undefined,\n type: \"column\",\n isFirstColumnInLastGroup: false,\n isLastColumnInFirstGroup: false,\n };\n return sum;\n }, {} as StickyPropsPerColumn<TColumnKey>);\n};\n\nexport const getStickyPropsPerColumnWithGroups = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): StickyPropsPerColumn<TColumnKey> => {\n const r = {} as StickyPropsPerColumn<TColumnKey>;\n const columnGroupIds = config.columnGroupOrder;\n\n const stickyGroupOffsets =\n calculateOffsetForColumnInStickyColumnGroups(config);\n\n const firstGroupIsSticky =\n config.stickyColumnGroups === \"first\" ||\n config.stickyColumnGroups === \"both\";\n\n const lastGroupIsSticky =\n config.stickyColumnGroups === \"last\" ||\n config.stickyColumnGroups === \"both\";\n\n columnGroupIds.forEach((columnGroupId, columnGroupIndex) => {\n const columnGroup = config.columnGroups[columnGroupId];\n const columnIds = columnGroup.columnOrder;\n\n columnIds.forEach((columnId, columnIndex) => {\n const isFirstGroup = columnGroupIndex === 0;\n const isLastGroup = columnGroupIndex === columnGroupIds.length - 1;\n const isStickyFirst = isFirstGroup && firstGroupIsSticky;\n const isStickyLast = isLastGroup && lastGroupIsSticky;\n const isFirstColumnInLastGroup = columnIndex === 0 && isLastGroup;\n const isLastColumnInFirstGroup =\n columnIndex === columnIds.length - 1 && isFirstGroup;\n\n r[columnId] = {\n sticky: isStickyFirst || isStickyLast,\n left: isStickyFirst ? stickyGroupOffsets[columnId] : undefined,\n right: isStickyLast ? stickyGroupOffsets[columnId] : undefined,\n type: isStickyFirst\n ? \"first-group\"\n : isStickyLast\n ? \"last-group\"\n : undefined,\n isFirstColumnInLastGroup,\n isLastColumnInFirstGroup,\n };\n });\n });\n\n return r;\n};\n","import { InternalStandardTableActions } from \"../redux/StandardTableActionsAndSelectors\";\nimport {\n EntityAction,\n reducerIdGateAction,\n ReducerIdGateAction,\n SelectedIdsAction,\n SortOrderAction,\n} from \"@stenajs-webui/redux\";\nimport { getReducerIdFor } from \"../redux/ReducerIdFactory\";\nimport { StandardTableStateFields } from \"../redux/StandardTableReducer\";\n\nexport type StandardTableAction<TColumnKey extends string> =\n | ReducerIdGateAction<SortOrderAction<TColumnKey>>\n | ReducerIdGateAction<SelectedIdsAction>\n | ReducerIdGateAction<EntityAction<StandardTableStateFields>>;\n\nexport interface StandardTableActions<TColumnKey extends string> {\n setSelectedIds: (ids: Array<string>) => StandardTableAction<TColumnKey>;\n clearSelection: () => StandardTableAction<TColumnKey>;\n expandByIds: (ids: Array<string>) => StandardTableAction<TColumnKey>;\n collapseAll: () => StandardTableAction<TColumnKey>;\n sortBy: (\n columnId: TColumnKey,\n desc?: boolean\n ) => StandardTableAction<TColumnKey>;\n clearSortOrder: () => StandardTableAction<TColumnKey>;\n setLastSelectedId: (\n lastSelectedId: string\n ) => StandardTableAction<TColumnKey>;\n}\n\nexport const createStandardTableActions = <TColumnKey extends string>(\n tableId: string,\n actions: InternalStandardTableActions<TColumnKey>\n): StandardTableActions<TColumnKey> => {\n return {\n setSelectedIds: (ids) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"selectedIds\"),\n actions.selectedIds.setSelectedIds(ids)\n ),\n clearSelection: () =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"selectedIds\"),\n actions.selectedIds.clearSelectedIds()\n ),\n expandByIds: (ids) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"expandedRows\"),\n actions.expandedRows.setSelectedIds(ids)\n ),\n collapseAll: () =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"expandedRows\"),\n actions.expandedRows.clearSelectedIds()\n ),\n sortBy: (columnId: TColumnKey, desc?: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"sortOrder\"),\n actions.sortOrder.sortBy(columnId, desc ?? false)\n ),\n clearSortOrder: () =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"sortOrder\"),\n actions.sortOrder.clearSortOrder()\n ),\n setLastSelectedId: (lastSelectedId: string) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"fields\"),\n actions.fields.setEntityFields({ lastSelectedId })\n ),\n };\n};\n","import { useMemo, useReducer } from \"react\";\nimport { TableContext } from \"../context/StandardTableStateContext\";\nimport { createInternalStandardTableActions } from \"../redux/StandardTableActionsAndSelectors\";\nimport {\n createStandardTableInitialState,\n createStandardTableReducer,\n StandardTableReducer,\n StandardTableState,\n} from \"../redux/StandardTableReducer\";\nimport { createStandardTableActions } from \"../util/ActionsFactory\";\n\nexport const useLocalStateTableContext = <TColumnKey extends string>(\n tableId: string,\n initialState: StandardTableState<TColumnKey> = createStandardTableInitialState<TColumnKey>()\n) => {\n const [state, dispatch] = useReducer<StandardTableReducer<TColumnKey>>(\n createStandardTableReducer<TColumnKey>(tableId),\n initialState\n );\n\n const actions = useMemo(\n () =>\n createStandardTableActions(\n tableId,\n createInternalStandardTableActions<TColumnKey>()\n ),\n [tableId]\n );\n\n const tableContext = useMemo<TableContext<TColumnKey>>(\n () => ({\n dispatch,\n actions,\n state,\n }),\n [state, actions, dispatch]\n );\n\n return {\n tableContext,\n };\n};\n","import { StandardTableConfig } from \"../config/StandardTableConfig\";\n\nexport const getTotalNumColumns = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string = string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>\n): number =>\n (config.rowIndent ? 2 : 0) +\n (config.enableExpandCollapse ? 1 : 0) +\n (config.showRowCheckbox ? 1 : 0) +\n getNumUserColumns(config);\n\nconst getNumUserColumns = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string = string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>\n): number => {\n if (\"columnGroupOrder\" in config) {\n return config.columnGroupOrder.reduce<number>((sum, groupId) => {\n const group = config.columnGroups?.[groupId];\n return sum + (group?.columnOrder?.length ?? 0);\n }, 0);\n }\n\n return config.columnOrder?.length ?? 0;\n};\n","import * as React from \"react\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { booleanOrNumberToNumber } from \"@stenajs-webui/core\";\n\ninterface ColsProps {}\n\nexport const ColGroups: React.FC<ColsProps> = () => {\n const config = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n\n const hasExtraColGroup =\n config.enableExpandCollapse || config.showRowCheckbox;\n\n const rowIndent = booleanOrNumberToNumber(config.rowIndent);\n\n return (\n <>\n {rowIndent ? (\n <colgroup>\n <col\n style={{ width: `calc(var(--swui-metrics-indent) * ${rowIndent})` }}\n />\n </colgroup>\n ) : null}\n {hasExtraColGroup && (\n <colgroup>\n {config.enableExpandCollapse && (\n <col style={{ width: \"var(--swui-expand-cell-width)\" }} />\n )}\n {config.showRowCheckbox && (\n <col style={{ width: \"var(--swui-checkbox-cell-width)\" }} />\n )}\n </colgroup>\n )}\n {groupConfigsAndIds.map(({ groupConfig, groupId }) => (\n <colgroup key={groupId}>\n {groupConfig.columnOrder.map((columnId) => (\n <col\n key={columnId}\n style={{\n width: config.columns[columnId].width,\n minWidth: config.columns[columnId].minWidth,\n }}\n />\n ))}\n </colgroup>\n ))}\n {rowIndent ? (\n <colgroup>\n <col\n style={{ width: `calc(var(--swui-metrics-indent) * ${rowIndent})` }}\n />\n </colgroup>\n ) : null}\n </>\n );\n};\n","type ComparableType = number | string | boolean | Date | null | undefined;\n\nexport const multitypeComparator = (\n a: ComparableType,\n b: ComparableType\n): number => {\n if (a != null && b == null) {\n return -1;\n }\n if (a == null && b != null) {\n return 1;\n }\n if (isBothOfType(a, b, \"number\")) {\n return Number(a) - Number(b);\n }\n if (isBothOfType(a, b, \"boolean\")) {\n return Number(b) - Number(a);\n }\n if (isBothOfType(a, b, \"string\")) {\n return String(a).localeCompare(String(b));\n }\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() - b.getTime();\n }\n return 0;\n};\n\nconst isBothOfType = (\n a: ComparableType,\n b: ComparableType,\n type: string\n): boolean => typeof a === type && typeof b === type;\n","import { useStandardTableConfig } from \"./UseStandardTableConfig\";\n\nexport const useColumnValueResolver = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n columnId: TColumnKey | undefined\n) => {\n const { columns } = useStandardTableConfig<\n TItem,\n TColumnKey,\n TColumnGroupKey\n >();\n if (!columnId) {\n return undefined;\n }\n const column = columns[columnId];\n if (!column) {\n return undefined;\n }\n return column.itemValueResolver;\n};\n","import { Checkbox, CheckboxProps } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { RefObject, useCallback } from \"react\";\nimport { useGridCell } from \"../../../grid-cell/hooks/UseGridCell\";\nimport { useTotalNumColumnsForRows } from \"../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableId } from \"../../hooks/UseStandardTableConfig\";\n\ninterface Props extends Pick<CheckboxProps, \"value\" | \"onValueChange\"> {\n colIndex: number;\n rowIndex: number;\n numRows: number;\n disabled?: boolean;\n onValueChangeAndShift: CheckboxProps[\"onValueChange\"];\n shiftPressedRef: RefObject<boolean>;\n}\n\nexport const StandardTableRowCheckbox: React.FC<Props> = React.memo(\n function StandardTableRowCheckbox({\n value,\n onValueChange,\n colIndex,\n rowIndex,\n numRows,\n disabled,\n onValueChangeAndShift,\n shiftPressedRef,\n }) {\n const totalNumColumns = useTotalNumColumnsForRows();\n\n const tableId = useStandardTableId();\n const gridCell = useGridCell<boolean>(Boolean(value), {\n colIndex,\n numCols: totalNumColumns,\n numRows,\n rowIndex,\n tableId,\n });\n const { requiredProps } = gridCell;\n\n const internalOnValueChange = useCallback(\n (value: boolean) => {\n if (shiftPressedRef.current) {\n onValueChangeAndShift?.(value);\n } else {\n onValueChange?.(value);\n }\n },\n [onValueChange, onValueChangeAndShift, shiftPressedRef]\n );\n\n return (\n <Checkbox\n size={\"small\"}\n disabled={disabled}\n value={value}\n onValueChange={internalOnValueChange}\n {...requiredProps}\n />\n );\n }\n);\n","export const getIdsBetweenSelected = (\n idList: Array<string> | undefined,\n selected1: string | undefined,\n selected2: string | undefined\n): Array<string> | undefined => {\n if (selected1 == null || selected2 == null || idList == null) {\n return undefined;\n }\n\n if (selected1 === selected2) {\n return undefined;\n }\n\n const i1 = idList.indexOf(selected1);\n const i2 = idList.indexOf(selected2);\n\n if (i1 < 0 || i2 < 0) {\n return undefined;\n }\n\n const start = Math.min(i1, i2);\n const end = Math.max(i1, i2);\n\n return idList.slice(start, end + 1);\n};\n","import { useArraySet } from \"@stenajs-webui/core\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { getIdsBetweenSelected } from \"../../util/IdListPartial\";\n\nexport const useRowCheckbox = <TItem>(\n item: TItem,\n idListForEnabledItems: Array<string>\n) => {\n const { keyResolver } = useStandardTableConfig();\n\n const {\n selectedIds: { selectedIds },\n fields: { lastSelectedId },\n } = useStandardTableState();\n const {\n actions: { setSelectedIds, setLastSelectedId },\n dispatch,\n } = useStandardTableActions();\n\n const itemKey = useMemo(() => keyResolver(item), [keyResolver, item]);\n\n const isSelected = useMemo(\n () => selectedIds.includes(itemKey),\n [selectedIds, itemKey]\n );\n\n const { toggle, addMultiple, removeMultiple } = useArraySet(\n selectedIds,\n (ids: Array<string>) => dispatch(setSelectedIds(ids))\n );\n\n const shiftAndToggleSelected = useCallback(() => {\n if (idListForEnabledItems && lastSelectedId) {\n const idList = getIdsBetweenSelected(\n idListForEnabledItems,\n lastSelectedId,\n itemKey\n );\n if (idList?.length) {\n if (isSelected) {\n removeMultiple(idList);\n } else {\n addMultiple(idList);\n }\n } else {\n toggle(itemKey);\n }\n } else {\n toggle(itemKey);\n }\n dispatch(setLastSelectedId(itemKey));\n }, [\n idListForEnabledItems,\n lastSelectedId,\n dispatch,\n setLastSelectedId,\n itemKey,\n isSelected,\n removeMultiple,\n addMultiple,\n toggle,\n ]);\n\n const toggleSelected = useCallback(() => {\n toggle(itemKey);\n dispatch(setLastSelectedId(itemKey));\n }, [toggle, itemKey, dispatch, setLastSelectedId]);\n\n return {\n isSelected,\n toggleSelected,\n shiftAndToggleSelected,\n };\n};\n","import {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { useCallback, useMemo } from \"react\";\nimport { useArraySet } from \"@stenajs-webui/core\";\n\nexport const useExpandCollapseActions = <TItem>(item: TItem) => {\n const { keyResolver } = useStandardTableConfig();\n const {\n expandedRows: { selectedIds },\n } = useStandardTableState();\n const {\n actions: { expandByIds },\n dispatch,\n } = useStandardTableActions();\n\n const itemKey = useMemo(() => keyResolver(item), [keyResolver, item]);\n\n const isExpanded = useMemo(\n () => selectedIds.includes(itemKey),\n [selectedIds, itemKey]\n );\n\n const { toggle } = useArraySet(selectedIds, (ids: Array<string>) =>\n dispatch(expandByIds(ids))\n );\n\n const toggleRowExpanded = useCallback(() => {\n toggle(itemKey);\n }, [toggle, itemKey]);\n\n return {\n toggleRowExpanded,\n isExpanded,\n };\n};\n","import { faChevronDown } from \"@fortawesome/free-solid-svg-icons/faChevronDown\";\nimport { faChevronRight } from \"@fortawesome/free-solid-svg-icons/faChevronRight\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { useGridCell } from \"../../../grid-cell/hooks/UseGridCell\";\nimport { useTotalNumColumnsForRows } from \"../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useExpandCollapseActions } from \"./UseExpandCollapseActions\";\nimport {\n useStandardTableConfig,\n useStandardTableId,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { Row } from \"@stenajs-webui/core\";\n\ninterface Props<TItem> {\n item: TItem;\n colIndex: number;\n rowIndex: number;\n numRows: number;\n}\n\nexport const StandardTableRowExpandButton = function <TItem>({\n item,\n colIndex,\n numRows,\n rowIndex,\n}: Props<TItem>) {\n const totalNumColumns = useTotalNumColumnsForRows();\n const tableId = useStandardTableId();\n const gridCell = useGridCell<boolean>(true, {\n colIndex,\n numCols: totalNumColumns,\n numRows,\n rowIndex,\n tableId,\n });\n const { requiredProps } = gridCell;\n\n const { expandCollapseDisableResolver } = useStandardTableConfig();\n const { toggleRowExpanded, isExpanded } = useExpandCollapseActions(item);\n\n const buttonDisabled = useMemo(() => {\n if (!expandCollapseDisableResolver) {\n return false;\n }\n return expandCollapseDisableResolver(item);\n }, [expandCollapseDisableResolver, item]);\n return (\n <Row alignItems={\"center\"} justifyContent={\"center\"} indent>\n {!buttonDisabled && (\n <FlatButton\n size={\"small\"}\n leftIcon={isExpanded ? faChevronDown : faChevronRight}\n onClick={toggleRowExpanded}\n {...requiredProps}\n />\n )}\n </Row>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n BackgroundResolver,\n StandardTableColumnConfig,\n} from \"../config/StandardTableColumnConfig\";\nimport { useColumnConfigById } from \"./UseColumnConfigById\";\n\nconst getBackgroundColor = <TItem>(\n backgroundResolver: BackgroundResolver<TItem> | undefined,\n item: TItem,\n background: string | undefined\n): string | undefined =>\n backgroundResolver ? backgroundResolver(item) : background;\n\nconst useBackground = <TItem>(\n backgroundResolver: BackgroundResolver<TItem> | undefined,\n item: TItem,\n background: string | undefined\n): string | undefined =>\n useMemo(\n () => getBackgroundColor(backgroundResolver, item, background),\n [backgroundResolver, item, background]\n );\n\nexport const useCellBackgroundByColumnId = <T>(\n columnId: string,\n item: T\n): string | undefined => {\n const { background, backgroundResolver } = useColumnConfigById(columnId);\n return useBackground(backgroundResolver, item, background);\n};\n\nexport const useCellBackgroundByColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n columnConfig:\n | StandardTableColumnConfig<TItem, TItemValue, TColumnKey>\n | undefined,\n item: TItem\n): string | undefined => {\n const { background, backgroundResolver } = columnConfig ?? {};\n return useBackground(backgroundResolver, item, background);\n};\n","import { lowerCase, upperFirst } from \"lodash\";\n\nexport const formatValueLabel = <T>(itemValue: T) => {\n if (itemValue == null) {\n return \"\";\n } else if (itemValue instanceof Date) {\n return itemValue.toISOString();\n } else if (typeof itemValue === \"object\") {\n return JSON.stringify(itemValue);\n } else {\n return String(itemValue);\n }\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { GridCellRequiredProps } from \"../../grid-cell/hooks/UseGridCell\";\nimport styles from \"./StandardTableCellUi.module.css\";\n\ninterface Props {\n width?: string;\n minWidth?: string;\n justifyContent?: string;\n enableGridCell?: boolean;\n isEditing: boolean;\n gridCellRequiredProps?: GridCellRequiredProps;\n background?: string;\n children: ReactNode;\n onKeyDown?: BoxProps[\"onKeyDown\"];\n}\n\nexport const StandardTableCellUi = React.memo<Props>(\n function StandardTableCellUi({\n enableGridCell,\n children,\n background,\n gridCellRequiredProps,\n isEditing,\n justifyContent,\n onKeyDown,\n width,\n minWidth,\n }) {\n return (\n <Row\n width={width}\n minWidth={minWidth}\n height={\"inherit\"}\n background={background}\n overflow={\"hidden\"}\n onKeyDown={onKeyDown}\n >\n <Row\n border={\"1px solid transparent\"}\n className={styles.standardTableCell}\n width={\"100%\"}\n height={\"100%\"}\n justifyContent={justifyContent}\n alignItems={\"center\"}\n borderRadius={enableGridCell ? \"4px\" : undefined}\n focusBorder={\n enableGridCell && !isEditing\n ? \"1px solid var(--swui-primary-action-color)\"\n : undefined\n }\n hoverBorder={\n enableGridCell && !isEditing\n ? \"1px solid var(--lhds-color-ui-300)\"\n : undefined\n }\n {...(enableGridCell ? gridCellRequiredProps : undefined)}\n >\n {children}\n </Row>\n </Row>\n );\n }\n);\n","import { Indent, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport styles from \"./TextCell.module.css\";\n\ninterface Props {\n label?: string;\n}\n\nexport const TextCell: React.FC<Props> = React.memo(function TextCell({\n label,\n}) {\n return (\n <Indent overflow={\"hidden\"}>\n <Text className={styles.textCell} title={label}>\n {label}\n </Text>\n </Indent>\n );\n});\n","import * as React from \"react\";\nimport {\n CSSProperties,\n KeyboardEventHandler,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useGridCell } from \"../../grid-cell/hooks/UseGridCell\";\nimport { useOnKeyDownContext } from \"../context/OnKeyDownContext\";\nimport { useStickyPropsPerColumnContext } from \"../context/StickyPropsPerColumnContext\";\nimport { useColumnIndexPerColumnIdContext } from \"../features/column-index-per-column-id/ColumnIndexPerColumnIdContext\";\nimport { useCellBackgroundByColumnId } from \"../hooks/UseCellBackground\";\nimport { useColumnConfigById } from \"../hooks/UseColumnConfigById\";\nimport {\n useStandardTableConfig,\n useStandardTableId,\n useStandardTableState,\n} from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorder } from \"../util/CellBorderCalculator\";\nimport { formatValueLabel } from \"../util/LabelFormatter\";\nimport { StandardTableCellUi } from \"./StandardTableCellUi\";\nimport { TextCell } from \"./TextCell\";\n\nexport interface StandardTableCellProps<TItem> {\n columnId: string;\n item: TItem;\n rowIndex: number;\n colIndex: number;\n numRows: number;\n borderFromGroup?: boolean | string;\n disableBorderLeft?: boolean;\n}\n\nexport const StandardTableCell = React.memo(function StandardTableCell<TItem>({\n columnId,\n item,\n colIndex,\n rowIndex,\n numRows,\n borderFromGroup,\n disableBorderLeft,\n}: StandardTableCellProps<TItem>) {\n const {\n keyResolver,\n enableGridCell,\n gridCellOptions: gridCellOptionsForTable,\n } = useStandardTableConfig();\n\n const selectedIds = useStandardTableState().selectedIds.selectedIds;\n const tableId = useStandardTableId();\n const onKeyDownTable = useOnKeyDownContext();\n const { numNavigableColumns } = useColumnIndexPerColumnIdContext();\n const stickyPropsPerColumnContext = useStickyPropsPerColumnContext();\n\n const itemKey = useMemo(() => keyResolver(item), [item, keyResolver]);\n\n const isSelected = useMemo(() => {\n return selectedIds.indexOf(itemKey) >= 0;\n }, [itemKey, selectedIds]);\n\n const {\n itemValueResolver,\n itemLabelFormatter,\n width,\n minWidth,\n justifyContentCell = \"flex-start\",\n borderLeft,\n renderCell,\n gridCellOptions: gridCellOptionsForColumn,\n isEditable,\n onChange,\n onKeyDown: onKeyDownCell,\n disableGridCell,\n disableGridCellFocus,\n zIndex,\n } = useColumnConfigById(columnId);\n\n const itemValue = useMemo(() => {\n if (itemValueResolver) {\n return itemValueResolver(item);\n }\n if (columnId in item) {\n return (item as any)[columnId];\n }\n return \"\";\n }, [itemValueResolver, item, columnId]);\n\n const label = useMemo<string>(\n () =>\n itemLabelFormatter\n ? itemLabelFormatter(itemValue, item)\n : formatValueLabel(itemValue),\n [itemValue, itemLabelFormatter, item]\n );\n\n const editable =\n typeof isEditable === \"boolean\"\n ? isEditable\n : isEditable\n ? isEditable(item)\n : undefined;\n\n const onKeyDownHandler = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (ev) => {\n onKeyDownCell?.(ev, { columnId, item });\n onKeyDownTable?.(ev, { columnId, item });\n },\n [onKeyDownTable, columnId, item, onKeyDownCell]\n );\n\n const gridCell = useGridCell<string>(label, {\n colIndex,\n rowIndex,\n numRows,\n numCols: numNavigableColumns,\n tableId,\n isEditable: editable,\n onChange: onChange\n ? (value: string | undefined) => onChange(item, value)\n : undefined,\n ...gridCellOptionsForTable,\n ...gridCellOptionsForColumn,\n });\n\n const stickyProps = stickyPropsPerColumnContext[columnId];\n\n const background = useCellBackgroundByColumnId(columnId, item) ?? \"inherit\";\n\n const currentZIndex = stickyProps.sticky\n ? zIndex ?? \"var(--swui-sticky-column-z-index)\"\n : zIndex ?? 1;\n\n const content = useMemo(\n () =>\n renderCell ? (\n renderCell({\n label,\n value: itemValue,\n item,\n gridCell,\n isEditable: editable,\n isSelected,\n zIndex: currentZIndex,\n itemKey,\n })\n ) : (\n <TextCell label={label} />\n ),\n [\n renderCell,\n label,\n itemValue,\n item,\n gridCell,\n editable,\n isSelected,\n currentZIndex,\n itemKey,\n ]\n );\n\n const activeBorderLeft = getCellBorder(\n borderFromGroup,\n disableBorderLeft,\n borderLeft\n );\n\n const shadow =\n stickyProps.sticky &&\n stickyProps.type === \"last-group\" &&\n stickyProps.isFirstColumnInLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky && stickyProps.type === \"column\" && stickyProps.right\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined;\n\n return (\n <td\n style={{\n borderLeft: activeBorderLeft,\n position: stickyProps.sticky ? \"sticky\" : undefined,\n left: stickyProps.sticky ? stickyProps.left : undefined,\n right: stickyProps.sticky ? stickyProps.right : undefined,\n boxShadow: shadow,\n zIndex: currentZIndex as CSSProperties[\"zIndex\"],\n height: \"var(--current-row-height)\",\n background: background,\n }}\n >\n <StandardTableCellUi\n enableGridCell={\n enableGridCell && !disableGridCell && !disableGridCellFocus\n }\n gridCellRequiredProps={gridCell.requiredProps}\n isEditing={gridCell.isEditing}\n width={width}\n minWidth={minWidth}\n justifyContent={justifyContentCell}\n onKeyDown={onKeyDownHandler}\n >\n {content}\n </StandardTableCellUi>\n </td>\n );\n});\n","import * as React from \"react\";\nimport {\n tableBackgroundColorExpanded,\n tableBorderLeftExpanded,\n} from \"../../../config/TableConfig\";\nimport { useTotalNumColumns } from \"../context/TotalNumColumnsContext\";\nimport { useExpandCollapseActions } from \"../features/expand-collapse/UseExpandCollapseActions\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\n\ninterface Props<TItem> {\n item: TItem;\n}\n\nexport const StandardTableRowExpansion = function StandardTableRowExpansion<\n TItem\n>({ item }: Props<TItem>) {\n const { renderRowExpansion, enableExpandCollapse } = useStandardTableConfig();\n const { isExpanded, toggleRowExpanded } = useExpandCollapseActions(item);\n\n const totalNumColumns = useTotalNumColumns();\n\n return (\n <>\n {enableExpandCollapse && renderRowExpansion && isExpanded && (\n <tr\n style={{\n borderLeft: tableBorderLeftExpanded,\n background: tableBackgroundColorExpanded,\n }}\n >\n <td colSpan={totalNumColumns}>\n {renderRowExpansion(item, { onRequestCollapse: toggleRowExpanded })}\n </td>\n </tr>\n )}\n </>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const TrWithHoverBackground = styled.tr<{\n borderLeft?: string;\n height?: string;\n focusBackground?: string;\n hoverBackground?: string;\n background?: string;\n}>`\n ${({ focusBackground }) =>\n focusBackground ? `--focus-within-background: ${focusBackground};` : \"\"}\n ${({ borderLeft }) => (borderLeft ? `border-left: ${borderLeft};` : \"\")};\n ${({ background }) => (background ? `background: ${background};` : \"\")};\n ${({ height }) => (height ? `height: ${height};` : \"\")};\n ${({ hoverBackground }) =>\n hoverBackground\n ? ` &:hover {\n background: ${hoverBackground};\n }\n`\n : \"\"}\n`;\n","import { Indent, Row, useOnScreen } from \"@stenajs-webui/core\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport * as React from \"react\";\nimport { CSSProperties, RefObject, useMemo, useRef } from \"react\";\nimport {\n tableBackgroundColorExpanded,\n tableBackgroundHoverColorExpanded,\n tableBorderLeft,\n tableBorderLeftExpanded,\n} from \"../../../config/TableConfig\";\nimport { RowBackgroundResolverColorCombination } from \"../config/StandardTableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { useTotalNumColumns } from \"../context/TotalNumColumnsContext\";\nimport { StandardTableRowCheckbox } from \"../features/checkboxes/StandardTableRowCheckbox\";\nimport { useRowCheckbox } from \"../features/checkboxes/UseRowCheckbox\";\nimport { useColumnIndexPerColumnIdContext } from \"../features/column-index-per-column-id/ColumnIndexPerColumnIdContext\";\nimport { StandardTableRowExpandButton } from \"../features/expand-collapse/StandardTableRowExpandButton\";\nimport { useExpandCollapseActions } from \"../features/expand-collapse/UseExpandCollapseActions\";\nimport { useCellBackgroundByColumnConfig } from \"../hooks/UseCellBackground\";\nimport {\n useFirstColumnConfig,\n useLastColumnConfig,\n} from \"../hooks/UseColumnConfigById\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorderFromGroup } from \"../util/CellBorderCalculator\";\nimport { StandardTableCell } from \"./StandardTableCell\";\nimport { StandardTableRowExpansion } from \"./StandardTableRowExpansion\";\nimport { TrWithHoverBackground } from \"./TrWithHoverBackground\";\n\nexport interface StandardTableRowProps<TItem> {\n item: TItem;\n idListForEnabledItems: Array<string>;\n rowIndex: number;\n numRows: number;\n colIndexOffset: number;\n alwaysVisible?: boolean;\n shiftPressedRef: RefObject<boolean>;\n}\n\nexport const StandardTableRow = React.memo(function StandardTableRow<TItem>({\n item,\n idListForEnabledItems,\n rowIndex,\n numRows,\n colIndexOffset,\n alwaysVisible,\n shiftPressedRef,\n}: StandardTableRowProps<TItem>) {\n const trRef = useRef(null);\n const totalNumColumns = useTotalNumColumns();\n const { stickyCheckboxColumn } = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n const { columnIndexPerColumnId } = useColumnIndexPerColumnIdContext();\n const {\n showRowCheckbox,\n rowBackgroundResolver,\n checkboxDisabledResolver,\n enableGridCell,\n rowIndent,\n enableExpandCollapse,\n } = useStandardTableConfig();\n\n const { isExpanded } = useExpandCollapseActions(item);\n const { isSelected, toggleSelected, shiftAndToggleSelected } = useRowCheckbox(\n item,\n idListForEnabledItems\n );\n\n const visible = useOnScreen(trRef, {\n rootMargin: \"400px 0px 400px 0px\",\n threshold: 0,\n });\n\n const resolvedBackgroundResult = useMemo(\n () => rowBackgroundResolver?.(item, isSelected),\n [isSelected, item, rowBackgroundResolver]\n );\n\n const background = getBackgroundColor(\n resolvedBackgroundResult,\n isSelected,\n isExpanded\n );\n\n const hoverBackground = getHoverBackgroundColor(\n resolvedBackgroundResult,\n isSelected,\n isExpanded\n );\n\n const focusBackground = getFocusBackgroundColor(\n resolvedBackgroundResult,\n isSelected,\n hoverBackground\n );\n\n const disabled = useMemo(\n () => checkboxDisabledResolver?.(item),\n [item, checkboxDisabledResolver]\n );\n\n const firstColumn = useFirstColumnConfig();\n const firstColumnBackground = useCellBackgroundByColumnConfig(\n firstColumn,\n item\n );\n const lastColumn = useLastColumnConfig();\n const lastColumnBackground = useCellBackgroundByColumnConfig(\n lastColumn,\n item\n );\n\n const content = useMemo(\n () => (\n <>\n <>\n {rowIndent && (\n <td\n style={{\n background: firstColumnBackground,\n }}\n >\n <Indent num={rowIndent} />\n </td>\n )}\n {enableExpandCollapse && (\n <td\n style={\n {\n background: stickyCheckboxColumn ? \"inherit\" : undefined,\n position: stickyCheckboxColumn ? \"sticky\" : undefined,\n left: stickyCheckboxColumn ? \"0px\" : undefined,\n boxShadow: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-z-index)\"\n : undefined,\n } as CSSProperties\n }\n >\n <Row\n width={\"var(--swui-expand-cell-width)\"}\n minWidth={\"var(--swui-expand-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n <StandardTableRowExpandButton\n colIndex={colIndexOffset}\n rowIndex={enableGridCell ? rowIndex : 0}\n numRows={enableGridCell ? numRows : 0}\n item={item}\n />\n </Row>\n </td>\n )}\n {showRowCheckbox && (\n <td\n style={\n {\n background: stickyCheckboxColumn ? \"inherit\" : undefined,\n position: stickyCheckboxColumn ? \"sticky\" : undefined,\n left:\n enableExpandCollapse && stickyCheckboxColumn\n ? \"var(--swui-expand-cell-width)\"\n : stickyCheckboxColumn\n ? \"0px\"\n : undefined,\n textAlign: \"center\",\n boxShadow: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-z-index)\"\n : undefined,\n } as CSSProperties\n }\n >\n <Row\n width={\"var(--swui-checkbox-cell-width)\"}\n minWidth={\"var(--swui-checkbox-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n <StandardTableRowCheckbox\n disabled={disabled}\n value={isSelected}\n onValueChange={toggleSelected}\n onValueChangeAndShift={shiftAndToggleSelected}\n colIndex={colIndexOffset + (enableExpandCollapse ? 1 : 0)}\n rowIndex={rowIndex}\n numRows={numRows}\n shiftPressedRef={shiftPressedRef}\n />\n </Row>\n </td>\n )}\n {groupConfigsAndIds.map(({ groupConfig, groupId }, groupIndex) => (\n <React.Fragment key={groupId}>\n {groupConfig.columnOrder.map((columnId, index) => (\n <StandardTableCell\n key={columnId}\n columnId={columnId}\n item={item}\n colIndex={colIndexOffset + columnIndexPerColumnId[columnId]}\n rowIndex={rowIndex}\n numRows={numRows}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n index,\n groupConfig.borderLeft\n )}\n disableBorderLeft={groupIndex === 0 && index === 0}\n />\n ))}\n </React.Fragment>\n ))}\n {rowIndent && (\n <td\n style={{\n background: lastColumnBackground,\n }}\n >\n <Indent num={rowIndent} />\n </td>\n )}\n <td />\n </>\n </>\n ),\n [\n colIndexOffset,\n columnIndexPerColumnId,\n disabled,\n enableExpandCollapse,\n enableGridCell,\n firstColumnBackground,\n groupConfigsAndIds,\n isSelected,\n item,\n lastColumnBackground,\n numRows,\n rowIndent,\n rowIndex,\n shiftAndToggleSelected,\n shiftPressedRef,\n showRowCheckbox,\n stickyCheckboxColumn,\n toggleSelected,\n ]\n );\n\n return (\n <>\n <TrWithHoverBackground\n hoverBackground={hoverBackground}\n background={background}\n focusBackground={focusBackground}\n borderLeft={isExpanded ? tableBorderLeftExpanded : tableBorderLeft}\n ref={trRef}\n >\n {visible || alwaysVisible || isExpanded ? (\n content\n ) : (\n <td\n colSpan={totalNumColumns}\n style={{ height: \"var(--current-row-height)\" }}\n />\n )}\n </TrWithHoverBackground>\n <StandardTableRowExpansion item={item} />\n </>\n );\n});\n\nconst getBackgroundColor = (\n resolvedBackground:\n | string\n | undefined\n | RowBackgroundResolverColorCombination,\n isSelected: boolean,\n isExpanded: boolean\n): string => {\n if (resolvedBackground) {\n return typeof resolvedBackground === \"string\"\n ? resolvedBackground\n : resolvedBackground?.background;\n }\n if (isSelected) {\n return cssColor(\"--lhds-color-blue-100\");\n }\n if (isExpanded) {\n return tableBackgroundColorExpanded;\n }\n return \"white\";\n};\n\nconst getHoverBackgroundColor = (\n resolvedBackground:\n | string\n | undefined\n | RowBackgroundResolverColorCombination,\n isSelected: boolean,\n isExpanded: boolean\n): string | undefined => {\n if (resolvedBackground) {\n return typeof resolvedBackground === \"string\"\n ? resolvedBackground\n : resolvedBackground?.hoverBackground;\n }\n if (isSelected) {\n return cssColor(\"--lhds-color-blue-200\");\n }\n if (isExpanded) {\n return tableBackgroundHoverColorExpanded;\n }\n return cssColor(\"--lhds-color-ui-200\");\n};\n\nconst getFocusBackgroundColor = (\n resolvedBackground:\n | string\n | undefined\n | RowBackgroundResolverColorCombination,\n isSelected: boolean,\n hoverBackground: string | undefined\n): string | undefined => {\n if (isSelected) {\n return cssColor(\"--lhds-color-blue-200\");\n }\n if (resolvedBackground) {\n return hoverBackground;\n }\n return undefined;\n};\n","import { StandardTableColumnOptions } from \"../../config/StandardTableColumnConfig\";\n\nexport const isSummaryRowVisible = <TColumnKey extends string>(\n columns: Record<\n TColumnKey,\n StandardTableColumnOptions<unknown, unknown, TColumnKey>\n >\n): boolean =>\n (\n Object.values(columns) as Array<\n StandardTableColumnOptions<unknown, unknown, TColumnKey>\n >\n ).some((columnConfig) => columnHasSummaryCell(columnConfig));\n\nexport const columnHasSummaryCell = <TColumnKey extends string>(\n columnConfig: StandardTableColumnOptions<unknown, unknown, TColumnKey>\n): boolean =>\n Boolean(columnConfig.renderSummaryCell || columnConfig.summaryText);\n","import * as React from \"react\";\nimport { CSSProperties, useMemo } from \"react\";\nimport { Indent, Row, Text } from \"@stenajs-webui/core\";\nimport { getCellBorder } from \"../../../util/CellBorderCalculator\";\nimport { useColumnConfigById } from \"../../../hooks/UseColumnConfigById\";\nimport { useStickyPropsPerColumnContext } from \"../../../context/StickyPropsPerColumnContext\";\n\ninterface SummaryCellProps<TItem> {\n items: Array<TItem>;\n columnId: string;\n borderFromGroup?: boolean | string;\n disableBorderLeft: boolean;\n colSpan: number;\n}\n\nexport const SummaryCell = React.memo(function SummaryCell<TItem>({\n columnId,\n items,\n disableBorderLeft,\n borderFromGroup,\n colSpan,\n}: SummaryCellProps<TItem>) {\n const stickyPropsPerColumnContext = useStickyPropsPerColumnContext();\n const {\n renderSummaryCell,\n summaryText,\n borderLeft,\n zIndex,\n width,\n minWidth,\n justifyContentCell,\n } = useColumnConfigById(columnId);\n\n const activeBorderLeft = getCellBorder(\n borderFromGroup,\n disableBorderLeft,\n borderLeft\n );\n\n const stickyProps = stickyPropsPerColumnContext[columnId];\n\n const currentZIndex = stickyProps.sticky\n ? zIndex ?? \"var(--swui-sticky-column-z-index)\"\n : zIndex ?? 1;\n\n const shadow =\n stickyProps.sticky &&\n stickyProps.type === \"last-group\" &&\n stickyProps.isFirstColumnInLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky && stickyProps.type === \"column\" && stickyProps.right\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined;\n\n const text = useMemo(() => summaryText?.({ items }), [items, summaryText]);\n const renderResult = useMemo(\n () => renderSummaryCell?.({ items, text }),\n [items, renderSummaryCell, text]\n );\n\n return (\n <td\n colSpan={colSpan}\n style={{\n borderLeft: activeBorderLeft,\n position: stickyProps.sticky ? \"sticky\" : undefined,\n left: stickyProps.sticky ? stickyProps.left : undefined,\n right: stickyProps.sticky ? stickyProps.right : undefined,\n boxShadow: shadow,\n zIndex: currentZIndex as CSSProperties[\"zIndex\"],\n height: \"var(--current-row-height)\",\n }}\n >\n <Row\n width={width}\n minWidth={minWidth}\n height={\"inherit\"}\n overflow={\"hidden\"}\n justifyContent={justifyContentCell}\n alignItems={\"center\"}\n >\n {renderSummaryCell ? (\n renderResult\n ) : (\n <Indent>\n <Text variant={\"bold\"}>{text}</Text>\n </Indent>\n )}\n </Row>\n </td>\n );\n});\n","export interface ColumnIdAndColSpan<TColumnKey extends string> {\n columnId: TColumnKey;\n colSpan: number;\n}\n\nexport const getColumnsLimitedWithColSpan = <TColumnKey extends string>(\n columnOrder: Array<TColumnKey>,\n columns: Record<TColumnKey, { summaryCellColSpan?: number }>\n): Array<ColumnIdAndColSpan<TColumnKey>> => {\n const list: Array<ColumnIdAndColSpan<TColumnKey>> = [];\n for (let i = 0; i < columnOrder.length; i++) {\n const { summaryCellColSpan } = columns[columnOrder[i]];\n const realColSpan = Math.min(\n summaryCellColSpan ?? 1,\n columnOrder.length - i\n );\n list.push({ columnId: columnOrder[i], colSpan: realColSpan });\n const colSpan = summaryCellColSpan ?? 1;\n if (colSpan > 1) {\n i += colSpan - 1;\n }\n }\n return list;\n};\n","import * as React from \"react\";\nimport { useGroupConfigsAndIdsForRows } from \"../../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableConfig } from \"../../../hooks/UseStandardTableConfig\";\nimport styles from \"./StandardTableSummaryRow.module.css\";\nimport { getCellBorderFromGroup } from \"../../../util/CellBorderCalculator\";\nimport { SummaryCell } from \"./SummaryCell\";\nimport { getColumnsLimitedWithColSpan } from \"../SummaryCellColSpanCalculator\";\nimport { Indent } from \"@stenajs-webui/core\";\n\ninterface StandardTableSummaryRowProps<TItem> {\n items: Array<TItem>;\n}\n\nexport const StandardTableSummaryRow = React.memo(\n function StandardTableSummaryRow<TItem>({\n items,\n }: StandardTableSummaryRowProps<TItem>) {\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n const { showRowCheckbox, enableExpandCollapse, columns, rowIndent } =\n useStandardTableConfig();\n\n return (\n <tr className={styles.summaryRow}>\n {rowIndent && (\n <td>\n <Indent num={rowIndent} />\n </td>\n )}\n {enableExpandCollapse && <td />}\n {showRowCheckbox && <td />}\n {groupConfigsAndIds.map(({ groupConfig, groupId }, groupIndex) => (\n <React.Fragment key={groupId}>\n {getColumnsLimitedWithColSpan(groupConfig.columnOrder, columns).map(\n ({ columnId, colSpan }, index) => {\n return (\n <SummaryCell\n key={columnId}\n colSpan={colSpan}\n columnId={columnId}\n items={items}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n index,\n groupConfig.borderLeft\n )}\n disableBorderLeft={groupIndex === 0 && index === 0}\n />\n );\n }\n )}\n </React.Fragment>\n ))}\n {rowIndent && (\n <td>\n <Indent num={rowIndent} />\n </td>\n )}\n <td />\n </tr>\n );\n }\n);\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { isSummaryRowVisible } from \"../SummaryRowVisibilityCalculator\";\nimport { useStandardTableConfig } from \"../../../hooks/UseStandardTableConfig\";\nimport { StandardTableSummaryRow } from \"./StandardTableSummaryRow\";\n\ninterface SummaryRowSwitcherProps<TItem> {\n items: Array<TItem>;\n}\n\nexport const SummaryRowSwitcher = function SummaryRowSwitcher<TItem>({\n items,\n}: SummaryRowSwitcherProps<TItem>) {\n const { columns } = useStandardTableConfig();\n const visible = useMemo(() => isSummaryRowVisible(columns), [columns]);\n\n if (!visible) {\n return null;\n }\n\n return <StandardTableSummaryRow items={items} />;\n};\n","export type ItemFilterFunc<TItem> = (item: TItem) => boolean;\n\nexport const filterItemsOnEnabledCheckboxes =\n <TItem>(\n checkboxDisabledResolver?: (item: TItem) => boolean\n ): ItemFilterFunc<TItem> =>\n (item: TItem) =>\n checkboxDisabledResolver?.(item) ? false : true ?? true;\n","import * as React from \"react\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport { multitypeComparator } from \"../features/sorting/MultitypeComparator\";\nimport { useColumnValueResolver } from \"../hooks/UseColumnValueResolver\";\nimport {\n useStandardTableConfig,\n useStandardTableState,\n} from \"../hooks/UseStandardTableConfig\";\nimport { StandardTableVariant } from \"./StandardTable\";\nimport { StandardTableRow } from \"./StandardTableRow\";\nimport { SummaryRowSwitcher } from \"../features/summary-row/components/SummaryRowSwitcher\";\nimport { filterItemsOnEnabledCheckboxes } from \"../util/FilterItemsOnEnabledCheckboxes\";\n\ninterface StandardTableContentProps<TItem> {\n items?: Array<TItem>;\n colIndexOffset?: number;\n rowIndexOffset?: number;\n variant: StandardTableVariant;\n}\n\nexport const StandardTableRowList = React.memo(function StandardTableRowList<\n TItem\n>({\n items,\n colIndexOffset = 0,\n rowIndexOffset = 0,\n}: StandardTableContentProps<TItem>) {\n /**\n * This ref is used to force rerender of rows.\n * This is needed because intersection observer API doesn't correctly trigger for all\n * rows after sorting.\n */\n const sortCounterRef = useRef(0);\n\n const shiftPressedRef = useRef(false);\n\n const {\n keyResolver,\n disableInfiniteList,\n checkboxDisabledResolver,\n enableExternalSorting,\n } = useStandardTableConfig();\n const {\n sortOrder: { sortBy, desc },\n } = useStandardTableState();\n\n const valueResolver = useColumnValueResolver(sortBy);\n\n const sortedItems = useMemo(() => {\n if (enableExternalSorting) {\n return items ?? [];\n }\n if (!items || !items.length) {\n return [];\n }\n if (!valueResolver) {\n return items;\n }\n\n const sortedList = [...items];\n sortedList.sort((a, b) =>\n multitypeComparator(valueResolver(a) as any, valueResolver(b) as any)\n );\n if (desc) {\n sortedList.reverse();\n }\n if (!disableInfiniteList) {\n sortCounterRef.current++;\n }\n return sortedList;\n }, [enableExternalSorting, items, valueResolver, desc, disableInfiniteList]);\n\n const idListForEnabledItems = useMemo(\n () =>\n sortedItems\n .filter(filterItemsOnEnabledCheckboxes(checkboxDisabledResolver))\n .map((l) => keyResolver(l)),\n [sortedItems, checkboxDisabledResolver, keyResolver]\n );\n\n useEffect(() => {\n const keyUp = (ev: KeyboardEvent) => {\n if (ev.key === \"Shift\") {\n shiftPressedRef.current = false;\n }\n };\n\n const keyDown = (ev: KeyboardEvent) => {\n if (ev.key === \"Shift\") {\n shiftPressedRef.current = true;\n }\n };\n\n document.addEventListener(\"keyup\", keyUp);\n document.addEventListener(\"keydown\", keyDown);\n return () => {\n document.removeEventListener(\"keyup\", keyUp);\n document.removeEventListener(\"keydown\", keyDown);\n };\n }, []);\n\n return (\n <React.Fragment key={sortCounterRef.current}>\n {sortedItems.map((item, index) => (\n <StandardTableRow\n alwaysVisible={disableInfiniteList || sortedItems.length < 30}\n item={item}\n idListForEnabledItems={idListForEnabledItems}\n key={keyResolver(item)}\n colIndexOffset={colIndexOffset}\n rowIndex={index + rowIndexOffset}\n numRows={sortedItems.length}\n shiftPressedRef={shiftPressedRef}\n />\n ))}\n <SummaryRowSwitcher items={sortedItems} />\n </React.Fragment>\n );\n});\n","import { Box, Row, Spacing } from \"@stenajs-webui/core\";\nimport { Banner, ResultListBanner } from \"@stenajs-webui/elements\";\nimport { LoadingScreen } from \"@stenajs-webui/panels\";\nimport * as React from \"react\";\nimport { useTotalNumColumns } from \"../context/TotalNumColumnsContext\";\nimport { StandardTableProps, StandardTableVariant } from \"./StandardTable\";\nimport { StandardTableRowList } from \"./StandardTableRowList\";\n\ninterface Props<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Omit<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"tableContext\" | \"config\"\n > {\n variant: StandardTableVariant;\n}\n\nexport const StandardTableContent = React.memo(function StandardTableContent<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n error,\n bannerError,\n loading,\n items,\n noItemsLabel = \"There is no data available.\",\n noItemsContentRight,\n noItemsContentBottom,\n noItemsHeader,\n colIndexOffset,\n rowIndexOffset,\n variant,\n errorLabel,\n}: Props<TItem, TColumnKey, TColumnGroupKey>) {\n const totalNumColumns = useTotalNumColumns();\n\n if (bannerError) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Spacing num={4} justifyContent={\"center\"}>\n <Box alignItems={\"center\"}>\n <ResultListBanner bannerState={bannerError} variant={\"error\"} />\n </Box>\n </Spacing>\n </td>\n </tr>\n </tbody>\n );\n }\n\n if (error || errorLabel) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Spacing num={4} justifyContent={\"center\"}>\n <Box alignItems={\"center\"}>\n <Banner\n headerText={\n (error ? error.message : errorLabel) ?? \"Unknown error\"\n }\n variant={\"error\"}\n />\n </Box>\n </Spacing>\n </td>\n </tr>\n </tbody>\n );\n }\n\n if (loading) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Spacing num={4}>\n <LoadingScreen />\n </Spacing>\n </td>\n </tr>\n </tbody>\n );\n }\n\n if (!items || !items.length) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Row spacing={4} justifyContent={\"center\"}>\n <Banner\n text={noItemsLabel}\n headerText={noItemsHeader}\n contentRight={noItemsContentRight}\n variant={\"info\"}\n >\n {noItemsContentBottom}\n </Banner>\n </Row>\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody>\n <StandardTableRowList\n variant={variant}\n items={items}\n colIndexOffset={colIndexOffset}\n rowIndexOffset={rowIndexOffset}\n />\n </tbody>\n );\n});\n","import { useCallback } from \"react\";\nimport {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { filterItemsOnEnabledCheckboxes } from \"../../util/FilterItemsOnEnabledCheckboxes\";\n\nexport const useTableHeadCheckbox = <TItem>(\n items: Array<TItem> | undefined\n) => {\n const { keyResolver, checkboxDisabledResolver } = useStandardTableConfig();\n const {\n selectedIds: { selectedIds },\n } = useStandardTableState();\n const {\n actions: { setSelectedIds, clearSelection },\n dispatch,\n } = useStandardTableActions();\n\n const selectionIsEmpty = selectedIds.length === 0;\n\n const allItemsAreSelected = !items\n ? false\n : items.length > 0 && selectedIds.length === items.length;\n\n const onClickCheckbox = useCallback(() => {\n if (items) {\n if (selectionIsEmpty) {\n dispatch(\n setSelectedIds(\n items\n .filter(filterItemsOnEnabledCheckboxes(checkboxDisabledResolver))\n .map((item) => keyResolver(item))\n )\n );\n } else {\n dispatch(clearSelection());\n }\n }\n }, [\n items,\n selectionIsEmpty,\n dispatch,\n setSelectedIds,\n checkboxDisabledResolver,\n keyResolver,\n clearSelection,\n ]);\n\n return {\n selectionIsEmpty,\n allItemsAreSelected,\n onClickCheckbox,\n };\n};\n","import { useCallback } from \"react\";\nimport {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\n\nexport const useTableHeadExpandCollapse = <TItem>(\n items: Array<TItem> | undefined\n) => {\n const { keyResolver } = useStandardTableConfig();\n const {\n expandedRows: { selectedIds },\n } = useStandardTableState();\n const {\n actions: { collapseAll, expandByIds },\n dispatch,\n } = useStandardTableActions();\n\n const allItemsAreExpanded = !items\n ? false\n : items.length > 0 && selectedIds.length === items.length;\n\n const toggleExpanded = useCallback(() => {\n if (items) {\n if (allItemsAreExpanded) {\n dispatch(collapseAll());\n } else {\n dispatch(expandByIds(items.map((item) => keyResolver(item))));\n }\n }\n }, [\n allItemsAreExpanded,\n collapseAll,\n dispatch,\n items,\n keyResolver,\n expandByIds,\n ]);\n\n return {\n allItemsAreExpanded,\n toggleExpanded: toggleExpanded,\n };\n};\n","import { useMemo } from \"react\";\nimport { SortOrderDirection } from \"../../../table-ui/components/table/SortOrderIcon\";\nimport { useOnSortOrderChangeContext } from \"../../context/OnSortOrderChangeContext\";\nimport {\n useStandardTableActions,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\n\ninterface Result {\n selected: boolean;\n desc: boolean;\n arrow: SortOrderDirection | undefined;\n onClickColumnHead: () => void;\n}\n\nexport const useTableSortHeader = (columnId: string): Result => {\n const { dispatch, actions } = useStandardTableActions();\n const onSortOrderChange = useOnSortOrderChangeContext();\n const {\n sortOrder: { desc, sortBy },\n } = useStandardTableState();\n\n return useMemo(() => {\n const selected = columnId === sortBy;\n\n return {\n arrow: selected ? (desc ? \"up\" : \"down\") : undefined,\n selected,\n desc,\n onClickColumnHead: () => {\n const d = selected ? !desc : false;\n dispatch(actions.sortBy(columnId, d));\n onSortOrderChange?.(columnId, d);\n },\n };\n }, [columnId, sortBy, desc, dispatch, actions, onSortOrderChange]);\n};\n","import * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport {\n TableHeadItem,\n TableHeadProps,\n} from \"../../table-ui/components/table/TableHeadItem\";\nimport { useStickyPropsPerColumnContext } from \"../context/StickyPropsPerColumnContext\";\nimport { useTableSortHeader } from \"../features/sorting/UseTableSortHeader\";\nimport { useColumnConfigById } from \"../hooks/UseColumnConfigById\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorder } from \"../util/CellBorderCalculator\";\nimport { formatColumnIdToHeaderCellLabel } from \"../util/LabelFormatter\";\n\nexport interface StandardTableHeaderItemProps {\n columnId: string;\n disableBorderLeft?: boolean;\n borderFromGroup?: boolean | string;\n stickyHeader?: boolean;\n top?: string | number;\n appendTooltipTo?: TableHeadProps[\"appendTooltipTo\"];\n}\n\nexport const StandardTableHeadItem = React.memo(\n function StandardTableHeaderItem({\n columnId,\n borderFromGroup,\n disableBorderLeft,\n stickyHeader,\n top,\n appendTooltipTo,\n }: StandardTableHeaderItemProps) {\n const {\n justifyContentHeader,\n columnLabel,\n borderLeft,\n infoIconTooltipText,\n background,\n zIndex,\n sortOrderIconVariant,\n width,\n minWidth,\n } = useColumnConfigById(columnId);\n const {\n disableSorting,\n sortOrderIconVariant: defaultSortOrderIconVariant,\n } = useStandardTableConfig();\n const stickyPropsPerColumnContext = useStickyPropsPerColumnContext();\n\n const { arrow, selected, onClickColumnHead } = useTableSortHeader(columnId);\n\n const label =\n typeof columnLabel === \"string\"\n ? columnLabel\n : formatColumnIdToHeaderCellLabel(columnId);\n\n const activeBorderLeft = getCellBorder(\n borderFromGroup,\n disableBorderLeft,\n borderLeft\n );\n\n const stickyProps = stickyPropsPerColumnContext[columnId];\n\n return (\n <th\n style={{\n background: background ?? \"white\",\n borderLeft: activeBorderLeft,\n position: stickyHeader || stickyProps.sticky ? \"sticky\" : undefined,\n left: stickyProps.left,\n right: stickyProps.right,\n top: top,\n boxShadow:\n stickyProps.sticky &&\n stickyProps.isFirstColumnInLastGroup &&\n stickyHeader\n ? \"var(--swui-sticky-header-shadow-and-left)\"\n : stickyProps.sticky && stickyProps.isFirstColumnInLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyHeader && stickyProps.sticky\n ? \"var(--swui-sticky-header-shadow-and-right)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-shadow)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex: (stickyHeader && stickyProps.sticky\n ? \"var(--swui-sticky-header-in-sticky-column-z-index)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-z-index)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-group-header-z-index)\"\n : zIndex) as CSSProperties[\"zIndex\"],\n height: 0, // CSS trick to force TableHeadItem to use 100% height\n width,\n minWidth,\n }}\n >\n <TableHeadItem\n width={\"inherit\"}\n minWidth={\"inherit\"}\n arrow={!disableSorting && label ? arrow : undefined}\n onClick={!disableSorting ? onClickColumnHead : undefined}\n label={label}\n infoIconTooltipText={infoIconTooltipText}\n alignRight={justifyContentHeader === \"flex-end\"}\n sortOrderIconVariant={\n sortOrderIconVariant ?? defaultSortOrderIconVariant\n }\n appendTooltipTo={appendTooltipTo}\n selected={selected}\n height={\"100%\"}\n />\n </th>\n );\n }\n);\n","import { faChevronDown } from \"@fortawesome/free-solid-svg-icons/faChevronDown\";\nimport { faChevronRight } from \"@fortawesome/free-solid-svg-icons/faChevronRight\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { Checkbox } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport {\n defaultTableRowHeight,\n tableBorderLeft,\n} from \"../../../config/TableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { useColumnGroupOrderContext } from \"../context/StandardTableColumnOrderContext\";\nimport { useTableHeadCheckbox } from \"../features/checkboxes/UseTableHeadCheckbox\";\nimport { useTableHeadExpandCollapse } from \"../features/expand-collapse/UseTableHeadExpandCollapse\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorderFromGroup } from \"../util/CellBorderCalculator\";\nimport { StandardTableHeadItem } from \"./StandardTableHeadItem\";\nimport { TrWithHoverBackground } from \"./TrWithHoverBackground\";\nimport { TableHeadProps } from \"../../table-ui/components/table/TableHeadItem\";\n\ninterface StandardTableHeaderProps<TItem> {\n items?: Array<TItem>;\n height?: string;\n appendTooltipTo?: TableHeadProps[\"appendTooltipTo\"];\n}\n\nconst getTopPosition = (\n headerRowOffsetTop: string | undefined,\n columnGroupOrder: Array<string> | undefined,\n height: string,\n stickyHeader: boolean | undefined\n): CSSProperties[\"top\"] => {\n if (headerRowOffsetTop && columnGroupOrder !== undefined) {\n return `calc(${headerRowOffsetTop} + ${height})`;\n } else if (stickyHeader && columnGroupOrder) {\n return `calc(0px + ${height})`;\n } else if (headerRowOffsetTop) {\n return headerRowOffsetTop;\n } else if (stickyHeader) {\n return 0;\n }\n return undefined;\n};\n\nexport const StandardTableHeadRow = React.memo(function StandardTableHeadRow<\n TItem\n>({\n items,\n appendTooltipTo,\n height = defaultTableRowHeight,\n}: StandardTableHeaderProps<TItem>) {\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n\n const {\n showHeaderCheckbox,\n showHeaderExpandCollapse,\n enableExpandCollapse,\n rowIndent,\n headerRowOffsetTop,\n zIndex,\n stickyHeader,\n stickyCheckboxColumn,\n showRowCheckbox,\n } = useStandardTableConfig();\n\n const columnGroupOrder = useColumnGroupOrderContext();\n\n const { allItemsAreExpanded, toggleExpanded } =\n useTableHeadExpandCollapse(items);\n const { allItemsAreSelected, onClickCheckbox, selectionIsEmpty } =\n useTableHeadCheckbox(items);\n\n const checkboxDisabled = !items || items.length === 0;\n\n const stickyHeaderStyle: CSSProperties = {\n zIndex: (stickyHeader && stickyCheckboxColumn\n ? \"var(--swui-sticky-header-in-sticky-column-z-index)\"\n : stickyCheckboxColumn\n ? \"var(--swui-sticky-group-header-z-index)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-z-index)\"\n : zIndex) as CSSProperties[\"zIndex\"],\n top: getTopPosition(\n headerRowOffsetTop,\n columnGroupOrder,\n height,\n stickyHeader\n ),\n background: stickyHeader || stickyCheckboxColumn ? \"white\" : undefined,\n position: stickyHeader || stickyCheckboxColumn ? \"sticky\" : undefined,\n boxShadow:\n stickyHeader && stickyCheckboxColumn\n ? \"var(--swui-sticky-header-shadow-and-right)\"\n : stickyCheckboxColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-shadow)\"\n : undefined,\n };\n\n return (\n <TrWithHoverBackground height={height} borderLeft={tableBorderLeft}>\n {rowIndent && (\n <th style={stickyHeaderStyle}>\n <Row indent={rowIndent} />\n </th>\n )}\n {enableExpandCollapse && (\n <th\n style={{\n ...stickyHeaderStyle,\n left: \"0px\",\n textAlign: \"left\",\n }}\n >\n <Row\n width={\"var(--swui-expand-cell-width)\"}\n minWidth={\"var(--swui-expand-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n {showHeaderExpandCollapse && (\n <FlatButton\n size={\"small\"}\n leftIcon={allItemsAreExpanded ? faChevronDown : faChevronRight}\n onClick={toggleExpanded}\n />\n )}\n </Row>\n </th>\n )}\n {(showRowCheckbox || showHeaderCheckbox) && (\n <th\n style={{\n ...stickyHeaderStyle,\n overflow: \"hidden\",\n left:\n stickyCheckboxColumn && enableExpandCollapse\n ? \"var(--swui-expand-cell-width)\"\n : stickyCheckboxColumn\n ? \"0px\"\n : undefined,\n }}\n >\n <Row\n width={\"var(--swui-checkbox-cell-width)\"}\n minWidth={\"var(--swui-checkbox-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n {showHeaderCheckbox && (\n <Checkbox\n size={\"small\"}\n disabled={checkboxDisabled}\n value={allItemsAreSelected}\n indeterminate={!selectionIsEmpty && !allItemsAreSelected}\n onValueChange={onClickCheckbox}\n />\n )}\n </Row>\n </th>\n )}\n {groupConfigsAndIds.map(({ groupConfig, groupId }, groupIndex) => {\n return (\n <React.Fragment key={groupId}>\n {groupConfig.columnOrder.map((columnId, index) => {\n return (\n <StandardTableHeadItem\n columnId={columnId}\n key={columnId}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n index,\n groupConfig.borderLeft\n )}\n disableBorderLeft={groupIndex === 0 && index === 0}\n stickyHeader={stickyHeader}\n top={stickyHeaderStyle.top}\n appendTooltipTo={appendTooltipTo}\n />\n );\n })}\n </React.Fragment>\n );\n })}\n {rowIndent && (\n <th style={stickyHeaderStyle}>\n <Row indent={rowIndent} />\n </th>\n )}\n <th style={stickyHeaderStyle} />\n </TrWithHoverBackground>\n );\n});\n","import { ResultListBannerState } from \"@stenajs-webui/elements\";\nimport { ErrorScreen } from \"@stenajs-webui/panels\";\nimport cx from \"classnames\";\nimport * as React from \"react\";\nimport { CSSProperties, ReactNode, useId, useMemo } from \"react\";\nimport { StandardTableConfig } from \"../config/StandardTableConfig\";\nimport { GroupConfigsAndIdsForRowsContext } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { OnKeyDownContext } from \"../context/OnKeyDownContext\";\nimport { OnSortOrderChangeContext } from \"../context/OnSortOrderChangeContext\";\nimport {\n StandardTableColumnGroupOrderContext,\n StandardTableUsingColumnGroupsContext,\n} from \"../context/StandardTableColumnOrderContext\";\nimport {\n StandardTableActionsContext,\n StandardTableConfigContext,\n StandardTableInternalActionsContext,\n StandardTableStateContext,\n StandardTableTableIdContext,\n TableContext,\n} from \"../context/StandardTableStateContext\";\nimport { StandardTableVariantContext } from \"../context/StandardTableVariantContext\";\nimport { StickyPropsPerColumnContext } from \"../context/StickyPropsPerColumnContext\";\nimport { TotalNumColumnsContext } from \"../context/TotalNumColumnsContext\";\nimport { createGroupConfigAndIdsForRows } from \"../features/column-groups/ColumnGroupFactory\";\nimport { ColumnGroupRow } from \"../features/column-groups/ColumnGroupRow\";\nimport { calculateColumnIndexPerColumnId } from \"../features/column-index-per-column-id/ColumnIndexCalculator\";\nimport { ColumnIndexPerColumnIdContext } from \"../features/column-index-per-column-id/ColumnIndexPerColumnIdContext\";\nimport { ensureConfigHasValidSticky } from \"../features/sticky-columns/StickyColumnGroupValidator\";\nimport { getStickyPropsPerColumn } from \"../features/sticky-columns/StickyPropsPerColumnCalculator\";\nimport { useLocalStateTableContext } from \"../hooks/UseLocalStateTableContext\";\nimport { createStandardTableInitialState } from \"../redux/StandardTableReducer\";\nimport {\n StandardTableOnKeyDown,\n StandardTableOnSortOrderChange,\n} from \"../types/StandardTableEvents\";\nimport { getTotalNumColumns } from \"../util/ColumnCounter\";\nimport { ColGroups } from \"./ColGroups\";\nimport styles from \"./StandardTable.module.css\";\nimport { StandardTableContent } from \"./StandardTableContent\";\nimport { StandardTableHeadRow } from \"./StandardTableHeadRow\";\nimport { TableHeadProps } from \"../../table-ui/components/table/TableHeadItem\";\n\nexport interface StandardTableProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> {\n /**\n * Variant of table\n */\n variant?: StandardTableVariant;\n\n /**\n * The tableId, which is passed to useGridCell.\n * Optional, defaults to generated id.\n */\n tableId?: string;\n\n /**\n * Number that is added to rowIndex in useGridCell.\n * This makes it possible to navigate between two tables, when used in combination\n * with tableId.\n */\n rowIndexOffset?: number;\n\n /**\n * Number that is added to colIndex in useGridCell.\n * This makes it possible to navigate between two tables, when used in combination\n * with tableId.\n */\n colIndexOffset?: number;\n\n /**\n * Config for the table. Required.\n */\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>;\n\n /**\n * Append tooltip to HTML element. This prop is passed to Tippy.\n * This is useful to solve z-index problems.\n */\n appendTooltipTo?: TableHeadProps[\"appendTooltipTo\"];\n\n /**\n * Items to list in the table.\n */\n items?: Array<TItem>;\n error?: Error;\n loading?: boolean;\n\n /**\n * Content right in banner shown when there are no items.\n */\n noItemsContentRight?: ReactNode;\n\n /**\n * Content bottom in banner shown when there are no items.\n */\n noItemsContentBottom?: ReactNode;\n\n /**\n * Header in banner shown when there are no items.\n */\n noItemsHeader?: string;\n\n /**\n * Message displayed when there are no items to display, and it is not loading or has error.\n */\n noItemsLabel?: string;\n\n /**\n * Data used to populate the ResultListBanner component.\n */\n bannerError?: ResultListBannerState;\n\n /**\n * Message displayed when there is an error.\n */\n errorLabel?: string;\n\n /**\n * TableContext, containing state, actions and dispatch. Makes it possible to connect Redux.\n * This is optional and falls back to internal useReducer if omitted.\n */\n tableContext?: TableContext<TColumnKey>;\n\n /**\n * The order of columns. If set, it overrides the order set in the config.\n */\n columnOrder?: Array<TColumnKey>;\n\n /**\n * The order of column groups. If set, it overrides the order set in the config.\n */\n columnGroupOrder?: Array<TColumnGroupKey>;\n\n /**\n * onKeyDown for the table. First argument is the event, second argument is\n * an object that contains columnId and item for the focused cell.\n */\n onKeyDown?: StandardTableOnKeyDown<TItem, TColumnKey>;\n\n /**\n * Event listener for when user changes the sort order.\n * This is triggered when user clicks on the table headers, even if using external sorting.\n */\n onSortOrderChange?: StandardTableOnSortOrderChange<TColumnKey>;\n}\n\nexport type StandardTableVariant =\n | \"relaxed\"\n | \"standard\"\n | \"condensed\"\n | \"compact\";\n\nexport const StandardTable = function StandardTable<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n tableContext,\n config,\n columnOrder,\n columnGroupOrder,\n tableId,\n variant = \"standard\",\n onKeyDown,\n onSortOrderChange,\n appendTooltipTo,\n ...props\n}: StandardTableProps<TItem, TColumnKey, TColumnGroupKey>) {\n const generatedTableId = useId();\n const {\n initialSortOrderDesc,\n initialSortOrder,\n enableExpandCollapse,\n stickyCheckboxColumn,\n } = config;\n\n const { tableContext: localTableContext } = useLocalStateTableContext(\n tableId ?? generatedTableId,\n createStandardTableInitialState(initialSortOrder, initialSortOrderDesc)\n );\n\n const currentTableContext = tableContext || localTableContext;\n\n const { state, actions, dispatch } = currentTableContext;\n\n const actionsContext = useMemo<\n StandardTableInternalActionsContext<TColumnKey>\n >(\n () => ({\n actions,\n dispatch,\n }),\n [actions, dispatch]\n );\n\n const usingColumnGroups = Boolean(\n columnGroupOrder ?? \"columnGroupOrder\" in config\n );\n\n const columnGroupsFromConfig =\n \"columnGroups\" in config ? config.columnGroups : undefined;\n const columnGroupOrderFromConfig =\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined;\n const columnOrderFromConfig =\n \"columnOrder\" in config ? config.columnOrder : undefined;\n\n const groupConfigsForRows = useMemo(\n () =>\n createGroupConfigAndIdsForRows<TItem, TColumnKey, TColumnGroupKey>(\n columnGroupsFromConfig,\n columnGroupOrderFromConfig,\n columnOrderFromConfig\n ),\n [columnGroupsFromConfig, columnGroupOrderFromConfig, columnOrderFromConfig]\n );\n\n const columnIndexPerColumnId = useMemo(\n () => calculateColumnIndexPerColumnId(config),\n [config]\n );\n\n const totalNumColumns = useMemo(() => getTotalNumColumns(config), [config]);\n\n const stickyPropsPerColumnContext = useMemo(\n () => getStickyPropsPerColumn(config),\n [config]\n );\n\n const validationError = useMemo(() => {\n try {\n ensureConfigHasValidSticky(config);\n return undefined;\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n return new Error(\"Unknown error\");\n }\n }, [config]);\n\n if (validationError) {\n return <ErrorScreen text={validationError.message} />;\n }\n\n return (\n <table\n className={cx(styles.standardTable, styles[variant])}\n style={\n {\n width: \"100%\",\n isolation: \"isolate\",\n \"--current-left-offset\":\n enableExpandCollapse && stickyCheckboxColumn\n ? \"calc(var(--swui-expand-cell-width) + var(--swui-checkbox-cell-width))\"\n : stickyCheckboxColumn\n ? \"var(--swui-checkbox-cell-width)\"\n : enableExpandCollapse\n ? \"var(--swui-expand-cell-width)\"\n : \"0px\",\n } as CSSProperties\n }\n >\n <StickyPropsPerColumnContext.Provider value={stickyPropsPerColumnContext}>\n <TotalNumColumnsContext.Provider value={totalNumColumns}>\n <StandardTableVariantContext.Provider value={variant}>\n <StandardTableTableIdContext.Provider\n value={tableId ?? generatedTableId}\n >\n <StandardTableStateContext.Provider value={state}>\n <StandardTableActionsContext.Provider value={actionsContext}>\n <StandardTableConfigContext.Provider value={config}>\n <GroupConfigsAndIdsForRowsContext.Provider\n value={groupConfigsForRows}\n >\n <ColumnIndexPerColumnIdContext.Provider\n value={columnIndexPerColumnId}\n >\n <StandardTableUsingColumnGroupsContext.Provider\n value={usingColumnGroups}\n >\n <StandardTableColumnGroupOrderContext.Provider\n value={\n \"columnGroupOrder\" in config\n ? columnGroupOrder ?? config.columnGroupOrder\n : columnGroupOrder\n }\n >\n <ColGroups />\n <OnKeyDownContext.Provider value={onKeyDown}>\n <OnSortOrderChangeContext.Provider\n value={onSortOrderChange}\n >\n <thead>\n {(columnGroupOrder ||\n \"columnGroupOrder\" in config) && (\n <ColumnGroupRow\n height={\"var(--current-row-height)\"}\n />\n )}\n <StandardTableHeadRow\n items={props.items}\n height={\"var(--current-row-height)\"}\n appendTooltipTo={appendTooltipTo}\n />\n </thead>\n <StandardTableContent\n variant={variant}\n {...props}\n />\n </OnSortOrderChangeContext.Provider>\n </OnKeyDownContext.Provider>\n </StandardTableColumnGroupOrderContext.Provider>\n </StandardTableUsingColumnGroupsContext.Provider>\n </ColumnIndexPerColumnIdContext.Provider>\n </GroupConfigsAndIdsForRowsContext.Provider>\n </StandardTableConfigContext.Provider>\n </StandardTableActionsContext.Provider>\n </StandardTableStateContext.Provider>\n </StandardTableTableIdContext.Provider>\n </StandardTableVariantContext.Provider>\n </TotalNumColumnsContext.Provider>\n </StickyPropsPerColumnContext.Provider>\n </table>\n );\n};\n","import { ReactNode } from \"react\";\nimport {\n UseGridCellOptions,\n UseGridCellResult,\n} from \"../../grid-cell/hooks/UseGridCell\";\nimport { SortOrderIconVariant } from \"../../table-ui/components/table/SortOrderIcon\";\nimport { StandardTableOnKeyDownArgs } from \"./StandardTableConfig\";\nimport * as React from \"react\";\n\nexport type StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey extends string\n> = StandardTableColumnOptions<TItem, TItemValue, TColumnKey> &\n StandardTableColumnOptionsWithNoGroups &\n ItemValueResolver<TItem, TItemValue>;\n\nexport type StandardTableColumnConfigWithGroups<\n TItem,\n TItemValue,\n TColumnKey extends string\n> = StandardTableColumnOptions<TItem, TItemValue, TColumnKey> &\n ItemValueResolver<TItem, TItemValue>;\n\nexport interface StandardTableColumnOptionsWithNoGroups {\n /**\n * Enable sticky behaviour to the left make elements scroll in behind this column.\n * If neither left nor right is specified, it defaults to left: 0px.\n */\n sticky?: boolean;\n\n /**\n * Set a custom z index\n */\n zIndex?: number;\n\n /**\n * Offset column from left (ex if we have multiple sticky columns)\n */\n left?: string;\n\n /**\n * Offset column from right (ex if we have multiple sticky columns)\n */\n right?: string;\n}\n\nexport interface StandardTableColumnOptions<\n TItem,\n TItemValue,\n TColumnKey extends string\n> {\n /**\n * The header label of the column.\n */\n columnLabel?: string;\n\n /**\n * This shows a tooltip on the left side of the column header label.\n */\n infoIconTooltipText?: string;\n\n /**\n * The min-width of the column.\n */\n minWidth?: string;\n\n /**\n * The width of the column.\n */\n width?: string;\n\n /**\n * Custom renderer for the cell. Falls back to an internal renderer that uses String(item[field]).\n */\n renderCell?: StandardTableCellRenderer<TItemValue, TItem>;\n\n /**\n * Adds a static background color to the column.\n */\n background?: string;\n\n /**\n * Adds a dynamic background color to the column, based on the item.\n */\n backgroundResolver?: BackgroundResolver<TItem>;\n\n /**\n * Adds a border on the left side of the column. Can be a boolean, is a border CSS value.\n */\n borderLeft?: string | boolean;\n\n /**\n * Justify content for the header. Defaults to flex-start, which aligns the label to the left.\n */\n justifyContentHeader?: string;\n\n /**\n * Justify content for the cell. Defaults to flex-start, which aligns the cell content to the left.\n */\n justifyContentCell?: string;\n\n /**\n * A custom label formatter. This is applied after sorting, and before renderCell.\n * Useful for formatting dates for example.\n * @param value\n */\n itemLabelFormatter?: (value: TItemValue, item: TItem) => string;\n\n /**\n * Specifies if the cell is editable. Used together with gridCellEnabled.\n * Defaults to false. Can be a boolean or a resolver.\n */\n isEditable?: boolean | ((item: TItem) => boolean);\n\n /**\n * The onChange callback when isEditable is true.\n * @param item\n * @param value\n */\n onChange?: (item: TItem, value: string | undefined) => void;\n\n /**\n * The onKeyDown callback on the HTML element with focus.\n * @param ev\n * @param args\n */\n onKeyDown?: (\n ev: React.KeyboardEvent<HTMLDivElement>,\n args: StandardTableOnKeyDownArgs<TItem, TColumnKey>\n ) => void;\n\n /**\n * Disables the grid cell functionality for this column.\n * If enable, the user can no longer navigate to or from this column with arrow keys.\n * Focus highlight on the cell is also disabled.\n */\n disableGridCell?: boolean;\n\n /**\n * Grid cell is enabled, but arrow key logic and focus highlight must be applied manually.\n * This makes it possible to move focus to an element inside the cell, instead of on the cell itself.\n * For example, if the cell contains a checkbox, we user can arrow key navigate to the checkbox.\n */\n disableGridCellFocus?: boolean;\n\n /**\n * Grid cell options, if you need custom behaviour.\n * Not all options are available, since it is controlled by StandardTable.\n */\n gridCellOptions?: Omit<\n UseGridCellOptions<string>,\n | \"colIndex\"\n | \"rowIndex\"\n | \"numRows\"\n | \"numCols\"\n | \"tableId\"\n | \"isEditable\"\n | \"onChange\"\n >;\n\n /**\n * The icon variant to use when displaying sort order.\n */\n sortOrderIconVariant?: SortOrderIconVariant;\n\n /**\n * Render summary cell at the bottom of the table.\n * If this is not provided for any columns, the summary row will not be rendered at all.\n */\n renderSummaryCell?: StandardTableSummaryCellRenderer<TItem>;\n\n /**\n * Render summary cell at the bottom of the table.\n * If this is not provided for any columns, the summary row will not be rendered at all.\n */\n summaryText?: StandardTableSummaryTextProvider<TItem>;\n\n /**\n * Col span for the summary cell.\n */\n summaryCellColSpan?: number;\n}\n\nexport type StandardTableSummaryTextProvider<TItem> = (\n arg: StandardTableSummaryTextProviderArgObject<TItem>\n) => string;\n\nexport interface StandardTableSummaryTextProviderArgObject<TItem> {\n items: Array<TItem>;\n}\n\nexport type StandardTableSummaryCellRenderer<TItem> = (\n arg: StandardTableSummaryCellRendererArgObject<TItem>\n) => ReactNode;\n\nexport interface StandardTableSummaryCellRendererArgObject<TItem> {\n items: Array<TItem>;\n text?: string;\n}\n\nexport type StandardTableCellRenderer<TItemValue, TItem> = (\n arg: StandardTableCellRendererArgObject<TItemValue, TItem>\n) => ReactNode;\n\nexport interface StandardTableCellRendererArgObject<TItemValue, TItem> {\n label: string;\n value: TItemValue;\n item: TItem;\n itemKey: string;\n gridCell: UseGridCellResult<string>;\n isEditable?: boolean;\n isSelected: boolean;\n /**\n * The z-index used for that cell. Usable if the cell has a popover which should get same z-index for example.\n */\n zIndex?: number | string;\n}\n\nexport type BackgroundResolver<TItem> = (item: TItem) => string | undefined;\n\nexport interface ItemValueResolver<TItem, TItemValue> {\n itemValueResolver: (item: TItem) => TItemValue;\n}\n\nexport const createColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n itemValueResolver: (item: TItem) => TItemValue,\n options?: StandardTableColumnOptions<TItem, TItemValue, TColumnKey>\n): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> => {\n return {\n ...options,\n itemValueResolver,\n };\n};\n","import { Indent, Text } from \"@stenajs-webui/core\";\nimport { TextInput } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { StandardTableCellRenderer } from \"../../../config/StandardTableColumnConfig\";\n\nexport const createStandardEditableTextCell =\n <TItemValue, TItem>(): StandardTableCellRenderer<TItemValue, TItem> =>\n ({\n label,\n gridCell: {\n editorValue,\n isEditing,\n setEditorValue,\n stopEditingAndRevert,\n lastKeyEvent,\n stopEditing,\n stopEditingAndMove,\n },\n }) =>\n isEditing ? (\n <TextInput\n onValueChange={setEditorValue}\n value={editorValue}\n onDone={stopEditing}\n onEsc={stopEditingAndRevert}\n autoFocus\n selectAllOnMount={!lastKeyEvent}\n onMove={stopEditingAndMove}\n />\n ) : (\n <Indent>\n <Text color={\"var(--swui-primary-action-color)\"}>{label}</Text>\n </Indent>\n );\n","import { Indent } from \"@stenajs-webui/core\";\nimport { TextInput } from \"@stenajs-webui/forms\";\nimport { EntityCrudStatus, ModifiedFieldItemState } from \"@stenajs-webui/redux\";\nimport * as React from \"react\";\nimport { StandardTableCellRenderer } from \"../../../config/StandardTableColumnConfig\";\nimport { ModifiedField } from \"../../../../table-ui/components/ModifiedField\";\n\nexport const createEditableTextCellWithStatus =\n <TItemValue, TItem>(\n warningOnEmpty?: string | ((item: TItem) => string),\n crudStatusProvider?: (item: TItem) => EntityCrudStatus | undefined,\n modifiedFieldProvider?: (item: TItem) => ModifiedFieldItemState | undefined\n ): StandardTableCellRenderer<TItemValue, TItem> =>\n ({\n label,\n item,\n gridCell: {\n editorValue,\n isEditing,\n setEditorValue,\n stopEditingAndRevert,\n lastKeyEvent,\n stopEditing,\n stopEditingAndMove,\n },\n isEditable,\n }) => {\n const warnOnEmpty =\n typeof warningOnEmpty === \"function\"\n ? warningOnEmpty(item)\n : warningOnEmpty;\n\n const crudStatus = crudStatusProvider\n ? crudStatusProvider(item)\n : undefined;\n\n const modifiedField = modifiedFieldProvider\n ? modifiedFieldProvider(item)\n : undefined;\n\n return isEditable && isEditing ? (\n <TextInput\n onValueChange={setEditorValue}\n value={editorValue}\n onDone={stopEditing}\n onEsc={stopEditingAndRevert}\n autoFocus\n selectAllOnMount={!lastKeyEvent}\n onMove={stopEditingAndMove}\n />\n ) : (\n <Indent row alignItems={\"center\"}>\n <ModifiedField\n value={label}\n modifiedField={modifiedField}\n crudStatus={crudStatus}\n isEditable={isEditable}\n warningOnEmpty={warnOnEmpty}\n />\n </Indent>\n );\n };\n"],"names":["GridHooksContext","React","createContext","GridHooksTable","children","numCols","numRows","tableId","wrap","contextProps","useMemo","_jsx","hasIndicatorContent","status","loading","creating","deleting","updating","hasError","Boolean","CrudStatusIndicator","crudStatus","errorMessage","InputSpinner","cssColor","icon","Icon","faExclamationTriangle","_Fragment","Tooltip","ModifiedField","isEditable","warningOnEmpty","value","modifiedField","showEmptyFieldWarning","modified","newValue","hasCrudIndicator","hasRightIcon","Text","undefined","Indent","stenaArrowRight","Space","TableCell","alignItems","justifyContent","overflow","indent","boxProps","Row","tableBorderColor","tableBorderColorExpanded","tableBackgroundColorExpanded","tableBackgroundHoverColorExpanded","tableBorder","tableBorderHidden","tableBorderLeft","tableBorderLeftExpanded","defaultTableRowHeight","defaultTableHeadRowHeight","smallTableRowWidth","SmallTableCell","props","SortOrderIcon","iconVariant","direction","Box","getIcon","arrow","iconType","faSortAlphaUp","faSortAlphaDown","faSortNumericUp","faSortNumericDown","faSortAmountUpAlt","faSortAmountDownAlt","exhaustSwitchCaseElseThrow","TableHeadItem","memo","label","onClick","selected","popoverContent","infoIconTooltipText","alignRight","sortOrderIconVariant","appendTooltipTo","containerRef","useRef","cursorStyle","cursor","userSelect","hasOnlyChildren","_jsxs","Heading","textAlign","ev","stopPropagation","stenaInfoCircle","Popover","FlatButton","faEllipsisV","SmallTableHead","TableColumnGroupHead","flex","width","height","TableHeadRow","style","TableRow","hideBorderTop","className","cx","styles","tableRow","useRevertableValue","initialValue","setValueInternal","useState","revertValue","valueRef","setValue","useCallback","useEffect","revert","commit","commitValue","setRevertValue","getValue","createKeyDownEvent","event","defaultTransformEnteredValue","useEditableCell","allowedInputType","onChange","onStartEditing","onStopEditing","transformEnteredValue","isEditing","setIsEditing","lastKeyEvent","setLastKeyEvent","revertableValue","startEditing","keyEvent","stopEditing","stopEditingAndRevert","createKeyDownHandler","allowsNumerics","allowsLetters","isCharacter","key","isLetter","isNumeric","_","e","wrapBounds","x","y","maxX","maxY","realX","realY","limitRange","val","min","max","clampPos","pos","wrapPos","wrapped","getNextPositionWrappedOrClamped","rowIndex","colIndex","edgeMode","posNotWrapped","getNextPosition","ensureDomIdIsCorrect","id","replace","validateGridHookOptions","options","useGridNavigationOptionsFromContext","context","useContext","useGridNavigation","onCellMove","onCellNavigation","moveHandler","createMoveHandler","onKeyDown","createCellId","requiredProps","focusOnCell","colDidChange","rowDidChange","el","useGridCell","nav","edit","cellCoordinates","stopEditingAndMove","move","EditableTextCellWithCrudAndModified","entityId","rowIndent","crudStatusRedux","modifiedFieldsRedux","dispatch","useDispatch","modifiedFieldsState","useSelector","selectors","getState","crudStatusState","entities","onChangeHandler","actions","clearEntity","setEntity","originalValue","editorValue","setEditorValue","onKeyDownHandler","setEntityFields","TextInput","faArrowRight","StandardTableTableIdContext","StandardTableStateContext","StandardTableActionsContext","StandardTableConfigContext","createInternalStandardTableActions","createSortOrderActions","createSelectedIdsActions","createEntityActions","getReducerIdFor","reducerId","reducerIdSuffix","createStandardTableInitialState","sortBy","desc","selectedIds","expandedRows","createSortOrderReducerInitialState","createSelectedIdsReducerInitialState","createStandardTableReducer","initialState","sortOrder","reducerIdGate","createSortOrderReducer","createSelectedIdsReducer","fields","createEntityReducer","_a","combineReducers","useStandardTableId","useStandardTableConfig","useStandardTableState","useStandardTableActions","GroupConfigsAndIdsForRowsContext","useGroupConfigsAndIdsForRows","useTotalNumColumnsForRows","config","groupConfigsAndIds","offset","c","sum","item","OnKeyDownContext","useOnKeyDownContext","OnSortOrderChangeContext","useOnSortOrderChangeContext","StandardTableColumnGroupOrderContext","StandardTableUsingColumnGroupsContext","useColumnGroupOrderContext","StandardTableVariantContext","StickyPropsPerColumnContext","useStickyPropsPerColumnContext","TotalNumColumnsContext","useTotalNumColumns","createGroupConfigAndIdsForRows","columnGroups","columnGroupOrder","columnOrder","compact","groupId","groupConfig","_b","p","getCellBorder","borderFromGroup","disableBorderLeft","borderLeft","getCellBorderFromGroup","groupIndex","columnIndexInGroup","groupBorderLeft","useColumnConfigById","columnId","columns","column","useFirstColumnConfig","_c","useLastColumnConfig","groupConfigAndId","ColumnInGroup","colSpan","isFirstGroup","isLastGroup","render","contentLeft","contentRight","error","minWidth","zIndex","stickyHeader","headerRowOffsetTop","stickyColumnGroups","activeBorder","getActiveBorder","isStickyFirstGroup","isStickyLastGroup","isSticky","isStickyGroup","position","background","left","right","top","boxShadow","document","body","borderFromColumn","createStickyHeaderProps","stickyColumn","zIndexFromConfig","getTopPosition","ColumnGroupRow","groupConfigAndIds","showHeaderCheckbox","enableExpandCollapse","stickyCheckboxColumn","stickyHeaderProps","zIndexForCells","map","length","calculateColumnIndexPerColumnId","groupConfigs","columnIndexPerColumnId","currentIndex","conf","isColumnNavigable","columnConfig","ColumnIndexPerColumnIdContext","useColumnIndexPerColumnIdContext","ensureConfigHasValidSticky","ensureNoColumnsAreSticky","ensureAllColumnsInGroupHasFixedWidth","columnGroupIndex","columnGroupId","columnGroupConfig","calculateOffsetForColumnInStickyColumnGroups","calculateOffsetForColumns","getColumnIdsForLeftSideStickyGroup","getColumnIdsForRightSideStickyGroup","columnIds","includeOffsetForCheckboxAndExpand","widths","i","getCalcForWidths","getStickyPropsPerColumn","getStickyPropsPerColumnWithGroups","getStickyPropsPerColumnWithNoGroups","sticky","r","columnGroupIds","stickyGroupOffsets","firstGroupIsSticky","lastGroupIsSticky","columnIndex","isStickyFirst","isStickyLast","isFirstColumnInLastGroup","isLastColumnInFirstGroup","createStandardTableActions","ids","reducerIdGateAction","lastSelectedId","useLocalStateTableContext","state","useReducer","getTotalNumColumns","getNumUserColumns","group","ColGroups","hasExtraColGroup","showRowCheckbox","booleanOrNumberToNumber","multitypeComparator","a","b","isBothOfType","type","useColumnValueResolver","StandardTableRowCheckbox","onValueChange","disabled","onValueChangeAndShift","shiftPressedRef","totalNumColumns","gridCell","internalOnValueChange","current","Checkbox","getIdsBetweenSelected","idList","selected1","selected2","i1","i2","start","end","useRowCheckbox","idListForEnabledItems","keyResolver","setSelectedIds","setLastSelectedId","itemKey","isSelected","toggle","addMultiple","removeMultiple","useArraySet","shiftAndToggleSelected","toggleSelected","useExpandCollapseActions","expandByIds","isExpanded","StandardTableRowExpandButton","expandCollapseDisableResolver","toggleRowExpanded","buttonDisabled","faChevronDown","faChevronRight","getBackgroundColor","backgroundResolver","useBackground","useCellBackgroundByColumnId","useCellBackgroundByColumnConfig","formatValueLabel","itemValue","formatColumnIdToHeaderCellLabel","upperFirst","lowerCase","StandardTableCellUi","enableGridCell","gridCellRequiredProps","standardTableCell","TextCell","textCell","StandardTableCell","gridCellOptions","gridCellOptionsForTable","onKeyDownTable","numNavigableColumns","stickyPropsPerColumnContext","indexOf","itemValueResolver","itemLabelFormatter","justifyContentCell","renderCell","gridCellOptionsForColumn","onKeyDownCell","disableGridCell","disableGridCellFocus","editable","stickyProps","currentZIndex","content","activeBorderLeft","shadow","StandardTableRowExpansion","renderRowExpansion","onRequestCollapse","TrWithHoverBackground","styled","tr","focusBackground","hoverBackground","StandardTableRow","colIndexOffset","alwaysVisible","trRef","rowBackgroundResolver","checkboxDisabledResolver","visible","useOnScreen","rootMargin","threshold","resolvedBackgroundResult","getHoverBackgroundColor","getFocusBackgroundColor","firstColumn","firstColumnBackground","lastColumn","lastColumnBackground","index","resolvedBackground","isSummaryRowVisible","columnHasSummaryCell","SummaryCell","items","renderSummaryCell","summaryText","text","renderResult","getColumnsLimitedWithColSpan","list","summaryCellColSpan","realColSpan","StandardTableSummaryRow","summaryRow","SummaryRowSwitcher","filterItemsOnEnabledCheckboxes","StandardTableRowList","rowIndexOffset","sortCounterRef","disableInfiniteList","enableExternalSorting","valueResolver","sortedItems","sortedList","sort","reverse","filter","l","keyUp","keyDown","addEventListener","removeEventListener","StandardTableContent","bannerError","noItemsLabel","noItemsContentRight","noItemsContentBottom","noItemsHeader","variant","errorLabel","Spacing","ResultListBanner","Banner","message","LoadingScreen","useTableHeadCheckbox","clearSelection","selectionIsEmpty","allItemsAreSelected","onClickCheckbox","useTableHeadExpandCollapse","collapseAll","allItemsAreExpanded","toggleExpanded","useTableSortHeader","onSortOrderChange","d","StandardTableHeadItem","justifyContentHeader","columnLabel","disableSorting","defaultSortOrderIconVariant","onClickColumnHead","StandardTableHeadRow","showHeaderExpandCollapse","checkboxDisabled","stickyHeaderStyle","StandardTable","tableContext","generatedTableId","useId","initialSortOrderDesc","initialSortOrder","localTableContext","currentTableContext","actionsContext","usingColumnGroups","columnGroupsFromConfig","columnGroupOrderFromConfig","columnOrderFromConfig","groupConfigsForRows","validationError","Error","ErrorScreen","standardTable","isolation","createColumnConfig","createStandardEditableTextCell","createEditableTextCellWithStatus","crudStatusProvider","modifiedFieldProvider","warnOnEmpty"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/GridHooksTable.tsx","../src/features/table-ui/components/CrudStatusIndicator.tsx","../src/features/table-ui/components/ModifiedField.tsx","../src/features/table-ui/components/table/TableCell.tsx","../src/config/TableConfig.ts","../src/features/table-ui/components/table/SmallTableCell.tsx","../src/features/table-ui/components/table/SortOrderIcon.tsx","../src/features/table-ui/components/table/TableHeadItem.tsx","../src/features/table-ui/components/table/SmallTableHead.tsx","../src/features/table-ui/components/table/TableColumnGroupHead.tsx","../src/features/table-ui/components/table/TableHeadRow.tsx","../src/features/table-ui/components/table/TableRow.tsx","../src/features/grid-cell/hooks/UseRevertableValue.ts","../src/features/grid-cell/hooks/UseEditableCell.ts","../src/util/bounds/NumberBoundsWrapper.ts","../src/util/NumberBoundsWrapper.ts","../src/util/DirectionCalculator.ts","../src/util/DomIdValidator.tsx","../src/util/GridHookOptionsValidator.ts","../src/features/grid-cell/hooks/UseGridNavigationOptionsFromContext.ts","../src/features/grid-cell/hooks/UseGridNavigation.ts","../src/features/grid-cell/hooks/UseGridCell.ts","../src/features/table-ui/components/cells/EditableTextCellWithCrudAndModified.tsx","../src/features/standard-table/context/StandardTableStateContext.ts","../src/features/standard-table/redux/StandardTableActionsAndSelectors.ts","../src/features/standard-table/redux/ReducerIdFactory.ts","../src/features/standard-table/redux/StandardTableReducer.ts","../src/features/standard-table/hooks/UseStandardTableConfig.ts","../src/features/standard-table/context/GroupConfigsAndIdsForRowsContext.ts","../src/features/standard-table/context/OnKeyDownContext.ts","../src/features/standard-table/context/OnSortOrderChangeContext.ts","../src/features/standard-table/context/StandardTableColumnOrderContext.ts","../src/features/standard-table/context/StandardTableVariantContext.ts","../src/features/standard-table/context/StickyPropsPerColumnContext.ts","../src/features/standard-table/context/TotalNumColumnsContext.ts","../src/features/standard-table/features/column-groups/ColumnGroupFactory.ts","../src/features/standard-table/util/CellBorderCalculator.ts","../src/features/standard-table/hooks/UseColumnConfigById.ts","../src/features/standard-table/features/column-groups/ColumnInGroup.tsx","../src/features/standard-table/features/column-groups/StickyHeaderPropsFactory.ts","../src/features/standard-table/features/column-groups/ColumnGroupRow.tsx","../src/features/standard-table/features/column-index-per-column-id/ColumnIndexCalculator.ts","../src/features/standard-table/features/column-index-per-column-id/ColumnIndexPerColumnIdContext.ts","../src/features/standard-table/features/sticky-columns/StickyColumnGroupValidator.ts","../src/features/standard-table/features/sticky-columns/StickyColumnGroupOffsetCalculator.ts","../src/features/standard-table/features/sticky-columns/StickyPropsPerColumnCalculator.ts","../src/features/standard-table/util/ActionsFactory.ts","../src/features/standard-table/hooks/UseLocalStateTableContext.ts","../src/features/standard-table/util/ColumnCounter.ts","../src/features/standard-table/components/ColGroups.tsx","../src/features/standard-table/features/sorting/MultitypeComparator.ts","../src/features/standard-table/hooks/UseColumnValueResolver.ts","../src/features/standard-table/features/checkboxes/StandardTableRowCheckbox.tsx","../src/features/standard-table/util/IdListPartial.ts","../src/features/standard-table/features/checkboxes/UseRowCheckbox.ts","../src/features/standard-table/features/expand-collapse/UseExpandCollapseActions.ts","../src/features/standard-table/features/expand-collapse/StandardTableRowExpandButton.tsx","../src/features/standard-table/hooks/UseCellBackground.ts","../src/features/standard-table/util/LabelFormatter.ts","../src/features/standard-table/components/StandardTableCellUi.tsx","../src/features/standard-table/components/TextCell.tsx","../src/features/standard-table/components/StandardTableCell.tsx","../src/features/standard-table/components/StandardTableRowExpansion.tsx","../src/features/standard-table/components/TrWithHoverBackground.tsx","../src/features/standard-table/components/StandardTableRow.tsx","../src/features/standard-table/features/summary-row/SummaryRowVisibilityCalculator.ts","../src/features/standard-table/features/summary-row/components/SummaryCell.tsx","../src/features/standard-table/features/summary-row/SummaryCellColSpanCalculator.ts","../src/features/standard-table/features/summary-row/components/StandardTableSummaryRow.tsx","../src/features/standard-table/features/summary-row/components/SummaryRowSwitcher.tsx","../src/features/standard-table/util/FilterItemsOnEnabledCheckboxes.ts","../src/features/standard-table/components/StandardTableRowList.tsx","../src/features/standard-table/components/StandardTableContent.tsx","../src/features/standard-table/features/checkboxes/UseTableHeadCheckbox.ts","../src/features/standard-table/features/expand-collapse/UseTableHeadExpandCollapse.ts","../src/features/standard-table/features/sorting/UseTableSortHeader.ts","../src/features/standard-table/components/StandardTableHeadItem.tsx","../src/features/standard-table/components/StandardTableHeadRow.tsx","../src/features/standard-table/components/StandardTable.tsx","../src/features/standard-table/config/StandardTableColumnConfig.ts","../src/features/standard-table/helpers/cell-renderers/editable-text-cell/EditableTextCell.tsx","../src/features/standard-table/helpers/cell-renderers/editable-text-cell/EditableTextCellWithStatus.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode, useMemo } from \"react\";\n\ninterface GridHooksTableProps extends GridHooksContextValue {\n children?: ReactNode;\n}\n\ninterface GridHooksContextValue {\n /**\n * Total number of rows in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numRows?: number;\n /**\n * Total number of columns in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numCols?: number;\n /**\n * An ID for the table, must be unique for every table in page. Must be set in cell hook or in GridHooksTable prop.\n */\n tableId?: string;\n /**\n * If true, navigation will wrap around the table. If false, navigation stops at table edge.\n */\n wrap?: boolean;\n}\n\nexport const GridHooksContext = React.createContext<GridHooksContextValue>({});\n\nexport const GridHooksTable: React.FC<GridHooksTableProps> = ({\n children,\n numCols,\n numRows,\n tableId,\n wrap,\n}) => {\n const contextProps = useMemo<GridHooksContextValue>(\n () => ({ numCols, numRows, tableId, wrap }),\n [numCols, numRows, tableId, wrap]\n );\n\n return (\n <GridHooksContext.Provider value={contextProps}>\n {children}\n </GridHooksContext.Provider>\n );\n};\n","import {\n Icon,\n InputSpinner,\n stenaExclamationTriangle,\n} from \"@stenajs-webui/elements\";\nimport { CrudStatus } from \"@stenajs-webui/redux\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\n\ninterface Props {\n crudStatus?: CrudStatus;\n}\n\nexport const hasIndicatorContent = (status: CrudStatus): boolean => {\n const { loading, creating, deleting, updating, hasError } = status;\n return Boolean(loading || creating || deleting || updating || hasError);\n};\n\nexport const CrudStatusIndicator: React.FC<Props> = ({ crudStatus }) => {\n if (!crudStatus || !hasIndicatorContent(crudStatus)) {\n return null;\n }\n\n const { errorMessage, hasError, loading, creating, deleting, updating } =\n crudStatus;\n\n if (loading || creating || deleting || updating) {\n return <InputSpinner color={cssColor(\"--lhds-color-ui-500\")} />;\n }\n\n if (hasError) {\n const icon = (\n <Icon\n icon={stenaExclamationTriangle}\n color={cssColor(\"--lhds-color-orange-600\")}\n size={14}\n />\n );\n return (\n <>\n {errorMessage ? (\n <Tooltip label={errorMessage} zIndex={100}>\n {icon}\n </Tooltip>\n ) : (\n icon\n )}\n </>\n );\n }\n return null;\n};\n","import { Indent, Space, Text } from \"@stenajs-webui/core\";\nimport {\n Icon,\n stenaArrowRight,\n stenaExclamationTriangle,\n} from \"@stenajs-webui/elements\";\nimport { EntityCrudStatus, ModifiedFieldItemState } from \"@stenajs-webui/redux\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport {\n CrudStatusIndicator,\n hasIndicatorContent,\n} from \"./CrudStatusIndicator\";\n\ninterface Props {\n warningOnEmpty?: string;\n isEditable?: boolean;\n value?: string;\n crudStatus?: EntityCrudStatus;\n modifiedField?: ModifiedFieldItemState;\n}\n\nexport const ModifiedField: React.FC<Props> = ({\n isEditable,\n warningOnEmpty,\n value,\n modifiedField,\n crudStatus,\n}) => {\n const showEmptyFieldWarning =\n warningOnEmpty && modifiedField?.modified && modifiedField?.newValue === \"\";\n\n const hasCrudIndicator = crudStatus && hasIndicatorContent(crudStatus);\n\n const hasRightIcon = showEmptyFieldWarning || hasCrudIndicator;\n\n return (\n <>\n <Text\n color={isEditable ? \"var(--swui-primary-action-color)\" : undefined}\n variant={modifiedField?.modified ? \"bold\" : undefined}\n >\n {value}\n </Text>\n {modifiedField?.newValue !== undefined && (\n <>\n <Indent>\n <Icon icon={stenaArrowRight} size={12} />\n </Indent>\n <Text color={\"var(--swui-primary-action-color)\"} variant={\"bold\"}>\n {modifiedField.newValue}\n </Text>\n </>\n )}\n {hasRightIcon && <Space />}\n {showEmptyFieldWarning ? (\n <Tooltip label={warningOnEmpty!} zIndex={100}>\n <Icon\n icon={stenaExclamationTriangle}\n color={cssColor(\"--lhds-color-orange-600\")}\n size={14}\n />\n </Tooltip>\n ) : (\n <CrudStatusIndicator crudStatus={crudStatus} />\n )}\n </>\n );\n};\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\n\nexport interface TableCellProps extends BoxProps {}\n\nexport const TableCell: React.FC<TableCellProps> = ({\n alignItems = \"center\",\n justifyContent = \"flex-start\",\n overflow = \"hidden\",\n indent = 1,\n ...boxProps\n}) => {\n return (\n <Row\n height={\"100%\"}\n alignItems={alignItems}\n justifyContent={justifyContent}\n overflow={overflow}\n indent={indent}\n {...boxProps}\n />\n );\n};\n","export const tableBorderColor = \"var(--lhds-color-ui-300)\";\nexport const tableBorderColorExpanded = \"var(--lhds-color-blue-500)\";\nexport const tableBackgroundColorExpanded = \"var(--lhds-color-blue-50)\";\nexport const tableBackgroundHoverColorExpanded = \"var(--lhds-color-blue-100)\";\nexport const tableBorder = `1px solid ${tableBorderColor}`;\nexport const tableBorderHidden = `1px solid transparent`;\nexport const tableBorderLeft = `var(--swui-expand-highlight-border-width) solid transparent`;\nexport const tableBorderLeftExpanded = `var(--swui-expand-highlight-border-width) solid ${tableBorderColorExpanded}`;\nexport const defaultTableRowHeight = \"40px\";\nexport const defaultTableHeadRowHeight = \"40px\";\nexport const smallTableRowWidth = \"40px\";\n","import * as React from \"react\";\nimport { TableCell, TableCellProps } from \"./TableCell\";\nimport { smallTableRowWidth } from \"../../../../config/TableConfig\";\n\ninterface Props extends TableCellProps {}\n\nexport const SmallTableCell: React.FC<Props> = (props) => {\n return (\n <TableCell\n width={smallTableRowWidth}\n justifyContent={\"center\"}\n {...props}\n />\n );\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faSortAlphaDown } from \"@fortawesome/free-solid-svg-icons/faSortAlphaDown\";\nimport { faSortAlphaUp } from \"@fortawesome/free-solid-svg-icons/faSortAlphaUp\";\nimport { faSortAmountDownAlt } from \"@fortawesome/free-solid-svg-icons/faSortAmountDownAlt\";\nimport { faSortAmountUpAlt } from \"@fortawesome/free-solid-svg-icons/faSortAmountUpAlt\";\nimport { faSortNumericDown } from \"@fortawesome/free-solid-svg-icons/faSortNumericDown\";\nimport { faSortNumericUp } from \"@fortawesome/free-solid-svg-icons/faSortNumericUp\";\nimport { Box, exhaustSwitchCaseElseThrow } from \"@stenajs-webui/core\";\nimport { Icon } from \"@stenajs-webui/elements\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport * as React from \"react\";\n\nexport type SortOrderDirection = \"up\" | \"down\";\nexport type SortOrderIconVariant = \"numeric\" | \"alpha\" | \"amount\";\n\ninterface Props {\n direction: SortOrderDirection;\n iconVariant?: SortOrderIconVariant;\n}\n\nexport const SortOrderIcon: React.FC<Props> = ({\n iconVariant = \"amount\",\n direction,\n}) => {\n return (\n <Box width={\"14px\"}>\n <Icon\n size={14}\n color={cssColor(\"--lhds-color-ui-500\")}\n icon={getIcon(direction, iconVariant)}\n />\n </Box>\n );\n};\n\nexport const getIcon = (\n arrow: SortOrderDirection,\n iconType: SortOrderIconVariant\n): IconDefinition => {\n switch (iconType) {\n case \"alpha\":\n return arrow === \"up\" ? faSortAlphaUp : faSortAlphaDown;\n case \"numeric\":\n return arrow === \"up\" ? faSortNumericUp : faSortNumericDown;\n case \"amount\":\n return arrow === \"up\" ? faSortAmountUpAlt : faSortAmountDownAlt;\n default:\n return exhaustSwitchCaseElseThrow(iconType);\n }\n};\n","import { Box, BoxProps, Heading, Row, Space } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n Icon,\n InputSpinner,\n stenaDotsVertical,\n stenaInfoCircle,\n} from \"@stenajs-webui/elements\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport {\n ButtonWithPopoverProps,\n Popover,\n Tooltip,\n TooltipProps,\n} from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { CSSProperties, useRef } from \"react\";\nimport {\n SortOrderDirection,\n SortOrderIcon,\n SortOrderIconVariant,\n} from \"./SortOrderIcon\";\n\nexport interface TableHeadProps extends BoxProps {\n label?: string;\n infoIconTooltipText?: string;\n popoverContent?: ButtonWithPopoverProps[\"children\"];\n loading?: boolean;\n arrow?: SortOrderDirection;\n onClick?: () => void;\n selected?: boolean;\n alignRight?: boolean;\n sortOrderIconVariant?: SortOrderIconVariant;\n appendTooltipTo?: TooltipProps[\"appendTo\"];\n}\n\nexport const TableHeadItem: React.FC<TableHeadProps> = React.memo(\n ({\n label,\n arrow,\n onClick,\n children,\n selected,\n popoverContent,\n loading,\n infoIconTooltipText,\n overflow = \"hidden\",\n alignRight,\n sortOrderIconVariant,\n appendTooltipTo,\n ...boxProps\n }) => {\n const containerRef = useRef(null);\n\n const cursorStyle = onClick\n ? ({ cursor: \"pointer\", userSelect: \"none\" } as CSSProperties)\n : undefined;\n\n const hasOnlyChildren = !label && !arrow && !infoIconTooltipText;\n\n return (\n <Row\n height={\"100%\"}\n alignItems={\"center\"}\n ref={containerRef}\n overflow={overflow}\n justifyContent={alignRight ? \"flex-end\" : \"flex-start\"}\n borderTop={\"2px solid transparent\"}\n borderBottom={`2px solid ${\n selected ? cssColor(\"--lhds-color-blue-500\") : \"transparent\"\n }`}\n {...boxProps}\n >\n <Row alignItems={\"center\"} indent>\n {!arrow && alignRight && (\n <>\n <Space />\n <Box width={\"14px\"} />\n <Space num={0.5} />\n </>\n )}\n\n {(children || label) && (\n <Row onClick={onClick} style={cursorStyle} alignItems={\"center\"}>\n {children && (\n <>\n {children}\n {!hasOnlyChildren && <Space num={0.5} />}\n </>\n )}\n {arrow && alignRight && (\n <>\n <Space />\n <SortOrderIcon\n direction={arrow}\n iconVariant={sortOrderIconVariant}\n />\n <Space num={0.5} />\n </>\n )}\n {label && (\n <Heading variant={\"h6\"} style={{ textAlign: \"left\" }}>\n {label}\n </Heading>\n )}\n {arrow && !alignRight && (\n <>\n <Space num={0.5} />\n <SortOrderIcon\n direction={arrow}\n iconVariant={sortOrderIconVariant}\n />\n <Space />\n </>\n )}\n </Row>\n )}\n\n {infoIconTooltipText && (\n <>\n <Space />\n <Row onClick={(ev) => ev.stopPropagation()}>\n <Tooltip\n label={infoIconTooltipText}\n zIndex={\"var(--swui-sticky-popover-z-index)\" as any}\n appendTo={appendTooltipTo}\n >\n <Icon\n icon={stenaInfoCircle}\n size={14}\n color={cssColor(\"--lhds-color-blue-400\")}\n />\n </Tooltip>\n <Space />\n </Row>\n </>\n )}\n </Row>\n\n <Row>\n {loading ? (\n <InputSpinner />\n ) : popoverContent ? (\n <Popover\n content={popoverContent}\n trigger={\"click\"}\n zIndex={1000}\n disablePadding\n variant={\"outlined\"}\n arrow={false}\n >\n <FlatButton leftIcon={stenaDotsVertical} size={\"small\"} />\n </Popover>\n ) : null}\n </Row>\n\n {!arrow && !alignRight && (\n <>\n <Space />\n <Box width={\"14px\"} />\n <Space num={0.5} />\n </>\n )}\n </Row>\n );\n }\n);\n","import * as React from \"react\";\nimport { smallTableRowWidth } from \"../../../../config/TableConfig\";\nimport { TableHeadItem, TableHeadProps } from \"./TableHeadItem\";\n\ninterface Props extends TableHeadProps {}\n\nexport const SmallTableHead: React.FC<Props> = (props) => {\n return (\n <TableHeadItem\n width={smallTableRowWidth}\n justifyContent={\"center\"}\n {...props}\n />\n );\n};\n","import { Box, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { TableHeadItem } from \"./TableHeadItem\";\nimport { defaultTableHeadRowHeight } from \"../../../../config/TableConfig\";\n\ninterface Props {\n label?: string;\n flex?: number;\n width?: string;\n indent?: number;\n height?: string;\n}\n\nexport const TableColumnGroupHead: React.FC<Props> = ({\n label,\n flex,\n width,\n indent = 1,\n height = defaultTableHeadRowHeight,\n}) => {\n return (\n <TableHeadItem width={width} flex={flex} height={height}>\n <Box indent={indent} spacing>\n <Text variant={\"bold\"}>{label}</Text>\n </Box>\n </TableHeadItem>\n );\n};\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { defaultTableHeadRowHeight } from \"../../../../config/TableConfig\";\n\nexport interface TableHeadRowProps extends BoxProps {\n style?: React.CSSProperties;\n height?: string;\n}\n\nexport const TableHeadRow: React.FC<TableHeadRowProps> = React.memo(\n ({ style, height = defaultTableHeadRowHeight, ...boxProps }) => {\n return <Row style={style} height={height} {...boxProps} />;\n }\n);\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport {\n defaultTableHeadRowHeight,\n tableBorder,\n tableBorderHidden,\n} from \"../../../../config/TableConfig\";\nimport styles from \"./TableRow.module.css\";\nimport cx from \"classnames\";\n\ninterface Props extends BoxProps {\n hideBorderTop?: boolean;\n}\n\nexport const TableRow: React.FC<Props> = ({\n hideBorderTop,\n height = defaultTableHeadRowHeight,\n className,\n ...boxProps\n}) => {\n return (\n <Row\n borderTop={hideBorderTop ? tableBorderHidden : tableBorder}\n height={height}\n className={cx(styles.tableRow, className)}\n {...boxProps}\n />\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface RevertableValue<TValue> {\n value: TValue;\n setValue: (value: TValue) => void;\n setRevertValue: (revertValue: TValue) => void;\n revert: () => void;\n commit: () => void;\n getValue: () => TValue;\n}\n\nexport const useRevertableValue = <TValue>(\n initialValue: TValue\n): RevertableValue<TValue> => {\n const [value, setValueInternal] = useState<TValue>(initialValue);\n const revertValue = useRef<TValue>(initialValue);\n const valueRef = useRef<TValue>(initialValue);\n\n const setValue = useCallback(\n (value: TValue) => {\n setValueInternal(value);\n valueRef.current = value;\n },\n [setValueInternal, valueRef]\n );\n\n useEffect(() => {\n setValue(initialValue);\n }, [setValue, initialValue]);\n\n const revert = useCallback(() => {\n if (revertValue) {\n setValue(revertValue.current);\n }\n }, [setValue, revertValue]);\n\n const commit = useCallback(\n (commitValue?: TValue) => {\n revertValue.current = value;\n if (commitValue) {\n setValue(commitValue);\n }\n },\n [value, setValue]\n );\n\n const setRevertValue = useCallback(\n (value: TValue) => (revertValue.current = value),\n [revertValue]\n );\n\n const getValue = useCallback(() => valueRef.current, [valueRef]);\n\n return {\n value,\n setValue,\n setRevertValue,\n revert,\n commit,\n getValue,\n };\n};\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { RevertableValue, useRevertableValue } from \"./UseRevertableValue\";\n\nexport type AllowedInputType =\n | \"all\"\n | \"numeric\"\n | \"alphanumeric\"\n | \"letters\"\n | \"none\";\n\ntype OnStartEditingFunc = (keyEvent?: KeyDownEvent) => void;\ntype TransformEnteredValueFunc<TValue> = (value?: string) => TValue;\n\nexport interface UseEditableCellOptions<TValue> {\n /**\n * Specifies if cell is editable.\n */\n isEditable?: boolean;\n /**\n * Types of keyboard input that will start editing and pre-fill editor.\n */\n allowedInputType?: AllowedInputType;\n /**\n * Callback that is invoked when editing a cell is started.\n * @param keyEvent\n */\n onStartEditing?: OnStartEditingFunc;\n /**\n * Callback that is invoked when editing a cell stops.\n */\n onStopEditing?: () => void;\n /**\n * Callback that is invoked when editing a cell is finished with a value result.\n * @param value\n */\n onChange?: (value: TValue | undefined) => void;\n /**\n * Transform entered input to TValue.\n * @param value\n */\n transformEnteredValue?: TransformEnteredValueFunc<TValue>;\n}\n\nexport interface UseEditableCellResult<TValue> {\n onKeyDown: React.KeyboardEventHandler;\n isEditing: boolean;\n startEditing: OnStartEditingFunc;\n stopEditing: () => void;\n stopEditingAndRevert: () => void;\n lastKeyEvent: KeyDownEvent | undefined;\n revertableValue: RevertableValue<TValue>;\n onDoubleClick: () => void;\n}\n\nexport interface KeyDownEvent {\n altKey: boolean;\n charCode: number;\n ctrlKey: boolean;\n key: string;\n keyCode: number;\n locale: string;\n location: number;\n metaKey: boolean;\n repeat: boolean;\n shiftKey: boolean;\n which: number;\n}\n\nconst createKeyDownEvent = (event: React.KeyboardEvent): KeyDownEvent => ({\n altKey: event.altKey,\n charCode: event.charCode,\n ctrlKey: event.ctrlKey,\n key: event.key,\n keyCode: event.keyCode,\n locale: event.locale,\n location: event.location,\n metaKey: event.metaKey,\n repeat: event.repeat,\n shiftKey: event.shiftKey,\n which: event.which,\n});\n\n// tslint:disable-next-line:no-any\nconst defaultTransformEnteredValue = (value: any) => value;\n\nexport const useEditableCell = <TValue>(\n value: TValue,\n {\n isEditable = false,\n allowedInputType = \"all\",\n onChange,\n onStartEditing,\n onStopEditing,\n transformEnteredValue = defaultTransformEnteredValue,\n }: UseEditableCellOptions<TValue>\n): UseEditableCellResult<TValue> => {\n const [isEditing, setIsEditing] = useState(false);\n const [lastKeyEvent, setLastKeyEvent] = useState<KeyDownEvent | undefined>(\n undefined\n );\n const revertableValue = useRevertableValue<TValue>(value);\n const { getValue, revert, setValue, setRevertValue } = revertableValue;\n\n const startEditing = useCallback(\n (keyEvent?: KeyDownEvent) => {\n if (isEditable) {\n setValue(value);\n setRevertValue(value);\n setIsEditing(true);\n if (onStartEditing) {\n onStartEditing(keyEvent);\n }\n }\n },\n [isEditable, onStartEditing, setRevertValue, setValue, value]\n );\n\n const stopEditing = useCallback(() => {\n if (isEditable) {\n setIsEditing(false);\n if (onStopEditing) {\n onStopEditing();\n }\n if (onChange) {\n onChange(getValue());\n }\n }\n }, [isEditable, onChange, onStopEditing, getValue, setIsEditing]);\n\n const stopEditingAndRevert = useCallback(() => {\n if (isEditable) {\n setIsEditing(false);\n if (onStopEditing) {\n onStopEditing();\n }\n revert();\n }\n }, [isEditable, onStopEditing, revert, setIsEditing]);\n\n const onKeyDown = useMemo(\n () =>\n createKeyDownHandler(\n isEditing,\n isEditable,\n startEditing,\n setLastKeyEvent,\n allowedInputType,\n transformEnteredValue,\n revertableValue\n ),\n [\n isEditing,\n isEditable,\n startEditing,\n setLastKeyEvent,\n allowedInputType,\n transformEnteredValue,\n revertableValue,\n ]\n );\n\n return {\n onKeyDown,\n isEditing,\n lastKeyEvent,\n revertableValue,\n startEditing,\n stopEditing,\n stopEditingAndRevert,\n onDoubleClick: startEditing,\n };\n};\n\nconst allowsNumerics = (allowedInputType: AllowedInputType): boolean =>\n allowedInputType === \"all\" ||\n allowedInputType === \"numeric\" ||\n allowedInputType === \"alphanumeric\";\nconst allowsLetters = (allowedInputType: AllowedInputType): boolean =>\n allowedInputType === \"all\" ||\n allowedInputType === \"alphanumeric\" ||\n allowedInputType === \"letters\";\n\nconst isCharacter = (key: string): boolean => !!key.match(/^[-+*<>]$/);\nconst isLetter = (key: string): boolean => !!key.match(/^[a-zA-Z0-9]$/);\nconst isNumeric = (key: string): boolean => !isNaN(parseInt(key, 10));\n\nconst createKeyDownHandler =\n <TValue>(\n _: boolean, // isEditing\n isEditable: boolean,\n startEditing: OnStartEditingFunc,\n setLastKeyEvent: (lastKeyEvent: KeyDownEvent | undefined) => void,\n allowedInputType: AllowedInputType,\n transformEnteredValue: TransformEnteredValueFunc<TValue>,\n revertableValue: RevertableValue<TValue>\n ): React.KeyboardEventHandler =>\n (e) => {\n if (e.ctrlKey || e.metaKey || e.shiftKey) {\n return;\n }\n\n if (e.key === \"Enter\" && isEditable) {\n setLastKeyEvent(undefined);\n startEditing();\n revertableValue.commit();\n e.preventDefault();\n e.stopPropagation();\n } else if (isEditable) {\n // TODO Find nice way to allow full user control, while also providing simplicity.\n const lastKeyEvent = createKeyDownEvent(e);\n if (\n (isNumeric(e.key) && allowsNumerics(allowedInputType)) ||\n (isLetter(e.key) && allowsLetters(allowedInputType)) ||\n isCharacter(e.key)\n ) {\n startEditing(lastKeyEvent);\n setLastKeyEvent(lastKeyEvent);\n revertableValue.commit();\n revertableValue.setValue(transformEnteredValue(lastKeyEvent.key));\n e.preventDefault();\n e.stopPropagation();\n }\n }\n };\n","export const wrapBounds = (\n x: number,\n y: number,\n maxX: number,\n maxY: number\n): { realX: number; realY: number } => {\n let realX = x;\n let realY = y;\n if (y > maxY) {\n realY = 0;\n }\n if (y < 0) {\n realY = maxY;\n }\n if (x > maxX) {\n realX = 0;\n }\n if (x < 0) {\n realX = maxX;\n }\n return {\n realX,\n realY,\n };\n};\n\nexport const wrapBoundsNextLine = (\n x: number,\n y: number,\n maxX: number,\n maxY: number\n): { realX: number; realY: number } => {\n let realX = x;\n let realY = y;\n while (realX < 0) {\n realY--;\n realX += maxX + 1;\n }\n while (realX > maxX) {\n realY++;\n realX -= maxX + 1;\n }\n if (y > maxY) {\n realY = 0;\n }\n if (y < 0) {\n realY = maxY;\n }\n return {\n realX: limitRange(realX, 0, maxX),\n realY: limitRange(realY, 0, maxY),\n };\n};\n\nexport const limitRange = (val: number, min: number, max: number): number => {\n return Math.max(Math.min(val, max), min);\n};\n","import { limitRange, wrapBounds } from \"./bounds/NumberBoundsWrapper\";\nimport { CellIndices } from \"./DirectionCalculator\";\n\nexport const clampPos = (\n pos: CellIndices,\n numRows: number,\n numCols: number\n): CellIndices => {\n return {\n rowIndex: limitRange(pos.rowIndex, 0, numRows),\n colIndex: limitRange(pos.colIndex, 0, numCols),\n };\n};\n\nexport const wrapPos = (\n pos: CellIndices,\n numRows: number,\n numCols: number\n): CellIndices => {\n const wrapped = wrapBounds(pos.colIndex, pos.rowIndex, numCols, numRows);\n return {\n rowIndex: wrapped.realY,\n colIndex: wrapped.realX,\n };\n};\n","import { clampPos, wrapPos } from \"./NumberBoundsWrapper\";\n\nexport type MoveDirection = \"right\" | \"left\" | \"down\" | \"up\";\n\nexport interface CellIndices {\n rowIndex: number;\n colIndex: number;\n}\n\nexport type TableEdgeMoveMode = \"clamped\" | \"wrapped\" | \"unlimited\";\n\nexport const getNextPositionWrappedOrClamped = (\n rowIndex: number,\n colIndex: number,\n numRows: number,\n numCols: number,\n direction: MoveDirection,\n edgeMode: TableEdgeMoveMode = \"clamped\"\n): CellIndices => {\n const posNotWrapped = getNextPosition(rowIndex, colIndex, direction);\n if (edgeMode === \"clamped\") {\n return clampPos(posNotWrapped, numRows - 1, numCols - 1);\n }\n if (edgeMode === \"wrapped\") {\n return wrapPos(posNotWrapped, numRows - 1, numCols - 1);\n }\n return posNotWrapped;\n};\n\nexport const getNextPosition = (\n rowIndex: number,\n colIndex: number,\n direction: MoveDirection\n): CellIndices => {\n if (direction === \"up\") {\n return {\n rowIndex: rowIndex - 1,\n colIndex,\n };\n }\n if (direction === \"down\") {\n return {\n rowIndex: rowIndex + 1,\n colIndex,\n };\n }\n if (direction === \"left\") {\n return {\n rowIndex,\n colIndex: colIndex - 1,\n };\n }\n if (direction === \"right\") {\n return {\n rowIndex,\n colIndex: colIndex + 1,\n };\n }\n return {\n rowIndex,\n colIndex,\n };\n};\n","export const ensureDomIdIsCorrect = (id: string): string => {\n return id.replace(/^[^a-z]+|[^\\w:.-]+/gi, \"\");\n};\n","import { UseGridCellOptions } from \"../features/grid-cell/hooks/UseGridCell\";\nimport { ValidatedUseGridNavigationOptions } from \"../features/grid-cell/hooks/UseGridNavigation\";\n\nexport const validateGridHookOptions = <TValue>(\n options: UseGridCellOptions<TValue>\n): ValidatedUseGridNavigationOptions => {\n if (!options.tableId) {\n throw new Error(\"tableId is required.\");\n }\n if (options.numRows == null) {\n throw new Error(\"numRows is required.\");\n }\n if (options.numCols == null) {\n throw new Error(\"numCols is required.\");\n }\n\n return options as ValidatedUseGridNavigationOptions;\n};\n","import { useContext, useMemo } from \"react\";\nimport { GridHooksContext } from \"../../../components/GridHooksTable\";\nimport { validateGridHookOptions } from \"../../../util/GridHookOptionsValidator\";\nimport {\n UseGridNavigationOptions,\n ValidatedUseGridNavigationOptions,\n} from \"./UseGridNavigation\";\n\nexport const useGridNavigationOptionsFromContext = (\n options: UseGridNavigationOptions\n): ValidatedUseGridNavigationOptions => {\n const context = useContext(GridHooksContext);\n\n return useMemo(\n () =>\n validateGridHookOptions({\n ...context,\n ...options,\n }),\n [context, options]\n );\n};\n","import { KeyboardEvent, useMemo } from \"react\";\nimport {\n CellIndices,\n getNextPositionWrappedOrClamped,\n MoveDirection,\n TableEdgeMoveMode,\n} from \"../../../util/DirectionCalculator\";\nimport { ensureDomIdIsCorrect } from \"../../../util/DomIdValidator\";\nimport { useGridNavigationOptionsFromContext } from \"./UseGridNavigationOptionsFromContext\";\n\nexport interface UseGridNavigationOptions {\n /**\n * The row index for current cell.\n */\n rowIndex: number;\n /**\n * The column index for current cell.\n */\n colIndex: number;\n /**\n * Total number of rows in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numRows?: number;\n /**\n * Total number of columns in table. Must be set in cell hook or in GridHooksTable prop.\n */\n numCols?: number;\n /**\n * An ID for the table, must be unique for every table in page. Must be set in cell hook or in GridHooksTable prop.\n */\n tableId?: string;\n /**\n * Edge mode. Defines how to behave when user tries to navigate outside of the table.\n * Can be 'wrapped', 'clamped' or 'unlimited'.\n * wrapped = focuses on other side of table.\n * clamped = focus stays on same cell\n * unlimited = focus is not controlled, it will try to focus on next item.\n */\n edgeMode?: TableEdgeMoveMode;\n /**\n * Callback that is invoked when user navigates to new cell by keyboard.\n */\n onCellMove?: CellMoveHandler;\n /**\n * Callback that is invoked when user navigates but don't move to new cell by keyboard.\n */\n onCellNavigation?: CellNavigationHandler;\n}\n\nexport interface ValidatedUseGridNavigationOptions {\n rowIndex: number;\n colIndex: number;\n numRows: number;\n numCols: number;\n tableId: string;\n edgeMode?: TableEdgeMoveMode;\n onCellMove?: CellMoveHandler;\n onCellNavigation?: CellNavigationHandler;\n}\n\nexport interface UseGridNavigationResult {\n requiredProps: GridNavigationRequiredProps;\n moveHandler: MoveHandler;\n focusOnCell: FocusOnCellFunc;\n}\n\n/**\n * Props that must be passed to element with focus.\n */\nexport interface GridNavigationRequiredProps {\n tabIndex: number;\n onKeyDown: (e: KeyboardEvent) => boolean;\n id: string;\n}\n\nexport type CellMoveHandler = (event: OnCellMoveEvent) => void;\nexport type CellNavigationHandler = (event: OnCellNavigationEvent) => void;\n\nexport interface OnCellMoveEvent {\n direction: MoveDirection;\n fromRowIndex: number;\n fromColIndex: number;\n rowDidChange: boolean;\n colDidChange: boolean;\n rowIndex: number;\n colIndex: number;\n}\n\nexport interface OnCellNavigationEvent extends OnCellMoveEvent {\n cellDidChange: boolean;\n}\n\nexport const useGridNavigation = (\n options: UseGridNavigationOptions\n): UseGridNavigationResult => {\n const {\n rowIndex,\n colIndex,\n numRows,\n numCols,\n tableId,\n edgeMode,\n onCellMove,\n onCellNavigation,\n } = useGridNavigationOptionsFromContext(options);\n\n const moveHandler = useMemo(\n () =>\n createMoveHandler(\n tableId,\n rowIndex,\n colIndex,\n numRows,\n numCols,\n edgeMode,\n onCellMove,\n onCellNavigation\n ),\n [\n tableId,\n rowIndex,\n colIndex,\n numRows,\n numCols,\n edgeMode,\n onCellMove,\n onCellNavigation,\n ]\n );\n\n const onKeyDown = useMemo(\n () => createKeyDownHandler(moveHandler),\n [moveHandler]\n );\n\n const id = useMemo(\n () => createCellId(tableId, rowIndex, colIndex),\n [tableId, rowIndex, colIndex]\n );\n\n const requiredProps = useMemo(\n () => ({\n tabIndex: 0,\n onKeyDown,\n id,\n }),\n [onKeyDown, id]\n );\n\n return {\n focusOnCell,\n moveHandler,\n requiredProps,\n };\n};\n\ntype MoveHandler = (direction: MoveDirection) => void;\n\nconst createMoveHandler =\n (\n tableId: string,\n rowIndex: number,\n colIndex: number,\n numRows: number,\n numCols: number,\n edgeMode?: TableEdgeMoveMode,\n onCellMove?: CellMoveHandler,\n onCellNavigation?: CellNavigationHandler\n ): MoveHandler =>\n (direction) => {\n const pos = getNextPositionWrappedOrClamped(\n rowIndex,\n colIndex,\n numRows,\n numCols,\n direction,\n edgeMode\n );\n\n const colDidChange = colIndex !== pos.colIndex;\n const rowDidChange = rowIndex !== pos.rowIndex;\n\n if (colDidChange || rowDidChange) {\n if (onCellMove) {\n onCellMove({\n direction,\n fromRowIndex: rowIndex,\n fromColIndex: colIndex,\n rowIndex: pos.rowIndex,\n colIndex: pos.colIndex,\n colDidChange,\n rowDidChange,\n });\n }\n focusOnCell(tableId, pos);\n }\n\n if (onCellNavigation) {\n onCellNavigation({\n direction,\n fromRowIndex: rowIndex,\n fromColIndex: colIndex,\n rowIndex: pos.rowIndex,\n colIndex: pos.colIndex,\n colDidChange,\n rowDidChange,\n cellDidChange: colDidChange || rowDidChange,\n });\n }\n };\n\nconst createCellId = (\n tableId: string,\n rowIndex: number,\n colIndex: number\n): string => ensureDomIdIsCorrect(`table-${tableId}-${rowIndex}-${colIndex}`);\n\nconst createKeyDownHandler =\n (moveHandler: MoveHandler) =>\n (e: KeyboardEvent): boolean => {\n if (e.key === \"ArrowLeft\") {\n moveHandler(\"left\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else if (e.key === \"ArrowUp\") {\n moveHandler(\"up\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else if (e.key === \"ArrowRight\") {\n moveHandler(\"right\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else if (e.key === \"ArrowDown\") {\n moveHandler(\"down\");\n e.preventDefault();\n e.stopPropagation();\n return true;\n } else {\n return false;\n }\n };\n\ntype FocusOnCellFunc = (tableId: string, pos: CellIndices) => void;\n\nexport const focusOnCell: FocusOnCellFunc = (tableId, pos) => {\n const el = document.getElementById(\n createCellId(tableId, pos.rowIndex, pos.colIndex)\n );\n if (el) {\n el.focus();\n }\n};\n","import { KeyboardEventHandler, useCallback, useMemo } from \"react\";\nimport { MoveDirection } from \"../../../util/DirectionCalculator\";\nimport {\n KeyDownEvent,\n useEditableCell,\n UseEditableCellOptions,\n} from \"./UseEditableCell\";\nimport {\n GridNavigationRequiredProps,\n useGridNavigation,\n UseGridNavigationOptions,\n} from \"./UseGridNavigation\";\nimport { useGridNavigationOptionsFromContext } from \"./UseGridNavigationOptionsFromContext\";\n\nexport type UseGridCellOptions<TValue> = UseGridNavigationOptions &\n UseEditableCellOptions<TValue>;\n\nexport interface UseGridCellResult<TValue> {\n /**\n * The current value in the editor. Pass this as value to form field components.\n */\n editorValue: TValue;\n /**\n * The setter for current value in the editor. Pass this as onChange to form field components.\n * @param editorValue\n */\n setEditorValue: (editorValue: TValue) => void;\n /**\n * Reverts the value of form field to the value before user started editing. This is invoked by stopEditingAndRevert.\n */\n revertEditorValue: () => void;\n /**\n * Props that must be passed to the cell DOM element which can be focused.\n */\n requiredProps: GridCellRequiredProps;\n /**\n * Moves focus to a new cell in the specified direction.\n * @param direction\n */\n move: (direction: MoveDirection) => void;\n /**\n * Opens the editor. invokes onStartEdit if provided.\n */\n startEditing: () => void;\n /**\n * Closes the editor and invokes onChange with the editor value entered by user.\n */\n stopEditing: () => void;\n /**\n * Closes the editor and reverts editor value to the previous value. Does not invoke onChange.\n */\n stopEditingAndRevert: () => void;\n /**\n * Closes the editor and moves focus to a new cell in the specified direction. Invokes onChange with editor value.\n * @param direction\n */\n stopEditingAndMove: (direction: MoveDirection) => void;\n /**\n * True if cell is currently in editing mode.\n */\n isEditing: boolean;\n /**\n * Contains last key event if editor was started by any key other than Enter.\n */\n lastKeyEvent: KeyDownEvent | undefined;\n}\n\nexport interface GridCellRequiredProps\n extends Pick<GridNavigationRequiredProps, \"tabIndex\" | \"id\"> {\n onKeyDown: KeyboardEventHandler;\n onDoubleClick: () => void;\n}\n\n// tslint:disable:no-any\n/**\n * Hook for cell in a grid. Combines navigation and editable cell.\n * @param value The value of the current cell.\n * @param options Options for hook.\n */\nexport const useGridCell = <TValue>(\n value: TValue,\n options: UseGridCellOptions<TValue>\n): UseGridCellResult<TValue> => {\n const { tableId } = useGridNavigationOptionsFromContext(options);\n const nav = useGridNavigation(options);\n const edit = useEditableCell(value, options);\n\n const cellCoordinates = useMemo(\n () => ({\n rowIndex: options.rowIndex,\n colIndex: options.colIndex,\n }),\n [options.rowIndex, options.colIndex]\n );\n\n const startEditing = useCallback(() => {\n edit.startEditing();\n nav.focusOnCell(tableId, cellCoordinates);\n }, [edit, nav, tableId, cellCoordinates]);\n\n const stopEditing = useCallback(() => {\n edit.stopEditing();\n nav.focusOnCell(tableId, cellCoordinates);\n }, [edit, nav, tableId, cellCoordinates]);\n\n const stopEditingAndRevert = useCallback(() => {\n edit.stopEditingAndRevert();\n nav.focusOnCell(tableId, cellCoordinates);\n }, [edit, nav, tableId, cellCoordinates]);\n\n const stopEditingAndMove = useCallback(\n (direction: MoveDirection) => {\n edit.stopEditing();\n nav.moveHandler(direction);\n },\n [edit, nav]\n );\n\n const move = useCallback(\n (direction: MoveDirection) => {\n nav.moveHandler(direction);\n },\n [nav]\n );\n\n const onKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n if (!edit.isEditing) {\n const consumed = nav.requiredProps.onKeyDown(e);\n if (!consumed) {\n edit.onKeyDown(e);\n }\n }\n },\n [edit, nav.requiredProps]\n );\n\n const requiredProps = useMemo(\n () => ({\n ...nav.requiredProps,\n onKeyDown,\n onDoubleClick: edit.onDoubleClick,\n }),\n [onKeyDown, edit.onDoubleClick, nav.requiredProps]\n );\n\n return {\n isEditing: edit.isEditing,\n lastKeyEvent: edit.lastKeyEvent,\n editorValue: edit.revertableValue.value,\n setEditorValue: edit.revertableValue.setValue,\n revertEditorValue: edit.revertableValue.revert,\n requiredProps,\n move,\n startEditing,\n stopEditing,\n stopEditingAndRevert,\n stopEditingAndMove,\n };\n};\n","import { Indent, Row, Space, Text } from \"@stenajs-webui/core\";\nimport {\n Icon,\n stenaArrowRight,\n stenaExclamationTriangle,\n} from \"@stenajs-webui/elements\";\nimport { TextInput } from \"@stenajs-webui/forms\";\nimport {\n EntityCrudStatusRedux,\n ModifiedFieldRedux,\n} from \"@stenajs-webui/redux\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { KeyboardEventHandler, useCallback } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n defaultTableRowHeight,\n tableBorder,\n} from \"../../../../config/TableConfig\";\nimport {\n useGridCell,\n UseGridCellOptions,\n} from \"../../../grid-cell/hooks/UseGridCell\";\nimport {\n CrudStatusIndicator,\n hasIndicatorContent,\n} from \"../CrudStatusIndicator\";\n\ninterface Props<TStoreState> {\n value?: string;\n entityId: string;\n isEditable?: boolean;\n rowIndent?: boolean;\n allowedInputType: UseGridCellOptions<string>[\"allowedInputType\"];\n modifiedFieldsRedux: ModifiedFieldRedux<TStoreState>;\n crudStatusRedux: EntityCrudStatusRedux<TStoreState>;\n rowIndex: number;\n colIndex: number;\n numRows: number;\n numCols: number;\n warningOnEmpty?: string;\n}\n\nexport const EditableTextCellWithCrudAndModified =\n function EditableTextCellWithCrudAndModified<TStoreState>({\n allowedInputType,\n value = \"\",\n entityId,\n isEditable,\n rowIndent,\n crudStatusRedux,\n modifiedFieldsRedux,\n colIndex,\n rowIndex,\n numCols,\n numRows,\n warningOnEmpty,\n }: Props<TStoreState>) {\n const enableGridCell = true;\n\n const dispatch = useDispatch();\n\n const modifiedFieldsState = useSelector(\n modifiedFieldsRedux.selectors.getState\n );\n const crudStatusState = useSelector(crudStatusRedux.selectors.getState);\n\n const modifiedField = modifiedFieldsState.entities[entityId];\n const crudStatus = crudStatusState.entities[entityId];\n\n const onChangeHandler = useCallback(\n (newValue: string | undefined = \"\") => {\n if (newValue === value) {\n dispatch(modifiedFieldsRedux.actions.clearEntity(entityId));\n } else {\n dispatch(\n modifiedFieldsRedux.actions.setEntity({\n id: entityId,\n originalValue: value,\n newValue,\n modified: true,\n })\n );\n }\n },\n [dispatch, entityId, modifiedFieldsRedux.actions, value]\n );\n\n const {\n isEditing,\n stopEditing,\n editorValue,\n setEditorValue,\n stopEditingAndRevert,\n stopEditingAndMove,\n lastKeyEvent,\n requiredProps: { onKeyDown, ...requiredProps },\n } = useGridCell(value, {\n rowIndex,\n colIndex,\n numCols,\n numRows,\n tableId: \"serviceManningMatrixTable\",\n onChange: onChangeHandler,\n isEditable,\n allowedInputType,\n });\n\n const onKeyDownHandler = useCallback<KeyboardEventHandler>(\n (ev) => {\n if (ev.key === \"Delete\") {\n dispatch(modifiedFieldsRedux.actions.clearEntity(entityId));\n dispatch(\n crudStatusRedux.actions.setEntityFields(entityId, {\n hasError: false,\n errorMessage: undefined,\n })\n );\n } else {\n onKeyDown(ev);\n }\n },\n [\n onKeyDown,\n entityId,\n dispatch,\n modifiedFieldsRedux.actions,\n crudStatusRedux.actions,\n ]\n );\n\n return (\n <Row\n height={defaultTableRowHeight}\n width={\"100%\"}\n borderBottom={tableBorder}\n hoverBackground={\"var(--ui7)\"}\n alignItems={\"center\"}\n >\n {rowIndent && <Indent num={rowIndent} />}\n <Row\n width={\"100%\"}\n height={\"100%\"}\n justifyContent={\"flex-end\"}\n alignItems={\"center\"}\n border={\"1px solid transparent\"}\n borderRadius={enableGridCell ? \"4px\" : undefined}\n focusBorder={\n enableGridCell && !isEditing\n ? \"1px solid var(--primary-action-color)\"\n : undefined\n }\n hoverBorder={\n enableGridCell && !isEditing ? \"var(--ui5) solid 1px;\" : undefined\n }\n onKeyDown={onKeyDownHandler}\n {...(enableGridCell ? requiredProps : undefined)}\n >\n <Indent row alignItems={\"center\"}>\n {isEditing ? (\n <TextInput\n onValueChange={setEditorValue}\n value={editorValue}\n onDone={stopEditing}\n onEsc={stopEditingAndRevert}\n autoFocus\n selectAllOnMount={!lastKeyEvent}\n onMove={stopEditingAndMove}\n />\n ) : (\n <>\n <Text\n color={isEditable ? \"var(--primary-action-color)\" : undefined}\n variant={modifiedField?.modified ? \"bold\" : undefined}\n >\n {value}\n </Text>\n {modifiedField?.newValue !== undefined && (\n <>\n <Indent>\n <Icon icon={stenaArrowRight} size={12} />\n </Indent>\n <Text\n color={\"var(--primary-action-color)\"}\n variant={\"bold\"}\n >\n {modifiedField.newValue}\n </Text>\n </>\n )}\n {crudStatus && hasIndicatorContent(crudStatus) && (\n <Space num={2} />\n )}\n {warningOnEmpty &&\n modifiedField?.modified &&\n modifiedField?.newValue === \"\" ? (\n <Tooltip label={warningOnEmpty} zIndex={100}>\n <Icon\n icon={stenaExclamationTriangle}\n color={\"var(--ui-alert1)\"}\n size={14}\n />\n </Tooltip>\n ) : (\n <CrudStatusIndicator crudStatus={crudStatus} />\n )}\n </>\n )}\n </Indent>\n </Row>\n {rowIndent && <Indent num={rowIndent} />}\n </Row>\n );\n };\n","import { createContext, Dispatch } from \"react\";\nimport { StandardTableConfig } from \"../config/StandardTableConfig\";\nimport { StandardTableState } from \"../redux/StandardTableReducer\";\nimport {\n StandardTableAction,\n StandardTableActions,\n} from \"../util/ActionsFactory\";\n\nexport interface StandardTableInternalActionsContext<\n TColumnKey extends string\n> {\n dispatch: Dispatch<StandardTableAction<TColumnKey>>;\n actions: StandardTableActions<TColumnKey>;\n}\n\n/**\n * A combination of dispatch, state and actions. This is used to\n * connect the table to a state.\n */\nexport interface TableContext<TColumnKey extends string> {\n dispatch: Dispatch<StandardTableAction<TColumnKey>>;\n state: StandardTableState<TColumnKey>;\n actions: StandardTableActions<TColumnKey>;\n}\n\nexport const StandardTableTableIdContext = createContext<string>(\"\");\n\nexport const StandardTableStateContext = createContext<StandardTableState<any>>(\n undefined as any\n);\n\nexport const StandardTableActionsContext = createContext<\n StandardTableInternalActionsContext<any>\n>(undefined as any);\n\nexport const StandardTableConfigContext = createContext<\n StandardTableConfig<any, any, any>\n>(undefined as any);\n","import {\n createEntityActions,\n createSelectedIdsActions,\n createSortOrderActions,\n EntityActions,\n EntitySelectors,\n SelectedIdsActions,\n SelectedIdsSelectors,\n SortOrderActions,\n SortOrderSelectors,\n} from \"@stenajs-webui/redux\";\nimport { StandardTableStateFields } from \"./StandardTableReducer\";\n\nexport interface InternalStandardTableActions<TColumnKey extends string> {\n sortOrder: SortOrderActions<TColumnKey>;\n selectedIds: SelectedIdsActions;\n expandedRows: SelectedIdsActions;\n fields: EntityActions<StandardTableStateFields>;\n}\n\nexport interface StandardTableSelectors<\n TStoreState,\n TColumnKey extends string\n> {\n sortOrder: SortOrderSelectors<TStoreState, TColumnKey>;\n selectedIds: SelectedIdsSelectors<TStoreState>;\n expandedRows: SelectedIdsSelectors<TStoreState>;\n fields: EntitySelectors<TStoreState, StandardTableStateFields>;\n}\n\nexport interface StandardTableActionsAndSelectors<\n TStoreState,\n TColumnKey extends string\n> {\n actions: InternalStandardTableActions<TColumnKey>;\n selectors: StandardTableSelectors<TStoreState, TColumnKey>;\n}\n\nexport const createInternalStandardTableActions = <\n TColumnKey extends string\n>(): InternalStandardTableActions<TColumnKey> => ({\n sortOrder: createSortOrderActions<TColumnKey>(),\n selectedIds: createSelectedIdsActions(),\n expandedRows: createSelectedIdsActions(),\n fields: createEntityActions<StandardTableStateFields>(),\n});\n","type ReducerIdSuffix = \"selectedIds\" | \"expandedRows\" | \"sortOrder\" | \"fields\";\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: ReducerIdSuffix\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createEntityReducer,\n createSelectedIdsReducer,\n createSelectedIdsReducerInitialState,\n createSortOrderReducer,\n createSortOrderReducerInitialState,\n EntityState,\n reducerIdGate,\n SelectedIdsState,\n SortOrderState,\n} from \"@stenajs-webui/redux\";\nimport { getReducerIdFor } from \"./ReducerIdFactory\";\nimport { combineReducers, Reducer } from \"redux\";\nimport { StandardTableAction } from \"../util/ActionsFactory\";\n\nexport interface StandardTableState<TColumnKey extends string> {\n sortOrder: SortOrderState<TColumnKey>;\n selectedIds: SelectedIdsState;\n expandedRows: SelectedIdsState;\n fields: EntityState<StandardTableStateFields>;\n}\n\nexport interface StandardTableStateFields {\n lastSelectedId?: string;\n}\n\nexport const createStandardTableInitialState = <TColumnKey extends string>(\n sortBy: TColumnKey | undefined = undefined,\n desc: boolean = false,\n selectedIds: string[] = [],\n expandedRows: string[] = []\n): StandardTableState<TColumnKey> => ({\n sortOrder: createSortOrderReducerInitialState(sortBy, desc),\n selectedIds: createSelectedIdsReducerInitialState(selectedIds),\n expandedRows: createSelectedIdsReducerInitialState(expandedRows),\n fields: { lastSelectedId: undefined },\n});\n\nexport type StandardTableReducer<TColumnKey extends string> = Reducer<\n StandardTableState<TColumnKey>,\n StandardTableAction<TColumnKey>\n>;\n\nexport const createStandardTableReducer = <TColumnKey extends string>(\n reducerId: string,\n initialState?: Partial<StandardTableState<TColumnKey>>\n): StandardTableReducer<TColumnKey> => {\n const sortOrder = reducerIdGate(\n getReducerIdFor(reducerId, \"sortOrder\"),\n createSortOrderReducer<TColumnKey>(initialState?.sortOrder)\n );\n const selectedIds = reducerIdGate(\n getReducerIdFor(reducerId, \"selectedIds\"),\n createSelectedIdsReducer(initialState?.selectedIds)\n );\n const expandedRows = reducerIdGate(\n getReducerIdFor(reducerId, \"expandedRows\"),\n createSelectedIdsReducer(initialState?.expandedRows)\n );\n const fields = reducerIdGate(\n getReducerIdFor(reducerId, \"fields\"),\n createEntityReducer<StandardTableStateFields>(initialState?.fields ?? {})\n );\n\n return combineReducers({\n sortOrder,\n selectedIds,\n expandedRows,\n fields,\n });\n};\n","import { useContext } from \"react\";\nimport { StandardTableConfig } from \"../config/StandardTableConfig\";\nimport {\n StandardTableActionsContext,\n StandardTableConfigContext,\n StandardTableInternalActionsContext,\n StandardTableStateContext,\n StandardTableTableIdContext,\n} from \"../context/StandardTableStateContext\";\nimport { StandardTableState } from \"../redux/StandardTableReducer\";\n\nexport const useStandardTableId = (): string =>\n useContext(StandardTableTableIdContext);\n\nexport const useStandardTableConfig = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(): StandardTableConfig<TItem, TColumnKey, TColumnGroupKey> =>\n useContext(StandardTableConfigContext);\n\nexport const useStandardTableState = <\n TColumnKey extends string\n>(): StandardTableState<TColumnKey> => useContext(StandardTableStateContext);\n\nexport const useStandardTableActions = <\n TColumnKey extends string\n>(): StandardTableInternalActionsContext<TColumnKey> =>\n useContext(StandardTableActionsContext);\n","import { createContext, useContext, useMemo } from \"react\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { GroupConfigAndId } from \"../features/column-groups/ColumnGroupFactory\";\n\nexport const GroupConfigsAndIdsForRowsContext = createContext<\n Array<GroupConfigAndId<any>>\n>([]);\n\nexport const useGroupConfigsAndIdsForRows = <\n TColumnKey extends string\n>(): Array<GroupConfigAndId<TColumnKey>> =>\n useContext<Array<GroupConfigAndId<TColumnKey>>>(\n GroupConfigsAndIdsForRowsContext\n );\n\nexport const useTotalNumColumnsForRows = () => {\n const config = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n let offset = 0;\n if (config.enableExpandCollapse) {\n offset++;\n }\n if (config.showRowCheckbox) {\n offset++;\n }\n return (\n offset +\n useMemo(\n () =>\n groupConfigsAndIds\n .map((c) => c.groupConfig.columnOrder.length)\n .reduce((sum, item) => sum + item, 0),\n [groupConfigsAndIds]\n )\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { StandardTableOnKeyDown } from \"../types/StandardTableEvents\";\n\nexport const OnKeyDownContext = createContext<\n StandardTableOnKeyDown<any, any> | undefined\n>(undefined);\n\nexport const useOnKeyDownContext = <TItem, TColumnKey extends string>() =>\n useContext(OnKeyDownContext) as\n | StandardTableOnKeyDown<TItem, TColumnKey>\n | undefined;\n","import { createContext, useContext } from \"react\";\nimport { StandardTableOnSortOrderChange } from \"../types/StandardTableEvents\";\n\nexport const OnSortOrderChangeContext = createContext<\n StandardTableOnSortOrderChange<any> | undefined\n>(undefined);\n\nexport const useOnSortOrderChangeContext = <TColumnKey extends string>() =>\n useContext(OnSortOrderChangeContext) as\n | StandardTableOnSortOrderChange<TColumnKey>\n | undefined;\n","import { createContext, useContext } from \"react\";\n\nexport const StandardTableColumnGroupOrderContext = createContext<\n Array<string> | undefined\n>(undefined);\n\nexport const StandardTableUsingColumnGroupsContext =\n createContext<boolean>(false);\n\nexport const useColumnGroupOrderContext = <TColumnGroupKey extends string>() =>\n useContext(StandardTableColumnGroupOrderContext) as Array<TColumnGroupKey>;\n","import { createContext, useContext } from \"react\";\nimport { StandardTableVariant } from \"../components/StandardTable\";\n\nexport const StandardTableVariantContext =\n createContext<StandardTableVariant>(\"standard\");\n\nexport const useStandardTableVariant = () =>\n useContext(StandardTableVariantContext);\n","import { createContext, useContext } from \"react\";\nimport { StickyPropsPerColumn } from \"../features/sticky-columns/types\";\n\nexport const StickyPropsPerColumnContext = createContext<\n StickyPropsPerColumn<string>\n>({});\n\nexport const useStickyPropsPerColumnContext = () =>\n useContext(StickyPropsPerColumnContext);\n","import { createContext, useContext } from \"react\";\n\nexport const TotalNumColumnsContext = createContext<number>(0);\n\nexport const useTotalNumColumns = () => useContext(TotalNumColumnsContext);\n","import { compact } from \"lodash\";\nimport { StandardTableColumnGroupConfig } from \"../../config/StandardTableColumnGroupConfig\";\nimport {\n StandardTableConfigWithGroups,\n StandardTableConfigWithNoGroups,\n} from \"../../config/StandardTableConfig\";\n\nexport interface GroupConfigAndId<TColumnKey extends string> {\n groupId: string;\n groupConfig: StandardTableColumnGroupConfig<TColumnKey>;\n}\n\nexport const createGroupConfigAndIdsForRows = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n columnGroups:\n | StandardTableConfigWithGroups<\n TItem,\n TColumnKey,\n TColumnGroupKey\n >[\"columnGroups\"]\n | undefined,\n columnGroupOrder:\n | StandardTableConfigWithGroups<\n TItem,\n TColumnKey,\n TColumnGroupKey\n >[\"columnGroupOrder\"]\n | undefined,\n columnOrder:\n | StandardTableConfigWithNoGroups<TItem, TColumnKey>[\"columnOrder\"]\n | undefined\n): Array<GroupConfigAndId<TColumnKey>> => {\n if (columnGroups) {\n return compact(\n columnGroupOrder?.map((groupId) => {\n const groupConfig = columnGroups?.[groupId];\n return {\n groupId,\n groupConfig,\n };\n }) ?? []\n )\n .filter((item) => (item.groupConfig?.columnOrder.length ?? 0) > 0)\n .map<GroupConfigAndId<TColumnKey>>(\n (p) => p as GroupConfigAndId<TColumnKey>\n );\n }\n return [\n {\n groupId: \"virtual\",\n groupConfig: {\n label: \"\",\n columnOrder: columnOrder ?? [],\n },\n },\n ];\n};\n","import { tableBorder } from \"../../../config/TableConfig\";\n\nexport const getCellBorder = (\n borderFromGroup: string | boolean | undefined,\n disableBorderLeft: boolean | undefined,\n borderLeft: string | boolean | undefined\n): string | undefined => {\n if (borderFromGroup) {\n if (borderFromGroup === true) {\n return tableBorder;\n }\n return borderFromGroup;\n }\n if (disableBorderLeft) {\n return undefined;\n }\n\n if (!borderLeft) {\n return undefined;\n }\n if (borderLeft === true) {\n return tableBorder;\n }\n return borderLeft;\n};\n\nexport const getCellBorderFromGroup = (\n groupIndex: number,\n columnIndexInGroup: number,\n groupBorderLeft: string | boolean | undefined\n): string | undefined => {\n if (groupIndex === 0 || columnIndexInGroup !== 0) {\n return undefined;\n }\n if (groupBorderLeft) {\n if (groupBorderLeft === true) {\n return tableBorder;\n }\n return groupBorderLeft;\n }\n return undefined;\n};\n","import { StandardTableColumnConfig } from \"../config/StandardTableColumnConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableConfig } from \"./UseStandardTableConfig\";\n\nexport const useColumnConfigById = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n columnId: string\n): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> => {\n const { columns } = useStandardTableConfig();\n const column = columns[columnId];\n if (!column) {\n throw new Error(\"No config for column with id=\" + columnId);\n }\n return column;\n};\n\nexport const useFirstColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> | undefined => {\n const config = useStandardTableConfig();\n const columnId =\n useGroupConfigsAndIdsForRows()?.[0]?.groupConfig.columnOrder?.[0];\n return columnId ? config.columns[columnId] : undefined;\n};\n\nexport const useLastColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> | undefined => {\n const config = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n const groupConfigAndId = groupConfigsAndIds[groupConfigsAndIds.length - 1];\n const columnId =\n groupConfigAndId?.groupConfig.columnOrder[\n groupConfigAndId.groupConfig.columnOrder.length - 1\n ] ?? undefined;\n return columnId ? config.columns[columnId] : undefined;\n};\n","import { Heading, Indent, Row, Space } from \"@stenajs-webui/core\";\nimport {\n Icon,\n InputSpinner,\n stenaExclamationTriangle,\n} from \"@stenajs-webui/elements\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Tooltip } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport { StandardTableColumnGroupConfig } from \"../../config/StandardTableColumnGroupConfig\";\nimport { useColumnConfigById } from \"../../hooks/UseColumnConfigById\";\nimport { useStandardTableConfig } from \"../../hooks/UseStandardTableConfig\";\n\ninterface ColumnGroupColumnItemProps<TColumnKey extends string> {\n groupConfig: StandardTableColumnGroupConfig<TColumnKey>;\n columnId: TColumnKey;\n isFirstGroup: boolean;\n isLastGroup: boolean;\n borderFromGroup?: string;\n colSpan: number;\n}\n\nexport const ColumnInGroup = function ColumnGroupColumnItem<\n TColumnKey extends string\n>({\n columnId,\n groupConfig,\n borderFromGroup,\n colSpan,\n isFirstGroup,\n isLastGroup,\n}: ColumnGroupColumnItemProps<TColumnKey>) {\n const { label, render, contentLeft, contentRight, loading, error } =\n groupConfig;\n const { width, minWidth, zIndex, borderLeft } = useColumnConfigById(columnId);\n const config = useStandardTableConfig();\n const { stickyHeader, headerRowOffsetTop } = config;\n\n const stickyColumnGroups =\n \"columnGroupOrder\" in config ? config.stickyColumnGroups : undefined;\n\n const activeBorder = getActiveBorder(borderFromGroup, borderLeft);\n const isStickyFirstGroup =\n isFirstGroup &&\n (stickyColumnGroups === \"first\" || stickyColumnGroups === \"both\");\n const isStickyLastGroup =\n isLastGroup &&\n (stickyColumnGroups === \"last\" || stickyColumnGroups === \"both\");\n\n const isSticky = isStickyFirstGroup || isStickyLastGroup || stickyHeader;\n const isStickyGroup = isStickyFirstGroup || isStickyLastGroup;\n\n return (\n <th\n colSpan={colSpan}\n style={\n {\n position: isSticky ? \"sticky\" : undefined,\n height: \"var(--current-row-height)\",\n width: width,\n minWidth: minWidth ?? width ?? \"20px\",\n background: isSticky ? \"white\" : \"transparent\",\n left: isStickyFirstGroup ? `var(--current-left-offset)` : undefined,\n right: isStickyLastGroup ? `0px` : undefined,\n top: stickyHeader ? headerRowOffsetTop ?? \"0px\" : undefined,\n borderLeft: activeBorder,\n zIndex:\n stickyHeader && isStickyGroup\n ? \"var(--swui-sticky-column-group-label-z-index)\"\n : isStickyGroup\n ? \"var(--swui-sticky-group-group-z-index)\"\n : stickyHeader\n ? zIndex ?? \"var(--swui-sticky-header-column-group-z-index)\"\n : zIndex ?? 1,\n boxShadow: isStickyFirstGroup\n ? \"var(--swui-sticky-column-shadow-right)\"\n : isStickyLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : undefined,\n } as CSSProperties\n }\n >\n <Row alignItems={\"center\"}>\n {\n <>\n {contentLeft && (\n <>\n <Space />\n {contentLeft}\n <Space num={0.5} />\n </>\n )}\n {render ? (\n render(groupConfig)\n ) : (\n <Indent>\n <Heading variant={\"h5\"} whiteSpace={\"nowrap\"}>\n {label}\n </Heading>\n </Indent>\n )}\n {contentRight && (\n <>\n <Space num={0.5} />\n {contentRight}\n </>\n )}\n {(error || loading) && <Indent />}\n {loading ? (\n <InputSpinner />\n ) : error ? (\n <Tooltip\n label={error}\n placement={\"bottom\"}\n appendTo={document.body}\n >\n <Icon\n icon={stenaExclamationTriangle}\n color={cssColor(\"--lhds-color-red-500\")}\n size={14}\n />\n </Tooltip>\n ) : undefined}\n </>\n }\n </Row>\n </th>\n );\n};\n\nconst getActiveBorder = (\n borderFromGroup: string | undefined,\n borderFromColumn: string | boolean | undefined\n): string | undefined => {\n if (borderFromGroup) {\n return borderFromGroup;\n }\n if (borderFromColumn) {\n return \"1px solid transparent\";\n }\n return undefined;\n};\n","import { Property } from \"csstype\";\nimport { CSSProperties } from \"react\";\n\nexport const createStickyHeaderProps = (\n stickyHeader: boolean | undefined,\n stickyColumn: boolean | undefined,\n headerRowOffsetTop: string | undefined,\n zIndexFromConfig: number | undefined\n): CSSProperties => ({\n top: stickyHeader\n ? getTopPosition(stickyHeader, headerRowOffsetTop)\n : undefined,\n background: stickyHeader || stickyColumn ? \"white\" : undefined,\n position: stickyHeader || stickyColumn ? \"sticky\" : undefined,\n boxShadow: stickyColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex:\n stickyHeader || stickyColumn\n ? zIndexFromConfig ??\n (\"var(--swui-sticky-header-z-index)\" as Property.ZIndex)\n : zIndexFromConfig,\n});\n\nconst getTopPosition = (\n stickyHeader: boolean | undefined,\n headerRowOffsetTop: string | undefined\n) => {\n if (stickyHeader && headerRowOffsetTop) {\n return headerRowOffsetTop;\n } else if (headerRowOffsetTop) {\n return headerRowOffsetTop;\n } else if (stickyHeader) {\n return 0;\n }\n return undefined;\n};\n","import * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport {\n defaultTableRowHeight,\n tableBorderLeft,\n} from \"../../../../config/TableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableConfig } from \"../../hooks/UseStandardTableConfig\";\nimport { getCellBorderFromGroup } from \"../../util/CellBorderCalculator\";\nimport { ColumnInGroup } from \"./ColumnInGroup\";\nimport { createStickyHeaderProps } from \"./StickyHeaderPropsFactory\";\n\ninterface ColumnGroupRowProps {\n height?: string;\n}\n\nexport const ColumnGroupRow = React.memo(function ColumnGroupRow({\n height = defaultTableRowHeight,\n}: ColumnGroupRowProps) {\n const groupConfigAndIds = useGroupConfigsAndIdsForRows();\n const config = useStandardTableConfig();\n\n const {\n showHeaderCheckbox,\n enableExpandCollapse,\n rowIndent,\n zIndex,\n stickyHeader,\n stickyCheckboxColumn,\n headerRowOffsetTop,\n } = config;\n\n const stickyHeaderProps = createStickyHeaderProps(\n stickyHeader,\n stickyCheckboxColumn,\n headerRowOffsetTop,\n zIndex\n );\n\n const zIndexForCells = (\n stickyHeader\n ? \"var(--swui-sticky-column-group-label-z-index)\"\n : \"var(--swui-sticky-group-group-z-index)\"\n ) as CSSProperties[\"zIndex\"];\n\n return (\n <tr\n style={{\n height: height,\n borderLeft: tableBorderLeft,\n }}\n >\n {rowIndent && <th style={stickyHeaderProps} />}\n {enableExpandCollapse && (\n <th\n style={{\n ...stickyHeaderProps,\n width: \"var(--swui-expand-cell-width)\",\n left: stickyCheckboxColumn ? \"0px\" : undefined,\n zIndex: zIndexForCells,\n }}\n />\n )}\n {showHeaderCheckbox && (\n <th\n style={{\n ...stickyHeaderProps,\n left:\n stickyCheckboxColumn && enableExpandCollapse\n ? \"var(--swui-expand-cell-width)\"\n : stickyCheckboxColumn\n ? \"0px\"\n : undefined,\n zIndex: zIndexForCells,\n }}\n />\n )}\n {groupConfigAndIds.map(({ groupConfig, groupId }, groupIndex) => (\n <ColumnInGroup\n isFirstGroup={groupIndex === 0}\n isLastGroup={groupIndex === groupConfigAndIds.length - 1}\n groupConfig={groupConfig}\n columnId={groupConfig.columnOrder[0]}\n key={groupId}\n colSpan={groupConfig.columnOrder.length}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n 0,\n groupConfig.borderLeft\n )}\n />\n ))}\n {rowIndent && <th style={stickyHeaderProps} />}\n <th style={stickyHeaderProps} />\n </tr>\n );\n});\n","import { StandardTableColumnConfig } from \"../../config/StandardTableColumnConfig\";\nimport { StandardTableConfig } from \"../../config/StandardTableConfig\";\nimport { createGroupConfigAndIdsForRows } from \"../column-groups/ColumnGroupFactory\";\n\nexport type ColumnIndexPerColumnId<TColumnKey extends string> = Record<\n TColumnKey,\n number\n>;\n\nexport interface ColumnIndexPerColumnIdCalculationResult<\n TColumnKey extends string\n> {\n columnIndexPerColumnId: ColumnIndexPerColumnId<TColumnKey>;\n numNavigableColumns: number;\n}\n\nexport const calculateColumnIndexPerColumnId = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>\n): ColumnIndexPerColumnIdCalculationResult<TColumnKey> => {\n const groupConfigs = createGroupConfigAndIdsForRows(\n \"columnGroups\" in config ? config.columnGroups : undefined,\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined,\n \"columnOrder\" in config ? config.columnOrder : undefined\n );\n let columnIndexPerColumnId = {} as ColumnIndexPerColumnId<TColumnKey>;\n let currentIndex = 0;\n if (config.showRowCheckbox) {\n currentIndex++;\n }\n if (config.enableExpandCollapse) {\n currentIndex++;\n }\n groupConfigs.forEach((conf) => {\n conf.groupConfig.columnOrder.forEach((columnId) => {\n if (isColumnNavigable(config.columns[columnId])) {\n columnIndexPerColumnId[columnId] = currentIndex++;\n }\n });\n });\n return {\n columnIndexPerColumnId,\n numNavigableColumns: currentIndex,\n };\n};\n\nconst isColumnNavigable = <TItem, TColumnKey extends string>(\n columnConfig: StandardTableColumnConfig<TItem, unknown, TColumnKey>\n): boolean => !columnConfig.disableGridCell;\n","import { createContext, useContext } from \"react\";\nimport { ColumnIndexPerColumnIdCalculationResult } from \"./ColumnIndexCalculator\";\n\nexport const ColumnIndexPerColumnIdContext = createContext<\n ColumnIndexPerColumnIdCalculationResult<string>\n>({\n columnIndexPerColumnId: {},\n numNavigableColumns: 0,\n});\n\nexport const useColumnIndexPerColumnIdContext = <TColumnKey extends string>() =>\n useContext(\n ColumnIndexPerColumnIdContext\n ) as ColumnIndexPerColumnIdCalculationResult<TColumnKey>;\n","import {\n StandardTableConfig,\n StandardTableConfigWithGroups,\n} from \"../../config/StandardTableConfig\";\n\nexport const ensureConfigHasValidSticky = <TItem, TColumnKey extends string>(\n config: StandardTableConfig<TItem, TColumnKey>\n): void => {\n if (\"columnGroupOrder\" in config) {\n ensureNoColumnsAreSticky(config);\n if (\n config.stickyColumnGroups === \"first\" ||\n config.stickyColumnGroups === \"both\"\n ) {\n ensureAllColumnsInGroupHasFixedWidth(config, 0);\n }\n if (\n config.stickyColumnGroups === \"last\" ||\n config.stickyColumnGroups === \"both\"\n ) {\n ensureAllColumnsInGroupHasFixedWidth(\n config,\n config.columnGroupOrder.length - 1\n );\n }\n }\n};\n\nexport const ensureNoColumnsAreSticky = <TItem, TColumnKey extends string>(\n config: StandardTableConfig<TItem, TColumnKey>\n): void => {\n const columnIds = Object.keys(config.columns);\n columnIds.forEach((columnId) => {\n const columnConfig = config.columns[columnId];\n if (columnConfig.sticky) {\n throw new Error(\n \"Columns can not be sticky when column groups are used. columnId: \" +\n columnId\n );\n }\n });\n};\n\nexport const ensureAllColumnsInGroupHasFixedWidth = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>,\n columnGroupIndex: number\n): void => {\n if (!config.columnGroupOrder || config.columnGroupOrder.length === 0) {\n throw new Error(\n \"columnGroupOrder required when validating column group fixed width.\"\n );\n }\n\n const columnGroupId = config.columnGroupOrder[columnGroupIndex];\n const columnGroupConfig = config.columnGroups?.[columnGroupId];\n\n if (!columnGroupConfig) {\n throw new Error(\n \"Column group does not exist. Column group id = \" + columnGroupId\n );\n }\n\n columnGroupConfig.columnOrder.forEach((columnId) => {\n const columnConfig = config.columns[columnId];\n if (columnConfig.width == null) {\n throw new Error(\n \"All columns in sticky column group must have width set.\"\n );\n }\n });\n};\n","import {\n StandardTableConfig,\n StandardTableConfigWithGroups,\n} from \"../../config/StandardTableConfig\";\n\nexport type OffsetPerColumn<TColumnKey extends string> = Record<\n TColumnKey,\n string\n>;\n\n/**\n * This methods assumes that the config has already been validated to be correct.\n * @param config\n */\nexport const calculateOffsetForColumnInStickyColumnGroups = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): OffsetPerColumn<TColumnKey> => {\n const left =\n config.stickyColumnGroups === \"first\" ||\n config.stickyColumnGroups === \"both\"\n ? calculateOffsetForColumns(\n getColumnIdsForLeftSideStickyGroup(config),\n config.columns,\n true\n )\n : undefined;\n\n const right =\n config.stickyColumnGroups === \"last\" || config.stickyColumnGroups === \"both\"\n ? calculateOffsetForColumns(\n getColumnIdsForRightSideStickyGroup(config),\n config.columns,\n false\n )\n : undefined;\n\n return {\n ...left,\n ...right,\n } as OffsetPerColumn<TColumnKey>;\n};\n\nexport const calculateOffsetForColumns = <TItem, TColumnKey extends string>(\n columnIds: Array<TColumnKey>,\n columns: StandardTableConfig<TItem, TColumnKey>[\"columns\"],\n includeOffsetForCheckboxAndExpand: boolean\n): OffsetPerColumn<TColumnKey> => {\n const r = {} as OffsetPerColumn<TColumnKey>;\n const widths: Array<string> = [\n includeOffsetForCheckboxAndExpand ? \"var(--current-left-offset)\" : \"0px\",\n ];\n for (let i = 0; i < columnIds.length; i++) {\n const columnId = columnIds[i];\n const columnConfig = columns?.[columnId];\n r[columnId] = getCalcForWidths(widths);\n widths.push(columnConfig?.width ?? \"0px\");\n }\n return r;\n};\n\nconst getCalcForWidths = (widths: Array<string>): string => {\n if (widths.length === 0) {\n return \"0px\";\n }\n if (widths.length === 1) {\n return widths[0];\n }\n return \"calc(\" + widths.join(\" + \") + \")\";\n};\n\nexport const getColumnIdsForLeftSideStickyGroup = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): Array<TColumnKey> => {\n const columnGroupId = config.columnGroupOrder?.[0];\n if (!columnGroupId) {\n return [];\n }\n const columnGroupConfig = config.columnGroups?.[columnGroupId];\n return columnGroupConfig?.columnOrder ?? [];\n};\n\nexport const getColumnIdsForRightSideStickyGroup = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): Array<TColumnKey> => {\n const columnGroupId =\n config.columnGroupOrder?.[config.columnGroupOrder?.length - 1];\n if (!columnGroupId) {\n return [];\n }\n const columnGroupConfig = config.columnGroups?.[columnGroupId];\n\n if (!columnGroupConfig) {\n return [];\n }\n\n const r = [...columnGroupConfig.columnOrder];\n r.reverse();\n return r;\n};\n","import {\n StandardTableConfig,\n StandardTableConfigWithGroups,\n StandardTableConfigWithNoGroups,\n} from \"../../config/StandardTableConfig\";\nimport { calculateOffsetForColumnInStickyColumnGroups } from \"./StickyColumnGroupOffsetCalculator\";\nimport { StickyPropsPerColumn } from \"./types\";\n\nexport const getStickyPropsPerColumn = <TItem, TColumnKey extends string>(\n config: StandardTableConfig<TItem, TColumnKey>\n): StickyPropsPerColumn<TColumnKey> => {\n if (\"columnGroups\" in config) {\n return getStickyPropsPerColumnWithGroups(config);\n } else {\n return getStickyPropsPerColumnWithNoGroups(config);\n }\n};\n\nexport const getStickyPropsPerColumnWithNoGroups = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithNoGroups<TItem, TColumnKey>\n): StickyPropsPerColumn<TColumnKey> => {\n const columnIds = Object.keys(config.columns) as Array<TColumnKey>;\n\n return columnIds.reduce<StickyPropsPerColumn<TColumnKey>>((sum, columnId) => {\n const columnConfig = config.columns[columnId];\n const sticky = Boolean(columnConfig.sticky);\n sum[columnId] = {\n sticky,\n left: sticky\n ? `calc(var(--current-left-offset) + ${columnConfig.left ?? \"0px\"})`\n : undefined,\n right: sticky ? columnConfig.right : undefined,\n type: \"column\",\n isFirstColumnInLastGroup: false,\n isLastColumnInFirstGroup: false,\n };\n return sum;\n }, {} as StickyPropsPerColumn<TColumnKey>);\n};\n\nexport const getStickyPropsPerColumnWithGroups = <\n TItem,\n TColumnKey extends string\n>(\n config: StandardTableConfigWithGroups<TItem, TColumnKey>\n): StickyPropsPerColumn<TColumnKey> => {\n const r = {} as StickyPropsPerColumn<TColumnKey>;\n const columnGroupIds = config.columnGroupOrder;\n\n const stickyGroupOffsets =\n calculateOffsetForColumnInStickyColumnGroups(config);\n\n const firstGroupIsSticky =\n config.stickyColumnGroups === \"first\" ||\n config.stickyColumnGroups === \"both\";\n\n const lastGroupIsSticky =\n config.stickyColumnGroups === \"last\" ||\n config.stickyColumnGroups === \"both\";\n\n columnGroupIds.forEach((columnGroupId, columnGroupIndex) => {\n const columnGroup = config.columnGroups[columnGroupId];\n const columnIds = columnGroup.columnOrder;\n\n columnIds.forEach((columnId, columnIndex) => {\n const isFirstGroup = columnGroupIndex === 0;\n const isLastGroup = columnGroupIndex === columnGroupIds.length - 1;\n const isStickyFirst = isFirstGroup && firstGroupIsSticky;\n const isStickyLast = isLastGroup && lastGroupIsSticky;\n const isFirstColumnInLastGroup = columnIndex === 0 && isLastGroup;\n const isLastColumnInFirstGroup =\n columnIndex === columnIds.length - 1 && isFirstGroup;\n\n r[columnId] = {\n sticky: isStickyFirst || isStickyLast,\n left: isStickyFirst ? stickyGroupOffsets[columnId] : undefined,\n right: isStickyLast ? stickyGroupOffsets[columnId] : undefined,\n type: isStickyFirst\n ? \"first-group\"\n : isStickyLast\n ? \"last-group\"\n : undefined,\n isFirstColumnInLastGroup,\n isLastColumnInFirstGroup,\n };\n });\n });\n\n return r;\n};\n","import { InternalStandardTableActions } from \"../redux/StandardTableActionsAndSelectors\";\nimport {\n EntityAction,\n reducerIdGateAction,\n ReducerIdGateAction,\n SelectedIdsAction,\n SortOrderAction,\n} from \"@stenajs-webui/redux\";\nimport { getReducerIdFor } from \"../redux/ReducerIdFactory\";\nimport { StandardTableStateFields } from \"../redux/StandardTableReducer\";\n\nexport type StandardTableAction<TColumnKey extends string> =\n | ReducerIdGateAction<SortOrderAction<TColumnKey>>\n | ReducerIdGateAction<SelectedIdsAction>\n | ReducerIdGateAction<EntityAction<StandardTableStateFields>>;\n\nexport interface StandardTableActions<TColumnKey extends string> {\n setSelectedIds: (ids: Array<string>) => StandardTableAction<TColumnKey>;\n clearSelection: () => StandardTableAction<TColumnKey>;\n expandByIds: (ids: Array<string>) => StandardTableAction<TColumnKey>;\n collapseAll: () => StandardTableAction<TColumnKey>;\n sortBy: (\n columnId: TColumnKey,\n desc?: boolean\n ) => StandardTableAction<TColumnKey>;\n clearSortOrder: () => StandardTableAction<TColumnKey>;\n setLastSelectedId: (\n lastSelectedId: string\n ) => StandardTableAction<TColumnKey>;\n}\n\nexport const createStandardTableActions = <TColumnKey extends string>(\n tableId: string,\n actions: InternalStandardTableActions<TColumnKey>\n): StandardTableActions<TColumnKey> => {\n return {\n setSelectedIds: (ids) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"selectedIds\"),\n actions.selectedIds.setSelectedIds(ids)\n ),\n clearSelection: () =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"selectedIds\"),\n actions.selectedIds.clearSelectedIds()\n ),\n expandByIds: (ids) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"expandedRows\"),\n actions.expandedRows.setSelectedIds(ids)\n ),\n collapseAll: () =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"expandedRows\"),\n actions.expandedRows.clearSelectedIds()\n ),\n sortBy: (columnId: TColumnKey, desc?: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"sortOrder\"),\n actions.sortOrder.sortBy(columnId, desc ?? false)\n ),\n clearSortOrder: () =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"sortOrder\"),\n actions.sortOrder.clearSortOrder()\n ),\n setLastSelectedId: (lastSelectedId: string) =>\n reducerIdGateAction(\n getReducerIdFor(tableId, \"fields\"),\n actions.fields.setEntityFields({ lastSelectedId })\n ),\n };\n};\n","import { useMemo, useReducer } from \"react\";\nimport { TableContext } from \"../context/StandardTableStateContext\";\nimport { createInternalStandardTableActions } from \"../redux/StandardTableActionsAndSelectors\";\nimport {\n createStandardTableInitialState,\n createStandardTableReducer,\n StandardTableReducer,\n StandardTableState,\n} from \"../redux/StandardTableReducer\";\nimport { createStandardTableActions } from \"../util/ActionsFactory\";\n\nexport const useLocalStateTableContext = <TColumnKey extends string>(\n tableId: string,\n initialState: StandardTableState<TColumnKey> = createStandardTableInitialState<TColumnKey>()\n) => {\n const [state, dispatch] = useReducer<StandardTableReducer<TColumnKey>>(\n createStandardTableReducer<TColumnKey>(tableId),\n initialState\n );\n\n const actions = useMemo(\n () =>\n createStandardTableActions(\n tableId,\n createInternalStandardTableActions<TColumnKey>()\n ),\n [tableId]\n );\n\n const tableContext = useMemo<TableContext<TColumnKey>>(\n () => ({\n dispatch,\n actions,\n state,\n }),\n [state, actions, dispatch]\n );\n\n return {\n tableContext,\n };\n};\n","import { StandardTableConfig } from \"../config/StandardTableConfig\";\n\nexport const getTotalNumColumns = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string = string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>\n): number =>\n (config.rowIndent ? 2 : 0) +\n (config.enableExpandCollapse ? 1 : 0) +\n (config.showRowCheckbox ? 1 : 0) +\n getNumUserColumns(config);\n\nconst getNumUserColumns = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string = string\n>(\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>\n): number => {\n if (\"columnGroupOrder\" in config) {\n return config.columnGroupOrder.reduce<number>((sum, groupId) => {\n const group = config.columnGroups?.[groupId];\n return sum + (group?.columnOrder?.length ?? 0);\n }, 0);\n }\n\n return config.columnOrder?.length ?? 0;\n};\n","import * as React from \"react\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { booleanOrNumberToNumber } from \"@stenajs-webui/core\";\n\ninterface ColsProps {}\n\nexport const ColGroups: React.FC<ColsProps> = () => {\n const config = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n\n const hasExtraColGroup =\n config.enableExpandCollapse || config.showRowCheckbox;\n\n const rowIndent = booleanOrNumberToNumber(config.rowIndent);\n\n return (\n <>\n {rowIndent ? (\n <colgroup>\n <col\n style={{ width: `calc(var(--swui-metrics-indent) * ${rowIndent})` }}\n />\n </colgroup>\n ) : null}\n {hasExtraColGroup && (\n <colgroup>\n {config.enableExpandCollapse && (\n <col style={{ width: \"var(--swui-expand-cell-width)\" }} />\n )}\n {config.showRowCheckbox && (\n <col style={{ width: \"var(--swui-checkbox-cell-width)\" }} />\n )}\n </colgroup>\n )}\n {groupConfigsAndIds.map(({ groupConfig, groupId }) => (\n <colgroup key={groupId}>\n {groupConfig.columnOrder.map((columnId) => (\n <col\n key={columnId}\n style={{\n width: config.columns[columnId].width,\n minWidth: config.columns[columnId].minWidth,\n }}\n />\n ))}\n </colgroup>\n ))}\n {rowIndent ? (\n <colgroup>\n <col\n style={{ width: `calc(var(--swui-metrics-indent) * ${rowIndent})` }}\n />\n </colgroup>\n ) : null}\n </>\n );\n};\n","type ComparableType = number | string | boolean | Date | null | undefined;\n\nexport const multitypeComparator = (\n a: ComparableType,\n b: ComparableType\n): number => {\n if (a != null && b == null) {\n return -1;\n }\n if (a == null && b != null) {\n return 1;\n }\n if (isBothOfType(a, b, \"number\")) {\n return Number(a) - Number(b);\n }\n if (isBothOfType(a, b, \"boolean\")) {\n return Number(b) - Number(a);\n }\n if (isBothOfType(a, b, \"string\")) {\n return String(a).localeCompare(String(b));\n }\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() - b.getTime();\n }\n return 0;\n};\n\nconst isBothOfType = (\n a: ComparableType,\n b: ComparableType,\n type: string\n): boolean => typeof a === type && typeof b === type;\n","import { useStandardTableConfig } from \"./UseStandardTableConfig\";\n\nexport const useColumnValueResolver = <\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>(\n columnId: TColumnKey | undefined\n) => {\n const { columns } = useStandardTableConfig<\n TItem,\n TColumnKey,\n TColumnGroupKey\n >();\n if (!columnId) {\n return undefined;\n }\n const column = columns[columnId];\n if (!column) {\n return undefined;\n }\n return column.itemValueResolver;\n};\n","import { Checkbox, CheckboxProps } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { RefObject, useCallback } from \"react\";\nimport { useGridCell } from \"../../../grid-cell/hooks/UseGridCell\";\nimport { useTotalNumColumnsForRows } from \"../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableId } from \"../../hooks/UseStandardTableConfig\";\n\ninterface Props extends Pick<CheckboxProps, \"value\" | \"onValueChange\"> {\n colIndex: number;\n rowIndex: number;\n numRows: number;\n disabled?: boolean;\n onValueChangeAndShift: CheckboxProps[\"onValueChange\"];\n shiftPressedRef: RefObject<boolean>;\n}\n\nexport const StandardTableRowCheckbox: React.FC<Props> = React.memo(\n function StandardTableRowCheckbox({\n value,\n onValueChange,\n colIndex,\n rowIndex,\n numRows,\n disabled,\n onValueChangeAndShift,\n shiftPressedRef,\n }) {\n const totalNumColumns = useTotalNumColumnsForRows();\n\n const tableId = useStandardTableId();\n const gridCell = useGridCell<boolean>(Boolean(value), {\n colIndex,\n numCols: totalNumColumns,\n numRows,\n rowIndex,\n tableId,\n });\n const { requiredProps } = gridCell;\n\n const internalOnValueChange = useCallback(\n (value: boolean) => {\n if (shiftPressedRef.current) {\n onValueChangeAndShift?.(value);\n } else {\n onValueChange?.(value);\n }\n },\n [onValueChange, onValueChangeAndShift, shiftPressedRef]\n );\n\n return (\n <Checkbox\n size={\"small\"}\n disabled={disabled}\n value={value}\n onValueChange={internalOnValueChange}\n {...requiredProps}\n />\n );\n }\n);\n","export const getIdsBetweenSelected = (\n idList: Array<string> | undefined,\n selected1: string | undefined,\n selected2: string | undefined\n): Array<string> | undefined => {\n if (selected1 == null || selected2 == null || idList == null) {\n return undefined;\n }\n\n if (selected1 === selected2) {\n return undefined;\n }\n\n const i1 = idList.indexOf(selected1);\n const i2 = idList.indexOf(selected2);\n\n if (i1 < 0 || i2 < 0) {\n return undefined;\n }\n\n const start = Math.min(i1, i2);\n const end = Math.max(i1, i2);\n\n return idList.slice(start, end + 1);\n};\n","import { useArraySet } from \"@stenajs-webui/core\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { getIdsBetweenSelected } from \"../../util/IdListPartial\";\n\nexport const useRowCheckbox = <TItem>(\n item: TItem,\n idListForEnabledItems: Array<string>\n) => {\n const { keyResolver } = useStandardTableConfig();\n\n const {\n selectedIds: { selectedIds },\n fields: { lastSelectedId },\n } = useStandardTableState();\n const {\n actions: { setSelectedIds, setLastSelectedId },\n dispatch,\n } = useStandardTableActions();\n\n const itemKey = useMemo(() => keyResolver(item), [keyResolver, item]);\n\n const isSelected = useMemo(\n () => selectedIds.includes(itemKey),\n [selectedIds, itemKey]\n );\n\n const { toggle, addMultiple, removeMultiple } = useArraySet(\n selectedIds,\n (ids: Array<string>) => dispatch(setSelectedIds(ids))\n );\n\n const shiftAndToggleSelected = useCallback(() => {\n if (idListForEnabledItems && lastSelectedId) {\n const idList = getIdsBetweenSelected(\n idListForEnabledItems,\n lastSelectedId,\n itemKey\n );\n if (idList?.length) {\n if (isSelected) {\n removeMultiple(idList);\n } else {\n addMultiple(idList);\n }\n } else {\n toggle(itemKey);\n }\n } else {\n toggle(itemKey);\n }\n dispatch(setLastSelectedId(itemKey));\n }, [\n idListForEnabledItems,\n lastSelectedId,\n dispatch,\n setLastSelectedId,\n itemKey,\n isSelected,\n removeMultiple,\n addMultiple,\n toggle,\n ]);\n\n const toggleSelected = useCallback(() => {\n toggle(itemKey);\n dispatch(setLastSelectedId(itemKey));\n }, [toggle, itemKey, dispatch, setLastSelectedId]);\n\n return {\n isSelected,\n toggleSelected,\n shiftAndToggleSelected,\n };\n};\n","import {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { useCallback, useMemo } from \"react\";\nimport { useArraySet } from \"@stenajs-webui/core\";\n\nexport const useExpandCollapseActions = <TItem>(item: TItem) => {\n const { keyResolver } = useStandardTableConfig();\n const {\n expandedRows: { selectedIds },\n } = useStandardTableState();\n const {\n actions: { expandByIds },\n dispatch,\n } = useStandardTableActions();\n\n const itemKey = useMemo(() => keyResolver(item), [keyResolver, item]);\n\n const isExpanded = useMemo(\n () => selectedIds.includes(itemKey),\n [selectedIds, itemKey]\n );\n\n const { toggle } = useArraySet(selectedIds, (ids: Array<string>) =>\n dispatch(expandByIds(ids))\n );\n\n const toggleRowExpanded = useCallback(() => {\n toggle(itemKey);\n }, [toggle, itemKey]);\n\n return {\n toggleRowExpanded,\n isExpanded,\n };\n};\n","import {\n FlatButton,\n stenaAngleDown,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { useGridCell } from \"../../../grid-cell/hooks/UseGridCell\";\nimport { useTotalNumColumnsForRows } from \"../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useExpandCollapseActions } from \"./UseExpandCollapseActions\";\nimport {\n useStandardTableConfig,\n useStandardTableId,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { Row } from \"@stenajs-webui/core\";\n\ninterface Props<TItem> {\n item: TItem;\n colIndex: number;\n rowIndex: number;\n numRows: number;\n}\n\nexport const StandardTableRowExpandButton = function <TItem>({\n item,\n colIndex,\n numRows,\n rowIndex,\n}: Props<TItem>) {\n const totalNumColumns = useTotalNumColumnsForRows();\n const tableId = useStandardTableId();\n const gridCell = useGridCell<boolean>(true, {\n colIndex,\n numCols: totalNumColumns,\n numRows,\n rowIndex,\n tableId,\n });\n const { requiredProps } = gridCell;\n\n const { expandCollapseDisableResolver } = useStandardTableConfig();\n const { toggleRowExpanded, isExpanded } = useExpandCollapseActions(item);\n\n const buttonDisabled = useMemo(() => {\n if (!expandCollapseDisableResolver) {\n return false;\n }\n return expandCollapseDisableResolver(item);\n }, [expandCollapseDisableResolver, item]);\n return (\n <Row alignItems={\"center\"} justifyContent={\"center\"} indent>\n {!buttonDisabled && (\n <FlatButton\n size={\"small\"}\n leftIcon={isExpanded ? stenaAngleDown : stenaAngleRight}\n onClick={toggleRowExpanded}\n {...requiredProps}\n />\n )}\n </Row>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n BackgroundResolver,\n StandardTableColumnConfig,\n} from \"../config/StandardTableColumnConfig\";\nimport { useColumnConfigById } from \"./UseColumnConfigById\";\n\nconst getBackgroundColor = <TItem>(\n backgroundResolver: BackgroundResolver<TItem> | undefined,\n item: TItem,\n background: string | undefined\n): string | undefined =>\n backgroundResolver ? backgroundResolver(item) : background;\n\nconst useBackground = <TItem>(\n backgroundResolver: BackgroundResolver<TItem> | undefined,\n item: TItem,\n background: string | undefined\n): string | undefined =>\n useMemo(\n () => getBackgroundColor(backgroundResolver, item, background),\n [backgroundResolver, item, background]\n );\n\nexport const useCellBackgroundByColumnId = <T>(\n columnId: string,\n item: T\n): string | undefined => {\n const { background, backgroundResolver } = useColumnConfigById(columnId);\n return useBackground(backgroundResolver, item, background);\n};\n\nexport const useCellBackgroundByColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n columnConfig:\n | StandardTableColumnConfig<TItem, TItemValue, TColumnKey>\n | undefined,\n item: TItem\n): string | undefined => {\n const { background, backgroundResolver } = columnConfig ?? {};\n return useBackground(backgroundResolver, item, background);\n};\n","import { lowerCase, upperFirst } from \"lodash\";\n\nexport const formatValueLabel = <T>(itemValue: T) => {\n if (itemValue == null) {\n return \"\";\n } else if (itemValue instanceof Date) {\n return itemValue.toISOString();\n } else if (typeof itemValue === \"object\") {\n return JSON.stringify(itemValue);\n } else {\n return String(itemValue);\n }\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Row } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { GridCellRequiredProps } from \"../../grid-cell/hooks/UseGridCell\";\nimport styles from \"./StandardTableCellUi.module.css\";\n\ninterface Props {\n width?: string;\n minWidth?: string;\n justifyContent?: string;\n enableGridCell?: boolean;\n isEditing: boolean;\n gridCellRequiredProps?: GridCellRequiredProps;\n background?: string;\n children: ReactNode;\n onKeyDown?: BoxProps[\"onKeyDown\"];\n}\n\nexport const StandardTableCellUi = React.memo<Props>(\n function StandardTableCellUi({\n enableGridCell,\n children,\n background,\n gridCellRequiredProps,\n isEditing,\n justifyContent,\n onKeyDown,\n width,\n minWidth,\n }) {\n return (\n <Row\n width={width}\n minWidth={minWidth}\n height={\"inherit\"}\n background={background}\n overflow={\"hidden\"}\n onKeyDown={onKeyDown}\n >\n <Row\n border={\"1px solid transparent\"}\n className={styles.standardTableCell}\n width={\"100%\"}\n height={\"100%\"}\n justifyContent={justifyContent}\n alignItems={\"center\"}\n borderRadius={enableGridCell ? \"4px\" : undefined}\n focusBorder={\n enableGridCell && !isEditing\n ? \"1px solid var(--swui-primary-action-color)\"\n : undefined\n }\n hoverBorder={\n enableGridCell && !isEditing\n ? \"1px solid var(--lhds-color-ui-300)\"\n : undefined\n }\n {...(enableGridCell ? gridCellRequiredProps : undefined)}\n >\n {children}\n </Row>\n </Row>\n );\n }\n);\n","import { Indent, Text, TextSize } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport styles from \"./TextCell.module.css\";\n\ninterface Props {\n label?: string;\n size?: TextSize;\n color?: string;\n}\n\nexport const TextCell: React.FC<Props> = React.memo(function TextCell({\n label,\n size,\n color,\n}) {\n return (\n <Indent overflow={\"hidden\"}>\n <Text className={styles.textCell} title={label} size={size} color={color}>\n {label}\n </Text>\n </Indent>\n );\n});\n","import * as React from \"react\";\nimport {\n CSSProperties,\n KeyboardEventHandler,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useGridCell } from \"../../grid-cell/hooks/UseGridCell\";\nimport { useOnKeyDownContext } from \"../context/OnKeyDownContext\";\nimport { useStickyPropsPerColumnContext } from \"../context/StickyPropsPerColumnContext\";\nimport { useColumnIndexPerColumnIdContext } from \"../features/column-index-per-column-id/ColumnIndexPerColumnIdContext\";\nimport { useCellBackgroundByColumnId } from \"../hooks/UseCellBackground\";\nimport { useColumnConfigById } from \"../hooks/UseColumnConfigById\";\nimport {\n useStandardTableConfig,\n useStandardTableId,\n useStandardTableState,\n} from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorder } from \"../util/CellBorderCalculator\";\nimport { formatValueLabel } from \"../util/LabelFormatter\";\nimport { StandardTableCellUi } from \"./StandardTableCellUi\";\nimport { TextCell } from \"./TextCell\";\nimport { DefaultStandardTableCellRenderer } from \"../config/StandardTableColumnConfig\";\n\nexport interface StandardTableCellProps<TItem> {\n columnId: string;\n item: TItem;\n rowIndex: number;\n colIndex: number;\n numRows: number;\n borderFromGroup?: boolean | string;\n disableBorderLeft?: boolean;\n}\n\nconst fallbackCellRenderer: DefaultStandardTableCellRenderer<unknown> = ({\n label,\n textSize,\n}) => <TextCell label={label} size={textSize} />;\n\nexport const StandardTableCell = React.memo(function StandardTableCell<TItem>({\n columnId,\n item,\n colIndex,\n rowIndex,\n numRows,\n borderFromGroup,\n disableBorderLeft,\n}: StandardTableCellProps<TItem>) {\n const {\n keyResolver,\n enableGridCell,\n gridCellOptions: gridCellOptionsForTable,\n } = useStandardTableConfig();\n\n const selectedIds = useStandardTableState().selectedIds.selectedIds;\n const tableId = useStandardTableId();\n const onKeyDownTable = useOnKeyDownContext();\n const { numNavigableColumns } = useColumnIndexPerColumnIdContext();\n const stickyPropsPerColumnContext = useStickyPropsPerColumnContext();\n\n const itemKey = useMemo(() => keyResolver(item), [item, keyResolver]);\n\n const isSelected = useMemo(() => {\n return selectedIds.indexOf(itemKey) >= 0;\n }, [itemKey, selectedIds]);\n\n const { defaultCellRenderer = fallbackCellRenderer, defaultTextSize } =\n useStandardTableConfig();\n\n const {\n itemValueResolver,\n itemLabelFormatter,\n width,\n minWidth,\n justifyContentCell = \"flex-start\",\n borderLeft,\n renderCell = defaultCellRenderer,\n gridCellOptions: gridCellOptionsForColumn,\n isEditable,\n onChange,\n onKeyDown: onKeyDownCell,\n disableGridCell,\n disableGridCellFocus,\n zIndex,\n } = useColumnConfigById(columnId);\n\n const itemValue = useMemo(() => {\n if (itemValueResolver) {\n return itemValueResolver(item);\n }\n if (columnId in item) {\n return (item as any)[columnId];\n }\n return \"\";\n }, [itemValueResolver, item, columnId]);\n\n const label = useMemo<string>(\n () =>\n itemLabelFormatter\n ? itemLabelFormatter(itemValue, item)\n : formatValueLabel(itemValue),\n [itemValue, itemLabelFormatter, item]\n );\n\n const editable =\n typeof isEditable === \"boolean\"\n ? isEditable\n : isEditable\n ? isEditable(item)\n : undefined;\n\n const onKeyDownHandler = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (ev) => {\n onKeyDownCell?.(ev, { columnId, item });\n onKeyDownTable?.(ev, { columnId, item });\n },\n [onKeyDownTable, columnId, item, onKeyDownCell]\n );\n\n const gridCell = useGridCell<string>(label, {\n colIndex,\n rowIndex,\n numRows,\n numCols: numNavigableColumns,\n tableId,\n isEditable: editable,\n onChange: onChange\n ? (value: string | undefined) => onChange(item, value)\n : undefined,\n ...gridCellOptionsForTable,\n ...gridCellOptionsForColumn,\n });\n\n const stickyProps = stickyPropsPerColumnContext[columnId];\n\n const background = useCellBackgroundByColumnId(columnId, item) ?? \"inherit\";\n\n const currentZIndex = stickyProps.sticky\n ? zIndex ?? \"var(--swui-sticky-column-z-index)\"\n : zIndex ?? 1;\n\n const content = useMemo(\n () =>\n renderCell({\n label,\n value: itemValue,\n item,\n gridCell,\n isEditable: editable,\n isSelected,\n zIndex: currentZIndex,\n textSize: defaultTextSize,\n itemKey,\n }),\n [\n renderCell,\n label,\n itemValue,\n item,\n gridCell,\n editable,\n isSelected,\n currentZIndex,\n itemKey,\n defaultTextSize,\n ]\n );\n\n const activeBorderLeft = getCellBorder(\n borderFromGroup,\n disableBorderLeft,\n borderLeft\n );\n\n const shadow =\n stickyProps.sticky &&\n stickyProps.type === \"last-group\" &&\n stickyProps.isFirstColumnInLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky && stickyProps.type === \"column\" && stickyProps.right\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined;\n\n return (\n <td\n style={{\n borderLeft: activeBorderLeft,\n position: stickyProps.sticky ? \"sticky\" : undefined,\n left: stickyProps.sticky ? stickyProps.left : undefined,\n right: stickyProps.sticky ? stickyProps.right : undefined,\n boxShadow: shadow,\n zIndex: currentZIndex as CSSProperties[\"zIndex\"],\n height: \"var(--current-row-height)\",\n background: background,\n }}\n >\n <StandardTableCellUi\n enableGridCell={\n enableGridCell && !disableGridCell && !disableGridCellFocus\n }\n gridCellRequiredProps={gridCell.requiredProps}\n isEditing={gridCell.isEditing}\n width={width}\n minWidth={minWidth}\n justifyContent={justifyContentCell}\n onKeyDown={onKeyDownHandler}\n >\n {content}\n </StandardTableCellUi>\n </td>\n );\n});\n","import * as React from \"react\";\nimport {\n tableBackgroundColorExpanded,\n tableBorderLeftExpanded,\n} from \"../../../config/TableConfig\";\nimport { useTotalNumColumns } from \"../context/TotalNumColumnsContext\";\nimport { useExpandCollapseActions } from \"../features/expand-collapse/UseExpandCollapseActions\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\n\ninterface Props<TItem> {\n item: TItem;\n}\n\nexport const StandardTableRowExpansion = function StandardTableRowExpansion<\n TItem\n>({ item }: Props<TItem>) {\n const { renderRowExpansion, enableExpandCollapse } = useStandardTableConfig();\n const { isExpanded, toggleRowExpanded } = useExpandCollapseActions(item);\n\n const totalNumColumns = useTotalNumColumns();\n\n return (\n <>\n {enableExpandCollapse && renderRowExpansion && isExpanded && (\n <tr\n style={{\n borderLeft: tableBorderLeftExpanded,\n background: tableBackgroundColorExpanded,\n }}\n >\n <td colSpan={totalNumColumns}>\n {renderRowExpansion(item, { onRequestCollapse: toggleRowExpanded })}\n </td>\n </tr>\n )}\n </>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const TrWithHoverBackground = styled.tr<{\n borderLeft?: string;\n height?: string;\n focusBackground?: string;\n hoverBackground?: string;\n background?: string;\n}>`\n ${({ focusBackground }) =>\n focusBackground ? `--focus-within-background: ${focusBackground};` : \"\"}\n ${({ borderLeft }) => (borderLeft ? `border-left: ${borderLeft};` : \"\")};\n ${({ background }) => (background ? `background: ${background};` : \"\")};\n ${({ height }) => (height ? `height: ${height};` : \"\")};\n ${({ hoverBackground }) =>\n hoverBackground\n ? ` &:hover {\n background: ${hoverBackground};\n }\n`\n : \"\"}\n`;\n","import { Indent, Row, useOnScreen } from \"@stenajs-webui/core\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport * as React from \"react\";\nimport { CSSProperties, RefObject, useMemo, useRef } from \"react\";\nimport {\n tableBackgroundColorExpanded,\n tableBackgroundHoverColorExpanded,\n tableBorderLeft,\n tableBorderLeftExpanded,\n} from \"../../../config/TableConfig\";\nimport { RowBackgroundResolverColorCombination } from \"../config/StandardTableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { useTotalNumColumns } from \"../context/TotalNumColumnsContext\";\nimport { StandardTableRowCheckbox } from \"../features/checkboxes/StandardTableRowCheckbox\";\nimport { useRowCheckbox } from \"../features/checkboxes/UseRowCheckbox\";\nimport { useColumnIndexPerColumnIdContext } from \"../features/column-index-per-column-id/ColumnIndexPerColumnIdContext\";\nimport { StandardTableRowExpandButton } from \"../features/expand-collapse/StandardTableRowExpandButton\";\nimport { useExpandCollapseActions } from \"../features/expand-collapse/UseExpandCollapseActions\";\nimport { useCellBackgroundByColumnConfig } from \"../hooks/UseCellBackground\";\nimport {\n useFirstColumnConfig,\n useLastColumnConfig,\n} from \"../hooks/UseColumnConfigById\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorderFromGroup } from \"../util/CellBorderCalculator\";\nimport { StandardTableCell } from \"./StandardTableCell\";\nimport { StandardTableRowExpansion } from \"./StandardTableRowExpansion\";\nimport { TrWithHoverBackground } from \"./TrWithHoverBackground\";\n\nexport interface StandardTableRowProps<TItem> {\n item: TItem;\n idListForEnabledItems: Array<string>;\n rowIndex: number;\n numRows: number;\n colIndexOffset: number;\n alwaysVisible?: boolean;\n shiftPressedRef: RefObject<boolean>;\n}\n\nexport const StandardTableRow = React.memo(function StandardTableRow<TItem>({\n item,\n idListForEnabledItems,\n rowIndex,\n numRows,\n colIndexOffset,\n alwaysVisible,\n shiftPressedRef,\n}: StandardTableRowProps<TItem>) {\n const trRef = useRef(null);\n const totalNumColumns = useTotalNumColumns();\n const { stickyCheckboxColumn } = useStandardTableConfig();\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n const { columnIndexPerColumnId } = useColumnIndexPerColumnIdContext();\n const {\n showRowCheckbox,\n rowBackgroundResolver,\n checkboxDisabledResolver,\n enableGridCell,\n rowIndent,\n enableExpandCollapse,\n } = useStandardTableConfig();\n\n const { isExpanded } = useExpandCollapseActions(item);\n const { isSelected, toggleSelected, shiftAndToggleSelected } = useRowCheckbox(\n item,\n idListForEnabledItems\n );\n\n const visible = useOnScreen(trRef, {\n rootMargin: \"400px 0px 400px 0px\",\n threshold: 0,\n });\n\n const resolvedBackgroundResult = useMemo(\n () => rowBackgroundResolver?.(item, isSelected),\n [isSelected, item, rowBackgroundResolver]\n );\n\n const background = getBackgroundColor(\n resolvedBackgroundResult,\n isSelected,\n isExpanded\n );\n\n const hoverBackground = getHoverBackgroundColor(\n resolvedBackgroundResult,\n isSelected,\n isExpanded\n );\n\n const focusBackground = getFocusBackgroundColor(\n resolvedBackgroundResult,\n isSelected,\n hoverBackground\n );\n\n const disabled = useMemo(\n () => checkboxDisabledResolver?.(item),\n [item, checkboxDisabledResolver]\n );\n\n const firstColumn = useFirstColumnConfig();\n const firstColumnBackground = useCellBackgroundByColumnConfig(\n firstColumn,\n item\n );\n const lastColumn = useLastColumnConfig();\n const lastColumnBackground = useCellBackgroundByColumnConfig(\n lastColumn,\n item\n );\n\n const content = useMemo(\n () => (\n <>\n <>\n {rowIndent && (\n <td\n style={{\n background: firstColumnBackground,\n }}\n >\n <Indent num={rowIndent} />\n </td>\n )}\n {enableExpandCollapse && (\n <td\n style={\n {\n background: stickyCheckboxColumn ? \"inherit\" : undefined,\n position: stickyCheckboxColumn ? \"sticky\" : undefined,\n left: stickyCheckboxColumn ? \"0px\" : undefined,\n boxShadow: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-z-index)\"\n : undefined,\n } as CSSProperties\n }\n >\n <Row\n width={\"var(--swui-expand-cell-width)\"}\n minWidth={\"var(--swui-expand-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n <StandardTableRowExpandButton\n colIndex={colIndexOffset}\n rowIndex={enableGridCell ? rowIndex : 0}\n numRows={enableGridCell ? numRows : 0}\n item={item}\n />\n </Row>\n </td>\n )}\n {showRowCheckbox && (\n <td\n style={\n {\n background: stickyCheckboxColumn ? \"inherit\" : undefined,\n position: stickyCheckboxColumn ? \"sticky\" : undefined,\n left:\n enableExpandCollapse && stickyCheckboxColumn\n ? \"var(--swui-expand-cell-width)\"\n : stickyCheckboxColumn\n ? \"0px\"\n : undefined,\n textAlign: \"center\",\n boxShadow: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex: stickyCheckboxColumn\n ? \"var(--swui-sticky-column-z-index)\"\n : undefined,\n } as CSSProperties\n }\n >\n <Row\n width={\"var(--swui-checkbox-cell-width)\"}\n minWidth={\"var(--swui-checkbox-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n <StandardTableRowCheckbox\n disabled={disabled}\n value={isSelected}\n onValueChange={toggleSelected}\n onValueChangeAndShift={shiftAndToggleSelected}\n colIndex={colIndexOffset + (enableExpandCollapse ? 1 : 0)}\n rowIndex={rowIndex}\n numRows={numRows}\n shiftPressedRef={shiftPressedRef}\n />\n </Row>\n </td>\n )}\n {groupConfigsAndIds.map(({ groupConfig, groupId }, groupIndex) => (\n <React.Fragment key={groupId}>\n {groupConfig.columnOrder.map((columnId, index) => (\n <StandardTableCell\n key={columnId}\n columnId={columnId}\n item={item}\n colIndex={colIndexOffset + columnIndexPerColumnId[columnId]}\n rowIndex={rowIndex}\n numRows={numRows}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n index,\n groupConfig.borderLeft\n )}\n disableBorderLeft={groupIndex === 0 && index === 0}\n />\n ))}\n </React.Fragment>\n ))}\n {rowIndent && (\n <td\n style={{\n background: lastColumnBackground,\n }}\n >\n <Indent num={rowIndent} />\n </td>\n )}\n <td />\n </>\n </>\n ),\n [\n colIndexOffset,\n columnIndexPerColumnId,\n disabled,\n enableExpandCollapse,\n enableGridCell,\n firstColumnBackground,\n groupConfigsAndIds,\n isSelected,\n item,\n lastColumnBackground,\n numRows,\n rowIndent,\n rowIndex,\n shiftAndToggleSelected,\n shiftPressedRef,\n showRowCheckbox,\n stickyCheckboxColumn,\n toggleSelected,\n ]\n );\n\n return (\n <>\n <TrWithHoverBackground\n hoverBackground={hoverBackground}\n background={background}\n focusBackground={focusBackground}\n borderLeft={isExpanded ? tableBorderLeftExpanded : tableBorderLeft}\n ref={trRef}\n >\n {visible || alwaysVisible || isExpanded ? (\n content\n ) : (\n <td\n colSpan={totalNumColumns}\n style={{ height: \"var(--current-row-height)\" }}\n />\n )}\n </TrWithHoverBackground>\n <StandardTableRowExpansion item={item} />\n </>\n );\n});\n\nconst getBackgroundColor = (\n resolvedBackground:\n | string\n | undefined\n | RowBackgroundResolverColorCombination,\n isSelected: boolean,\n isExpanded: boolean\n): string => {\n if (resolvedBackground) {\n return typeof resolvedBackground === \"string\"\n ? resolvedBackground\n : resolvedBackground?.background;\n }\n if (isSelected) {\n return cssColor(\"--lhds-color-blue-100\");\n }\n if (isExpanded) {\n return tableBackgroundColorExpanded;\n }\n return \"white\";\n};\n\nconst getHoverBackgroundColor = (\n resolvedBackground:\n | string\n | undefined\n | RowBackgroundResolverColorCombination,\n isSelected: boolean,\n isExpanded: boolean\n): string | undefined => {\n if (resolvedBackground) {\n return typeof resolvedBackground === \"string\"\n ? resolvedBackground\n : resolvedBackground?.hoverBackground;\n }\n if (isSelected) {\n return cssColor(\"--lhds-color-blue-200\");\n }\n if (isExpanded) {\n return tableBackgroundHoverColorExpanded;\n }\n return cssColor(\"--lhds-color-ui-200\");\n};\n\nconst getFocusBackgroundColor = (\n resolvedBackground:\n | string\n | undefined\n | RowBackgroundResolverColorCombination,\n isSelected: boolean,\n hoverBackground: string | undefined\n): string | undefined => {\n if (isSelected) {\n return cssColor(\"--lhds-color-blue-200\");\n }\n if (resolvedBackground) {\n return hoverBackground;\n }\n return undefined;\n};\n","import { StandardTableColumnOptions } from \"../../config/StandardTableColumnConfig\";\n\nexport const isSummaryRowVisible = <TColumnKey extends string>(\n columns: Record<\n TColumnKey,\n StandardTableColumnOptions<unknown, unknown, TColumnKey>\n >\n): boolean =>\n (\n Object.values(columns) as Array<\n StandardTableColumnOptions<unknown, unknown, TColumnKey>\n >\n ).some((columnConfig) => columnHasSummaryCell(columnConfig));\n\nexport const columnHasSummaryCell = <TColumnKey extends string>(\n columnConfig: StandardTableColumnOptions<unknown, unknown, TColumnKey>\n): boolean =>\n Boolean(columnConfig.renderSummaryCell || columnConfig.summaryText);\n","import * as React from \"react\";\nimport { CSSProperties, useMemo } from \"react\";\nimport { Indent, Row, Text } from \"@stenajs-webui/core\";\nimport { getCellBorder } from \"../../../util/CellBorderCalculator\";\nimport { useColumnConfigById } from \"../../../hooks/UseColumnConfigById\";\nimport { useStickyPropsPerColumnContext } from \"../../../context/StickyPropsPerColumnContext\";\n\ninterface SummaryCellProps<TItem> {\n items: Array<TItem>;\n columnId: string;\n borderFromGroup?: boolean | string;\n disableBorderLeft: boolean;\n colSpan: number;\n}\n\nexport const SummaryCell = React.memo(function SummaryCell<TItem>({\n columnId,\n items,\n disableBorderLeft,\n borderFromGroup,\n colSpan,\n}: SummaryCellProps<TItem>) {\n const stickyPropsPerColumnContext = useStickyPropsPerColumnContext();\n const {\n renderSummaryCell,\n summaryText,\n borderLeft,\n zIndex,\n width,\n minWidth,\n justifyContentCell,\n } = useColumnConfigById(columnId);\n\n const activeBorderLeft = getCellBorder(\n borderFromGroup,\n disableBorderLeft,\n borderLeft\n );\n\n const stickyProps = stickyPropsPerColumnContext[columnId];\n\n const currentZIndex = stickyProps.sticky\n ? zIndex ?? \"var(--swui-sticky-column-z-index)\"\n : zIndex ?? 1;\n\n const shadow =\n stickyProps.sticky &&\n stickyProps.type === \"last-group\" &&\n stickyProps.isFirstColumnInLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky && stickyProps.type === \"column\" && stickyProps.right\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined;\n\n const text = useMemo(() => summaryText?.({ items }), [items, summaryText]);\n const renderResult = useMemo(\n () => renderSummaryCell?.({ items, text }),\n [items, renderSummaryCell, text]\n );\n\n return (\n <td\n colSpan={colSpan}\n style={{\n borderLeft: activeBorderLeft,\n position: stickyProps.sticky ? \"sticky\" : undefined,\n left: stickyProps.sticky ? stickyProps.left : undefined,\n right: stickyProps.sticky ? stickyProps.right : undefined,\n boxShadow: shadow,\n zIndex: currentZIndex as CSSProperties[\"zIndex\"],\n height: \"var(--current-row-height)\",\n }}\n >\n <Row\n width={width}\n minWidth={minWidth}\n height={\"inherit\"}\n overflow={\"hidden\"}\n justifyContent={justifyContentCell}\n alignItems={\"center\"}\n >\n {renderSummaryCell ? (\n renderResult\n ) : (\n <Indent>\n <Text variant={\"bold\"}>{text}</Text>\n </Indent>\n )}\n </Row>\n </td>\n );\n});\n","export interface ColumnIdAndColSpan<TColumnKey extends string> {\n columnId: TColumnKey;\n colSpan: number;\n}\n\nexport const getColumnsLimitedWithColSpan = <TColumnKey extends string>(\n columnOrder: Array<TColumnKey>,\n columns: Record<TColumnKey, { summaryCellColSpan?: number }>\n): Array<ColumnIdAndColSpan<TColumnKey>> => {\n const list: Array<ColumnIdAndColSpan<TColumnKey>> = [];\n for (let i = 0; i < columnOrder.length; i++) {\n const { summaryCellColSpan } = columns[columnOrder[i]];\n const realColSpan = Math.min(\n summaryCellColSpan ?? 1,\n columnOrder.length - i\n );\n list.push({ columnId: columnOrder[i], colSpan: realColSpan });\n const colSpan = summaryCellColSpan ?? 1;\n if (colSpan > 1) {\n i += colSpan - 1;\n }\n }\n return list;\n};\n","import * as React from \"react\";\nimport { useGroupConfigsAndIdsForRows } from \"../../../context/GroupConfigsAndIdsForRowsContext\";\nimport { useStandardTableConfig } from \"../../../hooks/UseStandardTableConfig\";\nimport styles from \"./StandardTableSummaryRow.module.css\";\nimport { getCellBorderFromGroup } from \"../../../util/CellBorderCalculator\";\nimport { SummaryCell } from \"./SummaryCell\";\nimport { getColumnsLimitedWithColSpan } from \"../SummaryCellColSpanCalculator\";\nimport { Indent } from \"@stenajs-webui/core\";\n\ninterface StandardTableSummaryRowProps<TItem> {\n items: Array<TItem>;\n}\n\nexport const StandardTableSummaryRow = React.memo(\n function StandardTableSummaryRow<TItem>({\n items,\n }: StandardTableSummaryRowProps<TItem>) {\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n const { showRowCheckbox, enableExpandCollapse, columns, rowIndent } =\n useStandardTableConfig();\n\n return (\n <tr className={styles.summaryRow}>\n {rowIndent && (\n <td>\n <Indent num={rowIndent} />\n </td>\n )}\n {enableExpandCollapse && <td />}\n {showRowCheckbox && <td />}\n {groupConfigsAndIds.map(({ groupConfig, groupId }, groupIndex) => (\n <React.Fragment key={groupId}>\n {getColumnsLimitedWithColSpan(groupConfig.columnOrder, columns).map(\n ({ columnId, colSpan }, index) => {\n return (\n <SummaryCell\n key={columnId}\n colSpan={colSpan}\n columnId={columnId}\n items={items}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n index,\n groupConfig.borderLeft\n )}\n disableBorderLeft={groupIndex === 0 && index === 0}\n />\n );\n }\n )}\n </React.Fragment>\n ))}\n {rowIndent && (\n <td>\n <Indent num={rowIndent} />\n </td>\n )}\n <td />\n </tr>\n );\n }\n);\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { isSummaryRowVisible } from \"../SummaryRowVisibilityCalculator\";\nimport { useStandardTableConfig } from \"../../../hooks/UseStandardTableConfig\";\nimport { StandardTableSummaryRow } from \"./StandardTableSummaryRow\";\n\ninterface SummaryRowSwitcherProps<TItem> {\n items: Array<TItem>;\n}\n\nexport const SummaryRowSwitcher = function SummaryRowSwitcher<TItem>({\n items,\n}: SummaryRowSwitcherProps<TItem>) {\n const { columns } = useStandardTableConfig();\n const visible = useMemo(() => isSummaryRowVisible(columns), [columns]);\n\n if (!visible) {\n return null;\n }\n\n return <StandardTableSummaryRow items={items} />;\n};\n","export type ItemFilterFunc<TItem> = (item: TItem) => boolean;\n\nexport const filterItemsOnEnabledCheckboxes =\n <TItem>(\n checkboxDisabledResolver?: (item: TItem) => boolean\n ): ItemFilterFunc<TItem> =>\n (item: TItem) =>\n checkboxDisabledResolver?.(item) ? false : true ?? true;\n","import * as React from \"react\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport { multitypeComparator } from \"../features/sorting/MultitypeComparator\";\nimport { useColumnValueResolver } from \"../hooks/UseColumnValueResolver\";\nimport {\n useStandardTableConfig,\n useStandardTableState,\n} from \"../hooks/UseStandardTableConfig\";\nimport { StandardTableVariant } from \"./StandardTable\";\nimport { StandardTableRow } from \"./StandardTableRow\";\nimport { SummaryRowSwitcher } from \"../features/summary-row/components/SummaryRowSwitcher\";\nimport { filterItemsOnEnabledCheckboxes } from \"../util/FilterItemsOnEnabledCheckboxes\";\n\ninterface StandardTableContentProps<TItem> {\n items?: Array<TItem>;\n colIndexOffset?: number;\n rowIndexOffset?: number;\n variant: StandardTableVariant;\n}\n\nexport const StandardTableRowList = React.memo(function StandardTableRowList<\n TItem\n>({\n items,\n colIndexOffset = 0,\n rowIndexOffset = 0,\n}: StandardTableContentProps<TItem>) {\n /**\n * This ref is used to force rerender of rows.\n * This is needed because intersection observer API doesn't correctly trigger for all\n * rows after sorting.\n */\n const sortCounterRef = useRef(0);\n\n const shiftPressedRef = useRef(false);\n\n const {\n keyResolver,\n disableInfiniteList,\n checkboxDisabledResolver,\n enableExternalSorting,\n } = useStandardTableConfig();\n const {\n sortOrder: { sortBy, desc },\n } = useStandardTableState();\n\n const valueResolver = useColumnValueResolver(sortBy);\n\n const sortedItems = useMemo(() => {\n if (enableExternalSorting) {\n return items ?? [];\n }\n if (!items || !items.length) {\n return [];\n }\n if (!valueResolver) {\n return items;\n }\n\n const sortedList = [...items];\n sortedList.sort((a, b) =>\n multitypeComparator(valueResolver(a) as any, valueResolver(b) as any)\n );\n if (desc) {\n sortedList.reverse();\n }\n if (!disableInfiniteList) {\n sortCounterRef.current++;\n }\n return sortedList;\n }, [enableExternalSorting, items, valueResolver, desc, disableInfiniteList]);\n\n const idListForEnabledItems = useMemo(\n () =>\n sortedItems\n .filter(filterItemsOnEnabledCheckboxes(checkboxDisabledResolver))\n .map((l) => keyResolver(l)),\n [sortedItems, checkboxDisabledResolver, keyResolver]\n );\n\n useEffect(() => {\n const keyUp = (ev: KeyboardEvent) => {\n if (ev.key === \"Shift\") {\n shiftPressedRef.current = false;\n }\n };\n\n const keyDown = (ev: KeyboardEvent) => {\n if (ev.key === \"Shift\") {\n shiftPressedRef.current = true;\n }\n };\n\n document.addEventListener(\"keyup\", keyUp);\n document.addEventListener(\"keydown\", keyDown);\n return () => {\n document.removeEventListener(\"keyup\", keyUp);\n document.removeEventListener(\"keydown\", keyDown);\n };\n }, []);\n\n return (\n <React.Fragment key={sortCounterRef.current}>\n {sortedItems.map((item, index) => (\n <StandardTableRow\n alwaysVisible={disableInfiniteList || sortedItems.length < 30}\n item={item}\n idListForEnabledItems={idListForEnabledItems}\n key={keyResolver(item)}\n colIndexOffset={colIndexOffset}\n rowIndex={index + rowIndexOffset}\n numRows={sortedItems.length}\n shiftPressedRef={shiftPressedRef}\n />\n ))}\n <SummaryRowSwitcher items={sortedItems} />\n </React.Fragment>\n );\n});\n","import { Box, Row, Spacing } from \"@stenajs-webui/core\";\nimport { Banner, ResultListBanner } from \"@stenajs-webui/elements\";\nimport { LoadingScreen } from \"@stenajs-webui/panels\";\nimport * as React from \"react\";\nimport { useTotalNumColumns } from \"../context/TotalNumColumnsContext\";\nimport { StandardTableProps, StandardTableVariant } from \"./StandardTable\";\nimport { StandardTableRowList } from \"./StandardTableRowList\";\n\ninterface Props<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> extends Omit<\n StandardTableProps<TItem, TColumnKey, TColumnGroupKey>,\n \"tableContext\" | \"config\"\n > {\n variant: StandardTableVariant;\n}\n\nexport const StandardTableContent = React.memo(function StandardTableContent<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n error,\n bannerError,\n loading,\n items,\n noItemsLabel = \"There is no data available.\",\n noItemsContentRight,\n noItemsContentBottom,\n noItemsHeader,\n colIndexOffset,\n rowIndexOffset,\n variant,\n errorLabel,\n}: Props<TItem, TColumnKey, TColumnGroupKey>) {\n const totalNumColumns = useTotalNumColumns();\n\n if (bannerError) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Spacing num={4} justifyContent={\"center\"}>\n <Box alignItems={\"center\"}>\n <ResultListBanner bannerState={bannerError} variant={\"error\"} />\n </Box>\n </Spacing>\n </td>\n </tr>\n </tbody>\n );\n }\n\n if (error || errorLabel) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Spacing num={4} justifyContent={\"center\"}>\n <Box alignItems={\"center\"}>\n <Banner\n headerText={\n (error ? error.message : errorLabel) ?? \"Unknown error\"\n }\n variant={\"error\"}\n />\n </Box>\n </Spacing>\n </td>\n </tr>\n </tbody>\n );\n }\n\n if (loading) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Spacing num={4}>\n <LoadingScreen />\n </Spacing>\n </td>\n </tr>\n </tbody>\n );\n }\n\n if (!items || !items.length) {\n return (\n <tbody>\n <tr>\n <td colSpan={totalNumColumns}>\n <Row spacing={4} justifyContent={\"center\"}>\n <Banner\n text={noItemsLabel}\n headerText={noItemsHeader}\n contentRight={noItemsContentRight}\n variant={\"info\"}\n >\n {noItemsContentBottom}\n </Banner>\n </Row>\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody>\n <StandardTableRowList\n variant={variant}\n items={items}\n colIndexOffset={colIndexOffset}\n rowIndexOffset={rowIndexOffset}\n />\n </tbody>\n );\n});\n","import { useCallback } from \"react\";\nimport {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\nimport { filterItemsOnEnabledCheckboxes } from \"../../util/FilterItemsOnEnabledCheckboxes\";\n\nexport const useTableHeadCheckbox = <TItem>(\n items: Array<TItem> | undefined\n) => {\n const { keyResolver, checkboxDisabledResolver } = useStandardTableConfig();\n const {\n selectedIds: { selectedIds },\n } = useStandardTableState();\n const {\n actions: { setSelectedIds, clearSelection },\n dispatch,\n } = useStandardTableActions();\n\n const selectionIsEmpty = selectedIds.length === 0;\n\n const allItemsAreSelected = !items\n ? false\n : items.length > 0 && selectedIds.length === items.length;\n\n const onClickCheckbox = useCallback(() => {\n if (items) {\n if (selectionIsEmpty) {\n dispatch(\n setSelectedIds(\n items\n .filter(filterItemsOnEnabledCheckboxes(checkboxDisabledResolver))\n .map((item) => keyResolver(item))\n )\n );\n } else {\n dispatch(clearSelection());\n }\n }\n }, [\n items,\n selectionIsEmpty,\n dispatch,\n setSelectedIds,\n checkboxDisabledResolver,\n keyResolver,\n clearSelection,\n ]);\n\n return {\n selectionIsEmpty,\n allItemsAreSelected,\n onClickCheckbox,\n };\n};\n","import { useCallback } from \"react\";\nimport {\n useStandardTableActions,\n useStandardTableConfig,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\n\nexport const useTableHeadExpandCollapse = <TItem>(\n items: Array<TItem> | undefined\n) => {\n const { keyResolver } = useStandardTableConfig();\n const {\n expandedRows: { selectedIds },\n } = useStandardTableState();\n const {\n actions: { collapseAll, expandByIds },\n dispatch,\n } = useStandardTableActions();\n\n const allItemsAreExpanded = !items\n ? false\n : items.length > 0 && selectedIds.length === items.length;\n\n const toggleExpanded = useCallback(() => {\n if (items) {\n if (allItemsAreExpanded) {\n dispatch(collapseAll());\n } else {\n dispatch(expandByIds(items.map((item) => keyResolver(item))));\n }\n }\n }, [\n allItemsAreExpanded,\n collapseAll,\n dispatch,\n items,\n keyResolver,\n expandByIds,\n ]);\n\n return {\n allItemsAreExpanded,\n toggleExpanded: toggleExpanded,\n };\n};\n","import { useMemo } from \"react\";\nimport { SortOrderDirection } from \"../../../table-ui/components/table/SortOrderIcon\";\nimport { useOnSortOrderChangeContext } from \"../../context/OnSortOrderChangeContext\";\nimport {\n useStandardTableActions,\n useStandardTableState,\n} from \"../../hooks/UseStandardTableConfig\";\n\ninterface Result {\n selected: boolean;\n desc: boolean;\n arrow: SortOrderDirection | undefined;\n onClickColumnHead: () => void;\n}\n\nexport const useTableSortHeader = (columnId: string): Result => {\n const { dispatch, actions } = useStandardTableActions();\n const onSortOrderChange = useOnSortOrderChangeContext();\n const {\n sortOrder: { desc, sortBy },\n } = useStandardTableState();\n\n return useMemo(() => {\n const selected = columnId === sortBy;\n\n return {\n arrow: selected ? (desc ? \"up\" : \"down\") : undefined,\n selected,\n desc,\n onClickColumnHead: () => {\n const d = selected ? !desc : false;\n dispatch(actions.sortBy(columnId, d));\n onSortOrderChange?.(columnId, d);\n },\n };\n }, [columnId, sortBy, desc, dispatch, actions, onSortOrderChange]);\n};\n","import * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport {\n TableHeadItem,\n TableHeadProps,\n} from \"../../table-ui/components/table/TableHeadItem\";\nimport { useStickyPropsPerColumnContext } from \"../context/StickyPropsPerColumnContext\";\nimport { useTableSortHeader } from \"../features/sorting/UseTableSortHeader\";\nimport { useColumnConfigById } from \"../hooks/UseColumnConfigById\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorder } from \"../util/CellBorderCalculator\";\nimport { formatColumnIdToHeaderCellLabel } from \"../util/LabelFormatter\";\n\nexport interface StandardTableHeaderItemProps {\n columnId: string;\n disableBorderLeft?: boolean;\n borderFromGroup?: boolean | string;\n stickyHeader?: boolean;\n top?: string | number;\n appendTooltipTo?: TableHeadProps[\"appendTooltipTo\"];\n}\n\nexport const StandardTableHeadItem = React.memo(\n function StandardTableHeaderItem({\n columnId,\n borderFromGroup,\n disableBorderLeft,\n stickyHeader,\n top,\n appendTooltipTo,\n }: StandardTableHeaderItemProps) {\n const {\n justifyContentHeader,\n columnLabel,\n borderLeft,\n infoIconTooltipText,\n background,\n zIndex,\n sortOrderIconVariant,\n width,\n minWidth,\n } = useColumnConfigById(columnId);\n const {\n disableSorting,\n sortOrderIconVariant: defaultSortOrderIconVariant,\n } = useStandardTableConfig();\n const stickyPropsPerColumnContext = useStickyPropsPerColumnContext();\n\n const { arrow, selected, onClickColumnHead } = useTableSortHeader(columnId);\n\n const label =\n typeof columnLabel === \"string\"\n ? columnLabel\n : formatColumnIdToHeaderCellLabel(columnId);\n\n const activeBorderLeft = getCellBorder(\n borderFromGroup,\n disableBorderLeft,\n borderLeft\n );\n\n const stickyProps = stickyPropsPerColumnContext[columnId];\n\n return (\n <th\n style={{\n background: background ?? \"white\",\n borderLeft: activeBorderLeft,\n position: stickyHeader || stickyProps.sticky ? \"sticky\" : undefined,\n left: stickyProps.left,\n right: stickyProps.right,\n top: top,\n boxShadow:\n stickyProps.sticky &&\n stickyProps.isFirstColumnInLastGroup &&\n stickyHeader\n ? \"var(--swui-sticky-header-shadow-and-left)\"\n : stickyProps.sticky && stickyProps.isFirstColumnInLastGroup\n ? \"var(--swui-sticky-column-shadow-left)\"\n : stickyHeader && stickyProps.sticky\n ? \"var(--swui-sticky-header-shadow-and-right)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-shadow)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-column-shadow-right)\"\n : undefined,\n zIndex: (stickyHeader && stickyProps.sticky\n ? \"var(--swui-sticky-header-in-sticky-column-z-index)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-z-index)\"\n : stickyProps.sticky\n ? \"var(--swui-sticky-group-header-z-index)\"\n : zIndex) as CSSProperties[\"zIndex\"],\n height: 0, // CSS trick to force TableHeadItem to use 100% height\n width,\n minWidth,\n }}\n >\n <TableHeadItem\n width={\"inherit\"}\n minWidth={\"inherit\"}\n arrow={!disableSorting && label ? arrow : undefined}\n onClick={!disableSorting ? onClickColumnHead : undefined}\n label={label}\n infoIconTooltipText={infoIconTooltipText}\n alignRight={justifyContentHeader === \"flex-end\"}\n sortOrderIconVariant={\n sortOrderIconVariant ?? defaultSortOrderIconVariant\n }\n appendTooltipTo={appendTooltipTo}\n selected={selected}\n height={\"100%\"}\n />\n </th>\n );\n }\n);\n","import { Row } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n stenaAngleDown,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport { Checkbox } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { CSSProperties } from \"react\";\nimport {\n defaultTableRowHeight,\n tableBorderLeft,\n} from \"../../../config/TableConfig\";\nimport { useGroupConfigsAndIdsForRows } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { useColumnGroupOrderContext } from \"../context/StandardTableColumnOrderContext\";\nimport { useTableHeadCheckbox } from \"../features/checkboxes/UseTableHeadCheckbox\";\nimport { useTableHeadExpandCollapse } from \"../features/expand-collapse/UseTableHeadExpandCollapse\";\nimport { useStandardTableConfig } from \"../hooks/UseStandardTableConfig\";\nimport { getCellBorderFromGroup } from \"../util/CellBorderCalculator\";\nimport { StandardTableHeadItem } from \"./StandardTableHeadItem\";\nimport { TrWithHoverBackground } from \"./TrWithHoverBackground\";\nimport { TableHeadProps } from \"../../table-ui/components/table/TableHeadItem\";\n\ninterface StandardTableHeaderProps<TItem> {\n items?: Array<TItem>;\n height?: string;\n appendTooltipTo?: TableHeadProps[\"appendTooltipTo\"];\n}\n\nconst getTopPosition = (\n headerRowOffsetTop: string | undefined,\n columnGroupOrder: Array<string> | undefined,\n height: string,\n stickyHeader: boolean | undefined\n): CSSProperties[\"top\"] => {\n if (headerRowOffsetTop && columnGroupOrder !== undefined) {\n return `calc(${headerRowOffsetTop} + ${height})`;\n } else if (stickyHeader && columnGroupOrder) {\n return `calc(0px + ${height})`;\n } else if (headerRowOffsetTop) {\n return headerRowOffsetTop;\n } else if (stickyHeader) {\n return 0;\n }\n return undefined;\n};\n\nexport const StandardTableHeadRow = React.memo(function StandardTableHeadRow<\n TItem\n>({\n items,\n appendTooltipTo,\n height = defaultTableRowHeight,\n}: StandardTableHeaderProps<TItem>) {\n const groupConfigsAndIds = useGroupConfigsAndIdsForRows();\n\n const {\n showHeaderCheckbox,\n showHeaderExpandCollapse,\n enableExpandCollapse,\n rowIndent,\n headerRowOffsetTop,\n zIndex,\n stickyHeader,\n stickyCheckboxColumn,\n showRowCheckbox,\n } = useStandardTableConfig();\n\n const columnGroupOrder = useColumnGroupOrderContext();\n\n const { allItemsAreExpanded, toggleExpanded } =\n useTableHeadExpandCollapse(items);\n const { allItemsAreSelected, onClickCheckbox, selectionIsEmpty } =\n useTableHeadCheckbox(items);\n\n const checkboxDisabled = !items || items.length === 0;\n\n const stickyHeaderStyle: CSSProperties = {\n zIndex: (stickyHeader && stickyCheckboxColumn\n ? \"var(--swui-sticky-header-in-sticky-column-z-index)\"\n : stickyCheckboxColumn\n ? \"var(--swui-sticky-group-header-z-index)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-z-index)\"\n : zIndex) as CSSProperties[\"zIndex\"],\n top: getTopPosition(\n headerRowOffsetTop,\n columnGroupOrder,\n height,\n stickyHeader\n ),\n background: stickyHeader || stickyCheckboxColumn ? \"white\" : undefined,\n position: stickyHeader || stickyCheckboxColumn ? \"sticky\" : undefined,\n boxShadow:\n stickyHeader && stickyCheckboxColumn\n ? \"var(--swui-sticky-header-shadow-and-right)\"\n : stickyCheckboxColumn\n ? \"var(--swui-sticky-column-shadow-right)\"\n : stickyHeader\n ? \"var(--swui-sticky-header-shadow)\"\n : undefined,\n };\n\n return (\n <TrWithHoverBackground height={height} borderLeft={tableBorderLeft}>\n {rowIndent && (\n <th style={stickyHeaderStyle}>\n <Row indent={rowIndent} />\n </th>\n )}\n {enableExpandCollapse && (\n <th\n style={{\n ...stickyHeaderStyle,\n left: \"0px\",\n textAlign: \"left\",\n }}\n >\n <Row\n width={\"var(--swui-expand-cell-width)\"}\n minWidth={\"var(--swui-expand-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n {showHeaderExpandCollapse && (\n <FlatButton\n size={\"small\"}\n leftIcon={\n allItemsAreExpanded ? stenaAngleDown : stenaAngleRight\n }\n onClick={toggleExpanded}\n />\n )}\n </Row>\n </th>\n )}\n {(showRowCheckbox || showHeaderCheckbox) && (\n <th\n style={{\n ...stickyHeaderStyle,\n overflow: \"hidden\",\n left:\n stickyCheckboxColumn && enableExpandCollapse\n ? \"var(--swui-expand-cell-width)\"\n : stickyCheckboxColumn\n ? \"0px\"\n : undefined,\n }}\n >\n <Row\n width={\"var(--swui-checkbox-cell-width)\"}\n minWidth={\"var(--swui-checkbox-cell-width)\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n {showHeaderCheckbox && (\n <Checkbox\n size={\"small\"}\n disabled={checkboxDisabled}\n value={allItemsAreSelected}\n indeterminate={!selectionIsEmpty && !allItemsAreSelected}\n onValueChange={onClickCheckbox}\n />\n )}\n </Row>\n </th>\n )}\n {groupConfigsAndIds.map(({ groupConfig, groupId }, groupIndex) => {\n return (\n <React.Fragment key={groupId}>\n {groupConfig.columnOrder.map((columnId, index) => {\n return (\n <StandardTableHeadItem\n columnId={columnId}\n key={columnId}\n borderFromGroup={getCellBorderFromGroup(\n groupIndex,\n index,\n groupConfig.borderLeft\n )}\n disableBorderLeft={groupIndex === 0 && index === 0}\n stickyHeader={stickyHeader}\n top={stickyHeaderStyle.top}\n appendTooltipTo={appendTooltipTo}\n />\n );\n })}\n </React.Fragment>\n );\n })}\n {rowIndent && (\n <th style={stickyHeaderStyle}>\n <Row indent={rowIndent} />\n </th>\n )}\n <th style={stickyHeaderStyle} />\n </TrWithHoverBackground>\n );\n});\n","import { ResultListBannerState } from \"@stenajs-webui/elements\";\nimport { ErrorScreen } from \"@stenajs-webui/panels\";\nimport cx from \"classnames\";\nimport * as React from \"react\";\nimport { CSSProperties, ReactNode, useId, useMemo } from \"react\";\nimport { StandardTableConfig } from \"../config/StandardTableConfig\";\nimport { GroupConfigsAndIdsForRowsContext } from \"../context/GroupConfigsAndIdsForRowsContext\";\nimport { OnKeyDownContext } from \"../context/OnKeyDownContext\";\nimport { OnSortOrderChangeContext } from \"../context/OnSortOrderChangeContext\";\nimport {\n StandardTableColumnGroupOrderContext,\n StandardTableUsingColumnGroupsContext,\n} from \"../context/StandardTableColumnOrderContext\";\nimport {\n StandardTableActionsContext,\n StandardTableConfigContext,\n StandardTableInternalActionsContext,\n StandardTableStateContext,\n StandardTableTableIdContext,\n TableContext,\n} from \"../context/StandardTableStateContext\";\nimport { StandardTableVariantContext } from \"../context/StandardTableVariantContext\";\nimport { StickyPropsPerColumnContext } from \"../context/StickyPropsPerColumnContext\";\nimport { TotalNumColumnsContext } from \"../context/TotalNumColumnsContext\";\nimport { createGroupConfigAndIdsForRows } from \"../features/column-groups/ColumnGroupFactory\";\nimport { ColumnGroupRow } from \"../features/column-groups/ColumnGroupRow\";\nimport { calculateColumnIndexPerColumnId } from \"../features/column-index-per-column-id/ColumnIndexCalculator\";\nimport { ColumnIndexPerColumnIdContext } from \"../features/column-index-per-column-id/ColumnIndexPerColumnIdContext\";\nimport { ensureConfigHasValidSticky } from \"../features/sticky-columns/StickyColumnGroupValidator\";\nimport { getStickyPropsPerColumn } from \"../features/sticky-columns/StickyPropsPerColumnCalculator\";\nimport { useLocalStateTableContext } from \"../hooks/UseLocalStateTableContext\";\nimport { createStandardTableInitialState } from \"../redux/StandardTableReducer\";\nimport {\n StandardTableOnKeyDown,\n StandardTableOnSortOrderChange,\n} from \"../types/StandardTableEvents\";\nimport { getTotalNumColumns } from \"../util/ColumnCounter\";\nimport { ColGroups } from \"./ColGroups\";\nimport styles from \"./StandardTable.module.css\";\nimport { StandardTableContent } from \"./StandardTableContent\";\nimport { StandardTableHeadRow } from \"./StandardTableHeadRow\";\nimport { TableHeadProps } from \"../../table-ui/components/table/TableHeadItem\";\n\nexport interface StandardTableProps<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n> {\n /**\n * Variant of table\n */\n variant?: StandardTableVariant;\n\n /**\n * The tableId, which is passed to useGridCell.\n * Optional, defaults to generated id.\n */\n tableId?: string;\n\n /**\n * Number that is added to rowIndex in useGridCell.\n * This makes it possible to navigate between two tables, when used in combination\n * with tableId.\n */\n rowIndexOffset?: number;\n\n /**\n * Number that is added to colIndex in useGridCell.\n * This makes it possible to navigate between two tables, when used in combination\n * with tableId.\n */\n colIndexOffset?: number;\n\n /**\n * Config for the table. Required.\n */\n config: StandardTableConfig<TItem, TColumnKey, TColumnGroupKey>;\n\n /**\n * Append tooltip to HTML element. This prop is passed to Tippy.\n * This is useful to solve z-index problems.\n */\n appendTooltipTo?: TableHeadProps[\"appendTooltipTo\"];\n\n /**\n * Items to list in the table.\n */\n items?: Array<TItem>;\n error?: Error;\n loading?: boolean;\n\n /**\n * Content right in banner shown when there are no items.\n */\n noItemsContentRight?: ReactNode;\n\n /**\n * Content bottom in banner shown when there are no items.\n */\n noItemsContentBottom?: ReactNode;\n\n /**\n * Header in banner shown when there are no items.\n */\n noItemsHeader?: string;\n\n /**\n * Message displayed when there are no items to display, and it is not loading or has error.\n */\n noItemsLabel?: string;\n\n /**\n * Data used to populate the ResultListBanner component.\n */\n bannerError?: ResultListBannerState;\n\n /**\n * Message displayed when there is an error.\n */\n errorLabel?: string;\n\n /**\n * TableContext, containing state, actions and dispatch. Makes it possible to connect Redux.\n * This is optional and falls back to internal useReducer if omitted.\n */\n tableContext?: TableContext<TColumnKey>;\n\n /**\n * The order of columns. If set, it overrides the order set in the config.\n */\n columnOrder?: Array<TColumnKey>;\n\n /**\n * The order of column groups. If set, it overrides the order set in the config.\n */\n columnGroupOrder?: Array<TColumnGroupKey>;\n\n /**\n * onKeyDown for the table. First argument is the event, second argument is\n * an object that contains columnId and item for the focused cell.\n */\n onKeyDown?: StandardTableOnKeyDown<TItem, TColumnKey>;\n\n /**\n * Event listener for when user changes the sort order.\n * This is triggered when user clicks on the table headers, even if using external sorting.\n */\n onSortOrderChange?: StandardTableOnSortOrderChange<TColumnKey>;\n}\n\nexport type StandardTableVariant =\n | \"relaxed\"\n | \"standard\"\n | \"condensed\"\n | \"compact\";\n\nexport const StandardTable = function StandardTable<\n TItem,\n TColumnKey extends string,\n TColumnGroupKey extends string\n>({\n tableContext,\n config,\n columnOrder,\n columnGroupOrder,\n tableId,\n variant = \"standard\",\n onKeyDown,\n onSortOrderChange,\n appendTooltipTo,\n ...props\n}: StandardTableProps<TItem, TColumnKey, TColumnGroupKey>) {\n const generatedTableId = useId();\n const {\n initialSortOrderDesc,\n initialSortOrder,\n enableExpandCollapse,\n stickyCheckboxColumn,\n } = config;\n\n const { tableContext: localTableContext } = useLocalStateTableContext(\n tableId ?? generatedTableId,\n createStandardTableInitialState(initialSortOrder, initialSortOrderDesc)\n );\n\n const currentTableContext = tableContext || localTableContext;\n\n const { state, actions, dispatch } = currentTableContext;\n\n const actionsContext = useMemo<\n StandardTableInternalActionsContext<TColumnKey>\n >(\n () => ({\n actions,\n dispatch,\n }),\n [actions, dispatch]\n );\n\n const usingColumnGroups = Boolean(\n columnGroupOrder ?? \"columnGroupOrder\" in config\n );\n\n const columnGroupsFromConfig =\n \"columnGroups\" in config ? config.columnGroups : undefined;\n const columnGroupOrderFromConfig =\n \"columnGroupOrder\" in config ? config.columnGroupOrder : undefined;\n const columnOrderFromConfig =\n \"columnOrder\" in config ? config.columnOrder : undefined;\n\n const groupConfigsForRows = useMemo(\n () =>\n createGroupConfigAndIdsForRows<TItem, TColumnKey, TColumnGroupKey>(\n columnGroupsFromConfig,\n columnGroupOrderFromConfig,\n columnOrderFromConfig\n ),\n [columnGroupsFromConfig, columnGroupOrderFromConfig, columnOrderFromConfig]\n );\n\n const columnIndexPerColumnId = useMemo(\n () => calculateColumnIndexPerColumnId(config),\n [config]\n );\n\n const totalNumColumns = useMemo(() => getTotalNumColumns(config), [config]);\n\n const stickyPropsPerColumnContext = useMemo(\n () => getStickyPropsPerColumn(config),\n [config]\n );\n\n const validationError = useMemo(() => {\n try {\n ensureConfigHasValidSticky(config);\n return undefined;\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n return new Error(\"Unknown error\");\n }\n }, [config]);\n\n if (validationError) {\n return <ErrorScreen text={validationError.message} />;\n }\n\n return (\n <table\n className={cx(styles.standardTable, styles[variant])}\n style={\n {\n width: \"100%\",\n isolation: \"isolate\",\n \"--current-left-offset\":\n enableExpandCollapse && stickyCheckboxColumn\n ? \"calc(var(--swui-expand-cell-width) + var(--swui-checkbox-cell-width))\"\n : stickyCheckboxColumn\n ? \"var(--swui-checkbox-cell-width)\"\n : enableExpandCollapse\n ? \"var(--swui-expand-cell-width)\"\n : \"0px\",\n } as CSSProperties\n }\n >\n <StickyPropsPerColumnContext.Provider value={stickyPropsPerColumnContext}>\n <TotalNumColumnsContext.Provider value={totalNumColumns}>\n <StandardTableVariantContext.Provider value={variant}>\n <StandardTableTableIdContext.Provider\n value={tableId ?? generatedTableId}\n >\n <StandardTableStateContext.Provider value={state}>\n <StandardTableActionsContext.Provider value={actionsContext}>\n <StandardTableConfigContext.Provider value={config}>\n <GroupConfigsAndIdsForRowsContext.Provider\n value={groupConfigsForRows}\n >\n <ColumnIndexPerColumnIdContext.Provider\n value={columnIndexPerColumnId}\n >\n <StandardTableUsingColumnGroupsContext.Provider\n value={usingColumnGroups}\n >\n <StandardTableColumnGroupOrderContext.Provider\n value={\n \"columnGroupOrder\" in config\n ? columnGroupOrder ?? config.columnGroupOrder\n : columnGroupOrder\n }\n >\n <ColGroups />\n <OnKeyDownContext.Provider value={onKeyDown}>\n <OnSortOrderChangeContext.Provider\n value={onSortOrderChange}\n >\n <thead>\n {(columnGroupOrder ||\n \"columnGroupOrder\" in config) && (\n <ColumnGroupRow\n height={\"var(--current-row-height)\"}\n />\n )}\n <StandardTableHeadRow\n items={props.items}\n height={\"var(--current-row-height)\"}\n appendTooltipTo={appendTooltipTo}\n />\n </thead>\n <StandardTableContent\n variant={variant}\n {...props}\n />\n </OnSortOrderChangeContext.Provider>\n </OnKeyDownContext.Provider>\n </StandardTableColumnGroupOrderContext.Provider>\n </StandardTableUsingColumnGroupsContext.Provider>\n </ColumnIndexPerColumnIdContext.Provider>\n </GroupConfigsAndIdsForRowsContext.Provider>\n </StandardTableConfigContext.Provider>\n </StandardTableActionsContext.Provider>\n </StandardTableStateContext.Provider>\n </StandardTableTableIdContext.Provider>\n </StandardTableVariantContext.Provider>\n </TotalNumColumnsContext.Provider>\n </StickyPropsPerColumnContext.Provider>\n </table>\n );\n};\n","import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport {\n UseGridCellOptions,\n UseGridCellResult,\n} from \"../../grid-cell/hooks/UseGridCell\";\nimport { SortOrderIconVariant } from \"../../table-ui/components/table/SortOrderIcon\";\nimport { StandardTableOnKeyDownArgs } from \"./StandardTableConfig\";\nimport { TextSize } from \"@stenajs-webui/core\";\n\nexport type StandardTableColumnConfig<\n TItem,\n TItemValue,\n TColumnKey extends string\n> = StandardTableColumnOptions<TItem, TItemValue, TColumnKey> &\n StandardTableColumnOptionsWithNoGroups &\n ItemValueResolver<TItem, TItemValue>;\n\nexport type StandardTableColumnConfigWithGroups<\n TItem,\n TItemValue,\n TColumnKey extends string\n> = StandardTableColumnOptions<TItem, TItemValue, TColumnKey> &\n ItemValueResolver<TItem, TItemValue>;\n\nexport interface StandardTableColumnOptionsWithNoGroups {\n /**\n * Enable sticky behaviour to the left make elements scroll in behind this column.\n * If neither left nor right is specified, it defaults to left: 0px.\n */\n sticky?: boolean;\n\n /**\n * Set a custom z index\n */\n zIndex?: number;\n\n /**\n * Offset column from left (ex if we have multiple sticky columns)\n */\n left?: string;\n\n /**\n * Offset column from right (ex if we have multiple sticky columns)\n */\n right?: string;\n}\n\nexport interface StandardTableColumnOptions<\n TItem,\n TItemValue,\n TColumnKey extends string\n> {\n /**\n * The header label of the column.\n */\n columnLabel?: string;\n\n /**\n * This shows a tooltip on the left side of the column header label.\n */\n infoIconTooltipText?: string;\n\n /**\n * The min-width of the column.\n */\n minWidth?: string;\n\n /**\n * The width of the column.\n */\n width?: string;\n\n /**\n * Custom renderer for the cell. Falls back to an internal renderer that uses String(item[field]).\n */\n renderCell?: StandardTableCellRenderer<TItemValue, TItem>;\n\n /**\n * Adds a static background color to the column.\n */\n background?: string;\n\n /**\n * Adds a dynamic background color to the column, based on the item.\n */\n backgroundResolver?: BackgroundResolver<TItem>;\n\n /**\n * Adds a border on the left side of the column. Can be a boolean, is a border CSS value.\n */\n borderLeft?: string | boolean;\n\n /**\n * Justify content for the header. Defaults to flex-start, which aligns the label to the left.\n */\n justifyContentHeader?: string;\n\n /**\n * Justify content for the cell. Defaults to flex-start, which aligns the cell content to the left.\n */\n justifyContentCell?: string;\n\n /**\n * A custom label formatter. This is applied after sorting, and before renderCell.\n * Useful for formatting dates for example.\n * @param value\n */\n itemLabelFormatter?: (value: TItemValue, item: TItem) => string;\n\n /**\n * Specifies if the cell is editable. Used together with gridCellEnabled.\n * Defaults to false. Can be a boolean or a resolver.\n */\n isEditable?: boolean | ((item: TItem) => boolean);\n\n /**\n * The onChange callback when isEditable is true.\n * @param item\n * @param value\n */\n onChange?: (item: TItem, value: string | undefined) => void;\n\n /**\n * The onKeyDown callback on the HTML element with focus.\n * @param ev\n * @param args\n */\n onKeyDown?: (\n ev: React.KeyboardEvent<HTMLDivElement>,\n args: StandardTableOnKeyDownArgs<TItem, TColumnKey>\n ) => void;\n\n /**\n * Disables the grid cell functionality for this column.\n * If enable, the user can no longer navigate to or from this column with arrow keys.\n * Focus highlight on the cell is also disabled.\n */\n disableGridCell?: boolean;\n\n /**\n * Grid cell is enabled, but arrow key logic and focus highlight must be applied manually.\n * This makes it possible to move focus to an element inside the cell, instead of on the cell itself.\n * For example, if the cell contains a checkbox, we user can arrow key navigate to the checkbox.\n */\n disableGridCellFocus?: boolean;\n\n /**\n * Grid cell options, if you need custom behaviour.\n * Not all options are available, since it is controlled by StandardTable.\n */\n gridCellOptions?: Omit<\n UseGridCellOptions<string>,\n | \"colIndex\"\n | \"rowIndex\"\n | \"numRows\"\n | \"numCols\"\n | \"tableId\"\n | \"isEditable\"\n | \"onChange\"\n >;\n\n /**\n * The icon variant to use when displaying sort order.\n */\n sortOrderIconVariant?: SortOrderIconVariant;\n\n /**\n * Render summary cell at the bottom of the table.\n * If this is not provided for any columns, the summary row will not be rendered at all.\n */\n renderSummaryCell?: StandardTableSummaryCellRenderer<TItem>;\n\n /**\n * Render summary cell at the bottom of the table.\n * If this is not provided for any columns, the summary row will not be rendered at all.\n */\n summaryText?: StandardTableSummaryTextProvider<TItem>;\n\n /**\n * Col span for the summary cell.\n */\n summaryCellColSpan?: number;\n}\n\nexport type StandardTableSummaryTextProvider<TItem> = (\n arg: StandardTableSummaryTextProviderArgObject<TItem>\n) => string;\n\nexport interface StandardTableSummaryTextProviderArgObject<TItem> {\n items: Array<TItem>;\n}\n\nexport type StandardTableSummaryCellRenderer<TItem> = (\n arg: StandardTableSummaryCellRendererArgObject<TItem>\n) => ReactNode;\n\nexport interface StandardTableSummaryCellRendererArgObject<TItem> {\n items: Array<TItem>;\n text?: string;\n}\n\nexport type StandardTableCellRenderer<TItemValue, TItem> = (\n arg: StandardTableCellRendererArgObject<TItemValue, TItem>\n) => ReactNode;\n\nexport interface StandardTableCellRendererArgObject<TItemValue, TItem> {\n label: string;\n value: TItemValue;\n item: TItem;\n itemKey: string;\n gridCell: UseGridCellResult<string>;\n isEditable?: boolean;\n isSelected: boolean;\n textSize?: TextSize;\n /**\n * The z-index used for that cell. Usable if the cell has a popover which should get same z-index for example.\n */\n zIndex?: number | string;\n}\n\n/**\n * Default renderer. This is defined in config, not for a specific column.\n * Therefor, it can not know \"value: TItemValue\", since it has not been defined yet.\n */\nexport type DefaultStandardTableCellRenderer<TItem> = (\n arg: StandardTableCellRendererArgObject<unknown, TItem>\n) => ReactNode;\n\nexport type BackgroundResolver<TItem> = (item: TItem) => string | undefined;\n\nexport interface ItemValueResolver<TItem, TItemValue> {\n itemValueResolver: (item: TItem) => TItemValue;\n}\n\nexport const createColumnConfig = <\n TItem,\n TItemValue,\n TColumnKey extends string\n>(\n itemValueResolver: (item: TItem) => TItemValue,\n options?: StandardTableColumnOptions<TItem, TItemValue, TColumnKey>\n): StandardTableColumnConfig<TItem, TItemValue, TColumnKey> => {\n return {\n ...options,\n itemValueResolver,\n };\n};\n","import { Indent, Text, TextSize } from \"@stenajs-webui/core\";\nimport { TextInput } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { StandardTableCellRenderer } from \"../../../config/StandardTableColumnConfig\";\n\nexport const createStandardEditableTextCell =\n <TItemValue, TItem>(\n textSize?: TextSize\n ): StandardTableCellRenderer<TItemValue, TItem> =>\n ({\n label,\n gridCell: {\n editorValue,\n isEditing,\n setEditorValue,\n stopEditingAndRevert,\n lastKeyEvent,\n stopEditing,\n stopEditingAndMove,\n },\n }) =>\n isEditing ? (\n <TextInput\n onValueChange={setEditorValue}\n value={editorValue}\n onDone={stopEditing}\n onEsc={stopEditingAndRevert}\n autoFocus\n selectAllOnMount={!lastKeyEvent}\n onMove={stopEditingAndMove}\n />\n ) : (\n <Indent>\n <Text color={\"var(--swui-primary-action-color)\"} size={textSize}>\n {label}\n </Text>\n </Indent>\n );\n","import { Indent } from \"@stenajs-webui/core\";\nimport { TextInput } from \"@stenajs-webui/forms\";\nimport { EntityCrudStatus, ModifiedFieldItemState } from \"@stenajs-webui/redux\";\nimport * as React from \"react\";\nimport { StandardTableCellRenderer } from \"../../../config/StandardTableColumnConfig\";\nimport { ModifiedField } from \"../../../../table-ui/components/ModifiedField\";\n\nexport const createEditableTextCellWithStatus =\n <TItemValue, TItem>(\n warningOnEmpty?: string | ((item: TItem) => string),\n crudStatusProvider?: (item: TItem) => EntityCrudStatus | undefined,\n modifiedFieldProvider?: (item: TItem) => ModifiedFieldItemState | undefined\n ): StandardTableCellRenderer<TItemValue, TItem> =>\n ({\n label,\n item,\n gridCell: {\n editorValue,\n isEditing,\n setEditorValue,\n stopEditingAndRevert,\n lastKeyEvent,\n stopEditing,\n stopEditingAndMove,\n },\n isEditable,\n }) => {\n const warnOnEmpty =\n typeof warningOnEmpty === \"function\"\n ? warningOnEmpty(item)\n : warningOnEmpty;\n\n const crudStatus = crudStatusProvider\n ? crudStatusProvider(item)\n : undefined;\n\n const modifiedField = modifiedFieldProvider\n ? modifiedFieldProvider(item)\n : undefined;\n\n return isEditable && isEditing ? (\n <TextInput\n onValueChange={setEditorValue}\n value={editorValue}\n onDone={stopEditing}\n onEsc={stopEditingAndRevert}\n autoFocus\n selectAllOnMount={!lastKeyEvent}\n onMove={stopEditingAndMove}\n />\n ) : (\n <Indent row alignItems={\"center\"}>\n <ModifiedField\n value={label}\n modifiedField={modifiedField}\n crudStatus={crudStatus}\n isEditable={isEditable}\n warningOnEmpty={warnOnEmpty}\n />\n </Indent>\n );\n };\n"],"names":["GridHooksContext","React","GridHooksTable","children","numCols","numRows","tableId","wrap","contextProps","useMemo","hasIndicatorContent","status","loading","creating","deleting","updating","hasError","CrudStatusIndicator","crudStatus","errorMessage","jsx","InputSpinner","cssColor","icon","Icon","stenaExclamationTriangle","Fragment","Tooltip","ModifiedField","isEditable","warningOnEmpty","value","modifiedField","showEmptyFieldWarning","hasCrudIndicator","hasRightIcon","jsxs","Text","Indent","stenaArrowRight","Space","TableCell","alignItems","justifyContent","overflow","indent","boxProps","Row","tableBorderColor","tableBorderColorExpanded","tableBackgroundColorExpanded","tableBackgroundHoverColorExpanded","tableBorder","tableBorderHidden","tableBorderLeft","tableBorderLeftExpanded","defaultTableRowHeight","defaultTableHeadRowHeight","smallTableRowWidth","SmallTableCell","props","SortOrderIcon","iconVariant","direction","Box","getIcon","arrow","iconType","faSortAlphaUp","faSortAlphaDown","faSortNumericUp","faSortNumericDown","faSortAmountUpAlt","faSortAmountDownAlt","exhaustSwitchCaseElseThrow","TableHeadItem","label","onClick","selected","popoverContent","infoIconTooltipText","alignRight","sortOrderIconVariant","appendTooltipTo","containerRef","useRef","cursorStyle","hasOnlyChildren","Heading","ev","stenaInfoCircle","Popover","FlatButton","stenaDotsVertical","SmallTableHead","TableColumnGroupHead","flex","width","height","TableHeadRow","style","TableRow","hideBorderTop","className","cx","styles","useRevertableValue","initialValue","setValueInternal","useState","revertValue","valueRef","setValue","useCallback","useEffect","revert","commit","commitValue","setRevertValue","getValue","createKeyDownEvent","event","defaultTransformEnteredValue","useEditableCell","allowedInputType","onChange","onStartEditing","onStopEditing","transformEnteredValue","isEditing","setIsEditing","lastKeyEvent","setLastKeyEvent","revertableValue","startEditing","keyEvent","stopEditing","stopEditingAndRevert","createKeyDownHandler","allowsNumerics","allowsLetters","isCharacter","key","isLetter","isNumeric","_","e","wrapBounds","x","y","maxX","maxY","realX","realY","limitRange","val","min","max","clampPos","pos","wrapPos","wrapped","getNextPositionWrappedOrClamped","rowIndex","colIndex","edgeMode","posNotWrapped","getNextPosition","ensureDomIdIsCorrect","id","validateGridHookOptions","options","useGridNavigationOptionsFromContext","context","useContext","useGridNavigation","onCellMove","onCellNavigation","moveHandler","createMoveHandler","onKeyDown","createCellId","requiredProps","focusOnCell","colDidChange","rowDidChange","el","useGridCell","nav","edit","cellCoordinates","stopEditingAndMove","move","EditableTextCellWithCrudAndModified","entityId","rowIndent","crudStatusRedux","modifiedFieldsRedux","dispatch","useDispatch","modifiedFieldsState","useSelector","crudStatusState","onChangeHandler","newValue","editorValue","setEditorValue","onKeyDownHandler","TextInput","StandardTableTableIdContext","createContext","StandardTableStateContext","StandardTableActionsContext","StandardTableConfigContext","createInternalStandardTableActions","createSortOrderActions","createSelectedIdsActions","createEntityActions","getReducerIdFor","reducerId","reducerIdSuffix","createStandardTableInitialState","sortBy","desc","selectedIds","expandedRows","createSortOrderReducerInitialState","createSelectedIdsReducerInitialState","createStandardTableReducer","initialState","sortOrder","reducerIdGate","createSortOrderReducer","createSelectedIdsReducer","fields","createEntityReducer","_a","combineReducers","useStandardTableId","useStandardTableConfig","useStandardTableState","useStandardTableActions","GroupConfigsAndIdsForRowsContext","useGroupConfigsAndIdsForRows","useTotalNumColumnsForRows","config","groupConfigsAndIds","offset","c","sum","item","OnKeyDownContext","useOnKeyDownContext","OnSortOrderChangeContext","useOnSortOrderChangeContext","StandardTableColumnGroupOrderContext","StandardTableUsingColumnGroupsContext","useColumnGroupOrderContext","StandardTableVariantContext","StickyPropsPerColumnContext","useStickyPropsPerColumnContext","TotalNumColumnsContext","useTotalNumColumns","createGroupConfigAndIdsForRows","columnGroups","columnGroupOrder","columnOrder","compact","groupId","groupConfig","_b","p","getCellBorder","borderFromGroup","disableBorderLeft","borderLeft","getCellBorderFromGroup","groupIndex","columnIndexInGroup","groupBorderLeft","useColumnConfigById","columnId","columns","column","useFirstColumnConfig","_c","useLastColumnConfig","groupConfigAndId","ColumnInGroup","colSpan","isFirstGroup","isLastGroup","render","contentLeft","contentRight","error","minWidth","zIndex","stickyHeader","headerRowOffsetTop","stickyColumnGroups","activeBorder","getActiveBorder","isStickyFirstGroup","isStickyLastGroup","isSticky","isStickyGroup","borderFromColumn","createStickyHeaderProps","stickyColumn","zIndexFromConfig","getTopPosition","ColumnGroupRow","groupConfigAndIds","showHeaderCheckbox","enableExpandCollapse","stickyCheckboxColumn","stickyHeaderProps","zIndexForCells","calculateColumnIndexPerColumnId","groupConfigs","columnIndexPerColumnId","currentIndex","conf","isColumnNavigable","columnConfig","ColumnIndexPerColumnIdContext","useColumnIndexPerColumnIdContext","ensureConfigHasValidSticky","ensureNoColumnsAreSticky","ensureAllColumnsInGroupHasFixedWidth","columnGroupIndex","columnGroupId","columnGroupConfig","calculateOffsetForColumnInStickyColumnGroups","left","calculateOffsetForColumns","getColumnIdsForLeftSideStickyGroup","right","getColumnIdsForRightSideStickyGroup","columnIds","includeOffsetForCheckboxAndExpand","widths","i","getCalcForWidths","getStickyPropsPerColumn","getStickyPropsPerColumnWithGroups","getStickyPropsPerColumnWithNoGroups","sticky","r","columnGroupIds","stickyGroupOffsets","firstGroupIsSticky","lastGroupIsSticky","columnIndex","isStickyFirst","isStickyLast","isFirstColumnInLastGroup","isLastColumnInFirstGroup","createStandardTableActions","actions","ids","reducerIdGateAction","lastSelectedId","useLocalStateTableContext","state","useReducer","getTotalNumColumns","getNumUserColumns","group","ColGroups","hasExtraColGroup","booleanOrNumberToNumber","multitypeComparator","a","b","isBothOfType","type","useColumnValueResolver","StandardTableRowCheckbox","onValueChange","disabled","onValueChangeAndShift","shiftPressedRef","totalNumColumns","gridCell","internalOnValueChange","Checkbox","getIdsBetweenSelected","idList","selected1","selected2","i1","i2","start","end","useRowCheckbox","idListForEnabledItems","keyResolver","setSelectedIds","setLastSelectedId","itemKey","isSelected","toggle","addMultiple","removeMultiple","useArraySet","shiftAndToggleSelected","toggleSelected","useExpandCollapseActions","expandByIds","isExpanded","StandardTableRowExpandButton","expandCollapseDisableResolver","toggleRowExpanded","buttonDisabled","stenaAngleDown","stenaAngleRight","getBackgroundColor","backgroundResolver","background","useBackground","useCellBackgroundByColumnId","useCellBackgroundByColumnConfig","formatValueLabel","itemValue","formatColumnIdToHeaderCellLabel","upperFirst","lowerCase","StandardTableCellUi","enableGridCell","gridCellRequiredProps","TextCell","size","color","fallbackCellRenderer","textSize","StandardTableCell","gridCellOptionsForTable","onKeyDownTable","numNavigableColumns","stickyPropsPerColumnContext","defaultCellRenderer","defaultTextSize","itemValueResolver","itemLabelFormatter","justifyContentCell","renderCell","gridCellOptionsForColumn","onKeyDownCell","disableGridCell","disableGridCellFocus","editable","stickyProps","currentZIndex","content","activeBorderLeft","shadow","StandardTableRowExpansion","renderRowExpansion","TrWithHoverBackground","styled","focusBackground","hoverBackground","StandardTableRow","colIndexOffset","alwaysVisible","trRef","showRowCheckbox","rowBackgroundResolver","checkboxDisabledResolver","visible","useOnScreen","resolvedBackgroundResult","getHoverBackgroundColor","getFocusBackgroundColor","firstColumn","firstColumnBackground","lastColumn","lastColumnBackground","index","resolvedBackground","isSummaryRowVisible","columnHasSummaryCell","SummaryCell","items","renderSummaryCell","summaryText","text","renderResult","getColumnsLimitedWithColSpan","list","summaryCellColSpan","realColSpan","StandardTableSummaryRow","SummaryRowSwitcher","filterItemsOnEnabledCheckboxes","StandardTableRowList","rowIndexOffset","sortCounterRef","disableInfiniteList","enableExternalSorting","valueResolver","sortedItems","sortedList","l","keyUp","keyDown","StandardTableContent","bannerError","noItemsLabel","noItemsContentRight","noItemsContentBottom","noItemsHeader","variant","errorLabel","Spacing","ResultListBanner","Banner","LoadingScreen","useTableHeadCheckbox","clearSelection","selectionIsEmpty","allItemsAreSelected","onClickCheckbox","useTableHeadExpandCollapse","collapseAll","allItemsAreExpanded","toggleExpanded","useTableSortHeader","onSortOrderChange","d","StandardTableHeadItem","top","justifyContentHeader","columnLabel","disableSorting","defaultSortOrderIconVariant","onClickColumnHead","StandardTableHeadRow","showHeaderExpandCollapse","checkboxDisabled","stickyHeaderStyle","StandardTable","tableContext","generatedTableId","useId","initialSortOrderDesc","initialSortOrder","localTableContext","currentTableContext","actionsContext","usingColumnGroups","columnGroupsFromConfig","columnGroupOrderFromConfig","columnOrderFromConfig","groupConfigsForRows","validationError","ErrorScreen","createColumnConfig","createStandardEditableTextCell","createEditableTextCellWithStatus","crudStatusProvider","modifiedFieldProvider","warnOnEmpty"],"mappings":"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"}