@vuu-ui/vuu-shell 0.8.76 → 0.8.78

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 (272) hide show
  1. package/cjs/ShellContextProvider.js +3 -9
  2. package/cjs/ShellContextProvider.js.map +1 -1
  3. package/cjs/app-header/AppHeader.js +3 -1
  4. package/cjs/app-header/AppHeader.js.map +1 -1
  5. package/cjs/application-provider/ApplicationContext.js.map +1 -1
  6. package/cjs/application-provider/ApplicationProvider.js +8 -1
  7. package/cjs/application-provider/ApplicationProvider.js.map +1 -1
  8. package/cjs/feature-provider/FeatureProvider.js +47 -0
  9. package/cjs/feature-provider/FeatureProvider.js.map +1 -0
  10. package/cjs/feature-provider/useVuuFeatures.js +20 -0
  11. package/cjs/feature-provider/useVuuFeatures.js.map +1 -0
  12. package/cjs/index.js +26 -24
  13. package/cjs/index.js.map +1 -1
  14. package/cjs/left-nav/LeftNav.js +12 -6
  15. package/cjs/left-nav/LeftNav.js.map +1 -1
  16. package/cjs/login/LoginPanel.js +3 -3
  17. package/cjs/login/LoginPanel.js.map +1 -1
  18. package/cjs/persistence-manager/LocalPersistenceManager.js +2 -2
  19. package/cjs/persistence-manager/LocalPersistenceManager.js.map +1 -1
  20. package/cjs/persistence-manager/RemotePersistenceManager.js +2 -2
  21. package/cjs/persistence-manager/RemotePersistenceManager.js.map +1 -1
  22. package/cjs/persistence-manager/StaticPersistenceManager.js.map +1 -1
  23. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +6 -4
  24. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -1
  25. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +28 -29
  26. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -1
  27. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +6 -4
  28. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -1
  29. package/cjs/shell-layout-templates/useShellLayout.js.map +1 -1
  30. package/cjs/shell.js +48 -38
  31. package/cjs/shell.js.map +1 -1
  32. package/cjs/user-settings/SettingsForm.js +82 -19
  33. package/cjs/user-settings/SettingsForm.js.map +1 -1
  34. package/cjs/user-settings/UserSettingsPanel.css.js +1 -1
  35. package/cjs/user-settings/UserSettingsPanel.js +2 -1
  36. package/cjs/user-settings/UserSettingsPanel.js.map +1 -1
  37. package/cjs/{layout-management → workspace-management}/LayoutList.js +4 -4
  38. package/cjs/workspace-management/LayoutList.js.map +1 -0
  39. package/cjs/workspace-management/LayoutTile.js.map +1 -0
  40. package/cjs/workspace-management/SaveLayoutPanel.js.map +1 -0
  41. package/cjs/{layout-management/LayoutManagementProvider.js → workspace-management/WorkspaceProvider.js} +24 -25
  42. package/cjs/workspace-management/WorkspaceProvider.js.map +1 -0
  43. package/cjs/{layout-management → workspace-management}/defaultWorkspaceJSON.js +1 -0
  44. package/cjs/workspace-management/defaultWorkspaceJSON.js.map +1 -0
  45. package/cjs/workspace-management/screenshot-utils.js.map +1 -0
  46. package/cjs/{layout-management/useLayoutContextMenuItems.js → workspace-management/useWorkspaceContextMenuItems.js} +6 -6
  47. package/cjs/workspace-management/useWorkspaceContextMenuItems.js.map +1 -0
  48. package/esm/ShellContextProvider.js +2 -7
  49. package/esm/ShellContextProvider.js.map +1 -1
  50. package/esm/app-header/AppHeader.js +3 -1
  51. package/esm/app-header/AppHeader.js.map +1 -1
  52. package/esm/application-provider/ApplicationContext.js.map +1 -1
  53. package/esm/application-provider/ApplicationProvider.js +8 -2
  54. package/esm/application-provider/ApplicationProvider.js.map +1 -1
  55. package/esm/feature-provider/FeatureProvider.js +44 -0
  56. package/esm/feature-provider/FeatureProvider.js.map +1 -0
  57. package/esm/feature-provider/useVuuFeatures.js +18 -0
  58. package/esm/feature-provider/useVuuFeatures.js.map +1 -0
  59. package/esm/index.js +10 -9
  60. package/esm/index.js.map +1 -1
  61. package/esm/left-nav/LeftNav.js +12 -6
  62. package/esm/left-nav/LeftNav.js.map +1 -1
  63. package/esm/login/LoginPanel.js +3 -3
  64. package/esm/login/LoginPanel.js.map +1 -1
  65. package/esm/persistence-manager/LocalPersistenceManager.js +2 -2
  66. package/esm/persistence-manager/LocalPersistenceManager.js.map +1 -1
  67. package/esm/persistence-manager/RemotePersistenceManager.js +2 -2
  68. package/esm/persistence-manager/RemotePersistenceManager.js.map +1 -1
  69. package/esm/persistence-manager/StaticPersistenceManager.js.map +1 -1
  70. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +6 -4
  71. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -1
  72. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +31 -32
  73. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -1
  74. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +6 -4
  75. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -1
  76. package/esm/shell-layout-templates/useShellLayout.js.map +1 -1
  77. package/esm/shell.js +50 -40
  78. package/esm/shell.js.map +1 -1
  79. package/esm/user-settings/SettingsForm.js +84 -21
  80. package/esm/user-settings/SettingsForm.js.map +1 -1
  81. package/esm/user-settings/UserSettingsPanel.css.js +1 -1
  82. package/esm/user-settings/UserSettingsPanel.js +2 -1
  83. package/esm/user-settings/UserSettingsPanel.js.map +1 -1
  84. package/esm/{layout-management → workspace-management}/LayoutList.js +4 -4
  85. package/esm/workspace-management/LayoutList.js.map +1 -0
  86. package/esm/workspace-management/LayoutTile.js.map +1 -0
  87. package/esm/workspace-management/SaveLayoutPanel.js.map +1 -0
  88. package/esm/{layout-management/LayoutManagementProvider.js → workspace-management/WorkspaceProvider.js} +25 -25
  89. package/esm/workspace-management/WorkspaceProvider.js.map +1 -0
  90. package/esm/{layout-management → workspace-management}/defaultWorkspaceJSON.js +1 -0
  91. package/esm/workspace-management/defaultWorkspaceJSON.js.map +1 -0
  92. package/esm/workspace-management/screenshot-utils.js.map +1 -0
  93. package/esm/{layout-management/useLayoutContextMenuItems.js → workspace-management/useWorkspaceContextMenuItems.js} +6 -6
  94. package/esm/workspace-management/useWorkspaceContextMenuItems.js.map +1 -0
  95. package/package.json +12 -11
  96. package/types/ShellContextProvider.d.ts +10 -0
  97. package/types/{vuu-shell/src/app-header → app-header}/AppHeader.d.ts +1 -2
  98. package/types/{vuu-shell/src/application-provider → application-provider}/ApplicationContext.d.ts +1 -0
  99. package/types/{vuu-shell/src/application-provider → application-provider}/ApplicationProvider.d.ts +2 -1
  100. package/types/feature-provider/FeatureProvider.d.ts +14 -0
  101. package/types/feature-provider/index.d.ts +2 -0
  102. package/types/feature-provider/useVuuFeatures.d.ts +9 -0
  103. package/types/{vuu-shell/src/index.d.ts → index.d.ts} +3 -3
  104. package/types/{vuu-shell/src/left-nav → left-nav}/LeftNav.d.ts +2 -2
  105. package/types/{vuu-shell/src/persistence-manager → persistence-manager}/LocalPersistenceManager.d.ts +1 -2
  106. package/types/{vuu-shell/src/persistence-manager → persistence-manager}/PersistenceManager.d.ts +1 -2
  107. package/types/{vuu-shell/src/persistence-manager → persistence-manager}/RemotePersistenceManager.d.ts +1 -2
  108. package/types/{vuu-shell/src/persistence-manager → persistence-manager}/StaticPersistenceManager.d.ts +2 -3
  109. package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/useShellLayout.d.ts +1 -5
  110. package/types/{vuu-shell/src/shell.d.ts → shell.d.ts} +4 -5
  111. package/types/{vuu-shell/src/user-settings → user-settings}/SettingsForm.d.ts +8 -2
  112. package/types/{vuu-shell/src/layout-management → workspace-management}/LayoutTile.d.ts +1 -1
  113. package/types/{vuu-shell/src/layout-management → workspace-management}/SaveLayoutPanel.d.ts +1 -1
  114. package/types/workspace-management/WorkspaceProvider.d.ts +53 -0
  115. package/types/{vuu-shell/src/layout-management → workspace-management}/defaultWorkspaceJSON.d.ts +3 -3
  116. package/types/workspace-management/index.d.ts +5 -0
  117. package/types/{vuu-shell/src/layout-management/useLayoutContextMenuItems.d.ts → workspace-management/useWorkspaceContextMenuItems.d.ts} +1 -1
  118. package/cjs/layout-management/LayoutList.js.map +0 -1
  119. package/cjs/layout-management/LayoutManagementProvider.js.map +0 -1
  120. package/cjs/layout-management/LayoutTile.js.map +0 -1
  121. package/cjs/layout-management/SaveLayoutPanel.js.map +0 -1
  122. package/cjs/layout-management/defaultWorkspaceJSON.js.map +0 -1
  123. package/cjs/layout-management/screenshot-utils.js.map +0 -1
  124. package/cjs/layout-management/useLayoutContextMenuItems.js.map +0 -1
  125. package/cjs/session-editing-form/SessionEditingForm.css.js +0 -6
  126. package/cjs/session-editing-form/SessionEditingForm.css.js.map +0 -1
  127. package/cjs/session-editing-form/SessionEditingForm.js +0 -302
  128. package/cjs/session-editing-form/SessionEditingForm.js.map +0 -1
  129. package/esm/layout-management/LayoutList.js.map +0 -1
  130. package/esm/layout-management/LayoutManagementProvider.js.map +0 -1
  131. package/esm/layout-management/LayoutTile.js.map +0 -1
  132. package/esm/layout-management/SaveLayoutPanel.js.map +0 -1
  133. package/esm/layout-management/defaultWorkspaceJSON.js.map +0 -1
  134. package/esm/layout-management/screenshot-utils.js.map +0 -1
  135. package/esm/layout-management/useLayoutContextMenuItems.js.map +0 -1
  136. package/esm/session-editing-form/SessionEditingForm.css.js +0 -4
  137. package/esm/session-editing-form/SessionEditingForm.css.js.map +0 -1
  138. package/esm/session-editing-form/SessionEditingForm.js +0 -300
  139. package/esm/session-editing-form/SessionEditingForm.js.map +0 -1
  140. package/types/vuu-layout/src/Component.d.ts +0 -6
  141. package/types/vuu-layout/src/LayoutContainer.d.ts +0 -6
  142. package/types/vuu-layout/src/dock-layout/DockLayout.d.ts +0 -7
  143. package/types/vuu-layout/src/dock-layout/Drawer.d.ts +0 -17
  144. package/types/vuu-layout/src/dock-layout/index.d.ts +0 -2
  145. package/types/vuu-layout/src/drag-drop/BoxModel.d.ts +0 -143
  146. package/types/vuu-layout/src/drag-drop/DragState.d.ts +0 -46
  147. package/types/vuu-layout/src/drag-drop/Draggable.d.ts +0 -24
  148. package/types/vuu-layout/src/drag-drop/DropMenu.d.ts +0 -9
  149. package/types/vuu-layout/src/drag-drop/DropTarget.d.ts +0 -60
  150. package/types/vuu-layout/src/drag-drop/DropTargetRenderer.d.ts +0 -17
  151. package/types/vuu-layout/src/drag-drop/dragDropTypes.d.ts +0 -51
  152. package/types/vuu-layout/src/drag-drop/index.d.ts +0 -4
  153. package/types/vuu-layout/src/flexbox/Flexbox.d.ts +0 -4
  154. package/types/vuu-layout/src/flexbox/FlexboxLayout.d.ts +0 -6
  155. package/types/vuu-layout/src/flexbox/FluidGrid.d.ts +0 -6
  156. package/types/vuu-layout/src/flexbox/FluidGridLayout.d.ts +0 -6
  157. package/types/vuu-layout/src/flexbox/Splitter.d.ts +0 -12
  158. package/types/vuu-layout/src/flexbox/flexbox-utils.d.ts +0 -12
  159. package/types/vuu-layout/src/flexbox/flexboxTypes.d.ts +0 -51
  160. package/types/vuu-layout/src/flexbox/index.d.ts +0 -4
  161. package/types/vuu-layout/src/flexbox/useResponsiveSizing.d.ts +0 -10
  162. package/types/vuu-layout/src/flexbox/useSplitterResizing.d.ts +0 -2
  163. package/types/vuu-layout/src/index.d.ts +0 -17
  164. package/types/vuu-layout/src/layout-action.d.ts +0 -19
  165. package/types/vuu-layout/src/layout-header/Header.d.ts +0 -13
  166. package/types/vuu-layout/src/layout-header/index.d.ts +0 -1
  167. package/types/vuu-layout/src/layout-provider/LayoutProvider.d.ts +0 -15
  168. package/types/vuu-layout/src/layout-provider/LayoutProviderContext.d.ts +0 -10
  169. package/types/vuu-layout/src/layout-provider/index.d.ts +0 -2
  170. package/types/vuu-layout/src/layout-provider/useLayoutDragDrop.d.ts +0 -4
  171. package/types/vuu-layout/src/layout-reducer/flexUtils.d.ts +0 -22
  172. package/types/vuu-layout/src/layout-reducer/index.d.ts +0 -4
  173. package/types/vuu-layout/src/layout-reducer/insert-layout-element.d.ts +0 -8
  174. package/types/vuu-layout/src/layout-reducer/layout-reducer.d.ts +0 -3
  175. package/types/vuu-layout/src/layout-reducer/layoutTypes.d.ts +0 -131
  176. package/types/vuu-layout/src/layout-reducer/layoutUtils.d.ts +0 -44
  177. package/types/vuu-layout/src/layout-reducer/move-layout-element.d.ts +0 -3
  178. package/types/vuu-layout/src/layout-reducer/remove-layout-element.d.ts +0 -3
  179. package/types/vuu-layout/src/layout-reducer/replace-layout-element.d.ts +0 -6
  180. package/types/vuu-layout/src/layout-reducer/resize-flex-children.d.ts +0 -4
  181. package/types/vuu-layout/src/layout-reducer/wrap-layout-element.d.ts +0 -9
  182. package/types/vuu-layout/src/layout-view/View.d.ts +0 -10
  183. package/types/vuu-layout/src/layout-view/index.d.ts +0 -3
  184. package/types/vuu-layout/src/layout-view/useView.d.ts +0 -21
  185. package/types/vuu-layout/src/layout-view/useViewBroadcastChannel.d.ts +0 -7
  186. package/types/vuu-layout/src/layout-view/useViewResize.d.ts +0 -7
  187. package/types/vuu-layout/src/layout-view/viewTypes.d.ts +0 -45
  188. package/types/vuu-layout/src/layout-view-actions/ViewContext.d.ts +0 -33
  189. package/types/vuu-layout/src/layout-view-actions/index.d.ts +0 -2
  190. package/types/vuu-layout/src/layout-view-actions/useViewActionDispatcher.d.ts +0 -4
  191. package/types/vuu-layout/src/palette/Palette.d.ts +0 -25
  192. package/types/vuu-layout/src/palette/index.d.ts +0 -1
  193. package/types/vuu-layout/src/placeholder/LayoutStartPanel.d.ts +0 -5
  194. package/types/vuu-layout/src/placeholder/Placeholder.d.ts +0 -17
  195. package/types/vuu-layout/src/placeholder/index.d.ts +0 -1
  196. package/types/vuu-layout/src/responsive/breakpoints.d.ts +0 -4
  197. package/types/vuu-layout/src/responsive/index.d.ts +0 -3
  198. package/types/vuu-layout/src/responsive/use-breakpoints.d.ts +0 -7
  199. package/types/vuu-layout/src/responsive/useResizeObserver.d.ts +0 -13
  200. package/types/vuu-layout/src/responsive/utils.d.ts +0 -6
  201. package/types/vuu-layout/src/stack/Stack.d.ts +0 -3
  202. package/types/vuu-layout/src/stack/StackLayout.d.ts +0 -6
  203. package/types/vuu-layout/src/stack/index.d.ts +0 -3
  204. package/types/vuu-layout/src/stack/stackTypes.d.ts +0 -24
  205. package/types/vuu-layout/src/use-persistent-state.d.ts +0 -11
  206. package/types/vuu-layout/src/utils/index.d.ts +0 -5
  207. package/types/vuu-layout/src/utils/pathUtils.d.ts +0 -31
  208. package/types/vuu-layout/src/utils/propUtils.d.ts +0 -5
  209. package/types/vuu-layout/src/utils/refUtils.d.ts +0 -2
  210. package/types/vuu-layout/src/utils/styleUtils.d.ts +0 -3
  211. package/types/vuu-layout/src/utils/typeOf.d.ts +0 -7
  212. package/types/vuu-shell/src/ShellContextProvider.d.ts +0 -17
  213. package/types/vuu-shell/src/layout-management/LayoutManagementProvider.d.ts +0 -55
  214. package/types/vuu-shell/src/layout-management/index.d.ts +0 -6
  215. package/types/vuu-shell/src/layout-management/layoutTypes.d.ts +0 -19
  216. package/types/vuu-shell/src/persistence-provider/PersistenceProviderNext.d.ts +0 -10
  217. package/types/vuu-shell/src/persistence-provider/index.d.ts +0 -1
  218. package/types/vuu-shell/src/session-editing-form/SessionEditingForm.d.ts +0 -24
  219. package/types/vuu-shell/src/session-editing-form/index.d.ts +0 -1
  220. package/cjs/{layout-management → workspace-management}/LayoutList.css.js +0 -0
  221. package/cjs/{layout-management → workspace-management}/LayoutList.css.js.map +0 -0
  222. package/cjs/{layout-management → workspace-management}/LayoutTile.css.js +0 -0
  223. package/cjs/{layout-management → workspace-management}/LayoutTile.css.js.map +0 -0
  224. package/cjs/{layout-management → workspace-management}/LayoutTile.js +0 -0
  225. package/cjs/{layout-management → workspace-management}/SaveLayoutPanel.css.js +0 -0
  226. package/cjs/{layout-management → workspace-management}/SaveLayoutPanel.css.js.map +0 -0
  227. package/cjs/{layout-management → workspace-management}/SaveLayoutPanel.js +2 -2
  228. package/cjs/{layout-management → workspace-management}/screenshot-utils.js +0 -0
  229. package/esm/{layout-management → workspace-management}/LayoutList.css.js +0 -0
  230. package/esm/{layout-management → workspace-management}/LayoutList.css.js.map +0 -0
  231. package/esm/{layout-management → workspace-management}/LayoutTile.css.js +0 -0
  232. package/esm/{layout-management → workspace-management}/LayoutTile.css.js.map +0 -0
  233. package/esm/{layout-management → workspace-management}/LayoutTile.js +0 -0
  234. package/esm/{layout-management → workspace-management}/SaveLayoutPanel.css.js +0 -0
  235. package/esm/{layout-management → workspace-management}/SaveLayoutPanel.css.js.map +0 -0
  236. package/esm/{layout-management → workspace-management}/SaveLayoutPanel.js +2 -2
  237. /package/esm/{layout-management → workspace-management}/screenshot-utils.js +0 -0
  238. /package/types/{vuu-shell/src/app-header → app-header}/index.d.ts +0 -0
  239. /package/types/{vuu-shell/src/application-provider → application-provider}/index.d.ts +0 -0
  240. /package/types/{vuu-shell/src/connection-status → connection-status}/ConnectionStatusIndicator.d.ts +0 -0
  241. /package/types/{vuu-shell/src/connection-status → connection-status}/index.d.ts +0 -0
  242. /package/types/{vuu-shell/src/datasource-provider → datasource-provider}/DataSourceProvider.d.ts +0 -0
  243. /package/types/{vuu-shell/src/datasource-provider → datasource-provider}/index.d.ts +0 -0
  244. /package/types/{vuu-shell/src/feature → feature}/Feature.d.ts +0 -0
  245. /package/types/{vuu-shell/src/feature → feature}/FeatureErrorBoundary.d.ts +0 -0
  246. /package/types/{vuu-shell/src/feature → feature}/Loader.d.ts +0 -0
  247. /package/types/{vuu-shell/src/feature → feature}/index.d.ts +0 -0
  248. /package/types/{vuu-shell/src/feature-list → feature-list}/FeatureList.d.ts +0 -0
  249. /package/types/{vuu-shell/src/feature-list → feature-list}/index.d.ts +0 -0
  250. /package/types/{vuu-shell/src/get-layout-history.d.ts → get-layout-history.d.ts} +0 -0
  251. /package/types/{vuu-shell/src/left-nav → left-nav}/index.d.ts +0 -0
  252. /package/types/{vuu-shell/src/login → login}/LoginPanel.d.ts +0 -0
  253. /package/types/{vuu-shell/src/login → login}/VuuLogo.d.ts +0 -0
  254. /package/types/{vuu-shell/src/login → login}/index.d.ts +0 -0
  255. /package/types/{vuu-shell/src/login → login}/login-utils.d.ts +0 -0
  256. /package/types/{vuu-shell/src/persistence-manager → persistence-manager}/PersistenceProvider.d.ts +0 -0
  257. /package/types/{vuu-shell/src/persistence-manager → persistence-manager}/index.d.ts +0 -0
  258. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/context-panel/ContextPanel.d.ts +0 -0
  259. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/context-panel/index.d.ts +0 -0
  260. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/full-height-left-panel/useFullHeightLeftPanel.d.ts +0 -0
  261. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/index.d.ts +0 -0
  262. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/inlay-left-panel/useInlayLeftPanel.d.ts +0 -0
  263. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/side-panel/SidePanel.d.ts +0 -0
  264. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/side-panel/index.d.ts +0 -0
  265. /package/types/{vuu-shell/src/shell-layout-templates → shell-layout-templates}/simple-content-pane/useSimpleContentPane.d.ts +0 -0
  266. /package/types/{vuu-shell/src/theme-switch → theme-switch}/ThemeSwitch.d.ts +0 -0
  267. /package/types/{vuu-shell/src/theme-switch → theme-switch}/index.d.ts +0 -0
  268. /package/types/{vuu-shell/src/use-force-render.d.ts → use-force-render.d.ts} +0 -0
  269. /package/types/{vuu-shell/src/user-settings → user-settings}/UserSettingsPanel.d.ts +0 -0
  270. /package/types/{vuu-shell/src/user-settings → user-settings}/index.d.ts +0 -0
  271. /package/types/{vuu-shell/src/layout-management → workspace-management}/LayoutList.d.ts +0 -0
  272. /package/types/{vuu-shell/src/layout-management → workspace-management}/screenshot-utils.d.ts +0 -0
@@ -3,6 +3,7 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var vuuUtils = require('@vuu-ui/vuu-utils');
5
5
  var core = require('@salt-ds/core');
6
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
6
7
  var React = require('react');
7
8
 
8
9
  const isOption = (value) => typeof value === "object" && "label" in value && "label" in value;
@@ -14,7 +15,14 @@ const defaultPropertyValue = {
14
15
  number: 0,
15
16
  string: ""
16
17
  };
17
- function getFormControl(property, changeHandler, selectHandler, currentValue = property.defaultValue ?? defaultPropertyValue[property.type]) {
18
+ function FormControl({
19
+ property,
20
+ changeHandler,
21
+ selectHandler,
22
+ inputHandler,
23
+ currentValue = property.defaultValue ?? defaultPropertyValue[property.type]
24
+ }) {
25
+ const [value, setValue] = React.useState(currentValue);
18
26
  if (isBooleanProperty(property)) {
19
27
  const checked = typeof currentValue === "boolean" ? currentValue : property.defaultValue ?? false;
20
28
  return /* @__PURE__ */ jsxRuntime.jsx(core.Switch, { checked, onChange: changeHandler });
@@ -27,8 +35,8 @@ function getFormControl(property, changeHandler, selectHandler, currentValue = p
27
35
  value: currentValue,
28
36
  onChange: changeHandler,
29
37
  children: property.values.map((valueOrOption) => {
30
- const [value, label] = getValueAndLabel(valueOrOption);
31
- return /* @__PURE__ */ jsxRuntime.jsx(core.ToggleButton, { value, children: label }, value);
38
+ const [value2, label] = getValueAndLabel(valueOrOption);
39
+ return /* @__PURE__ */ jsxRuntime.jsx(core.ToggleButton, { value: value2, children: label }, value2);
32
40
  })
33
41
  }
34
42
  );
@@ -39,28 +47,69 @@ function getFormControl(property, changeHandler, selectHandler, currentValue = p
39
47
  value: currentValue,
40
48
  onSelectionChange: selectHandler,
41
49
  children: property.values.map((valueOrOption) => {
42
- const [value, label] = getValueAndLabel(valueOrOption);
50
+ const [value2, label] = getValueAndLabel(valueOrOption);
43
51
  return /* @__PURE__ */ jsxRuntime.jsx(
44
52
  core.Option,
45
53
  {
46
54
  value: label,
47
55
  "data-field": property.name
48
56
  },
49
- value
57
+ value2
50
58
  );
51
59
  })
52
60
  }
53
61
  );
54
62
  }
55
63
  } else {
56
- const value = isStringOrNumber(currentValue) ? currentValue : isStringOrNumber(property.defaultValue) ? property.defaultValue : "";
57
- return /* @__PURE__ */ jsxRuntime.jsx(core.Input, { value });
64
+ const valid = isValidInput(currentValue, property.type);
65
+ const content = getTooltipContent(property.type, valid);
66
+ const TooltipProps = {
67
+ tooltipContent: content
68
+ };
69
+ return /* @__PURE__ */ jsxRuntime.jsx(
70
+ vuuUiControls.VuuInput,
71
+ {
72
+ onCommit: inputHandler,
73
+ onChange: (e) => setValue(e.target.value),
74
+ validationStatus: valid,
75
+ TooltipProps,
76
+ value
77
+ },
78
+ property.name
79
+ );
80
+ }
81
+ return null;
82
+ }
83
+ const isValidInput = (value, type) => {
84
+ if (value === "") {
85
+ return void 0;
86
+ }
87
+ if (type === "string") {
88
+ return "success";
89
+ } else if (type === "number") {
90
+ if (Number.isNaN(Number(value))) {
91
+ return "error";
92
+ }
93
+ return "success";
94
+ }
95
+ };
96
+ function getTooltipContent(type, valid) {
97
+ if (valid === "error") {
98
+ if (type === "number") {
99
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Field is expecting a number" });
100
+ } else if (type === "string") {
101
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Field is expecting a string" });
102
+ } else {
103
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Please contact Admin for more information on expected type" });
104
+ }
105
+ } else {
106
+ return void 0;
58
107
  }
59
108
  }
60
109
  const SettingsForm = ({
61
- settingsSchema: applicationSettingsSchema,
62
- settings: applicationSettings,
63
- onSettingChanged: onApplicationSettingChanged,
110
+ settingsSchema,
111
+ settings,
112
+ onSettingChanged,
64
113
  ...htmlAttributes
65
114
  }) => {
66
115
  const getFieldNameFromEventTarget = (evt) => {
@@ -75,30 +124,44 @@ const SettingsForm = ({
75
124
  (event) => {
76
125
  const fieldName = getFieldNameFromEventTarget(event);
77
126
  const { checked, value } = event.target;
78
- onApplicationSettingChanged(fieldName, checked ?? value);
127
+ onSettingChanged(fieldName, checked ?? value);
79
128
  },
80
- [onApplicationSettingChanged]
129
+ [onSettingChanged]
81
130
  );
82
131
  const selectHandler = React.useCallback(
83
132
  (event, [selected]) => {
84
133
  const fieldName = getFieldNameFromEventTarget(event);
85
- onApplicationSettingChanged(fieldName, selected);
134
+ onSettingChanged(fieldName, selected);
135
+ },
136
+ [onSettingChanged]
137
+ );
138
+ const inputHandler = React.useCallback(
139
+ (event) => {
140
+ const fieldName = getFieldNameFromEventTarget(event);
141
+ const { value } = event.target;
142
+ if (!Number.isNaN(Number(value)) && value != "") {
143
+ const numValue = Number(value);
144
+ onSettingChanged(fieldName, numValue);
145
+ } else {
146
+ onSettingChanged(fieldName, value);
147
+ }
86
148
  },
87
- [onApplicationSettingChanged]
149
+ [onSettingChanged]
88
150
  );
89
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, children: applicationSettingsSchema.properties.map((property) => /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": property.name, children: [
151
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, children: settingsSchema.properties.map((property) => /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": property.name, children: [
90
152
  /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: property.label }),
91
- getFormControl(
153
+ FormControl({
92
154
  property,
93
155
  changeHandler,
94
156
  selectHandler,
95
- applicationSettings[property.name]
96
- )
157
+ inputHandler,
158
+ currentValue: settings[property.name]
159
+ })
97
160
  ] }, property.name)) });
98
161
  };
99
162
 
163
+ exports.FormControl = FormControl;
100
164
  exports.SettingsForm = SettingsForm;
101
- exports.getFormControl = getFormControl;
102
165
  exports.isBooleanProperty = isBooleanProperty;
103
166
  exports.isOption = isOption;
104
167
  exports.isStringOrNumber = isStringOrNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Input,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n} from \"react\";\n\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function getFormControl(\n property: SettingsProperty,\n changeHandler: FormEventHandler,\n selectHandler: DropdownProps[\"onSelectionChange\"],\n currentValue: VuuRowDataItemType = property.defaultValue ??\n defaultPropertyValue[property.type]\n) {\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : property.defaultValue ?? false;\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const value = isStringOrNumber(currentValue)\n ? currentValue\n : isStringOrNumber(property.defaultValue)\n ? property.defaultValue\n : \"\";\n return <Input value={value} />;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema: applicationSettingsSchema,\n settings: applicationSettings,\n onSettingChanged: onApplicationSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and input buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onApplicationSettingChanged(fieldName, checked ?? value);\n },\n [onApplicationSettingChanged]\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onApplicationSettingChanged(fieldName, selected);\n },\n [onApplicationSettingChanged]\n );\n\n return (\n <div {...htmlAttributes}>\n {applicationSettingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {getFormControl(\n property,\n changeHandler,\n selectHandler,\n applicationSettings[property.name]\n )}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["jsx","Switch","ToggleButtonGroup","ToggleButton","Dropdown","Option","Input","queryClosest","useCallback","jsxs","FormField","FormFieldLabel"],"mappings":";;;;;;;AAoCa,MAAA,QAAA,GAAW,CACtB,KAEA,KAAA,OAAO,UAAU,QAAY,IAAA,OAAA,IAAW,SAAS,OAAW,IAAA,MAAA;AA2BvD,MAAM,iBAAoB,GAAA,CAC/B,QACgC,KAAA,QAAA,CAAS,IAAS,KAAA,UAAA;AAE7C,MAAM,mBAAmB,CAAC,KAAA,KAC/B,OAAO,KAAU,KAAA,QAAA,IAAY,OAAO,KAAU,KAAA,SAAA;AAEhD,MAAM,gBAAmB,GAAA,CAAC,KACxB,KAAA,QAAA,CAAS,KAAK,CAAI,GAAA,CAAC,KAAM,CAAA,KAAA,EAAO,KAAM,CAAA,KAAK,CAAI,GAAA,CAAC,OAAO,KAAK,CAAA,CAAA;AAE9D,MAAM,oBAGF,GAAA;AAAA,EACF,OAAS,EAAA,KAAA;AAAA,EACT,MAAQ,EAAA,CAAA;AAAA,EACR,MAAQ,EAAA,EAAA;AACV,CAAA,CAAA;AAGgB,SAAA,cAAA,CACd,QACA,EAAA,aAAA,EACA,aACA,EAAA,YAAA,GAAmC,SAAS,YAC1C,IAAA,oBAAA,CAAqB,QAAS,CAAA,IAAI,CACpC,EAAA;AACA,EAAI,IAAA,iBAAA,CAAkB,QAAQ,CAAG,EAAA;AAC/B,IAAA,MAAM,UACJ,OAAO,YAAA,KAAiB,SACpB,GAAA,YAAA,GACA,SAAS,YAAgB,IAAA,KAAA,CAAA;AAE/B,IAAA,uBAAQA,cAAA,CAAAC,WAAA,EAAA,EAAO,OAAkB,EAAA,QAAA,EAAU,aAAe,EAAA,CAAA,CAAA;AAAA,GAC5D;AAEA,EAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAM,CAAG,EAAA;AAClC,IAAI,IAAA,QAAA,CAAS,MAAO,CAAA,MAAA,IAAU,CAAG,EAAA;AAC/B,MACE,uBAAAD,cAAA;AAAA,QAACE,sBAAA;AAAA,QAAA;AAAA,UACC,KAAO,EAAA,YAAA;AAAA,UACP,QAAU,EAAA,aAAA;AAAA,UAET,QAAS,EAAA,QAAA,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,aAAkB,KAAA;AACtC,YAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,iBAAiB,aAAa,CAAA,CAAA;AACrD,YAAA,uBACGF,cAAA,CAAAG,iBAAA,EAAA,EAAyB,KACvB,EAAA,QAAA,EAAA,KAAA,EAAA,EADgB,KAEnB,CAAA,CAAA;AAAA,WAEH,CAAA;AAAA,SAAA;AAAA,OACH,CAAA;AAAA,KAEO,MAAA,IAAA,QAAA,CAAS,MAAO,CAAA,MAAA,GAAS,CAAG,EAAA;AACrC,MACE,uBAAAH,cAAA;AAAA,QAACI,aAAA;AAAA,QAAA;AAAA,UACC,KAAO,EAAA,YAAA;AAAA,UACP,iBAAmB,EAAA,aAAA;AAAA,UAElB,QAAS,EAAA,QAAA,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,aAAkB,KAAA;AACtC,YAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,iBAAiB,aAAa,CAAA,CAAA;AACrD,YACE,uBAAAJ,cAAA;AAAA,cAACK,WAAA;AAAA,cAAA;AAAA,gBACC,KAAO,EAAA,KAAA;AAAA,gBAEP,cAAY,QAAS,CAAA,IAAA;AAAA,eAAA;AAAA,cADhB,KAAA;AAAA,aAEN,CAAA;AAAA,WAEJ,CAAA;AAAA,SAAA;AAAA,OACH,CAAA;AAAA,KAEJ;AAAA,GACK,MAAA;AACL,IAAM,MAAA,KAAA,GAAQ,gBAAiB,CAAA,YAAY,CACvC,GAAA,YAAA,GACA,iBAAiB,QAAS,CAAA,YAAY,CACtC,GAAA,QAAA,CAAS,YACT,GAAA,EAAA,CAAA;AACJ,IAAO,uBAAAL,cAAA,CAACM,cAAM,KAAc,EAAA,CAAA,CAAA;AAAA,GAC9B;AACF,CAAA;AAKO,MAAM,eAAe,CAAC;AAAA,EAC3B,cAAgB,EAAA,yBAAA;AAAA,EAChB,QAAU,EAAA,mBAAA;AAAA,EACV,gBAAkB,EAAA,2BAAA;AAAA,EAClB,GAAG,cAAA;AACL,CAAyB,KAAA;AACvB,EAAM,MAAA,2BAAA,GAA8B,CAAC,GAAwB,KAAA;AAC3D,IAAA,MAAM,YAAe,GAAAC,qBAAA,CAAa,GAAI,CAAA,MAAA,EAAQ,cAAc,CAAA,CAAA;AAC5D,IAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,OAAA,CAAQ,KAAO,EAAA;AAC9C,MAAA,OAAO,aAAa,OAAQ,CAAA,KAAA,CAAA;AAAA,KACvB,MAAA;AACL,MAAA,MAAM,MAAM,kCAAkC,CAAA,CAAA;AAAA,KAChD;AAAA,GACF,CAAA;AAGA,EAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,IACpB,CAAC,KAAU,KAAA;AACT,MAAM,MAAA,SAAA,GAAY,4BAA4B,KAAK,CAAA,CAAA;AACnD,MAAA,MAAM,EAAE,OAAA,EAAS,KAAM,EAAA,GAAI,KAAM,CAAA,MAAA,CAAA;AACjC,MAA4B,2BAAA,CAAA,SAAA,EAAW,WAAW,KAAK,CAAA,CAAA;AAAA,KACzD;AAAA,IACA,CAAC,2BAA2B,CAAA;AAAA,GAC9B,CAAA;AAGA,EAAA,MAAM,aAAgB,GAAAA,iBAAA;AAAA,IACpB,CAAC,KAAA,EAAuB,CAAC,QAAQ,CAAgB,KAAA;AAC/C,MAAM,MAAA,SAAA,GAAY,4BAA4B,KAAK,CAAA,CAAA;AACnD,MAAA,2BAAA,CAA4B,WAAW,QAAQ,CAAA,CAAA;AAAA,KACjD;AAAA,IACA,CAAC,2BAA2B,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAA,uBACGR,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EACN,QAA0B,EAAA,yBAAA,CAAA,UAAA,CAAW,GAAI,CAAA,CAAC,QACzC,qBAAAS,eAAA,CAACC,cAAU,EAAA,EAAA,YAAA,EAAY,SAAS,IAC9B,EAAA,QAAA,EAAA;AAAA,oBAACV,cAAA,CAAAW,mBAAA,EAAA,EAAgB,mBAAS,KAAM,EAAA,CAAA;AAAA,IAC/B,cAAA;AAAA,MACC,QAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,mBAAA,CAAoB,SAAS,IAAI,CAAA;AAAA,KACnC;AAAA,GAPyC,EAAA,EAAA,QAAA,CAAS,IAQpD,CACD,CACH,EAAA,CAAA,CAAA;AAEJ;;;;;;;;"}
1
+ {"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue = property.defaultValue ?? defaultPropertyValue[property.type],\n}: {\n property: SettingsProperty;\n changeHandler: FormEventHandler;\n selectHandler: DropdownProps[\"onSelectionChange\"];\n inputHandler: FormEventHandler;\n currentValue: VuuRowDataItemType;\n}) {\n const [value, setValue] = useState(currentValue);\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : property.defaultValue ?? false;\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const valid = isValidInput(currentValue, property.type);\n const content = getTooltipContent(property.type, valid);\n const TooltipProps = {\n tooltipContent: content,\n };\n return (\n <VuuInput\n key={property.name}\n onCommit={inputHandler}\n onChange={(e) => setValue((e.target as HTMLInputElement).value)}\n validationStatus={valid}\n TooltipProps={TooltipProps}\n value={value as string}\n />\n );\n }\n return null;\n}\n\n//Validation logic for input boxes\nconst isValidInput = (value: unknown, type: unknown) => {\n if (value === \"\") {\n return undefined;\n }\n if (type === \"string\") {\n return \"success\";\n } else if (type === \"number\") {\n if (Number.isNaN(Number(value))) {\n return \"error\";\n }\n return \"success\";\n }\n};\n\n//Function to Generate Tooltip Content\nfunction getTooltipContent(type: string, valid: string | undefined) {\n if (valid === \"error\") {\n if (type === \"number\") {\n return <p>Field is expecting a number</p>;\n } else if (type === \"string\") {\n return <p>Field is expecting a string</p>;\n } else {\n return <p>Please contact Admin for more information on expected type</p>;\n }\n } else {\n return undefined;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema,\n settings,\n onSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and switch buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onSettingChanged(fieldName, checked ?? value);\n },\n [onSettingChanged]\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onSettingChanged(fieldName, selected);\n },\n [onSettingChanged]\n );\n\n // Change Handler for input boxes\n const inputHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { value } = event.target as HTMLInputElement;\n if (!Number.isNaN(Number(value)) && value != \"\") {\n const numValue = Number(value);\n onSettingChanged(fieldName, numValue);\n } else {\n onSettingChanged(fieldName, value);\n }\n },\n [onSettingChanged]\n );\n return (\n <div {...htmlAttributes}>\n {settingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue: settings[property.name],\n })}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["useState","jsx","Switch","ToggleButtonGroup","value","ToggleButton","Dropdown","Option","VuuInput","queryClosest","useCallback","jsxs","FormField","FormFieldLabel"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var userSettingsPanelCss = ".vuuUserSettingsPanel {\n height: 100%;\n}\n";
3
+ var userSettingsPanelCss = ".vuuUserSettingsPanel {\n height: 100%;\n overflow: auto;\n}";
4
4
 
5
5
  module.exports = userSettingsPanelCss;
6
6
  //# sourceMappingURL=UserSettingsPanel.css.js.map
@@ -5,6 +5,7 @@ var styles = require('@salt-ds/styles');
5
5
  var window = require('@salt-ds/window');
6
6
  var ApplicationProvider = require('../application-provider/ApplicationProvider.js');
7
7
  var SettingsForm = require('./SettingsForm.js');
8
+ var cx = require('clsx');
8
9
  var UserSettingsPanel$1 = require('./UserSettingsPanel.css.js');
9
10
 
10
11
  const classBase = "vuuUserSettingsPanel";
@@ -23,7 +24,7 @@ const UserSettingsPanel = ({
23
24
  window: targetWindow
24
25
  });
25
26
  if (userSettingsSchema) {
26
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, className: classBase, children: /* @__PURE__ */ jsxRuntime.jsx(
27
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, className: cx(classBase, "vuuScrollable"), children: /* @__PURE__ */ jsxRuntime.jsx(
27
28
  SettingsForm.SettingsForm,
28
29
  {
29
30
  settings: userSettings,
@@ -1 +1 @@
1
- {"version":3,"file":"UserSettingsPanel.js","sources":["../../src/user-settings/UserSettingsPanel.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport { useApplicationSettings } from \"../application-provider\";\nimport { SettingsForm } from \"./SettingsForm\";\n\nimport userSettingsPanelCss from \"./UserSettingsPanel.css\";\n\nexport type UserSettingsPanelProps = HTMLAttributes<HTMLDivElement>;\n\nconst classBase = \"vuuUserSettingsPanel\";\n\nexport const UserSettingsPanel = ({\n ...htmlAttributes\n}: UserSettingsPanelProps) => {\n const targetWindow = useWindow();\n\n const {\n onUserSettingChanged,\n userSettings = {},\n userSettingsSchema,\n } = useApplicationSettings();\n\n useComponentCssInjection({\n testId: \"vuu-user-settings-panel\",\n css: userSettingsPanelCss,\n window: targetWindow,\n });\n\n // Without a schema, we can't render a form\n // We could render a list of input boxes but lets require a schema for now.\n if (userSettingsSchema) {\n return (\n <div {...htmlAttributes} className={classBase}>\n <SettingsForm\n settings={userSettings}\n settingsSchema={userSettingsSchema}\n onSettingChanged={onUserSettingChanged}\n />\n </div>\n );\n } else {\n console.warn(\"no settingsSchema provided to UserSettingsPanel\");\n return null;\n }\n};\n"],"names":["useWindow","useApplicationSettings","useComponentCssInjection","userSettingsPanelCss","jsx","SettingsForm"],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,sBAAA,CAAA;AAEX,MAAM,oBAAoB,CAAC;AAAA,EAChC,GAAG,cAAA;AACL,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAE/B,EAAM,MAAA;AAAA,IACJ,oBAAA;AAAA,IACA,eAAe,EAAC;AAAA,IAChB,kBAAA;AAAA,MACEC,0CAAuB,EAAA,CAAA;AAE3B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAID,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,SAClC,EAAA,QAAA,kBAAAA,cAAA;AAAA,MAACC,yBAAA;AAAA,MAAA;AAAA,QACC,QAAU,EAAA,YAAA;AAAA,QACV,cAAgB,EAAA,kBAAA;AAAA,QAChB,gBAAkB,EAAA,oBAAA;AAAA,OAAA;AAAA,KAEtB,EAAA,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,OAAA,CAAQ,KAAK,iDAAiD,CAAA,CAAA;AAC9D,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;"}
1
+ {"version":3,"file":"UserSettingsPanel.js","sources":["../../src/user-settings/UserSettingsPanel.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport { useApplicationSettings } from \"../application-provider\";\nimport { SettingsForm } from \"./SettingsForm\";\nimport cx from \"clsx\";\n\nimport userSettingsPanelCss from \"./UserSettingsPanel.css\";\n\nexport type UserSettingsPanelProps = HTMLAttributes<HTMLDivElement>;\n\nconst classBase = \"vuuUserSettingsPanel\";\n\nexport const UserSettingsPanel = ({\n ...htmlAttributes\n}: UserSettingsPanelProps) => {\n const targetWindow = useWindow();\n\n const {\n onUserSettingChanged,\n userSettings = {},\n userSettingsSchema,\n } = useApplicationSettings();\n\n useComponentCssInjection({\n testId: \"vuu-user-settings-panel\",\n css: userSettingsPanelCss,\n window: targetWindow,\n });\n\n // Without a schema, we can't render a form\n // We could render a list of input boxes but lets require a schema for now.\n if (userSettingsSchema) {\n return (\n <div {...htmlAttributes} className={cx(classBase, \"vuuScrollable\")}>\n <SettingsForm\n settings={userSettings}\n settingsSchema={userSettingsSchema}\n onSettingChanged={onUserSettingChanged}\n />\n </div>\n );\n } else {\n console.warn(\"no settingsSchema provided to UserSettingsPanel\");\n return null;\n }\n};\n"],"names":["useWindow","useApplicationSettings","useComponentCssInjection","userSettingsPanelCss","jsx","SettingsForm"],"mappings":";;;;;;;;;;AAWA,MAAM,SAAY,GAAA,sBAAA,CAAA;AAEX,MAAM,oBAAoB,CAAC;AAAA,EAChC,GAAG,cAAA;AACL,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAE/B,EAAM,MAAA;AAAA,IACJ,oBAAA;AAAA,IACA,eAAe,EAAC;AAAA,IAChB,kBAAA;AAAA,MACEC,0CAAuB,EAAA,CAAA;AAE3B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAID,EAAA,IAAI,kBAAoB,EAAA;AACtB,IACE,uBAAAC,cAAA,CAAC,SAAK,GAAG,cAAA,EAAgB,WAAW,EAAG,CAAA,SAAA,EAAW,eAAe,CAC/D,EAAA,QAAA,kBAAAA,cAAA;AAAA,MAACC,yBAAA;AAAA,MAAA;AAAA,QACC,QAAU,EAAA,YAAA;AAAA,QACV,cAAgB,EAAA,kBAAA;AAAA,QAChB,gBAAkB,EAAA,oBAAA;AAAA,OAAA;AAAA,KAEtB,EAAA,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,OAAA,CAAQ,KAAK,iDAAiD,CAAA,CAAA;AAC9D,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;"}
@@ -2,12 +2,12 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
5
6
  var styles = require('@salt-ds/styles');
6
7
  var window = require('@salt-ds/window');
7
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
8
- var LayoutManagementProvider = require('./LayoutManagementProvider.js');
9
- var LayoutTile = require('./LayoutTile.js');
10
8
  var cx = require('clsx');
9
+ var LayoutTile = require('./LayoutTile.js');
10
+ var WorkspaceProvider = require('./WorkspaceProvider.js');
11
11
  var LayoutList$1 = require('./LayoutList.css.js');
12
12
 
13
13
  const classBase = "vuuLayoutList";
@@ -22,7 +22,7 @@ const LayoutList = ({
22
22
  css: LayoutList$1,
23
23
  window: targetWindow
24
24
  });
25
- const { layoutMetadata, loadLayoutById } = LayoutManagementProvider.useLayoutManager();
25
+ const { layoutMetadata, loadLayoutById } = WorkspaceProvider.useWorkspace();
26
26
  const handleLoadLayout = React.useCallback(
27
27
  (layoutId) => {
28
28
  if (layoutId) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutList.js","sources":["../../src/workspace-management/LayoutList.tsx"],"sourcesContent":["import { IconButton, List, ListItem } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutMetadata } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useCallback, useMemo } from \"react\";\nimport { LayoutTile } from \"./LayoutTile\";\nimport { useWorkspace } from \"./WorkspaceProvider\";\n\nimport layoutListCss from \"./LayoutList.css\";\n\ntype LayoutGroups = {\n [groupName: string]: LayoutMetadata[];\n};\n\nconst classBase = \"vuuLayoutList\";\n\nexport const LayoutList = ({\n className,\n title,\n ...htmlAttributes\n}: HTMLAttributes<HTMLDivElement>) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-layout-list\",\n css: layoutListCss,\n window: targetWindow,\n });\n\n const { layoutMetadata, loadLayoutById } = useWorkspace();\n\n const handleLoadLayout = useCallback(\n (layoutId?: string) => {\n if (layoutId) {\n loadLayoutById(layoutId);\n }\n },\n [loadLayoutById]\n );\n\n const layoutsByGroup = layoutMetadata.reduce((acc: LayoutGroups, cur) => {\n if (acc[cur.group]) {\n return {\n ...acc,\n [cur.group]: [...acc[cur.group], cur],\n };\n }\n return {\n ...acc,\n [cur.group]: [cur],\n };\n }, {});\n\n const content = useMemo<JSX.Element[]>(() => {\n return Object.entries(layoutsByGroup).map(\n ([heading, layoutMetadata], index) => (\n <div className={`${classBase}-group`} key={index}>\n <div className={`${classBase}-groupHeader`}>{heading}</div>\n <List<LayoutMetadata, \"none\">\n height={undefined}\n itemHeight={68}\n selectionStrategy=\"none\"\n source={layoutMetadata}\n ListItem={({ item, ...props }) => (\n <ListItem {...props}>\n <LayoutTile\n {...htmlAttributes}\n key={item?.id}\n metadata={item as LayoutMetadata}\n onLoadLayout={handleLoadLayout}\n />\n <IconButton\n className={`${classBase}-menu`}\n data-embedded\n icon=\"more-vert\"\n variant=\"secondary\"\n />\n </ListItem>\n )}\n />\n </div>\n )\n );\n }, [handleLoadLayout, htmlAttributes, layoutsByGroup]);\n\n return (\n <div {...htmlAttributes} className={cx(classBase, \"vuuScrollable\")}>\n <div className={`${classBase}-header`}>{title}</div>\n <div className={`${classBase}-content`}>{content}</div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","layoutListCss","useWorkspace","useCallback","useMemo","layoutMetadata","jsxs","jsx","List","ListItem","createElement","LayoutTile","IconButton"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutTile.js","sources":["../../src/workspace-management/LayoutTile.tsx"],"sourcesContent":["import { LayoutMetadata } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\n\nimport layoutTileCss from \"./LayoutTile.css\";\n\nconst classBase = \"vuuLayoutTile\";\n\nexport interface LayoutTileProps extends HTMLAttributes<HTMLDivElement> {\n metadata: LayoutMetadata;\n onLoadLayout: (layoutId?: string) => void;\n}\n\nexport const LayoutTile = ({\n metadata,\n onLoadLayout,\n ...htmlAttributes\n}: LayoutTileProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-layout-tile\",\n css: layoutTileCss,\n window: targetWindow,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={`${classBase}-layoutTile`}\n key={metadata?.id}\n onClick={() => onLoadLayout(metadata?.id)}\n >\n <img className={`${classBase}-screenshot`} src={metadata?.screenshot} />\n <div>\n <div className={`${classBase}-layoutName`}>{metadata?.name}</div>\n <div className={`${classBase}-layoutDetails`}>\n <div>{`${metadata?.created}`}</div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","layoutTileCss","createElement","jsx"],"mappings":";;;;;;;;AAOA,MAAM,SAAY,GAAA,eAAA,CAAA;AAOX,MAAM,aAAa,CAAC;AAAA,EACzB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAuB,KAAA;AACrB,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EACE,uBAAAC,mBAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,GAAG,SAAS,CAAA,WAAA,CAAA;AAAA,MACvB,KAAK,QAAU,EAAA,EAAA;AAAA,MACf,OAAS,EAAA,MAAM,YAAa,CAAA,QAAA,EAAU,EAAE,CAAA;AAAA,KAAA;AAAA,oBAExCC,cAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAe,WAAA,CAAA,EAAA,GAAA,EAAK,UAAU,UAAY,EAAA,CAAA;AAAA,oCACrE,KACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAAA,cAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,WAAA,CAAA,EAAgB,oBAAU,IAAK,EAAA,CAAA;AAAA,sBAC1DA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,cAAA,CAAA,EAC1B,QAAC,kBAAAA,cAAA,CAAA,KAAA,EAAA,EAAK,QAAG,EAAA,CAAA,EAAA,QAAA,EAAU,OAAO,CAAA,CAAA,EAAG,CAC/B,EAAA,CAAA;AAAA,KACF,EAAA,CAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveLayoutPanel.js","sources":["../../src/workspace-management/SaveLayoutPanel.tsx"],"sourcesContent":["import { LayoutMetadataDto } from \"@vuu-ui/vuu-utils\";\nimport {\n Button,\n ComboBox,\n FormField,\n FormFieldLabel,\n Input,\n Option,\n Text,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n ChangeEvent,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { getAuthDetailsFromCookies } from \"../login\";\nimport { takeScreenshot } from \"./screenshot-utils\";\n\nimport saveLayoutPanelCss from \"./SaveLayoutPanel.css\";\n\nconst classBase = \"vuuSaveLayoutPanel\";\n\nconst groups = [\"Group 1\", \"Group 2\", \"Group 3\", \"Group 4\", \"Group 5\"];\n\ntype SaveLayoutPanelProps = {\n componentId?: string;\n defaultTitle?: string;\n onCancel: () => void;\n onSave: (layoutMetadata: LayoutMetadataDto) => void;\n};\n\nexport const SaveLayoutPanel = (props: SaveLayoutPanelProps) => {\n const { defaultTitle = \"\", onCancel, onSave, componentId } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-save-layout-panel\",\n css: saveLayoutPanelCss,\n window: targetWindow,\n });\n\n const [layoutName, setLayoutName] = useState<string>(defaultTitle);\n const [group, setGroup] = useState<string>(\"\");\n const [screenshot, setScreenshot] = useState<string | undefined>();\n const [screenshotErrorMessage, setScreenshotErrorMessage] = useState<\n string | undefined\n >();\n const [username] = getAuthDetailsFromCookies();\n\n useEffect(() => {\n if (componentId) {\n takeScreenshot(document.getElementById(componentId) as HTMLElement)\n .then((screenshot) => {\n setScreenshot(screenshot);\n })\n .catch((error: Error) => {\n setScreenshotErrorMessage(error.message);\n });\n }\n }, [componentId]);\n\n const handleSubmit = () => {\n onSave({\n name: layoutName,\n group,\n screenshot: screenshot ?? \"\",\n user: username,\n });\n };\n\n const screenshotContent = useMemo(() => {\n if (screenshot) {\n return (\n <img\n className={`${classBase}-screenshot`}\n src={screenshot}\n alt=\"screenshot of current layout\"\n />\n );\n }\n if (screenshotErrorMessage) {\n return <Text>{screenshotErrorMessage}</Text>;\n }\n return <div className=\"spinner\" />;\n }, [screenshot, screenshotErrorMessage]);\n\n const handleSelectionChange = useCallback(\n (e: SyntheticEvent | KeyboardEvent, [selectedValue]: string[]) => {\n if (\n (e as KeyboardEvent).key === \"Tab\" &&\n !selectedValue.toLowerCase().startsWith(group.toLowerCase())\n ) {\n // ignore. The ComboBox forces selection of a value from the list on Tab\n } else {\n setGroup(selectedValue || \"\");\n }\n },\n [group]\n );\n\n const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setGroup(e.target.value);\n }, []);\n\n return (\n <div className={`${classBase}`}>\n <div className={`${classBase}-panelContent`}>\n <FormField>\n <FormFieldLabel>Group</FormFieldLabel>\n <ComboBox\n data-embedded\n inputProps={{\n autoComplete: \"off\",\n className: `${classBase}-inputText`,\n placeholder: \"Select Group or Enter New Name\",\n // onChange: (event: ChangeEvent<HTMLInputElement>) =>\n // setGroup(event.target.value),\n }}\n onChange={handleChange}\n onSelectionChange={handleSelectionChange}\n value={group}\n >\n {groups.map((group, i) => (\n <Option key={i} value={group} />\n ))}\n </ComboBox>\n </FormField>\n <FormField>\n <FormFieldLabel>Layout Name</FormFieldLabel>\n <Input\n data-embedded\n inputProps={{\n className: `${classBase}-inputText`,\n placeholder: \"Enter Layout Name\",\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setLayoutName(event.target.value)\n }\n value={layoutName}\n />\n </FormField>\n <div className={`${classBase}-screenshotContainer`}>\n {screenshotContent}\n </div>\n </div>\n <div className={`${classBase}-buttonsContainer`}>\n <Button className={`${classBase}-cancelButton`} onClick={onCancel}>\n Cancel\n </Button>\n <Button\n className={`${classBase}-saveButton`}\n onClick={handleSubmit}\n disabled={layoutName === \"\" || group === \"\"}\n variant=\"cta\"\n >\n Save\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","saveLayoutPanelCss","useState","getAuthDetailsFromCookies","useEffect","takeScreenshot","screenshot","useMemo","jsx","Text","useCallback","jsxs","FormField","FormFieldLabel","ComboBox","group","Option","Input","Button"],"mappings":"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"}
@@ -7,25 +7,15 @@ var vuuUtils = require('@vuu-ui/vuu-utils');
7
7
  var React = require('react');
8
8
  var PersistenceProvider = require('../persistence-manager/PersistenceProvider.js');
9
9
  require('../persistence-manager/LocalPersistenceManager.js');
10
+ require('@vuu-ui/vuu-ui-controls');
10
11
  require('@salt-ds/core');
11
12
  require('@salt-ds/styles');
12
13
  require('@salt-ds/window');
13
- require('@vuu-ui/vuu-ui-controls');
14
14
  require('clsx');
15
15
  require('../persistence-manager/StaticPersistenceManager.js');
16
16
  var defaultWorkspaceJSON = require('./defaultWorkspaceJSON.js');
17
17
 
18
18
  const { info } = vuuUtils.logger("useLayoutManager");
19
- const LayoutManagementContext = React.createContext({
20
- getApplicationSettings: () => void 0,
21
- layoutMetadata: [],
22
- saveLayout: () => void 0,
23
- // The default Application JSON will be served if no LayoutManagementProvider
24
- workspaceJSON: defaultWorkspaceJSON.getWorkspaceWithLayoutJSON(),
25
- saveApplicationLayout: () => void 0,
26
- saveApplicationSettings: () => void 0,
27
- loadLayoutById: () => void 0
28
- });
29
19
  const ensureLayoutHasTitle = (layout, layoutMetadata) => {
30
20
  if (layout.props?.title !== void 0) {
31
21
  return layout;
@@ -42,11 +32,13 @@ const ensureLayoutHasTitle = (layout, layoutMetadata) => {
42
32
  const loadingApplicationJSON = {
43
33
  workspaceJSON: defaultWorkspaceJSON.loadingJSON
44
34
  };
45
- const LayoutManagementProvider = ({
46
- WorkspaceProps,
35
+ const WorkspaceProvider = ({
36
+ TabstripProps,
37
+ children,
47
38
  layoutJSON,
48
- workspaceJSON: customWorkspaceJSON,
49
- ...props
39
+ layoutPlaceholderJSON,
40
+ showTabs,
41
+ workspaceJSON: customWorkspaceJSON
50
42
  }) => {
51
43
  const [layoutMetadata, setLayoutMetadata] = React.useState([]);
52
44
  const [, forceRefresh] = React.useState({});
@@ -108,7 +100,7 @@ const LayoutManagementProvider = ({
108
100
  const workspaceJSON = defaultWorkspaceJSON.getWorkspaceWithLayoutJSON(
109
101
  customWorkspaceJSON,
110
102
  layoutJSON,
111
- WorkspaceProps
103
+ { TabstripProps, showTabs }
112
104
  );
113
105
  info?.(`applicationJSON not found, getting defaultWorkspaceJSON,
114
106
  ${JSON.stringify(workspaceJSON, null, 2)}
@@ -129,12 +121,13 @@ const LayoutManagementProvider = ({
129
121
  );
130
122
  });
131
123
  }, [
132
- WorkspaceProps,
124
+ TabstripProps,
133
125
  customWorkspaceJSON,
134
126
  layoutJSON,
135
127
  notify,
136
128
  persistenceManager,
137
- setApplicationJSON
129
+ setApplicationJSON,
130
+ showTabs
138
131
  ]);
139
132
  const saveApplicationLayout = React.useCallback(
140
133
  (layout) => {
@@ -230,24 +223,30 @@ const LayoutManagementProvider = ({
230
223
  [notify, persistenceManager, setWorkspaceJSON]
231
224
  );
232
225
  return /* @__PURE__ */ jsxRuntime.jsx(
233
- LayoutManagementContext.Provider,
226
+ vuuUtils.WorkspaceContext.Provider,
234
227
  {
235
228
  value: {
236
229
  getApplicationSettings,
237
230
  layoutMetadata,
231
+ layoutPlaceholderJSON,
238
232
  saveLayout,
239
233
  workspaceJSON: applicationJSONRef.current.workspaceJSON,
240
234
  saveApplicationLayout,
241
235
  saveApplicationSettings,
242
236
  loadLayoutById
243
237
  },
244
- children: props.children
238
+ children
245
239
  }
246
240
  );
247
241
  };
248
- const useLayoutManager = () => React.useContext(LayoutManagementContext);
242
+ const useWorkspace = () => {
243
+ const { workspaceJSON = defaultWorkspaceJSON.getWorkspaceWithLayoutJSON(), ...contextProps } = React.useContext(vuuUtils.WorkspaceContext);
244
+ return {
245
+ ...contextProps,
246
+ workspaceJSON
247
+ };
248
+ };
249
249
 
250
- exports.LayoutManagementContext = LayoutManagementContext;
251
- exports.LayoutManagementProvider = LayoutManagementProvider;
252
- exports.useLayoutManager = useLayoutManager;
253
- //# sourceMappingURL=LayoutManagementProvider.js.map
250
+ exports.WorkspaceProvider = WorkspaceProvider;
251
+ exports.useWorkspace = useWorkspace;
252
+ //# sourceMappingURL=WorkspaceProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceProvider.js","sources":["../../src/workspace-management/WorkspaceProvider.tsx"],"sourcesContent":["import { isLayoutJSON, resolveJSONPath } from \"@vuu-ui/vuu-layout\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport {\n LayoutMetadata,\n LayoutMetadataDto,\n VuuShellLocation,\n WorkspaceContext,\n logger,\n type ApplicationJSON,\n type ApplicationSetting,\n type ApplicationSettings,\n type LayoutJSON,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { usePersistenceManager } from \"../persistence-manager\";\nimport {\n getWorkspaceWithLayoutJSON,\n loadingJSON,\n type WorkspaceStackProps,\n} from \"./defaultWorkspaceJSON\";\n\nconst { info } = logger(\"useLayoutManager\");\n\nexport type WorkspaceProps = WorkspaceStackProps & {\n layoutPlaceholderJSON?: LayoutJSON;\n /**\n * layoutJSON defines the default layout to render on first load and until such time as\n * layout state has been persisted. After that, the persisted state will be rendered.\n */\n layoutJSON?: LayoutJSON;\n /**\n * The Vuu workspace is the container into which layouts are loaded. By default, it will be\n * a Tabbed Panel (Stack + Tabstrip), showing a tab per Layout.\n */\n workspaceJSON?: LayoutJSON;\n};\n\nexport interface WorkspaceProviderProps extends WorkspaceProps {\n children: JSX.Element | JSX.Element[];\n\n /**\n * layoutPlaceholderJSON defines the layout to render when a new workspace layout is created.\n */\n layoutPlaceholderJSON?: LayoutJSON;\n}\n\nconst ensureLayoutHasTitle = (\n layout: LayoutJSON,\n layoutMetadata: LayoutMetadataDto\n) => {\n if (layout.props?.title !== undefined) {\n return layout;\n } else {\n return {\n ...layout,\n props: {\n ...layout.props,\n title: layoutMetadata.name,\n },\n };\n }\n};\n\nconst loadingApplicationJSON: ApplicationJSON = {\n workspaceJSON: loadingJSON,\n};\n\n/**\n * LayoutManagementProvider supplies an API for loading and saving layout documents.\n * Initial layout is automatically loaded on startup. Because this hook is responsible\n * only for loading and saving layouts, it only triggers a render when content is loaded.\n *\n * Initial layout displays a loading state\n * User may supply a default layout. This will not be displayed until call has been made to\n * persistenceManager to retrieve stored layout state. If no stored state is returned, the\n * default layout provided by user will be set as current state (and hence rendered). If no\n * default layout has been provided by user, the sysem default will be used (simple PlaceHolder)\n * If saved layout state has been returned, that will be set as current state (and rendered)\n *\n */\nexport const WorkspaceProvider = ({\n TabstripProps,\n children,\n layoutJSON,\n layoutPlaceholderJSON,\n showTabs,\n workspaceJSON: customWorkspaceJSON,\n}: WorkspaceProviderProps) => {\n const [layoutMetadata, setLayoutMetadata] = useState<LayoutMetadata[]>([]);\n // TODO this default should probably be a loading state rather than the placeholder\n // It will be replaced as soon as the localStorage/remote layout is resolved\n const [, forceRefresh] = useState({});\n const notify = useNotifications();\n const persistenceManager = usePersistenceManager();\n const applicationJSONRef = useRef<ApplicationJSON>(loadingApplicationJSON);\n\n const setApplicationJSON = useCallback(\n (applicationJSON: ApplicationJSON, rerender = true) => {\n applicationJSONRef.current = applicationJSON;\n if (rerender) {\n forceRefresh({});\n }\n },\n []\n );\n\n const setWorkspaceJSON = useCallback(\n (workspaceJSON: LayoutJSON, rerender = true) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n workspaceJSON,\n },\n rerender\n );\n },\n [setApplicationJSON]\n );\n\n const setApplicationSettings = useCallback(\n (settings: ApplicationSettings) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n settings: {\n ...applicationJSONRef.current.settings,\n ...settings,\n },\n },\n false\n );\n },\n [setApplicationJSON]\n );\n\n useEffect(() => {\n //TODO this does not need to be done ahead of time\n persistenceManager\n ?.loadMetadata()\n .then((metadata) => {\n setLayoutMetadata(metadata);\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layouts\",\n body: \"Could not load list of available layouts\",\n });\n console.error(\"Error occurred while retrieving metadata\", error);\n });\n\n persistenceManager\n ?.loadApplicationJSON()\n .then((applicationJSON?: ApplicationJSON) => {\n if (applicationJSON) {\n info?.(\"applicationJSON loaded successfully\");\n setApplicationJSON(applicationJSON);\n } else {\n // No applicationJSON has been saved yet. Construct our\n // initial applicationJSON from user configuration and\n // default values.\n const workspaceJSON = getWorkspaceWithLayoutJSON(\n customWorkspaceJSON,\n layoutJSON,\n { TabstripProps, showTabs }\n );\n info?.(`applicationJSON not found, getting defaultWorkspaceJSON,\n ${JSON.stringify(workspaceJSON, null, 2)}\n `);\n setApplicationJSON({\n workspaceJSON,\n });\n }\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layout\",\n body: \"Could not load your latest view\",\n });\n console.error(\n \"Error occurred while retrieving application layout\",\n error\n );\n });\n }, [\n TabstripProps,\n customWorkspaceJSON,\n layoutJSON,\n notify,\n persistenceManager,\n setApplicationJSON,\n showTabs,\n ]);\n\n const saveApplicationLayout = useCallback(\n (layout: LayoutJSON) => {\n if (isLayoutJSON(layout)) {\n setWorkspaceJSON(layout, false);\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n } else {\n console.error(\"Tried to save invalid application layout\", layout);\n }\n },\n [persistenceManager, setWorkspaceJSON]\n );\n\n const saveLayout = useCallback(\n (metadata: LayoutMetadataDto) => {\n let layoutToSave: LayoutJSON | undefined;\n try {\n layoutToSave = resolveJSONPath(\n applicationJSONRef.current.workspaceJSON,\n `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`\n );\n } catch (e) {\n // ignore, code below will handle\n }\n\n if (layoutToSave && isLayoutJSON(layoutToSave)) {\n persistenceManager\n ?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata))\n .then((metadata) => {\n notify({\n type: \"success\",\n header: \"Layout Saved Successfully\",\n body: `${metadata.name} saved successfully`,\n });\n setLayoutMetadata((prev) => [...prev, metadata]);\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Save Layout\",\n body: `Failed to save layout ${metadata.name}`,\n });\n console.error(\"Error occurred while saving layout\", error);\n });\n } else {\n console.error(\"Tried to save invalid layout\", layoutToSave);\n notify({\n type: \"error\",\n header: \"Failed to Save Layout\",\n body: \"Cannot save invalid layout\",\n });\n }\n },\n [notify, persistenceManager]\n );\n\n const saveApplicationSettings = useCallback(\n (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings\n ) => {\n const { settings: applicationSettings } = applicationJSONRef.current;\n if (key) {\n setApplicationSettings({\n ...applicationSettings,\n [key]: settings,\n });\n } else {\n setApplicationSettings(settings as ApplicationSettings);\n }\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n },\n [persistenceManager, setApplicationSettings]\n );\n\n const getApplicationSettings = useCallback(\n (key?: keyof ApplicationSettings) => {\n const { settings } = applicationJSONRef.current;\n return key ? settings?.[key] : settings;\n },\n []\n );\n\n const loadLayoutById = useCallback(\n (id: string) => {\n persistenceManager\n ?.loadLayout(id)\n .then((layoutJson) => {\n const { workspaceJSON: currentLayout } = applicationJSONRef.current;\n setWorkspaceJSON({\n ...currentLayout,\n children: (currentLayout.children || []).concat(layoutJson),\n props: {\n ...currentLayout.props,\n active: currentLayout.children?.length ?? 0,\n },\n });\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layout\",\n body: \"Failed to load the requested layout\",\n });\n console.error(\"Error occurred while loading layout\", error);\n });\n },\n [notify, persistenceManager, setWorkspaceJSON]\n );\n\n return (\n <WorkspaceContext.Provider\n value={{\n getApplicationSettings,\n layoutMetadata,\n layoutPlaceholderJSON,\n saveLayout,\n workspaceJSON: applicationJSONRef.current.workspaceJSON,\n saveApplicationLayout,\n saveApplicationSettings,\n loadLayoutById,\n }}\n >\n {children}\n </WorkspaceContext.Provider>\n );\n};\n\nexport const useWorkspace = () => {\n // The default Application JSON will be served if no LayoutManagementProvider\n const { workspaceJSON = getWorkspaceWithLayoutJSON(), ...contextProps } =\n useContext(WorkspaceContext);\n\n return {\n ...contextProps,\n workspaceJSON,\n };\n};\n"],"names":["logger","loadingJSON","useState","useNotifications","usePersistenceManager","useRef","useCallback","useEffect","getWorkspaceWithLayoutJSON","isLayoutJSON","resolveJSONPath","VuuShellLocation","metadata","jsx","WorkspaceContext","useContext"],"mappings":"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"}
@@ -31,6 +31,7 @@ const stackWorkspaceJSON = {
31
31
  allowCloseTab: true,
32
32
  allowRenameTab: true,
33
33
  animateSelectionThumb: false,
34
+ "aria-label": "Workspace Tabs",
34
35
  location: "workspace-tab",
35
36
  variant: "primary"
36
37
  },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultWorkspaceJSON.js","sources":["../../src/workspace-management/defaultWorkspaceJSON.ts"],"sourcesContent":["import { StackProps } from \"@vuu-ui/vuu-layout\";\nimport { LayoutJSON, VuuShellLocation } from \"@vuu-ui/vuu-utils\";\n\nexport type WorkspaceStackProps = Pick<\n StackProps,\n \"showTabs\" | \"TabstripProps\"\n>;\n\nexport const warningLayout: LayoutJSON = {\n type: \"View\",\n props: {\n style: { height: \"calc(100% - 6px)\" },\n },\n children: [\n {\n props: {\n className: \"vuuShell-warningPlaceholder\",\n },\n type: \"Placeholder\",\n },\n ],\n};\n\nexport const loadingJSON: Readonly<LayoutJSON> = {\n type: \"Component\",\n id: \"loading-main\",\n props: {},\n};\n\nexport const stackWorkspaceJSON: LayoutJSON<\n StackProps & {\n preserve: boolean;\n }\n> = {\n type: \"Stack\",\n id: VuuShellLocation.Workspace,\n props: {\n className: `${VuuShellLocation.Workspace}-tabs`,\n TabstripProps: {\n allowAddTab: true,\n allowCloseTab: true,\n allowRenameTab: true,\n animateSelectionThumb: false,\n \"aria-label\": \"Workspace Tabs\",\n location: \"workspace-tab\",\n variant: \"primary\",\n },\n preserve: true,\n active: 0,\n },\n};\n\nconst placeholderLayout: LayoutJSON = {\n props: {\n id: \"tab1\",\n title: \"Tab 1\",\n className: \"vuuShell-Placeholder\",\n },\n type: \"Placeholder\",\n};\n\nexport const getWorkspaceWithLayoutJSON = (\n customWorkspaceJSON?: LayoutJSON,\n layoutJSON: LayoutJSON | LayoutJSON[] = placeholderLayout,\n stackProps?: WorkspaceStackProps\n): LayoutJSON => {\n if (customWorkspaceJSON) {\n return {\n ...customWorkspaceJSON,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return {\n ...stackWorkspaceJSON,\n props: {\n ...stackWorkspaceJSON.props,\n ...stackProps,\n TabstripProps: {\n ...stackWorkspaceJSON.props?.TabstripProps,\n ...stackProps?.TabstripProps,\n },\n },\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n }\n};\n"],"names":["VuuShellLocation"],"mappings":";;;;AAQO,MAAM,aAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,EAAE,MAAA,EAAQ,kBAAmB,EAAA;AAAA,GACtC;AAAA,EACA,QAAU,EAAA;AAAA,IACR;AAAA,MACE,KAAO,EAAA;AAAA,QACL,SAAW,EAAA,6BAAA;AAAA,OACb;AAAA,MACA,IAAM,EAAA,aAAA;AAAA,KACR;AAAA,GACF;AACF,EAAA;AAEO,MAAM,WAAoC,GAAA;AAAA,EAC/C,IAAM,EAAA,WAAA;AAAA,EACN,EAAI,EAAA,cAAA;AAAA,EACJ,OAAO,EAAC;AACV,EAAA;AAEO,MAAM,kBAIT,GAAA;AAAA,EACF,IAAM,EAAA,OAAA;AAAA,EACN,IAAIA,yBAAiB,CAAA,SAAA;AAAA,EACrB,KAAO,EAAA;AAAA,IACL,SAAA,EAAW,CAAG,EAAAA,yBAAA,CAAiB,SAAS,CAAA,KAAA,CAAA;AAAA,IACxC,aAAe,EAAA;AAAA,MACb,WAAa,EAAA,IAAA;AAAA,MACb,aAAe,EAAA,IAAA;AAAA,MACf,cAAgB,EAAA,IAAA;AAAA,MAChB,qBAAuB,EAAA,KAAA;AAAA,MACvB,YAAc,EAAA,gBAAA;AAAA,MACd,QAAU,EAAA,eAAA;AAAA,MACV,OAAS,EAAA,SAAA;AAAA,KACX;AAAA,IACA,QAAU,EAAA,IAAA;AAAA,IACV,MAAQ,EAAA,CAAA;AAAA,GACV;AACF,EAAA;AAEA,MAAM,iBAAgC,GAAA;AAAA,EACpC,KAAO,EAAA;AAAA,IACL,EAAI,EAAA,MAAA;AAAA,IACJ,KAAO,EAAA,OAAA;AAAA,IACP,SAAW,EAAA,sBAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA,aAAA;AACR,CAAA,CAAA;AAEO,MAAM,0BAA6B,GAAA,CACxC,mBACA,EAAA,UAAA,GAAwC,mBACxC,UACe,KAAA;AACf,EAAA,IAAI,mBAAqB,EAAA;AACvB,IAAO,OAAA;AAAA,MACL,GAAG,mBAAA;AAAA,MACH,UAAU,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAI,GAAA,UAAA,GAAa,CAAC,UAAU,CAAA;AAAA,KAChE,CAAA;AAAA,GACK,MAAA;AACL,IAAO,OAAA;AAAA,MACL,GAAG,kBAAA;AAAA,MACH,KAAO,EAAA;AAAA,QACL,GAAG,kBAAmB,CAAA,KAAA;AAAA,QACtB,GAAG,UAAA;AAAA,QACH,aAAe,EAAA;AAAA,UACb,GAAG,mBAAmB,KAAO,EAAA,aAAA;AAAA,UAC7B,GAAG,UAAY,EAAA,aAAA;AAAA,SACjB;AAAA,OACF;AAAA,MACA,UAAU,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAI,GAAA,UAAA,GAAa,CAAC,UAAU,CAAA;AAAA,KAChE,CAAA;AAAA,GACF;AACF;;;;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot-utils.js","sources":["../../src/workspace-management/screenshot-utils.ts"],"sourcesContent":["import { toPng } from \"html-to-image\";\n\n/**\n * Takes a screenshot of the given node and returns the base64 encoded image url\n * @param node HTMLElement to take screenshot of\n * @returns Base64 encoded image url\n */\nexport const takeScreenshot = (node: HTMLElement): Promise<string> => {\n return new Promise((resolve, reject) => {\n toPng(node, {\n cacheBust: true /*,\n filter: (child) =>\n // remove content of table rows\n child.nodeType === Node.TEXT_NODE ||\n child.getAttribute(\"role\") !== \"row\",*/,\n })\n .then((screenshot) => {\n if (!screenshot) {\n reject(new Error(\"No Screenshot available\"));\n }\n resolve(screenshot);\n })\n .catch((error: Error) => {\n console.error(\n \"the following error occurred while taking a screenshot of a DOMNode\",\n error\n );\n reject(new Error(\"Error taking screenshot\"));\n });\n });\n};\n"],"names":["toPng"],"mappings":";;;;AAOa,MAAA,cAAA,GAAiB,CAAC,IAAuC,KAAA;AACpE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAAA,iBAAA,CAAM,IAAM,EAAA;AAAA,MACV,SAAW,EAAA,IAAA;AAAA,KAKZ,CAAA,CACE,IAAK,CAAA,CAAC,UAAe,KAAA;AACpB,MAAA,IAAI,CAAC,UAAY,EAAA;AACf,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA,CAAA;AAAA,OAC7C;AACA,MAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,KACnB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qEAAA;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AACA,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA,CAAA;AAAA,KAC5C,CAAA,CAAA;AAAA,GACJ,CAAA,CAAA;AACH;;;;"}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var React = require('react');
5
4
  var vuuPopups = require('@vuu-ui/vuu-popups');
6
- var LayoutManagementProvider = require('./LayoutManagementProvider.js');
5
+ var React = require('react');
7
6
  var SaveLayoutPanel = require('./SaveLayoutPanel.js');
7
+ var WorkspaceProvider = require('./WorkspaceProvider.js');
8
8
 
9
- const useLayoutContextMenuItems = () => {
10
- const { saveLayout } = LayoutManagementProvider.useLayoutManager();
9
+ const useWorkspaceContextMenuItems = () => {
10
+ const { saveLayout } = WorkspaceProvider.useWorkspace();
11
11
  const { showDialog, closeDialog } = vuuPopups.useDialogContext();
12
12
  const handleCloseDialog = React.useCallback(() => {
13
13
  closeDialog();
@@ -68,5 +68,5 @@ const useLayoutContextMenuItems = () => {
68
68
  };
69
69
  };
70
70
 
71
- exports.useLayoutContextMenuItems = useLayoutContextMenuItems;
72
- //# sourceMappingURL=useLayoutContextMenuItems.js.map
71
+ exports.useWorkspaceContextMenuItems = useWorkspaceContextMenuItems;
72
+ //# sourceMappingURL=useWorkspaceContextMenuItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWorkspaceContextMenuItems.js","sources":["../../src/workspace-management/useWorkspaceContextMenuItems.tsx"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n MenuActionHandler,\n MenuBuilder,\n} from \"@vuu-ui/vuu-data-types\";\nimport { MenuActionClosePopup, useDialogContext } from \"@vuu-ui/vuu-popups\";\nimport { LayoutMetadataDto } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo } from \"react\";\nimport { SaveLayoutPanel } from \"./SaveLayoutPanel\";\nimport { useWorkspace } from \"./WorkspaceProvider\";\n\nexport const useWorkspaceContextMenuItems = () => {\n const { saveLayout } = useWorkspace();\n\n const { showDialog, closeDialog } = useDialogContext();\n\n const handleCloseDialog = useCallback(() => {\n closeDialog();\n }, [closeDialog]);\n\n const handleSave = useCallback(\n (layoutMetadata: LayoutMetadataDto) => {\n saveLayout(layoutMetadata);\n closeDialog();\n },\n [saveLayout, closeDialog]\n );\n\n const [buildMenuOptions, handleMenuAction] = useMemo<\n [MenuBuilder, MenuActionHandler]\n >(() => {\n return [\n (location, options) => {\n const locations = location.split(\" \");\n const menuDescriptors: ContextMenuItemDescriptor[] = [];\n if (locations.includes(\"workspace-tab\")) {\n menuDescriptors.push(\n {\n label: \"Save Layout\",\n action: \"save-layout\",\n options,\n },\n {\n label: \"Layout Settings\",\n action: \"layout-settings\",\n options,\n }\n );\n }\n return menuDescriptors;\n },\n (action: MenuActionClosePopup) => {\n if (action.menuId === \"save-layout\") {\n showDialog(\n <SaveLayoutPanel\n onCancel={handleCloseDialog}\n onSave={handleSave}\n componentId={action.options?.controlledComponentId}\n defaultTitle={action.options?.controlledComponentTitle as string}\n />,\n \"Save Layout\",\n [],\n true\n );\n return true;\n }\n return false;\n },\n ];\n }, [handleCloseDialog, handleSave, showDialog]);\n\n return {\n buildMenuOptions,\n handleMenuAction,\n };\n};\n"],"names":["useWorkspace","useDialogContext","useCallback","useMemo","jsx","SaveLayoutPanel"],"mappings":";;;;;;;;AAWO,MAAM,+BAA+B,MAAM;AAChD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,8BAAa,EAAA,CAAA;AAEpC,EAAA,MAAM,EAAE,UAAA,EAAY,WAAY,EAAA,GAAIC,0BAAiB,EAAA,CAAA;AAErD,EAAM,MAAA,iBAAA,GAAoBC,kBAAY,MAAM;AAC1C,IAAY,WAAA,EAAA,CAAA;AAAA,GACd,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEhB,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,cAAsC,KAAA;AACrC,MAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AACzB,MAAY,WAAA,EAAA,CAAA;AAAA,KACd;AAAA,IACA,CAAC,YAAY,WAAW,CAAA;AAAA,GAC1B,CAAA;AAEA,EAAA,MAAM,CAAC,gBAAA,EAAkB,gBAAgB,CAAA,GAAIC,cAE3C,MAAM;AACN,IAAO,OAAA;AAAA,MACL,CAAC,UAAU,OAAY,KAAA;AACrB,QAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AACpC,QAAA,MAAM,kBAA+C,EAAC,CAAA;AACtD,QAAI,IAAA,SAAA,CAAU,QAAS,CAAA,eAAe,CAAG,EAAA;AACvC,UAAgB,eAAA,CAAA,IAAA;AAAA,YACd;AAAA,cACE,KAAO,EAAA,aAAA;AAAA,cACP,MAAQ,EAAA,aAAA;AAAA,cACR,OAAA;AAAA,aACF;AAAA,YACA;AAAA,cACE,KAAO,EAAA,iBAAA;AAAA,cACP,MAAQ,EAAA,iBAAA;AAAA,cACR,OAAA;AAAA,aACF;AAAA,WACF,CAAA;AAAA,SACF;AACA,QAAO,OAAA,eAAA,CAAA;AAAA,OACT;AAAA,MACA,CAAC,MAAiC,KAAA;AAChC,QAAI,IAAA,MAAA,CAAO,WAAW,aAAe,EAAA;AACnC,UAAA,UAAA;AAAA,4BACEC,cAAA;AAAA,cAACC,+BAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,iBAAA;AAAA,gBACV,MAAQ,EAAA,UAAA;AAAA,gBACR,WAAA,EAAa,OAAO,OAAS,EAAA,qBAAA;AAAA,gBAC7B,YAAA,EAAc,OAAO,OAAS,EAAA,wBAAA;AAAA,eAAA;AAAA,aAChC;AAAA,YACA,aAAA;AAAA,YACA,EAAC;AAAA,YACD,IAAA;AAAA,WACF,CAAA;AACA,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA,CAAA;AAE9C,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -1,8 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { createContext, useContext } from 'react';
2
+ import { ShellContext } from '@vuu-ui/vuu-utils';
3
3
 
4
- const defaultConfig = {};
5
- const ShellContext = createContext(defaultConfig);
6
4
  const Provider = ({
7
5
  children,
8
6
  context,
@@ -20,9 +18,6 @@ const ShellContextProvider = ({
20
18
  }) => {
21
19
  return /* @__PURE__ */ jsx(ShellContext.Consumer, { children: (context) => /* @__PURE__ */ jsx(Provider, { context: value, inheritedContext: context, children }) });
22
20
  };
23
- const useShellContext = () => {
24
- return useContext(ShellContext);
25
- };
26
21
 
27
- export { ShellContextProvider, useShellContext };
22
+ export { ShellContextProvider };
28
23
  //# sourceMappingURL=ShellContextProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShellContextProvider.js","sources":["../src/ShellContextProvider.tsx"],"sourcesContent":["import {\n DefaultColumnConfiguration,\n DefaultTableConfiguration,\n ListOption,\n} from \"@vuu-ui/vuu-table-types\";\nimport type { RpcResponseHandler } from \"@vuu-ui/vuu-data-types\";\nimport { createContext, ReactElement, ReactNode, useContext } from \"react\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nexport type LookupTableProvider = (table: VuuTable) => ListOption[];\n\nexport interface ShellContextProps {\n getDefaultColumnConfig?: DefaultColumnConfiguration;\n getDefaultTableConfig?: DefaultTableConfiguration;\n getLookupValues?: LookupTableProvider;\n handleRpcResponse?: RpcResponseHandler;\n}\n\nconst defaultConfig = {};\n\nconst ShellContext = createContext<ShellContextProps>(defaultConfig);\n\nexport interface ShellProviderProps {\n children: ReactNode;\n value?: ShellContextProps;\n}\n\nconst Provider = ({\n children,\n context,\n inheritedContext,\n}: {\n children: ReactNode;\n context?: ShellContextProps;\n inheritedContext?: ShellContextProps;\n}) => {\n // TODO functions provided at multiple levels must be merged\n const mergedContext = {\n ...inheritedContext,\n ...context,\n };\n return (\n <ShellContext.Provider value={mergedContext}>\n {children}\n </ShellContext.Provider>\n );\n};\n\nexport const ShellContextProvider = ({\n children,\n value,\n}: ShellProviderProps): ReactElement => {\n return (\n <ShellContext.Consumer>\n {(context) => (\n <Provider context={value} inheritedContext={context}>\n {children}\n </Provider>\n )}\n </ShellContext.Consumer>\n );\n};\n\nexport const useShellContext = () => {\n return useContext(ShellContext);\n};\n"],"names":[],"mappings":";;;AAkBA,MAAM,gBAAgB,EAAC,CAAA;AAEvB,MAAM,YAAA,GAAe,cAAiC,aAAa,CAAA,CAAA;AAOnE,MAAM,WAAW,CAAC;AAAA,EAChB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AACF,CAIM,KAAA;AAEJ,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,GAAG,gBAAA;AAAA,IACH,GAAG,OAAA;AAAA,GACL,CAAA;AACA,EAAA,2BACG,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,eAC3B,QACH,EAAA,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,QAAA;AAAA,EACA,KAAA;AACF,CAAwC,KAAA;AACtC,EAAA,uBACG,GAAA,CAAA,YAAA,CAAa,QAAb,EAAA,EACE,QAAC,EAAA,CAAA,OAAA,qBACC,GAAA,CAAA,QAAA,EAAA,EAAS,OAAS,EAAA,KAAA,EAAO,gBAAkB,EAAA,OAAA,EACzC,UACH,CAEJ,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEO,MAAM,kBAAkB,MAAM;AACnC,EAAA,OAAO,WAAW,YAAY,CAAA,CAAA;AAChC;;;;"}
1
+ {"version":3,"file":"ShellContextProvider.js","sources":["../src/ShellContextProvider.tsx"],"sourcesContent":["import type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ListOption } from \"@vuu-ui/vuu-table-types\";\nimport { ShellContext, ShellContextProps } from \"@vuu-ui/vuu-utils\";\nimport { ReactElement, ReactNode } from \"react\";\n\nexport type LookupTableProvider = (table: VuuTable) => ListOption[];\n\nexport interface ShellProviderProps {\n children: ReactNode;\n value?: ShellContextProps;\n}\n\nconst Provider = ({\n children,\n context,\n inheritedContext,\n}: {\n children: ReactNode;\n context?: ShellContextProps;\n inheritedContext?: ShellContextProps;\n}) => {\n // TODO functions provided at multiple levels must be merged\n const mergedContext = {\n ...inheritedContext,\n ...context,\n };\n return (\n <ShellContext.Provider value={mergedContext}>\n {children}\n </ShellContext.Provider>\n );\n};\n\nexport const ShellContextProvider = ({\n children,\n value,\n}: ShellProviderProps): ReactElement => {\n return (\n <ShellContext.Consumer>\n {(context) => (\n <Provider context={value} inheritedContext={context}>\n {children}\n </Provider>\n )}\n </ShellContext.Consumer>\n );\n};\n"],"names":[],"mappings":";;;AAYA,MAAM,WAAW,CAAC;AAAA,EAChB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AACF,CAIM,KAAA;AAEJ,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,GAAG,gBAAA;AAAA,IACH,GAAG,OAAA;AAAA,GACL,CAAA;AACA,EAAA,2BACG,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,eAC3B,QACH,EAAA,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,QAAA;AAAA,EACA,KAAA;AACF,CAAwC,KAAA;AACtC,EAAA,uBACG,GAAA,CAAA,YAAA,CAAa,QAAb,EAAA,EACE,QAAC,EAAA,CAAA,OAAA,qBACC,GAAA,CAAA,QAAA,EAAA,EAAS,OAAS,EAAA,KAAA,EAAO,gBAAkB,EAAA,OAAA,EACzC,UACH,CAEJ,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -8,12 +8,12 @@ import { useWindow } from '@salt-ds/window';
8
8
  import cx from 'clsx';
9
9
  import { useCallback } from 'react';
10
10
  import { logout } from '../login/login-utils.js';
11
+ import { useLoginUrl } from '../application-provider/ApplicationProvider.js';
11
12
  import appHeaderCss from './AppHeader.css.js';
12
13
 
13
14
  const classBase = "vuuAppHeader";
14
15
  const AppHeader = ({
15
16
  className: classNameProp,
16
- loginUrl,
17
17
  themeMode: _,
18
18
  ...htmlAttributes
19
19
  }) => {
@@ -24,6 +24,7 @@ const AppHeader = ({
24
24
  window: targetWindow
25
25
  });
26
26
  const className = cx(classBase, classNameProp);
27
+ const loginUrl = useLoginUrl();
27
28
  const dispatchLayoutAction = useLayoutProviderDispatch();
28
29
  const handleLogout = useCallback(() => {
29
30
  logout(loginUrl);
@@ -46,6 +47,7 @@ const AppHeader = ({
46
47
  {
47
48
  alignItems: "end",
48
49
  className,
50
+ role: "banner",
49
51
  showSeparators: true,
50
52
  ...htmlAttributes,
51
53
  children: [