@panneau/lists 5.0.0-alpha.12 → 5.0.0-alpha.13

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.
Files changed (78) hide show
  1. package/README.md +13 -11
  2. package/dist/List.d.ts +1 -1
  3. package/dist/List.d.ts.map +1 -1
  4. package/dist/List.js +29 -50
  5. package/dist/List.js.map +1 -1
  6. package/dist/ListView.d.ts +34 -5
  7. package/dist/ListView.d.ts.map +1 -1
  8. package/dist/ListView.js +416 -359
  9. package/dist/ListView.js.map +1 -1
  10. package/dist/columns.d.ts +10 -0
  11. package/dist/columns.d.ts.map +1 -0
  12. package/dist/columns.js +25 -0
  13. package/dist/columns.js.map +1 -0
  14. package/dist/displays/Displays.css +12 -0
  15. package/dist/displays/Displays.module.js +6 -2
  16. package/dist/displays/Displays.module.js.map +1 -1
  17. package/dist/displays/displays.d.ts +11 -1
  18. package/dist/displays/displays.d.ts.map +1 -1
  19. package/dist/displays/displays.js +185 -22
  20. package/dist/displays/displays.js.map +1 -1
  21. package/dist/images.d.ts +6 -0
  22. package/dist/images.d.ts.map +1 -0
  23. package/dist/images.js +18 -0
  24. package/dist/images.js.map +1 -0
  25. package/dist/index.d.ts +5 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +5 -2
  28. package/dist/inline/Inline.css +58 -0
  29. package/dist/inline/Inline.module.js +20 -0
  30. package/dist/inline/Inline.module.js.map +1 -0
  31. package/dist/inline/InlineCell.d.ts +27 -0
  32. package/dist/inline/InlineCell.d.ts.map +1 -0
  33. package/dist/inline/InlineCell.js +471 -0
  34. package/dist/inline/InlineCell.js.map +1 -0
  35. package/dist/inline/editable.d.ts +12 -0
  36. package/dist/inline/editable.d.ts.map +1 -0
  37. package/dist/inline/editable.js +29 -0
  38. package/dist/inline/editable.js.map +1 -0
  39. package/dist/layouts/CalendarLayout.css +153 -0
  40. package/dist/layouts/CalendarLayout.d.ts +9 -0
  41. package/dist/layouts/CalendarLayout.d.ts.map +1 -0
  42. package/dist/layouts/CalendarLayout.js +298 -0
  43. package/dist/layouts/CalendarLayout.js.map +1 -0
  44. package/dist/layouts/CalendarLayout.module.js +28 -0
  45. package/dist/layouts/CalendarLayout.module.js.map +1 -0
  46. package/dist/layouts/CardsLayout.js +1 -1
  47. package/dist/layouts/GalleryLayout.css +80 -0
  48. package/dist/layouts/GalleryLayout.d.ts +8 -0
  49. package/dist/layouts/GalleryLayout.d.ts.map +1 -0
  50. package/dist/layouts/GalleryLayout.js +129 -0
  51. package/dist/layouts/GalleryLayout.js.map +1 -0
  52. package/dist/layouts/GalleryLayout.module.js +26 -0
  53. package/dist/layouts/GalleryLayout.module.js.map +1 -0
  54. package/dist/layouts/TableLayout.d.ts +1 -1
  55. package/dist/layouts/TableLayout.d.ts.map +1 -1
  56. package/dist/layouts/TableLayout.js +44 -39
  57. package/dist/layouts/TableLayout.js.map +1 -1
  58. package/dist/layouts/builtIn.d.ts +1 -1
  59. package/dist/layouts/builtIn.d.ts.map +1 -1
  60. package/dist/layouts/builtIn.js +6 -2
  61. package/dist/layouts/builtIn.js.map +1 -1
  62. package/dist/toolbar/ColumnMenu.d.ts +17 -0
  63. package/dist/toolbar/ColumnMenu.d.ts.map +1 -0
  64. package/dist/toolbar/ColumnMenu.js +193 -0
  65. package/dist/toolbar/ColumnMenu.js.map +1 -0
  66. package/dist/toolbar/LayoutSwitch.d.ts.map +1 -1
  67. package/dist/toolbar/LayoutSwitch.js +73 -55
  68. package/dist/toolbar/LayoutSwitch.js.map +1 -1
  69. package/dist/toolbar/Toolbar.css +36 -0
  70. package/dist/toolbar/Toolbar.module.js +12 -2
  71. package/dist/toolbar/Toolbar.module.js.map +1 -1
  72. package/dist/types.d.ts +42 -0
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/values.d.ts +1 -0
  75. package/dist/values.d.ts.map +1 -1
  76. package/dist/values.js +1 -1
  77. package/dist/values.js.map +1 -1
  78. package/package.json +7 -7
@@ -0,0 +1,129 @@
1
+ import { messages } from "../messages.js";
2
+ import { ItemTitle } from "./ItemTitle.js";
3
+ import GalleryLayout_module_default from "./GalleryLayout.module.js";
4
+ import { c } from "react/compiler-runtime";
5
+ import { Checkbox, Icon, usePanneauIntl } from "@panneau/ui";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { ImageOff } from "lucide-react";
8
+ //#region src/layouts/GalleryLayout.tsx
9
+ /**
10
+ * Items as a grid of images (decision 0044): the image of each item (`itemImage` of the
11
+ * resource), its title under it, its checkbox and its actions. An item without an image shows a
12
+ * placeholder.
13
+ */
14
+ function GalleryLayout(t0) {
15
+ const $ = c(34);
16
+ const { items, columns, renderValue, getItemLabel, getItemHref, getItemImage, isCurrent, selectable, isSelected, onToggle, renderActions, label, pageSelection } = t0;
17
+ const intl = usePanneauIntl();
18
+ const [title] = columns;
19
+ let t1;
20
+ if ($[0] !== pageSelection || $[1] !== selectable) {
21
+ t1 = selectable ? /* @__PURE__ */ jsx("div", {
22
+ className: GalleryLayout_module_default.pageSelection,
23
+ children: pageSelection
24
+ }) : null;
25
+ $[0] = pageSelection;
26
+ $[1] = selectable;
27
+ $[2] = t1;
28
+ } else t1 = $[2];
29
+ let t2;
30
+ if ($[3] !== getItemHref || $[4] !== getItemImage || $[5] !== getItemLabel || $[6] !== intl || $[7] !== isCurrent || $[8] !== isSelected || $[9] !== items || $[10] !== onToggle || $[11] !== renderActions || $[12] !== renderValue || $[13] !== selectable || $[14] !== title) {
31
+ let t3;
32
+ if ($[16] !== getItemHref || $[17] !== getItemImage || $[18] !== getItemLabel || $[19] !== intl || $[20] !== isCurrent || $[21] !== isSelected || $[22] !== onToggle || $[23] !== renderActions || $[24] !== renderValue || $[25] !== selectable || $[26] !== title) {
33
+ t3 = (item) => {
34
+ const selected = selectable && isSelected(item);
35
+ const actions = renderActions(item);
36
+ const current = isCurrent?.(item) ?? false;
37
+ const image = getItemImage?.(item) ?? null;
38
+ return /* @__PURE__ */ jsxs("li", {
39
+ className: GalleryLayout_module_default.tile,
40
+ "data-selected": selected || void 0,
41
+ "data-current": current || void 0,
42
+ children: [/* @__PURE__ */ jsxs("div", {
43
+ className: GalleryLayout_module_default.media,
44
+ children: [image !== null ? /* @__PURE__ */ jsx("img", {
45
+ src: image,
46
+ alt: "",
47
+ loading: "lazy"
48
+ }) : /* @__PURE__ */ jsx("span", {
49
+ className: GalleryLayout_module_default.placeholder,
50
+ children: /* @__PURE__ */ jsx(Icon, {
51
+ icon: ImageOff,
52
+ size: "lg"
53
+ })
54
+ }), selectable ? /* @__PURE__ */ jsx("span", {
55
+ className: GalleryLayout_module_default.check,
56
+ children: /* @__PURE__ */ jsx(Checkbox, {
57
+ "aria-label": intl.formatMessage(messages.selectItem, { item: getItemLabel(item) }),
58
+ isSelected: selected,
59
+ onChange: () => onToggle(item)
60
+ })
61
+ }) : null]
62
+ }), /* @__PURE__ */ jsxs("div", {
63
+ className: GalleryLayout_module_default.caption,
64
+ children: [/* @__PURE__ */ jsx("div", {
65
+ className: GalleryLayout_module_default.title,
66
+ children: /* @__PURE__ */ jsx(ItemTitle, {
67
+ href: getItemHref?.(item) ?? null,
68
+ current,
69
+ children: title !== void 0 ? renderValue(item, title) : getItemLabel(item)
70
+ })
71
+ }), actions !== null ? /* @__PURE__ */ jsx("div", {
72
+ className: GalleryLayout_module_default.actions,
73
+ children: actions
74
+ }) : null]
75
+ })]
76
+ }, item.id);
77
+ };
78
+ $[16] = getItemHref;
79
+ $[17] = getItemImage;
80
+ $[18] = getItemLabel;
81
+ $[19] = intl;
82
+ $[20] = isCurrent;
83
+ $[21] = isSelected;
84
+ $[22] = onToggle;
85
+ $[23] = renderActions;
86
+ $[24] = renderValue;
87
+ $[25] = selectable;
88
+ $[26] = title;
89
+ $[27] = t3;
90
+ } else t3 = $[27];
91
+ t2 = items.map(t3);
92
+ $[3] = getItemHref;
93
+ $[4] = getItemImage;
94
+ $[5] = getItemLabel;
95
+ $[6] = intl;
96
+ $[7] = isCurrent;
97
+ $[8] = isSelected;
98
+ $[9] = items;
99
+ $[10] = onToggle;
100
+ $[11] = renderActions;
101
+ $[12] = renderValue;
102
+ $[13] = selectable;
103
+ $[14] = title;
104
+ $[15] = t2;
105
+ } else t2 = $[15];
106
+ let t3;
107
+ if ($[28] !== label || $[29] !== t2) {
108
+ t3 = /* @__PURE__ */ jsx("ul", {
109
+ className: GalleryLayout_module_default.gallery,
110
+ "aria-label": label,
111
+ children: t2
112
+ });
113
+ $[28] = label;
114
+ $[29] = t2;
115
+ $[30] = t3;
116
+ } else t3 = $[30];
117
+ let t4;
118
+ if ($[31] !== t1 || $[32] !== t3) {
119
+ t4 = /* @__PURE__ */ jsxs("div", { children: [t1, t3] });
120
+ $[31] = t1;
121
+ $[32] = t3;
122
+ $[33] = t4;
123
+ } else t4 = $[33];
124
+ return t4;
125
+ }
126
+ //#endregion
127
+ export { GalleryLayout };
128
+
129
+ //# sourceMappingURL=GalleryLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryLayout.js","names":["ImageOff","Checkbox","Icon","usePanneauIntl","messages","ListLayoutProps","styles","ItemTitle","GalleryLayout","t0","$","_c","items","columns","renderValue","getItemLabel","getItemHref","getItemImage","isCurrent","selectable","isSelected","onToggle","renderActions","label","pageSelection","intl","title","t1","t2","t3","item","selected","actions","current","image","id","tile","undefined","media","placeholder","check","formatMessage","selectItem","caption","map","gallery","t4","_c","styles"],"sources":["../../src/layouts/GalleryLayout.tsx"],"sourcesContent":["import { ImageOff } from 'lucide-react';\n\nimport { Checkbox, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { ListLayoutProps } from '../types';\nimport styles from './GalleryLayout.module.css';\nimport { ItemTitle } from './ItemTitle';\n\n/**\n * Items as a grid of images (decision 0044): the image of each item (`itemImage` of the\n * resource), its title under it, its checkbox and its actions. An item without an image shows a\n * placeholder.\n */\nexport function GalleryLayout({\n items,\n columns,\n renderValue,\n getItemLabel,\n getItemHref,\n getItemImage,\n isCurrent,\n selectable,\n isSelected,\n onToggle,\n renderActions,\n label,\n pageSelection,\n}: ListLayoutProps) {\n const intl = usePanneauIntl();\n const [title] = columns;\n return (\n <div>\n {selectable ? <div className={styles.pageSelection}>{pageSelection}</div> : null}\n <ul className={styles.gallery} aria-label={label}>\n {items.map((item) => {\n const selected = selectable && isSelected(item);\n const actions = renderActions(item);\n const current = isCurrent?.(item) ?? false;\n const image = getItemImage?.(item) ?? null;\n return (\n <li\n key={item.id}\n className={styles.tile}\n data-selected={selected || undefined}\n data-current={current || undefined}\n >\n <div className={styles.media}>\n {image !== null ? (\n <img src={image} alt=\"\" loading=\"lazy\" />\n ) : (\n <span className={styles.placeholder}>\n <Icon icon={ImageOff} size=\"lg\" />\n </span>\n )}\n {selectable ? (\n <span className={styles.check}>\n <Checkbox\n aria-label={intl.formatMessage(messages.selectItem, {\n item: getItemLabel(item),\n })}\n isSelected={selected}\n onChange={() => onToggle(item)}\n />\n </span>\n ) : null}\n </div>\n <div className={styles.caption}>\n <div className={styles.title}>\n <ItemTitle href={getItemHref?.(item) ?? null} current={current}>\n {title !== undefined\n ? renderValue(item, title)\n : getItemLabel(item)}\n </ItemTitle>\n </div>\n {actions !== null ? (\n <div className={styles.actions}>{actions}</div>\n ) : null}\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import "./GalleryLayout.css";
2
+ //#region src/layouts/GalleryLayout.module.css
3
+ var gallery = "panneau-gallery-layout-gallery";
4
+ var tile = "panneau-gallery-layout-tile";
5
+ var media = "panneau-gallery-layout-media";
6
+ var placeholder = "panneau-gallery-layout-placeholder";
7
+ var check = "panneau-gallery-layout-check";
8
+ var caption = "panneau-gallery-layout-caption";
9
+ var title = "panneau-gallery-layout-title";
10
+ var actions = "panneau-gallery-layout-actions";
11
+ var pageSelection = "panneau-gallery-layout-page-selection";
12
+ var GalleryLayout_module_default = {
13
+ gallery,
14
+ tile,
15
+ media,
16
+ placeholder,
17
+ check,
18
+ caption,
19
+ title,
20
+ actions,
21
+ pageSelection
22
+ };
23
+ //#endregion
24
+ export { actions, caption, check, GalleryLayout_module_default as default, gallery, media, pageSelection, placeholder, tile, title };
25
+
26
+ //# sourceMappingURL=GalleryLayout.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryLayout.module.js","names":[],"sources":["../../src/layouts/GalleryLayout.module.css"],"sourcesContent":[".gallery {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(12rem, 100%), 1fr));\n gap: var(--panneau-space-3);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.tile {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--panneau-color-surface);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-lg);\n}\n\n.tile[data-current] {\n border-color: var(--panneau-color-accent);\n box-shadow: inset 0 0 0 1px var(--panneau-color-accent);\n}\n\n.tile[data-selected] {\n background-color: var(--panneau-color-accent-subtle);\n border-color: var(--panneau-color-border-control);\n}\n\n.media {\n position: relative;\n aspect-ratio: 4 / 3;\n background-color: var(--panneau-color-surface-sunken);\n}\n\n.media img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--panneau-color-text-muted);\n}\n\n.check {\n position: absolute;\n top: var(--panneau-space-2);\n left: var(--panneau-space-2);\n padding: 2px;\n background-color: var(--panneau-color-surface);\n border-radius: var(--panneau-radius-sm);\n}\n\n.caption {\n display: flex;\n align-items: flex-start;\n gap: var(--panneau-space-2);\n padding: var(--panneau-space-2) var(--panneau-space-3);\n}\n\n.title {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.actions {\n display: flex;\n flex-shrink: 0;\n gap: var(--panneau-space-1);\n}\n\n.pageSelection {\n margin-bottom: var(--panneau-space-2);\n}\n"],"mappings":""}
@@ -5,5 +5,5 @@ export declare function getSortDirection(sort: readonly string[], column: ListCo
5
5
  * Items as a table, with sortable column headers. On narrow lists (phones), each row turns into a
6
6
  * block that shows the label of each value.
7
7
  */
8
- export declare function TableLayout({ items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, }: ListLayoutProps): import("react").JSX.Element;
8
+ export declare function TableLayout({ items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, renderCell, }: ListLayoutProps): import("react").JSX.Element;
9
9
  //# sourceMappingURL=TableLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableLayout.d.ts","sourceRoot":"","sources":["../../src/layouts/TableLayout.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5D,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,UAAU,GACnB,WAAW,GAAG,YAAY,GAAG,IAAI,CAMnC;AASD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,GAChB,EAAE,eAAe,+BAsHjB"}
1
+ {"version":3,"file":"TableLayout.d.ts","sourceRoot":"","sources":["../../src/layouts/TableLayout.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5D,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,UAAU,GACnB,WAAW,GAAG,YAAY,GAAG,IAAI,CAMnC;AASD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,EACb,UAAU,GACb,EAAE,eAAe,+BA4HjB"}
@@ -22,8 +22,8 @@ function alignClass(column) {
22
22
  * block that shows the label of each value.
23
23
  */
24
24
  function TableLayout(t0) {
25
- const $ = c(54);
26
- const { items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection } = t0;
25
+ const $ = c(56);
26
+ const { items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, renderCell } = t0;
27
27
  const intl = usePanneauIntl();
28
28
  let actions;
29
29
  let t1;
@@ -116,9 +116,9 @@ function TableLayout(t0) {
116
116
  $[22] = t5;
117
117
  } else t5 = $[22];
118
118
  let t6;
119
- if ($[23] !== actions || $[24] !== columns || $[25] !== getItemHref || $[26] !== getItemLabel || $[27] !== hasActions || $[28] !== intl || $[29] !== isCurrent || $[30] !== isSelected || $[31] !== items || $[32] !== onToggle || $[33] !== renderValue || $[34] !== selectable) {
119
+ if ($[23] !== actions || $[24] !== columns || $[25] !== getItemHref || $[26] !== getItemLabel || $[27] !== hasActions || $[28] !== intl || $[29] !== isCurrent || $[30] !== isSelected || $[31] !== items || $[32] !== onToggle || $[33] !== renderCell || $[34] !== renderValue || $[35] !== selectable) {
120
120
  let t7;
121
- if ($[36] !== actions || $[37] !== columns || $[38] !== getItemHref || $[39] !== getItemLabel || $[40] !== hasActions || $[41] !== intl || $[42] !== isCurrent || $[43] !== isSelected || $[44] !== onToggle || $[45] !== renderValue || $[46] !== selectable) {
121
+ if ($[37] !== actions || $[38] !== columns || $[39] !== getItemHref || $[40] !== getItemLabel || $[41] !== hasActions || $[42] !== intl || $[43] !== isCurrent || $[44] !== isSelected || $[45] !== onToggle || $[46] !== renderCell || $[47] !== renderValue || $[48] !== selectable) {
122
122
  t7 = (item_0, row) => {
123
123
  const selected = selectable && isSelected(item_0);
124
124
  const href = getItemHref?.(item_0) ?? null;
@@ -135,17 +135,20 @@ function TableLayout(t0) {
135
135
  onChange: () => onToggle(item_0)
136
136
  })
137
137
  }) : null,
138
- columns.map((column_0, index) => /* @__PURE__ */ jsxs("td", {
139
- className: cx(alignClass(column_0), index === 0 && TableLayout_module_default.title),
140
- children: [/* @__PURE__ */ jsx("span", {
141
- className: TableLayout_module_default.cellLabel,
142
- children: column_0.label ?? column_0.id
143
- }), /* @__PURE__ */ jsx("span", { children: index === 0 ? /* @__PURE__ */ jsx(ItemTitle, {
138
+ columns.map((column_0, index) => {
139
+ const content = index === 0 ? /* @__PURE__ */ jsx(ItemTitle, {
144
140
  href,
145
141
  current,
146
142
  children: renderValue(item_0, column_0)
147
- }) : renderValue(item_0, column_0) })]
148
- }, column_0.id)),
143
+ }) : renderValue(item_0, column_0);
144
+ return /* @__PURE__ */ jsxs("td", {
145
+ className: cx(alignClass(column_0), index === 0 && TableLayout_module_default.title),
146
+ children: [/* @__PURE__ */ jsx("span", {
147
+ className: TableLayout_module_default.cellLabel,
148
+ children: column_0.label ?? column_0.id
149
+ }), /* @__PURE__ */ jsx("span", { children: renderCell !== void 0 ? renderCell(item_0, column_0, content) : content })]
150
+ }, column_0.id);
151
+ }),
149
152
  hasActions ? /* @__PURE__ */ jsx("td", {
150
153
  className: TableLayout_module_default.actionsCell,
151
154
  children: actions[row]
@@ -153,19 +156,20 @@ function TableLayout(t0) {
153
156
  ]
154
157
  }, item_0.id);
155
158
  };
156
- $[36] = actions;
157
- $[37] = columns;
158
- $[38] = getItemHref;
159
- $[39] = getItemLabel;
160
- $[40] = hasActions;
161
- $[41] = intl;
162
- $[42] = isCurrent;
163
- $[43] = isSelected;
164
- $[44] = onToggle;
165
- $[45] = renderValue;
166
- $[46] = selectable;
167
- $[47] = t7;
168
- } else t7 = $[47];
159
+ $[37] = actions;
160
+ $[38] = columns;
161
+ $[39] = getItemHref;
162
+ $[40] = getItemLabel;
163
+ $[41] = hasActions;
164
+ $[42] = intl;
165
+ $[43] = isCurrent;
166
+ $[44] = isSelected;
167
+ $[45] = onToggle;
168
+ $[46] = renderCell;
169
+ $[47] = renderValue;
170
+ $[48] = selectable;
171
+ $[49] = t7;
172
+ } else t7 = $[49];
169
173
  t6 = items.map(t7);
170
174
  $[23] = actions;
171
175
  $[24] = columns;
@@ -177,18 +181,19 @@ function TableLayout(t0) {
177
181
  $[30] = isSelected;
178
182
  $[31] = items;
179
183
  $[32] = onToggle;
180
- $[33] = renderValue;
181
- $[34] = selectable;
182
- $[35] = t6;
183
- } else t6 = $[35];
184
+ $[33] = renderCell;
185
+ $[34] = renderValue;
186
+ $[35] = selectable;
187
+ $[36] = t6;
188
+ } else t6 = $[36];
184
189
  let t7;
185
- if ($[48] !== t6) {
190
+ if ($[50] !== t6) {
186
191
  t7 = /* @__PURE__ */ jsx("tbody", { children: t6 });
187
- $[48] = t6;
188
- $[49] = t7;
189
- } else t7 = $[49];
192
+ $[50] = t6;
193
+ $[51] = t7;
194
+ } else t7 = $[51];
190
195
  let t8;
191
- if ($[50] !== label || $[51] !== t5 || $[52] !== t7) {
196
+ if ($[52] !== label || $[53] !== t5 || $[54] !== t7) {
192
197
  t8 = /* @__PURE__ */ jsx("div", {
193
198
  className: TableLayout_module_default.scroller,
194
199
  children: /* @__PURE__ */ jsxs("table", {
@@ -197,11 +202,11 @@ function TableLayout(t0) {
197
202
  children: [t5, t7]
198
203
  })
199
204
  });
200
- $[50] = label;
201
- $[51] = t5;
202
- $[52] = t7;
203
- $[53] = t8;
204
- } else t8 = $[53];
205
+ $[52] = label;
206
+ $[53] = t5;
207
+ $[54] = t7;
208
+ $[55] = t8;
209
+ } else t8 = $[55];
205
210
  return t8;
206
211
  }
207
212
  function _temp(node) {
@@ -1 +1 @@
1
- {"version":3,"file":"TableLayout.js","names":["ArrowDown","ArrowUp","ArrowUpDown","Checkbox","Icon","usePanneauIntl","cx","messages","ListColumn","ListLayoutProps","ItemTitle","styles","getSortDirection","sort","column","first","id","alignClass","align","center","end","undefined","TableLayout","t0","$","_c","items","columns","renderValue","getItemLabel","getItemHref","isCurrent","selectable","isSelected","onToggle","renderActions","onSort","label","pageSelection","intl","actions","t1","t2","item","map","some","_temp","hasActions","check","t3","t4","direction","width","sortable","sorted","sortIcon","actionsCell","visuallyHidden","formatMessage","t5","t6","t7","item_0","row","selected","href","current","selectItem","column_0","index","title","cellLabel","t8","scroller","table","node","styles","_c"],"sources":["../../src/layouts/TableLayout.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';\n\nimport { Checkbox, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { cx } from '../cx';\nimport { messages } from '../messages';\nimport type { ListColumn, ListLayoutProps } from '../types';\nimport { ItemTitle } from './ItemTitle';\nimport styles from './TableLayout.module.css';\n\n/** The sort direction of a column, from the first `sort` value. */\nexport function getSortDirection(\n sort: readonly string[],\n column: ListColumn,\n): 'ascending' | 'descending' | null {\n const first = sort[0];\n if (first === column.id) {\n return 'ascending';\n }\n return first === `-${column.id}` ? 'descending' : null;\n}\n\nfunction alignClass(column: ListColumn): string | undefined {\n if (column.align === 'center') {\n return styles.center;\n }\n return column.align === 'end' ? styles.end : undefined;\n}\n\n/**\n * Items as a table, with sortable column headers. On narrow lists (phones), each row turns into a\n * block that shows the label of each value.\n */\nexport function TableLayout({\n items,\n columns,\n renderValue,\n getItemLabel,\n getItemHref,\n isCurrent,\n selectable,\n isSelected,\n onToggle,\n renderActions,\n sort,\n onSort,\n label,\n pageSelection,\n}: ListLayoutProps) {\n const intl = usePanneauIntl();\n const actions = items.map((item) => renderActions(item));\n const hasActions = actions.some((node) => node !== null);\n return (\n <div className={styles.scroller}>\n <table className={styles.table} aria-label={label}>\n <thead>\n <tr>\n {selectable ? <th className={styles.check}>{pageSelection}</th> : null}\n {columns.map((column) => {\n const direction = getSortDirection(sort, column);\n return (\n <th\n key={column.id}\n scope=\"col\"\n className={alignClass(column)}\n style={\n column.width !== undefined\n ? { width: column.width }\n : undefined\n }\n aria-sort={\n column.sortable === true ? (direction ?? 'none') : undefined\n }\n >\n {column.sortable === true ? (\n <button\n type=\"button\"\n className={cx(\n styles.sort,\n direction !== null && styles.sorted,\n )}\n onClick={() => onSort(column)}\n >\n {column.label ?? column.id}\n <span className={styles.sortIcon}>\n <Icon\n icon={\n direction === 'ascending'\n ? ArrowUp\n : direction === 'descending'\n ? ArrowDown\n : ArrowUpDown\n }\n size=\"sm\"\n />\n </span>\n </button>\n ) : (\n (column.label ?? column.id)\n )}\n </th>\n );\n })}\n {hasActions ? (\n <th className={styles.actionsCell}>\n <span className={styles.visuallyHidden}>\n {intl.formatMessage(messages.actions)}\n </span>\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, row) => {\n const selected = selectable && isSelected(item);\n const href = getItemHref?.(item) ?? null;\n const current = isCurrent?.(item) ?? false;\n return (\n <tr\n key={item.id}\n data-selected={selected || undefined}\n data-current={current || undefined}\n >\n {selectable ? (\n <td className={styles.check}>\n <Checkbox\n aria-label={intl.formatMessage(messages.selectItem, {\n item: getItemLabel(item),\n })}\n isSelected={selected}\n onChange={() => onToggle(item)}\n />\n </td>\n ) : null}\n {columns.map((column, index) => (\n <td\n key={column.id}\n className={cx(\n alignClass(column),\n index === 0 && styles.title,\n )}\n >\n <span className={styles.cellLabel}>\n {column.label ?? column.id}\n </span>\n <span>\n {index === 0 ? (\n <ItemTitle href={href} current={current}>\n {renderValue(item, column)}\n </ItemTitle>\n ) : (\n renderValue(item, column)\n )}\n </span>\n </td>\n ))}\n {hasActions ? (\n <td className={styles.actionsCell}>{actions[row]}</td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableLayout.js","names":["ArrowDown","ArrowUp","ArrowUpDown","Checkbox","Icon","usePanneauIntl","cx","messages","ListColumn","ListLayoutProps","ItemTitle","styles","getSortDirection","sort","column","first","id","alignClass","align","center","end","undefined","TableLayout","t0","$","_c","items","columns","renderValue","getItemLabel","getItemHref","isCurrent","selectable","isSelected","onToggle","renderActions","onSort","label","pageSelection","renderCell","intl","actions","t1","t2","item","map","some","_temp","hasActions","check","t3","t4","direction","width","sortable","sorted","sortIcon","actionsCell","visuallyHidden","formatMessage","t5","t6","t7","item_0","row","selected","href","current","selectItem","column_0","index","content","title","cellLabel","t8","scroller","table","node","styles","_c"],"sources":["../../src/layouts/TableLayout.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';\n\nimport { Checkbox, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { cx } from '../cx';\nimport { messages } from '../messages';\nimport type { ListColumn, ListLayoutProps } from '../types';\nimport { ItemTitle } from './ItemTitle';\nimport styles from './TableLayout.module.css';\n\n/** The sort direction of a column, from the first `sort` value. */\nexport function getSortDirection(\n sort: readonly string[],\n column: ListColumn,\n): 'ascending' | 'descending' | null {\n const first = sort[0];\n if (first === column.id) {\n return 'ascending';\n }\n return first === `-${column.id}` ? 'descending' : null;\n}\n\nfunction alignClass(column: ListColumn): string | undefined {\n if (column.align === 'center') {\n return styles.center;\n }\n return column.align === 'end' ? styles.end : undefined;\n}\n\n/**\n * Items as a table, with sortable column headers. On narrow lists (phones), each row turns into a\n * block that shows the label of each value.\n */\nexport function TableLayout({\n items,\n columns,\n renderValue,\n getItemLabel,\n getItemHref,\n isCurrent,\n selectable,\n isSelected,\n onToggle,\n renderActions,\n sort,\n onSort,\n label,\n pageSelection,\n renderCell,\n}: ListLayoutProps) {\n const intl = usePanneauIntl();\n const actions = items.map((item) => renderActions(item));\n const hasActions = actions.some((node) => node !== null);\n return (\n <div className={styles.scroller}>\n <table className={styles.table} aria-label={label}>\n <thead>\n <tr>\n {selectable ? <th className={styles.check}>{pageSelection}</th> : null}\n {columns.map((column) => {\n const direction = getSortDirection(sort, column);\n return (\n <th\n key={column.id}\n scope=\"col\"\n className={alignClass(column)}\n style={\n column.width !== undefined\n ? { width: column.width }\n : undefined\n }\n aria-sort={\n column.sortable === true ? (direction ?? 'none') : undefined\n }\n >\n {column.sortable === true ? (\n <button\n type=\"button\"\n className={cx(\n styles.sort,\n direction !== null && styles.sorted,\n )}\n onClick={() => onSort(column)}\n >\n {column.label ?? column.id}\n <span className={styles.sortIcon}>\n <Icon\n icon={\n direction === 'ascending'\n ? ArrowUp\n : direction === 'descending'\n ? ArrowDown\n : ArrowUpDown\n }\n size=\"sm\"\n />\n </span>\n </button>\n ) : (\n (column.label ?? column.id)\n )}\n </th>\n );\n })}\n {hasActions ? (\n <th className={styles.actionsCell}>\n <span className={styles.visuallyHidden}>\n {intl.formatMessage(messages.actions)}\n </span>\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, row) => {\n const selected = selectable && isSelected(item);\n const href = getItemHref?.(item) ?? null;\n const current = isCurrent?.(item) ?? false;\n return (\n <tr\n key={item.id}\n data-selected={selected || undefined}\n data-current={current || undefined}\n >\n {selectable ? (\n <td className={styles.check}>\n <Checkbox\n aria-label={intl.formatMessage(messages.selectItem, {\n item: getItemLabel(item),\n })}\n isSelected={selected}\n onChange={() => onToggle(item)}\n />\n </td>\n ) : null}\n {columns.map((column, index) => {\n const content =\n index === 0 ? (\n <ItemTitle href={href} current={current}>\n {renderValue(item, column)}\n </ItemTitle>\n ) : (\n renderValue(item, column)\n );\n return (\n <td\n key={column.id}\n className={cx(\n alignClass(column),\n index === 0 && styles.title,\n )}\n >\n <span className={styles.cellLabel}>\n {column.label ?? column.id}\n </span>\n <span>\n {renderCell !== undefined\n ? renderCell(item, column, content)\n : content}\n </span>\n </td>\n );\n })}\n {hasActions ? (\n <td className={styles.actionsCell}>{actions[row]}</td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ListLayoutEntry } from '../types.js';
2
- /** The built-in list layouts, by id. `gallery` and `calendar` come later. */
2
+ /** The built-in list layouts, by id (decision 0044). */
3
3
  export declare const builtInLayouts: Readonly<Record<string, ListLayoutEntry>> & {
4
4
  table: ListLayoutEntry;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/layouts/builtIn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD,6EAA6E;AAC7E,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,GAAG;IACrE,KAAK,EAAE,eAAe,CAAC;CAI1B,CAAC"}
1
+ {"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/layouts/builtIn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMhD,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,GAAG;IACrE,KAAK,EAAE,eAAe,CAAC;CAM1B,CAAC"}
@@ -1,10 +1,14 @@
1
+ import { CalendarLayout } from "./CalendarLayout.js";
1
2
  import { CardsLayout } from "./CardsLayout.js";
3
+ import { GalleryLayout } from "./GalleryLayout.js";
2
4
  import { TableLayout } from "./TableLayout.js";
3
5
  //#region src/layouts/builtIn.ts
4
- /** The built-in list layouts, by id. `gallery` and `calendar` come later. */
6
+ /** The built-in list layouts, by id (decision 0044). */
5
7
  var builtInLayouts = {
6
8
  table: TableLayout,
7
- cards: CardsLayout
9
+ cards: CardsLayout,
10
+ gallery: GalleryLayout,
11
+ calendar: CalendarLayout
8
12
  };
9
13
  //#endregion
10
14
  export { builtInLayouts };
@@ -1 +1 @@
1
- {"version":3,"file":"builtIn.js","names":["ListLayoutEntry","CardsLayout","TableLayout","builtInLayouts","Readonly","Record","table","cards"],"sources":["../../src/layouts/builtIn.ts"],"sourcesContent":["import type { ListLayoutEntry } from '../types';\nimport { CardsLayout } from './CardsLayout';\nimport { TableLayout } from './TableLayout';\n\n/** The built-in list layouts, by id. `gallery` and `calendar` come later. */\nexport const builtInLayouts: Readonly<Record<string, ListLayoutEntry>> & {\n table: ListLayoutEntry;\n} = {\n table: TableLayout,\n cards: CardsLayout,\n};\n"],"mappings":";;;;AAKA,IAAaG,iBAET;CACAG,OAAOJ;CACPK,OAAON;AACX"}
1
+ {"version":3,"file":"builtIn.js","names":["ListLayoutEntry","CalendarLayout","CardsLayout","GalleryLayout","TableLayout","builtInLayouts","Readonly","Record","table","cards","gallery","calendar"],"sources":["../../src/layouts/builtIn.ts"],"sourcesContent":["import type { ListLayoutEntry } from '../types';\nimport { CalendarLayout } from './CalendarLayout';\nimport { CardsLayout } from './CardsLayout';\nimport { GalleryLayout } from './GalleryLayout';\nimport { TableLayout } from './TableLayout';\n\n/** The built-in list layouts, by id (decision 0044). */\nexport const builtInLayouts: Readonly<Record<string, ListLayoutEntry>> & {\n table: ListLayoutEntry;\n} = {\n table: TableLayout,\n cards: CardsLayout,\n gallery: GalleryLayout,\n calendar: CalendarLayout,\n};\n"],"mappings":";;;;;;AAOA,IAAaK,iBAET;CACAG,OAAOJ;CACPK,OAAOP;CACPQ,SAASP;CACTQ,UAAUV;AACd"}
@@ -0,0 +1,17 @@
1
+ import type { ListColumn } from '../types.js';
2
+ export interface ColumnMenuProps {
3
+ /** Every column of the list, in the order of the definition. */
4
+ columns: readonly ListColumn[];
5
+ /** The columns shown, in their order. */
6
+ shown: readonly ListColumn[];
7
+ /** Shows these columns, by id, in this order. */
8
+ onChange: (ids: string[]) => void;
9
+ /** Back to the columns of the definition, or `null` while they are shown. */
10
+ onReset: (() => void) | null;
11
+ }
12
+ /**
13
+ * A button that opens the columns of a list: a checkbox to show or hide each one, buttons to
14
+ * move the shown ones, and a reset to the columns of the definition (decision 0042).
15
+ */
16
+ export declare function ColumnMenu({ columns, shown, onChange, onReset }: ColumnMenuProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=ColumnMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnMenu.d.ts","sourceRoot":"","sources":["../../src/toolbar/ColumnMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC5B,gEAAgE;IAChE,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,yCAAyC;IACzC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClC,6EAA6E;IAC7E,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,eAAe,+BAmFhF"}
@@ -0,0 +1,193 @@
1
+ import { messages } from "../messages.js";
2
+ import Toolbar_module_default from "./Toolbar.module.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import { Button, Checkbox, IconButton, Popover, PopoverTrigger, usePanneauIntl } from "@panneau/ui";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { ArrowDown, ArrowUp, Columns3 } from "lucide-react";
7
+ //#region src/toolbar/ColumnMenu.tsx
8
+ function labelOf(column) {
9
+ return typeof column.label === "string" ? column.label : column.id;
10
+ }
11
+ /**
12
+ * A button that opens the columns of a list: a checkbox to show or hide each one, buttons to
13
+ * move the shown ones, and a reset to the columns of the definition (decision 0042).
14
+ */
15
+ function ColumnMenu(t0) {
16
+ const $ = c(42);
17
+ const { columns, shown, onChange, onReset } = t0;
18
+ const intl = usePanneauIntl();
19
+ let T0;
20
+ let T1;
21
+ let t1;
22
+ let t2;
23
+ let t3;
24
+ let t4;
25
+ let t5;
26
+ let t6;
27
+ if ($[0] !== columns || $[1] !== intl || $[2] !== onChange || $[3] !== shown) {
28
+ const ids = shown.map(_temp);
29
+ const ordered = [...shown, ...columns.filter((column_0) => !shown.includes(column_0))];
30
+ const move = (index, offset) => {
31
+ const next = [...ids];
32
+ const [id] = next.splice(index, 1);
33
+ if (id !== void 0) {
34
+ next.splice(index + offset, 0, id);
35
+ onChange(next);
36
+ }
37
+ };
38
+ T1 = PopoverTrigger;
39
+ let t7;
40
+ if ($[12] !== intl) {
41
+ t7 = intl.formatMessage(messages.columns);
42
+ $[12] = intl;
43
+ $[13] = t7;
44
+ } else t7 = $[13];
45
+ if ($[14] !== t7) {
46
+ t6 = /* @__PURE__ */ jsx(Button, {
47
+ icon: Columns3,
48
+ children: t7
49
+ });
50
+ $[14] = t7;
51
+ $[15] = t6;
52
+ } else t6 = $[15];
53
+ T0 = Popover;
54
+ t4 = "bottom end";
55
+ if ($[16] !== intl) {
56
+ t5 = intl.formatMessage(messages.columns);
57
+ $[16] = intl;
58
+ $[17] = t5;
59
+ } else t5 = $[17];
60
+ t3 = Toolbar_module_default.columns;
61
+ t1 = Toolbar_module_default.columnList;
62
+ t2 = ordered.map((column_1) => {
63
+ const index_0 = ids.indexOf(column_1.id);
64
+ const isShown = index_0 !== -1;
65
+ const label = labelOf(column_1);
66
+ return /* @__PURE__ */ jsxs("li", {
67
+ className: Toolbar_module_default.column,
68
+ children: [/* @__PURE__ */ jsx(Checkbox, {
69
+ isSelected: isShown,
70
+ isDisabled: column_1.hideable === false || isShown && ids.length === 1,
71
+ onChange: (selected) => onChange(selected ? [...ids, column_1.id] : ids.filter((id_0) => id_0 !== column_1.id)),
72
+ className: Toolbar_module_default.columnLabel,
73
+ children: label
74
+ }), isShown ? /* @__PURE__ */ jsxs("span", {
75
+ className: Toolbar_module_default.columnMoves,
76
+ children: [/* @__PURE__ */ jsx(IconButton, {
77
+ icon: ArrowUp,
78
+ size: "sm",
79
+ label: intl.formatMessage(messages.moveColumnUp, { column: label }),
80
+ showTooltip: false,
81
+ isDisabled: index_0 === 0,
82
+ onPress: () => move(index_0, -1)
83
+ }), /* @__PURE__ */ jsx(IconButton, {
84
+ icon: ArrowDown,
85
+ size: "sm",
86
+ label: intl.formatMessage(messages.moveColumnDown, { column: label }),
87
+ showTooltip: false,
88
+ isDisabled: index_0 === ids.length - 1,
89
+ onPress: () => move(index_0, 1)
90
+ })]
91
+ }) : null]
92
+ }, column_1.id);
93
+ });
94
+ $[0] = columns;
95
+ $[1] = intl;
96
+ $[2] = onChange;
97
+ $[3] = shown;
98
+ $[4] = T0;
99
+ $[5] = T1;
100
+ $[6] = t1;
101
+ $[7] = t2;
102
+ $[8] = t3;
103
+ $[9] = t4;
104
+ $[10] = t5;
105
+ $[11] = t6;
106
+ } else {
107
+ T0 = $[4];
108
+ T1 = $[5];
109
+ t1 = $[6];
110
+ t2 = $[7];
111
+ t3 = $[8];
112
+ t4 = $[9];
113
+ t5 = $[10];
114
+ t6 = $[11];
115
+ }
116
+ let t7;
117
+ if ($[18] !== t1 || $[19] !== t2) {
118
+ t7 = /* @__PURE__ */ jsx("ul", {
119
+ className: t1,
120
+ children: t2
121
+ });
122
+ $[18] = t1;
123
+ $[19] = t2;
124
+ $[20] = t7;
125
+ } else t7 = $[20];
126
+ const t8 = onReset === null;
127
+ let t9;
128
+ if ($[21] !== onReset) {
129
+ t9 = () => onReset?.();
130
+ $[21] = onReset;
131
+ $[22] = t9;
132
+ } else t9 = $[22];
133
+ let t10;
134
+ if ($[23] !== intl) {
135
+ t10 = intl.formatMessage(messages.resetColumns);
136
+ $[23] = intl;
137
+ $[24] = t10;
138
+ } else t10 = $[24];
139
+ let t11;
140
+ if ($[25] !== t10 || $[26] !== t8 || $[27] !== t9) {
141
+ t11 = /* @__PURE__ */ jsx(Button, {
142
+ size: "sm",
143
+ appearance: "ghost",
144
+ isDisabled: t8,
145
+ onPress: t9,
146
+ children: t10
147
+ });
148
+ $[25] = t10;
149
+ $[26] = t8;
150
+ $[27] = t9;
151
+ $[28] = t11;
152
+ } else t11 = $[28];
153
+ let t12;
154
+ if ($[29] !== t11 || $[30] !== t3 || $[31] !== t7) {
155
+ t12 = /* @__PURE__ */ jsxs("div", {
156
+ className: t3,
157
+ children: [t7, t11]
158
+ });
159
+ $[29] = t11;
160
+ $[30] = t3;
161
+ $[31] = t7;
162
+ $[32] = t12;
163
+ } else t12 = $[32];
164
+ let t13;
165
+ if ($[33] !== T0 || $[34] !== t12 || $[35] !== t4 || $[36] !== t5) {
166
+ t13 = /* @__PURE__ */ jsx(T0, {
167
+ placement: t4,
168
+ "aria-label": t5,
169
+ children: t12
170
+ });
171
+ $[33] = T0;
172
+ $[34] = t12;
173
+ $[35] = t4;
174
+ $[36] = t5;
175
+ $[37] = t13;
176
+ } else t13 = $[37];
177
+ let t14;
178
+ if ($[38] !== T1 || $[39] !== t13 || $[40] !== t6) {
179
+ t14 = /* @__PURE__ */ jsxs(T1, { children: [t6, t13] });
180
+ $[38] = T1;
181
+ $[39] = t13;
182
+ $[40] = t6;
183
+ $[41] = t14;
184
+ } else t14 = $[41];
185
+ return t14;
186
+ }
187
+ function _temp(column) {
188
+ return column.id;
189
+ }
190
+ //#endregion
191
+ export { ColumnMenu };
192
+
193
+ //# sourceMappingURL=ColumnMenu.js.map