@vuu-ui/vuu-shell 3.0.0 → 3.1.0-beta.1

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 (252) hide show
  1. package/package.json +22 -19
  2. package/src/ShellContextProvider.mjs +20 -0
  3. package/src/app-header/AppHeader.css.js +21 -0
  4. package/src/app-header/AppHeader.mjs +97 -0
  5. package/src/app-header/index.mjs +1 -0
  6. package/src/application-provider/ApplicationContext.mjs +9 -0
  7. package/src/application-provider/ApplicationProvider.mjs +77 -0
  8. package/src/application-provider/index.mjs +1 -0
  9. package/src/feature/Feature.mjs +37 -0
  10. package/src/feature/FeatureErrorBoundary.mjs +33 -0
  11. package/src/feature/Loader.mjs +5 -0
  12. package/src/feature/index.mjs +1 -0
  13. package/src/feature-and-layout-provider/FeatureAndLayoutProvider.mjs +42 -0
  14. package/src/feature-and-layout-provider/index.mjs +1 -0
  15. package/src/feature-list/FeatureList.css.js +62 -0
  16. package/src/feature-list/FeatureList.mjs +128 -0
  17. package/src/feature-list/index.mjs +1 -0
  18. package/src/get-layout-history.mjs +7 -0
  19. package/src/index.mjs +14 -0
  20. package/src/left-nav/LeftNav.css.js +177 -0
  21. package/src/left-nav/LeftNav.mjs +193 -0
  22. package/src/left-nav/index.mjs +1 -0
  23. package/src/login/LoginPanel.css.js +72 -0
  24. package/src/login/LoginPanel.mjs +124 -0
  25. package/src/login/VuuLogo.mjs +108 -0
  26. package/src/persistence-manager/LocalPersistenceManager.mjs +156 -0
  27. package/src/persistence-manager/PersistenceManager.mjs +0 -0
  28. package/src/persistence-manager/PersistenceProvider.mjs +14 -0
  29. package/src/persistence-manager/RemotePersistenceManager.mjs +123 -0
  30. package/src/persistence-manager/StaticPersistenceManager.mjs +53 -0
  31. package/src/persistence-manager/index.mjs +5 -0
  32. package/src/shell-layout-templates/context-panel/ContextPanel.css.js +66 -0
  33. package/src/shell-layout-templates/context-panel/ContextPanel.mjs +92 -0
  34. package/src/shell-layout-templates/context-panel/index.mjs +1 -0
  35. package/src/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.mjs +44 -0
  36. package/src/shell-layout-templates/index.mjs +3 -0
  37. package/src/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.mjs +68 -0
  38. package/src/shell-layout-templates/left-main-tabs/useLeftMainTabs.mjs +32 -0
  39. package/src/shell-layout-templates/side-panel/SidePanel.css.js +9 -0
  40. package/src/shell-layout-templates/side-panel/SidePanel.mjs +31 -0
  41. package/src/shell-layout-templates/side-panel/index.mjs +1 -0
  42. package/src/shell-layout-templates/simple-content-pane/useSimpleContentPane.mjs +38 -0
  43. package/src/shell-layout-templates/useShellLayout.mjs +15 -0
  44. package/src/shell.css.js +59 -0
  45. package/src/shell.mjs +108 -0
  46. package/src/theme-switch/ThemeSwitch.css.js +34 -0
  47. package/src/theme-switch/ThemeSwitch.mjs +50 -0
  48. package/src/theme-switch/index.mjs +1 -0
  49. package/src/user-settings/SettingsForm.css.js +10 -0
  50. package/src/user-settings/SettingsForm.mjs +141 -0
  51. package/src/user-settings/UserSettingsPanel.css.js +9 -0
  52. package/src/user-settings/UserSettingsPanel.mjs +29 -0
  53. package/src/user-settings/index.mjs +2 -0
  54. package/src/workspace-management/LayoutList.css.js +74 -0
  55. package/src/workspace-management/LayoutList.mjs +130 -0
  56. package/src/workspace-management/LayoutTile.css.js +31 -0
  57. package/src/workspace-management/LayoutTile.mjs +41 -0
  58. package/src/workspace-management/SaveLayoutPanel.css.js +123 -0
  59. package/src/workspace-management/SaveLayoutPanel.mjs +141 -0
  60. package/src/workspace-management/WorkspaceProvider.mjs +209 -0
  61. package/src/workspace-management/defaultWorkspaceJSON.mjs +88 -0
  62. package/src/workspace-management/index.mjs +5 -0
  63. package/src/workspace-management/screenshot-utils.mjs +13 -0
  64. package/src/workspace-management/useWorkspaceContextMenuItems.mjs +58 -0
  65. package/cjs/ShellContextProvider.js +0 -25
  66. package/cjs/ShellContextProvider.js.map +0 -1
  67. package/cjs/app-header/AppHeader.css.js +0 -6
  68. package/cjs/app-header/AppHeader.css.js.map +0 -1
  69. package/cjs/app-header/AppHeader.js +0 -118
  70. package/cjs/app-header/AppHeader.js.map +0 -1
  71. package/cjs/application-provider/ApplicationContext.js +0 -17
  72. package/cjs/application-provider/ApplicationContext.js.map +0 -1
  73. package/cjs/application-provider/ApplicationProvider.js +0 -102
  74. package/cjs/application-provider/ApplicationProvider.js.map +0 -1
  75. package/cjs/feature/Feature.js +0 -54
  76. package/cjs/feature/Feature.js.map +0 -1
  77. package/cjs/feature/FeatureErrorBoundary.js +0 -30
  78. package/cjs/feature/FeatureErrorBoundary.js.map +0 -1
  79. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -60
  80. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +0 -1
  81. package/cjs/feature-list/FeatureList.css.js +0 -6
  82. package/cjs/feature-list/FeatureList.css.js.map +0 -1
  83. package/cjs/feature-list/FeatureList.js +0 -109
  84. package/cjs/feature-list/FeatureList.js.map +0 -1
  85. package/cjs/index.js +0 -71
  86. package/cjs/index.js.map +0 -1
  87. package/cjs/left-nav/LeftNav.css.js +0 -6
  88. package/cjs/left-nav/LeftNav.css.js.map +0 -1
  89. package/cjs/left-nav/LeftNav.js +0 -202
  90. package/cjs/left-nav/LeftNav.js.map +0 -1
  91. package/cjs/login/LoginPanel.css.js +0 -6
  92. package/cjs/login/LoginPanel.css.js.map +0 -1
  93. package/cjs/login/LoginPanel.js +0 -110
  94. package/cjs/login/LoginPanel.js.map +0 -1
  95. package/cjs/login/VuuLogo.js +0 -134
  96. package/cjs/login/VuuLogo.js.map +0 -1
  97. package/cjs/persistence-manager/LocalPersistenceManager.js +0 -193
  98. package/cjs/persistence-manager/LocalPersistenceManager.js.map +0 -1
  99. package/cjs/persistence-manager/PersistenceProvider.js +0 -21
  100. package/cjs/persistence-manager/PersistenceProvider.js.map +0 -1
  101. package/cjs/persistence-manager/RemotePersistenceManager.js +0 -165
  102. package/cjs/persistence-manager/RemotePersistenceManager.js.map +0 -1
  103. package/cjs/persistence-manager/StaticPersistenceManager.js +0 -73
  104. package/cjs/persistence-manager/StaticPersistenceManager.js.map +0 -1
  105. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js +0 -6
  106. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js.map +0 -1
  107. package/cjs/shell-layout-templates/context-panel/ContextPanel.js +0 -100
  108. package/cjs/shell-layout-templates/context-panel/ContextPanel.js.map +0 -1
  109. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -51
  110. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +0 -1
  111. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -83
  112. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +0 -1
  113. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -46
  114. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +0 -1
  115. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js +0 -6
  116. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js.map +0 -1
  117. package/cjs/shell-layout-templates/side-panel/SidePanel.js +0 -36
  118. package/cjs/shell-layout-templates/side-panel/SidePanel.js.map +0 -1
  119. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -48
  120. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +0 -1
  121. package/cjs/shell-layout-templates/useShellLayout.js +0 -23
  122. package/cjs/shell-layout-templates/useShellLayout.js.map +0 -1
  123. package/cjs/shell.css.js +0 -6
  124. package/cjs/shell.css.js.map +0 -1
  125. package/cjs/shell.js +0 -137
  126. package/cjs/shell.js.map +0 -1
  127. package/cjs/theme-switch/ThemeSwitch.css.js +0 -6
  128. package/cjs/theme-switch/ThemeSwitch.css.js.map +0 -1
  129. package/cjs/theme-switch/ThemeSwitch.js +0 -56
  130. package/cjs/theme-switch/ThemeSwitch.js.map +0 -1
  131. package/cjs/user-settings/SettingsForm.css.js +0 -6
  132. package/cjs/user-settings/SettingsForm.css.js.map +0 -1
  133. package/cjs/user-settings/SettingsForm.js +0 -168
  134. package/cjs/user-settings/SettingsForm.js.map +0 -1
  135. package/cjs/user-settings/UserSettingsPanel.css.js +0 -6
  136. package/cjs/user-settings/UserSettingsPanel.css.js.map +0 -1
  137. package/cjs/user-settings/UserSettingsPanel.js +0 -42
  138. package/cjs/user-settings/UserSettingsPanel.js.map +0 -1
  139. package/cjs/workspace-management/LayoutList.css.js +0 -6
  140. package/cjs/workspace-management/LayoutList.css.js.map +0 -1
  141. package/cjs/workspace-management/LayoutList.js +0 -116
  142. package/cjs/workspace-management/LayoutList.js.map +0 -1
  143. package/cjs/workspace-management/LayoutTile.css.js +0 -6
  144. package/cjs/workspace-management/LayoutTile.css.js.map +0 -1
  145. package/cjs/workspace-management/LayoutTile.js +0 -41
  146. package/cjs/workspace-management/LayoutTile.js.map +0 -1
  147. package/cjs/workspace-management/SaveLayoutPanel.css.js +0 -6
  148. package/cjs/workspace-management/SaveLayoutPanel.css.js.map +0 -1
  149. package/cjs/workspace-management/SaveLayoutPanel.js +0 -128
  150. package/cjs/workspace-management/SaveLayoutPanel.js.map +0 -1
  151. package/cjs/workspace-management/WorkspaceProvider.js +0 -265
  152. package/cjs/workspace-management/WorkspaceProvider.js.map +0 -1
  153. package/cjs/workspace-management/defaultWorkspaceJSON.js +0 -101
  154. package/cjs/workspace-management/defaultWorkspaceJSON.js.map +0 -1
  155. package/cjs/workspace-management/screenshot-utils.js +0 -25
  156. package/cjs/workspace-management/screenshot-utils.js.map +0 -1
  157. package/cjs/workspace-management/useWorkspaceContextMenuItems.js +0 -72
  158. package/cjs/workspace-management/useWorkspaceContextMenuItems.js.map +0 -1
  159. package/esm/ShellContextProvider.js +0 -23
  160. package/esm/ShellContextProvider.js.map +0 -1
  161. package/esm/app-header/AppHeader.css.js +0 -4
  162. package/esm/app-header/AppHeader.css.js.map +0 -1
  163. package/esm/app-header/AppHeader.js +0 -116
  164. package/esm/app-header/AppHeader.js.map +0 -1
  165. package/esm/application-provider/ApplicationContext.js +0 -15
  166. package/esm/application-provider/ApplicationContext.js.map +0 -1
  167. package/esm/application-provider/ApplicationProvider.js +0 -96
  168. package/esm/application-provider/ApplicationProvider.js.map +0 -1
  169. package/esm/feature/Feature.js +0 -52
  170. package/esm/feature/Feature.js.map +0 -1
  171. package/esm/feature/FeatureErrorBoundary.js +0 -28
  172. package/esm/feature/FeatureErrorBoundary.js.map +0 -1
  173. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -56
  174. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +0 -1
  175. package/esm/feature-list/FeatureList.css.js +0 -4
  176. package/esm/feature-list/FeatureList.css.js.map +0 -1
  177. package/esm/feature-list/FeatureList.js +0 -107
  178. package/esm/feature-list/FeatureList.js.map +0 -1
  179. package/esm/index.js +0 -25
  180. package/esm/index.js.map +0 -1
  181. package/esm/left-nav/LeftNav.css.js +0 -4
  182. package/esm/left-nav/LeftNav.css.js.map +0 -1
  183. package/esm/left-nav/LeftNav.js +0 -200
  184. package/esm/left-nav/LeftNav.js.map +0 -1
  185. package/esm/login/LoginPanel.css.js +0 -4
  186. package/esm/login/LoginPanel.css.js.map +0 -1
  187. package/esm/login/LoginPanel.js +0 -108
  188. package/esm/login/LoginPanel.js.map +0 -1
  189. package/esm/login/VuuLogo.js +0 -132
  190. package/esm/login/VuuLogo.js.map +0 -1
  191. package/esm/persistence-manager/LocalPersistenceManager.js +0 -191
  192. package/esm/persistence-manager/LocalPersistenceManager.js.map +0 -1
  193. package/esm/persistence-manager/PersistenceProvider.js +0 -17
  194. package/esm/persistence-manager/PersistenceProvider.js.map +0 -1
  195. package/esm/persistence-manager/RemotePersistenceManager.js +0 -163
  196. package/esm/persistence-manager/RemotePersistenceManager.js.map +0 -1
  197. package/esm/persistence-manager/StaticPersistenceManager.js +0 -71
  198. package/esm/persistence-manager/StaticPersistenceManager.js.map +0 -1
  199. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js +0 -4
  200. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js.map +0 -1
  201. package/esm/shell-layout-templates/context-panel/ContextPanel.js +0 -98
  202. package/esm/shell-layout-templates/context-panel/ContextPanel.js.map +0 -1
  203. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -49
  204. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +0 -1
  205. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -81
  206. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +0 -1
  207. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -44
  208. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +0 -1
  209. package/esm/shell-layout-templates/side-panel/SidePanel.css.js +0 -4
  210. package/esm/shell-layout-templates/side-panel/SidePanel.css.js.map +0 -1
  211. package/esm/shell-layout-templates/side-panel/SidePanel.js +0 -34
  212. package/esm/shell-layout-templates/side-panel/SidePanel.js.map +0 -1
  213. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -46
  214. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +0 -1
  215. package/esm/shell-layout-templates/useShellLayout.js +0 -21
  216. package/esm/shell-layout-templates/useShellLayout.js.map +0 -1
  217. package/esm/shell.css.js +0 -4
  218. package/esm/shell.css.js.map +0 -1
  219. package/esm/shell.js +0 -135
  220. package/esm/shell.js.map +0 -1
  221. package/esm/theme-switch/ThemeSwitch.css.js +0 -4
  222. package/esm/theme-switch/ThemeSwitch.css.js.map +0 -1
  223. package/esm/theme-switch/ThemeSwitch.js +0 -54
  224. package/esm/theme-switch/ThemeSwitch.js.map +0 -1
  225. package/esm/user-settings/SettingsForm.css.js +0 -4
  226. package/esm/user-settings/SettingsForm.css.js.map +0 -1
  227. package/esm/user-settings/SettingsForm.js +0 -162
  228. package/esm/user-settings/SettingsForm.js.map +0 -1
  229. package/esm/user-settings/UserSettingsPanel.css.js +0 -4
  230. package/esm/user-settings/UserSettingsPanel.css.js.map +0 -1
  231. package/esm/user-settings/UserSettingsPanel.js +0 -40
  232. package/esm/user-settings/UserSettingsPanel.js.map +0 -1
  233. package/esm/workspace-management/LayoutList.css.js +0 -4
  234. package/esm/workspace-management/LayoutList.css.js.map +0 -1
  235. package/esm/workspace-management/LayoutList.js +0 -114
  236. package/esm/workspace-management/LayoutList.js.map +0 -1
  237. package/esm/workspace-management/LayoutTile.css.js +0 -4
  238. package/esm/workspace-management/LayoutTile.css.js.map +0 -1
  239. package/esm/workspace-management/LayoutTile.js +0 -39
  240. package/esm/workspace-management/LayoutTile.js.map +0 -1
  241. package/esm/workspace-management/SaveLayoutPanel.css.js +0 -4
  242. package/esm/workspace-management/SaveLayoutPanel.css.js.map +0 -1
  243. package/esm/workspace-management/SaveLayoutPanel.js +0 -126
  244. package/esm/workspace-management/SaveLayoutPanel.js.map +0 -1
  245. package/esm/workspace-management/WorkspaceProvider.js +0 -262
  246. package/esm/workspace-management/WorkspaceProvider.js.map +0 -1
  247. package/esm/workspace-management/defaultWorkspaceJSON.js +0 -95
  248. package/esm/workspace-management/defaultWorkspaceJSON.js.map +0 -1
  249. package/esm/workspace-management/screenshot-utils.js +0 -23
  250. package/esm/workspace-management/screenshot-utils.js.map +0 -1
  251. package/esm/workspace-management/useWorkspaceContextMenuItems.js +0 -70
  252. package/esm/workspace-management/useWorkspaceContextMenuItems.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkspaceProvider.js","sources":["../../../../packages/vuu-shell/src/workspace-management/WorkspaceProvider.tsx"],"sourcesContent":["import { isLayoutJSON, resolveJSONPath } from \"@vuu-ui/vuu-layout\";\nimport { useNotifications } from \"@vuu-ui/vuu-notifications\";\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 {\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} 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 | LayoutJSON[];\n activeLayoutIndex?: number;\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 | LayoutJSON[];\n};\n\nexport interface WorkspaceProviderProps extends WorkspaceProps {\n children: ReactElement | ReactElement[];\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 activeLayoutIndex,\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 { showNotification } = 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 showNotification({\n content: \"Could not load list of available layouts\",\n header: \"Failed to Load Layouts\",\n status: \"error\",\n type: \"toast\",\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 activeLayoutIndex,\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 showNotification({\n content: \"Could not load your latest view\",\n header: \"Failed to Load Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\n \"Error occurred while retrieving application layout\",\n error,\n );\n });\n }, [\n TabstripProps,\n activeLayoutIndex,\n customWorkspaceJSON,\n layoutJSON,\n showNotification,\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 const { workspaceJSON } = applicationJSONRef.current;\n if (Array.isArray(workspaceJSON)) {\n console.log(\"how do we identify the right thing to save\");\n } else {\n layoutToSave = resolveJSONPath(\n workspaceJSON,\n `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`,\n );\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 showNotification({\n content: `${metadata.name} saved successfully`,\n header: \"Layout Saved Successfully\",\n status: \"success\",\n type: \"toast\",\n });\n setLayoutMetadata((prev) => [...prev, metadata]);\n })\n .catch((error: Error) => {\n showNotification({\n content: `Failed to save layout ${metadata.name}`,\n header: \"Failed to Save Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while saving layout\", error);\n });\n } else {\n console.error(\"Tried to save invalid layout\", layoutToSave);\n showNotification({\n content: \"Cannot save invalid layout\",\n header: \"Failed to Save Layout\",\n status: \"error\",\n type: \"toast\",\n });\n }\n },\n [showNotification, 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 if (Array.isArray(currentLayout)) {\n console.log(\"how do we deal witha amulti layoput\");\n } else {\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 })\n .catch((error: Error) => {\n showNotification({\n content: \"Failed to load the requested layout\",\n header: \"Failed to Load Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while loading layout\", error);\n });\n },\n [showNotification, 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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"}
@@ -1,101 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
-
5
- const warningLayout = {
6
- type: "View",
7
- props: {
8
- style: { height: "calc(100% - 6px)" }
9
- },
10
- children: [
11
- {
12
- props: {
13
- className: "vuuShell-warningPlaceholder"
14
- },
15
- type: "Placeholder"
16
- }
17
- ]
18
- };
19
- const loadingJSON = {
20
- type: "Component",
21
- id: "loading-main",
22
- props: {}
23
- };
24
- const defaultWorkspaceJSON = {
25
- type: "Stack",
26
- id: vuuUtils.VuuShellLocation.Workspace,
27
- props: {
28
- className: `${vuuUtils.VuuShellLocation.Workspace}-tabs`,
29
- TabstripProps: {
30
- allowAddTab: true,
31
- allowCloseTab: true,
32
- allowRenameTab: true,
33
- animateSelectionThumb: false,
34
- "aria-label": "Workspace Tabs",
35
- location: "workspace-tab",
36
- variant: "primary"
37
- },
38
- preserve: true
39
- }
40
- };
41
- const getStackWorkspaceJSON = (activeLayoutIndex) => ({
42
- ...defaultWorkspaceJSON,
43
- active: activeLayoutIndex ?? 0
44
- });
45
- const placeholderLayout = {
46
- props: {
47
- id: "tab1",
48
- title: "Tab 1",
49
- className: "vuuShell-Placeholder"
50
- },
51
- type: "Placeholder"
52
- };
53
- const getWorkspaceWithLayoutJSON = (customWorkspaceJSON, layoutJSON = placeholderLayout, activeLayoutIndex, stackProps) => {
54
- const stackWorkspace = getStackWorkspaceJSON(activeLayoutIndex);
55
- if (Array.isArray(customWorkspaceJSON)) {
56
- const workspace = customWorkspaceJSON.find(
57
- (layout) => layout.id === vuuUtils.VuuShellLocation.Workspace
58
- );
59
- if (workspace) {
60
- return customWorkspaceJSON.map((ws) => {
61
- if (ws.id === vuuUtils.VuuShellLocation.Workspace) {
62
- return {
63
- ...ws,
64
- children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
65
- };
66
- } else {
67
- return ws;
68
- }
69
- });
70
- } else {
71
- throw Error(
72
- "Multiple workspaces have been provided but none has the workspace id"
73
- );
74
- }
75
- } else if (customWorkspaceJSON) {
76
- return {
77
- ...customWorkspaceJSON,
78
- children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
79
- };
80
- } else {
81
- return {
82
- ...stackWorkspace,
83
- props: {
84
- ...stackWorkspace.props,
85
- ...stackProps,
86
- TabstripProps: {
87
- ...stackWorkspace.props?.TabstripProps,
88
- ...stackProps?.TabstripProps
89
- }
90
- },
91
- children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
92
- };
93
- }
94
- };
95
-
96
- exports.defaultWorkspaceJSON = defaultWorkspaceJSON;
97
- exports.getStackWorkspaceJSON = getStackWorkspaceJSON;
98
- exports.getWorkspaceWithLayoutJSON = getWorkspaceWithLayoutJSON;
99
- exports.loadingJSON = loadingJSON;
100
- exports.warningLayout = warningLayout;
101
- //# sourceMappingURL=defaultWorkspaceJSON.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaultWorkspaceJSON.js","sources":["../../../../packages/vuu-shell/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 defaultWorkspaceJSON: LayoutJSON<\n StackProps & { preserve: boolean }\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 },\n};\n\nexport const getStackWorkspaceJSON = (\n activeLayoutIndex?: number,\n): LayoutJSON => ({\n ...defaultWorkspaceJSON,\n active: activeLayoutIndex ?? 0,\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 | LayoutJSON[],\n layoutJSON: LayoutJSON | LayoutJSON[] = placeholderLayout,\n activeLayoutIndex?: number,\n stackProps?: WorkspaceStackProps,\n): LayoutJSON | LayoutJSON[] => {\n const stackWorkspace = getStackWorkspaceJSON(activeLayoutIndex);\n if (Array.isArray(customWorkspaceJSON)) {\n const workspace = customWorkspaceJSON.find(\n (layout) => layout.id === VuuShellLocation.Workspace,\n );\n if (workspace) {\n return customWorkspaceJSON.map((ws) => {\n if (ws.id === VuuShellLocation.Workspace) {\n return {\n ...ws,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return ws;\n }\n });\n } else {\n throw Error(\n \"Multiple workspaces have been provided but none has the workspace id\",\n );\n }\n } else if (customWorkspaceJSON) {\n return {\n ...customWorkspaceJSON,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return {\n ...stackWorkspace,\n props: {\n ...stackWorkspace.props,\n ...stackProps,\n TabstripProps: {\n ...stackWorkspace.props?.TabstripProps,\n ...stackProps?.TabstripProps,\n },\n },\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n }\n};\n"],"names":["VuuShellLocation"],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- var htmlToImage = require('html-to-image');
4
-
5
- const takeScreenshot = (node) => {
6
- return new Promise((resolve, reject) => {
7
- htmlToImage.toPng(node, {
8
- cacheBust: true
9
- }).then((screenshot) => {
10
- if (!screenshot) {
11
- reject(new Error("No Screenshot available"));
12
- }
13
- resolve(screenshot);
14
- }).catch((error) => {
15
- console.error(
16
- "the following error occurred while taking a screenshot of a DOMNode",
17
- error
18
- );
19
- reject(new Error("Error taking screenshot"));
20
- });
21
- });
22
- };
23
-
24
- exports.takeScreenshot = takeScreenshot;
25
- //# sourceMappingURL=screenshot-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screenshot-utils.js","sources":["../../../../packages/vuu-shell/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;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;AAAA;AAE7C,MAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,KACnB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qEAAA;AAAA,QACA;AAAA,OACF;AACA,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA;AAAA,KAC5C,CAAA;AAAA,GACJ,CAAA;AACH;;;;"}
@@ -1,72 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
5
- var React = require('react');
6
- var SaveLayoutPanel = require('./SaveLayoutPanel.js');
7
- var WorkspaceProvider = require('./WorkspaceProvider.js');
8
-
9
- const useWorkspaceContextMenuItems = () => {
10
- const { saveLayout } = WorkspaceProvider.useWorkspace();
11
- const { showDialog, closeDialog } = vuuUiControls.useModal();
12
- const handleCloseDialog = React.useCallback(() => {
13
- closeDialog();
14
- }, [closeDialog]);
15
- const handleSave = React.useCallback(
16
- (layoutMetadata) => {
17
- saveLayout(layoutMetadata);
18
- closeDialog();
19
- },
20
- [saveLayout, closeDialog]
21
- );
22
- const [buildMenuOptions, handleMenuAction] = React.useMemo(() => {
23
- return [
24
- (location, options) => {
25
- const locations = location.split(" ");
26
- const menuDescriptors = [];
27
- if (locations.includes("workspace-tab")) {
28
- menuDescriptors.push(
29
- {
30
- label: "Save Layout",
31
- id: "save-layout",
32
- options
33
- },
34
- {
35
- label: "Layout Settings",
36
- id: "layout-settings",
37
- options
38
- }
39
- );
40
- }
41
- return menuDescriptors;
42
- },
43
- (menuItemId, options) => {
44
- if (menuItemId === "save-layout") {
45
- showDialog(
46
- /* @__PURE__ */ jsxRuntime.jsx(
47
- SaveLayoutPanel.SaveLayoutPanel,
48
- {
49
- onCancel: handleCloseDialog,
50
- onSave: handleSave,
51
- componentId: options?.controlledComponentId,
52
- defaultTitle: options?.controlledComponentTitle
53
- }
54
- ),
55
- "Save Layout",
56
- [],
57
- true
58
- );
59
- return true;
60
- }
61
- return false;
62
- }
63
- ];
64
- }, [handleCloseDialog, handleSave, showDialog]);
65
- return {
66
- buildMenuOptions,
67
- handleMenuAction
68
- };
69
- };
70
-
71
- exports.useWorkspaceContextMenuItems = useWorkspaceContextMenuItems;
72
- //# sourceMappingURL=useWorkspaceContextMenuItems.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWorkspaceContextMenuItems.js","sources":["../../../../packages/vuu-shell/src/workspace-management/useWorkspaceContextMenuItems.tsx"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n MenuActionHandler,\n MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport { TabContextMenuOptions, useModal } from \"@vuu-ui/vuu-ui-controls\";\nimport { type 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 } = useModal();\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 id: \"save-layout\",\n options,\n },\n {\n label: \"Layout Settings\",\n id: \"layout-settings\",\n options,\n },\n );\n }\n return menuDescriptors;\n },\n (menuItemId, options) => {\n if (menuItemId === \"save-layout\") {\n showDialog(\n <SaveLayoutPanel\n onCancel={handleCloseDialog}\n onSave={handleSave}\n componentId={\n (options as TabContextMenuOptions)?.controlledComponentId\n }\n defaultTitle={\n (options as TabContextMenuOptions)?.controlledComponentTitle\n }\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","useModal","useCallback","useMemo","jsx","SaveLayoutPanel"],"mappings":";;;;;;;;AAWO,MAAM,+BAA+B,MAAM;AAChD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,8BAAa,EAAA;AAEpC,EAAA,MAAM,EAAE,UAAA,EAAY,WAAY,EAAA,GAAIC,sBAAS,EAAA;AAE7C,EAAM,MAAA,iBAAA,GAAoBC,kBAAY,MAAM;AAC1C,IAAY,WAAA,EAAA;AAAA,GACd,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,cAAsC,KAAA;AACrC,MAAA,UAAA,CAAW,cAAc,CAAA;AACzB,MAAY,WAAA,EAAA;AAAA,KACd;AAAA,IACA,CAAC,YAAY,WAAW;AAAA,GAC1B;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;AACpC,QAAA,MAAM,kBAA+C,EAAC;AACtD,QAAI,IAAA,SAAA,CAAU,QAAS,CAAA,eAAe,CAAG,EAAA;AACvC,UAAgB,eAAA,CAAA,IAAA;AAAA,YACd;AAAA,cACE,KAAO,EAAA,aAAA;AAAA,cACP,EAAI,EAAA,aAAA;AAAA,cACJ;AAAA,aACF;AAAA,YACA;AAAA,cACE,KAAO,EAAA,iBAAA;AAAA,cACP,EAAI,EAAA,iBAAA;AAAA,cACJ;AAAA;AACF,WACF;AAAA;AAEF,QAAO,OAAA,eAAA;AAAA,OACT;AAAA,MACA,CAAC,YAAY,OAAY,KAAA;AACvB,QAAA,IAAI,eAAe,aAAe,EAAA;AAChC,UAAA,UAAA;AAAA,4BACEC,cAAA;AAAA,cAACC,+BAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,iBAAA;AAAA,gBACV,MAAQ,EAAA,UAAA;AAAA,gBACR,aACG,OAAmC,EAAA,qBAAA;AAAA,gBAEtC,cACG,OAAmC,EAAA;AAAA;AAAA,aAExC;AAAA,YACA,aAAA;AAAA,YACA,EAAC;AAAA,YACD;AAAA,WACF;AACA,UAAO,OAAA,IAAA;AAAA;AAET,QAAO,OAAA,KAAA;AAAA;AACT,KACF;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA;AAE9C,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -1,23 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { ShellContext } from '@vuu-ui/vuu-utils';
3
-
4
- const Provider = ({
5
- children,
6
- context,
7
- inheritedContext
8
- }) => {
9
- const mergedContext = {
10
- ...inheritedContext,
11
- ...context
12
- };
13
- return /* @__PURE__ */ jsx(ShellContext.Provider, { value: mergedContext, children });
14
- };
15
- const ShellContextProvider = ({
16
- children,
17
- value
18
- }) => {
19
- return /* @__PURE__ */ jsx(ShellContext.Consumer, { children: (context) => /* @__PURE__ */ jsx(Provider, { context: value, inheritedContext: context, children }) });
20
- };
21
-
22
- export { ShellContextProvider };
23
- //# sourceMappingURL=ShellContextProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellContextProvider.js","sources":["../../../packages/vuu-shell/src/ShellContextProvider.tsx"],"sourcesContent":["import { ShellContext, ShellContextProps } from \"@vuu-ui/vuu-utils\";\nimport { ReactElement, ReactNode } from \"react\";\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":";;;AAQA,MAAM,WAAW,CAAC;AAAA,EAChB,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAIM,KAAA;AAEJ,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,GAAG,gBAAA;AAAA,IACH,GAAG;AAAA,GACL;AACA,EAAA,2BACG,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,eAC3B,QACH,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,QAAA;AAAA,EACA;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;AAEJ;;;;"}
@@ -1,4 +0,0 @@
1
- var appHeaderCss = ".vuuAppHeader {\n --saltButton-borderRadius: 6px;\n --saltButton-text-color: var(--vuu-color-gray-50);\n --saltButton-padding: 12px;\n --vuuToolbarItem-height: 26px;\n --vuuOverflowContainer-gap: 8px;\n --vuuOverflowContainer-height: var(--vuuAppHeader-height, 42px);\n --vuu-icon-color: var(--vuu-color-gray-45);\n --vuu-icon-size: 16px;\n --vuuToolbar-borderWidth: 1px;\n --vuuToolbar-borderStyle: solid;\n --vuuToolbar-borderColor: var(--salt-separable-primary-borderColor);\n\n align-items: center;\n display: flex;\n justify-content: flex-end;\n}\n\n";
2
-
3
- export { appHeaderCss as default };
4
- //# sourceMappingURL=AppHeader.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AppHeader.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,116 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Button } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { useLayoutOperation } from '@vuu-ui/vuu-layout';
6
- import { Toolbar } from '@vuu-ui/vuu-ui-controls';
7
- import cx from 'clsx';
8
- import { useRef, useCallback } from 'react';
9
- import { usePersistenceManager } from '../persistence-manager/PersistenceProvider.js';
10
- import '../persistence-manager/LocalPersistenceManager.js';
11
- import '../persistence-manager/StaticPersistenceManager.js';
12
- import { useNotifications, NotificationType } from '@vuu-ui/vuu-notifications';
13
- import { useLogout } from '../application-provider/ApplicationProvider.js';
14
- import appHeaderCss from './AppHeader.css.js';
15
-
16
- const classBase = "vuuAppHeader";
17
- const AppHeader = ({
18
- className: classNameProp,
19
- themeMode: _,
20
- ...htmlAttributes
21
- }) => {
22
- const targetWindow = useWindow();
23
- useComponentCssInjection({
24
- testId: "vuu-app-header",
25
- css: appHeaderCss,
26
- window: targetWindow
27
- });
28
- const persistenceManager = usePersistenceManager();
29
- const settingsButtonRef = useRef(null);
30
- const className = cx(classBase, classNameProp);
31
- const logout = useLogout();
32
- const { showComponentInContextPanel } = useLayoutOperation();
33
- const { showNotification } = useNotifications();
34
- const handleReset = useCallback(() => {
35
- persistenceManager?.clearUserSettings();
36
- showNotification({
37
- animationType: "slide-out",
38
- renderPostRefresh: true,
39
- type: NotificationType.Toast,
40
- header: "Success",
41
- content: "Settings cleared",
42
- status: "success"
43
- });
44
- location.reload();
45
- }, [persistenceManager, showNotification]);
46
- const handleShowSettings = useCallback(() => {
47
- showComponentInContextPanel(
48
- {
49
- type: "ApplicationSettings"
50
- },
51
- "Settings",
52
- () => settingsButtonRef.current?.focus()
53
- );
54
- }, [showComponentInContextPanel]);
55
- return /* @__PURE__ */ jsxs(
56
- Toolbar,
57
- {
58
- alignItems: "end",
59
- className,
60
- role: "banner",
61
- showSeparators: true,
62
- ...htmlAttributes,
63
- children: [
64
- /* @__PURE__ */ jsx(
65
- Button,
66
- {
67
- className: `${classBase}-menuItem`,
68
- appearance: "transparent",
69
- sentiment: "neutral",
70
- children: "Help"
71
- }
72
- ),
73
- /* @__PURE__ */ jsxs(
74
- Button,
75
- {
76
- appearance: "transparent",
77
- className: `${classBase}-menuItem`,
78
- onClick: handleReset,
79
- sentiment: "neutral",
80
- children: [
81
- "Reset ",
82
- /* @__PURE__ */ jsx("span", { "data-icon": "history" })
83
- ]
84
- }
85
- ),
86
- /* @__PURE__ */ jsxs(
87
- Button,
88
- {
89
- appearance: "transparent",
90
- className: `${classBase}-menuItem`,
91
- onClick: handleShowSettings,
92
- ref: settingsButtonRef,
93
- sentiment: "neutral",
94
- children: [
95
- "Settings ",
96
- /* @__PURE__ */ jsx("span", { "data-icon": "settings" })
97
- ]
98
- }
99
- ),
100
- /* @__PURE__ */ jsx(
101
- Button,
102
- {
103
- appearance: "transparent",
104
- className: `${classBase}-menuItem`,
105
- onClick: logout,
106
- sentiment: "neutral",
107
- children: "Log out"
108
- }
109
- )
110
- ]
111
- }
112
- );
113
- };
114
-
115
- export { AppHeader };
116
- //# sourceMappingURL=AppHeader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AppHeader.js","sources":["../../../../packages/vuu-shell/src/app-header/AppHeader.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useLayoutOperation } from \"@vuu-ui/vuu-layout\";\nimport { Toolbar } from \"@vuu-ui/vuu-ui-controls\";\nimport type { ThemeMode } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useCallback, useRef } from \"react\";\nimport { usePersistenceManager } from \"../persistence-manager\";\nimport { NotificationType, useNotifications } from \"@vuu-ui/vuu-notifications\";\nimport { useLogout } from \"../application-provider\";\n\nimport appHeaderCss from \"./AppHeader.css\";\n\nconst classBase = \"vuuAppHeader\";\nexport interface AppHeaderProps extends HTMLAttributes<HTMLDivElement> {\n themeMode?: ThemeMode;\n}\n\nexport const AppHeader = ({\n className: classNameProp,\n themeMode: _,\n ...htmlAttributes\n}: AppHeaderProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-app-header\",\n css: appHeaderCss,\n window: targetWindow,\n });\n\n const persistenceManager = usePersistenceManager();\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n\n const className = cx(classBase, classNameProp);\n const logout = useLogout();\n\n const { showComponentInContextPanel } = useLayoutOperation();\n const { showNotification } = useNotifications();\n\n const handleReset = useCallback(() => {\n persistenceManager?.clearUserSettings();\n showNotification({\n animationType: \"slide-out\",\n renderPostRefresh: true,\n type: NotificationType.Toast,\n header: \"Success\",\n content: \"Settings cleared\",\n status: \"success\",\n });\n location.reload();\n }, [persistenceManager, showNotification]);\n\n const handleShowSettings = useCallback(() => {\n showComponentInContextPanel(\n {\n type: \"ApplicationSettings\",\n },\n \"Settings\",\n () => settingsButtonRef.current?.focus(),\n );\n }, [showComponentInContextPanel]);\n\n return (\n <Toolbar\n alignItems=\"end\"\n className={className}\n role=\"banner\"\n showSeparators\n {...htmlAttributes}\n >\n <Button\n className={`${classBase}-menuItem`}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n >\n Help\n </Button>\n <Button\n appearance=\"transparent\"\n className={`${classBase}-menuItem`}\n onClick={handleReset}\n sentiment=\"neutral\"\n >\n Reset <span data-icon=\"history\" />\n </Button>\n <Button\n appearance=\"transparent\"\n className={`${classBase}-menuItem`}\n onClick={handleShowSettings}\n ref={settingsButtonRef}\n sentiment=\"neutral\"\n >\n Settings <span data-icon=\"settings\" />\n </Button>\n <Button\n appearance=\"transparent\"\n className={`${classBase}-menuItem`}\n onClick={logout}\n sentiment=\"neutral\"\n >\n Log out\n </Button>\n </Toolbar>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { createContext } from 'react';
2
-
3
- const Guest = {
4
- username: "unknown"
5
- };
6
- const ApplicationContext = createContext({
7
- onUserSettingChanged: (propertyName) => console.warn(
8
- `Cannot change setting '${propertyName}'.
9
- Did you forget to declare an ApplicationProvider ?`
10
- ),
11
- user: Guest
12
- });
13
-
14
- export { ApplicationContext };
15
- //# sourceMappingURL=ApplicationContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApplicationContext.js","sources":["../../../../packages/vuu-shell/src/application-provider/ApplicationContext.tsx"],"sourcesContent":["import type { Settings, VuuUser } from \"@vuu-ui/vuu-utils\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { createContext } from \"react\";\nimport { SettingsSchema } from \"../user-settings\";\n\nconst Guest: VuuUser = {\n username: \"unknown\",\n};\n\nexport interface ApplicationContextProps {\n onUserSettingChanged: (\n propertyName: string,\n value: VuuRowDataItemType,\n ) => void;\n logout?: () => void;\n userSettings?: Settings;\n userSettingsSchema?: SettingsSchema;\n user: VuuUser;\n}\n\nexport const ApplicationContext = createContext<ApplicationContextProps>({\n onUserSettingChanged: (propertyName: string) =>\n console.warn(\n `Cannot change setting '${propertyName}'.\\nDid you forget to declare an ApplicationProvider ?`,\n ),\n user: Guest,\n});\n"],"names":[],"mappings":";;AAKA,MAAM,KAAiB,GAAA;AAAA,EACrB,QAAU,EAAA;AACZ,CAAA;AAaO,MAAM,qBAAqB,aAAuC,CAAA;AAAA,EACvE,oBAAA,EAAsB,CAAC,YAAA,KACrB,OAAQ,CAAA,IAAA;AAAA,IACN,0BAA0B,YAAY,CAAA;AAAA,kDAAA;AAAA,GACxC;AAAA,EACF,IAAM,EAAA;AACR,CAAC;;;;"}
@@ -1,96 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useTheme, useDensity, SaltProviderNext } from '@salt-ds/core';
3
- import { useContext, useState, useMemo, useCallback } from 'react';
4
- import { ApplicationContext } from './ApplicationContext.js';
5
- import { usePersistenceManager } from '../persistence-manager/PersistenceProvider.js';
6
- import '../persistence-manager/LocalPersistenceManager.js';
7
- import '../persistence-manager/StaticPersistenceManager.js';
8
-
9
- const accentPurple = "purple";
10
- const getThemeMode = (mode = "light", userSettings) => {
11
- const themeMode = userSettings?.themeMode;
12
- if (themeMode === "light" || themeMode === "dark") {
13
- return themeMode;
14
- }
15
- return mode;
16
- };
17
- const ApplicationProvider = ({
18
- children,
19
- density: densityProp,
20
- logout,
21
- mode,
22
- theme,
23
- userSettingsSchema,
24
- user
25
- }) => {
26
- const { mode: inheritedMode, theme: inheritedTheme } = useTheme();
27
- const density = useDensity(densityProp);
28
- const persistenceManager = usePersistenceManager();
29
- const context = useContext(ApplicationContext);
30
- const [userSettings, setSettings] = useState();
31
- useMemo(async () => {
32
- if (persistenceManager) {
33
- const userSettings2 = await persistenceManager.getUserSettings();
34
- setSettings(userSettings2);
35
- } else {
36
- setSettings({});
37
- }
38
- }, [persistenceManager]);
39
- const onUserSettingChanged = useCallback(
40
- (propertyName, value) => {
41
- setSettings((currentSettings) => {
42
- const newSettings = { ...currentSettings, [propertyName]: value };
43
- persistenceManager?.saveUserSettings(newSettings);
44
- return newSettings;
45
- });
46
- },
47
- [persistenceManager]
48
- );
49
- return userSettings ? /* @__PURE__ */ jsx(
50
- ApplicationContext.Provider,
51
- {
52
- value: {
53
- ...context,
54
- logout,
55
- onUserSettingChanged,
56
- userSettings,
57
- userSettingsSchema,
58
- user: user ?? context.user
59
- },
60
- children: /* @__PURE__ */ jsx(
61
- SaltProviderNext,
62
- {
63
- accent: accentPurple,
64
- corner: "rounded",
65
- theme: theme ?? inheritedTheme ?? "vuu-theme",
66
- density,
67
- mode: getThemeMode(mode ?? inheritedMode, userSettings),
68
- children
69
- }
70
- )
71
- }
72
- ) : null;
73
- };
74
- const useApplicationUser = () => {
75
- const { user } = useContext(ApplicationContext);
76
- return user;
77
- };
78
- const useApplicationSettings = () => {
79
- const { onUserSettingChanged, userSettings, userSettingsSchema } = useContext(ApplicationContext);
80
- return {
81
- onUserSettingChanged,
82
- userSettings,
83
- userSettingsSchema
84
- };
85
- };
86
- const useUserSetting = () => {
87
- const { userSettings } = useContext(ApplicationContext);
88
- return userSettings;
89
- };
90
- const useLogout = () => {
91
- const { logout } = useContext(ApplicationContext);
92
- return logout;
93
- };
94
-
95
- export { ApplicationProvider, useApplicationSettings, useApplicationUser, useLogout, useUserSetting };
96
- //# sourceMappingURL=ApplicationProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApplicationProvider.js","sources":["../../../../packages/vuu-shell/src/application-provider/ApplicationProvider.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n Accent,\n Density,\n Mode,\n SaltProviderNext,\n ThemeContextProps,\n useDensity,\n useTheme,\n} from \"@salt-ds/core\";\nimport {\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport {\n ApplicationContext,\n ApplicationContextProps,\n} from \"./ApplicationContext\";\nimport { usePersistenceManager } from \"../persistence-manager\";\n\nexport interface ApplicationProviderProps\n extends Partial<Pick<ThemeContextProps, \"theme\" | \"mode\">>,\n Partial<Omit<ApplicationContextProps, \"userSettings\">> {\n children: ReactNode;\n density?: Density;\n}\n\nconst accentPurple = \"purple\" as Accent;\n\nconst getThemeMode = (\n mode: Mode = \"light\",\n userSettings?: Record<string, string | number | boolean>,\n) => {\n const themeMode = userSettings?.themeMode;\n if (themeMode === \"light\" || themeMode === \"dark\") {\n return themeMode;\n }\n return mode;\n};\n\nexport const ApplicationProvider = ({\n children,\n density: densityProp,\n logout,\n mode,\n theme,\n userSettingsSchema: userSettingsSchema,\n user,\n}: ApplicationProviderProps): ReactElement | null => {\n const { mode: inheritedMode, theme: inheritedTheme } = useTheme();\n const density = useDensity(densityProp);\n const persistenceManager = usePersistenceManager();\n const context = useContext(ApplicationContext);\n const [userSettings, setSettings] =\n useState<Record<string, string | number | boolean>>();\n\n useMemo(async () => {\n if (persistenceManager) {\n const userSettings = await persistenceManager.getUserSettings();\n setSettings(userSettings);\n } else {\n setSettings({});\n }\n }, [persistenceManager]);\n\n const onUserSettingChanged = useCallback(\n (propertyName: string, value: VuuRowDataItemType) => {\n setSettings((currentSettings) => {\n const newSettings = { ...currentSettings, [propertyName]: value };\n persistenceManager?.saveUserSettings(newSettings);\n return newSettings;\n });\n },\n [persistenceManager],\n );\n\n return userSettings ? (\n <ApplicationContext.Provider\n value={{\n ...context,\n logout,\n onUserSettingChanged,\n userSettings,\n userSettingsSchema,\n user: user ?? context.user,\n }}\n >\n <SaltProviderNext\n accent={accentPurple}\n corner=\"rounded\"\n theme={theme ?? inheritedTheme ?? \"vuu-theme\"}\n density={density}\n mode={getThemeMode(mode ?? inheritedMode, userSettings)}\n >\n {children}\n </SaltProviderNext>\n </ApplicationContext.Provider>\n ) : null;\n};\n\nexport const useApplicationUser = () => {\n const { user } = useContext(ApplicationContext);\n return user;\n};\n\n//Setter method (only used within the shell)\nexport const useApplicationSettings = () => {\n const { onUserSettingChanged, userSettings, userSettingsSchema } =\n useContext(ApplicationContext);\n return {\n onUserSettingChanged,\n userSettings,\n userSettingsSchema,\n };\n};\n\n//Getter method (read only access to applicationSetting)\nexport const useUserSetting = () => {\n const { userSettings } = useContext(ApplicationContext);\n return userSettings;\n};\n\nexport const useLogout = () => {\n const { logout } = useContext(ApplicationContext);\n return logout;\n};\n"],"names":["userSettings"],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { registerComponent, importCSS } from '@vuu-ui/vuu-utils';
3
- import React, { useEffect } from 'react';
4
- import { FeatureErrorBoundary } from './FeatureErrorBoundary.js';
5
-
6
- const componentsMap = /* @__PURE__ */ new Map();
7
- const useCachedFeature = (url) => {
8
- useEffect(
9
- () => () => {
10
- componentsMap.delete(url);
11
- },
12
- [url]
13
- );
14
- if (!componentsMap.has(url)) {
15
- componentsMap.set(
16
- url,
17
- React.lazy(() => import(
18
- /* @vite-ignore */
19
- url
20
- ))
21
- );
22
- }
23
- const lazyFeature = componentsMap.get(url);
24
- if (!lazyFeature) {
25
- throw Error(`Unable to load Lazy Feature at url ${url}`);
26
- } else {
27
- return lazyFeature;
28
- }
29
- };
30
- function RawFeature({
31
- url,
32
- css,
33
- ComponentProps: params,
34
- ...props
35
- }) {
36
- if (css) {
37
- importCSS(css).then((styleSheet) => {
38
- document.adoptedStyleSheets = [
39
- ...document.adoptedStyleSheets,
40
- styleSheet
41
- ];
42
- });
43
- }
44
- const LazyFeature = useCachedFeature(url);
45
- return /* @__PURE__ */ jsx(FeatureErrorBoundary, { url, children: /* @__PURE__ */ jsx(LazyFeature, { ...props, ...params }) });
46
- }
47
- const Feature = React.memo(RawFeature);
48
- Feature.displayName = "Feature";
49
- registerComponent("Feature", Feature, "view");
50
-
51
- export { Feature };
52
- //# sourceMappingURL=Feature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Feature.js","sources":["../../../../packages/vuu-shell/src/feature/Feature.tsx"],"sourcesContent":["import {\n DynamicFeatureProps,\n importCSS,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport React, { useEffect } from \"react\";\nimport { FeatureErrorBoundary } from \"./FeatureErrorBoundary\";\n\n/**\n * Ensure we never lazy load the same component more than once\n */\nconst componentsMap = new Map<string, ReturnType<typeof React.lazy>>();\nconst useCachedFeature = (url: string) => {\n useEffect(\n () => () => {\n componentsMap.delete(url);\n },\n [url],\n );\n\n if (!componentsMap.has(url)) {\n componentsMap.set(\n url,\n React.lazy(() => import(/* @vite-ignore */ url)),\n );\n }\n\n const lazyFeature = componentsMap.get(url);\n\n if (!lazyFeature) {\n throw Error(`Unable to load Lazy Feature at url ${url}`);\n } else {\n return lazyFeature;\n }\n};\n\nfunction RawFeature<Params extends object | undefined>({\n url,\n css,\n ComponentProps: params,\n ...props\n}: DynamicFeatureProps<Params>) {\n if (css) {\n // import(/* @vite-ignore */ css, { assert: { type: \"css\" } }).then(\n // (cssModule) => {\n // console.log(\"%cInject Styles\", \"color: blue;font-weight: bold\");\n // document.adoptedStyleSheets = [\n // ...document.adoptedStyleSheets,\n // cssModule.default,\n // ];\n // }\n // );\n // Polyfill until cypress build supports import assertions\n // Note: already fully supported in esbuild and vite\n importCSS(css).then((styleSheet) => {\n document.adoptedStyleSheets = [\n ...document.adoptedStyleSheets,\n styleSheet,\n ];\n });\n }\n\n const LazyFeature = useCachedFeature(url);\n // Suspense has been removed here - caused components to render twice\n return (\n <FeatureErrorBoundary url={url}>\n <LazyFeature {...props} {...params} />\n </FeatureErrorBoundary>\n );\n}\n\n/**\n Feature is a wrapper around React Lazy Loading. It will load a component\n from the given url. That url must resolve to a javascript bundle with a\n single default export. That export must be a React component.\n */\nexport const Feature = React.memo(RawFeature);\nFeature.displayName = \"Feature\";\nregisterComponent(\"Feature\", Feature, \"view\");\n"],"names":[],"mappings":";;;;;AAWA,MAAM,aAAA,uBAAoB,GAA2C,EAAA;AACrE,MAAM,gBAAA,GAAmB,CAAC,GAAgB,KAAA;AACxC,EAAA,SAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,GAAI,CAAA,GAAG,CAAG,EAAA;AAC3B,IAAc,aAAA,CAAA,GAAA;AAAA,MACZ,GAAA;AAAA,MACA,KAAA,CAAM,KAAK,MAAM;AAAA;AAAA,QAA0B;AAAA,OAAI;AAAA,KACjD;AAAA;AAGF,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,GAAA,CAAI,GAAG,CAAA;AAEzC,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAM,MAAA,KAAA,CAAM,CAAsC,mCAAA,EAAA,GAAG,CAAE,CAAA,CAAA;AAAA,GAClD,MAAA;AACL,IAAO,OAAA,WAAA;AAAA;AAEX,CAAA;AAEA,SAAS,UAA8C,CAAA;AAAA,EACrD,GAAA;AAAA,EACA,GAAA;AAAA,EACA,cAAgB,EAAA,MAAA;AAAA,EAChB,GAAG;AACL,CAAgC,EAAA;AAC9B,EAAA,IAAI,GAAK,EAAA;AAYP,IAAA,SAAA,CAAU,GAAG,CAAA,CAAE,IAAK,CAAA,CAAC,UAAe,KAAA;AAClC,MAAA,QAAA,CAAS,kBAAqB,GAAA;AAAA,QAC5B,GAAG,QAAS,CAAA,kBAAA;AAAA,QACZ;AAAA,OACF;AAAA,KACD,CAAA;AAAA;AAGH,EAAM,MAAA,WAAA,GAAc,iBAAiB,GAAG,CAAA;AAExC,EACE,uBAAA,GAAA,CAAC,wBAAqB,GACpB,EAAA,QAAA,kBAAA,GAAA,CAAC,eAAa,GAAG,KAAA,EAAQ,GAAG,MAAA,EAAQ,CACtC,EAAA,CAAA;AAEJ;AAOa,MAAA,OAAA,GAAU,KAAM,CAAA,IAAA,CAAK,UAAU;AAC5C,OAAA,CAAQ,WAAc,GAAA,SAAA;AACtB,iBAAkB,CAAA,SAAA,EAAW,SAAS,MAAM,CAAA;;;;"}