{"version":3,"sources":["../src/components/list/ListPanel.tsx","../src/components/list/ListItemPanel.tsx","../src/components/core/Loader.tsx","../src/components/core/ErrorMessage.tsx","../src/components/core/ToggleOpenButton.tsx","../src/types/language.ts","../src/components/list/List.tsx","../src/components/list/VirtualizedList.tsx","../src/components/list/SidePanel.tsx","../src/components/list/OrderSelector.tsx","../src/components/list/OperatorSelector.tsx","../src/components/list/Filter.tsx","../src/components/list/FilterText.tsx","../src/components/list/FilterCustom.tsx","../src/components/list/FilterOptions.tsx","../src/components/list/FilterBoolean.tsx","../src/components/list/FilterList.tsx","../src/components/list/SelectedFilter.tsx","../src/components/list/SelectedFilterList.tsx","../src/components/list/TotalItems.tsx","../src/components/list/PagerWrapper.tsx","../src/components/list/ResetFilters.tsx","../src/components/list/RecycleBinFilter.tsx","../src/components/list/CreateItem.tsx","../src/components/list/RefreshList.tsx","../src/components/list/LayoutSelector.tsx","../src/components/list/HeadPanel.tsx"],"names":["useClasses","makeStyles","tokens","observer","jsx","mergeClasses","useState","useEffect","useGenericListSettings","jsxs","Fragment","useCallback","Text","WindowList","order","useMemo","getParamId","FilterValueType","fieldIdForOperator","SearchRegular","o","Field","Button","DismissRegular","PARAM_ORDER","Switch","ToggleButton","Menu","MenuTrigger","MenuPopover","MenuList","MenuItem"],"mappings":"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","file":"index.mjs","sourcesContent":["import { FunctionComponent, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { tokens } from '@fluentui/tokens'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingVerticalS\r\n  },\r\n  loading: {\r\n    backgroundColor: tokens.colorNeutralBackground3\r\n  }\r\n})\r\n\r\n/** Wrap this around each list and use @see ListItemPanel for each item in list. */\r\nexport const ListPanel: FunctionComponent<{ loading?: boolean, children?: React.ReactNode, className?: string }> = observer(({ loading, children, className }) => {\r\n  const classes = useClasses()\r\n\r\n  return (\r\n    <div className={mergeClasses(classes.root, loading && classes.loading, className)}>\r\n      {children}\r\n    </div>\r\n  )\r\n})","import { FunctionComponent } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { tokens } from '@fluentui/tokens'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    padding: tokens.spacingHorizontalS,\r\n    boxShadow: tokens.shadow8\r\n  }\r\n})\r\n\r\n/** Wrap this around each list item panel. */\r\nexport const ListItemPanel: FunctionComponent<{ children?: React.ReactNode, className?: string }> = observer(({ children, className }) => {\r\n  const classes = useClasses()\r\n\r\n  return (\r\n    <div className={mergeClasses(classes.root, className)}>\r\n      {children}\r\n    </div>\r\n  )\r\n})","import { FunctionComponent } from 'react'\r\nimport { Spinner } from '@fluentui/react-spinner'\r\nimport { makeStyles } from '@griffel/react'\r\nimport { tokens } from '@fluentui/tokens'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    padding: tokens.spacingHorizontalL\r\n  },\r\n  spinner: {\r\n    position: 'absolute'\r\n  }\r\n})\r\n\r\n/** Displays loader while performing lengthy operation. */\r\nexport const Loader: FunctionComponent<{ size?: 'sm' | 'md' | 'lg' }> = ({ size }) => {\r\n  const classes = useClasses()\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <Spinner className={classes.spinner} size={size === 'sm' ? 'tiny' : size === 'lg' ? 'huge' : 'medium'} />\r\n    </div>\r\n  )\r\n}","import { FunctionComponent, useState, useEffect } from 'react'\r\nimport { MessageBar, MessageBarBody, MessageBarTitle } from '@fluentui/react-message-bar'\r\nimport { useGenericListSettings } from '@knowmax/genericlist-core'\r\n\r\n/** Displays error message.\r\n * @param error Error object or string.\r\n * @param title Optional title.\r\n */\r\nexport const ErrorMessage: FunctionComponent<{ error?: Error | string, title?: string }> = ({ error, title }) => {\r\n  const genericlistsettings = useGenericListSettings();\r\n  const [message, setMessage] = useState<string | undefined>();\r\n\r\n  useEffect(() => {\r\n    if (typeof error === 'string') {\r\n      setMessage(error);\r\n    } else if (error) {\r\n      genericlistsettings.onErrorMessage(error).then((m) => setMessage(m));\r\n    }\r\n  }, [error, genericlistsettings])\r\n\r\n  return (\r\n    <MessageBar intent='error' role=\"alert\">\r\n\r\n      <MessageBarBody>\r\n        {title &&\r\n          <MessageBarTitle>{title}</MessageBarTitle>\r\n        }\r\n        {message}\r\n      </MessageBarBody>\r\n\r\n    </MessageBar>\r\n  )\r\n}","import { FunctionComponent, useCallback, useState, useEffect } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { ToggleButton, makeStyles } from '@fluentui/react-components'\r\nimport { ChevronRight24Regular } from '@fluentui/react-icons'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    '& .toggle-icon': {\r\n      transformOrigin: 'center',\r\n      transition: 'transform 200ms cubic-bezier(0.4, 0, 0.2, 1)'\r\n    },\r\n    '&[aria-pressed=\"true\"] .toggle-icon': {\r\n      transform: 'rotate(90deg)'\r\n    },\r\n    '&[aria-pressed=\"false\"] .toggle-icon': {\r\n      transform: 'rotate(0deg)'\r\n    }\r\n  }\r\n})\r\n\r\n/** Toggle button.\r\n * @param Initial or updated value. True means open, false closed.\r\n * @param onToggle Callback after user toggles.\r\n */\r\nexport const ToggleOpenButton: FunctionComponent<{ value?: boolean, disabled?: boolean, onToggle?: () => void }> = observer(({ value = false, disabled, onToggle }) => {\r\n  const [open, setOpen] = useState(value)\r\n  const classes = useClasses()\r\n\r\n  useEffect(() => {\r\n    setOpen(value)\r\n  }, [value])\r\n\r\n  const toggle = useCallback(() => {\r\n    if (onToggle) {\r\n      onToggle()\r\n    }\r\n    setOpen(o => !o)\r\n  }, [onToggle])\r\n\r\n  return <ToggleButton\r\n    appearance='transparent'\r\n    className={classes.root}\r\n    disabled={disabled}\r\n    checked={open}\r\n    icon={<ChevronRight24Regular className=\"toggle-icon\" />}\r\n    onClick={toggle} />\r\n})","const GROUP_PLACEHOLDER = 'placeholder'\r\nconst GROUP_LABEL = 'label'\r\nconst GROUP_LAYOUT = 'layout'\r\n\r\nexport const LANGUAGE_PLACEHOLDERDATE = GROUP_PLACEHOLDER + '.date'\r\nexport const LANGUAGE_PLACEHOLDERSEARCH = GROUP_PLACEHOLDER + '.search'\r\n\r\nexport const LANGUAGE_LABELNORESULTS = GROUP_LABEL + '.noresults'\r\nexport const LANGUAGE_LABELRESULTCOUNT = GROUP_LABEL + '.resultcount'\r\nexport const LANGUAGE_LABELRESET = GROUP_LABEL + '.reset'\r\nexport const LANGUAGE_LABELRECYCLEBIN = GROUP_LABEL + '.recyclebin'\r\n\r\nexport const LANGUAGE_LAYOUTLIST = GROUP_LAYOUT + '.list'\r\nexport const LANGUAGE_LAYOUTGRID = GROUP_LAYOUT + '.grid'\r\nexport const LANGUAGE_LAYOUTCOMPACT = GROUP_LAYOUT + '.compact'\r\nexport const LANGUAGE_LAYOUTCARD = GROUP_LAYOUT + '.card'","import { Fragment } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { Text } from '@fluentui/react-text'\r\nimport { GenericList, useGenericListSettings } from '@knowmax/genericlist-core'\r\nimport { Loader, ErrorMessage } from '../../components/core'\r\nimport { LANGUAGE_LABELNORESULTS } from '../../types/language'\r\nimport { ListPanel, PagerWrapper } from '.'\r\n\r\nexport type TOnRenderListItem<T> = (item: T, index: number) => JSX.Element\r\n\r\nexport type TListLayout = 'list' | 'grid' | 'compact' | 'card'\r\n\r\nexport interface IListProps<T = unknown> {\r\n  list: GenericList<T>\r\n  onRenderListItem: TOnRenderListItem<T>\r\n  showPager?: boolean\r\n  layout?: TListLayout\r\n  className?: string\r\n}\r\n\r\nconst useClasses = makeStyles({\r\n  listroot: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingVerticalM\r\n  },\r\n  grid: {\r\n    display: 'grid',\r\n    gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\r\n    gap: tokens.spacingVerticalM\r\n  },\r\n  compact: {\r\n    rowGap: tokens.spacingVerticalXS\r\n  },\r\n  card: {\r\n    display: 'grid',\r\n    gridTemplateColumns: 'repeat(3, 1fr)',\r\n    gap: tokens.spacingVerticalM\r\n  }\r\n})\r\n\r\nconst layoutClassMap = (classes: ReturnType<typeof useClasses>): Partial<Record<TListLayout, string>> => ({\r\n  grid: classes.grid,\r\n  compact: classes.compact,\r\n  card: classes.card,\r\n})\r\n\r\n/** Generic component to render list for items in provided @see GenericList. */\r\n// somehow I need to use <T,> since <T> is not working\r\nexport const List = observer(<T,>({ list, onRenderListItem, showPager = true, layout = 'list', className }: IListProps<T>) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  return (\r\n    <>\r\n      {list.error &&\r\n        <ErrorMessage error={list.error} />\r\n      }\r\n      {(!list.loaded || list.list.length === 0) && list.loading &&\r\n        <Loader />\r\n      }\r\n      {list.loaded && !list.loading && list.list.length === 0 &&\r\n        <Text>{settings.onTranslate(LANGUAGE_LABELNORESULTS)}</Text>\r\n      }\r\n      <div className={mergeClasses(classes.listroot, className)}>\r\n        {list.loaded &&\r\n          <ListPanel loading={list.loading} className={layoutClassMap(classes)[layout]}>\r\n            {list.list.map((item, index) => <Fragment key={index}>{onRenderListItem(item, index)}</Fragment>)}\r\n          </ListPanel>\r\n        }\r\n        {showPager &&\r\n          <PagerWrapper list={list} />\r\n        }\r\n      </div>\r\n    </>\r\n  )\r\n})","import { useCallback, useEffect, useRef, useState } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { Text } from '@fluentui/react-text'\r\nimport { List as WindowList, RowComponentProps } from 'react-window'\r\nimport { AutoSizer } from 'react-virtualized-auto-sizer'\r\nimport { GenericList, useGenericListSettings } from '@knowmax/genericlist-core'\r\nimport { Loader, ErrorMessage } from '../../components/core'\r\nimport { LANGUAGE_LABELNORESULTS } from '../../types/language'\r\nimport { TOnRenderListItem, TListLayout } from './List'\r\n\r\n/**\r\n * Default item heights used when `itemHeight` is not provided, keyed by layout.\r\n * `compact` gets a smaller row since it renders denser content. `grid` and `card`\r\n * fall back to the same height as `list` because react-window uses absolute-positioned\r\n * rows – CSS multi-column grid on the container has no effect on the children.\r\n */\r\nconst ITEM_HEIGHT_BY_LAYOUT: Record<TListLayout, number> = {\r\n  list: 90,\r\n  compact: 64,\r\n  grid: 90,\r\n  card: 90,\r\n}\r\n\r\nexport interface IVirtualizedListProps<T = unknown> {\r\n  list: GenericList<T>\r\n  onRenderListItem: TOnRenderListItem<T>\r\n  /**\r\n   * Fixed pixel height of each list item row.\r\n   * When omitted, defaults to 90 px for `list`/`grid`/`card` and 64 px for `compact`.\r\n   */\r\n  itemHeight?: number\r\n  /**\r\n   * Height of the scrollable list container in pixels.\r\n   *\r\n   * When omitted, the list expands to fill all available vertical space in its\r\n   * parent using `AutoSizer` (from `react-virtualized-auto-sizer`). This requires\r\n   * that a parent element in the tree has a **constrained height** (e.g. `height:\r\n   * 100vh`, `flex: 1` in a fixed-height flex column, or an explicit pixel value).\r\n   * Without a constrained ancestor the measured height will be 0 and nothing will\r\n   * render.\r\n   *\r\n   * When provided, `AutoSizer` is skipped and the list container is sized to the\r\n   * exact pixel value – useful when the parent height is unconstrained.\r\n   */\r\n  height?: number\r\n  /**\r\n   * Layout style – mirrors the `layout` prop of `List` to ease migration.\r\n   *\r\n   * `list` and `compact` translate naturally to row-based virtualization.\r\n   * `grid` and `card` are accepted for API compatibility but items will still\r\n   * render one per row – react-window's absolute-positioned rows are incompatible\r\n   * with CSS multi-column grid on the container.\r\n   */\r\n  layout?: TListLayout\r\n  /** Number of extra items rendered outside the visible area for smoother scrolling. Defaults to 3. */\r\n  overscanCount?: number\r\n  className?: string\r\n}\r\n\r\n// ── Internal row data ─────────────────────────────────────────────────────────\r\n\r\ntype RowData = {\r\n  items: unknown[]\r\n  onRenderListItem: TOnRenderListItem<unknown>\r\n}\r\n\r\n/**\r\n * Row renderer for react-window. Defined outside the observer component so its\r\n * reference stays stable across re-renders (react-window relies on referential\r\n * stability for the rowComponent prop to avoid remounting rows unnecessarily).\r\n */\r\nconst RowRenderer = ({ index, style, ariaAttributes, items, onRenderListItem }: RowComponentProps<RowData>) => {\r\n  const item = items[index]\r\n  return (\r\n    <div style={style} {...ariaAttributes}>\r\n      {item !== undefined && onRenderListItem(item, index)}\r\n    </div>\r\n  )\r\n}\r\n\r\n// ── Styles ────────────────────────────────────────────────────────────────────\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingVerticalS\r\n  },\r\n  listContainer: {\r\n    flex: '1 1 auto',\r\n    overflow: 'hidden'\r\n  },\r\n  loadingFooter: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    padding: tokens.spacingVerticalS\r\n  }\r\n})\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Virtualized list component that renders items with react-window and loads more\r\n * results automatically as the user scrolls down (infinite scroll).\r\n *\r\n * Items from the underlying {@link GenericList} are accumulated across pages so the\r\n * user never loses previously loaded rows. A new page is requested from the server\r\n * once the visible window reaches within {@link IVirtualizedListProps.overscanCount}\r\n * rows of the last loaded item.\r\n *\r\n * **Height behaviour**\r\n *\r\n * - When `height` is **omitted** the list uses `AutoSizer` to fill all available\r\n *   vertical space in its parent. The parent (or an ancestor) must have a\r\n *   constrained height; otherwise the measured size will be 0 and nothing renders.\r\n * - When `height` is **provided** `AutoSizer` is bypassed and the container is\r\n *   fixed to that pixel value, which works fine even when the parent height is\r\n *   unconstrained.\r\n *\r\n * The existing {@link List} component remains unchanged and continues to work with\r\n * a traditional pager – this component is an additive, non-breaking addition.\r\n */\r\nexport const VirtualizedList = observer(<T,>({\r\n  list,\r\n  onRenderListItem,\r\n  itemHeight,\r\n  height,\r\n  layout = 'list',\r\n  overscanCount = 3,\r\n  className\r\n}: IVirtualizedListProps<T>) => {\r\n  const effectiveItemHeight = itemHeight ?? ITEM_HEIGHT_BY_LAYOUT[layout]\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  /** All items accumulated across all loaded pages. */\r\n  const [allItems, setAllItems] = useState<T[]>([])\r\n\r\n  /** Tracks which page we last merged into allItems. */\r\n  const processedPageRef = useRef(0)\r\n\r\n  /**\r\n   * Config hash: captures filter, order, and pageSize – anything that changes\r\n   * the result set (but not the page number itself).  When this changes we reset\r\n   * the accumulated items and reload from page 1.\r\n   */\r\n  const configHash = `${list.filter ?? ''}|${list.orderExpression}|${list.pageSize}`\r\n\r\n  /** Guard against dispatching multiple concurrent load-more requests. */\r\n  const isRequestingMoreRef = useRef(false)\r\n\r\n  // ── Initial load & config-change reset ────────────────────────────────────\r\n  useEffect(() => {\r\n    list.setPage(1)\r\n    processedPageRef.current = 0\r\n    setAllItems([])\r\n    isRequestingMoreRef.current = false\r\n    list.load()\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [list, configHash])\r\n\r\n  // ── Accumulate items when a page finishes loading ──────────────────────────\r\n  useEffect(() => {\r\n    if (!list.loaded || list.loading) return\r\n\r\n    const incomingPage = list.page\r\n\r\n    if (incomingPage === 1) {\r\n      // Handles: initial load, refresh (RefreshList calls setPage(1) before reloading),\r\n      // and save/delete when we haven't yet scrolled past page 1.\r\n      setAllItems(list.list.slice() as T[])\r\n      processedPageRef.current = 1\r\n    } else if (incomingPage > processedPageRef.current) {\r\n      // Normal infinite scroll: a new page arrived, append its rows.\r\n      setAllItems(prev => [...prev, ...(list.list.slice() as T[])])\r\n      processedPageRef.current = incomingPage\r\n    } else {\r\n      // An already-accumulated page was reloaded without resetting to page 1\r\n      // (save/delete calls list.load(true) at the current page).\r\n      // Reset back to page 1 so the accumulated data stays consistent.\r\n      processedPageRef.current = 0\r\n      isRequestingMoreRef.current = false\r\n      setAllItems([])\r\n      list.setPage(1)\r\n      list.load()\r\n      return\r\n    }\r\n\r\n    isRequestingMoreRef.current = false\r\n  // list.loading / list.page / list.loaded are plain MobX observable primitives\r\n  // (boolean / number) so React's Object.is comparison works correctly here.\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [list.loading, list.page, list.loaded])\r\n\r\n  // ── Load-more trigger ──────────────────────────────────────────────────────\r\n  const loadMore = useCallback(() => {\r\n    if (list.loading || isRequestingMoreRef.current || allItems.length >= list.totalCount) return\r\n\r\n    isRequestingMoreRef.current = true\r\n    list.setPage(list.page + 1)\r\n    list.load()\r\n  }, [list, allItems.length])\r\n\r\n  /**\r\n   * Called by react-window after each render pass.  We trigger a load-more when\r\n   * the last fully-rendered row is within `overscanCount` of the end of the\r\n   * currently loaded items.\r\n   */\r\n  const handleRowsRendered = useCallback(\r\n    (_visibleRows: { startIndex: number; stopIndex: number }, allRows: { startIndex: number; stopIndex: number }) => {\r\n      if (allRows.stopIndex >= allItems.length - 1 - overscanCount) {\r\n        loadMore()\r\n      }\r\n    },\r\n    [allItems.length, overscanCount, loadMore]\r\n  )\r\n\r\n  const hasItems = allItems.length > 0\r\n  const isInitialLoading = (!list.loaded || allItems.length === 0) && list.loading\r\n  const isEmpty = list.loaded && !list.loading && allItems.length === 0\r\n  const isLoadingMore = list.loading && hasItems\r\n\r\n  // rowProps must satisfy ExcludeForbiddenKeys_2<RowData>; \"index\" / \"style\" /\r\n  // \"ariaAttributes\" are excluded from rowProps (react-window injects them itself).\r\n  const rowProps: RowData = {\r\n    items: allItems as unknown[],\r\n    onRenderListItem: onRenderListItem as TOnRenderListItem<unknown>\r\n  }\r\n\r\n  return (\r\n    <div className={mergeClasses(classes.root, className)}>\r\n      {list.error && <ErrorMessage error={list.error} />}\r\n\r\n      {isInitialLoading && <Loader />}\r\n\r\n      {isEmpty && (\r\n        <Text>{settings.onTranslate(LANGUAGE_LABELNORESULTS)}</Text>\r\n      )}\r\n\r\n      {hasItems && (\r\n        <div style={height !== undefined ? { height } : undefined} className={classes.listContainer}>\r\n          {height !== undefined ? (\r\n            <WindowList\r\n              rowComponent={RowRenderer}\r\n              rowCount={allItems.length}\r\n              rowHeight={effectiveItemHeight}\r\n              rowProps={rowProps}\r\n              overscanCount={overscanCount}\r\n              onRowsRendered={handleRowsRendered}\r\n              style={{ height: '100%', width: '100%' }}\r\n            />\r\n          ) : (\r\n            <AutoSizer\r\n              renderProp={({ height: autoHeight, width }: { height: number | undefined; width: number | undefined }) => (\r\n                <WindowList\r\n                  rowComponent={RowRenderer}\r\n                  rowCount={allItems.length}\r\n                  rowHeight={effectiveItemHeight}\r\n                  rowProps={rowProps}\r\n                  overscanCount={overscanCount}\r\n                  onRowsRendered={handleRowsRendered}\r\n                  style={{ height: autoHeight ?? '100%', width: width ?? '100%' }}\r\n                />\r\n              )}\r\n            />\r\n          )}\r\n        </div>\r\n      )}\r\n\r\n      {isLoadingMore && (\r\n        <div className={classes.loadingFooter}>\r\n          <Loader size='sm' />\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n})\r\n","import { FunctionComponent, useState, useCallback } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { Caption1Strong, tokens } from \"@fluentui/react-components\"\r\nimport { GenericList } from \"@knowmax/genericlist-core\"\r\nimport { ToggleOpenButton } from \"../core\"\r\nimport { ResetFilters, RecycleBinFilter } from \".\"\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    minWidth: 0,\r\n    padding: tokens.spacingHorizontalS,\r\n    backgroundColor: tokens.colorBrandBackground2,\r\n    boxShadow: tokens.shadow8,\r\n    position: 'sticky',\r\n    overflowX: 'hidden',\r\n    transitionProperty: 'row-gap',\r\n    transitionDuration: '350ms',\r\n    transitionTimingFunction: 'cubic-bezier(0.4, 0, 0.2, 1)'\r\n  },\r\n  rootOpen: {\r\n    rowGap: tokens.spacingHorizontalM,\r\n  },\r\n  rootClosed: {\r\n    rowGap: '0px',\r\n  },\r\n  head: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between'\r\n  },\r\n  headCollapsible: {\r\n    cursor: 'pointer'\r\n  },\r\n  contents: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingHorizontalL,\r\n    overflow: 'hidden',\r\n    transitionProperty: 'max-height, opacity, transform',\r\n    transitionDuration: '350ms',\r\n    transitionTimingFunction: 'cubic-bezier(0.4, 0, 0.2, 1)'\r\n  },\r\n  contentsOpen: {\r\n    maxHeight: '2000px', // Large enough to accommodate content\r\n    opacity: '1',\r\n    transform: 'translateY(0px)'\r\n  },\r\n  contentsClosed: {\r\n    maxHeight: '0px',\r\n    opacity: '0',\r\n    transform: 'translateY(-8px)'\r\n  }\r\n})\r\n\r\n/** Wrap this around components to be put on a fancy side panel besides list. Renders as div. */\r\nexport const SidePanel: FunctionComponent<{\r\n  children?: React.ReactNode,\r\n  caption?: string,\r\n  showResetFilters?: boolean,\r\n  showRecycleBinFilter?: boolean,\r\n  collapsible?: boolean,\r\n  collapsed?: boolean,\r\n  list?: GenericList,\r\n  listId?: string,\r\n  className?: string,\r\n  captionClassName?: string,\r\n}> = observer(({\r\n  children,\r\n  caption,\r\n  showResetFilters = true,\r\n  showRecycleBinFilter = false,\r\n  collapsible = false,\r\n  collapsed = false,  \r\n  list,\r\n  listId,\r\n  className,\r\n  captionClassName,\r\n}) => {\r\n  const [open, setOpen] = useState(!collapsed || !collapsible)\r\n  const classes = useClasses()\r\n\r\n  const toggle = useCallback(() => {\r\n    if (collapsible) {\r\n      setOpen(o => !o)\r\n    }\r\n  }, [collapsible])\r\n\r\n  return (\r\n    <div className={mergeClasses(\r\n      classes.root,\r\n      open ? classes.rootOpen : classes.rootClosed,\r\n      className\r\n    )}>\r\n      <section className={mergeClasses(classes.head, collapsible && classes.headCollapsible)} onClick={toggle} aria-expanded={collapsible ? open : undefined}>\r\n        {caption &&\r\n          <Caption1Strong className={captionClassName}>{caption}</Caption1Strong>\r\n        }\r\n        {collapsible && <ToggleOpenButton value={open} />}\r\n      </section>\r\n\r\n      <section className={mergeClasses(\r\n        classes.contents,\r\n        open ? classes.contentsOpen : classes.contentsClosed\r\n      )}>\r\n        {showResetFilters && <ResetFilters list={list} listId={listId} />}\r\n        {showRecycleBinFilter && <RecycleBinFilter listId={listId} />}\r\n        {children}\r\n      </section>\r\n    </div>\r\n  )\r\n})","import { FunctionComponent, useMemo, useCallback } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { makeStyles } from '@griffel/react'\r\nimport { Dropdown, Option } from \"@fluentui/react-components\"\r\nimport type { SelectionEvents, OptionOnSelectData } from \"@fluentui/react-components\"\r\nimport { ArrowSortUpRegular, ArrowSortDownRegular, TextSortAscendingRegular, TextSortDescendingRegular } from \"@fluentui/react-icons\"\r\nimport { useGenericListSettings, parseOrderExpression, IOrder, PARAM_ORDER, getParamId, FilterValueType } from \"@knowmax/genericlist-core\"\r\n\r\ndeclare module '@knowmax/genericlist-core' {\r\n  interface IOrder {\r\n    /** When set to FilterValueType.string, text-specific sort icons are shown instead of the generic arrows. */\r\n    //fieldType?: FilterValueType\r\n  }\r\n}\r\n\r\nconst useClasses = makeStyles({\r\n  dropdown: {\r\n    width: '100%',\r\n    minWidth: 0\r\n  },\r\n  dropdownButton: {\r\n    minWidth: 0,\r\n    width: '100%'\r\n  },\r\n  withIcon: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    columnGap: '6px'\r\n  }\r\n})\r\n\r\n/** Offers sort order options. Serializes and deserializes in query params of url. */\r\nexport const OrderSelector: FunctionComponent<{ list: IOrder[], listId?: string }> = observer(({ list, listId }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const selectedkey = useMemo(() => {\r\n    const ordervalue = settings.params.get(getParamId(PARAM_ORDER, listId))\r\n\r\n    if (ordervalue) {\r\n      const [field, descending] = parseOrderExpression(ordervalue)\r\n      const order = list.find((order) => keyForOrder(order.field, order.descending) === keyForOrder(field, descending))\r\n\r\n      return order ? keyForOrder(order.field, order.descending) : undefined\r\n    } else {\r\n      const order = list.find((order) => order.default === true)\r\n\r\n      return order ? keyForOrder(order.field, order.descending) : undefined\r\n    }\r\n  }, [settings.params, list, listId])\r\n\r\n  const options = useMemo(() => {\r\n    return list\r\n      .filter((order) => !order.isAvailable || order.isAvailable(order, settings.params, listId))\r\n      .map((order) => ({\r\n        key: keyForOrder(order.field, order.descending),\r\n        text: order.name,\r\n        data: order\r\n      }))\r\n  }, [list, settings.params, listId])\r\n\r\n  const selectedOrder = useMemo(() => options.find(o => o.key === selectedkey)?.data, [options, selectedkey])\r\n\r\n  const change = useCallback((_ev: SelectionEvents, data: OptionOnSelectData) => {\r\n    if (data.optionValue) {\r\n      const neworder = list.find((order) => keyForOrder(order.field, order.descending) === data.optionValue)\r\n\r\n      const params = new URLSearchParams(settings.params)\r\n      if (neworder) {\r\n        params.set(getParamId(PARAM_ORDER, listId), `${neworder.field}${neworder.descending ? ' desc' : ''}`)\r\n      }\r\n      settings.serialize(params)\r\n    }\r\n  }, [list, settings.params, listId])\r\n\r\n  return (\r\n    <Dropdown\r\n      className={classes.dropdown}\r\n      value={selectedOrder?.name ?? ''}\r\n      selectedOptions={selectedkey ? [selectedkey] : []}\r\n      onOptionSelect={change}\r\n      button={{\r\n        className: classes.dropdownButton,\r\n        children: (\r\n          <span className={classes.withIcon}>\r\n            <SortIcon descending={selectedOrder?.descending} fieldType={selectedOrder?.fieldType} />\r\n            {selectedOrder?.name}\r\n          </span>\r\n        )\r\n      }}\r\n    >\r\n      {options.map((option) => (\r\n        <Option key={option.key} value={option.key} text={option.text}>\r\n          <span className={classes.withIcon}>\r\n            <SortIcon descending={option.data.descending} fieldType={option.data.fieldType} />\r\n            {option.text}\r\n          </span>\r\n        </Option>\r\n      ))}\r\n    </Dropdown>\r\n  )\r\n})\r\n\r\nconst SortIcon = ({ descending, fieldType }: { descending?: boolean, fieldType?: FilterValueType }) => {\r\n  if (fieldType === FilterValueType.string) {\r\n    return descending ? <TextSortDescendingRegular /> : <TextSortAscendingRegular />\r\n  }\r\n  return descending ? <ArrowSortDownRegular /> : <ArrowSortUpRegular />\r\n}\r\n\r\nconst keyForOrder = (field: string, descending?: boolean) => `${field}${descending === true}`","import { FunctionComponent, useMemo, useCallback, JSX } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { FilterOperator, IFilter } from \"@knowmax/genericlist-core\"\r\nimport { fieldIdForOperator } from \"@knowmax/genericlist-core\"\r\nimport { useGenericListSettings, getParamId } from \"@knowmax/genericlist-core\"\r\nimport { Menu, MenuTrigger, MenuPopover, MenuList, MenuItem, SplitButton } from \"@fluentui/react-components\"\r\nimport { EqualCircleRegular, EqualOffRegular, ChevronRightRegular, ChevronLeftRegular, SearchRegular } from \"@fluentui/react-icons\"\r\nimport { makeStyles } from \"@griffel/react\"\r\nimport { tokens } from \"@fluentui/tokens\"\r\n\r\nconst useClasses = makeStyles({\r\n  unicodeIcon: {\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    width: '20px',\r\n    height: '20px',\r\n    fontSize: '14px',\r\n    fontWeight: 'bold',\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n})\r\n\r\ntype TOperatorConfig = {\r\n  operator: FilterOperator\r\n  icon: () => JSX.Element\r\n  ariaLabel: string\r\n}\r\n\r\nconst UnicodeIcon: FunctionComponent<{ symbol: string, className?: string }> = ({ symbol, className }) => (\r\n  <span className={className} aria-hidden=\"true\">{symbol}</span>\r\n)\r\n\r\nconst buildOperatorConfigs = (unicodeIconClass: string): TOperatorConfig[] => [\r\n  { operator: FilterOperator.eq, icon: () => <EqualCircleRegular />, ariaLabel: 'Equals' },\r\n  { operator: FilterOperator.ne, icon: () => <EqualOffRegular />, ariaLabel: 'Not equals' },\r\n  { operator: FilterOperator.gt, icon: () => <ChevronRightRegular />, ariaLabel: 'Greater than' },\r\n  { operator: FilterOperator.ge, icon: () => <UnicodeIcon symbol=\"≥\" className={unicodeIconClass} />, ariaLabel: 'Greater or equal' },\r\n  { operator: FilterOperator.lt, icon: () => <ChevronLeftRegular />, ariaLabel: 'Less than' },\r\n  { operator: FilterOperator.le, icon: () => <UnicodeIcon symbol=\"≤\" className={unicodeIconClass} />, ariaLabel: 'Less or equal' },\r\n  { operator: FilterOperator.contains, icon: () => <SearchRegular />, ariaLabel: 'Contains' },\r\n]\r\n\r\n/** Offers operator options. Serializes and deserializes in query params of url. */\r\nexport const OperatorSelector: FunctionComponent<{ filter: IFilter, listId?: string }> = observer(({ filter, listId }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const filterparamid = useMemo(() => getParamId(filter.id, listId), [filter.id, listId])\r\n\r\n  const operators = useMemo(() => filter.operators ?? [FilterOperator.eq], [filter.operators])\r\n\r\n  const selected = useMemo(() => {\r\n    return settings.params.get(fieldIdForOperator(filterparamid)) ?? filter.operator\r\n  }, [filter.operator, filterparamid, settings.params])\r\n\r\n  const operatorConfigs = useMemo(() => buildOperatorConfigs(classes.unicodeIcon), [classes.unicodeIcon])\r\n\r\n  const getConfig = useCallback((op?: string) =>\r\n    operatorConfigs.find(c => c.operator === op),\r\n    [operatorConfigs]\r\n  )\r\n\r\n  const handleSelect = useCallback((operator: FilterOperator) => {\r\n    const params = new URLSearchParams(settings.params)\r\n\r\n    if (operator === filter.operator) {\r\n      params.delete(fieldIdForOperator(filterparamid))\r\n    } else {\r\n      params.set(fieldIdForOperator(filterparamid), operator)\r\n    }\r\n\r\n    settings.serialize(params)\r\n  }, [filterparamid, filter.operator, settings.params])\r\n\r\n  const selectedConfig = getConfig(selected)\r\n\r\n  return (\r\n    <>\r\n      {operators.length > 1 &&\r\n        <Menu>\r\n          <MenuTrigger disableButtonEnhancement>\r\n            <SplitButton\r\n              appearance=\"subtle\"\r\n              icon={selectedConfig?.icon()}\r\n              aria-label={selectedConfig?.ariaLabel}\r\n            />\r\n          </MenuTrigger>\r\n          <MenuPopover>\r\n            <MenuList>\r\n              {operators.map((op) => {\r\n                const config = getConfig(op)\r\n                if (!config) return null\r\n                return (\r\n                  <MenuItem\r\n                    key={op}\r\n                    icon={config.icon()}\r\n                    aria-label={config.ariaLabel}\r\n                    onClick={() => handleSelect(op)}\r\n                  />\r\n                )\r\n              })}\r\n            </MenuList>\r\n          </MenuPopover>\r\n        </Menu>\r\n      }\r\n    </>\r\n  )\r\n})","import { FunctionComponent, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { useGenericListSettings, IFilter, FilterValueType } from '@knowmax/genericlist-core'\r\nimport { FilterCustom, FilterText, FilterOptions, FilterBoolean } from '.'\r\n\r\n/** Renders a single filter. Serializes and deserializes in query params of url. */\r\nexport const Filter: FunctionComponent<{ filter: IFilter, listId?: string }> = observer(({ filter, listId }) => {\r\n  const settings = useGenericListSettings()\r\n\r\n  const visible = useMemo(() => {\r\n    return !filter.isAvailable || filter.isAvailable(filter, settings.params)\r\n  }, [filter, settings.params])\r\n\r\n  return (\r\n    <>\r\n      {visible &&\r\n        <>\r\n          {filter.renderCustom ?\r\n            <FilterCustom filter={filter} listId={listId} /> :\r\n            filter.valueType === FilterValueType.boolean ?\r\n              <FilterBoolean filter={filter} listId={listId} /> :\r\n              filter.options ?\r\n                <FilterOptions filter={filter} listId={listId} /> :\r\n                <FilterText filter={filter} listId={listId} />\r\n          }\r\n        </>\r\n      }\r\n    </>\r\n  )\r\n})","import { FunctionComponent, useState, useCallback, useEffect, useMemo, ChangeEvent } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles } from '@griffel/react'\r\nimport { SearchRegular, DismissRegular } from '@fluentui/react-icons'\r\nimport { Button } from '@fluentui/react-button'\r\nimport { Field } from '@fluentui/react-field'\r\nimport { Input, InputOnChangeData } from '@fluentui/react-input'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { IFilter } from '@knowmax/genericlist-core'\r\nimport { fieldIdForOperator } from '@knowmax/genericlist-core'\r\nimport { useGenericListSettings, getParamId } from '@knowmax/genericlist-core'\r\nimport { LANGUAGE_PLACEHOLDERSEARCH } from '../../types/language'\r\nimport { OperatorSelector } from '.'\r\n\r\nconst useClasses = makeStyles({\r\n  rootvertical: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingVerticalXS\r\n  },\r\n  buttoncontainer: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'end',\r\n    justifyContent: 'end',\r\n    columnGap: tokens.spacingHorizontalXS\r\n  }\r\n})\r\n\r\n/** Renders a single text input filter. Serializes and deserializes in query params of url. */\r\nexport const FilterText: FunctionComponent<{ filter: IFilter, listId?: string }> = observer(({ filter, listId }) => {\r\n  const classes = useClasses()\r\n  const [value, setValue] = useState('') // used for full text filters only\r\n  const settings = useGenericListSettings()\r\n\r\n  const filterparamid = useMemo(() => getParamId(filter.id, listId), [filter.id, listId])\r\n\r\n  useEffect(() => {\r\n    setValue(settings.params.get(filterparamid) ?? '')\r\n  }, [settings.params, filterparamid])\r\n\r\n  const execute = useCallback((query: string) => {\r\n    const params = new URLSearchParams(settings.params)\r\n    params.delete(filterparamid)\r\n\r\n    if (query !== '') {\r\n      params.set(filterparamid, query)\r\n    } else {\r\n      params.delete(fieldIdForOperator(filterparamid))\r\n    }\r\n\r\n    settings.serialize(params)\r\n  }, [settings.params, filterparamid])\r\n\r\n  const changevalue = useCallback((ev: ChangeEvent<HTMLInputElement>, data: InputOnChangeData) => {\r\n    setValue(data.value ?? '')\r\n  }, [])\r\n\r\n  const clearvalue = useCallback(() => {\r\n    setValue('')\r\n    execute('')\r\n  }, [execute])\r\n\r\n  const onenter = useCallback((e: React.KeyboardEvent<HTMLInputElement>) => {\r\n    if (e.code === 'Enter') {\r\n      execute(value)\r\n    }\r\n  }, [execute, value])\r\n\r\n  const onexecute = useCallback(() => {\r\n    execute(value)\r\n  }, [execute, value])\r\n\r\n  const allowoperatorselection = useMemo(() => filter.operators && filter.operators.length > 0, [filter.operators])\r\n\r\n  return (\r\n    <div className={classes.rootvertical}>\r\n      <Field label={filter.name}>\r\n        <Input\r\n          autoComplete='off'\r\n          data-1p-ignore\r\n          placeholder={filter.placeholderText ?? settings.onTranslate(LANGUAGE_PLACEHOLDERSEARCH)}\r\n          value={value}\r\n          spellCheck={false}\r\n          onChange={changevalue}\r\n          onKeyUp={onenter}\r\n        />\r\n      </Field>\r\n\r\n      <div className={classes.buttoncontainer} >\r\n        {allowoperatorselection &&\r\n          <OperatorSelector filter={filter} listId={listId} />}\r\n        <Button\r\n          onClick={clearvalue}\r\n          disabled={!value}\r\n          appearance='transparent'\r\n          icon={<DismissRegular />}\r\n        />\r\n        <Button\r\n          onClick={onexecute}\r\n          disabled={!value}\r\n          appearance='transparent'\r\n          icon={<SearchRegular />}\r\n        />\r\n      </div>\r\n    </div>\r\n  )\r\n})","import { FunctionComponent, useCallback, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { IFilter } from '@knowmax/genericlist-core'\r\nimport { useGenericListSettings, fieldIdForOperator, getParamId } from '@knowmax/genericlist-core'\r\n\r\n/** Renders filter with renderCustom property set. */\r\nexport const FilterCustom: FunctionComponent<{ filter: IFilter, listId?: string }> = observer(({ filter, listId }) => {\r\n  const settings = useGenericListSettings()\r\n\r\n  const filterparamid = useMemo(() => getParamId(filter.id, listId), [filter.id, listId])\r\n\r\n  const selected = useMemo(() => {\r\n    return settings.params.get(filterparamid) ?? undefined\r\n  }, [filter, settings.params])\r\n\r\n  const select = useCallback((value?: string) => {\r\n    const params = new URLSearchParams(settings.params)\r\n    params.delete(filterparamid)\r\n\r\n    if (value && value !== '') {\r\n      params.set(filterparamid, value);\r\n    } else {\r\n      params.delete(fieldIdForOperator(filterparamid))\r\n    }\r\n\r\n    settings.serialize(params)\r\n  }, [filter, settings.params, filterparamid])\r\n\r\n  return (\r\n    <>\r\n      {filter.renderCustom &&\r\n        <>          \r\n          {filter.renderCustom(filter, selected, select, listId)}\r\n        </>\r\n      }\r\n    </>\r\n  )\r\n})","import { FormEvent, FunctionComponent, useCallback, useMemo, useState, useEffect, MouseEventHandler } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles } from '@griffel/react'\r\nimport { RadioGroup, Radio, RadioGroupOnChangeData } from '@fluentui/react-components'\r\nimport { Field } from '@fluentui/react-field'\r\nimport { Button } from '@fluentui/react-button'\r\nimport { DismissRegular } from '@fluentui/react-icons'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { IFilter, useGenericListSettings, getParamId } from '@knowmax/genericlist-core'\r\nimport { ToggleOpenButton } from '../core'\r\n\r\nconst useClasses = makeStyles({\r\n  head: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    gap: tokens.spacingVerticalM,\r\n    cursor: 'pointer',    \r\n    ':hover': {\r\n      backgroundColor: tokens.colorSubtleBackgroundHover\r\n    }\r\n  },\r\n  actions: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    gap: tokens.spacingVerticalM\r\n  }\r\n})\r\n\r\nexport const FilterOptions: FunctionComponent<{ filter: IFilter, listId?: string }> = observer(({ filter, listId }) => {\r\n  const [open, setOpen] = useState(true)\r\n  const settings = useGenericListSettings()\r\n  const classes = useClasses()\r\n\r\n  const filterparamid = useMemo(() => getParamId(filter.id, listId), [filter.id, listId])\r\n\r\n  useEffect(() => {\r\n    if (filter.collapsed === true && !settings.params.get(filterparamid)) {\r\n      setOpen(false)\r\n    }\r\n  }, [filter.collapsed, filterparamid, settings.params])\r\n\r\n  const toggleopen = useCallback(() => {\r\n    setOpen(!open)\r\n  }, [open])\r\n\r\n  const selected = useMemo(() => {\r\n    const id = settings.params.get(filterparamid)\r\n\r\n    if (id) {\r\n      return id\r\n    } else {\r\n      // get default option\r\n      return filter.options?.find(o => o.value === undefined && o.expression === undefined)?.id\r\n    }\r\n  }, [filter, filterparamid, settings.params])\r\n\r\n\r\n  const select = useCallback((ev: FormEvent<HTMLDivElement>, data: RadioGroupOnChangeData) => {\r\n    const params = new URLSearchParams(settings.params)\r\n    params.delete(filterparamid)\r\n\r\n    if (data.value) {\r\n      const o = filter.options?.find(o => o.id === data.value)\r\n\r\n      if (o && ((o.expression !== undefined && o.expression !== '') || (o.value !== undefined))) {\r\n        params.set(filterparamid, o.id)\r\n      }\r\n\r\n      settings.serialize(params)\r\n    }\r\n  }, [filter, filterparamid, settings.params])\r\n\r\n  const clear = useCallback<MouseEventHandler>((event) => {\r\n    event.stopPropagation()\r\n\r\n    const params = new URLSearchParams(settings.params)\r\n\r\n    if (params.has(filterparamid)) {\r\n      params.delete(filterparamid)\r\n      settings.serialize(params)\r\n    }\r\n  }, [filterparamid, settings.params])\r\n\r\n  return (\r\n    <Field label={\r\n      <div className={classes.head} onClick={toggleopen}>\r\n        {filter.name}\r\n\r\n        <div className={classes.actions}>\r\n          {selected !== undefined &&\r\n            <Button\r\n              onClick={clear}\r\n              appearance='transparent'\r\n              icon={<DismissRegular />}\r\n            />\r\n          }\r\n\r\n          <ToggleOpenButton value={open} />\r\n        </div>\r\n      </div>}>\r\n\r\n      {open && filter.options &&\r\n        <RadioGroup value={selected ?? ''} onChange={select} >\r\n          {filter.options.map((option) =>\r\n            <Radio key={option.id} value={option.id} label={option.name ?? option.id} />)}\r\n        </RadioGroup>\r\n      }\r\n    </Field>\r\n  )\r\n})","import { FunctionComponent, useCallback, useMemo, ChangeEvent } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles } from '@griffel/react'\r\nimport { Switch, SwitchOnChangeData } from '@fluentui/react-switch'\r\nimport { Field } from '@fluentui/react-field'\r\nimport { Checkbox, CheckboxOnChangeData } from '@fluentui/react-checkbox'\r\nimport { IFilter } from '@knowmax/genericlist-core'\r\nimport { useGenericListSettings, getParamId } from '@knowmax/genericlist-core'\r\n\r\nconst useClasses = makeStyles({\r\n  horizontal: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center'\r\n  }\r\n})\r\n\r\nconst VALUETRUE = 'true'\r\nconst VALUEFALSE = 'false'\r\n\r\n/** Renders filter for boolean value. */\r\nexport const FilterBoolean: FunctionComponent<{ filter: IFilter, listId?: string }> = observer(({ filter, listId }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n  const filterparamid = useMemo(() => getParamId(filter.id, listId), [filter.id, listId])\r\n\r\n  const checked = useMemo(() => {\r\n    const value = settings.params.get(filterparamid) ?? undefined\r\n\r\n    return (value === VALUETRUE || value === '1') ? true :\r\n      (value === VALUEFALSE || value === '0') ? false :\r\n        undefined\r\n  }, [filter, settings.params])\r\n\r\n  const enabled = useMemo(() => checked !== undefined, [checked])\r\n\r\n  const toggle = useCallback((ev: ChangeEvent<HTMLInputElement>, data: CheckboxOnChangeData) => {\r\n    if (typeof data.checked === 'boolean') {\r\n      //setEnabled(data.checked)\r\n\r\n      const params = new URLSearchParams(settings.params)\r\n      if (data.checked) {\r\n        params.delete(filterparamid);\r\n        params.set(filterparamid, VALUEFALSE);\r\n      } else if (params.has(filterparamid)) {\r\n        params.delete(filterparamid);\r\n      }\r\n\r\n      settings.serialize(params)\r\n    }\r\n  }, [settings.params, filterparamid])\r\n\r\n  const select = useCallback((ev: ChangeEvent<HTMLInputElement>, data: SwitchOnChangeData) => {\r\n    const params = new URLSearchParams(settings.params)\r\n    params.delete(filterparamid)\r\n\r\n    params.set(filterparamid, data.checked ? VALUETRUE : VALUEFALSE)\r\n\r\n    settings.serialize(params)\r\n  }, [filter, settings.params, filterparamid])\r\n\r\n  return (\r\n    <Field label={filter.name}>\r\n      <div className={classes.horizontal}>\r\n        <Checkbox\r\n          checked={enabled}\r\n          onChange={toggle}\r\n        />\r\n        <Switch\r\n          disabled={!enabled}\r\n          checked={checked === undefined ? false : checked}\r\n          onChange={select} />\r\n      </div>\r\n    </Field>\r\n  )\r\n})","import { FunctionComponent, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { IFilter } from '@knowmax/genericlist-core'\r\nimport { Filter } from '.'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingVerticalM\r\n  }\r\n})\r\n\r\n/** Renders list of filters. */\r\nexport const FilterList: FunctionComponent<{ list: IFilter[], listId?: string, className?: string }> = observer(({ list, listId, className }) => {\r\n  const classes = useClasses()\r\n\r\n  const visiblelist = useMemo(() => list.filter((filter) => filter.hidden !== true), [list])\r\n\r\n  return (\r\n    <div className={mergeClasses(classes.root, className)}>\r\n      {visiblelist.map((filter) => <Filter key={filter.id} filter={filter} listId={listId} />)}\r\n    </div>\r\n  )\r\n})","import { FunctionComponent, useCallback } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles } from '@griffel/react'\r\nimport { Filter28Filled, DismissRegular } from '@fluentui/react-icons'\r\nimport { Button } from '@fluentui/react-button'\r\nimport { Text } from '@fluentui/react-text'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { IFilter, useGenericListSettings, getParamId } from '@knowmax/genericlist-core'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    columnGap: tokens.spacingHorizontalS,\r\n    boxShadow: tokens.shadow8,\r\n    padding: tokens.spacingHorizontalS,\r\n    borderRadius: tokens.borderRadiusMedium,\r\n    backgroundColor: tokens.colorBrandBackgroundSelected\r\n  },\r\n  leftright: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n    width: '100%'\r\n  },\r\n  textblock: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    overFlowX: 'hidden',\r\n    flexGrow: 1\r\n  },\r\n  textcolor: {\r\n    color: tokens.colorNeutralForegroundStaticInverted\r\n  }\r\n})\r\n\r\nexport const SelectedFilter: FunctionComponent<{ filter: IFilter, value: string, allowClear: boolean , listId?: string}> = observer(({ filter, value, allowClear, listId }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const clear = useCallback(() => {\r\n    const params = new URLSearchParams(settings.params)\r\n    params.delete(getParamId(filter.id, listId))\r\n    settings.serialize(params)\r\n  }, [settings.params, filter.id, listId])\r\n\r\n  return (\r\n    <div className={classes.root}>      \r\n      <Filter28Filled color={tokens.colorNeutralForegroundStaticInverted} style={{minWidth: '22px'}}/>\r\n\r\n      <div className={classes.leftright}>\r\n        <div className={classes.textblock}>\r\n          <Text className={classes.textcolor} weight='bold'>{filter.name}</Text>\r\n          <Text className={classes.textcolor} block wrap={true}>{value}</Text>\r\n        </div>\r\n\r\n        {allowClear &&\r\n          <Button\r\n            appearance='transparent'\r\n            icon={<DismissRegular color={tokens.colorNeutralForegroundStaticInverted} />}\r\n            onClick={clear} />\r\n        }\r\n      </div>\r\n    </div>\r\n  )\r\n})","import { FunctionComponent, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport { IFilter, useGenericListSettings, getParamId } from '@knowmax/genericlist-core'\r\nimport { SelectedFilter } from './SelectedFilter'\r\n\r\ninterface IFilterInfo {\r\n  filter: IFilter\r\n  value: string\r\n}\r\n\r\nconst useClasses = makeStyles({\r\n  list: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    rowGap: tokens.spacingVerticalXS\r\n  }\r\n})\r\n\r\n/** Shows list of filters currently serialized in params of query. */\r\nexport const SelectedFilterList: FunctionComponent<{ list: IFilter[], hiddenOnly?: boolean, allowClear?: boolean, listId?: string, className?: string }> = observer(({ list, hiddenOnly = true, allowClear = true, listId, className }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const infolist = useMemo<IFilterInfo[]>(() => {\r\n    return list.map<IFilterInfo>((filter) => {\r\n      const value = settings.params.get(getParamId(filter.id, listId))\r\n\r\n      return {\r\n        filter: filter,\r\n        value: value ?? ''\r\n      }\r\n    }).filter((info) => {\r\n      return info.value.trim() !== '' && (!hiddenOnly || info.filter.hidden === true)\r\n    })\r\n  }, [list, settings.params, hiddenOnly, listId])\r\n\r\n  return (\r\n    <div className={mergeClasses(classes.list, className)}>\r\n      {infolist.map((info) => <SelectedFilter key={info.filter.id} filter={info.filter} value={info.value} allowClear={allowClear} listId={listId} />)}\r\n    </div>\r\n  )\r\n})","import { FunctionComponent } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { Text } from '@fluentui/react-text'\r\nimport { GenericList, useGenericListSettings } from '@knowmax/genericlist-core'\r\nimport { LANGUAGE_LABELRESULTCOUNT } from '../../types/language'\r\n\r\n/** Total number of items in generic list. */\r\nexport const TotalItems: FunctionComponent<{ list: GenericList }> = observer(({ list }) => {\r\n  const settings = useGenericListSettings()\r\n\r\n  return (\r\n    <Text>\r\n      {settings.onTranslate(LANGUAGE_LABELRESULTCOUNT, { count: list.totalCount })}\r\n    </Text>\r\n  )\r\n})","import { FunctionComponent, useCallback } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { Pager } from '@knowmax/pager-fluentuiv9'\r\nimport { GenericList, useGenericListSettings, PARAM_PAGE, getParamId } from '@knowmax/genericlist-core'\r\nimport { Loader } from '../core'\r\nimport { TotalItems } from '.'\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center'\r\n  }\r\n})\r\n\r\n/** Dedicated pager wrapper including loader and total number of items for lists. */\r\nexport const PagerWrapper: FunctionComponent<{ list: GenericList, className?: string }> = observer(({ list, className }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const goto = useCallback((page: number) => {\r\n    const params = new URLSearchParams(settings.params)\r\n\r\n    if (page > 1) {\r\n      params.set(getParamId(PARAM_PAGE, list.id), page.toString())\r\n    } else {\r\n      params.delete(getParamId(PARAM_PAGE, list.id))\r\n    }\r\n\r\n    settings.serialize(params)\r\n  }, [settings.params, list.id])\r\n\r\n  return (\r\n    <>\r\n      {list.loaded && list.totalCount !== 0 &&\r\n        <div className={mergeClasses(classes.root, className)}>\r\n          <Pager\r\n            pageSize={list.pageSize}\r\n            totalResults={list.totalCount}\r\n            currentPage={list.page}\r\n            onChange={goto}\r\n            display='buttons'\r\n          />\r\n          <div>\r\n            {list.loading ?\r\n              <Loader size='sm' />\r\n              :\r\n              <TotalItems list={list} />\r\n            }\r\n          </div>\r\n        </div>\r\n      }\r\n    </>\r\n  )\r\n})","import { FunctionComponent, useCallback, useMemo } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { makeStyles } from '@griffel/react'\r\nimport { Button } from \"@fluentui/react-button\"\r\nimport { GenericList, useGenericListSettings, getParamId, PARAM_ORDER } from \"@knowmax/genericlist-core\"\r\nimport { LANGUAGE_LABELRESET } from \"../../types/language\"\r\n\r\nconst useClasses = makeStyles({\r\n  button: {\r\n    width: '100%'\r\n  }\r\n})\r\n\r\nexport const ResetFilters: FunctionComponent<{ list?: GenericList, listId?: string }> = observer(({ list, listId }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const hasfilter = useMemo(() => {\r\n    if (list?.filterList) {\r\n      // Iterate through the filterList to check if any filter has a value set in params\r\n      const hasActiveFilter = list.filterList.some(filter => {\r\n        const paramId = getParamId(filter.id, listId)\r\n        return settings.params.has(paramId)\r\n      })\r\n      if (hasActiveFilter) return true\r\n      // Also show the reset button when a non-default order has been selected\r\n      return settings.params.has(getParamId(PARAM_ORDER, listId))\r\n    } else if (listId !== undefined && listId !== '') {\r\n      for (const key of settings.params.keys()) {\r\n        if (key.startsWith(listId + '.')) {\r\n          return true\r\n        }\r\n      }\r\n\r\n      return false\r\n    } else {\r\n      return settings.params.toString() !== ''\r\n    }\r\n  }, [settings.params, listId, list?.filterList])\r\n\r\n  const reset = useCallback(() => {\r\n    if (listId !== undefined && listId !== '') {\r\n      // Only remove everything prefixed with listId.\r\n      // Snapshot the matching keys first — deleting during iteration shifts indices\r\n      // and causes subsequent entries to be skipped (e.g. the order param).\r\n      const params = new URLSearchParams(settings.params);\r\n      const keysToDelete = Array.from(params.keys()).filter(key => key.startsWith(listId + '.'));\r\n\r\n      keysToDelete.forEach(key => params.delete(key));\r\n\r\n      if (keysToDelete.length > 0) {\r\n        settings.serialize(params);\r\n      }\r\n    } else {\r\n      if (settings.params.toString() !== '') {\r\n        settings.serialize(new URLSearchParams())\r\n      }\r\n    }\r\n\r\n    // deserializeOrder (in @knowmax/genericlist-core) does not reset list.order when the\r\n    // order param is absent, so list.hash never changes and list.load() is never triggered.\r\n    // Resetting the order directly ensures the hash changes and triggers a data reload.\r\n    if (list) {\r\n      const defaultOrder = list.orderList?.find(o => o.default === true)\r\n      list.setOrder(defaultOrder)\r\n    }\r\n  }, [settings, list])\r\n\r\n  return (\r\n    <>\r\n      {hasfilter &&\r\n        <Button appearance='primary' className={classes.button} onClick={reset}>{settings.onTranslate(LANGUAGE_LABELRESET)} </Button>\r\n      }\r\n    </>\r\n  )\r\n})","import { FunctionComponent, useCallback, useMemo, ChangeEvent } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { Switch, SwitchOnChangeData } from \"@fluentui/react-switch\"\r\nimport { useGenericListSettings, getParamId, PARAM_DELETED } from \"@knowmax/genericlist-core\"\r\nimport { LANGUAGE_LABELRECYCLEBIN } from \"../../types/language\"\r\n\r\nexport const RecycleBinFilter: FunctionComponent<{ listId?: string }> = observer(({ listId }) => {\r\n  const settings = useGenericListSettings()\r\n\r\n  const paramid = useMemo(() => getParamId(PARAM_DELETED, listId), [listId])\r\n\r\n  const checked = useMemo(() => {\r\n    const value = settings.params.get(paramid)\r\n\r\n    // Parameter is checked if it exists and is not explicitly set to 'false'\r\n    // Its mere existence (even with no value) means it's true\r\n    return settings.params.has(paramid) && value !== 'false'\r\n  }, [paramid, settings.params])\r\n  \r\n  const select = useCallback((ev: ChangeEvent<HTMLInputElement>, data: SwitchOnChangeData) => {\r\n    const params = new URLSearchParams(settings.params)\r\n    params.delete(paramid)\r\n\r\n    if (data.checked) {\r\n      // Set parameter without value - its existence means it's true\r\n      params.set(paramid, '')\r\n    }\r\n    settings.serialize(params)\r\n  }, [settings.params, paramid])\r\n\r\n  return (\r\n    <Switch\r\n      label={settings.onTranslate(LANGUAGE_LABELRECYCLEBIN)}\r\n      checked={checked}\r\n      onChange={select}\r\n    />\r\n  )\r\n})","import { useCallback } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { Button , ButtonProps } from \"@fluentui/react-button\"\r\nimport { AddRegular } from '@fluentui/react-icons'\r\nimport { GenericCudList } from \"@knowmax/genericlist-core\"\r\n\r\ntype IProps<T = unknown, ET = unknown> = {\r\n  list: GenericCudList<T, ET>\r\n  template?: ET\r\n} & ButtonProps\r\n\r\n/** Renders button to start process to create new item. */\r\nexport const CreateItem = observer(<T = unknown, ET = unknown>(props: IProps<T, ET>) => {\r\n  const { list, template, ...buttonProps } = props\r\n\r\n  const create = useCallback(() => {\r\n    list.create(template)\r\n  }, [list, template])\r\n\r\n  return (\r\n    <Button {...buttonProps} icon={buttonProps.icon || <AddRegular />} onClick={create} />\r\n  )\r\n})","import { useCallback } from \"react\"\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { Button, ButtonProps } from \"@fluentui/react-button\"\r\nimport { ArrowClockwiseRegular } from '@fluentui/react-icons'\r\nimport { GenericList } from \"@knowmax/genericlist-core\"\r\n\r\ntype IProps<T = unknown> = {\r\n  list: GenericList<T>\r\n} & ButtonProps\r\n\r\n/** Renders button to refresh/reload the list data. */\r\nexport const RefreshList = observer(<T = unknown>(props: IProps<T>) => {\r\n  const { list, ...buttonProps } = props\r\n\r\n  const refresh = useCallback(() => {\r\n    list.setPage(1)\r\n    list.load(true)\r\n  }, [list])\r\n\r\n  return (\r\n    <Button {...buttonProps} icon={buttonProps.icon || <ArrowClockwiseRegular />} onClick={refresh} />\r\n  )\r\n})\r\n","import { FunctionComponent, useCallback, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { tokens } from '@fluentui/tokens'\r\nimport {\r\n  Menu, MenuTrigger, MenuButton, MenuPopover, MenuList, MenuItem,\r\n  Tooltip,\r\n  ToggleButton,\r\n} from '@fluentui/react-components'\r\nimport {\r\n  TextBulletListLtrRegular,\r\n  GridRegular,\r\n  TableRegular,\r\n  SquareMultipleRegular,\r\n} from '@fluentui/react-icons'\r\nimport { useGenericListSettings } from '@knowmax/genericlist-core'\r\nimport { LANGUAGE_LAYOUTCARD, LANGUAGE_LAYOUTCOMPACT, LANGUAGE_LAYOUTGRID, LANGUAGE_LAYOUTLIST } from '../../types/language'\r\nimport { TListLayout } from './List'\r\n\r\nexport type TLayoutOption = {\r\n  layout: TListLayout\r\n  /** Translation key used with onTranslate, or a fallback label when not translated. */\r\n  labelKey: string\r\n  /** Fallback label shown when no translator is configured. */\r\n  defaultLabel: string\r\n  icon: JSX.Element\r\n}\r\n\r\n/** Default layout options. Labels are resolved via the onTranslate mechanism at render time. */\r\nexport const ALL_LAYOUT_OPTIONS: TLayoutOption[] = [\r\n  { layout: 'list',    labelKey: LANGUAGE_LAYOUTLIST,    defaultLabel: 'List',    icon: <TextBulletListLtrRegular /> },\r\n  { layout: 'grid',    labelKey: LANGUAGE_LAYOUTGRID,    defaultLabel: 'Grid',    icon: <GridRegular /> },\r\n  { layout: 'compact', labelKey: LANGUAGE_LAYOUTCOMPACT, defaultLabel: 'Compact', icon: <TableRegular /> },\r\n  { layout: 'card',    labelKey: LANGUAGE_LAYOUTCARD,    defaultLabel: 'Cards',   icon: <SquareMultipleRegular /> },\r\n]\r\n\r\nexport interface ILayoutSelectorProps {\r\n  /** Currently active layout. */\r\n  value: TListLayout\r\n  /** Callback fired when the user selects a different layout. */\r\n  onChange: (layout: TListLayout) => void\r\n  /**\r\n   * Subset of layouts to offer. Defaults to all four layouts.\r\n   * When exactly two layouts are provided a two-icon toggle bar is shown;\r\n   * for three or more a menu button is shown.\r\n   */\r\n  availableLayouts?: TListLayout[]\r\n}\r\n\r\nconst useClasses = makeStyles({\r\n  toggleGroup: {\r\n    display: 'inline-flex',\r\n    flexDirection: 'row',\r\n    border: `1px solid ${tokens.colorNeutralStroke1}`,\r\n    borderRadius: tokens.borderRadiusMedium,\r\n    overflow: 'hidden',\r\n  },\r\n  toggleButton: {\r\n    borderRadius: '0',\r\n    border: 'none',\r\n    minWidth: '32px',\r\n  },\r\n  toggleButtonFirst: {\r\n    borderTopLeftRadius: tokens.borderRadiusMedium,\r\n    borderBottomLeftRadius: tokens.borderRadiusMedium,\r\n  },\r\n  toggleButtonLast: {\r\n    borderTopRightRadius: tokens.borderRadiusMedium,\r\n    borderBottomRightRadius: tokens.borderRadiusMedium,\r\n  },\r\n})\r\n\r\n/** Renders a layout selector for a list. Shows a two-icon toggle for two options, or a menu button for three or more. */\r\nexport const LayoutSelector: FunctionComponent<ILayoutSelectorProps> = observer(({ value, onChange, availableLayouts }) => {\r\n  const classes = useClasses()\r\n  const settings = useGenericListSettings()\r\n\r\n  const options = useMemo(() => {\r\n    const base = availableLayouts\r\n      ? ALL_LAYOUT_OPTIONS.filter(o => availableLayouts.includes(o.layout))\r\n      : ALL_LAYOUT_OPTIONS\r\n    return base.map(o => ({ ...o, label: settings.onTranslate(o.labelKey) ?? o.defaultLabel }))\r\n  }, [availableLayouts, settings.onTranslate])\r\n\r\n  const handleSelect = useCallback((layout: TListLayout) => {\r\n    if (layout !== value) {\r\n      onChange(layout)\r\n    }\r\n  }, [value, onChange])\r\n\r\n  if (options.length === 0) return null\r\n\r\n  // Two options: render a compact toggle button bar\r\n  if (options.length === 2) {\r\n    return (\r\n      <div className={classes.toggleGroup} role=\"toolbar\" aria-label=\"Layout\">\r\n        {options.map((option, i) => (\r\n          <Tooltip key={option.layout} content={option.label as string} relationship=\"label\" withArrow>\r\n            <ToggleButton\r\n              appearance=\"subtle\"\r\n              icon={option.icon}\r\n              checked={option.layout === value}\r\n              onClick={() => handleSelect(option.layout)}\r\n              className={mergeClasses(\r\n                classes.toggleButton,\r\n                i === 0 && classes.toggleButtonFirst,\r\n                i === options.length - 1 && classes.toggleButtonLast,\r\n              )}\r\n            />\r\n          </Tooltip>\r\n        ))}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  // Three or more options: render a menu button\r\n  const current = options.find(o => o.layout === value) ?? options[0]\r\n\r\n  return (\r\n    <Menu>\r\n      <MenuTrigger disableButtonEnhancement>\r\n        <Tooltip content={`Layout: ${current.label as string}`} relationship=\"label\" withArrow>\r\n          <MenuButton appearance=\"subtle\" icon={current.icon} aria-label={`Layout: ${current.label}`} />\r\n        </Tooltip>\r\n      </MenuTrigger>\r\n      <MenuPopover>\r\n        <MenuList>\r\n          {options.map(option => (\r\n            <MenuItem\r\n              key={option.layout}\r\n              icon={option.icon}\r\n              onClick={() => handleSelect(option.layout)}\r\n              aria-pressed={option.layout === value}\r\n            >\r\n              {option.label}\r\n            </MenuItem>\r\n          ))}\r\n        </MenuList>\r\n      </MenuPopover>\r\n    </Menu>\r\n  )\r\n})\r\n","import { observer } from \"mobx-react-lite\"\r\nimport { makeStyles, mergeClasses } from '@griffel/react'\r\nimport { Title3 } from '@fluentui/react-text'\r\nimport { ButtonProps } from \"@fluentui/react-button\"\r\nimport { tokens } from \"@fluentui/tokens\"\r\nimport { GenericCudList, GenericList } from \"@knowmax/genericlist-core\"\r\nimport { CreateItem, RefreshList } from \".\"\r\nimport { LayoutSelector } from \"./LayoutSelector\"\r\nimport { TListLayout } from \"./List\"\r\n\r\ntype IHeadPanelSharedProps<T = unknown, ET = unknown> = {\r\n  /** Title to display in head panel. */\r\n  title?: string,\r\n  /** Optional children to render between optional title and create item. */\r\n  children?: React.ReactNode,\r\n  /** Set to show a refresh button on the right side of head panel. Only when @see list is set. */\r\n  showRefreshList?: boolean,\r\n  /** Props for optional refresh list button. */\r\n  refreshListProps?: ButtonProps,\r\n  /** Optional text to display for optional refresh list button. */\r\n  refreshListText?: string,\r\n\r\n  /** Optional class name to merge with default class. */\r\n  className?: string;\r\n  /**\r\n   * Set to show a layout selector on the right side of the head panel. Defaults to false.\r\n   * Requires @see layout and @see onLayoutChange to be set.\r\n   */\r\n  showLayoutSelector?: boolean,\r\n  /** Currently active layout. Required when @see showLayoutSelector is true. */\r\n  layout?: TListLayout,\r\n  /** Callback fired when the user selects a different layout. Required when @see showLayoutSelector is true. */\r\n  onLayoutChange?: (layout: TListLayout) => void,\r\n  /** Restrict the layouts offered in the selector. Defaults to all four layouts. */\r\n  availableLayouts?: TListLayout[],\r\n}\r\n\r\ntype IHeadPanelRefreshOnlyProps<T = unknown, ET = unknown> = IHeadPanelSharedProps<T, ET> & {\r\n  /** List associated with head panel, used for refresh functionality. */\r\n  list?: GenericList<T>\r\n  /** Set to show create item button on the right side of head panel. */\r\n  showCreateItem?: false,\r\n  /** Create item props are only supported when list supports create(). */\r\n  createItemProps?: never,\r\n  /** Create item text is only supported when list supports create(). */\r\n  createItemText?: never,\r\n\r\n}\r\n\r\ntype IHeadPanelCudProps<T = unknown, ET = unknown> = IHeadPanelSharedProps<T, ET> & {\r\n  /** List associated with head panel, needed to show create item. */\r\n  list?: GenericCudList<T, ET>\r\n  /** Set to show create item button on the right side of head panel. Only when @see list supports create(). */\r\n  showCreateItem?: boolean,\r\n  /** Props for optional create item. */\r\n  createItemProps?: ButtonProps & { template?: ET },\r\n  /** Optional text to display for optional create item. */\r\n  createItemText?: string,\r\n\r\n}\r\n\r\ntype IHeadPanelProps<T = unknown, ET = unknown> = IHeadPanelRefreshOnlyProps<T, ET> | IHeadPanelCudProps<T, ET>\r\n\r\nconst isCudList = <T = unknown, ET = unknown>(list?: GenericList<T> | GenericCudList<T, ET>): list is GenericCudList<T, ET> => {\r\n  return !!list && typeof (list as GenericCudList<T, ET>).create === 'function'\r\n}\r\n\r\nconst useClasses = makeStyles({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    gap: tokens.spacingHorizontalL,\r\n    alignItems: 'end'\r\n  },\r\n  far: {\r\n    marginLeft: 'auto',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    gap: tokens.spacingHorizontalXS\r\n  }\r\n})\r\n\r\n/** Use to put a fancy head panel above list. For example containing list title, custom contents and create button. */\r\nexport const HeadPanel = observer(<T = unknown, ET = unknown>(props: IHeadPanelProps<T, ET>) => {\r\n  const classes = useClasses()\r\n  const canShowRefreshList = !!(props.showRefreshList && props.list)\r\n  const canShowCreateItem = !!(props.showCreateItem && isCudList(props.list))\r\n  const refreshListChildren = props.refreshListProps?.children ?? props.refreshListText\r\n  const createItemChildren = props.createItemProps?.children ?? props.createItemText\r\n\r\n  const showFar = (canShowCreateItem || canShowRefreshList)\r\n    || (props.showLayoutSelector && props.layout !== undefined && props.onLayoutChange !== undefined)\r\n\r\n  return (\r\n    <div className={mergeClasses(classes.root, props.className)}>\r\n      {props.title &&\r\n        <Title3>{props.title}</Title3>\r\n      }\r\n\r\n      {props.children}\r\n\r\n      {showFar &&\r\n        <div className={classes.far}>\r\n          {props.showLayoutSelector && props.layout !== undefined && props.onLayoutChange &&\r\n            <LayoutSelector\r\n              value={props.layout}\r\n              onChange={props.onLayoutChange}\r\n              availableLayouts={props.availableLayouts}\r\n            />\r\n          }\r\n          {canShowRefreshList && props.list &&\r\n            <RefreshList list={props.list} {...props.refreshListProps}>{refreshListChildren}</RefreshList>\r\n          }\r\n          {canShowCreateItem && props.list &&\r\n            <CreateItem list={props.list} {...props.createItemProps}>{createItemChildren}</CreateItem>\r\n          }\r\n        </div>\r\n      }\r\n    </div>\r\n  )\r\n})"]}