@genesislcap/foundation-ui 15.58.0 → 15.58.1-FUI-2629.4

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.
@@ -21,10 +21,17 @@ export const actionsMenuBaseStyles = (context, definition) => css `
21
21
  margin: 0;
22
22
  }
23
23
 
24
+ /* The vertical menu follows AG Grid's context menu (ag-menu / ag-menu-list / ag-menu-option),
25
+ so it matches the grid it usually sits in. Outside a grid the --ag-* vars are unset and the
26
+ design system's own tokens apply. */
24
27
  .actions-vertical .actions-menu {
25
- padding: calc(var(--design-unit) * 1px);
26
- max-height: 175px;
27
- z-index: 100;
28
+ padding: var(--ag-spacing, 4px) 0;
29
+ background-color: var(--ag-menu-background-color, var(--fill-color));
30
+ border: var(--ag-menu-border, calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-rest));
31
+ border-radius: var(--ag-border-radius, calc(var(--control-corner-radius) * 1px));
32
+ box-shadow: var(--ag-menu-shadow, var(--ag-popup-shadow, 0 2px 8px rgb(0 0 0 / 30%)));
33
+ color: var(--ag-menu-text-color, var(--neutral-foreground-rest));
34
+ font-family: var(--ag-font-family, var(--body-font));
28
35
  }
29
36
 
30
37
  .actions-menu:not(.hidden):hover {
@@ -48,6 +55,31 @@ export const actionsMenuBaseStyles = (context, definition) => css `
48
55
  );
49
56
  }
50
57
 
58
+ :host([icon-name]) .actions-container {
59
+ justify-content: center;
60
+ }
61
+
62
+ /* The icon-only opener mirrors grid-pro's icon renderer: a bare icon with a hover chip. */
63
+ .actions-opener.icon-only {
64
+ align-items: center;
65
+ justify-content: center;
66
+ height: auto;
67
+ padding: 5px;
68
+ border-radius: 5px;
69
+ line-height: 1;
70
+ color: inherit;
71
+ cursor: pointer;
72
+ }
73
+
74
+ .actions-opener.icon-only:hover,
75
+ .actions-opener.icon-only.opened {
76
+ background-color: var(--neutral-stroke-hover);
77
+ }
78
+
79
+ .actions-opener.icon-only:focus-visible {
80
+ outline: calc(var(--focus-stroke-width) * 1px) solid var(--accent-fill-rest);
81
+ }
82
+
51
83
  svg {
52
84
  width: 100%;
53
85
  height: 100%;
@@ -80,10 +112,47 @@ export const actionsMenuBaseStyles = (context, definition) => css `
80
112
  min-height: 0;
81
113
  }
82
114
 
115
+ /* The open menu is a flex column, so a flex-basis would override the AG row height. */
83
116
  .actions-vertical .menu-item {
84
- flex: 1 1 auto;
117
+ flex: none;
118
+ box-sizing: border-box;
119
+ height: calc(var(--ag-icon-size, 16px) + (var(--ag-spacing, 4px) + 2px) * 2);
120
+ max-height: none;
121
+ margin: 0;
122
+ background: transparent;
123
+ border: none;
124
+ border-radius: 0;
125
+ color: inherit;
126
+ font-family: inherit;
127
+ font-size: var(--ag-font-size, var(--type-ramp-base-font-size));
128
+ font-weight: 500;
129
+ }
130
+
131
+ .actions-vertical .menu-item:hover,
132
+ .actions-vertical .menu-item:focus {
133
+ background: var(--ag-row-hover-color, var(--neutral-fill-stealth-hover));
134
+ border: none;
135
+ }
136
+
137
+ .actions-vertical .menu-item[disabled] {
138
+ background: transparent;
139
+ opacity: 50%;
140
+ }
141
+
142
+ .actions-vertical .menu-item::part(start) {
143
+ padding-left: calc(var(--ag-spacing, 4px) * 2);
144
+ }
145
+
146
+ .actions-vertical .menu-item [slot='start'] {
85
147
  justify-content: center;
86
- margin: calc(var(--design-unit) * 1px);
148
+ width: var(--ag-icon-size, 16px);
149
+ }
150
+
151
+ /* AG's trailing shortcut and popup-pointer cells add 2 more spacings on the right. */
152
+ .actions-vertical .menu-item::part(content) {
153
+ margin-inline: 0;
154
+ padding-inline: calc(var(--ag-spacing, 4px) * 2) calc(var(--ag-spacing, 4px) * 4);
155
+ line-height: var(--ag-icon-size, 16px);
87
156
  }
88
157
 
89
158
  .actions-vertical .visible,
@@ -1,6 +1,25 @@
1
1
  import { html, ref, repeat, when } from '@microsoft/fast-element';
2
2
  import { getPrefix } from '../utils';
3
- export const menuTemplate = (prefix) => html `
3
+ /**
4
+ * A bare icon opener (e.g. a "kebab"), styled like grid-pro's icon renderer rather than a button.
5
+ */
6
+ const iconOpenerTemplate = (prefix) => html `
7
+ <div
8
+ ${ref('actionsOpener')}
9
+ class="actions-opener icon-only${(x) => (x.open ? ' opened' : '')}"
10
+ part="icon-opener"
11
+ role="button"
12
+ tabindex="0"
13
+ aria-label="${(x) => x.name}"
14
+ aria-haspopup="menu"
15
+ aria-expanded="${(x) => String(x.open)}"
16
+ @click=${(x) => x.toggleActionsMenuVisibility()}
17
+ @keydown=${(x, c) => x.onIconOpenerKeydown(c.event)}
18
+ >
19
+ <${prefix}-icon name="${(x) => x.iconName}" size="lg"></${prefix}-icon>
20
+ </div>
21
+ `;
22
+ const buttonOpenerTemplate = (prefix) => html `
4
23
  <${prefix}-button
5
24
  ${ref('actionsOpener')}
6
25
  id="actiosnMenuTrigger"
@@ -15,25 +34,50 @@ export const menuTemplate = (prefix) => html `
15
34
  ${x.name}
16
35
  `}
17
36
  </${prefix}-button>
18
- <${prefix}-menu ${ref('actionsMenu')} popover="manual" class="actions-menu ${(x) => x.classNames}" part="actions-menu">
37
+ `;
38
+ export const menuTemplate = (prefix) => html `
39
+ ${(x) => (x.iconName ? iconOpenerTemplate(prefix) : buttonOpenerTemplate(prefix))}
40
+ <${prefix}-menu
41
+ ${ref('actionsMenu')}
42
+ popover="${(x) => (x.isVertical ? 'auto' : 'manual')}"
43
+ class="actions-menu ${(x) => x.classNames}"
44
+ part="actions-menu"
45
+ @toggle=${(x, c) => x.onPopoverToggle(c.event)}
46
+ >
19
47
  ${repeat((x) => x.allActions, html `
20
- ${when((x, context) => x.isDisabled && x.isDisabled(context.parent.rowData), html `
48
+ ${when((x, context) => context.parent.isActionDisabled(x), html `
21
49
  <${prefix}-menu-item
22
50
  class="menu-item"
23
51
  tabindex="${(x, context) => context.index}"
24
52
  disabled
25
53
  style=${(x, ctx) => (ctx.parent.hideDisabled ? 'display:none' : '')}
26
54
  >
55
+ ${when((x) => x.icon, html `
56
+ <${prefix}-icon
57
+ name=${(x) => x.icon.name}
58
+ size=${(x) => x.icon.size}
59
+ variant=${(x) => x.icon.variant}
60
+ slot="start"
61
+ ></${prefix}-icon>
62
+ `)}
27
63
  ${(x, ctx) => ctx.parent.getLabel(x.name)}
28
64
  </${prefix}-menu-item>
29
65
  `)}
30
- ${when((x, context) => !x.isDisabled || !x.isDisabled(context.parent.rowData), html `
66
+ ${when((x, context) => !context.parent.isActionDisabled(x), html `
31
67
  <${prefix}-menu-item
32
68
  class="menu-item"
33
69
  tabindex="${(x, context) => context.index}"
34
70
  @click=${(x, context) => context.parent.onActionMenuItemClick(x.callback)}
35
71
  style="${(x) => (x.color ? `color: ${x.color};` : '')}"
36
72
  >
73
+ ${when((x) => x.icon, html `
74
+ <${prefix}-icon
75
+ name=${(x) => x.icon.name}
76
+ size=${(x) => x.icon.size}
77
+ variant=${(x) => x.icon.variant}
78
+ slot="start"
79
+ ></${prefix}-icon>
80
+ `)}
37
81
  ${(x, ctx) => ctx.parent.getLabel(x.name)}
38
82
  </${prefix}-menu-item>
39
83
  `)}
@@ -49,7 +93,7 @@ export const singleOptionTemplate = (prefix) => html `
49
93
  return x === null || x === void 0 ? void 0 : x.singleOption.callback(x.rowData);
50
94
  }}
51
95
  ?disabled=${(x) => {
52
- return (x === null || x === void 0 ? void 0 : x.singleOption.isDisabled) && (x === null || x === void 0 ? void 0 : x.singleOption.isDisabled(x.rowData));
96
+ return x.isActionDisabled(x.singleOption);
53
97
  }}
54
98
  >
55
99
  ${(x) => x.getLabel(x === null || x === void 0 ? void 0 : x.singleOption.name)}
@@ -3,4 +3,5 @@ export * from './dom';
3
3
  export * from './event-types';
4
4
  export * from './logger';
5
5
  export * from './options-datasource-utils';
6
+ export * from './popover-position';
6
7
  export * from './tooltip';
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Walks up from `element`, crossing shadow-root boundaries via `.host`, collecting every
3
+ * scrollable ancestor (including the anchor's own document).
4
+ * @remarks Native `scroll` events are not `composed`, so they don't cross shadow-DOM boundaries
5
+ * the way `click`/`keydown` do — a listener on `document` never sees a shadow-DOM-nested
6
+ * viewport's own scroll. Callers must listen on each returned ancestor directly.
7
+ * @public
8
+ */
9
+ export function findScrollableAncestors(element) {
10
+ var _a;
11
+ const ancestors = [];
12
+ let node = element.parentNode;
13
+ while (node) {
14
+ if (node instanceof ShadowRoot) {
15
+ node = node.host;
16
+ continue;
17
+ }
18
+ if (node instanceof Document) {
19
+ ancestors.push(node);
20
+ break;
21
+ }
22
+ if (node instanceof HTMLElement) {
23
+ const style = (_a = node.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getComputedStyle(node);
24
+ if (!style) {
25
+ node = node.parentNode;
26
+ continue;
27
+ }
28
+ if (/(auto|scroll|overlay)/.test(style.overflowY) ||
29
+ /(auto|scroll|overlay)/.test(style.overflowX)) {
30
+ ancestors.push(node);
31
+ }
32
+ }
33
+ node = node.parentNode;
34
+ }
35
+ return ancestors;
36
+ }
37
+ /**
38
+ * Keeps a Popover-API element anchored to its trigger while any of the trigger's scrollable
39
+ * ancestors scroll, and reports back when the trigger has been removed from the DOM (e.g. AG
40
+ * Grid row virtualization recycling the row that owns it).
41
+ * @public
42
+ */
43
+ export class AnchoredPopoverPositionTracker {
44
+ constructor(anchor, onReposition, onAnchorDetached) {
45
+ this.anchor = anchor;
46
+ this.onReposition = onReposition;
47
+ this.onAnchorDetached = onAnchorDetached;
48
+ this.ancestors = [];
49
+ this.handleScroll = () => {
50
+ if (!this.anchor.isConnected) {
51
+ this.onAnchorDetached();
52
+ return;
53
+ }
54
+ this.onReposition();
55
+ };
56
+ }
57
+ start() {
58
+ this.stop();
59
+ this.ancestors = findScrollableAncestors(this.anchor);
60
+ for (const ancestor of this.ancestors) {
61
+ ancestor.addEventListener('scroll', this.handleScroll, { passive: true });
62
+ }
63
+ }
64
+ stop() {
65
+ for (const ancestor of this.ancestors) {
66
+ ancestor.removeEventListener('scroll', this.handleScroll);
67
+ }
68
+ this.ancestors = [];
69
+ }
70
+ }
@@ -279,7 +279,25 @@
279
279
  },
280
280
  {
281
281
  "kind": "Content",
282
- "text": "{\n name: string | ((rowData: any) => string);\n callback: (rowData: any) => void | any;\n isDisabled?: (rowData: any) => boolean;\n color?: string;\n}"
282
+ "text": "{\n name: string | ((rowData: any) => string);\n callback: (rowData: any) => void | any;\n isDisabled?: boolean | ((rowData: any) => boolean);\n color?: string;\n icon?: {\n variant?: "
283
+ },
284
+ {
285
+ "kind": "Reference",
286
+ "text": "IconStyle",
287
+ "canonicalReference": "@fortawesome/fontawesome-common-types!IconStyle:type"
288
+ },
289
+ {
290
+ "kind": "Content",
291
+ "text": ";\n name: string;\n size?: "
292
+ },
293
+ {
294
+ "kind": "Reference",
295
+ "text": "FaSize",
296
+ "canonicalReference": "@genesislcap/foundation-ui!FaSize:type"
297
+ },
298
+ {
299
+ "kind": "Content",
300
+ "text": ";\n };\n}"
283
301
  },
284
302
  {
285
303
  "kind": "Content",
@@ -291,7 +309,47 @@
291
309
  "name": "ActionMenuItem",
292
310
  "typeTokenRange": {
293
311
  "startIndex": 1,
294
- "endIndex": 2
312
+ "endIndex": 6
313
+ }
314
+ },
315
+ {
316
+ "kind": "TypeAlias",
317
+ "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItems:type",
318
+ "docComment": "/**\n * The actions shown by the Actions Menu: a fixed array, or a function of the row data returning one (for row-scoped eligibility/permission filtering).\n *\n * @public\n */\n",
319
+ "excerptTokens": [
320
+ {
321
+ "kind": "Content",
322
+ "text": "export type ActionMenuItems = "
323
+ },
324
+ {
325
+ "kind": "Reference",
326
+ "text": "ActionMenuItem",
327
+ "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItem:type"
328
+ },
329
+ {
330
+ "kind": "Content",
331
+ "text": "[] | ((rowData: any) => "
332
+ },
333
+ {
334
+ "kind": "Reference",
335
+ "text": "ActionMenuItem",
336
+ "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItem:type"
337
+ },
338
+ {
339
+ "kind": "Content",
340
+ "text": "[])"
341
+ },
342
+ {
343
+ "kind": "Content",
344
+ "text": ";"
345
+ }
346
+ ],
347
+ "fileUrlPath": "src/actions-menu/actions-menu.ts",
348
+ "releaseTag": "Public",
349
+ "name": "ActionMenuItems",
350
+ "typeTokenRange": {
351
+ "startIndex": 1,
352
+ "endIndex": 5
295
353
  }
296
354
  },
297
355
  {
@@ -330,12 +388,8 @@
330
388
  },
331
389
  {
332
390
  "kind": "Reference",
333
- "text": "ActionMenuItem",
334
- "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItem:type"
335
- },
336
- {
337
- "kind": "Content",
338
- "text": "[]"
391
+ "text": "ActionMenuItems",
392
+ "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItems:type"
339
393
  },
340
394
  {
341
395
  "kind": "Content",
@@ -348,7 +402,7 @@
348
402
  "name": "actions",
349
403
  "propertyTypeTokenRange": {
350
404
  "startIndex": 1,
351
- "endIndex": 3
405
+ "endIndex": 2
352
406
  },
353
407
  "isStatic": false,
354
408
  "isProtected": false,
@@ -870,6 +924,85 @@
870
924
  "isProtected": false,
871
925
  "isAbstract": false
872
926
  },
927
+ {
928
+ "kind": "Property",
929
+ "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#iconName:member",
930
+ "docComment": "/**\n * When set, the opener renders this icon instead of the `name` text (e.g. `ellipsis` for an icon-only \"kebab\" opener).\n */\n",
931
+ "excerptTokens": [
932
+ {
933
+ "kind": "Content",
934
+ "text": "iconName: "
935
+ },
936
+ {
937
+ "kind": "Content",
938
+ "text": "string"
939
+ },
940
+ {
941
+ "kind": "Content",
942
+ "text": ";"
943
+ }
944
+ ],
945
+ "isReadonly": false,
946
+ "isOptional": false,
947
+ "releaseTag": "Public",
948
+ "name": "iconName",
949
+ "propertyTypeTokenRange": {
950
+ "startIndex": 1,
951
+ "endIndex": 2
952
+ },
953
+ "isStatic": false,
954
+ "isProtected": false,
955
+ "isAbstract": false
956
+ },
957
+ {
958
+ "kind": "Method",
959
+ "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#isActionDisabled:member(1)",
960
+ "docComment": "/**\n * Resolves an action's `isDisabled` flag or row-data function for the current row.\n */\n",
961
+ "excerptTokens": [
962
+ {
963
+ "kind": "Content",
964
+ "text": "isActionDisabled(action: "
965
+ },
966
+ {
967
+ "kind": "Reference",
968
+ "text": "ActionMenuItem",
969
+ "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItem:type"
970
+ },
971
+ {
972
+ "kind": "Content",
973
+ "text": "): "
974
+ },
975
+ {
976
+ "kind": "Content",
977
+ "text": "boolean"
978
+ },
979
+ {
980
+ "kind": "Content",
981
+ "text": ";"
982
+ }
983
+ ],
984
+ "isStatic": false,
985
+ "returnTypeTokenRange": {
986
+ "startIndex": 3,
987
+ "endIndex": 4
988
+ },
989
+ "releaseTag": "Public",
990
+ "isProtected": false,
991
+ "overloadIndex": 1,
992
+ "parameters": [
993
+ {
994
+ "parameterName": "action",
995
+ "parameterTypeTokenRange": {
996
+ "startIndex": 1,
997
+ "endIndex": 2
998
+ },
999
+ "isOptional": false
1000
+ }
1001
+ ],
1002
+ "isOptional": false,
1003
+ "isAbstract": false,
1004
+ "name": "isActionDisabled"
1005
+ },
873
1006
  {
874
1007
  "kind": "Property",
875
1008
  "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#isVertical:member",
@@ -978,6 +1111,104 @@
978
1111
  "isAbstract": false,
979
1112
  "name": "onActionMenuItemClick"
980
1113
  },
1114
+ {
1115
+ "kind": "Method",
1116
+ "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#onIconOpenerKeydown:member(1)",
1117
+ "docComment": "/**\n * Opens the icon-only opener from the keyboard, as a native button would.\n */\n",
1118
+ "excerptTokens": [
1119
+ {
1120
+ "kind": "Content",
1121
+ "text": "onIconOpenerKeydown(event: "
1122
+ },
1123
+ {
1124
+ "kind": "Reference",
1125
+ "text": "KeyboardEvent",
1126
+ "canonicalReference": "!KeyboardEvent:interface"
1127
+ },
1128
+ {
1129
+ "kind": "Content",
1130
+ "text": "): "
1131
+ },
1132
+ {
1133
+ "kind": "Content",
1134
+ "text": "boolean"
1135
+ },
1136
+ {
1137
+ "kind": "Content",
1138
+ "text": ";"
1139
+ }
1140
+ ],
1141
+ "isStatic": false,
1142
+ "returnTypeTokenRange": {
1143
+ "startIndex": 3,
1144
+ "endIndex": 4
1145
+ },
1146
+ "releaseTag": "Public",
1147
+ "isProtected": false,
1148
+ "overloadIndex": 1,
1149
+ "parameters": [
1150
+ {
1151
+ "parameterName": "event",
1152
+ "parameterTypeTokenRange": {
1153
+ "startIndex": 1,
1154
+ "endIndex": 2
1155
+ },
1156
+ "isOptional": false
1157
+ }
1158
+ ],
1159
+ "isOptional": false,
1160
+ "isAbstract": false,
1161
+ "name": "onIconOpenerKeydown"
1162
+ },
1163
+ {
1164
+ "kind": "Method",
1165
+ "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#onPopoverToggle:member(1)",
1166
+ "docComment": "/**\n * Syncs `open` when the native `popover=\"auto\"` light-dismiss (outside click / Escape) closes the vertical menu without going through `toggleActionsMenuVisibility()`.\n */\n",
1167
+ "excerptTokens": [
1168
+ {
1169
+ "kind": "Content",
1170
+ "text": "onPopoverToggle(event: "
1171
+ },
1172
+ {
1173
+ "kind": "Reference",
1174
+ "text": "Event",
1175
+ "canonicalReference": "!Event:interface"
1176
+ },
1177
+ {
1178
+ "kind": "Content",
1179
+ "text": "): "
1180
+ },
1181
+ {
1182
+ "kind": "Content",
1183
+ "text": "void"
1184
+ },
1185
+ {
1186
+ "kind": "Content",
1187
+ "text": ";"
1188
+ }
1189
+ ],
1190
+ "isStatic": false,
1191
+ "returnTypeTokenRange": {
1192
+ "startIndex": 3,
1193
+ "endIndex": 4
1194
+ },
1195
+ "releaseTag": "Public",
1196
+ "isProtected": false,
1197
+ "overloadIndex": 1,
1198
+ "parameters": [
1199
+ {
1200
+ "parameterName": "event",
1201
+ "parameterTypeTokenRange": {
1202
+ "startIndex": 1,
1203
+ "endIndex": 2
1204
+ },
1205
+ "isOptional": false
1206
+ }
1207
+ ],
1208
+ "isOptional": false,
1209
+ "isAbstract": false,
1210
+ "name": "onPopoverToggle"
1211
+ },
981
1212
  {
982
1213
  "kind": "Property",
983
1214
  "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#open:member",
@@ -1039,6 +1270,41 @@
1039
1270
  "isAbstract": false,
1040
1271
  "name": "openChanged"
1041
1272
  },
1273
+ {
1274
+ "kind": "Property",
1275
+ "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#resolvedActions:member",
1276
+ "docComment": "",
1277
+ "excerptTokens": [
1278
+ {
1279
+ "kind": "Content",
1280
+ "text": "get resolvedActions(): "
1281
+ },
1282
+ {
1283
+ "kind": "Reference",
1284
+ "text": "ActionMenuItem",
1285
+ "canonicalReference": "@genesislcap/foundation-ui!ActionMenuItem:type"
1286
+ },
1287
+ {
1288
+ "kind": "Content",
1289
+ "text": "[]"
1290
+ },
1291
+ {
1292
+ "kind": "Content",
1293
+ "text": ";"
1294
+ }
1295
+ ],
1296
+ "isReadonly": true,
1297
+ "isOptional": false,
1298
+ "releaseTag": "Public",
1299
+ "name": "resolvedActions",
1300
+ "propertyTypeTokenRange": {
1301
+ "startIndex": 1,
1302
+ "endIndex": 3
1303
+ },
1304
+ "isStatic": false,
1305
+ "isProtected": false,
1306
+ "isAbstract": false
1307
+ },
1042
1308
  {
1043
1309
  "kind": "Property",
1044
1310
  "canonicalReference": "@genesislcap/foundation-ui!ActionsMenu#rowData:member",
@@ -54125,7 +54391,7 @@
54125
54391
  },
54126
54392
  {
54127
54393
  "kind": "Content",
54128
- "text": "\"boolean\" | \"number\" | \"date\" | \"text\" | \"enum\""
54394
+ "text": "\"boolean\" | \"number\" | \"text\" | \"date\" | \"enum\""
54129
54395
  }
54130
54396
  ],
54131
54397
  "fileUrlPath": "src/filter-bar/filter-bar.utils.ts",
@@ -310,21 +310,39 @@ export declare class AccordionItem extends AccordionItem_2 {
310
310
  export declare type ActionMenuItem = {
311
311
  name: string | ((rowData: any) => string);
312
312
  callback: (rowData: any) => void | any;
313
- isDisabled?: (rowData: any) => boolean;
313
+ /** A fixed flag, or a function of the row data (the grid row from the cell params). */
314
+ isDisabled?: boolean | ((rowData: any) => boolean);
314
315
  color?: string;
316
+ icon?: {
317
+ variant?: IconStyle;
318
+ name: string;
319
+ size?: FaSize;
320
+ };
315
321
  };
316
322
 
323
+ /**
324
+ * The actions shown by the Actions Menu: a fixed array, or a function of the row data returning
325
+ * one (for row-scoped eligibility/permission filtering).
326
+ * @public
327
+ */
328
+ export declare type ActionMenuItems = ActionMenuItem[] | ((rowData: any) => ActionMenuItem[]);
329
+
317
330
  /**
318
331
  * @tagname %%prefix%%-actions-menu
319
332
  */
320
333
  export declare class ActionsMenu extends FoundationElement {
321
- actions: ActionMenuItem[];
334
+ actions: ActionMenuItems;
322
335
  isVertical: boolean;
323
336
  addDefaultActions: boolean;
324
337
  autoCloseOnAction: boolean;
325
338
  classNames: string;
326
339
  definition: any;
327
340
  name: string;
341
+ /**
342
+ * When set, the opener renders this icon instead of the `name` text (e.g. `ellipsis`
343
+ * for an icon-only "kebab" opener).
344
+ */
345
+ iconName: string;
328
346
  open: boolean;
329
347
  buttonAppearance: string;
330
348
  hideDisabled: boolean;
@@ -332,12 +350,25 @@ export declare class ActionsMenu extends FoundationElement {
332
350
  singleOption: ActionMenuItem;
333
351
  actionsMenu: HTMLElement;
334
352
  actionsOpener: HTMLElement;
353
+ private positionTracker?;
335
354
  disconnectedCallback(): void;
336
355
  private updateMenuPosition;
356
+ private startTrackingPosition;
357
+ private stopTrackingPosition;
337
358
  protected definitionChanged(oldValue: any, newValue: any): void;
338
359
  protected openChanged(): void;
339
360
  toggleActionsMenuVisibility(): void;
361
+ /**
362
+ * Syncs `open` when the native `popover="auto"` light-dismiss (outside click / Escape) closes
363
+ * the vertical menu without going through `toggleActionsMenuVisibility()`.
364
+ */
365
+ onPopoverToggle(event: Event): void;
366
+ /** Opens the icon-only opener from the keyboard, as a native button would. */
367
+ onIconOpenerKeydown(event: KeyboardEvent): boolean;
340
368
  onActionMenuItemClick(callback: (rowData: any) => void | any): void;
369
+ /** Resolves an action's `isDisabled` flag or row-data function for the current row. */
370
+ isActionDisabled(action: ActionMenuItem): boolean;
371
+ get resolvedActions(): ActionMenuItem[];
341
372
  get allActions(): ActionMenuItem[];
342
373
  get rowData(): any;
343
374
  getLabel(name: string | ((rowData: any) => string)): string;
@@ -5480,7 +5511,7 @@ export declare class Listbox extends Listbox_2 {
5480
5511
  export declare class ListboxOption extends ListboxOption_2 {
5481
5512
  }
5482
5513
 
5483
- export declare const mapType: (TYPE: string) => "boolean" | "number" | "date" | "text" | "enum";
5514
+ export declare const mapType: (TYPE: string) => "boolean" | "number" | "text" | "date" | "enum";
5484
5515
 
5485
5516
  export declare const MAX_DAYS = 31;
5486
5517