@workday/canvas-kit-react 9.0.0-alpha.410-next.12 → 9.0.0-alpha.412-next.14

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 (188) hide show
  1. package/collection/lib/keyUtils.ts +88 -0
  2. package/collection/lib/useBaseListModel.tsx +24 -12
  3. package/collection/lib/useCursorListModel.tsx +102 -78
  4. package/collection/lib/useListItemRovingFocus.tsx +17 -100
  5. package/collection/lib/useListResetCursorOnBlur.tsx +1 -1
  6. package/dist/commonjs/action-bar/lib/ActionBar.d.ts +104 -0
  7. package/dist/commonjs/action-bar/lib/ActionBar.d.ts.map +1 -1
  8. package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts +3 -0
  9. package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts.map +1 -1
  10. package/dist/commonjs/action-bar/lib/ActionBarList.d.ts +3 -0
  11. package/dist/commonjs/action-bar/lib/ActionBarList.d.ts.map +1 -1
  12. package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts +4 -0
  13. package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
  14. package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts +55 -0
  15. package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts.map +1 -1
  16. package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts +107 -0
  17. package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
  18. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +4 -0
  19. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
  20. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts +3 -0
  21. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
  22. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts +2 -0
  23. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
  24. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsMenu.d.ts +49 -0
  25. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsMenu.d.ts.map +1 -1
  26. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +4 -0
  27. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
  28. package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +55 -0
  29. package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
  30. package/dist/commonjs/collection/lib/ListBox.d.ts +39 -0
  31. package/dist/commonjs/collection/lib/ListBox.d.ts.map +1 -1
  32. package/dist/commonjs/collection/lib/keyUtils.d.ts +26 -0
  33. package/dist/commonjs/collection/lib/keyUtils.d.ts.map +1 -0
  34. package/dist/commonjs/collection/lib/keyUtils.js +80 -0
  35. package/dist/commonjs/collection/lib/useBaseListModel.d.ts +20 -10
  36. package/dist/commonjs/collection/lib/useBaseListModel.d.ts.map +1 -1
  37. package/dist/commonjs/collection/lib/useBaseListModel.js +21 -10
  38. package/dist/commonjs/collection/lib/useCursorListModel.d.ts +171 -10
  39. package/dist/commonjs/collection/lib/useCursorListModel.d.ts.map +1 -1
  40. package/dist/commonjs/collection/lib/useCursorListModel.js +97 -64
  41. package/dist/commonjs/collection/lib/useGridModel.d.ts +39 -0
  42. package/dist/commonjs/collection/lib/useGridModel.d.ts.map +1 -1
  43. package/dist/commonjs/collection/lib/useListItemRegister.d.ts +1 -0
  44. package/dist/commonjs/collection/lib/useListItemRegister.d.ts.map +1 -1
  45. package/dist/commonjs/collection/lib/useListItemRovingFocus.d.ts +1 -24
  46. package/dist/commonjs/collection/lib/useListItemRovingFocus.d.ts.map +1 -1
  47. package/dist/commonjs/collection/lib/useListItemRovingFocus.js +18 -94
  48. package/dist/commonjs/collection/lib/useListItemSelect.d.ts +1 -0
  49. package/dist/commonjs/collection/lib/useListItemSelect.d.ts.map +1 -1
  50. package/dist/commonjs/collection/lib/useListModel.d.ts +39 -0
  51. package/dist/commonjs/collection/lib/useListModel.d.ts.map +1 -1
  52. package/dist/commonjs/collection/lib/useListResetCursorOnBlur.d.ts +1 -0
  53. package/dist/commonjs/collection/lib/useListResetCursorOnBlur.d.ts.map +1 -1
  54. package/dist/commonjs/collection/lib/useListResetCursorOnBlur.js +2 -2
  55. package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts +1 -0
  56. package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
  57. package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts +1 -0
  58. package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
  59. package/dist/commonjs/collection/lib/useOverflowListModel.d.ts +51 -0
  60. package/dist/commonjs/collection/lib/useOverflowListModel.d.ts.map +1 -1
  61. package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts +1 -0
  62. package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts.map +1 -1
  63. package/dist/commonjs/collection/lib/useSelectionListModel.d.ts +39 -0
  64. package/dist/commonjs/collection/lib/useSelectionListModel.d.ts.map +1 -1
  65. package/dist/commonjs/menu/lib/Menu.d.ts +48 -0
  66. package/dist/commonjs/menu/lib/Menu.d.ts.map +1 -1
  67. package/dist/commonjs/menu/lib/MenuCard.d.ts +2 -0
  68. package/dist/commonjs/menu/lib/MenuCard.d.ts.map +1 -1
  69. package/dist/commonjs/menu/lib/MenuContextTarget.d.ts +3 -0
  70. package/dist/commonjs/menu/lib/MenuContextTarget.d.ts.map +1 -1
  71. package/dist/commonjs/menu/lib/MenuItem.d.ts +2 -2
  72. package/dist/commonjs/menu/lib/MenuItem.d.ts.map +1 -1
  73. package/dist/commonjs/menu/lib/MenuList.d.ts +2 -0
  74. package/dist/commonjs/menu/lib/MenuList.d.ts.map +1 -1
  75. package/dist/commonjs/menu/lib/MenuPopper.d.ts +1 -0
  76. package/dist/commonjs/menu/lib/MenuPopper.d.ts.map +1 -1
  77. package/dist/commonjs/menu/lib/MenuTarget.d.ts +5 -0
  78. package/dist/commonjs/menu/lib/MenuTarget.d.ts.map +1 -1
  79. package/dist/commonjs/menu/lib/useMenuModel.d.ts +45 -0
  80. package/dist/commonjs/menu/lib/useMenuModel.d.ts.map +1 -1
  81. package/dist/commonjs/tabs/lib/Tabs.d.ts +158 -7
  82. package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
  83. package/dist/commonjs/tabs/lib/TabsItem.d.ts +4 -2
  84. package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -1
  85. package/dist/commonjs/tabs/lib/TabsList.d.ts +4 -0
  86. package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -1
  87. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +1 -0
  88. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts.map +1 -1
  89. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +4 -0
  90. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
  91. package/dist/commonjs/tabs/lib/TabsPanel.d.ts +4 -0
  92. package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -1
  93. package/dist/commonjs/tabs/lib/TabsPanels.d.ts +2 -0
  94. package/dist/commonjs/tabs/lib/TabsPanels.d.ts.map +1 -1
  95. package/dist/commonjs/tabs/lib/useTabsModel.d.ts +143 -12
  96. package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
  97. package/dist/es6/action-bar/lib/ActionBar.d.ts +104 -0
  98. package/dist/es6/action-bar/lib/ActionBar.d.ts.map +1 -1
  99. package/dist/es6/action-bar/lib/ActionBarItem.d.ts +3 -0
  100. package/dist/es6/action-bar/lib/ActionBarItem.d.ts.map +1 -1
  101. package/dist/es6/action-bar/lib/ActionBarList.d.ts +3 -0
  102. package/dist/es6/action-bar/lib/ActionBarList.d.ts.map +1 -1
  103. package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts +4 -0
  104. package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
  105. package/dist/es6/action-bar/lib/useActionBarModel.d.ts +55 -0
  106. package/dist/es6/action-bar/lib/useActionBarModel.d.ts.map +1 -1
  107. package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts +107 -0
  108. package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
  109. package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +4 -0
  110. package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
  111. package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts +3 -0
  112. package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
  113. package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts +2 -0
  114. package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
  115. package/dist/es6/breadcrumbs/lib/BreadcrumbsMenu.d.ts +49 -0
  116. package/dist/es6/breadcrumbs/lib/BreadcrumbsMenu.d.ts.map +1 -1
  117. package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +4 -0
  118. package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
  119. package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +55 -0
  120. package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
  121. package/dist/es6/collection/lib/ListBox.d.ts +39 -0
  122. package/dist/es6/collection/lib/ListBox.d.ts.map +1 -1
  123. package/dist/es6/collection/lib/keyUtils.d.ts +26 -0
  124. package/dist/es6/collection/lib/keyUtils.d.ts.map +1 -0
  125. package/dist/es6/collection/lib/keyUtils.js +76 -0
  126. package/dist/es6/collection/lib/useBaseListModel.d.ts +20 -10
  127. package/dist/es6/collection/lib/useBaseListModel.d.ts.map +1 -1
  128. package/dist/es6/collection/lib/useBaseListModel.js +22 -11
  129. package/dist/es6/collection/lib/useCursorListModel.d.ts +171 -10
  130. package/dist/es6/collection/lib/useCursorListModel.d.ts.map +1 -1
  131. package/dist/es6/collection/lib/useCursorListModel.js +97 -64
  132. package/dist/es6/collection/lib/useGridModel.d.ts +39 -0
  133. package/dist/es6/collection/lib/useGridModel.d.ts.map +1 -1
  134. package/dist/es6/collection/lib/useListItemRegister.d.ts +1 -0
  135. package/dist/es6/collection/lib/useListItemRegister.d.ts.map +1 -1
  136. package/dist/es6/collection/lib/useListItemRovingFocus.d.ts +1 -24
  137. package/dist/es6/collection/lib/useListItemRovingFocus.d.ts.map +1 -1
  138. package/dist/es6/collection/lib/useListItemRovingFocus.js +17 -93
  139. package/dist/es6/collection/lib/useListItemSelect.d.ts +1 -0
  140. package/dist/es6/collection/lib/useListItemSelect.d.ts.map +1 -1
  141. package/dist/es6/collection/lib/useListModel.d.ts +39 -0
  142. package/dist/es6/collection/lib/useListModel.d.ts.map +1 -1
  143. package/dist/es6/collection/lib/useListResetCursorOnBlur.d.ts +1 -0
  144. package/dist/es6/collection/lib/useListResetCursorOnBlur.d.ts.map +1 -1
  145. package/dist/es6/collection/lib/useListResetCursorOnBlur.js +1 -1
  146. package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts +1 -0
  147. package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
  148. package/dist/es6/collection/lib/useOverflowListMeasure.d.ts +1 -0
  149. package/dist/es6/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
  150. package/dist/es6/collection/lib/useOverflowListModel.d.ts +51 -0
  151. package/dist/es6/collection/lib/useOverflowListModel.d.ts.map +1 -1
  152. package/dist/es6/collection/lib/useOverflowListTarget.d.ts +1 -0
  153. package/dist/es6/collection/lib/useOverflowListTarget.d.ts.map +1 -1
  154. package/dist/es6/collection/lib/useSelectionListModel.d.ts +39 -0
  155. package/dist/es6/collection/lib/useSelectionListModel.d.ts.map +1 -1
  156. package/dist/es6/menu/lib/Menu.d.ts +48 -0
  157. package/dist/es6/menu/lib/Menu.d.ts.map +1 -1
  158. package/dist/es6/menu/lib/MenuCard.d.ts +2 -0
  159. package/dist/es6/menu/lib/MenuCard.d.ts.map +1 -1
  160. package/dist/es6/menu/lib/MenuContextTarget.d.ts +3 -0
  161. package/dist/es6/menu/lib/MenuContextTarget.d.ts.map +1 -1
  162. package/dist/es6/menu/lib/MenuItem.d.ts +2 -2
  163. package/dist/es6/menu/lib/MenuItem.d.ts.map +1 -1
  164. package/dist/es6/menu/lib/MenuList.d.ts +2 -0
  165. package/dist/es6/menu/lib/MenuList.d.ts.map +1 -1
  166. package/dist/es6/menu/lib/MenuPopper.d.ts +1 -0
  167. package/dist/es6/menu/lib/MenuPopper.d.ts.map +1 -1
  168. package/dist/es6/menu/lib/MenuTarget.d.ts +5 -0
  169. package/dist/es6/menu/lib/MenuTarget.d.ts.map +1 -1
  170. package/dist/es6/menu/lib/useMenuModel.d.ts +45 -0
  171. package/dist/es6/menu/lib/useMenuModel.d.ts.map +1 -1
  172. package/dist/es6/tabs/lib/Tabs.d.ts +158 -7
  173. package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
  174. package/dist/es6/tabs/lib/TabsItem.d.ts +4 -2
  175. package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -1
  176. package/dist/es6/tabs/lib/TabsList.d.ts +4 -0
  177. package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -1
  178. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts +1 -0
  179. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts.map +1 -1
  180. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts +4 -0
  181. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
  182. package/dist/es6/tabs/lib/TabsPanel.d.ts +4 -0
  183. package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -1
  184. package/dist/es6/tabs/lib/TabsPanels.d.ts +2 -0
  185. package/dist/es6/tabs/lib/TabsPanels.d.ts.map +1 -1
  186. package/dist/es6/tabs/lib/useTabsModel.d.ts +143 -12
  187. package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
  188. package/package.json +3 -3
@@ -2,58 +2,7 @@ import React from 'react';
2
2
  import {useIsRTL, createElemPropsHook} from '@workday/canvas-kit-react/common';
3
3
 
4
4
  import {useCursorListModel} from './useCursorListModel';
5
-
6
- export const orientationKeyMap = {
7
- horizontal: {
8
- ArrowLeft: 'goToPrevious',
9
- Left: 'goToPrevious',
10
- ArrowRight: 'goToNext',
11
- Right: 'goToNext',
12
- Home: 'goToFirst',
13
- End: 'goToLast',
14
- PageDown: 'goToNextPage',
15
- PageUp: 'goToPreviousPage',
16
- },
17
- vertical: {
18
- ArrowUp: 'goToPrevious',
19
- Up: 'goToPrevious',
20
- ArrowDown: 'goToNext',
21
- Down: 'goToNext',
22
- Home: 'goToFirst',
23
- End: 'goToLast',
24
- PageDown: 'goToNextPage',
25
- PageUp: 'goToPreviousPage',
26
- },
27
- } as const;
28
-
29
- const rightToLeftMap = {
30
- ArrowLeft: 'ArrowRight',
31
- Left: 'Right',
32
- ArrowRight: 'ArrowLeft',
33
- Right: 'Left',
34
- Home: 'Home',
35
- End: 'End',
36
- PageDown: 'PageDown',
37
- PageUp: 'PageUp',
38
- } as const;
39
-
40
- const gridKeyMap = {
41
- ...orientationKeyMap.horizontal,
42
- Home: 'goToFirstOfRow',
43
- End: 'goToLastOfRow',
44
- ArrowUp: 'goToPreviousRow',
45
- Up: 'goToPreviousRow',
46
- ArrowDown: 'goToNextRow',
47
- Down: 'goToNextRow',
48
- } as const;
49
-
50
- const ctrlKeyMap = {
51
- Home: 'goToFirst',
52
- End: 'goToLast',
53
- } as const;
54
-
55
- const keys = <T extends object>(obj: T): (keyof T)[] => Object.keys(obj) as (keyof T)[];
56
- const hasOwnKey = <T extends object>(obj: T, key: any): key is keyof T => obj.hasOwnProperty(key);
5
+ import {keyboardEventToCursorEvents} from './keyUtils';
57
6
 
58
7
  /**
59
8
  * This elemProps hook is used for cursor navigation by using [Roving
@@ -70,29 +19,25 @@ const hasOwnKey = <T extends object>(obj: T, key: any): key is keyof T => obj.ha
70
19
  ```
71
20
  */
72
21
  export const useListItemRovingFocus = createElemPropsHook(useCursorListModel)(
73
- ({state, events, navigation}, ref, elemProps: {'data-id'?: string} = {}) => {
74
- // Tracks when this element has focus. If this item is removed while still focused, we have to
75
- // inform the model to move the cursor to the next item.
76
- const focusRef = React.useRef(false);
77
-
22
+ (model, ref, elemProps: {'data-id'?: string} = {}) => {
78
23
  // Create a ref out of state. We don't want to watch state on unmount, so we use a ref to get the
79
24
  // current value at the time of unmounting. Otherwise, `state.items` would be a cached value of an
80
25
  // empty array
81
- const stateRef = React.useRef(state);
82
- stateRef.current = state;
26
+ const stateRef = React.useRef(model.state);
27
+ stateRef.current = model.state;
83
28
 
84
29
  const keyDownRef = React.useRef(false);
85
30
  const isRTL = useIsRTL();
86
31
 
87
32
  React.useEffect(() => {
88
33
  if (keyDownRef.current) {
89
- const item = navigation.getItem(state.cursorId, {state});
90
- if (state.isVirtualized) {
91
- state.UNSTABLE_virtual.scrollToIndex(item.index);
34
+ const item = model.navigation.getItem(model.state.cursorId, model);
35
+ if (model.state.isVirtualized) {
36
+ model.state.UNSTABLE_virtual.scrollToIndex(item.index);
92
37
  }
93
38
  requestAnimationFrame(() => {
94
39
  document
95
- .querySelector<HTMLElement>(`[data-focus-id="${`${state.id}-${item.id}`}"]`)
40
+ .querySelector<HTMLElement>(`[data-focus-id="${`${model.state.id}-${item.id}`}"]`)
96
41
  ?.focus();
97
42
  });
98
43
 
@@ -100,51 +45,23 @@ export const useListItemRovingFocus = createElemPropsHook(useCursorListModel)(
100
45
  }
101
46
  // we only want to run this effect if the cursor changes and not any other time
102
47
  // eslint-disable-next-line react-hooks/exhaustive-deps
103
- }, [state.cursorId]);
48
+ }, [model.state.cursorId]);
104
49
 
105
50
  return {
106
51
  onKeyDown(event: React.KeyboardEvent) {
107
- // Test ctrl key first
108
- if (event.ctrlKey) {
109
- for (const key in ctrlKeyMap) {
110
- if (hasOwnKey(ctrlKeyMap, key)) {
111
- if (event.key === key) {
112
- keyDownRef.current = true;
113
- events[ctrlKeyMap[key]]?.();
114
- event.preventDefault();
115
- return;
116
- }
117
- }
118
- }
52
+ const handled = keyboardEventToCursorEvents(event, model, isRTL);
53
+ if (handled) {
54
+ event.preventDefault();
55
+ keyDownRef.current = true;
119
56
  }
120
- // Try regular keys
121
- keys(state.columnCount > 0 ? gridKeyMap : orientationKeyMap[state.orientation]).forEach(
122
- key => {
123
- if (isRTL ? event.key === rightToLeftMap[key] : event.key === key) {
124
- const eventName =
125
- state.columnCount > 0 ? gridKeyMap[key] : orientationKeyMap[state.orientation][key];
126
- keyDownRef.current = true;
127
- if (events[eventName]) {
128
- events[eventName]?.();
129
- event.preventDefault();
130
- }
131
- }
132
- }
133
- );
134
- },
135
- onFocus() {
136
- focusRef.current = true;
137
- },
138
- onBlur() {
139
- focusRef.current = false;
140
57
  },
141
58
  onClick() {
142
- events.goTo({id: elemProps['data-id']!});
59
+ model.events.goTo({id: elemProps['data-id']!});
143
60
  },
144
- 'data-focus-id': `${state.id}-${elemProps['data-id']}`,
145
- tabIndex: !state.cursorId
61
+ 'data-focus-id': `${model.state.id}-${elemProps['data-id']}`,
62
+ tabIndex: !model.state.cursorId
146
63
  ? 0 // cursor isn't known yet, be safe and mark this as focusable
147
- : !!elemProps['data-id'] && state.cursorId === elemProps['data-id']
64
+ : !!elemProps['data-id'] && model.state.cursorId === elemProps['data-id']
148
65
  ? 0 // A name is known and cursor is here
149
66
  : -1, // A name is known an cursor is somewhere else
150
67
  ref,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
3
  import {createElemPropsHook} from '@workday/canvas-kit-react/common';
4
- import {orientationKeyMap} from './useListItemRovingFocus';
4
+ import {orientationKeyMap} from './keyUtils';
5
5
  import {useListModel} from './useListModel';
6
6
 
7
7
  /**