@kaizen/components 0.0.0-canary-04-titleblock-logic-20251211225600 → 0.0.0-canary-guidance-block-codemod-20251212045145

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 (44) hide show
  1. package/codemods/migrateGuidanceBlockActionsToActionsSlot/migrateGuidanceBlockActionsToActionsSlot.spec.ts +209 -26
  2. package/codemods/migrateGuidanceBlockActionsToActionsSlot/migrateGuidanceBlockActionsToActionsSlot.ts +24 -1
  3. package/codemods/migrateGuidanceBlockActionsToActionsSlot/transformActionsToActionsSlot.spec.ts +2 -1
  4. package/codemods/migrateGuidanceBlockActionsToActionsSlot/transformActionsToActionsSlot.ts +20 -0
  5. package/codemods/runV1Codemods/__snapshots__/runV1Codemods.spec.ts.snap +2 -3
  6. package/codemods/runV1Codemods/runV1Codemods.spec.ts +2 -3
  7. package/codemods/utils/transformV1ButtonPropsToButtonOrLinkButton.ts +40 -0
  8. package/dist/cjs/src/MenuV1/index.cjs +3 -4
  9. package/dist/cjs/src/MenuV1/subcomponents/MenuHeading/MenuHeading.cjs +27 -0
  10. package/dist/cjs/src/MenuV1/subcomponents/MenuHeading/MenuHeading.module.scss.cjs +6 -0
  11. package/dist/cjs/src/TitleBlock/TitleBlock.cjs +36 -32
  12. package/dist/cjs/src/TitleBlock/TitleBlock.module.scss.cjs +1 -5
  13. package/dist/cjs/src/TitleBlock/subcomponents/MainActions.cjs +45 -90
  14. package/dist/cjs/src/TitleBlock/subcomponents/MainActions.module.scss.cjs +1 -3
  15. package/dist/cjs/src/TitleBlock/subcomponents/MobileActions.cjs +306 -0
  16. package/dist/cjs/src/TitleBlock/subcomponents/MobileActions.module.scss.cjs +16 -0
  17. package/dist/cjs/src/TitleBlock/subcomponents/SecondaryActions.cjs +14 -60
  18. package/dist/esm/src/MenuV1/index.mjs +3 -5
  19. package/dist/esm/src/MenuV1/subcomponents/MenuHeading/MenuHeading.mjs +21 -0
  20. package/dist/esm/src/MenuV1/subcomponents/MenuHeading/MenuHeading.module.scss.mjs +4 -0
  21. package/dist/esm/src/TitleBlock/TitleBlock.mjs +37 -33
  22. package/dist/esm/src/TitleBlock/TitleBlock.module.scss.mjs +1 -5
  23. package/dist/esm/src/TitleBlock/subcomponents/MainActions.mjs +47 -92
  24. package/dist/esm/src/TitleBlock/subcomponents/MainActions.module.scss.mjs +1 -3
  25. package/dist/esm/src/TitleBlock/subcomponents/MobileActions.mjs +300 -0
  26. package/dist/esm/src/TitleBlock/subcomponents/MobileActions.module.scss.mjs +14 -0
  27. package/dist/esm/src/TitleBlock/subcomponents/SecondaryActions.mjs +14 -60
  28. package/dist/styles.css +206 -82
  29. package/dist/types/TitleBlock/TitleBlock.d.ts +1 -1
  30. package/dist/types/TitleBlock/subcomponents/MainActions.d.ts +3 -4
  31. package/dist/types/TitleBlock/subcomponents/MobileActions.d.ts +14 -0
  32. package/package.json +1 -1
  33. package/src/TitleBlock/TitleBlock.module.scss +14 -55
  34. package/src/TitleBlock/TitleBlock.spec.tsx +461 -33
  35. package/src/TitleBlock/TitleBlock.tsx +24 -7
  36. package/src/TitleBlock/_docs/TitleBlock.stories.tsx +5 -25
  37. package/src/TitleBlock/_mixins.scss +0 -6
  38. package/src/TitleBlock/subcomponents/MainActions.module.scss +2 -28
  39. package/src/TitleBlock/subcomponents/MainActions.tsx +70 -127
  40. package/src/TitleBlock/subcomponents/MobileActions.module.scss +208 -0
  41. package/src/TitleBlock/subcomponents/MobileActions.spec.tsx +210 -0
  42. package/src/TitleBlock/subcomponents/MobileActions.tsx +472 -0
  43. package/src/TitleBlock/subcomponents/SecondaryActions.tsx +45 -114
  44. package/src/TitleBlock/subcomponents/Toolbar.tsx +0 -1
@@ -12,6 +12,7 @@ var Select = require('../Select/Select.cjs');
12
12
  var Tag = require('../Tag/Tag.cjs');
13
13
  var useMediaQueries = require('../utils/useMediaQueries.cjs');
14
14
  var MainActions = require('./subcomponents/MainActions.cjs');
15
+ var MobileActions = require('./subcomponents/MobileActions.cjs');
15
16
  var SecondaryActions = require('./subcomponents/SecondaryActions.cjs');
16
17
  var utils = require('./utils.cjs');
17
18
  var TitleBlock_module = require('./TitleBlock.module.scss.cjs');
@@ -116,12 +117,6 @@ var Breadcrumb = function (_a) {
116
117
  name: "arrow_back",
117
118
  isPresentational: true,
118
119
  shouldMirrorInRTL: true
119
- })), React__default.default.createElement("div", {
120
- className: TitleBlock_module.staticIcon
121
- }, React__default.default.createElement(Icon.Icon, {
122
- name: "arrow_back",
123
- isPresentational: true,
124
- shouldMirrorInRTL: true
125
120
  })), React__default.default.createElement("span", {
126
121
  className: TitleBlock_module.breadcrumbTextLink,
127
122
  "data-automation-id": textAutomationId,
@@ -177,7 +172,7 @@ var renderNavigationTabs = function (navigationTabs, collapse, ariaLabel) {
177
172
  * {@link https://cultureamp.design/?path=/docs/components-titleblock-api-specification--docs Storybook}
178
173
  */
179
174
  var TitleBlock = function (_a) {
180
- var _b, _c, _d;
175
+ var _b, _c, _d, _e;
181
176
  var title = _a.title,
182
177
  variant = _a.variant,
183
178
  breadcrumb = _a.breadcrumb,
@@ -193,30 +188,32 @@ var TitleBlock = function (_a) {
193
188
  secondaryActions = _a.secondaryActions,
194
189
  secondaryOverflowMenuItems = _a.secondaryOverflowMenuItems,
195
190
  navigationTabs = _a.navigationTabs,
196
- _e = _a.collapseNavigationAreaWhenPossible,
197
- collapseNavigationAreaWhenPossible = _e === void 0 ? false : _e,
191
+ _f = _a.collapseNavigationAreaWhenPossible,
192
+ collapseNavigationAreaWhenPossible = _f === void 0 ? false : _f,
198
193
  textDirection = _a.textDirection,
199
194
  surveyStatus = _a.surveyStatus,
200
195
  id = _a.id,
201
- _f = _a.titleAutomationId,
202
- titleAutomationId = _f === void 0 ? 'TitleBlock__Title' : _f,
203
- _g = _a.avatarAutomationId,
204
- avatarAutomationId = _g === void 0 ? 'TitleBlock__Avatar' : _g,
205
- _h = _a.subtitleAutomationId,
206
- subtitleAutomationId = _h === void 0 ? 'TitleBlock__Subtitle' : _h,
207
- _j = _a.sectionTitleAutomationId,
208
- sectionTitleAutomationId = _j === void 0 ? 'TitleBlock__SectionTitle' : _j,
209
- _k = _a.sectionTitleDescriptionAutomationId,
210
- sectionTitleDescriptionAutomationId = _k === void 0 ? 'TitleBlock__SectionTitleDescription' : _k,
211
- _l = _a.breadcrumbAutomationId,
212
- breadcrumbAutomationId = _l === void 0 ? 'TitleBlock__Breadcrumb' : _l,
213
- _m = _a.breadcrumbTextAutomationId,
214
- breadcrumbTextAutomationId = _m === void 0 ? 'TitleBlock__BreadcrumbText' : _m;
196
+ _g = _a.titleAutomationId,
197
+ titleAutomationId = _g === void 0 ? 'TitleBlock__Title' : _g,
198
+ _h = _a.avatarAutomationId,
199
+ avatarAutomationId = _h === void 0 ? 'TitleBlock__Avatar' : _h,
200
+ _j = _a.subtitleAutomationId,
201
+ subtitleAutomationId = _j === void 0 ? 'TitleBlock__Subtitle' : _j,
202
+ _k = _a.sectionTitleAutomationId,
203
+ sectionTitleAutomationId = _k === void 0 ? 'TitleBlock__SectionTitle' : _k,
204
+ _l = _a.sectionTitleDescriptionAutomationId,
205
+ sectionTitleDescriptionAutomationId = _l === void 0 ? 'TitleBlock__SectionTitleDescription' : _l,
206
+ _m = _a.breadcrumbAutomationId,
207
+ breadcrumbAutomationId = _m === void 0 ? 'TitleBlock__Breadcrumb' : _m,
208
+ _o = _a.breadcrumbTextAutomationId,
209
+ breadcrumbTextAutomationId = _o === void 0 ? 'TitleBlock__BreadcrumbText' : _o,
210
+ _p = _a.autoHideMobileActionsMenu,
211
+ autoHideMobileActionsMenu = _p === void 0 ? false : _p;
215
212
  var hasNavigationTabs = navigationTabs && navigationTabs.length > 0;
216
213
  var collapseNavigationArea = collapseNavigationAreaWhenPossible && !hasNavigationTabs && secondaryActions === undefined;
217
- var _o = useMediaQueries.useMediaQueries().queries,
218
- isSmall = _o.isSmall,
219
- isMedium = _o.isMedium;
214
+ var _q = useMediaQueries.useMediaQueries().queries,
215
+ isSmall = _q.isSmall,
216
+ isMedium = _q.isMedium;
220
217
  var isSmallOrMediumViewport = isMedium || isSmall;
221
218
  return React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement("div", {
222
219
  id: id,
@@ -269,19 +266,19 @@ var TitleBlock = function (_a) {
269
266
  variant: "secondary",
270
267
  reversed: true,
271
268
  fullWidth: true
272
- })))))), ((_c = primaryAction !== null && primaryAction !== void 0 ? primaryAction : defaultAction) !== null && _c !== void 0 ? _c : secondaryActions) && React__default.default.createElement(MainActions.MainActions, {
269
+ })))))), ((_d = (_c = primaryAction !== null && primaryAction !== void 0 ? primaryAction : defaultAction) !== null && _c !== void 0 ? _c : secondaryActions) !== null && _d !== void 0 ? _d : secondaryOverflowMenuItems) && React__default.default.createElement(MainActions.MainActions, {
273
270
  primaryAction: primaryAction,
274
271
  defaultAction: defaultAction,
275
- secondaryActions: secondaryActions,
276
- secondaryOverflowMenuItems: secondaryOverflowMenuItems,
277
- reversed: utils.isReversed(variant)
272
+ reversed: utils.isReversed(variant),
273
+ overflowMenuItems: utils.createTabletOverflowMenuItems(secondaryActions, secondaryOverflowMenuItems),
274
+ showOverflowMenu: isSmallOrMediumViewport
278
275
  })))), React__default.default.createElement("div", {
279
276
  className: TitleBlock_module.rowBelowSeparator
280
277
  }, React__default.default.createElement("div", {
281
278
  className: TitleBlock_module.rowBelowSeparatorInner
282
279
  }, React__default.default.createElement("div", {
283
280
  className: TitleBlock_module.rowBelowSeparatorInnerContent
284
- }, ((_d = sectionTitle !== null && sectionTitle !== void 0 ? sectionTitle : sectionTitleDescription) !== null && _d !== void 0 ? _d : renderSectionTitle) && React__default.default.createElement("div", {
281
+ }, ((_e = sectionTitle !== null && sectionTitle !== void 0 ? sectionTitle : sectionTitleDescription) !== null && _e !== void 0 ? _e : renderSectionTitle) && React__default.default.createElement("div", {
285
282
  className: TitleBlock_module.sectionTitleContainer
286
283
  }, React__default.default.createElement("div", {
287
284
  className: TitleBlock_module.sectionTitleInner
@@ -294,7 +291,14 @@ var TitleBlock = function (_a) {
294
291
  secondaryActions: secondaryActions,
295
292
  secondaryOverflowMenuItems: secondaryOverflowMenuItems,
296
293
  reversed: utils.isReversed(variant)
297
- }))))));
294
+ })))), React__default.default.createElement(MobileActions.MobileActions, {
295
+ primaryAction: primaryAction,
296
+ defaultAction: defaultAction,
297
+ secondaryActions: secondaryActions,
298
+ secondaryOverflowMenuItems: secondaryOverflowMenuItems,
299
+ drawerHandleLabelIconPosition: primaryAction && 'iconPosition' in primaryAction ? primaryAction.iconPosition : undefined,
300
+ autoHide: autoHideMobileActionsMenu
301
+ })));
298
302
  };
299
303
  TitleBlock.displayName = 'TitleBlock';
300
304
  exports.TitleBlock = TitleBlock;
@@ -47,13 +47,9 @@ var styles = {
47
47
  "navigationTabEdgeShadowRight": "TitleBlock-module_navigationTabEdgeShadowRight__xkIWc",
48
48
  "navigationTabEdgeShadowLeft": "TitleBlock-module_navigationTabEdgeShadowLeft__9pGhR",
49
49
  "secondaryActionsContainer": "TitleBlock-module_secondaryActionsContainer__-4q0l",
50
- "secondaryOverflowCombinedMenu": "TitleBlock-module_secondaryOverflowCombinedMenu__CTddK",
51
- "secondaryButtonContainer": "TitleBlock-module_secondaryButtonContainer__xFL9X",
52
- "secondaryOverflowMenu": "TitleBlock-module_secondaryOverflowMenu__gvmgW",
53
50
  "slide-fade": "TitleBlock-module_slide-fade__o5TnP",
54
51
  "reverse-slide-fade": "TitleBlock-module_reverse-slide-fade__LZZ98",
55
52
  "breadcrumbText": "TitleBlock-module_breadcrumbText__vDi0k",
56
- "circle": "TitleBlock-module_circle__68z-T",
57
- "staticIcon": "TitleBlock-module_staticIcon__5jeBS"
53
+ "circle": "TitleBlock-module_circle__68z-T"
58
54
  };
59
55
  module.exports = styles;
@@ -6,8 +6,6 @@ var Button = require('../../ButtonV1/Button/Button.cjs');
6
6
  var IconButton = require('../../ButtonV1/IconButton/IconButton.cjs');
7
7
  var Icon = require('../../Icon/Icon.cjs');
8
8
  var index = require('../../MenuV1/index.cjs');
9
- require('../TitleBlock.cjs');
10
- require('./NavigationTabs.cjs');
11
9
  var constants = require('../constants.cjs');
12
10
  var utils = require('../utils.cjs');
13
11
  var TitleBlockMenuItem = require('./TitleBlockMenuItem.cjs');
@@ -19,94 +17,16 @@ function _interopDefault(e) {
19
17
  };
20
18
  }
21
19
  var React__default = /*#__PURE__*/_interopDefault(React);
22
- var renderSecondaryAndOverflowMenu = function (secondaryOverflowMenuItems, reversed) {
23
- if (!secondaryOverflowMenuItems) return undefined;
24
- return React__default.default.createElement(index.Menu, {
25
- align: "right",
26
- button: React__default.default.createElement(IconButton.IconButton, {
27
- label: 'Open secondary and overflow menu',
28
- reversed: reversed,
29
- icon: React__default.default.createElement(Icon.Icon, {
30
- name: "more_horiz",
31
- isPresentational: true
32
- }),
33
- id: constants.TITLE_BLOCK_ZEN_SECONDARY_MENU_HTML_ID,
34
- classNameOverride: MainActions_module.overflowMenuButton
35
- })
36
- }, React__default.default.createElement(index.MenuList, null, secondaryOverflowMenuItems.map(function (menuItem, i) {
37
- return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({
38
- key: i
39
- }, menuItem));
40
- })));
41
- };
42
20
  var MainActions = function (_a) {
43
- var _b, _c, _d;
21
+ var _b, _c, _d, _e;
44
22
  var primaryAction = _a.primaryAction,
45
23
  defaultAction = _a.defaultAction,
46
- secondaryActions = _a.secondaryActions,
47
- secondaryOverflowMenuItems = _a.secondaryOverflowMenuItems,
48
- _e = _a.reversed,
49
- reversed = _e === void 0 ? false : _e;
24
+ _f = _a.reversed,
25
+ reversed = _f === void 0 ? false : _f,
26
+ overflowMenuItems = _a.overflowMenuItems,
27
+ _g = _a.showOverflowMenu,
28
+ showOverflowMenu = _g === void 0 ? false : _g;
50
29
  var items;
51
- // Build combined secondary + overflow menu items once, to be spread into the toolbar items
52
- var secondaryAndOverflowMenu = [];
53
- // Convert defaultAction to menu item format and prepend to combined list
54
- var defaultActionMenuItem;
55
- if (defaultAction) {
56
- if ('component' in defaultAction) {
57
- defaultActionMenuItem = defaultAction;
58
- } else if ('onClick' in defaultAction) {
59
- defaultActionMenuItem = {
60
- label: defaultAction.label,
61
- icon: defaultAction.icon,
62
- onClick: defaultAction.onClick,
63
- disabled: defaultAction.disabled
64
- };
65
- } else if ('href' in defaultAction) {
66
- defaultActionMenuItem = {
67
- label: defaultAction.label,
68
- icon: defaultAction.icon,
69
- href: defaultAction.href,
70
- disabled: defaultAction.disabled
71
- };
72
- }
73
- }
74
- var combinedSecondaryOverflowItems = utils.createTabletOverflowMenuItems(secondaryActions, secondaryOverflowMenuItems);
75
- // Prepend defaultAction to the combined list if it exists
76
- var allMenuItems = defaultActionMenuItem ? tslib.__spreadArray([defaultActionMenuItem], combinedSecondaryOverflowItems, true) : combinedSecondaryOverflowItems;
77
- if (allMenuItems.length > 0) {
78
- secondaryAndOverflowMenu.push({
79
- key: 'overflowMenu',
80
- node: renderSecondaryAndOverflowMenu(allMenuItems, reversed)
81
- });
82
- }
83
- var defaultActionItem = defaultAction ? [{
84
- key: 'defaultAction',
85
- node: React__default.default.createElement(Button.Button, tslib.__assign({
86
- classNameOverride: MainActions_module.defaultActionButton
87
- }, defaultAction, {
88
- reversed: (_b = defaultAction.reversed) !== null && _b !== void 0 ? _b : reversed,
89
- "data-automation-id": "title-block-default-action-button",
90
- "data-testid": "title-block-default-action-button"
91
- }))
92
- }] : [];
93
- var defaultActionItemMinimized = defaultAction ? [{
94
- key: 'defaultActionMinimized',
95
- node: React__default.default.createElement("div", {
96
- className: MainActions_module.defaultActionButtonMinimized
97
- }, React__default.default.createElement(index.Menu, {
98
- align: "right",
99
- button: React__default.default.createElement(IconButton.IconButton, {
100
- label: 'Open default action overflow menu',
101
- reversed: reversed,
102
- icon: React__default.default.createElement(Icon.Icon, {
103
- name: "more_horiz",
104
- isPresentational: true
105
- }),
106
- id: constants.TITLE_BLOCK_ZEN_SECONDARY_MENU_HTML_ID
107
- })
108
- }, React__default.default.createElement(index.MenuList, null, defaultActionMenuItem && React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, defaultActionMenuItem)))))
109
- }] : [];
110
30
  if (primaryAction && utils.isMenuGroupNotButton(primaryAction)) {
111
31
  var menuContent = primaryAction.menuItems.map(function (item, idx) {
112
32
  return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, item, {
@@ -115,7 +35,14 @@ var MainActions = function (_a) {
115
35
  "data-testid": "main-action-primary-menu-item-".concat(idx)
116
36
  }));
117
37
  });
118
- items = tslib.__spreadArray(tslib.__spreadArray(tslib.__spreadArray([], defaultActionItem, true), defaultActionItemMinimized, true), primaryAction ? [{
38
+ items = tslib.__spreadArray(tslib.__spreadArray([], defaultAction ? [{
39
+ key: 'defaultAction',
40
+ node: React__default.default.createElement(Button.Button, tslib.__assign({}, defaultAction, {
41
+ reversed: (_b = defaultAction.reversed) !== null && _b !== void 0 ? _b : reversed,
42
+ "data-automation-id": "title-block-default-action-button",
43
+ "data-testid": "title-block-default-action-button"
44
+ }))
45
+ }] : [], true), primaryAction ? [{
119
46
  key: 'primaryAction',
120
47
  node: React__default.default.createElement(index.Menu, {
121
48
  align: "right",
@@ -137,11 +64,18 @@ var MainActions = function (_a) {
137
64
  }, React__default.default.createElement(index.MenuList, null, menuContent))
138
65
  }] : [], true);
139
66
  } else {
140
- items = tslib.__spreadArray(tslib.__spreadArray(tslib.__spreadArray([], defaultActionItem, true), defaultActionItemMinimized, true), primaryAction ? [{
67
+ items = tslib.__spreadArray(tslib.__spreadArray([], defaultAction ? [{
68
+ key: 'defaultAction',
69
+ node: React__default.default.createElement(Button.Button, tslib.__assign({}, defaultAction, {
70
+ reversed: (_c = defaultAction.reversed) !== null && _c !== void 0 ? _c : reversed,
71
+ "data-automation-id": "title-block-default-action-button",
72
+ "data-testid": "title-block-default-action-button"
73
+ }))
74
+ }] : [], true), primaryAction ? [{
141
75
  key: 'primaryAction',
142
76
  node: React__default.default.createElement(Button.Button, tslib.__assign({}, primaryAction, {
143
- primary: (_c = primaryAction.primary) !== null && _c !== void 0 ? _c : true,
144
- reversed: (_d = primaryAction.reversed) !== null && _d !== void 0 ? _d : reversed,
77
+ primary: (_d = primaryAction.primary) !== null && _d !== void 0 ? _d : true,
78
+ reversed: (_e = primaryAction.reversed) !== null && _e !== void 0 ? _e : reversed,
145
79
  "data-automation-id": "title-block-primary-action-button",
146
80
  "data-testid": "title-block-primary-action-button",
147
81
  badge: primaryAction.badge ? tslib.__assign(tslib.__assign({}, primaryAction.badge), {
@@ -150,6 +84,27 @@ var MainActions = function (_a) {
150
84
  }))
151
85
  }] : [], true);
152
86
  }
87
+ if (overflowMenuItems && showOverflowMenu && overflowMenuItems.length > 0) {
88
+ items = tslib.__spreadArray([{
89
+ key: 'overflowMenu',
90
+ node: React__default.default.createElement(index.Menu, {
91
+ align: "right",
92
+ button: React__default.default.createElement(IconButton.IconButton, {
93
+ id: constants.TITLE_BLOCK_ZEN_SECONDARY_MENU_HTML_ID,
94
+ label: "Open secondary menu",
95
+ reversed: reversed,
96
+ icon: React__default.default.createElement(Icon.Icon, {
97
+ name: "more_horiz",
98
+ isPresentational: true
99
+ })
100
+ })
101
+ }, React__default.default.createElement(index.MenuList, null, overflowMenuItems.map(function (menuItem, idx) {
102
+ return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, menuItem, {
103
+ key: "main-action-overflow-item-menu-item-".concat(idx)
104
+ }));
105
+ })))
106
+ }], items, true);
107
+ }
153
108
  return React__default.default.createElement("div", {
154
109
  className: MainActions_module.mainActionsContainer
155
110
  }, React__default.default.createElement(Toolbar.Toolbar, {
@@ -1,8 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var styles = {
4
- "mainActionsContainer": "MainActions-module_mainActionsContainer__pk-78",
5
- "defaultActionButtonMinimized": "MainActions-module_defaultActionButtonMinimized__XePRS",
6
- "defaultActionButton": "MainActions-module_defaultActionButton__VbER1"
4
+ "mainActionsContainer": "MainActions-module_mainActionsContainer__pk-78"
7
5
  };
8
6
  module.exports = styles;
@@ -0,0 +1,306 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var classnames = require('classnames');
6
+ var reactFocusOn = require('react-focus-on');
7
+ var Icon = require('../../Icon/Icon.cjs');
8
+ var index = require('../../MenuV1/index.cjs');
9
+ var constants = require('../constants.cjs');
10
+ var utils = require('../utils.cjs');
11
+ var TitleBlockMenuItem = require('./TitleBlockMenuItem.cjs');
12
+ var MobileActions_module = require('./MobileActions.module.scss.cjs');
13
+ function _interopDefault(e) {
14
+ return e && e.__esModule ? e : {
15
+ default: e
16
+ };
17
+ }
18
+ var React__default = /*#__PURE__*/_interopDefault(React);
19
+ var classnames__default = /*#__PURE__*/_interopDefault(classnames);
20
+ var menuItemIsLink = function (item) {
21
+ return 'href' in item;
22
+ };
23
+ var defaultActionIsLink = function (action) {
24
+ return 'href' in action;
25
+ };
26
+ var defaultActionIsButton = function (action) {
27
+ return !('href' in action) && 'onClick' in action || 'component' in action;
28
+ };
29
+ var filterActions = function (menuItems, filterType) {
30
+ return menuItems.filter(function (item) {
31
+ return filterType === 'link' ? menuItemIsLink(item) : !menuItemIsLink(item);
32
+ });
33
+ };
34
+ /** Returns a filtered array of TitleBlockMenuItem based on actionType
35
+ * This is use to sort a selectively render the action into a specifc order
36
+ */
37
+ var renderPrimaryActionDrawerContent = function (primaryAction, actionType) {
38
+ if (!primaryAction) return null;
39
+ if (utils.isMenuGroupNotButton(primaryAction)) {
40
+ var filteredActions = filterActions(primaryAction.menuItems, actionType);
41
+ return filteredActions.map(function (item, idx) {
42
+ var itemType = menuItemIsLink(item) ? 'link' : 'action';
43
+ return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, item, {
44
+ key: "title-block-mobile-actions-primary-".concat(itemType, "-").concat(idx),
45
+ "data-automation-id": "title-block-mobile-actions-primary-".concat(itemType, "-").concat(idx),
46
+ "data-testid": "title-block-mobile-actions-primary-".concat(itemType, "-").concat(idx)
47
+ }));
48
+ });
49
+ }
50
+ return null;
51
+ };
52
+ var renderDefaultLink = function (defaultAction) {
53
+ if (!defaultActionIsLink(defaultAction)) return;
54
+ if ('component' in defaultAction) {
55
+ return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, defaultAction, {
56
+ key: "title-block-mobile-actions-default-link",
57
+ "data-automation-id": "title-block-mobile-actions-default-link",
58
+ "data-testid": "title-block-mobile-actions-default-link"
59
+ }));
60
+ }
61
+ return React__default.default.createElement(index.MenuItem, {
62
+ href: defaultAction.href,
63
+ label: defaultAction.label,
64
+ icon: defaultAction.icon,
65
+ disabled: defaultAction.disabled,
66
+ key: "title-block-mobile-actions-default-link",
67
+ "data-automation-id": "title-block-mobile-actions-default-link",
68
+ "data-testid": "title-block-mobile-actions-default-link",
69
+ id: defaultAction.id
70
+ });
71
+ };
72
+ var renderDefaultAction = function (defaultAction) {
73
+ if (!defaultActionIsLink(defaultAction)) {
74
+ return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, defaultAction, {
75
+ key: "title-block-mobile-actions-default-action",
76
+ "data-automation-id": "title-block-mobile-actions-default-action",
77
+ "data-testid": "title-block-mobile-actions-default-action"
78
+ }));
79
+ }
80
+ return null;
81
+ };
82
+ var renderSecondaryActions = function (secondaryActions) {
83
+ if (!secondaryActions) return null;
84
+ var secondaryActionMenuItems = utils.convertSecondaryActionsToMenuItems(secondaryActions);
85
+ return secondaryActionMenuItems.map(function (item, idx) {
86
+ return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, item, {
87
+ key: "title-block-mobile-actions-secondary-action-".concat(idx),
88
+ "data-testid": "title-block-mobile-actions-secondary-action"
89
+ }));
90
+ });
91
+ };
92
+ var renderSecondaryOverflowMenuItems = function (secondaryOverflowMenuItems) {
93
+ return secondaryOverflowMenuItems.map(function (item, idx) {
94
+ return React__default.default.createElement(TitleBlockMenuItem.TitleBlockMenuItem, tslib.__assign({}, item, {
95
+ key: "title-block-mobile-actions-overflow-menu-item-".concat(idx),
96
+ "data-testid": "title-block-mobile-actions-overflow-menu-item"
97
+ }));
98
+ });
99
+ };
100
+ var DrawerMenuContent = function (_a) {
101
+ var _b, _c, _d;
102
+ var primaryAction = _a.primaryAction,
103
+ defaultAction = _a.defaultAction,
104
+ secondaryActions = _a.secondaryActions,
105
+ secondaryOverflowMenuItems = _a.secondaryOverflowMenuItems;
106
+ var showOtherActionsHeading = (_c = (_b = defaultAction && defaultActionIsButton(defaultAction)) !== null && _b !== void 0 ? _b : secondaryActions) !== null && _c !== void 0 ? _c : secondaryOverflowMenuItems;
107
+ return React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(index.MenuList, null, primaryAction && renderPrimaryActionDrawerContent(primaryAction, 'link'), defaultAction && renderDefaultLink(defaultAction), primaryAction && renderPrimaryActionDrawerContent(primaryAction, 'action')), ((_d = defaultAction !== null && defaultAction !== void 0 ? defaultAction : secondaryActions) !== null && _d !== void 0 ? _d : secondaryOverflowMenuItems) && React__default.default.createElement(index.MenuList, {
108
+ heading: showOtherActionsHeading ? React__default.default.createElement(index.MenuHeading, null, "Other actions") : undefined
109
+ }, defaultAction && renderDefaultAction(defaultAction), secondaryActions && renderSecondaryActions(secondaryActions), secondaryOverflowMenuItems && renderSecondaryOverflowMenuItems(secondaryOverflowMenuItems)));
110
+ };
111
+ var renderDrawerHandleLabel = function (label, icon, drawerHandleLabelIconPosition) {
112
+ if (drawerHandleLabelIconPosition === 'end') {
113
+ return React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement("span", {
114
+ className: MobileActions_module.drawerHandleLabelText,
115
+ "data-testid": "drawer-handle-lable-text"
116
+ }, label), React__default.default.createElement(React__default.default.Fragment, null, icon && React__default.default.createElement("span", {
117
+ className: MobileActions_module.drawerHandleIcon
118
+ }, icon)));
119
+ } else {
120
+ return React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(React__default.default.Fragment, null, icon && React__default.default.createElement("span", {
121
+ className: MobileActions_module.drawerHandleIcon
122
+ }, icon)), React__default.default.createElement("span", {
123
+ className: MobileActions_module.drawerHandleLabelText,
124
+ "data-testid": "drawer-handle-lable-text"
125
+ }, label));
126
+ }
127
+ };
128
+ var ButtonOrLink = function (_a) {
129
+ var action = _a.action,
130
+ children = _a.children;
131
+ if (typeof action === 'object' && 'onClick' in action && 'href' in action) {
132
+ return React__default.default.createElement("a", {
133
+ onClick: action.onClick,
134
+ href: action.href,
135
+ className: classnames__default.default(MobileActions_module.mobileActionsPrimaryLabel, MobileActions_module.mobileActionsPrimaryButton),
136
+ "data-testid": "title-block-mobile-actions-primary-button"
137
+ }, children);
138
+ }
139
+ if (typeof action === 'function') {
140
+ return React__default.default.createElement("button", {
141
+ type: "button",
142
+ onClick: action,
143
+ className: classnames__default.default(MobileActions_module.mobileActionsPrimaryLabel, MobileActions_module.mobileActionsPrimaryButton),
144
+ "data-testid": "title-block-mobile-actions-primary-button"
145
+ }, children);
146
+ }
147
+ if (typeof action === 'string') {
148
+ return React__default.default.createElement("a", {
149
+ href: action,
150
+ className: classnames__default.default(MobileActions_module.mobileActionsPrimaryLabel, MobileActions_module.mobileActionsPrimaryButton),
151
+ "data-testid": "title-block-mobile-actions-primary-button"
152
+ }, children);
153
+ }
154
+ // when there's no action (e.g. primary button is disabled)
155
+ return React__default.default.createElement("button", {
156
+ type: "button",
157
+ className: classnames__default.default(MobileActions_module.mobileActionsPrimaryLabel, MobileActions_module.mobileActionsPrimaryButton),
158
+ "data-testid": "title-block-mobile-actions-primary-button"
159
+ }, children);
160
+ };
161
+ var getAction = function (primaryAction) {
162
+ if (primaryAction && !primaryAction.disabled) {
163
+ if (primaryAction.onClick && primaryAction.href) {
164
+ return {
165
+ href: primaryAction.href,
166
+ onClick: primaryAction.onClick
167
+ };
168
+ }
169
+ if (primaryAction.onClick) {
170
+ return primaryAction.onClick;
171
+ }
172
+ if (primaryAction.href) {
173
+ return primaryAction.href;
174
+ }
175
+ }
176
+ return undefined;
177
+ };
178
+ var DrawerHandle = function (_a) {
179
+ var _b;
180
+ var primaryAction = _a.primaryAction,
181
+ secondaryActions = _a.secondaryActions,
182
+ defaultAction = _a.defaultAction,
183
+ secondaryOverflowMenuItems = _a.secondaryOverflowMenuItems,
184
+ drawerHandleLabelIconPosition = _a.drawerHandleLabelIconPosition,
185
+ toggleDisplay = _a.toggleDisplay,
186
+ isOpen = _a.isOpen;
187
+ var showDrawer = (_b = defaultAction !== null && defaultAction !== void 0 ? defaultAction : secondaryActions) !== null && _b !== void 0 ? _b : secondaryOverflowMenuItems;
188
+ if (primaryAction) {
189
+ // If the primary action is a menu
190
+ if (utils.isMenuGroupNotButton(primaryAction)) {
191
+ return React__default.default.createElement("div", {
192
+ className: classnames__default.default(MobileActions_module.mobileActionsTopRow, MobileActions_module.mobileActionsTopRowSingleButton),
193
+ "data-testid": "title-block-mobile-actions-drawer-handle"
194
+ }, React__default.default.createElement("button", {
195
+ type: "button",
196
+ className: classnames__default.default(MobileActions_module.mobileActionsExpandButton, MobileActions_module.mobileActionsPrimaryLabel),
197
+ onClick: toggleDisplay,
198
+ "aria-expanded": isOpen
199
+ }, primaryAction.label, React__default.default.createElement("span", {
200
+ className: MobileActions_module.mobileActionsChevronSquare
201
+ }, React__default.default.createElement(Icon.Icon, {
202
+ name: isOpen ? 'keyboard_arrow_down' : 'keyboard_arrow_up',
203
+ isPresentational: true
204
+ }))));
205
+ }
206
+ // If the primary action is a button, or has no onClick/href/action
207
+ return React__default.default.createElement("div", {
208
+ className: classnames__default.default(MobileActions_module.mobileActionsTopRow, !showDrawer && MobileActions_module.mobileActionsTopRowSingleButton),
209
+ "data-testid": "title-block-mobile-actions-drawer-handle"
210
+ }, 'component' in primaryAction ? React__default.default.createElement(primaryAction.component, tslib.__assign({
211
+ className: classnames__default.default(MobileActions_module.mobileActionsPrimaryLabel, MobileActions_module.mobileActionsPrimaryButton)
212
+ }, primaryAction), primaryAction.label && renderDrawerHandleLabel(primaryAction.label, primaryAction.icon, drawerHandleLabelIconPosition)) : React__default.default.createElement(ButtonOrLink, {
213
+ action: getAction(primaryAction)
214
+ }, renderDrawerHandleLabel(primaryAction.label, primaryAction.icon, drawerHandleLabelIconPosition)), showDrawer && React__default.default.createElement("button", {
215
+ type: "button",
216
+ className: MobileActions_module.mobileActionsExpandButton,
217
+ onClick: toggleDisplay,
218
+ "aria-expanded": isOpen,
219
+ id: constants.TITLE_BLOCK_ZEN_OTHER_ACTIONS_HTML_ID,
220
+ "aria-label": "Other actions"
221
+ }, React__default.default.createElement(Icon.Icon, {
222
+ name: isOpen ? 'keyboard_arrow_down' : 'keyboard_arrow_up',
223
+ isPresentational: true
224
+ })));
225
+ }
226
+ // if there are default/secondary actions but no primary action
227
+ if (showDrawer) {
228
+ return React__default.default.createElement("div", {
229
+ className: classnames__default.default(MobileActions_module.mobileActionsTopRow, MobileActions_module.mobileActionsTopRowSingleButton),
230
+ "data-testid": "title-block-mobile-actions-drawer-handle"
231
+ }, React__default.default.createElement("button", {
232
+ type: "button",
233
+ className: classnames__default.default(MobileActions_module.mobileActionsExpandButton, MobileActions_module.mobileActionsPrimaryLabel),
234
+ onClick: toggleDisplay,
235
+ "aria-expanded": isOpen,
236
+ id: constants.TITLE_BLOCK_ZEN_OTHER_ACTIONS_HTML_ID
237
+ }, renderDrawerHandleLabel('Other actions'), React__default.default.createElement("span", {
238
+ className: MobileActions_module.mobileActionsChevronSquare
239
+ }, React__default.default.createElement(Icon.Icon, {
240
+ name: isOpen ? 'keyboard_arrow_down' : 'keyboard_arrow_up',
241
+ isPresentational: true
242
+ }))));
243
+ }
244
+ return null;
245
+ };
246
+ var MobileActions = function (_a) {
247
+ var _b, _c;
248
+ var primaryAction = _a.primaryAction,
249
+ defaultAction = _a.defaultAction,
250
+ secondaryActions = _a.secondaryActions,
251
+ secondaryOverflowMenuItems = _a.secondaryOverflowMenuItems,
252
+ drawerHandleLabelIconPosition = _a.drawerHandleLabelIconPosition,
253
+ _d = _a.autoHide,
254
+ autoHide = _d === void 0 ? false : _d;
255
+ var _e = React.useState(false),
256
+ isOpen = _e[0],
257
+ setIsOpen = _e[1];
258
+ var menuContent = React__default.default.createRef();
259
+ var toggleDisplay = function () {
260
+ setIsOpen(!isOpen);
261
+ };
262
+ // This callback handler will not run when autoHide === "off"
263
+ var handleDocumentClickForAutoHide = React.useCallback(function (e) {
264
+ var _a;
265
+ if (isOpen && e.target instanceof Node && ((_a = menuContent.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
266
+ setIsOpen(false);
267
+ }
268
+ },
269
+ // @todo: Fix if possible - avoiding breaking in eslint upgrade
270
+ // eslint-disable-next-line react-hooks/exhaustive-deps
271
+ [menuContent]);
272
+ React.useEffect(function () {
273
+ if (autoHide) {
274
+ document.addEventListener('click', handleDocumentClickForAutoHide, true);
275
+ }
276
+ return function () {
277
+ if (autoHide) {
278
+ document.removeEventListener('click', handleDocumentClickForAutoHide, true);
279
+ }
280
+ };
281
+ }, [autoHide, handleDocumentClickForAutoHide]);
282
+ return React__default.default.createElement("div", {
283
+ className: classnames__default.default(MobileActions_module.mobileActionsContainer, isOpen && MobileActions_module.isOpen)
284
+ }, React__default.default.createElement(reactFocusOn.FocusOn, {
285
+ enabled: isOpen,
286
+ scrollLock: false
287
+ }, React__default.default.createElement(DrawerHandle, {
288
+ primaryAction: primaryAction,
289
+ secondaryActions: secondaryActions,
290
+ defaultAction: defaultAction,
291
+ secondaryOverflowMenuItems: secondaryOverflowMenuItems,
292
+ drawerHandleLabelIconPosition: drawerHandleLabelIconPosition,
293
+ toggleDisplay: toggleDisplay,
294
+ isOpen: isOpen
295
+ }), ((_c = (_b = defaultAction !== null && defaultAction !== void 0 ? defaultAction : secondaryActions) !== null && _b !== void 0 ? _b : secondaryOverflowMenuItems) !== null && _c !== void 0 ? _c : primaryAction && utils.isMenuGroupNotButton(primaryAction)) && React__default.default.createElement("div", {
296
+ ref: menuContent,
297
+ className: MobileActions_module.mobileActionsMenuContainer
298
+ }, React__default.default.createElement(DrawerMenuContent, {
299
+ primaryAction: primaryAction,
300
+ defaultAction: defaultAction,
301
+ secondaryActions: secondaryActions,
302
+ secondaryOverflowMenuItems: secondaryOverflowMenuItems
303
+ }))));
304
+ };
305
+ MobileActions.displayName = 'MobileActions';
306
+ exports.MobileActions = MobileActions;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var styles = {
4
+ "mobileActionsContainer": "MobileActions-module_mobileActionsContainer__XoepA",
5
+ "isOpen": "MobileActions-module_isOpen__D40v5",
6
+ "mobileActionsMenuContainer": "MobileActions-module_mobileActionsMenuContainer__x--Eb",
7
+ "mobileActionsTopRow": "MobileActions-module_mobileActionsTopRow__RXNFZ",
8
+ "mobileActionsTopRowSingleButton": "MobileActions-module_mobileActionsTopRowSingleButton__5EjiI",
9
+ "drawerHandleIcon": "MobileActions-module_drawerHandleIcon__q9ewm",
10
+ "drawerHandleLabelText": "MobileActions-module_drawerHandleLabelText__MwJTA",
11
+ "mobileActionsPrimaryLabel": "MobileActions-module_mobileActionsPrimaryLabel__8yfuH",
12
+ "mobileActionsPrimaryButton": "MobileActions-module_mobileActionsPrimaryButton__Xsvo-",
13
+ "mobileActionsExpandButton": "MobileActions-module_mobileActionsExpandButton__XuHNU",
14
+ "mobileActionsChevronSquare": "MobileActions-module_mobileActionsChevronSquare__SPIsI"
15
+ };
16
+ module.exports = styles;