@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.
@@ -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;
@@ -1,4 +1,4 @@
1
- import type { ListColumn, ListLayoutEntry } from './types';
1
+ import type { ListColumn, ListLayoutEntry } from './types.js';
2
2
  export interface ListSkeletonProps {
3
3
  Layout: ListLayoutEntry;
4
4
  columns: readonly ListColumn[];
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAU,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQ/D,OAAO,EACH,KAAK,WAAW,EAKnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUnD,OAAO,KAAK,EACR,YAAY,EACZ,WAAW,EAEX,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,eAAe,EAClB,MAAM,SAAS,CAAC;AAKjB,MAAM,WAAW,aAAa;IAC1B,4EAA4E;IAC5E,IAAI,EAAE,IAAI,CAAC;IACX;;;OAGG;IACH,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,uFAAuF;IACvF,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IAC1B,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iCAAiC;IACjC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,yEAAyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC1C,uCAAuC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAClD,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7D,8DAA8D;IAC9D,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACvD,6EAA6E;IAC7E,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mEAAmE;IACnE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EACrB,IAAI,EACJ,KAAK,EACL,OAAO,EACP,KAAK,EACL,SAAiB,EACjB,KAAY,EACZ,OAAO,EACP,OAAY,EACZ,MAAW,EACX,MAAc,EACd,OAAO,EAAE,WAAuB,EAChC,MAAM,EAAE,gBAAgB,EACxB,cAAc,EACd,cAAc,EACd,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,WAAW,EACpB,QAAQ,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EACX,aAAoB,EACpB,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EAAE,SAAS,EACvB,SAAS,GACZ,EAAE,aAAa,+BAuaf"}
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(118);
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] !== error || $[96] !== list || $[97] !== pageItems || $[98] !== perPageOptions || $[99] !== query.page || $[100] !== query.perPage || $[101] !== total) {
569
- t33 = total !== void 0 && error === null && total > 0 ? /* @__PURE__ */ jsx(Pagination, {
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: (perPage) => list.setPerPage(perPage)
585
+ onPerPageChange: (perPage_0) => list.setPerPage(perPage_0)
576
586
  }) : null;
577
- $[95] = error;
578
- $[96] = list;
579
- $[97] = pageItems;
580
- $[98] = perPageOptions;
581
- $[99] = query.page;
582
- $[100] = query.perPage;
583
- $[101] = total;
584
- $[102] = t33;
585
- } else t33 = $[102];
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 ($[103] !== execute) {
599
+ if ($[105] !== execute) {
588
600
  t34 = (event_1) => void execute(event_1);
589
- $[103] = execute;
590
- $[104] = t34;
591
- } else t34 = $[104];
601
+ $[105] = execute;
602
+ $[106] = t34;
603
+ } else t34 = $[106];
592
604
  let t35;
593
- if ($[105] !== closeConfirmation || $[106] !== confirming || $[107] !== preview || $[108] !== t34) {
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
- $[105] = closeConfirmation;
601
- $[106] = confirming;
602
- $[107] = preview;
603
- $[108] = t34;
604
- $[109] = t35;
605
- } else t35 = $[109];
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 ($[110] !== t25 || $[111] !== t26 || $[112] !== t29 || $[113] !== t30 || $[114] !== t32 || $[115] !== t33 || $[116] !== t35) {
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
- $[110] = t25;
620
- $[111] = t26;
621
- $[112] = t29;
622
- $[113] = t30;
623
- $[114] = t32;
624
- $[115] = t33;
625
- $[116] = t35;
626
- $[117] = t36;
627
- } else t36 = $[117];
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) {
@@ -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,5 +1,5 @@
1
1
  import type { Action } from '@panneau/protocol';
2
- import { type ActionIcons } from './icons';
2
+ import { type ActionIcons } from './icons.js';
3
3
  export interface ActionButtonProps {
4
4
  action: Action;
5
5
  /** Icons of actions by id, over the icon the action names. */
@@ -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
- /** Text, on two lines at most. The default display. */
5
- export declare function TextDisplay({ value }: DisplayProps): import("react").JSX.Element;
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,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAIlD;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,+BAa3D;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
+ {"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 { getFieldOptions, getOptionLabel, toText } from "../values.js";
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
- /** Text, on two lines at most. The default display. */
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(5);
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 ($[3] !== text) {
43
- t2 = text === "" ? /* @__PURE__ */ jsx(EmptyValue, {}) : /* @__PURE__ */ jsx("span", {
72
+ if ($[8] !== text) {
73
+ t2 = /* @__PURE__ */ jsx("span", {
44
74
  className: Displays_module_default.text,
45
75
  children: text
46
76
  });
47
- $[3] = text;
48
- $[4] = t2;
49
- } else t2 = $[4];
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) => /* @__PURE__ */ jsx(Badge, { children: getOptionLabel(options, entry) ?? String(entry) }, String(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;