schummar-table 0.45.1 → 0.45.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/autoFocusTextField.tsx","../src/hooks/useTheme.ts","../src/misc/tableContext.ts","../src/theme/defaultTheme/defaultColors.ts","../src/components/spinnner.tsx","../src/theme/defaultTheme/badge.tsx","../src/theme/defaultTheme/button.tsx","../src/theme/defaultTheme/checkbox.tsx","../src/theme/defaultTheme/iconButton.tsx","../src/theme/defaultTheme/textField.tsx","../src/theme/defaultTheme/defaultComponents.ts","../src/theme/defaultTheme/defaultIcons.tsx","../src/theme/defaultTheme/defaultTexts.tsx","../src/theme/defaultTheme/index.tsx","../src/hooks/useTableMemo.tsx","../src/components/filterControl.tsx","../src/misc/helpers.ts","../src/theme/useCssVariables.ts","../src/hooks/useFilter.ts","../src/misc/debounce.ts","../src/components/combinedFilter.tsx","../src/components/datePicker.tsx","../src/misc/defaults.ts","../src/components/dateInput.tsx","../src/components/text.tsx","../src/components/timeInput.tsx","../src/components/dateFilter.tsx","../src/components/numberField.tsx","../src/components/rangeFilter.tsx","../src/components/selectFilter.tsx","../src/components/formControlLabel.tsx","../src/components/virtualList.tsx","../src/misc/throttle.ts","../src/components/table.tsx","../src/internalState/tableStateStorage.ts","../src/misc/queue.ts","../src/internalState/useTableState.ts","../src/internalState/calcItems.ts","../src/internalState/calcProps.ts","../src/exporters/serializer.ts","../src/misc/overrides.ts","../src/internalState/cleanupState.ts","../src/internalState/filterColumns.ts","../src/internalState/normalizeExpanded.ts","../src/internalState/syncSelections.ts","../src/internalState/watchDisplaySize.ts","../src/components/clearFiltersButton.tsx","../src/components/columnFooter.tsx","../src/components/columnHeader.tsx","../src/components/resizeHandle.tsx","../src/components/sortComponent.tsx","../src/components/columnSelection.tsx","../src/components/export.tsx","../src/components/row.tsx","../src/misc/calcClassNames.ts","../src/components/cell.tsx","../src/components/details.tsx","../src/components/expandControl.tsx","../src/components/selectComponent.tsx","../src/components/virtualized.tsx","../src/misc/textMatch.ts","../src/components/textFilter.tsx"],"sourcesContent":["import type { ComponentType } from 'react';\nimport { useContext, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\nimport { FilterControlContext } from './filterControl';\n\ntype Props = TableTheme['components']['TextField'] extends ComponentType<infer T> ? T : never;\n\nexport function AutoFocusTextField(props: Omit<Props, 'inputRef'>) {\n const TextField = useTheme((t) => t.components.TextField);\n\n const ref = useRef<HTMLInputElement>(null);\n const { isActive } = useContext(FilterControlContext);\n\n useLayoutEffect(() => {\n if (isActive && ref.current) {\n ref.current.focus();\n }\n }, [isActive]);\n\n return (\n <TextField\n {...props}\n inputRef={ref}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useContext } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { ColumnContext, TableContext } from '../misc/tableContext';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { globalTableTheme, mergeThemes } from '../theme/tableTheme';\nimport type { MemoizedTableTheme, TableTheme } from '../types';\nimport { useTableMemo } from './useTableMemo';\nimport { TableSettingsContext } from '../misc/tableSettings';\n\nconst emptyStore = new Store(undefined);\n\nexport function useTheme<T, S>(selector: (theme: MemoizedTableTheme<T>) => S): S {\n const { theme: contextTableTheme = {} } = useContext(TableSettingsContext);\n const table = useContext(TableContext);\n const columnId = useContext(ColumnContext);\n const memo = useTableMemo();\n const _globalTableTheme = globalTableTheme.useState();\n\n const process = (t: TableTheme<T>): MemoizedTableTheme<T> => {\n const rowClass = t.classes?.row;\n const rowStyles = t.styles?.row;\n const cellClass = t.classes?.cell;\n const cellStyles = t.styles?.cell;\n const detailsClass = t.classes?.details;\n const detailsStyles = t.styles?.details;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n row:\n rowClass instanceof Function || Array.isArray(rowClass)\n ? memo('theme.classes.row', rowClass)\n : rowClass,\n cell:\n cellClass instanceof Function || Array.isArray(cellClass)\n ? memo('theme.classes.cell', cellClass)\n : cellClass,\n details:\n detailsClass instanceof Function || Array.isArray(detailsClass)\n ? memo('theme.classes.details', detailsClass)\n : detailsClass,\n },\n styles: {\n ...t.styles,\n row:\n rowStyles instanceof Function || Array.isArray(rowStyles)\n ? memo('theme.styles.row', rowStyles)\n : rowStyles,\n cell:\n cellStyles instanceof Function || Array.isArray(cellStyles)\n ? memo('theme.styles.cell', cellStyles)\n : cellStyles,\n details:\n detailsStyles instanceof Function || Array.isArray(detailsStyles)\n ? memo('theme.styles.details', detailsStyles)\n : detailsStyles,\n },\n text: {\n ...t.text,\n },\n };\n };\n\n const theme =\n table?.useState((state) => {\n const localTheme = {\n text: state.props.text,\n classes: state.props.classes,\n styles: state.props.styles,\n components: state.props.components,\n icons: state.props.icons,\n colors: state.props.colors,\n spacing: state.props.spacing,\n };\n\n const column = state.activeColumns.find((column) => column.id === columnId);\n const columnsTheme = {\n classes: column?.classes,\n styles: column?.styles,\n };\n\n const theme = mergeThemes(\n defaultTableTheme,\n _globalTableTheme,\n contextTableTheme,\n localTheme,\n columnsTheme,\n ) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(\n process(\n mergeThemes(defaultTableTheme, _globalTableTheme, contextTableTheme) as TableTheme<T>,\n ),\n );\n\n return theme;\n}\n","import { createContext, useContext } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { Id, InternalTableState } from '../types';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\n\nexport const TableResetContext = createContext<() => void>(() => undefined);\n\nexport const ColumnContext = createContext<Id | null>(null);\n\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw new Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\n\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw new Error('No column context available');\n return value;\n}\n","import type { TableTheme } from '../../types';\n\nexport const defaultColors: TableTheme['colors'] = {\n primary: { main: '#1976d2', light: '#42a5f5', contrastText: '#fff' },\n secondary: { main: '#9c27b0', light: '#ba68c8', contrastText: '#fff' },\n blocked: { main: '#f44336', light: '#f26257', contrastText: '#fff' },\n background: '#ffffff',\n text: 'inherit',\n border: '#777',\n borderLight: '#eee',\n};\n","import { css } from '@emotion/react';\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <div\n className={className}\n css={css`\n display: inline-block;\n position: relative;\n width: 1em;\n height: 1em;\n\n div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 0.8em;\n height: 0.8em;\n margin: 0.1em;\n border: 0.1em solid #fff;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n div:nth-of-type(1) {\n animation-delay: -0.45s;\n }\n div:nth-of-type(2) {\n animation-delay: -0.3s;\n }\n div:nth-of-type(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n `}\n >\n <div />\n <div />\n <div />\n </div>\n );\n}\n","import type { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\n return (\n <span\n css={{\n display: 'inline-flex',\n position: 'relative',\n flexShrink: 0,\n verticalAlign: 'middle',\n }}\n >\n {children}\n\n <span\n css={[\n {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n height: 20,\n display: 'flex',\n padding: '0 6px',\n zIndex: 1,\n position: 'absolute',\n flexWrap: 'wrap',\n minWidth: 20,\n transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n alignItems: 'center',\n lineHeight: 1,\n alignContent: 'center',\n borderRadius: 10,\n justifyContent: 'center',\n fontSize: '0.8em',\n },\n !badgeContent && {\n transform: 'scale(0) translate(50%, -50%)',\n transition: 'transform 195ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n },\n ]}\n >\n {badgeContent}\n </span>\n </span>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const Button: TableTheme['components']['Button'] = ({\n startIcon,\n children,\n variant = 'text',\n ...props\n}) => {\n return (\n <button\n css={[\n {\n padding: `var(--spacing) calc(var(--spacing) * 2)`,\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n borderRadius: 4,\n\n '&:active:not(:disabled)': {\n transform: 'scale3d(0.95, 0.95, 1)',\n },\n },\n variant === 'text' && {\n '&:hover': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n },\n variant === 'outlined' && {\n border: '1px solid var(--table-button-border, var(--table-border, #777777))',\n\n '&:disabled': {\n borderColor: 'var(--table-button-border-disabled, #eeeeee)',\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow:\n '0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)',\n\n '&:hover': {\n filter: 'brightness(0.9)',\n },\n\n '&:disabled': {\n filter: 'grayscale()',\n opacity: 0.5,\n },\n },\n ]}\n {...props}\n >\n {startIcon && <span css={{ marginRight: `calc(var(--spacing) * 2)` }}>{startIcon}</span>}\n <span>{children}</span>\n </button>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const Checkbox: TableTheme['components']['Checkbox'] = ({ className, ...props }) => {\n return (\n <label\n css={[\n {\n padding: 'calc(var(--spacing) * 1.8)',\n display: 'flex',\n color: 'currentcolor',\n userSelect: 'none',\n\n '& input': {\n appearance: 'none',\n margin: 0,\n },\n },\n props.disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n className={className}\n >\n <input type=\"checkbox\" {...props} />\n\n {props.checked ? (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'var(--primaryMain)' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n </svg>\n ) : (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'currentColor' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"></path>\n </svg>\n )}\n </label>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const IconButton: TableTheme['components']['IconButton'] = (props) => {\n return (\n <button\n css={{\n padding: 'var(--spacing)',\n borderRadius: '50%',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n background: 'transparent',\n\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n\n '&:active': {\n transformColor: 'scale3d(0.95, 0.95, 1)',\n },\n }}\n {...props}\n />\n );\n};\n","import { useState } from 'react';\nimport type { TableTheme } from '../../types';\n\nexport const TextField: TableTheme['components']['TextField'] = ({\n startIcon,\n endIcon,\n className,\n inputRef,\n onBlur,\n ...props\n}) => {\n const [focus, setFocus] = useState(false);\n\n return (\n <div\n className={className}\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: '1px solid var(--table-textfield-border, var(--table-border, #777777))',\n borderRadius: 4,\n },\n focus && { border: '2px solid var(--primaryMain)', margin: -1 },\n ]}\n >\n {startIcon}\n\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onFocus={() => setFocus(true)}\n onBlur={(event) => {\n setFocus(false);\n onBlur?.(event);\n }}\n css={{\n minWidth: 0,\n width: '100%',\n flex: 1,\n border: 'none',\n outline: 'none',\n borderRadius: 4,\n padding: 'calc(var(--spacing) * 2)',\n paddingLeft: startIcon ? 0 : undefined,\n paddingRight: endIcon ? 0 : undefined,\n transition: 'outline 500ms',\n }}\n />\n\n {endIcon}\n </div>\n );\n};\n","import { Spinner } from '../../components/spinnner';\nimport type { TableTheme } from '../../types';\nimport { Badge } from './badge';\nimport { Button } from './button';\nimport { Checkbox } from './checkbox';\nimport { IconButton } from './iconButton';\nimport { Popover } from './popover';\nimport { TextField } from './textField';\n\nexport const defaultComponents: TableTheme['components'] = {\n IconButton,\n Checkbox,\n Popover,\n Button,\n Badge,\n TextField,\n Spinner,\n};\n","import { ClassNames, css } from '@emotion/react';\nimport type { HTMLProps } from 'react';\nimport { cloneElement } from 'react';\nimport type { TableTheme } from '../../types';\n\nconst IconDefaultStyle = css({\n width: '1.5em',\n height: '1.5em',\n color: 'inherit',\n});\n\nfunction Icon(svg: JSX.Element) {\n return function IconComponent(props: HTMLProps<Element>) {\n return (\n <ClassNames>\n {({ css }) =>\n cloneElement(svg, {\n ...props,\n className: css(IconDefaultStyle, props.className),\n })\n }\n </ClassNames>\n );\n };\n}\n\nconst Settings = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\" />\n </svg>,\n);\n\nconst Export = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n enableBackground=\"new 0 0 24 24\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <g>\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n </g>\n <g>\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M17,11l-1.41-1.41L13,12.17V4h-2v8.17L8.41,9.59L7,11l5,5 L17,11z\" />\n </g>\n </svg>,\n);\n\nconst Clipboard = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>,\n);\n\nconst ChevronRight = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\" />\n </svg>,\n);\n\nconst Search = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>,\n);\n\nconst Clear = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>,\n);\n\nconst ArrowDropDown = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>,\n);\n\nconst FilterList = Icon(\n <svg viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z\"\n />\n </svg>,\n);\n\nconst ArrowUpward = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>,\n);\n\nexport const defaultIcons: TableTheme['icons'] = {\n Settings,\n Export,\n Clipboard,\n ChevronRight,\n Search,\n Clear,\n ArrowDropDown,\n FilterList,\n ArrowUpward,\n};\n","import type { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n};\n","import type { TableTheme } from '../../types';\nimport { defaultColors } from './defaultColors';\nimport { defaultComponents } from './defaultComponents';\nimport { defaultIcons } from './defaultIcons';\nimport { defaultTexts } from './defaultTexts';\n\nexport const defaultTableTheme: TableTheme = {\n text: defaultTexts,\n components: defaultComponents,\n icons: defaultIcons,\n colors: defaultColors,\n spacing: '5px',\n};\n","import type { DependencyList, ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { FunctionWithDeps } from '../types';\n\nconst TableMemoContext = createContext(new Map<string, [value: any, deps: DependencyList]>());\n\nexport function TableMemoContextProvider({ children }: { children: ReactNode }) {\n return (\n <TableMemoContext.Provider value={useMemo(() => new Map(), [])}>\n {children}\n </TableMemoContext.Provider>\n );\n}\n\nexport function useTableMemo() {\n const memoCache = useContext(TableMemoContext);\n\n return <Function_ extends (...args: any[]) => any>(\n key: string,\n function_: FunctionWithDeps<Function_>,\n ): Function_ => {\n let deps: DependencyList;\n if (Array.isArray(function_)) {\n deps = function_.slice(1);\n function_ = function_[0];\n } else {\n deps = [function_.toString()];\n }\n\n let cachedValue = memoCache.get(key);\n const hit =\n cachedValue &&\n cachedValue[1].length === deps.length &&\n cachedValue[1].every((x, i) => x === deps[i]);\n if (!cachedValue || !hit) {\n cachedValue = [function_, deps];\n memoCache.set(key, cachedValue);\n }\n return cachedValue[0];\n };\n}\n","import { createContext, useMemo, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport interface FilterControlButtonProps {\n onClick?: (event: React.MouseEvent<Element>) => void;\n onContextMenu?: (event: React.MouseEvent<Element>) => void;\n isActive?: boolean;\n}\n\nexport interface FilterControlProps {\n component?: React.ElementType<FilterControlButtonProps>;\n onClose?: () => void;\n}\n\nexport const FilterControlContext = createContext({\n isActive: false,\n close: (): void => undefined,\n});\n\nexport function FilterControl<T>({\n component: Component = DefaultButton,\n onClose,\n}: FilterControlProps): JSX.Element | null {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Popover = useTheme((t) => t.components.Popover);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const isActive = table.useState((state) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n const filterClassNames = table.useState((state) => {\n const filter = state.filters.get(columnId);\n return filter?.classNames;\n });\n const filter = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.filter,\n );\n\n function reset() {\n const impl = table.getState().filters.get(columnId);\n\n impl?.onChange?.(undefined);\n\n if (impl?.value === undefined) {\n table.update((state) => {\n state.filterValues.delete(columnId);\n });\n }\n }\n\n const context = useMemo(\n () => ({\n isActive: !!anchor,\n close: () => setAnchor(null),\n }),\n [anchor],\n );\n\n if (!filter) return null;\n\n return (\n <FilterControlContext.Provider value={context}>\n <Component\n onClick={(event) => setAnchor(event.currentTarget)}\n onContextMenu={(event) => {\n reset();\n event.preventDefault();\n return false;\n }}\n isActive={isActive}\n />\n\n <div\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n onPointerMove={(event) => {\n event.stopPropagation();\n }}\n >\n <Popover\n open\n hidden={!anchor}\n onClose={() => {\n setAnchor(null);\n onClose?.();\n }}\n anchorEl={anchor ?? document.body}\n css={cssVariables}\n className={cx(classes?.popover, filterClassNames?.popover)}\n backdropClassName={cx(classes?.popoverBackdrop, filterClassNames?.popoverBackdrop)}\n >\n {filter}\n </Popover>\n </div>\n </FilterControlContext.Provider>\n );\n}\n\nfunction DefaultButton({ isActive, ...props }: FilterControlButtonProps) {\n const IconButton = useTheme((t) => t.components.IconButton);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const ArrowDropDown = useTheme((t) => t.icons.ArrowDropDown);\n\n return (\n <IconButton\n {...props}\n css={[\n { color: '#b0bac9' },\n isActive && {\n color: 'var(--primaryMain) !important',\n },\n ]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n );\n}\n","import type { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(array: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...array].flatMap(flatMap);\n};\n\nexport const orderBy = <T>(\n array: T[],\n selectors: ((t: T) => any)[] = [],\n direction: ('desc' | 'asc')[] = [],\n): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...array].sort((a, b) => {\n for (let i = 0; i < selectors.length; i++) {\n const _a = selectors[i]?.(a);\n const _b = selectors[i]?.(b);\n const _direction = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (Array.isArray(x)) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n\ntype Falsy = false | 0 | '' | null | undefined;\nexport function isTruthy<T>(x: T): x is Exclude<T, Falsy> {\n return !!x;\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n '--table-background-color': colors.background,\n '--table-text-color': colors.text,\n '--table-border-color': colors.border,\n '--table-border-light-color': colors.borderLight,\n };\n });\n}\n","import { castDraft } from 'immer';\nimport { nanoid } from 'nanoid';\nimport { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { FilterControlContext } from '../components/filterControl';\nimport { debounce } from '../misc/debounce';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { FilterImplementation } from '../types';\nimport { useTableMemo } from './useTableMemo';\n\nexport function useFilter<TItem, TColumnValue, TFilterBy, TFilterValue>(\n impl: FilterImplementation<TItem, TColumnValue, TFilterBy, TFilterValue>,\n) {\n const table = useTableContext<TItem>();\n const columnId = useColumnContext();\n const cache = useTableMemo();\n const cacheId = useMemo(() => nanoid(), []);\n const filterBy = impl.filterBy && cache(cacheId, impl.filterBy);\n\n // On mount and reset: Fire onChange\n useEffect(() => {\n if (impl.value === undefined) {\n impl.onChange?.(impl.defaultValue);\n }\n }, [table]);\n\n // Update implementation\n useEffect(() => {\n table.update((state) => {\n if (impl.defaultValue !== undefined) {\n state.filterValues.set(columnId, impl.defaultValue);\n }\n });\n }, [table]);\n\n useEffect(() => {\n table.update((state) => {\n state.filters.set(columnId, castDraft({ ...impl, filterBy }));\n\n if (impl.value !== undefined) {\n state.filterValues.set(columnId, impl.value);\n }\n });\n\n return () => {\n table.update((state) => {\n state.filters.delete(columnId);\n });\n };\n }, [table, columnId, impl]);\n\n // Track local value and update it globally after delay\n const value = table.useState(\n (state) => state.filterValues.get(columnId) as TFilterValue | undefined,\n );\n const [dirtyValue, setDirtyValue] = useState<TFilterValue>();\n const implRef = useRef(impl);\n\n useLayoutEffect(() => {\n implRef.current = impl;\n });\n\n const delayedUpdate = useMemo(\n () =>\n debounce((value?: TFilterValue) => {\n const { value: controlledValue, onChange } = implRef.current;\n\n if (controlledValue === undefined) {\n table.update((state) => {\n state.filterValues.set(columnId, value);\n });\n }\n\n onChange?.(value);\n setDirtyValue(undefined);\n }, 500),\n [table],\n );\n\n function onChange(value?: TFilterValue) {\n setDirtyValue(value);\n delayedUpdate(value);\n }\n\n useEffect(() => delayedUpdate.flush(), [delayedUpdate]);\n\n const context = useContext(FilterControlContext);\n\n return {\n value: dirtyValue ?? value,\n onChange,\n filterBy: filterBy ?? ((x) => x as unknown as TFilterBy | TFilterBy[]),\n ...context,\n };\n}\n","export function debounce<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void } {\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n lastArgs = undefined;\n timeout = undefined;\n\n function_(...(args as Args));\n }\n\n return Object.assign(\n function (...args: Args) {\n lastArgs = args;\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(run, ms);\n },\n {\n flush() {\n if (timeout) {\n clearTimeout(timeout);\n run();\n }\n },\n },\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { ColumnContext, useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { FilterControl, type FilterControlButtonProps } from './filterControl';\n\nexport interface CombinedFilterProps\n extends Pick<CommonFilterProps<any, any, any, any>, 'classNames'> {\n columnIds?: string[];\n}\n\nexport default function CombinedFilter({\n columnIds: inputColumnIds,\n ...props\n}: CombinedFilterProps) {\n const table = useTableContext();\n\n const columnIds = table.useState((state) => {\n return (\n inputColumnIds ??\n state.activeColumns\n .filter(\n (column) =>\n column.filter !== undefined && !state.visibleColumns.some((c) => c.id === column.id),\n )\n .map((column) => column.id)\n );\n });\n\n const isActive = table.useState((state) => {\n return columnIds.some((columnId) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n\n useFilter({\n ...props,\n\n id: 'combinedFilter',\n\n value: isActive,\n\n isActive(filterValue) {\n return filterValue;\n },\n\n test() {\n return true;\n },\n\n onChange(value) {\n if (value === undefined) {\n for (const columnId of columnIds) {\n const impl = table.getState().filters.get(columnId);\n\n impl?.onChange?.(undefined);\n\n if (impl?.value === undefined) {\n table.update((state) => {\n state.filterValues.delete(columnId);\n });\n }\n }\n }\n },\n });\n\n return (\n <div>\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <FilterControl component={Filter} />\n </ColumnContext.Provider>\n ))}\n </div>\n );\n}\n\nfunction Filter({ isActive, ...props }: FilterControlButtonProps) {\n const table = useTableContext();\n const columnId = useColumnContext();\n const FilterList = useTheme((t) => t.icons.FilterList);\n const label = table.useState((state) => {\n return state.activeColumns.find((column) => column.id === columnId)?.header ?? null;\n });\n const Button = useTheme((t) => t.components.Button);\n\n return (\n <Button\n {...props}\n startIcon={\n <FilterList\n css={{\n color: isActive ? 'var(--primaryMain)' : '#b0bac9',\n }}\n />\n }\n css={{\n width: '100%',\n color: isActive ? 'var(--primaryMain)' : 'var(--color-text)',\n }}\n >\n {label}\n </Button>\n );\n}\n","import { DateObj, useDayzed } from 'dayzed';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { Interpolation, Theme } from '@emotion/react';\nimport { TimeInput, type TimeInputProps } from './timeInput';\n\nexport type DateRange = { min: Date; max: Date };\n\nexport type DatePickerQuickOption =\n | 'today'\n | 'thisWeek'\n | 'thisMonth'\n | 'thisYear'\n | 'lastSevenDays'\n | 'lastThirtyDays'\n | { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }\n | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);\n\nexport type DatePickerChangeSource = 'input' | 'calendarWeek' | 'calendar' | 'quickOption';\n\nexport type DatePickerProps = {\n /** Currently selected day or range of days. */\n value: Date | DateRange | null;\n /** Callback for when the day (range) changes. */\n onChange: (value: Date | DateRange | null, source: DatePickerChangeSource) => void;\n /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n noReset?: boolean;\n /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n /** Whether to show and allow editing of time */\n showTime?: boolean | { showSeconds?: boolean };\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) =>\n new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff + delta * 7);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const endOfWeek = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + (7 - (date.getDay() || 7)),\n );\n\n const year = endOfWeek.getFullYear();\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfYear =\n Math.floor(\n (endOfWeek.getTime() -\n firstDayOfYear.getTime() +\n (endOfWeek.getTimezoneOffset() - firstDayOfYear.getTimezoneOffset())) /\n MS_PER_DAY,\n ) + 1;\n const weekOfYear = Math.floor((3 + dayOfYear) / 7);\n\n if (weekOfYear === 0) {\n return (\n getCalendarWeek(\n new Date(endOfWeek.getFullYear(), endOfWeek.getMonth(), endOfWeek.getDate() - 7),\n ) + 1\n );\n }\n\n return weekOfYear;\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: (props) => thisWeek(0, props.firstDayOfWeek) },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: () => thisMonth() },\n thisYear: { label: <Text id=\"thisYear\" />, value: () => thisYear() },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: () => lastDays(7) },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: () => lastDays(30) },\n} satisfies Record<\n DatePickerQuickOption & string,\n { label: ReactNode; value: Date | DateRange | ((props: DatePickerProps) => Date | DateRange) }\n>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(\n a: Date | DateRange | null | undefined,\n b: Date | DateRange | null | undefined,\n) {\n if (a instanceof Date) {\n a = { min: a, max: a };\n }\n if (b instanceof Date) {\n b = { min: b, max: b };\n }\n\n if (!a?.min || !a.max || !b?.min || !b.max) {\n return false;\n }\n\n return !(endOfDay(a.max) < startOfDay(b.min) || startOfDay(a.min) > endOfDay(b.max));\n}\n\nexport function dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n noReset,\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n showTime,\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null, source: DatePickerChangeSource) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value, source);\n }\n\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n color: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: 'var(--date-picker-disemphasized, #bdbdbd)',\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<DateRange>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n const resolvedQuickOptions = [\n ...quickOptions,\n ...(noReset ? [] : [{ label: <Text id=\"reset\" />, value: null }]),\n ].map((option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value, 'quickOption');\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n type=\"button\"\n css={{\n color: 'inherit',\n }}\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props), 'quickOption');\n } else {\n onChange(value, 'quickOption');\n }\n }}\n >\n {label}\n </Button>\n );\n });\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null ? defaultDateInView ?? mountTime : value instanceof Date ? value : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(source: DatePickerChangeSource, min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null, source);\n return;\n }\n\n if (min && max && min > max) {\n if (edit === 'min') {\n max = min;\n } else if (edit === 'max') {\n min = max;\n } else {\n [min, max] = [max, min];\n }\n }\n\n if (!min === !max) {\n setDirty(undefined);\n onChange(min && max ? { min, max: endOfDay(max) } : null, source);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div\n css={[\n cssVariables,\n {\n color: 'var(--table-text-color)',\n },\n ]}\n >\n <div\n css={{\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 'calc(var(--spacing) * 4)',\n\n '& > div': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n }}\n >\n <div>\n <DateInput\n value={min ?? null}\n onChange={(date) => set('input', date ?? undefined, max, 'min')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={min ?? null}\n onChange={(date) => set('input', date ?? undefined, max, 'min')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n\n {rangeSelect && (\n <>\n {' - '}\n\n <div>\n <DateInput\n value={max ?? null}\n onChange={(date) => set('input', min, date ?? undefined, 'max')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={max ?? null}\n onChange={(date) => set('input', min, date ?? undefined, 'max')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n </>\n )}\n </div>\n\n {calendars.map(({ month, year, weeks }) => (\n <div key={`${month}${year}`} css={{ display: 'grid' }}>\n <div\n css={{\n margin: 'calc(var(--spacing) * 4) 0',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <IconButton type=\"button\" {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DateObj;\n const weekEnd = week[6] as DateObj;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n color: 'inherit',\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set('calendarWeek', min, max);\n }}\n onPointerOver={() =>\n !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date })\n }\n onPointerOut={() => !weekDisabled && setHovered(undefined)}\n >\n {getCalendarWeek(weekEnd.date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (dateIntersect(date, hovered) ||\n (min &&\n !max &&\n hovered &&\n dateIntersect(\n date,\n min <= hovered.min\n ? { min, max: hovered.min }\n : { min: hovered.max, max: min },\n )));\n const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\n onClick={() => {\n if (dirty) {\n if (min) set('calendar', min, date);\n else set('calendar', date, max);\n } else {\n set('calendar', date);\n }\n }}\n onPointerOver={() => setHovered({ min: date, max: date })}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\n}\n","import { Fragment, useMemo, useState } from 'react';\n\ntype Part = 'day' | 'month' | 'year';\n\nconst className = 'schummar-table-date-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst defaultLengths = {\n day: 2,\n month: 2,\n year: 4,\n};\n\nconst maxLengths = {\n day: 2,\n month: 2,\n year: Number.POSITIVE_INFINITY,\n};\n\nconst length = (type: Part, value: string) => Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport interface DateInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}\n\nexport function DateInput({ value, onChange, locale }: DateInputProps) {\n const [override, setOverride] = useState<{ type: Part; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n switch (override.type) {\n case 'day': {\n newValue.setDate(Number(override.value));\n break;\n }\n\n case 'month': {\n newValue.setMonth(Number(override.value) - 1);\n break;\n }\n\n case 'year': {\n newValue.setFullYear(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\nexport interface TextProps {\n id: keyof TableTheme['text'];\n}\n\nexport function Text({ id }: TextProps) {\n const text = useTheme((t) => t.text[id]);\n\n return <>{text}</>;\n}\n","import { Fragment, useMemo, useState } from 'react';\n\ntype Part = 'hour' | 'minute' | 'second';\n\nconst className = 'schummar-table-time-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'hour' || type === 'minute' || type === 'second';\n\nconst defaultLengths = {\n hour: 2,\n minute: 2,\n second: 2,\n};\n\nconst maxLengths = {\n hour: 2,\n minute: 2,\n second: 2,\n};\n\nconst length = (type: Part, value: string) => Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport interface TimeInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n showSeconds?: boolean;\n}\n\nexport function TimeInput({ value, onChange, locale, showSeconds = true }: TimeInputProps) {\n const [override, setOverride] = useState<{ type: string; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n switch (override.type) {\n case 'hour': {\n newValue.setHours(Number(override.value));\n break;\n }\n\n case 'minute': {\n newValue.setMinutes(Number(override.value));\n break;\n }\n\n case 'second': {\n newValue.setSeconds(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: showSeconds ? '2-digit' : undefined,\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport type { CommonFilterProps } from '../types';\nimport type { DatePickerProps, DateRange } from './datePicker';\nimport { dateIntersect, DatePicker } from './datePicker';\n\nfunction convertDate(x: unknown): Date | null {\n if (x instanceof Date) return x;\n if (typeof x === 'number' || typeof x === 'string') return new Date(x);\n return null;\n}\n\nfunction convertDateOrRange(x: unknown): Date | DateRange | null {\n if (x instanceof Object && 'min' in x && 'max' in x) {\n const range = {\n min: convertDate((x as any).min),\n max: convertDate((x as any).max),\n };\n return range.min && range.max ? (range as DateRange) : null;\n }\n return convertDate(x);\n}\n\nfunction convertDateOrArray(x: unknown): Date | DateRange | (Date | DateRange)[] | null {\n if (Array.isArray(x)) return x.map(convertDateOrRange).filter(Boolean) as (Date | DateRange)[];\n return convertDateOrRange(x);\n}\n\nexport function DateFilter<TItem, TColumnValue>({\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n filterBy = convertDateOrArray,\n minDate,\n maxDate,\n showCalendarWeek,\n showTime,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n | 'showTime'\n> &\n CommonFilterProps<\n TItem,\n TColumnValue,\n Date | DateRange | null,\n Date | DateRange | null\n >): JSX.Element {\n const { value = null, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'dateFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return dateIntersect(filterValue, value);\n },\n });\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n }}\n >\n <DatePicker\n rangeSelect={!singleSelect}\n value={value}\n onChange={onChange}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n showTime={showTime}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps = TableTheme['components']['TextField'] extends React.ComponentType<infer T>\n ? T\n : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asNumberOrArray, castArray } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { NumberField } from './numberField';\n\nexport interface RangeFilterProps<T, V>\n extends CommonFilterProps<T, V, number | null, [number | null, number | null] | null> {\n min?: number;\n max?: number;\n}\n\nexport function RangeFilter<TItem, TColumnValue>({\n min,\n max,\n filterBy = asNumberOrArray,\n ...props\n}: RangeFilterProps<TItem, TColumnValue>): JSX.Element {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const table = useTableContext<TItem>();\n const columnId = useColumnContext();\n const filterByFunction = filterBy instanceof Function ? filterBy : filterBy[0];\n\n const [minValue, maxValue] = table.useState((state) => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n const column = state.activeColumns.find((c) => c.id === columnId);\n\n if (!column) {\n return [0, 100];\n }\n\n let minValue;\n let maxValue;\n\n for (const item of state.items) {\n const columnValue = column.value(item.value) as TColumnValue;\n const numberValues = castArray(filterByFunction(columnValue, item.value)).filter(\n (value): value is number => value !== null,\n );\n\n for (const value of numberValues) {\n minValue = Math.min(minValue ?? value, value);\n maxValue = Math.max(maxValue ?? value, value);\n }\n }\n\n return [min ?? minValue, max ?? maxValue];\n });\n\n const { value, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'rangeFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n if (!filterValue || (filterValue[0] === null && filterValue[1] === null)) {\n return true;\n }\n\n const min = filterValue[0] ?? Number.NEGATIVE_INFINITY;\n const max = filterValue[1] ?? Number.POSITIVE_INFINITY;\n return value !== null && value >= min && value <= max;\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n gap: '1em',\n }}\n >\n <div\n css={{\n display: 'flex',\n gap: '1em',\n alignItems: 'center',\n\n '& > *': {\n width: '10em',\n },\n }}\n >\n <NumberField\n value={value?.[0]}\n onChange={(newMin) => onChange(normalize(newMin, value?.[1], 'min', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMinText}</span>}\n placeholder={String(minValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n -\n <NumberField\n value={value?.[1]}\n onChange={(newMax) => onChange(normalize(value?.[0], newMax, 'max', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMaxText}</span>}\n placeholder={String(maxValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction normalize(\n min: number | null | undefined,\n max: number | null | undefined,\n changed: 'min' | 'max',\n limits: { min?: number; max?: number },\n): [number | null, number | null] | null {\n min ??= null;\n max ??= null;\n\n if (min !== null && max !== null && min > max) {\n if (changed === 'min') {\n max = min;\n } else {\n min = max;\n }\n }\n\n return min !== null || max !== null\n ? [clamp(min, limits.min, limits.max), clamp(max, limits.min, limits.max)]\n : null;\n}\n\nfunction clamp(\n value: number | null,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n): number | null {\n return value === null ? null : Math.min(Math.max(value, min), max);\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, castArray, flatMap, orderBy, uniq } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps, InternalColumn } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport type { VirtualListProps } from './virtualList';\nimport { VirtualList } from './virtualList';\n\nfunction toggle<T>(set: Set<T>, value: T, singleSelect?: boolean) {\n const newSet = new Set(singleSelect ? [] : set);\n if (set.has(value)) {\n newSet.delete(value);\n } else {\n newSet.add(value);\n }\n\n return newSet;\n}\n\nexport function SelectFilter<TItem, TColumnValue, TFilterBy>({\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n hideSearchField,\n hideResetButton,\n ...props\n}: {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: TFilterBy[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: TFilterBy) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: TFilterBy) => ReactNode;\n /** If enabled, only one option can be selected at a time. */\n singleSelect?: boolean;\n /** If enabled, the search field is hidden. */\n hideSearchField?: boolean;\n /** If enabled, the reset button is hidden. */\n hideResetButton?: boolean;\n /** Virtual list props.\n * @default true */\n virtual?: VirtualListProps<unknown>['virtual'];\n} & CommonFilterProps<TItem, TColumnValue, TFilterBy, Set<TFilterBy>>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n const deselectAll = useTheme((t) => t.text.deselectAll);\n const noResults = useTheme((t) => t.text.noResults);\n\n const table = useTableContext<TItem>();\n const columnId = useColumnContext();\n\n const {\n value = new Set<TFilterBy>(),\n onChange,\n filterBy,\n isActive,\n } = useFilter({\n ...props,\n\n id: 'selectFilter',\n\n isActive(filterValue) {\n return filterValue.size > 0;\n },\n\n test(filterValue, value) {\n return filterValue.has(value);\n },\n });\n\n const options = table.useState((state) => {\n if (providedOptions) return uniq(providedOptions);\n\n const column = state.activeColumns.find((column) => column.id === columnId) as\n | InternalColumn<TItem, TColumnValue>\n | undefined;\n if (!column) return [];\n\n return orderBy(\n uniq(\n flatMap(state.items, (item) => castArray(filterBy(column.value(item.value), item.value))),\n ),\n );\n });\n\n const [query, setQuery] = useState('');\n const filtered = options.filter(\n (option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()),\n );\n const delayedValue = useMemo(() => value, [isActive]);\n const ordered = filtered\n .filter((option) => delayedValue.has(option))\n .concat(filtered.filter((option) => !delayedValue.has(option)));\n\n const Button = useTheme((t) => t.components.Button);\n\n useEffect(() => {\n setQuery('');\n }, [isActive]);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{\n justifyContent: 'center',\n width: '100%',\n marginBottom: 'var(--spacing)',\n color: 'inherit',\n }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n css={{\n width: '20em',\n maxWidth: '100%',\n maxHeight: 'min(20em, 50vh)',\n overflow: 'hidden auto',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n }}\n >\n {(option, index) => (\n <FormControlLabel\n key={index}\n control={\n <Checkbox\n checked={value.has(option)}\n onChange={() => onChange(toggle(value, option, singleSelect))}\n />\n }\n label={render(option)}\n />\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport function FormControlLabel({\n control,\n label,\n disabled,\n}: {\n control: ReactNode;\n label: ReactNode;\n disabled?: boolean;\n}) {\n return (\n <label\n css={[\n {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n },\n disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?:\n | boolean\n | {\n rowHeight?: number;\n initalRowHeight?: number;\n throttleScroll?: number;\n overscan?: number;\n overscanBottom?: number;\n overscanTop?: number;\n };\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): JSX.Element {\n const container = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual) return;\n\n const ro = new ResizeObserver(update);\n\n if (container.current) {\n ro.observe(container.current);\n }\n\n window.addEventListener('resize', update, true);\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n update.cancel();\n };\n }, [update, virtual, throttleScroll]);\n\n if (!virtual) {\n return (\n <div\n {...props}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n const {\n rowHeight,\n initalRowHeight = 38,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (virtual instanceof Object ? virtual : undefined) ?? {};\n\n const itemHeight = rowHeight ?? (averageItemHeight(container.current) || initalRowHeight);\n const from = container.current?.clientHeight\n ? Math.max(\n 0,\n Math.floor((container.current.scrollTop - (overscanTop ?? overscan)) / itemHeight),\n )\n : 0;\n const to = container.current?.clientHeight\n ? Math.min(\n items.length,\n Math.ceil(\n (container.current.scrollTop +\n container.current.clientHeight +\n (overscanBottom ?? overscan)) /\n itemHeight,\n ),\n )\n : 1;\n const before = from * itemHeight;\n const after = (items.length - to) * itemHeight;\n\n return (\n <div\n {...props}\n onScroll={(event) => {\n update();\n props.onScroll?.(event);\n }}\n ref={container}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n <div data-virtual-before style={{ height: before }} />\n {items.slice(from, to).map((item, index) => children(item, index + from))}\n <div data-virtual-after style={{ height: after }} />\n </div>\n );\n}\n\nfunction averageItemHeight(container: HTMLDivElement | null) {\n if (!container?.children.length) {\n return undefined;\n }\n\n const heights = Array.from(container.children)\n .slice(1, -1)\n .map((child) => child.clientHeight);\n return heights.reduce((a, b) => a + b, 0) / heights.length;\n}\n","export function throttle<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void; cancel(): void } {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n last = Date.now();\n lastArgs = undefined;\n timeout = undefined;\n\n function_(...args!);\n }\n\n return Object.assign(\n function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n },\n {\n flush() {\n if (lastArgs) {\n run();\n }\n },\n\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n },\n },\n );\n}\n","import { memo, useEffect, useLayoutEffect, useState } from 'react';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useTableContext,\n} from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { TableProps } from '../types';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport CombinedFilter from './combinedFilter';\nimport { ResizeHandleView } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { Virtualized } from './virtualized';\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const [table, resetState] = useTableState(props);\n const [isHydrated, clearStorage] = useTableStateStorage(table);\n\n async function reset() {\n await clearStorage();\n resetState();\n }\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table'));\n\n return (\n <TableContext.Provider value={table}>\n <TableResetContext.Provider value={reset}>\n <TableMemoContextProvider>\n <TableLoadingState isHydrated={isHydrated} />\n </TableMemoContextProvider>\n </TableResetContext.Provider>\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const loadingText = useTheme((t) => t.text.loading);\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{loadingText}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState((state) => state.props.fullWidth);\n\n const visibleColumns = table.useState((state) =>\n state.visibleColumns.map((column) => ({\n id: column.id,\n width: column.width,\n classes: column.classes,\n styles: column.styles,\n footer: column.footer,\n })),\n );\n\n const hasActiveFilters = table.useState((state) => {\n return state.activeColumns.some((column) => {\n const filter = state.filters.get(column.id);\n const filterValue = state.filterValues.get(column.id);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n const columnWidths = table.useState((state) => state.columnWidths, { throttle: 16 });\n const hasFooter = table.useState((state) => state.activeColumns.some((column) => column.footer));\n\n const classes = useTheme((theme) => theme.classes);\n const styles = useTheme((theme) => theme.styles);\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n\n const enableSelection = table.useState((state) => state.props.enableSelection);\n const enableColumnSelection = table.useState((state) =>\n Array.isArray(state.props.enableColumnSelection)\n ? !state.displaySize || state.props.enableColumnSelection.includes(state.displaySize)\n : state.props.enableColumnSelection,\n );\n const enableExport = table.useState((state) =>\n typeof state.props.enableExport === 'object' && !('exporters' in state.props.enableExport)\n ? !state.displaySize || !!state.props.enableExport[state.displaySize]\n : !!state.props.enableExport,\n );\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState((state) => state.props.enableClearFiltersButton);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[cssVariables, defaultClasses.table, styles?.table, hidden && { visibility: 'hidden' }]}\n style={{\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...visibleColumns.map(\n (column) => columnWidths.get(column.id) ?? column.width ?? 'max-content',\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[\n { gridColumn: 1 },\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n />\n\n <div\n className={classes?.headerCell}\n css={[\n { gridColumn: 2 },\n defaultClasses.headerCell,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n >\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n\n {(enableSelection || enableColumnSelection || enableExport) && (\n <>\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </>\n )}\n </div>\n\n <ColumnHeaderContext.Provider>\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader />\n </ColumnContext.Provider>\n ))}\n </ColumnHeaderContext.Provider>\n\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n />\n </>\n }\n footer={\n <>\n {enableClearFiltersButton && hasActiveFilters && <ClearFiltersButton />}\n {hasFooter && (\n <>\n <div\n className={classes?.footerCell}\n css={[\n { gridColumn: 1 },\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\n ]}\n />\n\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnFooter />\n </ColumnContext.Provider>\n ))}\n\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\n ]}\n />\n </>\n )}\n </>\n }\n >\n {(itemIds, startIndex) =>\n itemIds.map((itemId, index) => (\n <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />\n ))\n }\n </Virtualized>\n );\n});\n","import type { Draft } from 'immer';\nimport { useEffect, useState } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { Queue } from '../misc/queue';\nimport type { InternalTableState } from '../types';\n\nconst KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n 'columnOrder',\n] as const;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | Promise<unknown>;\n} & (\n | {\n keys: () => string[] | Promise<string[]>;\n }\n | {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n }\n);\n\nfunction stringify(value: unknown) {\n function prepare(value: unknown): any {\n if (value instanceof Date) {\n return { __date: value.toJSON() };\n }\n\n if (value instanceof Set) {\n return { __set: Array.from(value).map(prepare) };\n }\n\n if (value instanceof Map) {\n return { __map: Array.from(value.entries()).map((entry) => entry.map(prepare)) };\n }\n\n if (Array.isArray(value)) {\n return value.map(prepare);\n }\n\n if (value instanceof Object) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, prepare(v)]));\n }\n\n return value;\n }\n\n return JSON.stringify(prepare(value));\n}\n\nfunction parse(value: string) {\n return JSON.parse(value, (_key, value) => {\n if (value instanceof Object && '__date' in value) {\n return new Date(value.__date);\n }\n\n if (value instanceof Object && '__set' in value) {\n return new Set(value.__set);\n }\n\n if (value instanceof Object && '__map' in value) {\n return new Map(value.__map);\n }\n\n return value;\n });\n}\n\nexport function useTableStateStorage(table: Store<InternalTableState<any>>) {\n const [isHydrated, setIsHydrated] = useState(false);\n const [q] = useState(() => new Queue());\n\n // On mount: load\n useEffect(() => {\n const { persist } = table.getState().props;\n if (!persist) {\n setIsHydrated(true);\n return;\n }\n\n let isCanceled = false;\n\n (async () => {\n try {\n const { storage, id, include, exclude } = persist;\n const json = await storage.getItem(storageName(id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n table.getState().props.debug?.('load', json, data);\n\n // eslint-disable-next-line no-inner-declarations\n function applyUpdate(state: Draft<InternalTableState<any>>, key: (typeof KEYS)[number]) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key) &&\n key in data\n ) {\n if (key === 'filterValues') {\n for (const [id, value] of data[key]) {\n const filter = state.filters.get(id);\n\n if (filter && (filter.persist ?? filter.value === undefined)) {\n state.filterValues.set(id, value);\n state.filters.get(id)?.onChange?.(value);\n }\n }\n } else {\n if (\n key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort'\n ) {\n if (state.props[key] !== undefined) {\n return;\n }\n\n state.props[\n `on${\n (key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>\n }Change`\n ]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n\n table.update((state) => {\n for (const key of KEYS.filter((key) => key !== 'filterValues')) {\n applyUpdate(state, key);\n }\n });\n\n // First apply other keys and wait until changes take effect. Filters cannot be applied to hidden columns.\n await new Promise((resolve) => {\n setTimeout(resolve);\n });\n table.update((state) => applyUpdate(state, 'filterValues'));\n } catch (error) {\n console.error('Failed to load table state:', error);\n } finally {\n setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, [table]);\n\n // After isHydrated, watch and save state\n useEffect(() => {\n if (!isHydrated) return;\n\n return table.subscribe(\n (state) => {\n if (!state.props.persist) return;\n\n const { storage, id, include, exclude } = state.props.persist;\n const data: any = {};\n\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key)\n ) {\n if (key === 'filterValues') {\n data[key] = new Map();\n for (const [id, value] of state.filterValues) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n data.filterValues.set(id, value);\n }\n }\n } else {\n if (\n (key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort') &&\n state.props[key] !== undefined\n ) {\n continue;\n }\n\n data[key] = state[key];\n }\n }\n }\n\n return { storage, id, data };\n },\n (props) => {\n if (!props) return;\n const { storage, id, data } = props;\n\n table.getState().props.debug?.('save', data, stringify(data));\n q.run(async () => {\n await storage.setItem(storageName(id), stringify(data));\n }, true);\n },\n { throttle: 1000 },\n );\n }, [table, isHydrated]);\n\n async function clear() {\n await q.run(async () => {\n const persist = table.getState().props.persist;\n if (!persist) {\n return;\n }\n\n const { storage, id } = persist;\n await storage.removeItem(storageName(id));\n\n setIsHydrated(false);\n q.clear();\n });\n }\n\n return [isHydrated, clear] as const;\n}\n","export class Queue {\n private q = new Array<{\n job: () => Promise<any>;\n resolve: (value: any) => void;\n reject: (reason?: any) => void;\n }>();\n\n private isRunning = false;\n\n run<T>(job: () => Promise<T>, replace?: boolean) {\n return new Promise<T>((resolve, reject) => {\n if (replace) {\n this.q = [];\n }\n this.q.push({ job, resolve, reject });\n\n if (!this.isRunning) this.start();\n });\n }\n\n clear() {\n this.q = [];\n }\n\n private async start() {\n this.isRunning = true;\n\n let next;\n while ((next = this.q.shift())) {\n try {\n const result = await next.job();\n next.resolve(result);\n } catch (error) {\n next.reject(error);\n }\n }\n\n this.isRunning = false;\n }\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport type { InternalTableState, TableProps } from '../types';\nimport { calcItems } from './calcItems';\nimport { calcProps } from './calcProps';\nimport { cleanupState } from './cleanupState';\nimport { filterColumns } from './filterColumns';\nimport { normalizeExpanded } from './normalizeExpanded';\nimport { syncSelections } from './syncSelections';\nimport { watchDisplaySize } from './watchDisplaySize';\n\nexport function useTableState<T>(\n _props: TableProps<T>,\n): [Store<InternalTableState<T>>, () => void] {\n const [key, setKey] = useState({});\n const props = calcProps(_props);\n\n function reset() {\n setKey({});\n\n if (props.sort === undefined) {\n props.onSortChange?.(props.defaultSort ?? []);\n }\n\n if (props.expanded === undefined) {\n props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n }\n\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n\n props.onReset?.('table');\n }\n\n const state = useMemo(\n () =>\n new Store<InternalTableState<T>>({\n normalizedProps: props,\n props,\n\n key,\n sort: props.defaultSort ?? [],\n selection: props.defaultSelection ?? new Set(),\n expanded: props.defaultExpanded ?? new Set(),\n rowHeights: new Map(),\n filters: new Map(),\n filterValues: new Map(),\n hiddenColumns: props.defaultHiddenColumns ?? new Set(),\n columnWidths: new Map(),\n columnOrder: props.columns.map((column) => column.id),\n columnStyleOverride: new Map(),\n\n activeColumns: [],\n visibleColumns: [],\n items: [],\n itemsById: new Map(),\n activeItems: [],\n activeItemsById: new Map(),\n lastSelectedId: undefined,\n displaySizePx: undefined,\n displaySize: undefined,\n }),\n [key],\n );\n\n filterColumns(state);\n calcItems(state);\n normalizeExpanded(state);\n syncSelections(state);\n cleanupState(state);\n watchDisplaySize(state);\n\n useEffect(() => {\n state.update((state) => {\n state.normalizedProps = castDraft(props);\n\n if (props.sort) state.sort = props.sort;\n if (props.selection) state.selection = props.selection;\n if (props.expanded) state.expanded = props.expanded;\n if (props.hiddenColumns) state.hiddenColumns = props.hiddenColumns;\n for (const column of props.columns) {\n if (!state.columnOrder.includes(column.id)) {\n const index = props.columns.indexOf(column);\n state.columnOrder.splice(index, 0, column.id);\n }\n }\n });\n }, [state, props]);\n\n return [state, reset];\n}\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState, TableItem } from '../types';\n\nexport function calcItems<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.items,\n state.props.id,\n state.props.parentId,\n state.props.revealFiltered,\n state.props.externalSort,\n state.sort,\n state.filters,\n state.filterValues,\n state.activeColumns,\n state.expanded,\n ] as const,\n (\n [\n items = [],\n id,\n parentId,\n revealFiltered,\n externalSort,\n sort,\n filters,\n filterValues,\n activeColumns,\n ],\n draft,\n ) => {\n const tableItems = items.map<TableItem<T>>((item) => ({\n id: id(item),\n parentId: parentId?.(item),\n children: [],\n value: item,\n }));\n\n let sorted;\n if (sort.length === 0 || externalSort) {\n sorted = tableItems;\n } else {\n const selectors = flatMap(sort, (sort) => {\n const column = activeColumns.find((column) => column.id === sort.columnId);\n if (!column) return [];\n return column.sortBy.map((sortBy) => ({\n selector: (item: T) => sortBy(column.value(item), item),\n direction: sort.direction,\n }));\n }).filter(Boolean);\n\n sorted = orderBy(\n tableItems,\n selectors.map((x) => (item) => x.selector(item.value)),\n selectors.map((x) => x.direction),\n );\n }\n\n const lookup = new Map<Id, TableItem<T>>();\n for (const item of sorted) {\n lookup.set(item.id, item);\n }\n\n for (const item of sorted) {\n const parent =\n item.parentId !== undefined && item.parentId !== null\n ? lookup.get(item.parentId)\n : undefined;\n parent?.children.push(item);\n }\n\n const allItems = new Array<TableItem<T>>();\n const allItemsById = new Map<Id, TableItem<T>>();\n\n const traverse = (items: TableItem<T>[]): void => {\n for (const item of items) {\n allItems.push(item);\n allItemsById.set(item.id, item);\n traverse(item.children);\n }\n };\n traverse(sorted.filter((item) => item.parentId === undefined || item.parentId === null));\n\n let expandedChanged = false;\n const activeItemsById = new Map<Id, TableItem<T>>();\n const activeSet = new Set<Id>();\n const activeItems = [...allItems]\n .reverse()\n .filter((item) => {\n let isActive = activeSet.has(item.id);\n\n isActive ||= activeColumns.every((column) => {\n const filter = filters.get(column.id);\n if (!filter || filter.external) return true;\n\n const filterValue = filterValues.get(column.id);\n if (filterValue === undefined || !filter.isActive(filterValue)) return true;\n\n const filterBy = filter.filterBy ?? ((x) => x);\n const value = filterBy(column.value(item.value), item.value);\n return castArray(value).some((value) => filter.test(filterValue, value));\n });\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n if (\n revealFiltered &&\n Array.from(filters.entries()).some(([id, filter]) => {\n const filterValue = filterValues.get(id);\n return !!filter && filterValue !== undefined && filter.isActive(filterValue);\n })\n ) {\n expandedChanged ||= !draft.expanded.has(item.parentId);\n draft.expanded.add(item.parentId);\n } else if (!draft.expanded.has(item.parentId)) {\n isActive = false;\n }\n }\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n activeSet.add(item.parentId);\n }\n if (isActive) {\n activeItemsById.set(item.id, item);\n }\n\n return isActive;\n })\n .reverse();\n\n draft.items = castDraft(allItems);\n draft.itemsById = castDraft(allItemsById);\n draft.activeItems = castDraft(activeItems);\n draft.activeItemsById = castDraft(activeItemsById);\n\n if (expandedChanged) {\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(state.getState().expanded);\n });\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useMemo } from 'react';\nimport { defaultSerializer } from '../exporters/serializer';\nimport { useTableMemo } from '../hooks/useTableMemo';\nimport { asString } from '../misc/helpers';\nimport { overrides } from '../misc/overrides';\nimport type { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\n\nconst defaultProps: InternalTableProps<any> = {\n id: () => '',\n columns: [],\n enableSelection: true,\n selectSyncChildren: true,\n stickyHeader: true,\n stickyFooter: true,\n enableColumnSelection: true,\n enableColumnResize: true,\n enableColumnReorder: true,\n displaySizeOverrides: {\n mobile: {\n enableSelection: false,\n enableColumnSelection: false,\n enableExport: false,\n enableColumnResize: false,\n enableColumnReorder: false,\n },\n },\n};\n\nexport function calcProps<T>(props: TableProps<T>): InternalTableProps<T> {\n const cache = useTableMemo();\n\n return useMemo(\n () => overrides(defaultProps, calc(props, cache)) as InternalTableProps<T>,\n [props],\n );\n}\n\nfunction calc<T>(\n props: Partial<TableProps<T>>,\n cache: ReturnType<typeof useTableMemo>,\n): Partial<InternalTableProps<T>> {\n let id;\n if (props.id instanceof Function || Array.isArray(props.id)) {\n id = cache('id', props.id);\n } else if (props.id !== undefined) {\n id = cache('id', [(item: T) => item[props.id as keyof T] as unknown as Id, props.id]);\n }\n\n let parentId;\n if (props.parentId instanceof Function || Array.isArray(props.parentId)) {\n parentId = cache('parentId', props.parentId);\n } else if (props.parentId !== undefined) {\n parentId = cache('parentId', [\n (item: T) => item[props.parentId as keyof T] as unknown as Id | undefined,\n props.parentId,\n ]);\n }\n\n const columnProps = props.columnProps && cache('columnProps', props.columnProps);\n\n let inputColumns;\n if (props.columns instanceof Function) {\n inputColumns = props.columns((value, column) => ({ ...column, value }));\n } else if (props.columns !== undefined) {\n inputColumns = props.columns.map((column) => ({ ...column, dependecies: undefined }));\n }\n\n const globalDefaults = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header,\n exportHeader,\n footer,\n value,\n renderCell,\n exportCell,\n sortBy,\n disableSort,\n hidden,\n classes,\n styles,\n filter,\n width,\n displaySize,\n }: Column<T, V>,\n index: number,\n ): InternalColumn<T, V> => {\n const id = _id ?? index;\n const cacheKey = typeof id === 'string' ? `s${id}` : `n${id}`;\n const defaults = { ...globalDefaults, ...columnProps?.(id) };\n\n return {\n id,\n header: header ?? defaults?.header ?? null,\n exportHeader: exportHeader ?? defaults?.exportHeader ?? id,\n footer: footer ?? defaults?.footer ?? null,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(\n `columns.${cacheKey}.renderCell`,\n renderCell ?? defaults?.renderCell ?? asString,\n ),\n exportCell: exportCell ?? defaults?.exportCell ?? defaultSerializer,\n sortBy: (\n sortBy ??\n defaults?.sortBy ?? [\n (v) =>\n typeof v === 'number' || v instanceof Date\n ? v\n : v === null || v === undefined\n ? ''\n : String(v),\n ]\n ).map((function_, i) => cache(`columns.${cacheKey}.sortBy.${i}`, function_)),\n disableSort,\n hidden: hidden ?? defaults?.hidden,\n classes: classes ?? defaults?.classes,\n styles: styles ?? defaults?.styles,\n filter: filter ?? defaults?.filter,\n width: width ?? defaults?.width,\n displaySize: Array.isArray(displaySize)\n ? displaySize\n : displaySize\n ? [displaySize]\n : undefined,\n };\n };\n\n const columns = inputColumns?.map(mapColumn);\n\n const wrapRow = props.wrapRow && cache('wrapRow', props.wrapRow);\n const wrapCell = props.wrapCell && cache('wrapCell', props.wrapCell);\n\n const rowAction =\n props.rowAction instanceof Function || Array.isArray(props.rowAction)\n ? cache('rowAction', props.rowAction)\n : props.rowAction;\n\n const rowDetails =\n props.rowDetails instanceof Function || Array.isArray(props.rowDetails)\n ? cache('rowDetails', props.rowDetails)\n : props.rowDetails;\n\n const displaySizeOverrides =\n props.displaySizeOverrides &&\n Object.fromEntries(\n Object.entries(props.displaySizeOverrides ?? {}).map(([size, overrides]) => [\n size,\n overrides && calc(overrides, cache),\n ]),\n );\n\n return {\n ...props,\n id,\n parentId,\n columns,\n columnProps,\n wrapRow,\n wrapCell,\n rowAction,\n rowDetails,\n enableSelection: props.enableSelection,\n selectSyncChildren: props.selectSyncChildren,\n stickyHeader: props.stickyHeader,\n stickyFooter: props.stickyFooter,\n enableColumnSelection: props.enableColumnSelection,\n enableExport: props.enableExport,\n enableClearFiltersButton: props.enableClearFiltersButton,\n enableColumnResize: props.enableColumnResize,\n enableColumnReorder: props.enableColumnReorder,\n displaySizeOverrides,\n };\n}\n","export function defaultSerializer(x: unknown): string | number | Date {\n if (x instanceof Date || typeof x === 'number' || typeof x === 'string') {\n return x;\n }\n\n return JSON.stringify(x) ?? '';\n}\n","export function overrides<T extends object>(first: T, ...overrides: (Partial<T> | undefined)[]): T {\n return overrides.reduce<T>(\n (result, source) => {\n for (const [key, value] of Object.entries(source ?? {})) {\n if (value !== undefined) {\n result[key as keyof T] = value as any;\n }\n }\n\n return result;\n },\n { ...first },\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.itemsById,\n state.activeItemsById,\n state.activeColumns,\n ] as const,\n ([columns, itemsById, activeItemsById, activeColumns], draft) => {\n const columnIds = new Set(columns.map((column) => column.id));\n const activeColumnIds = new Set(activeColumns.map((column) => column.id));\n\n // Remove sort entries for non active columns\n const newSort = draft.sort.filter((s) => activeColumnIds.has(s.columnId));\n if (newSort.length < draft.sort.length) {\n draft.sort = newSort;\n setTimeout(() => {\n state.getState().props.onSortChange?.(newSort);\n });\n }\n\n // Remove filters for non active columns\n for (const id of draft.filters.keys()) {\n if (!activeColumnIds.has(id)) draft.filters.delete(id);\n }\n\n // Remove filterValues for non active columns\n for (const id of draft.filterValues.keys()) {\n if (!activeColumnIds.has(id)) draft.filterValues.delete(id);\n }\n\n // Remove hiddenColumns for non existing columns\n for (const id of draft.hiddenColumns.keys()) {\n if (!columnIds.has(id)) draft.hiddenColumns.delete(id);\n }\n\n // Remove columnWidth for non existing columns\n for (const id of draft.columnWidths.keys()) {\n if (!columnIds.has(id)) draft.columnWidths.delete(id);\n }\n\n // Remove non existing columns from columnOrder\n for (const id of draft.columnOrder) {\n if (!columnIds.has(id)) draft.columnOrder = draft.columnOrder.filter((x) => x !== id);\n }\n\n if (draft.props.items) {\n // Remove selection for non active items\n const newSelection = intersect(draft.selection, activeItemsById);\n if (newSelection.size !== draft.selection.size) {\n draft.selection = newSelection;\n setTimeout(() => {\n state.getState().props.onSelectionChange?.(newSelection);\n });\n }\n\n // Remove expanded for non existing items\n const newExpanded = intersect(draft.expanded, itemsById);\n if (newExpanded.size < draft.expanded.size) {\n draft.expanded = newExpanded;\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(newExpanded);\n });\n }\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function filterColumns<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.hiddenColumns,\n state.columnOrder,\n state.displaySize,\n state.displaySizePx,\n ] as const,\n ([columns, hiddenColumns, columnOrder, displaySize], draft) => {\n draft.activeColumns = orderBy(\n columns.filter((column) => !(column.hidden ?? hiddenColumns.has(column.id))),\n [(column) => columnOrder.indexOf(column.id)],\n );\n\n draft.visibleColumns = draft.activeColumns.filter(\n (column) =>\n displaySize === undefined ||\n column.displaySize === undefined ||\n column.displaySize.includes(displaySize),\n );\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState } from '../types';\n\nexport function normalizeExpanded<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.expandOnlyOne, state.expanded, state.itemsById] as const,\n ([expandOnlyOne, , itemsById], state) => {\n let expanded = state.expanded;\n let hasChanged = false;\n\n const allAncestors = [...expanded].map((id) => {\n const item = itemsById.get(id);\n return {\n id,\n ancestors: item ? getAncestors(itemsById, item) : new Set<Id>(),\n };\n });\n\n // If only one branch may be expanded, check if there are more and close if necessary\n if (expandOnlyOne) {\n const withMostAncestors = orderBy(allAncestors, [(x) => x.ancestors.size], ['desc'])[0];\n\n if (\n [...expanded].some(\n (id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id),\n )\n ) {\n expanded = withMostAncestors?.ancestors ?? new Set();\n state.expanded = expanded;\n\n state.props.onExpandedChange?.(expanded);\n return;\n }\n }\n\n for (const { ancestors } of allAncestors) {\n for (const ancestor of ancestors ?? []) {\n if (!expanded.has(ancestor)) {\n expanded.add(ancestor);\n hasChanged = true;\n }\n }\n }\n\n if (hasChanged) {\n state.props.onExpandedChange?.(new Set(expanded));\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { InternalTableState } from '../types';\n\nexport function syncSelections<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.selectSyncChildren, state.selection, state.activeItems] as const,\n ([selectSyncChildren, selection, activeItems], state) => {\n if (!selectSyncChildren) return;\n\n const newSelection = new Set(selection);\n for (const item of activeItems) {\n if (\n item.parentId !== undefined &&\n item.parentId !== null &&\n newSelection.has(item.parentId)\n ) {\n newSelection.add(item.id);\n }\n }\n\n if (newSelection.size !== selection.size) {\n state.selection = newSelection;\n setTimeout(() => {\n table.getState().props.onSelectionChange?.(newSelection);\n });\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { overrides } from '../misc/overrides';\nimport type { InternalTableState } from '../types';\n\nconst DEFAULT_DISPLAY_SIZES = {\n mobile: 400,\n desktop: Infinity,\n};\n\nexport function watchDisplaySize<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => ({\n displaySizePx: state.displaySizePx,\n displaySize: state.props.displaySize,\n }),\n ({ displaySizePx, displaySize = DEFAULT_DISPLAY_SIZES }, draft) => {\n if (displaySizePx === undefined) {\n return;\n }\n\n if (typeof displaySize === 'object') {\n const entry = Object.entries(displaySize).find(\n ([, maxWidth]) => maxWidth >= displaySizePx,\n );\n draft.displaySize = entry?.[0];\n } else {\n draft.displaySize = displaySize;\n }\n },\n ),\n [state],\n );\n\n useEffect(\n () =>\n state.addReaction(\n (state) => ({\n props: state.normalizedProps,\n displaySize: state.displaySize,\n }),\n ({ props, displaySize }, draft) => {\n draft.props = castDraft(\n overrides(props, displaySize ? props.displaySizeOverrides?.[displaySize] : undefined),\n );\n },\n ),\n [state],\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport default function ClearFiltersButton<T>() {\n const Button = useTheme((t) => t.components.Button);\n const textClearFilters = useTheme((t) => t.text.clearFilters);\n const table = useTableContext<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button\n variant=\"outlined\"\n onClick={() => {\n table.update((state) => {\n state.activeColumns.forEach((column) => {\n state.filterValues.delete(column.id);\n });\n table.getState().props.onReset?.('filters');\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const columnClasses = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.classes?.footerCell,\n );\n const classes = useTheme((theme) => theme.classes?.footerCell);\n const columnCss = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.styles?.footerCell,\n );\n const styles = useTheme((theme) => theme.styles?.footerCell);\n\n const content = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return column?.footer;\n });\n\n return (\n <div\n className={cx(classes, columnClasses)}\n css={[\n defaultClasses.footerCell,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles,\n columnCss,\n ]}\n style={columnStyleOverride}\n >\n {content}\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader() {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState((state) => state.props.enableColumnReorder);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const classes = useTheme((theme) => theme.classes?.headerCell);\n const styles = useTheme((theme) => theme.styles?.headerCell);\n\n const { header, columnClasses, columnStyles } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes?.headerCell,\n columnStyles: column?.styles?.headerCell,\n };\n });\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table\n .getState()\n .columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(event: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: event.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (\n !div ||\n draggingStart.current === undefined ||\n Math.abs(event.clientX - draggingStart.current.mouseX) < 5\n )\n return;\n\n event.stopPropagation();\n div.setPointerCapture(event.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow:\n '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${\n draggingStart.current.bounds.left + event.clientX - draggingStart.current.mouseX\n }px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n // Apply transforms to each column\n const columns = table.getState().columnOrder.map((id, index) => ({\n id,\n index,\n width: store.getState().items.get(id)?.offsetWidth ?? 0,\n }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns\n .slice(index + 1, targetIndex + 1)\n .reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n ref={ref}\n className={cx(classes, columnClasses)}\n css={[\n defaultClasses.headerCell,\n {\n position: 'relative',\n userSelect: 'none',\n },\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles,\n columnStyles,\n ]}\n style={columnStyleOverride}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n <SortComponent>{header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import type React from 'react';\nimport type { HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState((state) => state.props.enableColumnResize);\n\n function onPointerDown(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.setPointerCapture(event.pointerId);\n }\n\n function onPointerMove(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n if (!div.hasPointerCapture(event.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(event.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.releasePointerCapture(event.pointerId);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n table.update((state) => {\n if (event.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n if (!enabled) {\n return null;\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n\nexport function ResizeHandleView({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean | 'visualOnly' }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled === true ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.5em',\n background: '#c9cfda',\n transition: 'transform 300ms',\n },\n\n '@media (pointer: coarse)': {\n pointerEvents: 'none',\n },\n },\n styles,\n ]}\n {...props}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const { direction, index, sortDisabled } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n sortDisabled: column?.disableSort ?? state.props.disableSort,\n };\n });\n\n function toggle(event: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort =\n event.getModifierState('Control') || off\n ? table.getState().sort.filter((s) => s.columnId !== columnId)\n : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\n\n event.preventDefault();\n return false;\n }\n\n return (\n <div\n css={{\n userSelect: 'none',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) max-content',\n alignItems: 'center',\n cursor: 'pointer',\n\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }}\n onClick={(event) => toggle(event)}\n onContextMenu={(event) => toggle(event, true)}\n >\n <div>{children}</div>\n\n {\n <Badge badgeContent={sortDisabled ? 0 : index}>\n <span\n css={[\n { transition: 'all 300ms', fontSize: '0.8em' },\n !direction && { opacity: 0 },\n direction === 'desc' && { transform: 'rotate3d(0, 0, 1, 180deg)' },\n ]}\n >\n <ArrowUpward />\n </span>\n </Badge>\n }\n </div>\n );\n}\n","import { useContext, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableResetContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\n const Settings = useTheme((t) => t.icons.Settings);\n const selectColumns = useTheme((t) => t.text.selectColumns);\n const resetAll = useTheme((t) => t.text.resetAll);\n const showAll = useTheme((t) => t.text.showAllColumns);\n const hideAll = useTheme((t) => t.text.hideAllColumns);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const reset = useContext(TableResetContext);\n const columns = table.useState((state) => state.props.columns);\n const hiddenColumns = table.useState((state) => state.hiddenColumns);\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n\n for (const columnId of column ? [column.id] : columns.map((column) => column.id)) {\n if (state ?? hiddenColumns.has(columnId)) {\n newValue.delete(columnId);\n } else {\n newValue.add(columnId);\n }\n }\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n const allVisible = columns.every((column) => !hiddenColumns.has(column.id));\n\n return (\n <>\n <IconButton onClick={(event) => setAnchorElement(anchorElement ? null : event.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorElement}\n open={!!anchorElement}\n onClose={() => setAnchorElement(null)}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{selectColumns}</div>\n\n <div css={{ margin: '0.5em 0', display: 'flex', gap: '0.5em' }}>\n <Button variant=\"outlined\" onClick={() => toggle(undefined, !allVisible)}>\n {allVisible ? hideAll : showAll}\n </Button>\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useContext, useState } from 'react';\nimport { ExportOptions, ExporterEntry } from '../exporters/exporter';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport function Export<T>(): JSX.Element {\n const { exporters: contextExporters } = useContext(TableSettingsContext);\n const table = useTableContext<T>();\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const ExportIcon = useTheme((t) => t.icons.Export);\n const Clipboard = useTheme((t) => t.icons.Clipboard);\n const exportTitle = useTheme((t) => t.text.exportTitle);\n const exportCopy = useTheme((t) => t.text.exportCopy);\n const exportDownload = useTheme((t) => t.text.exportDownload);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const { all, exporters } = table.useState((state): ExportOptions => {\n if (typeof state.props.enableExport === 'boolean' || state.props.enableExport === undefined) {\n return {\n all: false,\n exporters: contextExporters,\n };\n }\n\n return state.props.enableExport;\n });\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n function execute({ action, exporter }: ExporterEntry) {\n const { activeColumns, activeItems, items } = table.getState();\n const columns = activeColumns.map((column) => column.exportHeader);\n const rows = (all ? items : activeItems).map((item) =>\n activeColumns.map((column) => column.exportCell(column.value(item.value), item.value)),\n );\n\n if (action === 'copy') {\n const data = exporter.exportToString(columns, rows);\n navigator.clipboard.writeText(data);\n } else {\n const blob = exporter.exportToBlob(columns, rows);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export.${exporter.fileEnding}`;\n document.body.append(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n }\n }\n\n return (\n <>\n <IconButton onClick={(event) => setAnchor(anchor ? null : event.currentTarget)}>\n <ExportIcon css={!!anchor && { color: 'var(--primaryMain)' }} />\n </IconButton>\n\n <Popover\n open={!!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n justifyItems: 'stretch',\n gap: 'var(--spacing)',\n\n '& > *': {\n justifyContent: 'start',\n },\n }}\n >\n <div css={{ marginBottom: 'var(--spacing)' }}>{exportTitle}</div>\n\n {exporters.map((entry, index) => (\n <Button\n key={index}\n startIcon={entry.action === 'copy' ? <Clipboard /> : <ExportIcon />}\n onClick={() => execute(entry)}\n >\n {entry.action === 'copy' ? exportCopy : exportDownload} (.{entry.exporter.type})\n </Button>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { ClassNames } from '@emotion/react';\nimport { memo, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { ColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { Cell } from './cell';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\n\nexport const Row = memo(function Row<T>({\n itemId,\n rowIndex,\n}: {\n itemId: Id;\n rowIndex: number;\n}): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n const detailsDivRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const wrapRow = table.useState((state) => state.props.wrapRow) ?? ((props) => <div {...props} />);\n const rowClassName =\n classes?.row instanceof Function ? classes.row(item?.value, rowIndex) : classes?.row;\n const rowStyles =\n styles?.row instanceof Function ? styles.row(item?.value, rowIndex) : styles?.row;\n const subgrid = table.useState((state) => state.props.subgrid);\n\n const {\n cellClassName,\n css_,\n indent,\n hasChildren,\n hasDeferredChildren,\n columnIds,\n enableSelection,\n rowAction,\n hasDetails,\n } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n cellClassName: cx(...calcClassNames(classes, item?.value, rowIndex)),\n css_: calcCss<T>(styles, item?.value, rowIndex),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item.value),\n columnIds: state.visibleColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction:\n state.props.rowAction instanceof Function\n ? item\n ? state.props.rowAction(item.value, rowIndex)\n : null\n : state.props.rowAction,\n hasDetails:\n state.props.rowDetails instanceof Function\n ? item\n ? !!state.props.rowDetails(item.value, rowIndex)\n : null\n : !!state.props.rowDetails,\n };\n });\n\n useLayoutEffect(() => {\n function update() {\n table.update((state) => {\n if (!divRef.current) {\n return;\n }\n\n const h1 = divRef.current.offsetHeight;\n const h2 =\n detailsDivRef.current && document.contains(detailsDivRef.current)\n ? detailsDivRef.current.offsetHeight\n : 0;\n\n state.rowHeights.set(itemId, h1 + h2);\n });\n }\n\n update();\n\n const handles = [divRef.current, detailsDivRef.current]\n .filter((x): x is HTMLDivElement => !!x)\n .map((div) => {\n const o = new ResizeObserver(update);\n o.observe(div);\n return () => o.disconnect();\n });\n\n return () => {\n handles.forEach((h) => h());\n };\n }, [table, itemId, divRef.current, detailsDivRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n if (!item) {\n return null;\n }\n\n return (\n <ClassNames>\n {({ css }) => (\n <>\n {wrapRow(\n {\n className: css([\n subgrid\n ? {\n gridColumn: `1 / -1`,\n display: 'grid',\n gridTemplateColumns: 'subgrid',\n }\n : {\n display: 'contents',\n },\n rowClassName,\n rowStyles,\n ]),\n\n children: (\n <>\n <div\n className={cellClassName}\n css={[defaultClasses.cellFill, css_]}\n ref={divRef}\n />\n\n <div\n className={cellClassName}\n css={[defaultClasses.cell, defaultClasses.firstCell, css_]}\n >\n {indent > 0 && <div css={{ width: indent * 20 }} />}\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren || hasDetails) && (\n <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />\n )}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div className={cellClassName} css={[defaultClasses.cellFill, css_]} />\n\n <Details ref={detailsDivRef} itemId={itemId} rowIndex={rowIndex} />\n </>\n ),\n },\n item.value,\n rowIndex,\n )}\n </>\n )}\n </ClassNames>\n );\n});\n","import type { MemoizedTableTheme } from '../types';\n\nexport function calcClassNames<T>(\n classes: MemoizedTableTheme<T>['classes'] | undefined,\n item: T,\n index: number,\n) {\n return [\n classes?.cell instanceof Function ? classes.cell(item, index) : classes?.cell,\n index % 2 === 0 && classes?.evenCell,\n index % 2 === 1 && classes?.oddCell,\n ];\n}\n\nexport function calcCss<T>(\n styles: MemoizedTableTheme<T>['styles'] | undefined,\n item: T | undefined,\n index: number,\n) {\n return [\n styles?.cell instanceof Function\n ? item !== undefined\n ? styles.cell(item, index)\n : undefined\n : styles?.cell,\n index % 2 === 0 && styles?.evenCell,\n index % 2 === 1 && styles?.oddCell,\n ];\n}\n","import type { ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\n\nconst defaultWrapCell = (content: ReactNode) => {\n if (typeof content === 'string') {\n return (\n <span css={defaultClasses.text} title={content}>\n {content}\n </span>\n );\n }\n return content;\n};\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const column = table.useState((state) => {\n const col = state.activeColumns.find((column) => column.id === columnId);\n return (\n col && {\n value: col.value,\n renderCell: col.renderCell,\n }\n );\n });\n const wrapCell = table.useState((state) => state.props.wrapCell) ?? defaultWrapCell;\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item?.value, rowIndex)));\n const styles = useTheme((t) => calcCss<T>(t.styles, item?.value, rowIndex));\n\n if (!column || !item) return null;\n\n const content = column.renderCell(column.value(item.value), item.value);\n\n return (\n <div className={className} css={[defaultClasses.cell, styles]} style={columnStyleOverride}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id } from '../types';\n\nexport const Details = forwardRef<\n HTMLDivElement,\n {\n itemId: Id;\n rowIndex: number;\n }\n>(function Details({ itemId, rowIndex }, ref) {\n const table = useTableContext<unknown>();\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const { details, className, css } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n details: state.expanded.has(itemId)\n ? state.props.rowDetails instanceof Function\n ? item\n ? state.props.rowDetails(item.value, rowIndex)\n : null\n : state.props.rowDetails\n : undefined,\n className:\n classes?.details instanceof Function\n ? classes.details(item?.value, rowIndex)\n : classes?.details,\n css:\n styles?.details instanceof Function\n ? styles.details(item?.value, rowIndex)\n : styles?.details,\n };\n });\n\n return details ? (\n <div ref={ref} className={className} css={[defaultClasses.details, css]}>\n {details}\n </div>\n ) : null;\n});\n","import { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function ExpandControl<T>({\n itemId,\n hasDeferredChildren,\n}: {\n itemId: Id;\n hasDeferredChildren?: boolean;\n}): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Spinner = useTheme((t) => t.components.Spinner);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState(\n (state) => !!state.activeItemsById.get(itemId)?.children.length,\n );\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n\n if (expandOnlyOne) {\n newExpanded.clear();\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n if (isExpanded) {\n newExpanded.delete(itemId);\n\n const item = activeItemsById.get(itemId);\n for (const descendant of item ? getDescendants(item) : []) {\n newExpanded.delete(descendant);\n }\n } else {\n newExpanded.add(itemId);\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const Checkbox = useTheme((t) => t.components.Checkbox);\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : Array.from(state.activeItemsById.keys());\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(event: React.ChangeEvent) {\n const mouseEvent = event.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: '#c9cfda',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableContext } from '../misc/tableContext';\nimport { throttle } from '../misc/throttle';\nimport type { Id } from '../types';\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight && getComputedStyle(parent).overflowY !== 'visible')\n return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n footer,\n children,\n ...props\n}: {\n header: ReactNode;\n footer: ReactNode;\n children: (itemIds: Id[], startIndex: number) => ReactNode;\n} & Omit<HTMLProps<HTMLDivElement>, 'children'>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState((state) => state.props.virtual);\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState(\n (state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (\n !probeRef.current ||\n !root ||\n !document.contains(root) ||\n state.displaySizePx === undefined\n )\n return {};\n if (!state.props.virtual) return { itemIds };\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h =\n rowHeight ??\n state.rowHeights.get(itemId) ??\n initalRowHeight ??\n (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0;\n let to = itemIds.length;\n let before = 0;\n let after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n },\n { throttle: 16 },\n );\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n const tableElem = probeRef.current?.parentElement;\n if (!tableElem) return;\n\n const update = () => {\n table.update((state) => {\n state.displaySizePx = tableElem.clientWidth;\n });\n };\n\n const ro = new ResizeObserver(update);\n ro.observe(tableElem);\n\n window.addEventListener('resize', update, true);\n\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n };\n }, [table, probeRef.current]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update, true);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update, true);\n };\n }, [update, virtual]);\n\n useEffect(() => update.cancel, [update]);\n\n useLayoutEffect(\n () => table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`),\n );\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n\n {footer}\n </div>\n );\n}\n","export const textMatch = (text: string, query: string): boolean => {\n text = text.toLowerCase();\n query = query.toLowerCase();\n return query.split(/\\s+/).every((part) => termMatch(text, part));\n};\n\nexport const termMatch = (text: string, query: string): boolean => {\n let i = 0;\n outer: for (const char of query) {\n for (; i < text.length; i++) {\n if (text[i] === char) {\n i++;\n continue outer;\n }\n }\n return false;\n }\n return true;\n};\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asStringOrArray } from '../misc/helpers';\nimport { textMatch } from '../misc/textMatch';\nimport type { CommonFilterProps } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\n\nexport function TextFilter<TItem, TColumnValue>({\n compare = textMatch,\n filterBy = asStringOrArray,\n placeholder,\n ...props\n}: {\n /** Custom comparison function. Should return true if an item value matches the current filter value.\n * By default a fuzzy text comparison is used.\n */\n compare?: (itemValue: string, filterValue: string) => boolean;\n placeholder?: string;\n} & CommonFilterProps<TItem, TColumnValue, string, string>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n\n const { value = '', onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'textFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return compare(value, filterValue);\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n }}\n >\n <AutoFocusTextField\n value={value}\n onChange={(event) => onChange(event.target.value)}\n endIcon={\n <IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>\n }\n placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,SAAS,cAAAA,aAAY,iBAAiB,cAAc;;;ACDpD,SAAS,cAAAC,mBAAkB;;;ACA3B,SAAS,eAAe,kBAAkB;AAInC,IAAM,eAAe,cAAqD,IAAI;AAE9E,IAAM,oBAAoB,cAA0B,MAAM,MAAS;AAEnE,IAAM,gBAAgB,cAAyB,IAAI;AAEnD,SAAS,kBAAmD;AACjE,QAAM,QAAQ,WAAW,YAAY;AACrC,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,4BAA4B;AACxD,SAAO;AACT;AAEO,SAAS,mBAAuB;AACrC,QAAM,QAAQ,WAAW,aAAa;AACtC,MAAI,UAAU,KAAM,OAAM,IAAI,MAAM,6BAA6B;AACjE,SAAO;AACT;;;AClBO,IAAM,gBAAsC;AAAA,EACjD,SAAS,EAAE,MAAM,WAAW,OAAO,WAAW,cAAc,OAAO;AAAA,EACnE,WAAW,EAAE,MAAM,WAAW,OAAO,WAAW,cAAc,OAAO;AAAA,EACrE,SAAS,EAAE,MAAM,WAAW,OAAO,WAAW,cAAc,OAAO;AAAA,EACnE,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AACf;;;ACVA,SAAS,WAAW;AAIhB,SAuCE,KAvCF;AAFG,SAAS,QAAQ,EAAE,WAAAC,WAAU,GAA2B;AAC7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAWA;AAAA,MACX,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqCL;AAAA,4BAAC,SAAI;AAAA,QACL,oBAAC,SAAI;AAAA,QACL,oBAAC,SAAI;AAAA;AAAA;AAAA,EACP;AAEJ;;;AC5CI,SAUE,OAAAC,MAVF,QAAAC,aAAA;AAFG,IAAM,QAA2C,CAAC,EAAE,cAAc,SAAS,MAAM;AACtF,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA,MAEC;AAAA;AAAA,QAED,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,cACH;AAAA,gBACE,KAAK;AAAA,gBACL,OAAO;AAAA,gBACP,WAAW;AAAA,gBACX,iBAAiB;AAAA,gBACjB,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,SAAS;AAAA,gBACT,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,cAAc;AAAA,gBACd,gBAAgB;AAAA,gBAChB,UAAU;AAAA,cACZ;AAAA,cACA,CAAC,gBAAgB;AAAA,gBACf,WAAW;AAAA,gBACX,YAAY;AAAA,cACd;AAAA,YACF;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACrCI,SA8CgB,OAAAE,MA9ChB,QAAAC,aAAA;AAPG,IAAM,SAA6C,CAAC,OAKrD;AALqD,eACzD;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EALZ,IAE2D,IAItD,kBAJsD,IAItD;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH;AAAA,UACE,SAAS;AAAA,UACT,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,cAAc;AAAA,UAEd,2BAA2B;AAAA,YACzB,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA,YAAY,UAAU;AAAA,UACpB,WAAW;AAAA,YACT,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA,YAAY,cAAc;AAAA,UACxB,QAAQ;AAAA,UAER,cAAc;AAAA,YACZ,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA,YAAY,eAAe;AAAA,UACzB,OAAO;AAAA,UACP,iBAAiB;AAAA,UACjB,WACE;AAAA,UAEF,WAAW;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,UAEA,cAAc;AAAA,YACZ,QAAQ;AAAA,YACR,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,OACI,QA5CL;AAAA,MA8CE;AAAA,qBAAa,gBAAAD,KAAC,UAAK,KAAK,EAAE,aAAa,2BAA2B,GAAI,qBAAU;AAAA,QACjF,gBAAAA,KAAC,UAAM,UAAS;AAAA;AAAA;AAAA,EAClB;AAEJ;;;ACvDI,SAiBE,OAAAE,MAjBF,QAAAC,aAAA;AAFG,IAAM,WAAiD,CAAC,OAA4B;AAA5B,eAAE,aAAAC,WAFjE,IAE+D,IAAgB,kBAAhB,IAAgB,CAAd;AAC/D,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH;AAAA,UACE,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAY;AAAA,UAEZ,WAAW;AAAA,YACT,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,MAAM,YAAY,EAAE,OAAO,sBAAsB;AAAA,MACnD;AAAA,MACA,WAAWC;AAAA,MAEX;AAAA,wBAAAF,KAAC,0BAAM,MAAK,cAAe,MAAO;AAAA,QAEjC,MAAM,UACL,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,EAAE,UAAU,WAAW,OAAO,OAAO,QAAQ,OAAO,MAAM,qBAAqB;AAAA,YACpF,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,eAAY;AAAA,YAEZ,0BAAAA,KAAC,UAAK,GAAE,uIAAsI;AAAA;AAAA,QAChJ,IAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,EAAE,UAAU,WAAW,OAAO,OAAO,QAAQ,OAAO,MAAM,eAAe;AAAA,YAC9E,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,eAAY;AAAA,YAEZ,0BAAAA,KAAC,UAAK,GAAE,8FAA6F;AAAA;AAAA,QACvG;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;ACxCI,gBAAAG,YAAA;AAFG,IAAM,aAAqD,CAAC,UAAU;AAC3E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,YAAY;AAAA,QAEZ,WAAW;AAAA,UACT,iBAAiB;AAAA,QACnB;AAAA,QAEA,YAAY;AAAA,UACV,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AC5BA,SAAS,gBAAgB;AAcrB,SAeE,OAAAC,MAfF,QAAAC,aAAA;AAXG,IAAM,YAAmD,CAAC,OAO3D;AAP2D,eAC/D;AAAA;AAAA,IACA;AAAA,IACA,WAAAC;AAAA,IACA;AAAA,IACA;AAAA,EARF,IAGiE,IAM5D,kBAN4D,IAM5D;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AARF,MAAAC;AAWE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AAExC,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAWC;AAAA,MACX,KAAK;AAAA,QACH;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,SAAS,EAAE,QAAQ,gCAAgC,QAAQ,GAAG;AAAA,MAChE;AAAA,MAEC;AAAA;AAAA,QAED,gBAAAF;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,aACD,QAFL;AAAA,YAGC,QAAOG,MAAA,MAAM,UAAN,OAAAA,MAAe;AAAA,YACtB,SAAS,MAAM,SAAS,IAAI;AAAA,YAC5B,QAAQ,CAAC,UAAU;AACjB,uBAAS,KAAK;AACd,+CAAS;AAAA,YACX;AAAA,YACA,KAAK;AAAA,cACH,UAAU;AAAA,cACV,OAAO;AAAA,cACP,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc;AAAA,cACd,SAAS;AAAA,cACT,aAAa,YAAY,IAAI;AAAA,cAC7B,cAAc,UAAU,IAAI;AAAA,cAC5B,YAAY;AAAA,YACd;AAAA;AAAA,QACF;AAAA,QAEC;AAAA;AAAA;AAAA,EACH;AAEJ;;;AC9CO,IAAM,oBAA8C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACjBA,SAAS,YAAY,OAAAC,YAAW;AAEhC,SAAS,oBAAoB;AAYvB,gBAAAC,MAaJ,QAAAC,aAbI;AATN,IAAM,mBAAmBC,KAAI;AAAA,EAC3B,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT,CAAC;AAED,SAAS,KAAK,KAAkB;AAC9B,SAAO,SAAS,cAAc,OAA2B;AACvD,WACE,gBAAAF,KAAC,cACE,WAAC,EAAE,KAAAE,KAAI,MACN,aAAa,KAAK,iCACb,QADa;AAAA,MAEhB,WAAWA,KAAI,kBAAkB,MAAM,SAAS;AAAA,IAClD,EAAC,GAEL;AAAA,EAEJ;AACF;AAEA,IAAM,WAAW;AAAA,EACf,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,2HAA0H;AAAA;AAAA;AAAA,EACpI;AACF;AAEA,IAAM,SAAS;AAAA,EACb,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,kBAAiB;AAAA,MACjB,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,OACC,0BAAAA,KAAC,UAAK,MAAK,QAAO,QAAO,MAAK,OAAM,MAAK,GAC3C;AAAA,QACA,gBAAAA,KAAC,OACC,0BAAAA,KAAC,UAAK,GAAE,+HAA8H,GACxI;AAAA;AAAA;AAAA,EACF;AACF;AAEA,IAAM,YAAY;AAAA,EAChB,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,qMAAoM;AAAA;AAAA;AAAA,EAC9M;AACF;AAEA,IAAM,eAAe;AAAA,EACnB,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,sDAAqD;AAAA;AAAA;AAAA,EAC/D;AACF;AAEA,IAAM,SAAS;AAAA,EACb,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,8OAA6O;AAAA;AAAA;AAAA,EACvP;AACF;AAEA,IAAM,QAAQ;AAAA,EACZ,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,iHAAgH;AAAA;AAAA;AAAA,EAC1H;AACF;AAEA,IAAM,gBAAgB;AAAA,EACpB,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,oBAAmB;AAAA;AAAA;AAAA,EAC7B;AACF;AAEA,IAAM,aAAa;AAAA,EACjB,gBAAAA,KAAC,SAAI,SAAQ,aACX,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,GAAE;AAAA;AAAA,EACJ,GACF;AACF;AAEA,IAAM,cAAc;AAAA,EAClB,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,MAAK;AAAA,MAEL;AAAA,wBAAAD,KAAC,UAAK,GAAE,mBAAkB,MAAK,QAAO;AAAA,QACtC,gBAAAA,KAAC,UAAK,GAAE,+DAA8D;AAAA;AAAA;AAAA,EACxE;AACF;AAEO,IAAM,eAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACxJO,IAAM,eAAmC;AAAA,EAC9C,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAU;AAAA,EACV,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAChB;;;AClBO,IAAM,oBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AACX;;;ACXA,SAAS,iBAAAG,gBAAe,cAAAC,aAAY,eAAe;AAO/C,gBAAAC,YAAA;AAJJ,IAAM,mBAAmBF,eAAc,oBAAI,IAAgD,CAAC;AAErF,SAAS,yBAAyB,EAAE,SAAS,GAA4B;AAC9E,SACE,gBAAAE,KAAC,iBAAiB,UAAjB,EAA0B,OAAO,QAAQ,MAAM,oBAAI,IAAI,GAAG,CAAC,CAAC,GAC1D,UACH;AAEJ;AAEO,SAAS,eAAe;AAC7B,QAAM,YAAYD,YAAW,gBAAgB;AAE7C,SAAO,CACL,KACA,cACc;AACd,QAAI;AACJ,QAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,aAAO,UAAU,MAAM,CAAC;AACxB,kBAAY,UAAU,CAAC;AAAA,IACzB,OAAO;AACL,aAAO,CAAC,UAAU,SAAS,CAAC;AAAA,IAC9B;AAEA,QAAI,cAAc,UAAU,IAAI,GAAG;AACnC,UAAM,MACJ,eACA,YAAY,CAAC,EAAE,WAAW,KAAK,UAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,KAAK,CAAC,CAAC;AAC9C,QAAI,CAAC,eAAe,CAAC,KAAK;AACxB,oBAAc,CAAC,WAAW,IAAI;AAC9B,gBAAU,IAAI,KAAK,WAAW;AAAA,IAChC;AACA,WAAO,YAAY,CAAC;AAAA,EACtB;AACF;;;Ab/BA,IAAM,aAAa,IAAI,MAAM,MAAS;AAE/B,SAAS,SAAe,UAAkD;AAXjF;AAYE,QAAM,EAAE,OAAO,oBAAoB,CAAC,EAAE,IAAIE,YAAW,oBAAoB;AACzE,QAAM,QAAQA,YAAW,YAAY;AACrC,QAAM,WAAWA,YAAW,aAAa;AACzC,QAAMC,QAAO,aAAa;AAC1B,QAAM,oBAAoB,iBAAiB,SAAS;AAEpD,QAAM,UAAU,CAAC,MAA4C;AAlB/D,QAAAC,KAAAC,KAAA;AAmBI,UAAM,YAAWD,MAAA,EAAE,YAAF,gBAAAA,IAAW;AAC5B,UAAM,aAAYC,MAAA,EAAE,WAAF,gBAAAA,IAAU;AAC5B,UAAM,aAAY,OAAE,YAAF,mBAAW;AAC7B,UAAM,cAAa,OAAE,WAAF,mBAAU;AAC7B,UAAM,gBAAe,OAAE,YAAF,mBAAW;AAChC,UAAM,iBAAgB,OAAE,WAAF,mBAAU;AAEhC,WAAO,iCACF,IADE;AAAA,MAEL,SAAS,iCACJ,EAAE,UADE;AAAA,QAEP,KACE,oBAAoB,YAAY,MAAM,QAAQ,QAAQ,IAClDF,MAAK,qBAAqB,QAAQ,IAClC;AAAA,QACN,MACE,qBAAqB,YAAY,MAAM,QAAQ,SAAS,IACpDA,MAAK,sBAAsB,SAAS,IACpC;AAAA,QACN,SACE,wBAAwB,YAAY,MAAM,QAAQ,YAAY,IAC1DA,MAAK,yBAAyB,YAAY,IAC1C;AAAA,MACR;AAAA,MACA,QAAQ,iCACH,EAAE,SADC;AAAA,QAEN,KACE,qBAAqB,YAAY,MAAM,QAAQ,SAAS,IACpDA,MAAK,oBAAoB,SAAS,IAClC;AAAA,QACN,MACE,sBAAsB,YAAY,MAAM,QAAQ,UAAU,IACtDA,MAAK,qBAAqB,UAAU,IACpC;AAAA,QACN,SACE,yBAAyB,YAAY,MAAM,QAAQ,aAAa,IAC5DA,MAAK,wBAAwB,aAAa,IAC1C;AAAA,MACR;AAAA,MACA,MAAM,mBACD,EAAE;AAAA,IAET;AAAA,EACF;AAEA,QAAM,SACJ,0CAAO,SAAS,CAAC,UAAU;AACzB,UAAM,aAAa;AAAA,MACjB,MAAM,MAAM,MAAM;AAAA,MAClB,SAAS,MAAM,MAAM;AAAA,MACrB,QAAQ,MAAM,MAAM;AAAA,MACpB,YAAY,MAAM,MAAM;AAAA,MACxB,OAAO,MAAM,MAAM;AAAA,MACnB,QAAQ,MAAM,MAAM;AAAA,MACpB,SAAS,MAAM,MAAM;AAAA,IACvB;AAEA,UAAM,SAAS,MAAM,cAAc,KAAK,CAACG,YAAWA,QAAO,OAAO,QAAQ;AAC1E,UAAM,eAAe;AAAA,MACnB,SAAS,iCAAQ;AAAA,MACjB,QAAQ,iCAAQ;AAAA,IAClB;AAEA,UAAMC,SAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,SAAS,QAAQA,MAAK,CAAC;AAAA,EAChC,OA1BA,YA2BA,WAAW,SAAS,MA3BpB,YA4BA;AAAA,IACE;AAAA,MACE,YAAY,mBAAmB,mBAAmB,iBAAiB;AAAA,IACrE;AAAA,EACF;AAEF,SAAO;AACT;;;AcpGA,SAAS,iBAAAC,gBAAe,WAAAC,UAAS,YAAAC,iBAAgB;;;ACAjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,UAAU,CAAO,OAAoBC,aAAgC;AAChF,SAAO,CAAC,GAAG,KAAK,EAAE,QAAQA,QAAO;AACnC;AAEO,IAAM,UAAU,CACrB,OACA,YAA+B,CAAC,GAChC,YAAgC,CAAC,MACzB;AACR,MAAI,UAAU,WAAW,EAAG,aAAY,CAAC,CAAC,MAAM,CAAC;AAEjD,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAbnC;AAcI,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,YAAMC,OAAK,eAAU,OAAV,mCAAe;AAC1B,YAAMC,OAAK,eAAU,OAAV,mCAAe;AAC1B,YAAM,aAAa,UAAU,CAAC,MAAM,SAAS,KAAK;AAClD,UAAID,MAAKC,IAAI,QAAO;AACpB,UAAID,MAAKC,IAAI,QAAO,CAAC;AAAA,IACvB;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,OAAO,CAAI,UAAoB;AAC1C,QAAM,MAAM,oBAAI,IAAO;AACvB,aAAW,KAAK,MAAO,KAAI,IAAI,CAAC;AAChC,SAAO,MAAM,KAAK,GAAG;AACvB;AAEO,IAAM,YAAY,CAAI,GAAgB,MAAsC;AACjF,QAAM,SAAS,oBAAI,IAAO;AAC1B,aAAW,KAAK,EAAG,KAAI,EAAE,IAAI,CAAC,EAAG,QAAO,IAAI,CAAC;AAC7C,SAAO;AACT;AAEO,IAAM,eAAe,CAC1B,oBACG,UACS;AACZ,QAAM,SAAS,oBAAI,IAAQ;AAE3B,QAAM,OAAO,CAAC,EAAE,SAAS,MAA0B;AACjD,UAAM,SACJ,aAAa,UAAa,aAAa,OAAO,gBAAgB,IAAI,QAAQ,IAAI;AAChF,QAAI,UAAU,CAAC,OAAO,IAAI,OAAO,EAAE,GAAG;AACpC,aAAO,IAAI,OAAO,EAAE;AACpB,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AACA,QAAM,QAAQ,IAAI;AAClB,SAAO;AACT;AAEO,IAAM,iBAAiB,IAAO,UAAmC;AACtE,QAAM,SAAS,oBAAI,IAAQ;AAE3B,QAAM,OAAO,CAAC,SAA6B;AACzC,eAAW,SAAS,KAAK,UAAU;AACjC,UAAI,CAAC,OAAO,IAAI,MAAM,EAAE,GAAG;AACzB,eAAO,IAAI,MAAM,EAAE;AACnB,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI;AAClB,SAAO;AACT;AAEO,IAAM,WAAW,CAAC,MAAoB;AAEtC,IAAM,WAAW,CAAC,MAAuB;AAC9C,MAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,IAAI,QAAQ,EAAE,KAAK,IAAI;AACtD,MAAI,aAAa,OAAQ,QAAO,KAAK,UAAU,CAAC;AAChD,SAAO,OAAO,gBAAK,EAAE;AACvB;AAEO,IAAM,kBAAkB,CAAC,MAAkC;AAChE,MAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,IAAI,QAAQ;AAC3C,SAAO,SAAS,CAAC;AACnB;AAEO,IAAM,WAAW,CAAC,MAA8B;AACrD,QAAM,IAAI,OAAO,CAAC;AAClB,SAAO,OAAO,MAAM,CAAC,IAAI,OAAO;AAClC;AAEO,IAAM,kBAAkB,CAAC,MAAkD;AAChF,MAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,IAAI,QAAQ;AAC3C,SAAO,SAAS,CAAC;AACnB;AAEO,IAAM,gBAAgB,CAAC,GAAY,MAAwB,MAAM;AAEjE,IAAM,iBAAiB,CAAC,GAAW,MACxC,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC;AAEnC,IAAM,YAAY,CAAI,MAAgB,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAE/D,IAAM,KAAK,IACb,eAEH,WACG,QAAQ,CAAC,UAAU;AAClB,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,MAAI,OAAO,UAAU,SAAU,QAAO,CAAC,KAAK;AAC5C,SAAO,OAAO,QAAQ,KAAK,EACxB,OAAO,CAAC,CAAC,EAAE,SAAS,MAAM,SAAS,EACnC,IAAI,CAAC,CAACC,UAAS,MAAMA,UAAS;AACnC,CAAC,EACA,KAAK,GAAG;AAGN,SAAS,SAAY,GAA8B;AACxD,SAAO,CAAC,CAAC;AACX;;;AClHO,SAAS,kBAAkB;AAChC,SAAO,SAAS,CAAC,EAAE,SAAS,OAAO,MAAM;AACvC,WAAO;AAAA,MACL,aAAa;AAAA,MACb,iBAAiB,OAAO,QAAQ;AAAA,MAChC,kBAAkB,OAAO,QAAQ;AAAA,MACjC,yBAAyB,OAAO,QAAQ;AAAA,MACxC,mBAAmB,OAAO,UAAU;AAAA,MACpC,oBAAoB,OAAO,UAAU;AAAA,MACrC,2BAA2B,OAAO,UAAU;AAAA,MAC5C,iBAAiB,OAAO,QAAQ;AAAA,MAChC,kBAAkB,OAAO,QAAQ;AAAA,MACjC,yBAAyB,OAAO,QAAQ;AAAA,MACxC,4BAA4B,OAAO;AAAA,MACnC,sBAAsB,OAAO;AAAA,MAC7B,wBAAwB,OAAO;AAAA,MAC/B,8BAA8B,OAAO;AAAA,IACvC;AAAA,EACF,CAAC;AACH;;;AFgDI,SACE,OAAAC,MADF,QAAAC,aAAA;AApDG,IAAM,uBAAuBC,eAAc;AAAA,EAChD,UAAU;AAAA,EACV,OAAO,MAAY;AACrB,CAAC;AAEM,SAAS,cAAiB;AAAA,EAC/B,WAAW,YAAY;AAAA,EACvB;AACF,GAA2C;AACzC,QAAM,QAAQ,gBAAmB;AACjC,QAAM,WAAW,iBAAiB;AAClC,QAAMC,WAAU,SAAS,CAAC,MAAM,EAAE,WAAW,OAAO;AACpD,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,OAAO;AACzC,QAAM,eAAe,gBAAgB;AAErC,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAyB,IAAI;AACzD,QAAM,WAAW,MAAM,SAAS,CAAC,UAAU;AACzC,UAAMC,UAAS,MAAM,QAAQ,IAAI,QAAQ;AACzC,UAAM,cAAc,MAAM,aAAa,IAAI,QAAQ;AACnD,WAAOA,YAAW,UAAa,gBAAgB,UAAaA,QAAO,SAAS,WAAW;AAAA,EACzF,CAAC;AACD,QAAM,mBAAmB,MAAM,SAAS,CAAC,UAAU;AACjD,UAAMA,UAAS,MAAM,QAAQ,IAAI,QAAQ;AACzC,WAAOA,WAAA,gBAAAA,QAAQ;AAAA,EACjB,CAAC;AACD,QAAM,SAAS,MAAM;AAAA,IACnB,CAAC,UAAO;AA3CZ;AA2Ce,yBAAM,cAAc,KAAK,CAAC,WAAW,OAAO,OAAO,QAAQ,MAA3D,mBAA8D;AAAA;AAAA,EAC3E;AAEA,WAAS,QAAQ;AA9CnB;AA+CI,UAAM,OAAO,MAAM,SAAS,EAAE,QAAQ,IAAI,QAAQ;AAElD,uCAAM,aAAN,8BAAiB;AAEjB,SAAI,6BAAM,WAAU,QAAW;AAC7B,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,aAAa,OAAO,QAAQ;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,UAAUC;AAAA,IACd,OAAO;AAAA,MACL,UAAU,CAAC,CAAC;AAAA,MACZ,OAAO,MAAM,UAAU,IAAI;AAAA,IAC7B;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE,gBAAAL,MAAC,qBAAqB,UAArB,EAA8B,OAAO,SACpC;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,CAAC,UAAU,UAAU,MAAM,aAAa;AAAA,QACjD,eAAe,CAAC,UAAU;AACxB,gBAAM;AACN,gBAAM,eAAe;AACrB,iBAAO;AAAA,QACT;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAe,CAAC,UAAU;AACxB,gBAAM,gBAAgB;AAAA,QACxB;AAAA,QACA,eAAe,CAAC,UAAU;AACxB,gBAAM,gBAAgB;AAAA,QACxB;AAAA,QAEA,0BAAAA;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,MAAI;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,SAAS,MAAM;AACb,wBAAU,IAAI;AACd;AAAA,YACF;AAAA,YACA,UAAU,0BAAU,SAAS;AAAA,YAC7B,KAAK;AAAA,YACL,WAAW,GAAG,mCAAS,SAAS,qDAAkB,OAAO;AAAA,YACzD,mBAAmB,GAAG,mCAAS,iBAAiB,qDAAkB,eAAe;AAAA,YAEhF;AAAA;AAAA,QACH;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,SAAS,cAAc,IAAkD;AAAlD,eAAE,WA3GzB,IA2GuB,IAAe,kBAAf,IAAe,CAAb;AACvB,QAAMI,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,MAAM,UAAU;AACrD,QAAMC,iBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,aAAa;AAE3D,SACE,gBAAAT;AAAA,IAACO;AAAA,IAAA,iCACK,QADL;AAAA,MAEC,KAAK;AAAA,QACH,EAAE,OAAO,UAAU;AAAA,QACnB,YAAY;AAAA,UACV,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEC,qBAAW,gBAAAP,KAACQ,aAAA,EAAW,IAAK,gBAAAR,KAACS,gBAAA,EAAc;AAAA;AAAA,EAC9C;AAEJ;;;AfxGI,gBAAAC,aAAA;AAbG,SAAS,mBAAmB,OAAgC;AACjE,QAAMC,aAAY,SAAS,CAAC,MAAM,EAAE,WAAW,SAAS;AAExD,QAAM,MAAM,OAAyB,IAAI;AACzC,QAAM,EAAE,SAAS,IAAIC,YAAW,oBAAoB;AAEpD,kBAAgB,MAAM;AACpB,QAAI,YAAY,IAAI,SAAS;AAC3B,UAAI,QAAQ,MAAM;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,gBAAAF;AAAA,IAACC;AAAA,IAAA,iCACK,QADL;AAAA,MAEC,UAAU;AAAA,MACV,KAAK;AAAA,QACH,OAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,OAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AkBhCA,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,SAAS,cAAAE,aAAY,WAAW,mBAAAC,kBAAiB,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;;;ACF3E,SAAS,SACd,WACA,IAC0C;AAC1C,MAAI;AACJ,MAAI;AAEJ,WAAS,MAAM;AACb,UAAM,OAAO;AAEb,eAAW;AACX,cAAU;AAEV,cAAU,GAAI,IAAa;AAAA,EAC7B;AAEA,SAAO,OAAO;AAAA,IACZ,YAAa,MAAY;AACvB,iBAAW;AAEX,UAAI,SAAS;AACX,qBAAa,OAAO;AAAA,MACtB;AAEA,gBAAU,WAAW,KAAK,EAAE;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,QAAQ;AACN,YAAI,SAAS;AACX,uBAAa,OAAO;AACpB,cAAI;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AD1BO,SAAS,UACd,MACA;AACA,QAAM,QAAQ,gBAAuB;AACrC,QAAM,WAAW,iBAAiB;AAClC,QAAM,QAAQ,aAAa;AAC3B,QAAM,UAAUC,SAAQ,MAAM,OAAO,GAAG,CAAC,CAAC;AAC1C,QAAM,WAAW,KAAK,YAAY,MAAM,SAAS,KAAK,QAAQ;AAG9D,YAAU,MAAM;AAnBlB;AAoBI,QAAI,KAAK,UAAU,QAAW;AAC5B,iBAAK,aAAL,8BAAgB,KAAK;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAGV,YAAU,MAAM;AACd,UAAM,OAAO,CAAC,UAAU;AACtB,UAAI,KAAK,iBAAiB,QAAW;AACnC,cAAM,aAAa,IAAI,UAAU,KAAK,YAAY;AAAA,MACpD;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,KAAK,CAAC;AAEV,YAAU,MAAM;AACd,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,QAAQ,IAAI,UAAU,UAAU,iCAAK,OAAL,EAAW,SAAS,EAAC,CAAC;AAE5D,UAAI,KAAK,UAAU,QAAW;AAC5B,cAAM,aAAa,IAAI,UAAU,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,QAAQ,OAAO,QAAQ;AAAA,MAC/B,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,IAAI,CAAC;AAG1B,QAAM,QAAQ,MAAM;AAAA,IAClB,CAAC,UAAU,MAAM,aAAa,IAAI,QAAQ;AAAA,EAC5C;AACA,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAuB;AAC3D,QAAM,UAAUC,QAAO,IAAI;AAE3B,EAAAC,iBAAgB,MAAM;AACpB,YAAQ,UAAU;AAAA,EACpB,CAAC;AAED,QAAM,gBAAgBH;AAAA,IACpB,MACE,SAAS,CAACI,WAAyB;AACjC,YAAM,EAAE,OAAO,iBAAiB,UAAAC,UAAS,IAAI,QAAQ;AAErD,UAAI,oBAAoB,QAAW;AACjC,cAAM,OAAO,CAAC,UAAU;AACtB,gBAAM,aAAa,IAAI,UAAUD,MAAK;AAAA,QACxC,CAAC;AAAA,MACH;AAEA,MAAAC,aAAA,gBAAAA,UAAWD;AACX,oBAAc,MAAS;AAAA,IACzB,GAAG,GAAG;AAAA,IACR,CAAC,KAAK;AAAA,EACR;AAEA,WAAS,SAASA,QAAsB;AACtC,kBAAcA,MAAK;AACnB,kBAAcA,MAAK;AAAA,EACrB;AAEA,YAAU,MAAM,cAAc,MAAM,GAAG,CAAC,aAAa,CAAC;AAEtD,QAAM,UAAUE,YAAW,oBAAoB;AAE/C,SAAO;AAAA,IACL,OAAO,kCAAc;AAAA,IACrB;AAAA,IACA,UAAU,8BAAa,CAAC,MAAM;AAAA,KAC3B;AAEP;;;AEpBU,gBAAAC,aAAA;AA9DK,SAAR,eAAgC,IAGf;AAHe,eACrC;AAAA,eAAW;AAAA,EAZb,IAWuC,IAElC,kBAFkC,IAElC;AAAA,IADH;AAAA;AAGA,QAAM,QAAQ,gBAAgB;AAE9B,QAAM,YAAY,MAAM,SAAS,CAAC,UAAU;AAC1C,WACE,0CACA,MAAM,cACH;AAAA,MACC,CAAC,WACC,OAAO,WAAW,UAAa,CAAC,MAAM,eAAe,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE;AAAA,IACvF,EACC,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,EAEhC,CAAC;AAED,QAAM,WAAW,MAAM,SAAS,CAAC,UAAU;AACzC,WAAO,UAAU,KAAK,CAAC,aAAa;AAClC,YAAM,SAAS,MAAM,QAAQ,IAAI,QAAQ;AACzC,YAAM,cAAc,MAAM,aAAa,IAAI,QAAQ;AACnD,aAAO,WAAW,UAAa,gBAAgB,UAAa,OAAO,SAAS,WAAW;AAAA,IACzF,CAAC;AAAA,EACH,CAAC;AAED,YAAU,iCACL,QADK;AAAA,IAGR,IAAI;AAAA,IAEJ,OAAO;AAAA,IAEP,SAAS,aAAa;AACpB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,aAAO;AAAA,IACT;AAAA,IAEA,SAAS,OAAO;AApDpB,UAAAC;AAqDM,UAAI,UAAU,QAAW;AACvB,mBAAW,YAAY,WAAW;AAChC,gBAAM,OAAO,MAAM,SAAS,EAAE,QAAQ,IAAI,QAAQ;AAElD,WAAAA,MAAA,6BAAM,aAAN,gBAAAA,IAAA,WAAiB;AAEjB,eAAI,6BAAM,WAAU,QAAW;AAC7B,kBAAM,OAAO,CAAC,UAAU;AACtB,oBAAM,aAAa,OAAO,QAAQ;AAAA,YACpC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,EAAC;AAED,SACE,gBAAAD,MAAC,SACE,oBAAU,IAAI,CAAC,aACd,gBAAAA,MAAC,cAAc,UAAd,EAAsC,OAAO,UAC5C,0BAAAA,MAAC,iBAAc,WAAW,QAAQ,KADP,QAE7B,CACD,GACH;AAEJ;AAEA,SAAS,OAAO,IAAkD;AAAlD,eAAE,WAhFlB,IAgFgB,IAAe,kBAAf,IAAe,CAAb;AAChB,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,WAAW,iBAAiB;AAClC,QAAME,cAAa,SAAS,CAAC,MAAM,EAAE,MAAM,UAAU;AACrD,QAAM,QAAQ,MAAM,SAAS,CAAC,UAAU;AApF1C,QAAAD,KAAAE;AAqFI,YAAOA,OAAAF,MAAA,MAAM,cAAc,KAAK,CAAC,WAAW,OAAO,OAAO,QAAQ,MAA3D,gBAAAA,IAA8D,WAA9D,OAAAE,MAAwE;AAAA,EACjF,CAAC;AACD,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,WAAW,MAAM;AAElD,SACE,gBAAAJ;AAAA,IAACI;AAAA,IAAA,iCACK,QADL;AAAA,MAEC,WACE,gBAAAJ;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,YACH,OAAO,WAAW,uBAAuB;AAAA,UAC3C;AAAA;AAAA,MACF;AAAA,MAEF,KAAK;AAAA,QACH,OAAO;AAAA,QACP,OAAO,WAAW,uBAAuB;AAAA,MAC3C;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AC3GA,SAAkB,iBAAiB;AACnC;AAAA,EACE,YAAAG;AAAA,EAEA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;ACTA,SAAS,SAA2B,UAAa,MAAuB;AAC7E,SAAO,KAAK,OAAU,CAAC,KAAK,WAAW;AADzC;AAEI,UAAM,OAAO,mBAAK;AAElB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,kDAAyB;AAAA,IAC3B;AAEA,WAAO;AAAA,EACT,GAAG,KAAK;AACV;;;ACVA,SAAS,UAAU,WAAAC,UAAS,YAAAC,iBAAgB;AAsGhC,gBAAAC,aAAA;AAlGZ,IAAM,YAAY;AAClB,IAAM,cAAc,IAAI,KAAK,MAAM,GAAG,CAAC;AAEvC,IAAM,iBAAiB,CAAC,SACtB,SAAS,SAAS,SAAS,WAAW,SAAS;AAEjD,IAAM,iBAAiB;AAAA,EACrB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AACR;AAEA,IAAM,aAAa;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM,OAAO;AACf;AAEA,IAAM,SAAS,CAAC,MAAY,UAAkB,KAAK,IAAI,MAAM,QAAQ,eAAe,IAAI,CAAC;AAEzF,IAAM,UAAU,CAAC,UAAmB;AAClC,QAAM,MAAM,MAAM,KAAK,SAAS,iBAAiB,IAAI,SAAS,EAAE,CAAC;AACjE,QAAM,QAAQ,IAAI,QAAQ,KAAK;AAC/B,QAAM,OAAO,KAAK,QAAQ,KAAK,IAAI,MAAM;AAEzC,MAAI,gBAAgB,aAAa;AAC/B,SAAK,MAAM;AAAA,EACb;AACF;AAQO,SAAS,UAAU,EAAE,OAAO,UAAU,OAAO,GAAmB;AACrE,QAAM,CAAC,UAAU,WAAW,IAAID,UAAwC;AAExE,QAAM,SAAS,MAAM;AACnB,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,gBAAY,MAAS;AAErB,QAAI,CAAC,SAAS,OAAO;AACnB,eAAS,IAAI;AACb;AAAA,IACF;AAEA,UAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,oBAAI,KAAK;AACpD,YAAQ,SAAS,MAAM;AAAA,MACrB,KAAK,OAAO;AACV,iBAAS,QAAQ,OAAO,SAAS,KAAK,CAAC;AACvC;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,iBAAS,SAAS,OAAO,SAAS,KAAK,IAAI,CAAC;AAC5C;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,iBAAS,YAAY,OAAO,SAAS,KAAK,CAAC;AAC3C;AAAA,MACF;AAAA,MAEA,SAAS;AACP;AAAA,MACF;AAAA,IACF;AAEA,aAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,SAASD;AAAA,IACb,MACE,IAAI,KAAK,eAAe,QAAQ;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,IACR,CAAC;AAAA,IACH,CAAC,MAAM;AAAA,EACT;AACA,QAAM,QAAQ,OAAO,cAAc,wBAAS,WAAW;AACvD,QAAM,UAAU,CAAC;AAEjB,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEC,gBAAM,IAAI,CAAC,EAAE,MAAM,OAAAC,OAAM,GAAG,UAC3B,gBAAAD,MAAC,YACE,yBAAe,IAAI,IAClB,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,KAAK;AAAA,YACH,WAAW;AAAA,YACX,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,OAAO;AAAA,YAEP,iBAAiB;AAAA,cACf,OAAO;AAAA,cACP,SAAS;AAAA,YACX;AAAA,YAEA,WAAW;AAAA,cACT,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,OAAO,GAAG,OAAO,MAAMC,MAAK,CAAC;AAAA,UAC/B;AAAA,UACA,aAAa,GAAG,OAAO,OAAO,MAAMA,MAAK,GAAG,GAAG;AAAA,UAC/C,QAAO,qCAAU,UAAS,OAAO,SAAS,QAAQ,CAAC,UAAUA,SAAQ;AAAA,UACrE,UAAU,CAAC,UAAU;AACnB,wBAAY,EAAE,MAAM,OAAO,MAAM,OAAO,MAAM,CAAC;AAC/C,gBAAI,MAAM,OAAO,MAAM,UAAU,WAAW,IAAI,GAAG;AACjD,yBAAW,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,YACxC;AAAA,UACF;AAAA,UACA,SAAS,CAAC,UAAU,MAAM,OAAO,OAAO;AAAA,UACxC,QAAQ;AAAA;AAAA,MACV,IACE,SAAS,YACX,gBAAAD,MAAC,UAAM,UAAAC,QAAM,IACX,QAvCS,KAwCf,CACD;AAAA;AAAA,EACH;AAEJ;;;ACtIS,qBAAAC,WAAA,OAAAC,aAAA;AAHF,SAAS,KAAK,EAAE,GAAG,GAAc;AACtC,QAAM,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;AAEvC,SAAO,gBAAAA,MAAAD,WAAA,EAAG,gBAAK;AACjB;;;ACXA,SAAS,YAAAE,WAAU,WAAAC,UAAS,YAAAC,iBAAgB;AAuGhC,gBAAAC,aAAA;AAnGZ,IAAMC,aAAY;AAClB,IAAMC,eAAc,IAAI,KAAK,MAAM,GAAG,CAAC;AAEvC,IAAMC,kBAAiB,CAAC,SACtB,SAAS,UAAU,SAAS,YAAY,SAAS;AAEnD,IAAMC,kBAAiB;AAAA,EACrB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;AAEA,IAAMC,cAAa;AAAA,EACjB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;AAEA,IAAMC,UAAS,CAAC,MAAY,UAAkB,KAAK,IAAI,MAAM,QAAQF,gBAAe,IAAI,CAAC;AAEzF,IAAMG,WAAU,CAAC,UAAmB;AAClC,QAAM,MAAM,MAAM,KAAK,SAAS,iBAAiB,IAAIN,UAAS,EAAE,CAAC;AACjE,QAAM,QAAQ,IAAI,QAAQ,KAAK;AAC/B,QAAM,OAAO,KAAK,QAAQ,KAAK,IAAI,MAAM;AAEzC,MAAI,gBAAgB,aAAa;AAC/B,SAAK,MAAM;AAAA,EACb;AACF;AASO,SAAS,UAAU,EAAE,OAAO,UAAU,QAAQ,cAAc,KAAK,GAAmB;AACzF,QAAM,CAAC,UAAU,WAAW,IAAIF,UAA0C;AAE1E,QAAM,SAAS,MAAM;AACnB,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,gBAAY,MAAS;AAErB,QAAI,CAAC,SAAS,OAAO;AACnB,eAAS,IAAI;AACb;AAAA,IACF;AAEA,UAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,oBAAI,KAAK;AACpD,YAAQ,SAAS,MAAM;AAAA,MACrB,KAAK,QAAQ;AACX,iBAAS,SAAS,OAAO,SAAS,KAAK,CAAC;AACxC;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,iBAAS,WAAW,OAAO,SAAS,KAAK,CAAC;AAC1C;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,iBAAS,WAAW,OAAO,SAAS,KAAK,CAAC;AAC1C;AAAA,MACF;AAAA,MAEA,SAAS;AACP;AAAA,MACF;AAAA,IACF;AAEA,aAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,SAASD;AAAA,IACb,MACE,IAAI,KAAK,eAAe,QAAQ;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ,cAAc,YAAY;AAAA,IACpC,CAAC;AAAA,IACH,CAAC,MAAM;AAAA,EACT;AACA,QAAM,QAAQ,OAAO,cAAc,wBAASI,YAAW;AACvD,QAAM,UAAU,CAAC;AAEjB,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEC,gBAAM,IAAI,CAAC,EAAE,MAAM,OAAAQ,OAAM,GAAG,UAC3B,gBAAAR,MAACH,WAAA,EACE,UAAAM,gBAAe,IAAI,IAClB,gBAAAH;AAAA,QAAC;AAAA;AAAA,UACC,WAAWC;AAAA,UACX,KAAK;AAAA,YACH,WAAW;AAAA,YACX,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,OAAO;AAAA,YAEP,iBAAiB;AAAA,cACf,OAAO;AAAA,cACP,SAAS;AAAA,YACX;AAAA,YAEA,WAAW;AAAA,cACT,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,OAAO,GAAGK,QAAO,MAAME,MAAK,CAAC;AAAA,UAC/B;AAAA,UACA,aAAa,GAAG,OAAOF,QAAO,MAAME,MAAK,GAAG,GAAG;AAAA,UAC/C,QAAO,qCAAU,UAAS,OAAO,SAAS,QAAQ,CAAC,UAAUA,SAAQ;AAAA,UACrE,UAAU,CAAC,UAAU;AACnB,wBAAY,EAAE,MAAM,OAAO,MAAM,OAAO,MAAM,CAAC;AAC/C,gBAAI,MAAM,OAAO,MAAM,UAAUH,YAAW,IAAI,GAAG;AACjD,yBAAW,MAAME,SAAQ,MAAM,MAAM,CAAC;AAAA,YACxC;AAAA,UACF;AAAA,UACA,SAAS,CAAC,UAAU,MAAM,OAAO,OAAO;AAAA,UACxC,QAAQ;AAAA;AAAA,MACV,IACE,SAAS,YACX,gBAAAP,MAAC,UAAM,UAAAQ,QAAM,IACX,QAvCS,KAwCf,CACD;AAAA;AAAA,EACH;AAEJ;;;AJvES,SAgaC,YAAAC,WAhaD,OAAAC,OA8YD,QAAAC,aA9YC;AART,IAAM,oBAAoBC,eAAoE,CAAC,CAAC;AAEzF,SAAS,mBAAmB,IAGiD;AAHjD,eACjC;AAAA;AAAA,EArEF,IAoEmC,IAE9B,kBAF8B,IAE9B;AAAA,IADH;AAAA;AAGA,QAAM,QAAQC,SAAQ,MAAM,OAAO,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAE1D,SAAO,gBAAAH,MAAC,kBAAkB,UAAlB,EAA2B,OAAe,UAAS;AAC7D;AAEA,IAAM,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAG9B,IAAM,aAAa,CAAC,MAAY,IAAI,KAAK,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC;AAGnF,IAAM,WAAW,CAAC,MACvB,IAAI,KAAK,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE;AAE/D,IAAM,WAAW,CAAC,SAA4B;AACnD,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,QAAQ,IAAI,QAAQ,IAAI,OAAO,CAAC;AAEpC,SAAO;AAAA,IACL,KAAK,WAAW,GAAG;AAAA,IACnB,KAAK,SAAS,GAAG;AAAA,EACnB;AACF;AAEO,IAAM,QAAQ,MAAM,SAAS,CAAC;AAE9B,IAAM,WAAW,CAAC,QAAQ,GAAG,iBAAiB,MAAiB;AACpE,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,MAAM,IAAI,KAAK,GAAG;AAExB,MAAI,OAAO,IAAI,OAAO,IAAI;AAC1B,MAAI,OAAO,GAAG;AACZ,YAAQ;AAAA,EACV;AACA,MAAI,QAAQ,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC;AAE5C,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC;AAE7B,SAAO;AAAA,IACL,KAAK,WAAW,GAAG;AAAA,IACnB,KAAK,SAAS,GAAG;AAAA,EACnB;AACF;AAEO,IAAM,YAAY,CAAC,QAAQ,MAAiB;AACjD,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,QAAQ,CAAC;AACb,MAAI,SAAS,IAAI,SAAS,IAAI,KAAK;AACnC,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,SAAS,IAAI,SAAS,IAAI,CAAC;AAC/B,MAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC;AAE7B,SAAO;AAAA,IACL,KAAK,WAAW,GAAG;AAAA,IACnB,KAAK,SAAS,GAAG;AAAA,EACnB;AACF;AAEO,IAAM,WAAW,CAAC,QAAQ,MAAiB;AAChD,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,QAAQ,CAAC;AACb,MAAI,SAAS,CAAC;AACd,MAAI,YAAY,IAAI,YAAY,IAAI,KAAK;AACzC,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,YAAY,IAAI,YAAY,IAAI,CAAC;AACrC,MAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC;AAE7B,SAAO;AAAA,IACL,KAAK,WAAW,GAAG;AAAA,IACnB,KAAK,SAAS,GAAG;AAAA,EACnB;AACF;AAEA,IAAM,aAAa,MAAO,KAAK,KAAK;AAC7B,IAAM,kBAAkB,CAAC,SAAuB;AAIrD,QAAM,YAAY,IAAI;AAAA,IACpB,KAAK,YAAY;AAAA,IACjB,KAAK,SAAS;AAAA,IACd,KAAK,QAAQ,KAAK,KAAK,KAAK,OAAO,KAAK;AAAA,EAC1C;AAEA,QAAM,OAAO,UAAU,YAAY;AACnC,QAAM,iBAAiB,IAAI,KAAK,MAAM,GAAG,CAAC;AAC1C,QAAM,YACJ,KAAK;AAAA,KACF,UAAU,QAAQ,IACjB,eAAe,QAAQ,KACtB,UAAU,kBAAkB,IAAI,eAAe,kBAAkB,MAClE;AAAA,EACJ,IAAI;AACN,QAAM,aAAa,KAAK,OAAO,IAAI,aAAa,CAAC;AAEjD,MAAI,eAAe,GAAG;AACpB,WACE;AAAA,MACE,IAAI,KAAK,UAAU,YAAY,GAAG,UAAU,SAAS,GAAG,UAAU,QAAQ,IAAI,CAAC;AAAA,IACjF,IAAI;AAAA,EAER;AAEA,SAAO;AACT;AAEO,IAAM,qBAAqB;AAAA,EAChC,OAAO,EAAE,OAAO,gBAAAA,MAAC,QAAK,IAAG,SAAQ,GAAI,OAAO,MAAM;AAAA,EAClD,UAAU,EAAE,OAAO,gBAAAA,MAAC,QAAK,IAAG,YAAW,GAAI,OAAO,CAAC,UAAU,SAAS,GAAG,MAAM,cAAc,EAAE;AAAA,EAC/F,WAAW,EAAE,OAAO,gBAAAA,MAAC,QAAK,IAAG,aAAY,GAAI,OAAO,MAAM,UAAU,EAAE;AAAA,EACtE,UAAU,EAAE,OAAO,gBAAAA,MAAC,QAAK,IAAG,YAAW,GAAI,OAAO,MAAM,SAAS,EAAE;AAAA,EACnE,eAAe,EAAE,OAAO,gBAAAA,MAAC,QAAK,IAAG,iBAAgB,GAAI,OAAO,MAAM,SAAS,CAAC,EAAE;AAAA,EAC9E,gBAAgB,EAAE,OAAO,gBAAAA,MAAC,QAAK,IAAG,kBAAiB,GAAI,OAAO,MAAM,SAAS,EAAE,EAAE;AACnF;AAMO,SAAS,cACd,GACA,GACA;AACA,MAAI,aAAa,MAAM;AACrB,QAAI,EAAE,KAAK,GAAG,KAAK,EAAE;AAAA,EACvB;AACA,MAAI,aAAa,MAAM;AACrB,QAAI,EAAE,KAAK,GAAG,KAAK,EAAE;AAAA,EACvB;AAEA,MAAI,EAAC,uBAAG,QAAO,CAAC,EAAE,OAAO,EAAC,uBAAG,QAAO,CAAC,EAAE,KAAK;AAC1C,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,SAAS,EAAE,GAAG,IAAI,WAAW,EAAE,GAAG,KAAK,WAAW,EAAE,GAAG,IAAI,SAAS,EAAE,GAAG;AACpF;AAEO,SAAS,UAAU,MAAY,KAAY,KAAY;AAC5D,MAAI,OAAO,OAAO,KAAK;AACrB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,OAAO,KAAK;AACrB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAiC;AAjOhE;AAkOE,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB,MAAM;AACzB,WAAO,MAAM,QAAQ;AAAA,EACvB;AACA,SAAO,IAAG,WAAM,QAAN,mBAAW,SAAS,KAAI,WAAM,QAAN,mBAAW,SAAS;AACxD;AAEO,SAAS,WAAW,OAAwB;AA3OnD;AA4OE,QAAM,UAAUI,YAAW,iBAAiB;AAE5C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,eAAe,CAAC,SAAS,UAAU;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,CAAC;AAAA,IACjB;AAAA,EACF,IAAI,SAA0B,OAAO,OAAO;AAE5C,WAAS,SAASC,QAAgC,QAAgC;AAChF,QAAIA,kBAAiB,MAAM;AACzB,MAAAA,SAAQ,UAAUA,QAAO,SAAS,OAAO;AAAA,IAC3C,WAAWA,QAAO;AAChB,MAAAA,SAAQ;AAAA,QACN,KAAK,UAAUA,OAAM,KAAK,SAAS,OAAO;AAAA,QAC1C,KAAK,UAAUA,OAAM,KAAK,SAAS,OAAO;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,SAASA,QAAO,MAAM;AAAA,EAC9B;AAEA,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,WAAW,MAAM;AAClD,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,gBAAe,SAAS,CAAC,MAAM,EAAE,MAAM,YAAY;AACzD,QAAM,eAAe,gBAAgB;AACrC,WAAS,gBAAgB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQyB;AACvB,WAAO;AAAA,MACL;AAAA,QACE,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,QAAQ,WAAW,SAAY;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,OACC,aAAa,cAAc;AAAA,QAC1B,OAAO;AAAA,MACT;AAAA,MACAA,UAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,MACA,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA,YAAY;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA,WACE,YAAY;AAAA,QACV,UAAU;AAAA,QACV,YAAY;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACF,eAAe;AAAA,QACb,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAYN,SAAQ,MAAM,oBAAI,KAAK,GAAG,CAAC,CAAC;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAIO,UAA6B;AACvD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAoB;AAClD,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAe,gDAAqB,SAAS;AAC3F,QAAM,cAAa,WAAM,eAAN,YAAoB;AAEvC,WAAS,cAAc,MAAY;AAjVrC,QAAAC;AAkVI,uBAAmB,IAAI;AACvB,KAAAA,MAAA,MAAM,uBAAN,gBAAAA,IAAA,YAA2B;AAAA,EAC7B;AAEA,QAAM,MAAM,QAAQ,MAAM,MAAM,iBAAiB,OAAO,QAAQ,+BAAO;AACvE,QAAM,MAAM,QAAQ,MAAM,MAAM,iBAAiB,OAAO,QAAQ,+BAAO;AAEvE,QAAM,uBAAuB;AAAA,IAC3B,GAAG;AAAA,IACH,GAAI,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,gBAAAX,MAAC,QAAK,IAAG,SAAQ,GAAI,OAAO,KAAK,CAAC;AAAA,EACjE,EAAE,IAAI,CAAC,QAAQ,UAAU;AACvB,QAAI,kBAAkB,UAAU;AAC9B,aAAO,OAAO,CAACK,WAAU;AACvB,iBAAS,MAAS;AAClB,iBAASA,QAAO,aAAa;AAAA,MAC/B,CAAC;AAAA,IACH;AAEA,UAAM,EAAE,OAAO,OAAAA,OAAM,IAAI,OAAO,WAAW,WAAW,mBAAmB,MAAM,IAAI;AAEnF,WACE,gBAAAL;AAAA,MAACM;AAAA,MAAA;AAAA,QAEC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,KAAK;AAAA,UACH,OAAO;AAAA,QACT;AAAA,QACA,SAAS,MAAM;AACb,mBAAS,MAAS;AAElB,cAAID,kBAAiB,UAAU;AAC7B,qBAASA,OAAM,KAAK,GAAG,aAAa;AAAA,UACtC,OAAO;AACL,qBAASA,QAAO,aAAa;AAAA,UAC/B;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,MAhBI;AAAA,IAiBP;AAAA,EAEJ,CAAC;AAED,QAAM,EAAE,WAAW,cAAc,iBAAiB,aAAa,IAAI,UAAU;AAAA,IAC3E,gBAAgB,MAAM;AAAA,IACtB;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,IACN,iBAAiB,CAAC,WAChB,cAAc,IAAI,KAAK,WAAW,YAAY,GAAG,WAAW,SAAS,IAAI,MAAM,CAAC;AAAA,IAClF,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,MAAMF,SAAQ,MAAM,WAAW,oBAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAEpD,QAAM,gBAAgBA,SAAQ,MAAM;AAClC,UAAM,EAAE,OAAO,IAAI,IAAI,KAAK,eAAe,QAAQ,EAAE,SAAS,QAAQ,CAAC;AACvE,WAAO,CAAC,YACN,OAAO,IAAI,KAAK,KAAK,IAAI,MAAM,IAAK,UAAU,kBAAkB,IAAK,CAAC,CAAC,CAAC;AAAA,EAC5E,GAAG,CAAC,QAAQ,cAAc,CAAC;AAE3B,EAAAS;AAAA,IACE,MACE;AAAA,MACE,UAAU,OAAO,gDAAqB,YAAY,iBAAiB,OAAO,QAAQ,MAAM;AAAA,IAC1F;AAAA,IACF,CAAC,sBAAsB,KAAK,GAAG,sBAAsB,iBAAiB,GAAG,SAAS;AAAA,EACpF;AAEA,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,aAAa;AAChB,eAAS,MAAS;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,WAAS,IAAI,QAAgCC,MAAYC,MAAY,MAAsB;AACzF,QAAI,CAAC,aAAa;AAChB,eAASD,QAAA,OAAAA,OAAO,MAAM,MAAM;AAC5B;AAAA,IACF;AAEA,QAAIA,QAAOC,QAAOD,OAAMC,MAAK;AAC3B,UAAI,SAAS,OAAO;AAClB,QAAAA,OAAMD;AAAA,MACR,WAAW,SAAS,OAAO;AACzB,QAAAA,OAAMC;AAAA,MACR,OAAO;AACL,SAACD,MAAKC,IAAG,IAAI,CAACA,MAAKD,IAAG;AAAA,MACxB;AAAA,IACF;AAEA,QAAI,CAACA,SAAQ,CAACC,MAAK;AACjB,eAAS,MAAS;AAClB,eAASD,QAAOC,OAAM,EAAE,KAAAD,MAAK,KAAK,SAASC,IAAG,EAAE,IAAI,MAAM,MAAM;AAAA,IAClE,OAAO;AACL,eAAS,EAAE,KAAAD,MAAK,KAAAC,KAAI,CAAC;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,cAAcX,SAAQ,MAAM;AAChC,UAAM,EAAE,OAAO,IAAI,IAAI,KAAK,eAAe,QAAQ,EAAE,OAAO,OAAO,CAAC;AACpE,WAAO,CAAC,UAAkB,OAAO,IAAI,KAAK,MAAM,KAAK,CAAC;AAAA,EACxD,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAaA,SAAQ,MAAM;AAC/B,UAAM,EAAE,OAAO,IAAI,IAAI,KAAK,eAAe,QAAQ,EAAE,MAAM,UAAU,CAAC;AACtE,WAAO,CAAC,SAAiB,OAAO,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,EACtD,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH;AAAA,QACA;AAAA,UACE,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA;AAAA,wBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,cACH,SAAS;AAAA,cACT,cAAc;AAAA,cACd,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,KAAK;AAAA,cAEL,WAAW;AAAA,gBACT,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,YAAY;AAAA,cACd;AAAA,YACF;AAAA,YAEA;AAAA,8BAAAA,MAAC,SACC;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,oBAAO;AAAA,oBACd,UAAU,CAAC,SAAS,IAAI,SAAS,sBAAQ,QAAW,KAAK,KAAK;AAAA,oBAC9D;AAAA;AAAA,gBACF;AAAA,gBAEC,YACC,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,oBAAO;AAAA,oBACd,UAAU,CAAC,SAAS,IAAI,SAAS,sBAAQ,QAAW,KAAK,KAAK;AAAA,oBAC9D;AAAA,oBACA,aAAa,OAAO,aAAa,YAAY,OAAO,SAAS;AAAA;AAAA,gBAC/D;AAAA,iBAEJ;AAAA,cAEC,eACC,gBAAAC,MAAAF,WAAA,EACG;AAAA;AAAA,gBAED,gBAAAE,MAAC,SACC;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO,oBAAO;AAAA,sBACd,UAAU,CAAC,SAAS,IAAI,SAAS,KAAK,sBAAQ,QAAW,KAAK;AAAA,sBAC9D;AAAA;AAAA,kBACF;AAAA,kBAEC,YACC,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO,oBAAO;AAAA,sBACd,UAAU,CAAC,SAAS,IAAI,SAAS,KAAK,sBAAQ,QAAW,KAAK;AAAA,sBAC9D;AAAA,sBACA,aAAa,OAAO,aAAa,YAAY,OAAO,SAAS;AAAA;AAAA,kBAC/D;AAAA,mBAEJ;AAAA,iBACF;AAAA;AAAA;AAAA,QAEJ;AAAA,QAEC,UAAU,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM,MACnC,gBAAAC,MAAC,SAA4B,KAAK,EAAE,SAAS,OAAO,GAClD;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,gBACH,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,cAAc;AAAA,gBACd,gBAAgB;AAAA,gBAChB,YAAY;AAAA,cACd;AAAA,cAEA;AAAA,gCAAAD,MAACO,aAAA,+BAAW,MAAK,YAAa,aAAa,EAAE,UAAU,CAAC,IAAvD,EACC,0BAAAP,MAACQ,eAAA,EAAa,KAAK,EAAE,WAAW,4BAA4B,GAAG,IACjE;AAAA,gBAEA,gBAAAP,MAAC,SAAI,KAAK,EAAE,SAAS,OAAO,GACzB;AAAA,8BAAY,KAAK;AAAA,kBAAE;AAAA,kBAAE,WAAW,IAAI;AAAA,mBACvC;AAAA,gBAEA,gBAAAD,MAACO,aAAA,+BAAW,MAAK,YAAa,gBAAgB,EAAE,UAAU,CAAC,IAA1D,EACC,0BAAAP,MAACQ,eAAA,EAAa,IAChB;AAAA;AAAA;AAAA,UACF;AAAA,UAEA,gBAAAP;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,gBACH,aAAa;AAAA,gBACb,SAAS;AAAA,gBACT,qBAAqB;AAAA,cACvB;AAAA,cAEC;AAAA,mCACC,gBAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,KAAK;AAAA,sBACH,aAAa;AAAA,sBACb,SAAS;AAAA,sBACT,aACE;AAAA,oBACJ;AAAA,oBAEA,0BAAAA,MAAC,QAAK,IAAG,gBAAe;AAAA;AAAA,gBAC1B,IAEA,gBAAAA,MAAC,SAAI;AAAA,gBAGN,SAAS,IAAI,CAAC,IAAI,YACjB,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBAEC,KAAK;AAAA,sBACH,aAAa;AAAA,sBACb,SAAS;AAAA,oBACX;AAAA,oBAEC,wBAAc,OAAO;AAAA;AAAA,kBANjB;AAAA,gBAOP,CACD;AAAA,gBAEA,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,wBAAM,YAAY,KAAK,CAAC;AACxB,wBAAM,UAAU,KAAK,CAAC;AACtB,wBAAM,eACJ,CAAC,eACA,WAAW,QAAQ,OAAO,WAC1B,WAAW,UAAU,OAAO;AAE/B,yBACE,gBAAAC,MAACF,WAAA,EACE;AAAA,uCACC,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,KAAK;AAAA,0BACH,SAAS;AAAA,0BACT,QAAQ;AAAA,0BACR,YAAY;AAAA,0BACZ,QAAQ,eAAe,SAAY;AAAA,0BACnC,MAAM;AAAA,0BACN,aACE;AAAA,0BACF,OAAO;AAAA,wBACT;AAAA,wBACA,SAAS,MAAM;AACb,8BAAI,cAAc;AAChB;AAAA,0BACF;AAEA,gCAAMa,OAAM,WAAW,UAAU,OAAO,UAAU,UAAU,UAAU;AACtE,gCAAMC,OAAM,WAAW,QAAQ,OAAO,UAAU,UAAU,QAAQ;AAClE,8BAAI,gBAAgBD,MAAKC,IAAG;AAAA,wBAC9B;AAAA,wBACA,eAAe,MACb,CAAC,gBAAgB,WAAW,EAAE,KAAK,UAAU,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,wBAExE,cAAc,MAAM,CAAC,gBAAgB,WAAW,MAAS;AAAA,wBAExD,0BAAgB,QAAQ,IAAI;AAAA;AAAA,oBAC/B,IAEA,gBAAAd,MAAC,SAAI;AAAA,oBAGN,KAAK,IAAI,CAAC,YAAY,aAAa;AAClC,0BAAI,CAAC,YAAY;AACf,+BAAO,gBAAAA,MAAC,WAAS,QAAU;AAAA,sBAC7B;AAEA,4BAAM,EAAE,WAAW,WAAW,KAAK,IAAI;AACvC,4BAAMS,SAAQ,WAAW,IAAI,EAAE,QAAQ,MAAM,IAAI,QAAQ;AACzD,4BAAM,WAAY,WAAW,OAAO,WAAa,WAAW,OAAO;AAEnE,4BAAM,WACJ,KAAK,QAAQ,OAAM,2BAAK,cACvB,OAAO,OAAO,cAAc,MAAM,EAAE,KAAK,IAAI,CAAC;AACjD,4BAAM,cACJ,CAAC,YACD,CAAC,aACA,cAAc,MAAM,OAAO,KACzB,OACC,CAAC,OACD,WACA;AAAA,wBACE;AAAA,wBACA,OAAO,QAAQ,MACX,EAAE,KAAK,KAAK,QAAQ,IAAI,IACxB,EAAE,KAAK,QAAQ,KAAK,KAAK,IAAI;AAAA,sBACnC;AACN,4BAAM,UAAU,cAAc,KAAK,CAAC,UAAU,cAAc,MAAM,KAAK,CAAC;AAExE,6BACE,gBAAAT;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BAEL,KAAK,gBAAgB;AAAA,4BACnB;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA,OAAAS;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,0BACF,CAAC;AAAA,2BACG,aAAa,EAAE,SAAS,WAAW,CAAC,IAZzC;AAAA,0BAaC,SAAS,MAAM;AACb,gCAAI,OAAO;AACT,kCAAI,IAAK,KAAI,YAAY,KAAK,IAAI;AAAA,kCAC7B,KAAI,YAAY,MAAM,GAAG;AAAA,4BAChC,OAAO;AACL,kCAAI,YAAY,IAAI;AAAA,4BACtB;AAAA,0BACF;AAAA,0BACA,eAAe,MAAM,WAAW,EAAE,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,0BACxD,cAAc,MAAM,WAAW,MAAS;AAAA,0BACxC;AAAA,0BAEC,eAAK,QAAQ;AAAA;AAAA,wBAvBT,GAAG,KAAK,IAAI,QAAQ;AAAA,sBAwB3B;AAAA,oBAEJ,CAAC;AAAA,uBA1FY,KA2Ff;AAAA,gBAEJ,CAAC;AAAA;AAAA;AAAA,UACH;AAAA,aAhKQ,GAAG,KAAK,GAAG,IAAI,EAiKzB,CACD;AAAA,QAED,gBAAAT;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,cACH,WAAW;AAAA,cACX,SAAS;AAAA,cACT,cAAc;AAAA,cACd,gBAAgB;AAAA,YAClB;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;;;AKjmBM,gBAAAe,aAAA;AA5EN,SAAS,YAAY,GAAyB;AAC5C,MAAI,aAAa,KAAM,QAAO;AAC9B,MAAI,OAAO,MAAM,YAAY,OAAO,MAAM,SAAU,QAAO,IAAI,KAAK,CAAC;AACrE,SAAO;AACT;AAEA,SAAS,mBAAmB,GAAqC;AAC/D,MAAI,aAAa,UAAU,SAAS,KAAK,SAAS,GAAG;AACnD,UAAM,QAAQ;AAAA,MACZ,KAAK,YAAa,EAAU,GAAG;AAAA,MAC/B,KAAK,YAAa,EAAU,GAAG;AAAA,IACjC;AACA,WAAO,MAAM,OAAO,MAAM,MAAO,QAAsB;AAAA,EACzD;AACA,SAAO,YAAY,CAAC;AACtB;AAEA,SAAS,mBAAmB,GAA4D;AACtF,MAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,IAAI,kBAAkB,EAAE,OAAO,OAAO;AACrE,SAAO,mBAAmB,CAAC;AAC7B;AAEO,SAAS,WAAgC,IA+B9B;AA/B8B,eAC9C;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EArCF,IA2BgD,IAW3C,kBAX2C,IAW3C;AAAA,IAVH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAsBA,QAAM,EAAE,QAAQ,MAAM,SAAS,IAAI,UAAU,iCACxC,QADwC;AAAA,IAE3C;AAAA,IAEA,IAAI;AAAA,IAEJ,SAAS,aAAa;AACpB,aAAO,CAAC,CAAC;AAAA,IACX;AAAA,IAEA,KAAK,aAAaC,QAAO;AACvB,aAAO,cAAc,aAAaA,MAAK;AAAA,IACzC;AAAA,EACF,EAAC;AAED,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,aAAa,CAAC;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AChGA,SAAS,YAAAE,iBAAgB;AA0CrB,gBAAAC,aAAA;AA7BJ,IAAM,UAAU;AAEhB,IAAM,cAAc,CAAC,OAAsB,WAAoB;AAC7D,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,eAAe,MAAM;AACpC;AAEA,IAAM,cAAc,CAAC,UAAkB;AACrC,MAAI,UAAU,IAAI;AAChB,WAAO;AAAA,EACT;AAEA,QAAMC,YAAW,OAAO,MAAM,QAAQ,KAAK,GAAG,CAAC;AAC/C,SAAO,OAAO,MAAMA,SAAQ,IAAI,OAAOA;AACzC;AAEO,SAAS,YAAY,IAIP;AAJO,eAC1B;AAAA,WAAO,gBAAgB;AAAA,IACvB;AAAA,EAlCF,IAgC4B,IAGvB,2BAHuB,IAGvB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,QAAM,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM;AACvC,QAAMC,aAAY,SAAS,CAAC,MAAM,EAAE,WAAW,SAAS;AACxD,QAAM,CAAC,QAAQ,YAAY,eAAe,MAAM,GAAG,QAAQ,IAAIC,UAAiB;AAEhF,SACE,gBAAAH;AAAA,IAACE;AAAA,IAAA;AAAA,MACC;AAAA,MACA,UAAU,CAAC,UAAU;AACnB,YAAI,QAAQ,KAAK,MAAM,OAAO,KAAK,GAAG;AACpC,mBAAS,MAAM,OAAO,KAAK;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,QAAQ,MAAM;AACZ,6CAAW,YAAY,KAAK;AAC5B,iBAAS,MAAS;AAAA,MACpB;AAAA,OACI,iBAXL;AAAA,MAYC,KAAK;AAAA,QACH,OAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,OAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;ACsBM,SAce,OAAAE,OAdf,QAAAC,aAAA;AAvEC,SAAS,YAAiC,IAKM;AALN,eAC/C;AAAA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EAhBb,IAaiD,IAI5C,kBAJ4C,IAI5C;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,eAAe,SAAS,CAAC,MAAM,EAAE,KAAK,QAAQ;AACpD,QAAM,eAAe,SAAS,CAAC,MAAM,EAAE,KAAK,QAAQ;AAEpD,QAAM,QAAQ,gBAAuB;AACrC,QAAM,WAAW,iBAAiB;AAClC,QAAM,mBAAmB,oBAAoB,WAAW,WAAW,SAAS,CAAC;AAE7E,QAAM,CAAC,UAAU,QAAQ,IAAI,MAAM,SAAS,CAAC,UAAU;AACrD,QAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,aAAO,CAAC,KAAK,GAAG;AAAA,IAClB;AAEA,UAAM,SAAS,MAAM,cAAc,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ;AAEhE,QAAI,CAAC,QAAQ;AACX,aAAO,CAAC,GAAG,GAAG;AAAA,IAChB;AAEA,QAAIC;AACJ,QAAIC;AAEJ,eAAW,QAAQ,MAAM,OAAO;AAC9B,YAAM,cAAc,OAAO,MAAM,KAAK,KAAK;AAC3C,YAAM,eAAe,UAAU,iBAAiB,aAAa,KAAK,KAAK,CAAC,EAAE;AAAA,QACxE,CAACC,WAA2BA,WAAU;AAAA,MACxC;AAEA,iBAAWA,UAAS,cAAc;AAChC,QAAAF,YAAW,KAAK,IAAIA,aAAA,OAAAA,YAAYE,QAAOA,MAAK;AAC5C,QAAAD,YAAW,KAAK,IAAIA,aAAA,OAAAA,YAAYC,QAAOA,MAAK;AAAA,MAC9C;AAAA,IACF;AAEA,WAAO,CAAC,oBAAOF,WAAU,oBAAOC,SAAQ;AAAA,EAC1C,CAAC;AAED,QAAM,EAAE,OAAO,SAAS,IAAI,UAAU,iCACjC,QADiC;AAAA,IAEpC;AAAA,IAEA,IAAI;AAAA,IAEJ,SAAS,aAAa;AACpB,aAAO,CAAC,CAAC;AAAA,IACX;AAAA,IAEA,KAAK,aAAaC,QAAO;AAjE7B,UAAAC,KAAAC;AAkEM,UAAI,CAAC,eAAgB,YAAY,CAAC,MAAM,QAAQ,YAAY,CAAC,MAAM,MAAO;AACxE,eAAO;AAAA,MACT;AAEA,YAAMC,QAAMF,MAAA,YAAY,CAAC,MAAb,OAAAA,MAAkB,OAAO;AACrC,YAAMG,QAAMF,MAAA,YAAY,CAAC,MAAb,OAAAA,MAAkB,OAAO;AACrC,aAAOF,WAAU,QAAQA,UAASG,QAAOH,UAASI;AAAA,IACpD;AAAA,EACF,EAAC;AAED,SACE,gBAAAR;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,QACT,KAAK;AAAA,MACP;AAAA,MAEA,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,YACH,SAAS;AAAA,YACT,KAAK;AAAA,YACL,YAAY;AAAA,YAEZ,SAAS;AAAA,cACP,OAAO;AAAA,YACT;AAAA,UACF;AAAA,UAEA;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,+BAAQ;AAAA,gBACf,UAAU,CAAC,WAAW,SAAS,UAAU,QAAQ,+BAAQ,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,gBACjF,WAAW,gBAAAA,MAAC,UAAK,KAAK,EAAE,QAAQ,6BAA6B,GAAI,wBAAa;AAAA,gBAC9E,aAAa,OAAO,8BAAY,EAAE;AAAA,gBAClC,KAAK;AAAA,kBACH,YAAY;AAAA,gBACd;AAAA;AAAA,YACF;AAAA,YAAE;AAAA,YAEF,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,+BAAQ;AAAA,gBACf,UAAU,CAAC,WAAW,SAAS,UAAU,+BAAQ,IAAI,QAAQ,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,gBACjF,WAAW,gBAAAA,MAAC,UAAK,KAAK,EAAE,QAAQ,6BAA6B,GAAI,wBAAa;AAAA,gBAC9E,aAAa,OAAO,8BAAY,EAAE;AAAA,gBAClC,KAAK;AAAA,kBACH,YAAY;AAAA,gBACd;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,UACP,KACA,KACA,SACA,QACuC;AACvC,4BAAQ;AACR,4BAAQ;AAER,MAAI,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,KAAK;AAC7C,QAAI,YAAY,OAAO;AACrB,YAAM;AAAA,IACR,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,QAAQ,QAAQ,QAAQ,OAC3B,CAAC,MAAM,KAAK,OAAO,KAAK,OAAO,GAAG,GAAG,MAAM,KAAK,OAAO,KAAK,OAAO,GAAG,CAAC,IACvE;AACN;AAEA,SAAS,MACP,OACA,MAAM,OAAO,mBACb,MAAM,OAAO,mBACE;AACf,SAAO,UAAU,OAAO,OAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AACnE;;;AClJA,SAAS,aAAAS,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;;;ACWzC,SAgBE,OAAAC,OAhBF,QAAAC,cAAA;AAVG,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH;AAAA,UACE,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,YAAY;AAAA,UAEZ,SAAS;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,YAAY,EAAE,OAAO,sBAAsB;AAAA,MAC7C;AAAA,MAEC;AAAA;AAAA,QACD,gBAAAD,MAAC,UAAK,KAAK,EAAE,YAAY,iBAAiB,GAAI,iBAAM;AAAA;AAAA;AAAA,EACtD;AAEJ;;;AC9BA,SAAS,aAAAE,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;;;ACD9C,SAAS,SACd,WACA,IAC0D;AAC1D,MAAI,OAAO;AACX,MAAI;AACJ,MAAI;AAEJ,WAAS,MAAM;AACb,UAAM,OAAO;AAEb,WAAO,KAAK,IAAI;AAChB,eAAW;AACX,cAAU;AAEV,cAAU,GAAG,IAAK;AAAA,EACpB;AAEA,SAAO,OAAO;AAAA,IACZ,YAAa,MAAY;AACvB,YAAM,MAAM,KAAK,IAAI;AACrB,iBAAW;AAEX,UAAI,SAAS;AAAA,MAEb,WAAW,MAAM,OAAO,IAAI;AAC1B,kBAAU,WAAW,KAAK,OAAO,KAAK,GAAG;AAAA,MAC3C,OAAO;AACL,YAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE,QAAQ;AACN,YAAI,UAAU;AACZ,cAAI;AAAA,QACN;AAAA,MACF;AAAA,MAEA,SAAS;AACP,YAAI,SAAS;AACX,uBAAa,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADKM,gBAAAC,OA0CF,QAAAC,cA1CE;AA/BC,SAAS,YAAe,IAKM;AALN,eAC7B;AAAA,cAAU;AAAA,IACV;AAAA,IACA;AAAA,EAtBF,IAmB+B,IAI1B,kBAJ0B,IAI1B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAtBF,MAAAC,KAAAC,KAAA;AAyBE,QAAM,YAAYC,QAAuB,IAAI;AAC7C,QAAM,CAAC,EAAE,KAAK,IAAIC,UAAS,CAAC,CAAC;AAE7B,QAAM,kBAAkBF,OAAAD,MAAA,OAAO,YAAY,YAAY,SAAY,YAA3C,gBAAAA,IAAqD,mBAArD,OAAAC,MAAuE;AAC/F,QAAM,SAASG,SAAQ,MAAM,SAAS,MAAM,MAAM,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC;AAExF,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAS;AAEd,UAAM,KAAK,IAAI,eAAe,MAAM;AAEpC,QAAI,UAAU,SAAS;AACrB,SAAG,QAAQ,UAAU,OAAO;AAAA,IAC9B;AAEA,WAAO,iBAAiB,UAAU,QAAQ,IAAI;AAC9C,WAAO,MAAM;AACX,SAAG,WAAW;AACd,aAAO,oBAAoB,UAAU,QAAQ,IAAI;AACjD,aAAO,OAAO;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,cAAc,CAAC;AAEpC,MAAI,CAAC,SAAS;AACZ,WACE,gBAAAP;AAAA,MAAC;AAAA,uCACK,QADL;AAAA,QAEC,KAAK;AAAA,UACH,WAAW;AAAA,UACX,SAAS;AAAA,QACX;AAAA,QAEC,gBAAM,IAAI,CAAC,MAAM,UAAU,SAAS,MAAM,KAAK,CAAC;AAAA;AAAA,IACnD;AAAA,EAEJ;AAEA,QAAM;AAAA,IACJ;AAAA,IACA,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EACF,KAAK,wBAAmB,SAAS,UAAU,WAAtC,YAAoD,CAAC;AAE1D,QAAM,aAAa,gCAAc,kBAAkB,UAAU,OAAO,KAAK;AACzE,QAAM,SAAO,eAAU,YAAV,mBAAmB,gBAC5B,KAAK;AAAA,IACH;AAAA,IACA,KAAK,OAAO,UAAU,QAAQ,aAAa,oCAAe,aAAa,UAAU;AAAA,EACnF,IACA;AACJ,QAAM,OAAK,eAAU,YAAV,mBAAmB,gBAC1B,KAAK;AAAA,IACH,MAAM;AAAA,IACN,KAAK;AAAA,OACF,UAAU,QAAQ,YACjB,UAAU,QAAQ,gBACjB,0CAAkB,aACnB;AAAA,IACJ;AAAA,EACF,IACA;AACJ,QAAM,SAAS,OAAO;AACtB,QAAM,SAAS,MAAM,SAAS,MAAM;AAEpC,SACE,gBAAAC;AAAA,IAAC;AAAA,qCACK,QADL;AAAA,MAEC,UAAU,CAAC,UAAU;AA9F3B,YAAAC;AA+FQ,eAAO;AACP,SAAAA,MAAA,MAAM,aAAN,gBAAAA,IAAA,YAAiB;AAAA,MACnB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,QACH,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,MAEA;AAAA,wBAAAF,MAAC,SAAI,uBAAmB,MAAC,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,QACnD,MAAM,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,UAAU,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,QACxE,gBAAAA,MAAC,SAAI,sBAAkB,MAAC,OAAO,EAAE,QAAQ,MAAM,GAAG;AAAA;AAAA;AAAA,EACpD;AAEJ;AAEA,SAAS,kBAAkB,WAAkC;AAC3D,MAAI,EAAC,uCAAW,SAAS,SAAQ;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,KAAK,UAAU,QAAQ,EAC1C,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,UAAU,MAAM,YAAY;AACpC,SAAO,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,QAAQ;AACtD;;;AFZI,SAa2D,OAAAQ,OAb3D,QAAAC,cAAA;AAhGJ,SAAS,OAAU,KAAa,OAAU,cAAwB;AAChE,QAAM,SAAS,IAAI,IAAI,eAAe,CAAC,IAAI,GAAG;AAC9C,MAAI,IAAI,IAAI,KAAK,GAAG;AAClB,WAAO,OAAO,KAAK;AAAA,EACrB,OAAO;AACL,WAAO,IAAI,KAAK;AAAA,EAClB;AAEA,SAAO;AACT;AAEO,SAAS,aAA6C,IAwBuB;AAxBvB,eAC3D;AAAA,aAAS;AAAA,IACT,cAAc;AAAA,IACd,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EA7BF,IAuB6D,IAOxD,kBAPwD,IAOxD;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAmBA,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,YAAW,SAAS,CAAC,MAAM,EAAE,WAAW,QAAQ;AACtD,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,MAAM,MAAM;AAC7C,QAAMC,SAAQ,SAAS,CAAC,MAAM,EAAE,MAAM,KAAK;AAC3C,QAAM,cAAc,SAAS,CAAC,MAAM,EAAE,KAAK,WAAW;AACtD,QAAM,YAAY,SAAS,CAAC,MAAM,EAAE,KAAK,SAAS;AAElD,QAAM,QAAQ,gBAAuB;AACrC,QAAM,WAAW,iBAAiB;AAElC,QAAM;AAAA,IACJ,QAAQ,oBAAI,IAAe;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,UAAU,iCACT,QADS;AAAA,IAGZ,IAAI;AAAA,IAEJ,SAAS,aAAa;AACpB,aAAO,YAAY,OAAO;AAAA,IAC5B;AAAA,IAEA,KAAK,aAAaC,QAAO;AACvB,aAAO,YAAY,IAAIA,MAAK;AAAA,IAC9B;AAAA,EACF,EAAC;AAED,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU;AACxC,QAAI,gBAAiB,QAAO,KAAK,eAAe;AAEhD,UAAM,SAAS,MAAM,cAAc,KAAK,CAACC,YAAWA,QAAO,OAAO,QAAQ;AAG1E,QAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,WAAO;AAAA,MACL;AAAA,QACE,QAAQ,MAAM,OAAO,CAAC,SAAS,UAAU,SAAS,OAAO,MAAM,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,MAC1F;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAS,EAAE;AACrC,QAAM,WAAW,QAAQ;AAAA,IACvB,CAAC,WAAW,CAAC,SAAS,YAAY,MAAM,EAAE,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC;AAAA,EACtF;AACA,QAAM,eAAeC,SAAQ,MAAM,OAAO,CAAC,QAAQ,CAAC;AACpD,QAAM,UAAU,SACb,OAAO,CAAC,WAAW,aAAa,IAAI,MAAM,CAAC,EAC3C,OAAO,SAAS,OAAO,CAAC,WAAW,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC;AAEhE,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,WAAW,MAAM;AAElD,EAAAC,WAAU,MAAM;AACd,aAAS,EAAE;AAAA,EACb,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,gBAAAV;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,QACT,qBAAqB;AAAA,QACrB,KAAK;AAAA,MACP;AAAA,MAEC;AAAA,SAAC,mBACA,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,YAChD,SACE,gBAAAA,MAACE,aAAA,EAAW,SAAS,MAAM,SAAS,EAAE,GAAI,WAAC,QAAQ,gBAAAF,MAACI,SAAA,EAAO,IAAK,gBAAAJ,MAACK,QAAA,EAAM,GAAG;AAAA,YAE5E,KAAK,EAAE,cAAc,iBAAiB;AAAA;AAAA,QACxC;AAAA,QAGD,CAAC,mBACA,gBAAAL;AAAA,UAACU;AAAA,UAAA;AAAA,YACC,UAAU,MAAM,SAAS;AAAA,YACzB,SAAS,MAAM,SAAS,oBAAI,IAAI,CAAC;AAAA,YACjC,SAAQ;AAAA,YACR,KAAK;AAAA,cACH,gBAAgB;AAAA,cAChB,OAAO;AAAA,cACP,cAAc;AAAA,cACd,OAAO;AAAA,YACT;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QAGF,gBAAAV;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP,KAAK;AAAA,cACH,OAAO;AAAA,cACP,UAAU;AAAA,cACV,WAAW;AAAA,cACX,UAAU;AAAA,cACV,SAAS;AAAA,cACT,qBAAqB;AAAA,YACvB;AAAA,YAEC,WAAC,QAAQ,UACR,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,SACE,gBAAAA;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,IAAI,MAAM;AAAA,oBACzB,UAAU,MAAM,SAAS,OAAO,OAAO,QAAQ,YAAY,CAAC;AAAA;AAAA,gBAC9D;AAAA,gBAEF,OAAO,OAAO,MAAM;AAAA;AAAA,cAPf;AAAA,YAQP;AAAA;AAAA,QAEJ;AAAA,QAEC,QAAQ,WAAW,KAAK,gBAAAH,MAAC,UAAK,KAAK,EAAE,WAAW,SAAS,GAAI,qBAAU;AAAA;AAAA;AAAA,EAC1E;AAEJ;;;AI3KA,SAAS,QAAAY,OAAM,aAAAC,aAAW,mBAAAC,kBAAiB,YAAAC,kBAAgB;;;ACC3D,SAAS,aAAAC,YAAW,YAAAC,kBAAgB;;;ACD7B,IAAM,QAAN,MAAY;AAAA,EAAZ;AACL,SAAQ,IAAI,IAAI,MAIb;AAEH,SAAQ,YAAY;AAAA;AAAA,EAEpB,IAAO,KAAuB,SAAmB;AAC/C,WAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACzC,UAAI,SAAS;AACX,aAAK,IAAI,CAAC;AAAA,MACZ;AACA,WAAK,EAAE,KAAK,EAAE,KAAK,SAAS,OAAO,CAAC;AAEpC,UAAI,CAAC,KAAK,UAAW,MAAK,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AACN,SAAK,IAAI,CAAC;AAAA,EACZ;AAAA,EAEc,QAAQ;AAAA;AACpB,WAAK,YAAY;AAEjB,UAAI;AACJ,aAAQ,OAAO,KAAK,EAAE,MAAM,GAAI;AAC9B,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,IAAI;AAC9B,eAAK,QAAQ,MAAM;AAAA,QACrB,SAAS,OAAO;AACd,eAAK,OAAO,KAAK;AAAA,QACnB;AAAA,MACF;AAEA,WAAK,YAAY;AAAA,IACnB;AAAA;AACF;;;ADjCA,IAAM,OAAO;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,cAAc,CAAC,OAAe,2BAA2B,EAAE;AAgBjE,SAAS,UAAU,OAAgB;AACjC,WAAS,QAAQC,QAAqB;AACpC,QAAIA,kBAAiB,MAAM;AACzB,aAAO,EAAE,QAAQA,OAAM,OAAO,EAAE;AAAA,IAClC;AAEA,QAAIA,kBAAiB,KAAK;AACxB,aAAO,EAAE,OAAO,MAAM,KAAKA,MAAK,EAAE,IAAI,OAAO,EAAE;AAAA,IACjD;AAEA,QAAIA,kBAAiB,KAAK;AACxB,aAAO,EAAE,OAAO,MAAM,KAAKA,OAAM,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,MAAM,IAAI,OAAO,CAAC,EAAE;AAAA,IACjF;AAEA,QAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,aAAOA,OAAM,IAAI,OAAO;AAAA,IAC1B;AAEA,QAAIA,kBAAiB,QAAQ;AAC3B,aAAO,OAAO,YAAY,OAAO,QAAQA,MAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAAA,IAClF;AAEA,WAAOA;AAAA,EACT;AAEA,SAAO,KAAK,UAAU,QAAQ,KAAK,CAAC;AACtC;AAEA,SAAS,MAAM,OAAe;AAC5B,SAAO,KAAK,MAAM,OAAO,CAAC,MAAMA,WAAU;AACxC,QAAIA,kBAAiB,UAAU,YAAYA,QAAO;AAChD,aAAO,IAAI,KAAKA,OAAM,MAAM;AAAA,IAC9B;AAEA,QAAIA,kBAAiB,UAAU,WAAWA,QAAO;AAC/C,aAAO,IAAI,IAAIA,OAAM,KAAK;AAAA,IAC5B;AAEA,QAAIA,kBAAiB,UAAU,WAAWA,QAAO;AAC/C,aAAO,IAAI,IAAIA,OAAM,KAAK;AAAA,IAC5B;AAEA,WAAOA;AAAA,EACT,CAAC;AACH;AAEO,SAAS,qBAAqB,OAAuC;AAC1E,QAAM,CAAC,YAAY,aAAa,IAAIC,WAAS,KAAK;AAClD,QAAM,CAAC,CAAC,IAAIA,WAAS,MAAM,IAAI,MAAM,CAAC;AAGtC,EAAAC,WAAU,MAAM;AACd,UAAM,EAAE,QAAQ,IAAI,MAAM,SAAS,EAAE;AACrC,QAAI,CAAC,SAAS;AACZ,oBAAc,IAAI;AAClB;AAAA,IACF;AAEA,QAAI,aAAa;AAEjB,KAAC,MAAY;AA5FjB;AA6FM,UAAI;AASF,YAASC,eAAT,SAAqB,OAAuC,KAA4B;AAtGhG,cAAAC,KAAAC,KAAA;AAuGU;AAAA;AAAA,aAEG,CAAC,WAAW,QAAQ,SAAS,GAAG,MACjC,EAAC,mCAAS,SAAS,SACnB,OAAO;AAAA,YACP;AACA,gBAAI,QAAQ,gBAAgB;AAC1B,yBAAW,CAACC,KAAI,KAAK,KAAK,KAAK,GAAG,GAAG;AACnC,sBAAM,SAAS,MAAM,QAAQ,IAAIA,GAAE;AAEnC,oBAAI,YAAWF,MAAA,OAAO,YAAP,OAAAA,MAAkB,OAAO,UAAU,SAAY;AAC5D,wBAAM,aAAa,IAAIE,KAAI,KAAK;AAChC,yBAAAD,MAAA,MAAM,QAAQ,IAAIC,GAAE,MAApB,gBAAAD,IAAuB,aAAvB,wBAAAA,KAAkC;AAAA,gBACpC;AAAA,cACF;AAAA,YACF,OAAO;AACL,kBACE,QAAQ,cACR,QAAQ,mBACR,QAAQ,eACR,QAAQ,QACR;AACA,oBAAI,MAAM,MAAM,GAAG,MAAM,QAAW;AAClC;AAAA,gBACF;AAEA,kCAAM,OACJ,KACG,IAAI,MAAM,GAAG,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC,CAC9C,cAHF,4BAII,KAAK,GAAG;AAAA,cACd;AAEA,oBAAM,GAAG,IAAI,KAAK,GAAG;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AArCS,0BAAAF;AART,cAAM,EAAE,SAAS,IAAI,SAAS,QAAQ,IAAI;AAC1C,cAAM,OAAO,MAAM,QAAQ,QAAQ,YAAY,EAAE,CAAC;AAClD,YAAI,cAAc,CAAC,KAAM;AAEzB,cAAM,OAAO,MAAM,IAAI;AACvB,0BAAM,SAAS,EAAE,OAAM,UAAvB,4BAA+B,QAAQ,MAAM;AA0C7C,cAAM,OAAO,CAAC,UAAU;AACtB,qBAAW,OAAO,KAAK,OAAO,CAACI,SAAQA,SAAQ,cAAc,GAAG;AAC9D,YAAAJ,aAAY,OAAO,GAAG;AAAA,UACxB;AAAA,QACF,CAAC;AAGD,cAAM,IAAI,QAAQ,CAAC,YAAY;AAC7B,qBAAW,OAAO;AAAA,QACpB,CAAC;AACD,cAAM,OAAO,CAAC,UAAUA,aAAY,OAAO,cAAc,CAAC;AAAA,MAC5D,SAAS,OAAO;AACd,gBAAQ,MAAM,+BAA+B,KAAK;AAAA,MACpD,UAAE;AACA,sBAAc,IAAI;AAAA,MACpB;AAAA,IACF,IAAG;AAEH,WAAO,MAAM;AACX,mBAAa;AAAA,IACf;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAGV,EAAAD,WAAU,MAAM;AACd,QAAI,CAAC,WAAY;AAEjB,WAAO,MAAM;AAAA,MACX,CAAC,UAAU;AAzKjB;AA0KQ,YAAI,CAAC,MAAM,MAAM,QAAS;AAE1B,cAAM,EAAE,SAAS,IAAI,SAAS,QAAQ,IAAI,MAAM,MAAM;AACtD,cAAM,OAAY,CAAC;AAEnB,mBAAW,OAAO,MAAM;AACtB;AAAA;AAAA,aAEG,CAAC,WAAW,QAAQ,SAAS,GAAG,MACjC,EAAC,mCAAS,SAAS;AAAA,YACnB;AACA,gBAAI,QAAQ,gBAAgB;AAC1B,mBAAK,GAAG,IAAI,oBAAI,IAAI;AACpB,yBAAW,CAACI,KAAI,KAAK,KAAK,MAAM,cAAc;AAC5C,qBAAI,iBAAM,QAAQ,IAAIA,GAAE,MAApB,mBAAuB,YAAvB,cAAkC,WAAM,QAAQ,IAAIA,GAAE,MAApB,mBAAuB,WAAU,QAAW;AAChF,uBAAK,aAAa,IAAIA,KAAI,KAAK;AAAA,gBACjC;AAAA,cACF;AAAA,YACF,OAAO;AACL,mBACG,QAAQ,cACP,QAAQ,mBACR,QAAQ,eACR,QAAQ,WACV,MAAM,MAAM,GAAG,MAAM,QACrB;AACA;AAAA,cACF;AAEA,mBAAK,GAAG,IAAI,MAAM,GAAG;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAEA,eAAO,EAAE,SAAS,IAAI,KAAK;AAAA,MAC7B;AAAA,MACA,CAAC,UAAU;AA9MjB;AA+MQ,YAAI,CAAC,MAAO;AACZ,cAAM,EAAE,SAAS,IAAI,KAAK,IAAI;AAE9B,0BAAM,SAAS,EAAE,OAAM,UAAvB,4BAA+B,QAAQ,MAAM,UAAU,IAAI;AAC3D,UAAE,IAAI,MAAY;AAChB,gBAAM,QAAQ,QAAQ,YAAY,EAAE,GAAG,UAAU,IAAI,CAAC;AAAA,QACxD,IAAG,IAAI;AAAA,MACT;AAAA,MACA,EAAE,UAAU,IAAK;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,CAAC;AAEtB,WAAe,QAAQ;AAAA;AACrB,YAAM,EAAE,IAAI,MAAY;AACtB,cAAM,UAAU,MAAM,SAAS,EAAE,MAAM;AACvC,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AAEA,cAAM,EAAE,SAAS,GAAG,IAAI;AACxB,cAAM,QAAQ,WAAW,YAAY,EAAE,CAAC;AAExC,sBAAc,KAAK;AACnB,UAAE,MAAM;AAAA,MACV,EAAC;AAAA,IACH;AAAA;AAEA,SAAO,CAAC,YAAY,KAAK;AAC3B;;;AE3OA,SAAS,aAAAE,kBAAiB;AAC1B,SAAS,aAAAC,aAAW,WAAAC,WAAS,YAAAC,kBAAgB;;;ACD7C,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,aAAAC,kBAAiB;AAKnB,SAAS,UAAa,OAA2C;AACtE,EAAAC;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAACC,WACC;AAAA,QACEA,OAAM,MAAM;AAAA,QACZA,OAAM,MAAM;AAAA,QACZA,OAAM,MAAM;AAAA,QACZA,OAAM,MAAM;AAAA,QACZA,OAAM,MAAM;AAAA,QACZA,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,MACR;AAAA,MACF,CACE;AAAA,QACE,QAAQ,CAAC;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GACA,UACG;AACH,cAAM,aAAa,MAAM,IAAkB,CAAC,UAAU;AAAA,UACpD,IAAI,GAAG,IAAI;AAAA,UACX,UAAU,qCAAW;AAAA,UACrB,UAAU,CAAC;AAAA,UACX,OAAO;AAAA,QACT,EAAE;AAEF,YAAI;AACJ,YAAI,KAAK,WAAW,KAAK,cAAc;AACrC,mBAAS;AAAA,QACX,OAAO;AACL,gBAAM,YAAY,QAAQ,MAAM,CAACC,UAAS;AACxC,kBAAM,SAAS,cAAc,KAAK,CAACC,YAAWA,QAAO,OAAOD,MAAK,QAAQ;AACzE,gBAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,mBAAO,OAAO,OAAO,IAAI,CAAC,YAAY;AAAA,cACpC,UAAU,CAAC,SAAY,OAAO,OAAO,MAAM,IAAI,GAAG,IAAI;AAAA,cACtD,WAAWA,MAAK;AAAA,YAClB,EAAE;AAAA,UACJ,CAAC,EAAE,OAAO,OAAO;AAEjB,mBAAS;AAAA,YACP;AAAA,YACA,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,CAAC;AAAA,YACrD,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,UAClC;AAAA,QACF;AAEA,cAAM,SAAS,oBAAI,IAAsB;AACzC,mBAAW,QAAQ,QAAQ;AACzB,iBAAO,IAAI,KAAK,IAAI,IAAI;AAAA,QAC1B;AAEA,mBAAW,QAAQ,QAAQ;AACzB,gBAAM,SACJ,KAAK,aAAa,UAAa,KAAK,aAAa,OAC7C,OAAO,IAAI,KAAK,QAAQ,IACxB;AACN,2CAAQ,SAAS,KAAK;AAAA,QACxB;AAEA,cAAM,WAAW,IAAI,MAAoB;AACzC,cAAM,eAAe,oBAAI,IAAsB;AAE/C,cAAM,WAAW,CAACE,WAAgC;AAChD,qBAAW,QAAQA,QAAO;AACxB,qBAAS,KAAK,IAAI;AAClB,yBAAa,IAAI,KAAK,IAAI,IAAI;AAC9B,qBAAS,KAAK,QAAQ;AAAA,UACxB;AAAA,QACF;AACA,iBAAS,OAAO,OAAO,CAAC,SAAS,KAAK,aAAa,UAAa,KAAK,aAAa,IAAI,CAAC;AAEvF,YAAI,kBAAkB;AACtB,cAAM,kBAAkB,oBAAI,IAAsB;AAClD,cAAM,YAAY,oBAAI,IAAQ;AAC9B,cAAM,cAAc,CAAC,GAAG,QAAQ,EAC7B,QAAQ,EACR,OAAO,CAAC,SAAS;AAChB,cAAI,WAAW,UAAU,IAAI,KAAK,EAAE;AAEpC,kCAAa,cAAc,MAAM,CAAC,WAAW;AAjG3D;AAkGgB,kBAAM,SAAS,QAAQ,IAAI,OAAO,EAAE;AACpC,gBAAI,CAAC,UAAU,OAAO,SAAU,QAAO;AAEvC,kBAAM,cAAc,aAAa,IAAI,OAAO,EAAE;AAC9C,gBAAI,gBAAgB,UAAa,CAAC,OAAO,SAAS,WAAW,EAAG,QAAO;AAEvE,kBAAM,YAAW,YAAO,aAAP,YAAoB,CAAC,MAAM;AAC5C,kBAAM,QAAQ,SAAS,OAAO,MAAM,KAAK,KAAK,GAAG,KAAK,KAAK;AAC3D,mBAAO,UAAU,KAAK,EAAE,KAAK,CAACC,WAAU,OAAO,KAAK,aAAaA,MAAK,CAAC;AAAA,UACzE,CAAC;AAED,cAAI,YAAY,KAAK,aAAa,UAAa,KAAK,aAAa,MAAM;AACrE,gBACE,kBACA,MAAM,KAAK,QAAQ,QAAQ,CAAC,EAAE,KAAK,CAAC,CAACC,KAAI,MAAM,MAAM;AACnD,oBAAM,cAAc,aAAa,IAAIA,GAAE;AACvC,qBAAO,CAAC,CAAC,UAAU,gBAAgB,UAAa,OAAO,SAAS,WAAW;AAAA,YAC7E,CAAC,GACD;AACA,oDAAoB,CAAC,MAAM,SAAS,IAAI,KAAK,QAAQ;AACrD,oBAAM,SAAS,IAAI,KAAK,QAAQ;AAAA,YAClC,WAAW,CAAC,MAAM,SAAS,IAAI,KAAK,QAAQ,GAAG;AAC7C,yBAAW;AAAA,YACb;AAAA,UACF;AAEA,cAAI,YAAY,KAAK,aAAa,UAAa,KAAK,aAAa,MAAM;AACrE,sBAAU,IAAI,KAAK,QAAQ;AAAA,UAC7B;AACA,cAAI,UAAU;AACZ,4BAAgB,IAAI,KAAK,IAAI,IAAI;AAAA,UACnC;AAEA,iBAAO;AAAA,QACT,CAAC,EACA,QAAQ;AAEX,cAAM,QAAQC,WAAU,QAAQ;AAChC,cAAM,YAAYA,WAAU,YAAY;AACxC,cAAM,cAAcA,WAAU,WAAW;AACzC,cAAM,kBAAkBA,WAAU,eAAe;AAEjD,YAAI,iBAAiB;AACnB,qBAAW,MAAM;AA7I7B;AA8Ic,8BAAM,SAAS,EAAE,OAAM,qBAAvB,4BAA0C,MAAM,SAAS,EAAE;AAAA,UAC7D,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,KAAK;AAAA,IACjB;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AACF;;;ACtJA,SAAS,WAAAC,gBAAe;;;ACAjB,SAAS,kBAAkB,GAAoC;AAAtE;AACE,MAAI,aAAa,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACvE,WAAO;AAAA,EACT;AAEA,UAAO,UAAK,UAAU,CAAC,MAAhB,YAAqB;AAC9B;;;ACNO,SAAS,UAA4B,UAAaC,YAA0C;AACjG,SAAOA,WAAU;AAAA,IACf,CAAC,QAAQ,WAAW;AAClB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,0BAAU,CAAC,CAAC,GAAG;AACvD,YAAI,UAAU,QAAW;AACvB,iBAAO,GAAc,IAAI;AAAA,QAC3B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,mBAAK;AAAA,EACP;AACF;;;AFNA,IAAM,eAAwC;AAAA,EAC5C,IAAI,MAAM;AAAA,EACV,SAAS,CAAC;AAAA,EACV,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,IACpB,QAAQ;AAAA,MACN,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF;AAEO,SAAS,UAAa,OAA6C;AACxE,QAAM,QAAQ,aAAa;AAE3B,SAAOC;AAAA,IACL,MAAM,UAAU,cAAc,KAAK,OAAO,KAAK,CAAC;AAAA,IAChD,CAAC,KAAK;AAAA,EACR;AACF;AAEA,SAAS,KACP,OACA,OACgC;AAxClC;AAyCE,MAAI;AACJ,MAAI,MAAM,cAAc,YAAY,MAAM,QAAQ,MAAM,EAAE,GAAG;AAC3D,SAAK,MAAM,MAAM,MAAM,EAAE;AAAA,EAC3B,WAAW,MAAM,OAAO,QAAW;AACjC,SAAK,MAAM,MAAM,CAAC,CAAC,SAAY,KAAK,MAAM,EAAa,GAAoB,MAAM,EAAE,CAAC;AAAA,EACtF;AAEA,MAAI;AACJ,MAAI,MAAM,oBAAoB,YAAY,MAAM,QAAQ,MAAM,QAAQ,GAAG;AACvE,eAAW,MAAM,YAAY,MAAM,QAAQ;AAAA,EAC7C,WAAW,MAAM,aAAa,QAAW;AACvC,eAAW,MAAM,YAAY;AAAA,MAC3B,CAAC,SAAY,KAAK,MAAM,QAAmB;AAAA,MAC3C,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,MAAM,eAAe,MAAM,eAAe,MAAM,WAAW;AAE/E,MAAI;AACJ,MAAI,MAAM,mBAAmB,UAAU;AACrC,mBAAe,MAAM,QAAQ,CAAC,OAAO,WAAY,iCAAK,SAAL,EAAa,MAAM,EAAE;AAAA,EACxE,WAAW,MAAM,YAAY,QAAW;AACtC,mBAAe,MAAM,QAAQ,IAAI,CAAC,WAAY,iCAAK,SAAL,EAAa,aAAa,OAAU,EAAE;AAAA,EACtF;AAEA,QAAM,iBAAiB,MAAM;AAC7B,QAAM,YAAY,CAChB;AAAA,IACE,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GACA,UACyB;AAvF7B,QAAAC,KAAA;AAwFI,UAAMC,MAAK,oBAAO;AAClB,UAAM,WAAW,OAAOA,QAAO,WAAW,IAAIA,GAAE,KAAK,IAAIA,GAAE;AAC3D,UAAMC,YAAW,kCAAK,iBAAmB,2CAAcD;AAEvD,WAAO;AAAA,MACL,IAAAA;AAAA,MACA,SAAQD,MAAA,0BAAUE,aAAA,gBAAAA,UAAU,WAApB,OAAAF,MAA8B;AAAA,MACtC,eAAc,2CAAgBE,aAAA,gBAAAA,UAAU,iBAA1B,YAA0CD;AAAA,MACxD,SAAQ,+BAAUC,aAAA,gBAAAA,UAAU,WAApB,YAA8B;AAAA,MACtC,OAAO,MAAM,WAAW,QAAQ,UAAU,KAAK;AAAA,MAC/C,YAAY;AAAA,QACV,WAAW,QAAQ;AAAA,SACnB,uCAAcA,aAAA,gBAAAA,UAAU,eAAxB,YAAsC;AAAA,MACxC;AAAA,MACA,aAAY,uCAAcA,aAAA,gBAAAA,UAAU,eAAxB,YAAsC;AAAA,MAClD,UACE,+BACAA,aAAA,gBAAAA,UAAU,WADV,YACoB;AAAA,QAClB,CAAC,MACC,OAAO,MAAM,YAAY,aAAa,OAClC,IACA,MAAM,QAAQ,MAAM,SAClB,KACA,OAAO,CAAC;AAAA,MAClB,GACA,IAAI,CAAC,WAAW,MAAM,MAAM,WAAW,QAAQ,WAAW,CAAC,IAAI,SAAS,CAAC;AAAA,MAC3E;AAAA,MACA,QAAQ,0BAAUA,aAAA,gBAAAA,UAAU;AAAA,MAC5B,SAAS,4BAAWA,aAAA,gBAAAA,UAAU;AAAA,MAC9B,QAAQ,0BAAUA,aAAA,gBAAAA,UAAU;AAAA,MAC5B,QAAQ,0BAAUA,aAAA,gBAAAA,UAAU;AAAA,MAC5B,OAAO,wBAASA,aAAA,gBAAAA,UAAU;AAAA,MAC1B,aAAa,MAAM,QAAQ,WAAW,IAClC,cACA,cACE,CAAC,WAAW,IACZ;AAAA,IACR;AAAA,EACF;AAEA,QAAM,UAAU,6CAAc,IAAI;AAElC,QAAM,UAAU,MAAM,WAAW,MAAM,WAAW,MAAM,OAAO;AAC/D,QAAM,WAAW,MAAM,YAAY,MAAM,YAAY,MAAM,QAAQ;AAEnE,QAAM,YACJ,MAAM,qBAAqB,YAAY,MAAM,QAAQ,MAAM,SAAS,IAChE,MAAM,aAAa,MAAM,SAAS,IAClC,MAAM;AAEZ,QAAM,aACJ,MAAM,sBAAsB,YAAY,MAAM,QAAQ,MAAM,UAAU,IAClE,MAAM,cAAc,MAAM,UAAU,IACpC,MAAM;AAEZ,QAAM,uBACJ,MAAM,wBACN,OAAO;AAAA,IACL,OAAO,SAAQ,WAAM,yBAAN,YAA8B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAMC,UAAS,MAAM;AAAA,MAC1E;AAAA,MACAA,cAAa,KAAKA,YAAW,KAAK;AAAA,IACpC,CAAC;AAAA,EACH;AAEF,SAAO,iCACF,QADE;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,MAAM;AAAA,IACvB,oBAAoB,MAAM;AAAA,IAC1B,cAAc,MAAM;AAAA,IACpB,cAAc,MAAM;AAAA,IACpB,uBAAuB,MAAM;AAAA,IAC7B,cAAc,MAAM;AAAA,IACpB,0BAA0B,MAAM;AAAA,IAChC,oBAAoB,MAAM;AAAA,IAC1B,qBAAqB,MAAM;AAAA,IAC3B;AAAA,EACF;AACF;;;AG7KA,SAAS,aAAAC,kBAAiB;AAKnB,SAAS,aAAgB,OAA2C;AACzE,EAAAC;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAACC,WACC;AAAA,QACEA,OAAM,MAAM;AAAA,QACZA,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,MACR;AAAA,MACF,CAAC,CAAC,SAAS,WAAW,iBAAiB,aAAa,GAAG,UAAU;AAC/D,cAAM,YAAY,IAAI,IAAI,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC;AAC5D,cAAM,kBAAkB,IAAI,IAAI,cAAc,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC;AAGxE,cAAM,UAAU,MAAM,KAAK,OAAO,CAAC,MAAM,gBAAgB,IAAI,EAAE,QAAQ,CAAC;AACxE,YAAI,QAAQ,SAAS,MAAM,KAAK,QAAQ;AACtC,gBAAM,OAAO;AACb,qBAAW,MAAM;AAxB7B;AAyBc,8BAAM,SAAS,EAAE,OAAM,iBAAvB,4BAAsC;AAAA,UACxC,CAAC;AAAA,QACH;AAGA,mBAAW,MAAM,MAAM,QAAQ,KAAK,GAAG;AACrC,cAAI,CAAC,gBAAgB,IAAI,EAAE,EAAG,OAAM,QAAQ,OAAO,EAAE;AAAA,QACvD;AAGA,mBAAW,MAAM,MAAM,aAAa,KAAK,GAAG;AAC1C,cAAI,CAAC,gBAAgB,IAAI,EAAE,EAAG,OAAM,aAAa,OAAO,EAAE;AAAA,QAC5D;AAGA,mBAAW,MAAM,MAAM,cAAc,KAAK,GAAG;AAC3C,cAAI,CAAC,UAAU,IAAI,EAAE,EAAG,OAAM,cAAc,OAAO,EAAE;AAAA,QACvD;AAGA,mBAAW,MAAM,MAAM,aAAa,KAAK,GAAG;AAC1C,cAAI,CAAC,UAAU,IAAI,EAAE,EAAG,OAAM,aAAa,OAAO,EAAE;AAAA,QACtD;AAGA,mBAAW,MAAM,MAAM,aAAa;AAClC,cAAI,CAAC,UAAU,IAAI,EAAE,EAAG,OAAM,cAAc,MAAM,YAAY,OAAO,CAAC,MAAM,MAAM,EAAE;AAAA,QACtF;AAEA,YAAI,MAAM,MAAM,OAAO;AAErB,gBAAM,eAAe,UAAU,MAAM,WAAW,eAAe;AAC/D,cAAI,aAAa,SAAS,MAAM,UAAU,MAAM;AAC9C,kBAAM,YAAY;AAClB,uBAAW,MAAM;AA3D/B;AA4DgB,gCAAM,SAAS,EAAE,OAAM,sBAAvB,4BAA2C;AAAA,YAC7C,CAAC;AAAA,UACH;AAGA,gBAAM,cAAc,UAAU,MAAM,UAAU,SAAS;AACvD,cAAI,YAAY,OAAO,MAAM,SAAS,MAAM;AAC1C,kBAAM,WAAW;AACjB,uBAAW,MAAM;AApE/B;AAqEgB,gCAAM,SAAS,EAAE,OAAM,qBAAvB,4BAA0C;AAAA,YAC5C,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,KAAK;AAAA,IACjB;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AACF;;;AC9EA,SAAS,aAAAC,kBAAiB;AAKnB,SAAS,cAAiB,OAA2C;AAC1E,EAAAC;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAACC,WACC;AAAA,QACEA,OAAM,MAAM;AAAA,QACZA,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,MACR;AAAA,MACF,CAAC,CAAC,SAAS,eAAe,aAAa,WAAW,GAAG,UAAU;AAC7D,cAAM,gBAAgB;AAAA,UACpB,QAAQ,OAAO,CAAC,WAAQ;AAnBpC;AAmBuC,sBAAE,YAAO,WAAP,YAAiB,cAAc,IAAI,OAAO,EAAE;AAAA,WAAE;AAAA,UAC3E,CAAC,CAAC,WAAW,YAAY,QAAQ,OAAO,EAAE,CAAC;AAAA,QAC7C;AAEA,cAAM,iBAAiB,MAAM,cAAc;AAAA,UACzC,CAAC,WACC,gBAAgB,UAChB,OAAO,gBAAgB,UACvB,OAAO,YAAY,SAAS,WAAW;AAAA,QAC3C;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,KAAK;AAAA,IACjB;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AACF;;;AClCA,SAAS,aAAAC,kBAAiB;AAKnB,SAAS,kBAAqB,OAA2C;AAC9E,EAAAC;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAAC,UAAU,CAAC,MAAM,MAAM,eAAe,MAAM,UAAU,MAAM,SAAS;AAAA,MACtE,CAAC,CAAC,eAAe,EAAE,SAAS,GAAG,UAAU;AAVjD;AAWU,YAAI,WAAW,MAAM;AACrB,YAAI,aAAa;AAEjB,cAAM,eAAe,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO;AAC7C,gBAAM,OAAO,UAAU,IAAI,EAAE;AAC7B,iBAAO;AAAA,YACL;AAAA,YACA,WAAW,OAAO,aAAa,WAAW,IAAI,IAAI,oBAAI,IAAQ;AAAA,UAChE;AAAA,QACF,CAAC;AAGD,YAAI,eAAe;AACjB,gBAAM,oBAAoB,QAAQ,cAAc,CAAC,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAEtF,cACE,CAAC,GAAG,QAAQ,EAAE;AAAA,YACZ,CAAC,OAAO,QAAO,uDAAmB,OAAM,EAAC,uDAAmB,UAAU,IAAI;AAAA,UAC5E,GACA;AACA,wBAAW,4DAAmB,cAAnB,YAAgC,oBAAI,IAAI;AACnD,kBAAM,WAAW;AAEjB,8BAAM,OAAM,qBAAZ,4BAA+B;AAC/B;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,EAAE,UAAU,KAAK,cAAc;AACxC,qBAAW,YAAY,gCAAa,CAAC,GAAG;AACtC,gBAAI,CAAC,SAAS,IAAI,QAAQ,GAAG;AAC3B,uBAAS,IAAI,QAAQ;AACrB,2BAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAEA,YAAI,YAAY;AACd,4BAAM,OAAM,qBAAZ,4BAA+B,IAAI,IAAI,QAAQ;AAAA,QACjD;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,KAAK;AAAA,IACjB;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AACF;;;ACxDA,SAAS,aAAAC,mBAAiB;AAInB,SAAS,eAAkB,OAA2C;AAC3E,EAAAA;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAAC,UAAU,CAAC,MAAM,MAAM,oBAAoB,MAAM,WAAW,MAAM,WAAW;AAAA,MAC9E,CAAC,CAAC,oBAAoB,WAAW,WAAW,GAAG,UAAU;AACvD,YAAI,CAAC,mBAAoB;AAEzB,cAAM,eAAe,IAAI,IAAI,SAAS;AACtC,mBAAW,QAAQ,aAAa;AAC9B,cACE,KAAK,aAAa,UAClB,KAAK,aAAa,QAClB,aAAa,IAAI,KAAK,QAAQ,GAC9B;AACA,yBAAa,IAAI,KAAK,EAAE;AAAA,UAC1B;AAAA,QACF;AAEA,YAAI,aAAa,SAAS,UAAU,MAAM;AACxC,gBAAM,YAAY;AAClB,qBAAW,MAAM;AAzB7B;AA0Bc,8BAAM,SAAS,EAAE,OAAM,sBAAvB,4BAA2C;AAAA,UAC7C,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,KAAK;AAAA,IACjB;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AACF;;;AClCA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,aAAAC,mBAAiB;AAK1B,IAAM,wBAAwB;AAAA,EAC5B,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,SAAS,iBAAoB,OAA2C;AAC7E,EAAAC;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAACC,YAAW;AAAA,QACV,eAAeA,OAAM;AAAA,QACrB,aAAaA,OAAM,MAAM;AAAA,MAC3B;AAAA,MACA,CAAC,EAAE,eAAe,cAAc,sBAAsB,GAAG,UAAU;AACjE,YAAI,kBAAkB,QAAW;AAC/B;AAAA,QACF;AAEA,YAAI,OAAO,gBAAgB,UAAU;AACnC,gBAAM,QAAQ,OAAO,QAAQ,WAAW,EAAE;AAAA,YACxC,CAAC,CAAC,EAAE,QAAQ,MAAM,YAAY;AAAA,UAChC;AACA,gBAAM,cAAc,+BAAQ;AAAA,QAC9B,OAAO;AACL,gBAAM,cAAc;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AAEA,EAAAD;AAAA,IACE,MACE,MAAM;AAAA,MACJ,CAACC,YAAW;AAAA,QACV,OAAOA,OAAM;AAAA,QACb,aAAaA,OAAM;AAAA,MACrB;AAAA,MACA,CAAC,EAAE,OAAO,YAAY,GAAG,UAAU;AA5C3C;AA6CU,cAAM,QAAQC;AAAA,UACZ,UAAU,OAAO,eAAc,WAAM,yBAAN,mBAA6B,eAAe,MAAS;AAAA,QACtF;AAAA,MACF;AAAA,IACF;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AACF;;;ATxCO,SAAS,cACd,QAC4C;AAC5C,QAAM,CAAC,KAAK,MAAM,IAAIC,WAAS,CAAC,CAAC;AACjC,QAAM,QAAQ,UAAU,MAAM;AAE9B,WAAS,QAAQ;AAlBnB;AAmBI,WAAO,CAAC,CAAC;AAET,QAAI,MAAM,SAAS,QAAW;AAC5B,kBAAM,iBAAN,gCAAqB,WAAM,gBAAN,YAAqB,CAAC;AAAA,IAC7C;AAEA,QAAI,MAAM,aAAa,QAAW;AAChC,kBAAM,qBAAN,gCAAyB,WAAM,oBAAN,YAAyB,oBAAI,IAAI;AAAA,IAC5D;AAEA,QAAI,MAAM,cAAc,QAAW;AACjC,kBAAM,sBAAN,gCAA0B,WAAM,qBAAN,YAA0B,oBAAI,IAAI;AAAA,IAC9D;AAEA,QAAI,MAAM,kBAAkB,QAAW;AACrC,kBAAM,0BAAN,gCAA8B,WAAM,yBAAN,YAA8B,oBAAI,IAAI;AAAA,IACtE;AAEA,gBAAM,YAAN,+BAAgB;AAAA,EAClB;AAEA,QAAM,QAAQC;AAAA,IACZ,MAAG;AAzCP;AA0CM,iBAAI,MAA6B;AAAA,QAC/B,iBAAiB;AAAA,QACjB;AAAA,QAEA;AAAA,QACA,OAAM,WAAM,gBAAN,YAAqB,CAAC;AAAA,QAC5B,YAAW,WAAM,qBAAN,YAA0B,oBAAI,IAAI;AAAA,QAC7C,WAAU,WAAM,oBAAN,YAAyB,oBAAI,IAAI;AAAA,QAC3C,YAAY,oBAAI,IAAI;AAAA,QACpB,SAAS,oBAAI,IAAI;AAAA,QACjB,cAAc,oBAAI,IAAI;AAAA,QACtB,gBAAe,WAAM,yBAAN,YAA8B,oBAAI,IAAI;AAAA,QACrD,cAAc,oBAAI,IAAI;AAAA,QACtB,aAAa,MAAM,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,QACpD,qBAAqB,oBAAI,IAAI;AAAA,QAE7B,eAAe,CAAC;AAAA,QAChB,gBAAgB,CAAC;AAAA,QACjB,OAAO,CAAC;AAAA,QACR,WAAW,oBAAI,IAAI;AAAA,QACnB,aAAa,CAAC;AAAA,QACd,iBAAiB,oBAAI,IAAI;AAAA,QACzB,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,aAAa;AAAA,MACf,CAAC;AAAA;AAAA,IACH,CAAC,GAAG;AAAA,EACN;AAEA,gBAAc,KAAK;AACnB,YAAU,KAAK;AACf,oBAAkB,KAAK;AACvB,iBAAe,KAAK;AACpB,eAAa,KAAK;AAClB,mBAAiB,KAAK;AAEtB,EAAAC,YAAU,MAAM;AACd,UAAM,OAAO,CAACC,WAAU;AACtB,MAAAA,OAAM,kBAAkBC,WAAU,KAAK;AAEvC,UAAI,MAAM,KAAM,CAAAD,OAAM,OAAO,MAAM;AACnC,UAAI,MAAM,UAAW,CAAAA,OAAM,YAAY,MAAM;AAC7C,UAAI,MAAM,SAAU,CAAAA,OAAM,WAAW,MAAM;AAC3C,UAAI,MAAM,cAAe,CAAAA,OAAM,gBAAgB,MAAM;AACrD,iBAAW,UAAU,MAAM,SAAS;AAClC,YAAI,CAACA,OAAM,YAAY,SAAS,OAAO,EAAE,GAAG;AAC1C,gBAAM,QAAQ,MAAM,QAAQ,QAAQ,MAAM;AAC1C,UAAAA,OAAM,YAAY,OAAO,OAAO,GAAG,OAAO,EAAE;AAAA,QAC9C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,KAAK,CAAC;AAEjB,SAAO,CAAC,OAAO,KAAK;AACtB;;;AUrFM,gBAAAE,aAAA;AAPS,SAAR,qBAAyC;AAC9C,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,WAAW,MAAM;AAClD,QAAM,mBAAmB,SAAS,CAAC,MAAM,EAAE,KAAK,YAAY;AAC5D,QAAM,QAAQ,gBAAmB;AAEjC,SACE,gBAAAD,MAAC,SAAI,KAAK,eAAe,oBACvB,0BAAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS,MAAM;AACb,cAAM,OAAO,CAAC,UAAU;AAdlC;AAeY,gBAAM,cAAc,QAAQ,CAAC,WAAW;AACtC,kBAAM,aAAa,OAAO,OAAO,EAAE;AAAA,UACrC,CAAC;AACD,4BAAM,SAAS,EAAE,OAAM,YAAvB,4BAAiC;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,MAEC;AAAA;AAAA,EACH,GACF;AAEJ;;;ACEI,gBAAAC,aAAA;AAvBG,SAAS,eAAe;AAC7B,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,WAAW,iBAAiB;AAClC,QAAM,eAAe,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,YAAY;AACvE,QAAM,sBAAsB,MAAM,SAAS,CAAC,UAAU,MAAM,oBAAoB,IAAI,QAAQ,GAAG;AAAA,IAC7F,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,gBAAgB,MAAM;AAAA,IAC1B,CAAC,UAAO;AAbZ;AAae,+BAAM,cAAc,KAAK,CAAC,WAAW,OAAO,OAAO,QAAQ,MAA3D,mBAA8D,YAA9D,mBAAuE;AAAA;AAAA,EACpF;AACA,QAAM,UAAU,SAAS,CAAC,UAAO;AAfnC;AAesC,uBAAM,YAAN,mBAAe;AAAA,GAAU;AAC7D,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,UAAO;AAjBZ;AAiBe,+BAAM,cAAc,KAAK,CAAC,WAAW,OAAO,OAAO,QAAQ,MAA3D,mBAA8D,WAA9D,mBAAsE;AAAA;AAAA,EACnF;AACA,QAAM,SAAS,SAAS,CAAC,UAAO;AAnBlC;AAmBqC,uBAAM,WAAN,mBAAc;AAAA,GAAU;AAE3D,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU;AACxC,UAAM,SAAS,MAAM,cAAc,KAAK,CAACC,YAAWA,QAAO,OAAO,QAAQ;AAE1E,WAAO,iCAAQ;AAAA,EACjB,CAAC;AAED,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,SAAS,aAAa;AAAA,MACpC,KAAK;AAAA,QACH,eAAe;AAAA,QACf,gBAAgB,eAAe;AAAA,QAC/B,wBAAwB,UAAU;AAAA,QAClC;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,MAEN;AAAA;AAAA,EACH;AAEJ;;;AC1CA,SAAS,aAAAE,kBAAiB;AAE1B,SAAS,aAAAC,aAAW,UAAAC,eAAc;;;ACmD9B,gBAAAC,aAAA;AAhDG,SAAS,eAAe;AAC7B,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,WAAW,iBAAiB;AAClC,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,kBAAkB;AAExE,WAAS,cAAc,OAA2B;AAChD,UAAM,gBAAgB;AAEtB,UAAM,MAAM,MAAM;AAClB,QAAI,kBAAkB,MAAM,SAAS;AAAA,EACvC;AAEA,WAAS,cAAc,OAA2B;AAChD,UAAM,gBAAgB;AAEtB,UAAM,MAAM,MAAM;AAClB,QAAI,CAAC,IAAI,kBAAkB,MAAM,SAAS,EAAG;AAE7C,UAAM,SAAS,IAAI;AACnB,UAAM,QAAQ,KAAK,IAAI,MAAM,UAAU,OAAO,sBAAsB,EAAE,OAAO,GAAG,EAAE;AAElF,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,aAAa,IAAI,UAAU,GAAG,KAAK,IAAI;AAAA,IAC/C,CAAC;AAAA,EACH;AAEA,WAAS,YAAY,OAA2B;AAC9C,UAAM,gBAAgB;AAEtB,UAAM,MAAM,MAAM;AAClB,QAAI,sBAAsB,MAAM,SAAS;AAAA,EAC3C;AAEA,WAAS,cAAc,OAAyB;AAC9C,UAAM,OAAO,CAAC,UAAU;AACtB,UAAI,MAAM,iBAAiB,SAAS,GAAG;AACrC,cAAM,aAAa,OAAO,QAAQ;AAAA,MACpC,OAAO;AACL,cAAM,aAAa,IAAI,UAAU,aAAa;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAe,UAAU,gBAAgB;AAAA,MACzC,eAAe,UAAU,gBAAgB;AAAA,MACzC,aAAa,UAAU,cAAc;AAAA,MACrC,eAAe,UAAU,gBAAgB;AAAA;AAAA,EAC3C;AAEJ;AAEO,SAAS,iBAAiB,IAGoC;AAHpC,eAC/B;AAAA;AAAA,EAhEF,IA+DiC,IAE5B,kBAF4B,IAE5B;AAAA,IADH;AAAA;AAGA,QAAMC,aAAY,SAAS,CAAC,UAAO;AAnErC,QAAAC;AAmEwC,YAAAA,MAAA,MAAM,YAAN,gBAAAA,IAAe;AAAA,GAAa;AAClE,QAAM,SAAS,SAAS,CAAC,UAAO;AApElC,QAAAA;AAoEqC,YAAAA,MAAA,MAAM,WAAN,gBAAAA,IAAc;AAAA,GAAa;AAE9D,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAWC;AAAA,MACX,KAAK;AAAA,QACH;AAAA,UACE,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,YAAY,OAAO,eAAe;AAAA,UAC1C,SAAS;AAAA,UACT,YAAY;AAAA,UAEZ,WAAW;AAAA,YACT,SAAS;AAAA,YACT,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,YAAY;AAAA,UACd;AAAA,UAEA,4BAA4B;AAAA,YAC1B,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AC1CI,SAgBE,OAAAE,OAhBF,QAAAC,cAAA;AAnDG,SAAS,cAAiB,EAAE,SAAS,GAAyC;AACnF,QAAM,QAAQ,gBAAmB;AACjC,QAAM,WAAW,iBAAiB;AAClC,QAAMC,SAAQ,SAAS,CAAC,MAAM,EAAE,WAAW,KAAK;AAChD,QAAMC,eAAc,SAAS,CAAC,MAAM,EAAE,MAAM,WAAW;AAEvD,QAAM,EAAE,WAAW,OAAO,aAAa,IAAI,MAAM,SAAS,CAAC,UAAU;AAXvE;AAYI,UAAMC,UAAQ,WAAM,KAAK,UAAU,CAAC,MAAM,EAAE,aAAa,QAAQ,MAAnD,YAAwD;AACtE,UAAM,SAAS,MAAM,cAAc,KAAK,CAACC,YAAWA,QAAO,OAAO,QAAQ;AAE1E,WAAO;AAAA,MACL,YAAW,WAAM,KAAKD,MAAK,MAAhB,mBAAmB;AAAA,MAC9B,OAAOA,UAAS,KAAK,MAAM,KAAK,SAAS,IAAIA,SAAQ,IAAI;AAAA,MACzD,eAAc,sCAAQ,gBAAR,YAAuB,MAAM,MAAM;AAAA,IACnD;AAAA,EACF,CAAC;AAED,WAASE,QAAO,OAAyB,KAAe;AACtD,QAAI,cAAc;AAChB;AAAA,IACF;AAEA,UAAM;AAAA,MACJ,OAAO,EAAE,MAAM,gBAAgB,aAAa;AAAA,IAC9C,IAAI,MAAM,SAAS;AAEnB,UAAM,eAAe,cAAc,QAAQ,SAAS;AACpD,UAAM,UACJ,MAAM,iBAAiB,SAAS,KAAK,MACjC,MAAM,SAAS,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,IAC3D,CAAC;AACP,QAAI,CAAC,KAAK;AACR,cAAQ,KAAK;AAAA,QACX;AAAA,QACA,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,iDAAe;AAEf,QAAI,CAAC,gBAAgB;AACnB,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,OAAO;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,eAAe;AACrB,WAAO;AAAA,EACT;AAEA,SACE,gBAAAL;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,qBAAqB;AAAA,QACrB,YAAY;AAAA,QACZ,QAAQ;AAAA,QAER,WAAW;AAAA,UACT,UAAU;AAAA,UACV,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MACA,SAAS,CAAC,UAAUK,QAAO,KAAK;AAAA,MAChC,eAAe,CAAC,UAAUA,QAAO,OAAO,IAAI;AAAA,MAE5C;AAAA,wBAAAN,MAAC,SAAK,UAAS;AAAA,QAGb,gBAAAA,MAACE,QAAA,EAAM,cAAc,eAAe,IAAI,OACtC,0BAAAF;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,cACH,EAAE,YAAY,aAAa,UAAU,QAAQ;AAAA,cAC7C,CAAC,aAAa,EAAE,SAAS,EAAE;AAAA,cAC3B,cAAc,UAAU,EAAE,WAAW,4BAA4B;AAAA,YACnE;AAAA,YAEA,0BAAAA,MAACG,cAAA,EAAY;AAAA;AAAA,QACf,GACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AF2GI,SAmBE,OAAAI,OAnBF,QAAAC,cAAA;AAvLG,IAAM,sBAAsB,IAAI,WAAW;AAAA,EAChD,OAAO,oBAAI,IAAwB;AACrC,CAAC;AAEM,SAAS,eAAe;AAC7B,QAAM,MAAMC,QAAuB,IAAI;AACvC,QAAM,WAAW,iBAAiB;AAClC,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,mBAAmB;AACzE,QAAM,sBAAsB,MAAM,SAAS,CAAC,UAAU,MAAM,oBAAoB,IAAI,QAAQ,GAAG;AAAA,IAC7F,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,eAAe,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,YAAY;AACvE,QAAM,UAAU,SAAS,CAAC,UAAO;AA1BnC;AA0BsC,uBAAM,YAAN,mBAAe;AAAA,GAAU;AAC7D,QAAM,SAAS,SAAS,CAAC,UAAO;AA3BlC;AA2BqC,uBAAM,WAAN,mBAAc;AAAA,GAAU;AAE3D,QAAM,EAAE,QAAQ,eAAe,aAAa,IAAI,MAAM,SAAS,CAAC,UAAU;AA7B5E;AA8BI,UAAM,SAAS,MAAM,cAAc,KAAK,CAACC,YAAWA,QAAO,OAAO,QAAQ;AAC1E,WAAO;AAAA,MACL,QAAQ,iCAAQ;AAAA,MAChB,gBAAe,sCAAQ,YAAR,mBAAiB;AAAA,MAChC,eAAc,sCAAQ,WAAR,mBAAgB;AAAA,IAChC;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,oBAAoB,SAAS;AAC3C,QAAM,gBAAgBD,QAA4C;AAClE,QAAM,QAAQA,QAAuB;AAGrC,EAAAE,YAAU,MAAM;AACd,UAAM,MAAM,IAAI;AAChB,QAAI,CAAC,IAAK;AAEV,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,MAAM,IAAI,UAAUC,WAAU,GAAG,CAAC;AAAA,IAC1C,CAAC;AAED,WAAO,MAAM;AACX,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,MAAM,OAAO,QAAQ;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,CAAC;AAGpB,WAAS,gBAAgB,YAAoB;AA3D/C;AA4DI,UAAM,OAAO,MACV,SAAS,EACT,YAAY,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,MAAM,SAAS,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE;AAExE,UAAM,YAAY,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,QAAQ;AAE1D,UAAM,mBAAkB,sBAAK,KAAK,CAAC,QAAQ,IAAI,GAAG,MAA1B,mBAA6B,QAA7B,mBAAkC,eAAlC,YAAgD;AAExE,QAAI,MAAM;AACV,UAAM,cAAc,UAAU,UAAU,CAAC,QAAQ;AArErD,UAAAC,KAAAC;AAsEM,YAAM,SAAQA,OAAAD,MAAA,IAAI,QAAJ,gBAAAA,IAAS,gBAAT,OAAAC,MAAwB;AACtC,UAAI,MAAM,QAAQ,IAAI,aAAa,gBAAiB,QAAO;AAC3D,aAAO;AACP,aAAO;AAAA,IACT,CAAC;AAED,WAAO,gBAAgB,KAAK,UAAU,SAAS;AAAA,EACjD;AAGA,WAAS,cAAc,OAA2B;AAChD,UAAM,MAAM,IAAI;AAChB,QAAI,CAAC,IAAK;AACV,kBAAc,UAAU,EAAE,QAAQ,MAAM,SAAS,QAAQ,IAAI,sBAAsB,EAAE;AAAA,EACvF;AAGA,WAAS,cAAc,OAA2B;AAChD,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,MAAM,IAAI;AAChB,UACE,CAAC,OACD,cAAc,YAAY,UAC1B,KAAK,IAAI,MAAM,UAAU,cAAc,QAAQ,MAAM,IAAI;AAEzD;AAEF,YAAM,gBAAgB;AACtB,UAAI,kBAAkB,MAAM,SAAS;AAGrC,UAAI,CAAC,MAAM,SAAS;AAClB,cAAM,UAAU,IAAI,UAAU,IAAI;AAClC,iBAAS,KAAK,OAAO,MAAM,OAAO;AAElC,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,iBAAiB,GAAG,CAAC,GAAG;AAChE,cAAI;AACF,kBAAM,QAAQ,MAAM,GAAU,IAAI;AAAA,UACpC,SAAQ;AAAA,UAER;AAAA,QACF;AAEA,eAAO,OAAO,MAAM,QAAQ,OAAO;AAAA,UACjC,eAAe;AAAA,UACf,UAAU;AAAA,UACV,WACE;AAAA,UACF,MAAM,GAAG,cAAc,QAAQ,OAAO,IAAI;AAAA,UAC1C,KAAK,GAAG,cAAc,QAAQ,OAAO,GAAG;AAAA,QAC1C,CAAC;AAED,YAAI,MAAM,QAAQ;AAAA,MACpB;AAGA,YAAM,QAAQ,MAAM,OAAO,GACzB,cAAc,QAAQ,OAAO,OAAO,MAAM,UAAU,cAAc,QAAQ,MAC5E;AAGA,YAAM,QAAQ,MAAM,YAAY,QAAQ,QAAQ;AAChD,YAAM,cAAc;AAAA,QAClB,IAAI,aAAa,MAAM,UAAU,cAAc,QAAQ;AAAA,MACzD;AAGA,YAAM,UAAU,MAAM,SAAS,EAAE,YAAY,IAAI,CAAC,IAAIC,WAAO;AAzInE;AAyIuE;AAAA,UAC/D;AAAA,UACA,OAAAA;AAAA,UACA,QAAO,iBAAM,SAAS,EAAE,MAAM,IAAI,EAAE,MAA7B,mBAAgC,gBAAhC,YAA+C;AAAA,QACxD;AAAA,OAAE;AAEF,YAAM,YAAY,QAAQ,CAAC,IAAI,MAAM;AACnC,YAAI,SAAS;AACb,YAAI,MAAM,OAAO;AAEf,cAAI,cAAc,OAAO;AACvB,qBAAS,QACN,MAAM,QAAQ,GAAG,cAAc,CAAC,EAChC,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,OAAO,CAAC;AAAA,UAC5C,WAAW,cAAc,OAAO;AAC9B,qBAAS,CAAC,QAAQ,MAAM,aAAa,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,OAAO,CAAC;AAAA,UACrF;AAAA,QACF,WAAW,KAAK,eAAe,IAAI,OAAO;AAExC,mBAAS,IAAI;AAAA,QACf,WAAW,IAAI,SAAS,KAAK,aAAa;AAExC,mBAAS,CAAC,IAAI;AAAA,QAChB;AAEA,cAAM,oBAAoB,IAAI,IAAI;AAAA,UAChC,YAAY;AAAA,UACZ,WAAW,eAAe,MAAM;AAAA,UAChC,QAAQ,MAAM,QAAQ,IAAI;AAAA,QAC5B,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAGA,WAAS,YAAY,OAA2B;AAC9C,UAAM,OAAO,CAAC,UAAU;AA7K5B;AA8KM,YAAM,MAAM,IAAI;AAChB,UAAI,CAAC,OAAO,cAAc,YAAY,OAAW;AAGjD,YAAM,QAAQ,MAAM,YAAY,QAAQ,QAAQ;AAChD,YAAM,cAAc;AAAA,QAClB,IAAI,aAAa,MAAM,UAAU,cAAc,QAAQ;AAAA,MACzD;AAEA,YAAM,YAAY,OAAO,OAAO,CAAC;AACjC,YAAM,YAAY,OAAO,aAAa,GAAG,QAAQ;AAGjD,kBAAM,YAAN,mBAAe;AACf,UAAI,MAAM,QAAQ;AAClB,YAAM,oBAAoB,MAAM;AAChC,oBAAc,UAAU;AACxB,YAAM,UAAU;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,SACE,gBAAAP;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,SAAS,aAAa;AAAA,MACpC,KAAK;AAAA,QACH,eAAe;AAAA,QACf;AAAA,UACE,UAAU;AAAA,UACV,YAAY;AAAA,QACd;AAAA,QACA,gBAAgB,eAAe;AAAA,QAC/B,wBAAwB,UAAU;AAAA,QAClC;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,MACP,eAAe,UAAU,gBAAgB;AAAA,MACzC,eAAe,UAAU,gBAAgB;AAAA,MACzC,aAAa,UAAU,cAAc;AAAA,MAErC;AAAA,wBAAAD,MAAC,iBAAe,kBAAO;AAAA,QACvB,gBAAAA,MAAC,SAAI,KAAK,EAAE,MAAM,EAAE,GAAG;AAAA,QACvB,gBAAAA,MAAC,iBAAc;AAAA,QACf,gBAAAA,MAAC,gBAAa;AAAA;AAAA;AAAA,EAChB;AAEJ;;;AG7NA,SAAS,cAAAS,aAAY,YAAAC,kBAAgB;AAsDjC,qBAAAC,WAEI,OAAAC,OAcE,QAAAC,cAhBN;AA/CG,SAAS,kBAAkC;AAChD,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,WAAU,SAAS,CAAC,MAAM,EAAE,WAAW,OAAO;AACpD,QAAMC,YAAW,SAAS,CAAC,MAAM,EAAE,WAAW,QAAQ;AACtD,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,WAAW,MAAM;AAClD,QAAMC,YAAW,SAAS,CAAC,MAAM,EAAE,MAAM,QAAQ;AACjD,QAAM,gBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,aAAa;AAC1D,QAAM,WAAW,SAAS,CAAC,MAAM,EAAE,KAAK,QAAQ;AAChD,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,KAAK,cAAc;AACrD,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,KAAK,cAAc;AACrD,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,OAAO;AACzC,QAAM,eAAe,gBAAgB;AAErC,QAAM,QAAQ,gBAAmB;AACjC,QAAM,QAAQC,YAAW,iBAAiB;AAC1C,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,OAAO;AAC7D,QAAM,gBAAgB,MAAM,SAAS,CAAC,UAAU,MAAM,aAAa;AAEnE,QAAM,CAAC,eAAe,gBAAgB,IAAIC,WAAyB,IAAI;AAEvE,QAAMC,UAAS,CAAC,QAAqC,UAAoB;AACvE,UAAM;AAAA,MACJ,OAAO,EAAE,eAAe,yBAAyB,sBAAsB;AAAA,IACzE,IAAI,MAAM,SAAS;AAEnB,UAAM,WAAW,IAAI,IAAI,aAAa;AAEtC,eAAW,YAAY,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,IAAI,CAACC,YAAWA,QAAO,EAAE,GAAG;AAChF,UAAI,wBAAS,cAAc,IAAI,QAAQ,GAAG;AACxC,iBAAS,OAAO,QAAQ;AAAA,MAC1B,OAAO;AACL,iBAAS,IAAI,QAAQ;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,CAAC,yBAAyB;AAC5B,YAAM,OAAO,CAACC,WAAU;AACtB,QAAAA,OAAM,gBAAgB;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,mEAAwB;AAAA,EAC1B;AAEA,QAAM,aAAa,QAAQ,MAAM,CAAC,WAAW,CAAC,cAAc,IAAI,OAAO,EAAE,CAAC;AAE1E,SACE,gBAAAV,OAAAF,WAAA,EACE;AAAA,oBAAAC,MAACE,aAAA,EAAW,SAAS,CAAC,UAAU,iBAAiB,gBAAgB,OAAO,MAAM,aAAa,GACzF,0BAAAF,MAACM,WAAA,EAAS,GACZ;AAAA,IAEA,gBAAAN;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,MAAM,CAAC,CAAC;AAAA,QACR,SAAS,MAAM,iBAAiB,IAAI;AAAA,QACpC,KAAK;AAAA,QACL,WAAW,mCAAS;AAAA,QACpB,mBAAmB,mCAAS;AAAA,QAE5B,0BAAAF,OAAC,SAAI,KAAK,EAAE,SAAS,4BAA4B,SAAS,OAAO,GAC/D;AAAA,0BAAAD,MAAC,SAAI,KAAK,EAAE,cAAc,iBAAiB,GAAI,yBAAc;AAAA,UAE7D,gBAAAC,OAAC,SAAI,KAAK,EAAE,QAAQ,WAAW,SAAS,QAAQ,KAAK,QAAQ,GAC3D;AAAA,4BAAAD,MAACK,SAAA,EAAO,SAAQ,YAAW,SAAS,MAAMI,QAAO,QAAW,CAAC,UAAU,GACpE,uBAAa,UAAU,SAC1B;AAAA,YAEA,gBAAAT,MAACK,SAAA,EAAO,SAAQ,YAAW,SAAS,OACjC,oBACH;AAAA,aACF;AAAA,UAEC,QAAQ,IAAI,CAAC,WAAQ;AAhFhC;AAiFY,mCAAAL;AAAA,cAAC;AAAA;AAAA,gBAEC,SACE,gBAAAA;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,SAAS,GAAE,YAAO,WAAP,YAAiB,cAAc,IAAI,OAAO,EAAE;AAAA,oBACvD,UAAU,MAAMK,QAAO,MAAM;AAAA,oBAC7B,UAAU,OAAO,WAAW;AAAA;AAAA,gBAC9B;AAAA,gBAEF,OAAO,OAAO;AAAA;AAAA,cART,OAAO;AAAA,YASb;AAAA,WACF;AAAA,WACH;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;ACjGA,SAAS,cAAAG,aAAY,YAAAC,kBAAgB;AA0DjC,qBAAAC,WAEI,OAAAC,OA0BI,QAAAC,cA5BR;AAnDG,SAASC,UAAyB;AACvC,QAAM,EAAE,WAAW,iBAAiB,IAAIC,YAAW,oBAAoB;AACvE,QAAM,QAAQ,gBAAmB;AACjC,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,WAAW,MAAM;AAClD,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,WAAU,SAAS,CAAC,MAAM,EAAE,WAAW,OAAO;AACpD,QAAM,aAAa,SAAS,CAAC,MAAM,EAAE,MAAM,MAAM;AACjD,QAAMC,aAAY,SAAS,CAAC,MAAM,EAAE,MAAM,SAAS;AACnD,QAAM,cAAc,SAAS,CAAC,MAAM,EAAE,KAAK,WAAW;AACtD,QAAM,aAAa,SAAS,CAAC,MAAM,EAAE,KAAK,UAAU;AACpD,QAAM,iBAAiB,SAAS,CAAC,MAAM,EAAE,KAAK,cAAc;AAC5D,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,OAAO;AACzC,QAAM,eAAe,gBAAgB;AAErC,QAAM,EAAE,KAAK,UAAU,IAAI,MAAM,SAAS,CAAC,UAAyB;AAClE,QAAI,OAAO,MAAM,MAAM,iBAAiB,aAAa,MAAM,MAAM,iBAAiB,QAAW;AAC3F,aAAO;AAAA,QACL,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAAA,IACF;AAEA,WAAO,MAAM,MAAM;AAAA,EACrB,CAAC;AAED,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAyB,IAAI;AAEzD,WAAS,QAAQ,EAAE,QAAQ,SAAS,GAAkB;AACpD,UAAM,EAAE,eAAe,aAAa,MAAM,IAAI,MAAM,SAAS;AAC7D,UAAM,UAAU,cAAc,IAAI,CAAC,WAAW,OAAO,YAAY;AACjE,UAAM,QAAQ,MAAM,QAAQ,aAAa;AAAA,MAAI,CAAC,SAC5C,cAAc,IAAI,CAAC,WAAW,OAAO,WAAW,OAAO,MAAM,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC;AAAA,IACvF;AAEA,QAAI,WAAW,QAAQ;AACrB,YAAM,OAAO,SAAS,eAAe,SAAS,IAAI;AAClD,gBAAU,UAAU,UAAU,IAAI;AAAA,IACpC,OAAO;AACL,YAAM,OAAO,SAAS,aAAa,SAAS,IAAI;AAChD,YAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,YAAM,IAAI,SAAS,cAAc,GAAG;AACpC,QAAE,OAAO;AACT,QAAE,WAAW,UAAU,SAAS,UAAU;AAC1C,eAAS,KAAK,OAAO,CAAC;AACtB,QAAE,MAAM;AACR,QAAE,OAAO;AACT,UAAI,gBAAgB,GAAG;AAAA,IACzB;AAAA,EACF;AAEA,SACE,gBAAAP,OAAAF,WAAA,EACE;AAAA,oBAAAC,MAACK,aAAA,EAAW,SAAS,CAAC,UAAU,UAAU,SAAS,OAAO,MAAM,aAAa,GAC3E,0BAAAL,MAAC,cAAW,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,qBAAqB,GAAG,GAChE;AAAA,IAEA,gBAAAA;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,MAAM,CAAC,CAAC;AAAA,QACR,SAAS,MAAM,UAAU,IAAI;AAAA,QAC7B,UAAU;AAAA,QACV,KAAK;AAAA,QACL,WAAW,mCAAS;AAAA,QACpB,mBAAmB,mCAAS;AAAA,QAE5B,0BAAAL;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,cACH,SAAS;AAAA,cACT,SAAS;AAAA,cACT,cAAc;AAAA,cACd,KAAK;AAAA,cAEL,SAAS;AAAA,gBACP,gBAAgB;AAAA,cAClB;AAAA,YACF;AAAA,YAEA;AAAA,8BAAAD,MAAC,SAAI,KAAK,EAAE,cAAc,iBAAiB,GAAI,uBAAY;AAAA,cAE1D,UAAU,IAAI,CAAC,OAAO,UACrB,gBAAAC;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBAEC,WAAW,MAAM,WAAW,SAAS,gBAAAJ,MAACO,YAAA,EAAU,IAAK,gBAAAP,MAAC,cAAW;AAAA,kBACjE,SAAS,MAAM,QAAQ,KAAK;AAAA,kBAE3B;AAAA,0BAAM,WAAW,SAAS,aAAa;AAAA,oBAAe;AAAA,oBAAI,MAAM,SAAS;AAAA,oBAAK;AAAA;AAAA;AAAA,gBAJ1E;AAAA,cAKP,CACD;AAAA;AAAA;AAAA,QACH;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AClGA,SAAS,cAAAS,mBAAkB;AAC3B,SAAS,QAAAC,OAAM,mBAAAC,kBAAiB,UAAAC,eAAc;;;ACCvC,SAAS,eACd,SACA,MACA,OACA;AACA,SAAO;AAAA,KACL,mCAAS,iBAAgB,WAAW,QAAQ,KAAK,MAAM,KAAK,IAAI,mCAAS;AAAA,IACzE,QAAQ,MAAM,MAAK,mCAAS;AAAA,IAC5B,QAAQ,MAAM,MAAK,mCAAS;AAAA,EAC9B;AACF;AAEO,SAAS,QACd,QACA,MACA,OACA;AACA,SAAO;AAAA,KACL,iCAAQ,iBAAgB,WACpB,SAAS,SACP,OAAO,KAAK,MAAM,KAAK,IACvB,SACF,iCAAQ;AAAA,IACZ,QAAQ,MAAM,MAAK,iCAAQ;AAAA,IAC3B,QAAQ,MAAM,MAAK,iCAAQ;AAAA,EAC7B;AACF;;;AC3BA,SAAS,MAAM,mBAAAC,wBAAuB;AAWhC,gBAAAC,aAAA;AAHN,IAAM,kBAAkB,CAAC,YAAuB;AAC9C,MAAI,OAAO,YAAY,UAAU;AAC/B,WACE,gBAAAA,MAAC,UAAK,KAAK,eAAe,MAAM,OAAO,SACpC,mBACH;AAAA,EAEJ;AACA,SAAO;AACT;AAEO,IAAM,OAAO,KAAK,SAASC,MAAQ,EAAE,QAAQ,SAAS,GAAqC;AApBlG;AAqBE,QAAM,QAAQ,gBAAmB;AACjC,QAAM,WAAW,iBAAiB;AAElC,QAAM,SAAS,MAAM,SAAS,CAAC,UAAU;AACvC,UAAM,MAAM,MAAM,cAAc,KAAK,CAACC,YAAWA,QAAO,OAAO,QAAQ;AACvE,WACE,OAAO;AAAA,MACL,OAAO,IAAI;AAAA,MACX,YAAY,IAAI;AAAA,IAClB;AAAA,EAEJ,CAAC;AACD,QAAM,YAAW,WAAM,SAAS,CAAC,UAAU,MAAM,MAAM,QAAQ,MAA9C,YAAmD;AACpE,QAAM,OAAO,MAAM,SAAS,CAAC,UAAU,MAAM,gBAAgB,IAAI,MAAM,CAAC;AACxE,QAAM,sBAAsB,MAAM,SAAS,CAAC,UAAU,MAAM,oBAAoB,IAAI,QAAQ,GAAG;AAAA,IAC7F,UAAU;AAAA,EACZ,CAAC;AAED,EAAAC,iBAAgB,MAAG;AAvCrB,QAAAC,KAAA;AAuCwB,kBAAAA,MAAA,MAAM,SAAS,EAAE,OAAM,gBAAvB,wBAAAA,KAAqC,eAAe,QAAQ;AAAA,GAAS;AAC3F,QAAMC,aAAY,SAAS,CAAC,MAAM,GAAG,GAAG,eAAe,EAAE,SAAS,6BAAM,OAAO,QAAQ,CAAC,CAAC;AACzF,QAAM,SAAS,SAAS,CAAC,MAAM,QAAW,EAAE,QAAQ,6BAAM,OAAO,QAAQ,CAAC;AAE1E,MAAI,CAAC,UAAU,CAAC,KAAM,QAAO;AAE7B,QAAM,UAAU,OAAO,WAAW,OAAO,MAAM,KAAK,KAAK,GAAG,KAAK,KAAK;AAEtE,SACE,gBAAAL,MAAC,SAAI,WAAWK,YAAW,KAAK,CAAC,eAAe,MAAM,MAAM,GAAG,OAAO,qBACnE,mBAAS,SAAS,OAAO,MAAM,KAAK,KAAK,GAAG,KAAK,OAAO,QAAQ,GACnE;AAEJ,CAAC;;;ACpDD,SAAS,kBAAkB;AAwCvB,gBAAAC,aAAA;AAlCG,IAAM,UAAU,WAMrB,SAASC,SAAQ,EAAE,QAAQ,SAAS,GAAG,KAAK;AAC5C,QAAM,QAAQ,gBAAyB;AACvC,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,OAAO;AACzC,QAAM,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM;AAEvC,QAAM,EAAE,SAAS,WAAAC,YAAW,KAAAC,KAAI,IAAI,MAAM,SAAS,CAAC,UAAU;AAC5D,UAAM,OAAO,MAAM,gBAAgB,IAAI,MAAM;AAE7C,WAAO;AAAA,MACL,SAAS,MAAM,SAAS,IAAI,MAAM,IAC9B,MAAM,MAAM,sBAAsB,WAChC,OACE,MAAM,MAAM,WAAW,KAAK,OAAO,QAAQ,IAC3C,OACF,MAAM,MAAM,aACd;AAAA,MACJ,YACE,mCAAS,oBAAmB,WACxB,QAAQ,QAAQ,6BAAM,OAAO,QAAQ,IACrC,mCAAS;AAAA,MACf,MACE,iCAAQ,oBAAmB,WACvB,OAAO,QAAQ,6BAAM,OAAO,QAAQ,IACpC,iCAAQ;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO,UACL,gBAAAH,MAAC,SAAI,KAAU,WAAWE,YAAW,KAAK,CAAC,eAAe,SAASC,IAAG,GACnE,mBACH,IACE;AACN,CAAC;;;ACiBU,gBAAAC,aAAA;AAxDJ,SAAS,cAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGgB;AACd,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,WAAU,SAAS,CAAC,MAAM,EAAE,WAAW,OAAO;AACpD,QAAMC,gBAAe,SAAS,CAAC,MAAM,EAAE,MAAM,YAAY;AAEzD,QAAM,QAAQ,gBAAmB;AACjC,QAAM,aAAa,MAAM,SAAS,CAAC,UAAU,MAAM,SAAS,IAAI,MAAM,CAAC;AACvE,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC,UAAO;AAnBZ;AAmBe,cAAC,GAAC,WAAM,gBAAgB,IAAI,MAAM,MAAhC,mBAAmC,SAAS;AAAA;AAAA,EAC3D;AAEA,WAASC,UAAS;AAChB,UAAM;AAAA,MACJ,OAAO,EAAE,UAAU,oBAAoB,eAAe,iBAAiB;AAAA,MACvE;AAAA,MACA;AAAA,IACF,IAAI,MAAM,SAAS;AAEnB,UAAM,cAAc,IAAI,IAAI,QAAQ;AAEpC,QAAI,eAAe;AACjB,kBAAY,MAAM;AAElB,YAAM,OAAO,gBAAgB,IAAI,MAAM;AACvC,iBAAW,YAAY,OAAO,aAAa,iBAAiB,IAAI,IAAI,CAAC,GAAG;AACtE,oBAAY,IAAI,QAAQ;AAAA,MAC1B;AAAA,IACF;AAEA,QAAI,YAAY;AACd,kBAAY,OAAO,MAAM;AAEzB,YAAM,OAAO,gBAAgB,IAAI,MAAM;AACvC,iBAAW,cAAc,OAAO,eAAe,IAAI,IAAI,CAAC,GAAG;AACzD,oBAAY,OAAO,UAAU;AAAA,MAC/B;AAAA,IACF,OAAO;AACL,kBAAY,IAAI,MAAM;AAAA,IACxB;AAEA,yDAAmB;AAEnB,QAAI,CAAC,oBAAoB;AACvB,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,WAAW;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,cAAc,uBAAuB,CAAC,aAAa;AACrD,WAAO,gBAAAJ,MAACE,UAAA,EAAQ,KAAK,EAAE,QAAQ,mBAAmB,GAAG;AAAA,EACvD;AAEA,SACE,gBAAAF,MAACC,aAAA,EAAW,SAASG,SACnB,0BAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,WAAW,aAAa,6BAA6B;AAAA,MACvD;AAAA,MAEA,0BAAAA,MAACG,eAAA,EAAa;AAAA;AAAA,EAChB,GACF;AAEJ;;;ACZI,gBAAAE,aAAA;AA3DG,SAAS,gBAAmB,EAAE,OAAO,GAAiC;AAC3E,QAAM,QAAQ,gBAAmB;AACjC,QAAMC,YAAW,SAAS,CAAC,MAAM,EAAE,WAAW,QAAQ;AAEtD,QAAM,aAAa,MAAM,SAAS,CAAC,UAAU;AAC3C,UAAM,UAAU,SAAS,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,gBAAgB,KAAK,CAAC;AAC3E,WAAO,MAAM,gBAAgB,OAAO,KAAK,QAAQ,MAAM,CAACC,YAAW,MAAM,UAAU,IAAIA,OAAM,CAAC;AAAA,EAChG,CAAC;AAED,WAASC,QAAO,OAA0B;AACxC,UAAM,aAAa,MAAM;AAEzB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,EAAE,oBAAoB,WAAW,qBAAqB,kBAAkB;AAAA,IACjF,IAAI,MAAM,SAAS;AAEnB,QAAI;AACJ,QAAI,WAAW,YAAY,QAAQ;AACjC,YAAM,IAAI,iBAAiB,YAAY,UAAU,CAAC,MAAM,mBAAmB,EAAE,EAAE,IAAI;AACnF,YAAM,IAAI,YAAY,UAAU,CAAC,SAAS,KAAK,OAAO,MAAM;AAC5D,cAAQ,YAAY,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;AAAA,IAC9D,OAAO;AACL,YAAM,OAAO,SAAS,gBAAgB,IAAI,MAAM,IAAI;AACpD,cAAQ,OAAO,CAAC,IAAI,IAAI;AAAA,IAC1B;AAEA,UAAM,eAAe,IAAI,IAAI,SAAS;AACtC,eAAW,QAAQ,OAAO;AACxB,UAAI,WAAY,cAAa,OAAO,KAAK,EAAE;AAAA,UACtC,cAAa,IAAI,KAAK,EAAE;AAAA,IAC/B;AAEA,QAAI,sBAAsB,YAAY;AACpC,iBAAW,YAAY,aAAa,iBAAiB,GAAG,KAAK,GAAG;AAC9D,qBAAa,OAAO,QAAQ;AAAA,MAC9B;AACA,iBAAW,cAAc,eAAe,GAAG,KAAK,GAAG;AACjD,qBAAa,OAAO,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,2DAAoB;AAEpB,QAAI,CAAC,qBAAqB;AACxB,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,YAAY;AAAA,MACpB,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,iBAAiB;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,SACE,gBAAAH;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,QACH,aAAa;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT,UAAUE;AAAA;AAAA,EACZ;AAEJ;;;AL9CgF,SAsGhE,YAAAC,WAtGgE,OAAAC,OA6G9D,QAAAC,cA7G8D;AAfzE,IAAM,MAAMC,MAAK,SAASC,KAAO;AAAA,EACtC;AAAA,EACA;AACF,GAGuB;AAnBvB;AAoBE,QAAM,QAAQ,gBAAmB;AACjC,QAAM,SAASC,QAAuB,IAAI;AAC1C,QAAM,gBAAgBA,QAAuB,IAAI;AAEjD,QAAM,UAAU,SAAS,CAAC,MAAM,EAAE,OAAO;AACzC,QAAM,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM;AAEvC,QAAM,OAAO,MAAM,SAAS,CAAC,UAAU,MAAM,gBAAgB,IAAI,MAAM,CAAC;AACxE,QAAM,WAAU,WAAM,SAAS,CAAC,UAAU,MAAM,MAAM,OAAO,MAA7C,YAAmD,CAAC,UAAU,gBAAAJ,MAAC,0BAAQ,MAAO;AAC9F,QAAM,gBACJ,mCAAS,gBAAe,WAAW,QAAQ,IAAI,6BAAM,OAAO,QAAQ,IAAI,mCAAS;AACnF,QAAM,aACJ,iCAAQ,gBAAe,WAAW,OAAO,IAAI,6BAAM,OAAO,QAAQ,IAAI,iCAAQ;AAChF,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,OAAO;AAE7D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,MAAM,SAAS,CAAC,UAAU;AA7ChC,QAAAK,KAAA;AA8CI,UAAMC,QAAO,MAAM,gBAAgB,IAAI,MAAM;AAE7C,WAAO;AAAA,MACL,eAAe,GAAG,GAAG,eAAe,SAASA,SAAA,gBAAAA,MAAM,OAAO,QAAQ,CAAC;AAAA,MACnE,MAAM,QAAW,QAAQA,SAAA,gBAAAA,MAAM,OAAO,QAAQ;AAAA,MAC9C,QAAQA,QAAO,aAAa,MAAM,iBAAiBA,KAAI,EAAE,OAAO;AAAA,MAChE,aAAa,CAAC,EAACA,SAAA,gBAAAA,MAAM,SAAS;AAAA,MAC9B,qBAAqBA,WAAQ,MAAAD,MAAA,MAAM,OAAM,wBAAZ,wBAAAA,KAAkCC,MAAK;AAAA,MACpE,WAAW,MAAM,eAAe,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,MACzD,iBAAiB,MAAM,MAAM;AAAA,MAC7B,WACE,MAAM,MAAM,qBAAqB,WAC7BA,QACE,MAAM,MAAM,UAAUA,MAAK,OAAO,QAAQ,IAC1C,OACF,MAAM,MAAM;AAAA,MAClB,YACE,MAAM,MAAM,sBAAsB,WAC9BA,QACE,CAAC,CAAC,MAAM,MAAM,WAAWA,MAAK,OAAO,QAAQ,IAC7C,OACF,CAAC,CAAC,MAAM,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AAED,EAAAC,iBAAgB,MAAM;AACpB,aAAS,SAAS;AAChB,YAAM,OAAO,CAAC,UAAU;AACtB,YAAI,CAAC,OAAO,SAAS;AACnB;AAAA,QACF;AAEA,cAAM,KAAK,OAAO,QAAQ;AAC1B,cAAM,KACJ,cAAc,WAAW,SAAS,SAAS,cAAc,OAAO,IAC5D,cAAc,QAAQ,eACtB;AAEN,cAAM,WAAW,IAAI,QAAQ,KAAK,EAAE;AAAA,MACtC,CAAC;AAAA,IACH;AAEA,WAAO;AAEP,UAAM,UAAU,CAAC,OAAO,SAAS,cAAc,OAAO,EACnD,OAAO,CAAC,MAA2B,CAAC,CAAC,CAAC,EACtC,IAAI,CAAC,QAAQ;AACZ,YAAM,IAAI,IAAI,eAAe,MAAM;AACnC,QAAE,QAAQ,GAAG;AACb,aAAO,MAAM,EAAE,WAAW;AAAA,IAC5B,CAAC;AAEH,WAAO,MAAM;AACX,cAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,OAAO,SAAS,cAAc,OAAO,CAAC;AAEzD,EAAAA,iBAAgB,MAAG;AAvGrB,QAAAF,KAAA;AAuGwB,kBAAAA,MAAA,MAAM,SAAS,EAAE,OAAM,gBAAvB,wBAAAA,KAAqC,cAAc;AAAA,GAAO;AAEhF,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SACE,gBAAAL,MAACQ,aAAA,EACE,WAAC,EAAE,KAAAC,KAAI,MACN,gBAAAT,MAAAD,WAAA,EACG;AAAA,IACC;AAAA,MACE,WAAWU,KAAI;AAAA,QACb,UACI;AAAA,UACE,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,qBAAqB;AAAA,QACvB,IACA;AAAA,UACE,SAAS;AAAA,QACX;AAAA,QACJ;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MAED,UACE,gBAAAR,OAAAF,WAAA,EACE;AAAA,wBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX,KAAK,CAAC,eAAe,UAAU,IAAI;AAAA,YACnC,KAAK;AAAA;AAAA,QACP;AAAA,QAEA,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX,KAAK,CAAC,eAAe,MAAM,eAAe,WAAW,IAAI;AAAA,YAExD;AAAA,uBAAS,KAAK,gBAAAD,MAAC,SAAI,KAAK,EAAE,OAAO,SAAS,GAAG,GAAG;AAAA,cAEhD,mBAAmB,gBAAAA,MAAC,mBAAgB,QAAgB;AAAA,eAEnD,eAAe,uBAAuB,eACtC,gBAAAA,MAAC,iBAAc,QAAgB,qBAA0C;AAAA,cAG1E;AAAA;AAAA;AAAA,QACH;AAAA,QAEC,UAAU,IAAI,CAAC,aACd,gBAAAA,MAAC,cAAc,UAAd,EAAsC,OAAO,UAC5C,0BAAAA,MAAC,QAAK,QAAgB,UAAoB,KADf,QAE7B,CACD;AAAA,QAED,gBAAAA,MAAC,SAAI,WAAW,eAAe,KAAK,CAAC,eAAe,UAAU,IAAI,GAAG;AAAA,QAErE,gBAAAA,MAAC,WAAQ,KAAK,eAAe,QAAgB,UAAoB;AAAA,SACnE;AAAA,IAEJ;AAAA,IACA,KAAK;AAAA,IACL;AAAA,EACF,GACF,GAEJ;AAEJ,CAAC;;;AM1KD,SAAS,aAAAU,aAAW,mBAAAC,kBAAiB,WAAAC,WAAS,UAAAC,SAAQ,YAAAC,kBAAgB;AA4IlE,SAGc,OAAAC,OAHd,QAAAC,cAAA;AAvIJ,IAAM,iBAAiB,CAAC,MAAgC;AACtD,QAAM,SAAS,EAAE;AACjB,MAAI,CAAC,OAAQ,QAAO,SAAS;AAC7B,MAAI,OAAO,eAAe,OAAO,gBAAgB,iBAAiB,MAAM,EAAE,cAAc;AACtF,WAAO;AACT,SAAO,eAAe,MAAM;AAC9B;AAEA,IAAM,iBAAiB,CAAC,GAAgB,MAA2B;AACjE,MAAI,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,aAAc,QAAO,EAAE,YAAY,EAAE;AACjF,MAAI,EAAE,wBAAwB,YAAa,QAAO,eAAe,EAAE,cAAc,CAAC,IAAI,EAAE;AACxF,SAAO;AACT;AAEO,SAAS,YAAe,IAS+B;AAT/B,eAC7B;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EAvBF,IAoB+B,IAI1B,kBAJ0B,IAI1B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAvBF,MAAAC,KAAAC;AA8BE,QAAM,QAAQ,gBAAmB;AACjC,QAAM,UAAU,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,OAAO;AAC7D,QAAM,WAAWC,QAAuB,IAAI;AAC5C,QAAM,CAAC,EAAE,KAAK,IAAIC,WAAS,CAAC,CAAC;AAE7B,QAAM;AAAA,IACJ,UAAU,CAAC;AAAA,IACX,OAAO;AAAA,IACP;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,IAAI,MAAM;AAAA,IACR,CAAC,UAAU;AA1Cf,UAAAH;AA2CM,YAAMI,WAAU,MAAM,YAAY,IAAI,CAAC,SAAS,KAAK,EAAE;AACvD,YAAM,OAAO,SAAS,WAAW,eAAe,SAAS,OAAO;AAChE,UACE,CAAC,SAAS,WACV,CAAC,QACD,CAAC,SAAS,SAAS,IAAI,KACvB,MAAM,kBAAkB;AAExB,eAAO,CAAC;AACV,UAAI,CAAC,MAAM,MAAM,QAAS,QAAO,EAAE,SAAAA,SAAQ;AAE3C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA;AAAA,MACF,KAAKJ,MAAA,MAAM,MAAM,mBAAmB,SAAS,MAAM,MAAM,UAAU,WAA9D,OAAAA,MAA4E,CAAC;AAElF,UAAI,cAAc;AAClB,YAAM,aAAaI,SAAQ,IAAI,CAAC,QAAQ,UAAU;AA/DxD,YAAAJ,KAAAC;AAgEQ,cAAM,KACJA,OAAAD,MAAA,gCACA,MAAM,WAAW,IAAI,MAAM,MAD3B,OAAAA,MAEA,oBAFA,OAAAC,MAGC,UAAU,IAAI,MAAM,cAAc;AACrC,uBAAe;AACf,eAAO;AAAA,MACT,CAAC;AAED,YAAM,cAAc,eAAe,SAAS,SAAS,IAAI;AACzD,YAAM,eAAe,SAAS,QAAQ;AACtC,YAAM,aAAa,KAAK,YAAY,cAAc;AAClD,YAAM,gBAAgB,aAAa,KAAK,eAAe;AAEvD,UAAII,QAAO;AACX,UAAIC,MAAKF,SAAQ;AACjB,UAAIG,UAAS;AACb,UAAIC,SAAQ;AACZ,iBAAW,KAAK,YAAY;AAC1B,YAAID,UAAS,IAAI,cAAc,oCAAe,UAAW;AACzD,QAAAF;AACA,QAAAE,WAAU;AAAA,MACZ;AAEA,iBAAW,KAAK,WAAW,QAAQ,GAAG;AACpC,YAAIC,SAAQ,IAAI,cAAc,iBAAiB,0CAAkB,UAAW;AAC5E,QAAAF;AACA,QAAAE,UAAS;AAAA,MACX;AAEA,aAAO,EAAE,SAASJ,SAAQ,MAAMC,OAAMC,GAAE,GAAG,MAAAD,OAAM,IAAAC,KAAI,QAAAC,SAAQ,OAAAC,OAAM;AAAA,IACrE;AAAA,IACA,EAAE,UAAU,GAAG;AAAA,EACjB;AAEA,QAAM,kBAAkBP,OAAAD,MAAA,OAAO,YAAY,YAAY,SAAY,YAA3C,gBAAAA,IAAqD,mBAArD,OAAAC,MAAuE;AAC/F,QAAM,SAASQ,UAAQ,MAAM,SAAS,MAAM,MAAM,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC;AAExF,EAAAC,YAAU,MAAM;AAtGlB,QAAAV;AAuGI,UAAM,aAAYA,MAAA,SAAS,YAAT,gBAAAA,IAAkB;AACpC,QAAI,CAAC,UAAW;AAEhB,UAAMW,UAAS,MAAM;AACnB,YAAM,OAAO,CAAC,UAAU;AACtB,cAAM,gBAAgB,UAAU;AAAA,MAClC,CAAC;AAAA,IACH;AAEA,UAAM,KAAK,IAAI,eAAeA,OAAM;AACpC,OAAG,QAAQ,SAAS;AAEpB,WAAO,iBAAiB,UAAUA,SAAQ,IAAI;AAE9C,WAAO,MAAM;AACX,SAAG,WAAW;AACd,aAAO,oBAAoB,UAAUA,SAAQ,IAAI;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,OAAO,SAAS,OAAO,CAAC;AAE5B,EAAAD,YAAU,MAAM;AACd,QAAI,CAAC,WAAW,CAAC,SAAS,QAAS;AAEnC,WAAO,iBAAiB,UAAU,QAAQ,IAAI;AAC9C,WAAO,iBAAiB,UAAU,QAAQ,IAAI;AAC9C,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,QAAQ,IAAI;AACjD,aAAO,oBAAoB,UAAU,QAAQ,IAAI;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,EAAAA,YAAU,MAAM,OAAO,QAAQ,CAAC,MAAM,CAAC;AAEvC,EAAAE;AAAA,IACE,MAAG;AAzIP,UAAAZ,KAAAC;AAyIU,cAAAA,OAAAD,MAAA,MAAM,SAAS,EAAE,OAAM,gBAAvB,gBAAAC,IAAA,KAAAD,KAAqC,wBAAwB,IAAI,OAAO,EAAE;AAAA;AAAA,EAClF;AAEA,SACE,gBAAAD,OAAC,wCAAQ,QAAR,EACE;AAAA;AAAA,IAEA,WAAW,gBAAAD,MAAC,SAAI,OAAO,EAAE,YAAY,UAAU,QAAQ,OAAO,GAAG,KAAK,UAAU;AAAA,IAEhF,SAAS,SAAS,IAAI;AAAA,IAEtB,WAAW,gBAAAA,MAAC,SAAI,OAAO,EAAE,YAAY,UAAU,QAAQ,MAAM,GAAG;AAAA,IAEhE;AAAA,MACH;AAEJ;;;A1BjHU,SAiBN,YAAAe,WAjBM,OAAAC,OAiBN,QAAAC,cAjBM;AAfH,SAAS,MAAS,OAAmC;AAC1D,QAAM,CAAC,OAAO,UAAU,IAAI,cAAc,KAAK;AAC/C,QAAM,CAAC,YAAY,YAAY,IAAI,qBAAqB,KAAK;AAE7D,WAAe,QAAQ;AAAA;AACrB,YAAM,aAAa;AACnB,iBAAW;AAAA,IACb;AAAA;AAEA,EAAAC,iBAAgB,MAAG;AAlCrB;AAkCwB,6BAAM,SAAS,EAAE,OAAM,gBAAvB,4BAAqC;AAAA,GAAe;AAE1E,SACE,gBAAAF,MAAC,aAAa,UAAb,EAAsB,OAAO,OAC5B,0BAAAA,MAAC,kBAAkB,UAAlB,EAA2B,OAAO,OACjC,0BAAAA,MAAC,4BACC,0BAAAA,MAAC,qBAAkB,YAAwB,GAC7C,GACF,GACF;AAEJ;AAEA,SAAS,kBAAkB,EAAE,WAAW,GAA4B;AAClE,QAAM,cAAc,SAAS,CAAC,MAAM,EAAE,KAAK,OAAO;AAClD,QAAM,CAAC,aAAa,cAAc,IAAIG,WAAS,KAAK;AAEpD,EAAAC,YAAU,MAAM;AACd,UAAM,SAAS,WAAW,MAAM,eAAe,IAAI,GAAG,GAAG;AACzD,WAAO,MAAM,aAAa,MAAM;AAAA,EAClC,CAAC;AAED,SACE,gBAAAH,OAAAF,WAAA,EACG;AAAA,KAAC,cAAc,eAAe,gBAAAC,MAAC,SAAK,uBAAY;AAAA,IACjD,gBAAAA,MAAC,cAAW,QAAQ,CAAC,YAAY;AAAA,KACnC;AAEJ;AAEA,IAAM,aAAaK,MAAK,SAASC,YAAc,EAAE,OAAO,GAAwB;AAC9E,QAAM,QAAQ,gBAAmB;AACjC,QAAM,YAAY,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,SAAS;AAEjE,QAAM,iBAAiB,MAAM;AAAA,IAAS,CAAC,UACrC,MAAM,eAAe,IAAI,CAAC,YAAY;AAAA,MACpC,IAAI,OAAO;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,IACjB,EAAE;AAAA,EACJ;AAEA,QAAM,mBAAmB,MAAM,SAAS,CAAC,UAAU;AACjD,WAAO,MAAM,cAAc,KAAK,CAAC,WAAW;AAC1C,YAAM,SAAS,MAAM,QAAQ,IAAI,OAAO,EAAE;AAC1C,YAAM,cAAc,MAAM,aAAa,IAAI,OAAO,EAAE;AACpD,aAAO,WAAW,UAAa,gBAAgB,UAAa,OAAO,SAAS,WAAW;AAAA,IACzF,CAAC;AAAA,EACH,CAAC;AACD,QAAM,eAAe,MAAM,SAAS,CAAC,UAAU,MAAM,cAAc,EAAE,UAAU,GAAG,CAAC;AACnF,QAAM,YAAY,MAAM,SAAS,CAAC,UAAU,MAAM,cAAc,KAAK,CAAC,WAAW,OAAO,MAAM,CAAC;AAE/F,QAAM,UAAU,SAAS,CAAC,UAAU,MAAM,OAAO;AACjD,QAAM,SAAS,SAAS,CAAC,UAAU,MAAM,MAAM;AAC/C,QAAM,eAAe,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,YAAY;AACvE,QAAM,eAAe,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,YAAY;AAEvE,QAAM,kBAAkB,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,eAAe;AAC7E,QAAM,wBAAwB,MAAM;AAAA,IAAS,CAAC,UAC5C,MAAM,QAAQ,MAAM,MAAM,qBAAqB,IAC3C,CAAC,MAAM,eAAe,MAAM,MAAM,sBAAsB,SAAS,MAAM,WAAW,IAClF,MAAM,MAAM;AAAA,EAClB;AACA,QAAM,eAAe,MAAM;AAAA,IAAS,CAAC,UACnC,OAAO,MAAM,MAAM,iBAAiB,YAAY,EAAE,eAAe,MAAM,MAAM,gBACzE,CAAC,MAAM,eAAe,CAAC,CAAC,MAAM,MAAM,aAAa,MAAM,WAAW,IAClE,CAAC,CAAC,MAAM,MAAM;AAAA,EACpB;AACA,QAAM,eAAe,gBAAgB;AAErC,QAAM,2BAA2B,MAAM,SAAS,CAAC,UAAU,MAAM,MAAM,wBAAwB;AAE/F,EAAAJ,iBAAgB,MAAG;AA5GrB;AA4GwB,6BAAM,SAAS,EAAE,OAAM,gBAAvB,4BAAqC;AAAA,GAAqB;AAEhF,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,mCAAS;AAAA,MACpB,KAAK,CAAC,cAAc,eAAe,OAAO,iCAAQ,OAAO,UAAU,EAAE,YAAY,SAAS,CAAC;AAAA,MAC3F,OAAO;AAAA,QACL,qBAAqB;AAAA;AAAA,UAEnB,cAAc,WAAW,cAAc,OAAO,SAAS;AAAA,UACvD;AAAA,UACA,GAAG,eAAe;AAAA,YAChB,CAAC,WAAQ;AAxHrB;AAwHwB,8CAAa,IAAI,OAAO,EAAE,MAA1B,YAA+B,OAAO,UAAtC,YAA+C;AAAA;AAAA,UAC7D;AAAA,UACA,cAAc,UAAU,cAAc,OAAO,SAAS;AAAA,QACxD,EAAE,KAAK,GAAG;AAAA,MACZ;AAAA,MACA,QACE,gBAAAC,OAAAF,WAAA,EACE;AAAA,wBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,mCAAS;AAAA,YACpB,KAAK;AAAA,cACH,EAAE,YAAY,EAAE;AAAA,cAChB,eAAe;AAAA,cACf,gBAAgB,eAAe;AAAA,cAC/B,wBAAwB,UAAU;AAAA,cAClC,iCAAQ;AAAA,YACV;AAAA;AAAA,QACF;AAAA,QAEA,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,mCAAS;AAAA,YACpB,KAAK;AAAA,cACH,EAAE,YAAY,EAAE;AAAA,cAChB,eAAe;AAAA,cACf,gBAAgB,eAAe;AAAA,cAC/B,wBAAwB,UAAU;AAAA,cAClC,iCAAQ;AAAA,YACV;AAAA,YAEC;AAAA,iCAAmB,gBAAAD,MAAC,mBAAgB;AAAA,cAEpC,yBAAyB,gBAAAA,MAAC,mBAAgB;AAAA,cAE1C,gBAAgB,gBAAAA,MAACO,SAAA,EAAO;AAAA,eAEvB,mBAAmB,yBAAyB,iBAC5C,gBAAAN,OAAAF,WAAA,EACE;AAAA,gCAAAC,MAAC,SAAI,KAAK,EAAE,MAAM,EAAE,GAAG;AAAA,gBACvB,gBAAAA,MAAC,oBAAiB;AAAA,iBACpB;AAAA;AAAA;AAAA,QAEJ;AAAA,QAEA,gBAAAA,MAAC,oBAAoB,UAApB,EACE,yBAAe,IAAI,CAAC,WACnB,gBAAAA,MAAC,cAAc,UAAd,EAAuC,OAAO,OAAO,IACpD,0BAAAA,MAAC,gBAAa,KADa,OAAO,EAEpC,CACD,GACH;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,mCAAS;AAAA,YACpB,KAAK;AAAA,cACH,eAAe;AAAA,cACf,gBAAgB,eAAe;AAAA,cAC/B,wBAAwB,UAAU;AAAA,cAClC,iCAAQ;AAAA,YACV;AAAA;AAAA,QACF;AAAA,SACF;AAAA,MAEF,QACE,gBAAAC,OAAAF,WAAA,EACG;AAAA,oCAA4B,oBAAoB,gBAAAC,MAAC,sBAAmB;AAAA,QACpE,aACC,gBAAAC,OAAAF,WAAA,EACE;AAAA,0BAAAC;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,mCAAS;AAAA,cACpB,KAAK;AAAA,gBACH,EAAE,YAAY,EAAE;AAAA,gBAChB,eAAe;AAAA,gBACf,gBAAgB,eAAe;AAAA,gBAC/B,wBAAwB,UAAU;AAAA,gBAClC,iCAAQ;AAAA,cACV;AAAA;AAAA,UACF;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,mCAAS;AAAA,cACpB,KAAK;AAAA,gBACH,eAAe;AAAA,gBACf,gBAAgB,eAAe;AAAA,gBAC/B,wBAAwB,UAAU;AAAA,gBAClC,iCAAQ;AAAA,cACV;AAAA;AAAA,UACF;AAAA,UAEC,eAAe,IAAI,CAAC,WACnB,gBAAAA,MAAC,cAAc,UAAd,EAAuC,OAAO,OAAO,IACpD,0BAAAA,MAAC,gBAAa,KADa,OAAO,EAEpC,CACD;AAAA,UAED,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,mCAAS;AAAA,cACpB,KAAK;AAAA,gBACH,eAAe;AAAA,gBACf,gBAAgB,eAAe;AAAA,gBAC/B,wBAAwB,UAAU;AAAA,gBAClC,iCAAQ;AAAA,cACV;AAAA;AAAA,UACF;AAAA,WACF;AAAA,SAEJ;AAAA,MAGD,WAAC,SAAS,eACT,QAAQ,IAAI,CAAC,QAAQ,UACnB,gBAAAA,MAAC,OAAiB,QAAgB,UAAU,aAAa,SAA/C,MAAsD,CACjE;AAAA;AAAA,EAEL;AAEJ,CAAC;;;A2BzOM,IAAM,YAAY,CAAC,MAAc,UAA2B;AACjE,SAAO,KAAK,YAAY;AACxB,UAAQ,MAAM,YAAY;AAC1B,SAAO,MAAM,MAAM,KAAK,EAAE,MAAM,CAAC,SAAS,UAAU,MAAM,IAAI,CAAC;AACjE;AAEO,IAAM,YAAY,CAAC,MAAc,UAA2B;AACjE,MAAI,IAAI;AACR,QAAO,YAAW,QAAQ,OAAO;AAC/B,WAAO,IAAI,KAAK,QAAQ,KAAK;AAC3B,UAAI,KAAK,CAAC,MAAM,MAAM;AACpB;AACA,iBAAS;AAAA,MACX;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AC+B6D,gBAAAQ,aAAA;AA1CtD,SAAS,WAAgC,IAWyB;AAXzB,eAC9C;AAAA,cAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,EAVF,IAOgD,IAI3C,kBAJ2C,IAI3C;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AASA,QAAMC,cAAa,SAAS,CAAC,MAAM,EAAE,WAAW,UAAU;AAC1D,QAAMC,UAAS,SAAS,CAAC,MAAM,EAAE,MAAM,MAAM;AAC7C,QAAMC,SAAQ,SAAS,CAAC,MAAM,EAAE,MAAM,KAAK;AAE3C,QAAM,EAAE,QAAQ,IAAI,SAAS,IAAI,UAAU,iCACtC,QADsC;AAAA,IAEzC;AAAA,IAEA,IAAI;AAAA,IAEJ,SAAS,aAAa;AACpB,aAAO,CAAC,CAAC;AAAA,IACX;AAAA,IAEA,KAAK,aAAaC,QAAO;AACvB,aAAO,QAAQA,QAAO,WAAW;AAAA,IACnC;AAAA,EACF,EAAC;AAED,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,UAChD,SACE,gBAAAA,MAACC,aAAA,EAAW,SAAS,MAAM,SAAS,EAAE,GAAI,WAAC,QAAQ,gBAAAD,MAACE,SAAA,EAAO,IAAK,gBAAAF,MAACG,QAAA,EAAM,GAAG;AAAA,UAE5E;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":["useContext","useContext","className","jsx","jsxs","jsx","jsxs","jsx","jsxs","className","jsx","jsx","jsxs","className","_a","css","jsx","jsxs","css","createContext","useContext","jsx","useContext","memo","_a","_b","column","theme","createContext","useMemo","useState","flatMap","_a","_b","className","jsx","jsxs","createContext","Popover","useState","filter","useMemo","IconButton","FilterList","ArrowDropDown","jsx","TextField","useContext","useContext","useLayoutEffect","useMemo","useRef","useState","useMemo","useState","useRef","useLayoutEffect","value","onChange","useContext","jsx","_a","FilterList","_b","Button","Fragment","createContext","useContext","useEffect","useMemo","useState","useMemo","useState","jsx","value","Fragment","jsx","Fragment","useMemo","useState","jsx","className","defaultDate","isIncludedType","defaultLengths","maxLengths","length","tabNext","value","Fragment","jsx","jsxs","createContext","useMemo","useContext","value","Button","IconButton","ChevronRight","today","useState","_a","useEffect","min","max","jsx","value","useState","jsx","asNumber","TextField","useState","jsx","jsxs","minValue","maxValue","value","_a","_b","min","max","useEffect","useMemo","useState","jsx","jsxs","useEffect","useMemo","useRef","useState","jsx","jsxs","_a","_b","useRef","useState","useMemo","useEffect","jsx","jsxs","IconButton","Checkbox","Search","Clear","value","column","useState","useMemo","Button","useEffect","memo","useEffect","useLayoutEffect","useState","useEffect","useState","value","useState","useEffect","applyUpdate","_a","_b","id","key","castDraft","useEffect","useMemo","useState","castDraft","useEffect","useEffect","state","sort","column","items","value","id","castDraft","useMemo","overrides","useMemo","_a","id","defaults","overrides","useEffect","useEffect","state","useEffect","useEffect","state","useEffect","useEffect","useEffect","castDraft","useEffect","useEffect","state","castDraft","useState","useMemo","useEffect","state","castDraft","jsx","Button","jsx","column","castDraft","useEffect","useRef","jsx","className","_a","jsx","jsxs","Badge","ArrowUpward","index","column","toggle","jsx","jsxs","useRef","column","useEffect","castDraft","_a","_b","index","useContext","useState","Fragment","jsx","jsxs","IconButton","Popover","Checkbox","Button","Settings","useContext","useState","toggle","column","state","useContext","useState","Fragment","jsx","jsxs","Export","useContext","Button","IconButton","Popover","Clipboard","useState","ClassNames","memo","useLayoutEffect","useRef","useLayoutEffect","jsx","Cell","column","useLayoutEffect","_a","className","jsx","Details","className","css","jsx","IconButton","Spinner","ChevronRight","toggle","jsx","Checkbox","itemId","toggle","Fragment","jsx","jsxs","memo","Row","useRef","_a","item","useLayoutEffect","ClassNames","css","useEffect","useLayoutEffect","useMemo","useRef","useState","jsx","jsxs","_a","_b","useRef","useState","itemIds","from","to","before","after","useMemo","useEffect","update","useLayoutEffect","Fragment","jsx","jsxs","useLayoutEffect","useState","useEffect","memo","TableInner","Export","jsx","IconButton","Search","Clear","value"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/autoFocusTextField.tsx","../src/hooks/useTheme.ts","../src/misc/tableContext.ts","../src/theme/defaultTheme/defaultColors.ts","../src/components/spinnner.tsx","../src/theme/defaultTheme/badge.tsx","../src/theme/defaultTheme/button.tsx","../src/theme/defaultTheme/checkbox.tsx","../src/theme/defaultTheme/iconButton.tsx","../src/theme/defaultTheme/textField.tsx","../src/theme/defaultTheme/defaultComponents.ts","../src/theme/defaultTheme/defaultIcons.tsx","../src/theme/defaultTheme/defaultTexts.tsx","../src/theme/defaultTheme/index.tsx","../src/hooks/useTableMemo.tsx","../src/components/filterControl.tsx","../src/misc/helpers.ts","../src/theme/useCssVariables.ts","../src/hooks/useFilter.ts","../src/misc/debounce.ts","../src/components/combinedFilter.tsx","../src/components/datePicker.tsx","../src/misc/defaults.ts","../src/components/dateInput.tsx","../src/components/text.tsx","../src/components/timeInput.tsx","../src/components/dateFilter.tsx","../src/components/numberField.tsx","../src/components/rangeFilter.tsx","../src/components/selectFilter.tsx","../src/components/formControlLabel.tsx","../src/components/virtualList.tsx","../src/misc/throttle.ts","../src/components/table.tsx","../src/internalState/tableStateStorage.ts","../src/misc/queue.ts","../src/internalState/useTableState.ts","../src/internalState/calcItems.ts","../src/internalState/calcProps.ts","../src/exporters/serializer.ts","../src/misc/overrides.ts","../src/internalState/cleanupState.ts","../src/internalState/filterColumns.ts","../src/internalState/normalizeExpanded.ts","../src/internalState/syncSelections.ts","../src/internalState/watchDisplaySize.ts","../src/components/clearFiltersButton.tsx","../src/components/columnFooter.tsx","../src/components/columnHeader.tsx","../src/components/resizeHandle.tsx","../src/components/sortComponent.tsx","../src/components/columnSelection.tsx","../src/components/export.tsx","../src/components/row.tsx","../src/misc/calcClassNames.ts","../src/components/cell.tsx","../src/components/details.tsx","../src/components/expandControl.tsx","../src/components/selectComponent.tsx","../src/components/virtualized.tsx","../src/misc/textMatch.ts","../src/components/textFilter.tsx"],"sourcesContent":["import type { ComponentType } from 'react';\nimport { useContext, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\nimport { FilterControlContext } from './filterControl';\n\ntype Props = TableTheme['components']['TextField'] extends ComponentType<infer T> ? T : never;\n\nexport function AutoFocusTextField(props: Omit<Props, 'inputRef'>) {\n const TextField = useTheme((t) => t.components.TextField);\n\n const ref = useRef<HTMLInputElement>(null);\n const { isActive } = useContext(FilterControlContext);\n\n useLayoutEffect(() => {\n if (isActive && ref.current) {\n ref.current.focus();\n }\n }, [isActive]);\n\n return (\n <TextField\n {...props}\n inputRef={ref}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useContext } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { ColumnContext, TableContext } from '../misc/tableContext';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { globalTableTheme, mergeThemes } from '../theme/tableTheme';\nimport type { MemoizedTableTheme, TableTheme } from '../types';\nimport { useTableMemo } from './useTableMemo';\nimport { TableSettingsContext } from '../misc/tableSettings';\n\nconst emptyStore = new Store(undefined);\n\nexport function useTheme<T, S>(selector: (theme: MemoizedTableTheme<T>) => S): S {\n const { theme: contextTableTheme = {} } = useContext(TableSettingsContext);\n const table = useContext(TableContext);\n const columnId = useContext(ColumnContext);\n const memo = useTableMemo();\n const _globalTableTheme = globalTableTheme.useState();\n\n const process = (t: TableTheme<T>): MemoizedTableTheme<T> => {\n const rowClass = t.classes?.row;\n const rowStyles = t.styles?.row;\n const cellClass = t.classes?.cell;\n const cellStyles = t.styles?.cell;\n const detailsClass = t.classes?.details;\n const detailsStyles = t.styles?.details;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n row:\n rowClass instanceof Function || Array.isArray(rowClass)\n ? memo('theme.classes.row', rowClass)\n : rowClass,\n cell:\n cellClass instanceof Function || Array.isArray(cellClass)\n ? memo('theme.classes.cell', cellClass)\n : cellClass,\n details:\n detailsClass instanceof Function || Array.isArray(detailsClass)\n ? memo('theme.classes.details', detailsClass)\n : detailsClass,\n },\n styles: {\n ...t.styles,\n row:\n rowStyles instanceof Function || Array.isArray(rowStyles)\n ? memo('theme.styles.row', rowStyles)\n : rowStyles,\n cell:\n cellStyles instanceof Function || Array.isArray(cellStyles)\n ? memo('theme.styles.cell', cellStyles)\n : cellStyles,\n details:\n detailsStyles instanceof Function || Array.isArray(detailsStyles)\n ? memo('theme.styles.details', detailsStyles)\n : detailsStyles,\n },\n text: {\n ...t.text,\n },\n };\n };\n\n const theme =\n table?.useState((state) => {\n const localTheme = {\n text: state.props.text,\n classes: state.props.classes,\n styles: state.props.styles,\n components: state.props.components,\n icons: state.props.icons,\n colors: state.props.colors,\n spacing: state.props.spacing,\n };\n\n const column = state.activeColumns.find((column) => column.id === columnId);\n const columnsTheme = {\n classes: column?.classes,\n styles: column?.styles,\n };\n\n const theme = mergeThemes(\n defaultTableTheme,\n _globalTableTheme,\n contextTableTheme,\n localTheme,\n columnsTheme,\n ) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(\n process(\n mergeThemes(defaultTableTheme, _globalTableTheme, contextTableTheme) as TableTheme<T>,\n ),\n );\n\n return theme;\n}\n","import { createContext, useContext } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { Id, InternalTableState } from '../types';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\n\nexport const TableResetContext = createContext<() => void>(() => undefined);\n\nexport const ColumnContext = createContext<Id | null>(null);\n\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw new Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\n\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw new Error('No column context available');\n return value;\n}\n","import type { TableTheme } from '../../types';\n\nexport const defaultColors: TableTheme['colors'] = {\n primary: { main: '#1976d2', light: '#42a5f5', contrastText: '#fff' },\n secondary: { main: '#9c27b0', light: '#ba68c8', contrastText: '#fff' },\n blocked: { main: '#f44336', light: '#f26257', contrastText: '#fff' },\n background: '#ffffff',\n text: 'inherit',\n border: '#777',\n borderLight: '#eee',\n};\n","import { css } from '@emotion/react';\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <div\n className={className}\n css={css`\n display: inline-block;\n position: relative;\n width: 1em;\n height: 1em;\n\n div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 0.8em;\n height: 0.8em;\n margin: 0.1em;\n border: 0.1em solid #fff;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n div:nth-of-type(1) {\n animation-delay: -0.45s;\n }\n div:nth-of-type(2) {\n animation-delay: -0.3s;\n }\n div:nth-of-type(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n `}\n >\n <div />\n <div />\n <div />\n </div>\n );\n}\n","import type { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\n return (\n <span\n css={{\n display: 'inline-flex',\n position: 'relative',\n flexShrink: 0,\n verticalAlign: 'middle',\n }}\n >\n {children}\n\n <span\n css={[\n {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n height: 20,\n display: 'flex',\n padding: '0 6px',\n zIndex: 1,\n position: 'absolute',\n flexWrap: 'wrap',\n minWidth: 20,\n transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n alignItems: 'center',\n lineHeight: 1,\n alignContent: 'center',\n borderRadius: 10,\n justifyContent: 'center',\n fontSize: '0.8em',\n },\n !badgeContent && {\n transform: 'scale(0) translate(50%, -50%)',\n transition: 'transform 195ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n },\n ]}\n >\n {badgeContent}\n </span>\n </span>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const Button: TableTheme['components']['Button'] = ({\n startIcon,\n children,\n variant = 'text',\n ...props\n}) => {\n return (\n <button\n css={[\n {\n padding: `var(--spacing) calc(var(--spacing) * 2)`,\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n borderRadius: 4,\n\n '&:active:not(:disabled)': {\n transform: 'scale3d(0.95, 0.95, 1)',\n },\n },\n variant === 'text' && {\n '&:hover': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n },\n variant === 'outlined' && {\n border: '1px solid var(--table-button-border, var(--table-border, #777777))',\n\n '&:disabled': {\n borderColor: 'var(--table-button-border-disabled, #eeeeee)',\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow:\n '0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)',\n\n '&:hover': {\n filter: 'brightness(0.9)',\n },\n\n '&:disabled': {\n filter: 'grayscale()',\n opacity: 0.5,\n },\n },\n ]}\n {...props}\n >\n {startIcon && <span css={{ marginRight: `calc(var(--spacing) * 2)` }}>{startIcon}</span>}\n <span>{children}</span>\n </button>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const Checkbox: TableTheme['components']['Checkbox'] = ({ className, ...props }) => {\n return (\n <label\n css={[\n {\n padding: 'calc(var(--spacing) * 1.8)',\n display: 'flex',\n color: 'currentcolor',\n userSelect: 'none',\n\n '& input': {\n appearance: 'none',\n margin: 0,\n },\n },\n props.disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n className={className}\n >\n <input type=\"checkbox\" {...props} />\n\n {props.checked ? (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'var(--primaryMain)' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n </svg>\n ) : (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'currentColor' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"></path>\n </svg>\n )}\n </label>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const IconButton: TableTheme['components']['IconButton'] = (props) => {\n return (\n <button\n css={{\n padding: 'var(--spacing)',\n borderRadius: '50%',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n background: 'transparent',\n\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n\n '&:active': {\n transformColor: 'scale3d(0.95, 0.95, 1)',\n },\n }}\n {...props}\n />\n );\n};\n","import { useState } from 'react';\nimport type { TableTheme } from '../../types';\n\nexport const TextField: TableTheme['components']['TextField'] = ({\n startIcon,\n endIcon,\n className,\n inputRef,\n onBlur,\n ...props\n}) => {\n const [focus, setFocus] = useState(false);\n\n return (\n <div\n className={className}\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: '1px solid var(--table-textfield-border, var(--table-border, #777777))',\n borderRadius: 4,\n },\n focus && { border: '2px solid var(--primaryMain)', margin: -1 },\n ]}\n >\n {startIcon}\n\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onFocus={() => setFocus(true)}\n onBlur={(event) => {\n setFocus(false);\n onBlur?.(event);\n }}\n css={{\n minWidth: 0,\n width: '100%',\n flex: 1,\n border: 'none',\n outline: 'none',\n borderRadius: 4,\n padding: 'calc(var(--spacing) * 2)',\n paddingLeft: startIcon ? 0 : undefined,\n paddingRight: endIcon ? 0 : undefined,\n transition: 'outline 500ms',\n }}\n />\n\n {endIcon}\n </div>\n );\n};\n","import { Spinner } from '../../components/spinnner';\nimport type { TableTheme } from '../../types';\nimport { Badge } from './badge';\nimport { Button } from './button';\nimport { Checkbox } from './checkbox';\nimport { IconButton } from './iconButton';\nimport { Popover } from './popover';\nimport { TextField } from './textField';\n\nexport const defaultComponents: TableTheme['components'] = {\n IconButton,\n Checkbox,\n Popover,\n Button,\n Badge,\n TextField,\n Spinner,\n};\n","import { ClassNames, css } from '@emotion/react';\nimport type { HTMLProps } from 'react';\nimport { cloneElement } from 'react';\nimport type { TableTheme } from '../../types';\n\nconst IconDefaultStyle = css({\n width: '1.5em',\n height: '1.5em',\n color: 'inherit',\n});\n\nfunction Icon(svg: JSX.Element) {\n return function IconComponent(props: HTMLProps<Element>) {\n return (\n <ClassNames>\n {({ css }) =>\n cloneElement(svg, {\n ...props,\n className: css(IconDefaultStyle, props.className),\n })\n }\n </ClassNames>\n );\n };\n}\n\nconst Settings = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\" />\n </svg>,\n);\n\nconst Export = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n enableBackground=\"new 0 0 24 24\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <g>\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n </g>\n <g>\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M17,11l-1.41-1.41L13,12.17V4h-2v8.17L8.41,9.59L7,11l5,5 L17,11z\" />\n </g>\n </svg>,\n);\n\nconst Clipboard = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>,\n);\n\nconst ChevronRight = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\" />\n </svg>,\n);\n\nconst Search = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>,\n);\n\nconst Clear = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>,\n);\n\nconst ArrowDropDown = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>,\n);\n\nconst FilterList = Icon(\n <svg viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z\"\n />\n </svg>,\n);\n\nconst ArrowUpward = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>,\n);\n\nexport const defaultIcons: TableTheme['icons'] = {\n Settings,\n Export,\n Clipboard,\n ChevronRight,\n Search,\n Clear,\n ArrowDropDown,\n FilterList,\n ArrowUpward,\n};\n","import type { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n};\n","import type { TableTheme } from '../../types';\nimport { defaultColors } from './defaultColors';\nimport { defaultComponents } from './defaultComponents';\nimport { defaultIcons } from './defaultIcons';\nimport { defaultTexts } from './defaultTexts';\n\nexport const defaultTableTheme: TableTheme = {\n text: defaultTexts,\n components: defaultComponents,\n icons: defaultIcons,\n colors: defaultColors,\n spacing: '5px',\n};\n","import type { DependencyList, ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { FunctionWithDeps } from '../types';\n\nconst TableMemoContext = createContext(new Map<string, [value: any, deps: DependencyList]>());\n\nexport function TableMemoContextProvider({ children }: { children: ReactNode }) {\n return (\n <TableMemoContext.Provider value={useMemo(() => new Map(), [])}>\n {children}\n </TableMemoContext.Provider>\n );\n}\n\nexport function useTableMemo() {\n const memoCache = useContext(TableMemoContext);\n\n return <Function_ extends (...args: any[]) => any>(\n key: string,\n function_: FunctionWithDeps<Function_>,\n ): Function_ => {\n let deps: DependencyList;\n if (Array.isArray(function_)) {\n deps = function_.slice(1);\n function_ = function_[0];\n } else {\n deps = [function_.toString()];\n }\n\n let cachedValue = memoCache.get(key);\n const hit =\n cachedValue &&\n cachedValue[1].length === deps.length &&\n cachedValue[1].every((x, i) => x === deps[i]);\n if (!cachedValue || !hit) {\n cachedValue = [function_, deps];\n memoCache.set(key, cachedValue);\n }\n return cachedValue[0];\n };\n}\n","import { createContext, useMemo, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport interface FilterControlButtonProps {\n onClick?: (event: React.MouseEvent<Element>) => void;\n onContextMenu?: (event: React.MouseEvent<Element>) => void;\n isActive?: boolean;\n}\n\nexport interface FilterControlProps {\n component?: React.ElementType<FilterControlButtonProps>;\n onClose?: () => void;\n}\n\nexport const FilterControlContext = createContext({\n isActive: false,\n close: (): void => undefined,\n});\n\nexport function FilterControl<T>({\n component: Component = DefaultButton,\n onClose,\n}: FilterControlProps): JSX.Element | null {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Popover = useTheme((t) => t.components.Popover);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const isActive = table.useState((state) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n const filterClassNames = table.useState((state) => {\n const filter = state.filters.get(columnId);\n return filter?.classNames;\n });\n const filter = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.filter,\n );\n\n function reset() {\n const impl = table.getState().filters.get(columnId);\n\n impl?.onChange?.(undefined);\n\n if (impl?.value === undefined) {\n table.update((state) => {\n state.filterValues.delete(columnId);\n });\n }\n }\n\n const context = useMemo(\n () => ({\n isActive: !!anchor,\n close: () => setAnchor(null),\n }),\n [anchor],\n );\n\n if (!filter) return null;\n\n return (\n <FilterControlContext.Provider value={context}>\n <Component\n onClick={(event) => setAnchor(event.currentTarget)}\n onContextMenu={(event) => {\n reset();\n event.preventDefault();\n return false;\n }}\n isActive={isActive}\n />\n\n <div\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n onPointerMove={(event) => {\n event.stopPropagation();\n }}\n >\n <Popover\n open\n hidden={!anchor}\n onClose={() => {\n setAnchor(null);\n onClose?.();\n }}\n anchorEl={anchor ?? document.body}\n css={cssVariables}\n className={cx(classes?.popover, filterClassNames?.popover)}\n backdropClassName={cx(classes?.popoverBackdrop, filterClassNames?.popoverBackdrop)}\n >\n {filter}\n </Popover>\n </div>\n </FilterControlContext.Provider>\n );\n}\n\nfunction DefaultButton({ isActive, ...props }: FilterControlButtonProps) {\n const IconButton = useTheme((t) => t.components.IconButton);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const ArrowDropDown = useTheme((t) => t.icons.ArrowDropDown);\n\n return (\n <IconButton\n {...props}\n css={[\n { color: '#b0bac9' },\n isActive && {\n color: 'var(--primaryMain) !important',\n },\n ]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n );\n}\n","import type { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(array: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...array].flatMap(flatMap);\n};\n\nexport const orderBy = <T>(\n array: T[],\n selectors: ((t: T) => any)[] = [],\n direction: ('desc' | 'asc')[] = [],\n): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...array].sort((a, b) => {\n for (let i = 0; i < selectors.length; i++) {\n const _a = selectors[i]?.(a);\n const _b = selectors[i]?.(b);\n const _direction = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (Array.isArray(x)) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n\ntype Falsy = false | 0 | '' | null | undefined;\nexport function isTruthy<T>(x: T): x is Exclude<T, Falsy> {\n return !!x;\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n '--table-background-color': colors.background,\n '--table-text-color': colors.text,\n '--table-border-color': colors.border,\n '--table-border-light-color': colors.borderLight,\n };\n });\n}\n","import { castDraft } from 'immer';\nimport { nanoid } from 'nanoid';\nimport { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { FilterControlContext } from '../components/filterControl';\nimport { debounce } from '../misc/debounce';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { FilterImplementation } from '../types';\nimport { useTableMemo } from './useTableMemo';\n\nexport function useFilter<TItem, TColumnValue, TFilterBy, TFilterValue>(\n impl: FilterImplementation<TItem, TColumnValue, TFilterBy, TFilterValue>,\n) {\n const table = useTableContext<TItem>();\n const columnId = useColumnContext();\n const cache = useTableMemo();\n const cacheId = useMemo(() => nanoid(), []);\n const filterBy = impl.filterBy && cache(cacheId, impl.filterBy);\n\n // On mount and reset: Fire onChange\n useEffect(() => {\n if (impl.value === undefined) {\n impl.onChange?.(impl.defaultValue);\n }\n }, [table]);\n\n // Update implementation\n useEffect(() => {\n table.update((state) => {\n if (impl.defaultValue !== undefined) {\n state.filterValues.set(columnId, impl.defaultValue);\n }\n });\n }, [table]);\n\n useEffect(() => {\n table.update((state) => {\n state.filters.set(columnId, castDraft({ ...impl, filterBy }));\n\n if (impl.value !== undefined) {\n state.filterValues.set(columnId, impl.value);\n }\n });\n\n return () => {\n table.update((state) => {\n state.filters.delete(columnId);\n });\n };\n }, [table, columnId, impl]);\n\n // Track local value and update it globally after delay\n const value = table.useState(\n (state) => state.filterValues.get(columnId) as TFilterValue | undefined,\n );\n const [dirtyValue, setDirtyValue] = useState<TFilterValue>();\n const implRef = useRef(impl);\n\n useLayoutEffect(() => {\n implRef.current = impl;\n });\n\n const delayedUpdate = useMemo(\n () =>\n debounce((value?: TFilterValue) => {\n const { value: controlledValue, onChange } = implRef.current;\n\n if (controlledValue === undefined) {\n table.update((state) => {\n state.filterValues.set(columnId, value);\n });\n }\n\n onChange?.(value);\n setDirtyValue(undefined);\n }, 500),\n [table],\n );\n\n function onChange(value?: TFilterValue) {\n setDirtyValue(value);\n delayedUpdate(value);\n }\n\n useEffect(() => delayedUpdate.flush(), [delayedUpdate]);\n\n const context = useContext(FilterControlContext);\n\n return {\n value: dirtyValue ?? value,\n onChange,\n filterBy: filterBy ?? ((x) => x as unknown as TFilterBy | TFilterBy[]),\n ...context,\n };\n}\n","export function debounce<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void } {\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n lastArgs = undefined;\n timeout = undefined;\n\n function_(...(args as Args));\n }\n\n return Object.assign(\n function (...args: Args) {\n lastArgs = args;\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(run, ms);\n },\n {\n flush() {\n if (timeout) {\n clearTimeout(timeout);\n run();\n }\n },\n },\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { ColumnContext, useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { FilterControl, type FilterControlButtonProps } from './filterControl';\n\nexport interface CombinedFilterProps\n extends Pick<CommonFilterProps<any, any, any, any>, 'classNames'> {\n columnIds?: string[];\n}\n\nexport default function CombinedFilter({\n columnIds: inputColumnIds,\n ...props\n}: CombinedFilterProps) {\n const table = useTableContext();\n\n const columnIds = table.useState((state) => {\n return (\n inputColumnIds ??\n state.activeColumns\n .filter(\n (column) =>\n column.filter !== undefined && !state.visibleColumns.some((c) => c.id === column.id),\n )\n .map((column) => column.id)\n );\n });\n\n const isActive = table.useState((state) => {\n return columnIds.some((columnId) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n\n useFilter({\n ...props,\n\n id: 'combinedFilter',\n\n value: isActive,\n\n isActive(filterValue) {\n return filterValue;\n },\n\n test() {\n return true;\n },\n\n onChange(value) {\n if (value === undefined) {\n for (const columnId of columnIds) {\n const impl = table.getState().filters.get(columnId);\n\n impl?.onChange?.(undefined);\n\n if (impl?.value === undefined) {\n table.update((state) => {\n state.filterValues.delete(columnId);\n });\n }\n }\n }\n },\n });\n\n return (\n <div>\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <FilterControl component={Filter} />\n </ColumnContext.Provider>\n ))}\n </div>\n );\n}\n\nfunction Filter({ isActive, ...props }: FilterControlButtonProps) {\n const table = useTableContext();\n const columnId = useColumnContext();\n const FilterList = useTheme((t) => t.icons.FilterList);\n const label = table.useState((state) => {\n return state.activeColumns.find((column) => column.id === columnId)?.header ?? null;\n });\n const Button = useTheme((t) => t.components.Button);\n\n return (\n <Button\n {...props}\n startIcon={\n <FilterList\n css={{\n color: isActive ? 'var(--primaryMain)' : '#b0bac9',\n }}\n />\n }\n css={{\n width: '100%',\n color: isActive ? 'var(--primaryMain)' : 'var(--color-text)',\n }}\n >\n {label}\n </Button>\n );\n}\n","import { DateObj, useDayzed } from 'dayzed';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { Interpolation, Theme } from '@emotion/react';\nimport { TimeInput, type TimeInputProps } from './timeInput';\n\nexport type DateRange = { min: Date; max: Date };\n\nexport type DatePickerQuickOption =\n | 'today'\n | 'thisWeek'\n | 'thisMonth'\n | 'thisYear'\n | 'lastSevenDays'\n | 'lastThirtyDays'\n | { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }\n | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);\n\nexport type DatePickerChangeSource = 'input' | 'calendarWeek' | 'calendar' | 'quickOption';\n\nexport type DatePickerProps = {\n /** Currently selected day or range of days. */\n value: Date | DateRange | null;\n /** Callback for when the day (range) changes. */\n onChange: (value: Date | DateRange | null, source: DatePickerChangeSource) => void;\n /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n noReset?: boolean;\n /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n /** Whether to show and allow editing of time */\n showTime?: boolean | { showSeconds?: boolean };\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) =>\n new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff + delta * 7);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const endOfWeek = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + (7 - (date.getDay() || 7)),\n );\n\n const year = endOfWeek.getFullYear();\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfYear =\n Math.floor(\n (endOfWeek.getTime() -\n firstDayOfYear.getTime() +\n (endOfWeek.getTimezoneOffset() - firstDayOfYear.getTimezoneOffset())) /\n MS_PER_DAY,\n ) + 1;\n const weekOfYear = Math.floor((3 + dayOfYear) / 7);\n\n if (weekOfYear === 0) {\n return (\n getCalendarWeek(\n new Date(endOfWeek.getFullYear(), endOfWeek.getMonth(), endOfWeek.getDate() - 7),\n ) + 1\n );\n }\n\n return weekOfYear;\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: (props) => thisWeek(0, props.firstDayOfWeek) },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: () => thisMonth() },\n thisYear: { label: <Text id=\"thisYear\" />, value: () => thisYear() },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: () => lastDays(7) },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: () => lastDays(30) },\n} satisfies Record<\n DatePickerQuickOption & string,\n { label: ReactNode; value: Date | DateRange | ((props: DatePickerProps) => Date | DateRange) }\n>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(\n a: Date | DateRange | null | undefined,\n b: Date | DateRange | null | undefined,\n) {\n if (a instanceof Date) {\n a = { min: a, max: a };\n }\n if (b instanceof Date) {\n b = { min: b, max: b };\n }\n\n if (!a?.min || !a.max || !b?.min || !b.max) {\n return false;\n }\n\n return !(endOfDay(a.max) < startOfDay(b.min) || startOfDay(a.min) > endOfDay(b.max));\n}\n\nexport function dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n noReset,\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n showTime,\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null, source: DatePickerChangeSource) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value, source);\n }\n\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n color: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: 'var(--date-picker-disemphasized, #bdbdbd)',\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<DateRange>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n const resolvedQuickOptions = [\n ...quickOptions,\n ...(noReset ? [] : [{ label: <Text id=\"reset\" />, value: null }]),\n ].map((option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value, 'quickOption');\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n type=\"button\"\n css={{\n color: 'inherit',\n }}\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props), 'quickOption');\n } else {\n onChange(value, 'quickOption');\n }\n }}\n >\n {label}\n </Button>\n );\n });\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null ? defaultDateInView ?? mountTime : value instanceof Date ? value : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(source: DatePickerChangeSource, min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null, source);\n return;\n }\n\n if (min && max && min > max) {\n if (edit === 'min') {\n max = min;\n } else if (edit === 'max') {\n min = max;\n } else {\n [min, max] = [max, min];\n }\n }\n\n if (!min === !max) {\n setDirty(undefined);\n onChange(min && max ? { min, max: endOfDay(max) } : null, source);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div\n css={[\n cssVariables,\n {\n color: 'var(--table-text-color)',\n },\n ]}\n >\n <div\n css={{\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 'calc(var(--spacing) * 4)',\n\n '& > div': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n }}\n >\n <div>\n <DateInput\n value={min ?? null}\n onChange={(date) => set('input', date ?? undefined, max, 'min')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={min ?? null}\n onChange={(date) => set('input', date ?? undefined, max, 'min')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n\n {rangeSelect && (\n <>\n {' - '}\n\n <div>\n <DateInput\n value={max ?? null}\n onChange={(date) => set('input', min, date ?? undefined, 'max')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={max ?? null}\n onChange={(date) => set('input', min, date ?? undefined, 'max')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n </>\n )}\n </div>\n\n {calendars.map(({ month, year, weeks }) => (\n <div key={`${month}${year}`} css={{ display: 'grid' }}>\n <div\n css={{\n margin: 'calc(var(--spacing) * 4) 0',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <IconButton type=\"button\" {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DateObj;\n const weekEnd = week[6] as DateObj;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n color: 'inherit',\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set('calendarWeek', min, max);\n }}\n onPointerOver={() =>\n !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date })\n }\n onPointerOut={() => !weekDisabled && setHovered(undefined)}\n >\n {getCalendarWeek(weekEnd.date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (dateIntersect(date, hovered) ||\n (min &&\n !max &&\n hovered &&\n dateIntersect(\n date,\n min <= hovered.min\n ? { min, max: hovered.min }\n : { min: hovered.max, max: min },\n )));\n const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\n onClick={() => {\n if (dirty) {\n if (min) set('calendar', min, date);\n else set('calendar', date, max);\n } else {\n set('calendar', date);\n }\n }}\n onPointerOver={() => setHovered({ min: date, max: date })}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\n}\n","import { Fragment, useMemo, useState } from 'react';\n\ntype Part = 'day' | 'month' | 'year';\n\nconst className = 'schummar-table-date-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst defaultLengths = {\n day: 2,\n month: 2,\n year: 4,\n};\n\nconst maxLengths = {\n day: 2,\n month: 2,\n year: Number.POSITIVE_INFINITY,\n};\n\nconst length = (type: Part, value: string) => Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport interface DateInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}\n\nexport function DateInput({ value, onChange, locale }: DateInputProps) {\n const [override, setOverride] = useState<{ type: Part; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n switch (override.type) {\n case 'day': {\n newValue.setDate(Number(override.value));\n break;\n }\n\n case 'month': {\n newValue.setMonth(Number(override.value) - 1);\n break;\n }\n\n case 'year': {\n newValue.setFullYear(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\nexport interface TextProps {\n id: keyof TableTheme['text'];\n}\n\nexport function Text({ id }: TextProps) {\n const text = useTheme((t) => t.text[id]);\n\n return <>{text}</>;\n}\n","import { Fragment, useMemo, useState } from 'react';\n\ntype Part = 'hour' | 'minute' | 'second';\n\nconst className = 'schummar-table-time-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'hour' || type === 'minute' || type === 'second';\n\nconst defaultLengths = {\n hour: 2,\n minute: 2,\n second: 2,\n};\n\nconst maxLengths = {\n hour: 2,\n minute: 2,\n second: 2,\n};\n\nconst length = (type: Part, value: string) => Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport interface TimeInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n showSeconds?: boolean;\n}\n\nexport function TimeInput({ value, onChange, locale, showSeconds = true }: TimeInputProps) {\n const [override, setOverride] = useState<{ type: string; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n switch (override.type) {\n case 'hour': {\n newValue.setHours(Number(override.value));\n break;\n }\n\n case 'minute': {\n newValue.setMinutes(Number(override.value));\n break;\n }\n\n case 'second': {\n newValue.setSeconds(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: showSeconds ? '2-digit' : undefined,\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport type { CommonFilterProps } from '../types';\nimport type { DatePickerProps, DateRange } from './datePicker';\nimport { dateIntersect, DatePicker } from './datePicker';\n\nfunction convertDate(x: unknown): Date | null {\n if (x instanceof Date) return x;\n if (typeof x === 'number' || typeof x === 'string') return new Date(x);\n return null;\n}\n\nfunction convertDateOrRange(x: unknown): Date | DateRange | null {\n if (x instanceof Object && 'min' in x && 'max' in x) {\n const range = {\n min: convertDate((x as any).min),\n max: convertDate((x as any).max),\n };\n return range.min && range.max ? (range as DateRange) : null;\n }\n return convertDate(x);\n}\n\nfunction convertDateOrArray(x: unknown): Date | DateRange | (Date | DateRange)[] | null {\n if (Array.isArray(x)) return x.map(convertDateOrRange).filter(Boolean) as (Date | DateRange)[];\n return convertDateOrRange(x);\n}\n\nexport function DateFilter<TItem, TColumnValue>({\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n filterBy = convertDateOrArray,\n minDate,\n maxDate,\n showCalendarWeek,\n showTime,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n | 'showTime'\n> &\n CommonFilterProps<\n TItem,\n TColumnValue,\n Date | DateRange | null,\n Date | DateRange | null\n >): JSX.Element {\n const { value = null, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'dateFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return dateIntersect(filterValue, value);\n },\n });\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n }}\n >\n <DatePicker\n rangeSelect={!singleSelect}\n value={value}\n onChange={onChange}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n showTime={showTime}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps = TableTheme['components']['TextField'] extends React.ComponentType<infer T>\n ? T\n : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asNumberOrArray, castArray } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { NumberField } from './numberField';\n\nexport interface RangeFilterProps<T, V>\n extends CommonFilterProps<T, V, number | null, [number | null, number | null] | null> {\n min?: number;\n max?: number;\n}\n\nexport function RangeFilter<TItem, TColumnValue>({\n min,\n max,\n filterBy = asNumberOrArray,\n ...props\n}: RangeFilterProps<TItem, TColumnValue>): JSX.Element {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const table = useTableContext<TItem>();\n const columnId = useColumnContext();\n const filterByFunction = filterBy instanceof Function ? filterBy : filterBy[0];\n\n const [minValue, maxValue] = table.useState((state) => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n const column = state.activeColumns.find((c) => c.id === columnId);\n\n if (!column) {\n return [0, 100];\n }\n\n let minValue;\n let maxValue;\n\n for (const item of state.items) {\n const columnValue = column.value(item.value) as TColumnValue;\n const numberValues = castArray(filterByFunction(columnValue, item.value)).filter(\n (value): value is number => value !== null,\n );\n\n for (const value of numberValues) {\n minValue = Math.min(minValue ?? value, value);\n maxValue = Math.max(maxValue ?? value, value);\n }\n }\n\n return [min ?? minValue, max ?? maxValue];\n });\n\n const { value, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'rangeFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n if (!filterValue || (filterValue[0] === null && filterValue[1] === null)) {\n return true;\n }\n\n const min = filterValue[0] ?? Number.NEGATIVE_INFINITY;\n const max = filterValue[1] ?? Number.POSITIVE_INFINITY;\n return value !== null && value >= min && value <= max;\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n gap: '1em',\n }}\n >\n <div\n css={{\n display: 'flex',\n gap: '1em',\n alignItems: 'center',\n\n '& > *': {\n width: '10em',\n },\n }}\n >\n <NumberField\n value={value?.[0]}\n onChange={(newMin) => onChange(normalize(newMin, value?.[1], 'min', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMinText}</span>}\n placeholder={String(minValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n -\n <NumberField\n value={value?.[1]}\n onChange={(newMax) => onChange(normalize(value?.[0], newMax, 'max', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMaxText}</span>}\n placeholder={String(maxValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction normalize(\n min: number | null | undefined,\n max: number | null | undefined,\n changed: 'min' | 'max',\n limits: { min?: number; max?: number },\n): [number | null, number | null] | null {\n min ??= null;\n max ??= null;\n\n if (min !== null && max !== null && min > max) {\n if (changed === 'min') {\n max = min;\n } else {\n min = max;\n }\n }\n\n return min !== null || max !== null\n ? [clamp(min, limits.min, limits.max), clamp(max, limits.min, limits.max)]\n : null;\n}\n\nfunction clamp(\n value: number | null,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n): number | null {\n return value === null ? null : Math.min(Math.max(value, min), max);\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, castArray, flatMap, orderBy, uniq } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps, InternalColumn } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport type { VirtualListProps } from './virtualList';\nimport { VirtualList } from './virtualList';\n\nfunction toggle<T>(set: Set<T>, value: T, singleSelect?: boolean) {\n const newSet = new Set(singleSelect ? [] : set);\n if (set.has(value)) {\n newSet.delete(value);\n } else {\n newSet.add(value);\n }\n\n return newSet;\n}\n\nexport function SelectFilter<TItem, TColumnValue, TFilterBy>({\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n hideSearchField,\n hideResetButton,\n ...props\n}: {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: TFilterBy[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: TFilterBy) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: TFilterBy) => ReactNode;\n /** If enabled, only one option can be selected at a time. */\n singleSelect?: boolean;\n /** If enabled, the search field is hidden. */\n hideSearchField?: boolean;\n /** If enabled, the reset button is hidden. */\n hideResetButton?: boolean;\n /** Virtual list props.\n * @default true */\n virtual?: VirtualListProps<unknown>['virtual'];\n} & CommonFilterProps<TItem, TColumnValue, TFilterBy, Set<TFilterBy>>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n const deselectAll = useTheme((t) => t.text.deselectAll);\n const noResults = useTheme((t) => t.text.noResults);\n\n const table = useTableContext<TItem>();\n const columnId = useColumnContext();\n\n const {\n value = new Set<TFilterBy>(),\n onChange,\n filterBy,\n isActive,\n } = useFilter({\n ...props,\n\n id: 'selectFilter',\n\n isActive(filterValue) {\n return filterValue.size > 0;\n },\n\n test(filterValue, value) {\n return filterValue.has(value);\n },\n });\n\n const options = table.useState((state) => {\n if (providedOptions) return uniq(providedOptions);\n\n const column = state.activeColumns.find((column) => column.id === columnId) as\n | InternalColumn<TItem, TColumnValue>\n | undefined;\n if (!column) return [];\n\n return orderBy(\n uniq(\n flatMap(state.items, (item) => castArray(filterBy(column.value(item.value), item.value))),\n ),\n );\n });\n\n const [query, setQuery] = useState('');\n const filtered = options.filter(\n (option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()),\n );\n const delayedValue = useMemo(() => value, [isActive]);\n const ordered = filtered\n .filter((option) => delayedValue.has(option))\n .concat(filtered.filter((option) => !delayedValue.has(option)));\n\n const Button = useTheme((t) => t.components.Button);\n\n useEffect(() => {\n setQuery('');\n }, [isActive]);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{\n justifyContent: 'center',\n width: '100%',\n marginBottom: 'var(--spacing)',\n color: 'inherit',\n }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n css={{\n width: '20em',\n maxWidth: '100%',\n maxHeight: 'min(20em, 50vh)',\n overflow: 'hidden auto',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n }}\n >\n {(option, index) => (\n <FormControlLabel\n key={index}\n control={\n <Checkbox\n checked={value.has(option)}\n onChange={() => onChange(toggle(value, option, singleSelect))}\n />\n }\n label={render(option)}\n />\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport function FormControlLabel({\n control,\n label,\n disabled,\n}: {\n control: ReactNode;\n label: ReactNode;\n disabled?: boolean;\n}) {\n return (\n <label\n css={[\n {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n },\n disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?:\n | boolean\n | {\n rowHeight?: number;\n initalRowHeight?: number;\n throttleScroll?: number;\n overscan?: number;\n overscanBottom?: number;\n overscanTop?: number;\n };\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): JSX.Element {\n const container = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual) return;\n\n const ro = new ResizeObserver(update);\n\n if (container.current) {\n ro.observe(container.current);\n }\n\n window.addEventListener('resize', update, true);\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n update.cancel();\n };\n }, [update, virtual, throttleScroll]);\n\n if (!virtual) {\n return (\n <div\n {...props}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n const {\n rowHeight,\n initalRowHeight = 38,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (virtual instanceof Object ? virtual : undefined) ?? {};\n\n const itemHeight = rowHeight ?? (averageItemHeight(container.current) || initalRowHeight);\n const from = container.current?.clientHeight\n ? Math.max(\n 0,\n Math.floor((container.current.scrollTop - (overscanTop ?? overscan)) / itemHeight),\n )\n : 0;\n const to = container.current?.clientHeight\n ? Math.min(\n items.length,\n Math.ceil(\n (container.current.scrollTop +\n container.current.clientHeight +\n (overscanBottom ?? overscan)) /\n itemHeight,\n ),\n )\n : 1;\n const before = from * itemHeight;\n const after = (items.length - to) * itemHeight;\n\n return (\n <div\n {...props}\n onScroll={(event) => {\n update();\n props.onScroll?.(event);\n }}\n ref={container}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n <div data-virtual-before style={{ height: before }} />\n {items.slice(from, to).map((item, index) => children(item, index + from))}\n <div data-virtual-after style={{ height: after }} />\n </div>\n );\n}\n\nfunction averageItemHeight(container: HTMLDivElement | null) {\n if (!container?.children.length) {\n return undefined;\n }\n\n const heights = Array.from(container.children)\n .slice(1, -1)\n .map((child) => child.clientHeight);\n return heights.reduce((a, b) => a + b, 0) / heights.length;\n}\n","export function throttle<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void; cancel(): void } {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n last = Date.now();\n lastArgs = undefined;\n timeout = undefined;\n\n function_(...args!);\n }\n\n return Object.assign(\n function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n },\n {\n flush() {\n if (lastArgs) {\n run();\n }\n },\n\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n },\n },\n );\n}\n","import { memo, useEffect, useLayoutEffect, useState } from 'react';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useTableContext,\n} from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { TableProps } from '../types';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport CombinedFilter from './combinedFilter';\nimport { ResizeHandleView } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { Virtualized } from './virtualized';\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const [table, resetState] = useTableState(props);\n const [isHydrated, clearStorage] = useTableStateStorage(table);\n\n async function reset() {\n await clearStorage();\n resetState();\n }\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table'));\n\n return (\n <TableContext.Provider value={table}>\n <TableResetContext.Provider value={reset}>\n <TableMemoContextProvider>\n <TableLoadingState isHydrated={isHydrated} />\n </TableMemoContextProvider>\n </TableResetContext.Provider>\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const loadingText = useTheme((t) => t.text.loading);\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{loadingText}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState((state) => state.props.fullWidth);\n\n const visibleColumns = table.useState((state) =>\n state.visibleColumns.map((column) => ({\n id: column.id,\n width: column.width,\n classes: column.classes,\n styles: column.styles,\n footer: column.footer,\n })),\n );\n\n const hasActiveFilters = table.useState((state) => {\n return state.activeColumns.some((column) => {\n const filter = state.filters.get(column.id);\n const filterValue = state.filterValues.get(column.id);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n const columnWidths = table.useState((state) => state.columnWidths, { throttle: 16 });\n const hasFooter = table.useState((state) => state.activeColumns.some((column) => column.footer));\n\n const classes = useTheme((theme) => theme.classes);\n const styles = useTheme((theme) => theme.styles);\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n\n const enableSelection = table.useState((state) => state.props.enableSelection);\n const enableColumnSelection = table.useState((state) =>\n Array.isArray(state.props.enableColumnSelection)\n ? !state.displaySize || state.props.enableColumnSelection.includes(state.displaySize)\n : state.props.enableColumnSelection,\n );\n const enableExport = table.useState((state) =>\n typeof state.props.enableExport === 'object' && !('exporters' in state.props.enableExport)\n ? !state.displaySize || !!state.props.enableExport[state.displaySize]\n : !!state.props.enableExport,\n );\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState((state) => state.props.enableClearFiltersButton);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[cssVariables, defaultClasses.table, styles?.table, hidden && { visibility: 'hidden' }]}\n style={{\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...visibleColumns.map(\n (column) => columnWidths.get(column.id) ?? column.width ?? 'max-content',\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[\n { gridColumn: 1 },\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n />\n\n <div\n className={classes?.headerCell}\n css={[\n { gridColumn: 2 },\n defaultClasses.headerCell,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n >\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n\n {(enableSelection || enableColumnSelection || enableExport) && (\n <>\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </>\n )}\n </div>\n\n <ColumnHeaderContext.Provider>\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader />\n </ColumnContext.Provider>\n ))}\n </ColumnHeaderContext.Provider>\n\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n />\n </>\n }\n footer={\n <>\n {enableClearFiltersButton && hasActiveFilters && <ClearFiltersButton />}\n {hasFooter && (\n <>\n <div\n className={classes?.footerCell}\n css={[\n { gridColumn: 1 },\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\n ]}\n />\n\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnFooter />\n </ColumnContext.Provider>\n ))}\n\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\n ]}\n />\n </>\n )}\n </>\n }\n >\n {(itemIds, startIndex) =>\n itemIds.map((itemId, index) => (\n <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />\n ))\n }\n </Virtualized>\n );\n});\n","import type { Draft } from 'immer';\nimport { useEffect, useState } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { Queue } from '../misc/queue';\nimport type { InternalTableState } from '../types';\n\nconst KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n 'columnOrder',\n] as const;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | Promise<unknown>;\n} & (\n | {\n keys: () => string[] | Promise<string[]>;\n }\n | {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n }\n);\n\nfunction stringify(value: unknown) {\n function prepare(value: unknown): any {\n if (value instanceof Date) {\n return { __date: value.toJSON() };\n }\n\n if (value instanceof Set) {\n return { __set: Array.from(value).map(prepare) };\n }\n\n if (value instanceof Map) {\n return { __map: Array.from(value.entries()).map((entry) => entry.map(prepare)) };\n }\n\n if (Array.isArray(value)) {\n return value.map(prepare);\n }\n\n if (value instanceof Object) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, prepare(v)]));\n }\n\n return value;\n }\n\n return JSON.stringify(prepare(value));\n}\n\nfunction parse(value: string) {\n return JSON.parse(value, (_key, value) => {\n if (value instanceof Object && '__date' in value) {\n return new Date(value.__date);\n }\n\n if (value instanceof Object && '__set' in value) {\n return new Set(value.__set);\n }\n\n if (value instanceof Object && '__map' in value) {\n return new Map(value.__map);\n }\n\n return value;\n });\n}\n\nexport function useTableStateStorage(table: Store<InternalTableState<any>>) {\n const [isHydrated, setIsHydrated] = useState(false);\n const [q] = useState(() => new Queue());\n\n // On mount: load\n useEffect(() => {\n const { persist } = table.getState().props;\n if (!persist) {\n setIsHydrated(true);\n return;\n }\n\n let isCanceled = false;\n\n (async () => {\n try {\n const { storage, id, include, exclude } = persist;\n const json = await storage.getItem(storageName(id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n table.getState().props.debug?.('load', json, data);\n\n // eslint-disable-next-line no-inner-declarations\n function applyUpdate(state: Draft<InternalTableState<any>>, key: (typeof KEYS)[number]) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key) &&\n key in data\n ) {\n if (key === 'filterValues') {\n for (const [id, value] of data[key]) {\n const filter = state.filters.get(id);\n\n if (filter && (filter.persist ?? filter.value === undefined)) {\n state.filterValues.set(id, value);\n state.filters.get(id)?.onChange?.(value);\n }\n }\n } else {\n if (\n key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort'\n ) {\n if (state.props[key] !== undefined) {\n return;\n }\n\n state.props[\n `on${\n (key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>\n }Change`\n ]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n\n table.update((state) => {\n for (const key of KEYS.filter((key) => key !== 'filterValues')) {\n applyUpdate(state, key);\n }\n });\n\n // First apply other keys and wait until changes take effect. Filters cannot be applied to hidden columns.\n await new Promise((resolve) => {\n setTimeout(resolve);\n });\n table.update((state) => applyUpdate(state, 'filterValues'));\n } catch (error) {\n console.error('Failed to load table state:', error);\n } finally {\n setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, [table]);\n\n // After isHydrated, watch and save state\n useEffect(() => {\n if (!isHydrated) return;\n\n return table.subscribe(\n (state) => {\n if (!state.props.persist) return;\n\n const { storage, id, include, exclude } = state.props.persist;\n const data: any = {};\n\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key)\n ) {\n if (key === 'filterValues') {\n data[key] = new Map();\n for (const [id, value] of state.filterValues) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n data.filterValues.set(id, value);\n }\n }\n } else {\n if (\n (key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort') &&\n state.props[key] !== undefined\n ) {\n continue;\n }\n\n data[key] = state[key];\n }\n }\n }\n\n return { storage, id, data };\n },\n (props) => {\n if (!props) return;\n const { storage, id, data } = props;\n\n table.getState().props.debug?.('save', data, stringify(data));\n q.run(async () => {\n await storage.setItem(storageName(id), stringify(data));\n }, true);\n },\n { throttle: 1000 },\n );\n }, [table, isHydrated]);\n\n async function clear() {\n await q.run(async () => {\n const persist = table.getState().props.persist;\n if (!persist) {\n return;\n }\n\n const { storage, id } = persist;\n await storage.removeItem(storageName(id));\n\n setIsHydrated(false);\n q.clear();\n });\n }\n\n return [isHydrated, clear] as const;\n}\n","export class Queue {\n private q = new Array<{\n job: () => Promise<any>;\n resolve: (value: any) => void;\n reject: (reason?: any) => void;\n }>();\n\n private isRunning = false;\n\n run<T>(job: () => Promise<T>, replace?: boolean) {\n return new Promise<T>((resolve, reject) => {\n if (replace) {\n this.q = [];\n }\n this.q.push({ job, resolve, reject });\n\n if (!this.isRunning) this.start();\n });\n }\n\n clear() {\n this.q = [];\n }\n\n private async start() {\n this.isRunning = true;\n\n let next;\n while ((next = this.q.shift())) {\n try {\n const result = await next.job();\n next.resolve(result);\n } catch (error) {\n next.reject(error);\n }\n }\n\n this.isRunning = false;\n }\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport type { InternalTableState, TableProps } from '../types';\nimport { calcItems } from './calcItems';\nimport { calcProps } from './calcProps';\nimport { cleanupState } from './cleanupState';\nimport { filterColumns } from './filterColumns';\nimport { normalizeExpanded } from './normalizeExpanded';\nimport { syncSelections } from './syncSelections';\nimport { watchDisplaySize } from './watchDisplaySize';\n\nexport function useTableState<T>(\n _props: TableProps<T>,\n): [Store<InternalTableState<T>>, () => void] {\n const [key, setKey] = useState({});\n const props = calcProps(_props);\n\n function reset() {\n setKey({});\n\n if (props.sort === undefined) {\n props.onSortChange?.(props.defaultSort ?? []);\n }\n\n if (props.expanded === undefined) {\n props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n }\n\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n\n props.onReset?.('table');\n }\n\n const state = useMemo(\n () =>\n new Store<InternalTableState<T>>({\n normalizedProps: props,\n props,\n\n key,\n sort: props.defaultSort ?? [],\n selection: props.defaultSelection ?? new Set(),\n expanded: props.defaultExpanded ?? new Set(),\n rowHeights: new Map(),\n filters: new Map(),\n filterValues: new Map(),\n hiddenColumns: props.defaultHiddenColumns ?? new Set(),\n columnWidths: new Map(),\n columnOrder: props.columns.map((column) => column.id),\n columnStyleOverride: new Map(),\n\n activeColumns: [],\n visibleColumns: [],\n items: [],\n itemsById: new Map(),\n activeItems: [],\n activeItemsById: new Map(),\n lastSelectedId: undefined,\n displaySizePx: undefined,\n displaySize: undefined,\n }),\n [key],\n );\n\n filterColumns(state);\n calcItems(state);\n normalizeExpanded(state);\n syncSelections(state);\n cleanupState(state);\n watchDisplaySize(state);\n\n useEffect(() => {\n state.update((state) => {\n state.normalizedProps = castDraft(props);\n\n if (props.sort) state.sort = props.sort;\n if (props.selection) state.selection = props.selection;\n if (props.expanded) state.expanded = props.expanded;\n if (props.hiddenColumns) state.hiddenColumns = props.hiddenColumns;\n for (const column of props.columns) {\n if (!state.columnOrder.includes(column.id)) {\n const index = props.columns.indexOf(column);\n state.columnOrder.splice(index, 0, column.id);\n }\n }\n });\n }, [state, props]);\n\n return [state, reset];\n}\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState, TableItem } from '../types';\n\nexport function calcItems<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.items,\n state.props.id,\n state.props.parentId,\n state.props.revealFiltered,\n state.props.externalSort,\n state.sort,\n state.filters,\n state.filterValues,\n state.activeColumns,\n state.expanded,\n ] as const,\n (\n [\n items = [],\n id,\n parentId,\n revealFiltered,\n externalSort,\n sort,\n filters,\n filterValues,\n activeColumns,\n ],\n draft,\n ) => {\n const tableItems = items.map<TableItem<T>>((item) => ({\n id: id(item),\n parentId: parentId?.(item),\n children: [],\n value: item,\n }));\n\n let sorted;\n if (sort.length === 0 || externalSort) {\n sorted = tableItems;\n } else {\n const selectors = flatMap(sort, (sort) => {\n const column = activeColumns.find((column) => column.id === sort.columnId);\n if (!column) return [];\n return column.sortBy.map((sortBy) => ({\n selector: (item: T) => sortBy(column.value(item), item),\n direction: sort.direction,\n }));\n }).filter(Boolean);\n\n sorted = orderBy(\n tableItems,\n selectors.map((x) => (item) => x.selector(item.value)),\n selectors.map((x) => x.direction),\n );\n }\n\n const lookup = new Map<Id, TableItem<T>>();\n for (const item of sorted) {\n lookup.set(item.id, item);\n }\n\n for (const item of sorted) {\n const parent =\n item.parentId !== undefined && item.parentId !== null\n ? lookup.get(item.parentId)\n : undefined;\n parent?.children.push(item);\n }\n\n const allItems = new Array<TableItem<T>>();\n const allItemsById = new Map<Id, TableItem<T>>();\n\n const traverse = (items: TableItem<T>[]): void => {\n for (const item of items) {\n allItems.push(item);\n allItemsById.set(item.id, item);\n traverse(item.children);\n }\n };\n traverse(sorted.filter((item) => item.parentId === undefined || item.parentId === null));\n\n let expandedChanged = false;\n const activeItemsById = new Map<Id, TableItem<T>>();\n const activeSet = new Set<Id>();\n const activeItems = [...allItems]\n .reverse()\n .filter((item) => {\n let isActive = activeSet.has(item.id);\n\n isActive ||= activeColumns.every((column) => {\n const filter = filters.get(column.id);\n if (!filter || filter.external) return true;\n\n const filterValue = filterValues.get(column.id);\n if (filterValue === undefined || !filter.isActive(filterValue)) return true;\n\n const filterBy = filter.filterBy ?? ((x) => x);\n const value = filterBy(column.value(item.value), item.value);\n return castArray(value).some((value) => filter.test(filterValue, value));\n });\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n if (\n revealFiltered &&\n Array.from(filters.entries()).some(([id, filter]) => {\n const filterValue = filterValues.get(id);\n return !!filter && filterValue !== undefined && filter.isActive(filterValue);\n })\n ) {\n expandedChanged ||= !draft.expanded.has(item.parentId);\n draft.expanded.add(item.parentId);\n } else if (!draft.expanded.has(item.parentId)) {\n isActive = false;\n }\n }\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n activeSet.add(item.parentId);\n }\n if (isActive) {\n activeItemsById.set(item.id, item);\n }\n\n return isActive;\n })\n .reverse();\n\n draft.items = castDraft(allItems);\n draft.itemsById = castDraft(allItemsById);\n draft.activeItems = castDraft(activeItems);\n draft.activeItemsById = castDraft(activeItemsById);\n\n if (expandedChanged) {\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(state.getState().expanded);\n });\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useMemo } from 'react';\nimport { defaultSerializer } from '../exporters/serializer';\nimport { useTableMemo } from '../hooks/useTableMemo';\nimport { asString } from '../misc/helpers';\nimport { overrides } from '../misc/overrides';\nimport type { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\n\nconst defaultProps: InternalTableProps<any> = {\n id: () => '',\n columns: [],\n enableSelection: true,\n selectSyncChildren: true,\n stickyHeader: true,\n stickyFooter: true,\n enableColumnSelection: true,\n enableColumnResize: true,\n enableColumnReorder: true,\n displaySizeOverrides: {\n mobile: {\n enableSelection: false,\n enableColumnSelection: false,\n enableExport: false,\n enableColumnResize: false,\n enableColumnReorder: false,\n },\n },\n};\n\nexport function calcProps<T>(props: TableProps<T>): InternalTableProps<T> {\n const cache = useTableMemo();\n\n return useMemo(\n () => overrides(defaultProps, calc(props, cache)) as InternalTableProps<T>,\n [props],\n );\n}\n\nfunction calc<T>(\n props: Partial<TableProps<T>>,\n cache: ReturnType<typeof useTableMemo>,\n): Partial<InternalTableProps<T>> {\n let id;\n if (props.id instanceof Function || Array.isArray(props.id)) {\n id = cache('id', props.id);\n } else if (props.id !== undefined) {\n id = cache('id', [(item: T) => item[props.id as keyof T] as unknown as Id, props.id]);\n }\n\n let parentId;\n if (props.parentId instanceof Function || Array.isArray(props.parentId)) {\n parentId = cache('parentId', props.parentId);\n } else if (props.parentId !== undefined) {\n parentId = cache('parentId', [\n (item: T) => item[props.parentId as keyof T] as unknown as Id | undefined,\n props.parentId,\n ]);\n }\n\n const columnProps = props.columnProps && cache('columnProps', props.columnProps);\n\n let inputColumns;\n if (props.columns instanceof Function) {\n inputColumns = props.columns((value, column) => ({ ...column, value }));\n } else if (props.columns !== undefined) {\n inputColumns = props.columns.map((column) => ({ ...column, dependecies: undefined }));\n }\n\n const globalDefaults = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header,\n exportHeader,\n footer,\n value,\n renderCell,\n exportCell,\n sortBy,\n disableSort,\n hidden,\n classes,\n styles,\n filter,\n width,\n displaySize,\n }: Column<T, V>,\n index: number,\n ): InternalColumn<T, V> => {\n const id = _id ?? index;\n const cacheKey = typeof id === 'string' ? `s${id}` : `n${id}`;\n const defaults = { ...globalDefaults, ...columnProps?.(id) };\n\n return {\n id,\n header: header ?? defaults?.header ?? null,\n exportHeader: exportHeader ?? defaults?.exportHeader ?? id,\n footer: footer ?? defaults?.footer ?? null,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(\n `columns.${cacheKey}.renderCell`,\n renderCell ?? defaults?.renderCell ?? asString,\n ),\n exportCell: exportCell ?? defaults?.exportCell ?? defaultSerializer,\n sortBy: (\n sortBy ??\n defaults?.sortBy ?? [\n (v) =>\n typeof v === 'number' || v instanceof Date\n ? v\n : v === null || v === undefined\n ? ''\n : String(v),\n ]\n ).map((function_, i) => cache(`columns.${cacheKey}.sortBy.${i}`, function_)),\n disableSort,\n hidden: hidden ?? defaults?.hidden,\n classes: classes ?? defaults?.classes,\n styles: styles ?? defaults?.styles,\n filter: filter ?? defaults?.filter,\n width: width ?? defaults?.width,\n displaySize: Array.isArray(displaySize)\n ? displaySize\n : displaySize\n ? [displaySize]\n : undefined,\n };\n };\n\n const columns = inputColumns?.map(mapColumn);\n\n const wrapRow = props.wrapRow && cache('wrapRow', props.wrapRow);\n const wrapCell = props.wrapCell && cache('wrapCell', props.wrapCell);\n\n const rowAction =\n props.rowAction instanceof Function || Array.isArray(props.rowAction)\n ? cache('rowAction', props.rowAction)\n : props.rowAction;\n\n const rowDetails =\n props.rowDetails instanceof Function || Array.isArray(props.rowDetails)\n ? cache('rowDetails', props.rowDetails)\n : props.rowDetails;\n\n const displaySizeOverrides =\n props.displaySizeOverrides &&\n Object.fromEntries(\n Object.entries(props.displaySizeOverrides ?? {}).map(([size, overrides]) => [\n size,\n overrides && calc(overrides, cache),\n ]),\n );\n\n return {\n ...props,\n id,\n parentId,\n columns,\n columnProps,\n wrapRow,\n wrapCell,\n rowAction,\n rowDetails,\n enableSelection: props.enableSelection,\n selectSyncChildren: props.selectSyncChildren,\n stickyHeader: props.stickyHeader,\n stickyFooter: props.stickyFooter,\n enableColumnSelection: props.enableColumnSelection,\n enableExport: props.enableExport,\n enableClearFiltersButton: props.enableClearFiltersButton,\n enableColumnResize: props.enableColumnResize,\n enableColumnReorder: props.enableColumnReorder,\n displaySizeOverrides,\n };\n}\n","export function defaultSerializer(x: unknown): string | number | Date {\n if (x instanceof Date || typeof x === 'number' || typeof x === 'string') {\n return x;\n }\n\n return JSON.stringify(x) ?? '';\n}\n","export function overrides<T extends object>(first: T, ...overrides: (Partial<T> | undefined)[]): T {\n return overrides.reduce<T>(\n (result, source) => {\n for (const [key, value] of Object.entries(source ?? {})) {\n if (value !== undefined) {\n result[key as keyof T] = value as any;\n }\n }\n\n return result;\n },\n { ...first },\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.itemsById,\n state.activeItemsById,\n state.activeColumns,\n ] as const,\n ([columns, itemsById, activeItemsById, activeColumns], draft) => {\n const columnIds = new Set(columns.map((column) => column.id));\n const activeColumnIds = new Set(activeColumns.map((column) => column.id));\n\n // Remove sort entries for non active columns\n const newSort = draft.sort.filter((s) => activeColumnIds.has(s.columnId));\n if (newSort.length < draft.sort.length) {\n draft.sort = newSort;\n setTimeout(() => {\n state.getState().props.onSortChange?.(newSort);\n });\n }\n\n // Remove filters for non active columns\n for (const id of draft.filters.keys()) {\n if (!activeColumnIds.has(id)) draft.filters.delete(id);\n }\n\n // Remove filterValues for non active columns\n for (const id of draft.filterValues.keys()) {\n if (!activeColumnIds.has(id)) draft.filterValues.delete(id);\n }\n\n // Remove hiddenColumns for non existing columns\n for (const id of draft.hiddenColumns.keys()) {\n if (!columnIds.has(id)) draft.hiddenColumns.delete(id);\n }\n\n // Remove columnWidth for non existing columns\n for (const id of draft.columnWidths.keys()) {\n if (!columnIds.has(id)) draft.columnWidths.delete(id);\n }\n\n // Remove non existing columns from columnOrder\n for (const id of draft.columnOrder) {\n if (!columnIds.has(id)) draft.columnOrder = draft.columnOrder.filter((x) => x !== id);\n }\n\n if (draft.props.items) {\n // Remove selection for non active items\n const newSelection = intersect(draft.selection, activeItemsById);\n if (newSelection.size !== draft.selection.size) {\n draft.selection = newSelection;\n setTimeout(() => {\n state.getState().props.onSelectionChange?.(newSelection);\n });\n }\n\n // Remove expanded for non existing items\n const newExpanded = intersect(draft.expanded, itemsById);\n if (newExpanded.size < draft.expanded.size) {\n draft.expanded = newExpanded;\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(newExpanded);\n });\n }\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function filterColumns<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.hiddenColumns,\n state.columnOrder,\n state.displaySize,\n state.displaySizePx,\n ] as const,\n ([columns, hiddenColumns, columnOrder, displaySize], draft) => {\n draft.activeColumns = orderBy(\n columns.filter((column) => !(column.hidden ?? hiddenColumns.has(column.id))),\n [(column) => columnOrder.indexOf(column.id)],\n );\n\n draft.visibleColumns = draft.activeColumns.filter(\n (column) =>\n displaySize === undefined ||\n column.displaySize === undefined ||\n column.displaySize.includes(displaySize),\n );\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState } from '../types';\n\nexport function normalizeExpanded<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.expandOnlyOne, state.expanded, state.itemsById] as const,\n ([expandOnlyOne, , itemsById], state) => {\n let expanded = state.expanded;\n let hasChanged = false;\n\n const allAncestors = [...expanded].map((id) => {\n const item = itemsById.get(id);\n return {\n id,\n ancestors: item ? getAncestors(itemsById, item) : new Set<Id>(),\n };\n });\n\n // If only one branch may be expanded, check if there are more and close if necessary\n if (expandOnlyOne) {\n const withMostAncestors = orderBy(allAncestors, [(x) => x.ancestors.size], ['desc'])[0];\n\n if (\n [...expanded].some(\n (id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id),\n )\n ) {\n expanded = withMostAncestors?.ancestors ?? new Set();\n state.expanded = expanded;\n\n state.props.onExpandedChange?.(expanded);\n return;\n }\n }\n\n for (const { ancestors } of allAncestors) {\n for (const ancestor of ancestors ?? []) {\n if (!expanded.has(ancestor)) {\n expanded.add(ancestor);\n hasChanged = true;\n }\n }\n }\n\n if (hasChanged) {\n state.props.onExpandedChange?.(new Set(expanded));\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { InternalTableState } from '../types';\n\nexport function syncSelections<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.selectSyncChildren, state.selection, state.activeItems] as const,\n ([selectSyncChildren, selection, activeItems], state) => {\n if (!selectSyncChildren) return;\n\n const newSelection = new Set(selection);\n for (const item of activeItems) {\n if (\n item.parentId !== undefined &&\n item.parentId !== null &&\n newSelection.has(item.parentId)\n ) {\n newSelection.add(item.id);\n }\n }\n\n if (newSelection.size !== selection.size) {\n state.selection = newSelection;\n setTimeout(() => {\n table.getState().props.onSelectionChange?.(newSelection);\n });\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { overrides } from '../misc/overrides';\nimport type { InternalTableState } from '../types';\n\nconst DEFAULT_DISPLAY_SIZES = {\n mobile: 400,\n desktop: Infinity,\n};\n\nexport function watchDisplaySize<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => ({\n displaySizePx: state.displaySizePx,\n displaySize: state.props.displaySize,\n }),\n ({ displaySizePx, displaySize = DEFAULT_DISPLAY_SIZES }, draft) => {\n if (displaySizePx === undefined) {\n return;\n }\n\n if (typeof displaySize === 'object') {\n const entry = Object.entries(displaySize).find(\n ([, maxWidth]) => maxWidth >= displaySizePx,\n );\n draft.displaySize = entry?.[0];\n } else {\n draft.displaySize = displaySize;\n }\n },\n ),\n [state],\n );\n\n useEffect(\n () =>\n state.addReaction(\n (state) => ({\n props: state.normalizedProps,\n displaySize: state.displaySize,\n }),\n ({ props, displaySize }, draft) => {\n draft.props = castDraft(\n overrides(props, displaySize ? props.displaySizeOverrides?.[displaySize] : undefined),\n );\n },\n ),\n [state],\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport default function ClearFiltersButton<T>() {\n const Button = useTheme((t) => t.components.Button);\n const textClearFilters = useTheme((t) => t.text.clearFilters);\n const table = useTableContext<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button\n variant=\"outlined\"\n onClick={() => {\n table.update((state) => {\n state.activeColumns.forEach((column) => {\n state.filterValues.delete(column.id);\n });\n table.getState().props.onReset?.('filters');\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const columnClasses = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.classes?.footerCell,\n );\n const classes = useTheme((theme) => theme.classes?.footerCell);\n const columnCss = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.styles?.footerCell,\n );\n const styles = useTheme((theme) => theme.styles?.footerCell);\n\n const content = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return column?.footer;\n });\n\n return (\n <div\n className={cx(classes, columnClasses)}\n css={[\n defaultClasses.footerCell,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles,\n columnCss,\n ]}\n style={columnStyleOverride}\n >\n {content}\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader() {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState((state) => state.props.enableColumnReorder);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const classes = useTheme((theme) => theme.classes?.headerCell);\n const styles = useTheme((theme) => theme.styles?.headerCell);\n\n const { header, columnClasses, columnStyles } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes?.headerCell,\n columnStyles: column?.styles?.headerCell,\n };\n });\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table\n .getState()\n .columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(event: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: event.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (\n !div ||\n draggingStart.current === undefined ||\n Math.abs(event.clientX - draggingStart.current.mouseX) < 5\n )\n return;\n\n event.stopPropagation();\n div.setPointerCapture(event.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow:\n '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${\n draggingStart.current.bounds.left + event.clientX - draggingStart.current.mouseX\n }px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n // Apply transforms to each column\n const columns = table.getState().columnOrder.map((id, index) => ({\n id,\n index,\n width: store.getState().items.get(id)?.offsetWidth ?? 0,\n }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns\n .slice(index + 1, targetIndex + 1)\n .reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n ref={ref}\n className={cx(classes, columnClasses)}\n css={[\n defaultClasses.headerCell,\n {\n position: 'relative',\n userSelect: 'none',\n },\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles,\n columnStyles,\n ]}\n style={columnStyleOverride}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n <SortComponent>{header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import type React from 'react';\nimport type { HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState((state) => state.props.enableColumnResize);\n\n function onPointerDown(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.setPointerCapture(event.pointerId);\n }\n\n function onPointerMove(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n if (!div.hasPointerCapture(event.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(event.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.releasePointerCapture(event.pointerId);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n table.update((state) => {\n if (event.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n if (!enabled) {\n return null;\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n\nexport function ResizeHandleView({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean | 'visualOnly' }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled === true ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.5em',\n background: '#c9cfda',\n transition: 'transform 300ms',\n },\n\n '@media (pointer: coarse)': {\n pointerEvents: 'none',\n },\n },\n styles,\n ]}\n {...props}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const { direction, index, sortDisabled } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n sortDisabled: column?.disableSort ?? state.props.disableSort,\n };\n });\n\n function toggle(event: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort =\n event.getModifierState('Control') || off\n ? table.getState().sort.filter((s) => s.columnId !== columnId)\n : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\n\n event.preventDefault();\n return false;\n }\n\n return (\n <div\n css={{\n userSelect: 'none',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) max-content',\n alignItems: 'center',\n cursor: 'pointer',\n\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }}\n onClick={(event) => toggle(event)}\n onContextMenu={(event) => toggle(event, true)}\n >\n <div>{children}</div>\n\n {\n <Badge badgeContent={sortDisabled ? 0 : index}>\n <span\n css={[\n { transition: 'all 300ms', fontSize: '0.8em' },\n !direction && { opacity: 0 },\n direction === 'desc' && { transform: 'rotate3d(0, 0, 1, 180deg)' },\n ]}\n >\n <ArrowUpward />\n </span>\n </Badge>\n }\n </div>\n );\n}\n","import { useContext, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableResetContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\n const Settings = useTheme((t) => t.icons.Settings);\n const selectColumns = useTheme((t) => t.text.selectColumns);\n const resetAll = useTheme((t) => t.text.resetAll);\n const showAll = useTheme((t) => t.text.showAllColumns);\n const hideAll = useTheme((t) => t.text.hideAllColumns);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const reset = useContext(TableResetContext);\n const columns = table.useState((state) => state.props.columns);\n const hiddenColumns = table.useState((state) => state.hiddenColumns);\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n\n for (const columnId of column ? [column.id] : columns.map((column) => column.id)) {\n if (state ?? hiddenColumns.has(columnId)) {\n newValue.delete(columnId);\n } else {\n newValue.add(columnId);\n }\n }\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n const allVisible = columns.every((column) => !hiddenColumns.has(column.id));\n\n return (\n <>\n <IconButton onClick={(event) => setAnchorElement(anchorElement ? null : event.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorElement}\n open={!!anchorElement}\n onClose={() => setAnchorElement(null)}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{selectColumns}</div>\n\n <div css={{ margin: '0.5em 0', display: 'flex', gap: '0.5em' }}>\n <Button variant=\"outlined\" onClick={() => toggle(undefined, !allVisible)}>\n {allVisible ? hideAll : showAll}\n </Button>\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useContext, useState } from 'react';\nimport { ExportOptions, ExporterEntry } from '../exporters/exporter';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport function Export<T>(): JSX.Element {\n const { exporters: contextExporters } = useContext(TableSettingsContext);\n const table = useTableContext<T>();\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const ExportIcon = useTheme((t) => t.icons.Export);\n const Clipboard = useTheme((t) => t.icons.Clipboard);\n const exportTitle = useTheme((t) => t.text.exportTitle);\n const exportCopy = useTheme((t) => t.text.exportCopy);\n const exportDownload = useTheme((t) => t.text.exportDownload);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const { all, exporters } = table.useState((state): ExportOptions => {\n if (typeof state.props.enableExport === 'boolean' || state.props.enableExport === undefined) {\n return {\n all: false,\n exporters: contextExporters,\n };\n }\n\n return state.props.enableExport;\n });\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n function execute({ action, exporter }: ExporterEntry) {\n const { activeColumns, activeItems, items } = table.getState();\n const columns = activeColumns.map((column) => column.exportHeader);\n const rows = (all ? items : activeItems).map((item) =>\n activeColumns.map((column) => column.exportCell(column.value(item.value), item.value)),\n );\n\n if (action === 'copy') {\n const data = exporter.exportToString(columns, rows);\n navigator.clipboard.writeText(data);\n } else {\n const blob = exporter.exportToBlob(columns, rows);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export.${exporter.fileEnding}`;\n document.body.append(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n }\n }\n\n return (\n <>\n <IconButton onClick={(event) => setAnchor(anchor ? null : event.currentTarget)}>\n <ExportIcon css={!!anchor && { color: 'var(--primaryMain)' }} />\n </IconButton>\n\n <Popover\n open={!!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n justifyItems: 'stretch',\n gap: 'var(--spacing)',\n\n '& > *': {\n justifyContent: 'start',\n },\n }}\n >\n <div css={{ marginBottom: 'var(--spacing)' }}>{exportTitle}</div>\n\n {exporters.map((entry, index) => (\n <Button\n key={index}\n startIcon={entry.action === 'copy' ? <Clipboard /> : <ExportIcon />}\n onClick={() => execute(entry)}\n >\n {entry.action === 'copy' ? exportCopy : exportDownload} (.{entry.exporter.type})\n </Button>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { ClassNames } from '@emotion/react';\nimport { memo, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { ColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { Cell } from './cell';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\n\nexport const Row = memo(function Row<T>({\n itemId,\n rowIndex,\n}: {\n itemId: Id;\n rowIndex: number;\n}): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n const detailsDivRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const wrapRow = table.useState((state) => state.props.wrapRow) ?? ((props) => <div {...props} />);\n const rowClassName =\n classes?.row instanceof Function ? classes.row(item?.value, rowIndex) : classes?.row;\n const rowStyles =\n styles?.row instanceof Function ? styles.row(item?.value, rowIndex) : styles?.row;\n const subgrid = table.useState((state) => state.props.subgrid);\n\n const {\n cellClassName,\n css_,\n indent,\n hasChildren,\n hasDeferredChildren,\n columnIds,\n enableSelection,\n rowAction,\n hasDetails,\n } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n cellClassName: cx(...calcClassNames(classes, item?.value, rowIndex)),\n css_: calcCss<T>(styles, item?.value, rowIndex),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item.value),\n columnIds: state.visibleColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction:\n state.props.rowAction instanceof Function\n ? item\n ? state.props.rowAction(item.value, rowIndex)\n : null\n : state.props.rowAction,\n hasDetails:\n state.props.rowDetails instanceof Function\n ? item\n ? !!state.props.rowDetails(item.value, rowIndex)\n : null\n : !!state.props.rowDetails,\n };\n });\n\n useLayoutEffect(() => {\n function update() {\n table.update((state) => {\n if (!divRef.current) {\n return;\n }\n\n const h1 = divRef.current.offsetHeight;\n const h2 =\n detailsDivRef.current && document.contains(detailsDivRef.current)\n ? detailsDivRef.current.offsetHeight\n : 0;\n\n state.rowHeights.set(itemId, h1 + h2);\n });\n }\n\n update();\n\n const handles = [divRef.current, detailsDivRef.current]\n .filter((x): x is HTMLDivElement => !!x)\n .map((div) => {\n const o = new ResizeObserver(update);\n o.observe(div);\n return () => o.disconnect();\n });\n\n return () => {\n handles.forEach((h) => h());\n };\n }, [table, itemId, divRef.current, detailsDivRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n if (!item) {\n return null;\n }\n\n return (\n <ClassNames>\n {({ css }) => (\n <>\n {wrapRow(\n {\n className: css([\n subgrid\n ? {\n gridColumn: `1 / -1`,\n display: 'grid',\n gridTemplateColumns: 'subgrid',\n }\n : {\n display: 'contents',\n },\n rowClassName,\n rowStyles,\n ]),\n\n children: (\n <>\n <div\n className={cellClassName}\n css={[defaultClasses.cellFill, css_]}\n ref={divRef}\n />\n\n <div\n className={cellClassName}\n css={[defaultClasses.cell, defaultClasses.firstCell, css_]}\n >\n {indent > 0 && <div css={{ width: indent * 20 }} />}\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren || hasDetails) && (\n <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />\n )}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div className={cellClassName} css={[defaultClasses.cellFill, css_]} />\n\n <Details ref={detailsDivRef} itemId={itemId} rowIndex={rowIndex} />\n </>\n ),\n },\n item.value,\n rowIndex,\n )}\n </>\n )}\n </ClassNames>\n );\n});\n","import type { MemoizedTableTheme } from '../types';\n\nexport function calcClassNames<T>(\n classes: MemoizedTableTheme<T>['classes'] | undefined,\n item: T,\n index: number,\n) {\n return [\n classes?.cell instanceof Function ? classes.cell(item, index) : classes?.cell,\n index % 2 === 0 && classes?.evenCell,\n index % 2 === 1 && classes?.oddCell,\n ];\n}\n\nexport function calcCss<T>(\n styles: MemoizedTableTheme<T>['styles'] | undefined,\n item: T | undefined,\n index: number,\n) {\n return [\n styles?.cell instanceof Function\n ? item !== undefined\n ? styles.cell(item, index)\n : undefined\n : styles?.cell,\n index % 2 === 0 && styles?.evenCell,\n index % 2 === 1 && styles?.oddCell,\n ];\n}\n","import type { ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\n\nconst defaultWrapCell = (content: ReactNode) => {\n if (typeof content === 'string') {\n return (\n <span css={defaultClasses.text} title={content}>\n {content}\n </span>\n );\n }\n return content;\n};\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const column = table.useState((state) => {\n const col = state.activeColumns.find((column) => column.id === columnId);\n return (\n col && {\n value: col.value,\n renderCell: col.renderCell,\n }\n );\n });\n const wrapCell = table.useState((state) => state.props.wrapCell) ?? defaultWrapCell;\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item?.value, rowIndex)));\n const styles = useTheme((t) => calcCss<T>(t.styles, item?.value, rowIndex));\n\n if (!column || !item) return null;\n\n const content = column.renderCell(column.value(item.value), item.value);\n\n return (\n <div className={className} css={[defaultClasses.cell, styles]} style={columnStyleOverride}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id } from '../types';\n\nexport const Details = forwardRef<\n HTMLDivElement,\n {\n itemId: Id;\n rowIndex: number;\n }\n>(function Details({ itemId, rowIndex }, ref) {\n const table = useTableContext<unknown>();\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const { details, className, css } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n details: state.expanded.has(itemId)\n ? state.props.rowDetails instanceof Function\n ? item\n ? state.props.rowDetails(item.value, rowIndex)\n : null\n : state.props.rowDetails\n : undefined,\n className:\n classes?.details instanceof Function\n ? classes.details(item?.value, rowIndex)\n : classes?.details,\n css:\n styles?.details instanceof Function\n ? styles.details(item?.value, rowIndex)\n : styles?.details,\n };\n });\n\n return details ? (\n <div ref={ref} className={className} css={[defaultClasses.details, css]}>\n {details}\n </div>\n ) : null;\n});\n","import { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function ExpandControl<T>({\n itemId,\n hasDeferredChildren,\n}: {\n itemId: Id;\n hasDeferredChildren?: boolean;\n}): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Spinner = useTheme((t) => t.components.Spinner);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState(\n (state) => !!state.activeItemsById.get(itemId)?.children.length,\n );\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n\n if (expandOnlyOne) {\n newExpanded.clear();\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n if (isExpanded) {\n newExpanded.delete(itemId);\n\n const item = activeItemsById.get(itemId);\n for (const descendant of item ? getDescendants(item) : []) {\n newExpanded.delete(descendant);\n }\n } else {\n newExpanded.add(itemId);\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const Checkbox = useTheme((t) => t.components.Checkbox);\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : Array.from(state.activeItemsById.keys());\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(event: React.ChangeEvent) {\n const mouseEvent = event.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: '#c9cfda',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableContext } from '../misc/tableContext';\nimport { throttle } from '../misc/throttle';\nimport type { Id } from '../types';\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight && getComputedStyle(parent).overflowY !== 'visible')\n return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n footer,\n children,\n ...props\n}: {\n header: ReactNode;\n footer: ReactNode;\n children: (itemIds: Id[], startIndex: number) => ReactNode;\n} & Omit<HTMLProps<HTMLDivElement>, 'children'>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState((state) => state.props.virtual);\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState(\n (state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (!state.props.virtual) return { itemIds };\n if (\n !probeRef.current ||\n !root ||\n !document.contains(root) ||\n state.displaySizePx === undefined\n )\n return {};\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h =\n rowHeight ??\n state.rowHeights.get(itemId) ??\n initalRowHeight ??\n (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0;\n let to = itemIds.length;\n let before = 0;\n let after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n },\n { throttle: 16 },\n );\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n const tableElem = probeRef.current?.parentElement;\n if (!tableElem) return;\n\n const update = () => {\n table.update((state) => {\n state.displaySizePx = tableElem.clientWidth;\n });\n };\n\n const ro = new ResizeObserver(update);\n ro.observe(tableElem);\n\n window.addEventListener('resize', update, true);\n\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n };\n }, [table, probeRef.current]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update, true);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update, true);\n };\n }, [update, virtual]);\n\n useEffect(() => update.cancel, [update]);\n\n useLayoutEffect(\n () => table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`),\n );\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n\n {footer}\n </div>\n );\n}\n","export const textMatch = (text: string, query: string): boolean => {\n text = text.toLowerCase();\n query = query.toLowerCase();\n return query.split(/\\s+/).every((part) => termMatch(text, part));\n};\n\nexport const termMatch = (text: string, query: string): boolean => {\n let i = 0;\n outer: for (const char of query) {\n for (; i < text.length; i++) {\n if (text[i] === char) {\n i++;\n continue outer;\n }\n }\n return false;\n }\n return true;\n};\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asStringOrArray } from '../misc/helpers';\nimport { textMatch } from '../misc/textMatch';\nimport type { CommonFilterProps } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\n\nexport function TextFilter<TItem, TColumnValue>({\n compare = textMatch,\n filterBy = asStringOrArray,\n placeholder,\n ...props\n}: {\n /** Custom comparison function. Should return true if an item value matches the current filter value.\n * By default a fuzzy text comparison is used.\n */\n compare?: (itemValue: string, filterValue: string) => boolean;\n placeholder?: string;\n} & CommonFilterProps<TItem, TColumnValue, string, string>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n\n const { value = '', onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'textFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return compare(value, filterValue);\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n }}\n >\n <AutoFocusTextField\n value={value}\n onChange={(event) => onChange(event.target.value)}\n endIcon={\n <IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>\n }\n placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["useContext","useContext","className","jsx","jsxs","jsx","jsxs","jsx","jsxs","className","jsx","jsx","jsxs","className","_a","css","jsx","jsxs","css","createContext","useContext","jsx","useContext","memo","_a","_b","column","theme","createContext","useMemo","useState","flatMap","_a","_b","className","jsx","jsxs","createContext","Popover","useState","filter","useMemo","IconButton","FilterList","ArrowDropDown","jsx","TextField","useContext","useContext","useLayoutEffect","useMemo","useRef","useState","useMemo","useState","useRef","useLayoutEffect","value","onChange","useContext","jsx","_a","FilterList","_b","Button","Fragment","createContext","useContext","useEffect","useMemo","useState","useMemo","useState","jsx","value","Fragment","jsx","Fragment","useMemo","useState","jsx","className","defaultDate","isIncludedType","defaultLengths","maxLengths","length","tabNext","value","Fragment","jsx","jsxs","createContext","useMemo","useContext","value","Button","IconButton","ChevronRight","today","useState","_a","useEffect","min","max","jsx","value","useState","jsx","asNumber","TextField","useState","jsx","jsxs","minValue","maxValue","value","_a","_b","min","max","useEffect","useMemo","useState","jsx","jsxs","useEffect","useMemo","useRef","useState","jsx","jsxs","_a","_b","useRef","useState","useMemo","useEffect","jsx","jsxs","IconButton","Checkbox","Search","Clear","value","column","useState","useMemo","Button","useEffect","memo","useEffect","useLayoutEffect","useState","useEffect","useState","value","useState","useEffect","applyUpdate","_a","_b","id","key","castDraft","useEffect","useMemo","useState","castDraft","useEffect","useEffect","state","sort","column","items","value","id","castDraft","useMemo","overrides","useMemo","_a","id","defaults","overrides","useEffect","useEffect","state","useEffect","useEffect","state","useEffect","useEffect","useEffect","castDraft","useEffect","useEffect","state","castDraft","useState","useMemo","useEffect","state","castDraft","jsx","Button","jsx","column","castDraft","useEffect","useRef","jsx","className","_a","jsx","jsxs","Badge","ArrowUpward","index","column","toggle","jsx","jsxs","useRef","column","useEffect","castDraft","_a","_b","index","useContext","useState","Fragment","jsx","jsxs","IconButton","Popover","Checkbox","Button","Settings","useContext","useState","toggle","column","state","useContext","useState","Fragment","jsx","jsxs","Export","useContext","Button","IconButton","Popover","Clipboard","useState","ClassNames","memo","useLayoutEffect","useRef","useLayoutEffect","jsx","Cell","column","useLayoutEffect","_a","className","jsx","Details","className","css","jsx","IconButton","Spinner","ChevronRight","toggle","jsx","Checkbox","itemId","toggle","Fragment","jsx","jsxs","memo","Row","useRef","_a","item","useLayoutEffect","ClassNames","css","useEffect","useLayoutEffect","useMemo","useRef","useState","jsx","jsxs","_a","_b","useRef","useState","itemIds","from","to","before","after","useMemo","useEffect","update","useLayoutEffect","Fragment","jsx","jsxs","useLayoutEffect","useState","useEffect","memo","TableInner","Export","jsx","IconButton","Search","Clear","value"]}
|