@panneau/lists 5.0.0-alpha.7 → 5.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ItemDetails.d.ts +1 -1
- package/dist/List.d.ts +2 -2
- package/dist/ListSkeleton.d.ts +1 -1
- package/dist/ListView.d.ts +13 -4
- package/dist/ListView.d.ts.map +1 -1
- package/dist/ListView.js +48 -36
- package/dist/ListView.js.map +1 -1
- package/dist/actions/ActionButton.d.ts +1 -1
- package/dist/actions/ConfirmDialog.d.ts +1 -1
- package/dist/actions/RowActions.d.ts +2 -2
- package/dist/actions/actions.d.ts +1 -1
- package/dist/displays/displays.d.ts +6 -3
- package/dist/displays/displays.d.ts.map +1 -1
- package/dist/displays/displays.js +46 -10
- package/dist/displays/displays.js.map +1 -1
- package/dist/filters/Filters.d.ts +1 -1
- package/dist/filters/controls.d.ts +1 -1
- package/dist/filters/format.d.ts +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/layouts/CardsLayout.d.ts +1 -1
- package/dist/layouts/TableLayout.d.ts +1 -1
- package/dist/layouts/builtIn.d.ts +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/query.d.ts +1 -1
- package/dist/selection.d.ts +1 -1
- package/dist/toolbar/Pagination.d.ts +33 -0
- package/dist/toolbar/Pagination.d.ts.map +1 -1
- package/dist/toolbar/Pagination.js +130 -1
- package/dist/toolbar/Pagination.js.map +1 -1
- package/dist/toolbar/SortSelect.d.ts +1 -1
- package/dist/useRenderValue.d.ts +1 -1
- package/dist/values.d.ts +3 -1
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +6 -2
- package/dist/values.js.map +1 -1
- package/package.json +9 -9
package/dist/ItemDetails.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DisplayEntry, ListColumn, ListItem } from './types';
|
|
1
|
+
import type { DisplayEntry, ListColumn, ListItem } from './types.js';
|
|
2
2
|
export interface ItemDetailsProps {
|
|
3
3
|
/** The item. `undefined` while it loads: the labels, with a skeleton of each value. */
|
|
4
4
|
item: ListItem | undefined;
|
package/dist/List.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ListOptions } from '@panneau/core';
|
|
2
|
-
import { type ListViewProps } from './ListView';
|
|
3
|
-
import type { ListItem } from './types';
|
|
2
|
+
import { type ListViewProps } from './ListView.js';
|
|
3
|
+
import type { ListItem } from './types.js';
|
|
4
4
|
export interface ListProps extends Omit<ListViewProps, 'list' | 'total' | 'items'> {
|
|
5
5
|
/** Every item: the list searches, filters, sorts and paginates them in memory. */
|
|
6
6
|
items: readonly ListItem[] | undefined;
|
package/dist/ListSkeleton.d.ts
CHANGED
package/dist/ListView.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import type { List } from '@panneau/core';
|
|
3
3
|
import type { Field, Filter } from '@panneau/protocol';
|
|
4
|
-
import { type ListActions } from './actions/actions';
|
|
5
|
-
import type { ActionIcons } from './actions/icons';
|
|
6
|
-
import type { DisplayEntry, FilterEntry, ListActionHandler, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry } from './types';
|
|
4
|
+
import { type ListActions } from './actions/actions.js';
|
|
5
|
+
import type { ActionIcons } from './actions/icons.js';
|
|
6
|
+
import type { DisplayEntry, FilterEntry, ListActionHandler, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry } from './types.js';
|
|
7
7
|
export interface ListViewProps {
|
|
8
8
|
/** The list state of `@panneau/core` (`useList()`): query and selection. */
|
|
9
9
|
list: List;
|
|
@@ -18,6 +18,15 @@ export interface ListViewProps {
|
|
|
18
18
|
* pagination and offers to select every matching item. Without it, `items` is the whole list.
|
|
19
19
|
*/
|
|
20
20
|
total?: number | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* The cursors of the page, for a list paged with cursors (`nextCursor` and `previousCursor`
|
|
23
|
+
* of its `meta`): the list then has buttons to the previous and next pages, without page
|
|
24
|
+
* numbers or a total, and doesn't offer to select every matching item.
|
|
25
|
+
*/
|
|
26
|
+
cursors?: {
|
|
27
|
+
next: string | null;
|
|
28
|
+
previous?: string | null | undefined;
|
|
29
|
+
} | undefined;
|
|
21
30
|
/** Shows that items are loading. Items already shown stay, dimmed. */
|
|
22
31
|
isLoading?: boolean;
|
|
23
32
|
/** An error while loading: an alert with a retry replaces the items. */
|
|
@@ -86,5 +95,5 @@ export interface ListViewProps {
|
|
|
86
95
|
* cards), with sorting, search, filters and their chips, pagination, selection and actions. It
|
|
87
96
|
* fetches nothing: the caller gives the items of the list's query and their total.
|
|
88
97
|
*/
|
|
89
|
-
export declare function ListView({ list, items, columns, total, isLoading, error, onRetry, filters, fields, search, layouts: layoutsProp, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId, displays, layoutComponents, filterControls, toolbar, emptyMessage, 'aria-label': ariaLabel, className, }: ListViewProps): import("react").JSX.Element;
|
|
98
|
+
export declare function ListView({ list, items, columns, total, cursors, isLoading, error, onRetry, filters, fields, search, layouts: layoutsProp, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId, displays, layoutComponents, filterControls, toolbar, emptyMessage, 'aria-label': ariaLabel, className, }: ListViewProps): import("react").JSX.Element;
|
|
90
99
|
//# sourceMappingURL=ListView.d.ts.map
|
package/dist/ListView.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"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"}
|
package/dist/ListView.js
CHANGED
|
@@ -12,7 +12,7 @@ import { RowActions } from "./actions/RowActions.js";
|
|
|
12
12
|
import { FilterChips, FilterControls, useFilterLabels } from "./filters/Filters.js";
|
|
13
13
|
import { countSelected, getPageSelection, isItemSelected } from "./selection.js";
|
|
14
14
|
import { LayoutSwitch } from "./toolbar/LayoutSwitch.js";
|
|
15
|
-
import { Pagination } from "./toolbar/Pagination.js";
|
|
15
|
+
import { CursorPagination, Pagination } from "./toolbar/Pagination.js";
|
|
16
16
|
import { SearchField } from "./toolbar/SearchField.js";
|
|
17
17
|
import { SortSelect } from "./toolbar/SortSelect.js";
|
|
18
18
|
import { useListState } from "./useListState.js";
|
|
@@ -31,8 +31,8 @@ function keyOf(action, item) {
|
|
|
31
31
|
* fetches nothing: the caller gives the items of the list's query and their total.
|
|
32
32
|
*/
|
|
33
33
|
function ListView(t0) {
|
|
34
|
-
const $ = c(
|
|
35
|
-
const { list, items, columns, total, isLoading: t1, error: t2, onRetry, filters: t3, fields: t4, search: t5, layouts: t6, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId: t7, displays, layoutComponents, filterControls, toolbar, emptyMessage, "aria-label": ariaLabel, className } = t0;
|
|
34
|
+
const $ = c(120);
|
|
35
|
+
const { list, items, columns, total, cursors, isLoading: t1, error: t2, onRetry, filters: t3, fields: t4, search: t5, layouts: t6, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId: t7, displays, layoutComponents, filterControls, toolbar, emptyMessage, "aria-label": ariaLabel, className } = t0;
|
|
36
36
|
const isLoading = t1 === void 0 ? false : t1;
|
|
37
37
|
const error = t2 === void 0 ? null : t2;
|
|
38
38
|
let t8;
|
|
@@ -565,46 +565,58 @@ function ListView(t0) {
|
|
|
565
565
|
$[94] = t32;
|
|
566
566
|
} else t32 = $[94];
|
|
567
567
|
let t33;
|
|
568
|
-
if ($[95] !==
|
|
569
|
-
t33 =
|
|
568
|
+
if ($[95] !== cursors || $[96] !== error || $[97] !== list || $[98] !== pageItems || $[99] !== perPageOptions || $[100] !== query.cursor || $[101] !== query.page || $[102] !== query.perPage || $[103] !== total) {
|
|
569
|
+
t33 = cursors !== void 0 && error === null ? /* @__PURE__ */ jsx(CursorPagination, {
|
|
570
|
+
perPage: query.perPage ?? pageItems.length,
|
|
571
|
+
hasPrevious: query.cursor !== void 0,
|
|
572
|
+
hasNext: cursors.next !== null,
|
|
573
|
+
onPrevious: () => list.previousPage(cursors.previous),
|
|
574
|
+
onNext: () => {
|
|
575
|
+
if (cursors.next !== null) list.nextPage(cursors.next);
|
|
576
|
+
},
|
|
577
|
+
perPageOptions,
|
|
578
|
+
onPerPageChange: (perPage) => list.setPerPage(perPage)
|
|
579
|
+
}) : total !== void 0 && error === null && total > 0 ? /* @__PURE__ */ jsx(Pagination, {
|
|
570
580
|
page: query.page ?? 1,
|
|
571
581
|
perPage: query.perPage ?? pageItems.length,
|
|
572
582
|
total,
|
|
573
583
|
onPageChange: (page) => list.setPage(page),
|
|
574
584
|
perPageOptions,
|
|
575
|
-
onPerPageChange: (
|
|
585
|
+
onPerPageChange: (perPage_0) => list.setPerPage(perPage_0)
|
|
576
586
|
}) : null;
|
|
577
|
-
$[95] =
|
|
578
|
-
$[96] =
|
|
579
|
-
$[97] =
|
|
580
|
-
$[98] =
|
|
581
|
-
$[99] =
|
|
582
|
-
$[100] = query.
|
|
583
|
-
$[101] =
|
|
584
|
-
$[102] =
|
|
585
|
-
|
|
587
|
+
$[95] = cursors;
|
|
588
|
+
$[96] = error;
|
|
589
|
+
$[97] = list;
|
|
590
|
+
$[98] = pageItems;
|
|
591
|
+
$[99] = perPageOptions;
|
|
592
|
+
$[100] = query.cursor;
|
|
593
|
+
$[101] = query.page;
|
|
594
|
+
$[102] = query.perPage;
|
|
595
|
+
$[103] = total;
|
|
596
|
+
$[104] = t33;
|
|
597
|
+
} else t33 = $[104];
|
|
586
598
|
let t34;
|
|
587
|
-
if ($[
|
|
599
|
+
if ($[105] !== execute) {
|
|
588
600
|
t34 = (event_1) => void execute(event_1);
|
|
589
|
-
$[
|
|
590
|
-
$[
|
|
591
|
-
} else t34 = $[
|
|
601
|
+
$[105] = execute;
|
|
602
|
+
$[106] = t34;
|
|
603
|
+
} else t34 = $[106];
|
|
592
604
|
let t35;
|
|
593
|
-
if ($[
|
|
605
|
+
if ($[107] !== closeConfirmation || $[108] !== confirming || $[109] !== preview || $[110] !== t34) {
|
|
594
606
|
t35 = /* @__PURE__ */ jsx(ConfirmDialog, {
|
|
595
607
|
event: confirming,
|
|
596
608
|
preview,
|
|
597
609
|
onConfirm: t34,
|
|
598
610
|
onCancel: closeConfirmation
|
|
599
611
|
});
|
|
600
|
-
$[
|
|
601
|
-
$[
|
|
602
|
-
$[
|
|
603
|
-
$[
|
|
604
|
-
$[
|
|
605
|
-
} else t35 = $[
|
|
612
|
+
$[107] = closeConfirmation;
|
|
613
|
+
$[108] = confirming;
|
|
614
|
+
$[109] = preview;
|
|
615
|
+
$[110] = t34;
|
|
616
|
+
$[111] = t35;
|
|
617
|
+
} else t35 = $[111];
|
|
606
618
|
let t36;
|
|
607
|
-
if ($[
|
|
619
|
+
if ($[112] !== t25 || $[113] !== t26 || $[114] !== t29 || $[115] !== t30 || $[116] !== t32 || $[117] !== t33 || $[118] !== t35) {
|
|
608
620
|
t36 = /* @__PURE__ */ jsxs("div", {
|
|
609
621
|
className: t25,
|
|
610
622
|
children: [
|
|
@@ -616,15 +628,15 @@ function ListView(t0) {
|
|
|
616
628
|
t35
|
|
617
629
|
]
|
|
618
630
|
});
|
|
619
|
-
$[
|
|
620
|
-
$[
|
|
621
|
-
$[
|
|
622
|
-
$[
|
|
623
|
-
$[
|
|
624
|
-
$[
|
|
625
|
-
$[
|
|
626
|
-
$[
|
|
627
|
-
} else t36 = $[
|
|
631
|
+
$[112] = t25;
|
|
632
|
+
$[113] = t26;
|
|
633
|
+
$[114] = t29;
|
|
634
|
+
$[115] = t30;
|
|
635
|
+
$[116] = t32;
|
|
636
|
+
$[117] = t33;
|
|
637
|
+
$[118] = t35;
|
|
638
|
+
$[119] = t36;
|
|
639
|
+
} else t36 = $[119];
|
|
628
640
|
return t36;
|
|
629
641
|
}
|
|
630
642
|
function _temp7(column_0) {
|
package/dist/ListView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","names":["ReactNode","useRef","useState","List","usePlugins","Action","Field","Filter","Alert","Button","Checkbox","usePanneauIntl","useToast","ListSkeleton","styles","ActionButton","ConfirmDialog","ConfirmPreview","needsConfirmation","RowActions","ListActions","getActionHref","groupListActions","hasScope","isAllowedOn","ActionIcons","cx","FilterChips","FilterControls","useFilterLabels","builtInLayouts","messages","countSelected","getPageSelection","isItemSelected","LayoutSwitch","Pagination","SearchField","SortSelect","DisplayEntry","FilterEntry","ListActionEvent","ListActionHandler","ListActionPreviewer","ListColumn","ListItem","ListLayoutEntry","useListState","useRenderValue","getColumnValue","toText","ListViewProps","list","items","columns","total","isLoading","error","Error","onRetry","filters","fields","search","layouts","layout","onLayoutChange","perPageOptions","selectable","actions","onAction","previewAction","actionIcons","itemTitle","getItemLabel","item","getItemHref","currentItemId","displays","Readonly","Record","layoutComponents","filterControls","toolbar","emptyMessage","className","keyOf","action","undefined","id","ListView","t0","$","_c","t1","t2","t3","t4","t5","t6","controlledLayout","selectableProp","actionsProp","getItemLabelProp","t7","ariaLabel","t8","t9","t10","layoutsProp","intl","toasts","plugins","query","selection","filterLabels","uncontrolledLayout","setLayout","confirming","setConfirming","preview","setPreview","confirmation","pending","setPending","t11","formatMessage","label","pageItems","count","length","t12","sort","t13","filter","filterValues","t14","q","Object","keys","hasQuery","t15","listLayouts","fromEntries","t16","t17","allLayouts","t18","t19","available","Layout","table","grouped","rowActions","row","_temp","rowMenu","menu","_temp2","toolbarActions","_temp3","selectionActions","_temp4","resourceActions","_temp5","selectedCount","t20","selectedItems","pageSelection","t21","locale","item_0","titleColumn","find","column","title","renderValue","closeConfirmation","current","execute","event","Promise","resolve","then","outcome","scope","clearSelection","catch","caught","show","actionFailed","message","description","tone","run","event_0","action_4","selection_0","dryRun","asks","confirm","status","result","skipped","runOnItem","action_5","item_1","runOnSelection","action_6","selected","getSelection","item_2","runOnResource","action_7","renderActions","item_3","allowed","action_8","action_9","running","endsWith","split","action_10","t22","selectPage","pageCheckbox","ids","map","_temp6","deselect","select","sortable","some","_temp7","showToolbar","t23","clearFilters","forEach","id_0","setFilter","setSearch","t24","bb0","t25","loadFailed","t26","retry","t27","perPage","noResults","empty","t28","state","item_5","item_6","item_7","toggle","column_1","toggleSort","body","toolbarStart","id_1","value","remember","labels","toolbarEnd","tableSort","next","setSort","next_0","action_11","action_12","id_2","t29","t30","selectionCount","mode","allMatchingSelected","selectAllMatching","action_13","skipped_0","item_8","t31","t32","t33","page","setPage","setPerPage","t34","event_1","t35","t36","column_0","item_4","action_3","action_2","action_1","index","all","findIndex","candidate","action_0","_c","styles"],"sources":["../src/ListView.tsx"],"sourcesContent":["import { type ReactNode, useRef, useState } from 'react';\n\nimport type { List } from '@panneau/core';\nimport { usePlugins } from '@panneau/core';\nimport type { Action, Field, Filter } 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 { cx } from './cx';\nimport { FilterChips, FilterControls, useFilterLabels } from './filters/Filters';\nimport { builtInLayouts } from './layouts/builtIn';\nimport { messages } from './messages';\nimport { countSelected, getPageSelection, isItemSelected } from './selection';\nimport { LayoutSwitch } from './toolbar/LayoutSwitch';\nimport { 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 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 columns: readonly ListColumn[];\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 /** 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. */\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 /** 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 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 /** 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,\n total,\n isLoading = false,\n error = null,\n onRetry,\n filters = [],\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 getItemLabel: getItemLabelProp,\n getItemHref,\n currentItemId = null,\n displays,\n layoutComponents,\n filterControls,\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, selection } = useListState(list);\n const filterLabels = useFilterLabels();\n const [uncontrolledLayout, setLayout] = useState<string | null>(null);\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 const label = ariaLabel ?? intl.formatMessage(messages.list);\n const pageItems = items ?? [];\n const count = total ?? pageItems.length;\n const sort = query.sort ?? [];\n const filterValues = query.filter ?? {};\n const hasQuery = Object.keys(filterValues).length > 0 || (query.q ?? '') !== '';\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.\n const available = layoutsProp.filter((id) => allLayouts[id] !== undefined);\n const layouts = available.length > 0 ? available : ['table'];\n const layout = controlledLayout ?? uncontrolledLayout ?? layouts[0] ?? 'table';\n const Layout = allLayouts[layout] ?? builtInLayouts.table;\n\n const grouped = groupListActions(actionsProp);\n const rowActions = grouped.row.filter((action) => hasScope(action, 'item'));\n const rowMenu = grouped.menu.filter((action) => hasScope(action, 'item'));\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 columns.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 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: event.action.label,\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 const renderActions = (item: ListItem): ReactNode => {\n const allowed = rowActions.filter((action) => isAllowedOn(action, item));\n const menu = rowMenu.filter((action) => isAllowedOn(action, item));\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 item={item}\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 = columns.some((column) => column.sortable === true);\n const showToolbar =\n search ||\n filters.length > 0 ||\n sortable ||\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 if (pageItems.length === 0) {\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 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 />\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={columns}\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={columns}\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 setLayout(next);\n onLayoutChange?.(next);\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={columns}\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 {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":";;;;;;;;;;;;;;;;;;;;;;;;AAyHA,SAASqF,MAAMC,QAAgBZ,MAAyB;CACpD,OAAOA,SAASa,KAAAA,IAAY,GAAGD,OAAOE,GAAE,QAASd,KAAKc,OAAOF,OAAOE;AACxE;;;;;;AAOA,SAAOC,SAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAkB,MAAA,EAAAxC,MAAAC,OAAAC,SAAAC,OAAAC,WAAAqC,IAAApC,OAAAqC,IAAAnC,SAAAC,SAAAmC,IAAAlC,QAAAmC,IAAAlC,QAAAmC,IAAAlC,SAAAmC,IAAAlC,QAAAmC,kBAAAlC,gBAAAC,gBAAAC,YAAAiC,gBAAAhC,SAAAiC,aAAAhC,UAAAC,eAAAC,aAAAC,WAAAC,cAAA6B,kBAAA3B,aAAAC,eAAA2B,IAAA1B,UAAAG,kBAAAC,gBAAAC,SAAAC,cAAA,cAAAqB,WAAApB,cAAAM;CAKrB,MAAAlC,YAAAqC,OAAAN,KAAAA,IAAA,QAAAM;CACA,MAAApC,QAAAqC,OAAAP,KAAAA,IAAA,OAAAO;CAAY,IAAAW;CAAA,IAAAd,EAAA,OAAAI,IAAA;EAEZU,KAAAV,OAAAR,KAAAA,IAAA,CAAA,IAAAQ;EAAYJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAZ,MAAA/B,UAAA6C;CAAY,IAAAC;CAAA,IAAAf,EAAA,OAAAK,IAAA;EACZU,KAAAV,OAAAT,KAAAA,IAAA,CAAA,IAAAS;EAAWL,EAAA,KAAAK;EAAAL,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAAX,MAAA9B,SAAA6C;CACA,MAAA5C,SAAAmC,OAAAV,KAAAA,IAAA,QAAAU;CAAc,IAAAU;CAAA,IAAAhB,EAAA,OAAAO,IAAA;EACLS,MAAAT,OAAAX,KAAAA,IAAA,CAAe,OAAO,IAAtBW;EAAuBP,EAAA,KAAAO;EAAAP,EAAA,KAAAgB;CAAA,OAAAA,MAAAhB,EAAA;CAAvB,MAAAiB,cAAAD;CAYT,MAAA/B,gBAAA2B,OAAAhB,KAAAA,IAAA,OAAAgB;CASA,MAAAM,OAAalG,eAAe;CAC5B,MAAAmG,SAAelG,SAAS;CACxB,MAAAmG,UAAgB3G,WAAW;CAC3B,MAAA,EAAA4G,OAAAC,cAA6BlE,aAAaK,IAAI;CAC9C,MAAA8D,eAAqBrF,gBAAgB;CACrC,MAAA,CAAAsF,oBAAAC,aAAwClH,SAAwB,IAAI;CACpE,MAAA,CAAAmH,YAAAC,iBAAoCpH,SAAiC,IAAI;CACzE,MAAA,CAAAqH,SAAAC,cAA8BtH,SAAgC,IAAI;CAElE,MAAAuH,eAAqBxH,OAAO,CAAC;CAC7B,MAAA,CAAAyH,SAAAC,cAA8BzH,SAAwB,IAAI;CAAE,IAAA0H;CAAA,IAAAjC,EAAA,OAAAa,aAAAb,EAAA,OAAAkB,MAAA;EAE9Ce,MAAApB,aAAaK,KAAIgB,cAAe9F,SAAQqB,IAAK;EAACuC,EAAA,KAAAa;EAAAb,EAAA,KAAAkB;EAAAlB,EAAA,KAAAiC;CAAA,OAAAA,MAAAjC,EAAA;CAA5D,MAAAmC,QAAcF;CACd,MAAAG,YAAkB1E,SAAA,CAAA;CAClB,MAAA2E,QAAczE,SAASwE,UAASE;CAAQ,IAAAC;CAAA,IAAAvC,EAAA,OAAAqB,MAAAmB,MAAA;EAC3BD,MAAAlB,MAAKmB,QAAL,CAAA;EAAgBxC,EAAA,KAAAqB,MAAAmB;EAAAxC,EAAA,MAAAuC;CAAA,OAAAA,MAAAvC,EAAA;CAA7B,MAAAwC,OAAaD;CAAiB,IAAAE;CAAA,IAAAzC,EAAA,QAAAqB,MAAAqB,QAAA;EACTD,MAAApB,MAAKqB,UAAL,CAAiB;EAAC1C,EAAA,MAAAqB,MAAAqB;EAAA1C,EAAA,MAAAyC;CAAA,OAAAA,MAAAzC,EAAA;CAAvC,MAAA2C,eAAqBF;CAAmB,IAAAG;CAAA,IAAA5C,EAAA,QAAA2C,gBAAA3C,EAAA,QAAAqB,MAAAwB,GAAA;EACvBD,MAAAE,OAAMC,KAAMJ,YAAY,CAAC,CAAAL,SAAU,MAAMjB,MAAKwB,KAAL,QAAmB;EAAE7C,EAAA,MAAA2C;EAAA3C,EAAA,MAAAqB,MAAAwB;EAAA7C,EAAA,MAAA4C;CAAA,OAAAA,MAAA5C,EAAA;CAA/E,MAAAgD,WAAiBJ;CAA+D,IAAAK;CAAA,IAAAjD,EAAA,QAAAoB,QAAA8B,aAAA;EAIxED,MAAAH,OAAMK,YAAa/B,QAAO8B,WAAY;EAAClD,EAAA,MAAAoB,QAAA8B;EAAAlD,EAAA,MAAAiD;CAAA,OAAAA,MAAAjD,EAAA;CAAvC,MAAAoD,MAAAH;CAA0E,IAAAI;CAAA,IAAArD,EAAA,QAAAX,oBAAAW,EAAA,QAAAoD,KAAA;EAF9BC,MAAA;GAAA,GAC7ClH;GAAc,GACbiH;GAA0E,GAC3E/D;EACP;EAACW,EAAA,MAAAX;EAAAW,EAAA,MAAAoD;EAAApD,EAAA,MAAAqD;CAAA,OAAAA,MAAArD,EAAA;CAJD,MAAAsD,aAAoDD;CAIlD,IAAAE;CAAA,IAAAvD,EAAA,QAAAsD,cAAAtD,EAAA,QAAAiB,aAAA;EAAA,IAAAuC;EAAA,IAAAxD,EAAA,QAAAsD,YAAA;GAEmCE,OAAA3D,OAAQyD,WAAWzD,QAAQD,KAAAA;GAASI,EAAA,MAAAsD;GAAAtD,EAAA,MAAAwD;EAAA,OAAAA,MAAAxD,EAAA;EAAvDuD,MAAAtC,YAAWyB,OAAQc,GAAoC;EAACxD,EAAA,MAAAsD;EAAAtD,EAAA,MAAAiB;EAAAjB,EAAA,MAAAuD;CAAA,OAAAA,MAAAvD,EAAA;CAA1E,MAAAyD,YAAkBF;CAAyD,IAAAC;CAAA,IAAAxD,EAAA,QAAAyD,WAAA;EAC3DD,MAAAC,UAASnB,SAAU,IAAnBmB,YAAA,CAAoC,OAAO;EAACzD,EAAA,MAAAyD;EAAAzD,EAAA,MAAAwD;CAAA,OAAAA,MAAAxD,EAAA;CAA5D,MAAA5B,UAAgBoF;CAChB,MAAAnF,SAAemC,oBAAAgB,sBAA0CpD,QAAO,MAAjD;CACf,MAAAsF,SAAeJ,WAAWjF,WAAWlC,eAAcwH;CAEnD,MAAAC,UAAgBjI,iBAAiB+E,WAAW;CAC5C,MAAAmD,aAAmBD,QAAOE,IAAIpB,OAAQqB,KAAoC;CAC1E,MAAAC,UAAgBJ,QAAOK,KAAKvB,OAAQwB,MAAoC;CAExE,MAAAC,iBAAuB,CAAA,GAAIP,QAAOrE,SAAQ,GAAKqE,QAAOK,IAAK,CAAC,CAAAvB,OACxD0B,MAGJ;CACA,MAAAC,mBAAyBF,eAAczB,OAAQ4B,MAAyC;CACxF,MAAAC,kBAAwBJ,eAAczB,OAAQ8B,MAAwC;CACtF,MAAAhG,aAAmBiC,kBAAkB4D,iBAAgB/B,SAAU;CAE/D,MAAAmC,gBAAsBjG,aAAanC,cAAciF,WAAWe,KAAS,IAA/C;CAAiD,IAAAqC;CAAA,IAAA1E,EAAA,QAAAsB,WAAA;EAChCoD,OAAA3F,SAAUxC,eAAe+E,WAAWvC,KAAIc,EAAG;EAACG,EAAA,MAAAsB;EAAAtB,EAAA,MAAA0E;CAAA,OAAAA,MAAA1E,EAAA;CAAnF,MAAA2E,gBAAsBvC,UAASM,OAAQgC,GAA4C;CACnF,MAAAE,gBAAsBtI,iBAAiBgF,WAAWc,SAAS;CAAE,IAAAyC;CAAA,IAAA7E,EAAA,QAAArC,WAAAqC,EAAA,QAAAW,oBAAAX,EAAA,QAAAkB,KAAA4D,UAAA9E,EAAA,QAAAnB,WAAA;EAExCgG,OAAAE,WAAA;GACjB,IAAIpE,qBAAqBf,KAAAA,GAAS,OACvBe,iBAAiB5B,MAAI;GAEhC,MAAAiG,cACIrH,QAAOsH,MAAMC,WAAYA,OAAMrF,OAAQhB,SACU,MAAhDA,cAAce,KAAAA,IAAYjC,QAAO,KAAjCiC,KAAAA;GACL,MAAAuF,QACIH,gBAAgBpF,KAAAA,IACVrC,OAAOD,eAAeyB,QAAMiG,aAAa9D,KAAI4D,MAAO,GAAG5D,KAAI4D,MAGxD,IAFHjG,cAAce,KAAAA,IACZrC,OAAOwB,OAAKF,YAAYqC,KAAI4D,MAC3B,IAFH;GAEK,OACRK,UAAU,KAAVA,QAAuBpG,OAAIc;EAAG;EACxCG,EAAA,MAAArC;EAAAqC,EAAA,MAAAW;EAAAX,EAAA,MAAAkB,KAAA4D;EAAA9E,EAAA,MAAAnB;EAAAmB,EAAA,MAAA6E;CAAA,OAAAA,MAAA7E,EAAA;CAdD,MAAAlB,eAAqB+F;CAgBrB,MAAAO,cAAoB/H,eAAe6B,QAAQ;CAE3C,MAAAmG,0BAA0B;EACtBvD,aAAYwD,UAAZxD,aAAYwD,UAAY;EACxB3D,cAAc,IAAI;EAClBE,WAAW,IAAI;CAAC;CAGpB,MAAA0D,UAAgB,OAAAC,UAAA;EACZH,kBAAkB;EAClBrD,WAAWtC,MAAM8F,MAAK7F,QAAS6F,MAAKzG,IAAK,CAAC;EAE1C,MAAM0G,QAAOC,QAAS,CAAC,CAAAC,WACPjH,WAAW8G,KAAK,CAAC,CAAC,CAAAG,MACxBC,YAAA;GAEF,IAAIJ,MAAKK,UAAW,eAAeD,YAAY,OAC3CnI,KAAIqI,eAAgB;EACvB,CACJ,CAAC,CAAAC,OACKC,WAAA;GACH7E,OAAM8E,KAAM;IAAAd,OACDjE,KAAIgB,cAAe9F,SAAQ8J,cAAe,EAAAvG,QACrC6F,MAAK7F,OAAOwC,MACxB,CAAC;IAAC,GACE6D,kBAAkBjI,SAASiI,OAAMG,YAAa,KAA9C,EAAAC,aACiBJ,OAAMG,QACpB,IAFH,CAEG;IAACE,MACF;GACV,CAAC;EAAC,CACL;EACLrE,WAAW,IAAI;CAAC;CAGpB,MAAAsE,OAAYC,YAAA;EACR,MAAA,EAAA5G,QAAA6G,UAAAlF,WAAAmF,gBAA8BjB;EAC9B,IACI7G,kBAAkBiB,KAAAA,KAClBD,SAAM+G,WAAY,QAClBpF,gBAAc1B,KAAAA,KACd,WAAW0B,aAAS;GAGpB,MAAAgE,UAAkBxD,aAAYwD,UAAZxD,aAAYwD,UAAQ;GACtC,MAAAqB,OAAahH,SAAMiH,YAAahH,KAAAA,KAAaD,SAAMiH,YAAa;GAChEjF,cAAc6D,OAAK;GACnB3D,WAAW,EAAAgF,QAAU,UAAU,CAAC;GAChClI,cAAc6G,OAAK,CAAC,CAAAG,MAChBmB,WAAA;IACI,IAAIhF,aAAYwD,YAAaA,SAAO;IAIpC,KADgBwB,QAAMC,WAAavB,QAAKuB,QAAQzE,YAChC,KAAZ,CAAkBqE,MACbpB,QAAQC,OAAK;SAElB3D,WAAWiF,WAAW,OAAX;KAAAD,QAA4B;KAAM,GAAKC;IAAc,IAArD,IAAsD;GACpE,SAEL;IAEI,IAAIhF,aAAYwD,YAAaA,SAAO;IAGpC,IAAI/J,kBAAkBiK,OAAK,GACvB3D,WAAW,IAAI;SAEV0D,QAAQC,OAAK;GACrB,CAET;GAAC;EAAA;EAGL,IAAIjK,kBAAkBiK,OAAK,GACvB7D,cAAc6D,OAAK;OAEdD,QAAQC,OAAK;CACrB;CAGL,MAAAwB,aAAkBC,UAAAC,WACdZ,IAAI;EAAA3G,QAAEA;EAAMkG,OAAS;EAAM9G,MAAEA;EAAIsD,OAAS;EAAC0E,SAAW,CAAA;CAAG,CAAC;CAE9D,MAAAI,kBAAuBC,aAAA;EACnB,MAAAC,WAAiB5J,KAAI6J,aAAc;EACnC,IAAID,aAAa,MAAI;EAGrBf,IAAI;GAAA3G,QACAA;GAAMkG,OACC;GAAWvE,WACP+F;GAAQhF,OACZoC;GAAasC,SACXpC,cAAajC,QAAQ6E,WAAU,CAAC1L,YAAY8D,UAAQZ,MAAI,CAAC;EACtE,CAAC;CAAC;CAGN,MAAAyI,iBAAsBC,aAClBnB,IAAI;EAAA3G,QAAEA;EAAMkG,OAAS;EAAUxD;EAAA0E,SAAyB,CAAA;CAAG,CAAC;CAEhE,MAAAW,iBAAsBC,WAAA;EAClB,MAAAC,UAAgB/D,WAAUnB,QAAQmF,aAAYhM,YAAY8D,UAAQZ,MAAI,CAAC;EACvE,MAAAkF,OAAaD,QAAOtB,QAAQoF,aAAYjM,YAAY8D,UAAQZ,MAAI,CAAC;EACjE,IAAI6I,QAAOtF,WAAY,KAAK2B,KAAI3B,WAAY,GAAC,OAClC;EAEX,MAAAyF,UACIhG,SAAOiG,SAAW,SAASjJ,OAAIc,IAAK,MAAM,OAAOkC,QAAOkG,MAAO,IAAQ,CAAC,CAAA,KAAxE;EAAmF,OAEnF,oBAAC,YAAD;GACUlJ,MAAAA;GACK,WAAAD,aAAaC,MAAI;GACnB6I,SAAAA;GACH3D;GACG,SAAA8D,WAAA;GACF,QAAAG,cAAYlB,UAAUrH,WAAQZ,MAAI;GAClCH,OAAAA;EAAW,CAAA;CACpB;CAER,IAAAuJ;CAAA,IAAAnI,EAAA,QAAAkB,MAAA;EAIkBiH,MAAAjH,KAAIgB,cAAe9F,SAAQgM,UAAW;EAACpI,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmI;CAAA,OAAAA,MAAAnI,EAAA;CAF3D,MAAAqI,eACI,oBAAC,UAAD;EACgB,cAAAF;EACA,YAAAvD,kBAAkB;EACb,iBAAAA,kBAAkB;EACvB,YAAAxC,UAASE,WAAY;EACvB,gBAAA;GACN,MAAAgG,MAAYlG,UAASmG,IAAKC,MAAiB;GAC3C,IAAI5D,kBAAkB,OAClBnH,KAAIgL,SAAUH,GAAG;QAEjB7K,KAAIiL,OAAQJ,GAAG;EAClB;CACJ,CAAA;CAIT,MAAAK,WAAiBhL,QAAOiL,KAAMC,MAAoC;CAClE,MAAAC,cACI3K,UACAF,QAAOqE,SAAU,KADjBqG,YAGAvK,QAAOkE,SAAU,KACjBiC,gBAAejC,SAAU,KACzB/C,YAAYK,KAAAA;CAAU,IAAAmJ;CAAA,IAAA/I,EAAA,QAAA2C,gBAAA3C,EAAA,QAAAvC,QAAAuC,EAAA,QAAAqB,MAAAwB,GAAA;EAE1BkG,MAAA,SAAAC,eAAA;GACIlG,OAAMC,KAAMJ,YAAY,CAAC,CAAAsG,SAASC,SAAQzL,KAAI0L,UAAWtJ,MAAID,KAAAA,CAAS,CAAC;GACvE,KAAKyB,MAAKwB,KAAL,QAAmB,IACpBpF,KAAI2L,UAAW,EAAE;EACpB;EACJpJ,EAAA,MAAA2C;EAAA3C,EAAA,MAAAvC;EAAAuC,EAAA,MAAAqB,MAAAwB;EAAA7C,EAAA,MAAA+I;CAAA,OAAAA,MAAA/I,EAAA;CALD,MAAAgJ,eAAAD;CAKC,IAAAM;CAAAC,KAAA;EAGG,IAAIxL,UAAU,MAAI;GAAA,IAAAyL;GAAA,IAAAvJ,EAAA,QAAAkB,MAAA;IAICqI,MAAArI,KAAIgB,cAAe9F,SAAQoN,UAAW;IAACxJ,EAAA,MAAAkB;IAAAlB,EAAA,MAAAuJ;GAAA,OAAAA,MAAAvJ,EAAA;GAAA,IAAAyJ;GAAA,IAAAzJ,EAAA,QAAAkB,QAAAlB,EAAA,QAAAhC,SAAA;IAE1CyL,MAAAzL,YAAY4B,KAAAA,IACR,oBAAC,QAAD;KAAa,MAAA;KAAc5B,SAAAA;KACtBkD,UAAAA,KAAIgB,cAAe9F,SAAQsN,KAAM;IAD/B,CAAA,IADX9J,KAAAA;IAIaI,EAAA,MAAAkB;IAAAlB,EAAA,MAAAhC;IAAAgC,EAAA,MAAAyJ;GAAA,OAAAA,MAAAzJ,EAAA;GAAA,IAAA2J;GAAA,IAAA3J,EAAA,QAAAlC,MAAAqI,WAAAnG,EAAA,QAAAuJ,OAAAvJ,EAAA,QAAAyJ,KAAA;IARrBE,MAAA,oBAAC,OAAD;KACS,MAAA;KACE,OAAAJ;KAEH,SAAAE;KAOH3L,UAAAA,MAAKqI;IAXJ,CAAA;IAYEnG,EAAA,MAAAlC,MAAAqI;IAAAnG,EAAA,MAAAuJ;IAAAvJ,EAAA,MAAAyJ;IAAAzJ,EAAA,MAAA2J;GAAA,OAAAA,MAAA3J,EAAA;GAbZqJ,MACIM;GADJ,MAAAL;EAcE;EAEN,IAAI5L,UAAUkC,KAAAA,GAAS;GAAA,IAAA2J;GAAA,IAAAvJ,EAAA,QAAA0D,UAAA1D,EAAA,QAAArC,WAAAqC,EAAA,QAAAmC,SAAAnC,EAAA,QAAAqB,MAAAuI,WAAA5J,EAAA,QAAAwC,MAAA;IAEf+G,MAAA,oBAAC,cAAD;KACY7F;KACC/F;KACA,SAAA0D,MAAKuI;KACRpH;KACCL;IAAK,CAAA;IACdnC,EAAA,MAAA0D;IAAA1D,EAAA,MAAArC;IAAAqC,EAAA,MAAAmC;IAAAnC,EAAA,MAAAqB,MAAAuI;IAAA5J,EAAA,MAAAwC;IAAAxC,EAAA,MAAAuJ;GAAA,OAAAA,MAAAvJ,EAAA;GAPNqJ,MACIE;GADJ,MAAAD;EAQE;EAEN,IAAIlH,UAASE,WAAY,GAAC;GAAA,IAAAiH;GAAA,IAAAvJ,EAAA,QAAAR,gBAAAQ,EAAA,QAAAgD,YAAAhD,EAAA,QAAAkB,MAAA;IAITqI,MAAAvG,WACK9B,KAAIgB,cAAe9F,SAAQyN,SACwB,IAAlDrK,gBAAgB0B,KAAIgB,cAAe9F,SAAQ0N,KAAM;IAAE9J,EAAA,MAAAR;IAAAQ,EAAA,MAAAgD;IAAAhD,EAAA,MAAAkB;IAAAlB,EAAA,MAAAuJ;GAAA,OAAAA,MAAAvJ,EAAA;GAAA,IAAAyJ;GAAA,IAAAzJ,EAAA,QAAAuJ,KAAA;IAH9DE,MAAA,oBAAA,KAAA,EAAA,UACKF,IAGD,CAAA;IAAAvJ,EAAA,MAAAuJ;IAAAvJ,EAAA,MAAAyJ;GAAA,OAAAA,MAAAzJ,EAAA;GAAA,IAAA2J;GAAA,IAAA3J,EAAA,QAAAgJ,gBAAAhJ,EAAA,QAAAgD,YAAAhD,EAAA,QAAAkB,MAAA;IACHyI,MAAA3G,WACG,oBAAC,QAAD;KAAa,MAAA;KAAc,eAAMgG,aAAa;KACzC9H,UAAAA,KAAIgB,cAAe9F,SAAQ4M,YAAa;IADtC,CAAA,IADV;IAIOhJ,EAAA,MAAAgJ;IAAAhJ,EAAA,MAAAgD;IAAAhD,EAAA,MAAAkB;IAAAlB,EAAA,MAAA2J;GAAA,OAAAA,MAAA3J,EAAA;GAAA,IAAA+J;GAAA,IAAA/J,EAAA,QAAAyJ,OAAAzJ,EAAA,QAAA2J,KAAA;IAVZI,MAAA,qBAAA,OAAA;KAAgB,WAAA5O,wBAAM6O;KAAtB,UAAA,CACIP,KAKCE,GAKC;;IAAA3J,EAAA,MAAAyJ;IAAAzJ,EAAA,MAAA2J;IAAA3J,EAAA,MAAA+J;GAAA,OAAAA,MAAA/J,EAAA;GAZVqJ,MACIU;GADJ,MAAAT;EAaE;EACL,IAAAC;EAAA,IAAAvJ,EAAA,QAAAf,eAAA;GAQkBsK,OAAAU,WAAUlL,OAAIc,OAAQZ;GAAae,EAAA,MAAAf;GAAAe,EAAA,MAAAuJ;EAAA,OAAAA,MAAAvJ,EAAA;EAAA,IAAAyJ;EAAA,IAAAzJ,EAAA,QAAAsB,WAAA;GAElCmI,OAAAS,WAAU3N,eAAe+E,WAAWvC,OAAIc,EAAG;GAACG,EAAA,MAAAsB;GAAAtB,EAAA,MAAAyJ;EAAA,OAAAA,MAAAzJ,EAAA;EAAA,IAAA2J;EAAA,IAAA3J,EAAA,QAAAvC,MAAA;GAC9CkM,OAAAQ,WAAU1M,KAAI2M,OAAQrL,OAAIc,EAAG;GAACG,EAAA,MAAAvC;GAAAuC,EAAA,MAAA2J;EAAA,OAAAA,MAAA3J,EAAA;EAAA,IAAA+J;EAAA,IAAA/J,EAAA,QAAAvC,MAAA;GAGhCsM,OAAAM,aAAY5M,KAAI6M,WAAYpF,SAAMrF,EAAG;GAACG,EAAA,MAAAvC;GAAAuC,EAAA,MAAA+J;EAAA,OAAAA,MAAA/J,EAAA;EAbtDqJ,MACI,oBAAC,QAAD;GACWjH,OAAAA;GACEzE;GACIyH;GACCtG;GACDE;GACF,WAAAuK;GACC/K;GACA,YAAAiL;GACF,UAAAE;GACKjC;GACTlF;GACE,QAAAuH;GACD5H;GACQkG,eAAAA;EAAY,CAAA;CAEjC;CA9DN,MAAAkC,OAAalB;CA+DR,IAAAE;CAAA,IAAAvJ,EAAA,QAAAP,WAAA;EAGe8J,MAAAxN,GAAGZ,wBAAMsC,MAAOgC,SAAS;EAACO,EAAA,MAAAP;EAAAO,EAAA,MAAAuJ;CAAA,OAAAA,MAAAvJ,EAAA;CACrC,MAAAyJ,MAAAX,cACG,qBAAA,OAAA;EAAgB,WAAA3N,wBAAMoE;EAAtB,UAAA,CACI,qBAAA,OAAA;GAAgB,WAAApE,wBAAMqP;GAAtB,UAAA,CACKrM,SACG,oBAAC,aAAD;IACW,OAAAkD,MAAKwB,KAAL;IACG,WAAAA,MAAOpF,KAAI2L,UAAWvG,CAAC;GAAC,CAAA,IAHzC,MAMA5E,QAAOqE,SAAU,IACd,oBAAC,gBAAD;IACarE;IACD0E,QAAAA;IACE,WAAA8H,MAAAC,UAAejN,KAAI0L,UAAWtJ,MAAI6K,KAAK;IACxC,SAAAnJ,aAAYoJ;IACXrL,UAAAA;IACD3B;IACDO;IACA,QAAAqD,aAAYqJ;GAAO,CAAA,IATlC,IAYC;EACN,CAAA,GAAA,qBAAA,OAAA;GAAgB,WAAAzP,wBAAM0P;GAAtB,UAAA;IACKlC,WACG,oBAAA,OAAA;KAAgB,WAAAtK,WAAW,UAAUlD,wBAAM2P,YAA3BlL,KAAAA;KACZ,UAAA,oBAAC,YAAD;MACajC;MACH6E;MACI,WAAAuI,SAAUtN,KAAIuN,QAASD,IAAI;KAAC,CAAA;IAExC,CAAA,IAPT;IASA3M,QAAOkE,SAAU,IACd,oBAAC,cAAD;KACalE;KACFC,OAAAA;KACG,WAAA4M,WAAA;MACNxJ,UAAUsJ,MAAI;MACdzM,iBAAiByM,MAAI;KAAC;IACzB,CAAA,IAPR;IAUAxG,gBAAe7B,QAERwI,cAAYzG,kBAAkB,KAAlB,CAAwB7I,SAAS+D,WAAQ,WAAW,CACpE,CAAC,CAAA4I,KACI4C,cACD,oBAAC,cAAD;KAEYxL,QAAAA;KACDf,OAAAA;KACF,MAAA;KACC,MAAAlD,cAAciE,SAAM;KACf,WAAAoC,YAAYrC,MAAMC,SAAM;KAC1B,eAAM6H,cAAc7H,SAAM;IAAC,GAN/BA,UAAME,EAMyB,CAE3C;IACJN;GACC;EACJ,CAAA,CAAA;CA3DT,CAAA,IAAA;CA4DO,IAAAoK;CAAA,IAAAI;CAAA,IAAA/J,EAAA,QAAAvC,MAAA;EAKMkM,OAAAyB,SAAQ3N,KAAI0L,UAAWtJ,MAAID,KAAAA,CAAS;EAC/BmK,YAAMtM,KAAI2L,UAAW,EAAE;EAACpJ,EAAA,MAAAvC;EAAAuC,EAAA,MAAA2J;EAAA3J,EAAA,MAAA+J;CAAA,OAAA;EAAAJ,MAAA3J,EAAA;EAAA+J,MAAA/J,EAAA;CAAA;CAAA,IAAAqL;CAAA,IAAArL,EAAA,QAAAgJ,gBAAAhJ,EAAA,QAAArC,WAAAqC,EAAA,QAAA9B,UAAA8B,EAAA,QAAAuB,aAAAqJ,UAAA5K,EAAA,QAAA2C,gBAAA3C,EAAA,QAAA/B,WAAA+B,EAAA,QAAAqB,MAAAwB,KAAA7C,EAAA,QAAA2J,OAAA3J,EAAA,QAAA+J,KAAA;EAL3CsB,MAAA,oBAAC,aAAD;GACapN;GACD0E,QAAAA;GACL,GAAAtB,MAAKwB;GACE,UAAA8G;GACK,eAAAI;GACNf,SAAAA;GACArL;GACDO;GACA,QAAAqD,aAAYqJ;EAAO,CAAA;EAC7B5K,EAAA,MAAAgJ;EAAAhJ,EAAA,MAAArC;EAAAqC,EAAA,MAAA9B;EAAA8B,EAAA,MAAAuB,aAAAqJ;EAAA5K,EAAA,MAAA2C;EAAA3C,EAAA,MAAA/B;EAAA+B,EAAA,MAAAqB,MAAAwB;EAAA7C,EAAA,MAAA2J;EAAA3J,EAAA,MAAA+J;EAAA/J,EAAA,MAAAqL;CAAA,OAAAA,MAAArL,EAAA;CACD,MAAAsL,MAAA7G,gBAAgB,IACb,qBAAA,OAAA;EAAgB,WAAAtJ,wBAAMmG;EAAtB,UAAA;GACI,oBAAA,QAAA;IAAiB,WAAAnG,wBAAMoQ;IAAsB,MAAA;IACxCjK,UAAAA,UAASkK,SAAU,QACdtK,KAAIgB,cAAe9F,SAAQqP,qBAAsB,EAAA7N,OACtC6G,cACX,CACmE,IAAnEvD,KAAIgB,cAAe9F,SAAQqI,eAAgB,EAAApC,OAASoC,cAAc,CAAC;GACtE,CAAA;GACNnD,UAASkK,SAAU,SACpB5G,kBAAkB,SAClBvC,QAAQD,UAASE,SACb,oBAAC,QAAD;IAAa,MAAA;IAAa,SAAA;IAAiB,eAAM7E,KAAIiO,kBAAmB;IACnExK,UAAAA,KAAIgB,cAAe9F,SAAQsP,mBAAoB,EAAA9N,OAASyE,MAAM,CAAC;GAD7D,CAAA,IAHV;GAOD,oBAAC,QAAD;IAAa,MAAA;IAAa,SAAA;IAAiB,eAAM5E,KAAIqI,eAAgB;IAChE5E,UAAAA,KAAIgB,cAAe9F,SAAQ0J,cAAe;GADxC,CAAA;GAGNzB,iBAAgB/B,SAAU,IACvB,oBAAA,OAAA;IAAgB,WAAAnH,wBAAMkJ;IACjBA,UAAAA,iBAAgBkE,KAAKoD,cAAA;KAClB,MAAAC,YAAgBjH,cAAajC,QACzBmJ,WAAU,CAAChQ,YAAY8D,WAAQZ,MAAI,CACvC,CAAC,CAAAuD;KAAQ,OAEL,oBAAC,cAAD;MAEY3C,QAAAA;MACDf,OAAAA;MACF,MAAA;MACC,MAAA;MACK,WAAAmD,YAAYrC,MAAMC,SAAM;MAE/B,YAACoC,YAAY,QAAQA,YAAYrC,MAAMC,SAAM,KAC7CoH,aAAWtC;MAEN,eAAM0C,eAAexH,SAAM;KAAC,GAVhCA,UAAME,EAU0B;IACvC,CAET;GACC,CAAA,IAtBT;EAwBC;CA3CT,CAAA,IAAA;CA6CuC,MAAAiM,MAAAjO,aAAaH,UAAUkC,KAAAA;CAAS,IAAAmM;CAAA,IAAA/L,EAAA,QAAAuK,QAAAvK,EAAA,QAAA8L,KAAA;EAAxEC,MAAA,oBAAA,OAAA;GAAgB,WAAA5Q,wBAAMoP;GAAkB,aAAAuB;GACnCvB,UAAAA;EACC,CAAA;EAAAvK,EAAA,MAAAuK;EAAAvK,EAAA,MAAA8L;EAAA9L,EAAA,MAAA+L;CAAA,OAAAA,MAAA/L,EAAA;CAAA,IAAAgM;CAAA,IAAAhM,EAAA,QAAAlC,SAAAkC,EAAA,QAAAvC,QAAAuC,EAAA,QAAAoC,aAAApC,EAAA,QAAAzB,kBAAAyB,EAAA,QAAAqB,MAAA4K,QAAAjM,EAAA,SAAAqB,MAAAuI,WAAA5J,EAAA,SAAApC,OAAA;EACLoO,MAAApO,UAAUgC,KAAAA,KAAa9B,UAAU,QAAQF,QAAQ,IAC9C,oBAAC,YAAD;GACU,MAAAyD,MAAK4K,QAAL;GACG,SAAA5K,MAAKuI,WAAYxH,UAASE;GAC5B1E;GACO,eAAAqO,SAAUxO,KAAIyO,QAASD,IAAI;GACzB1N;GACC,kBAAAqL,YAAanM,KAAI0O,WAAYvC,OAAO;EAAC,CAAA,IAP7D;EASO5J,EAAA,MAAAlC;EAAAkC,EAAA,MAAAvC;EAAAuC,EAAA,MAAAoC;EAAApC,EAAA,MAAAzB;EAAAyB,EAAA,MAAAqB,MAAA4K;EAAAjM,EAAA,OAAAqB,MAAAuI;EAAA5J,EAAA,OAAApC;EAAAoC,EAAA,OAAAgM;CAAA,OAAAA,MAAAhM,EAAA;CAAA,IAAAoM;CAAA,IAAApM,EAAA,SAAAuF,SAAA;EAIO6G,OAAAC,YAAW,KAAK9G,QAAQC,OAAK;EAACxF,EAAA,OAAAuF;EAAAvF,EAAA,OAAAoM;CAAA,OAAAA,MAAApM,EAAA;CAAA,IAAAsM;CAAA,IAAAtM,EAAA,SAAAqF,qBAAArF,EAAA,SAAA0B,cAAA1B,EAAA,SAAA4B,WAAA5B,EAAA,SAAAoM,KAAA;EAH7CE,MAAA,oBAAC,eAAD;GACW5K,OAAAA;GACEE;GACE,WAAAwK;GACD/G,UAAAA;EAAiB,CAAA;EAC7BrF,EAAA,OAAAqF;EAAArF,EAAA,OAAA0B;EAAA1B,EAAA,OAAA4B;EAAA5B,EAAA,OAAAoM;EAAApM,EAAA,OAAAsM;CAAA,OAAAA,MAAAtM,EAAA;CAAA,IAAAuM;CAAA,IAAAvM,EAAA,SAAAuJ,OAAAvJ,EAAA,SAAAyJ,OAAAzJ,EAAA,SAAAqL,OAAArL,EAAA,SAAAsL,OAAAtL,EAAA,SAAA+L,OAAA/L,EAAA,SAAAgM,OAAAhM,EAAA,SAAAsM,KAAA;EAxINC,MAAA,qBAAA,OAAA;GAAgB,WAAAhD;GAAhB,UAAA;IACKE;IA6DD4B;IAWCC;IA6CDS;IAGCC;IAUDM;GAME;;EAAAtM,EAAA,OAAAuJ;EAAAvJ,EAAA,OAAAyJ;EAAAzJ,EAAA,OAAAqL;EAAArL,EAAA,OAAAsL;EAAAtL,EAAA,OAAA+L;EAAA/L,EAAA,OAAAgM;EAAAhM,EAAA,OAAAsM;EAAAtM,EAAA,OAAAuM;CAAA,OAAAA,MAAAvM,EAAA;CAAA,OAzINuM;AAyIM;AApcP,SAAA1D,OAAA2D,UAAA;CAAA,OAyOuCtH,SAAMyD,aAAc;AAAI;AAzO/D,SAAAH,OAAAiE,QAAA;CAAA,OA+N6C1N,OAAIc;AAAG;AA/NpD,SAAA2E,OAAAkI,UAAA;CAAA,OAwEuD9Q,SAAS+D,UAAQ,UAAU;AAAC;AAxEnF,SAAA2E,OAAAqI,UAAA;CAAA,OAuEwD/Q,SAAS+D,UAAQ,WAAW;AAAC;AAvErF,SAAAyE,OAAAwI,UAAAC,OAAAC,KAAA;CAAA,QAoEMlR,SAAS+D,UAAQ,WAA2C,KAA3B/D,SAAS+D,UAAQ,UAAU,MAC7DmN,IAAGC,WAAWC,cAAeA,UAASnN,OAAQF,SAAME,EAAG,MAAMgN;AAAK;AArEvE,SAAA3I,OAAA+I,UAAA;CAAA,OAgE6CrR,SAAS+D,UAAQ,MAAM;AAAC;AAhErE,SAAAoE,MAAApE,QAAA;CAAA,OA+D+C/D,SAAS+D,QAAQ,MAAM;AAAC"}
|
|
1
|
+
{"version":3,"file":"ListView.js","names":["ReactNode","useRef","useState","List","usePlugins","Action","Field","Filter","Alert","Button","Checkbox","usePanneauIntl","useToast","ListSkeleton","styles","ActionButton","ConfirmDialog","ConfirmPreview","needsConfirmation","RowActions","ListActions","getActionHref","groupListActions","hasScope","isAllowedOn","ActionIcons","cx","FilterChips","FilterControls","useFilterLabels","builtInLayouts","messages","countSelected","getPageSelection","isItemSelected","LayoutSwitch","CursorPagination","Pagination","SearchField","SortSelect","DisplayEntry","FilterEntry","ListActionEvent","ListActionHandler","ListActionPreviewer","ListColumn","ListItem","ListLayoutEntry","useListState","useRenderValue","getColumnValue","toText","ListViewProps","list","items","columns","total","cursors","next","previous","isLoading","error","Error","onRetry","filters","fields","search","layouts","layout","onLayoutChange","perPageOptions","selectable","actions","onAction","previewAction","actionIcons","itemTitle","getItemLabel","item","getItemHref","currentItemId","displays","Readonly","Record","layoutComponents","filterControls","toolbar","emptyMessage","className","keyOf","action","undefined","id","ListView","t0","$","_c","t1","t2","t3","t4","t5","t6","controlledLayout","selectableProp","actionsProp","getItemLabelProp","t7","ariaLabel","t8","t9","t10","layoutsProp","intl","toasts","plugins","query","selection","filterLabels","uncontrolledLayout","setLayout","confirming","setConfirming","preview","setPreview","confirmation","pending","setPending","t11","formatMessage","label","pageItems","count","length","t12","sort","t13","filter","filterValues","t14","q","Object","keys","hasQuery","t15","listLayouts","fromEntries","t16","t17","allLayouts","t18","t19","available","Layout","table","grouped","rowActions","row","_temp","rowMenu","menu","_temp2","toolbarActions","_temp3","selectionActions","_temp4","resourceActions","_temp5","selectedCount","t20","selectedItems","pageSelection","t21","locale","item_0","titleColumn","find","column","title","renderValue","closeConfirmation","current","execute","event","Promise","resolve","then","outcome","scope","clearSelection","catch","caught","show","actionFailed","message","description","tone","run","event_0","action_4","selection_0","dryRun","asks","confirm","status","result","skipped","runOnItem","action_5","item_1","runOnSelection","action_6","selected","getSelection","item_2","runOnResource","action_7","renderActions","item_3","allowed","action_8","action_9","running","endsWith","split","action_10","t22","selectPage","pageCheckbox","ids","map","_temp6","deselect","select","sortable","some","_temp7","showToolbar","t23","clearFilters","forEach","id_0","setFilter","setSearch","t24","bb0","t25","loadFailed","t26","retry","t27","perPage","noResults","empty","t28","state","item_5","item_6","item_7","toggle","column_1","toggleSort","body","toolbarStart","id_1","value","remember","labels","toolbarEnd","tableSort","setSort","next_0","action_11","action_12","id_2","t29","t30","selectionCount","mode","allMatchingSelected","selectAllMatching","action_13","skipped_0","item_8","t31","t32","t33","cursor","page","previousPage","nextPage","setPerPage","setPage","perPage_0","t34","event_1","t35","t36","column_0","item_4","action_3","action_2","action_1","index","all","findIndex","candidate","action_0","_c","styles"],"sources":["../src/ListView.tsx"],"sourcesContent":["import { type ReactNode, useRef, useState } from 'react';\n\nimport type { List } from '@panneau/core';\nimport { usePlugins } from '@panneau/core';\nimport type { Action, Field, Filter } 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 { cx } from './cx';\nimport { FilterChips, FilterControls, useFilterLabels } from './filters/Filters';\nimport { builtInLayouts } from './layouts/builtIn';\nimport { messages } from './messages';\nimport { countSelected, getPageSelection, isItemSelected } from './selection';\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 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 columns: readonly ListColumn[];\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. */\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 /** 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 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 /** 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,\n total,\n cursors,\n isLoading = false,\n error = null,\n onRetry,\n filters = [],\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 getItemLabel: getItemLabelProp,\n getItemHref,\n currentItemId = null,\n displays,\n layoutComponents,\n filterControls,\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, selection } = useListState(list);\n const filterLabels = useFilterLabels();\n const [uncontrolledLayout, setLayout] = useState<string | null>(null);\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 const label = ariaLabel ?? intl.formatMessage(messages.list);\n const pageItems = items ?? [];\n const count = total ?? pageItems.length;\n const sort = query.sort ?? [];\n const filterValues = query.filter ?? {};\n const hasQuery = Object.keys(filterValues).length > 0 || (query.q ?? '') !== '';\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.\n const available = layoutsProp.filter((id) => allLayouts[id] !== undefined);\n const layouts = available.length > 0 ? available : ['table'];\n const layout = controlledLayout ?? uncontrolledLayout ?? layouts[0] ?? 'table';\n const Layout = allLayouts[layout] ?? builtInLayouts.table;\n\n const grouped = groupListActions(actionsProp);\n const rowActions = grouped.row.filter((action) => hasScope(action, 'item'));\n const rowMenu = grouped.menu.filter((action) => hasScope(action, 'item'));\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 columns.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 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: event.action.label,\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 const renderActions = (item: ListItem): ReactNode => {\n const allowed = rowActions.filter((action) => isAllowedOn(action, item));\n const menu = rowMenu.filter((action) => isAllowedOn(action, item));\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 item={item}\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 = columns.some((column) => column.sortable === true);\n const showToolbar =\n search ||\n filters.length > 0 ||\n sortable ||\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 if (pageItems.length === 0) {\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 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 />\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={columns}\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={columns}\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 setLayout(next);\n onLayoutChange?.(next);\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={columns}\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 {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,4 +1,4 @@
|
|
|
1
|
-
import type { ListActionEvent, ListActionPreview } from '../types';
|
|
1
|
+
import type { ListActionEvent, ListActionPreview } from '../types.js';
|
|
2
2
|
/** Whether an action needs a confirmation: it asks for one, or some selected items are skipped. */
|
|
3
3
|
export declare function needsConfirmation(event: ListActionEvent): boolean;
|
|
4
4
|
/** The dry run of a query selection: in progress, or done with the backend's count. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Action } from '@panneau/protocol';
|
|
2
|
-
import type { ListItem } from '../types';
|
|
3
|
-
import { type ActionIcons } from './icons';
|
|
2
|
+
import type { ListItem } from '../types.js';
|
|
3
|
+
import { type ActionIcons } from './icons.js';
|
|
4
4
|
export interface RowActionsProps {
|
|
5
5
|
item: ListItem;
|
|
6
6
|
/** The label of the item, for the accessible names of its actions. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Action, ActionPlacement } from '@panneau/protocol';
|
|
2
|
-
import type { ListItem } from '../types';
|
|
2
|
+
import type { ListItem } from '../types.js';
|
|
3
3
|
/** Actions of a list: a list (grouped by their placements), or already grouped by placement. */
|
|
4
4
|
export type ListActions = readonly Action[] | Partial<Record<ActionPlacement, readonly Action[]>>;
|
|
5
5
|
/**
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import type { DisplayEntry, DisplayProps } from '../types';
|
|
1
|
+
import type { DisplayEntry, DisplayProps } from '../types.js';
|
|
2
2
|
/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */
|
|
3
3
|
export declare function EmptyValue(): import("react").JSX.Element;
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Text, on two lines at most. The default display. The value of a `secret` text field
|
|
6
|
+
* (`settings.secret`) shows as dots, never in clear.
|
|
7
|
+
*/
|
|
8
|
+
export declare function TextDisplay({ value, field }: DisplayProps): import("react").JSX.Element;
|
|
6
9
|
/** HTML as plain text. */
|
|
7
10
|
export declare function RichTextDisplay({ value }: DisplayProps): import("react").JSX.Element;
|
|
8
11
|
/** A number, in the format of the locale. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../src/displays/displays.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI3D,kGAAkG;AAClG,wBAAgB,UAAU,gCAMzB;AAWD
|
|
1
|
+
{"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../src/displays/displays.tsx"],"names":[],"mappings":"AAOA,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,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASjD;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,CAuBlE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
|
-
import {
|
|
2
|
+
import { findOption, getFieldOptions, toText } from "../values.js";
|
|
3
3
|
import Displays_module_default from "./Displays.module.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
5
5
|
import { Badge, Icon, usePanneauIntl } from "@panneau/ui";
|
|
@@ -25,10 +25,13 @@ function EmptyValue() {
|
|
|
25
25
|
function isEmpty(value) {
|
|
26
26
|
return value === null || value === void 0 || value === "" || Array.isArray(value) && value.length === 0;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Text, on two lines at most. The default display. The value of a `secret` text field
|
|
30
|
+
* (`settings.secret`) shows as dots, never in clear.
|
|
31
|
+
*/
|
|
29
32
|
function TextDisplay(t0) {
|
|
30
|
-
const $ = c(
|
|
31
|
-
const { value } = t0;
|
|
33
|
+
const $ = c(10);
|
|
34
|
+
const { value, field } = t0;
|
|
32
35
|
const intl = usePanneauIntl();
|
|
33
36
|
let t1;
|
|
34
37
|
if ($[0] !== intl.locale || $[1] !== value) {
|
|
@@ -38,15 +41,42 @@ function TextDisplay(t0) {
|
|
|
38
41
|
$[2] = t1;
|
|
39
42
|
} else t1 = $[2];
|
|
40
43
|
const text = t1;
|
|
44
|
+
if (text === "") {
|
|
45
|
+
let t2;
|
|
46
|
+
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
47
|
+
t2 = /* @__PURE__ */ jsx(EmptyValue, {});
|
|
48
|
+
$[3] = t2;
|
|
49
|
+
} else t2 = $[3];
|
|
50
|
+
return t2;
|
|
51
|
+
}
|
|
52
|
+
if (field?.settings?.secret === true) {
|
|
53
|
+
let t2;
|
|
54
|
+
if ($[4] !== intl) {
|
|
55
|
+
t2 = intl.formatMessage(messages.secretValue);
|
|
56
|
+
$[4] = intl;
|
|
57
|
+
$[5] = t2;
|
|
58
|
+
} else t2 = $[5];
|
|
59
|
+
let t3;
|
|
60
|
+
if ($[6] !== t2) {
|
|
61
|
+
t3 = /* @__PURE__ */ jsx("span", {
|
|
62
|
+
role: "img",
|
|
63
|
+
"aria-label": t2,
|
|
64
|
+
children: "••••••••"
|
|
65
|
+
});
|
|
66
|
+
$[6] = t2;
|
|
67
|
+
$[7] = t3;
|
|
68
|
+
} else t3 = $[7];
|
|
69
|
+
return t3;
|
|
70
|
+
}
|
|
41
71
|
let t2;
|
|
42
|
-
if ($[
|
|
43
|
-
t2 =
|
|
72
|
+
if ($[8] !== text) {
|
|
73
|
+
t2 = /* @__PURE__ */ jsx("span", {
|
|
44
74
|
className: Displays_module_default.text,
|
|
45
75
|
children: text
|
|
46
76
|
});
|
|
47
|
-
$[
|
|
48
|
-
$[
|
|
49
|
-
} else t2 = $[
|
|
77
|
+
$[8] = text;
|
|
78
|
+
$[9] = t2;
|
|
79
|
+
} else t2 = $[9];
|
|
50
80
|
return t2;
|
|
51
81
|
}
|
|
52
82
|
/** HTML as plain text. */
|
|
@@ -325,7 +355,13 @@ function SelectDisplay(t0) {
|
|
|
325
355
|
break bb0;
|
|
326
356
|
}
|
|
327
357
|
t1 = Displays_module_default.badges;
|
|
328
|
-
t2 = values.map((entry) =>
|
|
358
|
+
t2 = values.map((entry) => {
|
|
359
|
+
const option = findOption(options, entry);
|
|
360
|
+
return /* @__PURE__ */ jsx(Badge, {
|
|
361
|
+
tone: option?.tone ?? "neutral",
|
|
362
|
+
children: option?.label ?? String(entry)
|
|
363
|
+
}, String(entry));
|
|
364
|
+
});
|
|
329
365
|
}
|
|
330
366
|
$[0] = field;
|
|
331
367
|
$[1] = value;
|