@vuu-ui/vuu-data-react 0.13.45 → 0.13.46

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 (274) hide show
  1. package/cjs/data-editing/get-data-item-edit-control.js +30 -13
  2. package/cjs/data-editing/get-data-item-edit-control.js.map +1 -1
  3. package/cjs/hooks/useRemoteConnection.js +58 -0
  4. package/cjs/hooks/useRemoteConnection.js.map +1 -0
  5. package/cjs/hooks/useVuuMenuActions.js +5 -4
  6. package/cjs/hooks/useVuuMenuActions.js.map +1 -1
  7. package/cjs/index.js +4 -2
  8. package/cjs/index.js.map +1 -1
  9. package/cjs/lost-connection-indicator/LostConnectionIndicator.css.js +6 -0
  10. package/cjs/lost-connection-indicator/LostConnectionIndicator.css.js.map +1 -0
  11. package/cjs/lost-connection-indicator/LostConnectionIndicator.js +24 -0
  12. package/cjs/lost-connection-indicator/LostConnectionIndicator.js.map +1 -0
  13. package/esm/data-editing/get-data-item-edit-control.js +30 -13
  14. package/esm/data-editing/get-data-item-edit-control.js.map +1 -1
  15. package/esm/hooks/useRemoteConnection.js +56 -0
  16. package/esm/hooks/useRemoteConnection.js.map +1 -0
  17. package/esm/hooks/useVuuMenuActions.js +5 -4
  18. package/esm/hooks/useVuuMenuActions.js.map +1 -1
  19. package/esm/index.js +2 -1
  20. package/esm/index.js.map +1 -1
  21. package/esm/lost-connection-indicator/LostConnectionIndicator.css.js +4 -0
  22. package/esm/lost-connection-indicator/LostConnectionIndicator.css.js.map +1 -0
  23. package/esm/lost-connection-indicator/LostConnectionIndicator.js +22 -0
  24. package/esm/lost-connection-indicator/LostConnectionIndicator.js.map +1 -0
  25. package/package.json +15 -14
  26. package/types/vuu-context-menu/src/ContextMenu.d.ts +10 -0
  27. package/types/vuu-context-menu/src/ContextMenuProvider.d.ts +16 -0
  28. package/types/vuu-context-menu/src/index.d.ts +3 -0
  29. package/types/vuu-context-menu/src/menu-utils.d.ts +17 -0
  30. package/types/vuu-context-menu/src/useContextMenu.d.ts +10 -0
  31. package/types/{data-editing → vuu-data-react/src/data-editing}/get-data-item-edit-control.d.ts +9 -1
  32. package/types/{hooks → vuu-data-react/src/hooks}/index.d.ts +0 -1
  33. package/types/vuu-data-react/src/hooks/useConnectionStatus.d.ts +6 -0
  34. package/types/vuu-data-react/src/hooks/useRemoteConnection.d.ts +6 -0
  35. package/types/{index.d.ts → vuu-data-react/src/index.d.ts} +2 -0
  36. package/types/vuu-data-react/src/lost-connection-indicator/LostConnectionIndicator.d.ts +1 -0
  37. package/types/vuu-popups/src/index.d.ts +5 -0
  38. package/types/vuu-popups/src/notifications/NotificationsCenter.d.ts +5 -0
  39. package/types/vuu-popups/src/notifications/NotificationsContext.d.ts +36 -0
  40. package/types/vuu-popups/src/notifications/NotificationsProvider.d.ts +9 -0
  41. package/types/vuu-popups/src/notifications/ToastNotification.d.ts +7 -0
  42. package/types/vuu-popups/src/notifications/WorkspaceNotification.d.ts +5 -0
  43. package/types/vuu-popups/src/notifications/index.d.ts +3 -0
  44. package/types/vuu-popups/src/popup/Popup.d.ts +12 -0
  45. package/types/vuu-popups/src/popup/getPositionRelativeToAnchor.d.ts +19 -0
  46. package/types/vuu-popups/src/popup/index.d.ts +2 -0
  47. package/types/vuu-popups/src/popup/useAnchoredPosition.d.ts +7 -0
  48. package/types/vuu-popups/src/popup-menu/PopupMenu.d.ts +45 -0
  49. package/types/vuu-popups/src/popup-menu/index.d.ts +1 -0
  50. package/types/vuu-popups/src/popup-menu/usePopupMenu.d.ts +19 -0
  51. package/types/vuu-popups/src/portal/Portal.d.ts +42 -0
  52. package/types/vuu-popups/src/portal/index.d.ts +1 -0
  53. package/types/vuu-popups/src/tooltip/Tooltip.d.ts +15 -0
  54. package/types/vuu-popups/src/tooltip/index.d.ts +2 -0
  55. package/types/vuu-popups/src/tooltip/useTooltip.d.ts +19 -0
  56. package/types/vuu-popups/src/tooltip/useTooltipAnchoredPosition.d.ts +7 -0
  57. package/types/vuu-ui-controls/src/calendar/Calendar.d.ts +13 -0
  58. package/types/vuu-ui-controls/src/calendar/index.d.ts +4 -0
  59. package/types/vuu-ui-controls/src/calendar/internal/CalendarCarousel.d.ts +3 -0
  60. package/types/vuu-ui-controls/src/calendar/internal/CalendarContext.d.ts +8 -0
  61. package/types/vuu-ui-controls/src/calendar/internal/CalendarDay.d.ts +14 -0
  62. package/types/vuu-ui-controls/src/calendar/internal/CalendarMonth.d.ts +10 -0
  63. package/types/vuu-ui-controls/src/calendar/internal/CalendarNavigation.d.ts +16 -0
  64. package/types/vuu-ui-controls/src/calendar/internal/CalendarWeekHeader.d.ts +3 -0
  65. package/types/vuu-ui-controls/src/calendar/internal/useFocusManagement.d.ts +9 -0
  66. package/types/vuu-ui-controls/src/calendar/internal/utils.d.ts +15 -0
  67. package/types/vuu-ui-controls/src/calendar/useCalendar.d.ts +54 -0
  68. package/types/vuu-ui-controls/src/calendar/useCalendarDay.d.ts +22 -0
  69. package/types/vuu-ui-controls/src/calendar/useSelection.d.ts +78 -0
  70. package/types/vuu-ui-controls/src/column-picker/ColumnPicker.d.ts +7 -0
  71. package/types/vuu-ui-controls/src/column-picker/ColumnSearch.d.ts +12 -0
  72. package/types/vuu-ui-controls/src/column-picker/index.d.ts +2 -0
  73. package/types/vuu-ui-controls/src/common-hooks/index.d.ts +3 -0
  74. package/types/vuu-ui-controls/src/common-hooks/selectionTypes.d.ts +70 -0
  75. package/types/vuu-ui-controls/src/common-hooks/use-resize-observer.d.ts +16 -0
  76. package/types/vuu-ui-controls/src/common-hooks/useControlled.d.ts +24 -0
  77. package/types/vuu-ui-controls/src/context-panel-provider/ContextPanelProvider.d.ts +17 -0
  78. package/types/vuu-ui-controls/src/cycle-state-button/CycleStateButton.d.ts +11 -0
  79. package/types/vuu-ui-controls/src/cycle-state-button/index.d.ts +1 -0
  80. package/types/vuu-ui-controls/src/date-input/DateInput.d.ts +60 -0
  81. package/types/vuu-ui-controls/src/date-input/index.d.ts +1 -0
  82. package/types/vuu-ui-controls/src/date-picker/DatePicker.d.ts +66 -0
  83. package/types/vuu-ui-controls/src/date-picker/DatePickerContext.d.ts +19 -0
  84. package/types/vuu-ui-controls/src/date-picker/DatePickerPanel.d.ts +10 -0
  85. package/types/vuu-ui-controls/src/date-picker/index.d.ts +1 -0
  86. package/types/vuu-ui-controls/src/drag-drop/DragDropProvider.d.ts +38 -0
  87. package/types/vuu-ui-controls/src/drag-drop/DragDropState.d.ts +15 -0
  88. package/types/vuu-ui-controls/src/drag-drop/Draggable.d.ts +13 -0
  89. package/types/vuu-ui-controls/src/drag-drop/dragDropTypes.d.ts +100 -0
  90. package/types/vuu-ui-controls/src/drag-drop/drop-target-utils.d.ts +82 -0
  91. package/types/vuu-ui-controls/src/drag-drop/index.d.ts +6 -0
  92. package/types/vuu-ui-controls/src/drag-drop/useAutoScroll.d.ts +11 -0
  93. package/types/vuu-ui-controls/src/drag-drop/useDragDisplacers.d.ts +17 -0
  94. package/types/vuu-ui-controls/src/drag-drop/useDragDrop.d.ts +2 -0
  95. package/types/vuu-ui-controls/src/drag-drop/useDragDropCopy.d.ts +6 -0
  96. package/types/vuu-ui-controls/src/drag-drop/useDragDropIndicator.d.ts +2 -0
  97. package/types/vuu-ui-controls/src/drag-drop/useDragDropNaturalMovement.d.ts +2 -0
  98. package/types/vuu-ui-controls/src/drag-drop/useDropIndicator.d.ts +8 -0
  99. package/types/vuu-ui-controls/src/drag-drop/useGlobalDragDrop.d.ts +11 -0
  100. package/types/vuu-ui-controls/src/editable/index.d.ts +1 -0
  101. package/types/vuu-ui-controls/src/editable/useEditableText.d.ts +19 -0
  102. package/types/vuu-ui-controls/src/editable-label/EditableLabel.d.ts +19 -0
  103. package/types/vuu-ui-controls/src/editable-label/index.d.ts +1 -0
  104. package/types/vuu-ui-controls/src/expando-input/ExpandoInput.d.ts +6 -0
  105. package/types/vuu-ui-controls/src/expando-input/index.d.ts +1 -0
  106. package/types/vuu-ui-controls/src/icon-button/Icon.d.ts +6 -0
  107. package/types/vuu-ui-controls/src/icon-button/IconButton.d.ts +6 -0
  108. package/types/vuu-ui-controls/src/icon-button/ToggleIconButton.d.ts +5 -0
  109. package/types/vuu-ui-controls/src/icon-button/index.d.ts +3 -0
  110. package/types/vuu-ui-controls/src/index.d.ts +30 -0
  111. package/types/vuu-ui-controls/src/instrument-picker/TablePicker.d.ts +10 -0
  112. package/types/vuu-ui-controls/src/instrument-picker/index.d.ts +1 -0
  113. package/types/vuu-ui-controls/src/instrument-picker/useTablePicker.d.ts +47 -0
  114. package/types/vuu-ui-controls/src/measured-container/MeasuredContainer.d.ts +14 -0
  115. package/types/vuu-ui-controls/src/measured-container/index.d.ts +2 -0
  116. package/types/vuu-ui-controls/src/measured-container/useMeasuredContainer.d.ts +23 -0
  117. package/types/vuu-ui-controls/src/measured-container/useResizeObserver.d.ts +15 -0
  118. package/types/vuu-ui-controls/src/modal-provider/ModalProvider.d.ts +13 -0
  119. package/types/vuu-ui-controls/src/overflow-container/OverflowContainer.d.ts +15 -0
  120. package/types/vuu-ui-controls/src/overflow-container/index.d.ts +2 -0
  121. package/types/vuu-ui-controls/src/overflow-container/overflow-utils.d.ts +48 -0
  122. package/types/vuu-ui-controls/src/overflow-container/useOverflowContainer.d.ts +19 -0
  123. package/types/vuu-ui-controls/src/price-ticker/PriceTicker.d.ts +7 -0
  124. package/types/vuu-ui-controls/src/price-ticker/index.d.ts +1 -0
  125. package/types/vuu-ui-controls/src/prompt/Prompt.d.ts +48 -0
  126. package/types/vuu-ui-controls/src/sortable-list/SortableList.d.ts +8 -0
  127. package/types/vuu-ui-controls/src/split-button/SplitButton.d.ts +11 -0
  128. package/types/vuu-ui-controls/src/split-button/SplitStateButton.d.ts +5 -0
  129. package/types/vuu-ui-controls/src/split-button/index.d.ts +2 -0
  130. package/types/vuu-ui-controls/src/split-button/useSplitButton.d.ts +311 -0
  131. package/types/vuu-ui-controls/src/table-search/SearchCell.d.ts +2 -0
  132. package/types/vuu-ui-controls/src/table-search/TableSearch.d.ts +9 -0
  133. package/types/vuu-ui-controls/src/table-search/index.d.ts +1 -0
  134. package/types/vuu-ui-controls/src/table-search/useTableSearch.d.ts +15 -0
  135. package/types/vuu-ui-controls/src/tabs-next/TabBar.d.ts +12 -0
  136. package/types/vuu-ui-controls/src/tabs-next/TabListNext.d.ts +12 -0
  137. package/types/vuu-ui-controls/src/tabs-next/TabNext.d.ts +12 -0
  138. package/types/vuu-ui-controls/src/tabs-next/TabNextAction.d.ts +5 -0
  139. package/types/vuu-ui-controls/src/tabs-next/TabNextContext.d.ts +12 -0
  140. package/types/vuu-ui-controls/src/tabs-next/TabNextPanel.d.ts +8 -0
  141. package/types/vuu-ui-controls/src/tabs-next/TabNextTrigger.d.ts +5 -0
  142. package/types/vuu-ui-controls/src/tabs-next/TabOverflowList.d.ts +11 -0
  143. package/types/vuu-ui-controls/src/tabs-next/TabsNext.d.ts +17 -0
  144. package/types/vuu-ui-controls/src/tabs-next/TabsNextContext.d.ts +21 -0
  145. package/types/vuu-ui-controls/src/tabs-next/hooks/useCollection.d.ts +18 -0
  146. package/types/vuu-ui-controls/src/tabs-next/hooks/useFocusOutside.d.ts +2 -0
  147. package/types/vuu-ui-controls/src/tabs-next/hooks/useOverflow.d.ts +11 -0
  148. package/types/vuu-ui-controls/src/tabs-next/index.d.ts +7 -0
  149. package/types/vuu-ui-controls/src/tabstrip/Tab.d.ts +27 -0
  150. package/types/vuu-ui-controls/src/tabstrip/TabMenu.d.ts +23 -0
  151. package/types/vuu-ui-controls/src/tabstrip/TabMenuOptions.d.ts +10 -0
  152. package/types/vuu-ui-controls/src/tabstrip/TabsTypes.d.ts +127 -0
  153. package/types/vuu-ui-controls/src/tabstrip/Tabstrip.d.ts +2 -0
  154. package/types/vuu-ui-controls/src/tabstrip/index.d.ts +5 -0
  155. package/types/vuu-ui-controls/src/tabstrip/tabstrip-dom-utils.d.ts +2 -0
  156. package/types/vuu-ui-controls/src/tabstrip/useAnimatedSelectionThumb.d.ts +7 -0
  157. package/types/vuu-ui-controls/src/tabstrip/useKeyboardNavigation.d.ts +29 -0
  158. package/types/vuu-ui-controls/src/tabstrip/useSelection.d.ts +13 -0
  159. package/types/vuu-ui-controls/src/tabstrip/useTabstrip.d.ts +55 -0
  160. package/types/vuu-ui-controls/src/time-input/MaskedInput.d.ts +49 -0
  161. package/types/vuu-ui-controls/src/time-input/TimeInput.d.ts +5 -0
  162. package/types/vuu-ui-controls/src/time-input/useTimeInput.d.ts +21 -0
  163. package/types/vuu-ui-controls/src/toolbar/Toolbar.d.ts +19 -0
  164. package/types/vuu-ui-controls/src/toolbar/index.d.ts +1 -0
  165. package/types/vuu-ui-controls/src/toolbar/toolbar-dom-utils.d.ts +3 -0
  166. package/types/vuu-ui-controls/src/toolbar/useKeyboardNavigation.d.ts +32 -0
  167. package/types/vuu-ui-controls/src/toolbar/useSelection.d.ts +22 -0
  168. package/types/vuu-ui-controls/src/toolbar/useToolbar.d.ts +28 -0
  169. package/types/vuu-ui-controls/src/utils/deprecated-types.d.ts +2 -0
  170. package/types/vuu-ui-controls/src/utils/escapeRegExp.d.ts +1 -0
  171. package/types/vuu-ui-controls/src/utils/forwardCallbackProps.d.ts +3 -0
  172. package/types/vuu-ui-controls/src/utils/index.d.ts +5 -0
  173. package/types/vuu-ui-controls/src/utils/isOverflowElement.d.ts +1 -0
  174. package/types/vuu-ui-controls/src/utils/isPlainObject.d.ts +1 -0
  175. package/types/vuu-ui-controls/src/vuu-date-picker/VuuDatePicker.d.ts +7 -0
  176. package/types/vuu-ui-controls/src/vuu-date-picker/index.d.ts +1 -0
  177. package/types/vuu-ui-controls/src/vuu-input/VuuInput.d.ts +18 -0
  178. package/types/vuu-ui-controls/src/vuu-input/index.d.ts +1 -0
  179. package/types/vuu-ui-controls/src/vuu-time-picker/VuuTimePicker.d.ts +7 -0
  180. package/types/vuu-ui-controls/src/vuu-typeahead-input/VuuTypeaheadInput.d.ts +6 -0
  181. package/types/vuu-ui-controls/src/vuu-typeahead-input/index.d.ts +1 -0
  182. package/types/vuu-ui-controls/src/vuu-typeahead-input/useVuuTypeaheadInput.d.ts +49 -0
  183. package/types/vuu-utils/src/Clock.d.ts +20 -0
  184. package/types/vuu-utils/src/DataWindow.d.ts +39 -0
  185. package/types/vuu-utils/src/ShellContext.d.ts +11 -0
  186. package/types/vuu-utils/src/ThemeProvider.d.ts +32 -0
  187. package/types/vuu-utils/src/array-utils.d.ts +8 -0
  188. package/types/vuu-utils/src/box-utils.d.ts +24 -0
  189. package/types/vuu-utils/src/broadcast-channel.d.ts +16 -0
  190. package/types/vuu-utils/src/column-utils.d.ts +181 -0
  191. package/types/vuu-utils/src/common-types.d.ts +6 -0
  192. package/types/vuu-utils/src/component-registry.d.ts +65 -0
  193. package/types/vuu-utils/src/context-definitions/DataContext.d.ts +18 -0
  194. package/types/vuu-utils/src/context-definitions/DataProvider.d.ts +7 -0
  195. package/types/vuu-utils/src/context-definitions/DataSourceProvider.d.ts +12 -0
  196. package/types/vuu-utils/src/context-definitions/WorkspaceContext.d.ts +17 -0
  197. package/types/vuu-utils/src/cookie-utils.d.ts +1 -0
  198. package/types/vuu-utils/src/css-utils.d.ts +1 -0
  199. package/types/vuu-utils/src/data-utils.d.ts +19 -0
  200. package/types/vuu-utils/src/datasource/BaseDataSource.d.ts +60 -0
  201. package/types/vuu-utils/src/datasource/datasource-action-utils.d.ts +7 -0
  202. package/types/vuu-utils/src/datasource/datasource-filter-utils.d.ts +2 -0
  203. package/types/vuu-utils/src/datasource/datasource-utils.d.ts +49 -0
  204. package/types/vuu-utils/src/date/date-utils.d.ts +36 -0
  205. package/types/vuu-utils/src/date/dateTimePattern.d.ts +8 -0
  206. package/types/vuu-utils/src/date/formatter.d.ts +4 -0
  207. package/types/vuu-utils/src/date/index.d.ts +4 -0
  208. package/types/vuu-utils/src/date/types.d.ts +24 -0
  209. package/types/vuu-utils/src/debug-utils.d.ts +9 -0
  210. package/types/vuu-utils/src/event-emitter.d.ts +21 -0
  211. package/types/vuu-utils/src/feature-utils.d.ts +110 -0
  212. package/types/vuu-utils/src/filters/filter-utils.d.ts +82 -0
  213. package/types/vuu-utils/src/filters/filterAsQuery.d.ts +7 -0
  214. package/types/vuu-utils/src/filters/index.d.ts +2 -0
  215. package/types/vuu-utils/src/form-utils.d.ts +23 -0
  216. package/types/vuu-utils/src/formatting-utils.d.ts +14 -0
  217. package/types/vuu-utils/src/getUniqueId.d.ts +1 -0
  218. package/types/vuu-utils/src/group-utils.d.ts +10 -0
  219. package/types/vuu-utils/src/html-utils.d.ts +21 -0
  220. package/types/vuu-utils/src/index.d.ts +74 -0
  221. package/types/vuu-utils/src/input-utils.d.ts +2 -0
  222. package/types/vuu-utils/src/invariant.d.ts +1 -0
  223. package/types/vuu-utils/src/itemToString.d.ts +2 -0
  224. package/types/vuu-utils/src/json-types.d.ts +52 -0
  225. package/types/vuu-utils/src/json-utils.d.ts +6 -0
  226. package/types/vuu-utils/src/keyboard-utils.d.ts +15 -0
  227. package/types/vuu-utils/src/keyset.d.ts +16 -0
  228. package/types/vuu-utils/src/layout-types.d.ts +22 -0
  229. package/types/vuu-utils/src/list-utils.d.ts +2 -0
  230. package/types/vuu-utils/src/local-storage-utils.d.ts +3 -0
  231. package/types/vuu-utils/src/logging-utils.d.ts +45 -0
  232. package/types/vuu-utils/src/menu-utils.d.ts +6 -0
  233. package/types/vuu-utils/src/module-utils.d.ts +8 -0
  234. package/types/vuu-utils/src/moving-window.d.ts +18 -0
  235. package/types/vuu-utils/src/nanoid/index.d.ts +1 -0
  236. package/types/vuu-utils/src/perf-utils.d.ts +5 -0
  237. package/types/vuu-utils/src/promise-utils.d.ts +8 -0
  238. package/types/vuu-utils/src/protocol-message-utils.d.ts +34 -0
  239. package/types/vuu-utils/src/range-utils.d.ts +31 -0
  240. package/types/vuu-utils/src/react-utils.d.ts +8 -0
  241. package/types/vuu-utils/src/round-decimal.d.ts +1 -0
  242. package/types/vuu-utils/src/row-utils.d.ts +27 -0
  243. package/types/vuu-utils/src/selection-utils.d.ts +4 -0
  244. package/types/vuu-utils/src/shell-layout-types.d.ts +15 -0
  245. package/types/vuu-utils/src/sort-utils.d.ts +11 -0
  246. package/types/vuu-utils/src/table-schema-utils.d.ts +3 -0
  247. package/types/vuu-utils/src/text-utils.d.ts +2 -0
  248. package/types/vuu-utils/src/tree-types.d.ts +9 -0
  249. package/types/vuu-utils/src/tree-utils.d.ts +9 -0
  250. package/types/vuu-utils/src/ts-utils.d.ts +20 -0
  251. package/types/vuu-utils/src/typeahead-utils.d.ts +1 -0
  252. package/types/vuu-utils/src/url-utils.d.ts +2 -0
  253. package/types/vuu-utils/src/useId.d.ts +1 -0
  254. package/types/vuu-utils/src/useLayoutEffectSkipFirst.d.ts +2 -0
  255. package/types/vuu-utils/src/useStateRef.d.ts +2 -0
  256. package/types/vuu-utils/src/user-types.d.ts +4 -0
  257. /package/types/{data-editing → vuu-data-react/src/data-editing}/EditForm.d.ts +0 -0
  258. /package/types/{data-editing → vuu-data-react/src/data-editing}/UnsavedChangesReport.d.ts +0 -0
  259. /package/types/{data-editing → vuu-data-react/src/data-editing}/edit-rule-validation-checker.d.ts +0 -0
  260. /package/types/{data-editing → vuu-data-react/src/data-editing}/edit-validation-rules.d.ts +0 -0
  261. /package/types/{data-editing → vuu-data-react/src/data-editing}/form-edit-state.d.ts +0 -0
  262. /package/types/{data-editing → vuu-data-react/src/data-editing}/index.d.ts +0 -0
  263. /package/types/{data-editing → vuu-data-react/src/data-editing}/useEditForm.d.ts +0 -0
  264. /package/types/{datasource-provider → vuu-data-react/src/datasource-provider}/VuuDataSourceProvider.d.ts +0 -0
  265. /package/types/{datasource-provider → vuu-data-react/src/datasource-provider}/index.d.ts +0 -0
  266. /package/types/{datasource-provider → vuu-data-react/src/datasource-provider}/useAutoLoginToVuuServer.d.ts +0 -0
  267. /package/types/{hooks → vuu-data-react/src/hooks}/useLookupValues.d.ts +0 -0
  268. /package/types/{hooks → vuu-data-react/src/hooks}/useSessionDataSource.d.ts +0 -0
  269. /package/types/{hooks → vuu-data-react/src/hooks}/useTypeaheadSuggestions.d.ts +0 -0
  270. /package/types/{hooks → vuu-data-react/src/hooks}/useVisualLinks.d.ts +0 -0
  271. /package/types/{hooks → vuu-data-react/src/hooks}/useVuuMenuActions.d.ts +0 -0
  272. /package/types/{hooks → vuu-data-react/src/hooks}/useVuuTables.d.ts +0 -0
  273. /package/types/{session-editing-form → vuu-data-react/src/session-editing-form}/SessionEditingForm.d.ts +0 -0
  274. /package/types/{session-editing-form → vuu-data-react/src/session-editing-form}/index.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useVuuMenuActions.js","sources":["../../../../packages/vuu-data-react/src/hooks/useVuuMenuActions.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport {\n type ContextMenuItemDescriptor,\n isGroupMenuItemDescriptor,\n type MenuActionHandler,\n type MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport {\n DataSource,\n DataSourceRow,\n DataSourceVisualLinkCreatedMessage,\n RpcResponseHandler,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport type {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n LinkDescriptorWithLabel,\n OpenDialogAction,\n VuuDataRowDto,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n BulkEditDialog,\n BulkEditPanel,\n isTableLocation,\n} from \"@vuu-ui/vuu-table\";\nimport type {\n ColumnDescriptor,\n TableContextMenuDef,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n dataSourceRowToDataRowDto,\n getLayoutComponent,\n hasShowNotificationAction,\n isActionMessage,\n isCustomComponentActionMessage,\n isOpenBulkEditResponse,\n isSessionTableActionMessage,\n metadataKeys,\n toColumnName,\n useData,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback } from \"react\";\nimport {\n FormConfig,\n FormFieldDescriptor,\n SessionEditingForm,\n} from \"../session-editing-form\";\nimport { useModal } from \"@vuu-ui/vuu-ui-controls\";\n\nexport interface MenuActionConfig {\n vuuMenu?: VuuMenu;\n visualLink?: DataSourceVisualLinkCreatedMessage;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport interface VuuMenuActionHookProps {\n /**\n * By default, vuuMenuActions will be handled automatically. When activated, a\n * message will be sent to server and response will be handled here too.\n * This prop allows client to provide a custom handler for a menu Item. This will\n * take priority and if handler returns true, no further processing for the menu\n * item will be handled by Vuu. This can also be used to prevent an item from being\n * actioned, even when no custom handling is intended. If the handler returns false,\n * Vuu will process the menuItem.\n */\n clientSideMenuActionHandler?: MenuActionHandler;\n dataSource?: DataSource;\n menuActionConfig?: MenuActionConfig;\n onRpcResponse?: RpcResponseHandler;\n}\n\nexport interface VuuCellContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n field: string;\n value: VuuRowDataItemType;\n}\nexport interface VuuRowContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n row: VuuDataRowDto;\n}\nexport interface VuuSelectedRowsContextMenuItemOptions extends VuuMenuItem {\n columns: ColumnDescriptor[];\n}\n\nconst isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nconst isCellMenu = (\n options: VuuMenuItem,\n): options is VuuCellContextMenuItemOptions => options.context === \"cell\";\n\nexport const isRowMenu = (\n options: VuuMenuItem,\n): options is VuuRowContextMenuItemOptions => options.context === \"row\";\n\nexport const isSelectionMenu = (\n options: VuuMenuItem,\n): options is VuuSelectedRowsContextMenuItemOptions =>\n options.context === \"selected-rows\";\n\nconst getColumnsFromOptions = (options: unknown) => {\n if (options && typeof options === \"object\" && \"columns\" in options) {\n return options.columns as VuuSelectedRowsContextMenuItemOptions[\"columns\"];\n }\n};\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst { KEY } = metadataKeys;\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: TableContextMenuOptions,\n) => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.column.name,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.column.name]],\n };\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: dataSourceRowToDataRowDto(options.row, options.columnMap),\n rowKey: options.row[KEY],\n };\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n };\n default:\n return menu;\n }\n};\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0,\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options),\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length,\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.column.name;\n }\n\n return true;\n};\n\nconst buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n id: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options),\n )\n .filter(\n (childMenu) => childMenu !== undefined,\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nconst keyFirst = (c1: FormFieldDescriptor, c2: FormFieldDescriptor) =>\n c1.isKeyField ? -1 : c2.isKeyField ? 1 : 0;\n\nconst defaultFormConfig = {\n fields: [],\n key: \"\",\n title: \"\",\n};\n\nconst configFromSchema = (schema?: TableSchema): FormConfig | undefined => {\n if (schema) {\n const { columns, key } = schema;\n return {\n key,\n title: `Parameters for command`,\n fields: columns\n .map((col) => ({\n description: col.name,\n label: col.name,\n name: col.name,\n type: col.serverDataType,\n isKeyField: col.name === key,\n }))\n .sort(keyFirst),\n };\n }\n};\n\nconst getFormConfig = (\n action: OpenDialogAction & { tableSchema: TableSchema },\n) => {\n const { tableSchema: schema } = action;\n const config = configFromSchema(schema) ?? defaultFormConfig;\n\n return {\n config,\n schema,\n };\n};\n\nexport const useVuuMenuActions = ({\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n}: VuuMenuActionHookProps): TableContextMenuDef => {\n const { VuuDataSource } = useData();\n const menuBuilder: MenuBuilder<TableMenuLocation, TableContextMenuOptions> =\n useCallback(\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource) {\n const { links, menu } = dataSource;\n const { visualLink } = dataSource;\n\n if (location === \"grid\" && links && !visualLink) {\n links.forEach((linkDescriptor: LinkDescriptorWithLabel) => {\n const { link, label: linkLabel } = linkDescriptor;\n const label = linkLabel ? linkLabel : link.toTable;\n descriptors.push({\n label: `Link to ${label}`,\n id: \"link-table\",\n options: linkDescriptor,\n });\n });\n }\n\n if (menu && isTableLocation(location)) {\n const menuDescriptor = buildMenuDescriptorFromVuuMenu(\n menu,\n location,\n options,\n );\n if (isRoot(menu) && isGroupMenuItemDescriptor(menuDescriptor)) {\n descriptors.push(...menuDescriptor.children);\n } else if (menuDescriptor) {\n descriptors.push(menuDescriptor);\n }\n }\n } else {\n throw Error(\"useVuuMenuActions no dataSource provided\");\n }\n\n return descriptors;\n },\n [dataSource],\n );\n\n const { showDialog, closeDialog, showPrompt } = useModal();\n const showNotification = useNotifications();\n\n const showBulkEditDialog = useCallback(\n (ds: DataSource, table: VuuTable, columns?: ColumnDescriptor[]) => {\n const sessionDs = new VuuDataSource({\n columns: columns?.map(toColumnName),\n table,\n viewport: table.table,\n });\n\n const handleClose = () => {\n sessionDs.unsubscribe();\n closeDialog();\n };\n\n showDialog(\n <BulkEditDialog\n columns={columns}\n sessionDs={sessionDs}\n parentDs={ds}\n closeDialog={handleClose}\n />,\n \"Bulk Amend\",\n );\n\n return true;\n },\n [VuuDataSource, closeDialog, showDialog],\n );\n\n const showCustomComponentInDialog = useCallback(\n (componentId: string, ds: DataSource, table: VuuTable) => {\n const sessionDs = new VuuDataSource({\n columns: ds.columns,\n table,\n viewport: table.table,\n });\n\n const handleOpenChangePrompt = (open: boolean) => {\n if (!open) {\n ds.unsubscribe();\n }\n };\n\n const Component = getLayoutComponent(componentId);\n showPrompt(<Component dataSource={sessionDs} />, {\n title: \"Confirm operation on selected rows\",\n onOpenChange: handleOpenChangePrompt,\n });\n },\n [VuuDataSource, showPrompt],\n );\n\n const showSessionEditingForm = useCallback(\n (\n ds: DataSource,\n action: OpenDialogAction & { tableSchema: TableSchema },\n ) => {\n const { tableSchema } = action;\n if (tableSchema) {\n const formConfig = getFormConfig(action);\n showDialog(\n <SessionEditingForm {...formConfig} onClose={closeDialog} />,\n \"Set Parameters\",\n );\n }\n\n const sessionDs = ds.createSessionDataSource?.(action.table);\n const handleSubmit = () => {\n sessionDs?.rpcRequest?.({\n params: {},\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"RPC_REQUEST\",\n });\n closeDialog();\n };\n\n const handleChange = (isValid: boolean) => {\n console.log(\"placeholder: \", isValid);\n };\n\n if (sessionDs) {\n showDialog(\n <BulkEditPanel\n sessionDs={sessionDs}\n onSubmit={handleSubmit}\n parentDs={ds}\n onValidationStatusChange={handleChange}\n />,\n \"Multi Row Edit\",\n [\n <Button key=\"cancel\" onClick={closeDialog}>\n Cancel\n </Button>,\n <Button key=\"submit\" onClick={handleSubmit}>\n Save\n </Button>,\n ],\n );\n }\n },\n [closeDialog, showDialog],\n );\n\n const getMenuRpcRequest = (\n options: VuuMenuItem,\n ): Omit<VuuRpcMenuRequest, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n };\n\n const menuActionHandler = useCallback<MenuActionHandler>(\n (menuItemId, options) => {\n if (clientSideMenuActionHandler?.(menuItemId, options)) {\n return true;\n } else if (menuItemId === \"MENU_RPC_CALL\") {\n const rpcRequest = getMenuRpcRequest(options as VuuMenuItem);\n\n dataSource\n ?.menuRpcCall(rpcRequest)\n .then((rpcResponse: Omit<VuuRpcResponse, \"requestId\">) => {\n if (rpcResponse) {\n if (onRpcResponse?.(rpcResponse) === true) {\n return true;\n }\n if (isActionMessage(rpcResponse)) {\n if (hasShowNotificationAction(rpcResponse)) {\n const {\n action: { message, title = \"Success\" },\n } = rpcResponse;\n showNotification({\n type: \"success\",\n body: message,\n header: title,\n });\n } else if (isOpenBulkEditResponse(rpcResponse)) {\n showBulkEditDialog(\n dataSource,\n rpcResponse.action.table,\n getColumnsFromOptions(options),\n );\n } else if (isSessionTableActionMessage(rpcResponse)) {\n showSessionEditingForm(dataSource, rpcResponse.action);\n } else if (isCustomComponentActionMessage(rpcResponse)) {\n showCustomComponentInDialog(\n rpcResponse.action.renderComponent,\n dataSource,\n rpcResponse.action.table,\n );\n }\n }\n }\n });\n return true;\n } else if (menuItemId === \"link-table\") {\n if (dataSource) {\n dataSource.visualLink = options as LinkDescriptorWithLabel;\n }\n return true;\n } else {\n console.log(\n `useViewServer handleMenuAction, can't handle action type ${menuItemId}`,\n );\n }\n\n return false;\n },\n [\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n showBulkEditDialog,\n showCustomComponentInDialog,\n showNotification,\n showSessionEditingForm,\n ],\n );\n\n return {\n menuBuilder,\n menuActionHandler,\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useVuuMenuActions.js","sources":["../../../../packages/vuu-data-react/src/hooks/useVuuMenuActions.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport {\n type ContextMenuItemDescriptor,\n isGroupMenuItemDescriptor,\n type MenuActionHandler,\n type MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport {\n DataSource,\n DataSourceRow,\n DataSourceVisualLinkCreatedMessage,\n RpcResponseHandler,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport type {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n LinkDescriptorWithLabel,\n OpenDialogAction,\n VuuDataRowDto,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n BulkEditDialog,\n BulkEditPanel,\n isTableLocation,\n} from \"@vuu-ui/vuu-table\";\nimport type {\n ColumnDescriptor,\n TableContextMenuDef,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n dataSourceRowToDataRowDto,\n getLayoutComponent,\n hasShowNotificationAction,\n isActionMessage,\n isCustomComponentActionMessage,\n isOpenBulkEditResponse,\n isSessionTableActionMessage,\n metadataKeys,\n toColumnName,\n useData,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback } from \"react\";\nimport {\n FormConfig,\n FormFieldDescriptor,\n SessionEditingForm,\n} from \"../session-editing-form\";\nimport { useModal } from \"@vuu-ui/vuu-ui-controls\";\n\nexport interface MenuActionConfig {\n vuuMenu?: VuuMenu;\n visualLink?: DataSourceVisualLinkCreatedMessage;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport interface VuuMenuActionHookProps {\n /**\n * By default, vuuMenuActions will be handled automatically. When activated, a\n * message will be sent to server and response will be handled here too.\n * This prop allows client to provide a custom handler for a menu Item. This will\n * take priority and if handler returns true, no further processing for the menu\n * item will be handled by Vuu. This can also be used to prevent an item from being\n * actioned, even when no custom handling is intended. If the handler returns false,\n * Vuu will process the menuItem.\n */\n clientSideMenuActionHandler?: MenuActionHandler;\n dataSource?: DataSource;\n menuActionConfig?: MenuActionConfig;\n onRpcResponse?: RpcResponseHandler;\n}\n\nexport interface VuuCellContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n field: string;\n value: VuuRowDataItemType;\n}\nexport interface VuuRowContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n row: VuuDataRowDto;\n}\nexport interface VuuSelectedRowsContextMenuItemOptions extends VuuMenuItem {\n columns: ColumnDescriptor[];\n}\n\nconst isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nconst isCellMenu = (\n options: VuuMenuItem,\n): options is VuuCellContextMenuItemOptions => options.context === \"cell\";\n\nexport const isRowMenu = (\n options: VuuMenuItem,\n): options is VuuRowContextMenuItemOptions => options.context === \"row\";\n\nexport const isSelectionMenu = (\n options: VuuMenuItem,\n): options is VuuSelectedRowsContextMenuItemOptions =>\n options.context === \"selected-rows\";\n\nconst getColumnsFromOptions = (options: unknown) => {\n if (options && typeof options === \"object\" && \"columns\" in options) {\n return options.columns as VuuSelectedRowsContextMenuItemOptions[\"columns\"];\n }\n};\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst { KEY } = metadataKeys;\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: TableContextMenuOptions,\n) => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.column.name,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.column.name]],\n };\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: dataSourceRowToDataRowDto(options.row, options.columnMap),\n rowKey: options.row[KEY],\n };\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n };\n default:\n return menu;\n }\n};\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0,\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options),\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length,\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.column.name;\n }\n\n return true;\n};\n\nconst buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n id: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options),\n )\n .filter(\n (childMenu) => childMenu !== undefined,\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nconst keyFirst = (c1: FormFieldDescriptor, c2: FormFieldDescriptor) =>\n c1.isKeyField ? -1 : c2.isKeyField ? 1 : 0;\n\nconst defaultFormConfig = {\n fields: [],\n key: \"\",\n title: \"\",\n};\n\nconst configFromSchema = (schema?: TableSchema): FormConfig | undefined => {\n if (schema) {\n const { columns, key } = schema;\n return {\n key,\n title: `Parameters for command`,\n fields: columns\n .map((col) => ({\n description: col.name,\n label: col.name,\n name: col.name,\n type: col.serverDataType,\n isKeyField: col.name === key,\n }))\n .sort(keyFirst),\n };\n }\n};\n\nconst getFormConfig = (\n action: OpenDialogAction & { tableSchema: TableSchema },\n) => {\n const { tableSchema: schema } = action;\n const config = configFromSchema(schema) ?? defaultFormConfig;\n\n return {\n config,\n schema,\n };\n};\n\nexport const useVuuMenuActions = ({\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n}: VuuMenuActionHookProps): TableContextMenuDef => {\n const { VuuDataSource } = useData();\n const menuBuilder: MenuBuilder<TableMenuLocation, TableContextMenuOptions> =\n useCallback(\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource) {\n const { links, menu } = dataSource;\n const { visualLink } = dataSource;\n\n if (location === \"grid\" && links && !visualLink) {\n links.forEach((linkDescriptor: LinkDescriptorWithLabel) => {\n const { link, label: linkLabel } = linkDescriptor;\n const label = linkLabel ? linkLabel : link.toTable;\n descriptors.push({\n label: `Link to ${label}`,\n id: \"link-table\",\n options: linkDescriptor,\n });\n });\n }\n\n if (menu && isTableLocation(location)) {\n const menuDescriptor = buildMenuDescriptorFromVuuMenu(\n menu,\n location,\n options,\n );\n if (isRoot(menu) && isGroupMenuItemDescriptor(menuDescriptor)) {\n descriptors.push(...menuDescriptor.children);\n } else if (menuDescriptor) {\n descriptors.push(menuDescriptor);\n }\n }\n } else {\n throw Error(\"useVuuMenuActions no dataSource provided\");\n }\n\n return descriptors;\n },\n [dataSource],\n );\n\n const { showDialog, closeDialog, showPrompt } = useModal();\n const { showNotification } = useNotifications();\n\n const showBulkEditDialog = useCallback(\n (ds: DataSource, table: VuuTable, columns?: ColumnDescriptor[]) => {\n const sessionDs = new VuuDataSource({\n columns: columns?.map(toColumnName),\n table,\n viewport: table.table,\n });\n\n const handleClose = () => {\n sessionDs.unsubscribe();\n closeDialog();\n };\n\n showDialog(\n <BulkEditDialog\n columns={columns}\n sessionDs={sessionDs}\n parentDs={ds}\n closeDialog={handleClose}\n />,\n \"Bulk Amend\",\n );\n\n return true;\n },\n [VuuDataSource, closeDialog, showDialog],\n );\n\n const showCustomComponentInDialog = useCallback(\n (componentId: string, ds: DataSource, table: VuuTable) => {\n const sessionDs = new VuuDataSource({\n columns: ds.columns,\n table,\n viewport: table.table,\n });\n\n const handleOpenChangePrompt = (open: boolean) => {\n if (!open) {\n ds.unsubscribe();\n }\n };\n\n const Component = getLayoutComponent(componentId);\n showPrompt(<Component dataSource={sessionDs} />, {\n title: \"Confirm operation on selected rows\",\n onOpenChange: handleOpenChangePrompt,\n });\n },\n [VuuDataSource, showPrompt],\n );\n\n const showSessionEditingForm = useCallback(\n (\n ds: DataSource,\n action: OpenDialogAction & { tableSchema: TableSchema },\n ) => {\n const { tableSchema } = action;\n if (tableSchema) {\n const formConfig = getFormConfig(action);\n showDialog(\n <SessionEditingForm {...formConfig} onClose={closeDialog} />,\n \"Set Parameters\",\n );\n }\n\n const sessionDs = ds.createSessionDataSource?.(action.table);\n const handleSubmit = () => {\n sessionDs?.rpcRequest?.({\n params: {},\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"RPC_REQUEST\",\n });\n closeDialog();\n };\n\n const handleChange = (isValid: boolean) => {\n console.log(\"placeholder: \", isValid);\n };\n\n if (sessionDs) {\n showDialog(\n <BulkEditPanel\n sessionDs={sessionDs}\n onSubmit={handleSubmit}\n parentDs={ds}\n onValidationStatusChange={handleChange}\n />,\n \"Multi Row Edit\",\n [\n <Button key=\"cancel\" onClick={closeDialog}>\n Cancel\n </Button>,\n <Button key=\"submit\" onClick={handleSubmit}>\n Save\n </Button>,\n ],\n );\n }\n },\n [closeDialog, showDialog],\n );\n\n const getMenuRpcRequest = (\n options: VuuMenuItem,\n ): Omit<VuuRpcMenuRequest, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n };\n\n const menuActionHandler = useCallback<MenuActionHandler>(\n (menuItemId, options) => {\n if (clientSideMenuActionHandler?.(menuItemId, options)) {\n return true;\n } else if (menuItemId === \"MENU_RPC_CALL\") {\n const rpcRequest = getMenuRpcRequest(options as VuuMenuItem);\n\n dataSource\n ?.menuRpcCall(rpcRequest)\n .then((rpcResponse: Omit<VuuRpcResponse, \"requestId\">) => {\n if (rpcResponse) {\n if (onRpcResponse?.(rpcResponse) === true) {\n return true;\n }\n if (isActionMessage(rpcResponse)) {\n if (hasShowNotificationAction(rpcResponse)) {\n const {\n action: { message, title = \"Success\" },\n } = rpcResponse;\n showNotification({\n level: \"success\",\n content: message,\n header: title,\n type: \"toast\",\n });\n } else if (isOpenBulkEditResponse(rpcResponse)) {\n showBulkEditDialog(\n dataSource,\n rpcResponse.action.table,\n getColumnsFromOptions(options),\n );\n } else if (isSessionTableActionMessage(rpcResponse)) {\n showSessionEditingForm(dataSource, rpcResponse.action);\n } else if (isCustomComponentActionMessage(rpcResponse)) {\n showCustomComponentInDialog(\n rpcResponse.action.renderComponent,\n dataSource,\n rpcResponse.action.table,\n );\n }\n }\n }\n });\n return true;\n } else if (menuItemId === \"link-table\") {\n if (dataSource) {\n dataSource.visualLink = options as LinkDescriptorWithLabel;\n }\n return true;\n } else {\n console.log(\n `useViewServer handleMenuAction, can't handle action type ${menuItemId}`,\n );\n }\n\n return false;\n },\n [\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n showBulkEditDialog,\n showCustomComponentInDialog,\n showNotification,\n showSessionEditingForm,\n ],\n );\n\n return {\n menuBuilder,\n menuActionHandler,\n };\n};\n"],"names":[],"mappings":"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"}
package/esm/index.js CHANGED
@@ -5,11 +5,12 @@ export { UnsavedChangesReport } from './data-editing/UnsavedChangesReport.js';
5
5
  export { useEditForm } from './data-editing/useEditForm.js';
6
6
  export { CLEAN_FORM, buildFormEditState } from './data-editing/form-edit-state.js';
7
7
  export { VuuDataSourceProvider } from './datasource-provider/VuuDataSourceProvider.js';
8
- export { useLookupValues } from './hooks/useLookupValues.js';
9
8
  export { useSessionDataSource } from './hooks/useSessionDataSource.js';
10
9
  export { isRowMenu, isSelectionMenu, useVuuMenuActions } from './hooks/useVuuMenuActions.js';
11
10
  export { useVuuTables } from './hooks/useVuuTables.js';
12
11
  export { useVisualLinks } from './hooks/useVisualLinks.js';
13
12
  export { getTypeaheadParams, useTypeaheadSuggestions } from './hooks/useTypeaheadSuggestions.js';
14
13
  export { SessionEditingForm } from './session-editing-form/SessionEditingForm.js';
14
+ export { useLookupValues } from './hooks/useLookupValues.js';
15
+ export { useRemoteConnection } from './hooks/useRemoteConnection.js';
15
16
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ var workspaceNotificationCss = ".vuuLostConnectionIndicator {\n\n --spinner-color: var(--vuuSpinner-color, #E23434);\n\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-300);\n justify-content: center;\n\n\n .vuuLostConnectionIndicator-spinner {\n animation: spinner-rounded-comet-anim 1.0s infinite linear;\n width: 75px;\n height: 75px;\n border-radius: 50%;\n background: radial-gradient(farthest-side,var(--spinner-color) 94%,#0000) top/9px 9px no-repeat,\n conic-gradient(#0000 30%,var(--spinner-color));\n mask: radial-gradient(farthest-side,#0000 calc(100% - 4px),#000 0);\n }\n}\n\n@keyframes spinner-rounded-comet-anim {\n 100% {\n transform: rotate(1turn);\n }\n}\n\n\n\n";
2
+
3
+ export { workspaceNotificationCss as default };
4
+ //# sourceMappingURL=LostConnectionIndicator.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LostConnectionIndicator.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,22 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useComponentCssInjection } from '@salt-ds/styles';
3
+ import { useWindow } from '@salt-ds/window';
4
+ import workspaceNotificationCss from './LostConnectionIndicator.css.js';
5
+
6
+ const classBase = "vuuLostConnectionIndicator";
7
+ const LostConnectionIndicator = () => {
8
+ const targetWindow = useWindow();
9
+ useComponentCssInjection({
10
+ testId: "vuu-toast-notification",
11
+ css: workspaceNotificationCss,
12
+ window: targetWindow
13
+ });
14
+ return /* @__PURE__ */ jsxs("div", { className: classBase, children: [
15
+ /* @__PURE__ */ jsx("h2", { className: `${classBase}-title`, children: "CONNECTION LOST" }),
16
+ /* @__PURE__ */ jsx("div", { className: `${classBase}-spinner` }),
17
+ /* @__PURE__ */ jsx("h3", { className: `${classBase}-status`, children: "RECONNECTING" })
18
+ ] });
19
+ };
20
+
21
+ export { LostConnectionIndicator };
22
+ //# sourceMappingURL=LostConnectionIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LostConnectionIndicator.js","sources":["../../../../packages/vuu-data-react/src/lost-connection-indicator/LostConnectionIndicator.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport workspaceNotificationCss from \"./LostConnectionIndicator.css\";\n\nconst classBase = \"vuuLostConnectionIndicator\";\n\nexport const LostConnectionIndicator = () => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toast-notification\",\n css: workspaceNotificationCss,\n window: targetWindow,\n });\n\n return (\n <div className={classBase}>\n <h2 className={`${classBase}-title`}>CONNECTION LOST</h2>\n <div className={`${classBase}-spinner`} />\n <h3 className={`${classBase}-status`}>RECONNECTING</h3>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AAKA,MAAM,SAAY,GAAA,4BAAA;AAEX,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAA,wBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAU,QAAe,EAAA,iBAAA,EAAA,CAAA;AAAA,oBACnD,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAY,QAAA,CAAA,EAAA,CAAA;AAAA,wBACvC,IAAG,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAAW,QAAY,EAAA,cAAA,EAAA;AAAA,GACpD,EAAA,CAAA;AAEJ;;;;"}
package/package.json CHANGED
@@ -1,23 +1,24 @@
1
1
  {
2
- "version": "0.13.45",
2
+ "version": "0.13.46",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "devDependencies": {
6
- "@vuu-ui/vuu-data-types": "0.13.45",
7
- "@vuu-ui/vuu-filter-types": "0.13.45",
8
- "@vuu-ui/vuu-popups": "0.13.45",
9
- "@vuu-ui/vuu-protocol-types": "0.13.45",
10
- "@vuu-ui/vuu-table-types": "0.13.45"
6
+ "@vuu-ui/vuu-data-types": "0.13.46",
7
+ "@vuu-ui/vuu-filter-types": "0.13.46",
8
+ "@vuu-ui/vuu-popups": "0.13.46",
9
+ "@vuu-ui/vuu-protocol-types": "0.13.46",
10
+ "@vuu-ui/vuu-table-types": "0.13.46"
11
11
  },
12
12
  "dependencies": {
13
- "@vuu-ui/vuu-context-menu": "0.13.45",
14
- "@vuu-ui/vuu-data-remote": "0.13.45",
15
- "@vuu-ui/vuu-filter-parser": "0.13.45",
16
- "@vuu-ui/vuu-layout": "0.13.45",
17
- "@vuu-ui/vuu-popups": "0.13.45",
18
- "@vuu-ui/vuu-ui-controls": "0.13.45",
19
- "@vuu-ui/vuu-utils": "0.13.45",
20
- "@vuu-ui/vuu-table": "0.13.45",
13
+ "@vuu-ui/vuu-context-menu": "0.13.46",
14
+ "@vuu-ui/vuu-data-remote": "0.13.46",
15
+ "@vuu-ui/vuu-filter-parser": "0.13.46",
16
+ "@vuu-ui/vuu-filters": "0.13.46",
17
+ "@vuu-ui/vuu-layout": "0.13.46",
18
+ "@vuu-ui/vuu-popups": "0.13.46",
19
+ "@vuu-ui/vuu-ui-controls": "0.13.46",
20
+ "@vuu-ui/vuu-utils": "0.13.46",
21
+ "@vuu-ui/vuu-table": "0.13.46",
21
22
  "@salt-ds/core": "1.48.0",
22
23
  "@salt-ds/styles": "0.2.1",
23
24
  "@salt-ds/window": "0.1.1"
@@ -0,0 +1,10 @@
1
+ import { MenuProps } from "@salt-ds/core";
2
+ import { MenuActionHandler } from "./ContextMenuProvider";
3
+ import { ContextMenuItemDescriptor } from "./menu-utils";
4
+ export interface ContextMenuProps extends Pick<MenuProps, "open" | "onOpenChange"> {
5
+ menuHandler: MenuActionHandler;
6
+ menuItemDescriptors: ContextMenuItemDescriptor[];
7
+ x: number;
8
+ y: number;
9
+ }
10
+ export declare const ContextMenu: ({ menuHandler, menuItemDescriptors, onOpenChange, open, x, y, }: ContextMenuProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { ReactElement, ReactNode } from "react";
2
+ import { ContextMenuItemDescriptor } from "./menu-utils";
3
+ export type MenuActionHandler<T extends string = string, Options = unknown> = (menuItemId: T, options?: Options) => boolean | undefined;
4
+ export type MenuBuilder<Location extends string = string, Options = unknown> = (location: Location, options: Options) => ContextMenuItemDescriptor[];
5
+ export interface ContextMenuContextType {
6
+ menuBuilders: MenuBuilder[];
7
+ menuActionHandler: MenuActionHandler;
8
+ showContextMenu: (contextMenu: ReactElement | null) => void;
9
+ }
10
+ export declare const ContextMenuContext: import("react").Context<ContextMenuContextType | null>;
11
+ export interface ContextMenuProviderProps<L extends string = string, O = unknown> {
12
+ children: ReactNode;
13
+ menuActionHandler?: MenuActionHandler;
14
+ menuBuilder?: MenuBuilder<L, O>;
15
+ }
16
+ export declare const ContextMenuProvider: <L extends string = string, O = unknown>({ children, menuActionHandler, menuBuilder, }: ContextMenuProviderProps<L, O>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export { ContextMenuProvider, type MenuActionHandler, type MenuBuilder, } from "./ContextMenuProvider";
2
+ export { isGroupMenuItemDescriptor, type ContextMenuGroupItemDescriptor, type ContextMenuItemDescriptor, } from "./menu-utils";
3
+ export { useContextMenu } from "./useContextMenu";
@@ -0,0 +1,17 @@
1
+ import { MenuActionHandler } from "./ContextMenuProvider";
2
+ export interface ContextMenuItemBase {
3
+ className?: string;
4
+ icon?: string;
5
+ label: string;
6
+ location?: string;
7
+ }
8
+ export interface ContextMenuLeafItemDescriptor extends ContextMenuItemBase {
9
+ id: string;
10
+ options?: unknown;
11
+ }
12
+ export interface ContextMenuGroupItemDescriptor extends ContextMenuItemBase {
13
+ children: ContextMenuItemDescriptor[];
14
+ }
15
+ export type ContextMenuItemDescriptor = ContextMenuLeafItemDescriptor | ContextMenuGroupItemDescriptor;
16
+ export declare const isGroupMenuItemDescriptor: (menuItem?: ContextMenuItemDescriptor) => menuItem is ContextMenuGroupItemDescriptor;
17
+ export declare const menuItemsFromMenuDescriptors: (menuDescriptors: ContextMenuItemDescriptor[], menuActionHandler: MenuActionHandler) => import("react/jsx-runtime").JSX.Element[];
@@ -0,0 +1,10 @@
1
+ import { ContextMenuProps } from "./ContextMenu";
2
+ import { MenuActionHandler, MenuBuilder } from "./ContextMenuProvider";
3
+ export type EventLike = {
4
+ clientX: number;
5
+ clientY: number;
6
+ preventDefault?: () => void;
7
+ stopPropagation?: () => void;
8
+ };
9
+ export type ShowContextMenu = (e: EventLike, location: string, options: unknown, contextMenuProps?: Partial<Pick<ContextMenuProps, "onOpenChange" | "x" | "y">>) => boolean;
10
+ export declare const useContextMenu: (menuBuilder?: MenuBuilder, menuActionHandler?: MenuActionHandler) => ShowContextMenu;
@@ -22,7 +22,15 @@ export interface DataItemEditControlProps {
22
22
  errorMessage?: string;
23
23
  onCommit: CommitHandler<HTMLElement>;
24
24
  table?: TableSchemaTable;
25
+ /**
26
+ * Where provided, only these values will be offered as suggestions.
27
+ * They will be validated against server with Typeahead service, so
28
+ * unavailable options are not offered.
29
+ * Recommended for toggle filters, not usually necessary for other
30
+ * filter variants.
31
+ */
32
+ values?: string[];
25
33
  variant?: FilterControlVariant;
26
34
  }
27
35
  export type ValidationStatus = "initial" | true | string;
28
- export declare const getDataItemEditControl: ({ InputProps, TypeaheadProps, className, commitOnBlur, commitWhenCleared, dataDescriptor, errorMessage, onCommit, table, variant, }: DataItemEditControlProps) => import("react/jsx-runtime").JSX.Element;
36
+ export declare const getDataItemEditControl: ({ InputProps, TypeaheadProps, className, commitOnBlur, commitWhenCleared, dataDescriptor, errorMessage, onCommit, table, values, variant, }: DataItemEditControlProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,3 @@
1
- export * from "./useLookupValues";
2
1
  export * from "./useSessionDataSource";
3
2
  export * from "./useVuuMenuActions";
4
3
  export * from "./useVuuTables";
@@ -0,0 +1,6 @@
1
+ import { WebSocketConnectionState } from "@vuu-ui/vuu-data-remote";
2
+ export interface ConnectionStatusHookProps {
3
+ connectionState?: WebSocketConnectionState;
4
+ }
5
+ export declare const getConnectinStateDisplayText: (connectionState: WebSocketConnectionState) => "Unable to connect to data service" | "Failed to connect" | "Failed to re-connect" | "Attempting to connect to data service" | "Attempting to reconnect to data service" | undefined;
6
+ export declare const useConnectionStatus: ({ connectionState: connectionStateProp, }: ConnectionStatusHookProps) => WebSocketConnectionState<import("packages/vuu-data-remote/src/WebSocketConnection").ConnectionStatus>;
@@ -0,0 +1,6 @@
1
+ import type { VuuUser } from "@vuu-ui/vuu-utils";
2
+ export interface RemoteConnectionHookProps {
3
+ serverUrl?: string;
4
+ user: VuuUser;
5
+ }
6
+ export declare const useRemoteConnection: ({ serverUrl, user, }: RemoteConnectionHookProps) => void;
@@ -2,3 +2,5 @@ export * from "./data-editing";
2
2
  export * from "./datasource-provider";
3
3
  export * from "./hooks";
4
4
  export * from "./session-editing-form";
5
+ export { useLookupValues } from "./hooks/useLookupValues";
6
+ export { useRemoteConnection } from "./hooks/useRemoteConnection";
@@ -0,0 +1 @@
1
+ export declare const LostConnectionIndicator: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export * from "./popup";
2
+ export * from "./popup-menu";
3
+ export * from "./portal";
4
+ export * from "./tooltip";
5
+ export * from "./notifications";
@@ -0,0 +1,5 @@
1
+ import { NotificationsContext } from "./NotificationsContext";
2
+ export interface NotificationsCenterProps {
3
+ notificationsContext: NotificationsContext;
4
+ }
5
+ export declare const NotificationsCenter: ({ notificationsContext, }: NotificationsCenterProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { ValueOf } from "@vuu-ui/vuu-utils";
2
+ import { ReactNode } from "react";
3
+ export type DispatchShowNotification = (notification: Notification) => void;
4
+ export type DispatchHideNotification = () => void;
5
+ export declare const NotificationLevel: {
6
+ readonly Error: "error";
7
+ readonly Info: "info";
8
+ readonly Success: "success";
9
+ readonly Warning: "warning";
10
+ };
11
+ export type NotificationLevel = ValueOf<typeof NotificationLevel>;
12
+ export declare const NotificationType: {
13
+ readonly Toast: "toast";
14
+ readonly Workspace: "workspace";
15
+ };
16
+ export type NotificationType = ValueOf<typeof NotificationType>;
17
+ interface NotificationDescriptorBase<T extends NotificationType> {
18
+ level: NotificationLevel;
19
+ type: T;
20
+ }
21
+ export interface ToastNotificationDescriptor extends NotificationDescriptorBase<"toast"> {
22
+ content: string;
23
+ header: string;
24
+ }
25
+ export interface WorkspaceNotificationDescriptor extends NotificationDescriptorBase<"workspace"> {
26
+ content: ReactNode;
27
+ }
28
+ export type Notification = ToastNotificationDescriptor | WorkspaceNotificationDescriptor;
29
+ export declare const isToastNotification: (n: Notification) => n is ToastNotificationDescriptor;
30
+ export declare const isWorkspaceNotification: (n: Notification) => n is WorkspaceNotificationDescriptor;
31
+ export type NotificationsContext = {
32
+ hideNotification: DispatchHideNotification;
33
+ showNotification: DispatchShowNotification;
34
+ setNotify: (showNotificationDispatcher: DispatchShowNotification, hideNotificationDispatcher: DispatchHideNotification) => void;
35
+ };
36
+ export {};
@@ -0,0 +1,9 @@
1
+ import { ReactElement } from "react";
2
+ import { DispatchHideNotification, DispatchShowNotification } from "./NotificationsContext";
3
+ export declare const NotificationsProvider: (props: {
4
+ children: ReactElement | ReactElement[];
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const useNotifications: () => {
7
+ hideNotification: DispatchHideNotification;
8
+ showNotification: DispatchShowNotification;
9
+ };
@@ -0,0 +1,7 @@
1
+ import type { ToastNotificationDescriptor } from "./NotificationsContext";
2
+ export type ToastNotificationProps = {
3
+ top: number;
4
+ notification: ToastNotificationDescriptor;
5
+ animated?: boolean;
6
+ };
7
+ export declare const ToastNotification: (props: ToastNotificationProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { HTMLAttributes, ReactNode } from "react";
2
+ export interface WorkspaceNotificationProps extends HTMLAttributes<HTMLDivElement> {
3
+ children: ReactNode;
4
+ }
5
+ export declare const WorkspaceNotification: ({ children, className, style: styleProp, ...htmlAttributes }: WorkspaceNotificationProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export * from "./NotificationsContext";
2
+ export * from "./NotificationsProvider";
3
+ export * from "./ToastNotification";
@@ -0,0 +1,12 @@
1
+ import { HTMLAttributes, RefObject } from "react";
2
+ import { Position } from "./getPositionRelativeToAnchor";
3
+ export type PopupPlacement = "absolute" | "auto" | "below" | "below-center" | "below-right" | "below-full-width" | "center" | "right";
4
+ export interface PopupComponentProps extends HTMLAttributes<HTMLDivElement> {
5
+ anchorElement: RefObject<HTMLElement | null>;
6
+ minWidth?: number | string;
7
+ offsetLeft?: number;
8
+ offsetTop?: number;
9
+ placement: PopupPlacement;
10
+ position?: Position;
11
+ }
12
+ export declare const PopupComponent: ({ children, className, anchorElement, minWidth, offsetLeft, offsetTop, placement, position: positionProp, }: PopupComponentProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,19 @@
1
+ import { PopupPlacement } from "./Popup";
2
+ export type Visibility = "hidden" | "visible";
3
+ export type Position = {
4
+ left: number;
5
+ minWidth?: number | string;
6
+ top: number;
7
+ visibility?: Visibility;
8
+ width?: number;
9
+ };
10
+ export declare const getPositionRelativeToAnchor: (anchorElement: HTMLElement, placement: PopupPlacement, offsetLeft: number, offsetTop: number, minWidth?: number | string, dimensions?: {
11
+ height: number;
12
+ width: number;
13
+ }) => {
14
+ left: number;
15
+ minWidth?: number | string;
16
+ top: number;
17
+ visibility?: Visibility;
18
+ width?: number;
19
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./Popup";
2
+ export * from "./useAnchoredPosition";
@@ -0,0 +1,7 @@
1
+ import { Position } from "./getPositionRelativeToAnchor";
2
+ import { PopupComponentProps } from "./Popup";
3
+ export type AnchoredPositionHookProps = Pick<PopupComponentProps, "anchorElement" | "minWidth" | "offsetLeft" | "offsetTop" | "placement" | "position">;
4
+ export declare const useAnchoredPosition: ({ anchorElement, minWidth, offsetLeft, offsetTop, placement, position: positionProp, }: AnchoredPositionHookProps) => {
5
+ position: Position | undefined;
6
+ popupRef: ((el: HTMLDivElement | null) => void) | undefined;
7
+ };
@@ -0,0 +1,45 @@
1
+ import { ButtonProps } from "@salt-ds/core";
2
+ import { MenuActionHandler, MenuBuilder } from "@vuu-ui/vuu-context-menu";
3
+ import { HTMLAttributes, KeyboardEvent, RefObject } from "react";
4
+ import { PopupPlacement } from "../popup/Popup";
5
+ export type TabAwayClosePopup = {
6
+ closedBy?: string;
7
+ type: "tab-away";
8
+ event: KeyboardEvent;
9
+ };
10
+ export type ClickAwayClosePopup = {
11
+ closedBy?: string;
12
+ type: "click-away";
13
+ mouseEvt: MouseEvent;
14
+ };
15
+ export type EscapeClosePopup = {
16
+ closedBy?: string;
17
+ event: KeyboardEvent;
18
+ type: "escape";
19
+ };
20
+ export type MenuActionClosePopup = {
21
+ closedBy?: string;
22
+ menuId: string;
23
+ options: unknown;
24
+ type: "menu-action";
25
+ };
26
+ export type PopupCloseReason = ClickAwayClosePopup | EscapeClosePopup | MenuActionClosePopup | TabAwayClosePopup;
27
+ export type MenuCloseHandler = (reason?: PopupCloseReason) => void;
28
+ export interface PopupMenuProps extends HTMLAttributes<HTMLButtonElement> {
29
+ anchorElement?: RefObject<HTMLElement | null>;
30
+ disabled?: boolean;
31
+ icon?: string;
32
+ label?: string;
33
+ menuActionHandler?: MenuActionHandler;
34
+ menuBuilder?: MenuBuilder;
35
+ menuClassName?: string;
36
+ menuLocation?: string;
37
+ menuOptions?: {
38
+ [key: string]: unknown;
39
+ };
40
+ onMenuClose?: MenuCloseHandler;
41
+ onMenuOpen?: () => void;
42
+ popupPlacement?: PopupPlacement;
43
+ variant?: ButtonProps["variant"];
44
+ }
45
+ export declare const PopupMenu: ({ anchorElement, className, disabled, label, icon, id: idProp, menuActionHandler, menuBuilder, menuClassName, menuLocation, menuOptions, onMenuClose, onMenuOpen, popupPlacement, tabIndex, variant, ...htmlAttributes }: PopupMenuProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1 @@
1
+ export * from "./PopupMenu";
@@ -0,0 +1,19 @@
1
+ import { AriaAttributes, MouseEvent } from "react";
2
+ import { PopupMenuProps } from "./PopupMenu";
3
+ import { PopupPlacement } from "../popup/Popup";
4
+ export interface PopupMenuHookProps extends Pick<PopupMenuProps, "anchorElement" | "menuActionHandler" | "menuBuilder" | "menuClassName" | "menuOptions" | "onMenuClose" | "onMenuOpen"> {
5
+ id: string;
6
+ menuLocation: string;
7
+ popupPlacement: PopupPlacement;
8
+ tabIndex: number;
9
+ }
10
+ export declare const usePopupMenu: ({ anchorElement, id, menuActionHandler, menuBuilder, menuLocation, menuOptions, onMenuClose, onMenuOpen, popupPlacement, tabIndex, }: PopupMenuHookProps) => {
11
+ ariaAttributes: AriaAttributes;
12
+ buttonProps: {
13
+ id: string;
14
+ onClick: (e: MouseEvent<HTMLElement>) => void;
15
+ tabIndex: number;
16
+ };
17
+ menuOpen: boolean;
18
+ rootRef: import("react").RefObject<HTMLButtonElement | null>;
19
+ };
@@ -0,0 +1,42 @@
1
+ import { ThemeAttributes } from "@vuu-ui/vuu-utils";
2
+ import { ReactNode } from "react";
3
+ export interface PortalProps {
4
+ /**
5
+ * The children to render into the `container`.
6
+ */
7
+ children?: ReactNode;
8
+ /**
9
+ * An HTML element, component instance, or function that returns either.
10
+ * The `container` will have the portal children appended to it.
11
+ *
12
+ * By default, it uses the body of the top-level document object,
13
+ * so it's simply `document.body` most of the time.
14
+ */
15
+ container?: Element | (() => Element | null) | null;
16
+ /**
17
+ * Id of element into which portal will be rendered. If this node does not exist on the document,
18
+ * it will be created for you. If more than one value is provided, the first element found will
19
+ * be used.
20
+ */
21
+ id?: string | string[];
22
+ /**
23
+ * Callback invoked immediately after render (in layoutEffect). Can be
24
+ * used to check position vis-a-vis viewport and adjust if out of bounds
25
+ */
26
+ onRender?: () => void;
27
+ /**
28
+ * Allow conditional rendering of this Portal, if false, will render nothing.
29
+ * Defaults to true
30
+ */
31
+ open?: boolean;
32
+ /**
33
+ * ThemeAttributes can be passed in for cases where ContextMenu is
34
+ * rendered via popup-service showPopup, outside the Context hierarchy.
35
+ */
36
+ themeAttributes?: ThemeAttributes;
37
+ }
38
+ /**
39
+ * Portals provide a first-class way to render children into a DOM node
40
+ * that exists outside the DOM hierarchy of the parent component.
41
+ */
42
+ export declare const Portal: ({ children, container: containerProp, id, onRender, open, themeAttributes, }: PortalProps) => import("react").ReactPortal | null;
@@ -0,0 +1 @@
1
+ export * from "./Portal";
@@ -0,0 +1,15 @@
1
+ import { CSSProperties, MouseEventHandler, ReactNode, RefObject } from "react";
2
+ import { TooltipPlacement } from "./useTooltipAnchoredPosition";
3
+ export type TooltipStatus = "warning" | "error" | "info";
4
+ export interface TooltipProps {
5
+ anchorElement: RefObject<HTMLElement | null>;
6
+ children: ReactNode;
7
+ className?: string;
8
+ id?: string;
9
+ onMouseEnter: MouseEventHandler;
10
+ onMouseLeave: MouseEventHandler;
11
+ placement: TooltipPlacement | TooltipPlacement[];
12
+ status?: TooltipStatus;
13
+ style?: CSSProperties;
14
+ }
15
+ export declare const Tooltip: ({ anchorElement, children, className, id, onMouseEnter, onMouseLeave, placement: placementProp, status, style: styleProp, }: TooltipProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export * from "./Tooltip";
2
+ export * from "./useTooltip";