@panneau/lists 5.0.0-alpha.15 → 5.0.0-alpha.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.js","names":["ReactNode","useRef","useState","List","ResolvedCalendar","currentMonth","formatRuleFailure","selectItemActions","usePlugins","getActionLabel","Action","Field","Filter","RuleFailure","Alert","Button","Checkbox","usePanneauIntl","useToast","ListSkeleton","styles","ActionButton","ConfirmDialog","ConfirmPreview","needsConfirmation","RowActions","ListActions","getActionHref","groupListActions","hasScope","isAllowedOn","ActionIcons","getShownColumns","cx","FilterChips","FilterControls","useFilterLabels","getImageUrl","InlineCell","getInlineField","builtInLayouts","messages","countSelected","getPageSelection","isItemSelected","ColumnMenu","LayoutSwitch","CursorPagination","Pagination","SearchField","SortSelect","DisplayEntry","FilterEntry","ListActionEvent","ListActionHandler","ListActionPreviewer","ListColumn","ListInlineEditHandler","ListItem","ListLayoutEntry","useListState","useRenderValue","getColumnValue","toText","ListViewProps","list","items","columns","columnChoice","total","cursors","next","previous","isLoading","error","Error","onRetry","filters","fields","search","layouts","layout","onLayoutChange","perPageOptions","selectable","actions","onAction","previewAction","actionIcons","itemTitle","itemImage","calendar","Pick","getItemLabel","item","getItemHref","getLinkHref","action","currentItemId","displays","Readonly","Record","layoutComponents","filterControls","inlineEdit","onInlineEdit","formatError","failure","path","toolbar","emptyMessage","className","keyOf","undefined","id","ListView","t0","$","_c","allColumns","t1","t2","t3","t4","t5","t6","t7","controlledLayout","selectableProp","actionsProp","t8","getItemLabelProp","t9","t10","t11","ariaLabel","t12","filtersProp","t13","layoutsProp","intl","toasts","plugins","query","view","selection","filterLabels","confirming","setConfirming","preview","setPreview","confirmation","pending","setPending","t14","Symbol","for","saved","setSaved","t15","base","find","candidate","current","showItem","t16","formatMessage","label","t17","item_0","pageItems","map","count","length","t18","sort","t19","listLayouts","Object","fromEntries","t20","t21","allLayouts","t22","available","filter","chosenLayout","includes","Layout","table","inCalendar","t23","t24","entries","t25","id_0","filterValues","q","keys","hasQuery","grouped","toolbarActions","menu","_temp","selectionActions","_temp2","resourceActions","_temp3","selectedCount","t26","item_1","selectedItems","pageSelection","item_2","titleColumn","column","title","locale","renderValue","renderCell","item_3","column_0","content","field","current_0","base_0","value","name","closeConfirmation","execute","event","Promise","resolve","then","outcome","scope","clearSelection","catch","caught","show","actionFailed","message","description","tone","run","event_0","action_2","selection_0","dryRun","current_1","asks","confirm","status","result","skipped","runOnItem","action_3","item_4","runOnSelection","action_4","selected","getSelection","item_5","runOnResource","action_5","renderActions","item_6","allowed","row","running","endsWith","split","action_6","t27","selectPage","pageCheckbox","ids","_temp4","deselect","select","sortable","some","_temp5","choosesColumns","showToolbar","t28","clearFilters","forEach","id_1","setFilter","setSearch","t29","bb0","t30","loadFailed","t31","retry","t32","perPage","noResults","empty","t33","state","item_8","item_9","item_10","item_11","toggle","t34","column_2","toggleSort","month","onMonthChange","setMonth","more","body","toolbarStart","id_2","value_0","remember","labels","toolbarEnd","tableSort","setSort","next_0","setLayout","ids_0","setColumns","resetColumns","action_7","action_8","id_3","t35","selectionCount","mode","allMatchingSelected","selectAllMatching","action_9","skipped_0","item_12","t36","t37","t38","cursor","page","previousPage","nextPage","setPerPage","setPage","perPage_0","t39","event_1","t40","t41","column_1","item_7","action_1","action_0","index","all","findIndex","candidate_0","_c","styles"],"sources":["../src/ListView.tsx"],"sourcesContent":["import { type ReactNode, useRef, useState } from 'react';\n\nimport type { List, ResolvedCalendar } from '@panneau/core';\nimport { currentMonth, formatRuleFailure, selectItemActions, usePlugins } from '@panneau/core';\nimport { getActionLabel } from '@panneau/intl';\nimport type { Action, Field, Filter, RuleFailure } from '@panneau/protocol';\nimport { Alert, Button, Checkbox, usePanneauIntl, useToast } from '@panneau/ui';\n\nimport { ListSkeleton } from './ListSkeleton';\nimport styles from './ListView.module.css';\nimport { ActionButton } from './actions/ActionButton';\nimport { ConfirmDialog, type ConfirmPreview, needsConfirmation } from './actions/ConfirmDialog';\nimport { RowActions } from './actions/RowActions';\nimport {\n type ListActions,\n getActionHref,\n groupListActions,\n hasScope,\n isAllowedOn,\n} from './actions/actions';\nimport type { ActionIcons } from './actions/icons';\nimport { getShownColumns } from './columns';\nimport { cx } from './cx';\nimport { FilterChips, FilterControls, useFilterLabels } from './filters/Filters';\nimport { getImageUrl } from './images';\nimport { InlineCell } from './inline/InlineCell';\nimport { getInlineField } from './inline/editable';\nimport { builtInLayouts } from './layouts/builtIn';\nimport { messages } from './messages';\nimport { countSelected, getPageSelection, isItemSelected } from './selection';\nimport { ColumnMenu } from './toolbar/ColumnMenu';\nimport { LayoutSwitch } from './toolbar/LayoutSwitch';\nimport { CursorPagination, Pagination } from './toolbar/Pagination';\nimport { SearchField } from './toolbar/SearchField';\nimport { SortSelect } from './toolbar/SortSelect';\nimport type {\n DisplayEntry,\n FilterEntry,\n ListActionEvent,\n ListActionHandler,\n ListActionPreviewer,\n ListColumn,\n ListInlineEditHandler,\n ListItem,\n ListLayoutEntry,\n} from './types';\nimport { useListState } from './useListState';\nimport { useRenderValue } from './useRenderValue';\nimport { getColumnValue, toText } from './values';\n\nexport interface ListViewProps {\n /** The list state of `@panneau/core` (`useList()`): query and selection. */\n list: List;\n /**\n * The items of the current page. `undefined` while they load for the first time: the list\n * draws a skeleton of its rows, from its columns and its page size.\n */\n items: readonly ListItem[] | undefined;\n /**\n * Every column of the list. Those with `hidden` are shown when the user chooses them, from\n * the \"Columns\" menu, and the view of the list state says which ones are shown (decision 0042).\n */\n columns: readonly ListColumn[];\n /** Offers the user to show, hide and order the columns. Defaults to `true`. */\n columnChoice?: boolean;\n /**\n * How many items match the query, on every page (`meta.total`). With it, the list shows\n * pagination and offers to select every matching item. Without it, `items` is the whole list.\n */\n total?: number | undefined;\n /**\n * The cursors of the page, for a list paged with cursors (`nextCursor` and `previousCursor`\n * of its `meta`): the list then has buttons to the previous and next pages, without page\n * numbers or a total, and doesn't offer to select every matching item.\n */\n cursors?: { next: string | null; previous?: string | null | undefined } | undefined;\n /** Shows that items are loading. Items already shown stay, dimmed. */\n isLoading?: boolean;\n /** An error while loading: an alert with a retry replaces the items. */\n error?: Error | null;\n onRetry?: () => void;\n /** Filter controls, with chips for the active filters. */\n filters?: readonly Filter[];\n /** Fields of the items, for the labels and options of filters that are not columns. */\n fields?: readonly Field[];\n /** Shows a search field (`q`). */\n search?: boolean;\n /** Layouts to choose from, the first one being the default. Defaults to `['table']`. */\n layouts?: readonly string[];\n /** The layout, controlled. Without it, the layout is the view of the list state. */\n layout?: string;\n onLayoutChange?: (layout: string) => void;\n /** Page sizes to choose from. */\n perPageOptions?: readonly number[];\n /** Shows checkboxes. Defaults to whether there are selection actions. */\n selectable?: boolean;\n /**\n * Actions: a list (placed by their `placement`, or by scope), or grouped by placement as\n * `resolveList()` does. Those the user can't run (`abilities.run`) are hidden.\n */\n actions?: ListActions;\n /** Runs an action, after its confirmation. */\n onAction?: ListActionHandler;\n /**\n * Asks the backend how many items of a query selection (\"Select all N items\") an action will\n * skip, before the confirmation: the list only knows the abilities of the current page. Only\n * for actions with `dryRun`. `useActionPreview()` of `@panneau/actions` is one.\n */\n previewAction?: ListActionPreviewer;\n /**\n * Icons of actions by action id (`{ archive: Archive }`), for actions written in code. They\n * win over the Lucide icon an action names (`\"icon\": \"archive\"`).\n */\n actionIcons?: ActionIcons;\n /** The field that titles items, for their label (`itemTitle` of the resource). */\n itemTitle?: string;\n /**\n * The field shown as the image of items (`itemImage` of the resource): a media reference, a\n * file or a URL. The `gallery` layout needs it (decision 0044).\n */\n itemImage?: string | undefined;\n /**\n * The calendar of the list (`calendar` of `resolveList()`), for its `calendar` layout. The list\n * state asks for its month when it is given the same calendar.\n */\n calendar?: Pick<ResolvedCalendar, 'field' | 'filter'> | null | undefined;\n /** The label of an item, for checkboxes and actions. Defaults to its title, then its id. */\n getItemLabel?: (item: ListItem) => string;\n /** A link to an item, on its title. */\n getItemHref?: (item: ListItem) => string | null;\n /**\n * The link of a built-in `show` or `edit` action without a `url` or a `route` (decision 0040),\n * which the caller resolves to its own routes. Without it, or when it answers `null`, the list\n * leaves those links out.\n */\n getLinkHref?: (action: Action, item: ListItem) => string | null;\n /**\n * The item shown next to the list, such as in a panel of its details: its row is marked, and\n * the link of its title is the current page.\n */\n currentItemId?: string | null;\n /** Displays by name, over the built-in ones and those of the plugins. */\n displays?: Readonly<Record<string, DisplayEntry>>;\n /** Layouts by id, over the built-in ones and those of the plugins. */\n layoutComponents?: Readonly<Record<string, ListLayoutEntry>>;\n /** Filter controls by filter type, over the built-in ones. */\n filterControls?: Readonly<Record<string, FilterEntry>>;\n /**\n * The fields that columns edit in place (`inlineEdit` of the list), on the items that can be\n * updated, in the table (decision 0043). Needs `onInlineEdit`.\n */\n inlineEdit?: readonly string[];\n /** Saves a field edited in place, and resolves with the updated item. */\n onInlineEdit?: ListInlineEditHandler;\n /**\n * The message of a portable rule that a value edited in place fails. Defaults to\n * `formatRuleFailure()` of `@panneau/core`, in English; `useFormatRuleFailure()` of\n * `@panneau/forms` translates them.\n */\n formatError?: (failure: RuleFailure, path: string) => string;\n /** Content at the end of the toolbar, such as a button to create an item. */\n toolbar?: ReactNode;\n /** Shown when the list has no items, without filters or search. */\n emptyMessage?: ReactNode;\n /** Accessible name of the list. Defaults to \"Items\". */\n 'aria-label'?: string;\n className?: string;\n}\n\nfunction keyOf(action: Action, item?: ListItem): string {\n return item !== undefined ? `${action.id}\\u0000${item.id}` : action.id;\n}\n\n/**\n * Renders the list state of `@panneau/core`: the items of the current page in a layout (table or\n * cards), with sorting, search, filters and their chips, pagination, selection and actions. It\n * fetches nothing: the caller gives the items of the list's query and their total.\n */\nexport function ListView({\n list,\n items,\n columns: allColumns,\n columnChoice = true,\n total,\n cursors,\n isLoading = false,\n error = null,\n onRetry,\n filters: filtersProp = [],\n fields = [],\n search = false,\n layouts: layoutsProp = ['table'],\n layout: controlledLayout,\n onLayoutChange,\n perPageOptions,\n selectable: selectableProp,\n actions: actionsProp,\n onAction,\n previewAction,\n actionIcons,\n itemTitle,\n itemImage,\n calendar = null,\n getItemLabel: getItemLabelProp,\n getItemHref,\n getLinkHref,\n currentItemId = null,\n displays,\n layoutComponents,\n filterControls,\n inlineEdit = [],\n onInlineEdit,\n formatError = formatRuleFailure,\n toolbar,\n emptyMessage,\n 'aria-label': ariaLabel,\n className,\n}: ListViewProps) {\n const intl = usePanneauIntl();\n const toasts = useToast();\n const plugins = usePlugins();\n const { query, view, selection } = useListState(list);\n const filterLabels = useFilterLabels();\n const [confirming, setConfirming] = useState<ListActionEvent | null>(null);\n const [preview, setPreview] = useState<ConfirmPreview | null>(null);\n // The confirmation a dry run belongs to: a later one, or a cancel, discards its answer.\n const confirmation = useRef(0);\n const [pending, setPending] = useState<string | null>(null);\n\n // Items saved in place, over the item the caller gave, until it gives another one.\n const [saved, setSaved] = useState<\n Readonly<Record<string, { base: ListItem; item: ListItem }>>\n >({});\n const showItem = (item: ListItem) => {\n const base = items?.find((candidate) => candidate.id === item.id);\n if (base !== undefined) {\n setSaved((current) => ({ ...current, [item.id]: { base, item } }));\n }\n };\n\n const label = ariaLabel ?? intl.formatMessage(messages.list);\n const pageItems = (items ?? []).map((item) =>\n saved[item.id]?.base === item ? (saved[item.id]?.item ?? item) : item,\n );\n const count = total ?? pageItems.length;\n const sort = query.sort ?? [];\n\n const allLayouts: Record<string, ListLayoutEntry> = {\n ...builtInLayouts,\n ...(Object.fromEntries(plugins.listLayouts) as Record<string, ListLayoutEntry>),\n ...layoutComponents,\n };\n // Layouts without a component (a plugin's that isn't installed) are left out, and so are the\n // gallery without images and the calendar without a calendar.\n const available = layoutsProp.filter(\n (id) =>\n allLayouts[id] !== undefined &&\n (id !== 'gallery' || itemImage !== undefined) &&\n (id !== 'calendar' || calendar !== null),\n );\n const layouts = available.length > 0 ? available : ['table'];\n const chosenLayout =\n view.layout !== undefined && layouts.includes(view.layout) ? view.layout : undefined;\n const layout = controlledLayout ?? chosenLayout ?? layouts[0] ?? 'table';\n const columns = getShownColumns(allColumns, view.columns);\n const Layout = allLayouts[layout] ?? builtInLayouts.table;\n const inCalendar = layout === 'calendar' && calendar !== null;\n // The calendar asks for its month through its filter, which it sets itself.\n const filters = inCalendar\n ? filtersProp.filter((filter) => filter.id !== calendar.filter)\n : filtersProp;\n const filterValues = Object.fromEntries(\n Object.entries(query.filter ?? {}).filter(\n ([id]) => !(inCalendar && id === calendar.filter),\n ),\n );\n const hasQuery = Object.keys(filterValues).length > 0 || (query.q ?? '') !== '';\n\n const grouped = groupListActions(actionsProp);\n // Actions placed in the menu also apply to selections, from the toolbar (once each).\n const toolbarActions = [...grouped.toolbar, ...grouped.menu].filter(\n (action, index, all) =>\n (hasScope(action, 'selection') || hasScope(action, 'resource')) &&\n all.findIndex((candidate) => candidate.id === action.id) === index,\n );\n const selectionActions = toolbarActions.filter((action) => hasScope(action, 'selection'));\n const resourceActions = toolbarActions.filter((action) => hasScope(action, 'resource'));\n const selectable = selectableProp ?? selectionActions.length > 0;\n\n const selectedCount = selectable ? countSelected(selection, count) : 0;\n const selectedItems = pageItems.filter((item) => isItemSelected(selection, item.id));\n const pageSelection = getPageSelection(selection, pageItems);\n\n const getItemLabel = (item: ListItem): string => {\n if (getItemLabelProp !== undefined) {\n return getItemLabelProp(item);\n }\n const titleColumn =\n allColumns.find((column) => column.id === itemTitle) ??\n (itemTitle === undefined ? columns[0] : undefined);\n const title =\n titleColumn !== undefined\n ? toText(getColumnValue(item, titleColumn, intl.locale), intl.locale)\n : itemTitle !== undefined\n ? toText(item[itemTitle], intl.locale)\n : '';\n return title !== '' ? title : item.id;\n };\n\n const renderValue = useRenderValue(displays);\n\n const renderCell = (item: ListItem, column: ListColumn, content: ReactNode): ReactNode => {\n const field = onInlineEdit !== undefined ? getInlineField(column, item, inlineEdit) : null;\n if (field === null || onInlineEdit === undefined) {\n return content;\n }\n return (\n <InlineCell\n key={`${item.id}\\u0000${column.id}`}\n item={item}\n field={field}\n itemLabel={getItemLabel(item)}\n renderValue={(current) => renderValue(current, column)}\n onSave={(base, value) => onInlineEdit({ item: base, field, value })}\n onItem={showItem}\n formatError={(failure) => formatError(failure, field.name)}\n >\n {content}\n </InlineCell>\n );\n };\n\n const closeConfirmation = () => {\n confirmation.current += 1;\n setConfirming(null);\n setPreview(null);\n };\n\n const execute = async (event: ListActionEvent) => {\n closeConfirmation();\n setPending(keyOf(event.action, event.item));\n // A promise chain rather than `try`, which the React Compiler only handles in part.\n await Promise.resolve()\n .then(() => onAction?.(event))\n .then((outcome) => {\n // `false`: the action didn't run (its parameters were cancelled).\n if (event.scope === 'selection' && outcome !== false) {\n list.clearSelection();\n }\n })\n .catch((caught: unknown) => {\n toasts.show({\n title: intl.formatMessage(messages.actionFailed, {\n action: getActionLabel(event.action, intl),\n }),\n ...(caught instanceof Error && caught.message !== ''\n ? { description: caught.message }\n : {}),\n tone: 'danger',\n });\n });\n setPending(null);\n };\n\n const run = (event: ListActionEvent) => {\n const { action, selection } = event;\n if (\n previewAction !== undefined &&\n action.dryRun === true &&\n selection !== undefined &&\n 'query' in selection\n ) {\n // Every item matching a query: only the backend knows how many it would skip.\n const current = ++confirmation.current;\n const asks = action.confirm !== undefined && action.confirm !== false;\n setConfirming(event);\n setPreview({ status: 'loading' });\n previewAction(event).then(\n (result) => {\n if (confirmation.current !== current) {\n return;\n }\n const skipped = result?.skipped ?? event.skipped.length;\n if (skipped === 0 && !asks) {\n void execute(event);\n } else {\n setPreview(result !== null ? { status: 'done', ...result } : null);\n }\n },\n () => {\n // Without an answer, the list confirms with what it knows.\n if (confirmation.current !== current) {\n return;\n }\n if (needsConfirmation(event)) {\n setPreview(null);\n } else {\n void execute(event);\n }\n },\n );\n return;\n }\n if (needsConfirmation(event)) {\n setConfirming(event);\n } else {\n void execute(event);\n }\n };\n\n const runOnItem = (action: Action, item: ListItem) =>\n run({ action, scope: 'item', item, count: 1, skipped: [] });\n\n const runOnSelection = (action: Action) => {\n const selected = list.getSelection();\n if (selected === null) {\n return;\n }\n run({\n action,\n scope: 'selection',\n selection: selected,\n count: selectedCount,\n skipped: selectedItems.filter((item) => !isAllowedOn(action, item)),\n });\n };\n\n const runOnResource = (action: Action) =>\n run({ action, scope: 'resource', count: count, skipped: [] });\n\n // The actions of a row and of its menu, as everywhere else an item shows its actions\n const renderActions = (item: ListItem): ReactNode => {\n const allowed = selectItemActions(grouped.row, item, 'row', { getLinkHref });\n const menu = selectItemActions(grouped.menu, item, 'menu', { getLinkHref });\n if (allowed.length === 0 && menu.length === 0) {\n return null;\n }\n const running =\n pending?.endsWith(`\\u0000${item.id}`) === true ? pending.split('\\u0000')[0] : null;\n return (\n <RowActions\n itemLabel={getItemLabel(item)}\n actions={allowed}\n menu={menu}\n pending={running ?? null}\n onRun={(action) => runOnItem(action, item)}\n icons={actionIcons}\n />\n );\n };\n\n const pageCheckbox = (\n <Checkbox\n aria-label={intl.formatMessage(messages.selectPage)}\n isSelected={pageSelection === 'all'}\n isIndeterminate={pageSelection === 'some'}\n isDisabled={pageItems.length === 0}\n onChange={() => {\n const ids = pageItems.map((item) => item.id);\n if (pageSelection === 'all') {\n list.deselect(ids);\n } else {\n list.select(ids);\n }\n }}\n />\n );\n\n const sortable = allColumns.some((column) => column.sortable === true);\n const choosesColumns = columnChoice && allColumns.length > 1;\n const showToolbar =\n search ||\n filters.length > 0 ||\n sortable ||\n choosesColumns ||\n layouts.length > 1 ||\n resourceActions.length > 0 ||\n toolbar !== undefined;\n\n function clearFilters() {\n Object.keys(filterValues).forEach((id) => list.setFilter(id, undefined));\n if ((query.q ?? '') !== '') {\n list.setSearch('');\n }\n }\n\n const body = (() => {\n if (error !== null) {\n return (\n <Alert\n tone=\"danger\"\n title={intl.formatMessage(messages.loadFailed)}\n actions={\n onRetry !== undefined ? (\n <Button size=\"sm\" onPress={onRetry}>\n {intl.formatMessage(messages.retry)}\n </Button>\n ) : undefined\n }\n >\n {error.message}\n </Alert>\n );\n }\n if (items === undefined) {\n return (\n <ListSkeleton\n Layout={Layout}\n columns={columns}\n perPage={query.perPage}\n sort={sort}\n label={label}\n />\n );\n }\n // An empty month is still a calendar: it goes to the others.\n if (pageItems.length === 0 && !inCalendar) {\n return (\n <div className={styles.state}>\n <p>\n {hasQuery\n ? intl.formatMessage(messages.noResults)\n : (emptyMessage ?? intl.formatMessage(messages.empty))}\n </p>\n {hasQuery ? (\n <Button size=\"sm\" onPress={() => clearFilters()}>\n {intl.formatMessage(messages.clearFilters)}\n </Button>\n ) : null}\n </div>\n );\n }\n return (\n <Layout\n items={pageItems}\n columns={columns}\n renderValue={renderValue}\n getItemLabel={getItemLabel}\n getItemHref={getItemHref}\n getItemImage={\n itemImage !== undefined ? (item) => getImageUrl(item[itemImage]) : undefined\n }\n calendar={\n inCalendar\n ? {\n field: calendar.field,\n month: view.month ?? currentMonth(),\n onMonthChange: (month) => list.setMonth(month),\n more:\n total !== undefined && total > pageItems.length\n ? { total }\n : cursors !== undefined && cursors.next !== null\n ? { total: null }\n : null,\n }\n : undefined\n }\n isCurrent={(item) => item.id === currentItemId}\n selectable={selectable}\n isSelected={(item) => isItemSelected(selection, item.id)}\n onToggle={(item) => list.toggle(item.id)}\n renderActions={renderActions}\n sort={sort}\n onSort={(column) => list.toggleSort(column.id)}\n label={label}\n pageSelection={pageCheckbox}\n renderCell={renderCell}\n />\n );\n })();\n\n return (\n <div className={cx(styles.list, className)}>\n {showToolbar ? (\n <div className={styles.toolbar}>\n <div className={styles.toolbarStart}>\n {search ? (\n <SearchField\n value={query.q ?? ''}\n onChange={(q) => list.setSearch(q)}\n />\n ) : null}\n {filters.length > 0 ? (\n <FilterControls\n filters={filters}\n values={filterValues}\n onChange={(id, value) => list.setFilter(id, value)}\n onLabel={filterLabels.remember}\n controls={filterControls}\n columns={allColumns}\n fields={fields}\n labels={filterLabels.labels}\n />\n ) : null}\n </div>\n <div className={styles.toolbarEnd}>\n {sortable ? (\n <div className={layout === 'table' ? styles.tableSort : undefined}>\n <SortSelect\n columns={allColumns}\n sort={sort}\n onChange={(next) => list.setSort(next)}\n />\n </div>\n ) : null}\n {layouts.length > 1 ? (\n <LayoutSwitch\n layouts={layouts}\n value={layout}\n onChange={(next) => {\n if (controlledLayout === undefined) {\n list.setLayout(next);\n }\n onLayoutChange?.(next);\n }}\n />\n ) : null}\n {choosesColumns ? (\n <ColumnMenu\n columns={allColumns}\n shown={columns}\n onChange={(ids) => list.setColumns(ids)}\n onReset={\n view.columns !== undefined ? () => list.resetColumns() : null\n }\n />\n ) : null}\n {resourceActions\n .filter(\n (action) => selectedCount === 0 || !hasScope(action, 'selection'),\n )\n .map((action) => (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={getActionHref(action)}\n isPending={pending === keyOf(action)}\n onPress={() => runOnResource(action)}\n />\n ))}\n {toolbar}\n </div>\n </div>\n ) : null}\n <FilterChips\n filters={filters}\n values={filterValues}\n q={query.q}\n onRemove={(id) => list.setFilter(id, undefined)}\n onClearSearch={() => list.setSearch('')}\n onClear={clearFilters}\n columns={allColumns}\n fields={fields}\n labels={filterLabels.labels}\n />\n {selectedCount > 0 ? (\n <div className={styles.selection}>\n <span className={styles.selectionCount} role=\"status\">\n {selection.mode === 'all'\n ? intl.formatMessage(messages.allMatchingSelected, {\n total: selectedCount,\n })\n : intl.formatMessage(messages.selectedCount, { count: selectedCount })}\n </span>\n {selection.mode === 'ids' &&\n pageSelection === 'all' &&\n count > pageItems.length ? (\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.selectAllMatching()}>\n {intl.formatMessage(messages.selectAllMatching, { total: count })}\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.clearSelection()}>\n {intl.formatMessage(messages.clearSelection)}\n </Button>\n {selectionActions.length > 0 ? (\n <div className={styles.selectionActions}>\n {selectionActions.map((action) => {\n const skipped = selectedItems.filter(\n (item) => !isAllowedOn(action, item),\n ).length;\n return (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={null}\n isPending={pending === keyOf(action)}\n isDisabled={\n (pending !== null && pending !== keyOf(action)) ||\n skipped >= selectedCount\n }\n onPress={() => runOnSelection(action)}\n />\n );\n })}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className={styles.body} aria-busy={isLoading && items !== undefined}>\n {body}\n </div>\n {inCalendar ? null : cursors !== undefined && error === null ? (\n <CursorPagination\n perPage={query.perPage ?? pageItems.length}\n hasPrevious={query.cursor !== undefined}\n hasNext={cursors.next !== null}\n onPrevious={() => list.previousPage(cursors.previous)}\n onNext={() => {\n if (cursors.next !== null) {\n list.nextPage(cursors.next);\n }\n }}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : total !== undefined && error === null && total > 0 ? (\n <Pagination\n page={query.page ?? 1}\n perPage={query.perPage ?? pageItems.length}\n total={total}\n onPageChange={(page) => list.setPage(page)}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : null}\n <ConfirmDialog\n event={confirming}\n preview={preview}\n onConfirm={(event) => void execute(event)}\n onCancel={closeConfirmation}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ListView.js","names":["ReactNode","useRef","useState","List","ResolvedCalendar","currentMonth","formatRuleFailure","selectItemActions","usePlugins","getActionLabel","Action","Field","Filter","RuleFailure","Alert","Button","Checkbox","usePanneauIntl","useToast","ListSkeleton","styles","ActionButton","ConfirmDialog","ConfirmPreview","needsConfirmation","RowActions","ListActions","getActionHref","groupListActions","hasScope","isAllowedOn","ActionIcons","getShownColumns","cx","FilterChips","FilterControls","useFilterLabels","getImageUrl","InlineCell","getInlineField","builtInLayouts","getCalendarTimeZone","messages","countSelected","getPageSelection","isItemSelected","ColumnMenu","LayoutSwitch","CursorPagination","Pagination","SearchField","SortSelect","DisplayEntry","FilterEntry","ListActionEvent","ListActionHandler","ListActionPreviewer","ListColumn","ListInlineEditHandler","ListItem","ListLayoutEntry","useListState","useRenderValue","getColumnValue","toText","ListViewProps","list","items","columns","columnChoice","total","cursors","next","previous","isLoading","error","Error","onRetry","filters","fields","search","layouts","layout","onLayoutChange","perPageOptions","selectable","actions","onAction","previewAction","actionIcons","itemTitle","itemImage","calendar","Pick","getItemLabel","item","getItemHref","getLinkHref","action","currentItemId","displays","Readonly","Record","layoutComponents","filterControls","inlineEdit","onInlineEdit","formatError","failure","path","toolbar","emptyMessage","className","keyOf","undefined","id","ListView","t0","$","_c","allColumns","t1","t2","t3","t4","t5","t6","t7","controlledLayout","selectableProp","actionsProp","t8","getItemLabelProp","t9","t10","t11","ariaLabel","t12","filtersProp","layoutsProp","intl","toasts","plugins","query","view","selection","filterLabels","confirming","setConfirming","preview","setPreview","confirmation","pending","setPending","t13","Symbol","for","saved","setSaved","t14","base","find","candidate","current","showItem","t15","formatMessage","label","t16","item_0","pageItems","map","count","length","t17","sort","t18","listLayouts","Object","fromEntries","t19","t20","allLayouts","t21","available","filter","chosenLayout","includes","Layout","table","inCalendar","t22","t23","entries","t24","id_0","filterValues","q","keys","hasQuery","grouped","toolbarActions","menu","_temp","selectionActions","_temp2","resourceActions","_temp3","selectedCount","t25","item_1","selectedItems","pageSelection","item_2","titleColumn","column","title","locale","renderValue","renderCell","item_3","column_0","content","field","current_0","base_0","value","name","closeConfirmation","execute","event","Promise","resolve","then","outcome","scope","clearSelection","catch","caught","show","actionFailed","message","description","tone","run","event_0","action_2","selection_0","dryRun","current_1","asks","confirm","status","result","skipped","runOnItem","action_3","item_4","runOnSelection","action_4","selected","getSelection","item_5","runOnResource","action_5","renderActions","item_6","allowed","row","running","endsWith","split","action_6","t26","selectPage","pageCheckbox","ids","_temp4","deselect","select","sortable","some","_temp5","choosesColumns","showToolbar","t27","clearFilters","forEach","id_1","setFilter","setSearch","t28","bb0","t29","loadFailed","t30","retry","t31","perPage","noResults","empty","t32","state","item_8","item_9","item_10","item_11","toggle","t33","column_3","toggleSort","timeZone","_temp6","field_0","month","onMonthChange","setMonth","more","body","toolbarStart","id_2","value_0","remember","labels","toolbarEnd","tableSort","setSort","next_0","setLayout","ids_0","setColumns","resetColumns","action_7","action_8","id_3","t34","selectionCount","mode","allMatchingSelected","selectAllMatching","action_9","skipped_0","item_12","t35","t36","t37","cursor","page","previousPage","nextPage","setPerPage","setPage","perPage_0","t38","event_1","t39","t40","column_2","column_1","item_7","action_1","action_0","index","all","findIndex","candidate_0","_c","styles"],"sources":["../src/ListView.tsx"],"sourcesContent":["import { type ReactNode, useRef, useState } from 'react';\n\nimport type { List, ResolvedCalendar } from '@panneau/core';\nimport { currentMonth, formatRuleFailure, selectItemActions, usePlugins } from '@panneau/core';\nimport { getActionLabel } from '@panneau/intl';\nimport type { Action, Field, Filter, RuleFailure } from '@panneau/protocol';\nimport { Alert, Button, Checkbox, usePanneauIntl, useToast } from '@panneau/ui';\n\nimport { ListSkeleton } from './ListSkeleton';\nimport styles from './ListView.module.css';\nimport { ActionButton } from './actions/ActionButton';\nimport { ConfirmDialog, type ConfirmPreview, needsConfirmation } from './actions/ConfirmDialog';\nimport { RowActions } from './actions/RowActions';\nimport {\n type ListActions,\n getActionHref,\n groupListActions,\n hasScope,\n isAllowedOn,\n} from './actions/actions';\nimport type { ActionIcons } from './actions/icons';\nimport { getShownColumns } from './columns';\nimport { cx } from './cx';\nimport { FilterChips, FilterControls, useFilterLabels } from './filters/Filters';\nimport { getImageUrl } from './images';\nimport { InlineCell } from './inline/InlineCell';\nimport { getInlineField } from './inline/editable';\nimport { builtInLayouts } from './layouts/builtIn';\nimport { getCalendarTimeZone } from './layouts/calendarDays';\nimport { messages } from './messages';\nimport { countSelected, getPageSelection, isItemSelected } from './selection';\nimport { ColumnMenu } from './toolbar/ColumnMenu';\nimport { LayoutSwitch } from './toolbar/LayoutSwitch';\nimport { CursorPagination, Pagination } from './toolbar/Pagination';\nimport { SearchField } from './toolbar/SearchField';\nimport { SortSelect } from './toolbar/SortSelect';\nimport type {\n DisplayEntry,\n FilterEntry,\n ListActionEvent,\n ListActionHandler,\n ListActionPreviewer,\n ListColumn,\n ListInlineEditHandler,\n ListItem,\n ListLayoutEntry,\n} from './types';\nimport { useListState } from './useListState';\nimport { useRenderValue } from './useRenderValue';\nimport { getColumnValue, toText } from './values';\n\nexport interface ListViewProps {\n /** The list state of `@panneau/core` (`useList()`): query and selection. */\n list: List;\n /**\n * The items of the current page. `undefined` while they load for the first time: the list\n * draws a skeleton of its rows, from its columns and its page size.\n */\n items: readonly ListItem[] | undefined;\n /**\n * Every column of the list. Those with `hidden` are shown when the user chooses them, from\n * the \"Columns\" menu, and the view of the list state says which ones are shown (decision 0042).\n */\n columns: readonly ListColumn[];\n /** Offers the user to show, hide and order the columns. Defaults to `true`. */\n columnChoice?: boolean;\n /**\n * How many items match the query, on every page (`meta.total`). With it, the list shows\n * pagination and offers to select every matching item. Without it, `items` is the whole list.\n */\n total?: number | undefined;\n /**\n * The cursors of the page, for a list paged with cursors (`nextCursor` and `previousCursor`\n * of its `meta`): the list then has buttons to the previous and next pages, without page\n * numbers or a total, and doesn't offer to select every matching item.\n */\n cursors?: { next: string | null; previous?: string | null | undefined } | undefined;\n /** Shows that items are loading. Items already shown stay, dimmed. */\n isLoading?: boolean;\n /** An error while loading: an alert with a retry replaces the items. */\n error?: Error | null;\n onRetry?: () => void;\n /** Filter controls, with chips for the active filters. */\n filters?: readonly Filter[];\n /** Fields of the items, for the labels and options of filters that are not columns. */\n fields?: readonly Field[];\n /** Shows a search field (`q`). */\n search?: boolean;\n /** Layouts to choose from, the first one being the default. Defaults to `['table']`. */\n layouts?: readonly string[];\n /** The layout, controlled. Without it, the layout is the view of the list state. */\n layout?: string;\n onLayoutChange?: (layout: string) => void;\n /** Page sizes to choose from. */\n perPageOptions?: readonly number[];\n /** Shows checkboxes. Defaults to whether there are selection actions. */\n selectable?: boolean;\n /**\n * Actions: a list (placed by their `placement`, or by scope), or grouped by placement as\n * `resolveList()` does. Those the user can't run (`abilities.run`) are hidden.\n */\n actions?: ListActions;\n /** Runs an action, after its confirmation. */\n onAction?: ListActionHandler;\n /**\n * Asks the backend how many items of a query selection (\"Select all N items\") an action will\n * skip, before the confirmation: the list only knows the abilities of the current page. Only\n * for actions with `dryRun`. `useActionPreview()` of `@panneau/actions` is one.\n */\n previewAction?: ListActionPreviewer;\n /**\n * Icons of actions by action id (`{ archive: Archive }`), for actions written in code. They\n * win over the Lucide icon an action names (`\"icon\": \"archive\"`).\n */\n actionIcons?: ActionIcons;\n /** The field that titles items, for their label (`itemTitle` of the resource). */\n itemTitle?: string;\n /**\n * The field shown as the image of items (`itemImage` of the resource): a media reference, a\n * file or a URL. The `gallery` layout needs it (decision 0044).\n */\n itemImage?: string | undefined;\n /**\n * The calendar of the list (`calendar` of `resolveList()`), for its `calendar` layout. The list\n * state asks for its month when it is given the same calendar.\n */\n calendar?: Pick<ResolvedCalendar, 'field' | 'filter'> | null | undefined;\n /** The label of an item, for checkboxes and actions. Defaults to its title, then its id. */\n getItemLabel?: (item: ListItem) => string;\n /** A link to an item, on its title. */\n getItemHref?: (item: ListItem) => string | null;\n /**\n * The link of a built-in `show` or `edit` action without a `url` or a `route` (decision 0040),\n * which the caller resolves to its own routes. Without it, or when it answers `null`, the list\n * leaves those links out.\n */\n getLinkHref?: (action: Action, item: ListItem) => string | null;\n /**\n * The item shown next to the list, such as in a panel of its details: its row is marked, and\n * the link of its title is the current page.\n */\n currentItemId?: string | null;\n /** Displays by name, over the built-in ones and those of the plugins. */\n displays?: Readonly<Record<string, DisplayEntry>>;\n /** Layouts by id, over the built-in ones and those of the plugins. */\n layoutComponents?: Readonly<Record<string, ListLayoutEntry>>;\n /** Filter controls by filter type, over the built-in ones. */\n filterControls?: Readonly<Record<string, FilterEntry>>;\n /**\n * The fields that columns edit in place (`inlineEdit` of the list), on the items that can be\n * updated, in the table (decision 0043). Needs `onInlineEdit`.\n */\n inlineEdit?: readonly string[];\n /** Saves a field edited in place, and resolves with the updated item. */\n onInlineEdit?: ListInlineEditHandler;\n /**\n * The message of a portable rule that a value edited in place fails. Defaults to\n * `formatRuleFailure()` of `@panneau/core`, in English; `useFormatRuleFailure()` of\n * `@panneau/forms` translates them.\n */\n formatError?: (failure: RuleFailure, path: string) => string;\n /** Content at the end of the toolbar, such as a button to create an item. */\n toolbar?: ReactNode;\n /** Shown when the list has no items, without filters or search. */\n emptyMessage?: ReactNode;\n /** Accessible name of the list. Defaults to \"Items\". */\n 'aria-label'?: string;\n className?: string;\n}\n\nfunction keyOf(action: Action, item?: ListItem): string {\n return item !== undefined ? `${action.id}\\u0000${item.id}` : action.id;\n}\n\n/**\n * Renders the list state of `@panneau/core`: the items of the current page in a layout (table or\n * cards), with sorting, search, filters and their chips, pagination, selection and actions. It\n * fetches nothing: the caller gives the items of the list's query and their total.\n */\nexport function ListView({\n list,\n items,\n columns: allColumns,\n columnChoice = true,\n total,\n cursors,\n isLoading = false,\n error = null,\n onRetry,\n filters: filtersProp = [],\n fields = [],\n search = false,\n layouts: layoutsProp = ['table'],\n layout: controlledLayout,\n onLayoutChange,\n perPageOptions,\n selectable: selectableProp,\n actions: actionsProp,\n onAction,\n previewAction,\n actionIcons,\n itemTitle,\n itemImage,\n calendar = null,\n getItemLabel: getItemLabelProp,\n getItemHref,\n getLinkHref,\n currentItemId = null,\n displays,\n layoutComponents,\n filterControls,\n inlineEdit = [],\n onInlineEdit,\n formatError = formatRuleFailure,\n toolbar,\n emptyMessage,\n 'aria-label': ariaLabel,\n className,\n}: ListViewProps) {\n const intl = usePanneauIntl();\n const toasts = useToast();\n const plugins = usePlugins();\n const { query, view, selection } = useListState(list);\n const filterLabels = useFilterLabels();\n const [confirming, setConfirming] = useState<ListActionEvent | null>(null);\n const [preview, setPreview] = useState<ConfirmPreview | null>(null);\n // The confirmation a dry run belongs to: a later one, or a cancel, discards its answer.\n const confirmation = useRef(0);\n const [pending, setPending] = useState<string | null>(null);\n\n // Items saved in place, over the item the caller gave, until it gives another one.\n const [saved, setSaved] = useState<\n Readonly<Record<string, { base: ListItem; item: ListItem }>>\n >({});\n const showItem = (item: ListItem) => {\n const base = items?.find((candidate) => candidate.id === item.id);\n if (base !== undefined) {\n setSaved((current) => ({ ...current, [item.id]: { base, item } }));\n }\n };\n\n const label = ariaLabel ?? intl.formatMessage(messages.list);\n const pageItems = (items ?? []).map((item) =>\n saved[item.id]?.base === item ? (saved[item.id]?.item ?? item) : item,\n );\n const count = total ?? pageItems.length;\n const sort = query.sort ?? [];\n\n const allLayouts: Record<string, ListLayoutEntry> = {\n ...builtInLayouts,\n ...(Object.fromEntries(plugins.listLayouts) as Record<string, ListLayoutEntry>),\n ...layoutComponents,\n };\n // Layouts without a component (a plugin's that isn't installed) are left out, and so are the\n // gallery without images and the calendar without a calendar.\n const available = layoutsProp.filter(\n (id) =>\n allLayouts[id] !== undefined &&\n (id !== 'gallery' || itemImage !== undefined) &&\n (id !== 'calendar' || calendar !== null),\n );\n const layouts = available.length > 0 ? available : ['table'];\n const chosenLayout =\n view.layout !== undefined && layouts.includes(view.layout) ? view.layout : undefined;\n const layout = controlledLayout ?? chosenLayout ?? layouts[0] ?? 'table';\n const columns = getShownColumns(allColumns, view.columns);\n const Layout = allLayouts[layout] ?? builtInLayouts.table;\n const inCalendar = layout === 'calendar' && calendar !== null;\n // The calendar asks for its month through its filter, which it sets itself.\n const filters = inCalendar\n ? filtersProp.filter((filter) => filter.id !== calendar.filter)\n : filtersProp;\n const filterValues = Object.fromEntries(\n Object.entries(query.filter ?? {}).filter(\n ([id]) => !(inCalendar && id === calendar.filter),\n ),\n );\n const hasQuery = Object.keys(filterValues).length > 0 || (query.q ?? '') !== '';\n\n const grouped = groupListActions(actionsProp);\n // Actions placed in the menu also apply to selections, from the toolbar (once each).\n const toolbarActions = [...grouped.toolbar, ...grouped.menu].filter(\n (action, index, all) =>\n (hasScope(action, 'selection') || hasScope(action, 'resource')) &&\n all.findIndex((candidate) => candidate.id === action.id) === index,\n );\n const selectionActions = toolbarActions.filter((action) => hasScope(action, 'selection'));\n const resourceActions = toolbarActions.filter((action) => hasScope(action, 'resource'));\n const selectable = selectableProp ?? selectionActions.length > 0;\n\n const selectedCount = selectable ? countSelected(selection, count) : 0;\n const selectedItems = pageItems.filter((item) => isItemSelected(selection, item.id));\n const pageSelection = getPageSelection(selection, pageItems);\n\n const getItemLabel = (item: ListItem): string => {\n if (getItemLabelProp !== undefined) {\n return getItemLabelProp(item);\n }\n const titleColumn =\n allColumns.find((column) => column.id === itemTitle) ??\n (itemTitle === undefined ? columns[0] : undefined);\n const title =\n titleColumn !== undefined\n ? toText(getColumnValue(item, titleColumn, intl.locale), intl.locale)\n : itemTitle !== undefined\n ? toText(item[itemTitle], intl.locale)\n : '';\n return title !== '' ? title : item.id;\n };\n\n const renderValue = useRenderValue(displays);\n\n const renderCell = (item: ListItem, column: ListColumn, content: ReactNode): ReactNode => {\n const field = onInlineEdit !== undefined ? getInlineField(column, item, inlineEdit) : null;\n if (field === null || onInlineEdit === undefined) {\n return content;\n }\n return (\n <InlineCell\n key={`${item.id}\\u0000${column.id}`}\n item={item}\n field={field}\n itemLabel={getItemLabel(item)}\n renderValue={(current) => renderValue(current, column)}\n onSave={(base, value) => onInlineEdit({ item: base, field, value })}\n onItem={showItem}\n formatError={(failure) => formatError(failure, field.name)}\n >\n {content}\n </InlineCell>\n );\n };\n\n const closeConfirmation = () => {\n confirmation.current += 1;\n setConfirming(null);\n setPreview(null);\n };\n\n const execute = async (event: ListActionEvent) => {\n closeConfirmation();\n setPending(keyOf(event.action, event.item));\n // A promise chain rather than `try`, which the React Compiler only handles in part.\n await Promise.resolve()\n .then(() => onAction?.(event))\n .then((outcome) => {\n // `false`: the action didn't run (its parameters were cancelled).\n if (event.scope === 'selection' && outcome !== false) {\n list.clearSelection();\n }\n })\n .catch((caught: unknown) => {\n toasts.show({\n title: intl.formatMessage(messages.actionFailed, {\n action: getActionLabel(event.action, intl),\n }),\n ...(caught instanceof Error && caught.message !== ''\n ? { description: caught.message }\n : {}),\n tone: 'danger',\n });\n });\n setPending(null);\n };\n\n const run = (event: ListActionEvent) => {\n const { action, selection } = event;\n if (\n previewAction !== undefined &&\n action.dryRun === true &&\n selection !== undefined &&\n 'query' in selection\n ) {\n // Every item matching a query: only the backend knows how many it would skip.\n const current = ++confirmation.current;\n const asks = action.confirm !== undefined && action.confirm !== false;\n setConfirming(event);\n setPreview({ status: 'loading' });\n previewAction(event).then(\n (result) => {\n if (confirmation.current !== current) {\n return;\n }\n const skipped = result?.skipped ?? event.skipped.length;\n if (skipped === 0 && !asks) {\n void execute(event);\n } else {\n setPreview(result !== null ? { status: 'done', ...result } : null);\n }\n },\n () => {\n // Without an answer, the list confirms with what it knows.\n if (confirmation.current !== current) {\n return;\n }\n if (needsConfirmation(event)) {\n setPreview(null);\n } else {\n void execute(event);\n }\n },\n );\n return;\n }\n if (needsConfirmation(event)) {\n setConfirming(event);\n } else {\n void execute(event);\n }\n };\n\n const runOnItem = (action: Action, item: ListItem) =>\n run({ action, scope: 'item', item, count: 1, skipped: [] });\n\n const runOnSelection = (action: Action) => {\n const selected = list.getSelection();\n if (selected === null) {\n return;\n }\n run({\n action,\n scope: 'selection',\n selection: selected,\n count: selectedCount,\n skipped: selectedItems.filter((item) => !isAllowedOn(action, item)),\n });\n };\n\n const runOnResource = (action: Action) =>\n run({ action, scope: 'resource', count: count, skipped: [] });\n\n // The actions of a row and of its menu, as everywhere else an item shows its actions\n const renderActions = (item: ListItem): ReactNode => {\n const allowed = selectItemActions(grouped.row, item, 'row', { getLinkHref });\n const menu = selectItemActions(grouped.menu, item, 'menu', { getLinkHref });\n if (allowed.length === 0 && menu.length === 0) {\n return null;\n }\n const running =\n pending?.endsWith(`\\u0000${item.id}`) === true ? pending.split('\\u0000')[0] : null;\n return (\n <RowActions\n itemLabel={getItemLabel(item)}\n actions={allowed}\n menu={menu}\n pending={running ?? null}\n onRun={(action) => runOnItem(action, item)}\n icons={actionIcons}\n />\n );\n };\n\n const pageCheckbox = (\n <Checkbox\n aria-label={intl.formatMessage(messages.selectPage)}\n isSelected={pageSelection === 'all'}\n isIndeterminate={pageSelection === 'some'}\n isDisabled={pageItems.length === 0}\n onChange={() => {\n const ids = pageItems.map((item) => item.id);\n if (pageSelection === 'all') {\n list.deselect(ids);\n } else {\n list.select(ids);\n }\n }}\n />\n );\n\n const sortable = allColumns.some((column) => column.sortable === true);\n const choosesColumns = columnChoice && allColumns.length > 1;\n const showToolbar =\n search ||\n filters.length > 0 ||\n sortable ||\n choosesColumns ||\n layouts.length > 1 ||\n resourceActions.length > 0 ||\n toolbar !== undefined;\n\n function clearFilters() {\n Object.keys(filterValues).forEach((id) => list.setFilter(id, undefined));\n if ((query.q ?? '') !== '') {\n list.setSearch('');\n }\n }\n\n const body = (() => {\n if (error !== null) {\n return (\n <Alert\n tone=\"danger\"\n title={intl.formatMessage(messages.loadFailed)}\n actions={\n onRetry !== undefined ? (\n <Button size=\"sm\" onPress={onRetry}>\n {intl.formatMessage(messages.retry)}\n </Button>\n ) : undefined\n }\n >\n {error.message}\n </Alert>\n );\n }\n if (items === undefined) {\n return (\n <ListSkeleton\n Layout={Layout}\n columns={columns}\n perPage={query.perPage}\n sort={sort}\n label={label}\n />\n );\n }\n // An empty month is still a calendar: it goes to the others.\n if (pageItems.length === 0 && !inCalendar) {\n return (\n <div className={styles.state}>\n <p>\n {hasQuery\n ? intl.formatMessage(messages.noResults)\n : (emptyMessage ?? intl.formatMessage(messages.empty))}\n </p>\n {hasQuery ? (\n <Button size=\"sm\" onPress={() => clearFilters()}>\n {intl.formatMessage(messages.clearFilters)}\n </Button>\n ) : null}\n </div>\n );\n }\n return (\n <Layout\n items={pageItems}\n columns={columns}\n renderValue={renderValue}\n getItemLabel={getItemLabel}\n getItemHref={getItemHref}\n getItemImage={\n itemImage !== undefined ? (item) => getImageUrl(item[itemImage]) : undefined\n }\n calendar={\n inCalendar\n ? {\n field: calendar.field,\n timeZone: getCalendarTimeZone(\n [...fields, ...allColumns.map((column) => column.field)].find(\n (field) => field?.name === calendar.field,\n ),\n ),\n month: view.month ?? currentMonth(),\n onMonthChange: (month) => list.setMonth(month),\n more:\n total !== undefined && total > pageItems.length\n ? { total }\n : cursors !== undefined && cursors.next !== null\n ? { total: null }\n : null,\n }\n : undefined\n }\n isCurrent={(item) => item.id === currentItemId}\n selectable={selectable}\n isSelected={(item) => isItemSelected(selection, item.id)}\n onToggle={(item) => list.toggle(item.id)}\n renderActions={renderActions}\n sort={sort}\n onSort={(column) => list.toggleSort(column.id)}\n label={label}\n pageSelection={pageCheckbox}\n renderCell={renderCell}\n />\n );\n })();\n\n return (\n <div className={cx(styles.list, className)}>\n {showToolbar ? (\n <div className={styles.toolbar}>\n <div className={styles.toolbarStart}>\n {search ? (\n <SearchField\n value={query.q ?? ''}\n onChange={(q) => list.setSearch(q)}\n />\n ) : null}\n {filters.length > 0 ? (\n <FilterControls\n filters={filters}\n values={filterValues}\n onChange={(id, value) => list.setFilter(id, value)}\n onLabel={filterLabels.remember}\n controls={filterControls}\n columns={allColumns}\n fields={fields}\n labels={filterLabels.labels}\n />\n ) : null}\n </div>\n <div className={styles.toolbarEnd}>\n {sortable ? (\n <div className={layout === 'table' ? styles.tableSort : undefined}>\n <SortSelect\n columns={allColumns}\n sort={sort}\n onChange={(next) => list.setSort(next)}\n />\n </div>\n ) : null}\n {layouts.length > 1 ? (\n <LayoutSwitch\n layouts={layouts}\n value={layout}\n onChange={(next) => {\n if (controlledLayout === undefined) {\n list.setLayout(next);\n }\n onLayoutChange?.(next);\n }}\n />\n ) : null}\n {choosesColumns ? (\n <ColumnMenu\n columns={allColumns}\n shown={columns}\n onChange={(ids) => list.setColumns(ids)}\n onReset={\n view.columns !== undefined ? () => list.resetColumns() : null\n }\n />\n ) : null}\n {resourceActions\n .filter(\n (action) => selectedCount === 0 || !hasScope(action, 'selection'),\n )\n .map((action) => (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={getActionHref(action)}\n isPending={pending === keyOf(action)}\n onPress={() => runOnResource(action)}\n />\n ))}\n {toolbar}\n </div>\n </div>\n ) : null}\n <FilterChips\n filters={filters}\n values={filterValues}\n q={query.q}\n onRemove={(id) => list.setFilter(id, undefined)}\n onClearSearch={() => list.setSearch('')}\n onClear={clearFilters}\n columns={allColumns}\n fields={fields}\n labels={filterLabels.labels}\n />\n {selectedCount > 0 ? (\n <div className={styles.selection}>\n <span className={styles.selectionCount} role=\"status\">\n {selection.mode === 'all'\n ? intl.formatMessage(messages.allMatchingSelected, {\n total: selectedCount,\n })\n : intl.formatMessage(messages.selectedCount, { count: selectedCount })}\n </span>\n {selection.mode === 'ids' &&\n pageSelection === 'all' &&\n count > pageItems.length ? (\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.selectAllMatching()}>\n {intl.formatMessage(messages.selectAllMatching, { total: count })}\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.clearSelection()}>\n {intl.formatMessage(messages.clearSelection)}\n </Button>\n {selectionActions.length > 0 ? (\n <div className={styles.selectionActions}>\n {selectionActions.map((action) => {\n const skipped = selectedItems.filter(\n (item) => !isAllowedOn(action, item),\n ).length;\n return (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={null}\n isPending={pending === keyOf(action)}\n isDisabled={\n (pending !== null && pending !== keyOf(action)) ||\n skipped >= selectedCount\n }\n onPress={() => runOnSelection(action)}\n />\n );\n })}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className={styles.body} aria-busy={isLoading && items !== undefined}>\n {body}\n </div>\n {inCalendar ? null : cursors !== undefined && error === null ? (\n <CursorPagination\n perPage={query.perPage ?? pageItems.length}\n hasPrevious={query.cursor !== undefined}\n hasNext={cursors.next !== null}\n onPrevious={() => list.previousPage(cursors.previous)}\n onNext={() => {\n if (cursors.next !== null) {\n list.nextPage(cursors.next);\n }\n }}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : total !== undefined && error === null && total > 0 ? (\n <Pagination\n page={query.page ?? 1}\n perPage={query.perPage ?? pageItems.length}\n total={total}\n onPageChange={(page) => list.setPage(page)}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : null}\n <ConfirmDialog\n event={confirming}\n preview={preview}\n onConfirm={(event) => void execute(event)}\n onCancel={closeConfirmation}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0KA,SAASiH,MAAMf,QAAgBH,MAAyB;CACpD,OAAOA,SAASmB,KAAAA,IAAY,GAAGhB,OAAOiB,GAAE,QAASpB,KAAKoB,OAAOjB,OAAOiB;AACxE;;;;;;AAOA,SAAOC,SAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAkB,MAAA,EAAArD,MAAAC,OAAAC,SAAAoD,YAAAnD,cAAAoD,IAAAnD,OAAAC,SAAAG,WAAAgD,IAAA/C,OAAAgD,IAAA9C,SAAAC,SAAA8C,IAAA7C,QAAA8C,IAAA7C,QAAA8C,IAAA7C,SAAA8C,IAAA7C,QAAA8C,kBAAA7C,gBAAAC,gBAAAC,YAAA4C,gBAAA3C,SAAA4C,aAAA3C,UAAAC,eAAAC,aAAAC,WAAAC,WAAAC,UAAAuC,IAAArC,cAAAsC,kBAAApC,aAAAC,aAAAE,eAAAkC,IAAAjC,UAAAG,kBAAAC,gBAAAC,YAAA6B,KAAA5B,cAAAC,aAAA4B,KAAAzB,SAAAC,cAAA,cAAAyB,WAAAxB,cAAAK;CAIrB,MAAAhD,eAAAoD,OAAAP,KAAAA,IAAA,OAAAO;CAGA,MAAA/C,YAAAgD,OAAAR,KAAAA,IAAA,QAAAQ;CACA,MAAA/C,QAAAgD,OAAAT,KAAAA,IAAA,OAAAS;CAAY,IAAAc;CAAA,IAAAnB,EAAA,OAAAM,IAAA;EAEHa,MAAAb,OAAAV,KAAAA,IAAA,CAAA,IAAAU;EAAgBN,EAAA,KAAAM;EAAAN,EAAA,KAAAmB;CAAA,OAAAA,MAAAnB,EAAA;CAAhB,MAAAoB,cAAAD;CACT,MAAA1D,SAAA8C,OAAAX,KAAAA,IAAA,CAAA,IAAAW;CACA,MAAA7C,SAAA8C,OAAAZ,KAAAA,IAAA,QAAAY;CACS,MAAAa,cAAAZ,OAAAb,KAAAA,IAAA,CAAe,OAAO,IAAtBa;CAWT,MAAAnC,WAAAuC,OAAAjB,KAAAA,IAAA,OAAAiB;CAIA,MAAAhC,gBAAAkC,OAAAnB,KAAAA,IAAA,OAAAmB;CAIA,MAAA5B,aAAA6B,QAAApB,KAAAA,IAAA,CAAA,IAAAoB;CAEA,MAAA3B,cAAA4B,QAAArB,KAAAA,IAAA5G,oBAAAiI;CAMA,MAAAK,OAAa3H,eAAe;CAC5B,MAAA4H,SAAe3H,SAAS;CACxB,MAAA4H,UAAgBtI,WAAW;CAC3B,MAAA,EAAAuI,OAAAC,MAAAC,cAAmCpF,aAAaK,IAAI;CACpD,MAAAgF,eAAqB9G,gBAAgB;CACrC,MAAA,CAAA+G,YAAAC,iBAAoClJ,SAAiC,IAAI;CACzE,MAAA,CAAAmJ,SAAAC,cAA8BpJ,SAAgC,IAAI;CAElE,MAAAqJ,eAAqBtJ,OAAO,CAAC;CAC7B,MAAA,CAAAuJ,SAAAC,cAA8BvJ,SAAwB,IAAI;CAAE,IAAAwJ;CAAA,IAAApC,EAAA,OAAAqC,OAAAC,IAAA,2BAAA,GAAA;EAK1DF,MAAA,CAAC;EAACpC,EAAA,KAAAoC;CAAA,OAAAA,MAAApC,EAAA;CAFJ,MAAA,CAAAuC,OAAAC,YAA0B5J,SAExBwJ,GAAE;CAAE,IAAAK;CAAA,IAAAzC,EAAA,OAAAnD,OAAA;EACW4F,OAAAhE,SAAA;GACb,MAAAiE,OAAa7F,OAAK8F,MAAOC,cAAeA,UAAS/C,OAAQpB,KAAIoB,EAAG;GAChE,IAAI6C,SAAS9C,KAAAA,GACT4C,UAASK,aAAc;IAAA,GAAKA;KAAUpE,KAAIoB,KAAM;KAAA6C;KAAAjE;IAAa;GAAE,EAAE;EACpE;EACJuB,EAAA,KAAAnD;EAAAmD,EAAA,KAAAyC;CAAA,OAAAA,MAAAzC,EAAA;CALD,MAAA8C,WAAiBL;CAKf,IAAAM;CAAA,IAAA/C,EAAA,OAAAkB,aAAAlB,EAAA,OAAAsB,MAAA;EAEYyB,MAAA7B,aAAaI,KAAI0B,cAAe5H,SAAQwB,IAAK;EAACoD,EAAA,KAAAkB;EAAAlB,EAAA,KAAAsB;EAAAtB,EAAA,KAAA+C;CAAA,OAAAA,MAAA/C,EAAA;CAA5D,MAAAiD,QAAcF;CAA+C,IAAAG;CAAA,IAAAlD,EAAA,OAAAuC,OAAA;EACzBW,OAAAC,WAChCZ,MAAM9D,OAAIoB,GAAU,EAAA6C,SAAKjE,SAAQ8D,MAAM9D,OAAIoB,GAAU,EAAApB,QAApB0E,SAAjCA;EAAqEnD,EAAA,KAAAuC;EAAAvC,EAAA,KAAAkD;CAAA,OAAAA,MAAAlD,EAAA;CADzE,MAAAoD,aAAmBvG,SAAA,CAAA,EAAA,CAAWwG,IAAMH,GAEpC;CACA,MAAAI,QAActG,SAASoG,UAASG;CAAQ,IAAAC;CAAA,IAAAxD,EAAA,QAAAyB,MAAAgC,MAAA;EAC3BD,MAAA/B,MAAKgC,QAAL,CAAA;EAAgBzD,EAAA,MAAAyB,MAAAgC;EAAAzD,EAAA,MAAAwD;CAAA,OAAAA,MAAAxD,EAAA;CAA7B,MAAAyD,OAAaD;CAAiB,IAAAE;CAAA,IAAA1D,EAAA,QAAAwB,QAAAmC,aAAA;EAItBD,MAAAE,OAAMC,YAAarC,QAAOmC,WAAY;EAAC3D,EAAA,MAAAwB,QAAAmC;EAAA3D,EAAA,MAAA0D;CAAA,OAAAA,MAAA1D,EAAA;CAAvC,MAAA8D,MAAAJ;CAA0E,IAAAK;CAAA,IAAA/D,EAAA,QAAAf,oBAAAe,EAAA,QAAA8D,KAAA;EAF9BC,MAAA;GAAA,GAC7C7I;GAAc,GACb4I;GAA0E,GAC3E7E;EACP;EAACe,EAAA,MAAAf;EAAAe,EAAA,MAAA8D;EAAA9D,EAAA,MAAA+D;CAAA,OAAAA,MAAA/D,EAAA;CAJD,MAAAgE,aAAoDD;CAIlD,IAAAE;CAAA,IAAAjE,EAAA,QAAAgE,cAAAhE,EAAA,QAAA1B,YAAA0B,EAAA,QAAA3B,WAAA;EAIE4F,OAAApE,OACImE,WAAWnE,QAAQD,KAAAA,MAClBC,OAAO,aAAaxB,cAAcuB,KAAAA,OAClCC,OAAO,cAAcvB,aAAa;EAAK0B,EAAA,MAAAgE;EAAAhE,EAAA,MAAA1B;EAAA0B,EAAA,MAAA3B;EAAA2B,EAAA,MAAAiE;CAAA,OAAAA,MAAAjE,EAAA;CAJhD,MAAAkE,YAAkB7C,YAAW8C,OACzBF,GAIJ;CACA,MAAAtG,UAAgBuG,UAASX,SAAU,IAAnBW,YAAA,CAAoC,OAAO;CAC3D,MAAAE,eACI1C,KAAI9D,WAAYgC,KAAAA,KAAajC,QAAO0G,SAAU3C,KAAI9D,MAAO,IAAI8D,KAAI9D,SAAjEgC,KAAAA;CACJ,MAAAhC,SAAe8C,oBAAA0D,gBAAoCzG,QAAO,MAA3C;CACf,MAAAb,UAAgBpC,gBAAgBwF,YAAYwB,KAAI5E,OAAQ;CACxD,MAAAwH,SAAeN,WAAWpG,WAAW1C,eAAcqJ;CACnD,MAAAC,aAAmB5G,WAAW,cAAcU,aAAa;CAAK,IAAAmG;CAAA,IAAAzE,EAAA,QAAA1B,YAAA0B,EAAA,QAAAoB,eAAApB,EAAA,QAAAwE,YAAA;EAE9CC,MAAAD,aACVpD,YAAW+C,QAAQA,WAAYA,OAAMtE,OAAQvB,SAAQ6F,MAC3C,IAFA/C;EAECpB,EAAA,MAAA1B;EAAA0B,EAAA,MAAAoB;EAAApB,EAAA,MAAAwE;EAAAxE,EAAA,MAAAyE;CAAA,OAAAA,MAAAzE,EAAA;CAFjB,MAAAxC,UAAgBiH;CAEE,IAAAC;CAAA,IAAA1E,EAAA,QAAA1B,YAAA0B,EAAA,QAAAwE,cAAAxE,EAAA,QAAAyB,MAAA0C,QAAA;EACGO,MAAAd,OAAMC,YACvBD,OAAMe,QAASlD,MAAK0C,UAAL,CAAiB,CAAC,CAAC,CAAAA,QAC9BS,QAAA;GAAC,MAAA,CAAAC,QAAAD;GAAI,OAAK,EAAEJ,cAAc3E,SAAOvB,SAAQ6F;EAAQ,CACrD,CACJ;EAACnE,EAAA,MAAA1B;EAAA0B,EAAA,MAAAwE;EAAAxE,EAAA,MAAAyB,MAAA0C;EAAAnE,EAAA,MAAA0E;CAAA,OAAAA,MAAA1E,EAAA;CAJD,MAAA8E,eAAqBJ;CAInB,IAAAE;CAAA,IAAA5E,EAAA,QAAA8E,gBAAA9E,EAAA,QAAAyB,MAAAsD,GAAA;EACeH,MAAAhB,OAAMoB,KAAMF,YAAY,CAAC,CAAAvB,SAAU,MAAM9B,MAAKsD,KAAL,QAAmB;EAAE/E,EAAA,MAAA8E;EAAA9E,EAAA,MAAAyB,MAAAsD;EAAA/E,EAAA,MAAA4E;CAAA,OAAAA,MAAA5E,EAAA;CAA/E,MAAAiF,WAAiBL;CAEjB,MAAAM,UAAgB5K,iBAAiBsG,WAAW;CAE5C,MAAAuE,iBAAuB,CAAA,GAAID,QAAO1F,SAAQ,GAAK0F,QAAOE,IAAK,CAAC,CAAAjB,OACxDkB,KAGJ;CACA,MAAAC,mBAAyBH,eAAchB,OAAQoB,MAAyC;CACxF,MAAAC,kBAAwBL,eAAchB,OAAQsB,MAAwC;CACtF,MAAA1H,aAAmB4C,kBAAkB2E,iBAAgB/B,SAAU;CAE/D,MAAAmC,gBAAsB3H,aAAa1C,cAAcsG,WAAW2B,KAAS,IAA/C;CAAiD,IAAAqC;CAAA,IAAA3F,EAAA,QAAA2B,WAAA;EAChCgE,OAAAC,WAAUrK,eAAeoG,WAAWlD,OAAIoB,EAAG;EAACG,EAAA,MAAA2B;EAAA3B,EAAA,MAAA2F;CAAA,OAAAA,MAAA3F,EAAA;CAAnF,MAAA6F,gBAAsBzC,UAASe,OAAQwB,GAA4C;CACnF,MAAAG,gBAAsBxK,iBAAiBqG,WAAWyB,SAAS;CAE3D,MAAA5E,gBAAqBuH,WAAA;EACjB,IAAIjF,qBAAqBlB,KAAAA,GAAS,OACvBkB,iBAAiBrC,MAAI;EAEhC,MAAAuH,cACI9F,WAAUyC,MAAMsD,WAAYA,OAAMpG,OAAQzB,SACO,MAAhDA,cAAcwB,KAAAA,IAAY9C,QAAO,KAAjC8C,KAAAA;EACL,MAAAsG,QACIF,gBAAgBpG,KAAAA,IACVlD,OAAOD,eAAegC,QAAMuH,aAAa1E,KAAI6E,MAAO,GAAG7E,KAAI6E,MAGxD,IAFH/H,cAAcwB,KAAAA,IACZlD,OAAO+B,OAAKL,YAAYkD,KAAI6E,MAC3B,IAFH;EAEK,OACRD,UAAU,KAAVA,QAAuBzH,OAAIoB;CAAG;CAGzC,MAAAuG,cAAoB5J,eAAesC,QAAQ;CAE3C,MAAAuH,cAAmBC,QAAAC,UAAAC,YAAA;EACf,MAAAC,QAAcrH,iBAAiBQ,KAAAA,IAAY3E,eAAegL,UAAQxH,QAAMU,UAAiB,IAA3E;EACd,IAAIsH,UAAU,QAAQrH,iBAAiBQ,KAAAA,GAAS,OACrC4G;EACV,OAEG,oBAAC,YAAD;GAEU/H,MAAAA;GACCgI;GACI,WAAAjI,aAAaC,MAAI;GACf,cAAAiI,cAAaN,YAAYvD,WAASoD,QAAM;GAC7C,SAAAU,QAAAC,UAAiBxH,aAAa;IAAAX,MAAQiE;IAAI+D;IAAAG;GAAe,CAAC;GAC1D9D,QAAAA;GACK,cAAAxD,YAAaD,YAAYC,SAASmH,MAAKI,IAAK;GAExDL,UAAAA;EAVM,GACF,GAAG/H,OAAIoB,GAAG,QAASoG,SAAMpG,IADvB;CAWE;CAIrB,MAAAiH,0BAA0B;EACtB7E,aAAYY,UAAZZ,aAAYY,UAAY;EACxBf,cAAc,IAAI;EAClBE,WAAW,IAAI;CAAC;CAGpB,MAAA+E,UAAgB,OAAAC,UAAA;EACZF,kBAAkB;EAClB3E,WAAWxC,MAAMqH,MAAKpI,QAASoI,MAAKvI,IAAK,CAAC;EAE1C,MAAMwI,QAAOC,QAAS,CAAC,CAAAC,WACPlJ,WAAW+I,KAAK,CAAC,CAAC,CAAAG,MACxBC,YAAA;GAEF,IAAIJ,MAAKK,UAAW,eAAeD,YAAY,OAC3CxK,KAAI0K,eAAgB;EACvB,CACJ,CAAC,CAAAC,OACKC,WAAA;GACHjG,OAAMkG,KAAM;IAAAvB,OACD5E,KAAI0B,cAAe5H,SAAQsM,cAAe,EAAA9I,QACrCzF,eAAe6N,MAAKpI,QAAS0C,IAAI,EAC7C,CAAC;IAAC,GACEkG,kBAAkBlK,SAASkK,OAAMG,YAAa,KAA9C,EAAAC,aACiBJ,OAAMG,QACpB,IAFH,CAEG;IAACE,MACF;GACV,CAAC;EAAC,CACL;EACL1F,WAAW,IAAI;CAAC;CAGpB,MAAA2F,OAAYC,YAAA;EACR,MAAA,EAAAnJ,QAAAoJ,UAAArG,WAAAsG,gBAA8BjB;EAC9B,IACI9I,kBAAkB0B,KAAAA,KAClBhB,SAAMsJ,WAAY,QAClBvG,gBAAc/B,KAAAA,KACd,WAAW+B,aAAS;GAGpB,MAAAwG,YAAkBlG,aAAYY,UAAZZ,aAAYY,UAAQ;GACtC,MAAAuF,OAAaxJ,SAAMyJ,YAAazI,KAAAA,KAAahB,SAAMyJ,YAAa;GAChEvG,cAAckF,OAAK;GACnBhF,WAAW,EAAAsG,QAAU,UAAU,CAAC;GAChCpK,cAAc8I,OAAK,CAAC,CAAAG,MAChBoB,WAAA;IACI,IAAItG,aAAYY,YAAaA,WAAO;IAIpC,KADgB0F,QAAMC,WAAaxB,QAAKwB,QAAQjF,YAChC,KAAZ,CAAkB6E,MACbrB,QAAQC,OAAK;SAElBhF,WAAWuG,WAAW,OAAX;KAAAD,QAA4B;KAAM,GAAKC;IAAc,IAArD,IAAsD;GACpE,SAEL;IAEI,IAAItG,aAAYY,YAAaA,WAAO;IAGpC,IAAI3I,kBAAkB8M,OAAK,GACvBhF,WAAW,IAAI;SAEV+E,QAAQC,OAAK;GACrB,CAET;GAAC;EAAA;EAGL,IAAI9M,kBAAkB8M,OAAK,GACvBlF,cAAckF,OAAK;OAEdD,QAAQC,OAAK;CACrB;CAGL,MAAAyB,aAAkBC,UAAAC,WACdb,IAAI;EAAAlJ,QAAEA;EAAMyI,OAAS;EAAM5I,MAAEA;EAAI6E,OAAS;EAACkF,SAAW,CAAA;CAAG,CAAC;CAE9D,MAAAI,kBAAuBC,aAAA;EACnB,MAAAC,WAAiBlM,KAAImM,aAAc;EACnC,IAAID,aAAa,MAAI;EAGrBhB,IAAI;GAAAlJ,QACAA;GAAMyI,OACC;GAAW1F,WACPmH;GAAQxF,OACZoC;GAAa8C,SACX3C,cAAa1B,QAAQ6E,WAAU,CAACxO,YAAYoE,UAAQH,MAAI,CAAC;EACtE,CAAC;CAAC;CAGN,MAAAwK,iBAAsBC,aAClBpB,IAAI;EAAAlJ,QAAEA;EAAMyI,OAAS;EAAU/D;EAAAkF,SAAyB,CAAA;CAAG,CAAC;CAGhE,MAAAW,iBAAsBC,WAAA;EAClB,MAAAC,UAAgBpQ,kBAAkBiM,QAAOoE,KAAM7K,QAAM,OAAO,EAAAE,YAAc,CAAC;EAC3E,MAAAyG,OAAanM,kBAAkBiM,QAAOE,MAAO3G,QAAM,QAAQ,EAAAE,YAAc,CAAC;EAC1E,IAAI0K,QAAO9F,WAAY,KAAK6B,KAAI7B,WAAY,GAAC,OAClC;EAEX,MAAAgG,UACIrH,SAAOsH,SAAW,SAAS/K,OAAIoB,IAAK,MAAM,OAAOqC,QAAOuH,MAAO,IAAQ,CAAC,CAAA,KAAxE;EAAmF,OAEnF,oBAAC,YAAD;GACe,WAAAjL,aAAaC,MAAI;GACnB4K,SAAAA;GACHjE;GACG,SAAAmE,WAAA;GACF,QAAAG,aAAYjB,UAAU7J,UAAQH,MAAI;GAClCN,OAAAA;EAAW,CAAA;CACpB;CAER,IAAAwL;CAAA,IAAA3J,EAAA,QAAAsB,MAAA;EAIkBqI,MAAArI,KAAI0B,cAAe5H,SAAQwO,UAAW;EAAC5J,EAAA,MAAAsB;EAAAtB,EAAA,MAAA2J;CAAA,OAAAA,MAAA3J,EAAA;CAF3D,MAAA6J,eACI,oBAAC,UAAD;EACgB,cAAAF;EACA,YAAA7D,kBAAkB;EACb,iBAAAA,kBAAkB;EACvB,YAAA1C,UAASG,WAAY;EACvB,gBAAA;GACN,MAAAuG,MAAY1G,UAASC,IAAK0G,MAAiB;GAC3C,IAAIjE,kBAAkB,OAClBlJ,KAAIoN,SAAUF,GAAG;QAEjBlN,KAAIqN,OAAQH,GAAG;EAClB;CACJ,CAAA;CAIT,MAAAI,WAAiBhK,WAAUiK,KAAMC,MAAoC;CACrE,MAAAC,iBAAuBtN,gBAAgBmD,WAAUqD,SAAU;CAC3D,MAAA+G,cACI5M,UACAF,QAAO+F,SAAU,KADjB2G,YAAAG,kBAIA1M,QAAO4F,SAAU,KACjBiC,gBAAejC,SAAU,KACzB/D,YAAYI,KAAAA;CAAU,IAAA2K;CAAA,IAAAvK,EAAA,QAAA8E,gBAAA9E,EAAA,QAAApD,QAAAoD,EAAA,QAAAyB,MAAAsD,GAAA;EAE1BwF,MAAA,SAAAC,eAAA;GACI5G,OAAMoB,KAAMF,YAAY,CAAC,CAAA2F,SAASC,SAAQ9N,KAAI+N,UAAW9K,MAAID,KAAAA,CAAS,CAAC;GACvE,KAAK6B,MAAKsD,KAAL,QAAmB,IACpBnI,KAAIgO,UAAW,EAAE;EACpB;EACJ5K,EAAA,MAAA8E;EAAA9E,EAAA,MAAApD;EAAAoD,EAAA,MAAAyB,MAAAsD;EAAA/E,EAAA,MAAAuK;CAAA,OAAAA,MAAAvK,EAAA;CALD,MAAAwK,eAAAD;CAKC,IAAAM;CAAAC,KAAA;EAGG,IAAIzN,UAAU,MAAI;GAAA,IAAA0N;GAAA,IAAA/K,EAAA,QAAAsB,MAAA;IAICyJ,MAAAzJ,KAAI0B,cAAe5H,SAAQ4P,UAAW;IAAChL,EAAA,MAAAsB;IAAAtB,EAAA,MAAA+K;GAAA,OAAAA,MAAA/K,EAAA;GAAA,IAAAiL;GAAA,IAAAjL,EAAA,QAAAsB,QAAAtB,EAAA,QAAAzC,SAAA;IAE1C0N,MAAA1N,YAAYqC,KAAAA,IACR,oBAAC,QAAD;KAAa,MAAA;KAAcrC,SAAAA;KACtB+D,UAAAA,KAAI0B,cAAe5H,SAAQ8P,KAAM;IAD/B,CAAA,IADXtL,KAAAA;IAIaI,EAAA,MAAAsB;IAAAtB,EAAA,MAAAzC;IAAAyC,EAAA,MAAAiL;GAAA,OAAAA,MAAAjL,EAAA;GAAA,IAAAmL;GAAA,IAAAnL,EAAA,QAAA3C,MAAAsK,WAAA3H,EAAA,QAAA+K,OAAA/K,EAAA,QAAAiL,KAAA;IARrBE,MAAA,oBAAC,OAAD;KACS,MAAA;KACE,OAAAJ;KAEH,SAAAE;KAOH5N,UAAAA,MAAKsK;IAXJ,CAAA;IAYE3H,EAAA,MAAA3C,MAAAsK;IAAA3H,EAAA,MAAA+K;IAAA/K,EAAA,MAAAiL;IAAAjL,EAAA,MAAAmL;GAAA,OAAAA,MAAAnL,EAAA;GAbZ6K,MACIM;GADJ,MAAAL;EAcE;EAEN,IAAIjO,UAAU+C,KAAAA,GAAS;GACnBiL,MACI,oBAAC,cAAD;IACYvG;IACCxH;IACA,SAAA2E,MAAK2J;IACR3H;IACCR;GAAK,CAAA;GANpB,MAAA6H;EAQE;EAGN,IAAI1H,UAASG,WAAY,KAArB,CAA2BiB,YAAU;GAAA,IAAAuG;GAAA,IAAA/K,EAAA,QAAAP,gBAAAO,EAAA,QAAAiF,YAAAjF,EAAA,QAAAsB,MAAA;IAIxByJ,MAAA9F,WACK3D,KAAI0B,cAAe5H,SAAQiQ,SACwB,IAAlD5L,gBAAgB6B,KAAI0B,cAAe5H,SAAQkQ,KAAM;IAAEtL,EAAA,MAAAP;IAAAO,EAAA,MAAAiF;IAAAjF,EAAA,MAAAsB;IAAAtB,EAAA,MAAA+K;GAAA,OAAAA,MAAA/K,EAAA;GAAA,IAAAiL;GAAA,IAAAjL,EAAA,QAAA+K,KAAA;IAH9DE,MAAA,oBAAA,KAAA,EAAA,UACKF,IAGD,CAAA;IAAA/K,EAAA,MAAA+K;IAAA/K,EAAA,MAAAiL;GAAA,OAAAA,MAAAjL,EAAA;GAAA,IAAAmL;GAAA,IAAAnL,EAAA,QAAAwK,gBAAAxK,EAAA,QAAAiF,YAAAjF,EAAA,QAAAsB,MAAA;IACH6J,MAAAlG,WACG,oBAAC,QAAD;KAAa,MAAA;KAAc,eAAMuF,aAAa;KACzClJ,UAAAA,KAAI0B,cAAe5H,SAAQoP,YAAa;IADtC,CAAA,IADV;IAIOxK,EAAA,MAAAwK;IAAAxK,EAAA,MAAAiF;IAAAjF,EAAA,MAAAsB;IAAAtB,EAAA,MAAAmL;GAAA,OAAAA,MAAAnL,EAAA;GAAA,IAAAuL;GAAA,IAAAvL,EAAA,QAAAiL,OAAAjL,EAAA,QAAAmL,KAAA;IAVZI,MAAA,qBAAA,OAAA;KAAgB,WAAAzR,wBAAM0R;KAAtB,UAAA,CACIP,KAKCE,GAKC;;IAAAnL,EAAA,MAAAiL;IAAAjL,EAAA,MAAAmL;IAAAnL,EAAA,MAAAuL;GAAA,OAAAA,MAAAvL,EAAA;GAZV6K,MACIU;GADJ,MAAAT;EAaE;EACL,IAAAC;EAAA,IAAA/K,EAAA,QAAA3B,WAAA;GASW0M,MAAA1M,cAAcuB,KAAAA,KAAd6L,WAAoC1Q,YAAY0D,OAAKJ,UAAU,IAA/DuB,KAAAA;GAA4EI,EAAA,MAAA3B;GAAA2B,EAAA,MAAA+K;EAAA,OAAAA,MAAA/K,EAAA;EAAA,IAAAiL;EAAA,IAAAjL,EAAA,QAAAnB,eAAA;GAsBrEoM,OAAAS,WAAUjN,OAAIoB,OAAQhB;GAAamB,EAAA,MAAAnB;GAAAmB,EAAA,MAAAiL;EAAA,OAAAA,MAAAjL,EAAA;EAAA,IAAAmL;EAAA,IAAAnL,EAAA,QAAA2B,WAAA;GAElCwJ,OAAAQ,YAAUpQ,eAAeoG,WAAWlD,QAAIoB,EAAG;GAACG,EAAA,MAAA2B;GAAA3B,EAAA,MAAAmL;EAAA,OAAAA,MAAAnL,EAAA;EAAA,IAAAuL;EAAA,IAAAvL,EAAA,QAAApD,MAAA;GAC9C2O,OAAAK,YAAUhP,KAAIiP,OAAQpN,QAAIoB,EAAG;GAACG,EAAA,MAAApD;GAAAoD,EAAA,MAAAuL;EAAA,OAAAA,MAAAvL,EAAA;EAAA,IAAA8L;EAAA,IAAA9L,EAAA,QAAApD,MAAA;GAGhCkP,OAAAC,aAAYnP,KAAIoP,WAAY/F,SAAMpG,EAAG;GAACG,EAAA,MAAApD;GAAAoD,EAAA,MAAA8L;EAAA,OAAAA,MAAA9L,EAAA;EApCtD6K,MACI,oBAAC,QAAD;GACWzH,OAAAA;GACEtG;GACIsJ;GACC5H;GACDE;GAET,cAAAqM;GAGA,UAAAvG,aAAA;IAAAiC,OAEiBnI,SAAQmI;IAAMwF,UACX9Q,oBACN,CAAA,GAAIsC,QAAM,GAAKyC,WAAUmD,IAAK6I,MAAwB,CAAC,CAAC,CAAAvJ,MACpDwJ,YAAW1F,SAAKI,SAAWvI,SAAQmI,KACvC,CACJ;IAAC2F,OACM1K,KAAI0K,SAAUrT,aAAa;IAACsT,gBACpBD,UAAWxP,KAAI0P,SAAUF,KAAK;IAACG,MAE1CvP,UAAU4C,KAAAA,KAAa5C,QAAQoG,UAASG,SAAxC,EAAAvG,MAIW,IAFLC,YAAY2C,KAAAA,KAAa3C,QAAOC,SAAU,OAA1C,EAAAF,OACW,KACN,IAFL;GAIN,IAjBd4C,KAAAA;GAmBO,WAAAqL;GACClN;GACA,YAAAoN;GACF,UAAAI;GACKpC;GACT1F;GACE,QAAAqI;GACD7I;GACQ4G,eAAAA;GACHxD;EAAU,CAAA;CAE5B;CAvFN,MAAAmG,OAAa3B;CAwFR,IAAAE;CAAA,IAAA/K,EAAA,QAAAN,WAAA;EAGeqL,MAAApQ,GAAGb,wBAAM8C,MAAO8C,SAAS;EAACM,EAAA,MAAAN;EAAAM,EAAA,MAAA+K;CAAA,OAAAA,MAAA/K,EAAA;CACrC,MAAAiL,MAAAX,cACG,qBAAA,OAAA;EAAgB,WAAAxQ,wBAAM0F;EAAtB,UAAA,CACI,qBAAA,OAAA;GAAgB,WAAA1F,wBAAM2S;GAAtB,UAAA,CACK/O,SACG,oBAAC,aAAD;IACW,OAAA+D,MAAKsD,KAAL;IACG,WAAAA,MAAOnI,KAAIgO,UAAW7F,CAAC;GAAC,CAAA,IAHzC,MAMAvH,QAAO+F,SAAU,IACd,oBAAC,gBAAD;IACa/F;IACDsH,QAAAA;IACE,WAAA4H,MAAAC,YAAe/P,KAAI+N,UAAW9K,MAAI+G,OAAK;IACxC,SAAAhF,aAAYgL;IACX1N,UAAAA;IACDgB,SAAAA;IACDzC;IACA,QAAAmE,aAAYiL;GAAO,CAAA,IATlC,IAYC;EACN,CAAA,GAAA,qBAAA,OAAA;GAAgB,WAAA/S,wBAAMgT;GAAtB,UAAA;IACK5C,WACG,oBAAA,OAAA;KAAgB,WAAAtM,WAAW,UAAU9D,wBAAMiT,YAA3BnN,KAAAA;KACZ,UAAA,oBAAC,YAAD;MACaM,SAAAA;MACHuD;MACI,WAAAvG,SAAUN,KAAIoQ,QAAS9P,IAAI;KAAC,CAAA;IAExC,CAAA,IAPT;IASAS,QAAO4F,SAAU,IACd,oBAAC,cAAD;KACa5F;KACFC,OAAAA;KACG,WAAAqP,WAAA;MACN,IAAIvM,qBAAqBd,KAAAA,GACrBhD,KAAIsQ,UAAWhQ,MAAI;MAEvBW,iBAAiBX,MAAI;KAAC;IACzB,CAAA,IATR;IAYAmN,iBACG,oBAAC,YAAD;KACanK,SAAAA;KACFpD,OAAAA;KACG,WAAAqQ,UAASvQ,KAAIwQ,WAAYtD,KAAG;KAElC,SAAApI,KAAI5E,YAAa8C,KAAAA,UAAkBhD,KAAIyQ,aAAc,IAArD;IAA6D,CAAA,IANxE;IAUA7H,gBAAerB,QAERmJ,aAAY5H,kBAAkB,KAAlB,CAAwBnL,SAASqE,UAAQ,WAAW,CACpE,CAAC,CAAAyE,KACIkK,aACD,oBAAC,cAAD;KAEY3O,QAAAA;KACDT,OAAAA;KACF,MAAA;KACC,MAAA9D,cAAcuE,QAAM;KACf,WAAAsD,YAAYvC,MAAMf,QAAM;KAC1B,eAAMqK,cAAcrK,QAAM;IAAC,GAN/BA,SAAMiB,EAMyB,CAE3C;IACJL;GACC;EACJ,CAAA,CAAA;CAvET,CAAA,IAAA;CAwEO,IAAA2L;CAAA,IAAAI;CAAA,IAAAvL,EAAA,QAAApD,MAAA;EAKMuO,OAAAqC,SAAQ5Q,KAAI+N,UAAW9K,MAAID,KAAAA,CAAS;EAC/B2L,YAAM3O,KAAIgO,UAAW,EAAE;EAAC5K,EAAA,MAAApD;EAAAoD,EAAA,MAAAmL;EAAAnL,EAAA,MAAAuL;CAAA,OAAA;EAAAJ,MAAAnL,EAAA;EAAAuL,MAAAvL,EAAA;CAAA;CAAA,IAAA8L;CAAA,IAAA9L,EAAA,QAAAE,cAAAF,EAAA,QAAAwK,gBAAAxK,EAAA,QAAAvC,UAAAuC,EAAA,QAAA4B,aAAAiL,UAAA7M,EAAA,QAAA8E,gBAAA9E,EAAA,QAAAxC,WAAAwC,EAAA,QAAAyB,MAAAsD,KAAA/E,EAAA,QAAAmL,OAAAnL,EAAA,QAAAuL,KAAA;EAL3CO,MAAA,oBAAC,aAAD;GACatO;GACDsH,QAAAA;GACL,GAAArD,MAAKsD;GACE,UAAAoG;GACK,eAAAI;GACNf,SAAAA;GACAtK,SAAAA;GACDzC;GACA,QAAAmE,aAAYiL;EAAO,CAAA;EAC7B7M,EAAA,MAAAE;EAAAF,EAAA,MAAAwK;EAAAxK,EAAA,MAAAvC;EAAAuC,EAAA,MAAA4B,aAAAiL;EAAA7M,EAAA,MAAA8E;EAAA9E,EAAA,MAAAxC;EAAAwC,EAAA,MAAAyB,MAAAsD;EAAA/E,EAAA,MAAAmL;EAAAnL,EAAA,MAAAuL;EAAAvL,EAAA,MAAA8L;CAAA,OAAAA,MAAA9L,EAAA;CACD,MAAAyN,MAAA/H,gBAAgB,IACb,qBAAA,OAAA;EAAgB,WAAA5L,wBAAM6H;EAAtB,UAAA;GACI,oBAAA,QAAA;IAAiB,WAAA7H,wBAAM4T;IAAsB,MAAA;IACxC/L,UAAAA,UAASgM,SAAU,QACdrM,KAAI0B,cAAe5H,SAAQwS,qBAAsB,EAAA5Q,OACtC0I,cACX,CACmE,IAAnEpE,KAAI0B,cAAe5H,SAAQsK,eAAgB,EAAApC,OAASoC,cAAc,CAAC;GACtE,CAAA;GACN/D,UAASgM,SAAU,SACpB7H,kBAAkB,SAClBxC,QAAQF,UAASG,SACb,oBAAC,QAAD;IAAa,MAAA;IAAa,SAAA;IAAiB,eAAM3G,KAAIiR,kBAAmB;IACnEvM,UAAAA,KAAI0B,cAAe5H,SAAQyS,mBAAoB,EAAA7Q,OAASsG,MAAM,CAAC;GAD7D,CAAA,IAHV;GAOD,oBAAC,QAAD;IAAa,MAAA;IAAa,SAAA;IAAiB,eAAM1G,KAAI0K,eAAgB;IAChEhG,UAAAA,KAAI0B,cAAe5H,SAAQkM,cAAe;GADxC,CAAA;GAGNhC,iBAAgB/B,SAAU,IACvB,oBAAA,OAAA;IAAgB,WAAAzJ,wBAAMwL;IACjBA,UAAAA,iBAAgBjC,KAAKyK,aAAA;KAClB,MAAAC,YAAgBlI,cAAa1B,QACzB6J,YAAU,CAACxT,YAAYoE,UAAQH,OAAI,CACvC,CAAC,CAAA8E;KAAQ,OAEL,oBAAC,cAAD;MAEY3E,QAAAA;MACDT,OAAAA;MACF,MAAA;MACC,MAAA;MACK,WAAA+D,YAAYvC,MAAMf,QAAM;MAE/B,YAACsD,YAAY,QAAQA,YAAYvC,MAAMf,QAAM,KAC7C4J,aAAW9C;MAEN,eAAMkD,eAAehK,QAAM;KAAC,GAVhCA,SAAMiB,EAU0B;IACvC,CAET;GACC,CAAA,IAtBT;EAwBC;CA3CT,CAAA,IAAA;CA6CuC,MAAAoO,MAAA7Q,aAAaP,UAAU+C,KAAAA;CAAS,IAAAsO;CAAA,IAAAlO,EAAA,QAAAwM,QAAAxM,EAAA,QAAAiO,KAAA;EAAxEC,MAAA,oBAAA,OAAA;GAAgB,WAAApU,wBAAM0S;GAAkB,aAAAyB;GACnCzB,UAAAA;EACC,CAAA;EAAAxM,EAAA,MAAAwM;EAAAxM,EAAA,MAAAiO;EAAAjO,EAAA,MAAAkO;CAAA,OAAAA,MAAAlO,EAAA;CAAA,IAAAmO;CAAA,IAAAnO,EAAA,QAAA/C,WAAA+C,EAAA,QAAA3C,SAAA2C,EAAA,QAAAwE,cAAAxE,EAAA,QAAApD,QAAAoD,EAAA,QAAAoD,aAAApD,EAAA,QAAAlC,kBAAAkC,EAAA,QAAAyB,MAAA2M,UAAApO,EAAA,QAAAyB,MAAA4M,QAAArO,EAAA,QAAAyB,MAAA2J,WAAApL,EAAA,QAAAhD,OAAA;EACLmR,MAAA3J,aAAA,OAAoBvH,YAAY2C,KAAAA,KAAavC,UAAU,OACpD,oBAAC,kBAAD;GACa,SAAAoE,MAAK2J,WAAYhI,UAASG;GACtB,aAAA9B,MAAK2M,WAAYxO,KAAAA;GACrB,SAAA3C,QAAOC,SAAU;GACd,kBAAMN,KAAI0R,aAAcrR,QAAOE,QAAS;GAC5C,cAAA;IACJ,IAAIF,QAAOC,SAAU,MACjBN,KAAI2R,SAAUtR,QAAOC,IAAK;GAC7B;GAEWY;GACC,kBAAAsN,YAAaxO,KAAI4R,WAAYpD,OAAO;EAAC,CAAA,IAE1DpO,UAAU4C,KAAAA,KAAavC,UAAU,QAAQL,QAAQ,IACjD,oBAAC,YAAD;GACU,MAAAyE,MAAK4M,QAAL;GACG,SAAA5M,MAAK2J,WAAYhI,UAASG;GAC5BvG;GACO,eAAAqR,SAAUzR,KAAI6R,QAASJ,IAAI;GACzBvQ;GACC,kBAAA4Q,cAAa9R,KAAI4R,WAAYpD,SAAO;EAAC,CAAA,IAP1D;EASIpL,EAAA,MAAA/C;EAAA+C,EAAA,MAAA3C;EAAA2C,EAAA,MAAAwE;EAAAxE,EAAA,MAAApD;EAAAoD,EAAA,MAAAoD;EAAApD,EAAA,MAAAlC;EAAAkC,EAAA,MAAAyB,MAAA2M;EAAApO,EAAA,MAAAyB,MAAA4M;EAAArO,EAAA,MAAAyB,MAAA2J;EAAApL,EAAA,MAAAhD;EAAAgD,EAAA,OAAAmO;CAAA,OAAAA,MAAAnO,EAAA;CAAA,IAAA2O;CAAA,IAAA3O,EAAA,SAAA+G,SAAA;EAIO4H,OAAAC,YAAW,KAAK7H,QAAQC,OAAK;EAAChH,EAAA,OAAA+G;EAAA/G,EAAA,OAAA2O;CAAA,OAAAA,MAAA3O,EAAA;CAAA,IAAA6O;CAAA,IAAA7O,EAAA,SAAA8G,qBAAA9G,EAAA,SAAA6B,cAAA7B,EAAA,SAAA+B,WAAA/B,EAAA,SAAA2O,KAAA;EAH7CE,MAAA,oBAAC,eAAD;GACWhN,OAAAA;GACEE;GACE,WAAA4M;GACD7H,UAAAA;EAAiB,CAAA;EAC7B9G,EAAA,OAAA8G;EAAA9G,EAAA,OAAA6B;EAAA7B,EAAA,OAAA+B;EAAA/B,EAAA,OAAA2O;EAAA3O,EAAA,OAAA6O;CAAA,OAAAA,MAAA7O,EAAA;CAAA,IAAA8O;CAAA,IAAA9O,EAAA,SAAA+K,OAAA/K,EAAA,SAAAiL,OAAAjL,EAAA,SAAA8L,OAAA9L,EAAA,SAAAyN,OAAAzN,EAAA,SAAAkO,OAAAlO,EAAA,SAAAmO,OAAAnO,EAAA,SAAA6O,KAAA;EAlKNC,MAAA,qBAAA,OAAA;GAAgB,WAAA/D;GAAhB,UAAA;IACKE;IAyEDa;IAWC2B;IA6CDS;IAGCC;IAwBDU;GAME;;EAAA7O,EAAA,OAAA+K;EAAA/K,EAAA,OAAAiL;EAAAjL,EAAA,OAAA8L;EAAA9L,EAAA,OAAAyN;EAAAzN,EAAA,OAAAkO;EAAAlO,EAAA,OAAAmO;EAAAnO,EAAA,OAAA6O;EAAA7O,EAAA,OAAA8O;CAAA,OAAAA,MAAA9O,EAAA;CAAA,OAnKN8O;AAmKM;AAljBP,SAAA5C,OAAA6C,UAAA;CAAA,OAiXqE9I,SAAMQ;AAAM;AAjXjF,SAAA2D,OAAA4E,UAAA;CAAA,OAkS0C/I,SAAMiE,aAAc;AAAI;AAlSlE,SAAAH,OAAAkF,QAAA;CAAA,OAwR6CxQ,OAAIoB;AAAG;AAxRpD,SAAA4F,OAAAyJ,UAAA;CAAA,OA4GuD3U,SAASqE,UAAQ,UAAU;AAAC;AA5GnF,SAAA2G,OAAA4J,UAAA;CAAA,OA2GwD5U,SAASqE,UAAQ,WAAW;AAAC;AA3GrF,SAAAyG,MAAAzG,QAAAwQ,OAAAC,KAAA;CAAA,QAwGM9U,SAASqE,QAAQ,WAA2C,KAA3BrE,SAASqE,QAAQ,UAAU,MAC7DyQ,IAAGC,WAAWC,gBAAe3M,YAAS/C,OAAQjB,OAAMiB,EAAG,MAAMuP;AAAK"}
@@ -47,6 +47,12 @@
47
47
  font-size: var(--panneau-font-size-sm);
48
48
  }
49
49
 
50
+ .panneau-displays-palette-color {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: var(--panneau-space-2);
54
+ }
55
+
50
56
  .panneau-displays-swatch {
51
57
  flex: none;
52
58
  width: 1rem;
@@ -82,6 +88,13 @@
82
88
  gap: var(--panneau-space-1);
83
89
  }
84
90
 
91
+ /* Several countries. */
92
+ .panneau-displays-countries {
93
+ display: inline-flex;
94
+ flex-wrap: wrap;
95
+ gap: var(--panneau-space-1) var(--panneau-space-3);
96
+ }
97
+
85
98
  /* A value after a flag: a country, a phone number. */
86
99
  .panneau-displays-flagged {
87
100
  display: inline-flex;
@@ -7,11 +7,13 @@ var boolean = "panneau-displays-boolean";
7
7
  var number = "panneau-displays-number";
8
8
  var link = "panneau-displays-link";
9
9
  var color = "panneau-displays-color";
10
+ var paletteColor = "panneau-displays-palette-color";
10
11
  var swatch = "panneau-displays-swatch";
11
12
  var media = "panneau-displays-media";
12
13
  var thumbnail = "panneau-displays-thumbnail";
13
14
  var code = "panneau-displays-code";
14
15
  var tags = "panneau-displays-tags";
16
+ var countries = "panneau-displays-countries";
15
17
  var flagged = "panneau-displays-flagged";
16
18
  var flag = "panneau-displays-flag";
17
19
  var Displays_module_default = {
@@ -24,15 +26,17 @@ var Displays_module_default = {
24
26
  number,
25
27
  link,
26
28
  color,
29
+ paletteColor,
27
30
  swatch,
28
31
  media,
29
32
  thumbnail,
30
33
  code,
31
34
  tags,
35
+ countries,
32
36
  flagged,
33
37
  flag
34
38
  };
35
39
  //#endregion
36
- export { badges, boolean, code, color, Displays_module_default as default, empty, flag, flagged, link, media, number, swatch, tags, text, thumbnail };
40
+ export { badges, boolean, code, color, countries, Displays_module_default as default, empty, flag, flagged, link, media, number, paletteColor, swatch, tags, text, thumbnail };
37
41
 
38
42
  //# sourceMappingURL=Displays.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Displays.module.js","names":[],"sources":["../../src/displays/Displays.module.css"],"sourcesContent":[".empty {\n color: var(--panneau-color-text-muted);\n}\n\n.text {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n}\n\n.badges {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1);\n}\n\n.boolean {\n display: inline-flex;\n align-items: center;\n}\n\n.true {\n color: var(--panneau-color-success);\n}\n\n.false {\n color: var(--panneau-color-text-muted);\n}\n\n.number {\n font-variant-numeric: var(--panneau-font-numeric);\n}\n\n.link {\n color: var(--panneau-color-link);\n overflow-wrap: anywhere;\n}\n\n.color {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n font-family: var(--panneau-font-family-mono);\n font-size: var(--panneau-font-size-sm);\n}\n\n.swatch {\n flex: none;\n width: 1rem;\n height: 1rem;\n border: var(--panneau-border-width) solid var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-sm);\n}\n\n.media {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n}\n\n.thumbnail {\n flex: none;\n width: 2.5rem;\n height: 2.5rem;\n object-fit: cover;\n background-color: var(--panneau-color-surface-sunken);\n border-radius: var(--panneau-radius-sm);\n}\n\n.code {\n font-family: var(--panneau-font-family-mono);\n font-size: var(--panneau-font-size-sm);\n white-space: nowrap;\n}\n\n.tags {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1);\n}\n\n/* A value after a flag: a country, a phone number. */\n.flagged {\n display: inline-flex;\n align-items: baseline;\n gap: var(--panneau-space-2);\n min-width: 0;\n}\n\n.flag {\n flex: 0 0 auto;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Displays.module.js","names":[],"sources":["../../src/displays/Displays.module.css"],"sourcesContent":[".empty {\n color: var(--panneau-color-text-muted);\n}\n\n.text {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n}\n\n.badges {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1);\n}\n\n.boolean {\n display: inline-flex;\n align-items: center;\n}\n\n.true {\n color: var(--panneau-color-success);\n}\n\n.false {\n color: var(--panneau-color-text-muted);\n}\n\n.number {\n font-variant-numeric: var(--panneau-font-numeric);\n}\n\n.link {\n color: var(--panneau-color-link);\n overflow-wrap: anywhere;\n}\n\n.color {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n font-family: var(--panneau-font-family-mono);\n font-size: var(--panneau-font-size-sm);\n}\n\n.paletteColor {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n}\n\n.swatch {\n flex: none;\n width: 1rem;\n height: 1rem;\n border: var(--panneau-border-width) solid var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-sm);\n}\n\n.media {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n}\n\n.thumbnail {\n flex: none;\n width: 2.5rem;\n height: 2.5rem;\n object-fit: cover;\n background-color: var(--panneau-color-surface-sunken);\n border-radius: var(--panneau-radius-sm);\n}\n\n.code {\n font-family: var(--panneau-font-family-mono);\n font-size: var(--panneau-font-size-sm);\n white-space: nowrap;\n}\n\n.tags {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1);\n}\n\n/* Several countries. */\n.countries {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1) var(--panneau-space-3);\n}\n\n/* A value after a flag: a country, a phone number. */\n.flagged {\n display: inline-flex;\n align-items: baseline;\n gap: var(--panneau-space-2);\n min-width: 0;\n}\n\n.flag {\n flex: 0 0 auto;\n}\n"],"mappings":""}
@@ -16,6 +16,14 @@ export declare function BooleanDisplay({ value }: DisplayProps): import("react")
16
16
  export declare function DateDisplay({ value }: DisplayProps): import("react").JSX.Element;
17
17
  /** A date and a time, in the format and the time zone of the user. */
18
18
  export declare function DateTimeDisplay({ value }: DisplayProps): import("react").JSX.Element;
19
+ /**
20
+ * A range of dates (decision 0053), in the format of the locale: `Nov 4 – 6, 2026`. Date-times show
21
+ * in the zone of the value or the field, with its short name when it isn't the user's. A range open
22
+ * at one end shows `From Nov 4, 2026` or `Until Dec 1, 2026`.
23
+ */
24
+ export declare function DateRangeDisplay({ value, field }: DisplayProps): import("react").JSX.Element;
25
+ /** An amount of money (decision 0053), in the currency format of the locale: `1 250,00 $`. */
26
+ export declare function MoneyDisplay({ value }: DisplayProps): import("react").JSX.Element;
19
27
  /** A time of day (`14:30`), in the format of the locale. */
20
28
  export declare function TimeDisplay({ value }: DisplayProps): import("react").JSX.Element;
21
29
  /** The labels of the selected options, as badges. */
@@ -28,17 +36,21 @@ export declare function UrlDisplay({ value }: DisplayProps): import("react").JSX
28
36
  export declare function EmailDisplay({ value }: DisplayProps): import("react").JSX.Element;
29
37
  /**
30
38
  * A link that calls the phone number: the flag of its country and the number in its international
31
- * format (`+1 514 555 0199`). A value that isn't E.164 shows as it is.
39
+ * format (`+1 514 555 0199`), with its extension (`, ext. 123`) when its field allows one
40
+ * (`settings.extension`) or the column has no field. A value that isn't E.164 shows as it is.
32
41
  */
33
- export declare function TelDisplay({ value }: DisplayProps): import("react").JSX.Element;
34
- /** A country: its flag and its name in the user's locale. */
42
+ export declare function TelDisplay({ value, field }: DisplayProps): import("react").JSX.Element;
43
+ /** A country, or several (`multiple`): their flags and their names in the user's locale. */
35
44
  export declare function CountryDisplay({ value }: DisplayProps): import("react").JSX.Element;
36
45
  /**
37
46
  * A region: its name in the user's locale, from its country in the item (the field's `from`) or
38
47
  * the field's settings. A region that Panneau doesn't know shows as it is.
39
48
  */
40
49
  export declare function RegionDisplay({ value, field, item }: DisplayProps): import("react").JSX.Element;
41
- /** A duration in seconds, with its units: `1 h 5 min`, to the precision of its field. */
50
+ /**
51
+ * A duration with its units, `1 h 5 min` or `2 d 4 h`: in the unit of its field (seconds by
52
+ * default), from its largest unit to its precision.
53
+ */
42
54
  export declare function DurationDisplay({ value, field }: DisplayProps): import("react").JSX.Element;
43
55
  /** JSON on one line, shortened. */
44
56
  export declare function JsonDisplay({ value }: DisplayProps): import("react").JSX.Element;
@@ -48,8 +60,18 @@ export declare function TagsDisplay({ value, field }: DisplayProps): import("rea
48
60
  export declare function EmbedDisplay({ value }: DisplayProps): import("react").JSX.Element;
49
61
  /** A place: its address, or its coordinates. */
50
62
  export declare function LocationDisplay({ value }: DisplayProps): import("react").JSX.Element;
51
- /** A swatch, with the color's code. */
52
- export declare function ColorDisplay({ value }: DisplayProps): import("react").JSX.Element;
63
+ /** An address on one line, in the order of its country, after the flag of its country. */
64
+ export declare function AddressDisplay({ value }: DisplayProps): import("react").JSX.Element;
65
+ /**
66
+ * A link: the icon of its type, and its label in the user's locale, or its page or its URL. It
67
+ * opens its URL when it has one, in a new tab when the link does.
68
+ */
69
+ export declare function LinkDisplay({ value }: DisplayProps): import("react").JSX.Element;
70
+ /**
71
+ * A swatch, with the color's code. A color of the field's palette (`settings.palette`) shows its
72
+ * swatch and its label.
73
+ */
74
+ export declare function ColorDisplay({ value, field }: DisplayProps): import("react").JSX.Element;
53
75
  /** A thumbnail and the name of a media item (or of the first one). */
54
76
  export declare function MediaDisplay({ value }: DisplayProps): import("react").JSX.Element;
55
77
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../src/displays/displays.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI3D,kGAAkG;AAClG,wBAAgB,UAAU,gCAMzB;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAczD;AAED,0BAA0B;AAC1B,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAStD;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAQpD;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAcrD;AAkBD,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAOlD;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAWtD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAQlD;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAkB3D;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUtD;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASjD;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASnD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAsBjD;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAgBrD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,YAAY,+BASjE;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAM7D;AAED,mCAAmC;AACnC,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUlD;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAezD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAuBnD;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAkBtD;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUnD;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAenD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAyBlE,CAAC"}
1
+ {"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../src/displays/displays.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI3D,kGAAkG;AAClG,wBAAgB,UAAU,gCAMzB;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAczD;AAED,0BAA0B;AAC1B,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAStD;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAQpD;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAcrD;AAkBD,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAOlD;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAWtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAiB9D;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAOnD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAQlD;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAkB3D;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUtD;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASjD;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAmCxD;AAkBD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAiBrD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,YAAY,+BASjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAa7D;AAED,mCAAmC;AACnC,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUlD;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAezD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAuBnD;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAkBtD;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAsBrD;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BA+BlD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAwB1D;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAenD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CA6BlE,CAAC"}