From ff5d3019cd8292d32c66ae8bb516f5d7ec8c42dc Mon Sep 17 00:00:00 2001 From: Arturo Reuschenbach Date: Wed, 8 May 2024 16:07:52 +0200 Subject: [PATCH 01/26] remove migrated applications to cloudoperators (#600) * remove migrated applications to cloudoperators * cleanup * cleanup --- apps/greenhouse-management/LICENSE | 201 - apps/greenhouse-management/README.md | 3 - .../greenhouse-management/__mocks__/client.js | 9 - .../__mocks__/fileMock.js | 6 - .../__mocks__/styleMock.js | 6 - apps/greenhouse-management/babel.config.js | 13 - apps/greenhouse-management/esbuild.config.js | 206 - apps/greenhouse-management/jest.config.js | 21 - apps/greenhouse-management/package.json | 118 - .../public/favicon-16x16.png | Bin 953 -> 0 bytes .../public/favicon-32x32.png | Bin 1482 -> 0 bytes apps/greenhouse-management/public/favicon.ico | Bin 22936 -> 0 bytes apps/greenhouse-management/public/index.html | 68 - .../secretProps.template.json | 10 - apps/greenhouse-management/setupTests.js | 10 - apps/greenhouse-management/src/App.js | 77 - apps/greenhouse-management/src/App.test.js | 18 - apps/greenhouse-management/src/AppContent.js | 44 - .../greenhouse-management/src/assets/.gitkeep | 0 .../src/assets/juno-danger.svg | 8 - apps/greenhouse-management/src/assets/map.svg | 4421 ----------------- .../src/assets/rocket.gif | Bin 4484489 -> 0 bytes .../src/components/AsyncWorker.jsx | 16 - .../src/components/Auth.jsx | 26 - .../src/components/OrgInfo.jsx | 105 - .../src/components/Plugin.jsx | 102 - .../src/components/PluginContainer.jsx | 26 - .../src/components/SideNav.js | 29 - .../src/components/StoreProvider.js | 33 - .../src/components/UrlState.jsx | 20 - .../src/components/shared/HintLoading.js | 31 - apps/greenhouse-management/src/hooks/.gitkeep | 0 .../src/hooks/useCommunication.js | 41 - .../src/hooks/useUrlState.js | 55 - apps/greenhouse-management/src/index.js | 17 - apps/greenhouse-management/src/lib/helpers.js | 15 - apps/greenhouse-management/src/lib/store.js | 101 - apps/greenhouse-management/src/styles.scss | 20 - apps/greenhouse-management/tailwind.config.js | 30 - apps/greenhouse/.gitignore | 1 - apps/greenhouse/LICENSE | 201 - apps/greenhouse/README.md | 3 - apps/greenhouse/__mocks__/client.js | 9 - apps/greenhouse/__mocks__/fileMock.js | 6 - apps/greenhouse/__mocks__/styleMock.js | 6 - apps/greenhouse/babel.config.js | 13 - apps/greenhouse/esbuild.config.js | 206 - apps/greenhouse/jest.config.js | 21 - apps/greenhouse/package.json | 121 - .../public/android-chrome-192x192.png | Bin 3392 -> 0 bytes .../public/android-chrome-512x512.png | Bin 10031 -> 0 bytes apps/greenhouse/public/apple-touch-icon.png | Bin 2821 -> 0 bytes apps/greenhouse/public/favicon.ico | Bin 15406 -> 0 bytes apps/greenhouse/public/favicon.svg | 15 - apps/greenhouse/public/index.html | 47 - apps/greenhouse/secretProps.template.json | 7 - apps/greenhouse/setupTests.js | 10 - apps/greenhouse/src/Shell.js | 62 - apps/greenhouse/src/Shell.test.js | 28 - apps/greenhouse/src/actions.js | 52 - apps/greenhouse/src/assets/ccloud_shape.svg | 8 - .../greenhouse/src/assets/greenhouse_logo.svg | 13 - .../src/assets/juno_default_app.svg | 15 - apps/greenhouse/src/assets/juno_doop.svg | 15 - apps/greenhouse/src/assets/juno_heureka.svg | 15 - apps/greenhouse/src/assets/juno_supernova.svg | 16 - .../greenhouse/src/components/AsyncWorker.jsx | 43 - apps/greenhouse/src/components/Auth.jsx | 176 - apps/greenhouse/src/components/Avatar.jsx | 34 - .../src/components/NotificationsContainer.jsx | 27 - apps/greenhouse/src/components/Plugin.jsx | 102 - .../src/components/PluginContainer.jsx | 70 - .../src/components/StoreProvider.jsx | 45 - .../src/components/layout/ShellLayout.js | 35 - .../src/components/layout/ShellLayout.test.js | 30 - .../src/components/nav/PluginNav.js | 156 - .../src/components/shared/HintLoading.js | 18 - apps/greenhouse/src/hooks/useApi.js | 90 - apps/greenhouse/src/hooks/useCommunication.js | 80 - apps/greenhouse/src/hooks/useUrlState.js | 76 - apps/greenhouse/src/index.js | 31 - apps/greenhouse/src/lib/helpers.js | 15 - apps/greenhouse/src/lib/plugin.js | 242 - apps/greenhouse/src/lib/plugin.test.js | 173 - .../src/lib/store/createAuthDataSlice.js | 66 - .../src/lib/store/createGlobalsSlice.js | 52 - apps/greenhouse/src/lib/store/index.js | 23 - apps/greenhouse/src/styles.scss | 11 - apps/greenhouse/tailwind.config.js | 30 - apps/heureka/LICENSE | 201 - apps/heureka/README.md | 9 - apps/heureka/__mocks__/client.js | 9 - apps/heureka/__mocks__/fileMock.js | 6 - apps/heureka/__mocks__/styleMock.js | 6 - apps/heureka/babel.config.js | 13 - apps/heureka/esbuild.config.js | 206 - apps/heureka/jest.config.js | 21 - apps/heureka/package.json | 85 - apps/heureka/public/favicon.ico | Bin 15086 -> 0 bytes apps/heureka/public/index.html | 47 - apps/heureka/setupTests.js | 10 - apps/heureka/src/App.js | 55 - apps/heureka/src/App.test.js | 21 - apps/heureka/src/actions.js | 157 - apps/heureka/src/components/AsyncWorker.jsx | 16 - apps/heureka/src/components/StoreProvider.jsx | 26 - .../src/components/backup/AppContainer.js | 51 - .../src/components/backup/AppRouter.js | 146 - apps/heureka/src/components/backup/Avatar.js | 34 - .../src/components/backup/Breadcrumb.js | 12 - .../src/components/backup/ChangesLogDetail.js | 143 - .../src/components/backup/ChangesLogList.js | 55 - .../components/backup/ChangesLogListItem.js | 50 - .../src/components/backup/ComponentDetail.js | 170 - .../src/components/backup/Components.js | 95 - .../src/components/backup/ComponentsList.js | 103 - .../components/backup/ComponentsListItem.js | 81 - .../src/components/backup/CustomBadge.js | 21 - .../src/components/backup/CustomPageHeader.js | 22 - .../src/components/backup/EvidenceNew.js | 17 - .../src/components/backup/EvidencesList.js | 47 - .../components/backup/EvidencesListItem.js | 33 - .../src/components/backup/FilterToolbar.js | 29 - .../components/backup/FilterToolbarCore.js | 109 - .../components/backup/FilterToolbarStore.js | 75 - .../src/components/backup/HeaderUser.js | 29 - apps/heureka/src/components/backup/Home.js | 129 - .../src/components/backup/PackagesList.js | 32 - .../src/components/backup/PackagesListItem.js | 19 - .../src/components/backup/Pagination.js | 69 - .../src/components/backup/PatchLogDetail.js | 110 - .../src/components/backup/PatchLogNew.js | 72 - .../src/components/backup/PatchLogsList.js | 49 - .../components/backup/PatchLogsListItem.js | 44 - .../src/components/backup/ServiceDetail.js | 202 - .../heureka/src/components/backup/Services.js | 93 - .../src/components/backup/ServicesList.js | 55 - .../src/components/backup/ServicesListItem.js | 72 - .../src/components/backup/SupportGroups.js | 23 - .../components/backup/SupportGroupsList.js | 42 - .../src/components/backup/UserDetail.js | 116 - apps/heureka/src/components/backup/Users.js | 86 - .../src/components/backup/UsersList.js | 50 - .../src/components/backup/UsersListItem.js | 40 - .../src/components/backup/Vulnerabilities.js | 88 - .../components/backup/VulnerabilitiesList.js | 64 - .../backup/VulnerabilitiesListItem.js | 54 - .../backup/VulnerabilitiesOverview.js | 47 - .../backup/VulnerabilitiyDetails.js | 224 - .../components/backup/VulnerabilityBadge.js | 58 - .../src/components/backup/WelcomeView.js | 31 - .../src/components/filters/FilterPills.jsx | 32 - .../src/components/filters/FilterSelect.jsx | 127 - .../src/components/filters/Filters.jsx | 47 - .../src/components/services/ServicesList.jsx | 52 - .../services/ServicesListController.jsx | 57 - .../components/services/ServicesListItem.js | 40 - .../src/components/services/ServicesTab.jsx | 19 - .../src/components/shared/HintLoading.jsx | 18 - .../src/components/shared/HintNotFound.jsx | 22 - .../src/components/shared/Pagination.jsx | 69 - .../src/components/shared/PaginationV2.jsx | 79 - .../src/components/tabs/TabContext.jsx | 59 - apps/heureka/src/components/tabs/TabPanel.jsx | 22 - .../vulnerabilities/VulnerabilitiesList.jsx | 53 - .../VulnerabilitiesListController.jsx | 85 - .../VulnerabilitiesListItem.jsx | 40 - .../vulnerabilities/VulnerabilitiesTab.jsx | 19 - apps/heureka/src/helpers.js | 201 - apps/heureka/src/helpers.test.js | 102 - apps/heureka/src/hooks/useCommunication.js | 51 - apps/heureka/src/hooks/useQueryClientFn.js | 56 - apps/heureka/src/hooks/useUrlState.js | 46 - apps/heureka/src/img/app_bg_example.svg | 12 - apps/heureka/src/index.js | 17 - .../heureka/src/lib/queries/serviceFilters.js | 32 - apps/heureka/src/lib/queries/services.js | 92 - .../src/lib/queries/vulnerabilityMatches.js | 87 - apps/heureka/src/lib/store.js | 58 - apps/heureka/src/queries.js | 205 - apps/heureka/src/styles.js | 27 - apps/heureka/src/styles.scss | 12 - apps/heureka/tailwind.config.js | 28 - apps/supernova/LICENSE | 201 - apps/supernova/README.md | 134 - apps/supernova/__mocks__/client.js | 9 - apps/supernova/__mocks__/fileMock.js | 6 - apps/supernova/__mocks__/styleMock.js | 6 - apps/supernova/babel.config.js | 13 - apps/supernova/esbuild.config.js | 211 - apps/supernova/jest.config.js | 21 - apps/supernova/package.json | 106 - apps/supernova/public/favicon.ico | Bin 15086 -> 0 bytes apps/supernova/public/index.html | 54 - apps/supernova/public/index_test.html | 60 - apps/supernova/setupTests.js | 10 - apps/supernova/src/App.jsx | 108 - apps/supernova/src/App.test.js | 27 - apps/supernova/src/AppContent.jsx | 125 - apps/supernova/src/api/apiService.js | 122 - apps/supernova/src/api/client.js | 54 - apps/supernova/src/components/AsyncWorker.jsx | 18 - apps/supernova/src/components/Avatar.jsx | 34 - .../src/components/CustomAppShell.jsx | 40 - apps/supernova/src/components/HeaderUser.jsx | 29 - apps/supernova/src/components/WelcomeView.jsx | 38 - .../supernova/src/components/alerts/Alert.jsx | 103 - .../src/components/alerts/AlertDetail.jsx | 151 - .../src/components/alerts/AlertSilences.jsx | 78 - .../src/components/alerts/AlertStatus.jsx | 65 - .../src/components/alerts/AlertsList.jsx | 120 - .../alerts/shared/AlertDescription.jsx | 28 - .../components/alerts/shared/AlertIcon.jsx | 43 - .../components/alerts/shared/AlertLabels.jsx | 63 - .../components/alerts/shared/AlertLinks.jsx | 118 - .../components/alerts/shared/AlertRegion.jsx | 24 - .../alerts/shared/AlertSilencesList.jsx | 85 - .../alerts/shared/AlertTimestamp.jsx | 38 - .../src/components/filters/FilterPills.jsx | 32 - .../src/components/filters/FilterSelect.jsx | 144 - .../src/components/filters/Filters.jsx | 28 - .../components/filters/PredefinedFilters.jsx | 49 - .../src/components/regions/Region.jsx | 72 - .../src/components/regions/RegionSeverity.jsx | 63 - .../src/components/regions/RegionsList.jsx | 46 - .../components/silences/SilenceMatchers.jsx | 57 - .../src/components/silences/SilenceNew.jsx | 278 -- .../silences/SilenceNewAdvanced.jsx | 83 - .../components/silences/SilenceScheduled.jsx | 364 -- .../silences/SilenceScheduledWrapper.jsx | 44 - .../src/components/silences/silenceHelpers.js | 80 - .../silences/silenceHelpers.test.js | 51 - .../silences/silenceScheduledHelpers.js | 95 - .../src/components/status/StatusBar.jsx | 39 - apps/supernova/src/helpers.js | 39 - .../supernova/src/hooks/useAlertmanagerAPI.js | 201 - apps/supernova/src/hooks/useAppStore.js | 147 - apps/supernova/src/hooks/useCommunication.js | 70 - apps/supernova/src/hooks/useUrlState.js | 134 - apps/supernova/src/index.js | 17 - apps/supernova/src/lib/createAlertsSlice.js | 218 - .../src/lib/createAlertsSlice.test.js | 440 -- apps/supernova/src/lib/createAuthDataSlice.js | 71 - apps/supernova/src/lib/createFiltersSlice.js | 255 - .../src/lib/createFiltersSlice.test.js | 192 - apps/supernova/src/lib/createGlobalsSlice.js | 47 - apps/supernova/src/lib/createSilencesSlice.js | 334 -- .../src/lib/createSilencesSlice.test.js | 778 --- .../src/lib/createUserActivitySlice.js | 26 - apps/supernova/src/lib/fakeObjects.js | 110 - apps/supernova/src/lib/utils.js | 155 - apps/supernova/src/styles.scss | 34 - apps/supernova/src/workers/alerts.js | 90 - apps/supernova/src/workers/silences.js | 55 - apps/supernova/tailwind.config.js | 30 - package-lock.json | 857 +--- 256 files changed, 20 insertions(+), 22513 deletions(-) delete mode 100644 apps/greenhouse-management/LICENSE delete mode 100644 apps/greenhouse-management/README.md delete mode 100644 apps/greenhouse-management/__mocks__/client.js delete mode 100644 apps/greenhouse-management/__mocks__/fileMock.js delete mode 100644 apps/greenhouse-management/__mocks__/styleMock.js delete mode 100644 apps/greenhouse-management/babel.config.js delete mode 100644 apps/greenhouse-management/esbuild.config.js delete mode 100644 apps/greenhouse-management/jest.config.js delete mode 100644 apps/greenhouse-management/package.json delete mode 100644 apps/greenhouse-management/public/favicon-16x16.png delete mode 100644 apps/greenhouse-management/public/favicon-32x32.png delete mode 100644 apps/greenhouse-management/public/favicon.ico delete mode 100644 apps/greenhouse-management/public/index.html delete mode 100644 apps/greenhouse-management/secretProps.template.json delete mode 100644 apps/greenhouse-management/setupTests.js delete mode 100644 apps/greenhouse-management/src/App.js delete mode 100644 apps/greenhouse-management/src/App.test.js delete mode 100644 apps/greenhouse-management/src/AppContent.js delete mode 100644 apps/greenhouse-management/src/assets/.gitkeep delete mode 100644 apps/greenhouse-management/src/assets/juno-danger.svg delete mode 100644 apps/greenhouse-management/src/assets/map.svg delete mode 100644 apps/greenhouse-management/src/assets/rocket.gif delete mode 100644 apps/greenhouse-management/src/components/AsyncWorker.jsx delete mode 100644 apps/greenhouse-management/src/components/Auth.jsx delete mode 100644 apps/greenhouse-management/src/components/OrgInfo.jsx delete mode 100644 apps/greenhouse-management/src/components/Plugin.jsx delete mode 100644 apps/greenhouse-management/src/components/PluginContainer.jsx delete mode 100644 apps/greenhouse-management/src/components/SideNav.js delete mode 100644 apps/greenhouse-management/src/components/StoreProvider.js delete mode 100644 apps/greenhouse-management/src/components/UrlState.jsx delete mode 100644 apps/greenhouse-management/src/components/shared/HintLoading.js delete mode 100644 apps/greenhouse-management/src/hooks/.gitkeep delete mode 100644 apps/greenhouse-management/src/hooks/useCommunication.js delete mode 100644 apps/greenhouse-management/src/hooks/useUrlState.js delete mode 100644 apps/greenhouse-management/src/index.js delete mode 100644 apps/greenhouse-management/src/lib/helpers.js delete mode 100644 apps/greenhouse-management/src/lib/store.js delete mode 100644 apps/greenhouse-management/src/styles.scss delete mode 100644 apps/greenhouse-management/tailwind.config.js delete mode 100644 apps/greenhouse/.gitignore delete mode 100644 apps/greenhouse/LICENSE delete mode 100644 apps/greenhouse/README.md delete mode 100644 apps/greenhouse/__mocks__/client.js delete mode 100644 apps/greenhouse/__mocks__/fileMock.js delete mode 100644 apps/greenhouse/__mocks__/styleMock.js delete mode 100644 apps/greenhouse/babel.config.js delete mode 100644 apps/greenhouse/esbuild.config.js delete mode 100644 apps/greenhouse/jest.config.js delete mode 100644 apps/greenhouse/package.json delete mode 100644 apps/greenhouse/public/android-chrome-192x192.png delete mode 100644 apps/greenhouse/public/android-chrome-512x512.png delete mode 100644 apps/greenhouse/public/apple-touch-icon.png delete mode 100644 apps/greenhouse/public/favicon.ico delete mode 100644 apps/greenhouse/public/favicon.svg delete mode 100644 apps/greenhouse/public/index.html delete mode 100644 apps/greenhouse/secretProps.template.json delete mode 100644 apps/greenhouse/setupTests.js delete mode 100644 apps/greenhouse/src/Shell.js delete mode 100644 apps/greenhouse/src/Shell.test.js delete mode 100644 apps/greenhouse/src/actions.js delete mode 100644 apps/greenhouse/src/assets/ccloud_shape.svg delete mode 100644 apps/greenhouse/src/assets/greenhouse_logo.svg delete mode 100644 apps/greenhouse/src/assets/juno_default_app.svg delete mode 100644 apps/greenhouse/src/assets/juno_doop.svg delete mode 100644 apps/greenhouse/src/assets/juno_heureka.svg delete mode 100644 apps/greenhouse/src/assets/juno_supernova.svg delete mode 100644 apps/greenhouse/src/components/AsyncWorker.jsx delete mode 100644 apps/greenhouse/src/components/Auth.jsx delete mode 100644 apps/greenhouse/src/components/Avatar.jsx delete mode 100644 apps/greenhouse/src/components/NotificationsContainer.jsx delete mode 100644 apps/greenhouse/src/components/Plugin.jsx delete mode 100644 apps/greenhouse/src/components/PluginContainer.jsx delete mode 100644 apps/greenhouse/src/components/StoreProvider.jsx delete mode 100644 apps/greenhouse/src/components/layout/ShellLayout.js delete mode 100644 apps/greenhouse/src/components/layout/ShellLayout.test.js delete mode 100644 apps/greenhouse/src/components/nav/PluginNav.js delete mode 100644 apps/greenhouse/src/components/shared/HintLoading.js delete mode 100644 apps/greenhouse/src/hooks/useApi.js delete mode 100644 apps/greenhouse/src/hooks/useCommunication.js delete mode 100644 apps/greenhouse/src/hooks/useUrlState.js delete mode 100644 apps/greenhouse/src/index.js delete mode 100644 apps/greenhouse/src/lib/helpers.js delete mode 100644 apps/greenhouse/src/lib/plugin.js delete mode 100644 apps/greenhouse/src/lib/plugin.test.js delete mode 100644 apps/greenhouse/src/lib/store/createAuthDataSlice.js delete mode 100644 apps/greenhouse/src/lib/store/createGlobalsSlice.js delete mode 100644 apps/greenhouse/src/lib/store/index.js delete mode 100644 apps/greenhouse/src/styles.scss delete mode 100644 apps/greenhouse/tailwind.config.js delete mode 100644 apps/heureka/LICENSE delete mode 100644 apps/heureka/README.md delete mode 100644 apps/heureka/__mocks__/client.js delete mode 100644 apps/heureka/__mocks__/fileMock.js delete mode 100644 apps/heureka/__mocks__/styleMock.js delete mode 100644 apps/heureka/babel.config.js delete mode 100644 apps/heureka/esbuild.config.js delete mode 100644 apps/heureka/jest.config.js delete mode 100644 apps/heureka/package.json delete mode 100644 apps/heureka/public/favicon.ico delete mode 100644 apps/heureka/public/index.html delete mode 100644 apps/heureka/setupTests.js delete mode 100644 apps/heureka/src/App.js delete mode 100644 apps/heureka/src/App.test.js delete mode 100644 apps/heureka/src/actions.js delete mode 100644 apps/heureka/src/components/AsyncWorker.jsx delete mode 100644 apps/heureka/src/components/StoreProvider.jsx delete mode 100644 apps/heureka/src/components/backup/AppContainer.js delete mode 100644 apps/heureka/src/components/backup/AppRouter.js delete mode 100644 apps/heureka/src/components/backup/Avatar.js delete mode 100644 apps/heureka/src/components/backup/Breadcrumb.js delete mode 100644 apps/heureka/src/components/backup/ChangesLogDetail.js delete mode 100644 apps/heureka/src/components/backup/ChangesLogList.js delete mode 100644 apps/heureka/src/components/backup/ChangesLogListItem.js delete mode 100644 apps/heureka/src/components/backup/ComponentDetail.js delete mode 100644 apps/heureka/src/components/backup/Components.js delete mode 100644 apps/heureka/src/components/backup/ComponentsList.js delete mode 100644 apps/heureka/src/components/backup/ComponentsListItem.js delete mode 100644 apps/heureka/src/components/backup/CustomBadge.js delete mode 100644 apps/heureka/src/components/backup/CustomPageHeader.js delete mode 100644 apps/heureka/src/components/backup/EvidenceNew.js delete mode 100644 apps/heureka/src/components/backup/EvidencesList.js delete mode 100644 apps/heureka/src/components/backup/EvidencesListItem.js delete mode 100644 apps/heureka/src/components/backup/FilterToolbar.js delete mode 100644 apps/heureka/src/components/backup/FilterToolbarCore.js delete mode 100644 apps/heureka/src/components/backup/FilterToolbarStore.js delete mode 100644 apps/heureka/src/components/backup/HeaderUser.js delete mode 100644 apps/heureka/src/components/backup/Home.js delete mode 100644 apps/heureka/src/components/backup/PackagesList.js delete mode 100644 apps/heureka/src/components/backup/PackagesListItem.js delete mode 100644 apps/heureka/src/components/backup/Pagination.js delete mode 100644 apps/heureka/src/components/backup/PatchLogDetail.js delete mode 100644 apps/heureka/src/components/backup/PatchLogNew.js delete mode 100644 apps/heureka/src/components/backup/PatchLogsList.js delete mode 100644 apps/heureka/src/components/backup/PatchLogsListItem.js delete mode 100644 apps/heureka/src/components/backup/ServiceDetail.js delete mode 100644 apps/heureka/src/components/backup/Services.js delete mode 100644 apps/heureka/src/components/backup/ServicesList.js delete mode 100644 apps/heureka/src/components/backup/ServicesListItem.js delete mode 100644 apps/heureka/src/components/backup/SupportGroups.js delete mode 100644 apps/heureka/src/components/backup/SupportGroupsList.js delete mode 100644 apps/heureka/src/components/backup/UserDetail.js delete mode 100644 apps/heureka/src/components/backup/Users.js delete mode 100644 apps/heureka/src/components/backup/UsersList.js delete mode 100644 apps/heureka/src/components/backup/UsersListItem.js delete mode 100644 apps/heureka/src/components/backup/Vulnerabilities.js delete mode 100644 apps/heureka/src/components/backup/VulnerabilitiesList.js delete mode 100644 apps/heureka/src/components/backup/VulnerabilitiesListItem.js delete mode 100644 apps/heureka/src/components/backup/VulnerabilitiesOverview.js delete mode 100644 apps/heureka/src/components/backup/VulnerabilitiyDetails.js delete mode 100644 apps/heureka/src/components/backup/VulnerabilityBadge.js delete mode 100644 apps/heureka/src/components/backup/WelcomeView.js delete mode 100644 apps/heureka/src/components/filters/FilterPills.jsx delete mode 100644 apps/heureka/src/components/filters/FilterSelect.jsx delete mode 100644 apps/heureka/src/components/filters/Filters.jsx delete mode 100644 apps/heureka/src/components/services/ServicesList.jsx delete mode 100644 apps/heureka/src/components/services/ServicesListController.jsx delete mode 100644 apps/heureka/src/components/services/ServicesListItem.js delete mode 100644 apps/heureka/src/components/services/ServicesTab.jsx delete mode 100644 apps/heureka/src/components/shared/HintLoading.jsx delete mode 100644 apps/heureka/src/components/shared/HintNotFound.jsx delete mode 100644 apps/heureka/src/components/shared/Pagination.jsx delete mode 100644 apps/heureka/src/components/shared/PaginationV2.jsx delete mode 100644 apps/heureka/src/components/tabs/TabContext.jsx delete mode 100644 apps/heureka/src/components/tabs/TabPanel.jsx delete mode 100644 apps/heureka/src/components/vulnerabilities/VulnerabilitiesList.jsx delete mode 100644 apps/heureka/src/components/vulnerabilities/VulnerabilitiesListController.jsx delete mode 100644 apps/heureka/src/components/vulnerabilities/VulnerabilitiesListItem.jsx delete mode 100644 apps/heureka/src/components/vulnerabilities/VulnerabilitiesTab.jsx delete mode 100644 apps/heureka/src/helpers.js delete mode 100644 apps/heureka/src/helpers.test.js delete mode 100644 apps/heureka/src/hooks/useCommunication.js delete mode 100644 apps/heureka/src/hooks/useQueryClientFn.js delete mode 100644 apps/heureka/src/hooks/useUrlState.js delete mode 100644 apps/heureka/src/img/app_bg_example.svg delete mode 100644 apps/heureka/src/index.js delete mode 100644 apps/heureka/src/lib/queries/serviceFilters.js delete mode 100644 apps/heureka/src/lib/queries/services.js delete mode 100644 apps/heureka/src/lib/queries/vulnerabilityMatches.js delete mode 100644 apps/heureka/src/lib/store.js delete mode 100644 apps/heureka/src/queries.js delete mode 100644 apps/heureka/src/styles.js delete mode 100644 apps/heureka/src/styles.scss delete mode 100644 apps/heureka/tailwind.config.js delete mode 100644 apps/supernova/LICENSE delete mode 100644 apps/supernova/README.md delete mode 100644 apps/supernova/__mocks__/client.js delete mode 100644 apps/supernova/__mocks__/fileMock.js delete mode 100644 apps/supernova/__mocks__/styleMock.js delete mode 100644 apps/supernova/babel.config.js delete mode 100644 apps/supernova/esbuild.config.js delete mode 100644 apps/supernova/jest.config.js delete mode 100644 apps/supernova/package.json delete mode 100644 apps/supernova/public/favicon.ico delete mode 100644 apps/supernova/public/index.html delete mode 100644 apps/supernova/public/index_test.html delete mode 100644 apps/supernova/setupTests.js delete mode 100644 apps/supernova/src/App.jsx delete mode 100644 apps/supernova/src/App.test.js delete mode 100644 apps/supernova/src/AppContent.jsx delete mode 100644 apps/supernova/src/api/apiService.js delete mode 100644 apps/supernova/src/api/client.js delete mode 100644 apps/supernova/src/components/AsyncWorker.jsx delete mode 100644 apps/supernova/src/components/Avatar.jsx delete mode 100644 apps/supernova/src/components/CustomAppShell.jsx delete mode 100644 apps/supernova/src/components/HeaderUser.jsx delete mode 100644 apps/supernova/src/components/WelcomeView.jsx delete mode 100644 apps/supernova/src/components/alerts/Alert.jsx delete mode 100644 apps/supernova/src/components/alerts/AlertDetail.jsx delete mode 100644 apps/supernova/src/components/alerts/AlertSilences.jsx delete mode 100644 apps/supernova/src/components/alerts/AlertStatus.jsx delete mode 100644 apps/supernova/src/components/alerts/AlertsList.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertDescription.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertIcon.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertLabels.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertLinks.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertRegion.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertSilencesList.jsx delete mode 100644 apps/supernova/src/components/alerts/shared/AlertTimestamp.jsx delete mode 100644 apps/supernova/src/components/filters/FilterPills.jsx delete mode 100644 apps/supernova/src/components/filters/FilterSelect.jsx delete mode 100644 apps/supernova/src/components/filters/Filters.jsx delete mode 100644 apps/supernova/src/components/filters/PredefinedFilters.jsx delete mode 100644 apps/supernova/src/components/regions/Region.jsx delete mode 100644 apps/supernova/src/components/regions/RegionSeverity.jsx delete mode 100644 apps/supernova/src/components/regions/RegionsList.jsx delete mode 100644 apps/supernova/src/components/silences/SilenceMatchers.jsx delete mode 100644 apps/supernova/src/components/silences/SilenceNew.jsx delete mode 100644 apps/supernova/src/components/silences/SilenceNewAdvanced.jsx delete mode 100644 apps/supernova/src/components/silences/SilenceScheduled.jsx delete mode 100644 apps/supernova/src/components/silences/SilenceScheduledWrapper.jsx delete mode 100644 apps/supernova/src/components/silences/silenceHelpers.js delete mode 100644 apps/supernova/src/components/silences/silenceHelpers.test.js delete mode 100644 apps/supernova/src/components/silences/silenceScheduledHelpers.js delete mode 100644 apps/supernova/src/components/status/StatusBar.jsx delete mode 100644 apps/supernova/src/helpers.js delete mode 100644 apps/supernova/src/hooks/useAlertmanagerAPI.js delete mode 100644 apps/supernova/src/hooks/useAppStore.js delete mode 100644 apps/supernova/src/hooks/useCommunication.js delete mode 100644 apps/supernova/src/hooks/useUrlState.js delete mode 100644 apps/supernova/src/index.js delete mode 100644 apps/supernova/src/lib/createAlertsSlice.js delete mode 100644 apps/supernova/src/lib/createAlertsSlice.test.js delete mode 100644 apps/supernova/src/lib/createAuthDataSlice.js delete mode 100644 apps/supernova/src/lib/createFiltersSlice.js delete mode 100644 apps/supernova/src/lib/createFiltersSlice.test.js delete mode 100644 apps/supernova/src/lib/createGlobalsSlice.js delete mode 100644 apps/supernova/src/lib/createSilencesSlice.js delete mode 100644 apps/supernova/src/lib/createSilencesSlice.test.js delete mode 100644 apps/supernova/src/lib/createUserActivitySlice.js delete mode 100644 apps/supernova/src/lib/fakeObjects.js delete mode 100644 apps/supernova/src/lib/utils.js delete mode 100644 apps/supernova/src/styles.scss delete mode 100644 apps/supernova/src/workers/alerts.js delete mode 100644 apps/supernova/src/workers/silences.js delete mode 100644 apps/supernova/tailwind.config.js diff --git a/apps/greenhouse-management/LICENSE b/apps/greenhouse-management/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/apps/greenhouse-management/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apps/greenhouse-management/README.md b/apps/greenhouse-management/README.md deleted file mode 100644 index 5adc53806..000000000 --- a/apps/greenhouse-management/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Greenhouse Management App - -This is the shell app for Greenhouse Management Apps. It is the host for all management apps that are part of Greenhouse. diff --git a/apps/greenhouse-management/__mocks__/client.js b/apps/greenhouse-management/__mocks__/client.js deleted file mode 100644 index 84531d3c2..000000000 --- a/apps/greenhouse-management/__mocks__/client.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { JSDOM } from "jsdom" -const dom = new JSDOM() -global.document = dom.window.document -global.window = dom.window diff --git a/apps/greenhouse-management/__mocks__/fileMock.js b/apps/greenhouse-management/__mocks__/fileMock.js deleted file mode 100644 index 27ce65aca..000000000 --- a/apps/greenhouse-management/__mocks__/fileMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = "test-file-stub" diff --git a/apps/greenhouse-management/__mocks__/styleMock.js b/apps/greenhouse-management/__mocks__/styleMock.js deleted file mode 100644 index d74516001..000000000 --- a/apps/greenhouse-management/__mocks__/styleMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = {} diff --git a/apps/greenhouse-management/babel.config.js b/apps/greenhouse-management/babel.config.js deleted file mode 100644 index 0719e2fec..000000000 --- a/apps/greenhouse-management/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - env: { - test: { - presets: ["@babel/preset-env", "@babel/preset-react"], - plugins: [["babel-plugin-transform-import-meta", { module: "ES6" }]], - }, - }, -} diff --git a/apps/greenhouse-management/esbuild.config.js b/apps/greenhouse-management/esbuild.config.js deleted file mode 100644 index 2394388b8..000000000 --- a/apps/greenhouse-management/esbuild.config.js +++ /dev/null @@ -1,206 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const esbuild = require("esbuild") -const fs = require("node:fs/promises") -const pkg = require("./package.json") -const postcss = require("postcss") -const sass = require("sass") -const { transform } = require("@svgr/core") -const url = require("postcss-url") -// this function generates app props based on package.json and propSecrets.json -const appProps = require("../../helpers/appProps") - -if (!/.+\/.+\.js/.test(pkg.module)) - throw new Error( - "module value is incorrect, use DIR/FILE.js like build/index.js" - ) - -const isProduction = process.env.NODE_ENV === "production" -// If the jspm server fails and we cannot use external packages -// in our import map then IGNORE_EXTERNALS (global env variable) -// should be set to true -const IGNORE_EXTERNALS = process.env.IGNORE_EXTERNALS === "true" -// in dev environment we prefix output file with public -let outfile = `${isProduction ? "" : "public/"}${pkg.main || pkg.module}` -// get output from outputfile -let outdir = outfile.slice(0, outfile.lastIndexOf("/")) -const args = process.argv.slice(2) -const watch = args.indexOf("--watch") >= 0 -const serve = args.indexOf("--serve") >= 0 - -// helpers for console log -const green = "\x1b[32m%s\x1b[0m" -const yellow = "\x1b[33m%s\x1b[0m" -const clear = "\033c" - -const build = async () => { - // delete build folder and re-create it as an empty folder - await fs.rm(outdir, { recursive: true, force: true }) - await fs.mkdir(outdir, { recursive: true }) - - // build app - let ctx = await esbuild.context({ - bundle: true, - minify: isProduction, - // target: ["es2020"], - target: ["es2020"], //["chrome64", "firefox67", "safari11.1", "edge79"], - format: "esm", - platform: "browser", - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - loader: { ".js": "jsx" }, - sourcemap: !isProduction, - // here we exclude package from bundle which are defined in peerDependencies - // our importmap generator uses also the peerDependencies to create the importmap - // it means all packages defined in peerDependencies are in browser available via the importmap - external: - isProduction && !IGNORE_EXTERNALS - ? Object.keys(pkg.peerDependencies || {}) - : [], - entryPoints: [pkg.source], - outdir, - // this step is important for performance reason. - // the main file (index.js) contains minimal code needed to - // load the app via dynamic import (splitting: true) - splitting: true, - // we suport only esm! - format: "esm", - plugins: [ - // minimal plugin to log the recompiling process. - { - name: "start/end", - setup(build) { - build.onStart(() => { - console.log(clear) - console.log(yellow, "Compiling...") - }) - build.onEnd(() => console.log(green, "Done!")) - }, - }, - - // this custom plugin rewrites SVG imports to - // dataurls, paths or react components based on the - // search param and size - { - name: "svg-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(svg)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - let loader = "text" - if (args.suffix === "?url") { - // as URL - const maxSize = 10240 // 10Kb - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - } else { - // as react component - // use react component loader (jsx) - loader = "jsx" - contents = await transform(contents, { - plugins: ["@svgr/plugin-jsx"], - }) - } - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin rewrites image imports to - // dataurls or urls based on the size - { - name: "image-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(png|jpg|jpeg|gif)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - const maxSize = 10240 // 10Kb - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin parses the style files - { - name: "parse-styles", - setup(build) { - build.onLoad( - // consider only .scss and .css files - { filter: /.\.(css|scss)$/, namespace: "file" }, - async (args) => { - let content - // handle scss, convert to css - if (args.path.endsWith(".scss")) { - const result = sass.renderSync({ file: args.path }) - content = result.css - } else { - // read file content - content = await fs.readFile(args.path) - } - - // postcss plugins - const plugins = [ - require("tailwindcss"), - require("autoprefixer"), - // rewrite urls inside css - url({ - url: "inline", - // maxSize: 10, // use dataurls if files are smaller than 10k - // fallback: "copy", // if files are bigger use copy method - // assetsPath: "./build/assets", - // useHash: true, - // optimizeSvgEncode: true, - }), - ] - - const { css } = await postcss(plugins).process(content, { - from: args.path, - to: outdir, - }) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - return { contents: css, loader: "text" } - } - ) - }, - }, - ], - }) - - // watch and serve - if (watch || serve) { - if (watch) await ctx.watch() - if (serve) { - // generate app props based on package.json and secretProps.json - await fs.writeFile( - `./${outdir}/appProps.js`, - `export default ${JSON.stringify(appProps())}` - ) - - let { host, port } = await ctx.serve({ - host: "0.0.0.0", - port: parseInt(process.env.APP_PORT || process.env.PORT || 3000), - servedir: "public", - }) - console.log("serve on", `${host}:${port}`) - } - } else { - await ctx.rebuild() - await ctx.dispose() - } -} - -build() diff --git a/apps/greenhouse-management/jest.config.js b/apps/greenhouse-management/jest.config.js deleted file mode 100644 index cdc33f045..000000000 --- a/apps/greenhouse-management/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - transform: { "\\.[jt]sx?$": "babel-jest" }, - testEnvironment: "jsdom", - setupFilesAfterEnv: ["/setupTests.js"], - transformIgnorePatterns: [ - "node_modules/(?!(juno-ui-components|url-state-router|communicator|oauth|url-state-provider|messages-provider|policy-engine)/)", - ], - moduleNameMapper: { - // Jest currently doesn't support resources with query parameters. - // Therefore we add the optional query parameter matcher at the end - // https://github.com/facebook/jest/issues/4181 - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)(\\?.+)?$": - require.resolve("./__mocks__/fileMock"), - "\\.(css|less|scss)$": require.resolve("./__mocks__/styleMock"), - }, -} diff --git a/apps/greenhouse-management/package.json b/apps/greenhouse-management/package.json deleted file mode 100644 index 726518edb..000000000 --- a/apps/greenhouse-management/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "name": "greenhouse-management", - "version": "1.1.13", - "managementPluginConfig": { - "clusters": { - "label": "Clusters", - "name": "greenhouse-cluster-admin", - "version": "1.6.7" - }, - "teams": { - "label": "Teams", - "name": "greenhouse-team-admin", - "version": "1.5.2" - }, - "plugins": { - "label": "Plugins", - "name": "greenhouse-plugin-admin", - "version": "1.0.7" - } - }, - "author": "UI-Team", - "contributors": [ - "Arturo Reuschenbach Puncernau", - "Tillman Haupt" - ], - "repository": "https://github.com/sapcc/juno/tree/main/apps/greenhouse-management", - "license": "MIT", - "source": "src/index.js", - "module": "build/index.js", - "private": true, - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sapcc-k8sclient": "^1.0.2", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "utils": "*", - "zustand": "4.3.7", - "esbuild": "^0.19.5" - }, - "scripts": { - "test": "jest", - "start": "NODE_ENV=development node esbuild.config.js --serve --watch", - "build": "NODE_ENV=production node esbuild.config.js" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", - "zustand": "4.3.7" - }, - "importmapExtras": { - "zustand/middleware": "4.3.7" - }, - "appProps": { - "theme": { - "value": "theme-dark", - "type": "optional", - "description": "Override the default theme. Possible values are theme-light or theme-dark (default)" - }, - "assetsUrl": { - "value": "URL to the assets server", - "type": "required", - "description": "This value is usually set by the Widget Loader. However, if this app is loaded via import or importShim, then this props parameter should be set." - }, - "apiEndpoint": { - "value": "", - "type": "required", - "description": "Endpoint URL of the API" - }, - "embedded": { - "value": "false", - "type": "optional", - "description": "Set to true if app is to be embedded in another existing app or page, like e.g. Elektra. If set to true the app won't render a page header/footer and instead render only the content. The default value is false." - }, - "environment": { - "value": "production", - "type": "optional", - "description": "environment name, e.g. production, qa, development, etc. This property can be used to load different plugins for different environments." - } - }, - "appDependencies": { - "auth": "latest" - }, - "appPreview": true -} \ No newline at end of file diff --git a/apps/greenhouse-management/public/favicon-16x16.png b/apps/greenhouse-management/public/favicon-16x16.png deleted file mode 100644 index 7e9bcaa7f938061a765a6aa15e52b03be8629630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmZ`%+intJ5S|6gvCtw|4s8q#7KsWj6k9{M5CScY*qNSlnUomW~tjB&60>?W7UtM54|C34*G+Z?dSVrr$oW zs6zf##%;=M()L}oc=3^%8QSuzIXYl!_U@RX8F( zukfHd&ka2C{QQD|eNSrS+I+}GHz(ji+0E_>8!MdGu2yPJu0tro@lhK}x~$Y|N+Tu@ z8z72^k#H~^35t(P;b<%pjfq?LMKLCdD;Qvl`D5r+uikE+{(q=-F?C|V&E8V%HI+$i z*r3T|5^A4xMsls+2=#_7914qj(D>}ER8|VLiMK!OHQU{WS2^uByzRas6TRkrz(vF0 zD8LrA%0vfc9oTwbRD-m3#!i Ng(#br*g456;5XKCs`>x` diff --git a/apps/greenhouse-management/public/favicon-32x32.png b/apps/greenhouse-management/public/favicon-32x32.png deleted file mode 100644 index dfe0b801893a9db1511ee4eec9fd96419017d863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1482 zcmbVM-%pcQ7=B8nt^BH_BEOVXz{=0^(Luu+R)z4Rtp&SMmEnw*(n7`3&-!7JDf4P~ z&giyeS>l!~yWPc-?b47e%f^DvkR{75jQbP(7ku8HwmRKz*1YfYJnwVfbH4MP^QF(X zA4X=UYpYtS0MrHp6H&5L(q<-3Jl}q(g2le&v6(SI)zzeUr8Fi2(HUUVRT?QU2TJqS zwSv9`_-Fx*x*BB9H`2HIiShg1N+-jNNIGK1r- z=xoN$-O{#JLU^YeJ#856g%QQ$`-N6L0#_^k{<=_vy)ai`HH@tV*evp}z}tm^DG#p4 zus(-h?%?SI?A{Z19rGvf*Owx1!CI*-7D-WS*!vt_7tZ-H?81=-*a{8kbK=i0q#+}4 zQ9wtf8NF|b#F{x{5@h0}XaOx{vO*(s&#TC(-Ia zg{imzoAXR3lgHO!L}%w<|A-Z%M^PPVOG)A_W^K1B_a2b@ZgQe&@znH0n$_yhKd{`d z2j0I1m}w|9h3ct$Ib=10Gm};pHMY7Y3t2@o*Jut-jKxNFe^gGCbn;-a<3LTt;=43z zt*3}4W>;}{l#CA*m2q8nDcx4Ku9uY(eOTEnTTMqV$Yym%PeOS&6}49=c2ymHxzgBS zWfEmlIUFH5#?IfqCCVGBI8au5-&2OYHli%=&mH%WwjzWaQ^j(~ugN?9Yy9-hYxc&g z^#Y6WVLS1Uj|qpo8T&lBK|g)s{1pnuk@kAI_^02gvW!*oN+Zl==6PiwZa2G?>Qgi& zN3gaL=_FOk#iW@2y8ey)liN*{uZCqmt1$C}Gs?~=8X#qrEYh=kE7S7Sa^zQyW2zX? zF30U_O92bNn`6f0ys;EFlDNV{2>)q&PuSKQ@j3meaE#^#M^Jnz(V z*;M*U(rMh#lg_kmB!HKfQe(S%wyTSKIjvqONQ%PTQSDAtJ31V4&j-y8r~I=HF_+98 l#F%_VZ-(5Eb@z6F6mrWYHr5-&@nHftgy7_?tTTRz@B%?a$khM< diff --git a/apps/greenhouse-management/public/favicon.ico b/apps/greenhouse-management/public/favicon.ico deleted file mode 100644 index 3effd34387f6b3403772f7cb6197f1f6875ced0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22936 zcmeHP3wP8+6rN>U>K4it5D}}mN-4B(N-0`=fGkBzkAfm1)s{ki9z4E}?+4|VdHhNK z1?S6`**nQ5>1MNmWHUL*?A@8ko%?-rGfCzVrE03K78aELZK?nM{pYw+OG>F$s}nP+ z{P;;NA=mv8FGgoOsdMU6)s{Yx;%(FX*&!U&=^OgcMXJ}{N2m|(k}W1gcAo4 z^4v0n>)KY$S>o2#sevWI}{g1nPVZK|}u*Mi4!gUtLxb5@7AEaLYCY-1HtYM5nt9vKF(8*W8 zgfJu0=o8iC2(5J(`6r~s;>pBx=dE&#c#lYnSHo;pnW0(@YzR9d9i4SN2?KkYkcAzQ zo_tnvRoRn>y*?7h(~D;uPhkf1f9{rNUA!I6<-F>*E|z}qV;na&1AH4JHSi*l4nBkb zcHSz>@vZsSq|7lDVBiKWH_MyEuddv6ekBZyj>YjLj9vX)@>ls9B=-GJ@66aQBu^cg zcFci+14nk|jFbiQ-TD>(FMWjY{B?xOn+VUXBCLWhjx~Vv_U{Pw!9A0-_6KxTfjb*x z^C_Ty`#!>lDOtn~1LxWLsx0sJ`n7)SVi8^Lj;AmK@lPUU^dYvzd02k-EigwH3QA?^ zuV8<{--KWx$%C!<=e8TTFdsu(HGer+YxjH}*yg^mhSYbyLTGw^nE^4$QXc$K=NBwE zvi$LVuq?l_ZO!q0n#s)cnreJ<`dq%44!58`%Bn9J`H1-BJ6@C>c#zV2q>Yl_^xklk z>(M{O^BGO-5h?Gt*O`~&*qL5LitV+guKVQv){`+)7Adp(Y=n?DV{v^@CUGZ}|K z$8%SvhiUR~|Cl%ydJ7j;Ew2a05*$*F1I>7ulqz6dLd%vM_4*lYX&x}!3&8^xBH z6T;D-;hImCkXAITEWwFkd-~j$u6)ykJ|_$FO2di>nPntZhrnX>|-!eypB}+N$U??I$<6u*bZvQ;%*bxAB$k(B1_|onp^sqYvmk=zA^aa)z2~6~z9f3J#9f&gJ$7nY zWI@6CHf6D!c5+6QU|7X)SfG~5f=4iHQY<+N!BdtRu zre?~AhAZs_gGd)X1e$VkFymxt|v&6CHiSG@x)oh z`;6c^^xWgAlPuiLEWu{Mz?p_|i1UaK&zb743_h(3jt3M6c7=rJNMTZd-j$gHX`a2s zf+(p!Y&?srIYjH?3d+x-k>{qH-(YZaCUX|gW9i{%H^Db`qJMl`;Uc;Q#Z@nC^S&x& zi`4t`1HJhgrjA+H<~k;g44}q)L1E|Nd@8{aC9$=ieH9iSokPgE9QQJWAqP3c(~&em&@XJHkRnz4z%2$=@#s zuLk7T6O#GEfC22`Pf)t!rzLBcZwJrnt~GiozpTnPyJU@Vsa#1WmYQ)Vv(Ct@EV#S@ ii{iATjpxW*eqNu}p7Q4(A6VT4xfs{gp5dOxv;PO4+ - - - - - - - - - - Template Dev - - - - - -
- - diff --git a/apps/greenhouse-management/secretProps.template.json b/apps/greenhouse-management/secretProps.template.json deleted file mode 100644 index 1b12d4815..000000000 --- a/apps/greenhouse-management/secretProps.template.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "assetsUrl": "https://assets.server.com/", - "endpoint": "https://endpoint/api/v1", - "appDependencies": { - "auth": { - "authIssuerUrl": "https://auth.backend.com/", - "authClientId": "clientId" - } - } -} diff --git a/apps/greenhouse-management/setupTests.js b/apps/greenhouse-management/setupTests.js deleted file mode 100644 index db44c9038..000000000 --- a/apps/greenhouse-management/setupTests.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom" diff --git a/apps/greenhouse-management/src/App.js b/apps/greenhouse-management/src/App.js deleted file mode 100644 index f3172b51c..000000000 --- a/apps/greenhouse-management/src/App.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -import { - AppBody, - AppShellProvider, - MainContainer, - MainContainerInner, - ContentContainer, -} from "juno-ui-components" -import StoreProvider from "./components/StoreProvider" -import UrlState from "./components/UrlState" - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import AppContent from "./AppContent" -import styles from "./styles.scss" -import OrgInfo from "./components/OrgInfo" -import SideNav from "./components/SideNav" -import AsyncWorker from "./components/AsyncWorker" -import { MessagesProvider, Messages } from "messages-provider" -import Auth from "./components/Auth" - -const App = (props = {}) => { - // to be deleted - const queryClient = new QueryClient({ - defaultOptions: { - queries: { - meta: { - endpoint: props.endpoint || props.currentHost || "", - }, - }, - }, - }) - - // support only embeded mode for now. This will probably never be started standalone - // page layout is copied from juno-ui-components/src/components/AppShell/AppShell.component.js - return ( - - - - - - - - - - - - - - - - - - - - ) -} - -const StyledApp = (props) => { - return ( - - - - - - - - - ) -} - -export default StyledApp diff --git a/apps/greenhouse-management/src/App.test.js b/apps/greenhouse-management/src/App.test.js deleted file mode 100644 index 3605e4c6b..000000000 --- a/apps/greenhouse-management/src/App.test.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { render, act } from "@testing-library/react" -// support shadow dom queries -// https://reactjsexample.com/an-extension-of-dom-testing-library-to-provide-hooks-into-the-shadow-dom/ -import { screen } from "shadow-dom-testing-library" -import App from "./App" - -test("renders app", async () => { - await act(() => render()) - - expect(screen.getByShadowTestId("greenhouse-management")).toBeInTheDocument() - -}) diff --git a/apps/greenhouse-management/src/AppContent.js b/apps/greenhouse-management/src/AppContent.js deleted file mode 100644 index 585902d70..000000000 --- a/apps/greenhouse-management/src/AppContent.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useLayoutEffect } from "react" -import PluginContainer from "./components/PluginContainer" -import { useApiEndpoint, useAssetsUrl } from "./components/StoreProvider" -import { useActions as messageActions } from "messages-provider" -import { Container } from "juno-ui-components" - -const AppContent = () => { - const { addMessage } = messageActions() - const apiEndpoint = useApiEndpoint() - const assetsUrl = useAssetsUrl() - - useLayoutEffect(() => { - if (!apiEndpoint) { - addMessage({ - variant: "warning", - text: " required api endpoint not set", - }) - } - - if (!assetsUrl) { - addMessage({ - variant: "warning", - text: "required assets url not set", - }) - } - - // Make these two props required - // if a required prop is missing do not set the assetsUrl and no plugin will be loaded - if (!apiEndpoint || !assetsUrl) return - }, []) - - return ( - - - - ) -} - -export default AppContent diff --git a/apps/greenhouse-management/src/assets/.gitkeep b/apps/greenhouse-management/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/greenhouse-management/src/assets/juno-danger.svg b/apps/greenhouse-management/src/assets/juno-danger.svg deleted file mode 100644 index cb8cfcd53..000000000 --- a/apps/greenhouse-management/src/assets/juno-danger.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/apps/greenhouse-management/src/assets/map.svg b/apps/greenhouse-management/src/assets/map.svg deleted file mode 100644 index 936f0f29b..000000000 --- a/apps/greenhouse-management/src/assets/map.svg +++ /dev/null @@ -1,4421 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EU-DE-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EU-DE-2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EU-NL-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-SA-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-SA-2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-AE-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-AU-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-CN-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-JP-2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AP-JP-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NA-CA-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NA-US-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NA-US-3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NA-US-2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LA-BR-1 - - - - - diff --git a/apps/greenhouse-management/src/assets/rocket.gif b/apps/greenhouse-management/src/assets/rocket.gif deleted file mode 100644 index 6edcdce74f5277aa0020ed19f6ede8a3b2b4c492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4484489 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 z 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�GBWP0l>Iqwd;4^l$7TR*i=Bn%5 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 z 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

fqT%nK+O%88ygl7T_*3MW>t`6~j@^ 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

OVh0BeO8Q`gI$39?4|`R~|@aB^tZ(OFjc- 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

vy2Glhd$xEG*nI|qF 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

(c#{L7M7VQA!KKGsDwHrL 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

cWH;AghPDctR0UpKhe2>n%}v#o9M<(yMX@oY zaJRhWAmg$C`rr>>MXG4`v#pvw`L-%pZdqXR%HnlEStFln1xq80@py&d@^}3v9NVDV zeEeLR&qN)cRTu7WcRm8C{kHEqZ{H9bPQ4vrihj#wVHqyvE)Eeewiza(AXMz21#N>BfdGdv_p;m$(YN{Y z3hTdUJa$(5o!?wZ4~BezU3-{)r@hRW6Au|*`j@lsKmy&MykiA2U@aPXVy8>3Sg!sk z)wSP7bnuuluwpg>tM?xkE8|#wFkqt2u&r}X3~om%FJ7U#!l3>6dyiS}hOuB%M5=d% zC`lrei=r7vPSa5X#xx)2LIvs(sgI#>OTcDyrws#j7?I4NT@W2@NC*4;nG}Zl@-st@ z&Rcs7rjCC*``!FnuA#ZUBKPEks~m8GpaX`xz?cus^>i}8#ODz%&Icr*_v@In;f|&9o5DrQ!hq7YNGbClFmv8&JXmMdRC(K zQ*XXnz$cdoIVHuNrM;0<_bdoUPJ zrH}m?+Eftm@%@WAqV4o9LE*-kp3F&4P+Twf)DPOM2U~O4UxNTFUg12o7tRLwL$dJF zELqXv&U^4`KxG0nwRdO?$tDPB1u>NL#oB=79?mT=L~|n6OHjUn>u-yJO8}}t+1z=Bj04zZfK~>yo;LzmD*cWOE?;F0fV7`#ApeKt%!WA` zq@E4~pK5nt$vDq|0nrB^Stvtrv-T0JL(rx{+l+Pqh?@rn6Un%i7HeCFD#)P}uyL4_RM7g2AlWXQK z+g!OJKD`0Q29e;`A5odi9AO(XgZ5Pcbd2=zXn=|})RokO-_>~Xe)Q*PI2fga&x@2h>KG&2Ke@HBL9RxlyU#E|Xb zcrrC2LG{C5c3WxxM#S~`Rubj#c zfMI%4bw@ckECM`(?qh|HG3S76tBSAyQHg# zg$5=r_fP_&XU5qO7_I@34n8_L&&9J*lT%dqbZnUd8&O$*1Uir>0=(sehkXjCxlp6$ z7|#U!MbHt+suaZXe}4b^S(YR3;vgpabDA!nU1FMWZA=aOu030|V~iR=fj-3-PeF1a z2ftpZg3cZBp1`DcBqJu6*@kpwpJ8?fi7_)d$i3RwMaOrC1S;p5*wpvr1n_LGqi1XFzkX1ZK6}@hzyj#J%6`t*Z#czx5-RV^Mk**!**m(R#t`nzS^>S!l}&id z_&CI*(#4|lIcQu}d9s65wGoP{53_!T`xsr3k^;ti4(bP>*ad?vSnH;Oz}S=H77@E#cseX3;~6z^5=c{>;kx}d64Q6;ZV=NaqA6;WsqP2f-6Yws{}WQ5nN?Vx9-UY2mbuX2P@B|DP0(}Pd6ONGz?81Cbe&-@1%39!Iym!}n>G&)7??Dkk*zWU zcT631jw&6Iv9puv##~<1)khP$AnWPXP&pxuRkpgBtcDq^D*rGh3XnEcEJ{-x@Bih) zF>I1;#WmnGWP*Sc5w`4B{+luYPXxtB*awGezZtvzi`{SVucLldVFxQzG zKEt(DNsxY^!3$@aYdyE^p=z(-AcuwuSTXqt%vUBdJ*gvuJ1f~sRdyzbz|gCG?a*{& zos8|q>#U(wM|FT7F_}7Tn;CJH8g%(8!=(L}adl=p)Ceo>=N<3uxK?w2_b9ta*(4a( zTr#A+JA_M`VbU{=wa;oZM7Td%$-J8nwR*cNm^g`A$ESwlH z)4=Svt*?q1fUKOpb&r!7%EhP3=>&mA!`NIi-M|i1396}=6WsP7RSs~wYQ%+9a?M9T zi=d*|@n$FXw*UXvPyZ4ky#4Z%5Q5-AXL@-#suVn?l&^-yIgzjSZUsKc8o28P`Y)E1 znC<|k67VEcz>k$d0chbp{d8rZM}TI~XmK^C{p1&5tj8$2ghkDi;q+eKQ!H8?Z1_P* z?MxG{tO!J>GC%!67hdUd3UDvWpe-;SO#41kcPQ0Iw5B}AjR-2^qD1iw;_9@|M48XF z>G0;(weK4`?kOh-XDM-6?zYn-U*0D+hE<0jSK6Ez&y8Jr8;p?#N`rd1-p-Go0AB~u zNpT>6E@@+(F&?}-z)i6{xKwU3rP3B0VBqM0PoJI=gYW?Da}ikg6AfmDw0`4P3sX_Lt`p{fx#7 zzZKm+gUQzbDg;?E@=U<20AK9`xi%{?0EV+GbIOy(9b}Xn<#+8{Q0Zxa=dgk(d4t0k z$;XIIHqLbnd|ZyL-Z<5?C@MG?$%e=pQw2MHEH1d+$zd&tJLZ{YkTnCq6M>9z=6*A? zRlrr#6M*V?(72-fkdwUWWJF#31oK!h%jkdcELb-vGx_cV+6z$zVsQ-u-<45pbZo**DRC_$8J8>Ufts*EBb z+I_6ub{E2-sf)wp82J1+&CW8W3)B457(PJVm!-``1Mfe}!fw*`oCJ-@VwVXPJ?Inr z(F+v}R52&t7-#<%%qo9kL|DWfc_IgKS%#eZs`umPF?jC*PJPUMv@e3LU~+SJeD&ky2UdIe z)xqnpLlO9xA)P>8bYBg~0|d0+Jl6|BH|*Qz@_`Lh2Z+?U_JxnmA3UrZ26W9Pp3?z| zykj|tn=0U9nBF>$t7OtX?3U5+W?!7yyz?-Qv|rm z322+3B-YFjWBqTZ-v9?bdJxRMlryMTqp_?`r&6#>Pl2s5Wc+al(7qrIvX$*jFfgi; zh+7r#5y^tcXG4joIBstg`<-uzR6Skoq~0Z;9tJ!e8OjhDEbdHDqlGUn@)>|xP-RG! zqhXW#5UjF3Y(2qfW3{Ta9f4Xl1U455*6RW$sIK%&_E2kp<={OX$TAxOIU321>YSfT;}Rk8rHw=@_Wt=&9lIt~#CT2=Svv_P*2r^y^qgr5xK76isj zNVC5Tj_79IhK?09i(p}nglO*{8Eg+?OaK;HXEfOP=e+2uA%;5yltLz8n1_o+FM?n} zxwFL8GL_Gni$K_bttc+>td?(J^unpk3D|0*suE}HT6rs8?xwxr;^K2*>-0#(qJJIh zNFDU9FX1JJ@zv`X-F%!ugK~*kF%-u!pE+4on1>fG4#x^jGg;aJc7A?e_{j)ltxO#CIkxHx6Og$08*0QU?Fu&b^{K zEC#M1Q;UHcIWi2UV-MPDNibvZ4Fq_6{!5sYqnCq6Enf2P=eD%3X@?BV=d^$+lpFH) zr*pVy)u<0XOB+h-DbM@_Az!Ytzi9?%|m?B z2y8^$`nJl&n)ZKt?gg>Yr!Lc?)6>U5-XN}VC#TnAutH@_Zl*_5b~x{?_DTCVsA2}J z?GC#|HK?982Hgt8`50xvZUp3_^)9$O*-4P92kUuH47C3*Y?!U#Gf4+~jdBY#zD8j% zitj$@)6JyeG)qxzFqgHD&w$dM4HgZW;n{#m1bFB+m?4@^Af8kc64~e&uC~v`R*yL< zXVo`Q=>bK8fbw)O?w}-iQ!L=j6}t#p1r=e@bWwR_67!cmY4y)fyu#i|ooAbRZvB3k z9@a4ijdK?+{8O8051YJprZbtDsd_JO8QgLG#kE}PD*H&wq%hMZEuewB&xb&C)cJ#d z`7#*S$~pmWWnjPas@bEiG~GHhOKN`S@|U@&`$4ZOK*su05QqkF*ra^|cY zsBLE+pZ_uW?e2lgmnP1EaOQJBJ1onF(wT~wdwJP2A@+(laCOT7Q&_3ImV=Z@~ znAlYWQ4k%ex86yir*!n&S9Pm2Y40s}gMIN+dI6|*Q0|psa(XehTdsX9N>Aftv6#Wr z#`q*N$@tRakZ~X`Jg8iCTRD~*o+U~mecG>*pAW^WuMbwImJKe*;T#CY8At(5cbWR^ z(wTlhKpo4{_c)lke%H#8bI-Es{`$<@Mu-Tqx`KvR6N} zN)X*s!OFHR0RwoOPEo;A4!$wbKUe!@h`k(PzQ)gkrOTKVUvJPpgm#wB9&!2Xdk`O- zahzABp3saj=P3Yv{TNtl!;NPkfa-p4E+=MA>oo~mNj;keGYpBKi?44cPe4{Ws2j0U zFk}t%#RRXTYXP;C>kl!`)6+{O%pmnt;GGtEWk9l*3hZ9}$rKkBeLoNCNVL+vX*DO7 zcTuN8Go>)p0$P(=83e!cr@`NSEG9LOYXoBR!I&>DpwO>cQVi!_94D3wIjz$nAzz(~})f6YI{7Xm}saXEthjMrnB6u)j7NS#o zeOak}ey%N(JhKCAn5hG(C*RGV&|6F;wzrV#l2j|cZsYX=J6*HBa~66Omul;B_0?d= zT0VnJrJKfZ$V&D}fE(>wod&=3!%6Ng>eFvC7X|Dyz@Bb^qP36tZEjmoWqAMe?&L!1 zSEp2F+qPYP#%f5dr5Yy%GgN@`%B9~z-!Xu#yUGFZ|GMwz$zzb^T-Xq3o2#M0;q#v| zN@X&1fUrGba6i!ig$Z7hC;JK$Yv!woRy|G&r2 zfYUee9LZC}!8dw|32~yeoawN(2xee3X=6GY;%+}X#0uv&4jN}gJtv<7>ENWmg(txp zYB#*+4&D=H=A&Nw-bXH+33>INAnk7>yS#tQycxXa{U^Y=^Aym*-~UgrdAWvtac_8j zO(Y*66=BIv>{iVY+UM3)Xzv!pm}?tRLCNPG1S~s%b6RsQQ&ueVtRB=4DgXi8H{g=J zBFf5cJ6G!As@jlP=Z37Hl)nG1Bh6x{f>>mV(wi!M1E5Yb)PFzy#-V@DgrU?2EDBTs z0$4j{koN9*F;zA$TJyo~p#AHiH}_fPz6@Sp;hYcQ^u_C{Q%46G%>KqGr>Yp{fk6B6 z*eh?*OWYr@#{~NN?{{qhgR2Wo&np6cVuN0_q<2r!2G1ltp$M102^m^kk zn5}XvL!)Kb2$W0T2AhpM$_djmmUv!UI@qx7wR=h-nS$Sd_Lrz#%@2o%0*uS1TM;{FzQG1XRHbkuM za-ZEG?N5l~e9gHfhw4~0j0ycUpP3`pM*0NM{-M3B9NHSs_nzii3EUYl8}#*$?mohU znYCaUoPWhlr8gfFwTnY85I_-VUDUDNb>F2OhE8zjl*nD5^8E^?po*h6I~#j|Kw0&% zD4cio#=YZoVIrRaYH84VK&q6WZ9Ca4GX;vuQ|I%!P{1@JvK=DauEfThSq~&kC#9YA zGSNv_PS@E$@b<}|CD4NPcB$7E+qE~yU{kownc6^;={bH}rV|M06~SJ!`sKah5J$^Z zng@a)%=_YJf1 z&4yHYTH^(so(l4-XXrN=!1q*-y7CGJTq!VLERqiJX2$u+SU8hwa}lhBz7R~+oE)BK z@dC_7V37@-?V^kgTgUmI`7sRvZj5dQB1JG&1S+vH(Ejb2ouGtXW%+f1M(6+_FH0mi z&jGX-^#|{XO4pBO*E!D`FiHa*b=AHa#U_P@9gr(1kIoSUK$tj-z~G+Ehcum4!7Khd zxEM<<8M06A((3@5$*gKFZP5Mcwje`U9t6O=D`21mx#fHm`ZJ}O9$Xo~g#=C;m^cSN zL0RqO^KL96xv;7!PWr0tBekP`-70QyGJ@-7tlemY@@GMuABj(LW7mJI4pl zfB2)aCgt0Tyf9uFUI@nZ0(T$T5CxpK0=7ZsqC^7(1I+r-KAHkDr`bLjqN7Orr7BB} z*92D{eD@;;)z^L!T&;cVT8^m)W79?zQ;{yJpGyEg3@aXr<2_heWhyBR+J~c#%89We zm@;vmqJyh5FP#$0oc2k-xxvgspgf|f#72AThu29*jJbW=O|S^i-A8UdzY7V>*t#+; zIXA$4(}^rvr`8C+{j_=4cqV|3h&iZ9j?50gkk(uiVT@umIy1G@=0dr)a{Kqc4dFck zM#&3-%P%duWQv+%<-o$#;mo`dxcERWg5n&Gi-n072+E7pzR#kn($C6M`y~);^d4Y! z`9AO(w^{J;MxRzEF&iKPn1;L@XlGsX9D(*hN6!7l(HNRQ(_HXKe$Wa;q%ZS}S=h)6 z;^`NlWE?DCbnqs1V==_F&U9$Mhvg0P3VT>JC+H9lCLX|LEs=SH_DB1fed{2A8;N)3 z6+mpfbuC0{T62Ws5h(Lq80*sr0!q`FTv@wq%CoHW`cY&565D}IVLXfG?rAfxaIe@; zfB~uz*+!`tCn*acO7bA4Fgv>8W?%h;wKn< zS)JWhX(bTuQOr6vusHe?&_21(VF?YW#jVHn2+4y$OW+~GO7EX89PMci1V@)uM=`@CaA2s^XGq*m0U zN0zR?B!_H9MY`J@F*9O8Wl41J(X__#RdWS{w3Il&Ot0@#tsOexlQ9{^7gd>e&hg2? z6FKAtIramU*!a;&K&P^l6*bo7F&%))OrOusai@gqJl{cu9{tmtI zEpUf!FoB_bm}VvkQ1bpO;OP-y_M7epDIv!g`9`l}q5d+|-scf5I`~eyH<#bws9QwQ zzVU@S4&_6o50v@tZ{!g80B_L4Wz%^;I4Db0;S9a?far#~gRf{biD4#OIU@1X7xG|g z;K^fLePC2OcqpezK(Fu7YSKmt2{?}jKf_cCL175)_oc~AHTX4sDoomB0qY>kX zStGERnKfdzn89MnvY0H%lAVScY(u4RQb^OLY11@Klk}u(C8jubVuu|EzQfR-ervtI z;JvPWZ;zCm^R9K>u=jpu!%fe~o_QweWLd_{(TyN~y@~5TL8oBqoj*YN_kXxmnl8K- z9tJ0LphIa;?m@s=qn)@BlXTEb8zA1i8FA{393=guexP!dmewJZHob(#E{HxAFdWpw zFfMa*OdZp^xAGiZxMI(v4#MCN^8Y>mNI^}N`f-A)24l1ObT3AX>L=Nm-Gbv+f1b{q z;qFG`R?{~<7-I&Wrc>L9L-ZUi88FG$tgqU%RKwAxb@xmA4>)qx$$H=XRlU z1lE=z_29kTIul>*z>+lz;xVkdpTB&xA=sJG>BN^rfSf^N%%M<+%eO(;QKG*6!O)5x z^cg-`Edv`)DtN}q0d(GRjiR8e2)P*tUcob9k7~dNV*6pqUw3+ z_2cTlw%p7oU8R2+f=ktm^u|a}AnRajV9wkG&yv30P+K$&Ws`}RdeWeNWg)(;vQvGQ z1%2AMJla@5(aM2GdUw!Oqst@kLiNpEbn2mxd_e-=wi$27zM6t; z^&55Q<4OY#yp?ph(yB4~4;YU@o;Pf(I;=I=v7$FL4=rBB5ZnYYraMfGU@H%w7EQ~Q zSoBIXC16;M?KD9C^_LGVLRc=mLaXNm-28rHn0jQm-vT;;-l+iI%Mw@@1&*xWDU5^y z*Faunp@r+c82SQTq8$02gr+`>qO2Ne>H$w$%E*ioj2a=Gf>YSt9meDGt;4t>nw~Fo zhzy#91o}@_vYeJj2GMmuY`FUWv<|2db6H>hLVD9#l{RS~hN?q`^hQ|&JyN_)#axyb z2#l7GZt+&nJfI!9w0dl&S=)`q8gW?x=ebDZAb0hYE-nBtPnagDH$V1#^9c$vyz=fX zZi!>=bmnGH)TL(&)fZZsK2@n;b!Mkd(_SfO1-L+(7Z}$CY|hmTFZIU}WEaTl$*o0! zfa%egESe25RTkpxtA-C&4DwXPY)c_CJjuPEW~2;IurKpclB`kvYAw_)_Eryg>vu$ z5a3dm^yx#8j>F#35VX;ZPUZyYK>s{g!cwO5&Wif=K6ZP}EitJK`bzrQ5K`%LI(=+u zPJOE`MvwSn!~_C3HNYJGw}+ktr$v`oH36OmU`3xZCouQ~pZ`o`d^;p!_tVBC5n~^U*`S4COkQY<vks%J5-pqhIDQ&m$($c4 z28$`@iI^kw)NzoYF?h|jj;Ub>jSIx|8W`IEPi)n@4R1z6{mZlABsAveLc}n5@CKN3 z6&QmoJ?|h!Cfpe{7anq(h5#6~7HuA;h1pa3d8iao!B2rwFa6%$PPA)Kj`EZTJ=L*{ zPQdCiXN;>|lLoiF(xl5(xf!j(P8re0lm>XbUF)KeVse+k3qc*s;#9WM)FWwkp|!_N z=x_@jUWgb(55U>2+g2V8P@h6l|L9l108cvi5_nCFlmEfO^sm*Ib`P}rp0=td4hJoJ z(^3Gp-jO#6&Ravr4wxNB=+>V3v{GYzPf~e&!FoI6H}vO zV~VdlKCH{ZSV3Bq3kCpg8=yh>!U=W5G1#D{F^Yh8c7ql{4Ip4?)+OQXAIDiaxlft& zl`!|1jMPaU;Xos zIfk22zaMC0QQ`G~`c%!4KyMZ!4^>g5KPI5VDT?tM5Otgp;@>@E8Sa!Z<}`hH=m#+Z z>lqwYUmooE+Mv}l(^`>aGB(*<#?Vt+P-$hV>a^%?4e05~>lr{#4@(2PKYTej-f5wd z*31F<(4B%7_qH*EHdt?tCpwciwD&sv0y~ic<5}FlGoe$BaS-1cGf+12~|?%}22C*3B&+hCg=& zIAo`aG9TXEss8oRlUt7~XCTaVIs_%=CLF0wny8kmC~|`e8f%Wk#xRP2C6J@e;O>o> zZ8ZHE_K~zJjbxiSzBR*`npq{=%%2V6(4P7c@l`8Spwsp1XZ$!0F#g?ks=Y&{DO_)p zH$|t(gy}S9P@3_B=gYSaiYMdIboRl@fg_djq6G+DnodB??PClWQcOmFD~$|9%~@%D zfalO6pYe3irCSt%Az)*^*Kcoy%<9v3GU$R;UG1dBDBQ5Ij`c)ykrBqu0ADj7GM&r# z%w_yC$^eE4L!Jg1Okx5EqMPmNqGdv7TU5PMABq#mlL1jiT35(@({nk z45$vr!0cEr+d4t(@rI!uIaX5{W?Q7K!oGTD_&DV74p;!Alr8|aXTg{ZKpiMkJz$_7 znpdPlt@J0AK$_;;`sR;7S*IoDlO|-W??f3CUeKNH<*WDY%f8fwaOP742pA49EmS^N5-)aztQfzE;>$Vu`xXLNVu6w*PPo%HHZ ziwvz~LFTiV=hrb|>Cl5fL1VbDUpWYB-N~^t5R**JZ(+Wh!BJq7Zf71M(B=^Dmoj+e z<*jiyF18jMbILVUE&%6NfK#CCL9i9Fv>7mfm%aVl(ayEEpI3`Jp*_VK0GuAwtDNMl z3=%&^g1+}aJIQktfb3YI1$8({CnHfXWe}-fzZ{u*G9x}Win$=@SHIK4ebzEnwxhqg z)2oVw+)u~k>RLNZ|Md@@S0IY2xV^@fG1pISISI|ez@l;5n+qBFo>j+#oU#(39j7rr zxC`vUBVdgnw}TplmL28<&IEXYXdBk(&E|&F5CHeV^E#Ux1K)ZSN}t!oKh;1AQp_v< z{!qt2tzls6(hq*H98UoFyCfF2L-wnGv4Ij(Q?R@MS?6~BmytagF`J!eWUPV>fO1or zyF9S-#57}W%N?x9=kuR3)ZP61`XB%rx9{!Sr2$?Q>0Y}BSy%?vcItRhgACQtg7dm& zZ8K?rp3K~J4@g~$Jz3n2>%eynibqR30vZs=@H|6nS{Y+jkia*cu}(`mfM^kJp6PiQ zjIuI^hH{AR^v{1HLm?x%TQP;ASBY3xk8Et3LQAJSv@Xu*9BQOs%mLHelcEGd>@pB? zL9IK|IoUq;*0X1HMbtCP2)N%B1_y&KK@Y{zVW)Ci1~a%nju;m9!R_E_S?-S2A0)9K z+I1sf)|Ejk^E)b#wojP=6Qm#i>=mYms}C4`3-sjIh@$=pc&0Z$G&cL>NIv>H=!|PG z?#9SCIKz@g;C+*NX1C25LQn?5Z82V07rJ_uz!@jbdWL$Qe=!`ava`0j2=as1Bfx>6 zSoJ|7zhl`v#Z5EF7*i5B7AKN!|MK@>jF0+i27nGEXg5Dcck{oaPM{Asod%|36k6L2 zW)Hyqaz9jEVutlftwEpPk}~Wf{puqq0X3KY)EXVToVy#wys+c?8@w9~@q8uM?%~T5 zK<4Z*@I4(z$J8fqtXH2w-xhC4yf@wWxdEK9846n1=Go{J!2;|40{vo021|8hAOnmF zF32;V`-dYY2!Pk+?Q_;s86J~C?dpS4y1*WnONK8z1%=z}^*%5bU(eb!_;0Vj7z7FQ z+s2m@nHraVJ2)*};47ZoZ9N10+RwpgRTh`f4zRj+UjYXev(JCWM5{G0C`#hhcP%SC zTX<%`Vp7jdgT~rK<9zXQDL9jr;RdLOI?y1%5DyFNhD`>gW{NI6mZ7&;^R-^qK4fIf z16`ND58k#_>CIgymjBC-AC>`d|3c%{-$F7T+|~bW$&giqid6L@Bmw9!Ot2K``w6!x zpo_iAzyjCoee|Rtar%j}~?i`1Qa0^IV+n=;x9vBt>hz4Y{czi&0PWsna1tH0tTox?G` z!+{JG+M^64pvA{T4Lerl>Q^(;Wy~o+#~F^Wh-#a1Z9xpgsvgkxV0j5LFEc4LwQGCwM40b`7lS;r4rKza*31vJuTf<)I3erInq zzIA_iNeq)uka8@td6!L}BUPb{43AW>PLP%E+0?$s5A^5WTR>ePU?kJxn@exceej)P zh^fq*k31dZs|P`V#pRRV3`25eAdmhE8waCRd}y=luk^7b?$ajWU%a*fK}#IuPLYld zbOKCES5U4rt*WTpbMrUcc|nII5rTo=$L;Yrl zhlRyRpL`1?-RMw1Kyv=oWp2BWbE=OQL2^?D?s%(cSbesLy8^hDz>k&922#(zILJyF zWdJZl1`@y$2f$dxq8kRkyw8U_@@d%uck>0K2Y{NJ4<5RD$8qii@N(Bl;5C^&$E9*O z5C`g5Ph@I(l})WwZPD1k(8&qUv5Eeredy|!4k3Aw$9Wd0p_3>R`D%wKn zXs5w3&XG5?t9=wXd6f0uq<-BQie);g2Led6{O#$V@HjvYD7ng9$$+XW_pA1)f-(lm zU{yKfZnOYzdc7}>>vwR_+_ni0xF&+lfqHY)|0hc?%PzCe{QlhmHop5voA>R9NaR3c z{8Vzl$)wXX^C*a>9%qmOwkH2<(b`QNociYT)u9?=L&1Z5O}a3-`|<6Zk1p|00T&Bc zr^;LD@Mp&cmjIS|KvtuQ5$W)N@T>^~Z`K`-QBeAs4mAJVQX>Nvunh2im6rq-HctCi z=p2HoK6Ew4U=i@-9qXcBefX#-CLP8BzEt>Pb4mwzI~N2Jt!~`eE-2$zR%ZKPy%*0} z%QNfZW6Fna00C+0f%Lk%p&hXTwp8=QGZ677*Xhl&&|Yw$b9My0ZW$~Bv@}->o(|e6 z0juf?1_!>8*l2S#N8j`J)yS|{J0uO5a{eB0^`qSBDOT+`OLo1Bz7T`nmwrWe1L=GP z;2;9rcBUey&F#!q!2}uw-aPPO3}i>5*~Xx`^cXEr_Q8+AqpQJy>koqYSgO@0cFLf0 z7CVw$wnb-bu?+Ye6c0||BBQ#KW)Qd@(f)4;+_v(y^s|%qUmt(6c#_A?bfT*Svt1{z zK0ab^GAyqBNSX}Tk=kTk4DFZH)3Px>V7ZyndF4@&;Sp9*s%;|u`b170hh&liYoY3Y z8W|@|7hhV*rqck=c_(hoSOjKPPb^~{*yb|6%x+6aqWbU67=38QidT3#53Rm{0=b!U z65MfAy(xnR)E3oDLpacv^jUdznA$mYAPnRSq6If5+4}r0uumS!*P+M>1$B%czpNlh5qh<{*I6AoT|#WKDj~p!6Q*9>w*sgI>~;TgAN@{ewS#6|x%SzXImb zP7ctR-UFM}VMEe31@qn}n6PZC=hU%>vFTY&H__LHAN)Cx$DIcW+NL0#L|?4Wjvh;- zrO)hv)k*JRUWi6*dR?*fdD0((MF@Sp`iRFwsY5t#McYJ z;yY|XP(ORnryC*;q&}iOp+3H_8mGgU?*N$TZb61hQ`kg&D0E9Q-)RA-ShDLgq|wY; zwVaE8i4D!RDmP)X9UNY_nhHZd_u)^Xr1`fa~H7+W6>MYopG?@WFo!eHl zV@%q*w7`vDJZ--6dnim;Kz)5o-7wJL%s}{TRVoV=^G@JF>utqIBR?K;iN`CQcJ_jLa+j7k9a)91lxxCd5$sn7h?8b9qGenu2I1cMq_pcz=DGX(CGpb?O=U zRshHXahp+kdX_;S5U>@;LC3{D@X+^OVwH)SsRb8Yy%X}wA31tKoVNFF8AKh{tJAF2 zEB@dIuN-6f1$HCynXPG`KO${#UKH)%d-b-+7;bQcNy!*4w3V;~a4qGQ2q>w3jQ;?Z zAAvqnV*lkoq9d@zWtP(~47E?b_e177&o!ze0BR(t{*zy)xmf<~nOi*=)LcCel*R}K z7@vZXRY>)j!bB);Al}t#c`nY(IMAu!Iai;H*2u@dX1R)+0y8u1$7aCxa=-xoDPsz@ z@<#6na+^&wn#ygnP><>>*3)RnN{i=s3VRsdU;UmT3oIrSjzEldOY<=Aaw-p+YN6g8*f=c-JrQI{S!p zfU|T9!dXNTgY9im)c@pH7aU~;jg2?B4KVr`%7V;NNRBa!fxhs<$VE|EUw~*3UEE}# zn*gRHJxhB!l(-w|u{sc7>Ecv}VR`R~gT*kgqP~y?#gVD1(>3fMniwvE&M}^Pi;1Q! zc>TUs`)DmU$;4%3{P$1(=n1j71(vCvGn%gc_ZLliAOZx?{|4c z3Ib^}dE-3CeHmj+Fu=TIU=Rh7WwJ7;=Mh3i(@{wl=hJ?(>AbZj2AwPq>C3P{&GFmP zv71OAnf$>jK)?v6Ff)OHCBsBO^h(z3q^V$!)@7_zrqH76B1~Q$7R}4&% z?Rc=$41|F7dU^nuXLM@^onf*tvHGik@N^pgD_Om3&49htZB86Uk`_{nq4Os3&L zuzh+-R|TF1$gr)AGiCgjz!*uu2$$5J)J4Z~s$m(Of!r$)B*F|~<%Js{I`lM+AW6@0hNgQKl!R?kUs(>ewYtpn$~A@~_nio0_^WUALo&<+AKYPAS$>DO zEYNN5)jResLyv)WG)!8J=N|Eq3r=@%9f$t;PTFI4`%Lk_fA@z|w8e}gm`YVhZhi&C z0!Eizyo=tM4l^>W0n<1S#rL5Z(xLNXPFmp`Q@PMC{s4^Ycz`&)Rs9>Y;{a5>A83Gc zYr731zivZ6%C$i6%@ss>tO|>)7wcM z4O0-?6Uy6f|Crgt2oZd6x5ynPRU#-UBO099Etv9|h)_S&(`fI45`7fRpl#wnNoN8T z=_0|$IEnh^c-(}(?eC+fpRQ_50xRmy0iV*fk|*F0KsPcX)q5W4($n)$d8A#xLN_k! z&FLF>`CZH?-i#vA~-j)NtQNAiRl)Pawm$ftv{Ku+95tNLTIo$awfX5vTp zFv5X|8;FegL*<;!y|mmXC1aQ=pR|<|+5D{$Uq#1yt_`*2!Lg zlK^WX4)Yk+xO7^#jAe8XUX*^u0$tax52jN`n{5IkTphUdJXpcI&)9tCq3~eLXuf4+ z=-_c9I3bU-IUwuLSg5&jH%22?xRg@)&eMUi|w2L;l#ol*+T@S%CUjH3fGRPg& z2?AJ>u)l?>+UzrOL*EM%IFTd0whAuTD8f+N~NmtLD13}Qy*42FTT#*B@E zC61j4nE2~U_dpeJm;d(AA9a*5dDLIKeV;#Szl0eCRKD}-83=|qK*zWpUvSeKp$`F; zm2-dk@D&JG#-d{hSTbXy;2U0yy!IOUc%lIAJt%A|1Oo69VduW0G2R$#;RD)%bW8FO zn0GNJW-Mf}3EX(d^ywR(ye9%NB6yc9KLOT%unp#-py;DNfBqP~%k6vJ_`@16qP4U! zp#kb)H>Yx>p}S~3hR_ht&w7x=(hjU&dlNh+oNF@Zr$N9jD83eKYsgoJYwnG|Y|>N! z>jc2)5$rqLRZ(spk<~-H1sWs54mTdc;$Nx$VyN(8?@`+Qr>>V-r)qTgfXrYCuk1(Y-&sWyD#eKL7PF*Q3}?T zTF}e;V}Ggog=A=g#nC;x9?RLdwI&er_WTdQ4r81nDIof6pi_MdHj?*%co47wy70IT z2hIkBpS`;Tf=4_InnCX~LHfg@Aq(u+%q>TCNF%(1o1v)!ct$`U`4m(Z1wcpa@m*dP zekxOXiwXuaxj1J%|2tm(?ql!XOK}(2`(!|e0_X=Fy~m-DxEd$!%(_)8BT?M zggXV?M1XUU_b_0O5gM*jHE~8dXDsj0b1OR5IpIobmUcOl08qd30r|IAUyu%PZk+RK zlj>QA^UxKc#FPLEecLK$ToaVBz&T5{5Hq8K8;V zod?An^$buyLMHtuIzGO44Jz+<=igvi92x;Du`ToMYUQ}zh~C2dCr`FAp0#HVvTB$C z6~T#s4bA}Ui)a-A&S(bM|LJd4)ey(jx$$E#0jr-5{^+l6 zk3frw$y)0T@~^A_{}y!m)RcVvI;~N~8JR|_xks5Wsrp8dUUamX5d}o(Xou>`ow=-n zd6Rj)_v&moWI;BV9r4joEi`33c%uGjby^QcpkA4j_uA&|kzohe6E>i#h0JW2M zeIHP%u7)x!JZuZ{bS(Y#{%tMH*1z5HU60d-3if+37y+M)FM>1T`lLhs<74VR8t>4- z0Chl{vP@dEna*Ns+VvNiRHs0+@QsJS7}t)GF>s#iTTp+cqmQd{`M4IaBo1U=l$1W2%-zQV<6gGJ_KuXOhx>mED9}dY$r+DQI_Z0~OIIn&>QPIFaOFK@`SmTN$|ev63)tGNZVpRI1# zytgn-4&%b@>QOD|3bq=|hBy{$^=~@UH7@q+_69zD#uY8~E7JB}E@zTfV}o{QZZJC3 zk1NeN%TRO`a|qxBi)mntGr$|<4&pRG9?xF~QV;5*YuM&=;cVBYS#EeO4PPja)>#GcCCU56^&Vj8G4On1)&c0`@@{ zUjYjOm8^kr-`Xavj7H7@xD;^Hj7;_EA@$Qj{aGJ>S3S2$ziE^!g==?xb}yQ7pzedv zoyk^@(Wm(YT<$oCc~RJK_NNeo^IQt3G8WzZCsGbKO{9S5`Zt5q+Bun}4qxAMf~|;_ zj0{$i@OOU;?n^i5cdyU@rY9W;(1mfdk{t|~7Wyf80W8m2?PSJ>0PC3tX4}pae=m@4d`x-M@Z$wLEtd+H!Ou_#~(zVF0`nfJP>1Cod5&d&654JI`(52E!9pt=s)46sFr zERSMH+d*dw7)Op=7hvh!h*tkc3#~6P$`7ImG=C%soDKo9KvtTsjpyVxTJveUF3?Cm zn2)8euniIj*L8+R7i=u`L)nuCXQ9aj3;vXOiZ4M65S&Z!%qJ=6uyQ}M1uDDY`{clN(=$C)110cC6Y5KtZG|a(< zYSD`8DI0{~6e}P>AOtPU)Bp-D{V;yX`Is~YqeTj*`PTb%S}p$VbzWZS2G$MYwgrFt z!!s$grJxsLIO%;FjP3$-{z(J8K<570&J=(jd=CqFN4E4qOGu!Cg%1s%oJ~)g8T~%e1 zjBQ}D)FE1ZGX?rlcP^N_(6+1XBbNwIrYllfQW?A-+$MeP2XT*%jV*2IOj^E+MIb$| zTCQAfoagTjoB3n(zzGcp5Sgq(;?z5F041_0d-hUUui>Q zWnIV8$tJY?IKc)8DE{)N4Kod*`xJ}h9#5-h3AolkrG284X&b>#ODPk_lRethJb8K3 zf_D^SuO1}Wr*r=4#a~G)MOQohrV^cujOeUg8IH^n3El_N3BTVm&w~SX`o?G(k#?+z znS<~elpf*c!aXQmsbCABnDw_FgWwvg+P_86tLWCu*>P|>~M6LRrK;GrOzEkxIae}Cc09re{9^kssqwS79Cd0;ylR(nO~?Igk89S<#7 zS}hPXh7NIP>Ki}YP7UAtZEheKkT)>(&QC;b?;ZZ+*W<-~$s=g@e)ux?4saKz zgTQnS7eifan+IR#g:CV+oOa77&+C&I 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 YZcNsTafWU0*WF_^rcZiZq=h{Ad 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

    r!{44qxg>N`D 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ηQjjdAwusl{=Y|+TULhi_n1dz5eLR3C_X5Vcl?` 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 }?N<}(+j~BE4 zB|;>IWrwfC1gHU|U8@rK$rgoPte=RhEM<9|mJ)u9ScQQML3<^M5~ZkM`GW=sag(!x~NM z5ex=6G9w(l@}+fRZ<2LZFmp}CmNc11+9!JX;1JM~K&*}z(Q4eS%429i)D$xFi z3~E4nQhfqs(R373fyo|4X9C`~mBiV+Su@YUb-!e^3Ft~*1u(e+#=*9R!5C*i#{$^j zzV{0FET}NjktYHQy1?kKUIz71bfl#8qW#J52j9Mj{sqpxcyvO^p?Rd632ujtCsgsF z!inh&45W@R-GN+?M}xmdM6L6Ue{rCP=Hb?>LGHsDJG$B)2Ea6EzRL#ApjxLx_r_z3 zA$WvI8l;vR*50!7<#W)0zA0-jZ3F1txPGVF1k@z$zkT{A<`Y#0^J)ehLz`K#0vhJ) z?#wZ|n69v+Ni-GdEEC!4uu!A9BVbI#1jJw+7$Y9w8GwZ;FkV@&ec36LMrW|k?;rg5 zmh!kaesmm-mg6qq748o65Iph-$c{a`CQ4p(2o!&NZ(lfV`HfgSjKc|TOQ4kvra_>z z)k$oIOx35Zdiw>m-~M5Uft8B^6weLQ9ga)N62WK)f>fdhT=@e!7F7%vraOP|(rL!1 zARQuoMqMmjF%W0(TA0_q)Uf`&+guY{&{KJM&A!Zw47vCNXnfIOIN4mL#Pmpk<6-{&d4N_OsWEi!wN_SC1US zAR0qaxdo0go5#wa69M{@u>+j)tOd_G|4VS~^W-KU8PI+^Z);7J46mg_XN8Y`@Z0E3 z)@Efm?z5zb>j7{7=@|GD4_QW|14sTu=zQhJ(x?4})+_Al1E-}8&bv96gE@g14}cfQ z2x?3KTRwXRJWKoSWM611N~245(Xivj7uX-K=Y?k#;RrB4Xq03qO`iop1ynt6RmR!eKEr20zlI9$FN3F0+3zverX&Qi;S4aQZF)mtSIAqR% z_O^#Gn!l7D2DbDoIii7UFECC@lNE+}*_ZE01NDJMcoU$)ok8bUtK){k)#;$_U478T zc|gQLhbXNOtQ`ZZsr`}6R{_le^f>Wq8}|}Ituz%3==|~??Tg}6LE;TI$J=EL+@S88Nh(@(wiCNP+gtk5I2a)Uyw9{)aqNnv4lI#>^gVx^c@L)5;9cgLNLsBXnk4 zREI7rN4@^H`A?UJ@3+z)jkJC^Ur~fIWl!GtPNNB%bvrVV7TMhf16Vw?A5W8}@Y<@Q zEnS2sCrK9%WuiYPEMR(&W^O%qlLrDK>N&K>j*p+5rv;Sd19Ipdzw(?d8oO?onR*ny zqpAc4F=uFffGOH3DtA@cf9-o)-zcjxmIE>D$FyCNj>x_MPsV7>Mu;=ska@G#Vj_td%oEvM2M9`ojaIgn7FU_|ID(SLgIDbKv5I^gu^(fLcRlF=C?pPmnVM#};OXoA(++ z2kOGKfBVWLE(@p&%UZM#hJMLFpyL`3quqw4#V-?F#U?uhaS&?a{-U1>)UkT>a>TV* zW`T!Sjr-7Z+$|70$#KBd==k0lUno-`8hswr<-h1!9{={UP$Si2n@cJ;*>q!^^d>D^ z2C}2ei`H!q0jr>G^IfNy@gZ?npX@3LTnVFY){h250!*Kx{$Zv)gJXJ1xd1vNo+TOx zWXM*EF8u5tM4rF*^nRmtkpTke+j+rga(w!SXH?9y7Zg{M3=T|yPSRLqhK`^q?LvRF zTo{HxfrM#^B>cr%2u`GO44L-Ran&M25wI>9+BF>=2@D_pubeIXG{*_}5O zqz37$r`lK`*6n?EB}Z-9uk8BI(b?~!DsO*%HJZUj9k}YMJ;gefT~E^kQw{NbA^S;t zu9ZD#(aF{6bKo1Qa8+0BF`NbC0o)q>;jR599Crg0vzL*t{f79S2egLF#+i$cLD9Z1 z6f$Z0I-5WwUF{Lu#q8=bf#rj=-|@(R5=Ki!hMc{N28hV*;;Y(37Fxg?RH1z@)`~Y> z4ve&aedZP}4a85B?TQBe&Ye7u%9U{GRxUw)zYD-hQPsx-WHML$2_kA67wsdG7g~ zLONs*6q5}mh zU~1RUoa@0>-@E?=9qtMee0fKGowA|54~kzbogbh^c)JYR@xoJJo7y7=O4~T?$3#>X zouKCcrjJc4-B3=B)`7=lr-KJqf&t7Qpt=Z*&sxTSpo){@rp-JC!-*FpYQJj9J#!uA zYe!}(|FIhbVln}i)Rha*br(*2_Ea)jZR*@}r^2;&2FVSMl^utOIS%p z-~J)^QA~0ckS3zdK6VTm!=ri;?BdN%6JP)Orahx08uaW@EYTK6F>?K0GrtLP>N#^R0R_WmMIs2|(}#=hvYcY}w5 z(n0H>GTs?@L;LO=(ZN5y+ji{%$njVnA;7b8F2vM){U)d5&N8KDo_mW5nNiOYQ*&}m zw+xl6Qki$1;mV8NI<_WSzkcEFI4GMS58lHP!F*GWgvRg&YD9o{^_8?V9-hy#h`w1~ z>A7(EHi#q;5G}&a6QK1@ZK%MXM(f=3VAV1q{p`<05gvT@Rw&$;irUl*x1*7+iU(Bu z0vPyFte|00M|GMz+@K!)Msr!xytf`l2jJ~y6eY}ayN2iVF92i3NoLtB%&hKN444at z$}|A>V>7+A_m4}n+EuSYZIG{>SkD2KQhN*yp1_Wz1ZO7S>KLOi;M!fe5G-}v1W&}O zT?k5C19JhD(P7pEHi1kLA>Hnx#3~Ci4a(CJ!8beUI_($sc!)l>SPv>eKr3$tn3;D? zLAA4k!Ma4gPGUrYf7$dghR(p9{KEcQ{==5x55q9cT9C;ty!BY>#NXG0mIV) z2aJHXZ#(oZz2LaoA*0|Mek?ga5=R7D=s~4f23YmdyY#eKbb}xG^;c*fJJz^p-8zGy z)QhZLhDzuZAAM4-_9-r9J)SSVw9tz5qi+SC#*NgK4cd{>;biYm;4Yg$ldc?K!I}rf zf&iTBS@t&j|9kRe&xYtn>vpvH}8|Q6klZylQFkC;^N6(y()0 z$e^ChWS|1w2Vg^7E=)RVM1Ze?`atv`{iTu}8e?sU71oYex;*DteyyeY)UllE_kN8g zleA4{(6OW0+u-~&Na%6t6<)dFsp`jQm5sJ;aRfVe-z0dXGngMEK%EYnfDs39UjQ#t zPGQ2RjFvHQwO*EVbX2$JD@}yDH&5QnwWmilfAOlhv3#0A@WqcHPxMz^e^lCU-Z!}n zO|7;Al`ir3_Sjmrc+*;^!j7lsH$X`Td?K}UtX@FzEd;hj4N~O6M3ZLYM z8HL8;+7wq{th!wPc{4*U{1g~HbnZ1Upw$hGC#as<-Q1tw-hj%(@wmn1&fKUf@f34i zQ{WsDu?`XE>tu9F<;|Hpnk~7LgE0%ZKv~P)hO%dGI1ca{CfuO(Rrw}tq={N%$kjgc zGb~M=2&OPogKM^*{S6HYGzRIIJs}_`ZlEpKMyoIsfqs^5fMIpz2{09A&=Np1C&AX{ zhV=|<6X?e8pYj&lp!6;%A?GiFF5M!XDm0^mc1O8l#}yw>&v62U_;l0635eVl=x-^UYf!PdLqZEuFg$n#yC%7-T>U z1E;IqAT985T3?`&$KDpD2O=`!!mslo(|1g2It{1}f8&ur7Xo=smOY4Z9vWbI6f`)C z44$e`)v*vA-r4pE-%_08t8LpeC(ygSQ_U+_CldBMQ%go#s%oataBc@<2$p+-0gGKc zL#ySzU$fX1OQ-OSWL6OEe-jUCr^6V$fIBGnZ%_U<(x>>)mG9kz-UAkC_teA*2&49L zh)Es9Qb#8T(6)?9JM{5T*Zmk_<8@#Oj;`vK6Yt)Qwt7@@JjTcjG=l7yeE;#VT`t*c zn{I_L@L0oKBMOsZd+FdM(gC&B!ZuR zpsEI9^3y-@oWNkw*?Z}~ZIwH|&?`&9n2~S44rT}I!-w~S9eNiH_LeMy37De0I?)Y0 zG~gHxwguvaqw28*H9k8T9H7~NC=dGR^4%U;eAGLfyIK3TJ>Nz&IB@_(g0 zBVV$<@c?b+;BNsJs2HAR&EYkGT7&@+b5gne@!bUJrITZ3P@KE8`SK4qHsLQy>s%U?Q0<>M zy!H8;z$z}@44w+2ap|TL0adIZ0E3jfZ@uSUX&~%1COVhc1s#55G__dLS`~ zym@y4{3xnA2G?>DnM%AnpH>FOA7B}r)b;S(0CyxFc5D9yx_;B%#h{>jE<6+l z?w`n7a2N$>C>ufR0Rc^Pz}dT*K|KY<+)o0iKV|$MxBLnUtq820yBAzl%kqL~Gn2hn%9S?Mg$>1Uwvk$T|4V)!j|pJI~IdIRIh zfhnspTzLH@QQ9F+`fW=CoYpkwj54(C@Ml`uu_oF^U`78aQHS?A!P-;7RZP+c-a%`G zr|zgzNx#A9BFZRFIlRhaGUvX9w_mZn{TOFXwI<0>HFvJO3e7@eRIoS$)?krzUvSuz zG(tqU-T2OdKxyj&Qk9ju4bA9^@njmzs(|%Vp&ZIp3#VCDk0OLOWoZZKFh&XB7^g1h zNk%|l|L$S>*w9?q6XXD;s33qD%;*UR0d&9izq}c5zXr97L;m#(6RbP)17K?V&=`=- zQS;!oCg-~Hk!tz~2-`3n`fVv=zaM=gK0Y$|U-vu^uu>;F(}?Dp0l8khiJ1TtWG*j@ z23{{3A93Rr$GzAKFLnL(k1wK?()`{XZhY9##LlcU+V}YJ9)-b;;N~)~a0rI+`i1*g zYa2(LQy?b$dMSABK?Bb~s^eY+ISeEwv4g9M5Z-54dpB{JXR=RJyIHT7so?)}*YmVU zEQrOUvy7QNAF~54NQ?@y>( zC6A70MtG`PybB$e19gE6jDF@#l`kWf_tierkO}29=ukkLAFUmPVANN+ z0}X*nLM~|GE)pt=!7qGAMhip;Hx@#=go6dgXN@q5CqZQ(U@c#HuX60rjWQ(s&~Klz z#saJZj-a<50OQsH_SKGv4u0;1HoHCwEv1sx3P^NX2H&cYR>&t$)jDZk>nUvpoEw|BefxU9fUL@GU`{cjr0y15_w z#xs^Hzh|J04<3(c$!CBZ1KHsMZDp<`imUl_G5zc)aA>G2wzqbajaF`iWu395!afRx zp%v$6t(!2YJM+-7TXgWdN93)ExaD31c{K6lqS=e~P5pJ^a>K}U@ zAQ^a!M#kRRKNW!kK{MKiLRKoKS1#RGFMZ(qq7{1&)`oI}&L^c~x4Jq0!VgDgme6d< zkUno)7{gV-jqz06uYe_B^Bd7k>+wv$a51+D#=Az)%wNC!J@EXjsuB+Th>f$4xAf8bP3$>> z9e-(s<(+02^wELL8KBiMUX=Q9$jEGF%`jQzdymNgICqx9q+!CayhO)dyK56t5HePj zt|Fm`y)5o0`~;xP_w8Elgm#Vq`~=upgC8&4y9RDCl@^$IvFu@P5nMAq#&6) z;$T!e7(;qS9UUsrvILgIV*M?op*^W8aa1u63$S|RXRBQrm;)T}qGvQ>hvg-CeR)T zP&@nhDd;?>j%yF=c>~v0u*yj=69|ZMXaQ$w;!J_3wcCfi?jYY_d$%Yn5H=dUqCh$< zBJ#U<3DA`K;ms||N@%t+7%sgGW-$j^d?3xCV9bV&>51i@fM?VEX`{22g_;}(};3lE+4?(e{3%x+w^ zTA6|NcSr&QYDeh_cOJpo@31}_z2=F9)bZ$nPo4>^KgeCY_KpQ-55#CI3QLLLe8t9-ka6C ztWoc>B&+w{C96x8C5sXg2oNBF1PG)Mk{bdfB#?waZthy97y|~|fD2&fm)zXk-1b}F z{l0(Td!GGnjU3;**7KJAo^y72%RZyg%o*^UYG!-3A&g5%SzcX$FgP`;9|?zAc;mUs zE6;HXM%E1wNf)a}*EvE_AJo*-JlJEw1onx06lZ z{esygv)yoJaVBJ{Zi|8Ow8l6G*_cGpz8x0cAaZlSxEp=>oEsM(*=ls?Km5e8qw^}$ zOE3iyRB7Tx#$z!_m7F1umTZAlu9~zf6IOEQAi%&1aP^7dF2Zux*&fAA1k57Fc=lMo zG`Ka=W$No@QM?G?^`oJ^hm+#v>T_uBtyg{)K2fhnJJtg`*VqR7=#_5p^_7oa9fs^w zf3s_+^>Uu1Q{h>3*&0JC2xuJjs~uzI`011FhxFn)nbD3{?g|Kv4Yk@2LfI+>^VKB} zwOw_6?G>M9`&s#-F_GGI8D|@q5kML!-U-ac)u=ZOA=P6BPI?5;EAhT-Hh<=_9yW9m zI%5H(^_}~}ZWLpkkj9;xYX|Ck9J$%FlKJy>h7$t}7~O2W5KPKiP>98gyO{%HFy_~~ z5yC9%=gmN8Wlah6mOe1`O3n|;Sr7|gdE9$0HjE*gY^KjPKmzrNU8pRKe3tLKzXD4N z@NeOAvZ6K_R@Xu*3HAf zqNB;^ZZZZ{cyo%J(4_~#a=8c~%Lc|Hz%a{gZm6pC{5Qm~G6T8UB@LdGcRXS&h0#qI zP~Y9-Xac{WF+V2tA}Ctt?$%r&wW#gQ?QQ1H_C6V?U|Y={8sIjnzFB2(=rtsZ<#>UU zH7jXtZ)1aT;J8egTfc4sXMzKzSzz-MJ|hr^-wz+LIC$3|x)1ii@jxBJ{VadhpZbWb z!4n#w1>K;25br?D6a`v8%h|iT7KU#aPs&lQPG)ON7~^ZP&N{I1_+m?3G2_O$>I9rP z;m9m)BLm`&gE9CULtsmJH}4vXspYP6{vNQ~!4rWUw?L!1PjaQ|%eAh2eFXH3`kKep z?}kbH4&F4*%?a>ke!H&(sV5JGGr==XEU!m6W;wacp)n5vPF91Ja4ivuU~THLx_vS2 z(AA%$wiaExFa)_+!J8P3Soa=zO!-+OUCVqf7^B7=1Yl7CJ0id%MT>_}SB(03Lk)E2 zp%5~VfLRE*WR9vYQDo5f%)!bihYsHP@|U?4lyHXb-1pceg-61MXzXh9xZWRnozWWa zE#@x6!FcT^$p7s1uR#b{-s+zhkdEh`tQ%KPphjaI6bAyB4938%id@>-*{dDFTTofN z0v#vrBvWU^q(v%Pg^ju3RXcOl%ot!5H0}AuZNh#>bD2U(g>fU8m_JT$Ssc>=ytX?a~0OIu_ zeFZFqxPVy-o&qd!4riDq>_MRCO=DAxm)~e;eFgKRicYz{cr!(I@PZ^{wj+Dm9~@P1H>9N@5HzKh@)z7F8K zSveu0#+;Dme4bRo>k3R@4D)0bgT&0W3AexMhr}Pr*RpwMXte87-%L@x0BMVOcrNq-F&Lrh)k+ zRe%TYgN1_teZDq?@kS0X*TZ(lEWBOZj_@7-#yvXUfpK|_P`dDopG%W|E2>)E zqh$V7sxQrjLUVD5J@P`Zk;P?g19JlHU%yXl5b7H+*Pkf6@znl}XVC`ew8)@}!+)ih zFfNWJ8b`qdaf=y-vRLTGb+9Zk@_qpDd^-0`1Q;iy?a;WOvIa0tNWjsw!|99gO7#TX za7XHL26!CjuKwcXnEUL#%v1;tFlH{*s+6EjiV@rl;)FT5Q6?!faxMn!t*5}~M~c;X zi{6g83F?(_=B!H>5ODpMB6UtPm6(Y|Lo~!haik%T<8Xc@1jpjCZ$}8DF$OBR@k)_T z9uIp=Z$_$TpQvwWwzI4{K|tB|40zarw3Z;$bMDwTz^W`r(6>N01{7HDRbL+sW^g8Iv^Q9Vy4dqff;QS95Bx$n zE)%Ea%8%*C>~t~^aA2EfbpUy(V9Y`D2CJ;acKw&*kb)3;V|Xg!t!g z|AH(1U%^Ni^c~m(x*Ld9M>}xf#r(PYJl%TrA5N85S<0a4S4Pl)gQJ%#ys5EXLcLCb z(;fAockefW0~`J{3+RrJ;~U_o!Y4;Z>~_m=m+0}f<2o2I1!-cUj}kq>x(wbQvibrU z=GZ_mrZ;fyk$w+)^$bY;Alw)y&_3ee$4v>aIdhRW9tTVJvsx?K96rBWj`Tys>aDF| zsy1&x%dJ{l{#V_z_;eaV^ zzN>?FTktfU(q`h^tJFhiU7?+{A8*j7ruV@#E#^5L74=|7Zb?HR`jk@yhSx=Y@eIqQ zthVg{!lmbio(3B1Y#5Yl@&)%;1Oq5^{`d`VHtMW1P|^cUpok7I2AV_AN5BTi4BC>W z4o@Lk`nKgD2ZS>bfwd2x06+gcSe{s%!kNi|qhO)Me%1bB&5v$!hvpiQTEgfHPGiK@T|XwfOIDpM(Z* zy{jO{Kx#d=-c%o_fO-eG<#G}Qtzg=POul2WTm#T80=$iq~~M zQIK?`&C%6>dYxt7l*R|&gA51h`Sx_^WSi$C9GLW8wI*(>bPu2dxf!7=AkPY8=_&3m zM?TGwb8VYv)pPF|Y*q%K!?z?Yrc}RPEgcD@ixBQ{>@DsF4O}E}s{T)3c>uCW?<(rg zPXE*%n8vl6I8)%t>vW#_@`@Nj_2dj5HW+f4Ug|#tj4hxZF_)GL?R2SFxNBr=YQ#rPZfHT}@1~I-i>l)#{+>wBZ@G|M|0flP*6D)%DY_ zctHTnw+>cN5*OkA>DLyjAieg$xUuwiPAyKSe(@mG*?cgdWtt8gQI8U5)(Gl%n!=&Q z+04n@Ya-XdDjez=Ai%|Q!+KiO2nd!GV6o1M;$(t!>tB(U3wI{qZ?F9WxXn8{EIQu5 zS8Q#g%!<@FX@O_hwM`nwn2mZPlOsB%qNU|50=#Y?jN`_>`wCNrb8-R!+`@MCYQnK|N()>N~hbw}AiWm1iGE(<$1;@!dzE_?l1f8g?_Sv(e@7 ztw|aWOOPGu8AEf`JBnYM`VxGyr}|qh*pV^M=B>n(pdAc7Q~jQIhX>U9A}}D!=(sFe zAL|xiOz(gTH@L{Ly4yUNvYD|Mr~ArrO!mV8$IK|T`9jqN zVCHIkLG=s%e4Ug@=lh;}xDSH40|ZTqWLH=20^0yBh)uor+R5krK(8Mfoy5X9|6?$H zVklImJ77wxwd}AnuS_l_4b%Vl`+7aG(psjTvYb0Uim8as zSQ%XFj!VUyn6yvPh~v%^Q}Wr<5ECE1#)@e7XRTyfT)@XbCm1OfrQ@Z$!FvXnPk(%! z&b#!IEY@j=I#Go)_jT<;TT^c-9{%gb+`@UXDggCm zYaR0$v`^A?0`~9Oe*Q;QUoxaXIsI%$t#wM>uwk%qt2So$+mEe#L+u7}xk=~0PRWoj^ScRfsY@m;=-6*T$x~B#7PmHCig&KWJqKrcTBw$Xz5}FXUuI; zHY*FWhenV6`4{%D*lVrh~#I`G9)vbA?V3Kww6yUW-7cmLDV$^5s3X-SfNQ%A^t+`ef z(E%um`Bc1A%nY)_BXZP;##EGp+vsdp@Y<=075gz(I?j7K@v4Fq0!O2;IqLhLr~Y1Yr5NPt*#)rIXiSGeuKlx$aDDml(z z>8^NQFz9xyqOk_bHi)&9MKcKE@_+#K>3}K+sJTO6JQQ#OO#OCiDf91kobib59#bFg ziyIcZ&VMwHVw~Np*Y6t4>NA+jxprV6or%oc+7^SId(lbElrj)g!H&r2t)rg(rrCiG zw4B0?>vo(hwYO^9%!j|j%r1_d+NmpOWahFe)H9Mk`YE(v?hC#K=7FFcf`0nq(aX=g z`x=x^9sTWSIl<09x{C`0SalWjA{{93GY>(j1ht1bgEz1$M?ivPh!)V*2c+HbFAqKh z&EQsB2Eoj_9q%z? zpnu&!fY+%^rU<~DpeK}jR|szbON^3QfzBKX+!Tf0i6%>I1r@1BX56$>W)0BScK6b)WM%}i@>1=>kCY}=gEGKtXbZz2F z+Qh=-1Wq=BF{uE(rqIkbMyU$K<+~hdbRCZaLi0TWAJ|Vd_udJ2|G|X%s|sagO=pL{{p369`Hof?Ry`R*;D1>utgRr+a_eabMwej%yy+cJ&zH>Jqe1^?d6l(6geU71g}zV-23)--0ernwTEe$mx`Hg;9+pf; zcgCU|q&;oYv$^?-N9hVPgMPJRV7s+e8tScTsOm?qA-Qn?rV}ixc)C}xINs~G4E69Y zA_lT~-Z^7L4sR4du7T8#>_Gna51)Nf4hb)ASY=qa#$-b^8tNQgmS?fAj!zmYE6YM1`hzO9mLo_Wc4|D((P#+w3aPoH1!QoD#v*)oP}p=%8}SK)i_bOqWu_mOmP$V(>}H zg2D?eLzylRjCMjJJ;+%w(RdJG@&ES&Z@%KD-UAaGIFp<{W$r|SfV6tBf@-j%bW26+ z0JO~>IX%F!49tOfUA-A|0%CNLzV&Zw>&|P0LW>AHPuhZd{YPLSF6u+1UKM6PIcl+a z7cAIM6y@CW$C)G<%!Kt`F!i%0kgRTCO$0cX!C)71E$twHS;JK@*qO}w67OzspSIKB zriR>=Vx57W>KIrQ2q*$EuQ@XZ4jTjl*au)Z78aE5p0WMKGweukjtLVCN(2Rp4V-&l zi3$eY6z%Awb`Pk^ZIGGNL1!3Kb;C;H7H~T@kG97zUjOn<7QwVLr^4&H)sxY6Q7~8f znN*=nw-gY-DFCNdM4p)yDg28chC`wA0M>#^KLZqYL&J)@H{DS@2e#YjT^`1X-uOM( zJfp%SQ$H9B$&|eQT?5B0N+ZpZeTivon3+!)3Pp`=@*j zKoYYDQ2zyNpO*$#s)vf@=9tlz6SNCk z`8Zhg;I{f1W|j*uBjUK}@=t=pg9g=~(=Z*)cp?1ldpPA94s*N@jMD_P*BDe_hyF;3 z1siM-3wZblm_84h_J;lNF%NUb%E#Z_KhIdUHeUSM9%R{xeQ*b(V_zG)E(Qr=`_iH4 z+PUyEF~-;rLpj@h^GO=?IF(SZ{!&g@y!d-jz}=Fsy^&^b*%b~Oc;La%|JM`uiaFnY z^ut$*18+WrW?tnI>l@J7LvfMQS@KaoQIpuh9KQ2*&uz0M1#E}z+n5Cl1~J&`Z{Hy< z?$99W9lQ%|y`Mpg^Vp5ELS|%w>79f#IRH7H`QT*;AY8-}gzZod*M)v`cqdHPpqxFy z^?86yR`o#7ThBrN^CQ}UWoRVQwYS3ojSMotDU3UqZa~wwF-~?+dyeyU2XRvXn2Ld| z$HD12z^7H@-ce4g-&@jU5hq7)=dozemq56Pk;IRmX%Q9tuRnSLyinRvi*-p_}4>QOBZ#O`<2;rabKIs3+v*1H^ zdpfj65JQ`qYd4F+g93KnuZQ2uu$xD2z65ik$fxOe+fs`B=SWch)5KP}hpfwalWI+IFppA=9N<(Lq}E*=YyEfKt6XIJI+7Igx#>W-I6S+I;P#mSeVUaU?ukB zJbR~kT-u`|GQB?h2{do@%yKB)+PMRTgXpL~zF^^E_d$WIRXZ-+U3T&3Xwla|Iy(n4 z6HNi7D;)#U3Ss2DE5R&caDD$rP#Q?;W3Lfn4ubHkPt{dDFq`c`mrl`*`Mz1zJ~JgV zP(zEWo%1$283_jv6MD54Oh8`)?x4Rtr=Ga_x9>kv$;7pz30gU*e>XWHL{I#}_vCQS zyzZd${a=e^el1EAJJ)*yYk z@Z~qFk}9f2r^vR})SaG#($l~^*{)@F1MMdx=#cips0ts*nD!2EJ$Gn5pk78ENKwC@ z0cD-Fz_W)ytVn>qz4^_<)LxrFv$It_K8zzKgH-YXB#lK{snbrhX`7SR1|ORaxboXqj1Mpk>@DX>jYORQJ(@G;(~ zdb0As*Fc=P9S2*@-DphdB> zj@>b+9=bvuIrLc&{SXHd)N#Ux{t664BRl!?hvitZ2=EU2rep)`sPNRsODz3#6}!y& z{PCi2$W}eu6;Mj*4`e^AN>6>C2_}a0w8?tqA0QK$5%Gx!`a(3Qoxj%rUS;wdh)HpGSY zfb58vO-M&$lC`oqzU>#TbXmJfp?*-5t8%DX!G=Ts* zVpCM`%2>O4?JH0}x*yCfp@RP9%ql*7pl2RZFby%!S^`o)F-f8)SjW}l1J0bRd+&9a z8bIwFWB?QcVpkXMKLc(Dosm=O%B2d9W`ed2v@)muw&b;4athT*5I1oktmx9+?1p)w zJ{*$?rKIJfMk}g9)%GCgHp}jWw-+fAL&e%k|$Ba#ie7kiiHQm5p~wlN%CC zf!iL?X?86uh4gA*UC-#!HAAli0r_nr6Cu1ro&T@z-OrlYUk9to11l`)WS{eVA;UV< z6~fZ-1_4pi)tm=#x{N{WvkO1PA0>mV9IuqP)FTG6fje#mMgXpG+YB2WFRB`xh-)y~L80X5F zzpQS+yCXMjakT|nak!qgdJ2d>%y7EWZ$LskdG!l!(lTE7brgf1RyHyH@$dis0WedrrySQWVY(_9j&`?&WQaH}yS;ZRT0IaL zI#6YF5Cwedv!_HKXWxRwy2BsyV!u7=*HED_vxd`$!I`k^cVTEZ8$v)|0=K?CG=0(? z%F&T>)=cHF)AjG<#4#~}oiCsI@CAy*=NT$j&@%UwU^=U| zozBYz(X_zn0CaCIqsfUjG1EAOQ|nwrsfA|(hd&Q3EiMM=VcZKuXTk!WdtiDhVxf@} z;w}rEd$3c-P1@<3*I$KZl$Nbnq;SscqwjGZci7z^ykqG`DiV1e>Sdd3-t$dPoeIrx?{! zFu1tWpfu1idiC0mz<^mgU{!Pr#4uw6v?sG}?J)O2z5LBQ@H6R);AyOQ7MCEtWZ%Zx zVhI7J{7q5poHtKkl06LSv!HSr0U*v`dGIi=Nf@pZXZCt9%AZ?`-Cpjlk?4uI|q=4F5wIlp8 zXZ2=N1vB1^US|~oTu@UTOQP$Pub8+Ovd1&bzabEVV#lA~c*AAQiQVpi=prU9?`k~# z^Iw2DfdIW>LQ53GDV@o57*Jc{ckWS0R=cjpCd=_pzQS0{sDA=LVdvaUc#V1#$jMA- zK2g~y6W>^+)2ES572IiMrWd}Lm-7fOIr31+3XrP37(d_|yM z1ohjDR_G=WZGwy1ojl+UMz;YrkS{w0Xa<D>X}*2mC`(SPm)DO7LVj z1Z|<6jMZDek!HoR`iU7d^o;*r$VtfsadB}Q6OQA9@j0$Ash{YZT4W+I1gW1snkFaC zv7}gZylLiKxF5Xspb0#zJtGG~peuL+tyQ}bN(P8a-2j!ho&nd@837eg-*Pv7_?$y$ z#+gsQyT`HiK^A(IXZA96Cqclv2;W98QNZb&Mzb$?Wh2EgM!=0D6U6BQ>Tls7 zUIXNwe+fJzS=V87L!UcWRjrCaPWgYIe2x79tc}q$XYj?Q#JBGgqu114LD>h~-vHLu zWXX|E@0|rPFxr!|oFWjRrnM4RNKfU^t=buK7~Fpoj1#xR6^t*|M@duU%r+A9tPS20qaf8$!8K`py|Tl zga_rAUqg6jam3yUY1w(RXgq(1`Mwa6nIa~=XlZ=*8syc7xK>x*-2?{^u?t|84q!=Q zY!LxI#&oIYAwk{I+BwIr3$N&muok14xwT>Co&AFc{EuOIqy7CjS^1NyTL;Nw~k&h z@zoq~JRHmg#Fq_RncGw>_$+8Cm$7kXq6%uu8Xcf@a+kKF+K-(JIMJh4YuU+qUVQC! z?J@Q9bnT8XUH&cYtf5aHVqu?Qt}|~wdy@G^KLearlgCDfXLDx*Q{Fo+o1yHOa_sF@ zuT6K+Qa_*u$@H4%a?8f`3ZdVD6vrM|yzj7t$7jj+=&hK_d90}&~xg=Xjv|_j0c6`=9uOJKL|0~-dJhKx%md-v3@Aa$e7nF5)5InC1i>|w|u(ZS2L z1HSy0m|RXn7VLs~odLV~bFdccKKRj#(vxU)RdUF15YYIqPkc`_JNM)2Hl(?y-bric z5}BxZVrA4_L8FXpsn~QL2cY$*Z$HMV)zZ6k+6VW7F);-1Ju%{IZ{#IJKzF$OOYROp zhW!W>_F|agoOxd>$vs}w#Z8k0s2>ccV|&9}vc%+i_S_55j=86IdhEB*|GXXV%R%Ak z5NAOJps6IVuHnowPJRp&1OkFVU(kKDRda!RI`~jIUw|*WZ@fvDM}uZL0bUm6odOPw zgR~PbJu$!%C>YIQ_2XT-7^W#r|^Rxlb9T+-_HG|(LhbfVpLkH>%eZ!PJ}n^2bL@)Gs!;gdSRZsv^Gl732v& zU7>@M0dz|7+yFf{6H4~UPiNkGaUiVr@L7n#W8AL|F9J6)W?!I_nphu3i5~-w;?aj$$3!-=}ZO(i&Q3ARC4Q)F&zSp=T^IxOQYh<8a(e zfW5OPTy{hizBS9EfMKEy{5Z(8o#eb1IDot+IVOtYgCuQsIh8mbJ-CV!KGGoi^v zeN6+3z}Yut@V!@{zx6fm*hWa*?>i52QuKEc2w)~fvE0M-3NCyriCfg*1?JNS-^pZp z3NAkFz^I!+tx+cyAkI3~SUTn4LFv9HG$u#_ug?Z?ToUlvi@o6U(rAw=9)`BF55`pm z-uT5By;>3IRQdUD4j+0R#XXJb%&Wp#acQ7~GM6m~-7U1Y?)N=>EItPZYCsp&-+9c) zV`4OO{IO9ci5-kFFhT$2sJCdEp(VARe`w-^@3qK5;VvQ^+gP%Ift7a(#NJmKgQBQo zT)!Raht$|Hvj>RW2J;vFf8{+pzAKy~FvDxIO2Jra087J?-oGv_;lUn*I%Uu{I3-1C zmu&W|m|&>_t%0)Yz{(32!GVF(BEd%;biIa&X=HLvlpFVlLt%Q@#1P-df~a5}W`dF? z4j+7i27SOjzkG;Juz&)&`2to@b-#|WLk3|!8|XpBZaZ- zE8OBp+bmLG$>45YH&)aQj#g)Q<`xa@6uH8B^FFYE#g%S3349o2$S(qS2py%LE6fan zYY6k1Q9J+%_yUeoPh)ip@*s4caLSRqD5{ltGTGs6%v!LzJ3tpOrwsXlOo>=aI(W59 z&(@#6`lI4e=mGui;FhC%T1aX&4BwxCb_i<|v|#?&o-J#_2QK z4QM%*zw<3QVfy;>`i!=99{1*j^l!@+7%)jM*NYC$N)m8Iz%kE*Nb^o*fbU1YLCe*( zI=W2`fG0C0IXyDX;l>es#%Fea}TX0$`z4*Gpx3?WPh19#bRP%da>@zxI^ zSUYx9Gv5TI=U<0H?~g3AU+wUIRuscw$59b|{3wic^)dUw8v5?$U?YYT+>ho#OEYybC;JoFk@~?j zrUFn1a<-(6Z8A@QzzrrTYckOQ<~!oDt@|EzVpjv8o*^!i#+@aALEi*Du+Ak znM(jiYdXcdSOBQj#uWmau3WWakhFv+>j|Qzz7L(@GStpm2D)@5GfV=OAP@~oqLoQ& zjRm_MaVf`F(2m^P6Kkg-qwL*Z#9E~l7f)Y){!6g-gZgTSu$UY<MQd59qE$rX zZ89ksFradvhr`CU7u>wdp%@w??F`aGLW=_l=pqBx1dL{aaV}g^ZQl^M(ZC4VTpB;S zH-KlcD^o`Jif4Z^d!(qK2^;OpG?I=NmTQd_ozI!28vR(2qVK^~w9UB*y# zC(wXFI(yfAHVa~uCBX3KmoUivx#|g$;}x971PwZXanO5ctPOThf5ULM+9=3$r|io2 z2e*L)VGtpGrQE%=BhIv|H*ZW=Ux1Bs{GZSnVZ{-~iT)KFl>*vnOh*A%@#WL0;WoyY z(*XQH)uK9?{PgyT_LXOo>meGpO#=`ow!!qK*gJ9gSM1>OZ=ARjEUlHA)f*GguRdk) z3;yH*mjviB?9~7gFmOOa$Doy-v7^H~vYiWYJH>@F9{|RKqCeCO@%C@%9y=;R*#Sej zdGjIg1v$bTWNd*0-fFwKxkp(KKL~+FC&#(;}A(-`gIqSkXdids}MrNg8IlsZK&qB-K>FSOH zSvQ_qZMpbTyPV<3ZT*Dkb{>AZLER>oxxP`offqx+^fG6X$n^Z+YhZv5mNdYfK~0CZ zE3s;CF}|&0vGam9QN8MYL}8jRIh^19!C5AM2PkGMfqUA`A1)slzkCB4-38n^H1C>o zyJOW5Dvc)PH2Q)u5@a>bvEPgeu$Di6?JGCGb&8X+`fw}gV)l4|{``yY2SQZS!6vSp zR2NBS+L6E_p5Yk`lpWqYm9gM3^c3J$rJmcJdP3)2*$|9#pcNlhm98VYE&~K?_kf)Q z4M%x{hlAA9`Hd_sfTtF``%mENJ09%L^{pR)3(6R?(sEs8`)C}G5A$4P_PINkfzv?Z3|j;5VlJo$VX_zjr`k1@au!}0T;SjCQ+Za7 zghQx@pCs=>Gq%KJ4s}6sXb(FWbr?#BT^Kco8B7Ta~DEHSc$3=Iq4 z%FzKYhZS#bV;=s@V{Vu`Az=H#1v!m%I&aK%u$T_OJk%>Vt7G&G8oM2J%Mkg&+g)@w z5XauRbikswvY0VmcPJ~yj7SaO}+Q9grYb! z4|1x4YhMlI@&(!~J$n#(4teE4oOx+o)?j~W3F#?7;mdS6&+NIO>zf z1+sqn#5@L3pPCzg`2W^IF*E2b&MV+OR^Nu4+#I^R-ls~A3THwA1B;g*t1w4SN{e-5 zsmTRr&-?HHWHrUbm+l4}R>8Ep#L^*RQ$)7j7kP@&MQrg4QMv?u0)y&ePBZ1(gTdU7-t}s|V-~>&*N7Ae6kHY}Y!FuDH%hwNok&rp- z2r`($sB+T>xRm6`(|fN1VI7SJ5KtWRdnChvnaj?RJ$SOY-t ztopxQZ*{isyeS%njveztlpF)6&u=^lRut7g%IVucUPr4#i>?o34!N*?0PbgDy!p6%_&+ytBs^N~fP7her^bq;J&kHZP- z?40vwIF&n0snFE7mKYm=qRoXvaB!O`0^B)f7hDjT#ZG&e_?=AF@a%Brl&+(M5)Q$X z^58r;TlI_|)?MYi_e{TcHDBR!-Yz_ga}Xqjgx0lrgi0egawIuc)LMu-u2zs@)bm91 zaK^V@ap}oqMt}ZOIq4`%&^CMh_4${@4jwnVlsr;K?*ckwv!K#lQGF>DxwO?*mVwU% zF$s8!2GsA|a6m50p+bx)5Hlbb^{yQhR|L+a!;EG!D4=h*tAg zkB?p$!Lq5Cr}>-rFfw&P!Z_6p}v%TerLa&n)f zi@D{i|I9%GjGTJPJ>v~j6(_2nuz~8+J8I(Uc?G-6X)!e9OUhc$;Lao3uqMN1afzZ z^47srO_&5rZjj}oJB(R+IF=y%y|3BzGpFP1Iur+koBHWJsK)pmP6g08&DApJip1(o zzqE4s%iI(I?QS}*Ml9fsLEL2o?RL$saJ#HKZf`sEVRrrd@4n7?F@FGt6W9gmy{j4OraPx?NB_88Wt@Q6(=p(@!Fhf8iir+!&l=@C z20%clHK)nd+9VAvQuUB9ayXt9*2a6GcY2b#G_)3t_|IM}nbhT9xt}5@UgG}3?D*FQ ze^-ZG^H9^6NN4CY*Uqp7q&J>7XYC3K|CO-^vh5$R+z_oaC=C)DR8#8|C8 z%-LwiR5W>?wK=L(`}nCv*k|bXPhSHo@>V~T)~zc34E_dm?dsIXlH;D$&e?IZj$s;F*!vfgoyTViCoL*A;AQP(1tyR7ES_)lH zwdimNm<}I`(QGbTK(o@#5|j#AHK;ug9dOSFON;8&l{>y^N(+HyJ#=x@+3(Vu^f{nQ z%gPRX#Kac{lSd_&C00Av?Ox@Rg1_CRsv)%~Bs6N&E`Emz zn3Hz-E6f3aJ_Ytfq`m!GG&ELM7|4&wl9$V7J=dgHz|MhQkWUC}dYC7hl|!Ha`yl`H zgs8c+*z&mC(Xk7^5j!~hFU#~gErwl)59wzhxAgKoX>Z-VclpIMF)V)kpw`g#S>vwg zIA#QImgB}7zlE|we`a!-fO;{ao-QSA&pmI>rwi+i}mKK&QRX}t^s#Uqh7GD#h2%7va$^Em3j1M5U33VFvT-F!t}izjc5ZW zuL}ZN-kDo>K>+Hb=3Cm;bX}Rd8~}H<&~aB)j*Bs}R3w)Yw&jr|EpYY!8fmHj)OkQ> z!3&bD4n3ECquc7mCntV8!gO3Mr(j*bc{f*3sovOegLdneV4S_hiymHOO8W1E1+ob+ zkU%pi{nj5wxsK>Ev4Jzu!p6b$?4i*eUK}Jjg0Bn)juHbcrT`ZJ=vNy0RZD;v3n8w3 zmp-fJAbRth)Q(H!2DG7b!kB&KS?;g_V_=L>0*Gtneir`Ty@L=Npj)qj3FsO<9@h!{ z*E8R445e8+30hdC911IA?_9`W9&^|!M(jHfJ_q5_5FU5wX(;S+svpdu)CatC2JG_F zslhRakA&Z)6MxZOdIC5jA{e4RalGH)(6&%@3=L-Ya-4dmnsx8W zH+aKpviN}mTCjh>kpXDeFS}Sg+NpB%^XDK(a%;hhVyn1mo4Dk?MlgU5XGVG@WLkD@ zP#B41#s^@`*F-H7p+hT;r6n_Wtnv*oodgMK<#Z({&t8Enw!=7#?o>~-RSx%srq7yc zI3of3S=I}P+Cn2byw!Xr+I&p(AWb!rvd)#}5*I(+s3_(059 zay%qo*mZMNSw3KMpz}Wf1J*?tAWnd6I{l!g?x-K9;8ODQz%G&t_u`s8{i z60}0Ue(`*4NnxKD!I{p- z%DTX_d8_Db-;X(bOMI;x2By^}2v`Hv+lFVxV>{k{-4Bh5tdd5ESZDuT2p~0cZvCyh zyVd`C=}_(rBOsrRFTMi-bjPh6>{~fSV93R7h3*5`57Vkln)EaGi_{Zo`w%f8Oa6Qf zUzsqn0M`SQfTlnr`(-=v`Nf%|>?9)8Ih(s+IOv0i5}CbG9mNw6>=S4cVdpx((QdHY zpwy>>g@|Qfc$z* zpFJ=<#g~Kh@9GH-0<<=?uU+^acVEDZYXS_-(3 zeaZ;3T8#PATM)nyk6W(YYvhuzeLvKaeEm6kaURqP63~kmUk77C3AWpvqKur4(??Hm zPapy5@4dXSAIAX&=icBYbO|TPVD?&yZaoA!vuG@$ZyH-qfAr{4b(Qp-`ys4A-)=Iv z`r|?yMC^%RU*n)4rgGRP-_F;5+C@`W5OX(`IV~7buWRj1QFD!&83PUk#x4iFe>Y8^-F4}SB<^Pp3ngP~Httpf zto>S$>HYh_0p`UD$h|X((`H=qKmfa-=hfGVA&ol=GfmY{T0l7%;1`UkPy_CE#gS3o#u6qM@Ez^MCGITYYn@(A}VTjjs~?18Wfk8lQ^J`of{(7E(^ z7wD|N6H|w?O#I7N@77t(838UL*qvaDqtkD!YxPHDafeG`P=#B}gn!cy(g3C^&wSHPftK9@OF4{9*8 z=yWmAr|iooeW_vqf|bB{g}n8H;tQ|yx?~VQ zRX`s^8%@p$m%a{-tDXzwa!T95fQ!$7@%AD(4)NK`^f}PT%wa@gPc9AR#?#RNJ*J-9 z&;f;uUTQB0meg zouWuI>505>Fo4VVPcB{eV^W3W}xP-Q91`J?G+&X5mc}AO)OdM#pj9z_STFwqe^*jh^2@gqS=z#Jqt%N7Xk1)*{l=MKbx-*F_i;%z) zcZ_(^i&E%}mI#kro-Ifk?}M^x=492sVKTy|nJ-`bkduot`lr|+fm27$$vJm7Q}gV0 zM0{@o6gO5oJ!Z$>9{DD8=0Ct3h^(-(YE1qNwS$j(i}n;d83fU#7M5Q6)_^ZW)VAry zvxO`>UfK@&K>NdC-We@jWospoV`%Bz@@3Ea6YG(@lPn*d6>#Ydw%W6gpMtpU4Ly#| z)4Gp|V&@^O69LoccI+jTp_!Sw0)8-C?nmGK%l$9b=(J6ZGF7|D`EehA3rfN#FH4h7 zWTX$D{sqPTtr=i|m#eUayoR9F;xm1dd6C&a;8F zbH8(oTY$nc2DqeP(B}{9DJ3!u&;N{Ba{bMvF;2zgSNQfL$zcp_38->D4~=< z2XprKPJ#e(M1Xr7C7;K_4mX^C{>2}_t3WFbGvIcV$GJn#3#qYNPNvm#EP9lF`Eb9O zmKu23TaT1CdbU8R8UV}l{^DVyUKE<#(hc#fZD;1CK>brn)PcpIkUgl(UPfk4%(0%M zP#ifwpr%tK6SEZLRv_)ZQoo8gZ_%qEc$^iQEhgbX2IK9`S~NI4za-AxJ8M-Ao`z80 zZPq!WS+-lK-IJjg8~mQM5P;=))54Lyy1p&L-VmEIDD+MRD5zPioLVAt#*h96(pWAj)~Hbj$S|fYU}Dz|tT|wbuOtO} zzVYJ=k7`QpNTyXVkw>KVy#(Aq>FKo7ELFG1X4&`m=H16X|`L&TF^iu*qPCZ`2Ve)#I_$B(kXY~smW0Kmi)xa%}Q zi*uyw>|nqDgS@(&2=aIcx`vFmOT;|PJGJi|x(dKHON(lNxFrrr- zqW;O)3S(P6@2cFjW7T_gP|84gAa)4su-XbmAB4zkX{R@J`f-D*FB#kGfSh>e1-;rd z4>WmFgI1);WCnPWf2*S^R@3nzF$!0qfyy+rsyEKL(j;rU>2!HzGSq4i5DU`I^67D8 znytlWY|1fkR(h>1%a~U9;j23zJU&Xl`1WwFf(^R{rI));FQ}ak&rq-ap#0|_o+)fN zIrQ;;pZ*hCKwNFC!HGki)CpO^I%L;?MMO4)`hS!9#=na`D94;2g08*+elkTYR+mg> zak**e@OOs-(Ch>;DDi7xd1YW$V=vu(>B(7!3|J8XJ_lmFf!aLv6c7)+!i~R>D6%S`>&cJ z;&p|~CHo@IK*Tr1fLC;gr8I4HgeCChi*(JA|2@#6C6-CSiMMcRdSP^fKM3G5M(CPB zowR-G9bEq|CN?)y;P~a2eIeetA8cw2Z0_bG&Je&XC%glSppy4@bMAqKe&AGq)k@B8 z-}8?@8;!m72xsHS9MkiF)~*&Zu5TMLvpPB3lW;5olm{vUwJ>aqIj7?H@mIkCo^k70 z(V26VqJrzxV0{6Zt!(%6+S~Er<7l1x6_~NY)7`VT9onj#aQ%6ac0R(AW!z05?teAW zWk)NI{p=56-5xAJAV>swrf5Yc^9?4hjO*T<&;f}=LuU%K6{C8GQGJgNO@N686#es) z&oWnlYft4(KzM_qDq|;>k7bD+oJj(lxb_e@-NH@p=r9^UX1tZxviK6k0)F{f7jW8# z#8zpWg0hmvgiY|BjbS1IoWoJv(BRJRb~eHDpcV=|%LM1ZfQ~~Aa|x&l2g?QdzIWF_{hS!V=S6dZ@LwDP&ki>*_3bFJYYYiH zcU9l2=7rAV-8I4C3(z<)Fzh~{HD)Yb4V+#$CW;=*afG9BduX(9{p!cKbdXJ)E^h}w z?9SoGqNEM37sc>0+lOi<>3SwVz=KAHL$5AG%s0LbSsDfA*ab#!*}-Hy)_vovVzB90 zS*&RP+c%yQ>(=ahKlf6wd^yP@uG(c}r+bNt_#!_B6zjHRIN|`#H40 zdGttywhRijTZYZrO;tr=YfW#2;&AilOo!F9tU~(Fz_eCBx0C^82PBwU3WKuZ0`}fr zcIzEV`0Z`Z7ho&|OAuGT0(Mr~^$@P2G7FtSvF6dg-p_p_Z3B#zk`IaxrpJ@!QraQx za8GIyeVI;M=30OtZ!pF#ur&3vpF{rX_4{Wb1Y85aNS3?0F%NjdC<$`8@O3U;AC4Mk zcHNE$Mr_#S@@q?a7z=khUn>U!PJ_5QAjs+3y`tU0lhAh85m@AjAkR8Cu8;Geo66V0 z0D}nA-=)&37>#9&vHI1As%Qg~z(Ecq)`8)bH%5#VWb5AvMK!9g55~h_hF@W1@(|YGx zrO6d-sAq66eHbFw1h9|Z09$q`pkGfUnOG7&|L27#A=*Hek!*0ooF$Fh7gZ4F2e^Z{ z24LgXqoUaPXvX&DJWu8sz529u6+{y(2G$C2RDo#B27;w8(pStKUajX&PlQKq`)6)P z6>e+WAZ&u%|DUh-aF44x_eN(%z0at(kw(4C>b=aUOI9ydmq*p=R&Q1T5(p3oJrFnn z5|YpodJZITlji{&3^vAKOmQ$dIp6o)lau6pi?=ZHd{3aV^s9S9xkI|O64bm-w*YZhzf1f2R!NkW z$VJ6-OZKgCI$PkCTTegJc>vcu2fB8zA02YkqqYh!-VylKgS9X&E`b3DASaVd&3t{Pyjj*8J8F>v+fet|B~v`ZPo*U5!Uflh*wnt7NY6c6$?%NYEO zXnL(}q25Qe2cC8?&g@$BZsFARS0Mtlr>$S6>OeZQtR%2)&$g`i8NLem>a{bcAeL|AEV{op|v zgKOVBcaq@*1nZnH0l1FA8xMGU(dNMPYBF0+^+>juSmG@p%cO7rss38O3h0M77Isrc zIR(_maIL$CPrGH*)l{hk!L&!G0%NuGzLNV^fuwsC!?vqPQI6(}Tl~>RH#|;Fs?N&@OzxzRSZ)g~cc$^y* zT)q3+FVs337w_2NM~jQF_J(>dzb>^*#Ku z=b;gHp7*m~f$gc(U8ZBz)!zLf^u|h0R~CI^6qoz{{furr$OIBppAyL{cNZ(4RP7Zf z)-Y^^ga&w$|B1>wAr(J#QZafogPB30jEMa_efYN-LIGkO{z{LQfq^_*Ca8g({9a!vkf zt2@wv4Ny5>wg<}MJ;M{k$p+R0U~tjr%xd3O-{DECv&GD9_;6Y3MC!Cm3IQ`ikd~_! zoaJg{?;Cc^aI>+X^S|%?;~PiYjawN{hm}_fTTM5e3W|ir0jMmYy9a`2bnoKpb5>cN z+PAF}m-Gua{zdyK<)$ST!BI+g&teEP()CeA`T54}jG8NNg^Ly3yBuudsB$o3Vw|8E z$WKmDjVehk2FALD65bkssSIXSld6*;T@T-Vq;Pp&7S`@@q$DpU&`tV~C5Ktnno3oe zdAiC7GkBYIi#pfOlj`+8B}Ud;T?iMyT^D=xE=U0{2=K++36CFL1FOga17a98D~Rsn ztOFMMmN$aVn#K;!^2ViZ4A6SonEk64A9SrZCqrxA1#^HQY;cSg`O<-A-m`fqP#d3J z!%YBnodIl-rcC9P-K#%I#aNy0+*pfir&aqA$PQQ;Xy8n@NC#Jb<7SvNT>3x5+&5m| zb=;iSs9Ut;RVJKRgq1TcG8@VKNoDB#Sz?`2aR!D*`)_r~rj1W;fdEeMn6ktY)@A{S zL)MR9b0~ee3`ZtUhUpl;l@P?3=m8`piKn0J-E41 zZ%l-y9H)*5h%AN8U!~!g|1?IK7DFop*W-H%Y^uRuHK3T4c;|K}+Cc%VUS7Te4TA;YgmAxl{w%xrlK3c^9pRvo1@T->6L*_CMMiE53f=_t=-4q?ED1yUw-iz zIKacNJ-4KfVOD(p3--MB6)<41EF+j3YPKEzE}R!D^#bbA@HVu zd*K;9FSA|9?#853UT=ZQ-Tl|24=_kU`QBa-N$hnE?P=h^tVf#f?sQMg*FTbR?tHlk z8e8#J#~6KA2bz!2KGs(j7kvG@DvhI6YGRh5Pu9Mr(hLnSEwEN~pc{9eN)F2v>%8{( z-HGOga4x&Npw(!kL-yyQS&!Nuq9-Q%p>na@N^s7w_E84riOTTIqkJAX0rMXo+Xe@G zt9v}^|L`!hK#)fr%{(m-kX9LX?af9R&?mq!h>KO-Z$zx?A|^v1J=N@czbemwS_?`& z3pQ|6_Z|iF>U0}9CHte-e~IavKL=xAd!6Z)80~+8=t7`96O2}RnCGIG&UhmnVhXA_iG;^K|z|)zRK#_<|2n(nTbikJ@ zZ+k$!`UZ21>jnzuM6x#lJ3(~=5KSSajDku(Xgcj1i5p(@@;^iSQO(%>T$x!eZq-L+ zJC2%!7PZ9HFLr~~#%CV>VamCg>u(7jj%yC_Jr`g0 zTXfu>!1w4vY`FmQ3*f5(p7G{Swgw@R>IM=Zco@^O4dmK%g4qN(u?-8f|5(XyFqj*y ztWrTn7$g@!zZWvC3K(>N&Qu{x)A82AYZ0$KWmcN}PZeF@zzCP}w_AP!9`<+n2g9}R zuy2(7<&j4qI@-Q?1A-nA;4PRaUbQ=IT=h^zEqH6k%@-hS0c%GcB&r}1reby?L-gUY zP*vtiIxw@4&K%S}(YtqgXfIHumI>CrW@qrD?eG5KKAWWmCI_r^1~AD>2nJ{O_$r_i zq~ah3u4#`oPB#MOB6JYTOaj0R(jM@{6Y5pxoM16rd;{IWm}a&fpa--Ys^X}s#!aR!yp+|Vg4Z`KCgJB_b&P8N^XUgxYT55+88yjKh# ze1A`srn@&R4e`vd%E%AiDzotJ38bi=Kc_E-d#)Y0u7)L?xPPh6uS0j=qy;4?B9VxDk( zJ+Og~Z!f#@Jt($Q6?x6NZ+?;uUEP{TbY3%)816>e=m-an;vP3Lp*(;|v)VIMCc-eN z!InaeQDhSV{^_3{umyqAWV#z71XQFw@Bs?b2DtXLC8*pU+SAVE0gSAB!j(I?ltEQx z(N}KAXwAwwx~jv@8wfW5sI@tpDln+a^Jk<4{WZnRi@{j1Dv+D@+@+l%nH_YoiUPj9 z%VU6XH=TP#Y&^7yflr=i^cby?z^d8qCbnH(OvN0U1I^ssWF%7`V9gARIy?f|uR4L4 z0wH)RU~(t&WabW(5nfT*hISpgL-Cm6n+*>cGYR#gwx&Wd@3imYh;1o$>W{w?6`YrD zBr}5Oe+O9c+V3@s#SBsX+2d0(VtFSvFgJLGFYXX)QKz4|h9$l+IwT z1I`QdGW#E|p3@p}p!u|~nJJdYaJz!?YrzETYs0J1lwpeXI=aL5r9IPxCrVxbo9412 zYJ-^IUh`l;{C__4HZ#8ibacXWnOw<%R9#&x+V9KycJ4C|)fS++$Rzjy==z=X_Apx; zFTzc!NJFEy1ql!}$zWX0j`k$iFy62m=FL4_{M^Tx`WYY zz$D$;O)C&CLb$p8+RsioPdH5U7+o>+@vH7k=|T6!a5gKTN`$&b2jjjJIL9D4@Ck2G z7hY!0bcV7c#jAT&t>X}G=v}sY2Y9ptnny88SSSa-`9rX=3lE)|gVcTvY-QYSpr(f{ zEW{-pye~-m_2JPi=mItmpyRz4KKN}Xi_L*yI`uf}LmL>>Qz|qm13a90DoDNZ4wNL2 z@89hb2JMkha@4oCkE>Lq9po7a<}H&B&O%_c7(ziA#1N=Gv4R<NW_Z^18Sex4OJtbMt`hdtcp#^W~lqL9{p@QL&ca9%ry z>i}wcc=d*rmdpk3E-`J0_~HjXz3sYip0XihagnL@)i3I0Zc#bsl*+Gtm@mJmx<2$7 zo{HV30CW`WSObQh;moQ;5a2iOya*A+HhvaV6J*r>;ipz-U?eWzYMQoLp&a?==uWZ7 zmkUn+`N`)TgX0PpNk8_ea+Wz4)0PuwqLeRJq1QHg_UL33Cc{@#Wq8(m2o|bscW?mSs=lfLt`x!wX!tEc;Tfuz6r`@ zYH(56&EDXEYq@Q4qGD;9<>i+SR@AMF=1q&m6Aa=Rc^0<7;m+#L6ig;W%`WIo*%M%=*#q#-SptD93))(1N7m)qhZoM>cpeYRvy$a)yX+Nj3*mG!2++Rp(-o<&=(8Ca)72H#)MI2GT;(1e62yhOU%Er)m>fV0XpFgQ zu#V^LT+yKER@*wPH+dDyj-BKfV`Q!28J8Z zex*SzyP1W@ef{;vFMwBpSnF#{;Z;?}&av!BW{|(B0eln$tapZ}xQy;$n9YO%e3}h@ zd3xD6{TjruSX!~aN6)vtals8C#9*g63w6ACNJ7sS(49m>HR?tb%`r_VB17B0+ z!He+ZP6gh!qPC27sG36-w`kR#aJkN~Sjno4@!$@y^Z|ObF%GP4Nem2eM8=s* z9MDLOw=)DU3Y^;{6Fr$r;L8CoGgv+oLclv!;dTL&>GXItmjLj1z*^xy50P;B;R`=v zIWMqEy7%dSps`!^9;On&W>(1+WMqLQH*B3Ltx@%%q6xDgfE(f^i)E~d-#q2UF6UPQ z7C;7U(*W9I6vFy!>1!X~360wg22~f){0BC!&2Fv`peRIeGlmqZAwg}ZPR|rzxjT{VIn1C!@P_bLRdSAK95ty6Gm{Lx>@OX_! zWK{!eqWY`DO>^ltUj_qI*bbm3g0_^aWU`$ZFt(+=m1q-_aGrssbm(HJA-!Q;;nsBR zZ?EIdhCF?&71sJ8Fy(6{_}U5v5KsbI*B-ANDCT{L)l{%~HYT7L)X)gleeta=bspvt zyPcs|`)yBuTZHluY=Tl}kxmBoxg<4Rt*m>s6EYpZ%N@s#2VZx5g3r`VoFpm!ssk$D{p42&fVk$)te>6 za{w2Af5xfQUv&Cc`%mkfU8X3IP+gcY`o8vo$ElBR6`SysT#+YEZ@30=5z`%D^$YAe z+%nS)uz9-20U$yugdH##dFfVg!V& z@D&aOF2$8ye$smB*2_+5abZspFbv7#U@Bal{wHK22ZE|9(QL7XPE2oA ztIQG$xP`CPe!q+H>WX(vIF#08sI?Z4mS*iCd#a*q!-hY(SB~*db?-Df4u=vv#@whg zFtDC&HgLwIz0nK~bTZ0xih2>-S_+wpwf5hxI!_o@KmzSMxOLHfC+9Kdc^59<%a;I4 zO<=4HV4mx*NTm}kp;jGdf;%mSQ|(ZI!LwX_!4RF#Ztk)4$d!NNe^T%gJ;E(e(Q2m6}aIreO9#({fZ z{``Rto`t;fI9Nbb3%Gl^XHzG=34C*p_TPKjm+S(0>X5)wG6R0V3vA2qKVEu5l)8qq zqWCfxg(2Flm*o#!q2mN?5cDU&RslqG&w(!ufF;$^A%cUxH6}8^=^{U{6T@NvcMf-` z4#lIF`)4tvj)^f7VlB1`Jdnu)FmsQ??iV!T80(&JxmVr}v@dQz`gp|eL4?wmKv%3O$|pvpBgWddU?8(+59sFsPev-akR9A{UPDrX@hLY6D}T2aNdUmb*Z)x-t9M6pYL=flE@C+xc6eFXuaKP_Ddrd=wHV zqXTD$)nlO|IW{JjJN0Hg13uh@O1Tg*3EvUn4WW89G<8a7JryZNm#o;O^->IMAYi`0 zv4K+Zzmu)Z&ffA4LEP6n-DSBp_xzs!c2Al?Q&U;zLY)SwtiFZXG z(;06=vDhM&t7W7;39-T6;**VW1V~*W-!ssI5nP*9QGm_`s3PK#K;8C7kBi2uG`lkZ zf&=4XjA$&a^w>-HfBs7KqX6+|`pdMuhU+#1MDbD-n7asn- z9wQdl`5%F?>0H0(-TRaWF>3DC-j_jBdu441HXRxr4a_XiSB%6TsMXSXA$%| zpbKJo8&bhs#iHtV`_fcz_!i3R#nS1^pFaB1J-GJb_`Q9f_HT66L zqsBP6X-}Kcp6YnyZrBCB5ZYHwLcV$|KxK(zlD@aHS-FGyj$Fs3_i?v;2f!8W0!IdRf$s|f- zkhK36SILE;_Gx5D#+R>BrG2!UHQr^oBR6(7`j`7(OQCbv993dipgLgX9%32`T2Jc| zp?&r=TkLVr>K#pPGBVD2%^PezL3I`@7oo2Hzkl|tA6AXCMlC+`nepA~QW&>$Cv|yX zEF-4s4i{kMqSyf$FS{NOn{R~zXgyv_3wMJd&hE?v0+`y1O;c`lIw*9f_wnD&;f2qn z^X(@0ITn6aUtm0ZnjHh+z}A#Qbtrs^bqs6;)~#^zsn+RJ#xWfG%?jTnEibIKm&&}X^qI>%6yU=w5oGYU9a^0(Wbt%>swwlH-7 zC-z5gP?avBor$h@svA{tXPE(}8XNd@R(^>y-AUqgA`k!BMvq&s-VVMP61Ln>5n|%yIE{ ziwn1O!esSs%qgw+uXYVc7+f6TG7>=3AfqLF5W?lg%MBbdshE>I2cVY9908J4p!faN z-N6jwn6GmpkDdw{v8NPvdYpz{GT6nP`GbHQ_n<0vH>>*>TESX#HZj@*X}^(q__Um0 z#?t6qRq0jB)FK@TXqJe?MsED@k3F?=fVCXbo9B;h=yHcB9gkg)OwNYZWm)Ph=XvNM zJ6EGNVvmKMN$YqKZxqgLymkRd`@T=$zyIKeJdN;WJ&3`2-06hB2>)=4rL?1XS z#WV@FP%z5i@dD9(mS*jtg{j?zTo{lC;;R9k3gFs+a!_tlZEB_mdrHn!uHDMS(w1TPGTt!(C7_yXvv8+wD`1JE+FuHx0Zc}~*r7c;44M@b zo55}Ys4_bIV1G0>r2YMw&66ke&Ff-Dqz;oYgIdD$P9>eR<#}+Q-Jl6xB*2wwriY=% zqn7!k{ae50bPrTO7unPm136a}mfy@haC?9W6f^-w?=OK$L8dFuc~0uCpidPl=J`?X;g4lNiW-+O;3M3X~~u1^_rk_YSOI zzAc!wQR4?TcJ=;FUJf`}xS~A9%mO;t{#-=w713;pWfGjRg;eE-#u$t`y4ylW0*mWC zB|O|Eaa8-164bJ4Mo;@i`=ADB$Dx`99SP`oYpkIY0ES?Qu2DXZa-rLRAm(@w$f%s5 zebiz7Y*3Z!XSZ;_dOH|1FB}xTwgK*6P|n0q_q4TWj|`WpgsjXdb>U#E2Ty*|t!jpA zWyEuRD!>Ooo-F~Xj4)6MGB}NKujjiKYwu-?M=;&O)@h?Ss=B z%FEE$zyOt@Tbx`4ahp|}2lXmGDVbe%Z@OOp{?j}J;MVnZ{TmEQkS^kIOBi_v?3uK# z+lN6&>{-@f=&sI{Aq;%?E%kcslNGusJ$J=j2cH51+;_NhujXC@lScck5O4e%7jG{D zmslUef4}3|c)D}5#ZRrU&%&V`k;i_^e4YeF@{Yud2%MSxCyfW-RR`C;b3k7K6)~q; zAaoPX9*M;>+r2SjZaG(Eg~pArc>eej7$eH*V)_g>3h-@^Ui%J+$r=+|j!`5?z##by zX?GL5^)z#No#pz;Z@}{VV^$y*H$t;)taPBLH!g&E7|cCbiq41?{FA%C=GCh{dcvof zy@THDFXTePK%W2p*h3H-Duto;G2+3Xju;Q-z~AnF9UNea2)13=K)9p?zWd=0^`23M z<7rR;b3WJykILYKhayA~zQ^XW7@!Nf__TQz>ME1wpYh%gD~}t^#|Ht&2OSvr9$BKwS+yBB`65?)!sVWWW-~SgPvpJvAqBu ztny)I%;u*rf-~d`bVDo13$-?fpBJgDG8j}|3*{}O2QbO7-OEEyYPECmWKe$2!U!R+^tt6 z5B&#>zyC%Ak6~3#_Ves1paT$)%>9+-F@LtjqJ#{DmqIWAKtSw;Uzarv4)G|SN_)t@ zEka#30+tXS1!7#BRO8w`hXL~rILC4ZN<@Hv`n^W*ZS5;HVyye-C*`8WsjRkP$h%2} ziC$>{%@}ssy#;%{7C??Sk=T+BcUVW9W*1^ptI=>ntM)oJyGM&WGf7 z9BAVt>*m5!Vxv!)vB3MUMofve6ru7Wc$lxgc01Ykd8pQ|izA2s*W0gPq;6=?ZafgC z{X`qoanK*00Rzm{U-Pv<$I7twEd!`M0~Q?v_VsUNia|LzDgZHpZwG0gu!NTFusN|d zwJ#$;wt!ST%uMQ|Y{Edm7#4D_<=Y3qxdnlprNPaWF5lFCceqgO<{sX!c$LUHzFh&T zMAVl3b1!D!ZZS=n!r9&Avq&9 z;oPy>?@bjKSo~zNOGIvh$UpofMwEZxL0l?>A{cULP}oj^dTxwsERF)Bi-2KJ^?nj> zMB0yLK%P(?RMjz8$AB$s52m`YpMKuXSfEnc?DtIwSWf03+&~K?Y zNLCKyg@LBiBKIM>7@ywC`r$vmsW&jk8o7b6GO!c+zz`Q>$*w!kdH$}zv;jzf!}q`E zRKRQloGv~P#w#DkM~|d4TXqkBZ8{+P<{NCGCmL(KTZ|3eP~Ab5pco^Vpe5E&#|sDX zo*6J37_#Vl@g1lvZn|lpo*DD$BTT}B)9*fB4oNrPc&TaW@CmdZzYN2w513#YLZu8- z%PLk2244U_=S724G>?x3RWvt=7ILJ^fLVTUrM2rE$5zLOiIKEUYz~s-~Uwk z*gZRT>HL$t8^^Ox3YhiXnRXfQt%F)1PZPhm^tVS}yZA)u0pkJCb4#H1%Ws39R>6Y0 zk<@G)gIwnsfK4Waa(!Y4^aH;G?GMrgjnQin7)Q5(nLwTivw@vW3|yCMf|0kmuAU&C zm`AyRdO<8pE>U~?eyWB`SO*z=|Mc@mt9PL#aAg25t1V<0iuUOau}6xawI9ULB%hvE zUg%Q(NrZJ4#FGGXAYRy&t``{3LY8Zfy_pLujNz$xj!BtK$TIUx+cK)$9AznN?58BO zZ~3J#v4G%r?-WHis|45>D+Xs80&K&KiUYH{sI~4+Q$`OgqaIwPpl7onIq8glLH(be z`QeBs--U5`g83*zU1C)n2JMUsSK?MnO%S^Vxmfq#UU&^M+{9D_&V+-RJhoWiAM?aO3 zgCA6vcmMg8yV#i2nhf=ebZ;!vz%VWcR!3+b?K^E@8yW_=f>!?W`1AXvSv;iT%a>V* zr$GPb_J6$_0vKg%=Cm*Gc$y5*>%`7VSM@^oZHN_ISFJr+9GcoPE2jm-^aHp^6^x7; zF{w3=V3c(IdHOhACX}}@piid{#Hs?0LC&P5+bxG41Q@{nBN8<-0Ei%rL6lo_f#s`ODh>&A|W^?TZ9&aA*aGZ&K1~BhXTcwBifcvdV}sTmAlTDq)&jWRBwAb^P!Mknkp^JJX)^ZoaM1AQ9-F;$UC z^kX?_g?Sha60mbD`)Yq&C1v7qOd|i(ftn#to=CIU{oo?ZNG$orD;s%Sz_6m!`QTfMZSovm&?`b0gRX z-vi@S%%Fj}Q)*K*oTXDz2XmRb)I@-PE|ej|ag=x%a2L%o$4JZ%fK6G!wn2NQ{ zXo!mea_hlLL7{WY;NhVB(_{-^OY>krMXkt?Zy!ug;H!Cax&AyWKrH|oJ+SNk$?raV z2#N#cqIG?97ZfgDz^hLildG77zWtN7VFrv%i5U&dC7+4nS^#=pV1S4hH6veSTv7wm z@A4Z=dJE|25{&x)e*8sVHxRVVv#)_{g+Ac#KhIl%1Dx=dQH8^}#f;%ahq~xSKt(TP zcQ!T-!$JlyQAIbE6)EV3Xydx$*}H(HtB=I56?t*d{XCq9Zd~~na4%5p*UvWGI|EjVJHZO7!1-L5MX3#o#IAaTF-K|gCOM&?Tf|5doT!C{&USL`MWSU zTLP8?YVm4JfpFlx-?~B1WD*0NRqKwKqNOqA0Tw|hv#oq?r(;MCD9o&LN$iLy!f10x zOw$m73%TIz7j1@OmhH8BqrijgTm)N)3uxi1?}GCl5(@%!m!A%S;7d)QVbB8T{|Awn zd;e*$sbHo%a{ves;o$v;k9>foAboQ@ItWT>h1#qf#^}w1tm}V$;;!P_@kA!}S^+t5 zy79{g_L`Y`bK_uX+S7{02eTSk6ZBlhyN`ei7)9>U0cHho0#p@hbC_cmMWvhQGzYjm zfC;iY3}#o+h-&XL?y>aKK?2`P&m=_7O!dmBn)Pt*fPn&bMXY@LhA0j`0L=+>7Szmu z0^uwVMny1G?%%h`1pqt@n3!)lyT)!i&3?p2!AhSCm>RIWd&e-;ux&b!>7NGT0V;t_ z)Ah=a+E2iHVg{%_&5#vbe|7w39hVg_5keH1FIl#XL8)6yb%mELLpHVFHTUoqdS)k1in_G4~mD-!m4bvbHl zN9&=>$3P6!+|2*|BD*i%=aWFSn2%4pDx!`QpU@{13>g{G3X}=A;=5L~xCb?q31mfkB^1*l} zz!}6`SerE!GT+zpF8r`LWqNE;)g(*+{ptWi4s43xxvDl9?}ZQF0Pmv)3SOk&cxr%Q zqfz@YQXP~j?en5D(CEi$(B5=%0>d7ckqhqIk)u7HB_$xe97FmK;AVi*DzM-h88EL7 zxEbD{kE3G)BW{V59M;ok;+D9e%}wLQ+aZDB=(>X9;4NtMrJLH*7V8CI61k*)@vP1l z%HB$-_6uu!(7PCd>A0QgK}cXb-(3`^bhnKNQEMTJR9D!6P6Bx924?fdsxgGE2*_v! zJGs6UJiZmAedb;jS0KzPk)dhdhK8K<06WYT+UcD_P^SS*pi-6A&$e~xCdI6hb(6ip0Tw(^ zPrnJc5`kS^o2^BAh}poGcPBw-*z@KZmW+hUrrIG=^$&WmUt z3vrRdSiL!h$uru|%K8pt#2nKx`;~6dpMa*n{5m(PeUQau)X~w-F0RZ@U3#BRr&}`g z8MN=c(Bu)>(9Whi)H55e((wIXhPlKsWg9@ih3|*v(pMK>1^eJWOEp9!?@Pdk4<)l4 zhCX}^ys^T4?&81nI~jQ5A{D9+U&r8+r>x+f=BB&^?V>Y@7&>t6*>>o>A_=(uqFIzi zWoW_B{@&eYm3Cjh&guZVL9SI?0ejjV+iNdcfno?SH^OUW<>+S9XH=(_*@^qsur z0N$YZzdZM&v4Pb;Kl5;fht&+j9>^60Yz(Nbv6D)#GRFlg(>mi{p8Mq&Z_%}aR28sJ zzBV6p@w=rNh z3fUYAFVU$COmRIopTj5|NBV(d#B51lok`&id7)fT8FN4OgI|Jw@__cVUufC~;Z~ur zd#iNkHP~7^K>{9N^kBkN8dZRx4{XXTcne=HSWnMb4dt-KSmH2VdX1e}dyp8ILZu7IhLjG*?CT;j!y0k!{t|sSdM9PKHw)+1kx_Og%QgJ`0RUNHy;4A$1m`1 zqOuPfu$+74Um;dNKKhzbHdKIT{^ZG{_=^>s4QEY8J2!sH;sMV81}sJZHIB2S4G~=r#vbBFk8LIdkLPhnVVs zUa!gtx@pEy9tQza$w7R> z*k)lwBE-gy1hDt;y1gJCdZ%%a-IpTbUyN7C9m+!+6pnLnyzsWh~p95xF3QwK@S_Y{oI2S`_U;d1q2~12a zbXSSo&eM0t$B~187SQr6nD(r4I^^&6xOPUD*B8tPtK@|y`10{}C~crrkX?+{(&P#* zkee4Ix;WH1?Uy>1Ft)ga6_sTacvU#&L}6q@TG?l&x6iQT``ox9K+lT-Wvg@*OGK54 zGgR&YFiuVJ?&C@K4}+MpHK0IO<~ZP^?uB7o18}fS$8mB1C5PJM2z zN?o>&92e)D5=b5gu==^t22in+a!GiI#men*O$;EQKVY+ABJPBM(e;I2{|sDvSU4om z)v#z5%?gnc3Z^d14bCR2?Ll7z0o-TesPjxIouzyPt(td4uF(SoF#mQ(C)~Oqbz;(o z^i|j7ox~t+Navamlu;JJ49x+pw}Vao^#>2~`hx4fWzzsy>pNsTP{1|R#AKC0SbEvw zC;#^S7r0))pNFxkoD6iS7yY5*_HDyp0Qcz+Vx)i(5M4BI7OaCFoIg7hGR|Ik3gkd$ zon@X*2h@I`@d|>Z3e_l5F=neNV9lO?9gGomtz^eBef%0X$X)`>Fr$EcP!K3yhSX-; zwZFt46&XVk?GvL*E6lxB*^1>m(1OBEoLaIS;UmISJ%3m^Kh| z1gM%5nYbr1`sn@=*2z=d_?}zM(dJdVW<34@UcN?HWDb7 z$27#UE7=Ub{vc$~hfm9a+}4$Q=&b%uu`ndwIbooDkr_BBjpI?){lOMp}Hh< zA`Y}=p^Xg!7&f^xP3Ut5X~q)D)9!0Oqp`uLy6-a81bM0S6w@e!8w7$9jQiFOC@C@? zaDr@LMeK-SR`r3ruYNh_CnoSnn^!8+59p`{W0xwS6OO!t!5r7vQ2<7A;#oa2z-kyn zZlX-(64b<$8;?T(`}Y1?2vtYi9K+hbqTlc10GJU0J^`BKE(LiL(NPiGIT)y=@@fL@ zk?S!mNP+gn`7U0+oIa(G%nhv2WRPnvn3Fdc5Fmo<75KQ8XF{VvC2I*Cj_ORygmwzX*p3=u@>MC<%~>mYdw*f+7p@Uq5JU!&VB=SS4Ibj;K9JB zFNp*2sBU_$bOA~~=tQ^nnEB|Bp6v>kY4Ajbk(tgaR+ogv*XM((Y#F>qa1r$V zG?#rG8}!O_(YYX1$H(U!dJ~uInh~i_ZFATP|M)~y)hV9y0CeS5#{`tmU&`oRuGOy= zw!5*wRpJ+#=er$+Yrp-+J70{U=rWs$EUja5c5Rt%}L;X20fU67O$pOA6 z3}%^aPFI4vz4s=oSKn~+%@}64o>_}YFr%V9+n>$CX3MLK$!q9>TG+rvZSXSLonRqzOfHu?Fn4=M zl=cUnbBRogp2)Rp--TRmNdgDxV_q&~mzNj}u{(LG%4H*=yDYm|UPDFu8$~LI+F_eX z+oXT$jkDTsnm~=#uhwXv*wfQz0E;4NA(cl19fg@iQKIT|+j-gs?aP&%-ipkT8SN4L zP;D{ffHbONQ*o03#Ar9H@hsa?UK&ejnD29qNF6gv(M( z;5Hctc1rFG;ETTeeoY62@}$_K*hHeexPCyd8W0cBJ}^Qr&;w^f8%-f8+*i?B7;QmI zgBKoEXJUSjdV&EA^K^JzXf!*Rj^(Z`QYeYYcki@NCvo_775-_%j0;dC;ESxt?#|;soHbZUuLyO(hE* zlFC|$ZFkfDr3e)`{qL_nAzCOS6wP;ehKxqW88FR?1m{WvY`QsKllzEfQUPDx3by;T zIteoj;41Q1N)B+*z>>qz8mcB$FRFOoUFwgxni1;+RYuK#!f3NIStutAwN z4R$-mJ!}QsI52544wxpHg_chr7ZW3+eIk~Da-d$csnPw9-i$U+^vlpc!Er#bXoYL- zsdNi(LVh{DmXlhm=c3n|f(_RnV%E01r-B1E5k(g5*_+&T1gn*)b@jP1z3HRd3e-9$ zdh5B-<4}&URV;;?`{<>-fsoNeOQ9U|)z9ouc1)@7Kds(LV5oeV(g(fRveL&30ig}y zp%c9630NgPy%FH_3rmY#p-FrGr+cE2u?JKN4arEjM<`@!bcc-ShG}}UY5i#Jdl<9- z3AVRH)_(LPuL>}uQ_Vr(bpON_le?YkR9Vgj3GhOI&w)jhToDCaoWA13tlC+mVJD;u zrl`*!ZmEJ~leQSYx!;d#8}#A+(z!y8c;#SFf&Rc)TkldU=GL4K`Ig7l3#Qx$ji;aG z3jlVAiSXXYz9s=xC(F|3^mm1Yt`63f2!gR(lX@!>mhhGHI4kR)y1e*ilY8@CK{!jaX>K>|~__hr& zfLtT!MYaZ@6Lj_uFMyx&@<062!V-@z9Vk+{e-tH{*``^UG{%;KF$g~Nk=v1@m-WFg z2vV2-{`qqGE(4fwPhaqivjbgk1FPBSKIEzrDVW+z;= zBjuvx`Jffd(3|QAX#VS$9^{GNdjkvzq00fLSt%ENg03z+{79bR97g^Zo&a~RJ^u{E z9!UF9EJ!=3926Pm!sFD9gD!Pb&Q5?XC>6m~XD;ithu;@>TzI_Tqn~%cbaFS02{you zv1I}gU%j!(cl`m$hYzI_dyI%I5s}JE+UKz^-zmm%ZmO{!EMQP9!i#JoncmJIw}4^r zz&){ghw&8v{TE!2}z$m5zeVgFgPb_P)icE8>}p z7bXfJ1gRqEoxVBku@J*z34qXk(JLatxjbC`1BtiZ03OR*8W&+zn}-Uhlw$w5{v9z1 zx0ge@23>uF)fK>2!xw+^4j3@NZ2_$!z)j2Tfe`BC8&La;WRji&_CeR~5nXt|{y9;Y z`prIN$LE+!Di_3DVN8e8aPv2(b%uFpY#YF^h!Kddzfb3FWT>hvk1OYjfzTw8Z82ZI zBARf&1m<)(D8lXz?&F(cWpLW{U;?%F0*66eZ&D05-cDVH#)Yzj3#?p*pnxkl85OZa ze+amXtFL8)U;L&2yq$>-c!IQN4N=#MpIut}ij6`LE{KP%}-fsg;Z_Bj%(p?8Vf1pKt`ZRy-tGHxKN%L$o?g!uAS8#rsk)uWY8 z%>X&Ta0(bVzU3D%p$v42Dk>kS9wr*eJXB7Ev>KS0EFd#z&VvbnFLt?BJ!5svgq_eeO z#1LaBb1B%ZIZV$=D~|zFi&C*@*BknDzT6_9lAG5CnD%bnU}qSPnTn7B2&dM$AigJ9 z=Gt$5AMB4WfO+vfBi+Th4(2HP1;axlcP7wsL`U17?|BluRLsGdBI$L;7|=e=*e5!N zyI?+SaX?rt6Q?G->LdruEr22SyZ)q?k5#{8W$XcOSGx|v>KVw**bg7C!dEbleb0iu z%LA1w={l z8R*ua5&awlFnz#!7^I(>Sqv7iu4lx6=p;YoW(>;3R%6v?+jY5>Zp;wxRxrAdJ_UT; z*iL{-?t2sDZ01@gKuPs%5s{(XZ6rv*f6y#DMm>6i!OHVxfn2T5Di)6Ue^!i(Je-Sn zU|%#A0l?4!1?-0ojIr>W798UVj?+fy@OCjWr-4O(m3LlQDnN{*T9&iTnQ0AZ4~-au z;>~>vmY6CIlrT;DR%G1a)B?pnZwlPb-3PGhO7*p?R=wdY)c-Gd>uj^v9>J`OM^xmr z92IWxF*B;6GUPIYGDgln#vRmw%-RRLWwIXP@NX}nI(ld~d03{70-cpZ$8beSz1&~< zT(=xTPdBgSg1hiy-6@UkrwuGGm5!ZI1!^t4f1YwOi!Baf2IL7E|M)?0cB{tfGUpq= zTi5j3h4C_NEQA9P-+06^rD+9t<2rTq!A6MxdB-~m?7zF&T^D}K%;it*IIMlmnO z^#N-l%n)=2-M}7Amz~o7lPd+9pnObw<{Ac(PQ%#_vnbpT)5**jH;stV!QXoas^R>d zR)|pJlGrUpsg46yR1ycXWdSN*We|4p`%rQ~r^LW8Xuks}!`5*I9pDat*re&)WF`{O z2P%w+@i!&Ltw3cs{haug=7Znq0&)_ea1ogxfnEn0>llh+f}mfmS)*d`{^|u$z+=;z z!LR;wOf7=xRg_k`1K|X6pvj>@Nz?H<=`&2|z%H=dxzGvYCr@Y}MZ_@Q2F5ObroH=P zZ67M5VN$vK*{#q8F%Sig(O({X-Tm{sYcOUk+_)Yf*H`-!HnjI%0%QNF@MD<687xNm z`lDdHO#<|PAc$uXxK%jRPhWxR6i`_NF`d?u2f@%sYpwn8co^8hkCuf2&@`N@F0s78 z&40tt0*y>4?Lmx?r$HGh(H7O3o7f3?mGTC#y^M;aiFjTcSgZ*x+M%xsPv*tz&Z+JyG;+m3p=l%4U$OMmBsSeOK?P+$(keI*skxWI!+ssM5A8vEE~&XKMu*ujPAjN=Xqg4ZA{zbZ8SZ`?lpmsedhM=YTs8XS#HViTeTEeJ$BJ|MC3YT&${GX!Ly(2q;}(Cb4yFX40c> zlc^J!uikO5JWw8*?W@q4VJr&cnQB46dp`h6S^1W?sbDerG;oE!~rW-#UnKzBBzfvK~x^`wJ<_n+f} zyGPjCyFs6_5E&)9Xg{ncivCV2WJc7Ut<}D#N6$uS@BE+u2{W#27ny&1@-Y@+OL#ET z5(rFEWn|*nf#tyBB&J0>h<*g}K#UHsy#}TOS(bTm16Sxd3AVcgrUwDN!A@Mg;EL)R z7`gFM+JE&!8oa@r)qMggz?3N21#@}-HdoiKytB!dp1_Eq1L(#jvP5M#{Oq+%pZnu2 zP)suT;zy0%+JBy7cteX?BeYW>zP4%u%nD+z0;|OgOgSilUh(e-W3km5RD!ZhCz*6- zqrg6Y%>%h?R3ixW2&BU5Mu_spHSsuqnl^85t`x*G+7TEG>?avyHBSxGzLQ0=YzddUf}sf+jbrivZhn|5H@DTkgLsX5iF{Ugfk zbNC;C6V;h=2sndt98p?M(gna8vvioXW}4SN#OSO2kp?2Taj&+t|o;}zJC5*&wUHv){z4Pv4v zT+Zm-VA@GkI$_U%k4RZXl2phiTw2nSbT$C&k+)=K4u-YhgTg|= z1b?^}GRs{CDV<)Y^BdUX03NsmVjw(0>=}ZcqnA5u4ba%y9WdQ|g}I_C>}0`8XF1Qr z?RUh7ssz_QFf^7cFG@HnKRQS)L*^X(jA-RsS=rFknpC2>`;Idk?d9)11mU8ZbZnff z-AOMm6K=i1d0keH3|TmHL89mH)5tgp{@bsg$*pLO!yqdhY;s(u?vbuMeJN1KJ-RR~?&++|a_@8=WCa1qAf90z zWbTnjBVN@l}76#$A0`Jdm^Ze=-ISibecb#zzr|WDUhfg+$?)K<9|8#1x z8{J*4eSw(!>8b|nd++6BTcLCO;bQ~ddzxO+dC-RkI>VK>-sAe~K_=Zf@B$`Y2neuk zvUjGYfU$!E%#d=BlMKBe#`;C4YZ*TWyquvXgvofK3-aB!!A|m=2Ox&|Bxs|%&L5(F zj)#n|Fm(Zjr@Kytz!0iq7xU0<8^bb+6ww5snpbkYMQq>PDUxM= z>8)l@CJXTO-C*3Qi;ThfUi*W4bcT2)7C^BF;&p&ThK{z3_J++JLs>h01T;)|N9{3n z1XX3+<#tU_Vu{1XiUFbnM2>U0NA;|B4O=;gZl*_+2LmIm80>~dx8TIqMaFnREJ!COl%C=#b1JHzaq$Yx-Ns36U-((^OWfVa0|ttWRP-& zSGKVYBksJj?7|}uq29axTz-d*neMd!=D;qG6X>)bI6sBK;r~RZEnz@ky9TJR%8_Rq zM1pg3d=nCq;4o>=e#fXA)Da`*)lre#EV~J&S`CQH(N$@Wx>d))062|tUp%dV=U(GN z8Aj zjr*qflu`8V>DLy_Is^*W!^{=VAN@q9|9|Lu3+~9SGhMipQ}e9yDr z-A8TD%v#S2d!KVQymU&Xs#7%`Xx3+VaHNY*{D0s1`b|*c88n_A+`Qw}hglGN>|O)? zm%hmvfR;MmxI7(TK23=yq|=2v>Z;i-I~K`VF7Q=_KnE{3-cCUbagKebCV=>mYUvS{nots@WZF-rA@=-`giVEV5MMpVux zf8b1eCif-Nv6I{~FVNTbjlF#*TIxUNb|?Tn3xt4<7x+i_GVFn_4X}EL4oEJMMa7cl zFt-IjVa7ALTe(B-bPB}jwczUYzMy$@bCIk73|2?&hkpz=sekW!_qi~_ExdnH6XxcSUs1~f!2Jv`bEkis3QZM9VlKES?T3x;#dNPB2NPb zc;}{0AD`}PdGjI2vUM;6SH1~#yHPz!g*iP#W6;ikuaAR!59a(pExS*%jI;12fCOF; zA>7hJ)d$aTquOH|{V`Qu&Z`f7bi15aIdpo3>7+is4e6HA@x`x?ikLHf7M;oTd9as9JR41sztS8UE^{x(-Cqpz3oB#ZX@QDcBIG6ZGfXzpg$6 z#OCM;P6(7;{-deu?@xSRz4@}jP16ebx>EPcN%|!R8kHcwa5oQ#i{Io742!A?FdzrS zz;kdzq^hP7&6Ze75DQp z1GJ>6UYbr`wRRLFXu0bn5aFVJ{+!4)h%=2@;4PquuJMMTVoqYREP{W`v(7MThc7$? zUf32e0}-{!h_IT~H{ndZ(7jy~2I&G_t+dxVJDDRKxNRz92*SPCPu0K4SZ4F^Yd`W> zDK5&kWcHyo0OHI6b6^u710h4&ewKW7{erGpM*f&rf1zJ9(LBZE88=?uWJFEUZYCZ~Gs7HRm=@H5;oK!b92 zMm=9*&;+B5H1!pcaVS8AddlR7zs~U-FGQ0Ck;U);1SI|Kp_@c&V^9Z7Ze>BdcDwX} z^V}OTi3Zou^TF>pl%N2@tmB;q^I=*0`-6{i38O4Cyo&B9Fpq_EwY_Y3Z!1e)c(9f` z{EUB#dos4BY$YswJ=bo1?S9C85U>o&4pG0e6$iD8)?vXifnL5dY{+vS3NTQbW6mh1 z?LDNUmF@z@MlRjrxjkv7;Tf3#uMJ5J4R%QyFKzGE0#+Y1mH=xTaH=@@%S1Lyg-o;WyYXW{ERtgKt98h1q zeT4$> zP*^azO8f5hFQcED9h4KMApCs5=srClXPKhMNrF#)200!bmbMkZnb(S|UcC#_{jFa# z4{F2p4Kp<9Cv84xssQv2K?9u0r#w3J=Frp@q5*(YJIuohu0)V0q5)$5bmw?r=qk_r z?2po&0l}&Y%e7bNko;=pf2yDsn*z4x&mN9 zHNZknZzs<#wHcj@;RlA!@C5Ygs-@Kc@$WZ1l`%L%0|1_Vs}rGXC$m__7ON&UnIi$} zFL5X|L5LoJbFG5}Ohm!n%D$mP(e_Y@W5sW9hV4#>pOAMc5o# z^qbkdoCT3{mWg;0WT1!616n{8N$T<2?wx;m_}P;?%mVfr2!nR2m%Jddo{oqeE^M5p zb&j1L;N4Q-QL|;}p~0duBwR%uX60#Pww`6U00CM0tl}@ZnsH$*VZi-Q7{h_B9KO2X znA{oz>WzD8)KBgNJI+u&#uWpJ0rZaGG{jk!6%QJ_bv8RjN8zV8qs@?i`Qc9=SlwIN zPJs?wd^CtQpJRCO)J6~|1DrbEW6n$4qZcxWW~B>(O^&x$+Rt0C*&~CiX6iF1953DG z6?XjzHnFeV8JNu70O1+IMU0eUn@50OOg%K(xoYC#cX+?Cg6eX8jzi?8f-zWWsJFf! z?8;qDS0}&seMmvZxm$r+WxdQ8*AZF7q}b%$p#MXNkKh9H{eoR^;Spy?(-f|-PWfA}#`b7>9wX^{nk z#kc_k1c5R@+%+vr_Xx@%XjLFn+r<6SoeV#B8gwr8<(nWT2h=aDLu)sKMQW>i&Fbt~ z>Bv&Q3cB^h13Vi9utsT@awvhDUvNuKZGkmaeHR>kc97Yg(*lvV#frlarF~e(Pk#0y zxL{aBR(oPK^UeukIRqM;bsNH6x(cczCPV|z(G=&AD}6hz<($R*?)Rl_@bge;`BsX!c+BQd5wt)ck>vxdJZgk_^ zk*y2qmy+-iKlTH`D;1(F6+(8@=w-e78yahGheZKMnP`jNdz^H+L-38Hf#nWg8O#)8+GoOTe)8P|{q zVjeE6G6Z&I{q8kIw#P{aRAl|Mom_Vw88xu z1f%6ez^oGg)ACKL~9RrMTn@j69&;JUtX^=>VoBB{V-2l+m+aq3I`~)%& z#A$PA_qhzP>0{+dEs$4k;%0h404f^Nh# z8obtLMLkx2)oP0S=*b~;OzV;BH(b%G0eP6(2ZA7hGIq_1K9x`eg)!|D3ud)+wtICp zL8GtYKtt(K-~pZg_{Fb0pa4#0AfQdT0Ci|2{scsng;ym^%=64QZw1pqU=BO9WNY92 z<(VhB)z=^J1ZPNEhTT|t0lg-M5`(7O$tB&0R8x)mIgEaEW}R9CkCDTpA3p_!D+Pu` z(1FYo!J5fX&$pb1ZYxjFsmGejg&*56PO*y?9uC=Q^d8gp=g5E#yAFB*7;dK9=|Q>< z&=KN&*8Tmjp~)%A1LCGxtA;>UkS+z#TGcl~p)Bi#Ui@0czul&ucZtrU9P&!hI;%UN zof5`*Q$fMiLF*1082IbYZU$%M0r>+Wg-ZsyCkpixuXlT#1rN4L=K`KupDp$!4`Q)G}6LtN&yhu?md z=fsYKRe~JD|9I{PzPX$Zh)4wEwC4(9@=i{c1vw+u0?~AF-EDwq1ZBqBhn!v;Z+@FG z_U)fW3n92Z+2(UKyO@isHSmL@oPBQR-=^?PId~p)hU$ey* z6$W1Ut`3fAzJ5p=8(%sh$CgAyaT5mWx`&q0V0}BR!- ze((Pvr}C&6pd+%Ziv|QPJt{J`<}8Qhq=3E=LDN-2Z^2PRw=;CjAVGnMOo-YeXN{ss zM=+##?)t|MoZ?X?3UG2fCSYlu2kf9&om6rRJPI_#*aB(}$5{PKtPFC2N7oEz<)uIl zBO5r^Q2g>wo7|xtSs~X;FOP9oe+br<0!Byc>T~@OJF{~&bOdK+4(yha4ARPI^VKCVvGzF1-uVwXcV5LvuTVrG&MWgN%ZJeon%^aJ|!5yBy$}0%8Wi zdup8E^v=dQbT+4r!R+n50bfdGb%NmTH+pJSdfO$A&xi^J02 z?|wYd;e7k%nCu$5DMt6xoxu6TsP`V$cB*mNvs9=jtnA~69{M~7@h$GuOTF|Mn(-fh zjo}J}6mb6`y2<-LP~LtB?Chv56oPwUZq$x*#iK`aqZRPkQ{X_k2%bwf z2>Ro5N`qaYTcoXnee4Wt4@3CXN5SF-=U@BAJZA+skyfGEuiS1w2|2<@(Ds7HmZK32 zI3Xg^HdqBM4&;!YRA-=t%TaG;&}j4%K%)TMt{bx;^mu;#zVuZ1&lPg?+E>bVY3CKLMRArhn; zTw4MfO~#G8FsB1S24*Av{^Sp<)F;-_*PkZ`MtvRmb=HA2Ci)Jmgf$?BGr#eS90%{I zp6PFeobdDwVCC_tkwe3at}D<67?-TFInphBaPqRU$Y_u(AXDd^@Zhd|sFEe4E@ zL|yqUBv%VW(i;Nx*8|idX;y@uR{w~hi^f1hr_bpjirX04bZQG|3j}b9Rr%~Jj-(12 z-8~m$KLcfHeM)_dfZJ^2mH`$S^?4>~f-_{eswR+m0j!V9rIslE$1zUA-X6y=9MQAJ3EFV?6Jf;(n@9g9)lX(L$qkz*i|4F*= zWLe@gMBF-u*xKV3?I6zv+RZ?$b;i(#c%%gM&duC1SL~#hfuV7c0hE5AWoZi!%i#VC zt`Ak9%eyLia)#bbD#uMYnvph4nUzymQm*_nSY-$|xPI-QSWJ>?QYMxl)rV@U*Lc0Q z(P}QOT|QCcOojv^IRXP>zj|tL2$FeffcB{}ft{Bw-wDX25ng-Yhw7I_p$+x#)u~^4 zflkkKfCLPvHlN;WKY;A_`sk;|0a0ja0apn4Z- zpV!eBUN0Sy*FQUAoI`M(jIA$dC#z2_wzidt0_*K>O(yXI{*62bKrv5 z>Z1jqC&Hq;9Il*;~ z!6cyjftWY$5v7Z6@&Uzxu0Au}9tp|F%IIM5bK{BXw{qIDq3+~!@+O{J$9jLXYBY3) zHS!JstaAOp$B%;5^{C(1+3Zmt$wY_q=+cT;evgiD2EA#%$_mjn$)hvs-%gx%xH>## zewDQ#!^^U?&}4?D&Ez_FOg;XDwke3ThCu+iAZ>zIxKVb0@?9`sQbYpdxKMQPAwz?5 zY%C_%&CVzavjtRXd)FNK(oI|bli$fzbfRDwLKnC2Qw z&J1*LhX9jKyN%JGUlQmHt{mcC25H+i5a$HakAr2MO91D(e1e0(y#v7jU6`OHfto>e zG{9H|7_g&H<3_Xv`sIkh)jz&@m@&usIc;Mjm|l2*uC3?+xaJvAt0Brj4VinZ5ZpcB zx6DFffG+N~dn~i?vM@D_Fu{NYy*;RBcfh(q{smwHhCbj!H{`YladG-J1hnZrW&)7G z;A36_dj2%1d)2fSaLkgW15Vpox|f+gfKM`yzWubcz-gxyS`lD)CAl#)Jwc2R0|kq7 zt1UFGYt&pV#Byc}IQ@1M6^)}n%N#Rbd(YW}hWb7&q}xI<_?p9A&l*rgv*-Zh=#0vpo|etobSOZgenBFwP!S9& zy$Wb!t@IR-UBZj3>x{&lL+N8$(Y^xul0H{j_;{t%i)z=pX9;YcNxtK+eVDdzJ z;W*R@ZIyQJj&gO(BGzkN>_cLyZq zHadBtpp!e>u3t^>rNz69{w>jtC%t}8hp1`k?v|1bx~FgdbO+pK+fg?y~pC9e$vlxR{E!P2)_4Itw^^%bsEybYnYV7ppZncC2qKq zI~ew)(*%*+pCDM9HH)<)oOMq9IErx`3ggCB)b;+&kXf8Yu&i!(+#^p|qJ@I>4xl!I z0QR1(W5(7?N1f;4E6*_t%9^|NDvJJ}`)(=dL)Y>I81uK2i4W{{gIPoe=OOdzCXGYC z07amy&odHLg@D{ihyxFK{rBJ#2Ynm+9#EP%xhn|BC@Rk2?L^RORxjo`yTEZmWYwC; z<6)5FjD;IWy=rBVb-8ipqg}LUY0R+Y#Vu&%3jtzNwoiWLNW`Z$;#g>D6O2=8&Zp3((gR|du|Abz_hV(D-S8aENE zFPCF9NLw>laqSuJzSa+ZG%o$%mpO0x@oMRq7BT6&4@LV&hb=nPztktW$iN!+qw3lF z#cko&Uvu(y0ILg&Emm(d*Fo{h|Kh1{uvxl&;4^-KQcH=e`T&56kZ8Y!kY%L zp^g8}cccx@RAm7cYQXMZai_zeBC z%9XwKJ21UkX!Mr8z#5mr=oh?m6Rk|^WsT|HG7DM>d96(>2*AV}_j~X*HVbM8v7~gR zgE7vF*aBQ!>BiJ!?ltN+>swpV^7Np6ft6H8g=pZ>%tc;)BRoo-bgC|Z=Q5zbd`J09 zw;p9g2Ce$(Ep&hNR4{Fk>SP=pJ8}W-N)rOPXP6Kppn5%XP*E2%5ukOrysP&dcxOSb zgIrXb%PmR{0_WD;K)_OLHh7tbv<}j`q0nZ4Hzn)AK?Zkr& zluw>NqqA$q^zqL-)Nk)?;c&2NiW^GMw(;YPYjRoTTQ7)`z~HH)b%F9Ouol_}V5FSX z6UAE&=nCB$~_N4rs6Q3c-{|S2oWR96~U!e0e9J;}~gY z54J8n47s_pa0&u&|CdLfgTMz}&*njTf~G)?ePH2wB~Zh>n;bU!ZxaMCvYj)BKhkU!T-v2J-7$_6;FVEbT0MS^jJ|X9~ z44p-Fq;5MqPN&EU+EJkRja93z>uiArIl6&~G2e4s754?0%LBk$(jufuHwH4JCRV{1 zM`j%&h1_)t7Zl7`;&feCe*yj#jH;ja>_|1b-~BDrih+&V!NFo^@wsw@`R~EAm_l?S z&;YVm`GTiN2lyvHKP;PLP&CxiTp^$w(D4E=fKC+jk3#MnO;1LLfZH7coi}=TabijB zq;%+b*t7?C)i1eAUrp?8Q(Omh7tl6HeFs*K@usA&iT29zKx-Cc_LQU5UX@G{8^a?x zWF5R^tdVIvm^S3b6cmK3MC)nl{otp4v}#Qt6>6UKkWML3ki;Fy&j6lAF zlUKKNRa8qy@Fu;_$ebNn)joFhjKx@qGzNHrju`1{6Y=+N{mwXt+hM)Pc=c!C*7{I6GBKGP>&v7_83p^` zMKGE`dmY-QKkarS_Oyr1-1w}6q4nl3mV=oz0-c}I;7BE)6O6D={t1kZ6zDbMiQfld zyvuPYfZhXq-15P<01s)`(yAP41_bEg@+(K9-O>EpH@+?X zkq{?MpMOJI+%;{~L)QvCkG3?Dd5Sk@9VIRy#yL2xyL~aq|=v zoNfVJoz=F8#RO<}>6r6(g>s_AqCOZ1wY(85u6@}V>4;&LazO#tAAb-%h!z9m^Cz6! zZmwMcyek7IdcYRL7MXwp(v<|k=6f&x+YfJ%t{sR>`i(1mkDWRw8XD9u$(`V~vJSr# zT7{OjfdE|))B}p>H~%u}FaPVU4|;Spl%MXC_W5`373D^*4O5@!qCR4TL$rUu zji<;@0}PKGnf3b3g9*qoNcU&a?RrHY-xNX3i$i_zC>;j49)RgQZu2~OiZ_brF)+H8 z4y2x43pNb;Z=r{ebD^^g@RB%|bO+ZHYxKK@Izqx*(WE_Q_P`i%BQa^mbyU(=3uYcL zz)d9OC$N&L@03;>N1)K5+`ux35hCbMV`7;1ya0(KTvj zCD2!d$Bek}?+<}*I3!0r*Pg<=owZ_xSp?9GnZ4KU<#v5pjQ~c_NKA&Uoi~wpzXfJl z2cw4! zwW-H6nQ0_|#Wa&IxVZ1oc7}}l=~c*xRb@#tD^Dd)uj0`KbGG_-V(S1+aGAm4XbA9z z00#L=JwfrOA|Q2d$5t0JoZ^!R=fE10JA(;<+`h4TuZ%2j}f6 zuOhyV(Y!_mXd#UcZh;)9dra=v9<@^Hn#mXeTxnRl=$1)#h|X02v|=_$hpI~)>sb;A z`261PL5R|-p5z%wGozHo7)xbRx-(mWhFk`!*(F>V%FN{lT>haKSD9D8vR=<V^k4VpREDLtvpkdw@0 zQgk}lUQ=qp0b~Ss;TM%-e(QeQSbj21%Na*Og`jZ|K$p05q>MQj!m*%~a2o;rO9etKsk`vxjEKNmv@1f6c*-)laWX| z6Tm76q~@8T8$@mENj<34UeHN<>ToQ$FK9N~lD#)MzK+vOG~DzK*;XinnC-YiFkmms z!^gpush_)n^u6{NO$db7uQ6nMbyS_A5p?`FdABg4JV1c@@dHT4R&|T?4M4>CsyE0I zmIl%aJ4>tdwdr;_gNEbyKpSY32>|G$x+Yq!TgyC2J)?J-kz`#2<1T;>5fLmbBPsx) zw9tA>>izetN^)elkSrZA9$7|Fn=_vnmk;a`otMQe%I?qck7of17nDca327Lde%-D536$^sRLeZbIk2j54w$>U8BhXiqZbr6*C>> z?i>$n9EUOtVvx9cFdcbFaP3i%rOM*H8w(x_(qXEAbO*hEAJf^PBf?o-E63F{n;Aou zQ_?ZSjWW+oDW@vcFKK$U93MeD)`NyQ#($TW=V1;M?ThguuCuOi z1H336j0DtxsuSjlAo@lEX(f6a;BrTU1581XvB`z8$#j*z=or-EG%(X{dG0=?8<_F| zWS`C9zg;W6ZbUEZ9 zeGvi5^<~*Q4gy>&Obkp5Ghe{c%YhxqObCEycJdBjAf7f+6%kT>uYD8>ebvB-<2rb4 z9w@tW4jeeffU0(GxHg7#x6p`;)ZUfNx-#T3~nN(8S2eei>0o2JQ; zXgN5>;eg1lcJO!?u$`RlZ4SNDRM7)LBLUo>)0UOOBI`c8G8Dm%eTKGqH^}t)k96Kl zb8Z7$Jjp;NwA4^(S`S8Psx5{H;LaRSe*;Rpv>0+NrQ=LiLn^dae@~z0ayfwuA3Owc z2m(I37mRl0!WknWLtuP~!F@SE0PCA)0CN$D&>Q~J%GeKz`sCY;lZG!D*0X|Jo&id?awD@eRsUWStCk0dJ2YT}W}{6FoUbv|NbU&mnihHa zcG@HVKOcA&A_o*N{Y?MQz$&vAl0PF?yz6r@1Ct_*+s z{(Orz*&NTCCDUt#Hk91qNS5+OA_?viDc+A z9=UY`;j~FHC~GWLJ^dT%N53=<8%iUzH-1X?Yw63`{pdw#&C)tXuh?ywf#IW z9^|=6hcQn6_JKEJG|81kjmnm7)ueWi1ApC&3tJK>yJ!9@4`dYs)lNq;(xsGD#VW z9<%C)Jolqmd07g~Y6)aMpcC6*K(xzRu=;58^5`pH3+|cV5^_MV-5tr|1*j*!T==%G zZKd^GFs+!vBE@sq@z&ieXMz&O=Q}?rn_PwT>`4d+sw$a+TFKM|rki~O7|lI2V@W5N zZI8zR|1Piz<#-3v%bFSJ7zw7`0FM^Vq-`_;^>FQf-}87C6n!UiM(Ui(aI?iuXU8!F z!mEN}X5YAFA8K!1WEYoEp^eGW08Ysl_SH^{ba-%6d99`3RY5L%eIYPIFq~K{|MmNK zGYt^AFaL?LqD#-RUp1{Ac;O}*oZCrq-*G@N*a7t&5}v{NPAu^xAl5DR zqbDF4jXMs81yCCZb{14WySxFxO&j2P0$j&UblW+;s20pbb1pzVxjwkk6ktN*)muaL z^i8yddSzb*MVF`&s6Ex{Kg+$5&=W!2(s%)w%SL)Ege4v9>YYapNAo1d0OE(P|17Yc zCA>F)8|x0Q2ItjoZkY+TTFY!g$0S3w1?1lyZciQSNjO*MtPOkn4tkTZ&-w?XiV)5_ z=(4Dr*SdN@=WE=srPODF2+3B6;GqBbgSxLiOAVbemIl)~viJ zLcJD<8H378xK4nPROcf47FXi03$S^&r?VMtw*xs?mn1U1T8CA7HEk6!560C_fU0W1 zfbd|E>f7L=MpvKArzKeh1?#yhP(rs?ed&xkMgW(&0P^h1I0fMjTDtzpd*}ia>x3Qj zmpgv|K3kbwPC@$eFB4sSV4j27eK?QD$M>0wowQBb$|1KBO?xkb@QsKUzdZy6;Q68P zDbfJ=edMK9@eXByE~L8nrtjp6P{dTJZFg zG=*nPhD@K?g6^k&dVulw+OwXVoR+2qFMW^8I#Wp70NPn?(%Lx&>Fh82%VR&NgEri7 zk@@Rh$naLT3&`WGBkBz#?qA@~tmlnKplb#iv^6j%f=LLxtW3^;0OCMpAHA?|aW0QS zWw`ZlvJGxk4_Qhx81P&0WP%T{GXLjye#@j2q(q23;hhPEK@SW~(i2>t*$P&E<)J!S za;%kXEgQU_=3p>4f{wx>xLvQXX)VANM*v0=pq@DAs@}G;#c%}AjBfBZ)zfi&BP%%$ za7;aN7fR7yWd#I{un)3;fEJbo7UW7VUE83iX7;ymUqA|vr3^Qm?}e;imQLZZ*4jau z02tI+xZuJ)M^!OPf!vr`CxlK_`lITkjX^L3`r9KO-6^h&Mv~VsU zc~j&_XWM8rRBkUjxjeOr_m_wcu;nRtu9GV-OS44KWAX6~;EVBPJf6NsvkUxq`J9L2 z+IQ77xM|WHTwA4_06qwM{Z2YC1hmOpgn&gG2oh1!=*=kMbU;)c*DxfFqwr(x0K!Cg zs7G@`=XqSAz$BuF&e9cNc6iM=3}rJgNPS^DAa_i<=`cWjnN?JCSBQFikF*jq`Wa_O z-b5qiR2TCuPR=NW(9tojlf;9yW2Mtt48h!+aP@lQVMw5>+CL{@EWk(o#k7wO#u|4} z*aRl1H8hUXYCq!)nSfH{PEVR`!C!1Voi7^&=AN4bUj0b?u@jMQe+Q)+F0t&W* z2@=oJwcQ}Do8iMra@ct5@x<#F^@pJTsIT_62yP56Iy^X$hpM&*;Hel4` zgBU4&+{ozX-`a=p)nh`nfq?lQ=6kp~sIN~K05oZtT8}zM>VUOs209Q?*TR7E2W3bP zqq1jS^jy2G3L2fwFh~N8mD}ilK?aTCHsL!$AL^0-jn-OO=6KwWfqavw-d?n8i8Pu- z@RD_Ab$!2iQhf=Ldkg^4OqGnY|G4`P;5{IAS994wuP*sq8^GWKDs&z-a)J83817E< z6@uuaQY&p{Y09oJWwQb;2P_0|Stmdn`fB%@ZCxhM>F`qT72^!=y!Bp&FYv)#V18z> zZFic{6U5yBV<1|xd(-Tf@Y3&g-ugZx``jFupri;g<5V6?a>lnF|D!Z%$AaE+@JtsLb_4X+5{N-22ouo?u?M1S zxP>i{;KLv4uDIh+)c-YKdd&Z&TNW6UKzKP=9jyQyvI+?pl>LL`huNd*0S>fR#IPlH zT}}X>WNv%~yh30J>@n#ew;b(aS`LPBk0W`;$xsGB+yijJFTwogq4ytmd=H$VuKq8soh&B^ch4Jw^3DtD{Ts%AgY_ih~uN3VKf zsE+c=Gjhqt9B2b{WMMQ)8R7!H{MO#-@E^LFS`>S6lhNdkyatM8t1E(ZbdJjX=PNyxIwddHWUmN;| z&J;#$Ym2${;y^G14WQAi+C52`Xv`(`Wu$~>l%Ix9R{}mD?eMCzVIgQGn|YlZT|2ed zn@F!rgvTDMhMb|<0?&`mtNc$NW;@; zw6yxr1SHVJ9MP76#svc$3Yc@ZE-veXek+N~!Ph@+l@!^iqlwWL#$_-J7=D7T^XIgM zLx1*syO#(DlF`-M1ILqMrVv9+I~1wj+n8^C0QO z8$r7oa80eWR(Ue$a{U>??GftFL}-i5NhDRV+-u-cVu!Gil?>?}84x%0wof7B?71$RcJg~Gswan<4W!VA>npV9Saq6d2 z{PTEWIcTaK3}Do`2EBL3QmCFkd0;kq2%YI?`!hyq=}umq2GT{K>fLYAXzCXsmFwt4 zdfc}WOq(kv9=d=I6g1H7j#4nMe|-IG5i2}*8^l!QYKux4l-*m5R$vySUCnOk))_NEL(h`b#VRO<6ywX z8xJ&fK%Q-4uy>|~zjxP{)^xP_S=SMqag0&h>Hw=41+y}20NUS^EQ7C9hQq+r(-0sz zZhA0TDASHRcf5upB=6>z^3ya@o- zL|sau>yx=i+cenP+Q&~ptgbSmI0wLKibXYe*#JYJgK=*13TN;GOgKT{l^^@kNa;<| zu9$h_x5hyzCOxnJ3b&}fS=rw#CpgTx;mp-hP<{T=B*a=J3nF&|&{qb|RnwaJ{;a$% zb-})L2f$d*;m(0Vz3Y(7?CRhF=@ZV()0K9SQRdkr{amwcFMUtF@?)OZ21giomFD1V zh2Yx2{1n*byTEEdmho&?-)uKKRAy~@V6~pMA#fzNT1UDz43Ew&zZP%7nx6gkC#XH+CR*r*n-)SKF8(_vQyZc{%bAwyr zQ7u9sU%CC9TD2GS(x4$PeIZ(mWhbNcgFnzZ29{HxT90)|#|d3V{7Zdk=|NBcFKU&; z2H$ze-|oKy{AhA&GwxriThV=+=!|8Q zCI@kHS{~3Dk*?kxMw{*iY>YoYZPfzkD>|5uaTq~f>}Xm?rFt$I_c+g7-<|_&0ByeX zyCMj|70Ui#T@21K+5qNkTsJd~*}+=^5WT`>(>wnar+UYHSknX_+$~b~FbtwVuRjf@ zvj*DEHai7>d*tYjAKnfPQ2#Wg7xkK;rOFY;8^c4d zIU1@T%a%WAa6AW`UIKPO^8<}~z6|LEkL>`{PK37l#+`ELq`pUuqiF~63LOv7uH0A4 zrBs6euFSye|Ktt5pIh&04V?e%iL=lyydcLJ*4qhSE1((a^MRlPOcNvE2X0{MRjqv% z+V<)j4?(>BU9i1?6ZT+8fy2ZGfIdN^oJ+K#urnf%W8)B6_C{DKRiJWmV8+f>0=nSDuI{6;4w}<}y=_N>294D@22}?vbESHLlV`s6JU9?V zF93AaP(~214OyVodDa(CfyH%R{UHRPodxZTbZ~+xkiT9G2l@ONFwVzPRSp97lgU8m zq|J4F$U=Sjw|{^BPuw|>2~vLzL3Y3M+@SP=FR?z+pfb!y4|3GmVz68gU}D^uL^{rq1{SV(Ntbj&~G&mMHkR1eYnw-w7RImORETJs><3B{DRvL0}2oukTUHp#{WwGg@e&gj%q@oJAVIfDXXIf4uk@`mSe; zarm8EL=A-CY;~X&8WZr^2J=%->4(CtbK$HHfIS9ml^fjZk{&MDE~?KeWSZ!FSs*Bf znBpF|PkXM`L)>KuZ)7!RhsqjNw`>xSSB1{m&X z7KJ)!_X5L$hGtYAKL8Wh8$|Mj7_b1^0iE9Dc>tG}#sF4-w@aTblU9#mJ%|I@)YrS9 z@D5xI0v1JpUwcy29vV-*x0QVv!9F6MuJ{YOv%nvK2zxX9!$`4}BX zx6E3O&D{&QJ60*d5X3%6Tg>QRjr;R2@6}^OB@Z*kI3p18e;>K$_xc8EoUSillMdc* zI1P{#L__FHQ*)s6?gKbj9Dz!G|AiXrdL|Eoadji;v=;T*aOtJ%wIQM9bCJhD!#?Vx z3cd*qEE^Wr_&takZB36D^;)wAU4UK0^{2;43%owjohwb~2b%y{K#XPTfH`aOo$p_` zTm6Jq375^Sw1H?1zr-`(0B7WqW0q@lSSNV)p*=p)5ofWMX`i7({jPe_vFrn#z!~UM zKieGW3Ju_ZTms-5=`dMY-+8kZTz(LenV#S7Gk@CXPH0yj(?7Y2nHX8}0MwrH>t4%a^YEe{cTNvvQbQ13X-9 z?#zi&X*T3eZb8$-GHVEv@``A zh~!j^vNCBiwhBvi5$d8}%jJOZq#GN_-Y2B_^36%CBCI-I(&Nf10Q}?WpNrz9w=;q! zH&N*${la(Cb?|$0Tl2xIdNmB&m+mahpvA+ZQfNH-TE_yk!YEHO1Q5v$CDf%aTzJgM zd!2yO0fl~GJ!>@L?tpX!LIjB_JY5$YuiY%8n~r0ij)T+|UD}OfqLhn>TIc3hGd|Gs zqQR8rEx~0u7n~OL0HtR}f&(qB>DpFDtIg##Bp?Q~!J8OBTNTk4&Q6w1CJM)M83k)7 zjQ|Jg&NQ;K+%8R;j2Yjw$#}W`qk9SU>n>;p)|}^}80`7kdFgax2I#%tb1gmRz=lAA zx4!8QrSI}{;KN0};EWMqI|Pi8#h_rHc5%>&2{gFSt|_p!cCcO0T)qxs=s?FD7!3Fkk1mmXW?xU2cnjL(Ez65YCe^?qpO+@XOz(T)lZ+Pnds z)kRAVGbmF!z|v1eg4fVpufGUJgKje%vuHrNLw)958_R{2_l=w0(V68$3pgp_j0oWj zU*PJk>W8Zqdgy0C8r@@HIt;4YV4V618>q`5f39X01nh&dX7%*aCH#c8p4*L`(Ca~8 zd`&vvd=`??C0P5?FzTI`9UM{5tX2O2VtLZGH7?R-+eSxVJ6*4rzXCN~&eBWhThxV3 zdUXJ`(P3+#D05@zgkH?}UTKMamudCUbM7^AeuVib4AEmfkZ$lw9T1^BVeRT8#sNzS z)CG5LqH~xQ-{hpR9V`eyC}~6Vw+rJ;qTybBY#yyj=9b#L$V#v)*X9YGZbBJ=-Zg7oQ&c z;AtP|j6h~y!Vnn16ad%-Fcl40UHwH5WN-r9GGG^B@X^G}PcS$FI#Zf?ijG>Yf5Z2@ zYn=L!)RvsS0nsQb`0F>*WYha#EH9j<_{~4e>Uq#gr~*^Z%Yy{sMS!PrB+f)5tgP=1 z=9NRa5runJG>%-+9q~g@n9wv`IVf+Mv#(x!V4~|Zld`;asOQ;&HbZ;=$*p2E?9$QO z&^H9FVda$ij-2}tjhCpCl)Ia__(1joWXsA-3+Li$fW(C=Zurwjb(d4Rb(qn}G`0ct zlQ7|JCUoQ#xnyK=pFquP+C2IH`tp-_C@{tG5TuSKLmV^+oVB(P3{R`U~s)@m8)6OBYbIuu?y^SWdQeA4hrmE;#f)A z@VxH?vG8?Fc?~b?WsRUMI5q}3w7n1R0P#u+dJs4YZ}pBuxvu3n(tHA}E;e7z6V3qy z76|o;o!pjk>Cwf_ID@<7WFtBrp$-`bn+$E%5w@s(pDvxcuJG;*FfwU$oA&rY$x1WJ z0mJK^`@sz8#l8L;^rRWR+8;*SP!?(3O%4qN<*b7^6xaE`Ub9t~Fi`hDPx?~~_Pz$SQl;073Qv;;bB7gWe= zE`J9MXdEc&rU5wR+YhFzkJq|JpmEU4Ae?Xq`^)n@IpErZ-~j8T0qx*wdaD1RvCspO z7cxvDL8Y{w$E$ZuL!2)HV@;zD;+zM2#~Y4GR{=z2qi#soR+n9r8@W#0%^Um9b9^9k z`|U>{bi8RB7BT>U77>XNCF(oIdUqH*yL(!+HzMmYm7RnG@3Q8|a!Si6pbIW+n} z3vry>_j87edYwthfEY~r>=z8RArNp_nGDV}DFx|4s%QwHi?K5ZYU7Xqqmj0vLyr>H z*%61fl_TaXeEe$&f%Zv7CYsDL&IA-u&Z^SMIfFrT7-D6*y@Ny=8W(n(0 zC&<7FZ&ABN&{9o#3^0NAYF|a2(Y0M6Dn*4EEFmnKMjVjtHW4EbM{DaJ@Il*uJxLCN zzkK)0KhyQAAi)zIhaF)-a#Yudv$+iG&z=QijePr7umq4`yxKu80WbZL^@oA|*FWB( zt6vIQ^Pox)oy%+l)v;xXQkm;3+5x%c~3)+RBRm-81Yoj!D zV74^DvqU>CBAY=C#Ikrf%E9#D&{!(Dh3&ec1jeUF5&a+1HOQy{wD5zOxdccKR^5@ z2BN+-)kCcty!>qlpuhpfE)O!MOD?DuL<64*b}|##{8EX`WMrHLIVZemUpo9)bEdWB zH9AUgzTgCuI`#YBu@g`$oM7{B-Mt{k14JxA=xATb*E=rym!I6p%@)=0x=mhJOIF9` z`0kO1(FDpwIESx4MU89y>vz8f&LuQAl&rG^JLz7ADKJr+46eS!8aWItF%68?j0XWO zjUrn_2p?I89G!0l&pAraiYT-z-h2d{winEZn62@K^71WUI+!Y7eE|&)1hD$3GcMjN z9jn$?9@oi(4o2^4JvUAbsK4?ky;Oho&R2d0$s-9DpP^9z#!Z5#;CnW(4}SpWc=Mj{ zlaSHDU<|kT9x!0gw->w>6s~gu>Nw9>oCO2^^2=XRqrGXH@WM=RuD}3IzXRd`uRI7g z&v-JxcsdQzhG7J@RJw3VK$}<^;54aMlg=?$Is|aO@k>$GTX9aXMwRYBY_Tft770RW1Vo&>q#7oF)f&Q=Q$|H)w^*Su24fj ztYSJ>@;%O@@&1c@;3-@WK%?6AYUiOdv3Xg34_JbpypfZolhLP_9xY=GmA96b4wf?4 z0QFPF3>l#6>eK4~I9YaSdqQ}hY2_C4-8ZB!A(mcH&;9JCbpc;a8xH#L=9J#-5>BBW zAX!9d$P5xYF28#uo2aDXG40T!U|CIRtGjs_6$ z>RsV^=O8cq8tnCZ9lV1?>nOf>e@Zu+gZ=6^3Ry1(U;56)yCC0wL_LEH+Qr|1z565X z)~mLJ-uD@1peEJwW&?cqQ-%s>Bmp#D9!s@>PkuS_@;B@>IzWr-TGq;i0hgcWKHm6& zw7`cz>qhI%=b?V_(`HT%=y9OEd}k1E-~iJec>P=P`e-m(lb}5H0O0G-)Td+qD?WVE z+gp0|E$5S8jUO)T(QClv->-o)#Xf#gdW7>5Mof-0FWjFlN@SkM_kO~q=){+t>kqYhlmj07LtUiHE8W#g zB(dkFnDs(v4|D*&o` zuuTILK)dwfH<{lS=@ZV~y{Sz*KjR{%L{dcOLmG*=F&=gnnusQzhRvpeK+_BJ>kw5!v=juzl20$djwX@@$Q zk5gN^;7Dgq>5&D|S`Je6QNOm)w-EHssVCg?r52FJ%}%$z{2PeQO)%OAXg{hd(jmNW2(l5RlRRUh z^6$4jGq2tNMQ>kkJ~I#47h!P5%$^m@ZGv_H(m*Fg1=j|YHn-1nO+1GUpxLBjFp-&% zac11kmB02oFjkmO`eOtHs6T!^ovS*m!lW1cBwrD^6)=_td651w+q#%5oi;j*hE80` z0$;1N7eWBOpcRl`=lG!XfOBE#|372z{oU4erV9fgNPr#eodm1cJ1LT40ekNhn^?f! zdl5;o*v{B-oH9=0#7=SIIK_@LPU4a{)w7n|W!aV`xyFg_Wai$f>$_|2_YZu}v)@fn z@%`mn>v_xG=bT;Mc0dp~=%KsYLA-z)+*!$?`5YxI-$vFM^#=eXz*&G-f1A6uR<8aJ z#=_~sh6gt~Ic{fg(^*Cx@=yanT!MF>!S`et%GfL&-wR4PIzG$Iz4BZx!()8ia6WXy zm^F=to!d9K>61FpU_=6ki6Y}U46yj=?^7bSps1fAfMiXa`pb90IRs-KSk`B==@SX& z!AS%(XLSIF0E`8W#EBBy8!t-p^h>#>L9`nyJxm9gP)N-IS@RP<+W&UT$G?&b80kyg z4Nya?0(4Ox_1cnfJH$!X?H}`$nShZ62q0NR%~_?Dj`x3=MRS&e)DzF#qv=aS4wywb z>h|Y(%#^#HoN@j@J@`fa*D$Czp#c5B5GYqv;ci?(8>neZ{XQMENv{uH&>4J!CSAsa z-(``b;?_{I*qC1p&ATfxfHx7-#W-!y_kPvH!0rM8v!FNb4>76VMs#0C>-}%jck3Vh zfg3J-oQl&@?7OOp~K+nq@!BBFJFP+gp5lD=n6=`=HUHe zJDFDjRZD}B5tFOD+Z};A8CP{6o%YaX4w&3P5$L7Ar>}vzd8UK<l-rq9}h`t#~Yzd&hrZl1h!ciru~afoYK z3NS1}L|g^~nA(pJ-Cy#@_l_a8fR|5{sS~Gq&Jq-FtLF1 zXJ<(VgD*A4kNXIy0XtZ@ylM1@VvpWw=zs*4>9jTwt2=XZ8{`SnTRf@SbVDmm{qoH0 zlpVTYf-45NL%@%FKl3jQZf%Pz^{8FA!rjDx1e{NhQ@5MxYC!SVUSbAXQ^0g}lymev z(x5qk*S;@O&wJ~cUG*X-&%G1EIfG*t`iZORsxblkdF2cxa$E0OkSEBZ7Xl9Q&R>mL@Z7R{g4j_0?Z<81)K_ zR-Es0H_JKT2Ci{q1k4gEo#W?3g45eGB{t7FNM5pj1m@=FtiE+O%kQ>cr1xR2cUhCI zNPUCN;fEu6)#|6bXg9OPq8=bP4gJKyB%3I?yk)1AfP+Exfu0EUY!$St9e#GxswIqZ zqhEe7os6-&;NJCIEYRh4rNsMiUH#1w%lViVK+p8vNj0P;8;n~$A5-ccTL1-c?{=$) zpzY%GrAxhBWx)q7rSeL>qj~A`*A_;r1=L*-n+QQC(yOU9?#~EnipbC7&VU$D;r5jc z^Dq=|o~r%9{qvv;gYp*$*m-O^&BKjha)w*HdXniNT3m9J^n!o#h^S3G1ki0= z6FQWoi?@t*^O9k)pd=6Wz?R1?+`4jfkNM~uZEt*?JEyH;K!AJi ze)upKG2IKcG0*(ai-rd1;h;@imY!M;EEt1mWT1EiE`SHLv!sOo`-5MH*avZO^fOOk z#OOLP(Ewfjz9(cB2w=4aSWp8*9Tf5Iw;^eBfR;KkPJnyH%qNwWKw&Ji18|A}=bQki z{R}oPN=FPt@@(xz^(1*ZEe+%YGMrcO3ymSPtK;_wdKkS-{{g(BF4(I(t?PtdbioF# zbUN_eA8-X8(#?eKqjiDWNibEl&k_SYrD0%tW#^#=gN(t$B`4|u@@VXUP9IVL^@E=V ztj{$RLu+Ae=x+jx0nKw%8XhPOtC-@Q!`MLA^cU52jTETwEg8)WHUXFDG}-NpfOWt5 zzAi4}n0JxA*PjOm-hI4PlywMBS;(16`=pb72R$qjBp_m`i+;HAgfxSvifP9nFKKo& zKwNnJv17(GFz4zkE9S^F!ie@>c^|gqi9#b(o%0j z3shP=&dAtt!FZ7`Ka3nGAmEC0d(l7I6dOzP>qjRUv`WHaE@&*u#@ zG!HUpBQ9@yDY9$;(gol2(0o?|O1Cs>yREm+QIHBP+d4Pc zZ`5Xkz7Nt>n_-}yj1$2<8<$UiBqv~cu_TCBSJ(Di0oJo+$1mX#x zNaj)LhOw9i(V-cV-emNldw{I63yjkYP(jz#uS%zOsg6eUEuFavEgJRAp9|{um|gReohs{Ap~Ny)Aw4Q+MME8|Nixd328edEW-Fau)$>8YodYL^Zobz6FQ zT84W69GY9}EbSO%(EH*ReOQH>TO)Mjp&>}mgDm!9;#^Fe1rIRDfrx=OAMzg2)iM%& z3!uT5{#cTCfyVa*Iq7-z7`Y?37%kyU0@87opMH`qq05(N1 zNc_3{AYCe<`k0mtrrFaMXY6061A#0Xed@L6`0!pPMKlc-1p-32R2w^j7&sR}f|b`9 zlQin6+j$T+WydZhCx$K^hJ|E%o--44L&qiKSU@k_i9KoPJv$;9`@D#T z2%46I!qt<=bx#bBf?j`Aj@9z*5YBu39xlPZyTg3Ub56gwN6&hi#=!GHeV~3&83?d< zuYvov``aL#vL8d)k)SjhY06=wZ+tv-uCV5qCM=xH!`uN5 z(1KH>nz3ZRY9S0YVtZv9U5GXw^uhpytzxI;nz zsz)DtFLCO>i9fU})*K?9Tq| z@^J9P_iR0Rl@Ux#|4C*@9}Vjm1!Er&5Ep7#7nP>DoTlRhI@>{p>px#!GcZ&+BD;VN z6PFI;wWc{BW@(UNorsKpJHd8dc{e!c&O7}p*9>dW;x=?n<-Yojij4kMIezo! zjuIBBX{P5nkW>1>V>yW#mFHlfer^648t}DxRfdNqB<>1(%NN}EBZ@$C=awq=vffucN zrqaX(=`^Vw&Q&J4&IyMW>}`7QNl0r&u;t^YIK(W6E64;BI7%e~68OQjQ>#JD^McU;^&Q0lIZR?+L(#i7RyM zHEue&iR%TNYkI%aXfTdTD!>|y%k&cs=2P;<7s?px~pMDEQO7#y633DN*!pa4wV6>f9*NIHge6x8^XGVcce z_d^f(a-jf?I5?+osBb=R;8y?T{ujZSTMQ912uRz^0Jn0D0E+-`dg-7>(6)bJ*Z+F- zc_&m~TI}M1-MIKq4?cUs;sL0?b!Ljy)9<9`=JTAOYzd6Z@94V1obWZTgA3L!i&W1K z7B!^aStQ!X$_}^Lwku7R%{bb*b9Ix$+5PAb)&rn`8B;Mk5DVcoFMUkAlkj5g4sHj? zO4tLp@DNinWB!BBLo{-sF7*HDJJ7?V9bZ-x;AwXqgEFvplEndlpk&5zp)_c`Wl@En zxtXg2xE&X==%<_k<(+d-;}|<}A+F%aB`G^%xE zLYozn(uSGY#E+jx zN0Lq!Ii*^gtJ9IB-tCm$pkY>`b@iPc-l5#<5*Rw_3vY}CJw7zg&ZLP=PLWGn02`n* zE}yHb1JxgW^hB|JJ&4!QN^{(F)f^b$3kt5T0B6u!^G3j%7yx6*l6KsBFy9vo1Aqd~fHPN0k-1*{G*Ah;9mT4$Da?o>}lDmrsAGkWPK zUb#n>(a?Q-a{FN;R3N@EiRaI6gN>~Y+IQ5)=&VDv?ks_~UK|GpxWxiS2*CTaK)pN9 zNxHdBW($|I!IS&lXfEIcboFanfgK!)s~iNa@jUuDY9Y9hl?9*+oIQEq>PsDI(z`UP zemv7ZBhb$r#K70G#% zkHDHif|i@lZ!?(bDWJHhIus)1d~T9-9M6h$@zVIY4m9>aZ~XigV{jQ1L-PPSBzQCm z)F-{*$D&0-{L??Eg%3mB52ykU(q3i_0O%#3SALK>0U7w(muLHEO(2!VcbaX73{M8R zEmM6mpzhzl@f2D>MkCl%xioJ6q=W|MVj1I+USM9s^bw7jZp-50=sg4IQpFO>b=!GX zV9t{c`rzwefLl)%bM2VG4a$nV}Y7Q#po#6xH=?Msh6J={Od`RV7FjAOx@>Zc=;0vIiV zlj{$k8>G7yK?{s)U{eHmZ!K6+v?+!q+yz>Tx2Ik1O8a+{4hHBrdZ#S5Y156fo)ljD z5yL5Cn>C6dc%V;($~}2p{o`EM^(UYSED*N8d{G+KVOlNl-S5)cvv2*eFL0B7;EFTj z8N2}3#sHXkQ+sFESftAd&xro;>3OQ>XpjHqR>`&gCRrByjU7uzrRrz;vns zsb}6zu0xx4EKNfQu5`?P@JMxyv>Fi|Kw@QCg zB&RO{X)DuEZmV*zTZCTED=(n=(jP7*mGRUjIs#};UjnaWxs3IE>9?gRP%I~4E4@wh z1u%CWtludO;mqpWKRU_Tfz1Esdw=XY#%)e;=K%Lb8!@tg5ANcW3|rO<9WEa~v#vcl zhfbEaErVG-LTdWjj~M2G%sOmpY0Og11E#KF2s>8;|~sK8xF zfEQWvz_kC3cRZ1h*(-?JjI4)7XM}@l3u}1?0sKUOuedZC>yt0-Fnxj6iZ$?H^~5jf z0pF%OU&FtkK5-oh}1LUVhr1$ISs8+P{i^NMQmUfsTvfsLqB>6eQ^K-j^_n z9_?FboZ5u}Xj`BI5TlQ;IOwlxklsx))RV|6a6tw{0*D*(^!(&=7o?jW=Hkm3K6he? z9Sk3Ur6p&v5_~WfO!qpW0x!KN68uQCDTu^9Q=T&}=h}nNZ$4AWVqUF&p32T8u?7H% z))8>#7o(@1sgVoP-e)}y@GH9Uqr^N~(#VU{%T35~1}iHs&tJX8S-e32YXHDOxr1&{ znqT(6^WB zem75>tMg7JfX)IKDIBCpn&6pC$}^8K(t);5zOYO4EnG;?wA+L1+!bI6Z3F+02YyeV zUvNLGbUX$UFiV+#Kn-mTID$I<`R|`=fyU*ldL#$92Sc{#!f8Yr!&ux!=L7D#j`cz> z{_9u2CB5JgX1C03>%V>VTMR>hqCQ4+?QNPbNqT&Pyw$H$asM2OTeaE38!KrWHmvkG z5WXyONw?8z05J;b)C+}M;6Oa+JmZ0L)q?1 z4gC@b%45n7g1GP+0~jz1q6>hC7%+@7?4&Cdw;MLSFlh`YhS&cX2;PFEB#|SsJ(d((l1C za@{-}wIBZ$YSFZT$!+B^T8MGvlc#e#42^I`mz}u~oxf{%`EDqJxCrdQToAYK{{N(7QnsJ9CSV-=HGvKFF4Rf!}f!i zc|b?=g}3g}Dg@7^&9wP>IiSOs+0zIrG_D!Au4ro&xC?gktp|ro(TrnY6*&!ZL_H$G zbrO^N3g{fjvb@YywB7h7ttfDZXr&o4U0qga${YD^fvIc&@gUFB#|3j;H-01sT->r= z*v4eKAU#ymLk7EC$7%15z&yrPCJ%B>K?ek*&|e4r?Wa?ctsyg9BTXu3*mtQ=Xn%+L zq;NOy3LF8@b=XX&89{G^|%^xs$&-F=|cSDyn1F3=~b zAZyTI4Mb)-F9%K>U^OfL6bvYU@xJu-&-N+Ty|$*M7o4HRNZ~eVQE$*^kcT#nbM0~U zCqB=*{Y@Qb6*Fkn8hJ|)IEvgInQcea+$m5n7ZZA38`RFs1j0*qdKlF`(geTw-XEu! z&PzuTH@^$n*JISL*<7bUG3>Q#pC8it6A^}jc?L-dsHn!aLp>yB5FB8+H1m~7p7+Rm z4@0*3s)x<5Xjew{+KhSu+Led&MaDcBlfsk$=ECiVFS>O4l1U{{zc1`+K?zH9wbZ|s zJXn4sl3krl*}8A1#>))G`gXpMB%Gmw!6Lg;e;Af-?&vxIp`G zkAL0AS2DEIHkDc*u*kQ66~@FL$ZZ<0q^op6f(Cs0B-ka;hAUIeWfRth#Z{nlL&Lm)u?f}OLNm1K4q?EU+}f@ed)GbZ|jKYpAepRD$>iDXTu{p+F z0W>$GTHq+91KqeICJN`i403^sHkgWC?OG2}{bt^O5ZZDy7%w~<(HfMKUCK$__rdN& zy)=#>xMeTi;+WUKr;pk%h*o79bPEZeKo zGR9&XcWGWAu-N9tV!wFY56;-PI8wm5K0q(J8mi$~1%|;5dH|@*wwV6W{nfFj1KFC; z**xP5ZU;?r&uw+f?psXbG1`|sdw;VQba1i}Ug`p!3ux;=Q!fW0_XGKANr#>js(ML! z^T%&L1f4a)Ki2#9BeNN_6L1_Tk{bj3Z2xwbdIP4kC})c<7jW~yHi!}S8K~d0;YxVp zxY8;|Pajl**0J<}*MhQLEtit6o`lXw0My;_puu&JgBm=}rnR3g_4P;Aa3}_(mj{ij zsI36woJ`STmcLy_A#GR)qA(hRaz#B9A^d$NI*{lNR^l{xNE4hdaOiiSCO&0kOsgV} zxkLdSJ87R^_d4%@c11eJw5`!vO1X6N_sdpj9p0%XIlRn*2P_6GH*%ZIQ=|GBUNseqz%qeu1f_pE<-(( zpBc^eoGr z>~t#=$(>O;R0FoRuYRtPW3eD`&7Z+$PIFMs`H0W-?(sF=7>Hr0eFTl+_RHQNTnWod-p9hO37yo_?=A{6J0sXDR`m zLBVmf>kw16Z8KSVTdy!`osIjPlQB;7U)G)-VTQXwz_@mn={5R@R$^EKnSEgMqSHNsIEXcnuAN+C0*LFK+Xs8?YfQ0y z^;Nc{$|C4Mxd?FE?MGeu?BNz;85r86Ujg+-q^Mka#GwwkPwwLh+U^!(6dFf$@84r# zO={%){uVIp|A0)c+J5zOhjvKygk?y<#ZAa&9#44nOOc))_Ecx$>klT>9!KY*FX`Gt zVG!kmwT|TLkL1s-9`a>YJHw}pJ3LFOw;zjg*UPC-y?IYG4gzit^>N|IR=ave2zn-a zz|Mm<+rfam@eh8<<-5QWfD^_=%iGPpdPKhF{mxYg4`^e$Hyl!-yQ#ixLII&qOHY2g5y z41=Yb6mTH9DUU~HtKWY>I=I8d3>rK%W&_;JnOQ&>dLzSgR9isqSJGo3UVpN+qo1o5 z-|gNMsw~_NPCxjDh>T7 zs`NldV5U}%4*!N-^^HRHVIZ0h z@V6AROwb9V>h=nSLnwbUgc*D*v`rGo1Zpk;11v_XDB$z!G3uRdbAE-Z&&RRw?(gH# zoa|<8w8()8T2t`ek6AncjtumAfJJjPz#Bhf;8nf%WVf_=PZ7q$k*m6cC5-_)00R8zN+9~* zetEwhC3}s1Iu2}lQRs0`1EZDl+*t?d06+qqc2q(_nShxp<;StCQ0{RPA zd8aVb{)UoBhx%6n^oT_}>jACJfq`1z^P&_$0Uc0ttvWJ5x@s{@LkG`7q|ws=Mq zqbs-$jAO)rcnv$-^q~Erb^hubIq2gaI0>NRC7p{`ze3=hl5ix4Cc`qAia;J;r}Yhi zaWLO?uxjogsmW&&!dL70rE z%l$Sxns5E6I7ZG8-s9iKK>$|D0xkhq)>DT{^P-5$rQT2$lcWWnnWW+?87eD)&y+c? zp=$N^J>C&r$=qI(EhK$|o@W#QT_CQ>CkRY0OqYlczZ`}>d49}&Gwjhq=U4{e1A z=z?SQqZ`4K0qQ%pRrM{#7#uh?7LAa=Oaz$M4v@30_dJ6_8?hEDkW#+`p3?-D;kJrr zfI(q|7K2>aKgWT&p(t0MD0BAz{K7+`CU|&mWCf(&xXUyx9Vy0aDADHlxN1l`N6-11Wqex<2C z1D4^}9vxC|-MIN|phZ^j4#nQ))=rY zQ0LX}7ga4%b3xnMZJ+6wP?ia9l7sys=zaB%hw7VOgzBD9A5;O^6btsrUA^Fd`Y<;` z!3JWiv@r$%s|fW$%+VBSoCPN*=lJ$kutp=@^X4N?@HKib)DY#X-pkCtl!WF22xz$D z{g?FECEbey9tN-=&Oy@&64PnEjVOkn`VoNmY}N=MmnIbqPiL1idexJZ>Y*@TfzSkz z0ke!c)(HA;%jqfIqYzoaG?vpV2z;)F?gH{aA3O=hFq#B4UC>tc-ee238P=V1Fp_)) zD!^d{n>uGy!#lP{x;8dum|CNKP z&pbYTNN~RE8kbTXxax++C0bB0spE*T6%VRBecIk+vg;f@P!&3Ij=)a;byrNM0*q`O z^EY0QF5&w1563>PsA3?t8WXk|Ml=EMzBBJU+T8MQzxe~bQ4bRME+1~jK;<&c)hr?a zBmezJ!MKh)!EvML7(?bhI6eI8eP96F7UvK+ZyrFqf6Is8^n&ug()u6Y$CtB7>V5ZNPyD+UwJ&ME8Jj4jf8j+lvYD$FW6Vcpr?(O@vai4KIsCb@1uLQ3Auqj1NRd^3jwUPQSI%+S(7}4 z89-~rzWehR$B(CZ$0N%}%*&(R&QvzV46v`7deq1*88qtZny0DYddmHpAf(ip9yZ-A7K zA6w&|PqPYV9vZ5rHNqsF241PJ;(iaBq31LgaE;c4@oQgz6m&DTlB!d|Cyo+m^f-{ia6YmwHJuIWAv@e@p^ zB+duSfO^_^3X>1u>`Be6RG)!Z<`Q2A?Yj=0EsD0vO6C&gxS)B^z7NI;7zeSHG3*3|uwnw&?*(JfOw%BO>G{i|sQ;0=x<~u#$I_)ma~y)` zQpPPu?X~5D&nMI!GXr908r8e6Q=CkjoZ;7J3$+CweEN?xA8P@Z{K-9FDLgSIXE&Y# z6x5t}1aWfvORs!4lE>}@oei8%o7O`I*Zt`$e&=W;fIEHVKCp|imC_@e5s~cbNGOK7 z%Ns#`(hxUf)WHii-#Wt0BvmY|LTK+MH-vKgT?-7(Ih%*h`y@sc&^`-Rrhe+1Zu2eT zPJln(4YtrC4e;@gegys>Pd#@K?*7S7tGnpR=ukQAu|!1=9GO28P=e;{Sv1x~#4n;J zHeyfCXJF}C*T4kVS3=W;PFqATB_JF}xNCCfg=#_ zZZ6cb#|73;FUA|--DKrOi~^D_K_>bIh-x!7nM4(S?etqziCO5l*kRNLP4rd?_3@Kj zW1Y5R_BP$!z%&2+O`3VY18k}~mC>snnl=iBQ>qv8I{y;PeUWtushMNw2egf$g}0~| zTV7DdnQ7dNjF7-bkBjVD>KlIJ9?>&% zMbhbAO&@*};sEs5Z~sV}2#pqyfWdV0>B$jS2bAvBv%u?%pf~$L+KAP4V;9g$8DgCq zVysS7+iVq(@f=m%=^=xYzd5^7aKr+V>T1O zU0UGp-fea1H2h2*Eo#ieQkfq#hN@nC`Uc000SQ?4R+(CW_KY^L}my~O=(L|yWP(7vf`hR!7k@}jZ} z2k5$DdI;boUZ5IA;K%?6_|xBkjq@ZI*iheKS3eP;{+B#R->rdk1|&gs()Ep%um2bV zh@}kxy-&_)9T=@M;?W&)0Q{JDq0p<(N=LrlbNj`)ici@WSl7t=1>g%}WT-l^!*K1t z{;Yb_6e`ye0TRTRcl4r;(ZQD-f^`N2cL>aG(JA>22A=8q;A&-*d4%Z!OzIP*70I0n z5+E2$0u#jUC41myFS-KYaz{aJtj^OQ;2^(=x7WIw%L$z)P;?2AgW$9bvv9JGNl^#_ zj3U6tx3`1dzB@M8)$tjn4DCsVPbiZ^&^IWuzRT4$0j+|e#eAd$VnB;2Tj1;TQoJSz zzz<{}_2}g*ic-+Z5?Ir`DW>l-N2LK5K!AB$q|f$La}y(8kZ*y^2c7UZcb*Q4EjR!d zws9zC|#2E)30)t-1gG z!u^+;gVLN_+*T=bQZLic&AWm?k0}lHNl0d8QOQMckJcFQE5^;Ha`kJXxiwr)xXwOC z(V+ShiJG7}P`%KQMhtfw+f>LY&P$hYPl!D_8sI#aMP)c_oUMnKuocYyLPoj^+2gA% zC#+d`^MvaY7tz|7k*+IqbzPxNg=qN9w!Ze<`NQmBW3lCEkS5Yz;6f*2!T36d zMNPm;Q4HE(X<^6-S|C29Z2<-r?N|qz+Gnr{+&CYr(^i*HVf%FW*?|hEjJiQkUd^-;BPFy42=#}78->@XX(*g% zac3dm2rDbhrOiKssDJ;*`y7FuNer7kdUP1Xbju6^V;vEc46f8b<1PV1@n4_1UsPTQ z_+I~=D7*}?fqas3!5wafBw8#21Z;>9{$JnXD4U>skVn~MZn(D`;T6FkzA{M$jifi6 zTY>aTWQYo~y{I$Y??eGFO9vHlcHsKMI*h|Ud>+lWew}>vfh|vFk)Yte|M0WBTrHdB>a7=caWqjo0jgdfv}9H( z2S_mK(wJ1{erdK9oQJ|V60k0Eo2ei_7E3+y0mrRlx!vKygH!D_J&=Ik#{*7C>-ovsu!pJ}Z zKJ>(QTn(=I<*yW0WVm`n$;&&SD~ab4E_4J{rXqFKeQ6oKls+87higM z6CEKS+nZlw(PR@~we~qE=@?d@apTCJeh=*ZU(WF$?$ej0(U*kUjar9M3%=eYA$kmtjj-*z0+nOgxE zID+Y<=!gbUZLZD~m!>`dBQ4JFP#+bEfu?@Frh0{Q3Jj}f*P~~i`5VWP^Vw^VXt68^!SAJ)nNj(Rp zmr)e1!ytpEj*QNk-zhmr>*&}KQ zkzL%C`gKI*iN;2&`Wy&4O~ovyTqIBey76U(1F$pABca1-1zf#3k=?q)K&t`)wyBHp z5b9fw=4Krw=%@qn@&OPd;%ukd+w}v>=vM!oDk>Rkgw9I<4wnlmnl6};9w)6X&{?-U z+tw55>O5Co?K6m0G;daW%&`qn0)xvZhUp4)28$H#(|f518vUpv1e&{#b-$`sP5{?V z)XVM4(pHz_?PHMsAPyflr5?9f$%s7LCmJt5)Zl;s+(eklMDDPANOU?+KyLxJ?&ezg zTJX%AjGb0(axRhnatH0VfvK;QLk5BXCL=IhXz2Rj_g%AA8kDzbK>ZWIB6|DUtnO_} zX^}3sb)$2|r=yGs`1a$64G_}_?aZb^5X0!&_ju!GgVDeR1=EmK|M~SVGVrx~=An8l zr|s-P#>IfeM_RgSXi4rnafG8KfduU%kii@;Q94G-TGVrI1}jZW^Z-ybNUt`?!syrn zF#;}5GE>bg^_|NM0w8;4t#gWnhBInw$PpJ0ToN^khUCq_klV=>um;udsNd3q#&~jJ z6`FmRt|8gR)Zq9dKEn-mjuQuZ z|6w^40&z^nxVRIXnKzp#1`nNZPz;vqo?htip@BCUApm_69K6b!#!FnFHGs(s#>YE% zgE3wKj;Hg%bLkL`K9G)ZXh0O*b0=thz-m+^t|uf5B;Ox#nKOgHpWX3h$&~5zSI$0 zEwqFqy-x}n$`3^Qefo!@2u6ha1u#yva@fzU*eyD&FOD!Cv{|d6>J(*|(rtkIyoKu% z6hb(o={sNn#3c)gQy?ou_qzFXC@=zJF!EXPw0bC=aw&nbJTXw6%b9- zPy%)Y0@O!}>2{vPsEq*$Dj=FcHGv)`PxU}1>8Cwc-g%K>b@L}+k?OIG>VsPGMmfc- z_ZQ7N7+43!uv5=VIH9pe3OmM2-hRfmOb-H_+y(!_W$2w9cJMC7UElw6_pe!hH<{aj zTdPRg!VqFuw};vT$2jw0hmJsdmz+_qEiNr^^{e#SQ)nhc$9oP#T9Ugs8xX*i^L~^) zr>_l1V*=#$(yv#27NMlQ{)_SA6=udH2w-fSiELUI@a=r*E20I(PWbGKs$(&i1t32s zwNHA5TfA#LLeV?}16TG=@%dYX}v$M8tISOuK z5H6&F(ei>ijxy3CjX@EaB0Ahe)M7>Sm$F8^*4`HN=e5HVot!$?#0&gE z4w_?){lGSz4it(2U(>ts54CeQ-CS%pJz4F%`b&sxP^yj70_tHbX{;-Z5F3Y200C#4 zK!ffObg~Elb0XN{vH`!sZE%Y;nC;FOunjx?PA39ZYi=Re#1*dS%Yt~tu$6n_HaWYB zUr1x7jXtg~028!L(_eX=HMz&GK2eIhZ0hOrZPFYV?n-0$9avkWV-12gB&MJ)ISKRe zj23H|otBLU*%{n`CCm`OyFQS)Xm8RU%dOxdLwhWqowMwkngTOKC)&I{Oq?xL{0^DwN^t(`;1K{Rr zMFsD9^>a}%Gf-6ZFek9Qa0)X|K&kDw71g17_+`i z2quS)5DvBgGEu2_f&qG6Nsds4emu*&U5?OKY1x~F4B+7pf0ih{aS%>paUYw#p=Ayy z2fxHlu46Mf3w&Tiec1up#fC0$7Wot&NI6M7#~@GRZIB)Xn11by#XDj1edPzXB%a0f znQOSEK8^s;oxrQl_t<%vdQ5KylpZo*SiLAKV4nAZ0`GXHB4f3ero8$kux!vWh-OlM z2y#VMN6f$c<^d?25}>X8Sp9%Pvko8ii0Q5R;W`Fldgl^&0~czdKaBtS%jdZ;XCRpU z(}%#d$JIL#O)XpK0Zc_;^K?1j9%@eubjI*@V^N>APLh7cUO!KyQm0dc>okCv99ajw z>sCmB4)g+Ty9I_6?rslCZ;lA=+CXQ}or2!Qc8)L+HVMwaRaLUL0@}8H@bpn#o-coa zh7Yw-B?i;;gT)Qor&>!)5yozxTM~LXtc8 z0?->#qUMJO51M+Q+ncj#Hf?7=IT|g(LNnS29kzyvVCjjg+exe0hVBDWpCi&`%Ttb< z8zussMV_>3jP#rr0Zs#kawValHkx4Mpl^)PJhsY-*v+D)o?!vmL>&ZJN<}s=(V##l zQ)be*nN3R-dXwpe&?1H?hJ`23efdQ&My8s1HzNaT1ZblTOzWZvUpogm2AZ%N)@g-GfKzS+yDi^>J_wHcxsARVf*KaNnA3D@=LVKs zC$rWSgBo}v)1hBSn>T`-Lm8o*Z|4daun6jR->rt|@tv2xpfU!(HoIloPDh9E);nNg z>2d=B>Pe^GQ0T{L{}^ZjG0D4UlI~;8yn&!D!Q~zW@UUM9llPLg`Fe0H0aN;er+e@d50> z9_~#*n*x3yE{Tg}4JaJg@E(eVQdtiM%-DD7lJ>-0?b2YI!RVoWpoRVba%uYF)iiJ} ze76D&SQ7!x`Q75Y)U(x~julMCKx~s$dpN-X_1w z-uWK5=}7vybf=GXo{-0`L7wWPlCQEV?#C09y1M2d1Uet0Jdy45~o=TG^`Tw#&hKacDE-xH|?{ zf1iC)eMl5KR{R2NH?}$WE;`$*O%AM(9(jz>7wby@B)uz&moBGZX*7^ExxbqLc54H#5zUeUmgIc}g z#v8{bBWSRSRtZjtXDtLqM7S+~@L-OPM)bt}ucv5YCl_o0%`kixxWzdTU?1w4bnsPy z!<$uEaK%@T=IUXT+uyz`fIf0hy76`QtG`Xm<)G{@*Euwpg4Rqp*oGcmJtg$~G>b>h z*tU1#(5->hE?YBEov&Hn<098629{=&e&papbl^>e>Jjk7!I||nmM4};3 zE}=)Q>CBi2>5ZcMLb#i#Xl}jDpUX2P9fHS^aqBKLy0m@z!r(ThUdZw0Jtc?E(+~i| zKyZmpDixg>xT)T4q5g5bOHie zK;1e;plSoy{`?#o7eRmh?eD>(K>vR*s*1&!&X$``F`#Lrh+VMo#7uB5Mvwy$V&A7b zbWu=i*E>b;n|}b)RcipMV7Drr6+=J+z5h9|w_k8r*Evgw!FX&`4?XZ?)D?l$^Tz1v ze9urr5ECk&F-*e)nSK{K1J(EJ(NOP%*<+&^gUqCNzcZK^lSccb=YwgVL33dOniI4Z zwhhj>qpSkOX)`dGQag+R!xP-!qz(nf2Eb9BL9uLciy@%T!19-Gb)u^RbmoTeG44lj z6i|`oJ5$BL&;0m1MOW#tH@*YLggw6T8}Qm%uyY_my@)Lc2DAElf`u;^TIdsZ8b`g> zfCMgSv9DKNF+t_fZc}UE${9~yptWot-gLbugZd%vLKI~fB1H{9FM_t7`x z0Jj$P@K|=Wb5eLw%3GrY&Cl92T7Qonk`HNt{g{m}g1IUxJaBX^h)ZAZv zQRfp{-gL0KU5`SE0i7k!{*i%&qXyKcHYvjVyX8l_do9AH3ifNBDA&(B&9tvvJP zF9gSLLIP~Q`sL^gbY&{f( z6MJCXZyKYt7&Nkx%(Vg@lRcs^3IV3jUSYL?XMOms?eYI}|975p9b(*s4kxoD z1zrFv*=S&DxuCP9w95SIkEL_szwZAfH1%KvNCqk`FK86OKn~dr$T2a;yJ-x1!dBy5 zPkTCSbxjkH+M3}u-j4+%0sFL0TS8?a#7ZT-(;wKK1Yz(7J1iP$^csNzgo0*v5@{F# zO|OrQ<#A(7mIfVG$t*2l{S4JZ5YV-#eGOe}hBTJkiy+6y@xs7pJha*n^(MA)a1xE7 zrk;7e_Tkc}KxDq~DXpW=fMX_P6KDox4Cv_!8HEDey!Y1q8MLHZ z3Vp@pl?B#=n>=!lIX7JkFqgSPHhGvKUc>OW__L&5nklP>06dr_08geZEZSD;y&SY@ z3`Y*R=CHrT6``ehLh6->;&v0E+n-wKukGS?yq5ZU^LEsO1(^G#Fnu})fvHn zPLL%^zbK=ODa_R=}sF z1H9FxF~_)2AgXD@9RDUg_Gr!KsebZ$6@<8Soz(fSNa-fiTmZr_$%T!E~14&&A zP&mdMhyf=^-=YDHAAAM8NV*!wA^&uLDtH*k6l?|$1U0?)Q*fho5j@eXeu&7M=K?lR zxpi>Fx8UmMq-Q1JTp6@%X@S%A)n0i93#7Gx$2i~ayU&h7<_lxdPrL8n^<|wVJr6sFmgzoxOaGg zOH5&8tDEUZ-#tu$P6G^qEP6Y2gX%q(lAaQO^a6F!Y2emqrUM;mPMZV==tRI60v7L6 z8!k<7nlJ&hV4`g{Vz2#l##jYyreQNJt~bKL)lIeqPCx*+zR|G*!SGG^LqxH1iuD`YUb&pTVSZO}SC=mH0-O(I>qz-W5wq01~2?&^WvOqM3) zU?^Q~oU{c57^l_8oZq}3x-+W0q}D>OwAFx3TapUnwQJZOy!9aCYSwoRoLg#}+|+S& zwx+rY9N22i1gCibx}Ib1(t?1`ut>VLKd<8=#84JwWur$3H}Ct39of zamVlm^fKC@nm{^!IJ0opiERB#5$C283< z3{bY}xK?!E}L< z&TSrKM(l1f{ntS2+!oh!K&R;d(f&h+fJOsCSg{z)4ljNGfgS?_vh+ErT}*4hX-r_9 z0;bYMGL7g`AiDDGRfqI|>kBU>LJxNJenv^9L1xtdQRT>XoE=I>p|n2w<9>GJnFBkd z*TrevwIpeVEYlivczNO{>O*JUasb?aOVq@bWKr@~+f!Uep@jMkh6gYScv~A#-|672 zHaf!!qE&%S5wwkV9V1V`BxilRS?x#(*g{V2rWh=H!x-o1FW7_ulUx_}+K_ zmPQKaKF|9rYpuQ4UhCKPNHep?3B-HA7rz7>2c?1p+N*bFaNvfm4@$_%2B!cRP_dSP z)RBEC%-V{j_2H#q9}Cp9(NJ*S6oAse?PWn_A^KYB_!N3>1Vqs?5?u6)7!t>3+F)~J3@jK_Vq$(X3!J#@ zli2h@Yjd*0kZ0WDL4Y^tbbeTuv@9FfZga}9+-tOvN+Q_j#hgYHD0It-)f)3~# zV$Bc{EgOA|UiKPz^|TByfQw%}v7Aor8DQ+tVj-MqmUQ$;?+oSJ?l|-US*1J(;2tJ( zqQK2wWL&bniJAEMix%(61m8`@UoMC@wFT~xsp<#{%Z|!DLo2hgW-=rJW(xxVsPRlU z4rIoy(wn>4(kDFh^rR?P?u1-+@&tF<0jmU!)%JQBn901cv@+z&vhAwo7R`FDt%Z33 zP>h1O4bSEp-}O!?KI=o4705VmE_#DKAiyt!6UHro)q+^zfih4z$g*3by(tuXpsa&F zbxWBjcjgsplDymKrU}>Wi|4%3_B*r>+M%O?@!4z5QjyYu7CRV6rtl%IsVfm|oreJo zV_*POVJsdxa7{o!yc zWsr=}^#C0TyEVON0TEAO@97zf~g0x zrAr#ZE%uPKI>7s00?(t7#^&3ixj%s65z!n*%L1Np*%sa_YTb0RJQ?`#5wQ9M%U+%e z0(<6lz#$C|T=^atQ)p>}`z}@4q~_B;YUYi8wQ}uu5xn2|jhcHo0hu1EVPJEVzg z02qO}AnmPjNd14Fd%7KxV5$fclg6YV-=#B)jXgn;cNf(?TNP9ofB6*VglEw^*a zTT0!gJ!-rC9}P!B`h%Z|1-%mtQZnvFZUnnb(COAooCD^DK`&ivw5Kf9X|A7*H#+15Y+*T;;b z-vucwFWSfFr5(^;%>rhXmZzPwN=j*ib2flGD`|3}#YtP*@3b+fb%rszN1#3DJi8-F zs}92rdS$xl(a2Q&DIB6obo)GX?jTkF-yi-3OkMXp?dj%?s1Uz=1j?w(^M*V{Pok{2WLD0j?CjCEq;CnZ-^6bQN3yOi)1LbI z_Ij5-#vNUp#8s;-|NEmqL&L`*g(q|C;SIaINE+x&Z`GT>gak^ME7~vLc}oY|!+olL zOV@OgMSJ)STAKrH%*o`{&>{%O6dku64FcAC62P_O+J_R)Gy+Ucv`<2~L)nsJ9nG(5 zCp1GtiZ2h{0&&~!3ro6%lD!qn0{1;s*&aUW$`t3efFMf-WBQD=e9}cS&8|G{78_m) zrP|_M;>6vuZufcbfQK+nc&qiU22;Ta%?#4fhK$cRde%{U>p=_0sBP^_u~BLd28>34 zdUarcJLhu&#jzl0KgSW%QXdB$$h`Eg%-uvYGX==q+8v&NynM&oFG4tSX^Z3M@9T`w zzSE`r?T%g>+>%9AdDuMHzzaJcJw2bxp(W{0K^Vj;sDS(E4tw_pI`{H183Heypsg0A zJ!k8NlAn0Vb9~~3hmo{kdA#|jI1z+5m)AjW%Cp`kUn2G+Ysk{@lohb zAlgY8*8k{59=ZgjDUh@Z{R%khlvy3?nq1H}J0zZeLJgHeCid&r8L*Z>={#iIr=`C0 zIK=zk1>;Som$wRFgZohvLvvsN0ot3mqF#DkISfsw%na#N!E5DqUCH)93`Kw&`Rq>7 zX(6_wD%|VnV8CH&pR3yqYAm!g>p%Uq^n&+_=ElrwDC?zTdJClwylS{KBsq++FR-iU z&8Gm=7v|WOty18ON?SEoAww?sG<^UtsRWG-twx>`#8~g;5|=<+qH?f<6HT!Ia%=_@ zsH>o%|Mq9RKA z!KYH~8M2|==Sq=P`fKez`f*$o^j2x#e14D9fAl9t*QE4S4cZMs;|0?|*`PfpNeM_` zF*x%277iz}$c?d;9_Y{=W}f1Cf_g7V+Gp6-1;uyx$iuYIt_%%pU&6K>#`F{@1GXry zc+ez(_6zRX=h&r9-;HtAKtHV??9N#D&)+@K(W|{gWS^m`0o=C_tRPC2cj($jRq5^1 z6<{3I{xq$O%lhDzO_udldf$`Y&ZZ5fK&)B8TU@4__Jkq24rpY)0Zk%=2XOm~VSUF| zNJYm?B-jAcu{70b6awJITxdT|54`m{SVXh-L!7Cb(g!}O>*6gxjuGv`` zt}M1T(EI`eRYs6X1nuoizC-|=$AZ8&O83-4EGe{?n?r*eL>WlHmZ0#;vtK?7wHy?& zP}CfkXB+YxpjkR}b>JQ<>bZ4g8oEU}lf4#CFyQ777%Z_lWUO~aS~`%IjtSw~*mURz zvq7hB6#ja{#fQ)vW*f1$W3}y;cBhEJBB#<4lbV1Y1O`DYq4}Jtq;EXgn|{;Jf&tEj z4)YLP-*AlU>10S+uQc%N{L$a8Xu7i?DJyO;b}Z~D?d*N~caSs~U3?PlG|xtlt*d#- zJCzsV{sCU2xU|HrKkUYRP}6vOuwiuuDs5hM^i%LMWKI%ksk5=%~(N`?dU@#bphg<18?MDpkptwhN4_dfm`y1bn8-nCj z=mgKp&ozc!(|%l>dzwrLv7CWaF|BH(eJi>g1HirkWf(oL3AjadEs3V%WL=_z>s@^Y zT{&;pmFG&`{jwHpBT#rd388D9RTQ{d2AIPy`~)H>$4T9fJRKOYERBH9 zS|bX}4{bXQVk|q;yMEhXBW00XqCW^QJC`*=a6e6;>^v}_pN{3Z?tQ9oK{r$%CP1)s zyZNPow~TmF06c$EdxMS(v1p$KVn9UGN7rAeb>}5dVg!v-4Cmvdr=3~ILYZaEr;|8~ z#)Q?grq0AF5C}RADl?@xal@Qs)q3T(!P=AY&;V#k!2VGC065PFEDdFbbhVbScC)&8 zNs>M!)N^gtqLmRtF}GYKC-7LNHEjV5Fa6`8S49Q?>S3E&_U<{+X=m;v#Frr-E}c4v zEF*`O%D`wr;A}eA4)luGsx(YP?gG)0Po%c?IobJB19Ojey7aY#Vxzb2DOe9 zWzk;R<1Lqpe&H}v{0Hn$qHH@<6VcokKl>@pm3jwrVYrG zU^oNs+~a!jVaOK7D^LjHg%(c5sX#=dg{cy?mtLhp3$3lKKGunlE-+R#FHm$YSc8hD zSQWia=o1`gt1e|K6n$sfE#S?djgMaUuAcepGk3_55$+Y0+~jbHw82>mc^v_FXG4h} z)ElqZ+9wt5Nf`fhG)CQGrknzrcwIqaN-0A!dxF_)1s#2h$jImhXb>RIRNGX~002yM zD`3bHSz2-ZU+idOWmo^o)Qf*Ylit=IZC?&W`)Nx^fHzY?IK2eKg^7%yQ3P~9aL60~ zW`On(zys#dspI=^k4h%=<_F}@ZFjGReD+)pT6rK~$5J0Q+T%p0XwR%!&w!>pTYd2* zH1?acZ=^#LoGF_f6HQIsd6A_F(EdP$3}iF|sh~O@TLGHB^fEY$(_+{jU%SLRt$>@j z)YJa#aMGTb%OnJN7wc=KeFH#@9w5}v5*{sT63ZyV?W;GmUx{3U8q5gN>T@+$aP5zD z{QFOV0kj%lRB$Z}o66>y>SRcP{tR{Fyjws$CsjciKEu@qh1%2c?>r3V4FX1sN*$Y( zr_p@#sp^eRCMUop3z)%GqB8ISI$Kc87ad6;W`XyOAA{4){@h(DO~MNm#kLedq*|iD zM?va_-$>)ocs7(nv#5Y&VlbljL1nX9ms!l-CR+wED$}ms;Yusf8i0eAma}IJtQEiv zsE2#Y<_V4Q46cCr9dMd6jWZ<9x`W4VfeBjoTAH9~pP{>PANS_!T;jqoTk-*mSf_P6 znF@3piz-*yS_!7TQ+NO+%ewB$>N?T^#!LZ%MASm0@oomJWo?3cEvmdKie4O}IRN@f z*Cjd&Qah-2=LTa~`w4||w@wRmjnP1WwX|*)qL&4>MO|RMpb-*^xfTN$bddO&mdC+V*n?NA#;Wb>wCY`{`0IXGo zqJr}nT9RkeB|gisBYjRZM=_Vl2yo|J3s8lt8S26qcib=i-~}|0z{sEmI=Y!;z*n@2 zV9=(`+O)s??rG>}7~wo2Afa#t;t&Lc>5JZf${xzt=~f;AsLd@b_4zT|f#_kLahfcP z36{nXJBfFmzVNFSns>&{3ZBRPge8D+o6L5A5oQpzPDE)LGY(MGRetsWlSXysT>2dv z$DTx^4a8|YnbJThhz_ooCV2REis)+lEz%0)ON){VFIkio)1>=jhL>P^@WLA`3S4wE z-R>#sadC{wVi-9`k3Kq2M z?Y?U}M3ibBFIr~n)kE6?@#d}^AY-Q>K4h*j?FJ2>-2<@>5*$06R|AX-(G^Q3yZtg{ zZrhPi3P9V^F$R&G)t|M!;_}%E#xxcr!a=D z5|#|nN<%N@F&YHwyyNnt{dk{<~u8u4E`q6u(hfd=H{KM0wgSHFcgc)RlJ`sUB$PZrBr$T6d)0>qul;^`f;q<$p zp^snj(i#D1M1cU_qe?${vKT@wO!_MrFf8K~Lpqo1xA72wyUYds<;8nillE9$;v!1G znX_gP@b1$=am(yG3FSStXjVA~pG(^3>7a7OB?Gp@?OE2$WPrBo(t}8--qOR!VC;-) zKgJG4*DV9z;KeoQ7+}!>lv6k#y7Nmjv7^X5IN3E5-Cs>$nQfV5v_)qeHbxnesA9nN-Of>hciqEdTjj)B6N0YxiwLOVO(GFd7v@mP+j}9_Sf-U9-f14FfUSd8sM(G7`E#>mcCfo%D6HH4i*}1k8so z9e`0TeXPO{JW+at$3z7{sh37jEzcA1ctH%;s_r4SPVGOBMl|zOaZ#J8wH=W#Tg?Da zzJRs{s;2jOMpqKpG8s@{5BBzL>XPB6Fi*7(&ZhmMEhHl$n7NU}In=Rjv_bgWzXu0K zcGcC?Vk&DrYiY|;kO~bs5d7wM=SLyNRjewZGAcGf7;j$klb68MVrk$)5Ku%{ zF!&Es-@Rw(@*~h1I70)dk72LP0BHk5If+ZDxbRX`^Z^v+*B)rn0OqK!k=}UW$p-J% znt|H-;%+);_PvL;>dW%!x})b6K|P6~f4c8&VaR>1k(PSvU*xdExLTFg^DODrd0b^F ziGYwVqG@$sFi8 znnaEXhj0Z2@N7V>fFTU5oIeMy!saZ~z6qoTp#kY_&ETogUx>7&-<%deI|Et`MmA?b`@iHHPUemaRE1)O+A$mIO| zb?F9g2mwpt865BjF$#i|r^kG&(E`%ndN3myQu}Sc%1mC6cIHN!nbW?^Jb*V|&e%!= zwPurnl+dYMrsIJCzru2Vw|pk{derGcT6WI2CX4g7C1q%j!?A?15w2E4LoR19xJs`+ z+1fJT+^M}q9Q)R?G+eo2MHKPEvuCuos%X9ZTOVd;-Rh`H+}@cwE`@q zbo7ig!6UpQk7q=C1;kPTa9tguUVDHxne|ay>?m`qLp!cZMul@{fd6Mtf!EhcOZ$#c z$hgZ!a`brLhxem1PX@s0_|I5uI{R#WHYJ0r;_YE>ynQ+X@^FiupqCb{YJt7lBX!Wj z!Qs6&vU;V z7Zu#6YW~u%-+FL`DYM!L_VJ6K{D{WcaI0f8ClriZ7-yjcm@betCF_hN^-1?0TBJ5Tr!}SUhW-FRH;Nq z3!K%y(xgcX07IZFuk~Mimd6LPX!%sF^)trDS&0DUZfSsXMu+~h;GL{1f-G)>VGdY} zxJKaovm(Jy^Jd)wasW9G4}hBo!DtE_4DC?A;z?zo)Lq*E6h_%Nh`}q^r4g-( z3C@c)@eEq;EK4a+;sCbX(06=2PZ=;WCg@*fA8Nf^V?UiJFse0YqS@Oz3_iq{Q8YRo z=gxTWy!I#XhC+vNh$SAwb!>vDrx}BoRKXiy$W3J zaDVRL%Hy`SD9Iw)3y+r{WIB0FQ%a2S)B$=}^I3^{)2jN73tf!k+~9Qf1V%7$hCF(~ zRjp8o67co2cc3$?blB9)Z2){tb1b-huFD1=n-)}c^r6PeB6L=fRe$-jcOM@c^-f@z z0DLV|eoThS z?t1;?-|u}yZ3Er?2^W4e7<14dM+{E*#6tVv$LcPm-Eh&dB*WkgVSt98SEU?kU&j;| z#5DrdyXRjL4V-HS-n+w-rU7U>-Ys;~+UJ$mBB#-yWq^GVHqH{V2ucpj8VoA5b+3!o zI>I6heEj`^5r{JjBd7L9I6trlVkban1GFa4$w=*DK%d0H09rAw=@%cTbyG9d_+QU` z8%^2-=v7v7U_Jp>5yI0;AsLART8xpy9Rx|2O8k(oo`@Ob8fHVu7~az?NX;PX;cnpZ zjORu!;=SL3o#jzYj*)x57oX3D+D_^Kv*A#*i|1@T`BV9#bNk1)=SHs*mT5u#JTC?u zeO7hj-+%p>zjS$s;N<`s?}OL%2hDti0q~&z`OLq~PMjW8Ij21mCYc`D;5ph;nUtf@ z{N#sV4EYY0mw|pTpdK_f&T}}w_KO0_O9^NLj9=i>Z;2GH4v|JS9S1ai@CWePHEDsn zQ2VzZ&wu=49t|zfenF%Vx}lghPf;dkWpQw(Th>4F0)G=NLY~KMUytuRb1);WlkB029o#lZZRn5Itm)ralSnVhi1R20}21-YwGpR^>|_8_w3VT)z1#uhnrB!!pYK z0cv9fcG3j59@n2<>0||)QNE{XJXcJmbWGD)yDGzI=s*H`a5GEvy%muw+_}<~Pqi0q z=pAZ33*H1ezSE%roT^%n^_?k;or!1aDZ6yV9>+UluMo5zceW<)6qFBs;iHlojRjYA z(}ms#0)jWJ;MLX4c&1n`$c7`gZP;YnOz&dS*9Pr-o4R|uywGW2KfG>o>c1+Gv#9o-Rm@h0` zK+E60b)RU$jm!??Xl^QB)t!XV*{Eaq8XUAA#L*>n>S}b$db3`8syChO99;8HCwL|F zY423N`E7G#9Y)mXTi@}WbVW0c#sm&Si)lwS`p%=;zl!_b`4#%!`)=y!yU)}@Q`XC| zKnHw4%-+L7WhCazRMUWQRS)Hz-++DmFPxv(CCz;DkSYZwv?Fls7lYs{J}w(`*MEH+ z;pp=oW0*6E-hGw@47l}&E%3I4CGabMD%y5*gp#xL*|QKpV94dyAdX|-^wv*h1pK`x zGiJYh#%ybkv%YYdHeCG|n+hdM`?Z>Z;SV2r|4}r%uD-yO{PKP|rbh(0ODJy|0EbUU zmk%5;h?)PqRt4xAP<8GvKYaG&04+DbfKd4_V?pIAK29DgdNH$784()m1pNo7=z`|# z4OVRL4o)xVVpOiuheK7-YOW{I;Nv{XVc`Q!H*x- z9+cycCil0M%Jl$aYPr&ChiLC92Ct%_=R%x4=d}Cx&_2tLpcUfMPu5&~O;e>w`dlkZ ziCc6NZwFNgV5&q!POHFnaH>Ub21|y^I(_IzyGDZ+c@FURe|_|?cRj`x_17L--(jho zTilal*3*g{X+OY`r_ne-sbvYF?@#hQAHV=$^cd~cdaHu0a$$2MFrP> z$cX1H(Qll+83gb!HG}pYGc?_+XSlN5B``N1|7HUh&BPKcKxltT+j^ihFYm_Cxt7|S zudxYo=$TqB&H83B%I_GX?SXWbcP7H8&q#+ZCwD2y%-3IAATB}RCt`y2O;FJq#nb^z z1}ZUJPiffDZ24pGM&)d{qeKl=&&+VAbz$ILY}#n{U@-R9S}WFN|yWX#(zILa3#SyS9p z6|D!v-7N9q@f7+ZmG<$PofI5P|2DR956esw%4A9LMOU`rhLGF zUD~&qmOQprO1O-HGalkVE}%Z;J*c#Q9*AoMra&|ejS#D>>EU|)**a!_KI>s52;kjm zT2yepCIWOrwjLfkBdbp{({7w&-wh|;{P^Wnk)Mk}BKkJ$pOgn_k{N<(@ zIIWV9b5P3Ma{;yafzhPEA_o~fD&yNee;kcn&{P~4y`gLcEy9uZ@o}Sb6UN-S2Gt(X z1TO!=6Py9+dhO@IAKeM18D#9?QTF+D@eo!Ju+binR13+1ef}{p?aAbUP)t6_xg)+l zqdrbMobAF3V5uNrR)p|S)7Z&otqv`FhDLbru~R3l>;d$%-K+sXFr)R_9nuKvbcIst zD=lyuV;w|W&w*4>vQDgmcoBw^AaV_o-Y}VuKFT$;k7lOZN)kkF6PO?c;-fo`zU(pQ zAicfYLz^B@>2;G!r@1hyj3&SF6wd~F=zK;&-e49uJtvq~JN)8aTNf1CvLs4HniUNO z6~K!J$9HDj_$?IrZ)oZ-kN=D*GX!F-2GDKa`hY}bFaRbe)iLTAp?p@U51tb%HkTp4-NL*<6f6^ zf-?rRuRk$XXU+_?LVWf|<{iL|*uVpL6YXp%kv@k|M>}ZCpggvly_Anqg9CzxNyhU^!wmh;*>-I3t?_RSS;EL>b9Fq{VjJ`0M4ax`+%zm@Iep_-yO@HCv#^&Y&qCa0vEHcJqljB)3|%Uv2>@j zX87hSh0rs(7+yqs(jFVY-j!#2_I9{p2kEHn&FdaJUJ5#Ce>WKf*Z#X$EKOc}`|L_) znKV7(Kf2@k&8z@GqKLFkD~*uss(qIcT1B}G2+xQ}kDAX_!L8Mhnyy?s-uP9q%8=t$IbGib zSS)wU+6N>DSDRTRRdhhh0@>-S%=9ua&5P|M_=6`-t+{HSub>WUnF6C;2j*c|Ul}zf zWp4%VqBT!jwN`-v!65A$LvGx@{!EpHCY&>uE|x-CxM}TiE^5DO*{%Dl8{D_r88jfx z|HAX!0$}YIxtto=(N2qjJA&e8O!y{iQEToen7%_7uN)^90KZ+&_Y=Z z&7d&d9JrlYcTv_gz{+)Xvfl^-8jcYls7%Y0s3BTM^lbh=o zUt4uX!`}jyVEFV~p`YJx&-`T=lTPA4UcLuSF6aFhlbKAbGFp7$yHGl5FjWPh@e+Wx zv1P_&oVruQL@lAkg)z)B{>R-vfnXH*)H~(nU3${*(-+vmqd$BS%rb4ElXzJ#?Pr^m zCHK)W$z@NQt5aP)bqtaT=<>>;CscBjg*gaSgrN&cb5SsdAuslWpZMqM#!E3&|X;3)> zouTLN;Y3_|w1pPw^5df8uRI2R{XQ^&TV+%TSdnT22b&-mNi0?X%MMS`DZyo@sXUyTr=odQR+?%D4oS zpL64#(BK?f<*ufLe?0l^WlqXavvQrl!H7t3Zu-)Xx53p~dE&HRH3Mi?^U2kF&Om2y zk#0T|;lnZ=p#6zZ3oWK}tps8!I>C#RwJMu3e%f2WHbKSiGtm$yQHKU?z~gudH|hvt zKm@XSxmTIBXNq%jV7N-x6XrNktE!E3o`245D*9BNUm8yURJ?4nL~u`u%V1$3k3ljJ z;Bd$u`Z#|lfz$be252KkE~;$>j9vs7`2Yh*v%g1}_85yH?W5UrvCiGIiT(uW6TX;i zyz(ITbP~z=(fu<%d}Y`SqS1IiaC`sv`Y1>fh+?V4p_;+O>+gdCK!6X33ve7Mp(@zr zNnG-Z_7~Jnq?t=^ymIdZge$l2oTzhYgLK^DoIt>Y3Xni)gYz6Zdd^_5KjdKzpp(ev z9v!t8hCG(nzw&6F?Fj98Lz)TE<&oHA-k@a-LtyQoT<#9wG6cprH}+|-={ulo#?6M; z-}rfX8T3;iR^tR67{FjiWysl}bBfab>sP`frlJe$joO1d)wZ_exY-ePRW$w6!MH(S zDlwS;Ph1BxPfMS0rVCKW8+c5YG{Bcc^R#t9aR}~aR>px?d%gbs=^wV`_|PCR&R~G{ zd=6TH%UAc_CG*mfLm?Ynn)aAM_ZVnXpvqjGzHF9;Gw2V2mWcpvlPM&!1^YgHDs^^1)m| zfJ@7gL+^X9Li^&?s?_d6>0OwCq;+X^mqjq0{p2o9E|{Z3fpSoz-4Y!NwEp>#*CAXg zQk5%RSJ9+Bd(8(!Tq(Jv}t1hn(7|am_%RzR815TrC}yj+ieW4c8TTc~_u$^mKHF8Iz6kl^FJt%-X+^ zhqy8oOX?~!oO!$_6WoT%IjA%@@acEBF`AJ#6Cg`OD+Fg#q10f39&c8zg3c8tmVnV% zPEjQ~2GL1)XWLr!yw*CXM_Y^*@c}Be8(HvFwx>dkYhM8`?O}Z6JKAf{PAM@B@pYqP zvvVf|?N|`caXt4D5P$VCh`i|75eT&jZkHvoFIVOM+AvycAdmC{aNhkce-BJ>+NQnv zXbW_;o^9>b4BA#VWfkaL2_4HR1X(}iUf@kdU=nfh z83xY~9bRD<3QjX5jqc^qVQY{)8x)g#kYNHPw zIT_$tS}F>c1vG)^>xj`3J4>TMc`8Q+X-^f@(2{D}gQR~0!cx~WM4O~Z7dT70Ah9`H zr(?hat^56+`==c;q{Y~{@j?R)f4ujMv3|4zY5REYJOl*LWcGu~M>I=o8RPV`$G~U^ zKpmL^^~y_NsUYs!MUAU^Sg?z}vHi$u2qPT?^p(>c8}IQno)0X8)Tnf*y$5t@uX-BM znc)id-hE&UMSv#K4KbX6hUkwt9iaWjw(`$#TVzUbJ|jEU;$2MhpZ}2@1s*U5X76ol z?>W$*mtVO2M_X4BW59+6n>JJE!Tk!tx+3G5TY^s>hdl9jfO3*2w`?CF$E0y4npHrv zox}`_vCsd0;gJ_1o&WsClMp&kBO@)Yie>87Z^8U{qGhlrvX$9Z@2-FIen@~}`Q9_4 zH=1eJcmK5@zKU}IG{e#Y7^B87f{vumRzULsVA}te?KpQ6Eu9SV7yx_!Ra)FWN4c!e zO+_8c(1l-tg)dGAS3-Ke{|dOEz`ib+%XV7@bIRn(7>GcIh?Bf<`((??l;7QMS(na( z@Wu~*RW%SW=Z9@io(XQDbci4vVw3wlRrKLcr7KqiIQvhc zNJSU7%M}mFVBi8|*$$^lk{;oH7GD*FR_Qp)sMrVja4mfxk3kL{9)S7Pg8}^@-cOCo zh8YMukYJS~OFZiB7d^olao<41)Y3P4%(RZWT_kW?6%1GZZ6};Xu>_>WC!}W+m|#SN z+HbP7hIIR)WH1;28kSCBpaZ^TB86`)fAN%PtWsw{htd@8$~~JI1g2)%vH?Vk0LrY; zXwK2a!fXgfhGw`bQgeGbm0X*1KA5*%cwhviFBjb&=Ab=L4(fl!Ai8wNW;?WZ4&m!6 zx|6+boN}238{mMCGcS7dn?Hv=EC_;Th#F9IBUj+3JO3wLY`+YFn^_YA(&%Jv(8US{ zoMyn%#_#@+3C&QognfPg^Nmmdow`ZU_T zYB#dc8tonxB15x|oOe$enGno{evo_k9u3}7G7RoqI+w~AU`9;RNi_c6l0#WBFGb4$ zwEFNU7?;g{6;OY_`#T)sKJyo9)^uY~zJbGyMf6nc_Re4Z2^8m}Swh><>I5yc)8L`O zk%JD9@BJq2Gz8!ru;H{whw#-d5c;2gd|9-}8QMH8Ww+#u-$~C&zWCJ}j58V$P{q_M zF%1o4n+rIDES>;L zacAd?-=op$-+lp{{?~u~ufNyJ!LvqpP6;F>g*q27gy|gG1kgUo1DU{!g-M@{7pJLL z1L*Mq6@Xk=vU*(K|DHD_Hwma^aO%b=uvG0Abf7TE+;2UW4B^6{iL5RGUvUE~XPK!2 zC9{AF(j8Q#tyF<}^+_2hWhMx;=S)IntOAMj)Jc@boouC4bf~E!yZRXr*S?d&Me~JH zW+AIz0|+qc*T89*Z$M{jH;rij#zK1-lV5-V86v>B=<@CHed*|( zr|&FB?}A42inF;gwl^kn!fuWGuz}0xs$)iuBNI(l06`c;wt)d>LrRR#_St1L+ZdpL zk+%!r){80hP)ZOz$O|(1XsPg6u;Y+hLTh`He(3`#b3hYlcUA49k-YKssa)GX@zb4F z+p%x|9BRY)yHeXckL?@HL}k(n@)(r>jl9E)&U(jx{;c$YD+9&W=oX~U{`&W!sG0_i z76AN3fOn{J{od`7j0M4DQE~&c!{B&u#^a{+gU2nggbsl6C#19AY={vJob#*Tho=4i z$Z;K7G{}bVh0!3x;K-YIOOK9WE=Yl3v;c|Qd7>=0<Urmkb8f+26u9d<`7Y9F9G98X7!gYeEU0`nu)TU1Lhhghk=KG_G3>7y1TO3$Gw(uZ5dz?3?{zy z0tCRN*>R_K#%)@W`J4cv7nCQa6Sy1g4VEch_Vbsxr^tR@G8qJ9YeG)LyuUVF7g zMrnRvr-lhr+8{0Pc#x4Mwg)9u>%nb^nr*5uMcA59)GW%J=+K_$t75%-*u#t7WaI!o z8%76i+BFZ%H+)HY!ROc;D^2t14I^_K;5L}ohlwWX0PkjOc?NLJHPT6A0s~A?!Q1zG zL9xqeDD~R8{w?n$=}n|Nv`>}0xWDzYDKi~`s+qUW|?@(SuxGhHx?|C z?&#($u3`3!etj<3ayXbl`IS-aMN`d!ZoUd82oaG;ORC9OA-w+b#)~q-y5u8jZHdTv zI!F8Io34tLgeo-JK`~r}fGgFWR9qqLp=FUg6zBvo9^QLJ+L5jzxjC-WP{us1o6~+6 zR)(1107rqIqcf!W_eWk@?1yU3`-+)Fr_&4bpaqjZH*8h@;7HpV3$pfTtkY0V$FM?F zB)Zqo+rXHJ4d>%n$)Xd18D@pi>*^1r37*Q?1x$DWT^T3p6hz|+?cwJjJruf`e@fkBW;@py+YEk9UpZ#>5P3u7l& ztvm+$0Eqq6=X6fx%)rE4JveY$uf1W+y@#+y?Xxd+7#vV;V8$7vz?AJ}Fek3wMf+Dl zvGR_}rrumf9N-LEO_n3Uv+`76LBIG~?kK}H0F=vR(@xzWfMEbcg6wp5Y1%4jS)ks? zUY|CTDYD}HBkG#1TsU9_G24Iy5nn(5OHqW=s{ozaQV+%ex4}_+qNROiF?!Sr)J1#c znAP$u?Fmt6<%9n52Ghj@q^5;d=0BYh;F<(&>GY7=4H}#hIR6Kc-dp<2BpNDLUjWY2 zm+WN-oVlrH3{R9^l`Y(E(d7r5xU4jg|6VT*8VORt?hVyYy?5dMEhzLKmlBo%=A1p0 z2Vp}%xN$}Ad(gr-iF6|~cqTDZr_MjwRR!4u5-?;0wGb{IM{hiN8_{F{14mCaIt%^c zUDC%~W2nx8(xbE&_}W(%)#kGL-hP40q%8%x`K-1!l=w3^&c9ZCya0xL1T)KS2~7Lr z-91cuIfs_Z*~vv3luu zhpE!ydp!UI|0`29K; zFMlY7bXkzWOL=;Mr=*%$Z*8!HX0o-Ij`SC>l|+T+93#thb2d7B{tz^-pVu^iPSM7I z>xJ*LmA4AM3!>v3wACJT*+U1k+~VSG;Hvg_tc~1_AR$t_>q}!gNaSe|bFM6Nx=1h< zmQT)QDMO;cJOO4HLO|SHU(N`mYC1{pd$$)To2P`L$1RPK3(!H6D$1!V*3f-1Ji%12s`e-MY@FdHCaWO4|Xw*L#-^0 zGnTZZZYS@fp}pq@>Ef@w>S6t?nWzK z^*XXPXVdlC_Y)SO_=Jt9Ah56;C4w5-E0Q6WKt&7ypj8CB+tti{SMG4q*)gcEJS?Ld z4v>!f+y)T6=HpIlveXE8b_W*-?5u-1583ZSD35tHCTFSZptClYdTg_4in9V0US0H8 zxU_7XM>Y1TS@T&jRzWl~PzgFCs_-UDi72z%9n=a~0Ioej3#3?kz%4x~pZ+M_$2lgi zG$*ZdB!G4g1KGfJ3vNCVz@-_iU`Kx^M!o+n`iwUh?JbBNrg3a=!L=8{lCM7r9oSN$ zjVIdR@!q4n)>>Cg=_%=?D71}>qH=*L%^G)BdihcW`25%FUS?5Q=|BC!OxTnG3QwZh z+RcCd_Un4CD7Yhfw9SeB06ajf^Mc?g-abEh%+~Sd8={VAKWEvo&Hd?1&giGL_e6XB zIdi$~=mKYEb?DJ&&*?Fh3G@ZvzJC1<8q~g@3!$I1C+((eGYWjXblU%6c6zVAc4pFz z)6&G&eeJJ%XiYlDGHz*I6$z+%2APT*RSJ0{`1Ikg|LrlBotDW4aDWS-iQAbUeFNHU zOZygZBhQYe<=U8rydpsB^sTrINlW-jlrPuLT>;m4w{Xs{C}t29N?&Wz&_A8g(u{sD z8MEOZ<8UAY#W=YIo6Ke?IH@@}2`{~mtr@$Q^%IXb0wm|k

    ozkus;FsWV1@!;=00_J_~f%Or{5uVNCl1(g5U;Pm5)_0e{f%%H0jcb2o zasWdr-nG&Rp6K@FcjJr7JsqV-h1PLgv~)-5FqAX~=9A5m>?TJ#yYDiZ^ZBO* zyXs59GC{!M-){Tm`q9U44y6yAH$g!p1j|wTh;SZ0d%FLbHZ*|t1+9QLhU}w}6Y}4F_$$cj3GH{%+C#O^i_XiD;HE5^4TxgVECaQ; z#%Mn~$LdE?*A9cq@VND3p3L~P%L0q;;9^c4{TC-04Z*00{66XhQ1zT14m<>+cSqDl||#rCJX^-Xcu*I9qvWS#o^It z0h=jcvtPcU>i*5g(TwTn0&kiC+Zta!fLKYHWDsd@(0%?KQ!GULUm%p~K9|-V$bLFu z24sWwM;R|VC|%_i?grqs{Amkb0q`6b`PBm=osa(LeCu22`211n1@G@zayMQ48MN*y zbCw;K)DmpYt%``!e%#)kt`e{|B!HSd^nZDjCKk-GECCD}fDz7W4lsilVK!{j>|NV_ z{m1UpId^^aoE)$a0m)l7Enq;^@PYvDz=%@1k#3MjbOa<4N?Ru>?A_woA9= z%*KNEFyp&`aWp*;BK`XDNh>QeFwe450pf*$s(Csa7|Wys07nqFPvi2y;>yKTmfr-j zRnVxvv-VS0a|66M{m>5@0x5q$+wfvB>Hq;M;iRGL<(d$hA{_&P`x~NxzjYdRq z+j>1FI8(f|uRf6vr6d(>1jMZ2UVLf9;*$7(-2LJlv<_O$Tm=UF?deytPdsTFJ;$C# z<9ONhq7BQOaY z;i=F+zDtFyT`JQKsMh|}VsO99D({@XQYr)VAV8;9gLrt4xgZPza2?7riN*qJ-zz#@ zVwaz)W3*MIh0+)0+LM-{giYx??tIm<(kzh#eU-D|T(hc6s*Yi^@ zTO*tHoWQ%2u>$0nxL9`O9{pzVrE_S-$8D~%HV9lG7L8!88==~NdUbWYz&?nU5^(1{ zX3W+j%7EJ%l+6O|vs}ED^3LPvJf*WXK{;!&Gl#d*Ff$-CC_YtpoOa*b2gc>2L>F1b zR3bnVEN~+Lmy*2As*(#ju!1pffJwC}M=!4_G<&4iwZ_g~G;n{C*^aApJ9=OKkXPcW z=*YZHusCKIlin%Z7!I*ULoB`ZC-Bu&2FytW>>sY6?O_^Xxv;?rT5IT5SSn-~XV

    + + {children} + ) } diff --git a/libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.test.js b/libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.test.js index f6fc8185a..7fa6d175b 100644 --- a/libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.test.js +++ b/libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.test.js @@ -83,23 +83,23 @@ describe("SideNavigationItem", () => { expect(screen.getByRole("button")).toHaveClass("juno-sidenavigation-item") }) - test("renders an active ToppNavigationItem as passed", async () => { + test("renders an active NavigationItem as passed", async () => { render() expect(screen.getByRole("button")).toBeInTheDocument() expect(screen.getByRole("button")).toHaveClass("juno-sidenavigation-item") expect(screen.getByRole("button")).toHaveClass( - "juno-sidenavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button")).toHaveAttribute("aria-selected", "true") }) - test("rerenders the active attribute of the ToppNavigationItem", async () => { + test("rerenders the active attribute of a navigation item", async () => { const { rerender } = render( ) expect(screen.getByRole("button")).toBeInTheDocument() expect(screen.getByRole("button")).toHaveClass( - "juno-sidenavigation-item-active" + "juno-navigation-item-active" ) rerender() expect(screen.getByRole("button")).toBeInTheDocument() diff --git a/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.component.js b/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.component.js index 62cce32eb..f835954d6 100644 --- a/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.component.js +++ b/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.component.js @@ -3,15 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { createContext, useState, useEffect, useContext } from "react" +import React, { createContext } from "react" import PropTypes from "prop-types" - +import { Navigation } from "../Navigation/index" const tabNavStyles = ` jn-flex ` -export const NavigationContext = createContext() +export const TabNavigationContext = createContext() /** A Tab Navigation parent component. Use to wrap `` elements inside. For tabs with corresponding tab panels, use `` instead. */ export const TabNavigation = ({ @@ -24,51 +24,29 @@ export const TabNavigation = ({ tabStyle, ...props }) => { - - const [ activeItm, setActiveItm ] = useState("") - - // Update state whenever activeItem prop on parent changes: - useEffect(() => { - if (activeItem) { - setActiveItm(activeItem) - } - }, [activeItem]) - - // Callback to pass to the child tab navigation items to set the state on the parent. This is used only once when initializing to prevent any onChange handlers to run: - const updateActiveItem = (label) => { - setActiveItm(label) - } - - // Callback to pass to child tab navigation items to execute whenever they change: - const handleActiveItemChange = (label) => { - setActiveItm(label) - onActiveItemChange && onActiveItemChange(label) - } - return ( - -
      - { children } -
    -
    + {children} + + ) } @@ -97,4 +75,4 @@ TabNavigation.defaultProps = { disabled: false, onActiveItemChange: undefined, tabStyle: "main", -} \ No newline at end of file +} diff --git a/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.stories.js b/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.stories.js index 2e7df1eea..af120ff6c 100644 --- a/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.stories.js +++ b/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.stories.js @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React from 'react' -import { TabNavigation } from './index.js' -import { TabNavigationItem } from '../TabNavigationItem/index.js' +import React from "react" +import { TabNavigation } from "./index.js" +import { TabNavigationItem } from "../TabNavigationItem/index.js" export default { - title: 'Navigation/TabNavigation/TabNavigation', + title: "Navigation/TabNavigation/TabNavigation", component: TabNavigation, argTypes: { children: { @@ -18,79 +18,111 @@ export default { control: false, }, tabStyle: { - options: ['main', 'content'], - control: { type: 'radio' }, + options: ["main", "content"], + control: { type: "radio" }, }, }, -}; +} -const Template = ({ children, ...args}) => ( - - { children } - +const Template = ({ children, ...args }) => ( + {children} ) export const Default = Template.bind({}) Default.args = { children: [ - , - , - , - - ] + , + , + , + , + ], } export const Disabled = Template.bind({}) -Disabled.parameters = { +;(Disabled.parameters = { docs: { description: { - story: "All navigation items can be disabled by passing `disabled` to the `TabNavigation`." - } - } -}, -Disabled.args = { - disabled: true, - children: - [ + story: + "All navigation items can be disabled by passing `disabled` to the `TabNavigation`.", + }, + }, +}), + (Disabled.args = { + disabled: true, + children: [ , , , - - ] -} + , + ], + }) export const WithValues = Template.bind({}) -WithValues.parameters = { +;(WithValues.parameters = { docs: { description: { - story: "When needed, navigation items can take a `value` prop as a technical identifier that is different form the human-readable `label`. When using `value` on the navigation items, the respective `value`must be used when setting the `activeItem` prop on the TabNavigation. Alternatively, an individual `TabNavigationItem` can be set to `active`." - } - } -}, -WithValues.args = { - activeItem: "item-3", - children: [ - , - , - , - - ] -} + story: + "When needed, navigation items can take a `value` prop as a technical identifier that is different form the human-readable `label`. You may use any of the provided props as an identifier to set an active item on the parent. Alternatively, an individual `SideNavigationItem` can be set to `active`. When both an individual item is set to active and an aciveItem is set on the parent, the latter will win.", + }, + }, +}), + (WithValues.args = { + activeItem: "item-3", + children: [ + , + , + , + , + ], + }) export const WithChildren = Template.bind({}) WithChildren.parameters = { docs: { description: { - story: "Alternatively, navigation items can render children passed to them. In order to get a working, self-managing navigation, each item must have a `value` or `label` prop." - } - } + story: + "Alternatively, navigation items can render children passed to them.", + }, + }, } WithChildren.args = { activeItem: "item-1", children: [ - Item 1, - Item 2, - Item 3, - Item 4 - ] + + Item 1 + , + + Item 2 + , + + Item 3 + , + + Item 4 + , + ], } diff --git a/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.test.js b/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.test.js index 90d1b1d27..81bd6a706 100644 --- a/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.test.js +++ b/libs/juno-ui-components/src/components/TabNavigation/TabNavigation.test.js @@ -80,12 +80,11 @@ describe("TabNavigation", () => { expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "Item 1" })).toHaveAttribute( - "aria-selected", - "false" + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected" ) expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( @@ -93,7 +92,7 @@ describe("TabNavigation", () => { "true" ) expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) }) @@ -107,12 +106,11 @@ describe("TabNavigation", () => { expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "Item 1" })).toHaveAttribute( - "aria-selected", - "false" + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected" ) expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( @@ -120,7 +118,7 @@ describe("TabNavigation", () => { "true" ) expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) }) @@ -134,9 +132,8 @@ describe("TabNavigation", () => { expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "Item 1" })).toHaveAttribute( - "aria-selected", - "false" + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected" ) expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( @@ -154,10 +151,10 @@ describe("TabNavigation", () => { ) expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) rerender( @@ -166,10 +163,10 @@ describe("TabNavigation", () => { ) expect(screen.getByRole("button", { name: "Item 1" })).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) }) @@ -182,13 +179,13 @@ describe("TabNavigation", () => { ) expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) rerender( @@ -198,13 +195,13 @@ describe("TabNavigation", () => { ) expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) }) @@ -220,9 +217,9 @@ describe("TabNavigation", () => { const tab1 = screen.getByRole("button", { name: "Item 1" }) const tab2 = screen.getByRole("button", { name: "Item 2" }) expect(tab1).toHaveAttribute("aria-selected", "true") - expect(tab2).toHaveAttribute("aria-selected", "false") + expect(tab2).not.toHaveAttribute("aria-selected") await userEvent.click(tab2) - expect(tab1).toHaveAttribute("aria-selected", "false") + expect(tab1).not.toHaveAttribute("aria-selected") expect(tab2).toHaveAttribute("aria-selected", "true") }) diff --git a/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.component.js b/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.component.js index a20e77206..6dc515948 100644 --- a/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.component.js +++ b/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.component.js @@ -3,41 +3,28 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { useState, useEffect, useContext } from "react" +import React, { useContext } from "react" import PropTypes from "prop-types" -import { NavigationContext } from "../TabNavigation/TabNavigation.component" -import { Icon } from "../Icon/index.js" +import { NavigationItem } from "../NavigationItem/index" +import { TabNavigationContext } from "../TabNavigation/TabNavigation.component" import { knownIcons } from "../Icon/Icon.component.js" -const itemStyles = ` +const tabNavItemStyles = ` jn-flex jn-items-center jn-text-theme-default jn-font-bold jn-py-[0.875rem] jn-px-[1.5625rem] + jn-border-b-[3px] focus-visible:jn-outline-none focus-visible:jn-ring-2 focus-visible:jn-ring-theme-focus ` -const defaultMainItemStyles = ` - jn-border-b-[3px] - jn-border-transparent -` - -const defaultContentItemStyles = ` - jn-border-b-[3px] - jn-border-theme-tab-content-inactive-bottom -` - -const disabledItemStyles = ` - jn-pointer-events-none - jn-opacity-50 - jn-cursor-not-allowed -` -const activeItemStyles = ` +const tabNavActiveItemStyles = ` jn-text-theme-high + jn-font-bold jn-border-b-[3px] jn-border-theme-tab-active-bottom ` @@ -56,112 +43,34 @@ export const TabNavigationItem = ({ value, ...props }) => { - const navigationContext = useContext(NavigationContext) - const { - activeItem: activeItem, - updateActiveItem: updateActiveItem, - handleActiveItemChange: handleActiveItemChange, - disabled: groupDisabled, - tabStyle: tabStyle, - } = navigationContext || {} - - // Use the value (if passed) or the label as identifying key or the tab: - const theKey = value || label - - // Lazily init depending on parent context or tab's own prop: - const initialActive = () => { - if (navigationContext?.activeItem?.length > 0) { - return activeItem === theKey - } else { - return active - } - } - - const [isActive, setIsActive] = useState(() => initialActive()) - - useEffect(() => { - if (activeItem) { - activeItem === theKey ? setIsActive(true) : setIsActive(false) - return - } - setIsActive(active) - }, [activeItem, active]) - - const handleItemClick = (event) => { - if (!isActive) { - handleActiveItemChange(theKey) - } - onClick && onClick(event) - } - + const tabNavigationContext = useContext(TabNavigationContext) + const { tabStyle: tabStyle } = tabNavigationContext || {} return ( -
  1. - {href ? ( - - {icon ? : null} - {children || label || theKey} - - ) : ( - - )} -
  2. + + {children} + ) } diff --git a/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.stories.js b/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.stories.js index 02d81eeb9..259b319ac 100644 --- a/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.stories.js +++ b/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.stories.js @@ -3,63 +3,63 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React from 'react'; +import React from "react" import { TabNavigation } from "../TabNavigation/index" -import { TabNavigationItem } from './index.js' +import { TabNavigationItem } from "./index.js" import { knownIcons } from "../Icon/Icon.component.js" export default { - title: 'Navigation/TabNavigation/TabNavigationItem', + title: "Navigation/TabNavigation/TabNavigationItem", component: TabNavigationItem, argTypes: { icon: { options: [null, ...knownIcons], - control: { type: 'select' }, + control: { type: "select" }, }, onClick: { control: false, - } + }, }, decorators: [(story) => {story()}], -}; +} export const Default = { args: { label: "Tab 1", - } + }, } export const Active = { args: { label: "Active TabNavigationItem", active: true, - } + }, } export const Disabled = { args: { label: "Disabled TabNavigationItem", disabled: true, - } + }, } export const WithIcon = { args: { icon: "warning", label: "With Icon", - } + }, } export const AsLink = { args: { label: "Item as Link", href: "https://www.sap.com", - } + }, } export const WithChildren = { args: { value: "itm-1", - children: "Item 1" - } -} \ No newline at end of file + children: "Item 1", + }, +} diff --git a/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.test.js b/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.test.js index d2e15a90f..a91fd303f 100644 --- a/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.test.js +++ b/libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.test.js @@ -73,7 +73,7 @@ describe("TabNavigationItem", () => { expect(screen.getByRole("button")).toBeInTheDocument() expect(screen.getByRole("button")).toHaveClass("juno-tabnavigation-item") expect(screen.getByRole("button")).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) expect(screen.getByRole("button")).toHaveAttribute("aria-selected", "true") }) @@ -84,12 +84,12 @@ describe("TabNavigationItem", () => { ) expect(screen.getByRole("button")).toBeInTheDocument() expect(screen.getByRole("button")).toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) rerender() expect(screen.getByRole("button")).toBeInTheDocument() expect(screen.getByRole("button")).not.toHaveClass( - "juno-tabnavigation-item-active" + "juno-navigation-item-active" ) }) @@ -112,7 +112,7 @@ describe("TabNavigationItem", () => { ) expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() expect(screen.getByRole("button", { name: "Item 1" })).toHaveClass( - "juno-tabnavigation-item-main" + "juno-tabnavigation-main-item" ) }) @@ -124,7 +124,7 @@ describe("TabNavigationItem", () => { ) expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() expect(screen.getByRole("button", { name: "Item 1" })).toHaveClass( - "juno-tabnavigation-item-content" + "juno-tabnavigation-content-item" ) }) diff --git a/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.component.js b/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.component.js index 16f12c261..76cf065a7 100644 --- a/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.component.js +++ b/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.component.js @@ -3,10 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { createContext, useEffect, useState } from "react"; -import PropTypes from "prop-types"; +import React from "react" +import PropTypes from "prop-types" +import { Navigation } from "../Navigation/index" -const topNavigationStyles = ` +const topNavStyles = ` jn-flex jn-bg-theme-global-bg jn-gap-6 @@ -14,8 +15,6 @@ const topNavigationStyles = ` jn-py-1.5 ` -export const NavigationContext = createContext() - /** A generic horizontal top level navigation component. To be placed below the application header but above application content. Place `TopNavigationItem` elements as children. @@ -29,45 +28,18 @@ export const TopNavigation = ({ onActiveItemChange, ...props }) => { - - const [activeItm, setActiveItm] = useState("") - - useEffect(() => { - if (activeItem) { - setActiveItm(activeItem) - } - }, [activeItem]) - - const updateActiveItem = (label) => { - setActiveItm(label) - } - - const handleActiveItemChange = (label) => { - setActiveItm(label) - onActiveItemChange && onActiveItemChange(label) - } - return ( - -
      - { children } -
    -
    + + {children} + ) } @@ -93,4 +65,4 @@ TopNavigation.defaultProps = { className: "", disabled: false, onActiveItemChange: undefined, -} \ No newline at end of file +} diff --git a/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.stories.js b/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.stories.js index 0df6a7cf0..251ccd937 100644 --- a/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.stories.js +++ b/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.stories.js @@ -13,19 +13,17 @@ export default { argTypes: { items: { table: { - disable: true - } + disable: true, + }, }, children: { - control: false + control: false, }, - } + }, } -const Template = ({children, ...args}) => ( - - { children } - +const Template = ({ children, ...args }) => ( + {children} ) export const Default = Template.bind({}) @@ -34,61 +32,71 @@ Default.args = { , , , - - ] + , + ], } export const Disabled = Template.bind({}) -Disabled.parameters = { +;(Disabled.parameters = { docs: { description: { - story: "All navigation items can be disabled by passing `disabled` to the `TabNavigation`." - } - } -}, -Disabled.args = { - disabled: true, - children: - [ + story: + "All navigation items can be disabled by passing `disabled` to the `TabNavigation`.", + }, + }, +}), + (Disabled.args = { + disabled: true, + children: [ , , , - - ] -} + , + ], + }) export const WithValues = Template.bind({}) WithValues.parameters = { docs: { description: { - story: "When needed, navigation items can take a `value` prop as a technical identifier that is different form the human-readable `label`. When using `value` on the navigation items, the respective `value`must be used when setting the `activeItem` prop on the TopNavigation. Alternatively, an individual `TopNavigationItem` can be set to `active`." - } - } + story: + "When needed, navigation items can take a `value` prop as a technical identifier that is different form the human-readable `label`. You may use any of the provided props as an identifier to set an active item on the parent. Alternatively, an individual `SideNavigationItem` can be set to `active`. When both an individual item is set to active and an aciveItem is set on the parent, the latter will win.", + }, + }, } WithValues.args = { activeItem: "i-3", children: [ - , - , - , - - ] + , + , + , + , + ], } export const WithChildren = Template.bind({}) WithChildren.parameters = { docs: { description: { - story: "Alternatively, navigation items can render children passed to them. In order to get a working, self-managing navigation, each item must have a `value` or `label` prop." - } - } + story: + "Alternatively, navigation items can render children passed to them.", + }, + }, } WithChildren.args = { activeItem: "item-1", children: [ - Item 1, - Item 2, - Item 3, - Item 4 - ] -} \ No newline at end of file + + Item 1 + , + + Item 2 + , + + Item 3 + , + + Item 4 + , + ], +} diff --git a/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.test.js b/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.test.js index 9ab6eec9c..732dc9526 100644 --- a/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.test.js +++ b/libs/juno-ui-components/src/components/TopNavigation/TopNavigation.test.js @@ -3,27 +3,26 @@ * SPDX-License-Identifier: Apache-2.0 */ -import * as React from 'react'; -import { cleanup, render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { TopNavigation } from './index'; -import { TopNavigationItem } from '../TopNavigationItem/index'; +import * as React from "react" +import { cleanup, render, screen, waitFor } from "@testing-library/react" +import userEvent from "@testing-library/user-event" +import { TopNavigation } from "./index" +import { TopNavigationItem } from "../TopNavigationItem/index" const mockOnActiveItemChange = jest.fn() -describe('TopNavigation', () => { - +describe("TopNavigation", () => { afterEach(() => { - cleanup(); - jest.clearAllMocks(); + cleanup() + jest.clearAllMocks() }) - - test('render a TopNavigation', async () => { - render(); - expect(screen.getByRole('navigation')).toBeInTheDocument(); - expect(screen.getByRole('navigation')).toHaveClass("juno-topnavigation"); + + test("render a TopNavigation", async () => { + render() + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.getByRole("navigation")).toHaveClass("juno-topnavigation") }) - + test("renders children as passed", async () => { render( @@ -34,51 +33,70 @@ describe('TopNavigation', () => { ) expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(3) - expect(screen.getByRole("button", {name: "Item 1"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 2"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 3"})).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() }) - + test("renders an aria-label as passed", async () => { render() expect(screen.getByRole("navigation")).toBeInTheDocument() - expect(screen.getByRole("navigation")).toHaveAttribute("aria-label", "describe the navigation") + expect(screen.getByRole("navigation")).toHaveAttribute( + "aria-label", + "describe the navigation" + ) }) - + test("renders disabled children as passed", async () => { render( - ) - expect(screen.getByRole("navigation")).toBeInTheDocument() - expect(screen.queryAllByRole("button")).toHaveLength(2) - expect(screen.getByRole("button", {name: "Item 1"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 1"})).toBeDisabled() - expect(screen.getByRole("button", {name: "Item 1"})).toHaveAttribute("aria-disabled", "true") - expect(screen.getByRole("button", {name: "Item 2"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 2"})).toBeDisabled() - expect(screen.getByRole("button", {name: "Item 2"})).toHaveAttribute("aria-disabled", "true") + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(2) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).toBeDisabled() + expect(screen.getByRole("button", { name: "Item 1" })).toHaveAttribute( + "aria-disabled", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toBeDisabled() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-disabled", + "true" + ) }) - + test("renders an active navigation item as passed", async () => { render( - ) + ) expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) - expect(screen.getByRole("button", {name: "Item 1"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 1"})).toHaveAttribute("aria-selected", "false") - expect(screen.getByRole("button", {name: "Item 1"})).not.toHaveClass("juno-topnavigation-item-active") - expect(screen.getByRole("button", {name: "Item 2"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 2"})).toHaveAttribute("aria-selected", "true") - expect(screen.getByRole("button", {name: "Item 2"})).toHaveClass("juno-topnavigation-item-active") + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) }) - - test("renders an active navigaiton item as passed by value", async () => { + + test("renders an active navigation item as passed by value", async () => { render( @@ -87,31 +105,48 @@ describe('TopNavigation', () => { ) expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) - expect(screen.getByRole("button", {name: "Item 1"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 1"})).toHaveAttribute("aria-selected", "false") - expect(screen.getByRole("button", {name: "Item 1"})).not.toHaveClass("juno-topnavigation-item-active") - expect(screen.getByRole("button", {name: "Item 2"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 2"})).toHaveAttribute("aria-selected", "true") - expect(screen.getByRole("button", {name: "Item 2"})).toHaveClass("juno-topnavigation-item-active") + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) }) - + test("renders the active item as passed to the parent if conflicting with active prop passed to child item", async () => { render( - + ) expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) - expect(screen.getByRole("button", {name: "Item 1"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 1"})).toHaveAttribute("aria-selected", "false") - expect(screen.getByRole("button", {name: "Item 1"})).not.toHaveClass("juno-topnavigation-item-active") - expect(screen.getByRole("button", {name: "Item 2"})).toBeInTheDocument() - expect(screen.getByRole("button", {name: "Item 2"})).toHaveAttribute("aria-selected", "true") - expect(screen.getByRole("button", {name: "Item 2"})).toHaveClass("juno-topnavigation-item-active") + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) }) - + test("changes the active item when the user clicks", async () => { render( @@ -121,40 +156,46 @@ describe('TopNavigation', () => { ) expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) - const tab1 = screen.getByRole("button", {name: "Item 1"}) - const tab2 = screen.getByRole("button", {name: "Item 2"}) + const tab1 = screen.getByRole("button", { name: "Item 1" }) + const tab2 = screen.getByRole("button", { name: "Item 2" }) expect(tab1).toHaveAttribute("aria-selected", "true") - expect(tab1).toHaveClass("juno-topnavigation-item-active") - expect(tab2).toHaveAttribute("aria-selected", "false") - expect(tab2).not.toHaveClass("juno-topnavigation-item-active") + expect(tab1).toHaveClass("juno-navigation-item-active") + expect(tab2).not.toHaveAttribute("aria-selected") + expect(tab2).not.toHaveClass("juno-navigation-item-active") await userEvent.click(tab2) - expect(tab1).toHaveAttribute("aria-selected", "false") - expect(tab1).not.toHaveClass("juno-topnavigation-item-active") + expect(tab1).not.toHaveAttribute("aria-selected") + expect(tab1).not.toHaveClass("juno-navigation-item-active") expect(tab2).toHaveAttribute("aria-selected", "true") - expect(tab2).toHaveClass("juno-topnavigation-item-active") + expect(tab2).toHaveClass("juno-navigation-item-active") }) - + test("executes a handler as passed when the selected item changes", async () => { render( - + - ) + + ) expect(screen.getByRole("navigation")).toBeInTheDocument() expect(screen.queryAllByRole("button")).toHaveLength(2) - const item2 = screen.getByRole("button", {name: "Item 2"}) + const item2 = screen.getByRole("button", { name: "Item 2" }) await userEvent.click(item2) expect(mockOnActiveItemChange).toHaveBeenCalled() }) - test('renders custom classNames as passed', async () => { - render(); - expect(screen.getByRole("navigation")).toHaveClass('my-custom-class'); - }); + test("renders custom classNames as passed", async () => { + render() + expect(screen.getByRole("navigation")).toHaveClass("my-custom-class") + }) - test('renders all props as passed', async () => { - render(); - expect(screen.getByRole('navigation')).toHaveAttribute('data-lol', 'Prop goes here'); - }); - -}); + test("renders all props as passed", async () => { + render() + expect(screen.getByRole("navigation")).toHaveAttribute( + "data-lol", + "Prop goes here" + ) + }) +}) diff --git a/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.component.js b/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.component.js index 4d13476e7..71edf0537 100644 --- a/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.component.js +++ b/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.component.js @@ -3,13 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { useContext, useEffect, useState } from "react"; -import PropTypes from "prop-types"; -import { NavigationContext } from "../TopNavigation/TopNavigation.component" -import { Icon } from "../Icon/index.js"; +import React, { useContext, useEffect, useState } from "react" +import PropTypes from "prop-types" +import { NavigationItem } from "../NavigationItem/index" import { knownIcons } from "../Icon/Icon.component.js" -const itemStyles = ` +const topNavItemStyles = ` jn-flex jn-items-center jn-grow-0 @@ -30,16 +29,8 @@ const itemStyles = ` focus-visible:jn-ring-theme-focus ` -const disabledItemStyles = ` - jn-opacity-50 - jn-cursor-not-allowed -` -const nonActiveItemStyles = ` - hover:jn-text-theme-high - hover:jn-bg-transparent -` - -const activeItemStyles = ` +const topNavActiveItemStyles = ` + jn-font-bold jn-text-theme-high jn-bg-theme-topnavigation-item-active ` @@ -60,101 +51,22 @@ export const TopNavigationItem = ({ value, ...props }) => { - - const navigationContext = useContext(NavigationContext) - - const { - activeItem: activeItem, - updateActiveItem: updateActiveItem, - handleActiveItemChange: handleActiveItemChange, - disabled: groupDisabled, - } = navigationContext || {} - - const theKey = value || label - - const initialActive = () => { - if (navigationContext) { - activeItem === theKey ? true : false - } else { - return active - } - } - - const [isActive, setIsActive] = useState( () => initialActive() ) - - // Set the parent state once if not set on the parent, but a navigation item has been set to active via its own prop: - useEffect(() => { - if (active && navigationContext && !activeItem) { - updateActiveItem(theKey) - } - }, []) - - // Update the parent state when in a navigation context, otherwise update item state directly: - useEffect(() => { - if (activeItem) { - activeItem === theKey ? setIsActive(true) : setIsActive(false) - } else { - setIsActive(active) - } - }, [activeItem, active]) - - - const handleItemClick = (event) => { - if (!isActive) { - handleActiveItemChange(theKey) - } - onClick && onClick(event) - } - return ( - - + {children} + ) } @@ -177,7 +89,7 @@ TopNavigationItem.propTypes = { href: PropTypes.string, /** A handler to execute once the navigation item is clicked. Will render the item as a button element if passed */ onClick: PropTypes.func, - /** An optional technical identifier fort the tab. If not passed, the label will be used to identify the tab. NOTE: If value is passed, the value of the active tab MUST be used when setting the activeItem prop on the parent TabNavigation.*/ + /** An optional technical identifier fort the tab. If not passed, the label will be used to identify the tab. NOTE: If value is passed, the value of the active tab MUST be used when setting the activeItem prop on the parent TabNavigation.*/ value: PropTypes.string, } @@ -192,4 +104,4 @@ TopNavigationItem.defaultProps = { href: "", onClick: undefined, value: "", -} \ No newline at end of file +} diff --git a/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.test.js b/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.test.js index 2eff2054a..1da5163f7 100644 --- a/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.test.js +++ b/libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.test.js @@ -3,100 +3,127 @@ * SPDX-License-Identifier: Apache-2.0 */ -import * as React from 'react'; -import { cleanup, render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { TopNavigation } from '../TopNavigation/index'; -import { TopNavigationItem } from './index'; +import * as React from "react" +import { cleanup, render, screen, waitFor } from "@testing-library/react" +import userEvent from "@testing-library/user-event" +import { TopNavigation } from "../TopNavigation/index" +import { TopNavigationItem } from "./index" const mockOnClick = jest.fn() -describe('TopNavigationItem', () => { - +describe("TopNavigationItem", () => { afterEach(() => { - cleanup(); - jest.clearAllMocks(); + cleanup() + jest.clearAllMocks() }) - - test('renders a ToppNavigationItem', async () => { - render(); - expect(screen.getByTestId('top-nav-item')).toBeInTheDocument(); - expect(screen.getByTestId('top-nav-item')).toHaveClass("juno-topnavigation-item"); - }); - + + test("renders a ToppNavigationItem", async () => { + render() + expect(screen.getByTestId("top-nav-item")).toBeInTheDocument() + expect(screen.getByTestId("top-nav-item")).toHaveClass( + "juno-topnavigation-item" + ) + }) + test("renders a label as passed", async () => { render() - expect(screen.getByRole("button")).toBeInTheDocument(); - expect(screen.getByRole("button")).toHaveTextContent("My Label"); + expect(screen.getByRole("button")).toBeInTheDocument() + expect(screen.getByRole("button")).toHaveTextContent("My Label") }) - + test("renders children as passed", async () => { render(The Item Is A Child) expect(screen.getByRole("button")).toBeInTheDocument() expect(screen.getByRole("button")).toHaveTextContent("The Item Is A Child") }) - + test("redners an aria-label attribute as passed", async () => { render() expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute("aria-label", "My ARIA-Label") + expect(screen.getByRole("button")).toHaveAttribute( + "aria-label", + "My ARIA-Label" + ) }) - + test("renders a disabled item as passed", async () => { render() expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeDisabled(); - expect(screen.getByRole("button")).toHaveAttribute("aria-disabled", "true"); + expect(screen.getByRole("button")).toBeDisabled() + expect(screen.getByRole("button")).toHaveAttribute("aria-disabled", "true") }) - + test("renders an icon as passed", async () => { render() - expect(screen.getByRole("img")).toBeInTheDocument(); - expect(screen.getByRole("img")).toHaveAttribute("alt", "warning"); + expect(screen.getByRole("img")).toBeInTheDocument() + expect(screen.getByRole("img")).toHaveAttribute("alt", "warning") }) - + test("renders as a link when a href prop is passed", async () => { - render(); - expect(screen.getByRole("link")).toBeInTheDocument(); - expect(screen.getByRole("link")).toHaveClass("juno-topnavigation-item"); + render() + expect(screen.getByRole("link")).toBeInTheDocument() + expect(screen.getByRole("link")).toHaveClass("juno-topnavigation-item") }) - + test("renders as a button when an onClick prop is passed", async () => { - render({console.log("click")}} />); - expect(screen.getByRole("button")).toBeInTheDocument(); - expect(screen.getByRole("button")).toHaveClass("juno-topnavigation-item"); + render( + { + console.log("click") + }} + /> + ) + expect(screen.getByRole("button")).toBeInTheDocument() + expect(screen.getByRole("button")).toHaveClass("juno-topnavigation-item") + }) + + test("renders an active ToppNavigationItem as passed", async () => { + render() + expect(screen.getByTestId("top-nav-item")).toBeInTheDocument() + expect(screen.getByTestId("top-nav-item")).toHaveClass( + "juno-topnavigation-item" + ) + expect(screen.getByTestId("top-nav-item")).toHaveClass( + "juno-navigation-item-active" + ) }) - - test('renders an active ToppNavigationItem as passed', async () => { - render(); - expect(screen.getByTestId('top-nav-item')).toBeInTheDocument(); - expect(screen.getByTestId('top-nav-item')).toHaveClass("juno-topnavigation-item"); - expect(screen.getByTestId('top-nav-item')).toHaveClass("juno-topnavigation-item-active"); - }); - - test('renders an aria-label as passed', async () => { - render(); - expect(screen.getByRole('link')).toHaveAttribute('aria-label', 'hey nav item!'); - }); - + + test("renders an aria-label as passed", async () => { + render() + expect(screen.getByRole("link")).toHaveAttribute( + "aria-label", + "hey nav item!" + ) + }) + test("executes an onClick handler as passed", async () => { render( - - ) - expect(screen.getByRole("button", {name: "My Item"})).toBeInTheDocument() - await userEvent.click(screen.getByRole("button", {name: "My Item"})) + + + ) + expect(screen.getByRole("button", { name: "My Item" })).toBeInTheDocument() + await userEvent.click(screen.getByRole("button", { name: "My Item" })) expect(mockOnClick).toHaveBeenCalled() }) - test('renders custom classNames as passed', async () => { - render(); - expect(screen.getByTestId('top-nav-item')).toHaveClass('my-custom-class'); - }); - - test('renders all props as passed', async () => { - render(); - expect(screen.getByTestId('top-nav-item')).toHaveAttribute('data-lol', 'Prop goes here'); - }); - -}); \ No newline at end of file + test("renders custom classNames as passed", async () => { + render( + + ) + expect(screen.getByTestId("top-nav-item")).toHaveClass("my-custom-class") + }) + + test("renders all props as passed", async () => { + render( + + ) + expect(screen.getByTestId("top-nav-item")).toHaveAttribute( + "data-lol", + "Prop goes here" + ) + }) +}) From bc8aef9362d27fb26c0781c5142735a5f59b6854 Mon Sep 17 00:00:00 2001 From: d064310 Date: Thu, 16 May 2024 09:07:13 +0200 Subject: [PATCH 09/26] ci: update pipeline --- ci/pipeline.yaml.erb | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/ci/pipeline.yaml.erb b/ci/pipeline.yaml.erb index 1fe98c433..9331b990c 100644 --- a/ci/pipeline.yaml.erb +++ b/ci/pipeline.yaml.erb @@ -23,11 +23,15 @@ "messages-provider": { type: "lib", path: "libs/messages-provider"}, "oauth": { type: "lib", path: "libs/oauth"}, "policy-engine": { type: "lib", path: "libs/policy-engine"}, - "communicator": { type: "lib", path: "libs/communicator"}, "url-state-provider": { type: "lib", path: "libs/url-state-provider"}, "url-state-router": { type: "lib", path: "libs/url-state-router"}, "utils": { type: "lib", path: "libs/utils"}, } + + CLOUDOPERATOR_ASSETS = { + "communicator": { type: "lib", path: "libs/communicator"}, + } + HA_REGIONS = ["eu-de-1","eu-de-2","eu-nl-1","ap-ae-1","ap-jp-2","ap-au-1","la-br-1","na-us-1","na-us-2"] %> @@ -141,9 +145,6 @@ resources: uri: https://github.com/sapcc/juno.git branch: main paths: ["<%=details[:path]%>","libs","package.json","e2e", ".yarn"] - # "ci" - # "ci/scripts" - # "ci/shared" username: sapcc-bot password: ((github-access-token/sapcc-bot)) @@ -155,6 +156,26 @@ resources: <% end %> + <% CLOUDOPERATOR_ASSETS.each do |name,details| %> + - name: <%=details[:type]%>-<%= name %>.git + icon: github + type: git-proxy + webhook_token: bleep-bloop + source: + uri: https://github.com/cloudoperators/juno.git + username: ((github-access-token/sapcc-bot)) + password: x-oauth-basic + branch: main + paths: ["<%=details[:path]%>"] + + - name: <%= details[:type] %>-<%= name %>.version + type: time-version-resource + icon: lock + check_every: 525600h + source: { key: "<%= details[:type] %>-<%= name %>" } # disambiguate from other time-version resources + + <% end %> + - name: assets-server.version type: time-version-resource icon: lock @@ -186,7 +207,7 @@ resource_types: groups: - name: assets jobs: - <% ASSETS.each do |name,details| %> + <% ASSETS.merge(CLOUDOPERATOR_ASSETS).each do |name,details| %> - build-<%= details[:type] %>-<%= name %> <% end %> - build-assets-server-image @@ -269,12 +290,13 @@ jobs: # BUILD ASSET SERVER IMAGE # Assets build - <% ASSETS.each do |name,details| %> + <% ASSETS.merge(CLOUDOPERATOR_ASSETS).each do |name,details| %> - name: build-<%= details[:type] %>-<%= name %> public: true plan: - get: <%= details[:type] %>-<%= name %>.git trigger: true + - get: juno.git - get: base.image - get: ci-helper.image - put: <%= details[:type] %>-<%= name %>.version @@ -282,7 +304,7 @@ jobs: <% if details[:type] == "lib" %> # this is used to get the last version, only libs with new versions will be deployed - task: download-last-build - file: <%=details[:type]%>-<%= name %>.git/ci/shared/swift-download.yaml + file: juno.git/ci/shared/swift-download.yaml output_mapping: download: last_build params: @@ -358,7 +380,7 @@ jobs: - get: swift-juno-assets.version trigger: true - <% ASSETS.each do |name, details|%> + <% ASSETS.merge(CLOUDOPERATOR_ASSETS).each do |name, details|%> - get: <%= details[:type] %>-<%= name %>.version trigger: false passed: ["build-<%= details[:type] %>-<%= name %>"] @@ -392,7 +414,7 @@ jobs: set -e cd ./juno.git # 1) download our own assets - <% ASSETS.each do |name, details|%> + <% ASSETS.merge(CLOUDOPERATOR_ASSETS).each do |name, details|%> ./ci/scripts/asset_storage.sh --container juno-assets --asset-name <%= name %> --asset-path <%= details[:path] %> --action download --root-path ../juno-assets <% end %> # 2) download and check for name collission in juno-3rd-party assets From 5e0b557e124a59fe6b5f2b3681938bf087b94e29 Mon Sep 17 00:00:00 2001 From: d064310 Date: Thu, 16 May 2024 12:48:37 +0200 Subject: [PATCH 10/26] ci: build assets individually --- ci/pipeline.yaml.erb | 7 ++++--- ci/scripts/asset_build.sh | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/ci/pipeline.yaml.erb b/ci/pipeline.yaml.erb index 9331b990c..3089f25c0 100644 --- a/ci/pipeline.yaml.erb +++ b/ci/pipeline.yaml.erb @@ -337,11 +337,12 @@ jobs: # TODO: this need a lot of runtime, move that stuff into asset_build.sh after version check echo "sync all node_modules from /juno/ to ./latest/" rsync -am --include='*/' --include='node_modules/***' --exclude='*' /juno/ ./latest - cd ./latest + cd ./latest/<%=details[:type]%>s/<%=name%> echo "update node modules -> npm install --silent" - npm install --silent + npm install + cd ../../ echo "" - ./ci/scripts/asset_build.sh --asset-name <%= name %> --asset-type <%= details[:type] %> --output-path ../build_result <% if details[:type] == "lib" %> --last-build-path ../last_build <% end %> + /juno/ci/scripts/asset_build.sh --asset-name <%= name %> --asset-type <%= details[:type] %> --output-path ../build_result <% if details[:type] == "lib" %> --last-build-path ../last_build <% end %> - task: sync file: <%=details[:type]%>-<%= name %>.git/ci/shared/swift-upload.yaml input_mapping: diff --git a/ci/scripts/asset_build.sh b/ci/scripts/asset_build.sh index b65ef05ea..f947cd02e 100755 --- a/ci/scripts/asset_build.sh +++ b/ci/scripts/asset_build.sh @@ -3,10 +3,10 @@ # exit on error set -e -if [ ! -f "CODEOWNERS" ]; then - echo "This script must run from root of juno repo" - exit 1 -fi +# if [ ! -f "CODEOWNERS" ]; then +# echo "This script must run from root of juno repo" +# exit 1 +# fi function help() { echo "Usage: build_assets.sh --asset-path||-ap --asset-name||-sn --asset-type||-at --output-path||-op --last-build-path||-lbp @@ -21,6 +21,8 @@ if [[ "$1" == "--help" ]]; then help fi +SCRIPTS_FOLDER=$(dirname $0) + OUTPUT_PATH="./build-result" while [[ $# -gt 0 ]]; do case $1 in @@ -134,7 +136,7 @@ fi echo "----------------------------------" echo "generate COMMUNICATOR.md in $ASSET_PATH" -node ci/scripts/generate_communication_readme.mjs --path="$ASSET_PATH" +node "$SCRIPTS_FOLDER/generate_communication_readme.mjs" --path="$ASSET_PATH" # install and build libs # npm run build-libs @@ -144,9 +146,14 @@ node ci/scripts/generate_communication_readme.mjs --path="$ASSET_PATH" # This is the case if the jspm cdn is unreachable!!! echo "----------------------------------" echo "run Tests for ...." +# since we removed all local dependencies (*) we don't need to use --workspace +# instead we can use the local path ASSET_NAME=$(jq -r .name "$ASSET_PATH/package.json") -npm --workspace "$ASSET_NAME" run test --if-present -NODE_ENV=production IGNORE_EXTERNALS=false npm --workspace "$ASSET_NAME" run build --if-present +CURRENT_DIR=$(pwd) +cd "$ASSET_PATH" +npm run test --if-present +NODE_ENV=production IGNORE_EXTERNALS=false npm run build --if-present +cd "$CURRENT_DIR" # get BUILD_DIR from package.json # strip `leading` slash from BUILD_DIR and split by / and use first part From 5f3ae70aa01d14ec11463f2fde27d944c7ac4bad Mon Sep 17 00:00:00 2001 From: d064310 Date: Thu, 16 May 2024 13:52:05 +0200 Subject: [PATCH 11/26] ci: add a task to run all build manually --- ci/pipeline.yaml.erb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ci/pipeline.yaml.erb b/ci/pipeline.yaml.erb index 3089f25c0..058c2732e 100644 --- a/ci/pipeline.yaml.erb +++ b/ci/pipeline.yaml.erb @@ -176,6 +176,12 @@ resources: <% end %> + - name: run-manually.version + type: time-version-resource + icon: lock + check_every: 525600h + source: { key: "juno-run-manually-version" } # disambiguate from other time-version resources + - name: assets-server.version type: time-version-resource icon: lock @@ -207,6 +213,7 @@ resource_types: groups: - name: assets jobs: + - run-all-manually <% ASSETS.merge(CLOUDOPERATOR_ASSETS).each do |name,details| %> - build-<%= details[:type] %>-<%= name %> <% end %> @@ -256,6 +263,11 @@ jobs: - '\tThis pipeline is defined at: https://github.com/sapcc/juno/ci/\n\n' - '\tManage Juno images: https://keppel.eu-de-1.cloud.sap/ccloud/juno\n' + + - name: run-all-manually + plan: + - put: run-manually.version + # ============================================================= # BUILD BASE IMAGES - name: build-base-image @@ -294,6 +306,9 @@ jobs: - name: build-<%= details[:type] %>-<%= name %> public: true plan: + - get: run-manually.version + trigger: true + passed: [run-all-manually] - get: <%= details[:type] %>-<%= name %>.git trigger: true - get: juno.git @@ -344,7 +359,7 @@ jobs: echo "" /juno/ci/scripts/asset_build.sh --asset-name <%= name %> --asset-type <%= details[:type] %> --output-path ../build_result <% if details[:type] == "lib" %> --last-build-path ../last_build <% end %> - task: sync - file: <%=details[:type]%>-<%= name %>.git/ci/shared/swift-upload.yaml + file: juno.git/ci/shared/swift-upload.yaml input_mapping: upload: build_result params: From 82f2d86e40a1dd13cf2304aa17406e841888e7b5 Mon Sep 17 00:00:00 2001 From: d064310 Date: Thu, 16 May 2024 15:11:31 +0200 Subject: [PATCH 12/26] ci: build oauth from cloudoperators --- ci/pipeline.yaml.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/pipeline.yaml.erb b/ci/pipeline.yaml.erb index 058c2732e..46b13a6be 100644 --- a/ci/pipeline.yaml.erb +++ b/ci/pipeline.yaml.erb @@ -21,7 +21,6 @@ "playground": { type: "app", path: "apps/playground"}, "juno-ui-components": { type: "lib", path: "libs/juno-ui-components"}, "messages-provider": { type: "lib", path: "libs/messages-provider"}, - "oauth": { type: "lib", path: "libs/oauth"}, "policy-engine": { type: "lib", path: "libs/policy-engine"}, "url-state-provider": { type: "lib", path: "libs/url-state-provider"}, "url-state-router": { type: "lib", path: "libs/url-state-router"}, @@ -30,6 +29,7 @@ CLOUDOPERATOR_ASSETS = { "communicator": { type: "lib", path: "libs/communicator"}, + "oauth": { type: "lib", path: "libs/oauth"}, } HA_REGIONS = ["eu-de-1","eu-de-2","eu-nl-1","ap-ae-1","ap-jp-2","ap-au-1","la-br-1","na-us-1","na-us-2"] From eef6c69b391499a8e7601d1183201c9ef24cd86a Mon Sep 17 00:00:00 2001 From: Arturo Reuschenbach Date: Tue, 21 May 2024 11:20:30 +0200 Subject: [PATCH 13/26] cleanup (#603) --- .github/workflows/block-apps.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/block-apps.yml b/.github/workflows/block-apps.yml index 0ad038d64..dd68ba4bf 100644 --- a/.github/workflows/block-apps.yml +++ b/.github/workflows/block-apps.yml @@ -1,4 +1,4 @@ -name: Block PRs on following apps supernova, huereka, greenhouse and greenhouse-management +name: Block PRs on apps supernova, huereka, greenhouse and greenhouse-management and libs communicator, oauth and juno-ui-components on: pull_request: @@ -75,12 +75,15 @@ jobs: echo libs: ${{ needs.changes.outputs.libs }} echo app changes: ${{ needs.changes.outputs.app-changes }} echo lib changes: ${{ needs.changes.outputs.lib-changes }} - - name: Check if any of the apps are supernova, huereka, greenhouse or greenhouse-management + - name: Check if changes belongs to apps supernova, huereka, greenhouse or greenhouse-management or libs communicator, oauth or juno-ui-components if: | contains(needs.changes.outputs.app-changes, 'supernova') || contains(needs.changes.outputs.app-changes, 'huereka') || contains(needs.changes.outputs.app-changes, 'greenhouse') || - contains(needs.changes.outputs.app-changes, 'greenhouse-management') + contains(needs.changes.outputs.app-changes, 'greenhouse-management') || + contains(needs.changes.outputs.lib-changes, 'communicator') || + contains(needs.changes.outputs.lib-changes, 'oauth') || + contains(needs.changes.outputs.lib-changes, 'juno-ui-components') run: | - echo "::error not allowed to make changes to supernova, huereka, greenhouse or greenhouse-management apps" + echo "::error not allowed to make changes to supernova, huereka, greenhouse or greenhouse-management apps or communicator, oauth or juno-ui-components libs" exit 1 From d99d8abc5c9d10158c5f566450e3ada364f69b93 Mon Sep 17 00:00:00 2001 From: Arturo Reuschenbach Date: Tue, 21 May 2024 16:18:54 +0200 Subject: [PATCH 14/26] deploy juno-ui-components from cloudoperators (#605) --- ci/pipeline.yaml.erb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/pipeline.yaml.erb b/ci/pipeline.yaml.erb index 46b13a6be..6795d88b0 100644 --- a/ci/pipeline.yaml.erb +++ b/ci/pipeline.yaml.erb @@ -19,7 +19,7 @@ # "greenhouse-management":{ type: "app", path: "apps/greenhouse-management" }, # "heureka": { type: "app", path: "apps/heureka"}, "playground": { type: "app", path: "apps/playground"}, - "juno-ui-components": { type: "lib", path: "libs/juno-ui-components"}, + # "juno-ui-components": { type: "lib", path: "libs/juno-ui-components"}, "messages-provider": { type: "lib", path: "libs/messages-provider"}, "policy-engine": { type: "lib", path: "libs/policy-engine"}, "url-state-provider": { type: "lib", path: "libs/url-state-provider"}, @@ -29,6 +29,7 @@ CLOUDOPERATOR_ASSETS = { "communicator": { type: "lib", path: "libs/communicator"}, + "juno-ui-components": { type: "lib", path: "libs/juno-ui-components"}, "oauth": { type: "lib", path: "libs/oauth"}, } From 1e47ed3cf0449388b2b7239dc6eb97269e0f0c6e Mon Sep 17 00:00:00 2001 From: Arturo Reuschenbach Date: Thu, 23 May 2024 14:22:10 +0200 Subject: [PATCH 15/26] [ci/workflow] build assets with the policy-engine from cloudoperators and block in sapcc (#606) * [ci] build policy lib from cloudoperators * [workflow] block PRs for policy-engine --- .github/workflows/block-apps.yml | 7 ++++--- ci/pipeline.yaml.erb | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/block-apps.yml b/.github/workflows/block-apps.yml index dd68ba4bf..1e54a2ec7 100644 --- a/.github/workflows/block-apps.yml +++ b/.github/workflows/block-apps.yml @@ -1,4 +1,4 @@ -name: Block PRs on apps supernova, huereka, greenhouse and greenhouse-management and libs communicator, oauth and juno-ui-components +name: Block PRs on apps supernova, huereka, greenhouse and greenhouse-management and libs communicator, oauth, policy-engine and juno-ui-components on: pull_request: @@ -75,15 +75,16 @@ jobs: echo libs: ${{ needs.changes.outputs.libs }} echo app changes: ${{ needs.changes.outputs.app-changes }} echo lib changes: ${{ needs.changes.outputs.lib-changes }} - - name: Check if changes belongs to apps supernova, huereka, greenhouse or greenhouse-management or libs communicator, oauth or juno-ui-components + - name: Check if changes belongs to apps supernova, huereka, greenhouse or greenhouse-management or libs communicator, oauth, policy-engine or juno-ui-components if: | contains(needs.changes.outputs.app-changes, 'supernova') || contains(needs.changes.outputs.app-changes, 'huereka') || contains(needs.changes.outputs.app-changes, 'greenhouse') || contains(needs.changes.outputs.app-changes, 'greenhouse-management') || contains(needs.changes.outputs.lib-changes, 'communicator') || + contains(needs.changes.outputs.lib-changes, 'policy-engine') || contains(needs.changes.outputs.lib-changes, 'oauth') || contains(needs.changes.outputs.lib-changes, 'juno-ui-components') run: | - echo "::error not allowed to make changes to supernova, huereka, greenhouse or greenhouse-management apps or communicator, oauth or juno-ui-components libs" + echo "::error not allowed to make changes to supernova, huereka, greenhouse or greenhouse-management apps or communicator, oauth, policy-engine or juno-ui-components libs" exit 1 diff --git a/ci/pipeline.yaml.erb b/ci/pipeline.yaml.erb index 6795d88b0..f644aa457 100644 --- a/ci/pipeline.yaml.erb +++ b/ci/pipeline.yaml.erb @@ -21,7 +21,7 @@ "playground": { type: "app", path: "apps/playground"}, # "juno-ui-components": { type: "lib", path: "libs/juno-ui-components"}, "messages-provider": { type: "lib", path: "libs/messages-provider"}, - "policy-engine": { type: "lib", path: "libs/policy-engine"}, + # "policy-engine": { type: "lib", path: "libs/policy-engine"}, "url-state-provider": { type: "lib", path: "libs/url-state-provider"}, "url-state-router": { type: "lib", path: "libs/url-state-router"}, "utils": { type: "lib", path: "libs/utils"}, @@ -30,6 +30,7 @@ CLOUDOPERATOR_ASSETS = { "communicator": { type: "lib", path: "libs/communicator"}, "juno-ui-components": { type: "lib", path: "libs/juno-ui-components"}, + "policy-engine": { type: "lib", path: "libs/policy-engine"}, "oauth": { type: "lib", path: "libs/oauth"}, } From b25dce0b12002508f411dd36d7d267b1b30ed8b2 Mon Sep 17 00:00:00 2001 From: D038721 Date: Thu, 23 May 2024 15:34:25 +0200 Subject: [PATCH 16/26] [dev] update dev base image to node 20 --- docker/Dockerfile.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 01aaeaeac..0aa1f1aba 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM keppel.eu-de-1.cloud.sap/ccloud-dockerhub-mirror/library/node:18-alpine +FROM keppel.eu-de-1.cloud.sap/ccloud-dockerhub-mirror/library/node:20-alpine RUN apk add git RUN npm install -g serve concurrently glob depcheck From 61d59dfd29058dbe74e83c603aa92ac70c83c2c1 Mon Sep 17 00:00:00 2001 From: D038721 Date: Thu, 23 May 2024 15:35:36 +0200 Subject: [PATCH 17/26] [dashboard] add esbuild dev dependency --- apps/dashboard/package.json | 1 + package-lock.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 8b6a12424..f25e2e678 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -24,6 +24,7 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", + "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", diff --git a/package-lock.json b/package-lock.json index 7555df944..cdbe762fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1600,7 +1600,7 @@ } }, "libs/juno-ui-components": { - "version": "2.13.8", + "version": "2.14.0", "license": "Apache-2.0", "devDependencies": { "@babel/plugin-transform-parameters": "^7.22.5", From 743d4744abc84dd13b97b7273548b01bc8729fc3 Mon Sep 17 00:00:00 2001 From: Arturo Reuschenbach Date: Fri, 24 May 2024 11:14:34 +0200 Subject: [PATCH 18/26] bump juno-ui-components to the version from cloudoperators (#607) --- apps/assets-overview/package.json | 4 +- apps/auth/package.json | 4 +- apps/dashboard/package.json | 4 +- apps/exampleapp/package.json | 4 +- apps/playground/package.json | 4 +- apps/template/package.json | 4 +- apps/volta/package.json | 4 +- apps/whois/package.json | 4 +- package-lock.json | 487 +++++++++++++++++++++++++++--- 9 files changed, 455 insertions(+), 64 deletions(-) diff --git a/apps/assets-overview/package.json b/apps/assets-overview/package.json index 0316dd4c7..41f3d5b05 100644 --- a/apps/assets-overview/package.json +++ b/apps/assets-overview/package.json @@ -31,7 +31,7 @@ "github-markdown-css": "^5.1.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "3.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "postcss": "^8.4.21", @@ -60,7 +60,7 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "3.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "prop-types": "15.8.1", diff --git a/apps/auth/package.json b/apps/auth/package.json index 0c3c4ac2a..40d2bcce2 100644 --- a/apps/auth/package.json +++ b/apps/auth/package.json @@ -31,7 +31,7 @@ "interweave": "^13.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -51,7 +51,7 @@ }, "peerDependencies": { "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "latest", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index f25e2e678..85e58ad4a 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -27,7 +27,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -48,7 +48,7 @@ }, "peerDependencies": { "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", diff --git a/apps/exampleapp/package.json b/apps/exampleapp/package.json index 0fe86bbff..afadd9c51 100644 --- a/apps/exampleapp/package.json +++ b/apps/exampleapp/package.json @@ -29,7 +29,7 @@ "esbuild": "^0.17.19", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", @@ -55,7 +55,7 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", diff --git a/apps/playground/package.json b/apps/playground/package.json index 1b2255011..7999a3af5 100644 --- a/apps/playground/package.json +++ b/apps/playground/package.json @@ -29,7 +29,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -50,7 +50,7 @@ "build": "NODE_ENV=production node esbuild.config.js" }, "peerDependencies": { - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/apps/template/package.json b/apps/template/package.json index 4f59f17c5..c8fbeea70 100644 --- a/apps/template/package.json +++ b/apps/template/package.json @@ -28,7 +28,7 @@ "babel-plugin-transform-import-meta": "^2.2.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -52,7 +52,7 @@ }, "peerDependencies": { "@tanstack/react-query": "4.28.0", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", diff --git a/apps/volta/package.json b/apps/volta/package.json index 1d3088461..2a4855697 100644 --- a/apps/volta/package.json +++ b/apps/volta/package.json @@ -30,7 +30,7 @@ "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "lodash.uniqueid": "^4.0.1", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", @@ -53,7 +53,7 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", diff --git a/apps/whois/package.json b/apps/whois/package.json index 1c223b74d..cfa5992f1 100644 --- a/apps/whois/package.json +++ b/apps/whois/package.json @@ -30,7 +30,7 @@ "ip-regex": "^5.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -50,7 +50,7 @@ "build": "NODE_ENV=production node esbuild.config.js" }, "peerDependencies": { - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", diff --git a/package-lock.json b/package-lock.json index cdbe762fb..68212750e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "github-markdown-css": "^5.1.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "3.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "postcss": "^8.4.21", @@ -75,7 +75,7 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "3.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "prop-types": "15.8.1", @@ -88,14 +88,14 @@ } }, "apps/assets-overview/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/assets-overview/node_modules/messages-provider": { @@ -162,7 +162,7 @@ "interweave": "^13.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -177,7 +177,7 @@ }, "peerDependencies": { "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "latest", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", @@ -191,14 +191,14 @@ "dev": true }, "apps/auth/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/auth/node_modules/oauth": { @@ -224,9 +224,10 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", + "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -242,7 +243,7 @@ }, "peerDependencies": { "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", @@ -250,15 +251,405 @@ "zustand": "^4.1.1" } }, + "apps/dashboard/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "apps/dashboard/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, "apps/dashboard/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/dashboard/node_modules/luxon": { @@ -292,7 +683,7 @@ "esbuild": "^0.17.19", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", @@ -313,7 +704,7 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", @@ -326,14 +717,14 @@ } }, "apps/exampleapp/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/exampleapp/node_modules/luxon": { @@ -402,7 +793,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -418,7 +809,7 @@ "zustand": "4.3.7" }, "peerDependencies": { - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "18.2.0", @@ -817,14 +1208,14 @@ } }, "apps/playground/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/playground/node_modules/url-state-provider": { @@ -857,7 +1248,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -875,7 +1266,7 @@ }, "peerDependencies": { "@tanstack/react-query": "4.28.0", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", @@ -1274,14 +1665,14 @@ } }, "apps/template/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/template/node_modules/luxon": { @@ -1396,7 +1787,7 @@ "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "lodash.uniqueid": "^4.0.1", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", @@ -1419,7 +1810,7 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", @@ -1438,14 +1829,14 @@ "dev": true }, "apps/volta/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/volta/node_modules/luxon": { @@ -1514,7 +1905,7 @@ "ip-regex": "^5.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -1529,7 +1920,7 @@ "util": "^0.12.4" }, "peerDependencies": { - "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", @@ -1544,14 +1935,14 @@ "dev": true }, "apps/whois/node_modules/juno-ui-components": { - "version": "2.13.8", - "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", - "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "version": "2.14.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.14.1/package.tgz", + "integrity": "sha512-O8h4E1/AylfMKla8pXAi0UdJRZp/iev40HJZyjvAds7q5pwF4UkB1PmLNbwwwzXKenXti2CyojIIQCKX8JpETA==", "dev": true, "peerDependencies": { "prop-types": "15.8.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "^18.2.0" } }, "apps/whois/node_modules/luxon": { From 3ebb213a0bd02cc2882185b40d724d941333ef55 Mon Sep 17 00:00:00 2001 From: Arturo Reuschenbach Date: Fri, 24 May 2024 11:27:44 +0200 Subject: [PATCH 19/26] [migration] remove migrated libs (#608) --- libs/communicator/.gitignore | 1 - libs/communicator/LICENSE | 201 --- libs/communicator/README.md | 172 -- libs/communicator/dev/build.js | 183 -- libs/communicator/dev/build.js.map | 7 - libs/communicator/dev/index.html | 113 -- libs/communicator/dev/index.js | 170 -- libs/communicator/esbuild.config.js | 51 - libs/communicator/package.json | 41 - libs/communicator/src/index.js | 290 ---- libs/communicator/src/index.test.js | 216 --- libs/juno-ui-components/.gitignore | 3 - libs/juno-ui-components/.npmignore | 9 - libs/juno-ui-components/.storybook/.babelrc | 8 - .../.storybook/juno-addon/Decorator.jsx | 52 - .../.storybook/juno-addon/DocsContainer.jsx | 32 - .../.storybook/juno-addon/README.md | 41 - .../.storybook/juno-addon/ThemeToggle.jsx | 46 - .../.storybook/juno-addon/constants.js | 17 - .../.storybook/juno-addon/manager.js | 22 - .../.storybook/juno-addon/preview.js | 29 - .../.storybook/juno-addon/themes.js | 117 -- libs/juno-ui-components/.storybook/main.js | 93 - libs/juno-ui-components/.storybook/preview.js | 111 -- libs/juno-ui-components/LICENSE | 201 --- libs/juno-ui-components/README.md | 57 - libs/juno-ui-components/babel.config.json | 9 - libs/juno-ui-components/lib/variables.scss | 635 ------- libs/juno-ui-components/package.json | 112 -- libs/juno-ui-components/postcss.config.js | 8 - libs/juno-ui-components/rollup.config.js | 153 -- libs/juno-ui-components/setupTests.js | 48 - .../components/AppBody/AppBody.component.js | 37 - .../src/components/AppBody/AppBody.stories.js | 35 - .../src/components/AppBody/AppBody.test.js | 59 - .../src/components/AppBody/index.js | 6 - .../components/AppIntro/AppIntro.component.js | 34 - .../components/AppIntro/AppIntro.stories.js | 40 - .../src/components/AppIntro/AppIntro.test.js | 41 - .../src/components/AppIntro/index.js | 6 - .../components/AppShell/AppShell.component.js | 121 -- .../components/AppShell/AppShell.stories.js | 202 --- .../src/components/AppShell/AppShell.test.js | 143 -- .../src/components/AppShell/index.js | 6 - .../AppShellProvider.component.js | 61 - .../AppShellProvider.stories.js | 128 -- .../AppShellProvider/AppShellProvider.test.js | 20 - .../src/components/AppShellProvider/index.js | 6 - .../src/components/Badge/Badge.component.js | 135 -- .../src/components/Badge/Badge.stories.js | 103 -- .../src/components/Badge/Badge.test.js | 82 - .../src/components/Badge/index.js | 6 - .../src/components/Box/Box.component.js | 52 - .../src/components/Box/Box.stories.js | 41 - .../src/components/Box/Box.test.js | 46 - .../src/components/Box/index.js | 6 - .../Breadcrumb/Breadcrumb.component.js | 51 - .../Breadcrumb/Breadcrumb.stories.js | 40 - .../components/Breadcrumb/Breadcrumb.test.js | 32 - .../src/components/Breadcrumb/index.js | 6 - .../BreadcrumbItem.component.js | 113 -- .../BreadcrumbItem/BreadcrumbItem.stories.js | 110 -- .../BreadcrumbItem/BreadcrumbItem.test.js | 88 - .../src/components/BreadcrumbItem/index.js | 6 - .../src/components/Button/Button.component.js | 241 --- .../src/components/Button/Button.stories.js | 453 ----- .../src/components/Button/Button.test.js | 140 -- .../src/components/Button/button.scss | 73 - .../src/components/Button/index.js | 6 - .../ButtonRow/ButtonRow.component.js | 40 - .../components/ButtonRow/ButtonRow.stories.js | 39 - .../components/ButtonRow/ButtonRow.test.js | 38 - .../src/components/ButtonRow/index.js | 6 - .../components/Checkbox/Checkbox.component.js | 380 ---- .../components/Checkbox/Checkbox.stories.js | 97 -- .../src/components/Checkbox/Checkbox.test.js | 174 -- .../src/components/Checkbox/index.js | 6 - .../CheckboxGroup/CheckboxGroup.component.js | 271 --- .../CheckboxGroup/CheckboxGroup.stories.js | 213 --- .../CheckboxGroup/CheckboxGroup.test.js | 202 --- .../src/components/CheckboxGroup/index.js | 6 - .../CheckboxRow/CheckboxRow.component.js | 103 -- .../CheckboxRow/CheckboxRow.stories.js | 106 -- .../CheckboxRow/CheckboxRow.test.js | 117 -- .../src/components/CheckboxRow/index.js | 6 - .../src/components/Code/Code.component.js | 35 - .../src/components/Code/Code.stories.js | 46 - .../src/components/Code/Code.test.js | 50 - .../src/components/Code/index.js | 6 - .../CodeBlock/CodeBlock.component.js | 224 --- .../components/CodeBlock/CodeBlock.stories.js | 210 --- .../components/CodeBlock/CodeBlock.test.js | 185 -- .../src/components/CodeBlock/index.js | 6 - .../components/ComboBox/ComboBox.component.js | 534 ------ .../components/ComboBox/ComboBox.stories.js | 886 ---------- .../src/components/ComboBox/ComboBox.test.js | 401 ----- .../src/components/ComboBox/index.js | 6 - .../ComboBoxOption.component.js | 123 -- .../ComboBoxOption/ComboBoxOption.stories.js | 47 - .../ComboBoxOption/ComboBoxOption.test.js | 98 -- .../src/components/ComboBoxOption/index.js | 6 - .../Container/Container.component.js | 51 - .../components/Container/Container.stories.js | 60 - .../components/Container/Container.test.js | 64 - .../src/components/Container/index.js | 6 - .../ContentArea/ContentArea.component.js | 44 - .../ContentArea/ContentArea.stories.js | 33 - .../ContentArea/ContentArea.test.js | 74 - .../src/components/ContentArea/index.js | 6 - .../ContentAreaToolbar.component.js | 46 - .../ContentAreaToolbar.stories.js | 40 - .../ContentAreaToolbar.test.js | 50 - .../components/ContentAreaToolbar/index.js | 6 - .../ContentAreaWrapper.component.js | 40 - .../ContentAreaWrapper.stories.js | 44 - .../ContentAreaWrapper.test.js | 62 - .../components/ContentAreaWrapper/index.js | 6 - .../ContentContainer.component.js | 40 - .../ContentContainer.stories.js | 35 - .../ContentContainer/ContentContainer.test.js | 51 - .../src/components/ContentContainer/index.js | 6 - .../ContentHeading.component.js | 44 - .../ContentHeading/ContentHeading.stories.js | 33 - .../ContentHeading/ContentHeading.test.js | 58 - .../src/components/ContentHeading/index.js | 6 - .../ContextMenu/ContextMenu.component.js | 94 - .../ContextMenu/ContextMenu.stories.js | 98 -- .../ContextMenu/ContextMenu.test.js | 28 - .../src/components/ContextMenu/index.js | 6 - .../components/DataGrid/DataGrid.component.js | 105 -- .../components/DataGrid/DataGrid.stories.js | 242 --- .../src/components/DataGrid/DataGrid.test.js | 23 - .../src/components/DataGrid/index.js | 6 - .../DataGridCell/DataGridCell.component.js | 77 - .../DataGridCell/DataGridCell.stories.js | 85 - .../DataGridCell/DataGridCell.test.js | 24 - .../src/components/DataGridCell/index.js | 6 - .../DataGridCheckboxCell.component.js | 41 - .../DataGridCheckboxCell.stories.js | 65 - .../DataGridCheckboxCell.test.js | 39 - .../components/DataGridCheckboxCell/index.js | 6 - .../DataGridFoot/DataGridFoot.component.js | 31 - .../DataGridFoot/DataGridFoot.stories.js | 53 - .../DataGridFoot/DataGridFoot.test.js | 27 - .../src/components/DataGridFoot/index.js | 6 - .../DataGridHeadCell.component.js | 74 - .../DataGridHeadCell.stories.js | 85 - .../DataGridHeadCell/DataGridHeadCell.test.js | 23 - .../src/components/DataGridHeadCell/index.js | 6 - .../DataGridRow/DataGridRow.component.js | 65 - .../DataGridRow/DataGridRow.stories.js | 59 - .../DataGridRow/DataGridRow.test.js | 24 - .../src/components/DataGridRow/index.js | 6 - .../DataGridToolbar.component.js | 56 - .../DataGridToolbar.stories.js | 68 - .../DataGridToolbar/DataGridToolbar.test.js | 35 - .../src/components/DataGridToolbar/index.js | 6 - .../components/DataList/DataList.component.js | 46 - .../components/DataList/DataList.stories.js | 160 -- .../src/components/DataList/DataList.test.js | 23 - .../src/components/DataList/index.js | 6 - .../DataListCell/DataListCell.component.js | 151 -- .../DataListCell/DataListCell.stories.js | 42 - .../DataListCell/DataListCell.test.js | 23 - .../src/components/DataListCell/index.js | 6 - .../DataListCheckboxCell.component.js | 51 - .../DataListCheckboxCell.stories.js | 56 - .../DataListCheckboxCell.test.js | 30 - .../components/DataListCheckboxCell/index.js | 6 - .../DataListRow/DataListRow.component.js | 62 - .../DataListRow/DataListRow.stories.js | 160 -- .../DataListRow/DataListRow.test.js | 23 - .../src/components/DataListRow/index.js | 6 - .../DateTimePicker.component.js | 711 -------- .../DateTimePicker/DateTimePicker.stories.js | 500 ------ .../DateTimePicker/DateTimePicker.test.js | 684 -------- .../DateTimePicker/datetimepicker.scss | 831 --------- .../src/components/DateTimePicker/index.js | 6 - .../FilterInput/FilterInput.component.js | 232 --- .../FilterInput/FilterInput.stories.js | 50 - .../FilterInput/FilterInput.test.js | 281 --- .../src/components/FilterInput/index.js | 6 - .../FilterPill/FilterPill.component.js | 100 -- .../FilterPill/FilterPill.stories.js | 22 - .../components/FilterPill/FilterPill.test.js | 133 -- .../src/components/FilterPill/index.js | 6 - .../components/Filters/Filters.component.js | 167 -- .../src/components/Filters/Filters.stories.js | 121 -- .../src/components/Filters/Filters.test.js | 204 --- .../src/components/Filters/index.js | 6 - .../src/components/Form/Form.component.js | 50 - .../src/components/Form/Form.stories.js | 132 -- .../src/components/Form/Form.test.js | 41 - .../src/components/Form/index.js | 6 - .../components/FormHint/FormHint.component.js | 66 - .../components/FormHint/FormHint.stories.js | 69 - .../src/components/FormHint/FormHint.test.js | 70 - .../src/components/FormHint/index.js | 6 - .../components/FormRow/FormRow.component.js | 40 - .../src/components/FormRow/FormRow.stories.js | 28 - .../src/components/FormRow/FormRow.test.js | 34 - .../src/components/FormRow/index.js | 6 - .../FormSection/FormSection.component.js | 53 - .../FormSection/FormSection.stories.js | 57 - .../FormSection/FormSection.test.js | 41 - .../src/components/FormSection/index.js | 6 - .../src/components/Grid/Grid.component.js | 49 - .../src/components/Grid/Grid.stories.js | 159 -- .../src/components/Grid/Grid.test.js | 30 - .../src/components/Grid/index.js | 6 - .../GridColumn/GridColumn.component.js | 152 -- .../GridColumn/GridColumn.stories.js | 50 - .../components/GridColumn/GridColumn.test.js | 38 - .../src/components/GridColumn/index.js | 6 - .../components/GridRow/GridRow.component.js | 40 - .../src/components/GridRow/GridRow.stories.js | 46 - .../src/components/GridRow/GridRow.test.js | 22 - .../src/components/GridRow/index.js | 6 - .../src/components/Icon/Icon.component.js | 826 --------- .../src/components/Icon/Icon.stories.js | 403 ----- .../src/components/Icon/Icon.test.js | 381 ----- .../src/components/Icon/icons/home_sharp.svg | 6 - .../src/components/Icon/icons/juno-danger.svg | 8 - .../Icon/icons/juno_severity_critical.svg | 10 - .../Icon/icons/juno_severity_high.svg | 11 - .../Icon/icons/juno_severity_low.svg | 11 - .../Icon/icons/juno_severity_medium.svg | 11 - .../src/components/Icon/icons/place.svg | 6 - .../src/components/Icon/index.js | 6 - .../InputGroup/InputGroup.component.js | 56 - .../InputGroup/InputGroup.stories.js | 141 -- .../components/InputGroup/InputGroup.test.js | 105 -- .../src/components/InputGroup/index.js | 6 - .../components/InputGroup/input-group.scss | 32 - .../components/IntroBox/IntroBox.component.js | 114 -- .../components/IntroBox/IntroBox.stories.js | 48 - .../src/components/IntroBox/IntroBox.test.js | 99 -- .../src/components/IntroBox/index.js | 6 - .../JsonViewer/JsonViewer.component.js | 543 ------ .../JsonViewer/JsonViewer.stories.js | 110 -- .../components/JsonViewer/JsonViewer.test.js | 29 - .../src/components/JsonViewer/index.js | 6 - .../src/components/JsonViewer/themes.js | 42 - .../src/components/Label/Label.component.js | 113 -- .../src/components/Label/Label.stories.js | 33 - .../src/components/Label/Label.test.js | 57 - .../src/components/Label/index.js | 6 - .../LoadingIndicator.component.js | 44 - .../LoadingIndicator.stories.js | 37 - .../LoadingIndicator/LoadingIndicator.test.js | 44 - .../src/components/LoadingIndicator/index.js | 6 - .../LoadingIndicator/loading-indicator.svg | 37 - .../MainContainer/MainContainer.component.js | 44 - .../MainContainer/MainContainer.stories.js | 35 - .../MainContainer/MainContainer.test.js | 46 - .../src/components/MainContainer/index.js | 6 - .../MainContainerInner.component.js | 69 - .../MainContainerInner.test.js | 64 - .../components/MainContainerInner/index.js | 6 - .../components/MainTabs/MainTabs.component.js | 53 - .../components/MainTabs/MainTabs.stories.js | 99 -- .../src/components/MainTabs/MainTabs.test.js | 188 -- .../src/components/MainTabs/index.js | 6 - .../src/components/Menu/Menu.component.js | 83 - .../src/components/Menu/Menu.stories.js | 118 -- .../src/components/Menu/Menu.test.js | 55 - .../src/components/Menu/index.js | 6 - .../components/MenuItem/MenuItem.component.js | 133 -- .../components/MenuItem/MenuItem.stories.js | 114 -- .../src/components/MenuItem/MenuItem.test.js | 86 - .../src/components/MenuItem/index.js | 6 - .../MenuSection/MenuSection.component.js | 48 - .../MenuSection/MenuSection.stories.js | 44 - .../MenuSection/MenuSection.test.js | 18 - .../src/components/MenuSection/index.js | 6 - .../components/Message/Message.component.js | 237 --- .../src/components/Message/Message.stories.js | 65 - .../src/components/Message/Message.test.js | 184 -- .../src/components/Message/index.js | 6 - .../src/components/Modal/Modal.component.js | 276 --- .../src/components/Modal/Modal.stories.js | 228 --- .../src/components/Modal/Modal.test.js | 251 --- .../src/components/Modal/index.js | 6 - .../ModalFooter/ModalFooter.component.js | 99 -- .../ModalFooter/ModalFooter.stories.js | 59 - .../ModalFooter/ModalFooter.test.js | 80 - .../src/components/ModalFooter/index.js | 6 - .../NativeSelect/NativeSelect.component.js | 251 --- .../NativeSelect/NativeSelect.stories.js | 115 -- .../NativeSelect/NativeSelect.test.js | 123 -- .../src/components/NativeSelect/index.js | 6 - .../NativeSelectOption.component.js | 45 - .../NativeSelectOption.stories.js | 28 - .../NativeSelectOption/SelectOption.test.js | 47 - .../components/NativeSelectOption/index.js | 6 - .../NativeSelectOptionGroup.component.js | 44 - .../NativeSelectOptionGroup.stories.js | 62 - .../NativeSelectOptionGroup.test.js | 51 - .../NativeSelectOptionGroup/index.js | 6 - .../Navigation/Navigation.component.js | 134 -- .../Navigation/Navigation.stories.js | 155 -- .../components/Navigation/Navigation.test.js | 1524 ----------------- .../src/components/Navigation/index.js | 6 - .../NavigationItem.component.js | 216 --- .../NavigationItem/NavigationItem.stories.js | 75 - .../NavigationItem/NavigationItem.test.js | 150 -- .../src/components/NavigationItem/index.js | 6 - .../PageFooter/PageFooter.component.js | 57 - .../PageFooter/PageFooter.stories.js | 35 - .../components/PageFooter/PageFooter.test.js | 47 - .../src/components/PageFooter/index.js | 6 - .../PageHeader/PageHeader.component.js | 87 - .../PageHeader/PageHeader.stories.js | 49 - .../components/PageHeader/PageHeader.test.js | 55 - .../src/components/PageHeader/index.js | 6 - .../Pagination/Pagination.component.js | 168 -- .../Pagination/Pagination.stories.js | 78 - .../components/Pagination/Pagination.test.js | 106 -- .../src/components/Pagination/index.js | 6 - .../src/components/Panel/Panel.component.js | 163 -- .../src/components/Panel/Panel.stories.js | 57 - .../src/components/Panel/Panel.test.js | 81 - .../src/components/Panel/index.js | 6 - .../PanelBody/PanelBody.component.js | 46 - .../components/PanelBody/PanelBody.stories.js | 66 - .../components/PanelBody/PanelBody.test.js | 62 - .../src/components/PanelBody/index.js | 6 - .../PanelFooter/PanelFooter.component.js | 42 - .../PanelFooter/PanelFooter.stories.js | 53 - .../PanelFooter/PanelFooter.test.js | 49 - .../src/components/PanelFooter/index.js | 6 - .../src/components/Pill/Pill.component.js | 126 -- .../src/components/Pill/Pill.stories.js | 47 - .../src/components/Pill/Pill.test.js | 154 -- .../src/components/Pill/index.js | 6 - .../PortalProvider.component.js | 88 - .../PortalProvider/PortalProvider.stories.js | 67 - .../PortalProvider/PortalProvider.test.js | 40 - .../src/components/PortalProvider/index.js | 6 - .../src/components/Radio/Radio.component.js | 355 ---- .../src/components/Radio/Radio.stories.js | 108 -- .../src/components/Radio/Radio.test.js | 182 -- .../src/components/Radio/index.js | 6 - .../RadioGroup/RadioGroup.component.js | 267 --- .../RadioGroup/RadioGroup.stories.js | 226 --- .../components/RadioGroup/RadioGroup.test.js | 186 -- .../src/components/RadioGroup/index.js | 6 - .../components/RadioRow/RadioRow.component.js | 97 -- .../components/RadioRow/RadioRow.stories.js | 112 -- .../src/components/RadioRow/RadioRow.test.js | 111 -- .../src/components/RadioRow/index.js | 6 - .../SearchInput/SearchInput.component.js | 212 --- .../SearchInput/SearchInput.stories.js | 35 - .../SearchInput/SearchInput.test.js | 143 -- .../src/components/SearchInput/index.js | 6 - .../components/SearchInput/searchinput.scss | 6 - .../src/components/Select/Select.component.js | 479 ------ .../src/components/Select/Select.stories.js | 529 ------ .../src/components/Select/Select.test.js | 421 ----- .../src/components/Select/index.js | 6 - .../src/components/Select/select.scss | 84 - .../SelectDivider/SelectDivider.component.js | 31 - .../SelectDivider/SelectDivider.stories.js | 32 - .../SelectDivider/SelectDivider.test.js | 30 - .../src/components/SelectDivider/index.js | 6 - .../SelectOption/SelectOption.component.js | 127 -- .../SelectOption/SelectOption.stories.js | 62 - .../SelectOption/SelectOption.test.js | 98 -- .../src/components/SelectOption/index.js | 6 - .../SelectRow/SelectRow.component.js | 132 -- .../components/SelectRow/SelectRow.stories.js | 335 ---- .../components/SelectRow/SelectRow.test.js | 214 --- .../src/components/SelectRow/index.js | 6 - .../ShadowRoot/ShadowRoot.component.js | 83 - .../ShadowRoot/ShadowRoot.stories.js | 31 - .../src/components/ShadowRoot/index.js | 6 - .../SideNavigation.component.js | 65 - .../SideNavigation/SideNavigation.stories.js | 100 -- .../SideNavigation/SideNavigation.test.js | 264 --- .../src/components/SideNavigation/index.js | 6 - .../SideNavigationItem.component.js | 103 -- .../SideNavigationItem.stories.js | 68 - .../SideNavigationItem.test.js | 152 -- .../components/SideNavigationItem/index.js | 6 - .../components/Spinner/Spinner.component.js | 118 -- .../src/components/Spinner/Spinner.stories.js | 59 - .../src/components/Spinner/Spinner.test.js | 109 -- .../src/components/Spinner/index.js | 6 - .../src/components/Stack/Stack.component.js | 183 -- .../src/components/Stack/Stack.stories.js | 282 --- .../src/components/Stack/Stack.test.js | 106 -- .../src/components/Stack/index.js | 6 - .../src/components/StyleProvider/Fonts.js | 53 - .../components/StyleProvider/GlobalStyles.js | 38 - .../StyleProvider/StyleProvider.component.js | 142 -- .../StyleProvider/StyleProvider.stories.js | 61 - .../StyleProvider/StyleProvider.test.js | 24 - .../src/components/StyleProvider/index.js | 6 - .../src/components/Switch/Switch.component.js | 297 ---- .../src/components/Switch/Switch.stories.js | 135 -- .../src/components/Switch/Switch.test.js | 181 -- .../src/components/Switch/index.js | 6 - .../SwitchRow/SwitchRow.component.js | 103 -- .../components/SwitchRow/SwitchRow.stories.js | 234 --- .../components/SwitchRow/SwitchRow.test.js | 133 -- .../src/components/SwitchRow/index.js | 6 - .../src/components/Tab/Tab.component.js | 76 - .../src/components/Tab/Tab.stories.js | 37 - .../src/components/Tab/Tab.test.js | 49 - .../src/components/Tab/index.js | 6 - .../components/TabList/TabList.component.js | 73 - .../src/components/TabList/TabList.stories.js | 54 - .../src/components/TabList/TabList.test.js | 42 - .../src/components/TabList/index.js | 6 - .../TabNavigation/TabNavigation.component.js | 78 - .../TabNavigation/TabNavigation.stories.js | 128 -- .../TabNavigation/TabNavigation.test.js | 278 --- .../src/components/TabNavigation/index.js | 6 - .../TabNavigationItem.component.js | 111 -- .../TabNavigationItem.stories.js | 65 - .../TabNavigationItem.test.js | 152 -- .../src/components/TabNavigationItem/index.js | 6 - .../components/TabPanel/TabPanel.component.js | 45 - .../components/TabPanel/TabPanel.stories.js | 23 - .../src/components/TabPanel/TabPanel.test.js | 30 - .../src/components/TabPanel/index.js | 6 - .../src/components/Tabs/Tabs.component.js | 84 - .../src/components/Tabs/Tabs.stories.js | 130 -- .../src/components/Tabs/Tabs.test.js | 211 --- .../src/components/Tabs/index.js | 6 - .../TextInput/TextInput.component.js | 331 ---- .../components/TextInput/TextInput.stories.js | 128 -- .../components/TextInput/TextInput.test.js | 187 -- .../src/components/TextInput/index.js | 6 - .../src/components/TextInput/textinput.scss | 6 - .../TextInputRow/TextInputRow.component.js | 124 -- .../TextInputRow/TextInputRow.stories.js | 179 -- .../TextInputRow/TextInputRow.test.js | 206 --- .../src/components/TextInputRow/index.js | 6 - .../components/Textarea/Textarea.component.js | 326 ---- .../components/Textarea/Textarea.stories.js | 98 -- .../src/components/Textarea/Textarea.test.js | 158 -- .../src/components/Textarea/index.js | 6 - .../TextareaRow/TextareaRow.component.js | 102 -- .../TextareaRow/TextareaRow.stories.js | 124 -- .../TextareaRow/TextareaRow.test.js | 136 -- .../src/components/TextareaRow/index.js | 6 - .../src/components/Toast/Toast.component.js | 121 -- .../src/components/Toast/Toast.stories.js | 64 - .../src/components/Toast/Toast.test.js | 99 -- .../src/components/Toast/index.js | 6 - .../components/Tooltip/Tooltip.component.js | 97 -- .../src/components/Tooltip/Tooltip.stories.js | 232 --- .../src/components/Tooltip/Tooltip.test.js | 144 -- .../src/components/Tooltip/index.js | 7 - .../src/components/Tooltip/useTooltip.js | 124 -- .../TooltipContent.component.js | 92 - .../TooltipContent/TooltipContent.stories.js | 34 - .../TooltipContent/TooltipContent.test.js | 43 - .../src/components/TooltipContent/index.js | 6 - .../TooltipTrigger.component.js | 69 - .../TooltipTrigger/TooltipTrigger.stories.js | 59 - .../TooltipTrigger/TooltipTrigger.test.js | 43 - .../src/components/TooltipTrigger/index.js | 7 - .../TopNavigation/TopNavigation.component.js | 68 - .../TopNavigation/TopNavigation.stories.js | 102 -- .../TopNavigation/TopNavigation.test.js | 201 --- .../src/components/TopNavigation/index.js | 7 - .../TopNavigationItem.component.js | 107 -- .../TopNavigationItem.stories.js | 66 - .../TopNavigationItem.test.js | 129 -- .../src/components/TopNavigationItem/index.js | 7 - .../withDeprecationWarning/index.js | 6 - .../withDeprecationWarning.component.js | 23 - .../withDeprecationWarning.test.js | 35 - .../src/docs/ColorPalette/ColorCard.jsx | 40 - .../src/docs/ColorPalette/ColorPalette.jsx | 53 - .../docs/ColorPalette/JunoColorPalette.jsx | 29 - .../src/docs/ColorPalette/TailwindColors.js | 121 -- .../src/docs/ColorPalette/TextColorCard.jsx | 42 - .../generateTailwindThemeClassesJson.js | 109 -- .../JunoComponentWrapper.jsx | 48 - libs/juno-ui-components/src/docs/colors.mdx | 35 - .../src/docs/img/Schwan.jpg | Bin 59573 -> 0 bytes .../src/docs/navigation.mdx | 115 -- .../src/docsHidden/examplePage.mdx | 44 - .../src/dummyComponents/DummyComponent.js | 26 - .../src/dummyComponents/DummyComponentList.js | 19 - libs/juno-ui-components/src/global.scss | 48 - .../src/hooks/useTimeout.js | 31 - .../src/img/app_bg_example.svg | 18 - .../src/img/ccloud_shape.svg | 8 - .../src/img/icon_arrow_down.svg | 18 - libs/juno-ui-components/src/img/sap_logo.svg | 20 - libs/juno-ui-components/src/index.js | 118 -- libs/juno-ui-components/src/utils.js | 68 - libs/juno-ui-components/tailwind.config.js | 340 ---- .../test/__mocks__/styleMock.js | 6 - libs/juno-ui-components/test/__mocks__/svg.js | 32 - .../test/__mocks__/svgLib.js | 13 - libs/oauth/LICENSE | 201 --- libs/oauth/README.md | 198 --- libs/oauth/__tests__/__utils__/globalsMock.js | 34 - libs/oauth/__tests__/__utils__/idTokenMock.js | 21 - .../__tests__/__utils__/oidcConfigMock.js | 42 - libs/oauth/__tests__/codeFlow.test.js | 243 --- libs/oauth/__tests__/implicitFlow.test.js | 123 -- libs/oauth/__tests__/mockedSession.test.js | 144 -- libs/oauth/__tests__/oidcConfig.test.js | 81 - libs/oauth/__tests__/oidcSession.test.js | 106 -- libs/oauth/__tests__/tokenHelpers.test.js | 240 --- libs/oauth/esbuild.config.js | 28 - libs/oauth/package.json | 45 - libs/oauth/src/codeFlow.js | 130 -- libs/oauth/src/implicitFlow.js | 53 - libs/oauth/src/index.js | 8 - libs/oauth/src/mockedSession.js | 91 - libs/oauth/src/oidcConfig.js | 38 - libs/oauth/src/oidcSession.js | 331 ---- libs/oauth/src/oidcState.js | 67 - libs/oauth/src/tokenHelpers.js | 114 -- libs/oauth/src/utils.js | 49 - libs/policy-engine/LICENSE | 201 --- libs/policy-engine/README.md | 117 -- libs/policy-engine/package.json | 39 - libs/policy-engine/rollup.config.js | 57 - libs/policy-engine/src/debugTrace.js | 32 - libs/policy-engine/src/debugTrace.test.js | 36 - libs/policy-engine/src/engine.js | 106 -- libs/policy-engine/src/engine.test.js | 293 ---- libs/policy-engine/src/evaluator.js | 170 -- libs/policy-engine/src/evaluator.test.js | 400 ----- libs/policy-engine/src/index.js | 9 - libs/policy-engine/src/lexer.js | 37 - libs/policy-engine/src/lexer.test.js | 116 -- libs/policy-engine/src/parser.js | 286 ---- libs/policy-engine/src/parser.test.js | 545 ------ 537 files changed, 50423 deletions(-) delete mode 100644 libs/communicator/.gitignore delete mode 100644 libs/communicator/LICENSE delete mode 100644 libs/communicator/README.md delete mode 100644 libs/communicator/dev/build.js delete mode 100644 libs/communicator/dev/build.js.map delete mode 100644 libs/communicator/dev/index.html delete mode 100644 libs/communicator/dev/index.js delete mode 100644 libs/communicator/esbuild.config.js delete mode 100644 libs/communicator/package.json delete mode 100644 libs/communicator/src/index.js delete mode 100644 libs/communicator/src/index.test.js delete mode 100644 libs/juno-ui-components/.gitignore delete mode 100644 libs/juno-ui-components/.npmignore delete mode 100644 libs/juno-ui-components/.storybook/.babelrc delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/Decorator.jsx delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/DocsContainer.jsx delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/README.md delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/ThemeToggle.jsx delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/constants.js delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/manager.js delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/preview.js delete mode 100644 libs/juno-ui-components/.storybook/juno-addon/themes.js delete mode 100644 libs/juno-ui-components/.storybook/main.js delete mode 100644 libs/juno-ui-components/.storybook/preview.js delete mode 100644 libs/juno-ui-components/LICENSE delete mode 100644 libs/juno-ui-components/README.md delete mode 100644 libs/juno-ui-components/babel.config.json delete mode 100644 libs/juno-ui-components/lib/variables.scss delete mode 100644 libs/juno-ui-components/package.json delete mode 100644 libs/juno-ui-components/postcss.config.js delete mode 100644 libs/juno-ui-components/rollup.config.js delete mode 100644 libs/juno-ui-components/setupTests.js delete mode 100644 libs/juno-ui-components/src/components/AppBody/AppBody.component.js delete mode 100644 libs/juno-ui-components/src/components/AppBody/AppBody.stories.js delete mode 100644 libs/juno-ui-components/src/components/AppBody/AppBody.test.js delete mode 100644 libs/juno-ui-components/src/components/AppBody/index.js delete mode 100644 libs/juno-ui-components/src/components/AppIntro/AppIntro.component.js delete mode 100644 libs/juno-ui-components/src/components/AppIntro/AppIntro.stories.js delete mode 100644 libs/juno-ui-components/src/components/AppIntro/AppIntro.test.js delete mode 100644 libs/juno-ui-components/src/components/AppIntro/index.js delete mode 100644 libs/juno-ui-components/src/components/AppShell/AppShell.component.js delete mode 100644 libs/juno-ui-components/src/components/AppShell/AppShell.stories.js delete mode 100644 libs/juno-ui-components/src/components/AppShell/AppShell.test.js delete mode 100644 libs/juno-ui-components/src/components/AppShell/index.js delete mode 100644 libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.component.js delete mode 100644 libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.stories.js delete mode 100644 libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.test.js delete mode 100644 libs/juno-ui-components/src/components/AppShellProvider/index.js delete mode 100644 libs/juno-ui-components/src/components/Badge/Badge.component.js delete mode 100644 libs/juno-ui-components/src/components/Badge/Badge.stories.js delete mode 100644 libs/juno-ui-components/src/components/Badge/Badge.test.js delete mode 100644 libs/juno-ui-components/src/components/Badge/index.js delete mode 100644 libs/juno-ui-components/src/components/Box/Box.component.js delete mode 100644 libs/juno-ui-components/src/components/Box/Box.stories.js delete mode 100644 libs/juno-ui-components/src/components/Box/Box.test.js delete mode 100644 libs/juno-ui-components/src/components/Box/index.js delete mode 100644 libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.component.js delete mode 100644 libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.stories.js delete mode 100644 libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.test.js delete mode 100644 libs/juno-ui-components/src/components/Breadcrumb/index.js delete mode 100644 libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.component.js delete mode 100644 libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.stories.js delete mode 100644 libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.test.js delete mode 100644 libs/juno-ui-components/src/components/BreadcrumbItem/index.js delete mode 100644 libs/juno-ui-components/src/components/Button/Button.component.js delete mode 100644 libs/juno-ui-components/src/components/Button/Button.stories.js delete mode 100644 libs/juno-ui-components/src/components/Button/Button.test.js delete mode 100644 libs/juno-ui-components/src/components/Button/button.scss delete mode 100644 libs/juno-ui-components/src/components/Button/index.js delete mode 100644 libs/juno-ui-components/src/components/ButtonRow/ButtonRow.component.js delete mode 100644 libs/juno-ui-components/src/components/ButtonRow/ButtonRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/ButtonRow/ButtonRow.test.js delete mode 100644 libs/juno-ui-components/src/components/ButtonRow/index.js delete mode 100644 libs/juno-ui-components/src/components/Checkbox/Checkbox.component.js delete mode 100644 libs/juno-ui-components/src/components/Checkbox/Checkbox.stories.js delete mode 100644 libs/juno-ui-components/src/components/Checkbox/Checkbox.test.js delete mode 100644 libs/juno-ui-components/src/components/Checkbox/index.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.component.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.stories.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.test.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxGroup/index.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.component.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.test.js delete mode 100644 libs/juno-ui-components/src/components/CheckboxRow/index.js delete mode 100644 libs/juno-ui-components/src/components/Code/Code.component.js delete mode 100644 libs/juno-ui-components/src/components/Code/Code.stories.js delete mode 100644 libs/juno-ui-components/src/components/Code/Code.test.js delete mode 100644 libs/juno-ui-components/src/components/Code/index.js delete mode 100644 libs/juno-ui-components/src/components/CodeBlock/CodeBlock.component.js delete mode 100644 libs/juno-ui-components/src/components/CodeBlock/CodeBlock.stories.js delete mode 100644 libs/juno-ui-components/src/components/CodeBlock/CodeBlock.test.js delete mode 100644 libs/juno-ui-components/src/components/CodeBlock/index.js delete mode 100644 libs/juno-ui-components/src/components/ComboBox/ComboBox.component.js delete mode 100644 libs/juno-ui-components/src/components/ComboBox/ComboBox.stories.js delete mode 100644 libs/juno-ui-components/src/components/ComboBox/ComboBox.test.js delete mode 100644 libs/juno-ui-components/src/components/ComboBox/index.js delete mode 100644 libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.component.js delete mode 100644 libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.stories.js delete mode 100644 libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.test.js delete mode 100644 libs/juno-ui-components/src/components/ComboBoxOption/index.js delete mode 100644 libs/juno-ui-components/src/components/Container/Container.component.js delete mode 100644 libs/juno-ui-components/src/components/Container/Container.stories.js delete mode 100644 libs/juno-ui-components/src/components/Container/Container.test.js delete mode 100644 libs/juno-ui-components/src/components/Container/index.js delete mode 100644 libs/juno-ui-components/src/components/ContentArea/ContentArea.component.js delete mode 100644 libs/juno-ui-components/src/components/ContentArea/ContentArea.stories.js delete mode 100644 libs/juno-ui-components/src/components/ContentArea/ContentArea.test.js delete mode 100644 libs/juno-ui-components/src/components/ContentArea/index.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.component.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.stories.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.test.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaToolbar/index.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.component.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.stories.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.test.js delete mode 100644 libs/juno-ui-components/src/components/ContentAreaWrapper/index.js delete mode 100644 libs/juno-ui-components/src/components/ContentContainer/ContentContainer.component.js delete mode 100644 libs/juno-ui-components/src/components/ContentContainer/ContentContainer.stories.js delete mode 100644 libs/juno-ui-components/src/components/ContentContainer/ContentContainer.test.js delete mode 100644 libs/juno-ui-components/src/components/ContentContainer/index.js delete mode 100644 libs/juno-ui-components/src/components/ContentHeading/ContentHeading.component.js delete mode 100644 libs/juno-ui-components/src/components/ContentHeading/ContentHeading.stories.js delete mode 100644 libs/juno-ui-components/src/components/ContentHeading/ContentHeading.test.js delete mode 100644 libs/juno-ui-components/src/components/ContentHeading/index.js delete mode 100644 libs/juno-ui-components/src/components/ContextMenu/ContextMenu.component.js delete mode 100644 libs/juno-ui-components/src/components/ContextMenu/ContextMenu.stories.js delete mode 100644 libs/juno-ui-components/src/components/ContextMenu/ContextMenu.test.js delete mode 100644 libs/juno-ui-components/src/components/ContextMenu/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGrid/DataGrid.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGrid/DataGrid.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGrid/DataGrid.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGrid/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCell/DataGridCell.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCell/DataGridCell.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCell/DataGridCell.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCell/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGridCheckboxCell/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGridFoot/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGridHeadCell/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGridRow/DataGridRow.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGridRow/DataGridRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGridRow/DataGridRow.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGridRow/index.js delete mode 100644 libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.component.js delete mode 100644 libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.test.js delete mode 100644 libs/juno-ui-components/src/components/DataGridToolbar/index.js delete mode 100644 libs/juno-ui-components/src/components/DataList/DataList.component.js delete mode 100644 libs/juno-ui-components/src/components/DataList/DataList.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataList/DataList.test.js delete mode 100644 libs/juno-ui-components/src/components/DataList/index.js delete mode 100644 libs/juno-ui-components/src/components/DataListCell/DataListCell.component.js delete mode 100644 libs/juno-ui-components/src/components/DataListCell/DataListCell.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataListCell/DataListCell.test.js delete mode 100644 libs/juno-ui-components/src/components/DataListCell/index.js delete mode 100644 libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.component.js delete mode 100644 libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.test.js delete mode 100644 libs/juno-ui-components/src/components/DataListCheckboxCell/index.js delete mode 100644 libs/juno-ui-components/src/components/DataListRow/DataListRow.component.js delete mode 100644 libs/juno-ui-components/src/components/DataListRow/DataListRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/DataListRow/DataListRow.test.js delete mode 100644 libs/juno-ui-components/src/components/DataListRow/index.js delete mode 100644 libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.component.js delete mode 100644 libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.stories.js delete mode 100644 libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.test.js delete mode 100644 libs/juno-ui-components/src/components/DateTimePicker/datetimepicker.scss delete mode 100644 libs/juno-ui-components/src/components/DateTimePicker/index.js delete mode 100644 libs/juno-ui-components/src/components/FilterInput/FilterInput.component.js delete mode 100644 libs/juno-ui-components/src/components/FilterInput/FilterInput.stories.js delete mode 100644 libs/juno-ui-components/src/components/FilterInput/FilterInput.test.js delete mode 100644 libs/juno-ui-components/src/components/FilterInput/index.js delete mode 100644 libs/juno-ui-components/src/components/FilterPill/FilterPill.component.js delete mode 100644 libs/juno-ui-components/src/components/FilterPill/FilterPill.stories.js delete mode 100644 libs/juno-ui-components/src/components/FilterPill/FilterPill.test.js delete mode 100644 libs/juno-ui-components/src/components/FilterPill/index.js delete mode 100644 libs/juno-ui-components/src/components/Filters/Filters.component.js delete mode 100644 libs/juno-ui-components/src/components/Filters/Filters.stories.js delete mode 100644 libs/juno-ui-components/src/components/Filters/Filters.test.js delete mode 100644 libs/juno-ui-components/src/components/Filters/index.js delete mode 100644 libs/juno-ui-components/src/components/Form/Form.component.js delete mode 100644 libs/juno-ui-components/src/components/Form/Form.stories.js delete mode 100644 libs/juno-ui-components/src/components/Form/Form.test.js delete mode 100644 libs/juno-ui-components/src/components/Form/index.js delete mode 100644 libs/juno-ui-components/src/components/FormHint/FormHint.component.js delete mode 100644 libs/juno-ui-components/src/components/FormHint/FormHint.stories.js delete mode 100644 libs/juno-ui-components/src/components/FormHint/FormHint.test.js delete mode 100644 libs/juno-ui-components/src/components/FormHint/index.js delete mode 100644 libs/juno-ui-components/src/components/FormRow/FormRow.component.js delete mode 100644 libs/juno-ui-components/src/components/FormRow/FormRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/FormRow/FormRow.test.js delete mode 100644 libs/juno-ui-components/src/components/FormRow/index.js delete mode 100644 libs/juno-ui-components/src/components/FormSection/FormSection.component.js delete mode 100644 libs/juno-ui-components/src/components/FormSection/FormSection.stories.js delete mode 100644 libs/juno-ui-components/src/components/FormSection/FormSection.test.js delete mode 100644 libs/juno-ui-components/src/components/FormSection/index.js delete mode 100644 libs/juno-ui-components/src/components/Grid/Grid.component.js delete mode 100644 libs/juno-ui-components/src/components/Grid/Grid.stories.js delete mode 100644 libs/juno-ui-components/src/components/Grid/Grid.test.js delete mode 100644 libs/juno-ui-components/src/components/Grid/index.js delete mode 100644 libs/juno-ui-components/src/components/GridColumn/GridColumn.component.js delete mode 100644 libs/juno-ui-components/src/components/GridColumn/GridColumn.stories.js delete mode 100644 libs/juno-ui-components/src/components/GridColumn/GridColumn.test.js delete mode 100644 libs/juno-ui-components/src/components/GridColumn/index.js delete mode 100644 libs/juno-ui-components/src/components/GridRow/GridRow.component.js delete mode 100644 libs/juno-ui-components/src/components/GridRow/GridRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/GridRow/GridRow.test.js delete mode 100644 libs/juno-ui-components/src/components/GridRow/index.js delete mode 100644 libs/juno-ui-components/src/components/Icon/Icon.component.js delete mode 100644 libs/juno-ui-components/src/components/Icon/Icon.stories.js delete mode 100644 libs/juno-ui-components/src/components/Icon/Icon.test.js delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/home_sharp.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/juno-danger.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/juno_severity_critical.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/juno_severity_high.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/juno_severity_low.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/juno_severity_medium.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/icons/place.svg delete mode 100644 libs/juno-ui-components/src/components/Icon/index.js delete mode 100644 libs/juno-ui-components/src/components/InputGroup/InputGroup.component.js delete mode 100644 libs/juno-ui-components/src/components/InputGroup/InputGroup.stories.js delete mode 100644 libs/juno-ui-components/src/components/InputGroup/InputGroup.test.js delete mode 100644 libs/juno-ui-components/src/components/InputGroup/index.js delete mode 100644 libs/juno-ui-components/src/components/InputGroup/input-group.scss delete mode 100644 libs/juno-ui-components/src/components/IntroBox/IntroBox.component.js delete mode 100644 libs/juno-ui-components/src/components/IntroBox/IntroBox.stories.js delete mode 100644 libs/juno-ui-components/src/components/IntroBox/IntroBox.test.js delete mode 100644 libs/juno-ui-components/src/components/IntroBox/index.js delete mode 100644 libs/juno-ui-components/src/components/JsonViewer/JsonViewer.component.js delete mode 100644 libs/juno-ui-components/src/components/JsonViewer/JsonViewer.stories.js delete mode 100644 libs/juno-ui-components/src/components/JsonViewer/JsonViewer.test.js delete mode 100644 libs/juno-ui-components/src/components/JsonViewer/index.js delete mode 100644 libs/juno-ui-components/src/components/JsonViewer/themes.js delete mode 100644 libs/juno-ui-components/src/components/Label/Label.component.js delete mode 100644 libs/juno-ui-components/src/components/Label/Label.stories.js delete mode 100644 libs/juno-ui-components/src/components/Label/Label.test.js delete mode 100644 libs/juno-ui-components/src/components/Label/index.js delete mode 100644 libs/juno-ui-components/src/components/LoadingIndicator/LoadingIndicator.component.js delete mode 100644 libs/juno-ui-components/src/components/LoadingIndicator/LoadingIndicator.stories.js delete mode 100644 libs/juno-ui-components/src/components/LoadingIndicator/LoadingIndicator.test.js delete mode 100644 libs/juno-ui-components/src/components/LoadingIndicator/index.js delete mode 100644 libs/juno-ui-components/src/components/LoadingIndicator/loading-indicator.svg delete mode 100644 libs/juno-ui-components/src/components/MainContainer/MainContainer.component.js delete mode 100644 libs/juno-ui-components/src/components/MainContainer/MainContainer.stories.js delete mode 100644 libs/juno-ui-components/src/components/MainContainer/MainContainer.test.js delete mode 100644 libs/juno-ui-components/src/components/MainContainer/index.js delete mode 100644 libs/juno-ui-components/src/components/MainContainerInner/MainContainerInner.component.js delete mode 100644 libs/juno-ui-components/src/components/MainContainerInner/MainContainerInner.test.js delete mode 100644 libs/juno-ui-components/src/components/MainContainerInner/index.js delete mode 100644 libs/juno-ui-components/src/components/MainTabs/MainTabs.component.js delete mode 100644 libs/juno-ui-components/src/components/MainTabs/MainTabs.stories.js delete mode 100644 libs/juno-ui-components/src/components/MainTabs/MainTabs.test.js delete mode 100644 libs/juno-ui-components/src/components/MainTabs/index.js delete mode 100644 libs/juno-ui-components/src/components/Menu/Menu.component.js delete mode 100644 libs/juno-ui-components/src/components/Menu/Menu.stories.js delete mode 100644 libs/juno-ui-components/src/components/Menu/Menu.test.js delete mode 100644 libs/juno-ui-components/src/components/Menu/index.js delete mode 100644 libs/juno-ui-components/src/components/MenuItem/MenuItem.component.js delete mode 100644 libs/juno-ui-components/src/components/MenuItem/MenuItem.stories.js delete mode 100644 libs/juno-ui-components/src/components/MenuItem/MenuItem.test.js delete mode 100644 libs/juno-ui-components/src/components/MenuItem/index.js delete mode 100644 libs/juno-ui-components/src/components/MenuSection/MenuSection.component.js delete mode 100644 libs/juno-ui-components/src/components/MenuSection/MenuSection.stories.js delete mode 100644 libs/juno-ui-components/src/components/MenuSection/MenuSection.test.js delete mode 100644 libs/juno-ui-components/src/components/MenuSection/index.js delete mode 100644 libs/juno-ui-components/src/components/Message/Message.component.js delete mode 100644 libs/juno-ui-components/src/components/Message/Message.stories.js delete mode 100644 libs/juno-ui-components/src/components/Message/Message.test.js delete mode 100644 libs/juno-ui-components/src/components/Message/index.js delete mode 100644 libs/juno-ui-components/src/components/Modal/Modal.component.js delete mode 100644 libs/juno-ui-components/src/components/Modal/Modal.stories.js delete mode 100644 libs/juno-ui-components/src/components/Modal/Modal.test.js delete mode 100644 libs/juno-ui-components/src/components/Modal/index.js delete mode 100644 libs/juno-ui-components/src/components/ModalFooter/ModalFooter.component.js delete mode 100644 libs/juno-ui-components/src/components/ModalFooter/ModalFooter.stories.js delete mode 100644 libs/juno-ui-components/src/components/ModalFooter/ModalFooter.test.js delete mode 100644 libs/juno-ui-components/src/components/ModalFooter/index.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelect/NativeSelect.component.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelect/NativeSelect.stories.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelect/NativeSelect.test.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelect/index.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOption/NativeSelectOption.component.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOption/NativeSelectOption.stories.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOption/SelectOption.test.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOption/index.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOptionGroup/NativeSelectOptionGroup.component.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOptionGroup/NativeSelectOptionGroup.stories.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOptionGroup/NativeSelectOptionGroup.test.js delete mode 100644 libs/juno-ui-components/src/components/NativeSelectOptionGroup/index.js delete mode 100644 libs/juno-ui-components/src/components/Navigation/Navigation.component.js delete mode 100644 libs/juno-ui-components/src/components/Navigation/Navigation.stories.js delete mode 100644 libs/juno-ui-components/src/components/Navigation/Navigation.test.js delete mode 100644 libs/juno-ui-components/src/components/Navigation/index.js delete mode 100644 libs/juno-ui-components/src/components/NavigationItem/NavigationItem.component.js delete mode 100644 libs/juno-ui-components/src/components/NavigationItem/NavigationItem.stories.js delete mode 100644 libs/juno-ui-components/src/components/NavigationItem/NavigationItem.test.js delete mode 100644 libs/juno-ui-components/src/components/NavigationItem/index.js delete mode 100644 libs/juno-ui-components/src/components/PageFooter/PageFooter.component.js delete mode 100644 libs/juno-ui-components/src/components/PageFooter/PageFooter.stories.js delete mode 100644 libs/juno-ui-components/src/components/PageFooter/PageFooter.test.js delete mode 100644 libs/juno-ui-components/src/components/PageFooter/index.js delete mode 100644 libs/juno-ui-components/src/components/PageHeader/PageHeader.component.js delete mode 100644 libs/juno-ui-components/src/components/PageHeader/PageHeader.stories.js delete mode 100644 libs/juno-ui-components/src/components/PageHeader/PageHeader.test.js delete mode 100644 libs/juno-ui-components/src/components/PageHeader/index.js delete mode 100644 libs/juno-ui-components/src/components/Pagination/Pagination.component.js delete mode 100644 libs/juno-ui-components/src/components/Pagination/Pagination.stories.js delete mode 100644 libs/juno-ui-components/src/components/Pagination/Pagination.test.js delete mode 100644 libs/juno-ui-components/src/components/Pagination/index.js delete mode 100644 libs/juno-ui-components/src/components/Panel/Panel.component.js delete mode 100644 libs/juno-ui-components/src/components/Panel/Panel.stories.js delete mode 100644 libs/juno-ui-components/src/components/Panel/Panel.test.js delete mode 100644 libs/juno-ui-components/src/components/Panel/index.js delete mode 100644 libs/juno-ui-components/src/components/PanelBody/PanelBody.component.js delete mode 100644 libs/juno-ui-components/src/components/PanelBody/PanelBody.stories.js delete mode 100644 libs/juno-ui-components/src/components/PanelBody/PanelBody.test.js delete mode 100644 libs/juno-ui-components/src/components/PanelBody/index.js delete mode 100644 libs/juno-ui-components/src/components/PanelFooter/PanelFooter.component.js delete mode 100644 libs/juno-ui-components/src/components/PanelFooter/PanelFooter.stories.js delete mode 100644 libs/juno-ui-components/src/components/PanelFooter/PanelFooter.test.js delete mode 100644 libs/juno-ui-components/src/components/PanelFooter/index.js delete mode 100644 libs/juno-ui-components/src/components/Pill/Pill.component.js delete mode 100644 libs/juno-ui-components/src/components/Pill/Pill.stories.js delete mode 100644 libs/juno-ui-components/src/components/Pill/Pill.test.js delete mode 100644 libs/juno-ui-components/src/components/Pill/index.js delete mode 100644 libs/juno-ui-components/src/components/PortalProvider/PortalProvider.component.js delete mode 100644 libs/juno-ui-components/src/components/PortalProvider/PortalProvider.stories.js delete mode 100644 libs/juno-ui-components/src/components/PortalProvider/PortalProvider.test.js delete mode 100644 libs/juno-ui-components/src/components/PortalProvider/index.js delete mode 100644 libs/juno-ui-components/src/components/Radio/Radio.component.js delete mode 100644 libs/juno-ui-components/src/components/Radio/Radio.stories.js delete mode 100644 libs/juno-ui-components/src/components/Radio/Radio.test.js delete mode 100644 libs/juno-ui-components/src/components/Radio/index.js delete mode 100644 libs/juno-ui-components/src/components/RadioGroup/RadioGroup.component.js delete mode 100644 libs/juno-ui-components/src/components/RadioGroup/RadioGroup.stories.js delete mode 100644 libs/juno-ui-components/src/components/RadioGroup/RadioGroup.test.js delete mode 100644 libs/juno-ui-components/src/components/RadioGroup/index.js delete mode 100644 libs/juno-ui-components/src/components/RadioRow/RadioRow.component.js delete mode 100644 libs/juno-ui-components/src/components/RadioRow/RadioRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/RadioRow/RadioRow.test.js delete mode 100644 libs/juno-ui-components/src/components/RadioRow/index.js delete mode 100644 libs/juno-ui-components/src/components/SearchInput/SearchInput.component.js delete mode 100644 libs/juno-ui-components/src/components/SearchInput/SearchInput.stories.js delete mode 100644 libs/juno-ui-components/src/components/SearchInput/SearchInput.test.js delete mode 100644 libs/juno-ui-components/src/components/SearchInput/index.js delete mode 100644 libs/juno-ui-components/src/components/SearchInput/searchinput.scss delete mode 100644 libs/juno-ui-components/src/components/Select/Select.component.js delete mode 100644 libs/juno-ui-components/src/components/Select/Select.stories.js delete mode 100644 libs/juno-ui-components/src/components/Select/Select.test.js delete mode 100644 libs/juno-ui-components/src/components/Select/index.js delete mode 100644 libs/juno-ui-components/src/components/Select/select.scss delete mode 100644 libs/juno-ui-components/src/components/SelectDivider/SelectDivider.component.js delete mode 100644 libs/juno-ui-components/src/components/SelectDivider/SelectDivider.stories.js delete mode 100644 libs/juno-ui-components/src/components/SelectDivider/SelectDivider.test.js delete mode 100644 libs/juno-ui-components/src/components/SelectDivider/index.js delete mode 100644 libs/juno-ui-components/src/components/SelectOption/SelectOption.component.js delete mode 100644 libs/juno-ui-components/src/components/SelectOption/SelectOption.stories.js delete mode 100644 libs/juno-ui-components/src/components/SelectOption/SelectOption.test.js delete mode 100644 libs/juno-ui-components/src/components/SelectOption/index.js delete mode 100644 libs/juno-ui-components/src/components/SelectRow/SelectRow.component.js delete mode 100644 libs/juno-ui-components/src/components/SelectRow/SelectRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/SelectRow/SelectRow.test.js delete mode 100644 libs/juno-ui-components/src/components/SelectRow/index.js delete mode 100644 libs/juno-ui-components/src/components/ShadowRoot/ShadowRoot.component.js delete mode 100644 libs/juno-ui-components/src/components/ShadowRoot/ShadowRoot.stories.js delete mode 100644 libs/juno-ui-components/src/components/ShadowRoot/index.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigation/SideNavigation.component.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigation/SideNavigation.stories.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigation/SideNavigation.test.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigation/index.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.component.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.stories.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigationItem/SideNavigationItem.test.js delete mode 100644 libs/juno-ui-components/src/components/SideNavigationItem/index.js delete mode 100644 libs/juno-ui-components/src/components/Spinner/Spinner.component.js delete mode 100644 libs/juno-ui-components/src/components/Spinner/Spinner.stories.js delete mode 100644 libs/juno-ui-components/src/components/Spinner/Spinner.test.js delete mode 100644 libs/juno-ui-components/src/components/Spinner/index.js delete mode 100644 libs/juno-ui-components/src/components/Stack/Stack.component.js delete mode 100644 libs/juno-ui-components/src/components/Stack/Stack.stories.js delete mode 100644 libs/juno-ui-components/src/components/Stack/Stack.test.js delete mode 100644 libs/juno-ui-components/src/components/Stack/index.js delete mode 100644 libs/juno-ui-components/src/components/StyleProvider/Fonts.js delete mode 100644 libs/juno-ui-components/src/components/StyleProvider/GlobalStyles.js delete mode 100644 libs/juno-ui-components/src/components/StyleProvider/StyleProvider.component.js delete mode 100644 libs/juno-ui-components/src/components/StyleProvider/StyleProvider.stories.js delete mode 100644 libs/juno-ui-components/src/components/StyleProvider/StyleProvider.test.js delete mode 100644 libs/juno-ui-components/src/components/StyleProvider/index.js delete mode 100644 libs/juno-ui-components/src/components/Switch/Switch.component.js delete mode 100644 libs/juno-ui-components/src/components/Switch/Switch.stories.js delete mode 100644 libs/juno-ui-components/src/components/Switch/Switch.test.js delete mode 100644 libs/juno-ui-components/src/components/Switch/index.js delete mode 100644 libs/juno-ui-components/src/components/SwitchRow/SwitchRow.component.js delete mode 100644 libs/juno-ui-components/src/components/SwitchRow/SwitchRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/SwitchRow/SwitchRow.test.js delete mode 100644 libs/juno-ui-components/src/components/SwitchRow/index.js delete mode 100644 libs/juno-ui-components/src/components/Tab/Tab.component.js delete mode 100644 libs/juno-ui-components/src/components/Tab/Tab.stories.js delete mode 100644 libs/juno-ui-components/src/components/Tab/Tab.test.js delete mode 100644 libs/juno-ui-components/src/components/Tab/index.js delete mode 100644 libs/juno-ui-components/src/components/TabList/TabList.component.js delete mode 100644 libs/juno-ui-components/src/components/TabList/TabList.stories.js delete mode 100644 libs/juno-ui-components/src/components/TabList/TabList.test.js delete mode 100644 libs/juno-ui-components/src/components/TabList/index.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigation/TabNavigation.component.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigation/TabNavigation.stories.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigation/TabNavigation.test.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigation/index.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.component.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.stories.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigationItem/TabNavigationItem.test.js delete mode 100644 libs/juno-ui-components/src/components/TabNavigationItem/index.js delete mode 100644 libs/juno-ui-components/src/components/TabPanel/TabPanel.component.js delete mode 100644 libs/juno-ui-components/src/components/TabPanel/TabPanel.stories.js delete mode 100644 libs/juno-ui-components/src/components/TabPanel/TabPanel.test.js delete mode 100644 libs/juno-ui-components/src/components/TabPanel/index.js delete mode 100644 libs/juno-ui-components/src/components/Tabs/Tabs.component.js delete mode 100644 libs/juno-ui-components/src/components/Tabs/Tabs.stories.js delete mode 100644 libs/juno-ui-components/src/components/Tabs/Tabs.test.js delete mode 100644 libs/juno-ui-components/src/components/Tabs/index.js delete mode 100644 libs/juno-ui-components/src/components/TextInput/TextInput.component.js delete mode 100644 libs/juno-ui-components/src/components/TextInput/TextInput.stories.js delete mode 100644 libs/juno-ui-components/src/components/TextInput/TextInput.test.js delete mode 100644 libs/juno-ui-components/src/components/TextInput/index.js delete mode 100644 libs/juno-ui-components/src/components/TextInput/textinput.scss delete mode 100644 libs/juno-ui-components/src/components/TextInputRow/TextInputRow.component.js delete mode 100644 libs/juno-ui-components/src/components/TextInputRow/TextInputRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/TextInputRow/TextInputRow.test.js delete mode 100644 libs/juno-ui-components/src/components/TextInputRow/index.js delete mode 100644 libs/juno-ui-components/src/components/Textarea/Textarea.component.js delete mode 100644 libs/juno-ui-components/src/components/Textarea/Textarea.stories.js delete mode 100644 libs/juno-ui-components/src/components/Textarea/Textarea.test.js delete mode 100644 libs/juno-ui-components/src/components/Textarea/index.js delete mode 100644 libs/juno-ui-components/src/components/TextareaRow/TextareaRow.component.js delete mode 100644 libs/juno-ui-components/src/components/TextareaRow/TextareaRow.stories.js delete mode 100644 libs/juno-ui-components/src/components/TextareaRow/TextareaRow.test.js delete mode 100644 libs/juno-ui-components/src/components/TextareaRow/index.js delete mode 100644 libs/juno-ui-components/src/components/Toast/Toast.component.js delete mode 100644 libs/juno-ui-components/src/components/Toast/Toast.stories.js delete mode 100644 libs/juno-ui-components/src/components/Toast/Toast.test.js delete mode 100644 libs/juno-ui-components/src/components/Toast/index.js delete mode 100644 libs/juno-ui-components/src/components/Tooltip/Tooltip.component.js delete mode 100644 libs/juno-ui-components/src/components/Tooltip/Tooltip.stories.js delete mode 100644 libs/juno-ui-components/src/components/Tooltip/Tooltip.test.js delete mode 100644 libs/juno-ui-components/src/components/Tooltip/index.js delete mode 100644 libs/juno-ui-components/src/components/Tooltip/useTooltip.js delete mode 100644 libs/juno-ui-components/src/components/TooltipContent/TooltipContent.component.js delete mode 100644 libs/juno-ui-components/src/components/TooltipContent/TooltipContent.stories.js delete mode 100644 libs/juno-ui-components/src/components/TooltipContent/TooltipContent.test.js delete mode 100644 libs/juno-ui-components/src/components/TooltipContent/index.js delete mode 100644 libs/juno-ui-components/src/components/TooltipTrigger/TooltipTrigger.component.js delete mode 100644 libs/juno-ui-components/src/components/TooltipTrigger/TooltipTrigger.stories.js delete mode 100644 libs/juno-ui-components/src/components/TooltipTrigger/TooltipTrigger.test.js delete mode 100644 libs/juno-ui-components/src/components/TooltipTrigger/index.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigation/TopNavigation.component.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigation/TopNavigation.stories.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigation/TopNavigation.test.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigation/index.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.component.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.stories.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigationItem/TopNavigationItem.test.js delete mode 100644 libs/juno-ui-components/src/components/TopNavigationItem/index.js delete mode 100644 libs/juno-ui-components/src/components/withDeprecationWarning/index.js delete mode 100644 libs/juno-ui-components/src/components/withDeprecationWarning/withDeprecationWarning.component.js delete mode 100644 libs/juno-ui-components/src/components/withDeprecationWarning/withDeprecationWarning.test.js delete mode 100644 libs/juno-ui-components/src/docs/ColorPalette/ColorCard.jsx delete mode 100644 libs/juno-ui-components/src/docs/ColorPalette/ColorPalette.jsx delete mode 100644 libs/juno-ui-components/src/docs/ColorPalette/JunoColorPalette.jsx delete mode 100644 libs/juno-ui-components/src/docs/ColorPalette/TailwindColors.js delete mode 100644 libs/juno-ui-components/src/docs/ColorPalette/TextColorCard.jsx delete mode 100644 libs/juno-ui-components/src/docs/ColorPalette/generateTailwindThemeClassesJson.js delete mode 100644 libs/juno-ui-components/src/docs/JunoComponentWrapper/JunoComponentWrapper.jsx delete mode 100644 libs/juno-ui-components/src/docs/colors.mdx delete mode 100644 libs/juno-ui-components/src/docs/img/Schwan.jpg delete mode 100644 libs/juno-ui-components/src/docs/navigation.mdx delete mode 100644 libs/juno-ui-components/src/docsHidden/examplePage.mdx delete mode 100644 libs/juno-ui-components/src/dummyComponents/DummyComponent.js delete mode 100644 libs/juno-ui-components/src/dummyComponents/DummyComponentList.js delete mode 100644 libs/juno-ui-components/src/global.scss delete mode 100644 libs/juno-ui-components/src/hooks/useTimeout.js delete mode 100644 libs/juno-ui-components/src/img/app_bg_example.svg delete mode 100644 libs/juno-ui-components/src/img/ccloud_shape.svg delete mode 100644 libs/juno-ui-components/src/img/icon_arrow_down.svg delete mode 100644 libs/juno-ui-components/src/img/sap_logo.svg delete mode 100644 libs/juno-ui-components/src/index.js delete mode 100644 libs/juno-ui-components/src/utils.js delete mode 100644 libs/juno-ui-components/tailwind.config.js delete mode 100644 libs/juno-ui-components/test/__mocks__/styleMock.js delete mode 100644 libs/juno-ui-components/test/__mocks__/svg.js delete mode 100644 libs/juno-ui-components/test/__mocks__/svgLib.js delete mode 100644 libs/oauth/LICENSE delete mode 100644 libs/oauth/README.md delete mode 100644 libs/oauth/__tests__/__utils__/globalsMock.js delete mode 100644 libs/oauth/__tests__/__utils__/idTokenMock.js delete mode 100644 libs/oauth/__tests__/__utils__/oidcConfigMock.js delete mode 100644 libs/oauth/__tests__/codeFlow.test.js delete mode 100644 libs/oauth/__tests__/implicitFlow.test.js delete mode 100644 libs/oauth/__tests__/mockedSession.test.js delete mode 100644 libs/oauth/__tests__/oidcConfig.test.js delete mode 100644 libs/oauth/__tests__/oidcSession.test.js delete mode 100644 libs/oauth/__tests__/tokenHelpers.test.js delete mode 100644 libs/oauth/esbuild.config.js delete mode 100644 libs/oauth/package.json delete mode 100644 libs/oauth/src/codeFlow.js delete mode 100644 libs/oauth/src/implicitFlow.js delete mode 100644 libs/oauth/src/index.js delete mode 100644 libs/oauth/src/mockedSession.js delete mode 100644 libs/oauth/src/oidcConfig.js delete mode 100644 libs/oauth/src/oidcSession.js delete mode 100644 libs/oauth/src/oidcState.js delete mode 100644 libs/oauth/src/tokenHelpers.js delete mode 100644 libs/oauth/src/utils.js delete mode 100644 libs/policy-engine/LICENSE delete mode 100644 libs/policy-engine/README.md delete mode 100644 libs/policy-engine/package.json delete mode 100644 libs/policy-engine/rollup.config.js delete mode 100644 libs/policy-engine/src/debugTrace.js delete mode 100644 libs/policy-engine/src/debugTrace.test.js delete mode 100644 libs/policy-engine/src/engine.js delete mode 100644 libs/policy-engine/src/engine.test.js delete mode 100644 libs/policy-engine/src/evaluator.js delete mode 100644 libs/policy-engine/src/evaluator.test.js delete mode 100644 libs/policy-engine/src/index.js delete mode 100644 libs/policy-engine/src/lexer.js delete mode 100644 libs/policy-engine/src/lexer.test.js delete mode 100644 libs/policy-engine/src/parser.js delete mode 100644 libs/policy-engine/src/parser.test.js diff --git a/libs/communicator/.gitignore b/libs/communicator/.gitignore deleted file mode 100644 index 378eac25d..000000000 --- a/libs/communicator/.gitignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/libs/communicator/LICENSE b/libs/communicator/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/libs/communicator/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/libs/communicator/README.md b/libs/communicator/README.md deleted file mode 100644 index 0df050baf..000000000 --- a/libs/communicator/README.md +++ /dev/null @@ -1,172 +0,0 @@ -# Communicator - -The "Communicator" library empowers seamless message exchange across various contexts, including multiple tabs on the same origin, by utilizing events. It offers a versatile range of communication options, including broadcast events for widespread interaction and one-to-one messaging capabilities. - -The library employs a set of methods, each complementing its counterpart: - -- **broadcast <-> watch**: These methods enable efficient communication between sender and receiver. When a sender employs the `broadcast` method to transmit an event, it must be monitored by a recipient using the `watch` method. This mechanism ensures that information is disseminated to the intended audience. - -- **get <-> onGet**: These methods are tailor-made for one-to-one communication, allowing precise exchanges between sender and recipient. Similar to broadcast and watch, if a sender utilizes the `get` method, the corresponding recipient should listen and respond using the `onGet` method. This approach ensures that data flows seamlessly in a directed manner. - -The Communicator library introduces the `crossWindow` option, which enhances its capabilities by enabling cross-tab communication. This feature facilitates communication between tabs, providing additional flexibility and expanding the library's utility. - -## Installation - -You can install the library in various ways: - -1. Via `package.json`: - - ```json - "dependencies": { - "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@latest/package.tgz" - } - ``` - -2. Via `import`: - - ```javascript - import { - broadcast, - watch, - get, - onGet, - } from "https://assets.juno.global.cloud.sap/libs/communicator@latest/build/index.js" - ``` - -3. Via `importmap`: - - ```html - - - - ``` - -## Usage - -To use the library, you can import the necessary functions: - -```javascript -import { broadcast, watch, get, onGet } from "communicator" -``` - -### `broadcast(name, data, options) ⇒ void` - -Use this function to send messages via BroadcastChannel across different contexts, such as multiple tabs on the same origin. - -- `name` (required): The message name. -- `data` (required, null is allowed): The message data. -- `options` (optional): An object with options - - `debug` (boolean, false by default): Set this to `true` for debugging purposes. - - `crossWindow` (boolean, false by default): Set this to `true` to enable cross-window communication. - -Example: - -```javascript -import { broadcast } from "communicator" - -broadcast( - "AUTH_TOKEN_UPDATED", - { token: "TOKEN" }, - { - debug: true, - crossWindow: false, - } -) -``` - -### `watch(name, callback, options) ⇒ function` - -Register a listener for a specific message. Messages are observed across contexts. - -- `name` (required): The message name. -- `callback` (required): A function that is executed when a message is sent for the registered name. It should have the following signature: `(data, { sourceWindowId, thisWindowId }) => void`. - -For the `options` object, you can mention that it includes the following properties: - -- `debug` (boolean, false by default): Set this to `true` for debugging purposes. - -Example: - -```javascript -import { watch } from "communicator" - -const unwatch = watch( - "AUTH_TOKEN_UPDATED", - (data, { sourceWindowId, thisWindowId }) => { - // Receive message data - console.log(data) - }, - { - debug: false, // Default - } -) - -// To unregister the listener, call unwatch() -unwatch() -``` - -### `get(name, callback, options) ⇒ function` - -Request a message by name and receive the data with the callback. - -- `name` (required): The message name. -- `callback` (required): A function that is executed upon receiving a response. -- `options` (optional): An object with the following properties: - - `getOptions` (object): An object that allows customization of the get request. - - `debug` (boolean, false by default): Set this to `true` for debugging purposes. - -Example: - -```javascript -import { get } from "communicator" - -const cancel = get( - "AUTH_TOKEN_UPDATED", - (data, { sourceWindowId, thisWindowId }) => { - // Receive message data - console.log(data) - }, - { - debug: false, // Default - } -) - -// To cancel the request, call cancel() -cancel() -``` - -### `onGet(name, callback, options) ⇒ function` - -Use this function to respond to get messages. - -- `name` (required): The message name. -- `callback` (required): A function that is executed when get events occur and returns the data. -- `options` (optional): An object with the following properties: - - - `debug` (boolean, false by default): Set this to `true` for debugging purposes. - -Example: - -```javascript -import { onGet } from "communicator" - -const unwatch = onGet( - "AUTH_TOKEN_UPDATED", - (getOptions, { sourceWindowId, thisWindowId }) => { - // Return data - return { name: "test" } - }, - { - debug: false, // Default - } -) - -// To unregister the response, call unwatch() -unwatch() -``` diff --git a/libs/communicator/dev/build.js b/libs/communicator/dev/build.js deleted file mode 100644 index ce05871b9..000000000 --- a/libs/communicator/dev/build.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// src/index.js -var uniqString = () => Math.random().toString(36).substring(2); -window.__junoCommunicatorTabId = window.__junoCommunicatorTabId || uniqString(); -window.__junoEventListeners = window.__junoEventListeners || { - broadcast: {}, - get: {} -}; -var log = (...params) => console.log("Communicator Debug:", ...params); -var warn = (...params) => console.warn("Communicator Warning:", ...params); -var error = (...params) => console.error("Communicator Error:", ...params); -var addListener = (type, event, listener) => { - if (!window.__junoEventListeners[type]?.[event]) { - window.__junoEventListeners[type][event] = []; - } - window.__junoEventListeners[type][event].push(listener); -}; -var removeListener = (type, event, listener) => { - if (!window.__junoEventListeners[type]?.[event]) - return; - window.__junoEventListeners[type][event] = window.__junoEventListeners[type][event].filter((l) => l !== listener); -}; -var listenerWrapper = (callback) => (data, options = {}) => { - return new Promise(async (resolve) => { - callback(data, options); - resolve(); - }); -}; -if (typeof BroadcastChannel === "undefined") { - console.log( - "BroadcastChannel is not supported in this browser. Use fake BroadcastChannel." - ); - window.BroadcastChannel = function() { - return { - postMessage: () => null, - onmessage: () => null, - close: () => null - }; - }; -} else { - console.log("BroadcastChannel is supported in this browser."); -} -var crossWindowEventBridge = new BroadcastChannel( - "__JUNO_CROSS_WINDOW_EVENT_BRIDGE__" -); -crossWindowEventBridge.onmessage = (e) => { - const { type, name, data, sourceWindowId } = e.data || {}; - if (type === "broadcast") { - window.__junoEventListeners["broadcast"]?.[name]?.forEach((listener) => { - try { - listener(data, { - crossWindow: true, - sourceWindowId, - thisWindowId: window.__junoCommunicatorTabId - }); - } catch (e2) { - warn(e2); - } - }); - } -}; -var broadcast = (name, data, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(broadcast) the message name must be given."); - if (data === void 0) - data = null; - const { debug, crossWindow: crossWindow2 = false, ...unknownOptions } = options || {}; - const unknownOptionsKeys = Object.keys(unknownOptions); - if (unknownOptionsKeys.length > 0) - warn(`(broadcast) unknown options: ${unknownOptionsKeys.join(", ")}`); - if (debug != void 0 && typeof debug !== "boolean") - warn("(broadcast) debug must be a boolean"); - if (typeof crossWindow2 !== "boolean") - warn("(broadcast) crossWindow must be a boolean"); - if (debug) { - console.log("===================1"); - log( - `broadcast ${crossWindow2 ? "cross-window" : "intra-window"} message ${name} with data `, - data - ); - console.log("===================2"); - } - window.__junoEventListeners["broadcast"]?.[name]?.forEach((listener) => { - try { - listener(data, { - sourceWindowId: window.__junoCommunicatorTabId, - thisWindowId: window.__junoCommunicatorTabId - }); - } catch (e) { - warn(e); - } - }); - if (crossWindow2) { - crossWindowEventBridge.postMessage({ - type: "broadcast", - name, - data, - sourceWindowId: window.__junoCommunicatorTabId - }); - } - } catch (e) { - error(e.message); - } -}; -var watch = (name, callback, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(watch) the message name must be given."); - if (typeof callback !== "function") - throw new Error("(watch) the callback parameter must be a function."); - const { debug, ...unknownOptions } = options || {}; - const unknownOptionsKeys = Object.keys(unknownOptions); - if (unknownOptionsKeys.length > 0) - warn(`(watch) unknown options: ${unknownOptionsKeys.join(", ")}`); - if (debug) - log( - `watch for ${crossWindow ? "cross-window" : "intra-window"} message ${name}` - ); - addListener("broadcast", name, listenerWrapper(callback)); - return () => removeListener("broadcast", name, listenerWrapper(callback)); - } catch (e) { - error(e.message); - } -}; -var get = (name, callback, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(get) the message name must be given."); - if (typeof callback !== "function") - throw new Error("(get) the callback parameter must be a function."); - const { debug, getOptions, ...unknownOptions } = options || {}; - const unknownOptionsKeys = Object.keys(unknownOptions); - if (unknownOptionsKeys.length > 0) - warn(`(get) unknown options: ${unknownOptionsKeys.join(", ")}`); - if (debug) - log(`get data for intra-window message ${name}`); - if (window.__junoEventListeners["get"]?.[name]?.length === 0) - return; - window.__junoEventListeners["get"][name]?.forEach((listener) => { - try { - const data = listener(options?.getOptions); - callback(data, { - sourceWindowId: window.__junoCommunicatorTabId, - thisWindowId: window.__junoCommunicatorTabId - }); - } catch (e) { - warn(e); - } - }); - } catch (e) { - error(e.message); - } -}; -var onGet = (name, callback, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(onGet) the message name must be given."); - if (typeof callback !== "function") - throw new Error("(onGet) the callback parameter must be a function."); - const { debug, crossWindow: crossWindow2 = false, ...unknownOptions } = options || {}; - const unknownOptionsKeys = Object.keys(unknownOptions); - if (unknownOptionsKeys.length > 0) - warn(`(onGet) unknown options: ${unknownOptionsKeys.join(", ")}`); - if (debug) - log(`send data for intra-window message ${name}`); - addListener("get", name, listenerWrapper(callback)); - return () => removeListener("get", name, listenerWrapper(callback)); - } catch (e) { - error(e.message); - } -}; -export { - broadcast, - get, - onGet, - watch -}; -//# sourceMappingURL=build.js.map diff --git a/libs/communicator/dev/build.js.map b/libs/communicator/dev/build.js.map deleted file mode 100644 index a537077c0..000000000 --- a/libs/communicator/dev/build.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/index.js"], - "sourcesContent": ["/**\n *\n * @returns epoch timestamp (count of seconds since 1970)\n */\nconst uniqString = () => Math.random().toString(36).substring(2)\n\n// create an uniq id for current window (current context)\n// this id is used to identify the current when intra-window communication is used\nwindow.__junoCommunicatorTabId = window.__junoCommunicatorTabId || uniqString()\n\nwindow.__junoEventListeners = window.__junoEventListeners || {\n broadcast: {},\n get: {},\n}\n\nconst log = (...params) => console.log(\"Communicator Debug:\", ...params)\nconst warn = (...params) => console.warn(\"Communicator Warning:\", ...params)\nconst error = (...params) => console.error(\"Communicator Error:\", ...params)\n\nconst addListener = (type, event, listener) => {\n if (!window.__junoEventListeners[type]?.[event]) {\n window.__junoEventListeners[type][event] = []\n }\n window.__junoEventListeners[type][event].push(listener)\n}\n\nconst removeListener = (type, event, listener) => {\n if (!window.__junoEventListeners[type]?.[event]) return\n window.__junoEventListeners[type][event] = window.__junoEventListeners[type][\n event\n ].filter((l) => l !== listener)\n}\n\nconst listenerWrapper =\n (callback) =>\n (data, options = {}) => {\n // Create a promise that will be resolved when the listener is executed\n return new Promise(async (resolve) => {\n callback(data, options)\n resolve()\n })\n }\n\nif (typeof BroadcastChannel === \"undefined\") {\n // BroadcastChannel is not available\n console.log(\n \"BroadcastChannel is not supported in this browser. Use fake BroadcastChannel.\"\n )\n window.BroadcastChannel = function () {\n return {\n postMessage: () => null,\n onmessage: () => null,\n close: () => null,\n }\n }\n} else {\n // BroadcastChannel is available\n console.log(\"BroadcastChannel is supported in this browser.\")\n}\n\nconst crossWindowEventBridge = new BroadcastChannel(\n \"__JUNO_CROSS_WINDOW_EVENT_BRIDGE__\"\n)\n\ncrossWindowEventBridge.onmessage = (e) => {\n const { type, name, data, sourceWindowId } = e.data || {}\n\n if (type === \"broadcast\") {\n window.__junoEventListeners[\"broadcast\"]?.[name]?.forEach((listener) => {\n try {\n listener(data, {\n crossWindow: true,\n sourceWindowId,\n thisWindowId: window.__junoCommunicatorTabId,\n })\n } catch (e) {\n warn(e)\n }\n })\n }\n}\n\n/**\n * Send messages via BroadcastChannel across contexts (e.g. several tabs on\n * the same origin). The last message is stored by default. However, it\n * is possible to influence the storage period using the expire option.\n * @param {string} name\n * @param {any} data\n * @param {object} options (optional) allowed options are debug:undefined|boolean and expires:undefined|number\n * @returns void\n */\nconst broadcast = (name, data, options = {}) => {\n try {\n if (typeof name !== \"string\")\n throw new Error(\"(broadcast) the message name must be given.\")\n if (data === undefined) data = null\n\n const { debug, crossWindow = false, ...unknownOptions } = options || {}\n const unknownOptionsKeys = Object.keys(unknownOptions)\n if (unknownOptionsKeys.length > 0)\n warn(`(broadcast) unknown options: ${unknownOptionsKeys.join(\", \")}`)\n if (debug != undefined && typeof debug !== \"boolean\")\n warn(\"(broadcast) debug must be a boolean\")\n if (typeof crossWindow !== \"boolean\")\n warn(\"(broadcast) crossWindow must be a boolean\")\n\n if (debug) {\n console.log(\"===================1\")\n log(\n `broadcast ${\n crossWindow ? \"cross-window\" : \"intra-window\"\n } message ${name} with data `,\n data\n )\n console.log(\"===================2\")\n }\n\n window.__junoEventListeners[\"broadcast\"]?.[name]?.forEach((listener) => {\n try {\n listener(data, {\n sourceWindowId: window.__junoCommunicatorTabId,\n thisWindowId: window.__junoCommunicatorTabId,\n })\n } catch (e) {\n warn(e)\n }\n })\n\n if (crossWindow) {\n crossWindowEventBridge.postMessage({\n type: \"broadcast\",\n name,\n data,\n sourceWindowId: window.__junoCommunicatorTabId,\n })\n }\n } catch (e) {\n error(e.message)\n }\n}\n\n/**\n * Register a listener for a specific message. Messages are observed\n * across contexts (e.g. several tabs on the same origin).\n * If a current saved message already exists for the name,\n * then the listener is executed immediately with this message.\n * The expires option set by the \"send\" method has an effect here.\n * In addition, the age of the listened messages can be determined\n * with the youngerThan option.\n * @param {string} name\n * @param {function} callback:(data) => void\n * @param {object} options\n * @returns {function} unregister:()=>void, a function to stop listening\n */\nconst watch = (name, callback, options = {}) => {\n try {\n if (typeof name !== \"string\")\n throw new Error(\"(watch) the message name must be given.\")\n if (typeof callback !== \"function\")\n throw new Error(\"(watch) the callback parameter must be a function.\")\n\n const { debug, ...unknownOptions } = options || {}\n const unknownOptionsKeys = Object.keys(unknownOptions)\n if (unknownOptionsKeys.length > 0)\n warn(`(watch) unknown options: ${unknownOptionsKeys.join(\", \")}`)\n\n if (debug)\n log(\n `watch for ${\n crossWindow ? \"cross-window\" : \"intra-window\"\n } message ${name}`\n )\n\n addListener(\"broadcast\", name, listenerWrapper(callback))\n\n return () => removeListener(\"broadcast\", name, listenerWrapper(callback))\n } catch (e) {\n error(e.message)\n }\n}\n\n/**\n * This function implements a 1:1 communication\n * @param {string} name\n * @param {function} callback\n * @param {object} options\n * @returns cancel function\n */\nconst get = (name, callback, options = {}) => {\n try {\n if (typeof name !== \"string\")\n throw new Error(\"(get) the message name must be given.\")\n if (typeof callback !== \"function\")\n throw new Error(\"(get) the callback parameter must be a function.\")\n const { debug, getOptions, ...unknownOptions } = options || {}\n const unknownOptionsKeys = Object.keys(unknownOptions)\n if (unknownOptionsKeys.length > 0)\n warn(`(get) unknown options: ${unknownOptionsKeys.join(\", \")}`)\n if (debug) log(`get data for intra-window message ${name}`)\n\n if (window.__junoEventListeners[\"get\"]?.[name]?.length === 0) return\n\n // console.log(\"==============get\", window.__junoEventListeners[\"get\"]?.[name])\n window.__junoEventListeners[\"get\"][name]?.forEach((listener) => {\n try {\n const data = listener(options?.getOptions)\n callback(data, {\n sourceWindowId: window.__junoCommunicatorTabId,\n thisWindowId: window.__junoCommunicatorTabId,\n })\n } catch (e) {\n warn(e)\n }\n })\n } catch (e) {\n error(e.message)\n }\n}\n\n/**\n * Listen to get messages\n * @param {string} name\n * @param {function} callback\n * @param {object} options\n * @returns cancel function\n */\nconst onGet = (name, callback, options = {}) => {\n try {\n if (typeof name !== \"string\")\n throw new Error(\"(onGet) the message name must be given.\")\n if (typeof callback !== \"function\")\n throw new Error(\"(onGet) the callback parameter must be a function.\")\n const { debug, crossWindow = false, ...unknownOptions } = options || {}\n const unknownOptionsKeys = Object.keys(unknownOptions)\n if (unknownOptionsKeys.length > 0)\n warn(`(onGet) unknown options: ${unknownOptionsKeys.join(\", \")}`)\n if (debug) log(`send data for intra-window message ${name}`)\n\n addListener(\"get\", name, listenerWrapper(callback))\n\n return () => removeListener(\"get\", name, listenerWrapper(callback))\n } catch (e) {\n error(e.message)\n }\n}\n\nexport { broadcast, watch, get, onGet }\n"], - "mappings": ";AAIA,IAAM,aAAa,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;AAI/D,OAAO,0BAA0B,OAAO,2BAA2B,WAAW;AAE9E,OAAO,uBAAuB,OAAO,wBAAwB;AAAA,EAC3D,WAAW,CAAC;AAAA,EACZ,KAAK,CAAC;AACR;AAEA,IAAM,MAAM,IAAI,WAAW,QAAQ,IAAI,uBAAuB,GAAG,MAAM;AACvE,IAAM,OAAO,IAAI,WAAW,QAAQ,KAAK,yBAAyB,GAAG,MAAM;AAC3E,IAAM,QAAQ,IAAI,WAAW,QAAQ,MAAM,uBAAuB,GAAG,MAAM;AAE3E,IAAM,cAAc,CAAC,MAAM,OAAO,aAAa;AAC7C,MAAI,CAAC,OAAO,qBAAqB,IAAI,IAAI,KAAK,GAAG;AAC/C,WAAO,qBAAqB,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,EAC9C;AACA,SAAO,qBAAqB,IAAI,EAAE,KAAK,EAAE,KAAK,QAAQ;AACxD;AAEA,IAAM,iBAAiB,CAAC,MAAM,OAAO,aAAa;AAChD,MAAI,CAAC,OAAO,qBAAqB,IAAI,IAAI,KAAK;AAAG;AACjD,SAAO,qBAAqB,IAAI,EAAE,KAAK,IAAI,OAAO,qBAAqB,IAAI,EACzE,KACF,EAAE,OAAO,CAAC,MAAM,MAAM,QAAQ;AAChC;AAEA,IAAM,kBACJ,CAAC,aACD,CAAC,MAAM,UAAU,CAAC,MAAM;AAEtB,SAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,aAAS,MAAM,OAAO;AACtB,YAAQ;AAAA,EACV,CAAC;AACH;AAEF,IAAI,OAAO,qBAAqB,aAAa;AAE3C,UAAQ;AAAA,IACN;AAAA,EACF;AACA,SAAO,mBAAmB,WAAY;AACpC,WAAO;AAAA,MACL,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,OAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF,OAAO;AAEL,UAAQ,IAAI,gDAAgD;AAC9D;AAEA,IAAM,yBAAyB,IAAI;AAAA,EACjC;AACF;AAEA,uBAAuB,YAAY,CAAC,MAAM;AACxC,QAAM,EAAE,MAAM,MAAM,MAAM,eAAe,IAAI,EAAE,QAAQ,CAAC;AAExD,MAAI,SAAS,aAAa;AACxB,WAAO,qBAAqB,WAAW,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa;AACtE,UAAI;AACF,iBAAS,MAAM;AAAA,UACb,aAAa;AAAA,UACb;AAAA,UACA,cAAc,OAAO;AAAA,QACvB,CAAC;AAAA,MACH,SAASA,IAAP;AACA,aAAKA,EAAC;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAWA,IAAM,YAAY,CAAC,MAAM,MAAM,UAAU,CAAC,MAAM;AAC9C,MAAI;AACF,QAAI,OAAO,SAAS;AAClB,YAAM,IAAI,MAAM,6CAA6C;AAC/D,QAAI,SAAS;AAAW,aAAO;AAE/B,UAAM,EAAE,OAAO,aAAAC,eAAc,OAAO,GAAG,eAAe,IAAI,WAAW,CAAC;AACtE,UAAM,qBAAqB,OAAO,KAAK,cAAc;AACrD,QAAI,mBAAmB,SAAS;AAC9B,WAAK,gCAAgC,mBAAmB,KAAK,IAAI,GAAG;AACtE,QAAI,SAAS,UAAa,OAAO,UAAU;AACzC,WAAK,qCAAqC;AAC5C,QAAI,OAAOA,iBAAgB;AACzB,WAAK,2CAA2C;AAElD,QAAI,OAAO;AACT,cAAQ,IAAI,sBAAsB;AAClC;AAAA,QACE,aACEA,eAAc,iBAAiB,0BACrB;AAAA,QACZ;AAAA,MACF;AACA,cAAQ,IAAI,sBAAsB;AAAA,IACpC;AAEA,WAAO,qBAAqB,WAAW,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa;AACtE,UAAI;AACF,iBAAS,MAAM;AAAA,UACb,gBAAgB,OAAO;AAAA,UACvB,cAAc,OAAO;AAAA,QACvB,CAAC;AAAA,MACH,SAAS,GAAP;AACA,aAAK,CAAC;AAAA,MACR;AAAA,IACF,CAAC;AAED,QAAIA,cAAa;AACf,6BAAuB,YAAY;AAAA,QACjC,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,gBAAgB,OAAO;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF,SAAS,GAAP;AACA,UAAM,EAAE,OAAO;AAAA,EACjB;AACF;AAeA,IAAM,QAAQ,CAAC,MAAM,UAAU,UAAU,CAAC,MAAM;AAC9C,MAAI;AACF,QAAI,OAAO,SAAS;AAClB,YAAM,IAAI,MAAM,yCAAyC;AAC3D,QAAI,OAAO,aAAa;AACtB,YAAM,IAAI,MAAM,oDAAoD;AAEtE,UAAM,EAAE,OAAO,GAAG,eAAe,IAAI,WAAW,CAAC;AACjD,UAAM,qBAAqB,OAAO,KAAK,cAAc;AACrD,QAAI,mBAAmB,SAAS;AAC9B,WAAK,4BAA4B,mBAAmB,KAAK,IAAI,GAAG;AAElE,QAAI;AACF;AAAA,QACE,aACE,cAAc,iBAAiB,0BACrB;AAAA,MACd;AAEF,gBAAY,aAAa,MAAM,gBAAgB,QAAQ,CAAC;AAExD,WAAO,MAAM,eAAe,aAAa,MAAM,gBAAgB,QAAQ,CAAC;AAAA,EAC1E,SAAS,GAAP;AACA,UAAM,EAAE,OAAO;AAAA,EACjB;AACF;AASA,IAAM,MAAM,CAAC,MAAM,UAAU,UAAU,CAAC,MAAM;AAC5C,MAAI;AACF,QAAI,OAAO,SAAS;AAClB,YAAM,IAAI,MAAM,uCAAuC;AACzD,QAAI,OAAO,aAAa;AACtB,YAAM,IAAI,MAAM,kDAAkD;AACpE,UAAM,EAAE,OAAO,YAAY,GAAG,eAAe,IAAI,WAAW,CAAC;AAC7D,UAAM,qBAAqB,OAAO,KAAK,cAAc;AACrD,QAAI,mBAAmB,SAAS;AAC9B,WAAK,0BAA0B,mBAAmB,KAAK,IAAI,GAAG;AAChE,QAAI;AAAO,UAAI,qCAAqC,MAAM;AAE1D,QAAI,OAAO,qBAAqB,KAAK,IAAI,IAAI,GAAG,WAAW;AAAG;AAG9D,WAAO,qBAAqB,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,aAAa;AAC9D,UAAI;AACF,cAAM,OAAO,SAAS,SAAS,UAAU;AACzC,iBAAS,MAAM;AAAA,UACb,gBAAgB,OAAO;AAAA,UACvB,cAAc,OAAO;AAAA,QACvB,CAAC;AAAA,MACH,SAAS,GAAP;AACA,aAAK,CAAC;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH,SAAS,GAAP;AACA,UAAM,EAAE,OAAO;AAAA,EACjB;AACF;AASA,IAAM,QAAQ,CAAC,MAAM,UAAU,UAAU,CAAC,MAAM;AAC9C,MAAI;AACF,QAAI,OAAO,SAAS;AAClB,YAAM,IAAI,MAAM,yCAAyC;AAC3D,QAAI,OAAO,aAAa;AACtB,YAAM,IAAI,MAAM,oDAAoD;AACtE,UAAM,EAAE,OAAO,aAAAA,eAAc,OAAO,GAAG,eAAe,IAAI,WAAW,CAAC;AACtE,UAAM,qBAAqB,OAAO,KAAK,cAAc;AACrD,QAAI,mBAAmB,SAAS;AAC9B,WAAK,4BAA4B,mBAAmB,KAAK,IAAI,GAAG;AAClE,QAAI;AAAO,UAAI,sCAAsC,MAAM;AAE3D,gBAAY,OAAO,MAAM,gBAAgB,QAAQ,CAAC;AAElD,WAAO,MAAM,eAAe,OAAO,MAAM,gBAAgB,QAAQ,CAAC;AAAA,EACpE,SAAS,GAAP;AACA,UAAM,EAAE,OAAO;AAAA,EACjB;AACF;", - "names": ["e", "crossWindow"] -} diff --git a/libs/communicator/dev/index.html b/libs/communicator/dev/index.html deleted file mode 100644 index e21248f37..000000000 --- a/libs/communicator/dev/index.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - Communicator Dev - - - - - -

    Communicator Dev Test

    -
    - - diff --git a/libs/communicator/dev/index.js b/libs/communicator/dev/index.js deleted file mode 100644 index 1f02658e6..000000000 --- a/libs/communicator/dev/index.js +++ /dev/null @@ -1,170 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const buttonCss = - "padding: 10px; margin: 0 10px; background-color: rgb(67 75 95); border: 1px solid rgb(67 75 95); color: white; border-radius: 5px; cursor: pointer" -const displayCss = "margin: 20px 10px 0 10px;" - -import("./build.js").then(({ broadcast, watch, get, onGet }) => { - console.log("================READY") - - self.broadcast = broadcast - self.watch = watch - self.get = get - self.onGet = onGet - - const root = document.getElementById("root") - - Tester(root) -}) - -const logTemplate = ({ source, target, text, data }) => ` -
    -
    - Date: ${new Date().toLocaleString()} - Source tab: ${source} - Target tab: ${target} -
    -

    ${text}

    -
    - ${JSON.stringify(data, null, 2)} -
    -
    ` - -const Tester = (root) => { - const buttonGet = document.createElement("button") - const buttonBroadcast = document.createElement("button") - const buttonGetIntraWindow = document.createElement("button") - const buttonBroadcastIntraWindow = document.createElement("button") - - buttonGet.style.cssText = buttonCss - buttonBroadcast.style.cssText = buttonCss - buttonGetIntraWindow.style.cssText = buttonCss - buttonBroadcastIntraWindow.style.cssText = buttonCss - - const display = document.createElement("div") - display.style.cssText = displayCss - const header = `
    Log
    ` - display.innerHTML = header - const content = document.createElement("div") - content.id = "content" - display.appendChild(content) - - const log = (source, target, text, data) => { - content.innerHTML = `${content.innerHTML}
    ${logTemplate({ - source, - target, - text, - data, - })}` - } - - watch( - "TEST_BROADCAST", - (data, { sourceWindowId, thisWindowId }) => { - log( - sourceWindowId, - thisWindowId, - `${thisWindowId} (watch): receive data for event TEST_BROADCAST from ${sourceWindowId}`, - data - ) - }, - { crossWindow: true } - ) - - watch( - "TEST_BROADCAST_INTRA_WINDOW", - (data, { sourceWindowId, thisWindowId }) => { - log( - sourceWindowId, - thisWindowId, - `${thisWindowId} (watch): receive data for event TEST_BROADCAST_INTRA_WINDOW from ${sourceWindowId}`, - data - ) - } - ) - - onGet( - "TEST_GET", - (getOptions, { sourceWindowId, thisWindowId }) => { - log( - sourceWindowId, - thisWindowId, - `${thisWindowId} (onGet): send data for event TEST_GET to ${sourceWindowId}`, - getOptions - ) - return `data for event TEST_GET` - }, - { crossWindow: true, debug: false } - ) - - onGet( - "TEST_GET_INTRA_WINDOW", - (getOptions, { sourceWindowId, thisWindowId }) => { - log( - sourceWindowId, - thisWindowId, - `${thisWindowId} (onGet): send data for event TEST_GET_INTRA_WINDOW to ${sourceWindowId}`, - getOptions - ) - return `data for event TEST_GET_INTRA_WINDOW` - } - ) - - buttonGet.innerHTML = "GET (CROSS WINDOW)" - buttonGet.addEventListener("click", () => { - log("", "", `Requesting data for event TEST_GET`, "") - get( - "TEST_GET", - (data, { sourceWindowId, thisWindowId }) => - log( - sourceWindowId, - thisWindowId, - `${thisWindowId} (get): receive data for event TEST_GET from ${sourceWindowId}`, - data - ), - { - debug: false, - crossWindow: true, - } - ) - }) - - buttonBroadcast.innerHTML = "BROADCAST (CROSS WINDOW)" - buttonBroadcast.addEventListener("click", () => { - log("", "", `Broadcasting data for event TEST_BROADCAST`, "") - broadcast("TEST_BROADCAST", `TEST_BROADCAST_DATA`, { - debug: false, - crossWindow: true, - }) - }) - - buttonGetIntraWindow.innerHTML = "GET (INTRA WINDOW)" - buttonGetIntraWindow.addEventListener("click", () => { - log("", "", `Requesting data for event TEST_GET_INTRA_WINDOW`, "") - get("TEST_GET_INTRA_WINDOW", (data, { sourceWindowId, thisWindowId }) => - log( - sourceWindowId, - thisWindowId, - `${thisWindowId} (get): receive data for event TEST_GET_INTRA_WINDOW from ${sourceWindowId}`, - data - ) - ) - }) - - buttonBroadcastIntraWindow.innerHTML = "BROADCAST (INTRA WINDOW)" - buttonBroadcastIntraWindow.addEventListener("click", () => { - log("", "", `Broadcasting data for event TEST_BROADCAST_INTRA_WINDOW`, "") - broadcast("TEST_BROADCAST_INTRA_WINDOW", `TEST_BROADCAST_INTRA_WINDOW_DATA`) - }) - - root.appendChild(buttonGet) - root.appendChild(buttonBroadcast) - root.appendChild(buttonGetIntraWindow) - root.appendChild(buttonBroadcastIntraWindow) - - root.appendChild(display) - //console.log(root) -} diff --git a/libs/communicator/esbuild.config.js b/libs/communicator/esbuild.config.js deleted file mode 100644 index b2bd17d78..000000000 --- a/libs/communicator/esbuild.config.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const esbuild = require("esbuild") -const pkg = require("./package.json") - -if (!/.+\/.+\.js/.test(pkg.module)) - throw new Error( - "module value is incorrect, use DIR/FILE.js like build/index.js" - ) - -const isProduction = process.env.NODE_ENV === "production" -const IGNORE_EXTERNALS = process.env.IGNORE_EXTERNALS === "true" -const DEV_FOLDER = "dev" -const outfile = isProduction ? pkg.module : `${DEV_FOLDER}/build.js` -const args = process.argv.slice(2) -const watch = args.indexOf("--watch") >= 0 - -esbuild - .context({ - entryPoints: [pkg.source], - outfile, - bundle: true, - minify: isProduction, - target: ["es2020"], - format: "esm", - sourcemap: true, - external: - isProduction && !IGNORE_EXTERNALS - ? Object.keys(pkg.peerDependencies || {}) - : [], - }) - .then(async (ctx) => { - if (watch) { - ctx.watch() - console.log("watching...") - ctx - .serve({ - host: "0.0.0.0", - port: parseInt(process.env.APP_PORT), - servedir: DEV_FOLDER, - }) - .then(({ host, port }) => console.log("serve on", `${host}:${port}`)) - } else { - await ctx.rebuild() - await ctx.dispose() - } - }) - .catch((error) => console.error(error)) diff --git a/libs/communicator/package.json b/libs/communicator/package.json deleted file mode 100644 index 672dbfef3..000000000 --- a/libs/communicator/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "communicator", - "version": "2.2.6", - "description": "Send and receive across tabs", - "author": "UI-Team", - "contributors": [ - "Andreas Pfau" - ], - "repository": "https://github.com/sapcc/juno/tree/main/libs/communicator", - "license": "Apache-2.0", - "source": "src/index.js", - "main": "build/index.js", - "module": "build/index.js", - "scripts": { - "dev": "NODE_ENV=development node ./esbuild.config.js --watch", - "build": "NODE_ENV=production node ./esbuild.config.js", - "test": "jest" - }, - "devDependencies": { - "@babel/preset-env": "^7.20.2", - "babel-jest": "^29.4.2", - "esbuild": "^0.17.6", - "jest": "^29.4.2" - }, - "babel": { - "presets": [ - "@babel/preset-env" - ] - }, - "jest": { - "testEnvironment": "jsdom", - "verbose": true, - "transform": { - "\\.js$": "babel-jest" - }, - "watchPathIgnorePatterns": [ - "/dev/", - "/build/" - ] - } -} diff --git a/libs/communicator/src/index.js b/libs/communicator/src/index.js deleted file mode 100644 index 2ab3fec20..000000000 --- a/libs/communicator/src/index.js +++ /dev/null @@ -1,290 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const CHANNEL_PREFIX = "JUNO_COMMUNICATOR#" -/** - * - * @returns epoch timestamp (count of seconds since 1970) - */ -const uniqString = () => Math.random().toString(36).substring(2) - -// create an uniq id for current window (current context) -// this id is used to identify the current when intra-window communication is used -window.__junoCommunicatorTabId = window.__junoCommunicatorTabId || uniqString() - -window.__junoEventListeners = window.__junoEventListeners || { - broadcast: {}, - get: {}, -} - -const log = (...params) => console.log("Communicator Debug:", ...params) -const warn = (...params) => console.warn("Communicator Warning:", ...params) -const error = (...params) => console.error("Communicator Error:", ...params) - -const addListener = (type, event, listener) => { - if (!window.__junoEventListeners[type]?.[event]) { - window.__junoEventListeners[type][event] = [] - } - window.__junoEventListeners[type][event].push(listener) -} - -const removeListener = (type, event, listener) => { - if (!window.__junoEventListeners[type]?.[event]) return - window.__junoEventListeners[type][event] = window.__junoEventListeners[type][ - event - ].filter((l) => l !== listener) -} - -// encapsulate the listener in a wrapper that returns a promise -// we don't want to wait for the listener to be executed -const listenerWrapper = - (callback) => - (data, options = {}) => { - // Create a promise that will be resolved when the listener is executed - return new Promise(async (resolve) => { - const result = callback(data, options) - resolve(result) - }) - } - -if (typeof BroadcastChannel === "undefined") { - // BroadcastChannel is not available - console.log( - "BroadcastChannel is not supported in this browser. Use fake BroadcastChannel." - ) - window.BroadcastChannel = function () { - return { - postMessage: () => null, - onmessage: () => null, - close: () => null, - } - } -} else { - // BroadcastChannel is available - console.log("BroadcastChannel is supported in this browser.") -} - -const crossWindowEventBridge = new BroadcastChannel( - "__JUNO_CROSS_WINDOW_EVENT_BRIDGE__" -) - -crossWindowEventBridge.onmessage = (e) => { - const { type, name, data, sourceWindowId } = e.data || {} - - if (type === "broadcast") { - window.__junoEventListeners["broadcast"]?.[name]?.forEach((listener) => { - try { - listener(data, { - crossWindow: true, - sourceWindowId, - thisWindowId: window.__junoCommunicatorTabId, - }) - } catch (e) { - warn(e) - } - }) - } -} - -/** - * Send messages via BroadcastChannel across contexts (e.g. several tabs on - * the same origin). The last message is stored by default. However, it - * is possible to influence the storage period using the expire option. - * @param {string} name - * @param {any} data - * @param {object} options (optional) allowed options are debug:undefined|boolean and expires:undefined|number - * @returns void - */ -const broadcast = (name, data, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(broadcast) the message name must be given.") - if (data === undefined) data = null - - const { - debug, - crossWindow = false, - consumerID, - ...unknownOptions - } = options || {} - const unknownOptionsKeys = Object.keys(unknownOptions) - if (unknownOptionsKeys.length > 0) - warn(`(broadcast) unknown options: ${unknownOptionsKeys.join(", ")}`) - if (debug != undefined && typeof debug !== "boolean") - warn("(broadcast) debug must be a boolean") - if (typeof crossWindow !== "boolean") - warn("(broadcast) crossWindow must be a boolean") - - // backward compatibility - name = CHANNEL_PREFIX + name - - if (debug) { - log( - `${consumerID ? `(${consumerID})` : ""} broadcast ${ - crossWindow ? "cross-window" : "intra-window" - } message ${name} with data `, - data - ) - // log(`${consumerID ? `(${consumerID})` : ""} broadcast EVENT: ${name}`) - } - - window.__junoEventListeners["broadcast"]?.[name]?.forEach((listener) => { - try { - listener(data, { - sourceWindowId: window.__junoCommunicatorTabId, - thisWindowId: window.__junoCommunicatorTabId, - }) - } catch (e) { - warn(e) - } - }) - - if (crossWindow) { - crossWindowEventBridge.postMessage({ - type: "broadcast", - name, - data, - sourceWindowId: window.__junoCommunicatorTabId, - }) - } - } catch (e) { - error(e.message) - } -} - -/** - * Register a listener for a specific message. Messages are observed - * across contexts (e.g. several tabs on the same origin). - * If a current saved message already exists for the name, - * then the listener is executed immediately with this message. - * The expires option set by the "send" method has an effect here. - * In addition, the age of the listened messages can be determined - * with the youngerThan option. - * @param {string} name - * @param {function} callback:(data) => void - * @param {object} options - * @returns {function} unregister:()=>void, a function to stop listening - */ -const watch = (name, callback, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(watch) the message name must be given.") - if (typeof callback !== "function") - throw new Error("(watch) the callback parameter must be a function.") - - const { debug, consumerID, ...unknownOptions } = options || {} - const unknownOptionsKeys = Object.keys(unknownOptions) - if (unknownOptionsKeys.length > 0) - warn(`(watch) unknown options: ${unknownOptionsKeys.join(", ")}`) - - // backward compatibility - name = CHANNEL_PREFIX + name - - if (debug) { - log(`${consumerID ? `(${consumerID})` : ""} watch for message ${name}`) - // log(`${consumerID ? `(${consumerID})` : ""} watch EVENT: ${name}`) - } - - addListener("broadcast", name, listenerWrapper(callback)) - - return () => removeListener("broadcast", name, listenerWrapper(callback)) - } catch (e) { - error(e.message) - } -} - -/** - * This function implements a 1:1 communication - * @param {string} name - * @param {function} callback - * @param {object} options - * @returns cancel function - */ -const get = (name, callback, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(get) the message name must be given.") - if (typeof callback !== "function") - throw new Error("(get) the callback parameter must be a function.") - const { debug, getOptions, consumerID, ...unknownOptions } = options || {} - const unknownOptionsKeys = Object.keys(unknownOptions) - if (unknownOptionsKeys.length > 0) - warn(`(get) unknown options: ${unknownOptionsKeys.join(", ")}`) - - // backward compatibility - name = CHANNEL_PREFIX + "GET:" + name - - if (debug) { - log( - `${ - consumerID ? `(${consumerID})` : "" - } get data for intra-window message ${name}` - ) - // log(`${consumerID ? `(${consumerID})` : ""} get EVENT: ${name}`) - } - - if (window.__junoEventListeners["get"]?.[name]?.length === 0) return - - // console.log("==============get", window.__junoEventListeners["get"]?.[name]) - window.__junoEventListeners["get"][name]?.forEach((onGetListener) => { - try { - // get data from onGetListener - onGetListener(options?.getOptions).then((data) => { - callback(data, { - sourceWindowId: window.__junoCommunicatorTabId, - thisWindowId: window.__junoCommunicatorTabId, - }) - }) - } catch (e) { - warn(e) - } - }) - } catch (e) { - error(e.message) - } -} - -/** - * Listen to get messages - * @param {string} name - * @param {function} callback - * @param {object} options - * @returns cancel function - */ -const onGet = (name, getDataCallback, options = {}) => { - try { - if (typeof name !== "string") - throw new Error("(onGet) the message name must be given.") - if (typeof getDataCallback !== "function") - throw new Error("(onGet) the callback parameter must be a function.") - const { debug, consumerID, ...unknownOptions } = options || {} - const unknownOptionsKeys = Object.keys(unknownOptions) - if (unknownOptionsKeys.length > 0) - warn(`(onGet) unknown options: ${unknownOptionsKeys.join(", ")}`) - - // backward compatibility - name = CHANNEL_PREFIX + "GET:" + name - - if (debug) { - log( - `${ - consumerID ? `(${consumerID})` : "" - } send data for intra-window message ${name}` - ) - // log(`${consumerID ? `(${consumerID})` : ""} onGet EVENT: ${name}`) - } - - // is a function (data, options = {}) => data - const onGetListener = listenerWrapper(getDataCallback) - - addListener("get", name, onGetListener) - - return () => removeListener("get", name, listenerWrapper(getDataCallback)) - } catch (e) { - error(e.message) - } -} - -export { broadcast, watch, get, onGet } diff --git a/libs/communicator/src/index.test.js b/libs/communicator/src/index.test.js deleted file mode 100644 index 16f011ef6..000000000 --- a/libs/communicator/src/index.test.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -test("HI", () => expect(true).toEqual(true)) -globalThis.console.log = jest.fn() -globalThis.console.warn = jest.fn() -globalThis.console.error = jest.fn() - -const bc = { - postMessage: jest.fn(), - close: jest.fn(() => true), -} - -globalThis.BroadcastChannel = jest.fn().mockImplementation(() => { - return bc -}) - -const { broadcast, watch, get, onGet } = require("./index") - -describe("Communicator", () => { - afterEach(() => { - jest.clearAllMocks() - }) - - // ################ BROADCAST ##################### - describe("broadcast", () => { - test("log error on missing name", () => { - broadcast() - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(broadcast) the message name must be given." - ) - }) - test("log warning on missing data", () => { - let callback = jest.fn() - watch("TEST", callback) - broadcast("TEST", "data") - expect(callback).toHaveBeenCalledWith("data", { - sourceWindowId: expect.anything(), - thisWindowId: expect.anything(), - }) - }) - - test("unknown options", () => { - broadcast("TEST", { test: "test" }, { unknownOption: true }) - expect(globalThis.console.warn).toHaveBeenCalledWith( - "Communicator Warning:", - "(broadcast) unknown options: unknownOption" - ) - }) - - test("create new broadcast channel", () => { - let callback = jest.fn() - watch("TEST_12345", callback) - broadcast("TEST_12345", { name: "test" }) - expect(callback).toHaveBeenCalledWith({ name: "test" }, expect.anything()) - }) - - test("include options in message payload", () => { - let callback = jest.fn() - watch("TEST_123456", callback) - broadcast("TEST_123456", { name: "test" }, { debug: true }) - expect(callback).toHaveBeenCalledWith( - { name: "test" }, - { sourceWindowId: expect.anything(), thisWindowId: expect.anything() } - ) - }) - - test("log error if wrong debug value", () => { - broadcast("TEST", { name: "test" }, { debug: "true" }) - - expect(globalThis.console.warn).toHaveBeenCalledWith( - "Communicator Warning:", - "(broadcast) debug must be a boolean" - ) - }) - - test("close channel after broadcast", () => { - broadcast("TEST", { name: "test" }, { crossWindow: true }) - - expect(bc.postMessage).toHaveBeenCalled() - }) - }) - - // ################## WATCH ################### - describe("watch", () => { - test("log error on missing name", () => { - watch() - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(watch) the message name must be given." - ) - }) - test("log error on missing callback", () => { - watch("TEST") - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(watch) the callback parameter must be a function." - ) - }) - - test("log error if callback is not a function", () => { - watch("TEST", "callback") - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(watch) the callback parameter must be a function." - ) - }) - - test("unknown options", () => { - watch("TEST", () => null, { unknownOption: true }) - expect(globalThis.console.warn).toHaveBeenCalledWith( - "Communicator Warning:", - "(watch) unknown options: unknownOption" - ) - }) - - test("watch for events", () => { - let callback = jest.fn() - watch("TEST", callback) - broadcast("TEST") - expect(callback).toHaveBeenCalled() - }) - - test("multiple watchers", () => { - let callback1 = jest.fn() - let callback2 = jest.fn() - watch("TEST", callback1) - watch("TEST", callback2) - broadcast("TEST") - expect(callback1).toHaveBeenCalled() - expect(callback2).toHaveBeenCalled() - }) - }) - - // ############### GET ################## - describe("get", () => { - test("log error on missing name", () => { - get() - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(get) the message name must be given." - ) - }) - test("log error on missing callback", () => { - get("TEST") - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(get) the callback parameter must be a function." - ) - }) - - test("log error if callback is not a function", () => { - get("TEST", "callback") - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(get) the callback parameter must be a function." - ) - }) - - test("unknown options", () => { - get("TEST", () => null, { unknownOption: true }) - expect(globalThis.console.warn).toHaveBeenCalledWith( - "Communicator Warning:", - "(get) unknown options: unknownOption" - ) - }) - - test("execute callback", () => { - let callback = jest.fn() - onGet("TEST_12345", callback) - get("TEST_12345", callback) - expect(callback).toHaveBeenCalled() - }) - }) - - // ############### ON GET ################## - describe("onGet", () => { - test("log error on missing name", () => { - onGet() - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(onGet) the message name must be given." - ) - }) - - test("log error on missing callback", () => { - onGet("TEST") - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(onGet) the callback parameter must be a function." - ) - }) - test("log error if callback is not a function", () => { - onGet("TEST", "callback") - expect(globalThis.console.error).toHaveBeenCalledWith( - "Communicator Error:", - "(onGet) the callback parameter must be a function." - ) - }) - test("unknown options", () => { - onGet("TEST", () => null, { unknownOption: true }) - expect(globalThis.console.warn).toHaveBeenCalledWith( - "Communicator Warning:", - "(onGet) unknown options: unknownOption" - ) - }) - - test("returns a function", () => { - const cancel = onGet("TEST", () => null) - expect(typeof cancel).toEqual("function") - }) - }) -}) diff --git a/libs/juno-ui-components/.gitignore b/libs/juno-ui-components/.gitignore deleted file mode 100644 index 15003e7a7..000000000 --- a/libs/juno-ui-components/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/build -/node_modules -/storybook-static diff --git a/libs/juno-ui-components/.npmignore b/libs/juno-ui-components/.npmignore deleted file mode 100644 index 7a4b23010..000000000 --- a/libs/juno-ui-components/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -.storybook -src -test -.babelrc -.gitignore -.npm -postcss.config.js -rollup* -setupTests diff --git a/libs/juno-ui-components/.storybook/.babelrc b/libs/juno-ui-components/.storybook/.babelrc deleted file mode 100644 index 7f27b1c49..000000000 --- a/libs/juno-ui-components/.storybook/.babelrc +++ /dev/null @@ -1,8 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -{ - "presets": ["@babel/env", "@babel/preset-react"] -} \ No newline at end of file diff --git a/libs/juno-ui-components/.storybook/juno-addon/Decorator.jsx b/libs/juno-ui-components/.storybook/juno-addon/Decorator.jsx deleted file mode 100644 index ea91cbe92..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/Decorator.jsx +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import "../../src/global.scss" -import { StyleProvider } from "../../src/components/StyleProvider" -import { ContentContainer } from "../../src/components/ContentContainer/index" -import { Container } from "../../src/components/Container/index" -import React, { useEffect } from "react" -import { useChannel, addons } from "@storybook/preview-api" -import { getCurrentTheme, getCurrentThemeMode } from "./themes" - -const fixBodyBg = () => { - document.body.style.setProperty( - "background-color", - getCurrentTheme().appContentBg, - "important" - ) -} - -fixBodyBg() - -export default (Story, context) => { - const [theme, setTheme] = React.useState("theme-" + getCurrentThemeMode()) - - useEffect(() => { - const updateThemeClass = (mode) => { - // console.log("=======UPDATE JUNO THEME CLASS=======", mode) - setTheme(`theme-${mode}`) - fixBodyBg() - } - const channel = addons.getChannel() - if (channel) { - channel.on("JUNO_THEME_CHANGE", updateThemeClass) - } - updateThemeClass(getCurrentThemeMode()) - return () => { - if (channel) channel.off("JUNO_THEME_CHANGE", updateThemeClass) - } - }, []) - - return ( - - - - - - - - ) -} diff --git a/libs/juno-ui-components/.storybook/juno-addon/DocsContainer.jsx b/libs/juno-ui-components/.storybook/juno-addon/DocsContainer.jsx deleted file mode 100644 index 58d319b46..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/DocsContainer.jsx +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { DocsContainer as BaseContainer } from "@storybook/addon-docs" -import { JUNO_THEME_CHANGE } from "./constants" -import { getCurrentTheme } from "./themes" - -export default ({ theme, ...props }) => { - // store the current theme in state so that we can update the theme when the theme changes - const [currentTheme, setCurrentTheme] = React.useState(getCurrentTheme()) - - // listen for theme change events and update the theme in state - React.useEffect(() => { - const updateDocsTheme = (mode) => setCurrentTheme(getCurrentTheme()) - - // get channel from context and listen to our custom event - // the event is emitted from the theme toggle tool - const channel = props.context?.channel - if (channel) { - channel.on(JUNO_THEME_CHANGE, updateDocsTheme) - } - return () => { - // remove the listener when the component unmounts - if (channel) channel.off(JUNO_THEME_CHANGE, updateDocsTheme) - } - }, []) - - return -} diff --git a/libs/juno-ui-components/.storybook/juno-addon/README.md b/libs/juno-ui-components/.storybook/juno-addon/README.md deleted file mode 100644 index 608710e39..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Juno UI Theme Switcher Addon for Storybook - -## Overview - -The **Juno UI Theme Switcher** is a Storybook addon designed specifically for Juno UI. It provides a seamless way to switch between dark and light themes, not just within the preview section but globally throughout your Storybook environment. This powerful addon ensures that your UI components are presented in the right theme, making it an essential tool for development and testing. - -## How It Works - -### 1. Conversion of Variables.scss - -The process begins with the conversion of the `Variables.scss` file into CSS. The resulting CSS file is then placed in a static folder named "assets." This conversion and file placement take place within the `main.js` file. The `Variables.css` file contains color variables for both dark and light modes. - -### 2. Theme Selection - -The theme is selected based on the class added to the `` element. When the class `theme-dark` is applied, the dark theme variables are used. Conversely, when `theme-light` is applied, the light theme variables are used. - -### 3. Integration with Storybook - -The Theme Switcher addon integrates with Storybook through various components: - -#### - Link Element in Manager UI - -Using the DOM API, a link element is added to the Manager UI of Storybook. This link element loads the CSS variables required for the selected theme. Simultaneously, the appropriate theme class is added to the ``. - -#### - Theme Switcher Button - -The addon defines a Theme Switcher button. When this button is clicked, it changes the theme class in the Manager UI and sends an event with the new theme mode using the Channel API. This process occurs in the `manager.js` file. - -#### - Variables in Preview Part - -In the Preview section (`preview.js`), the Variables CSS file is loaded into the `` of the iframe using a link tag. The corresponding theme class is applied to the ``. Additionally, a listener is defined using the Channel API, which listens for Theme Change Events triggered in the Manager UI. It dynamically updates the theme class in the Preview section to match the selected theme. - -### 4. Theme-Aware Decorator - -In addition to the theme switching functionality, the Theme Switcher addon defines a decorator. This decorator serves two crucial purposes: - -- **Styles for Juno Components**: Juno components are encapsulated within the shadow root by default. This means styles must be applied within the Shadow DOM. The decorator uses a StyleProvider from Juno UI to supply styles to Juno components, ensuring they are rendered correctly. - -- **Dynamic Theme Mode**: The decorator also listens for theme mode changes and updates the theme mode within the StyleProvider, ensuring that Juno components are always styled correctly for the selected theme. - -With the Juno UI Theme Switcher addon for Storybook, you can efficiently develop and test your Juno UI components in the desired theme, enhancing your workflow and user interface testing. diff --git a/libs/juno-ui-components/.storybook/juno-addon/ThemeToggle.jsx b/libs/juno-ui-components/.storybook/juno-addon/ThemeToggle.jsx deleted file mode 100644 index 35f0b2dbc..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/ThemeToggle.jsx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { addons, types } from "@storybook/manager-api" -const ADDON_ID = "juno-addon" -const TOOL_ID = `${ADDON_ID}/theme-toggle` -import { Icons, IconButton } from "@storybook/components" -import { JUNO_THEME_CHANGE } from "./constants" -import { dark, getCurrentThemeMode, light, setCurrentThemeMode } from "./themes" - -addons.register(ADDON_ID, (api) => { - addons.add(TOOL_ID, { - type: types.TOOL, - title: "Toggle Dark Mode", - matches: ({ viewMode }) => viewMode === "story" || viewMode === "docs", - - render: () => { - const [mode, setMode] = React.useState(getCurrentThemeMode()) - - const toggleTheme = React.useCallback(() => { - const newMode = mode === "dark" ? "light" : "dark" - api.emit(JUNO_THEME_CHANGE, newMode) - setMode(newMode) - setCurrentThemeMode(newMode) - api.setOptions({ - theme: newMode === "dark" ? dark : light, - }) - }, [mode]) - - return ( - { - toggleTheme() - }} - > - - - ) - }, - }) -}) diff --git a/libs/juno-ui-components/.storybook/juno-addon/constants.js b/libs/juno-ui-components/.storybook/juno-addon/constants.js deleted file mode 100644 index f6b409c92..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/constants.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// export const THEME_PARAM_KEY = "junoThemeMode" -export const STORAGE_KEY = "__junoThemeMode" - -export const JUNO_THEME_CHANGE = "JUNO_THEME_CHANGE" - -export const ICON_DATA_URL = - "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEuNzEwNzIgMEMwLjc2NTkxNiAwIDAgMC43NjU5MTQgMCAxLjcxMDcyVjQ4LjI4OTNDMCA0OS4yMzQxIDAuNzY1OTE0IDUwIDEuNzEwNzIgNTBIOC42MDE2M0M2Ljg4NjIgNDcuODYgNS44NjAxMSA0NS4xNDM2IDUuODYwMTEgNDIuMTg3NkM1Ljg2MDExIDM1LjgxMTkgMTAuNjMzNSAzMC41NTEgMTYuODAxNSAyOS43ODM4QzE3LjU3NzUgMjMuMTMxNSAyMy4yMzIzIDE3Ljk2ODkgMzAuMDkyOSAxNy45Njg5QzM0LjgzNDQgMTcuOTY4OSAzOSAyMC40MzQ4IDQxLjM3NzEgMjQuMTU0MUM0Mi4zMTM1IDIzLjk1OTYgNDMuMjgzNyAyMy44NTczIDQ0LjI3NzggMjMuODU3M0M0Ni4zMTM5IDIzLjg1NzMgNDguMjQ5OCAyNC4yODYzIDUwIDI1LjA1ODhWMS43MTA3MkM1MCAwLjc2NTkxNiA0OS4yMzQxIDAgNDguMjg5MyAwSDEuNzEwNzJaTTUwIDI4LjkyNDFDNDguMzQyNCAyNy44ODE3IDQ2LjM4MDUgMjcuMjc4OCA0NC4yNzc4IDI3LjI3ODhDNDMuNTE4OSAyNy4yNzg4IDQyLjc4MiAyNy4zNTY4IDQyLjA3MzIgMjcuNTA0TDM5Ljc2NDIgMjcuOTgzOEwzOC40OTQyIDI1Ljk5NjdDMzYuNzE5MiAyMy4yMTk0IDMzLjYxODUgMjEuMzkwMyAzMC4wOTI5IDIxLjM5MDNDMjQuOTg4OCAyMS4zOTAzIDIwLjc3NzEgMjUuMjMyMyAyMC4xOTk5IDMwLjE4MDNMMTkuODg4NyAzMi44NDc2TDE3LjIyMzggMzMuMTc5MUMxMi43NDc2IDMzLjczNTkgOS4yODE1NSAzNy41NTk2IDkuMjgxNTUgNDIuMTg3NkM5LjI4MTU1IDQ1LjUwOSAxMS4wNjcxIDQ4LjQxNzQgMTMuNzMxMSA1MEg0OC4yODkzQzQ5LjIzNDEgNTAgNTAgNDkuMjM0MSA1MCA0OC4yODkzVjI4LjkyNDFaIiBmaWxsPSIjRjBBQjAwIj48L3BhdGg+PC9zdmc+" -export const LOGO_DARK_DATA_URL = - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgNDUiPgogIDxwYXRoIGZpbGw9IiNGMEFCMDAiIGQ9Ik0xLjQgMEExLjQgMS40IDAgMCAwIDAgMS40djQyLjAwM2ExLjQgMS40IDAgMCAwIDEuNCAxLjRoNi4zMDdhMTEuMTUzIDExLjE1MyAwIDAgMS0yLjQ1Ny03YzAtNS43MTMgNC4yNzctMTAuNDI3IDkuODA1LTExLjExNS42OTUtNS45NiA1Ljc2Mi0xMC41ODcgMTEuOTEtMTAuNTg3IDQuMjQ4IDAgNy45OCAyLjIxIDEwLjExMSA1LjU0Mi44NC0uMTc0IDEuNzA5LS4yNjYgMi42LS4yNjYgMS44MjQgMCAzLjU2LjM4NSA1LjEyOCAxLjA3N1YxLjRhMS40IDEuNCAwIDAgMC0xLjQtMS40SDEuNFoiLz4KICA8cGF0aCBmaWxsPSIjRjBBQjAwIiBkPSJNNDQuODA0IDI1LjYwNmE5Ljk2MyA5Ljk2MyAwIDAgMC03LjE1OC0xLjIybC0xLjg5LjM5Mi0xLjA0LTEuNjI3YTkuMTkzIDkuMTkzIDAgMCAwLTE2Ljg4IDMuODYxbC0uMjU1IDIuMTg0LTIuMTguMjdhOC40MDMgOC40MDMgMCAwIDAtMy41OTYgMTUuMzM3aDMxLjU5OGExLjQgMS40IDAgMCAwIDEuNC0xLjRWMjUuNjA2WiIvPgogIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNzQuMDMzIDM3di00LjUxOGgzLjM2VjE1LjQ1NmgtMy4zNnYtNC41MThoMTIuMzk2djQuNTE4aC0zLjM2MXYxNy4wMjZoMy4zNjFWMzdoLTEyLjM5NlptLTE5LjU0MS0yNi4wNjJ2MTUuOThjMCAxLjg0My4zNjEgMy4yMjQgMS4wODMgNC4xNDUuNzIyLjg5NiAxLjkyOSAxLjM0NCAzLjYyMiAxLjM0NCAxLjY5MyAwIDIuOS0uNDQ4IDMuNjIyLTEuMzQ0LjcyMi0uOTIgMS4wODMtMi4zMDIgMS4wODMtNC4xNDR2LTE1Ljk4aDUuNTI2VjI2LjMyYzAgMS45MTctLjE4NyAzLjU4NS0uNTYxIDUuMDA0LS4zNDggMS4zOTQtLjkzMyAyLjU1MS0xLjc1NCAzLjQ3Mi0uODIyLjg5Ni0xLjg4IDEuNTY4LTMuMTc0IDIuMDE2LTEuMjk1LjQyMy0yLjg3NS42MzUtNC43NDIuNjM1cy0zLjQ0OC0uMjEyLTQuNzQyLS42MzVjLTEuMjk0LS40NDgtMi4zNTItMS4xMi0zLjE3NC0yLjAxNi0uODIxLS45Mi0xLjQxOS0yLjA3OC0xLjc5Mi0zLjQ3Mi0uMzQ4LTEuNDItLjUyMy0zLjA4Ny0uNTIzLTUuMDA0VjEwLjkzOGg1LjUyNlptLTI3LjYyMSAyNi41MWMtMS40NDQgMC0yLjczOS0uMjM2LTMuODg0LS43MWE3LjkyIDcuOTIgMCAwIDEtMi44NzUtMi4wNTNjLS43NzEtLjg5Ni0xLjM2OS0xLjk3OS0xLjc5Mi0zLjI0OC0uNDIzLTEuMjctLjYzNS0yLjY4OS0uNjM1LTQuMjU3IDAtMS41NjguMjEyLTIuOTg3LjYzNS00LjI1Ni40MjMtMS4yNyAxLjAyMS0yLjM0IDEuNzkyLTMuMjExYTcuOTIgNy45MiAwIDAgMSAyLjg3NS0yLjA1NGMxLjE0NS0uNDczIDIuNDQtLjcxIDMuODg0LS43MSAxLjQ0MyAwIDIuNzI1LjIzNyAzLjg0NS43MWE3LjUxNCA3LjUxNCAwIDAgMSAyLjg3NSAyLjA1NGMuNzk3Ljg3IDEuNDA3IDEuOTQxIDEuODMgMy4yMS40MjMgMS4yNy42MzUgMi42ODkuNjM1IDQuMjU3IDAgMS41NjgtLjIxMiAyLjk4Ny0uNjM1IDQuMjU3LS40MjMgMS4yNy0xLjAzMyAyLjM1Mi0xLjgzIDMuMjQ4LS43NzEuODk2LTEuNzMgMS41OC0yLjg3NSAyLjA1NC0xLjEyLjQ3My0yLjQwMi43MS0zLjg0NS43MVptMC00LjM2OGMxLjA5NSAwIDEuOTQxLS4zMzcgMi41MzgtMS4wMDkuNTk4LS42NzIuODk3LTEuNjMuODk3LTIuODc1di0zLjk5NWMwLTEuMjQ0LS4yOTktMi4yMDMtLjg5Ny0yLjg3NS0uNTk3LS42NzItMS40NDMtMS4wMDgtMi41MzgtMS4wMDgtMS4wOTYgMC0xLjk0Mi4zMzYtMi41MzkgMS4wMDgtLjU5OC42NzItLjg5NyAxLjYzLS44OTcgMi44NzV2My45OTVjMCAxLjI0NS4yOTkgMi4yMDMuODk3IDIuODc1LjU5Ny42NzIgMS40NDMgMS4wMDkgMi41MzkgMS4wMDlaTTk2LjY3NSAzN1YxNy4zOThoNS41MjZ2My4zMjNoLjIyNGMuMzQ5LTEuMDIuOTU5LTEuOTA0IDEuODMtMi42NTEuODcxLS43NDcgMi4wNzgtMS4xMiAzLjYyMi0xLjEyIDIuMDE2IDAgMy41MzQuNjcyIDQuNTU1IDIuMDE2IDEuMDQ1IDEuMzQ0IDEuNTY4IDMuMjYgMS41NjggNS43NVYzN2gtNS41MjZWMjUuMTY0YzAtMS4yNy0uMTk5LTIuMjAzLS41OTctMi44LS4zOTktLjYyMy0xLjEwOC0uOTM0LTIuMTI5LS45MzRhNC42IDQuNiAwIDAgMC0xLjMwNi4xODcgMy4yNiAzLjI2IDAgMCAwLTEuMTU4LjUyM2MtLjMyNC4yNDgtLjU4NS41Ni0uNzg0LjkzMy0uMTk5LjM0OS0uMjk5Ljc2LS4yOTkgMS4yMzJWMzdoLTUuNTI2Wm0tMTAuNjY3LTMuMjg2aC0uMTg3Yy0uMTc0LjQ5OC0uNDEuOTcxLS43MSAxLjQyYTQuNDU2IDQuNDU2IDAgMCAxLTEuMDgyIDEuMTk0IDUuMTQgNS4xNCAwIDAgMS0xLjYwNi44MjFjLS41OTcuMi0xLjI5NC4zLTIuMDkuMy0yLjAxNyAwLTMuNTQ4LS42Ni00LjU5My0xLjk4LTEuMDItMS4zNDQtMS41MzEtMy4yNi0xLjUzMS01Ljc1VjE3LjM5OGg1LjUyNnYxMS44MzZjMCAxLjE5NC4yMTIgMi4xMTUuNjM1IDIuNzYzLjQyMy42NDcgMS4xNDUuOTcgMi4xNjUuOTcuNDI0IDAgLjg0Ny0uMDYyIDEuMjctLjE4NmEzLjg2OSAzLjg2OSAwIDAgMCAxLjEyLS41MjNjLjMyNC0uMjQ5LjU4NS0uNTQ4Ljc4NC0uODk2LjItLjM0OC4yOTktLjc2LjI5OS0xLjIzMlYxNy4zOThoNS41MjZWMzdoLTUuNTI2di0zLjI4NlpNNjkuMTQ2IDEwLjkzOHYxOC41MmMwIDEuMTk1LS4xOTkgMi4yOS0uNTk3IDMuMjg1YTYuNjMgNi42MyAwIDAgMS0xLjY4IDIuNTAyYy0uNzQ3LjY3Mi0xLjY1NiAxLjIwNy0yLjcyNiAxLjYwNi0xLjA0Ni4zNzMtMi4yNC41Ni0zLjU4NC41Ni0xLjI5NSAwLTIuNDQtLjE3NS0zLjQzNi0uNTIzYTcuNjA5IDcuNjA5IDAgMCAxLTIuNTM5LTEuNDkzIDguMDE4IDguMDE4IDAgMCAxLTEuNzE3LTIuMzE2IDEwLjIzMiAxMC4yMzIgMCAwIDEtLjkzNC0yLjk4Nmw1LjMwMi0xLjA0NmMuNDI0IDIuMjY1IDEuNTA2IDMuMzk4IDMuMjQ5IDMuMzk4LjgyMSAwIDEuNTE4LS4yNjIgMi4wOS0uNzg0LjU5OC0uNTIzLjg5Ny0xLjM0NS44OTctMi40NjVWMTUuNDkzaC03LjkxNnYtNC41NTVoMTMuNTkxWiIvPgo8L3N2Zz4K" - -export const LOGO_LIGHT_DATA_URL = - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgNDUiPgogIDxwYXRoIGZpbGw9IiNGMEFCMDAiIGQ9Ik0xLjQgMEExLjQgMS40IDAgMCAwIDAgMS40djQyLjAwM2ExLjQgMS40IDAgMCAwIDEuNCAxLjRoNi4zMDdhMTEuMTUzIDExLjE1MyAwIDAgMS0yLjQ1Ny03YzAtNS43MTMgNC4yNzctMTAuNDI3IDkuODA1LTExLjExNS42OTUtNS45NiA1Ljc2Mi0xMC41ODcgMTEuOTEtMTAuNTg3IDQuMjQ4IDAgNy45OCAyLjIxIDEwLjExMSA1LjU0Mi44NC0uMTc0IDEuNzA5LS4yNjYgMi42LS4yNjYgMS44MjQgMCAzLjU2LjM4NSA1LjEyOCAxLjA3N1YxLjRhMS40IDEuNCAwIDAgMC0xLjQtMS40SDEuNFoiLz4KICA8cGF0aCBmaWxsPSIjRjBBQjAwIiBkPSJNNDQuODA0IDI1LjYwNmE5Ljk2MyA5Ljk2MyAwIDAgMC03LjE1OC0xLjIybC0xLjg5LjM5Mi0xLjA0LTEuNjI3YTkuMTkzIDkuMTkzIDAgMCAwLTE2Ljg4IDMuODYxbC0uMjU1IDIuMTg0LTIuMTguMjdhOC40MDMgOC40MDMgMCAwIDAtMy41OTYgMTUuMzM3aDMxLjU5OGExLjQgMS40IDAgMCAwIDEuNC0xLjRWMjUuNjA2WiIvPgogIDxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0xNzQuMDMzIDM3di00LjUxOGgzLjM2VjE1LjQ1NmgtMy4zNnYtNC41MThoMTIuMzk2djQuNTE4aC0zLjM2MXYxNy4wMjZoMy4zNjFWMzdoLTEyLjM5NlptLTE5LjU0MS0yNi4wNjJ2MTUuOThjMCAxLjg0My4zNjEgMy4yMjQgMS4wODMgNC4xNDUuNzIyLjg5NiAxLjkyOSAxLjM0NCAzLjYyMiAxLjM0NCAxLjY5MyAwIDIuOS0uNDQ4IDMuNjIyLTEuMzQ0LjcyMi0uOTIgMS4wODMtMi4zMDIgMS4wODMtNC4xNDR2LTE1Ljk4aDUuNTI2VjI2LjMyYzAgMS45MTctLjE4NyAzLjU4NS0uNTYxIDUuMDA0LS4zNDggMS4zOTQtLjkzMyAyLjU1MS0xLjc1NCAzLjQ3Mi0uODIyLjg5Ni0xLjg4IDEuNTY4LTMuMTc0IDIuMDE2LTEuMjk1LjQyMy0yLjg3NS42MzUtNC43NDIuNjM1cy0zLjQ0OC0uMjEyLTQuNzQyLS42MzVjLTEuMjk0LS40NDgtMi4zNTItMS4xMi0zLjE3NC0yLjAxNi0uODIxLS45Mi0xLjQxOS0yLjA3OC0xLjc5Mi0zLjQ3Mi0uMzQ4LTEuNDItLjUyMy0zLjA4Ny0uNTIzLTUuMDA0VjEwLjkzOGg1LjUyNlptLTI3LjYyMSAyNi41MWMtMS40NDQgMC0yLjczOS0uMjM2LTMuODg0LS43MWE3LjkyIDcuOTIgMCAwIDEtMi44NzUtMi4wNTNjLS43NzEtLjg5Ni0xLjM2OS0xLjk3OS0xLjc5Mi0zLjI0OC0uNDIzLTEuMjctLjYzNS0yLjY4OS0uNjM1LTQuMjU3IDAtMS41NjguMjEyLTIuOTg3LjYzNS00LjI1Ni40MjMtMS4yNyAxLjAyMS0yLjM0IDEuNzkyLTMuMjExYTcuOTIgNy45MiAwIDAgMSAyLjg3NS0yLjA1NGMxLjE0NS0uNDczIDIuNDQtLjcxIDMuODg0LS43MSAxLjQ0MyAwIDIuNzI1LjIzNyAzLjg0NS43MWE3LjUxNCA3LjUxNCAwIDAgMSAyLjg3NSAyLjA1NGMuNzk3Ljg3IDEuNDA3IDEuOTQxIDEuODMgMy4yMS40MjMgMS4yNy42MzUgMi42ODkuNjM1IDQuMjU3IDAgMS41NjgtLjIxMiAyLjk4Ny0uNjM1IDQuMjU3LS40MjMgMS4yNy0xLjAzMyAyLjM1Mi0xLjgzIDMuMjQ4LS43NzEuODk2LTEuNzMgMS41OC0yLjg3NSAyLjA1NC0xLjEyLjQ3My0yLjQwMi43MS0zLjg0NS43MVptMC00LjM2OGMxLjA5NSAwIDEuOTQxLS4zMzcgMi41MzgtMS4wMDkuNTk4LS42NzIuODk3LTEuNjMuODk3LTIuODc1di0zLjk5NWMwLTEuMjQ0LS4yOTktMi4yMDMtLjg5Ny0yLjg3NS0uNTk3LS42NzItMS40NDMtMS4wMDgtMi41MzgtMS4wMDgtMS4wOTYgMC0xLjk0Mi4zMzYtMi41MzkgMS4wMDgtLjU5OC42NzItLjg5NyAxLjYzLS44OTcgMi44NzV2My45OTVjMCAxLjI0NS4yOTkgMi4yMDMuODk3IDIuODc1LjU5Ny42NzIgMS40NDMgMS4wMDkgMi41MzkgMS4wMDlaTTk2LjY3NSAzN1YxNy4zOThoNS41MjZ2My4zMjNoLjIyNGMuMzQ5LTEuMDIuOTU5LTEuOTA0IDEuODMtMi42NTEuODcxLS43NDcgMi4wNzgtMS4xMiAzLjYyMi0xLjEyIDIuMDE2IDAgMy41MzQuNjcyIDQuNTU1IDIuMDE2IDEuMDQ1IDEuMzQ0IDEuNTY4IDMuMjYgMS41NjggNS43NVYzN2gtNS41MjZWMjUuMTY0YzAtMS4yNy0uMTk5LTIuMjAzLS41OTctMi44LS4zOTktLjYyMy0xLjEwOC0uOTM0LTIuMTI5LS45MzRhNC42IDQuNiAwIDAgMC0xLjMwNi4xODcgMy4yNiAzLjI2IDAgMCAwLTEuMTU4LjUyM2MtLjMyNC4yNDgtLjU4NS41Ni0uNzg0LjkzMy0uMTk5LjM0OS0uMjk5Ljc2LS4yOTkgMS4yMzJWMzdoLTUuNTI2Wm0tMTAuNjY3LTMuMjg2aC0uMTg3Yy0uMTc0LjQ5OC0uNDEuOTcxLS43MSAxLjQyYTQuNDU2IDQuNDU2IDAgMCAxLTEuMDgyIDEuMTk0IDUuMTQgNS4xNCAwIDAgMS0xLjYwNi44MjFjLS41OTcuMi0xLjI5NC4zLTIuMDkuMy0yLjAxNyAwLTMuNTQ4LS42Ni00LjU5My0xLjk4LTEuMDItMS4zNDQtMS41MzEtMy4yNi0xLjUzMS01Ljc1VjE3LjM5OGg1LjUyNnYxMS44MzZjMCAxLjE5NC4yMTIgMi4xMTUuNjM1IDIuNzYzLjQyMy42NDcgMS4xNDUuOTcgMi4xNjUuOTcuNDI0IDAgLjg0Ny0uMDYyIDEuMjctLjE4NmEzLjg2OSAzLjg2OSAwIDAgMCAxLjEyLS41MjNjLjMyNC0uMjQ5LjU4NS0uNTQ4Ljc4NC0uODk2LjItLjM0OC4yOTktLjc2LjI5OS0xLjIzMlYxNy4zOThoNS41MjZWMzdoLTUuNTI2di0zLjI4NlpNNjkuMTQ2IDEwLjkzOHYxOC41MmMwIDEuMTk1LS4xOTkgMi4yOS0uNTk3IDMuMjg1YTYuNjMgNi42MyAwIDAgMS0xLjY4IDIuNTAyYy0uNzQ3LjY3Mi0xLjY1NiAxLjIwNy0yLjcyNiAxLjYwNi0xLjA0Ni4zNzMtMi4yNC41Ni0zLjU4NC41Ni0xLjI5NSAwLTIuNDQtLjE3NS0zLjQzNi0uNTIzYTcuNjA5IDcuNjA5IDAgMCAxLTIuNTM5LTEuNDkzIDguMDE4IDguMDE4IDAgMCAxLTEuNzE3LTIuMzE2IDEwLjIzMiAxMC4yMzIgMCAwIDEtLjkzNC0yLjk4Nmw1LjMwMi0xLjA0NmMuNDI0IDIuMjY1IDEuNTA2IDMuMzk4IDMuMjQ5IDMuMzk4LjgyMSAwIDEuNTE4LS4yNjIgMi4wOS0uNzg0LjU5OC0uNTIzLjg5Ny0xLjM0NS44OTctMi40NjVWMTUuNDkzaC03LjkxNnYtNC41NTVoMTMuNTkxWiIvPgo8L3N2Zz4K" diff --git a/libs/juno-ui-components/.storybook/juno-addon/manager.js b/libs/juno-ui-components/.storybook/juno-addon/manager.js deleted file mode 100644 index 38331e7ad..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/manager.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import "./ThemeToggle" -import { addons } from "@storybook/manager-api" -import { getCurrentTheme } from "./themes" -import { ICON_DATA_URL } from "./constants" - -// -const favicon = document.head.querySelector("link[rel='icon']") -if (favicon) favicon.setAttribute("href", ICON_DATA_URL) - -addons.setConfig({ - theme: getCurrentTheme(), - toolbar: { - "storybook/background": { hidden: true }, - }, -}) - -console.log("Juno Addon Loaded") diff --git a/libs/juno-ui-components/.storybook/juno-addon/preview.js b/libs/juno-ui-components/.storybook/juno-addon/preview.js deleted file mode 100644 index 0a8a1f342..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/preview.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Decorator from "./Decorator" -import { getCurrentTheme } from "./themes" -import DocsContainer from "./DocsContainer" - -import { - Title, - Subtitle, - Description, - Primary, - ArgsTable, - PRIMARY_STORY, - Stories, -} from "@storybook/addon-docs" - -export const decorators = [Decorator] - -export default { - parameters: { - docs: { - theme: getCurrentTheme(), - container: DocsContainer, - }, - }, -} diff --git a/libs/juno-ui-components/.storybook/juno-addon/themes.js b/libs/juno-ui-components/.storybook/juno-addon/themes.js deleted file mode 100644 index d2583fc7d..000000000 --- a/libs/juno-ui-components/.storybook/juno-addon/themes.js +++ /dev/null @@ -1,117 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { create } from "@storybook/theming/create" -import { - LOGO_DARK_DATA_URL, - LOGO_LIGHT_DATA_URL, - STORAGE_KEY, -} from "./constants" -// import { themes } from "@storybook/theming" -// console.log(themes.dark) - -const staticOptions = { - brandTitle: "Juno UI", - brandUrl: "https://assets.juno.global.cloud.sap", - brandTarget: "_self", - // Fonts - fontBase: - '"Nunito Sans", -apple-system, ".SFNSText-Regular", "San Francisco", BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif', - fontCode: - 'ui-monospace, Menlo, Monaco, "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Droid Sans Mono", "Courier New", monospace', -} - -const dark = create({ - ...staticOptions, - base: "dark", - brandImage: LOGO_DARK_DATA_URL, - // - colorPrimary: "rgb(15, 167, 180)", - colorSecondary: "rgb(21, 208, 224)", - - // UI - appBg: "rgb(36, 42, 49)", - appContentBg: "rgb(18, 25, 32)", - appBorderColor: "rgba(255,255,255,.1)", - appBorderRadius: 4, - - //Buttons - booleanBg: "rgb(23, 30, 37)", - booleanSelectedBg: "#2E3438", - buttonBg: "rgb(23, 30, 37)", - buttonBorder: "rgba(255,255,255,.1)", - - // Text colors - textColor: "rgb(187,187,187)", - textInverseColor: "rgb(76, 76, 76)", - - // Toolbar default and active colors - barTextColor: "rgb(187,187,187)", - barSelectedColor: "rgb(187,187,187)", - barBg: "rgb(36, 42, 49)", - - // Form colors - inputBg: "rgb(23, 30, 37)", - inputBorder: "rgba(255,255,255,.1)", - inputTextColor: "rgb(187, 187, 187)", - inputBorderRadius: 2, - - // Menu - - textMutedColor: "rgb(122, 122, 122)", -}) - -const light = create({ - ...staticOptions, - base: "light", - brandImage: LOGO_LIGHT_DATA_URL, - - // - colorPrimary: "rgb(30, 106, 146)", - colorSecondary: "rgb(0, 125, 184)", - - // UI - appBg: "rgb(249, 249, 249)", - appContentBg: "rgb(255, 255, 255)", - appBorderColor: "rgba(64, 64, 64, .1)", - appBorderRadius: 4, - - //Buttons - booleanBg: "rgb(233, 233, 233)", - booleanSelectedBg: "#2E3438", - buttonBg: "rgb(233, 233, 233)", - buttonBorder: "rgba(64, 64, 64, .1)", - - // Text colors - textColor: "rgb(76, 76, 76)", - textInverseColor: "rgb(76, 76, 76)", - - // Toolbar default and active colors - barTextColor: "rgb(76, 76, 76)", - barSelectedColor: "rgb(76, 76, 76)", - barBg: "rgb(249, 249, 249)", - - // Form colors - inputBg: "rgb(233, 233, 233)", - inputBorder: "rgba(64, 64, 64, .1)", - inputTextColor: "rgb(76, 76, 76)", - inputBorderRadius: 2, - - // Menu - - textMutedColor: "rgb(122, 122, 122)", -}) - -const setCurrentThemeMode = (mode) => localStorage.setItem(STORAGE_KEY, mode) -const getCurrentThemeMode = () => localStorage.getItem(STORAGE_KEY) || "dark" -const getCurrentTheme = () => (getCurrentThemeMode() === "dark" ? dark : light) - -export { - dark, - light, - getCurrentTheme, - setCurrentThemeMode, - getCurrentThemeMode, -} diff --git a/libs/juno-ui-components/.storybook/main.js b/libs/juno-ui-components/.storybook/main.js deleted file mode 100644 index d4232a2c6..000000000 --- a/libs/juno-ui-components/.storybook/main.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -/** @type { import('@storybook/react-webpack5').StorybookConfig } */ - -const path = require("path") -const globImporter = require("node-sass-glob-importer") - -const config = { - stories: ["../src/docs/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: [ - "@storybook/addon-links", - "@storybook/addon-essentials", - "@storybook/addon-docs", - "@storybook/addon-mdx-gfm", - "./juno-addon", - ], - webpackFinal: async (config) => { - // Default rule for images /\.(svg|ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/ - // Exclude SVG files so that they can be loaded via svgr - const fileLoaderRule = config.module.rules.find( - (rule) => rule.test && rule.test.test(".svg") - ) - fileLoaderRule.exclude = /\.svg$/ - - config.module.rules.push({ - test: /\.svg$/i, - type: "asset", - resourceQuery: /url/, // import filename: *.svg?url - }) - - config.module.rules.push({ - test: /\.svg$/i, - enforce: "pre", - issuer: /\.jsx?$/, - resourceQuery: { not: [/url/] }, // exclude react component if import filename *.svg?url - loader: require.resolve("@svgr/webpack"), - options: { - svgo: false, - titleProp: true, - }, - }) - - // this is for background svgs in css - config.module.rules.push({ - test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - issuer: /\.s?css$/, - type: "asset", - }) - - // other images - config.module.rules.push({ - test: /\.(png|jpg)$/i, - type: "asset", - }) - - config.module.rules.push({ - test: /\.scss$/, - use: [ - "css-loader", - { - loader: "postcss-loader", - // important! use local installed postcss (version 8) - options: { - implementation: require("postcss"), - }, - }, - { - loader: "sass-loader", - options: { - sassOptions: { - importer: globImporter(), - }, - }, - }, - ], - include: [path.resolve(__dirname, "../src")], - }) - - return config - }, - - framework: { - name: "@storybook/react-webpack5", - options: {}, - }, - docs: { - autodocs: true, - }, -} -export default config diff --git a/libs/juno-ui-components/.storybook/preview.js b/libs/juno-ui-components/.storybook/preview.js deleted file mode 100644 index 71d87aa36..000000000 --- a/libs/juno-ui-components/.storybook/preview.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// import { useDarkMode } from "storybook-dark-mode" -// import { DocsContainer } from "./components/DocsContainer" -// import { themes } from "@storybook/theming" - -// import { -// Title, -// Subtitle, -// Description, -// Primary, -// ArgsTable, -// PRIMARY_STORY, -// Stories, -// } from "@storybook/addon-docs" -// import React from "react" -// import "../src/global.scss" -// import { StyleProvider } from "../src/components/StyleProvider" -// import { ContentArea } from "../src/components/ContentArea/index" -// import { Container } from "../src/components/Container/index" - -// export const parameters = { -// options: { -// storySort: { -// order: ["Components", "Forms", "Layout", "*", "WiP", "Internal"], -// method: "alphabetical", -// }, -// }, -// actions: { argTypesRegex: "^on[A-Z].*" }, -// backgrounds: { disable: true }, -// darkMode: { -// stylePreview: true, -// classTarget: "html", -// darkClass: "theme-dark", -// lightClass: "theme-light", -// // one additional piece of the puzzle to make dark mode work properly is the preview-head.html in this folder -// // in there we are able to set the background color of stories using inbuilt CSS escape hatches. -// // See documentation here: https://github.com/storybookjs/storybook/blob/master/addons/docs/docs/theming.md#storybook-theming -// }, -// docs: { -// /** -// * A custom docs container seems to be necessary because we want the docs container theme to switch depending on -// * the result of the useDarkMode hook from the storybook-dark-mode addon. -// * See more info in ./components/DocsContainer -// */ -// container: DocsContainer, -// /** -// * We're using a custom docs page setup here at the moment because by default the storybook docspage renders the first -// * story from the stories file as a special "primary" story that is adjustable with the args table but it does not -// * include the primary story below with the list of other stories. This leads to the description for the primary -// * story not being displayed anywhere on the docspage which is annoying. Therefore I've adjusted the default Docs Page -// * to include the primary story with the story list. There's an open issue that might fix this issue and render the -// * need for a custom page obsolete: https://github.com/storybookjs/storybook/issues/8093 -// * -// * Also there's still an open issue regarding the descriptions of stories. Ideally it would be possible to write standard -// * jsdoc descriptions for stories but currently this doesn't work. Instead you have to pass the description as a parameter. -// * This issue is here: https://github.com/storybookjs/storybook/issues/8527 -// */ -// page: () => ( -// <> -// -// <Subtitle /> -// <Description /> -// <Primary /> -// <ArgsTable story={PRIMARY_STORY} /> -// <Stories includePrimary={true} title="" /> -// </> -// ), -// // ensure that decorators aren't rendered for dynamic code display in stories -// // if decorators should be rendered for a story or component add the below to the component's config under parameters: { docs: { source: ...} } -// // and set excludeDecorators to false -// source: { -// type: "dynamic", -// excludeDecorators: true, -// }, -// }, -// controls: { -// expanded: true, -// matchers: { -// //color: /(background|color)$/i, // comment out to prevent storybook from rendering their custom color input -// date: /Date$/, -// }, -// }, -// } -// import "../src/global.scss" - -/** @type { import('@storybook/react').Preview } */ -const preview = { - parameters: { - // layout: "centered", - options: { - storySort: { - order: ["Components", "Forms", "Layout", "*", "WiP", "Internal"], - method: "alphabetical", - }, - }, - actions: { argTypesRegex: "^on[A-Z].*" }, - controls: { - expanded: true, - matchers: { - //color: /(background|color)$/i, // comment out to prevent storybook from rendering their custom color input - date: /Date$/, - }, - }, - }, -} - -export default preview diff --git a/libs/juno-ui-components/LICENSE b/libs/juno-ui-components/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/libs/juno-ui-components/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/libs/juno-ui-components/README.md b/libs/juno-ui-components/README.md deleted file mode 100644 index 03c13cb2a..000000000 --- a/libs/juno-ui-components/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Juno UI Components Library - -## Installation - -To include Juno UI components as a dev dependency in your app install with npm: - -```bash -npm add --dev juno-ui-components -``` - -…or declare manually as a dev-dependency: - -```js -// package.json -"devDependencies": { - ... - "juno-ui-components": ">= 0" - ... -} -``` - -```bash -npm --workspaces install -``` - -## Working With Tailwind - -Juno comes with [Tailwind](https://tailwindcss.com/) included, so when using Juno you automatically can use tailwind in your project. - -To be able to make full use of the predefined colors and other custom properties from the Juno UI components library you will need to include the ui components tailwind config into your application's tailwind config like this: - -```js -module.exports = { - presets: [ - require("juno-ui-components/build/lib/tailwind.config") - ], - ... -} -``` - -Doing this lets you use Tailwind classnames from the Juno UI Components library. - -## Development - -In order to work ON (NOT WITH) the Juno Design System and its components run storybook with: - -```bash -npm -w juno-ui-components run storybook -``` - -or just run from the root directory of this repository `npm run ui-components` - -Run the test suite: - -```bash -npm -w juno-ui-components run test -``` diff --git a/libs/juno-ui-components/babel.config.json b/libs/juno-ui-components/babel.config.json deleted file mode 100644 index 3e71ca2d5..000000000 --- a/libs/juno-ui-components/babel.config.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "presets": ["@babel/preset-react"], - "env": { - "test": { - "presets": ["@babel/env"] - } - }, - "plugins": ["@babel/plugin-transform-parameters"] -} diff --git a/libs/juno-ui-components/lib/variables.scss b/libs/juno-ui-components/lib/variables.scss deleted file mode 100644 index 0edb699fc..000000000 --- a/libs/juno-ui-components/lib/variables.scss +++ /dev/null @@ -1,635 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -// Juno - -/* Color Definitions */ -/* The Mother of Colors – The single source of truth of colors in Juno. - Here we define all relevant colors as triples of their rgb values. - We use these to generate CSS variables: one is the triple itself for use with tailwind opacity functions, one is the rgb( r, g, b) color definition for direct use. - -*/ - -/* Global Color Definitions */ -$color-map: ( - - "white": (255, 255, 255), - "black": (0, 0, 0), - - "sap-grey-1": (255, 255, 255), - "sap-grey-2": (225, 225, 225), - "sap-grey-3": (204, 204, 204), - "sap-grey-4": (153, 153, 153), - "sap-grey-5": (127, 127, 127), - "sap-grey-6": (102, 102, 102), - "sap-grey-7": (75, 75, 75), - "sap-grey-8": (0, 0, 0), - - "sap-blue-1": (15, 170, 25), - "sap-blue-2": (0, 143, 211), - "sap-blue-3": (0, 118, 203), - "sap-blue-4": (15, 70, 167), - "sap-blue-5": (0, 50, 131), - "sap-blue-6": (0, 25, 90), - - "sap-gold": (240, 171, 0), - - "sap-purple-1": (220, 0, 150), - "sap-purple-2": (190, 0, 140), - "sap-purple-3": (151, 10, 130), - "sap-purple-4": (118, 10, 133), - "sap-purple-5": (69, 21, 126), - "sap-purple-6": (60, 20, 100), - - "sap-green-1": (188, 220, 80), - "sap-green-2": (147, 201, 57), - "sap-green-3": (79, 184, 28), - "sap-green-4": (52, 139, 38), - "sap-green-5": (36, 114, 48), - "sap-green-6": (15, 75, 60), - - "sap-orange-1": (255, 175, 0), - "sap-orange-2": (250, 145, 0), - "sap-orange-3": (235, 115, 0), - "sap-orange-4": (227, 85, 0), - "sap-orange-5": (208, 69, 18), - "sap-orange-6": (188, 54, 24), - - "juno-grey-blue-1": (64, 70, 75), - "juno-grey-blue-2": (48, 54, 60), - "juno-grey-blue-3": (41, 47, 54), - "juno-grey-blue-4": (38, 44, 51), - "juno-grey-blue-5": (36, 42, 49), - "juno-grey-blue-6": (31, 38, 45), - "juno-grey-blue-7": (28, 35, 42), - "juno-grey-blue-8": (23, 30, 37), - "juno-grey-blue-9": (18, 25, 32), - "juno-grey-blue-10": (13, 20, 28), - "juno-grey-blue-11": (0, 8, 16), - - "juno-grey-light-1": (249, 249, 249), - "juno-grey-light-2": (247, 247, 247), - "juno-grey-light-3": (244, 244, 244), - "juno-grey-light-4": (241, 241, 241), - "juno-grey-light-5": (238, 238, 238), - "juno-grey-light-6": (235, 235, 235), - "juno-grey-light-7": (233, 233, 233), - "juno-grey-light-8": (230, 230, 230), - "juno-grey-light-9": (227, 227, 227), - "juno-grey-light-10": (215, 215, 215), - - "juno-blue-1": (203, 232, 247), - "juno-blue-2": (165, 211, 234), - "juno-blue-3": (137, 201, 232), - "juno-blue-4": (67, 162, 208), - "juno-blue-5": (0, 125, 184), - "juno-blue-6": (30, 106, 146), - "juno-blue-7": (10, 103, 153), - "juno-blue-8": (7, 85, 128), - "juno-blue-9": (5, 70, 105), - "juno-blue-10": (3, 55, 84), - - "juno-turquoise-1": (197, 247, 255), - "juno-turquoise-2": (132, 241, 255), - "juno-turquoise-3": (25, 232, 250), - "juno-turquoise-4": (22, 217, 234), - "juno-turquoise-5": (21, 208, 224), - "juno-turquoise-6": (15, 167, 180), - "juno-turquoise-7": (9, 133, 144), - "juno-turquoise-8": (5, 100, 109), - "juno-turquoise-9": (2, 69, 75), - "juno-turquoise-10": (1, 41, 4), - - "juno-primary-blue-1": (15, 170, 255), - "juno-primary-blue-2": (0, 143, 211), - "juno-primary-blue-3": (0, 118, 203), - "juno-primary-blue-4": (15, 70, 167), - "juno-primary-blue-5": (0, 50, 131), - "juno-primary-blue-6": (0, 25, 90), - -); - -/* Light Theme Color Definitions */ -$light-theme-color-map: ( - "accent": (0, 118, 203), - - "info": (0, 118, 203), - "success": (79, 184, 28), - "warning": (255, 175, 0), - "danger": (199, 0, 0), - "error": (199, 0, 0), - - "juno-text-light": (150, 150, 150), - "juno-text-default": (76, 76, 76), - "juno-text-high": (64, 64, 64), - "juno-text-highest": (0, 0, 0), - "juno-text-disabled": (183, 183, 183), - - "juno-primary-danger-1": (235, 146, 146), - "juno-primary-danger-2": (218, 93, 93), - "juno-primary-danger-3": (213, 64, 64), - "juno-primary-danger-4": (199, 0, 0), - "juno-primary-danger-5": (165,11,11), -); - -/* Dark Theme Color Definitions */ -$dark-theme-color-map: ( - "accent": (21, 208, 224), - - "info": (21, 208, 224), - "success": (59, 255, 91), - "warning": (255, 198, 0), - "danger": (255, 65, 16), - "error": (255, 65, 16), - - "juno-text-light": (122, 122, 122), - "juno-text-default": (187, 187, 187), - "juno-text-high": (222, 223, 224), - "juno-text-highest": (255, 254, 253), - "juno-text-disabled": (92, 92, 92), - - "juno-primary-danger-1": (231, 163, 137), - "juno-primary-danger-2": (222, 126, 91), - "juno-primary-danger-3": (208, 69, 18), - "juno-primary-danger-4": (187, 62, 16), - "juno-primary-danger-5": (164, 54, 14), -); - - - -/* Global Color Variables */ -:root, -:host { - - @each $name, $value in $color-map { - --color-#{$name}: rgb(#{$value}); - --color-#{$name}-raw: #{$value}; - } - -} - -/* Light Theme Color Variables */ -.theme-light { - @each $name, $value in $light-theme-color-map { - --color-#{$name}: rgb(#{$value}); - --color-#{$name}-raw: #{$value}; - } -} - -/* Dark Theme Color Variables */ -.theme-dark { - @each $name, $value in $dark-theme-color-map { - --color-#{$name}: rgb(#{$value}); - --color-#{$name}-raw: #{$value}; - } -} - - -/* Color Assignments */ - -/* ----- LIGHT THEME ----- */ -.theme-light { - // LT Background Colors - --color-background-lvl-0: var(--color-white); - --color-background-lvl-1: var(--color-juno-grey-light-1); - --color-background-lvl-2: var(--color-juno-grey-light-3); - --color-background-lvl-3: var(--color-juno-grey-light-7); - --color-background-lvl-4: var(--color-juno-grey-light-9); - --color-background-lvl-5: var(--color-juno-grey-light-10); - - --color-background-lvl-0-raw: var(--color-white-raw); - --color-background-lvl-1-raw: var(--color-juno-grey-light-1-raw); - --color-background-lvl-2-raw: var(--color-juno-grey-light-3-raw); - --color-background-lvl-3-raw: var(--color-juno-grey-light-7-raw); - --color-background-lvl-4-raw: var(--color-juno-grey-light-9-raw); - --color-background-lvl-5-raw: var(--color-juno-grey-light-10-raw); - - // LT Global - --color-global-bg: var(--color-juno-grey-light-1); - --color-global-bg-raw: var(--color-juno-grey-light-1-raw); - - --color-global-text: var(--color-juno-text-default-raw); - --color-content-area-bg: var(--color-background-lvl-0); - --color-content-area-bg-raw: var(--color-background-lvl-0-raw); - // LT FOCUS - --color-focus: var(--color-accent); - --color-focus-raw: var(--color-accent-raw); - // LT Text - --color-text-highest: var(--color-juno-text-highest); - --color-text-high: var(--color-juno-text-high); - --color-text-default: var(--color-juno-text-default); - --color-text-light: var(--color-juno-text-light); - --color-text-disabled: var(--color-juno-text-disabled); - --color-text-link: var(--color-accent); - --color-text-highest-raw: var(--color-juno-text-highest-raw); - --color-text-high-raw: var(--color-juno-text-high-raw); - --color-text-default-raw: var(--color-juno-text-default-raw); - --color-text-light-raw: var(--color-juno-text-light-raw); - --color-text-disabled-raw: var(--color-juno-text-disabled-raw); - --color-text-link-raw: var(--color-accent-raw); - - // LT Badge - --color-badge-default-bg: var(--color-juno-grey-light-3); - - // LT Button - // LT Primary Button - --color-button-primary-text: var(--color-white); - --color-button-primary-bg: var(--color-juno-primary-blue-3); - // |-- LT Primary Button :hover - --color-button-primary-hover-text: var(--color-white); - --color-button-primary-hover-bg: var(--color-juno-primary-blue-2); - // |-- LT Primary Button :active - --color-button-primary-active-text: var(--color-white); - --color-button-primary-active-bg: var(--color-juno-primary-blue-5); - - // LT Default Button - --color-button-default-text: var(--color-text-high); - --color-button-default-bg: var(--color-background-lvl-4); - --color-button-default-border: var(--color-background-lvl-4); - // |-- LT Default Button :hover - --color-button-default-hover-text: var(--color-text-high); - --color-button-default-hover-bg: var(--color-background-lvl-3); - --color-button-default-hover-border: var(--color-background-lvl-3); - // |-- LT Default Button :active - --color-button-default-active-text: var(--color-text-high); - --color-button-default-active-bg: var(--color-background-lvl-2); - --color-button-default-active-border: var(--color-background-lvl-4); - - // LT Subdued Button - --color-button-subdued-text: var(--color-text-default); - --color-button-subdued-icon: var(--color-text-default); - --color-button-subdued-bg: var(--color-background-lvl-3); - --color-button-subdued-border: var(--color-background-lvl-4); - // |-- LT Subdued Button :hover - --color-button-subdued-hover-text: var(--color-text-default); - --color-button-subdued-hover-bg: var(--color-background-lvl-1); - --color-button-subdued-hover-border: var(--color-background-lvl-4); - // |-- LT Subdued Button :active - --color-button-subdued-active-text: var(--color-text-default); - --color-button-subdued-active-bg: var(--color-background-lvl-0); - --color-button-subdued-active-border: var(--color-background-lvl-4); - - // LT Primary Danger Button - --color-button-primary-danger-text: var(--color-white); - --color-button-primary-danger-bg: var(--color-juno-primary-danger-4); - // |-- LT Primary Danger Button :hover - --color-button-primary-danger-hover-text: var(--color-white); - --color-button-primary-danger-hover-bg: var(--color-juno-primary-danger-3); - // |-- LT Primary Danger Button :active - --color-button-primary-danger-active-text: var(--color-white); - --color-button-primary-danger-active-bg: var(--color-juno-primary-danger-5); - - // LT Icon - --color-icon-danger: var(--color-juno-red-raw); - --color-icon-info: var(--color-accent-raw); - --color-icon-success: var(--color-sap-green-raw); - --color-icon-warning: var(--color-warning-raw); - // LT Message - --color-message-danger-border: var(--color-danger-raw); - --gradient-message-danger-bg: linear-gradient( - 90deg, - rgb(255, 231, 224) 0%, - rgb(255, 180, 158) 100% - ); - --color-message-default-border: var(--color-info-raw); - --gradient-message-default-bg: linear-gradient( - 90deg, - rgb(229, 244, 248) 0%, - rgb(46, 168, 196) 100% - ); - --color-message-error-border: var(--color-error-raw); - --gradient-message-error-bg: linear-gradient( - 90deg, - rgb(255, 231, 224) 0%, - rgb(255, 180, 158) 100% - ); - --color-message-warning-border: var(--color-warning-raw); - --gradient-message-warning-bg: linear-gradient( - 90deg, - rgb(253, 245, 226) 0%, - rgb(255, 231, 147) 100% - ); - --color-message-success-border: var(--color-success-raw); - --gradient-message-success-bg: linear-gradient( - 90deg, - rgb(230, 247, 233) 0%, - rgb(170, 229, 180) 100% - ); - - // LT Introbox - --color-introbox-bg: var(--color-background-lvl-2-raw); - --color-introbox-border: var(--color-accent-raw); - // LT (Text-) Input - --color-textinput-bg: var(--color-background-lvl-3-raw); - --color-textinput-default-border: var(--color-background-lvl-4-raw); - --color-textinput-text: var(--color-juno-text-high-raw); - --color-textinput-placeholder-text: var(--color-juno-text-high-raw); - --color-textinput-focus-border: var(--color-accent-raw); - --color-textinput-autofill-text: var(--color-black); - --color-textinput-autofill-bg: var(--color-juno-blue-1); - --color-textinput-autofill-label: var(--color-juno-text-default); - // LT Select - --color-select-bg: var(--color-background-lvl-3-raw); - // LT Checkbox - --color-checkbox-bg: var(--color-background-lvl-5-raw); - --color-checkbox-checked-color: var(--color-accent-raw); - // LT Radio - --color-radio-bg: var(--color-background-lvl-5-raw); - --color-radio-checked-bg: var(--color-accent-raw); - // LT Switch - --color-switch-default-border: var(--color-juno-text-default-raw); - --color-switch-handle-bg: var(--color-juno-text-default-raw); - --color-switch-handle-checked-bg: var(--color-accent-raw); - // LT Required - --color-required-bg: var(--color-accent-raw); - // LT Spinner - --color-spinner-primary: var(--color-accent-raw); - // LT Syntax Highlighting - --color-syntax-highlight-base00: var(--color-codeblock-bg); // bg - --color-syntax-highlight-base01: var(--color-juno-grey-light-3); // ? - --color-syntax-highlight-base02: var(--color-sap-grey-3); // lines and boxes - --color-syntax-highlight-base03: var(--color-sap-grey-3); - --color-syntax-highlight-base04: var(--color-sap-grey-3); - --color-syntax-highlight-base05: var(--color-juno-text-high); - --color-syntax-highlight-base06: red; - --color-syntax-highlight-base07: var(--color-juno-text-high); - --color-syntax-highlight-base08: var(--color-juno-grey-blue-6); // NULL - --color-syntax-highlight-base09: var(--color-juno-blue-4); // String value - --color-syntax-highlight-base0A: var(--color-juno-grey-blue-6); // NaN - --color-syntax-highlight-base0B: var(--color-juno-blue-4); // float value - --color-syntax-highlight-base0C: var(--color-sap-gold); // array index - --color-syntax-highlight-base0D: var(--color-sap-gold); // expanded icon - --color-syntax-highlight-base0E: var(--color-juno-blue-4); - // LT bool + collapsed icon - --color-syntax-highlight-base0F: var(--color-juno-blue-4); // integer value - // LT DataGrid - --color-datagridrow-selected: var(--color-accent-raw); - // LT DataList - --color-datalist-row-border: var(--color-background-lvl-1-raw); - --color-datalistrow-selected: var(--color-accent-raw); - // LT CodeBlock - --color-codeblock-bg: var(--color-background-lvl-2-raw); - --color-codeblock-bar-border: var(--color-background-lvl-4-raw); - // LT Panel - // --color-panel-bg-raw: var(--color-white-raw); - --color-panel-bg: rgba(252, 252, 252, 0.8); - // LT TabNavigation - --color-tabnavigation-top-bg: var(--color-juno-grey-light-5-raw); - --color-tabnavigation-content-bottom-border: var(--color-background-lvl-4-raw); - // LT Filters - --color-filters-bg: var(--color-background-lvl-1-raw); - --color-filter-input-bg: var(--color-background-lvl-0-raw); - --color-filter-input-border: var(--color-background-lvl-4-raw); - --color-filter-input-textinput-bg: transparent; - --color-filter-pill-border: var(--color-background-lvl-4-raw); - --color-filter-pill-key-bg: var(--color-background-lvl-4-raw); - // LT Modal - --color-modal-backdrop-bg: rgba(0, 0, 0, 0.2); - // LT Box - --color-box-bg: var(--color-background-lvl-1); - --color-box-border: var(--color-background-lvl-3); - // DT SideNavigation - --color-sidenavigation-item-active: var(--color-black); - --color-sidenavigation-item-active-bg: var(--color-background-lvl-0); - // DT TopNavigation - --color-topnavigation-item-active: var(--color-black); - --color-topnavigation-item-bg: var(--color-sap-grey-1); - --color-topnavigation-item-active-bg: var(--color-sap-grey-3); - - // DT Datepicker - --color-datepicker-calendar-bg: var(--color-background-lvl-1); - -} - -/* ----- LIGHT THEME END -----*/ -/* ----- */ -/* ----- */ -/* ----- */ -/* ----- */ -/* ----- DARK THEME ----- */ - -.theme-dark { - // DT Background Colors - --color-background-lvl-0: var(--color-juno-grey-blue-9); - --color-background-lvl-1: var(--color-juno-grey-blue-7); - --color-background-lvl-2: var(--color-juno-grey-blue-5); - --color-background-lvl-3: var(--color-juno-grey-blue-3); - --color-background-lvl-4: var(--color-juno-grey-blue-2); - --color-background-lvl-5: var(--color-juno-grey-blue-1); - - --color-background-lvl-0-raw: var(--color-juno-grey-blue-9-raw); - --color-background-lvl-1-raw: var(--color-juno-grey-blue-7-raw); - --color-background-lvl-2-raw: var(--color-juno-grey-blue-5-raw); - --color-background-lvl-3-raw: var(--color-juno-grey-blue-3-raw); - --color-background-lvl-4-raw: var(--color-juno-grey-blue-2-raw); - --color-background-lvl-5-raw: var(--color-juno-grey-blue-1-raw); - - // DT Global - --color-global-bg: var(--color-juno-grey-blue-10); - --color-global-bg-raw: var(--color-juno-grey-blue-10-raw); - - --color-global-text: var(--color-juno-text-default-raw); - --color-content-area-bg: var(--color-background-lvl-0); - --color-content-area-bg-raw: var(--color-background-lvl-0-raw); - - // DT FOCUS - --color-focus: var(--color-accent); - --color-focus-raw: var(--color-accent-raw); - --color-focus-border: var(--color-accent-raw); - // DT Text - --color-text-highest: var(--color-juno-text-highest); - --color-text-high: var(--color-juno-text-high); - --color-text-default: var(--color-juno-text-default); - --color-text-light: var(--color-juno-text-light); - --color-text-disabled: var(--color-juno-text-disabled); - --color-text-link: var(--color-accent); - --color-text-highest-raw: var(--color-juno-text-highest-raw); - --color-text-high-raw: var(--color-juno-text-high-raw); - --color-text-default-raw: var(--color-juno-text-default-raw); - --color-text-light-raw: var(--color-juno-text-light-raw); - --color-text-disabled-raw: var(--color-juno-text-disabled-raw); - --color-text-link-raw: var(--color-accent-raw); - - // DT Badge - --color-badge-default-bg: var(--color-juno-grey-blue-3); - - // DT Button - // DT Primary Button - --color-button-primary-bg: var(--color-juno-turquoise-7); - --color-button-primary-text: var(--color-white); - // |-- DT Primary Button :hover - --color-button-primary-hover-bg: var(--color-juno-turquoise-5); - --color-button-primary-hover-text: var(--color-white); - // |-- DT Primary Button :active - --color-button-primary-active-bg: var(--color-juno-turquoise-9); - --color-button-primary-active-text: var(--color-white); - - // DT Default Button - --color-button-default-text: var(--color-text-high); - --color-button-default-icon: var(--color-text-high); - --color-button-default-bg: var(--color-background-lvl-5); - --color-button-default-border: var(--color-background-lvl-5); - // |-- DT Default Button :hover - --color-button-default-hover-text: var(--color-text-high); - --color-button-default-hover-bg: var(--color-background-lvl-3); - --color-button-default-hover-border: var(--color-background-lvl-3); - // |-- DT Default Button :active - --color-button-default-active-text: var(--color-text-high); - --color-button-default-active-bg: var(--color-background-lvl-2); - --color-button-default-active-border: var(--color-background-lvl-4); - - // DT Subdued Button - --color-button-subdued-text: var(--color-text-default); - --color-button-subdued-icon: var(--color-text-default); - --color-button-subdued-bg: var(--color-background-lvl-3); - --color-button-subdued-border: var(--color-background-lvl-4); - // |-- DT Subdued Button :hover - --color-button-subdued-hover-text: var(--color-text-default); - --color-button-subdued-hover-bg: var(--color-background-lvl-2); - --color-button-subdued-hover-border: var(--color-background-lvl-4); - // |-- DT Subdued Button :active - --color-button-subdued-active-text: var(--color-text-default); - --color-button-subdued-active-bg: var(--color-background-lvl-0); - --color-button-subdued-active-border: var(--color-background-lvl-4); - - // DT Primary-Danger Button - --color-button-primary-danger-text: var(--color-white); - --color-button-primary-danger-bg: var(--color-juno-primary-danger-4); - // |-- DT Primary Danger Button :hover - --color-button-primary-danger-hover-text: var(--color-white); - --color-button-primary-danger-hover-bg: var(--color-juno-primary-danger-3); - // |-- DT Primary Danger Button :active - --color-button-primary-danger-active-text: var(--color-white); - --color-button-primary-danger-active-bg: var(--color-juno-primary-danger-5); - - // DT Icon - --color-icon-danger: var(--color-juno-red-5-raw); - --color-icon-info: var(--color-accent-raw); - --color-icon-success: var(--color-sap-green-5-raw); - --color-icon-warning: var(--color-warning-raw); - // DT Message - --color-message-danger-border: var(--color-danger-raw); - --gradient-message-danger-bg: linear-gradient( - 90deg, - rgb(57, 39, 38) 0%, - rgb(124, 48, 30) 100% - ); - --color-message-default-border: var(--color-info-raw); - --gradient-message-default-bg: linear-gradient( - 90deg, - rgb(28, 57, 65) 0%, - rgb(25, 108, 119) 100% - ); - --color-message-error-border: var(--color-error-raw); - --gradient-message-error-bg: linear-gradient( - 90deg, - rgb(57, 39, 38) 0%, - rgb(124, 48, 30) 100% - ); - --color-message-warning-border: var(--color-warning-raw); - --gradient-message-warning-bg: linear-gradient( - 90deg, - rgb(57, 56, 36) 0%, - rgb(124, 104, 24) 100% - ); - --color-message-success-border: var(--color-success-raw); - --gradient-message-success-bg: linear-gradient( - 90deg, - rgb(32, 55, 46) 0%, - rgb(39, 102, 57) 100% - ); - // DT Introbox - --color-introbox-bg: var(--color-background-lvl-2-raw); - --color-introbox-border: var(--color-accent-raw); - // DT (Text-)Input - --color-textinput-bg: var(--color-background-lvl-3-raw); - --color-textinput-default-border: var(--color-background-lvl-4-raw); - --color-textinput-text: var(--color-juno-text-high-raw); - --color-textinput-placeholder-text: var(--color-juno-text-high-raw); - --color-textinput-focus-border: var(--color-accent-raw); - --color-textinput-autofill-text: var(--color-black); - --color-textinput-autofill-bg: var(--color-juno-blue-1); - --color-textinput-autofill-label: var(--color-black); - // DT Select - --color-select-bg: var(--color-background-lvl-4-raw); - // DT Checkbox - --color-checkbox-bg: var(--color-background-lvl-5-raw); - --color-checkbox-checked-color: var(--color-accent-raw); - // DT Radio - --color-radio-bg: var(--color-background-lvl-5-raw); - --color-radio-checked-bg: var(--color-accent-raw); - // DT Switch - --color-switch-default-border: var(--color-juno-text-high-raw); - --color-switch-handle-bg: var(--color-juno-text-high-raw); - --color-switch-handle-checked-bg: var(--color-accent-raw); - --color-switch-hover-border: var(--color-accent-raw); - // DT Required - --color-required-bg: var(--color-accent-raw); - // DT Spinner - --color-spinner-primary: var(--color-accent-raw); - // DT Syntax Highlighting - --color-syntax-highlight-base00: var(--color-codeblock-bg); // bg - --color-syntax-highlight-base01: var(--color-juno-grey-blue-3); // ? - --color-syntax-highlight-base02: #bbb; // lines and boxes - --color-syntax-highlight-base03: var(--color-sap-grey-3); - --color-syntax-highlight-base04: var(--color-sap-grey-3); - --color-syntax-highlight-base05: #dedfe0; - --color-syntax-highlight-base06: red; - --color-syntax-highlight-base07: #dedfe0; - --color-syntax-highlight-base08: var(--color-juno-grey-blue-6); // NULL - --color-syntax-highlight-base09: var(--color-juno-blue-4); // String value - --color-syntax-highlight-base0A: var(--color-juno-grey-blue-6); // NaN - --color-syntax-highlight-base0B: var(--color-juno-blue-4); // float value - --color-syntax-highlight-base0C: var(--color-sap-gold); // array index - --color-syntax-highlight-base0D: var(--color-sap-gold); // DT expanded icon - --color-syntax-highlight-base0E: var(--color-juno-blue-4); // DT bool + collapsed icon - --color-syntax-highlight-base0F: var(--color-juno-blue-4); // integer value - // DT DataGrid - --color-datagridrow-selected: var(--color-accent-raw); - // DT DataList - --color-datalist-row-border: var(--color-background-lvl-1-raw); - --color-datalistrow-selected: var(--color-accent-raw); - // DT CodeBlock - --color-codeblock-bg: var(--color-background-lvl-2-raw); - --color-codeblock-bar-border: var(--color-background-lvl-4-raw); - // DT Panel - --color-panel-bg: rgba(var(--color-juno-grey-blue-11-raw), 0.75); - - // DT TabNavigation - --color-tabnavigation-top-bg: var(--color-juno-grey-blue-8-raw); - --color-tabnavigation-content-bottom-border: var(--color-background-lvl-4-raw); - // DT Filters - --color-filters-bg: var(--color-background-lvl-1-raw); - --color-filter-input-bg: var(--color-background-lvl-0-raw); - --color-filter-input-border: var(--color-background-lvl-4-raw); - --color-filter-input-textinput-bg: transparent; - --color-filter-pill-border: var(--color-background-lvl-4-raw); - --color-filter-pill-key-bg: var(--color-background-lvl-4-raw); - // DT Modal - --color-modal-backdrop-bg: rgba(60, 70, 75, 0.6); - // DT Box - --color-box-bg: var(--color-background-lvl-1); - --color-box-border: var(--color-background-lvl-3); - // DT SideNavigation - --color-sidenavigation-item-active: var(--color-white); - --color-sidenavigation-item-active-bg: var(--color-background-lvl-0); - // DT TopNavigation - --color-topnavigation-item-active: var(--color-white); - --color-topnavigation-item-bg: var(--color-juno-grey-blue-7); - --color-topnavigation-item-active-bg: var(--color-juno-grey-blue-2); - // DT Datepicker - --color-datepicker-calendar-bg: var(--color-background-lvl-1); -} - -/* ----- DARK THEME END ----- */ - -// Grid configuration -:root, -:host { - --grid-columns: 12; - --grid-row-margin-x: -0.5rem; - --grid-column-flex-grow: 0; - --grid-column-flex-shrink: 1; - --grid-column-flex-basis: auto; - --grid-column-default-width: 8.333333%; -} \ No newline at end of file diff --git a/libs/juno-ui-components/package.json b/libs/juno-ui-components/package.json deleted file mode 100644 index c77e16232..000000000 --- a/libs/juno-ui-components/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "name": "juno-ui-components", - "private": true, - "main": "build/index.js", - "module": "build/index.js", - "source": "src/index.js", - "style": "build/lib/variables.css", - "version": "2.14.0", - "files": [ - "src/colors.css", - "tailwind.config.js" - ], - "author": "UI-Team", - "contributors": [ - "Esther Schmitz", - "Franz Heidl" - ], - "repository": "https://github.com/sapcc/juno/tree/main/libs/juno-ui-components", - "license": "Apache-2.0", - "devDependencies": { - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@floating-ui/react": "^0.25.1", - "@headlessui-float/react": "^0.11.2", - "@headlessui/react": "^1.7.15", - "@material-design-icons/svg": "^0.14.4", - "@mdx-js/react": "^1.6.22", - "@rollup/plugin-babel": "^6.0.3", - "@rollup/plugin-commonjs": "^24.0.0", - "@rollup/plugin-node-resolve": "^13.1.3", - "@storybook/addon-docs": "^7.5.3", - "@storybook/addon-essentials": "^7.5.3", - "@storybook/addon-interactions": "^7.5.3", - "@storybook/addon-links": "^7.5.3", - "@storybook/addon-mdx-gfm": "^7.5.3", - "@storybook/addon-postcss": "^2.0.0", - "@storybook/blocks": "^7.5.3", - "@storybook/manager-api": "^7.5.3", - "@storybook/react": "^7.5.3", - "@storybook/react-webpack5": "^7.5.3", - "@storybook/testing-library": "^0.2.2", - "@svgr/rollup": "^6.2.1", - "@svgr/webpack": "^6.2.1", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "add": "^2.0.6", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-loader": "^8.2.3", - "css-loader": "^6.6.0", - "focus-trap-react": "^10.2.3", - "glob": "^8.1.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "node-sass-glob-importer": "^3.0.2", - "postcss": "^8.4.6", - "postcss-loader": "^6.2.1", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-jss": "^10.8.1", - "react-tabs": "^4.2.1", - "regenerator-runtime": "^0.13.9", - "rollup": "^3.4.0", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-babel-minify": "^10.0.0", - "rollup-plugin-delete": "^2.0.0", - "rollup-plugin-includepaths": "^0.2.4", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-postcss": "^4.0.2", - "sass": "^1.49.7", - "sass-loader": "^12.4.0", - "storybook": "^7.6.17", - "style-loader": "^3.3.1", - "tailwindcss": "^3.3.1", - "flatpickr": "4.6.13" - }, - "peerDependencies": { - "prop-types": "15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0" - }, - "scripts": { - "storybook": "storybook dev -p $APP_PORT --ci --no-open", - "build-storybook": "storybook build", - "build": "rollup -c", - "test": "jest", - "test:watch": "jest --watchAll" - }, - "jest": { - "verbose": true, - "testEnvironment": "jsdom", - "transformIgnorePatterns": [ - "node_modules/(?!(react-merge-refs)/)" - ], - "setupFilesAfterEnv": [ - "./setupTests.js" - ], - "transform": { - "\\.[jt]sx?$": "babel-jest", - "\\.mjs$": "babel-jest", - "^.+\\.svg$": "<rootDir>/test/__mocks__/svg.js" - }, - "moduleNameMapper": { - "^.+\\.(css|scss)$": "<rootDir>/test/__mocks__/styleMock.js", - "@material-design-icons/svg/.+\\.svg$": "<rootDir>/test/__mocks__/svgLib.js" - } - } -} diff --git a/libs/juno-ui-components/postcss.config.js b/libs/juno-ui-components/postcss.config.js deleted file mode 100644 index 0627e0e4b..000000000 --- a/libs/juno-ui-components/postcss.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - plugins: [require("tailwindcss"), require("autoprefixer")], -} diff --git a/libs/juno-ui-components/rollup.config.js b/libs/juno-ui-components/rollup.config.js deleted file mode 100644 index c38f584ec..000000000 --- a/libs/juno-ui-components/rollup.config.js +++ /dev/null @@ -1,153 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const { babel } = require("@rollup/plugin-babel") -const del = require("rollup-plugin-delete") -const postcss = require("rollup-plugin-postcss") -const pkg = require("./package.json") -const fs = require("fs") -const minify = require("rollup-plugin-babel-minify") -const analyze = require("rollup-plugin-analyzer") -const { nodeResolve } = require("@rollup/plugin-node-resolve") -const commonjs = require("@rollup/plugin-commonjs") -const svgr = require("@svgr/rollup") -const glob = require("glob") -const { - generateTailwindThemeClassesJson, -} = require("./src/docs/ColorPalette/generateTailwindThemeClassesJson") - -// generates tailwind classes for documentation usages. -generateTailwindThemeClassesJson() - -// IMPORTANT! -// package.json is single source of truth policy - -if (!/.+\/.+\.js/.test(pkg.module)) - throw new Error( - "module value is incorrect, use DIR/FILE.js like build/index.js" - ) -const buildDir = pkg.module.slice(0, pkg.module.lastIndexOf("/")) -// filename is extracted from module key in package.json -// because of single source of truth policy -const filename = pkg.module.slice( - pkg.module.lastIndexOf("/") + 1, - pkg.module.lastIndexOf(".") -) - -const isProduction = process.env.NODE_ENV === "production" -const IGNORE_EXTERNALS = process.env.IGNORE_EXTERNALS === "true" - -// define plugins here to use it in different configs -const plugins = [ - svgr({ - svgo: false, - titleProp: true, - }), - postcss({ - config: { - path: "./postcss.config.js", - }, - extract: false, - minimize: false, //true, - inject: false, - extensions: [".scss", ".css"], - use: ["sass", "glob-imports"], - loaders: [ - // custom loader!!! to load all scss files in globals.scss - { - name: "glob-imports", - test: /\.(sass|scss)$/, - process({ code }) { - // handle glob import - return new Promise((resolve, reject) => { - const match = [...code.matchAll(/@import\s+(.*\*+.*);/g)] - match.forEach((m) => { - const files = glob.sync("./src/" + m[1].replace(/"|'/g, "")) - let result = files.map((f) => `@import "${f}";`).join("\n") - code = code.replace(m[0], result) - }) - resolve({ code }) - }) - }, - }, - ], - }), - - nodeResolve(), - babel({ - // babelrc: false, - // // exclude: "node_modules/**", - // presets: ["@babel/preset-react"], - babelHelpers: "bundled", - }), - commonjs(), - - minify({ comments: false }), - analyze({ - summaryOnly: true, - limit: 0, - }), -] - -const config = [ - // bundle all components - { - input: fs.readdirSync("./src/components").reduce((map, file) => { - map[file] = `src/components/${file}/index.js` - return map - }, {}), - output: [ - // { dir: "lib", format: "cjs", preserveModules: false }, - { - dir: buildDir, - format: "esm", - preserveModules: false, - compact: true, - }, - ], - - plugins: [del({ targets: [`${buildDir}/**/*`] }), ...plugins], - }, - { - input: "tailwind.config.js", - output: { - file: `${buildDir}/lib/tailwind.config.js`, - }, - }, - { - input: pkg.source, - output: { - file: `${buildDir}/index.js`, - format: "esm", - preserveModules: false, - compact: true, - }, - plugins, - - external: ["react", "react-dom", "prop-types"].concat( - isProduction && !IGNORE_EXTERNALS - ? Object.keys(pkg.peerDependencies || {}) - : [] - ), - }, - { - input: "lib/variables.scss", - output: { - file: `${buildDir}/lib/variables.css`, - }, - plugins: [ - postcss({ - config: { - path: "./postcss.config.js", - }, - extract: true, - minimize: true, - inject: false, - }), - ], - }, -] - -module.exports = config diff --git a/libs/juno-ui-components/setupTests.js b/libs/juno-ui-components/setupTests.js deleted file mode 100644 index d59db8eee..000000000 --- a/libs/juno-ui-components/setupTests.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom" -import "regenerator-runtime/runtime" - -/* -Mock ResizeObserver. -Required to test Radix-UI-based components. -https://github.com/ZeeCoder/use-resize-observer/issues/40 -https://stackoverflow.com/questions/64558062/how-to-mock-resizeobserver-to-work-in-unit-tests-using-react-testing-library -*/ -class ResizeObserver { - observe() {} - unobserve() {} - disconnect() {} -} - -window.ResizeObserver = ResizeObserver - - -/** - * Required to test Radix-UI-based components: - * JSDOM doesn't implement PointerEvent so we need to mock our own implementation - * Default to mouse left click interaction - * https://github.com/radix-ui/primitives/issues/1822 - * https://github.com/jsdom/jsdom/pull/2666 - */ - -class MockPointerEvent extends Event { - constructor(type, props) { - super(type, props) - this.button = props.button || 0 - this.ctrlKey = props.ctrlKey || false - this.pointerType = props.pointerType || "mouse" - } -} - -window.PointerEvent = MockPointerEvent -window.HTMLElement.prototype.scrollIntoView = jest.fn() -window.HTMLElement.prototype.releasePointerCapture = jest.fn() -window.HTMLElement.prototype.hasPointerCapture = jest.fn() diff --git a/libs/juno-ui-components/src/components/AppBody/AppBody.component.js b/libs/juno-ui-components/src/components/AppBody/AppBody.component.js deleted file mode 100644 index f00ad41c8..000000000 --- a/libs/juno-ui-components/src/components/AppBody/AppBody.component.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const containerStyles = ` - jn-flex - jn-flex-col - jn-h-full -` - -/** - * Only needed if you want to build your app's scaffold manually. In most cases it is better to use the AppShell component instead. - * Body of the app. Treat this like the body tag of an html page. - */ -export const AppBody = ({ className, children, ...props }) => { - return ( - <div - className={`juno-body ${containerStyles} ${className}`} - {...props} - > - {children} - </div> - ) -} - -AppBody.propTypes = { - /** Add custom class name */ - className: PropTypes.string, -} - -AppBody.defaultProps = { - className: "", -} diff --git a/libs/juno-ui-components/src/components/AppBody/AppBody.stories.js b/libs/juno-ui-components/src/components/AppBody/AppBody.stories.js deleted file mode 100644 index 964f638a3..000000000 --- a/libs/juno-ui-components/src/components/AppBody/AppBody.stories.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { AppBody } from './index.js'; - -export default { - title: 'Internal/AppBody', - component: AppBody, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = (args) => <AppBody {...args}></AppBody>; - -export const Body = { - render: Template, - - parameters: { - docs: { - description: { - story: - "Only needed if you want to build your app's scaffold manually. In most cases it is better to use the AppShell component instead. Body of the app. Treat this like the body tag of an html page.", - }, - }, - }, - - args: {}, -}; diff --git a/libs/juno-ui-components/src/components/AppBody/AppBody.test.js b/libs/juno-ui-components/src/components/AppBody/AppBody.test.js deleted file mode 100644 index e7c4faf55..000000000 --- a/libs/juno-ui-components/src/components/AppBody/AppBody.test.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { AppBody } from "./index" - -describe("AppBody", () => { - test("renders an app body", async () => { - render(<AppBody data-testid="app-body" />) - expect(screen.getByTestId("app-body")).toBeInTheDocument() - expect(screen.getByTestId("app-body")).toHaveClass("juno-body") - }) - - test("renders an app body with flex column", async () => { - render(<AppBody data-testid="app-body" />) - expect(screen.getByTestId("app-body")).toBeInTheDocument() - expect(screen.getByTestId("app-body")).toHaveClass( - "jn-flex-col" - ) - }) - - test("renders an app body with full height", async () => { - render(<AppBody data-testid="app-body" />) - expect(screen.getByTestId("app-body")).toBeInTheDocument() - expect(screen.getByTestId("app-body")).toHaveClass("jn-h-full") - }) - - test("renders children as passed", async () => { - render( - <AppBody data-testid="app-body"> - <button></button> - </AppBody> - ) - expect(screen.getByTestId("app-body")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render( - <AppBody data-testid="app-body" className="my-custom-classname" /> - ) - expect(screen.getByTestId("app-body")).toBeInTheDocument() - expect(screen.getByTestId("app-body")).toHaveClass( - "my-custom-classname" - ) - }) - - test("renders all props", async () => { - render(<AppBody data-testid="app-body" data-lolol="some-prop" />) - expect(screen.getByTestId("app-body")).toBeInTheDocument() - expect(screen.getByTestId("app-body")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/AppBody/index.js b/libs/juno-ui-components/src/components/AppBody/index.js deleted file mode 100644 index a26de8d50..000000000 --- a/libs/juno-ui-components/src/components/AppBody/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { AppBody } from "./AppBody.component" diff --git a/libs/juno-ui-components/src/components/AppIntro/AppIntro.component.js b/libs/juno-ui-components/src/components/AppIntro/AppIntro.component.js deleted file mode 100644 index d9559e857..000000000 --- a/libs/juno-ui-components/src/components/AppIntro/AppIntro.component.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const introStyles = ` - jn-pt-16 - jn-pb-14 - jn-text-xl - in-pr-[45%] -` - -/** - * OBSOLETE: Will be deleted! - */ -export const AppIntro = ({ className, children, ...props }) => { - return ( - <div className={`juno-app-intro ${introStyles} ${className}`} {...props}> - {children} - </div> - ) -} - -AppIntro.propTypes = { - /** Add custom class name */ - className: PropTypes.string, -} - -AppIntro.defaultProps = { - className: "", -} diff --git a/libs/juno-ui-components/src/components/AppIntro/AppIntro.stories.js b/libs/juno-ui-components/src/components/AppIntro/AppIntro.stories.js deleted file mode 100644 index 7516f13e0..000000000 --- a/libs/juno-ui-components/src/components/AppIntro/AppIntro.stories.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { AppIntro } from './index.js'; - -export default { - title: 'Layout/AppIntro', - component: AppIntro, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = (args) => ( - <AppIntro {...args}> - Intro text here. Explain what this app is in a short lead text. Lorem ipsum dolor sit amet. At - vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata - sanctus est. Lorem ipsum dolor sit amet. - </AppIntro> -); - -export const Intro = { - render: Template, - - parameters: { - docs: { - description: { - story: 'OBSOLETE: Will be deleted!', - }, - }, - }, - - args: {}, -}; diff --git a/libs/juno-ui-components/src/components/AppIntro/AppIntro.test.js b/libs/juno-ui-components/src/components/AppIntro/AppIntro.test.js deleted file mode 100644 index 10650dbaf..000000000 --- a/libs/juno-ui-components/src/components/AppIntro/AppIntro.test.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { AppIntro } from "./index" - -describe("AppIntro", () => { - test("renders an app intro", async () => { - render(<AppIntro data-testid="app-intro" />) - expect(screen.getByTestId("app-intro")).toBeInTheDocument() - expect(screen.getByTestId("app-intro")).toHaveClass("juno-app-intro") - }) - - test("renders children as passed", async () => { - render( - <AppIntro data-testid="app-intro"> - <button></button> - </AppIntro> - ) - expect(screen.getByTestId("app-intro")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<AppIntro data-testid="app-intro" className="my-custom-classname" />) - expect(screen.getByTestId("app-intro")).toBeInTheDocument() - expect(screen.getByTestId("app-intro")).toHaveClass("my-custom-classname") - }) - - test("renders all props", async () => { - render(<AppIntro data-testid="app-intro" data-lolol="some-prop" />) - expect(screen.getByTestId("app-intro")).toBeInTheDocument() - expect(screen.getByTestId("app-intro")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/AppIntro/index.js b/libs/juno-ui-components/src/components/AppIntro/index.js deleted file mode 100644 index 57440f414..000000000 --- a/libs/juno-ui-components/src/components/AppIntro/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { AppIntro } from "./AppIntro.component" diff --git a/libs/juno-ui-components/src/components/AppShell/AppShell.component.js b/libs/juno-ui-components/src/components/AppShell/AppShell.component.js deleted file mode 100644 index c6626778d..000000000 --- a/libs/juno-ui-components/src/components/AppShell/AppShell.component.js +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { AppBody } from "../AppBody/index" -import { PageHeader } from "../PageHeader/index" -import { MainContainer } from "../MainContainer/index" -import { MainContainerInner } from "../MainContainerInner/index" -import { ContentContainer } from "../ContentContainer/index" -import { ContentHeading } from "../ContentHeading/index" -import { ContentArea } from "../ContentArea/index" -import { PageFooter } from "../PageFooter/index" -import { SideNavigation } from "../SideNavigation/" - -/** - * Body of the app. Treat this like the body tag of an html page. - */ -export const AppShell = ({ - children, - className, - contentHeading, - embedded, - fullWidthContent, - pageHeader, - pageFooter, - sideNavigation, - topNavigation, - ...props -}) => { - - // Determine whether to pass set fullWidth to true in embedded mode or not: - // In non-embedded mode, fullWidthContent should default to false, unless explicitly set to true. - // In embedded mode though, fullWidthContent should default to true, unless explicitly passed as false. - - return ( - <AppBody className={className} {...props}> - - { contentHeading && contentHeading.length ? - console.warn("AppShell: The contentHeading prop is obsolete and will be removed in a future version. In order to render a content heading, use a ContentHeading element as a child in your main content.") - : - "" - } - - { embedded ? - <MainContainer> - <MainContainerInner fullWidth={fullWidthContent === false ? false : true} hasSideNav={ sideNavigation ? true : false }> - { sideNavigation && sideNavigation } - <ContentContainer> - {children} - </ContentContainer> - </MainContainerInner> - </MainContainer> - - : - - <> - { pageHeader && (typeof pageHeader === 'string' || pageHeader instanceof String) ? - <PageHeader heading={pageHeader} /> - : - pageHeader - } - { topNavigation && topNavigation } - {/* Wrap everything except page header and footer and navigations in a main container. Add top margin to MainContainerInner as we are not in embedded mode here. */} - <MainContainer> - <MainContainerInner fullWidth={fullWidthContent === true ? true : false } hasSideNav={ sideNavigation ? true : false } className="jn-mt-[3.875rem]"> - { sideNavigation && sideNavigation } - {/* Content Container. This is the place to add the app's main content. Render left margin only if no SideNavigation is present. */} - <ContentContainer className={ sideNavigation ? "" : "jn-ml-8"}> - {children} - </ContentContainer> - </MainContainerInner> - </MainContainer> - - { pageFooter ? - pageFooter - : - <PageFooter /> - } - </> - } - - </AppBody> - ) -} - -AppShell.propTypes = { - /** Pass either the `<PageHeader>` component or if you don't need to add any content to the page header pass a string to be used as the app name in the standard page header. */ - pageHeader: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.element - ]), - /** Optional. If specified pass a `<PageFooter>` component. If undefined will use default PageFooter */ - pageFooter: PropTypes.element, - /** Optional. If specified expects a `<TopNavigation>` component. If undefined no top navigation is rendered. */ - topNavigation: PropTypes.element, - /** Optional. If specified expects a `<SideNavigation>` component. If undefined no side navigation is rendered. */ - sideNavigation: PropTypes.element, - /** OBSOLETE: The contentHeading prop is obsolete and will be removed in a future version. In order to render a content heading, use a `<ContentHeading>` element as a child in your main content. */ - contentHeading: PropTypes.string, - /** Optional: Defaults to false. Set embedded to true if app is to be rendered embedded in another app/page. - * In this case only the content area and children are rendered, no header/footer or remaining layout components */ - embedded: PropTypes.bool, - /** Whether the main page / view content can spread over the full available width of the viewport or not. Default is `false` (resulting in a width-constrained, centred content column on very wide screens) UNLESS the AppShell is rendered with embedded as true, then the main content will be full-width by default. In embedded mode, `fullWidthContent` can still be passed as `false` explicitly. */ - fullWidthContent: PropTypes.bool, - /** Add a custom class name */ - className: PropTypes.string, -} - -AppShell.defaultProps = { - pageHeader: <PageHeader />, - pageFooter: <PageFooter />, - topNavigation: undefined, - sideNavigation: undefined, - contentHeading: "", - embedded: false, - fullWidthContent: undefined, - className: "", -} diff --git a/libs/juno-ui-components/src/components/AppShell/AppShell.stories.js b/libs/juno-ui-components/src/components/AppShell/AppShell.stories.js deleted file mode 100644 index 4e94b7a70..000000000 --- a/libs/juno-ui-components/src/components/AppShell/AppShell.stories.js +++ /dev/null @@ -1,202 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -import { AppShell } from "./index.js" -import { PageHeader } from "../PageHeader/index" -import { PageFooter } from "../PageFooter/index" -import { SideNavigation } from "../SideNavigation/" -import { SideNavigationItem } from "../SideNavigationItem/" -import { TopNavigation } from "../TopNavigation/index" -import { TopNavigationItem } from "../TopNavigationItem/index" -import { TabNavigation } from "../TabNavigation/index" -import { TabNavigationItem } from "../TabNavigationItem/index" -import { ContentHeading } from "../ContentHeading/index" - -export default { - title: "Layout/AppShell", - component: AppShell, - argTypes: { - pageHeader: { - control: false - }, - pageFooter: { - control: false - }, - topNavigation: { - control: false - }, - sideNavigation: { - control: false - }, - children: { - control: false - }, - }, -} - -const Template = ({children, ...args}) => <AppShell {...args}> - { children } - </AppShell> - -export const Default = Template.bind({}) -Default.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with content heading and default header and footer.", - }, - }, -} -Default.args = { - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const AppName = Template.bind({}) -AppName.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with provided app name for the header and default footer.", - }, - }, -} -AppName.args = { - pageHeader: "My App", - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const CustomPageHeader = Template.bind({}) -CustomPageHeader.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with custom page header and default footer.", - }, - }, -} -CustomPageHeader.args = { - pageHeader: <PageHeader heading="My Custom Header" />, - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const CustomPageFooter = Template.bind({}) -CustomPageFooter.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with default header and custom footer.", - }, - }, -} -CustomPageFooter.args = { - pageFooter: <PageFooter>My custom footer</PageFooter>, - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const WithSideNavigation = Template.bind({}) -WithSideNavigation.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with a side navigation.", - }, - }, -} -WithSideNavigation.args = { - sideNavigation: <SideNavigation> - <SideNavigationItem active label="Item 1"/> - <SideNavigationItem label="Item 2" /> - <SideNavigationItem label="Item 3" /> - </SideNavigation>, - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const WithTopNavigation = Template.bind({}) -WithTopNavigation.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with top navigation.", - }, - }, -} -WithTopNavigation.args = { - topNavigation: <TopNavigation> - <TopNavigationItem - icon="home" - label="Home" - /> - <TopNavigationItem - active - label="Navigation Item" - /> - </TopNavigation>, - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const WithSideAndTopNavigation = Template.bind({}) -WithSideAndTopNavigation.parameters = { - docs: { - description: { - story: - "Responsive shell for your application with both a top navigation and side navigation.", - }, - }, -} -WithSideAndTopNavigation.args = { - topNavigation: <TopNavigation> - <TopNavigationItem - icon="home" - label="Home" - /> - <TopNavigationItem - active - label="Navigation Item" - /> - </TopNavigation>, - sideNavigation: <SideNavigation> - <SideNavigationItem active label="Item 1"/> - <SideNavigationItem label="Item 2" /> - <SideNavigationItem label="Item 3" /> - </SideNavigation>, - children: [ - <ContentHeading key="1">My Page</ContentHeading>, - <p key="2">Content goes here</p> - ] -} - -export const WithTabNavigation = Template.bind({}) -WithTabNavigation.parameters = {} -WithTabNavigation.args = { - children: [ - <TabNavigation key="1"> - <TabNavigationItem label="Item 1" active /> - <TabNavigationItem label="Item 2" /> - <TabNavigationItem label="Item 3" /> - </TabNavigation>, - <ContentHeading key="2">My Page</ContentHeading> - ] - -} diff --git a/libs/juno-ui-components/src/components/AppShell/AppShell.test.js b/libs/juno-ui-components/src/components/AppShell/AppShell.test.js deleted file mode 100644 index 7c6671ef9..000000000 --- a/libs/juno-ui-components/src/components/AppShell/AppShell.test.js +++ /dev/null @@ -1,143 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { cleanup, render, screen } from "@testing-library/react" -import { AppShell } from "./index" -import { PageHeader } from "../PageHeader/PageHeader.component" -import { PageFooter } from "../PageFooter/PageFooter.component" -import { TopNavigation } from "../TopNavigation/TopNavigation.component" -import { SideNavigation } from "../SideNavigation/SideNavigation.component" - -describe("AppShell", () => { - - afterEach(() => { - cleanup(); - jest.clearAllMocks() - }) - - test("renders an app shell", async () => { - render(<AppShell data-testid="app-shell" />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByTestId("app-shell")).toHaveClass("juno-body") - }) - - test("logs a deprecation warning to the console when user passed obsolete contentHeading prop", async () => { - const consoleWarnSpy = jest.spyOn(console, 'warn') - render(<AppShell contentHeading="My Content Heading" />) - expect(consoleWarnSpy).toHaveBeenCalled() - expect(consoleWarnSpy).toHaveBeenCalledWith( - "AppShell: The contentHeading prop is obsolete and will be removed in a future version. In order to render a content heading, use a ContentHeading element as a child in your main content." - ) - }) - - test("renders an app shell with page header passed as String", async () => { - render(<AppShell data-testid="app-shell" pageHeader="My Page Header" />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByText("My Page Header")).toBeInTheDocument() - }) - - test("renders an app shell with page header passed as component", async () => { - render(<AppShell data-testid="app-shell" pageHeader={<PageHeader data-testid="page-header" heading="My Page Header" />} />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByTestId("page-header")).toBeInTheDocument() - expect(screen.getByText("My Page Header")).toBeInTheDocument() - }) - - test("renders an app shell with custom page footer passed as component", async () => { - render(<AppShell data-testid="app-shell" pageFooter={<PageFooter data-testid="page-footer">My Page Footer</PageFooter>} />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByTestId("page-footer")).toBeInTheDocument() - expect(screen.getByText("My Page Footer")).toBeInTheDocument() - }) - - test("renders an app shell with top navigation passed as component", async () => { - render(<AppShell data-testid="app-shell" topNavigation={<TopNavigation data-testid="top-navigation"></TopNavigation>} />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByTestId("top-navigation")).toBeInTheDocument() - }) - - test("renders an app shell with a side navigation passed as a component", async () => { - render( - <AppShell - data-testid="app-shell" - sideNavigation={<SideNavigation />} - /> - ) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByRole("navigation")).toBeInTheDocument() - expect(screen.getByRole("navigation")).toHaveClass("juno-sidenavigation") - }) - - test("renders an app shell with both a side and a top navigation as passed", async () => { - render( - <AppShell - data-testid="app-shell" - sideNavigation={<SideNavigation data-testid="side-nav" />} - topNavigation={<TopNavigation data-testid="top-nav" />} - /> - ) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getAllByRole("navigation")).toHaveLength(2) - expect(screen.getByTestId("side-nav")).toBeInTheDocument() - expect(screen.getByTestId("top-nav")).toBeInTheDocument() - }) - - test("renders an embeddable app shell without page heading or footer", async () => { - render(<AppShell data-testid="app-shell" embedded={true} pageHeader={<PageHeader data-testid="page-header" heading="My Page Heading" />} pageFooter={<PageFooter data-testid="page-footer">My Page Footer</PageFooter>} />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.queryByTestId("page-header")).not.toBeInTheDocument() - expect(screen.queryByText("My Page Heading")).not.toBeInTheDocument() - expect(screen.queryByTestId("page-footer")).not.toBeInTheDocument() - expect(screen.queryByText("My Page Footer")).not.toBeInTheDocument() - }) - - test("renders children as passed", async () => { - render( - <AppShell data-testid="app-shell"> - <button></button> - </AppShell> - ) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - - // The following test whether the MainContainerInner element rendered by AppShell does the right thing depending of props passed to AppShell: - test("does not render a fullwidth main container in non-embedded mode by default", async () => { - render(<AppShell><button></button></AppShell>) - expect(document.querySelector(".juno-main-inner")).not.toHaveClass("juno-main-inner-fullwidth") - }) - - test("renders a fullwidth main container in non-embedded mode if passed explicitly", async () => { - render(<AppShell fullWidthContent={true}><button></button></AppShell>) - expect(document.querySelector(".juno-main-inner")).toHaveClass("juno-main-inner-fullwidth") - }) - - test("renders a fullwidth main inner container in embedded mode by default", async () => { - render(<AppShell embedded><button></button></AppShell>) - expect(document.querySelector(".juno-main-inner")).toHaveClass("juno-main-inner-fullwidth") - }) - - test("renders a non-fullwidth, size-restricted main inner container in embedded mode if passed explicitly", async () => { - render(<AppShell embedded fullWidthContent={false}><button></button></AppShell>) - expect(document.querySelector(".juno-main-inner")).not.toHaveClass("juno-main-inner-fullwidth") - }) - - test("renders a custom className", async () => { - render(<AppShell data-testid="app-shell" className="my-custom-classname" />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByTestId("app-shell")).toHaveClass("my-custom-classname") - }) - - test("renders all props", async () => { - render(<AppShell data-testid="app-shell" data-lolol="some-prop" />) - expect(screen.getByTestId("app-shell")).toBeInTheDocument() - expect(screen.getByTestId("app-shell")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/AppShell/index.js b/libs/juno-ui-components/src/components/AppShell/index.js deleted file mode 100644 index d6146507a..000000000 --- a/libs/juno-ui-components/src/components/AppShell/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { AppShell } from "./AppShell.component" diff --git a/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.component.js b/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.component.js deleted file mode 100644 index eab5cf74a..000000000 --- a/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.component.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -import { StyleProvider } from "../StyleProvider/StyleProvider.component" -import { ShadowRoot } from "../ShadowRoot/ShadowRoot.component" -import { PortalProvider } from "../PortalProvider/PortalProvider.component" - -/** - * This provider acts as a wrapper for Juno apps. It renders a StyleProvider and PortalProvider - */ -export const AppShellProvider = ({ - shadowRoot, - shadowRootMode, - stylesWrapper, - theme, - children, -}) => { - const Wrapper = React.useCallback( - ({ children }) => - shadowRoot ? ( - <ShadowRoot mode={shadowRootMode}>{children}</ShadowRoot> - ) : ( - children - ), - [shadowRoot, shadowRootMode] - ) - return ( - <Wrapper> - <StyleProvider - theme={theme} - stylesWrapper={shadowRoot ? "inline" : stylesWrapper} - > - <PortalProvider>{children}</PortalProvider> - </StyleProvider> - </Wrapper> - ) -} - -AppShellProvider.propTypes = { - /** Whether the app is rendered inside a ShadowRoot. Only choose false if the app is meant to run as a stand-alone application. */ - shadowRoot: PropTypes.bool, - /** Shadow root mode */ - shadowRootMode: PropTypes.oneOf(["open", "closed"]), - /** Where app stylesheets are imported. This is only relevant if shadowRoot === false. If you use a ShadowRoot the styles must be inline. */ - stylesWrapper: PropTypes.oneOf(["head", "inline"]), - /** theme: theme-dark or theme-light */ - theme: PropTypes.string, -} - -// define default values -AppShellProvider.defaultProps = { - shadowRoot: true, - shadowRootMode: "open", - stylesWrapper: "inline", - theme: null, -} diff --git a/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.stories.js b/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.stories.js deleted file mode 100644 index 2e51c9beb..000000000 --- a/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.stories.js +++ /dev/null @@ -1,128 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { AppShellProvider } from '.'; -import { CodeBlock } from '../CodeBlock/index.js'; -import { Message } from '../Message/Message.component'; - -export default { - title: 'Layout/AppShellProvider', - component: AppShellProvider, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = (args) => <AppShellProvider {...args}>{args.children}</AppShellProvider>; - -export const Default = { - render: Template, - - args: { - children: [ - <Message key={0}>Juno styles are added inline</Message>, - <CodeBlock key={1}> - {` - export default (props) => { - return ( - <AppShellProvider> - <style>{/* app styles */}</style> - <App {...props} /> - </AppShellProvider> - ) - }`} - </CodeBlock>, - ], - }, -}; - -export const NoShadowRoot = { - render: Template, - - args: { - shadowRoot: false, - children: [ - <Message key={0}>No ShadowRoot, but the styles are still inline (default)</Message>, - <CodeBlock key={1}> - {` - export default (props) => { - return ( - <AppShellProvider shadowRoot={false}> - <style>{/* app styles */}</style> - <App {...props} /> - </AppShellProvider> - ) - }`} - </CodeBlock>, - ], - }, -}; - -export const StylesInHead = { - render: Template, - - args: { - shadowRoot: false, - stylesWrapper: 'head', - children: [ - <Message key={0}>Juno styles are added to the head tag</Message>, - <CodeBlock key={1}> - {` - export default (props) => { - return ( - <AppShellProvider shadowRoot={false} stylesWrapper="head"> - <style>{/* app styles */}</style> - <App {...props} /> - </AppShellProvider> - ) - }`} - </CodeBlock>, - ], - }, -}; - -export const StylesInline = { - render: Template, - - args: { - shadowRoot: false, - stylesWrapper: 'inline', - children: [ - <Message key={0}>Juno style are added inline</Message>, - <CodeBlock key={1}> - {` - export default (props) => { - return ( - <AppShellProvider shadowRoot={false} stylesWrapper="inline"> - <style>{/* app styles */}</style> - <App {...props} /> - </AppShellProvider> - ) - }`} - </CodeBlock>, - ], - }, -}; - -export const ThemeLight = { - render: Template, - - args: { - theme: 'theme-light', - children: [ - <Message key={0}>Light Theme</Message>, - <CodeBlock key={1}>{` - <AppShellProvider theme="theme-light"> - <style>{/* app styles */}</style> - <App> - {/* App Body */} - </App> - </AppShellProvider>`}</CodeBlock>, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.test.js b/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.test.js deleted file mode 100644 index 909cdda7d..000000000 --- a/libs/juno-ui-components/src/components/AppShellProvider/AppShellProvider.test.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { AppShellProvider } from "./index" - -describe("AppShellProvider", () => { - test("renders an AppShellProvider wrapper div with 'theme-dark' theme class by default", async () => { - render(<AppShellProvider shadowRoot={false} />) - expect(document.querySelector(".juno-app-body")).toHaveClass("theme-dark") - }) - - test("renders an AppShellProvider wrapper div with theme class as passed", async () => { - render(<AppShellProvider shadowRoot={false} theme="my-theme" />) - expect(document.querySelector("div.juno-app-body")).toHaveClass("my-theme") - }) -}) diff --git a/libs/juno-ui-components/src/components/AppShellProvider/index.js b/libs/juno-ui-components/src/components/AppShellProvider/index.js deleted file mode 100644 index 3af34f51c..000000000 --- a/libs/juno-ui-components/src/components/AppShellProvider/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { AppShellProvider } from "./AppShellProvider.component" diff --git a/libs/juno-ui-components/src/components/Badge/Badge.component.js b/libs/juno-ui-components/src/components/Badge/Badge.component.js deleted file mode 100644 index 4a0451dfb..000000000 --- a/libs/juno-ui-components/src/components/Badge/Badge.component.js +++ /dev/null @@ -1,135 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -import { Icon, knownIcons } from "../Icon/Icon.component.js" - -const badgeBaseStyles = ` - jn-rounded - jn-text-sm - jn-text-theme-default - jn-py-0.5 - jn-px-1 - jn-justify-center - jn-items-center -` - -const defaultStyles = `jn-bg-theme-badge-default` - -const infoStyles = `jn-bg-theme-info/25` - -const successStyles = `jn-bg-theme-success/25` - -const warningStyles = `jn-bg-theme-warning/25` - -const dangerStyles = `jn-bg-theme-danger/25` - -const criticalStyles = `jn-bg-theme-danger/70 jn-text-theme-high` - -const errorStyles = `jn-bg-theme-error/25` - -const iconStyles = `jn-mr-1 jn-items-center` - -const knownVariants = [ - "info", - "success", - "warning", - "danger", - "error", - "critical", -] - -const getVariantStyle = (variant) => { - switch (variant) { - case "info": - return infoStyles - case "success": - return successStyles - case "warning": - return warningStyles - case "danger": - return dangerStyles - case "error": - return errorStyles - case "critical": - return criticalStyles - default: - return defaultStyles - } -} - -/** -A Badge component to visually indicate properties or states of an entity. Besides the default, there are also semantic versions. Can optionally contain an icon to emphasize their meaning. -*/ -export const Badge = ({ - variant, - icon, - text, - className, - children, - ...props -}) => { - const getIcon = (icon, variant) => { - if (icon && knownIcons.includes(icon)) { - // if icon is an available icon, return as passed: - return icon - } else if (icon === true) { - // otherwise return icon as per variant if === "true" (map if not congruent!): - return variant - } else { - return null - } - } - - const getIconColor = (icon, variant) => { - if (icon === true) { - // if icon is set to true this means the icon will be chosen according to the variant. In this case make sure the color matches the variant - return `jn-text-theme-${variant}` - } else { - return undefined - } - } - - return ( - <span - className={` - juno-badge - juno-badge-${variant} - ${badgeBaseStyles} - ${getVariantStyle(variant)} - ${icon ? "jn-inline-flex" : ""} - ${className}`} - {...props} - > - {icon ? ( - <Icon - icon={getIcon(icon, variant)} - size="1.125rem" - className={`${iconStyles}`} - color={getIconColor(icon, variant)} - /> - ) : null} - {children ? children : text} - </span> - ) -} - -Badge.propTypes = { - variant: PropTypes.oneOf(["default", ...knownVariants]), - icon: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(knownIcons)]), - text: PropTypes.string, - className: PropTypes.string, - children: PropTypes.node, -} - -Badge.defaultProps = { - variant: "default", - icon: false, - text: "", - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/Badge/Badge.stories.js b/libs/juno-ui-components/src/components/Badge/Badge.stories.js deleted file mode 100644 index f58713f20..000000000 --- a/libs/juno-ui-components/src/components/Badge/Badge.stories.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { Badge } from './index'; -import { knownIcons } from '../Icon/Icon.component.js'; - -export default { - title: 'Components/Badge', - component: Badge, - parameters: { - text: 'default', - }, - argTypes: { - icon: { - options: ['default', ...knownIcons], - control: { type: 'select' }, - }, - children: { - control: false, - }, - }, -}; - -export const WithDefaultIcon = { - args: { - text: 'With Icon', - icon: true, - }, -}; - -export const Info = { - args: { - variant: 'info', - text: 'info', - }, -}; -export const InfoWithIcon = { - args: { - variant: 'info', - text: 'info', - icon: true, - }, -}; - -export const Success = { - args: { - variant: 'success', - text: 'success', - }, -}; - -export const SuccessWithIcon = { - args: { variant: 'success', text: 'success', icon: true }, -}; - -export const Warning = { args: { variant: 'warning', text: 'warning' } }; - -export const WarningWithIcon = { - args: { - variant: 'warning', - text: 'warning', - icon: true, - }, -}; - -export const Danger = { - args: { - variant: 'danger', - text: 'danger', - }, -}; - -export const DangerWithIcon = { - args: { - variant: 'danger', - text: 'danger', - icon: true, - }, -}; - -export const Error = { - args: { - variant: 'error', - text: 'error', - }, -}; - -export const ErrorWithIcon = { - args: { - variant: 'error', - text: 'error', - icon: true, - }, -}; - -export const DefaultWithAnyIcon = { - args: { - text: 'deleted', - icon: 'deleteForever', - }, -}; diff --git a/libs/juno-ui-components/src/components/Badge/Badge.test.js b/libs/juno-ui-components/src/components/Badge/Badge.test.js deleted file mode 100644 index aec1a239e..000000000 --- a/libs/juno-ui-components/src/components/Badge/Badge.test.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Badge } from "./index" - -describe("Badge", () => { - test("renders a badge with text as passed", async () => { - render(<Badge text="default badge" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveTextContent("default badge") - }) - - test("renders a badge with children", async () => { - render(<Badge data-testid="badge">Children inside</Badge>) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveTextContent("Children inside") - }) - - test("renders an info badge variant as passed", async () => { - render(<Badge variant="info" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveClass("juno-badge-info") - }) - - test("renders a success badge variant as passed", async () => { - render(<Badge variant="success" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveClass("juno-badge-success") - }) - - test("renders a warning badge variant as passed", async () => { - render(<Badge variant="warning" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveClass("juno-badge-warning") - }) - - test("renders a danger badge variant as passed", async () => { - render(<Badge variant="danger" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveClass("juno-badge-danger") - }) - - test("renders an error badge variant as passed", async () => { - render(<Badge variant="error" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveClass("juno-badge-error") - }) - - test("renders a critical badge variant as passed", async () => { - render(<Badge variant="critical" data-testid="badge" />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveClass("juno-badge-critical") - }) - - test("renders a default icon as passed", async () => { - render(<Badge icon={true} />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveClass("juno-icon-default") - }) - - test("renders the correct variant-specific icon as passed", async () => { - render(<Badge variant="warning" icon={true} />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveClass("juno-icon-warning") - }) - - test("renders any available icon as passed", async () => { - render(<Badge icon="comment" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveClass("juno-icon-comment") - }) - - test("renders all props as passed", async () => { - render(<Badge data-testid="badge" data-lolol={true} />) - expect(screen.getByTestId("badge")).toBeInTheDocument() - expect(screen.getByTestId("badge")).toHaveAttribute("data-lolol") - }) -}) diff --git a/libs/juno-ui-components/src/components/Badge/index.js b/libs/juno-ui-components/src/components/Badge/index.js deleted file mode 100644 index 8bc09e27b..000000000 --- a/libs/juno-ui-components/src/components/Badge/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Badge } from "./Badge.component" diff --git a/libs/juno-ui-components/src/components/Box/Box.component.js b/libs/juno-ui-components/src/components/Box/Box.component.js deleted file mode 100644 index 66847f38d..000000000 --- a/libs/juno-ui-components/src/components/Box/Box.component.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const boxstyles = ` - jn-text-sm - jn-rounded - jn-bg-theme-box-default - jn-border - jn-border-theme-box-default -` - -/* When adjusting the padding update tests accordingly as we are testing for rendering padded and unpadded Box */ -const boxpadding = ` - jn-py-1 - jn-px-2 -` -/** -A generic Box element with padding and a light border. - -Use for annotations, further explanations, and remarks where Message or InfoBox would be visually too emphasized. - -Will typically contain (small) text, but can be passed any child element(s) as desired. -*/ -export const Box = ({ - children, - unpad, - className, - ...props -}) => { - return ( - <div className={`juno-box ${boxstyles} ${ unpad ? "" : boxpadding } ${className}`} {...props} > - { children } - </div> - ) -} - -Box.propTypes = { - children: PropTypes.node, - unpad: PropTypes.bool, - className: PropTypes.string, -} - -Box.defaultProps = { - children: null, - unpad: false, - className: "", -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Box/Box.stories.js b/libs/juno-ui-components/src/components/Box/Box.stories.js deleted file mode 100644 index fcd15c1d8..000000000 --- a/libs/juno-ui-components/src/components/Box/Box.stories.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { Box } from './index'; - -export default { - title: 'Components/Box', - component: Box, - argTypes: {}, -}; - -export const Default = { - parameters: { - docs: { - description: { - story: 'A default Box', - }, - }, - }, - - args: { - children: 'Some content in a Box.', - }, -}; - -export const UnpaddedBox = { - parameters: { - docs: { - description: { - story: 'To remove the padding, set `unpad` prop.', - }, - }, - }, - - args: { - children: 'Unpadded Box', - unpad: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/Box/Box.test.js b/libs/juno-ui-components/src/components/Box/Box.test.js deleted file mode 100644 index d3c8c26ba..000000000 --- a/libs/juno-ui-components/src/components/Box/Box.test.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Box } from "./index" - - -describe("Box", () => { - - test("renders a box with children", async () => { - render(<Box data-testid="box" >Children inside</Box>) - expect(screen.getByTestId("box")).toBeInTheDocument() - expect(screen.getByTestId("box")).toHaveTextContent("Children inside") - }) - - test("renders a padded Box by default", async () => { - render(<Box data-testid="box"/>) - expect(screen.getByTestId("box")).toBeInTheDocument() - expect(screen.getByTestId("box")).toHaveClass('jn-py-1') - expect(screen.getByTestId("box")).toHaveClass('jn-px-2') - }) - - test("renders an unpadded Box as passed", async () => { - render(<Box data-testid="box" unpad />) - expect(screen.getByTestId("box")).toBeInTheDocument() - expect(screen.getByTestId("box")).not.toHaveClass('jn-py-1') - expect(screen.getByTestId("box")).not.toHaveClass('jn-px-2') - }) - - test("renders all classNames as passed", async () => { - render(<Box data-testid="box" className="my-custom-class"/>) - expect(screen.getByTestId("box")).toBeInTheDocument() - expect(screen.getByTestId("box")).toHaveClass('my-custom-class') - }) - - test("renders all props as passed", async () => { - render(<Box data-testid="box" data-lolol={true}/>) - expect(screen.getByTestId("box")).toBeInTheDocument() - expect(screen.getByTestId("box")).toHaveAttribute('data-lolol') - }) - -}) - diff --git a/libs/juno-ui-components/src/components/Box/index.js b/libs/juno-ui-components/src/components/Box/index.js deleted file mode 100644 index 44663c5dc..000000000 --- a/libs/juno-ui-components/src/components/Box/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Box } from "./Box.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.component.js b/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.component.js deleted file mode 100644 index b7d8c182e..000000000 --- a/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.component.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { Children } from "react" -import PropTypes from "prop-types" -import { BreadcrumbItem } from "../BreadcrumbItem/index" -import { Stack } from "../Stack/Stack.component" -import { Icon } from "../Icon/Icon.component" - -const breadcrumbstyles = ` - -` -/** Generic breadcrumb component. Use this to Wrap `Breadcrumb` items or custom children in a breadcrumb. */ -export const Breadcrumb = ({ children, className, ...props }) => { - const breadcrumbArray = Children.toArray(children) - const breadcrumbArrayWithSeparators = [] - - breadcrumbArray.forEach((child, i) => { - breadcrumbArrayWithSeparators.push( - <React.Fragment key={i}> - <BreadcrumbItem {...child.props} /> - {i < breadcrumbArray.length - 1 ? <Icon icon="chevronRight" /> : null} - </React.Fragment> - ) - }) - - return ( - <Stack - className={`juno-breadcrumb ${breadcrumbstyles} ${className}`} - gap="1" - key="stck" - {...props} - > - {breadcrumbArrayWithSeparators} - </Stack> - ) -} - -Breadcrumb.propTypes = { - /** Pass a custom className */ - className: PropTypes.string, - /** The children to render. Typically use the BreadcrumbItem component. */ - children: PropTypes.node, -} - -Breadcrumb.defaultProps = { - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.stories.js b/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.stories.js deleted file mode 100644 index 3ef170b69..000000000 --- a/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.stories.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Breadcrumb } from "./index" -import { BreadcrumbItem } from "../BreadcrumbItem/index" -// import { Default as Item } from '../BreadcrumbItem/BreadcrumbItem.stories'; -// import { Home as HomeItem } from '../BreadcrumbItem/BreadcrumbItem.stories'; -// import { Active as ActiveItem } from '../BreadcrumbItem/BreadcrumbItem.stories'; -// import { Disabled as DisabledItem } from '../BreadcrumbItem/BreadcrumbItem.stories'; -// import { WithIcon as ItemWithIcon } from '../BreadcrumbItem/BreadcrumbItem.stories'; - -const Template = ({ children, ...args }) => { - return <Breadcrumb {...args}>{children}</Breadcrumb> -} - -export default { - title: "Components/Breadcrumb/Breadcrumb", - component: Breadcrumb, - argTypes: { - children: { - control: false, - }, - }, -} - -export const Default = { - render: Template, - args: { - children: [ - <BreadcrumbItem key="1" label="" icon="home" />, - <BreadcrumbItem key="2" label="Breadcrumb Item" />, - <BreadcrumbItem key="3" label="Breadcrumb Item with Icon" icon="place" />, - <BreadcrumbItem key="4" label="Disabled Item " disabled />, - <BreadcrumbItem key="5" label="Active Item" active />, - ], - }, -} diff --git a/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.test.js b/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.test.js deleted file mode 100644 index bac69c660..000000000 --- a/libs/juno-ui-components/src/components/Breadcrumb/Breadcrumb.test.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Breadcrumb } from "./index" - - -describe("Breadcrumb", () => { - - test("renders a breadcrumb with text as passed", async () => { - render(<Breadcrumb data-testid="breadcrumb" />) - expect(screen.getByTestId("breadcrumb")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumb")).toHaveClass("juno-breadcrumb") - }) - - test("renders a custom className as passed", async () => { - render(<Breadcrumb data-testid="breadcrumb" className="my-custom-class" />) - expect(screen.getByTestId("breadcrumb")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumb")).toHaveClass('my-custom-class') - }) - - test("renders all props as passed", async () => { - render(<Breadcrumb data-testid="breadcrumb" data-lolol={true}/>) - expect(screen.getByTestId("breadcrumb")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumb")).toHaveAttribute('data-lolol') - }) - -}) - diff --git a/libs/juno-ui-components/src/components/Breadcrumb/index.js b/libs/juno-ui-components/src/components/Breadcrumb/index.js deleted file mode 100644 index 3ae139fa1..000000000 --- a/libs/juno-ui-components/src/components/Breadcrumb/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Breadcrumb } from "./Breadcrumb.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.component.js b/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.component.js deleted file mode 100644 index 0323fb293..000000000 --- a/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.component.js +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { Icon } from "../Icon/index.js" -import { knownIcons } from "../Icon/Icon.component.js" - -const breadcrumbitemstyles = ` - jn-text-sm - jn-text-theme-high - jn-flex - jn-gap-1 - jn-items-center -` - -const breadcrumblinkstyles = ` - jn-text-theme-high - jn-inline-flex -` - -const disabledstyles = ` - jn-text-theme-disabled - jn-pointer-events-none -` - -/** An individual item in a breadcrumb */ -export const BreadcrumbItem = ({ - icon, - href, - label, - ariaLabel, - active, - children, - onClick, - disabled, - className, - ...props -}) => { - - const icn = icon ? <Icon icon={icon} size="18" color="jn-text-theme-default" className={ label && label.length ? "jn-mr-1" : "" } /> : null - - const handleClick = (event) => { - onClick && onClick(event) - } - - return ( - - children ? - children - : - <span className={ - `juno-breadcrumb-item - ${breadcrumbitemstyles} - ${ disabled ? "juno-breadcrumb-item-disabled" : "" } - ${ active ? "juno-breadcrumb-item-active" : "" } - ${className}` - } {...props} - > - { active || disabled ? - <> - { icn } - { label } - </> - : - <a href={href} - className={`${breadcrumblinkstyles} `} - aria-label={ariaLabel || label} - onClick={ handleClick } - > - { icn } - { label } - </a> - } - </span> - - ) -} - -BreadcrumbItem.propTypes = { - /** pass an icon name */ - icon: PropTypes.oneOf(knownIcons), - /** The link of the path/route/page the breacrumb item points to */ - href: PropTypes.string, - /** The text to render in the breadcumb item */ - label: PropTypes.string, - /** Pass an aria-label */ - ariaLabel: PropTypes.string, - /** Whether the item is the last / active item */ - active: PropTypes.bool, - /** Pass an onClick handler */ - onClick: PropTypes.func, - /** Whether the item is disabled */ - disabled: PropTypes.bool, - /** Pass a custom className */ - className: PropTypes.string, - /** The children of the item */ - children: PropTypes.node, -} - -BreadcrumbItem.defaultProps = { - icon: null, - href: "#", - label: "Item", - ariaLabel: "", - active: false, - onClick: undefined, - disabled: false, - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.stories.js b/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.stories.js deleted file mode 100644 index c7f24c4c5..000000000 --- a/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.stories.js +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { BreadcrumbItem } from './index'; -import { knownIcons } from '../Icon/Icon.component.js'; - -const Template = (args) => { - return <BreadcrumbItem {...args} />; -}; - -export default { - title: 'Components/Breadcrumb/BreadcrumbItem', - component: BreadcrumbItem, - argTypes: { - icon: { - options: ['default', ...knownIcons], - control: { type: 'select' }, - }, - children: { - control: false, - }, - }, -}; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'A default breadcrumb item', - }, - }, - }, - - args: { - label: 'Breadcrumb Item', - }, -}; - -export const WithIcon = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Pass any available icon name to render an additional icon for the item.', - }, - }, - }, - - args: { - icon: 'place', - label: 'Breadcrumb Item with Icon', - }, -}; - -export const Active = { - render: Template, - - parameters: { - docs: { - description: { - story: 'An active item represents the current page.', - }, - }, - }, - - args: { - label: 'Active Breadcrumb Item', - active: true, - }, -}; - -export const Disabled = { - render: Template, - - parameters: { - docs: { - description: { - story: 'A disabled breadcrumb item.', - }, - }, - }, - - args: { - label: 'Disabled Breadcrumb Item', - disabled: true, - }, -}; - -export const Home = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Typically the first item in a breadcrumb.', - }, - }, - }, - - args: { - label: '', - icon: 'home', - }, -}; diff --git a/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.test.js b/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.test.js deleted file mode 100644 index b8776076c..000000000 --- a/libs/juno-ui-components/src/components/BreadcrumbItem/BreadcrumbItem.test.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { BreadcrumbItem } from "./index" -import { Button } from "../Button/index" - - -describe("BreadcrumbItem", () => { - - test("renders a breadcrumb item with text as passed", async () => { - render(<BreadcrumbItem data-testid="breadcrumbitem" />) - expect(screen.getByTestId("breadcrumbitem")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toHaveClass("juno-breadcrumb-item") - }) - - test("returns children as passed", async () => { - render( - <BreadcrumbItem> - <Button label="Test Button"/> - </BreadcrumbItem>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveTextContent("Test Button") - }) - - test("renders an icon as passed", async () => { - render(<BreadcrumbItem icon="help" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("title", "Help") - }) - - test("renders a label as passed", async () => { - render(<BreadcrumbItem data-testid="breadcrumbitem" label="My Item" />) - expect(screen.getByTestId("breadcrumbitem")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toHaveTextContent("My Item") - }) - - test("renders an aria-label as passed", async () => { - render(<BreadcrumbItem href="#" ariaLabel="My Item" />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute("aria-label", "My Item") - }) - - test("renders the label as aria-label by default", async () => { - render(<BreadcrumbItem href="#" label="My Item" />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute("aria-label", "My Item") - }) - - test("renders an active item that is not a link as passed", async () => { - render(<BreadcrumbItem href="#" active data-testid="breadcrumbitem"/>) - expect(screen.queryByRole("link")).not.toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toHaveClass("juno-breadcrumb-item-active") - }) - - test("renders a disabled item as passed", async () => { - const onClickSpy = jest.fn() - render(<BreadcrumbItem href="#" disabled data-testid="breadcrumbitem" onClick={onClickSpy} />) - expect(screen.getByTestId("breadcrumbitem")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toHaveClass("juno-breadcrumb-item-disabled") - screen.getByTestId("breadcrumbitem").click() - expect(onClickSpy).not.toHaveBeenCalled() - }) - - test("executes an onClick handler as passed", async () => { - const onClickSpy = jest.fn() - render(<BreadcrumbItem onClick={onClickSpy} />) - screen.getByRole("link").click() - expect(onClickSpy).toHaveBeenCalled() - }) - - test("renders a custom className as passed", async () => { - render(<BreadcrumbItem data-testid="breadcrumbitem" className="my-custom-class" />) - expect(screen.getByTestId("breadcrumbitem")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toHaveClass('my-custom-class') - }) - - test("renders all props as passed", async () => { - render(<BreadcrumbItem data-testid="breadcrumbitem" data-lolol={true}/>) - expect(screen.getByTestId("breadcrumbitem")).toBeInTheDocument() - expect(screen.getByTestId("breadcrumbitem")).toHaveAttribute('data-lolol') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/BreadcrumbItem/index.js b/libs/juno-ui-components/src/components/BreadcrumbItem/index.js deleted file mode 100644 index 7dd3339a4..000000000 --- a/libs/juno-ui-components/src/components/BreadcrumbItem/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { BreadcrumbItem } from "./BreadcrumbItem.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Button/Button.component.js b/libs/juno-ui-components/src/components/Button/Button.component.js deleted file mode 100644 index 3a8520ca0..000000000 --- a/libs/juno-ui-components/src/components/Button/Button.component.js +++ /dev/null @@ -1,241 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import "./button.scss" -import { Icon } from "../Icon/index.js" -import { knownIcons } from "../Icon/Icon.component.js" -import { Spinner } from "../Spinner/index.js" - -const btnBase = ` - jn-font-bold - jn-inline-flex - jn-justify-center - jn-items-center - jn-rounded - jn-shadow-sm - jn-w-auto - focus:jn-outline-none - focus-visible:jn-ring-2 - focus-visible:jn-ring-theme-focus - focus-visible:jn-ring-offset-1 - focus-visible:jn-ring-offset-theme-focus - disabled:jn-opacity-50 - disabled:jn-cursor-not-allowed - disabled:jn-pointer-events-none -` - -const btnSmallBase = ` - jn-text-sm - jn-leading-5 -` - -const btnDefaultBase = ` - jn-text-base - jn-leading-6 -` - -const btnSmallDefaultPadding = ` - jn-py-[0.3125rem] - jn-px-[0.5rem] -` - -const btnSmallSubduedPadding = ` - jn-py-[0.25rem] - jn-px-[0.4375rem] -` - -const btnDefaultPadding = ` - jn-py-[0.4375rem] - jn-px-[0.625rem] -` - -const btnDefaultSubduedPadding = ` - jn-py-[0.375rem] - jn-px-[0.5625rem] -` - -const getButtonPadding = (size, variant) => { - if (size === "small") { - return (variant === "subdued" ? `${btnSmallSubduedPadding}` : `${btnSmallDefaultPadding}`) - } else { - return (variant === "subdued" ? `${btnDefaultSubduedPadding}`: `${btnDefaultPadding}`) - } -} - -const btnIconSmall = ` - jn-mr-2 -` - -const btnIconDefault = ` - jn-mr-2 -` - -const iconClasses = (size) => { - if (size === "small") { - return `${btnIconSmall}` - } else { - return `${btnIconDefault}` - } -} - -const progressClass = (progress) => { - const progClass = progress ? `in-progress` : `` - return progClass -} - -const spinnerColorClass = (variant, disabled) => { - switch ( variant ) { - case "default": - return "jn-text-theme-accent" - case "primary": - return "jn-text-white" - case "primary-danger": - return "jn-text-white" - default: - return "" - } -} - -/** - * The basic button component. Use this for `onClick` interactions. - */ -export const Button = React.forwardRef( - ( - { - label, - title, - variant, - size, - disabled, - href, - icon, - className, - onClick, - children, - progress, - progressLabel, - ...props - }, - ref - ) => { - const theVariant = variant || "default" - const titleValue = title || label || "" - - const buttonIcon = progress ? ( - <Spinner - size={ size === "small" ? "1.125rem" : "1.5rem" } - color={`${spinnerColorClass(theVariant, disabled)}`} - /> - ) : icon ? ( - <Icon - icon={icon} - className={`juno-button-icon ${ - label || children ? iconClasses(size) : "" - } `} - size={ size === "small" ? "1.125rem" : "1.5rem" } - /> - ) : null - - const buttonLabel = - progress && progressLabel ? progressLabel : label || children - - const handleClick = (event) => { - onClick && onClick(event) - } - - const button = ( - <button - type="button" - className={` - juno-button - juno-button-${theVariant} - juno-button-${size}-size - ${btnBase} - ${ size === 'small' ? btnSmallBase : btnDefaultBase } - ${ getButtonPadding(size, variant) } - ${progressClass(progress)} - ${className}` - } - disabled={disabled} - onClick={handleClick} - title={titleValue} - ref={ref} - {...props} - > - {buttonIcon} - {buttonLabel} - </button> - ) - - const anchor = ( - <a - href={href} - role="button" - className={` - juno-button - juno-button-${theVariant} - juno-button-${size}-size - ${btnBase} - ${ size === 'small' ? btnSmallBase : btnDefaultBase } - ${ getButtonPadding(size, variant) } - ${progressClass(progress)} - ${className} - `} - disabled={disabled} - onClick={onClick} - title={titleValue} - ref={ref} - {...props} - > - {buttonIcon} - {buttonLabel} - </a> - ) - - return href ? anchor : button - } -) - -Button.propTypes = { - /** Choose a variant for your purpose. May leave empty to get default button. */ - variant: PropTypes.oneOf(["primary", "primary-danger", "default", "subdued"]), - /** Leave empty for default size */ - size: PropTypes.oneOf(["small", "default"]), - /** Whether the button is disabled */ - disabled: PropTypes.bool, - /** Optionally specify an href. This will turn the Button into an <a> element */ - href: PropTypes.string, - /** Button label can be passed like this or as children */ - label: PropTypes.string, - /** Specify title for accessibility. Gets value of label if no title specified */ - title: PropTypes.string, - /** Pass the name of an icon the button should show. Can be any icon included with Juno. */ - icon: PropTypes.oneOf(knownIcons), - /** Pass a className */ - className: PropTypes.string, - /** Click handler */ - onClick: PropTypes.func, - /** Set to true to disable */ - disabled: PropTypes.bool, - /** Whether the button action is in progress */ - progress: PropTypes.bool, - /** Display an alternative label while the button action is in progress */ - progressLabel: PropTypes.string, -} - -Button.defaultProps = { - variant: undefined, - size: "default", - disabled: null, - icon: null, - className: "", - href: null, - title: null, - onClick: undefined, - progress: false, - progressLabel: "", -} diff --git a/libs/juno-ui-components/src/components/Button/Button.stories.js b/libs/juno-ui-components/src/components/Button/Button.stories.js deleted file mode 100644 index ffac07892..000000000 --- a/libs/juno-ui-components/src/components/Button/Button.stories.js +++ /dev/null @@ -1,453 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Button } from './index'; -import { Icon } from '../Icon/index.js'; -import { knownIcons } from '../Icon/Icon.component.js'; -import { ContentArea } from '../ContentArea/index'; -import { Container } from '../Container/index'; - -export default { - title: 'Components/Button', - component: Button, - argTypes: { - icon: { - options: ['default', ...knownIcons], - control: { type: 'select' }, - }, - variant: { - options: ['default', 'primary', 'primary-danger', 'subdued'], - control: { type: 'select' }, - }, - }, -}; - -export const Default = { - parameters: { - docs: { - description: { - story: 'The default button is a neutral button that can be used multiple times on a page', - }, - }, - }, - - args: { - label: 'Default', - }, -}; - -export const Subdued = { - parameters: { - docs: { - description: { - story: - 'A subdued button variant, mostly used to create contrast to an primary button concerning the same usage context, or when multiple default buttons would be too much.', - }, - }, - }, - - args: { - variant: 'subdued', - label: 'Subdued', - }, -}; - -export const Primary = { - parameters: { - docs: { - description: { - story: - 'Only use the primary button **maximum once per page** for the preferred user action', - }, - }, - }, - - args: { - variant: 'primary', - label: 'Primary', - }, -}; - -export const PrimaryDanger = { - parameters: { - docs: { - description: { - story: 'Use this button sparingly and only for dangerous or destructive actions', - }, - }, - }, - - args: { - variant: 'primary-danger', - label: 'Primary Danger', - }, -}; - -export const DefaultSize = { - args: { - label: 'Default', - }, -}; - -export const Small = { - args: { - size: 'small', - label: 'Small', - }, -}; - -export const Disabled = { - parameters: { - docs: { - description: { story: 'Disable any button by adding `disabled` to it.' }, - }, - }, - - args: { - ...Default.args, - label: 'Default Disabled', - disabled: true, - }, -}; - -export const SubduedDisabled = { - parameters: { - docs: { - description: { story: 'Disable any button by adding `disabled` to it.' }, - }, - }, - - args: { - ...Subdued.args, - label: 'Subdued Disabled', - disabled: true, - }, -}; - -export const PrimaryDisabled = { - parameters: { - docs: { - description: { story: 'Disable any button by adding `disabled` to it.' }, - }, - }, - - args: { - ...Primary.args, - label: 'Primary Disabled', - disabled: true, - }, -}; - -export const PrimaryDangerDisabled = { - parameters: { - docs: { - description: { - story: 'Disable a Primary Danger button by adding `disabled` to it.', - }, - }, - }, - - args: { - ...PrimaryDanger.args, - disabled: true, - }, -}; - -export const DefaultWithIcon = { - parameters: { - docs: { - story: 'Default Button with icon', - }, - }, - - args: { - ...Default.args, - label: 'Default with Icon', - icon: 'warning', - }, -}; - -export const SubduedWithIcon = { - parameters: { - docs: { - description: { - story: 'Subdued Button with Icon', - }, - }, - }, - - args: { - ...Subdued.args, - icon: 'warning', - label: 'Subdued with Icon', - }, -}; - -export const SmallWithIcon = { - parameters: { - docs: { - description: { - story: 'Small Button with Icon', - }, - }, - }, - - args: { - ...Small.args, - icon: 'warning', - }, -}; - -export const IconOnlyButton = {}; -(IconOnlyButton.docs = { - description: { - story: 'A button with a Icon but no label. The icon name can be passed as a prop.', - }, -}), - (IconOnlyButton.args = { - icon: 'warning', - }); - -export const IconOnlyAsChild = {}; -(IconOnlyAsChild.docs = { - description: { - story: - 'A button with a Icon but no label, an Icon can also be passed as a child. Hover, active, etc. states of the icon ave to be handled manually when passing an icon as a child though.', - }, -}), - (IconOnlyAsChild.args = { - children: <Icon />, - }); - -export const LinkAsButton = { - parameters: { - docs: { - description: { - story: - 'If you want to render a link that looks like a button pass an "href" to the Button. All other props work the same as for regular buttons', - }, - }, - }, - - args: { - ...Primary.args, - label: 'Link as button', - href: '#link', - }, -}; - -export const LinkAsButtonWithIcon = { - parameters: { - docs: { - description: { - story: 'Link styled as a button including an icon.', - }, - }, - }, - - args: { - ...Primary.args, - icon: 'warning', - label: 'Link as button with Icon', - href: '#', - }, -}; - -export const DefaultButtonInProgress = { - parameters: { - docs: { - description: { - story: 'Default Button with an action in progress', - }, - }, - }, - - args: { - ...Default.args, - progress: true, - }, -}; - -export const IconButtonInProgress = { - parameters: { - docs: { - description: { - story: 'Icon Button with an action in progress', - }, - }, - }, - - args: { - ...Default.args, - label: 'Default with Icon', - icon: 'warning', - progress: true, - }, -}; - -export const DefaultButtonInProgressWithProgressLabel = { - parameters: { - docs: { - description: { - story: - 'Default Button with an action in oprogress and an alternate label while in progress', - }, - }, - }, - - args: { - ...Default.args, - label: 'Default with Icon', - icon: 'warning', - progress: true, - progressLabel: 'In Progress…', - }, -}; - -export const SubduedButtonInProgress = { - parameters: { - docs: { - description: { - story: 'Subdued Button with an action in progress', - }, - }, - }, - - args: { - ...Subdued.args, - progress: true, - progressLabel: 'Subdued Button in Progress…', - }, -}; - -export const PrimaryButtonWithIconInProgress = { - parameters: { - docs: { - description: { - story: 'Primary Button with action in progress', - }, - }, - }, - - args: { - ...Primary.args, - progress: true, - progressLabel: 'Primary Button in Progress…', - }, -}; - -export const PrimaryDangerButtonInProgress = { - parameters: { - docs: { - description: { - story: 'Primary Danger Button with action in progress', - }, - }, - }, - - args: { - ...PrimaryDanger.args, - progress: true, - progressLabel: 'Primary Danger Button in Progress…', - }, -}; - -export const LinkAsButtonInProgress = { - parameters: { - docs: { - description: { - story: - 'Link as button with action in progress. Should hardly ever be used, just to check consistent styling.', - }, - }, - }, - - args: { - ...LinkAsButton.args, - progress: true, - progressLabel: 'Link as button in Progress…', - }, -}; - -export const LinkAsButtonWithIconInProgress = { - parameters: { - docs: { - description: { - story: - 'Link as button with an icon and action in progress. Should hardly ever be used, just to check consistent styling.', - }, - }, - }, - - args: { - ...LinkAsButtonWithIcon.args, - progress: true, - progressLabel: 'Link as button with Icon in Progress…', - }, -}; - -export const DisabledInProgress = { - parameters: { - docs: { - description: { - story: 'Disabled Default Button in Progress', - }, - }, - }, - - args: { - ...Disabled.args, - progress: true, - }, -}; - -export const PrimaryDisabledInProgress = { - parameters: { - docs: { - description: { - story: 'Disabled Primnary Button with action in progress', - }, - }, - }, - - args: { - ...PrimaryDisabled.args, - progress: true, - progressLabel: 'Disabled Primary Button in Progress…', - }, -}; - -export const PrimaryDangerDisabledInProgress = { - parameters: { - docs: { - description: { - story: 'Disabled Primary Danger Button in Progress…', - }, - }, - }, - - args: { - ...PrimaryDangerDisabled.args, - progress: true, - progressLabel: 'Disabled Primary Danger Button in Progress…', - }, -}; - -export const SmallInProgress = { - parameters: { - docs: { - description: { - story: 'Small Button in Progress', - }, - }, - }, - - args: { - ...Small.args, - progress: true, - progressLabel: 'Small in Progress…', - }, -}; diff --git a/libs/juno-ui-components/src/components/Button/Button.test.js b/libs/juno-ui-components/src/components/Button/Button.test.js deleted file mode 100644 index 14ee7f6c2..000000000 --- a/libs/juno-ui-components/src/components/Button/Button.test.js +++ /dev/null @@ -1,140 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Button } from "./index" - -describe("Button", () => { - test("renders a button with text passed as label", async () => { - render(<Button label="Click me"></Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveTextContent("Click me") - }) - - test("renders a button with text passed as children", async () => { - render(<Button>Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveTextContent("Click me") - }) - - test("renders a disabled button as passed", async () => { - render(<Button disabled />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute("disabled") - }) - - // it seems we can't properly check whether it's an <a> element that is being rendered - // so for now ensure that it responds to the button aria role and has an href attribute - test("renders an <a> element with role button if href is passed", async () => { - render(<Button href="http://blah.com" />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute("href") - }) - - test("onclick handler is called as passed", () => { - const onClickSpy = jest.fn() - render(<Button onClick={onClickSpy} />) - screen.getByRole("button").click() - expect(onClickSpy).toHaveBeenCalled() - }) - - test("onclick handler is not called when disabled", () => { - const onClickSpy = jest.fn() - render(<Button disabled onClick={onClickSpy} />) - screen.getByRole("button").click() - expect(onClickSpy).not.toHaveBeenCalled() - }) - - test("renders a title", async () => { - render(<Button title="Click me title">Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute( - "title", - "Click me title" - ) - }) - - test("renders label as title if no title given", async () => { - render(<Button label="Click me label">Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute( - "title", - "Click me label" - ) - }) - - test("renders a default button", async () => { - render(<Button>Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("juno-button-default") - }) - - test("renders a primary button", async () => { - render(<Button variant="primary">Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("juno-button-primary") - }) - - test("renders a primary-danger button", async () => { - render(<Button variant="primary-danger">Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("juno-button-primary-danger") - }) - - test("renders a disabled button", async () => { - render(<Button disabled>Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute("disabled") - }) - - test("renders an icon as passed", async () => { - render(<Button icon="warning">Click Me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "warning") - }) - - test("renders a small button", async () => { - render(<Button size="small">Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("juno-button-small-size") - }) - - test("renders a default sized button", async () => { - render(<Button>Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("juno-button-default-size") - }) - - test("renders a custom className as passed", async () => { - render(<Button className="my-custom-classname">Click me</Button>) - expect(screen.getByRole("button")).toHaveClass("my-custom-classname") - }) - - test("renders a default in progress button as passed", async () => { - render(<Button progress={true}>Click me</Button>) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("in-progress") - expect(screen.getByRole("progressbar")).toHaveClass("juno-spinner") - }) - - test("renders a default in progress button with a progressLabel as passed", async () => { - render( - <Button progress={true} progressLabel="In Progress…"> - Click me - </Button> - ) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("in-progress") - expect(screen.getByRole("button")).toHaveTextContent("In Progress…") - }) - - test("renders all props as passed", async () => { - render(<Button id="button-1" data-lolol={true} />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute("id", "button-1") - expect(screen.getByRole("button")).toHaveAttribute("data-lolol") - }) -}) diff --git a/libs/juno-ui-components/src/components/Button/button.scss b/libs/juno-ui-components/src/components/Button/button.scss deleted file mode 100644 index 471bea4d0..000000000 --- a/libs/juno-ui-components/src/components/Button/button.scss +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -// handle button colours here, not in tw because of overall complexity, mostly singular colors, gradients, etc; and conflicting bg-colors and bg-images: - - -.juno-button-default { - background-color: var(--color-button-default-bg); - color: var(--color-button-default-text); - - &:hover { - background-color: var(--color-button-default-hover-bg); - color: var(--color-button-default-hover-text); - } - - &:active { - background-color: var(--color-button-default-active-bg); - border-color: var(--color-button-default-active-border); - color: var(--color-button-default-active-text); - } - -} - -.juno-button-subdued { - background-color: var(--color-button-subdued-bg); - border: 1px solid var(--color-button-subdued-border); - color: var(--color-button-subdued-text); - - &:hover { - background-color: var(--color-button-subdued-hover-bg); - border-color: var(--color-button-subdued-hover-border); - color: var(--color-button-subdued-hover-text); - } - - &:active { - background-color: var(--color-button-subdued-active-bg); - border-color: var(--color-button-subdued-active-border); - color: var(--color-button-subdued-active-text); - } - -} - -.juno-button-primary { - background-color: var(--color-button-primary-bg); - color: var(--color-button-primary-text); - - &:hover { - background-color: var(--color-button-primary-hover-bg); - color: var(--color-button-primary-hover-text); - } - - &:active { - background-color: var(--color-button-primary-active-bg); - color: var(--color-button-primary-active-text); - } - -} - -.juno-button-primary-danger { - background-color: var(--color-button-primary-danger-bg); - color: var(--color-button-primary-danger-text); - - &:hover { - background-color: var(--color-button-primary-danger-hover-bg); - color: var(--color-button-primary-danger-hover-text); - } - - &:active { - background-color: var(--color-button-primary-danger-active-bg); - color: var(--color-button-primary-danger-active-text); - } - -} diff --git a/libs/juno-ui-components/src/components/Button/index.js b/libs/juno-ui-components/src/components/Button/index.js deleted file mode 100644 index 43a0e64e4..000000000 --- a/libs/juno-ui-components/src/components/Button/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Button } from "./Button.component" diff --git a/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.component.js b/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.component.js deleted file mode 100644 index 8b09503f0..000000000 --- a/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.component.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { Stack } from "../Stack/Stack.component" - -const buttonrowstyles = ` - jn-flex - jn-flex-row - jn-justify-end - jn-gap-2 -` - -/** A container to hold one or multiple buttons and space and align them. */ -export const ButtonRow = ({ - children, - className, - ...props -}) => { - return ( - <Stack gap="2" distribution="end" className={`juno-button-row ${className}`} {...props} > - {children} - </Stack> - ) -} - -ButtonRow.propTypes = { - /** Add a class to the ButtonRow */ - className: PropTypes.string, - /** Children to render in the ButtonRow */ - children: PropTypes.node, -} - -ButtonRow.defaultProps = { - children: null, - className: "", -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.stories.js b/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.stories.js deleted file mode 100644 index 2f3007380..000000000 --- a/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.stories.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { ButtonRow } from "./index.js" -import { Button } from "../Button/index.js" - -export default { - title: "Forms/ButtonRow", - component: ButtonRow, - argTypes: { - items: { - table: { - disable: true, - }, - }, - children: { - control: false, - }, - }, -} - -const Template = ({ children, ...args }) => ( - <ButtonRow {...args}>{children}</ButtonRow> -) - -export const Default = { - render: Template, - - args: { - name: "Default ButtonRow", - children: [ - <Button label="Cancel" title="Cancel" />, - <Button label="Save" title="Save" variant="primary" />, - ], - }, -} diff --git a/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.test.js b/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.test.js deleted file mode 100644 index ec2b62073..000000000 --- a/libs/juno-ui-components/src/components/ButtonRow/ButtonRow.test.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Button } from "../Button/index" -import { ButtonRow } from "./index" - -describe("ButtonRow", () => { - - - test("renders a ButtonRow", async () => { - render(<ButtonRow data-testid="button-row" />) - expect(screen.getByTestId("button-row")).toBeInTheDocument() - }) - - test("renders children as passed", async () => { - render( - <ButtonRow> - <Button label="My Button" title="My Button" /> - </ButtonRow> - ) - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<ButtonRow data-testid="my-button-row" className="my-classname" />) - expect(screen.getByTestId("my-button-row")).toHaveClass("my-classname") - }) - - test("renders all props as passed", async () => { - render(<ButtonRow data-testid="my-button-row" data-lolol="some-prop" />) - expect(screen.getByTestId("my-button-row")).toHaveAttribute("data-lolol", 'some-prop') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/ButtonRow/index.js b/libs/juno-ui-components/src/components/ButtonRow/index.js deleted file mode 100644 index 471af06ba..000000000 --- a/libs/juno-ui-components/src/components/ButtonRow/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ButtonRow } from "./ButtonRow.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Checkbox/Checkbox.component.js b/libs/juno-ui-components/src/components/Checkbox/Checkbox.component.js deleted file mode 100644 index 2fed6ad0d..000000000 --- a/libs/juno-ui-components/src/components/Checkbox/Checkbox.component.js +++ /dev/null @@ -1,380 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect, useMemo, useContext, useId } from "react" -import PropTypes from "prop-types" -import { CheckboxGroupContext } from "../CheckboxGroup/CheckboxGroup.component" -import { Label } from "../Label/index" -import { Icon } from "../Icon/Icon.component" -import { FormHint } from "../FormHint/FormHint.component" - -const wrapperStyles = ` - jn-inline-flex - jn-items-center -` - -const inputstyles = ` - jn-w-4 - jn-h-4 - jn-opacity-0 - jn-z-50 -` - -const mockcheckboxstyles = ` - jn-relative - jn-w-4 - jn-h-4 - jn-rounded-sm - jn-bg-theme-checkbox - jn-cursor-pointer - focus:jn-outline-none - focus:jn-ring-2 - focus:jn-ring-theme-focus -` - -const mockfocusstyles = ` - jn-ring-2 - jn-ring-theme-focus -` - -const mockcheckmarkstyles = ` - jn-absolute - jn-top-0 - jn-left-0 - jn-text-theme-checkbox-checked - jn-fill-current -` - - -const mockindeterminatestyles = ` - jn-absolute - jn-w-2 - jn-h-0.5 - jn-top-1.5 - jn-left-[.2rem] - jn-inline-block - jn-bg-theme-focus -` - -const mockdisabledstyles = ` - jn-pointer-events-none - jn-opacity-50 - jn-cursor-not-allowed -` - -const noBorderStyles = ` - jn-border - jn-border-transparent -` - -const errorstyles = ` - jn-border - jn-border-theme-error -` - -const successstyles = ` - jn-border - jn-border-theme-success -` - -const labelStyles = ` - jn-leading-0 - jn-ml-2 -` - -const iconStyles = ` - jn-ml-1 -` - -const hintStyles = ` - jn-mt-0 - jn-ml-6 -` - - - -export const Checkbox = ({ - checked, - className, - disabled, - errortext, - helptext, - id, - indeterminate, - invalid, - label, - name, - onChange, - onClick, - required, - successtext, - valid, - value, - ...props -}) => { - - // Utility - const isNotEmptyString = (str) => { - return !(typeof str === 'string' && str.trim().length === 0) - } - - const uniqueId = () => ( - "juno-checkbox-" + useId() - ) - - // Consume and deconstruct the context so we won't get errors but 'undefined' when trying to access a group context property in case there is none: - const checkboxGroupContext = useContext(CheckboxGroupContext) - const { - selectedOptions: groupSelectedOptions, - name: groupName, - disabled: groupDisabled, - handleCheckboxChange: groupHandleCheckboxChange, - updateSelectedValue: updateGroupSelectedValue, - } = checkboxGroupContext || {} - - // Lazily initialise the Checkbox: - const initialChecked = () => { - if (checkboxGroupContext) { - if (groupSelectedOptions && groupSelectedOptions.includes(value)) { - return true - } else { - return false - } - } else { - return checked ? true : false - } - } - - - const [isChecked, setIsChecked] = useState( initialChecked() ) - const [isIndeterminate, setIsIndeterminate] = useState(false) - const [hasFocus, setHasFocus] = useState(false) - const [isInvalid, setIsInvalid] = useState(false) - const [isValid, setIsValid] = useState(false) - - // Run once to update the parent state to respect and reflect the checked prop if we are in a group context, but parent has no selected options set via its prop: - useEffect(() => { - if (checked && checkboxGroupContext) { - updateGroupSelectedValue(value) - } - }, [] ) - - useEffect(() => { - if (!checkboxGroupContext) { - setIsChecked(checked) - } - }, [checked] ) - - const invalidated = useMemo( - () => invalid || (errortext && isNotEmptyString(errortext) ? true : false), - [invalid, errortext] - ) - const validated = useMemo( - () => valid || (successtext && isNotEmptyString(successtext) ? true : false), - [valid, successtext] - ) - - useEffect( () => { - setIsIndeterminate(indeterminate) - }, [indeterminate]) - - useEffect( () => { - setIsInvalid(invalidated) - }, [invalidated]) - - useEffect( () => { - setIsValid(validated) - }, [validated]) - - const handleChange = (event) => { - setIsChecked(!isChecked) - // If we are in a context, update : - if (groupHandleCheckboxChange && typeof groupHandleCheckboxChange === "function") { - groupHandleCheckboxChange(value) - } - - onChange && onChange(event) - } - - const handleClick = (event) => { - onClick && onClick(event) - } - - const handleFocus = () => { - setHasFocus(true) - } - - const handleBlur = () => { - setHasFocus(false) - } - - const determineChecked = () => { - if (checkboxGroupContext) { - return groupSelectedOptions && groupSelectedOptions.includes(value) ? true : false - } else { - return isChecked - } - } - - const theId = id || uniqueId() - - return ( - <div className="jn-checkbox-outer"> - <div className={`jn-checkbox-wrapper ${wrapperStyles}`}> - <div - className={` - juno-checkbox - ${mockcheckboxstyles} - ${ hasFocus ? mockfocusstyles : "" } - ${ groupDisabled || disabled ? mockdisabledstyles : "" } - ${ isInvalid ? errorstyles : "" } - ${ isValid ? successstyles : "" } - ${ isInvalid || isValid ? "" : noBorderStyles } - ${className} - `} - {...props} - > - { determineChecked() ? <svg - xmlns="http://www.w3.org/2000/svg" - className={`${mockcheckmarkstyles}`} - width="16" - height="16" - viewBox="0 0 16 16"> - <polygon points="5.75 11.15 2.6 8 1.55 9.05 5.75 13.25 14.75 4.25 13.7 3.2"/> - </svg> - : - "" } - <input - checked={ determineChecked() } - className={` - ${inputstyles} - ${ isInvalid ? "juno-checkbox-invalid" : ""} - ${ isValid ? "juno-checkbox-valid" : ""} - ${ groupDisabled || disabled ? "jn-cursor-not-allowed" : ""} - `} - disabled={ groupDisabled || disabled } - id={theId} - name={groupName || name} - onBlur={handleBlur} - onChange={handleChange} - onClick={handleClick} - onFocus={handleFocus} - type="checkbox" - value={value} - /> - { isIndeterminate && !determineChecked() ? - <div className={`${mockindeterminatestyles}`}></div> - : - "" } - </div> - { label && isNotEmptyString(label) ? - <> - <Label - text={label} - htmlFor={theId} - disabled={groupDisabled || disabled} - required={required} - className={`${labelStyles}`} - /> - {isInvalid ? ( - <Icon - icon="dangerous" - color="jn-text-theme-error" - size="1.125rem" - className={` - ${iconStyles} - ${ groupDisabled || disabled ? "jn-opacity-50" :""} - `} - /> - ) : ""} - {isValid ? ( - <Icon - icon="checkCircle" - color="jn-text-theme-success" - size="1.125rem" - className={` - ${iconStyles} - ${disabled ? "jn-opacity-50" :""} - `} - /> - ) : ""} - </> - : - "" - } - </div> - { errortext && isNotEmptyString(errortext) ? - <FormHint text={errortext} variant="error" className={`${hintStyles}`} /> - : - "" - } - { successtext && isNotEmptyString(successtext) ? - <FormHint text={successtext} variant="success" className={`${hintStyles}`} /> - : - "" - } - { helptext && isNotEmptyString(helptext) ? - <FormHint text={helptext} className={`${hintStyles}`} /> - : - "" - } - </div> - ) -} - -Checkbox.propTypes = { - /** Whether the Checkbox is checked */ - checked: PropTypes.bool, - /** Pass a custom className */ - className: PropTypes.string, - /** Whether the Checkbox is disabled */ - disabled: PropTypes.bool, - /** A text to render when the Checkbox has an error or could not be validated */ - errortext: PropTypes.node, - /** A helptext to render to explain meaning and significance of the Checkbox */ - helptext: PropTypes.node, - /** The id of the Radio. An id will be automatically generated if not passed. */ - id: PropTypes.string, - /** Whether the Checkbox is indeterminate. Applicable ONLY if the Checkbox represents multiple child Checkboxes with non--identical checked state. */ - indeterminate: PropTypes.bool, - /** Whether the Checkbox was validated unsuccessfully */ - invalid: PropTypes.bool, - /** The label of the Checkbox */ - label: PropTypes.string, - /** The name of the Checkbox */ - name: PropTypes.string, - /** handler to be executed when the Checkbox changes. */ - onChange: PropTypes.func, - /** handler to be executed when the Checkbox is clicked. */ - onClick: PropTypes.func, - /** Whether the Checkbox is required */ - required: PropTypes.bool, - /** A text to render when the Checkbox was successfully validated */ - successtext: PropTypes.node, - /** Whether the Checkbox was successfully validated */ - valid: PropTypes.bool, - /** The value of the Checkbox */ - value: PropTypes.string, -} - -Checkbox.defaultProps = { - checked: false, - className: "", - disabled: false, - errortext: "", - helptext: "", - id: "", - indeterminate: false, - invalid: false, - label: undefined, - name: "", - onChange: undefined, - onClick: undefined, - required: false, - successtext: "", - valid: false, - value: undefined, -} - diff --git a/libs/juno-ui-components/src/components/Checkbox/Checkbox.stories.js b/libs/juno-ui-components/src/components/Checkbox/Checkbox.stories.js deleted file mode 100644 index c28421cc3..000000000 --- a/libs/juno-ui-components/src/components/Checkbox/Checkbox.stories.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Checkbox } from './index.js'; - -export default { - title: 'Forms/Checkbox/Checkbox', - component: Checkbox, - argTypes: { - errortext: { - control: false, - }, - helptext: { - control: false, - }, - successtext: { - control: false, - }, - }, -}; - -export const Default = { - args: {}, -}; - -export const Checked = { - args: { - checked: true, - }, -}; - -export const WithLabel = { - args: { - label: 'Checkbox with Label', - }, -}; - -export const Required = { - args: { - required: true, - label: 'Required Checkbox', - }, -}; - -export const Disabled = { - args: { - disabled: true, - }, -}; - -export const Indeterminate = { - args: { - indeterminate: true, - }, -}; - -export const Valid = { - args: { - valid: true, - }, -}; - -export const Invalid = { - args: { - invalid: true, - }, -}; - -export const ValidWithLabel = { - args: { - valid: true, - label: 'Validated checkbox with label and icon', - successtext: 'This option is valid.', - helptext: 'Validation icons will only show when there is a label on the Checkbox', - }, -}; - -export const InvalidWithLabel = { - args: { - invalid: true, - label: 'Invalidated checkbox with label and icon', - errortext: 'This option is invalid.', - helptext: 'Validation icons will only show when there is a label on the Checkbox', - }, -}; - -export const IndeterminateWithLabel = { - args: { - indeterminate: true, - label: 'Indeterminate checkbox with label', - helptext: - 'A checkbox can be indeterminate as parent of multiple checkboxes with mixed checked states', - }, -}; diff --git a/libs/juno-ui-components/src/components/Checkbox/Checkbox.test.js b/libs/juno-ui-components/src/components/Checkbox/Checkbox.test.js deleted file mode 100644 index dc48ffb6b..000000000 --- a/libs/juno-ui-components/src/components/Checkbox/Checkbox.test.js +++ /dev/null @@ -1,174 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen, fireEvent } from "@testing-library/react" -import { act } from 'react-dom/test-utils'; -import { Checkbox } from "./index" - - -describe("Checkbox", () => { - - test("renders a valid html input type checkbox", async () => { - render(<Checkbox />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveAttribute('type', "checkbox") - }) - - test("renders a checkbox with a name as passed", async () => { - render(<Checkbox name="My Checkbox" />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveAttribute('name', "My Checkbox") - }) - - test("renders a checkbox with a label", async () => { - render(<Checkbox label="My Checkbox" id="my-checkbox"/>) - expect(screen.getByLabelText("My Checkbox")).toBeInTheDocument() - expect(document.querySelector(".juno-label")).toBeInTheDocument() - expect(document.querySelector(".juno-label")).toHaveTextContent("My Checkbox") - }) - - test("renders a checkbox with an id as passed", async () => { - render(<Checkbox id="my-checkbox" />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveAttribute('id', "my-checkbox") - }) - - test("renders a Checkbox with an auto-generated id if no id was passed", async () => { - render(<Checkbox />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveAttribute('id') - expect(screen.getByRole("checkbox").getAttribute("id")).toMatch("juno-checkbox") - }) - - test("renders a Checkbox with an associated label with an id as passed", async () => { - render(<Checkbox id="my-checkbox" label="My Checkbox"/>) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByLabelText("My Checkbox")).toBeInTheDocument() - expect(document.querySelector(".juno-label")).toBeInTheDocument() - expect(document.querySelector(".juno-label")).toHaveTextContent("My Checkbox") - }) - - test("renders a Checkbox with a label associated by an auto-generated id if no id was passed ", async () => { - render(<Checkbox label="This is a Checkbox" />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByLabelText("This is a Checkbox")).toBeInTheDocument() - }) - - test("renders a checkbox with a value as passed", async () => { - render(<Checkbox value="ValueAsPassed" />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveAttribute('value', "ValueAsPassed") - }) - - test("renders a checked checkbox as passed", async () => { - act(() => { - render(<Checkbox checked={true} />) - }) - const checkbox = screen.getByRole('checkbox') - expect(checkbox).toBeInTheDocument() - expect(checkbox).toBeChecked() - }) - - test("renders no checked attribute if false", async () => { - act(() => { - render(<Checkbox checked={false} />) - }) - const checkbox = screen.getByRole('checkbox') - expect(checkbox).toBeInTheDocument() - expect(checkbox).not.toBeChecked() - }) - - test("renders a disabled checkbox as passed", async () => { - render(<Checkbox disabled />) - const checkbox = screen.getByRole('checkbox') - expect(checkbox).toBeInTheDocument() - expect(checkbox).toBeDisabled() - }) - - test("renders an invalid Checkbox as passed", async () => { - render(<Checkbox invalid />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-invalid") - }) - - test("renders a valid Checkbox as passed", async () => { - render(<Checkbox valid />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-valid") - }) - - test("renders a helptext as passed", async () => { - render(<Checkbox helptext="this is a helptext"/>) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass("juno-form-hint-help") - expect(document.querySelector(".juno-form-hint")).toHaveTextContent("this is a helptext") - }) - - test("renders a successtext as passed and validates the Checkbox", async () => { - render(<Checkbox successtext="great success!" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass("juno-form-hint-success") - expect(document.querySelector(".juno-form-hint")).toHaveTextContent("great success!") - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-valid") - }) - - test("renders an errortext as passed and invalidates the Checkbox", async () => { - render(<Checkbox errortext="this is an error!" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass("juno-form-hint-error") - expect(document.querySelector(".juno-form-hint")).toHaveTextContent("this is an error!") - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-invalid") - }) - - test("fires handler on change as passed", async () => { - const onChangeSpy = jest.fn(); - render(<Checkbox onChange={onChangeSpy} />); - act(() => { - screen.getByRole('checkbox').click(); - }) - expect(onChangeSpy).toHaveBeenCalled(); - }) - - test("fires handler on click as passed", async () => { - const onClickSpy = jest.fn(); - render(<Checkbox onClick={onClickSpy} />); - act(() => { - screen.getByRole('checkbox').click(); - }) - expect(onClickSpy).toHaveBeenCalled(); - }) - - test("does not fire a handler on change when disabled", async () => { - const onChangeSpy = jest.fn(); - render(<Checkbox onChange={onChangeSpy} disabled />); - act(() => { - screen.getByRole('checkbox').click(); - }) - expect(onChangeSpy).not.toHaveBeenCalled(); - }) - - test("does not fire a handler on click when disabled", async () => { - const onClickSpy = jest.fn(); - render(<Checkbox onClick={onClickSpy} disabled />); - act(() => { - screen.getByRole('checkbox').click(); - }) - expect(onClickSpy).not.toHaveBeenCalled(); - }) - - test("renders a custom className as passed", async () => { - render(<Checkbox data-testid="23" className="my-custom-classname" />) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveClass('my-custom-classname') - }) - - test("renders all props as passed", async () => { - render(<Checkbox id="check-1" data-testid="23" data-lolol={true}/>) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute('data-lolol') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Checkbox/index.js b/libs/juno-ui-components/src/components/Checkbox/index.js deleted file mode 100644 index 9bb072a7d..000000000 --- a/libs/juno-ui-components/src/components/Checkbox/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Checkbox } from "./Checkbox.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.component.js b/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.component.js deleted file mode 100644 index a9eb05386..000000000 --- a/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.component.js +++ /dev/null @@ -1,271 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect, useMemo, createContext, useId } from "react" -import PropTypes from "prop-types" -import { Label } from "../Label/index.js" -import { Icon } from "../Icon/index" -import { FormHint } from "../FormHint/index" - -const checkboxgroupstyles = ` - jn-mb-4 - jn-last:mb-0 -` - -const checkboxgrouplabelstyles = ` - jn-inline-block - jn-mb-1 -` - -const groupstyles = ` - jn-relative - jn-rounded - jn-border - jn-py-1 -` - -const defaultgroupstyles = ` - jn-border-transparent -` - -const validgroupstyles = ` - jn-border-theme-success - jn-px-2 -` - -const invalidgroupstyles = ` - jn-border-theme-error - jn-px-2 -` - -const errortextstyles = ` - jn-text-xs - jn-text-theme-error - jn-mb-2 -` - -const successtextstyles = ` - jn-text-xs - jn-text-theme-success - jn-mb-2 -` - -const iconstyles = ` - jn-absolute - jn-right-2 - jn-top-1.5 -` - - -export const CheckboxGroupContext = createContext() - -export const CheckboxGroup = ({ - children, - className, - disabled, - errortext, - helptext, - id, - invalid, - label, - name, - onChange, - required, - selected, - successtext, - valid, - ...props -}) => { - - // Utility - const isNotEmptyString = (str) => { - return !(typeof str === 'string' && str.trim().length === 0) - } - - const uniqueId = () => ( - "juno-checkboxgroup-" + useId() - ) - - // Create unique identifiers for use with name and id of the group: - const groupName = name || uniqueId() - const groupId = id || uniqueId() - - // Init state variables: - const [selectedOptions, setSelectedOptions] = useState(selected) // undefined, empty array or array of values - const [isValid, setIsValid] = useState(false) - const [isInvalid, setIsInvalid] = useState(false) - - const validated = useMemo( - () => valid || (successtext && successtext.length ? true : false), - [valid, successtext] - ) - const invalidated = useMemo( - () => invalid || (errortext && errortext.length ? true : false), - [invalid, errortext] - ) - - useEffect(() => { - if (selected) { - setSelectedOptions(selected) - } - }, [selected]) - - useEffect(() => { - setIsValid(validated) - }, [validated]) - - useEffect(() => { - setIsInvalid(invalidated) - }, [invalidated]) - - // Callback function to be passed via context to individual checkboxes: - const handleCheckboxChange = (value) => { - const changedValue = value - if (selectedOptions && selectedOptions.includes(value)) { - setSelectedOptions( selectedOptions.filter((value) => {return value !== changedValue}) ) - } else if (selectedOptions && !selectedOptions.includes(value)) { - setSelectedOptions( (selectedOptions) => [...selectedOptions, changedValue] ) - } else { - setSelectedOptions([changedValue]) - } - onChange && onChange(value) - } - - // Callback function to be passed via the context to child Checkboxes so they can add their value to the groups' selectedOptions array in case selected has not been set on the parent (otherwise the parent select will trump whatever is set on the child in a group context). Called ONLY ONCE during initialization of the child Checkbox when we DON't want to execute any additional onChange handlers just yet: - const updateSelectedValue = (value) => { - if (!selected) { - setSelectedOptions( (selectedOptions) => [...selectedOptions || [], value] ) - } - } - - return ( - <CheckboxGroupContext.Provider - value={ - { - selectedOptions: selectedOptions, - name: groupName, - disabled: disabled, - handleCheckboxChange: handleCheckboxChange, - updateSelectedValue: updateSelectedValue, - } - } - > - <div - className={` - juno-checkboxgroup - ${ isValid ? "juno-checkboxgroup-valid" : "" } - ${ isInvalid ? "juno-checkboxgroup-invalid" : "" } - ${checkboxgroupstyles} - ${className} - `} - id={groupId} - role="group" - {...props} - > - { - label && isNotEmptyString(label) ? - <Label - text={label} - htmlFor={groupId} - disabled={disabled} - required={required} - /> - : - "" - } - <div - className={` - juno-checkbox-group-options - ${ groupstyles } - ${ isValid ? validgroupstyles : "" } - ${ isInvalid ? invalidgroupstyles : ""} - ${ isValid || isInvalid ? "" : defaultgroupstyles } - `} - > - {isInvalid ? ( - <Icon - icon="dangerous" - color="jn-text-theme-error" - className={`${iconstyles}`} - /> - ) : ""} - {isValid ? ( - <Icon - icon="checkCircle" - color="jn-text-theme-success" - className={`${iconstyles}`} - /> - ) : ""} - - { children } - - </div> - { errortext && isNotEmptyString(errortext) ? - <FormHint text={errortext} variant="error" /> - : - "" - } - { successtext && isNotEmptyString(successtext) ? - <FormHint text={successtext} variant="success" /> - : - "" - } - { helptext && isNotEmptyString(helptext) ? - <FormHint text={helptext} /> - : - "" - } - </div> - </CheckboxGroupContext.Provider> - ) - -} - -CheckboxGroup.propTypes = { - /** The Checkbox children of the CheckboxGroup */ - children: PropTypes.node, - /** Pass a custom className */ - className: PropTypes.string, - /** Whether all Checkboxes in the group are disabled */ - disabled: PropTypes.bool, - /** Text to display in case validation failed or there is an error. Will set the whole group to invalid when passed. */ - errortext: PropTypes.node, - /** A text to render to further explain meaning and significance of the group */ - helptext: PropTypes.node, - /** The id of the group. If not passed, a unique id will be created and used for the group as a whole. */ - id: PropTypes.string, - invalid: PropTypes.bool, - /*+ The label of the whole group. */ - label: PropTypes.string, - /** The name of all checkboxes in the group. If not passed, a unique name identifier will be created and used for the group as a whole. */ - name: PropTypes.string, - /** An onChange handler to execute when the selection of options changes */ - onChange: PropTypes.func, - /** Whether a selection in the group is required */ - required: PropTypes.bool, - /** Array of values of individual selected options in the group */ - selected: PropTypes.array, - /** Text to display in case validation is successful. When passed, will set the whole group to valid. */ - successtext: PropTypes.node, - /** Whether the CheckboxGroup was successfully validated */ - valid: PropTypes.bool, -} - -CheckboxGroup.defaultProps = { - children: null, - className: "", - disabled: false, - errortext: "", - helptext: "", - id: "", - invalid: false, - label: undefined, - name: "", - onChange: undefined, - required: false, - selected: undefined, - successtext: "", - valid: false, -} diff --git a/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.stories.js b/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.stories.js deleted file mode 100644 index 6d6efe63a..000000000 --- a/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.stories.js +++ /dev/null @@ -1,213 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { CheckboxGroup } from './index.js'; -import { CheckboxRow } from '../CheckboxRow/index.js'; -import { Checkbox } from '../Checkbox/index.js'; - -export default { - title: 'Forms/Checkbox/CheckboxGroup', - component: CheckboxGroup, - argTypes: { - items: { - table: { - disable: true, - }, - }, - errortext: { - control: false, - }, - helptext: { - control: false, - }, - successtext: { - control: false, - }, - children: { - control: false, - }, - selected: { - control: false, - }, - }, -}; - -const Template = ({ children, ...args }) => <CheckboxGroup {...args}>{children}</CheckboxGroup>; - -export const Default = { - render: Template, - - args: { - children: [ - <Checkbox value="val-1" label="Option 1" key="1" />, - <Checkbox value="val-2" label="Option 2" key="2" />, - <Checkbox value="val-3" label="Option 3" key="3" />, - ], - }, -}; - -export const Selected = { - render: Template, - - args: { - selected: ['val-2'], - children: [ - <Checkbox value="val-1" label="Option 1" key="1" />, - <Checkbox value="val-2" label="Option 2" key="2" />, - <Checkbox value="val-3" label="Option 3" key="3" />, - ], - }, -}; - -export const IndividuallyChecked = { - render: Template, - - args: { - children: [ - <Checkbox value="val-1" label="Option 1" key="1" />, - <Checkbox value="val-2" label="Option 2" key="2" checked />, - <Checkbox value="val-3" label="Option 3" key="3" checked />, - <Checkbox value="val-4" label="Option 4" key="4" />, - ], - }, -}; - -export const WithLabel = { - render: Template, - - args: { - name: 'Labelled ChechboxGroup', - label: 'A Labelled CheckboxGroup', - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const Required = { - render: Template, - - args: { - name: 'Required Labelled ChechboxGroup', - label: 'A Required, Labelled CheckboxGroup', - required: true, - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const Disabled = { - render: Template, - - args: { - label: 'A disabled CheckboxGroup', - disabled: true, - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const ValidCheckboxGroup = { - render: Template, - - args: { - name: 'valid-checkbox-group', - label: 'A valid CheckboxGroup', - valid: true, - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const WithHelptext = { - render: Template, - - args: { - name: 'checkbox-group-with-helptext', - label: 'A CheckboxGroup with helptext', - helptext: 'A helptext', - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const WithHelptextAsNode = { - render: Template, - - args: { - name: 'checkbox-group-with-helptext-as-node', - label: 'A CheckboxGroup with helptext as node', - helptext: ( - <> - This is a helptext with a <a href="#">Link</a> - </> - ), - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const WithSuccesstext = { - render: Template, - - args: { - name: 'checkbox-group-with-success', - label: 'A CheckboxGroup with successful validation', - successtext: 'This group is valid.', - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const InvalidCheckboxGroup = { - render: Template, - - args: { - name: 'invalid-checkbox-group', - label: 'An invalid CheckboxGroup', - invalid: true, - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; - -export const WithErrortext = { - render: Template, - - args: { - name: 'checkbox-group-with-error', - label: 'A CheckboxGroup with an Error', - errortext: 'This group has an error.', - children: [ - <Checkbox value="val-1" id="c-1" label="Option 1" key="1" />, - <Checkbox value="val-2" id="c-2" label="Option 2" key="2" />, - <Checkbox value="val-3" id="c-3" label="Option 3" key="3" />, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.test.js b/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.test.js deleted file mode 100644 index 0bfb8bb36..000000000 --- a/libs/juno-ui-components/src/components/CheckboxGroup/CheckboxGroup.test.js +++ /dev/null @@ -1,202 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen, fireEvent } from "@testing-library/react" -import { CheckboxGroup } from "./index" -import { Checkbox } from "../Checkbox/index" - -describe("CheckboxGroup", () => { - - test("renders a CheckboxGroup container", async () => { - render( - <CheckboxGroup name="my-checkboxgroup" data-testid="checkbox-group"> - </CheckboxGroup> - ) - expect(screen.getByTestId("checkbox-group")).toBeInTheDocument() - }) - - test("renders a CheckboxGroup with an id as passed ", async () => { - render(< CheckboxGroup data-testid="group" id="my-checkboxgroup-1"/>) - expect(screen.getByTestId("group")).toBeInTheDocument() - expect(screen.getByTestId("group")).toHaveAttribute("id", "my-checkboxgroup-1") - }) - - test("renders a CheckboxGroup with an auto-generated id if no id is passed", async () => { - render(< CheckboxGroup data-testid="group"/>) - expect(screen.getByTestId("group")).toBeInTheDocument() - expect(screen.getByTestId("group")).toHaveAttribute("id") - expect(screen.getByTestId("group").getAttribute("id")).toMatch("juno-checkboxgroup") - }) - - test("renders a CheckboxGroup with an associated label as passed", async () => { - render( - <CheckboxGroup name="my-checkboxgroup" label="My Group of Checkboxes"> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByText("My Group of Checkboxes")).toBeInTheDocument() - }) - - test("renders a required label as passed", async () => { - render( - <CheckboxGroup name="my-checkboxgroup" label="my-labeled-checkboxgroup" required > - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(document.querySelector('.juno-required')).toBeInTheDocument() - }) - - test("does not render any checkboxes if no children passed", async () => { - render( - <CheckboxGroup name="my-checkboxgroup"> - </CheckboxGroup> - ) - expect(() => { - screen.getByRole("checkbox"); - }).toThrow() - }) - - test("renders Checkboxes as passed", async () => { - render( - <CheckboxGroup> - <Checkbox /> - <Checkbox /> - <Checkbox /> - </CheckboxGroup> - ) - expect(screen.getAllByRole("checkbox")).toHaveLength(3) - }) - - test("renders individually named Checkboxes as passed", async () => { - render( - <CheckboxGroup name="my-checkboxgroup"> - <Checkbox /> - <Checkbox /> - <Checkbox /> - </CheckboxGroup> - ) - expect(screen.getAllByRole("checkbox")).toHaveLength(3) - }) - - test("renders Checkboxes with an auto-generated name if no name was passed", async () => { - render( - <CheckboxGroup> - <Checkbox /> - <Checkbox /> - </CheckboxGroup> - ) - const checkboxes = screen.getAllByRole("checkbox") - checkboxes.forEach( checkbox => expect(checkbox).toHaveAttribute('name') ) - }) - - test("renders Checkboxes as passed", async () => { - render( - <CheckboxGroup name="my-checkboxgroup"> - <Checkbox /> - </CheckboxGroup> - ) - expect(screen.getByRole("checkbox")).toHaveAttribute("name", "my-checkboxgroup") - }) - - test("renders checked Checkboxes as passed", async () => { - render( - <CheckboxGroup selected={["test-checkbox"]}> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("checkbox")).toBeChecked() - }) - - test("renders disabled child Checkboxes as passed", async () => { - render( - <CheckboxGroup disabled > - <Checkbox id="c-1" /> - <Checkbox id="c-2" /> - </CheckboxGroup> - ) - expect(document.getElementById("c-1")).toBeDisabled() - expect(document.getElementById("c-2")).toBeDisabled() - }) - - test("renders a valid CheckboxGroup as passed", async () => { - render( - <CheckboxGroup valid> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByRole("group")).toHaveClass("juno-checkboxgroup-valid") - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - }) - - test("renders a valid CheckboxGroup when successtext is passed", async () => { - render( - <CheckboxGroup successtext="Great Success!"> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByRole("group")).toHaveClass("juno-checkboxgroup-valid") - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - expect(screen.getByText("Great Success!")).toBeInTheDocument() - }) - - test("renders an invalid CheckboxGroup as passed", async () => { - render( - <CheckboxGroup invalid> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByRole("group")).toHaveClass("juno-checkboxgroup-invalid") - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - }) - - test("renders an invalid CheckboxGroup when errortext is passed", async () => { - render( - <CheckboxGroup errortext="Big Error!"> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByRole("group")).toHaveClass("juno-checkboxgroup-invalid") - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - expect(screen.getByText("Big Error!")).toBeInTheDocument() - }) - - test("renders a helptext as passed", async () => { - render( - <CheckboxGroup helptext="This is a helpful text"> - <Checkbox /> - <Checkbox /> - </CheckboxGroup> - ) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass("juno-form-hint-help") - expect(document.querySelector(".juno-form-hint")).toHaveTextContent("This is a helpful text") - }) - - test("renders a custom className", async () => { - render( - <CheckboxGroup name="my-checkboxgroup" className="my-custom-classname"> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByRole("group")).toHaveClass("my-custom-classname") - }) - - test("renders all props", async () => { - render( - <CheckboxGroup name="my-checkboxgroup" data-lolol="some-prop"> - <Checkbox value="test-checkbox"/> - </CheckboxGroup> - ) - expect(screen.getByRole("group")).toBeInTheDocument() - expect(screen.getByRole("group")).toHaveAttribute("data-lolol", 'some-prop') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/CheckboxGroup/index.js b/libs/juno-ui-components/src/components/CheckboxGroup/index.js deleted file mode 100644 index 957fa556b..000000000 --- a/libs/juno-ui-components/src/components/CheckboxGroup/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { CheckboxGroup } from "./CheckboxGroup.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.component.js b/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.component.js deleted file mode 100644 index 2094dc2b6..000000000 --- a/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.component.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect, useMemo } from "react" -import PropTypes from "prop-types" -import { Checkbox } from "../Checkbox/index.js" -import { withDeprecationWarning } from '../withDeprecationWarning/index.js' - -/** DEPRECATED: A single checkbox, associated label, and structural markup. This component is DEPRECATED, use Checkbox instead. */ -const CheckboxRow = ({ - value, - checked, - indeterminate, - name, - label, - id, - helptext, - required, - disabled, - invalid, - errortext, - valid, - successtext, - className, - onChange, - ...props -}) => { - return ( - <Checkbox - value={value} - checked={checked} - indeterminate={indeterminate} - name={name} - label={label} - id={id} - helptext={helptext} - disabled={disabled} - required={required} - invalid={invalid} - valid={valid} - errortext={errortext} - successtext={successtext} - className={className} - onChange={onChange} - {...props} - /> - ) -} - -CheckboxRow.propTypes = { - /** Optional initial value */ - value: PropTypes.string, - /** Pass checked state */ - checked: PropTypes.bool, - /** Whether the checkbox is indeterminate */ - indeterminate: PropTypes.bool, - /** Name attribute of the checkbox element */ - name: PropTypes.string, - /** Label text */ - label: PropTypes.string, - /** Id */ - id: PropTypes.string, - /** Help text */ - helptext: PropTypes.node, - /** Specify whether the checkbox is required */ - required: PropTypes.bool, - /** Disable the Checkbox */ - disabled: PropTypes.bool, - /** Whether the CheckboxRow is invalid */ - invalid: PropTypes.bool, - /** The error text to render with the CheckboxRow. If passed, the Checkbox row will be set to invalid automatically. */ - errortext: PropTypes.node, - /** Whether the CheckboxRow is valid */ - valid: PropTypes.bool, - /** The text to render when the field is validated. If passed, the Checkbox will be set to valid automatically. */ - successtext: PropTypes.node, - /** Pass a custom className */ - className: PropTypes.string, - /** Pass a handler to the checkbox element */ - onChange: PropTypes.func, -} - -CheckboxRow.defaultProps = { - value: "", - checked: false, - indeterminate: false, - name: null, - label: null, - id: null, - helptext: null, - required: null, - disabled: false, - invalid: false, - errortext: "", - valid: false, - successtext: "", - className: "", - onChange: undefined, -} - -export default withDeprecationWarning(CheckboxRow, "CheckboxRow is deprecated and will be removed in future versions. To be future-proof, use Checkbox instead.") \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.stories.js b/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.stories.js deleted file mode 100644 index 0c2de48b8..000000000 --- a/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.stories.js +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { CheckboxRow } from './index.js'; - -export default { - title: 'Deprecated/CheckboxRow', - component: CheckboxRow, - parameters: { - docs: { - description: { - component: - 'DEPRECATED: A radio row containing a radio, associated label, and structural markup. This component is DEPRECATED, use Radio instead.', - }, - }, - }, - argTypes: {}, -}; - -export const Default = { - args: { - label: 'Default Checkbox Row', - id: 'default', - }, -}; - -export const Checked = { - args: { - label: 'Checked CheckboxRow', - id: 'checked', - checked: true, - }, -}; - -export const WithHelpText = { - args: { - name: 'my-input', - label: 'Checkbox Row with Help text', - helptext: 'Oh so helpful helptext', - id: 'withHelptext', - }, -}; - -export const WithHelpTextWithLink = { - args: { - name: 'my-input', - label: 'Checkbox Row with Help text', - helptext: ( - <> - Helptext with a <a href="#">Link</a> - </> - ), - id: 'withHelptext-withLink', - }, -}; - -export const Required = { - args: { - label: 'Required Checkbox Row', - required: true, - id: 'required', - }, -}; - -export const Disabled = { - args: { - label: 'Disabled Checkbox Row', - id: 'disabled-checkbox-row', - disabled: true, - }, -}; - -export const Invalid = { - args: { - label: 'Invalid Checkbox', - id: 'invalid-checkbox-row', - invalid: true, - }, -}; - -export const WithErrorText = { - args: { - label: 'Checkbox invalidated by errortext', - id: 'invalid-checkbox-by-errortext', - errortext: 'Pass an errortext to invalidate a CheckboxRow', - }, -}; - -export const Valid = { - args: { - label: 'Valid Checkbox', - id: 'valid-checkbox-row', - valid: true, - }, -}; - -export const WithSuccessText = { - args: { - label: 'Checkbox validated by successtext', - id: 'valid-checkbox-by-successtext', - successtext: 'Pass a successtext to validate a CheckboxRow', - }, -}; diff --git a/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.test.js b/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.test.js deleted file mode 100644 index 52b9cac57..000000000 --- a/libs/juno-ui-components/src/components/CheckboxRow/CheckboxRow.test.js +++ /dev/null @@ -1,117 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { act } from 'react-dom/test-utils' -import { CheckboxRow } from "./index" - -describe("CheckboxRow", () => { - - - test("renders a checkbox row", async () => { - render(<CheckboxRow data-testid="checkbox-row" />) - expect(screen.getByTestId("checkbox-row")).toBeInTheDocument() - }) - - test("renders a checked checkbox as passed", async () => { - act(() => { - render(<CheckboxRow checked />) - }) - expect(screen.getByRole("checkbox")).toBeChecked() - }) - - test("renders a checkbox row with a value as passed", async () => { - render(<CheckboxRow value="my-value" />) - expect(screen.getByRole("checkbox")).toHaveAttribute("value", 'my-value') - }) - - test("renders a checkbox row with a name as passed", async () => { - render(<CheckboxRow name="my-checkbox" />) - expect(screen.getByRole("checkbox")).toHaveAttribute("name", 'my-checkbox') - }) - - test("renders a checkbox row with an id as passed", async () => { - render(<CheckboxRow id="my-checkbox" />) - expect(screen.getByRole("checkbox")).toHaveAttribute("id", 'my-checkbox') - }) - - test("renders a checkbox row with a checkbox and an associated label with an id as passed", async () => { - render(<CheckboxRow data-testid="my-checkbox-row" label="My Checkbox Row" id="checkbox-row" />) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByLabelText("My Checkbox Row")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveAttribute("id", 'checkbox-row') - }) - - test("renders a help text as passed", async () => { - render(<CheckboxRow helptext="Helptext goes here" />) - expect(screen.getByText("Helptext goes here")).toBeInTheDocument() - }) - - test("renders a helpt text with a link as passed", async () => { - render(<CheckboxRow helptext={<a href="#">Link</a>} />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute("href", "#") - expect(screen.getByRole("link")).toHaveTextContent("Link") - }) - - test("renders a required label as passed", async () => { - render(<CheckboxRow label="Required Input" required />) - expect(document.querySelector('.juno-required')).toBeInTheDocument() - }) - - test("renders a disabled Checkbox as passed", async () => { - act(() => { - render(<CheckboxRow disabled />) - }) - expect(screen.getByRole("checkbox")).toBeDisabled() - }) - - test("renders an invalid CheckboxRow as passed", async () => { - act(() => { - render(<CheckboxRow invalid label="invalid checkbox"/>) - }) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-invalid") - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - }) - - test("renders an invalid CheckRow with an error text as passed", async () => { - render(<CheckboxRow errortext="This is an error text" label="Checkbox"/>) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-invalid") - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - expect(screen.getByText("This is an error text")).toBeInTheDocument() - }) - - test("renders a valid CheckboxRow as passed", async () => { - act(() => { - render(<CheckboxRow valid label="valid checkbox"/>) - }) - expect(screen.getByRole("checkbox")).toBeInTheDocument() - expect(screen.getByRole("checkbox")).toHaveClass("juno-checkbox-valid") - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<CheckboxRow data-testid="my-checkbox-row" className="my-classname" />) - expect(screen.getByTestId("my-checkbox-row")).toHaveClass("my-classname") - }) - - test("renders all props as passed", async () => { - render(<CheckboxRow data-testid="my-checkbox-row" data-lolol="some-prop" />) - expect(screen.getByTestId("my-checkbox-row")).toHaveAttribute("data-lolol", 'some-prop') - }) - - test("fire handler on change as passed", async () => { - const onChangeSpy = jest.fn(); - render(<CheckboxRow onChange={onChangeSpy} />); - act(() => { - screen.getByRole('checkbox').click(); - }) - expect(onChangeSpy).toHaveBeenCalled(); - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/CheckboxRow/index.js b/libs/juno-ui-components/src/components/CheckboxRow/index.js deleted file mode 100644 index c21067cd1..000000000 --- a/libs/juno-ui-components/src/components/CheckboxRow/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { default as CheckboxRow } from "./CheckboxRow.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Code/Code.component.js b/libs/juno-ui-components/src/components/Code/Code.component.js deleted file mode 100644 index 957f9ee8b..000000000 --- a/libs/juno-ui-components/src/components/Code/Code.component.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const codeStyles = ` - jn-bg-theme-code-block - jn-text-sm -` - -/** A basic inline <code> component. - * Accepts "content" prop or renders children as passed. - */ -export const Code = ({ content, children, className, ...props }) => { - return ( - <code className={`juno-code ${codeStyles} ${className}`} {...props}> - {content || children} - </code> - ) -} - -Code.propTypes = { - content: PropTypes.string, - className: PropTypes.string, - children: PropTypes.node, -} - -Code.defaultProps = { - content: "", - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/Code/Code.stories.js b/libs/juno-ui-components/src/components/Code/Code.stories.js deleted file mode 100644 index 089a215fe..000000000 --- a/libs/juno-ui-components/src/components/Code/Code.stories.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { Code } from './index.js'; - -export default { - title: 'Components/Code', - component: Code, - argTypes: { - children: { - control: false, - }, - }, -}; - -export const Default = { - parameters: { - docs: { - description: { - story: 'Default inline code', - }, - }, - }, - - args: { - content: '<span>Some code passed as content prop.</span>', - }, -}; - -export const WithChildren = { - parameters: { - docs: { - description: { - story: 'Inline code with children', - }, - }, - }, - - args: { - children: '<Code>Some code with children</Code>', - }, -}; diff --git a/libs/juno-ui-components/src/components/Code/Code.test.js b/libs/juno-ui-components/src/components/Code/Code.test.js deleted file mode 100644 index ba13134e7..000000000 --- a/libs/juno-ui-components/src/components/Code/Code.test.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Code } from "./index" - -describe("Code", () => { - test("renders inline code with content as passed", async () => { - render(<Code data-testid="code" content="some example code" />) - expect(screen.getByTestId("code")).toBeInTheDocument() - expect(screen.getByTestId("code")).toHaveTextContent("some example code") - }) - - test("renders inline code with children as passed", async () => { - render(<Code data-testid="code">Some example code as children</Code>) - expect(screen.getByTestId("code")).toBeInTheDocument() - expect(screen.getByTestId("code")).toHaveTextContent( - "Some example code as children" - ) - }) - - test("renders inline code with content as passed when both content and children were passed", async () => { - render( - <Code data-testid="code" content="Content is go"> - Children are meh - </Code> - ) - expect(screen.getByTestId("code")).toBeInTheDocument() - expect(screen.getByTestId("code")).toHaveTextContent("Content is go") - expect(screen.getByTestId("code")).not.toHaveTextContent("Children are meh") - }) - - test("renders inline code with a className as passed", async () => { - render(<Code data-testid="code" className="my-code-class"></Code>) - expect(screen.getByTestId("code")).toBeInTheDocument() - expect(screen.getByTestId("code")).toHaveClass("my-code-class") - }) - - test("renders inline code with all props as passed", async () => { - render(<Code data-testid="code" data-lolol="code-lang-js"></Code>) - expect(screen.getByTestId("code")).toBeInTheDocument() - expect(screen.getByTestId("code")).toHaveAttribute( - "data-lolol", - "code-lang-js" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/Code/index.js b/libs/juno-ui-components/src/components/Code/index.js deleted file mode 100644 index 89882583a..000000000 --- a/libs/juno-ui-components/src/components/Code/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Code } from "./Code.component.js" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.component.js b/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.component.js deleted file mode 100644 index e4b57fd0c..000000000 --- a/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.component.js +++ /dev/null @@ -1,224 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect, useRef } from "react" -import PropTypes from "prop-types" -import { JsonViewer } from "../JsonViewer/JsonViewer.component" -import { Icon } from "../Icon/index" - -const wrapperStyles = ` - jn-bg-theme-code-block - jn-rounded -` - -const preStyles = (wrap) => { - return ` - jn-p-6 - ${ - wrap - ? "jn-break-words jn-break-all jn-whitespace-pre-wrap" - : "jn-overflow-x-auto" - } - ` -} - -const sizeStyles = (size) => { - switch (size) { - case "small": - return ` - juno-codeblock-pre-small - jn-max-h-64 - jn-overflow-y-auto - ` - case "medium": - return ` - juno-codeblock-pre-medium - jn-max-h-[32rem] - jn-overflow-y-auto - ` - case "large": - return ` - juno-codeblock-pre-large - jn-max-h-[56rem] - jn-overflow-y-auto - ` - default: - return `` - } -} - -const codeStyles = ` - jn-bg-theme-code-block - jn-text-sm -` - -const headingStyles = ` - jn-text-sm - jn-border-b-[1px] - jn-border-theme-codeblock-bar - jn-h-[3.4375rem] - jn-flex -` - -const headingInnerStyles = ` - jn-flex - jn-font-bold - jn-px-[1.5625rem] - jn-items-center -` - -const bottomBarStyles = ` - jn-flex - jn-justify-end - jn-px-3 - jn-py-2 - jn-border-t-[1px] - jn-border-theme-codeblock-bar -` - -const copyTextStyles = ` - jn-font-bold - jn-text-sm - jn-mr-4 - jn-mt-1 -` - -const jsonStyles = ` - jn-bg-theme-code-block -` - -const jsonViewStyles = { - fontFamily: "IBM Plex Mono", - fontSize: "0.875rem", - padding: "1.5rem", -} - -const jsonTheme = { - base00: "var(--color-syntax-highlight-base00)", //bg - base01: "var(--color-syntax-highlight-base01)", //? - base02: "var(--color-syntax-highlight-base02)", //lines and boxes - base03: "var(--color-syntax-highlight-base03)", - base04: "var(--color-syntax-highlight-base04)", - base05: "var(--color-syntax-highlight-base05)", - base06: "var(--color-syntax-highlight-base06)", - base07: "var(--color-syntax-highlight-base07)", - base08: "var(--color-syntax-highlight-base08)", // NULL - base09: "var(--color-syntax-highlight-base09)", // String value - base0A: "var(--color-syntax-highlight-base0A)", // NaN - base0B: "var(--color-syntax-highlight-base0B)", // float value - base0C: "var(--color-syntax-highlight-base0C)", // index - base0D: "var(--color-syntax-highlight-base0D)", // expanded icon - base0E: "var(--color-syntax-highlight-base0E)", // bool + collapsed icon - base0F: "var(--color-syntax-highlight-base0F)", // integer value -} - -/** A basic CodeBlock component. Accepts a content prop or children. Will render a pre-wrapped code element. */ -export const CodeBlock = ({ - content, - children, - heading, - wrap, - size, - copy, - lang, - className, - ...props -}) => { - const [isCopied, setIsCopied] = useState(false) - const timeoutRef = React.useRef(null) - - React.useEffect(() => { - return () => clearTimeout(timeoutRef.current) // clear when component is unmounted - }, []) - - const theCode = useRef(null) - - const handleCopyClick = () => { - const textToCopy = - lang === "json" - ? JSON.stringify(content || children) - : theCode.current.textContent - navigator.clipboard.writeText(textToCopy) - setIsCopied(true) - clearTimeout(timeoutRef.current) // clear any possibly existing Refs - timeoutRef.current = setTimeout(() => setIsCopied(false), 1000) - } - - return ( - <div - className={`juno-code-block ${wrapperStyles} ${ - lang ? `juno-code-block-lang-${lang}` : "" - } ${className}`} - data-lang={lang || null} - {...props} - > - {heading && heading.length ? ( - <div className={`juno-codeblock-heading ${headingStyles}`}> - <span className={`${headingInnerStyles}`}>{heading}</span> - </div> - ) : ( - "" - )} - {lang === "json" ? ( - <JsonViewer - data={content} - expanded={3} - theme={jsonTheme} - style={jsonViewStyles} - /> - ) : ( - <pre - className={`juno-code-block-pre ${preStyles(wrap)} ${sizeStyles( - size - )}`} - > - <code className={`${codeStyles}`} ref={theCode}> - {content || children} - </code> - </pre> - )} - - {copy ? ( - <div className={`juno-codeblock-bottombar ${bottomBarStyles}`}> - <span className={`${copyTextStyles}`}> - {isCopied ? "Copied!" : ""} - </span> - <Icon icon="contentCopy" onClick={handleCopyClick} /> - </div> - ) : ( - "" - )} - </div> - ) -} - -CodeBlock.propTypes = { - /** The content to render. Will override children if passed. */ - content: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), - /** The children to render. Will be overridden by content prop if passed as well. */ - children: PropTypes.oneOfType([PropTypes.node, PropTypes.object]), - /** Pass at title to render. Will look like a single tab. */ - heading: PropTypes.string, - /** Set whether the code should wrap or not. Default is true. */ - wrap: PropTypes.bool, - /** Set the size of the CodeBlock. Default is "auto" */ - size: PropTypes.oneOf(["auto", "small", "medium", "large"]), - /** Render a button to copy the code to the clipboard. Defaults to true */ - copy: PropTypes.bool, - /** Pass a lang prop. Passing "json" will render a fully-featured JsonView. Will also add a data-lang-attribute to the codeblock */ - lang: PropTypes.string, - /** Add a custom className to the wrapper of the CodeBlock */ - className: PropTypes.string, -} - -CodeBlock.defaultProps = { - content: "", - children: null, - wrap: true, - size: "auto", - copy: true, - lang: "", - className: "", -} diff --git a/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.stories.js b/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.stories.js deleted file mode 100644 index 1813adb6b..000000000 --- a/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.stories.js +++ /dev/null @@ -1,210 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { CodeBlock } from './index.js'; -import { Tabs } from '../Tabs/index.js'; -import { TabList } from '../TabList/index.js'; -import { Tab } from '../Tab/index.js'; -import { Default as TabStory } from '../Tab/Tab.stories.js'; -import { TabPanel } from '../TabPanel/index.js'; - -export default { - title: 'Components/CodeBlock', - component: CodeBlock, - argTypes: { - size: { - options: ['auto', 'small', 'medium', 'large'], - control: { type: 'select' }, - }, - children: { - control: false, - }, - }, -}; - -const TabsTemplate = ({ tabs, codeBlocks, ...args }) => ( - <Tabs variant="codeblocks"> - <TabList> - {tabs.map((tab, t) => ( - <Tab {...tab} key={`t-${t}`}></Tab> - ))} - </TabList> - {codeBlocks.map((codeBlock, c) => ( - <TabPanel> - <CodeBlock {...codeBlock} key={`c-${c}`} /> - </TabPanel> - ))} - </Tabs> -); - -export const Default = { - parameters: { - docs: { - description: { - story: 'Default code block', - }, - }, - }, - - args: { - content: 'Some code goes here', - }, -}; - -export const DefaultWithChildren = { - parameters: { - docs: { - description: { - story: 'Code Block with children', - }, - }, - }, - - args: { - lang: 'html', - children: `<html lang="en"> - <head> - <title="Multi-line Html" /> - </head> - <body> - <main> - </main> - </body> - </html>`, - }, -}; - -export const DefaultWithHeading = { - parameters: { - docs: { - description: { - story: 'Code Block with Heading WIP', - }, - }, - }, - - args: { - children: `<CodeBlock> - <p>some code here</p> - </CodeBlock>`, - heading: 'CodeBlock.jsx', - }, -}; - -export const FixedSize = { - parameters: { - docs: { - description: { - story: 'Fixed size CodeBlock with overflow scrollbars', - }, - }, - }, - - args: { - size: 'small', - content: ` -------- BEGIN CERTIFICATE -------- - 30818902818100C4A06B7B52F8D17DC1C0 - B47362C64AB799AAE19E245A7559E9CEEC - 7D8AA4DF07CB0B21FDFD763C63A313A668 - FE9D764ED913C51A676788DB62AF624F42 - 2C2F112C1316922AA5D37823CD9F43D1FC - 54513D14B2-9E36991F08A042C42EAAEEE - 5FE8E2CB10167174A359CEBF6FACC2C9CA - 933AD403137EE2C3F4CBED9460129C72B0 - 030100030818902818100C4A06B7B52F8D - 17DC1CCB47362C64AB799AAE19E245A755 - 9E9CEEC7D8AA4DF07CB0B21FDFD763C63A - 313A668FE9D764ED913C51A676788DB62A - F624F422C2F112C1316922AA5D37823CD9 - F43D1FC54513D14B2-9E36991F08A042C4 - 2EAAEEE5FE8E2CB10167174A359CEBF6FA - CC2C9CA933AD403137E2C3F4CBED946012 - 9C72B020301000 - -------- END CERTIFICATE -------- `, - }, -}; - -export const NonWrappingCodeBlock = { - parameters: { - docs: { - description: { - story: 'Pass `wrap={false}` to disable line-wrapping', - }, - }, - }, - - args: { - wrap: false, - children: - '-------- BEGIN CERTIFICATE -------- 30818902818100C4A06B7B52F8D17DC1CCB47362C64AB799AAE19E245A7559E9CEEC7D8AA4DF07CB0B21FDFD763C63A313A668FE9D764ED913C51A676788DB62AF624F422C2F112C1316922AA5D37823CD9F43D1FC54513D14B2-9E36991F08A042C42EAAEEE5FE8E2CB10167174A359CEBF6FACC2C9CA933AD403137EE2C3F4CBED9460129C72B02030100030818902818100C4A06B7B52F8D17DC1CCB47362C64AB799AAE19E245A7559E9CEEC7D8AA4DF07CB0B21FDFD763C63A313A668FE9D764ED913C51A676788DB62AF624F422C2F112C1316922AA5D37823CD9F43D1FC54513D14B2-9E36991F08A042C42EAAEEE5FE8E2CB10167174A359CEBF6FACC2C9CA933AD403137E2C3F4CBED9460129C72B020301000 -------- END CERTIFICATE --------', - }, -}; - -export const JSONView = { - parameters: { - docs: { - description: { - story: 'Json View', - }, - }, - }, - - args: { - lang: 'json', - heading: 'Json CodeBlock', - content: { - someKey: 'some value', - someOtherKey: 'some other value', - nestedKeys: { - firstNestedKey: 'first nested value', - }, - }, - }, -}; - -export const CodeBlocksWithTabs = { - render: TabsTemplate, - - parameters: { - docs: { - description: { - story: - "Tabbed CodeBlocks can be composed using the `<Tabs>`, `<Tab>`, `<TabList>`, and `<TabPanel>` components. Make sure to pass `variant='codeblocks'` to the `<Tabs>` component.", - }, - }, - }, - - args: { - tabs: [ - { ...TabStory.args, children: 'UserData.jsx', key: 't-0' }, - { ...TabStory.args, children: 'data.json', key: 't-1' }, - { ...TabStory.args, children: 'UserData.html', key: 't-2' }, - ], - codeBlocks: [ - { content: "<UserData name='User' data={data.json} />" }, - { - lang: 'json', - content: { - firstName: 'Joan', - lastName: 'Clarke', - placeOfBirth: 'West Norwood, London, England', - }, - }, - { - content: `<div> - <dl> - <dt>First Name</dt> - <dd>Joan</dd> - <dt>Last Name</dt> - <dd>Clarke</dd> - <dt>Place of Birth</dt> - <dd>West Norwood, London, England</dd> - </dl> - </div>`, - }, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.test.js b/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.test.js deleted file mode 100644 index 9be0d7e40..000000000 --- a/libs/juno-ui-components/src/components/CodeBlock/CodeBlock.test.js +++ /dev/null @@ -1,185 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { CodeBlock } from "./index" - -describe("CodeBlock", () => { - test("renders a CodeBlock with content as passed", async () => { - render(<CodeBlock data-testid="codeblock" content="some example code" />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(screen.getByTestId("codeblock")).toHaveTextContent( - "some example code" - ) - }) - - test("renders a CodeBlock with children as passed", async () => { - render( - <CodeBlock data-testid="codeblock">{"some children here"}</CodeBlock> - ) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(screen.getByTestId("codeblock")).toHaveTextContent( - "some children here" - ) - }) - - test("renders a CodeBlock with a lang attribute as passed", async () => { - render(<CodeBlock data-testid="codeblock" lang="javascript" />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(screen.getByTestId("codeblock")).toHaveAttribute( - "data-lang", - "javascript" - ) - }) - - test("renders a wrapping CodeBlock by default", async () => { - render(<CodeBlock data-testid="codeblock" />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(document.querySelector("pre")).toHaveClass("jn-break-words") - expect(document.querySelector("pre")).toHaveClass("jn-break-all") - expect(document.querySelector("pre")).toHaveClass("jn-whitespace-pre-wrap") - expect(document.querySelector("pre")).not.toHaveClass("jn-overflow-x-auto") - }) - - test("renders a non-wrapping CodeBlock as passed", async () => { - render(<CodeBlock data-testid="codeblock" wrap={false} />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(document.querySelector("pre")).not.toHaveClass("jn-break-words") - expect(document.querySelector("pre")).not.toHaveClass("jn-break-all") - expect(document.querySelector("pre")).not.toHaveClass( - "jn-whitespace-pre-wrap" - ) - expect(document.querySelector("pre")).toHaveClass("jn-overflow-x-auto") - }) - - test("renders a CodeBlock without height restrictions by default", async () => { - render(<CodeBlock content="123" />) - expect(document.querySelector("pre")).toBeInTheDocument() - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-small" - ) - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-medium" - ) - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-large" - ) - }) - - test("renders a small sized CodeBlock as passed", async () => { - render(<CodeBlock content="123" size="small" />) - expect(document.querySelector("pre")).toBeInTheDocument() - expect(document.querySelector("pre")).toHaveClass( - "juno-codeblock-pre-small" - ) - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-medium" - ) - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-large" - ) - }) - - test("renders a medium sized CodeBlock as passed", async () => { - render(<CodeBlock content="123" size="medium" />) - expect(document.querySelector("pre")).toBeInTheDocument() - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-small" - ) - expect(document.querySelector("pre")).toHaveClass( - "juno-codeblock-pre-medium" - ) - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-large" - ) - }) - - test("renders a medium sized CodeBlock as passed", async () => { - render(<CodeBlock content="123" size="large" />) - expect(document.querySelector("pre")).toBeInTheDocument() - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-small" - ) - expect(document.querySelector("pre")).not.toHaveClass( - "juno-codeblock-pre-medium" - ) - expect(document.querySelector("pre")).toHaveClass( - "juno-codeblock-pre-large" - ) - }) - - test("renders a heading as passed", async () => { - render( - <CodeBlock - data-testid="codeblock" - content="123" - heading="Look, a CodeBlock!" - /> - ) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect( - document.querySelector(".juno-codeblock-heading") - ).toBeInTheDocument() - expect(document.querySelector(".juno-codeblock-heading")).toHaveTextContent( - "Look, a CodeBlock!" - ) - }) - - test("renders a JSONView as passed", async () => { - const testJson = { - someKey: "some value", - someOtherKey: 12, - } - render(<CodeBlock data-testid="codeblock" lang="json" content={testJson} />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(screen.getByTestId("codeblock")).toHaveAttribute("data-lang", "json") - expect(document.querySelector("[data-json-viewer]")).toBeInTheDocument() - }) - - test("renders a JSONView as passed with children", async () => { - const testObj = { - someKey: "some value", - someOtherKey: 12, - } - render( - <CodeBlock data-testid="codeblock" lang="json"> - {testObj} - </CodeBlock> - ) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("juno-code-block") - expect(screen.getByTestId("codeblock")).toHaveAttribute("data-lang", "json") - expect(document.querySelector("[data-json-viewer]")).toBeInTheDocument() - }) - - test("renders a CodeBlock with a Copy button by default", async () => { - render(<CodeBlock />) - expect( - screen.getByRole("button", { name: "contentCopy" }) - ).toBeInTheDocument() - }) - - test("renders a CodeBlock with className as passed", async () => { - render(<CodeBlock data-testid="codeblock" className="my-class" />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveClass("my-class") - }) - - test("renders a CodeBlock with all props as passed", async () => { - render(<CodeBlock data-testid="codeblock" data-lolol="code-lang-js" />) - expect(screen.getByTestId("codeblock")).toBeInTheDocument() - expect(screen.getByTestId("codeblock")).toHaveAttribute( - "data-lolol", - "code-lang-js" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/CodeBlock/index.js b/libs/juno-ui-components/src/components/CodeBlock/index.js deleted file mode 100644 index 4a2920a81..000000000 --- a/libs/juno-ui-components/src/components/CodeBlock/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { CodeBlock } from "./CodeBlock.component.js" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/ComboBox/ComboBox.component.js b/libs/juno-ui-components/src/components/ComboBox/ComboBox.component.js deleted file mode 100644 index 75d199f5e..000000000 --- a/libs/juno-ui-components/src/components/ComboBox/ComboBox.component.js +++ /dev/null @@ -1,534 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect, useId, useMemo, createContext } from "react" -import PropTypes from "prop-types" -import { Combobox } from "@headlessui/react" -import { Float } from "@headlessui-float/react" -import { Label } from "../Label/index.js" -import { FormHint } from "../FormHint/index.js" -import { Icon } from "../Icon/index.js" -import { Spinner } from "../Spinner/index.js" -import { flip, offset, shift, size } from '@floating-ui/react-dom' -import { usePortalRef } from "../PortalProvider/index" -import { createPortal } from "react-dom" - -// STYLES - -const inputWrapperStyles = ` - jn-relative -` - -const labelStyles = ` - jn-pointer-events-none - jn-top-2 - jn-left-[0.9375rem] -` - -const inputStyles = ` - jn-rounded-3px - jn-bg-theme-textinput - jn-text-theme-textinput - jn-border - jn-text-base - jn-leading-4 - jn-w-full - jn-px-4 - jn-h-textinput - jn-text-left - jn-overflow-hidden - jn-text-ellipsis - jn-whitespace-nowrap - focus:jn-outline-none - focus:jn-ring-2 - focus:jn-ring-theme-focus -` - -const withLabelInputStyles = ` - jn-pt-[1.125rem] - jn-pb-1 -` - -const noLabelInputStyles = ` - jn-py-4 -` - -const disabledInputStyles = ` - jn-cursor-not-allowed - jn-pointer-events-none - jn-opacity-50 -` - -const defaultBorderStyles = ` - jn-border-theme-textinput-default -` - -const validStyles = ` - jn-border-theme-success -` - -const invalidStyles = ` - jn-border-theme-error -` - -const buttonStyles = ` - jn-absolute - jn-top-0 - jn-right-0 - jn-h-textinput - jn-w-6 - jn-h-4 - jn-border-l-0 - jn-border-y-[1px] - jn-border-r-[1px] - jn-rounded-tr - jn-rounded-br - jn-appearance-none - jn-bg-theme-textinput - jn-text-theme-textinput -` - -const defaultButtonStyles = ` - jn-border-theme-textinput-default -` - -const invalidButtonStyles = ` - jn-border-theme-error -` - -const validButtonStyles = ` - jn-border-theme-success -` - -const disabledButtonStyles = ` - jn-cursor-not-allowed - jn-pointer-events-none - jn-bg-transparent - jn-opacity-50 -` - -const menuStyles = ` - jn-rounded - jn-bg-theme-background-lvl-1 - jn-w-full - jn-overflow-y-auto -` - -const iconContainerStyles = ` - jn-absolute - jn-top-[.4rem] - jn-right-6 -` - -const centeredIconStyles = ` - jn-absolute - jn-top-1/2 - jn-left-1/2 - jn-translate-y-[-50%] - jn-translate-x-[-0.75rem] -` - -// CONTEXT -export const ComboBoxContext = createContext() - -// COMBOBOX -export const ComboBox = ({ - ariaLabel, - children, - className, - defaultValue, - disabled, - error, - errortext, - helptext, - id, - invalid, - loading, - label, - name, - nullable, - onBlur, - onChange, - onFocus, - onInputChange, - placeholder, - required, - successtext, - truncateOptions, - valid, - value, - valueLabel, - width, - ...props -}) => { - - const isNotEmptyString = (str) => { - return !(typeof str === 'string' && str.trim().length === 0) - } - - const theId = id || "juno-combobox-" + useId() - const helptextId = "juno-combobox-helptext-" + useId() - - const [optionValuesAndLabels, setOptionValuesAndLabels] = useState(new Map()) - const [query, setQuery] = useState("") - const [selectedValue, setSelectedValue] = useState(value) - const [isLoading, setIsLoading] = useState(false) - const [hasError, setHasError] = useState(false) - const [hasFocus, setFocus] = useState(false) - const [isInvalid, setIsInvalid] = useState(false) - const [isValid, setIsValid] = useState(false) - - // This callback is for all ComboBoxOptions to send us their value, label and children so we can save them as a map in our state. - // We need this because the Select component wants to display the selected value, label or children in the ComboBox input field - // but from the eventHandler we only get the value, not the label or children - const addOptionValueAndLabel = (value, label, children) => { - // append new entry to optionValuesAndLabels map containing the passed value, label and children - // use callback syntax of setState function here since we want to merge the old state with the new entry - setOptionValuesAndLabels(oldMap => (new Map(oldMap).set(value || children, { val: value, label: label, children: children }))) - } - - const invalidated = useMemo( - () => invalid || (errortext && isNotEmptyString(errortext) ? true : false), - [invalid, errortext] - ) - const validated = useMemo( - () => valid || (successtext && isNotEmptyString(successtext) ? true : false), - [valid, successtext] - ) - - useEffect(() => { - setSelectedValue(value) - }, [value] ) - - useEffect(() => { - setHasError(error) - }, [error]) - - useEffect(() => { - setIsLoading(loading) - }, [loading]) - - useEffect(() => { - setIsInvalid(invalidated) - }, [invalidated]) - - useEffect(() => { - setIsValid(validated) - }, [validated]) - - const handleChange = (value) => { - setSelectedValue(value) - onChange && onChange(value) - } - - const handleInputChange = (event) => { - setQuery(event?.target?.value) - onInputChange && onInputChange(event) - } - - const handleFocus = (event) => { - setFocus(true) - onFocus && onFocus(event) - } - - const handleBlur = (event) => { - setFocus(false) - onBlur && onBlur(event) - } - - const portalContainerRef = usePortalRef() - - // Headless-UI-Float Middleware - const middleware = [ - offset(4), - shift(), - flip(), - size({ - boundary: 'viewport', - apply({availableWidth, availableHeight, elements}) { - Object.assign(elements.floating.style, { - maxWidth: `${availableWidth}px`, - maxHeight: `${availableHeight}px`, - overflowY: "auto" - }) - } - }) - ] - - const filteredChildren = - query === "" - ? children - : children.filter((child) => { - // ensure that we filter on the value that is displayed to the user. Apply the same logic as when rendering - // the options, i.e. match children if present, if not match label, lastly if neither label nor children exist, then check value - const optionDisplayValue = child.props.children?.toString() || child.props.label || child.props.value - return optionDisplayValue?.toLowerCase().includes(query.toLowerCase()) - } - ) - - - return ( - - - <ComboBoxContext.Provider value={{ - selectedValue: selectedValue, - truncateOptions: truncateOptions, - addOptionValueAndLabel: addOptionValueAndLabel - }} - > - - <div - className={` - juno-combobox-wrapper - jn-relative - ${ width == "auto" ? "jn-inline-block" : "jn-block" } - ${ width == "auto" ? "jn-w-auto" : "jn-w-full" } - `} - > - <Combobox - defaultValue={defaultValue} - disabled={ disabled || isLoading || hasError } - name={name} - nullable={nullable} - onChange={handleChange} - value={ selectedValue || defaultValue } - {...props} - > - - <Float - composable - adaptiveWidth - middleware={middleware} - > - - <Float.Reference> - <div - className={` - juno-combobox-input-wrapper - ${ inputWrapperStyles } - ${ disabled ? "jn-cursor-not-allowed" : "" } - `} - > - - { label && isNotEmptyString(label) && !isLoading && !hasError ? - <Label - text={label} - disabled={disabled} - required={required} - htmlFor={theId} - className={`${labelStyles}`} - floating - minimized={ placeholder || hasFocus || (query && isNotEmptyString(query) || (selectedValue && isNotEmptyString(selectedValue)) ) ? true : false} - /> - : - "" - } - - <Combobox.Input - autoComplete="off" - aria-label={ ariaLabel || label } - aria-describedby={ helptext ? helptextId : "" } - disabled={ disabled || isLoading || hasError } - id={theId} - onBlur={handleBlur} - onChange={handleInputChange} - onFocus={handleFocus} - placeholder={ !isLoading && !hasError ? placeholder : ""} - displayValue={ - (val) => - optionValuesAndLabels.get(val)?.children || optionValuesAndLabels.get(val)?.label || valueLabel || val - - - } // Headless-UI expects a callback here - className={` - juno-combobox-input - ${inputStyles} - ${ label && isNotEmptyString(label) ? withLabelInputStyles : noLabelInputStyles } - ${ disabled ? disabledInputStyles : "" } - ${ isInvalid ? "juno-combobox-invalid " + invalidStyles : "" } - ${ isValid ? "juno-combobox-valid " + validStyles : "" } - ${ isValid || isInvalid ? "" : defaultBorderStyles } - ${ isLoading ? "juno-combobox-loading jn-cursor-not-allowed" : "" } - ${ hasError ? "juno-combobox-error jn-cursor-not-allowed" : "" } - ${className} - `} - /> - - { - isLoading || hasError ? - <span className={`${centeredIconStyles}`}> - { isLoading ? - <Spinner className={"jn-cursor-not-allowed"} /> - : - <Icon icon="errorOutline" color="jn-text-theme-error" className={"jn-cursor-not-allowed"} /> - } - </span> - : - isValid || isInvalid ? - <span className={` - juno-combobox-icon-container - ${iconContainerStyles} - ${ disabled ? "jn-opacity-50" : "" } - `}> - <Icon - icon={ isValid ? "checkCircle" : "dangerous" } - color={ isValid ? "jn-text-theme-success" : "jn-text-theme-error" } - /> - </span> - : - "" - } - - { !hasError && !isLoading ? - - <Combobox.Button - disabled={disabled} - className={` - juno-combobox-toggle - ${buttonStyles} - ${ disabled ? disabledButtonStyles : "" } - ${ isInvalid ? "juno-combobox-toggle-invalid " + invalidButtonStyles : "" } - ${ isValid ? "juno-combobox-toggle-valid " + validButtonStyles : "" } - ${ isValid || isInvalid ? "" : defaultButtonStyles } - `} - > - {({open}) => ( - <Icon icon={ open ? "expandLess": "expandMore"} /> - )} - </Combobox.Button> - - : "" - } - </div> - </Float.Reference> - - - { createPortal( - <Float.Content> - <Combobox.Options - unmount={false} - className={` - juno-combobox-options - ${menuStyles} - `} - > - { filteredChildren } - </Combobox.Options> - </Float.Content> - , portalContainerRef ? portalContainerRef : document.body - )} - - </Float> - - </Combobox> - - { errortext && isNotEmptyString(errortext) ? - <FormHint text={errortext} variant="error"/> - : - "" - } - { successtext && isNotEmptyString(successtext) ? - <FormHint text={successtext} variant="success"/> - : - "" - } - { helptext && isNotEmptyString(helptext) ? - <FormHint text={helptext} id={helptextId} /> - : - "" - } - - </div> - - </ComboBoxContext.Provider> - - ) - -} - - -ComboBox.propTypes = { - /** The aria-label of the ComboBox. Defaults to the label if label was passed. */ - ariaLabel: PropTypes.string, - /** The children to Render. Use `ComboBox.Option` elements. */ - children: PropTypes.node, - /** A custom className. Will be passed to the text input element of the ComboBox */ - className: PropTypes.string, - /** Pass a defaultValue to use as an uncontrolled Component that will handle its state internally */ - defaultValue: PropTypes.string, - /** Whether the ComboBox is disabled */ - disabled: PropTypes.bool, - /** Whether the ComboBox has an error. Note this refers to an internal error like failing to load options etc., to indicate failed validation use `invalid` instead. */ - error: PropTypes.bool, - /** An errortext to display when the ComboBox failed validation or an internal error occurred. */ - errortext: PropTypes.node, - /** A helptext to render to explain meaning and significance of the ComboBox */ - helptext: PropTypes.node, - /** The Id of the ComboBox. Will be assigned to the text input part of the ComboBox. If not passed, an id will be auto-generated. */ - id: PropTypes.string, - /** Whether the ComboBox failed validation */ - invalid: PropTypes.bool, - /** The label of the ComboBox */ - label: PropTypes.string, - /** Whether the ComboBox is busy loading options */ - loading: PropTypes.bool, - /** The name attribute of the ComboBox when used as part of a form */ - name: PropTypes.string, - /** Whether the ComboBox can be reset to having no value selected by manually clearing the text and clicking outside of the ComboBox. Default is TRUE. When set to FALSE, the selected value can only be changed by selecting another value after the initial selection, but never back to no selected value at all. */ - nullable: PropTypes.bool, - /** A handler to execute when the ComboBox looses focus */ - onBlur: PropTypes.func, - /** A handler to execute when the ComboBox' selected value changes */ - onChange: PropTypes.func, - /** A handler to execute when the ComboBox input receives focus */ - onFocus: PropTypes.func, - /** Handler to execute when the ComboBox text input value changes */ - onInputChange: PropTypes.func, - /** A placeholder to render in the text input */ - placeholder: PropTypes.string, - /** Whether the ComboBox is required */ - required: PropTypes.bool, - /** A text to display in case the ComboBox was successfully validated. Will set the ComboBox to `valid` when passed. */ - successtext: PropTypes.node, - /** Whether the option labels should be truncated in case they are longer/wider than the available space in an option or not. Default is FALSE. */ - truncateOptions: PropTypes.bool, - /** Whether the ComboBox was successfully validated */ - valid: PropTypes.bool, - /** The selected value of the ComboBox in Controlled Mode. */ - value: PropTypes.string, - /** The label of the passed value or defaultValue. If you want to use controlled mode or pass as defaultValue in uncontrolled mode and additionally use labels for human-readable SelectOptions, you need to also pass the matching label for the passed value/defaultValue so that the Select component can render itself properly */ - valueLabel: PropTypes.string, - /** The width of the text input. Either 'full' (default) or 'auto'. */ - width: PropTypes.oneOf(["full", "auto"]) -} - -ComboBox.defaultProps = { - ariaLabel: undefined, - children: null, - className: "", - defaultValue: "", - disabled: false, - error: false, - errortext: "", - helptext: "", - id: "", - invalid: false, - label: undefined, - loading: false, - name: "", - nullable: true, - onBlur: undefined, - onChange: undefined, - onFocus: undefined, - onInputChange: undefined, - placeholder: "Select…", - required: false, - successtext: "", - truncateOptions: false, - valid: false, - value: "", - valueLabel: undefined, - width: "full", -} diff --git a/libs/juno-ui-components/src/components/ComboBox/ComboBox.stories.js b/libs/juno-ui-components/src/components/ComboBox/ComboBox.stories.js deleted file mode 100644 index b2eb4eed0..000000000 --- a/libs/juno-ui-components/src/components/ComboBox/ComboBox.stories.js +++ /dev/null @@ -1,886 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from 'react'; -import { ComboBox } from './index.js'; -import { ComboBoxOption } from '../ComboBoxOption/index.js'; -import { PortalProvider } from '../PortalProvider/PortalProvider.component'; - -export default { - title: 'Forms/ComboBox/ComboBox', - component: ComboBox, - argTypes: { - children: { - control: false, - }, - errortext: { - control: false, - }, - helptext: { - control: false, - }, - successtext: { - control: false, - }, - }, - decorators: [ - (Story) => ( - <div className="jn-pb-12"> - <PortalProvider> - <Story /> - </PortalProvider> - </div> - ), - ], -}; - -const Template = ({ children, ...args }) => { - return <ComboBox {...args}>{children}</ComboBox>; -}; - -const ConstrainedWidthTemplate = ({ children, ...args }) => { - return ( - <div style={{ width: '300px' }}> - <ComboBox {...args}>{children}</ComboBox> - </div> - ); -}; - -const ControlledTemplate = ({ value, children, ...args }) => { - const [v, setV] = useState(value); - - useEffect(() => { - setV(value); - }, [value]); - - return <ComboBox value={v}>{children}</ComboBox>; -}; - -export const Default = { - render: Template, - - args: { - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const ControlledComboBox = { - render: ControlledTemplate, - - args: { - value: 'Houdini', - label: 'A controlled ComboBox', - children: [ - <ComboBoxOption value="Caligari" key="1"> - Caligari - </ComboBoxOption>, - <ComboBoxOption value="Houdini" key="2"> - Houdini - </ComboBoxOption>, - <ComboBoxOption value="Lencia" key="3"></ComboBoxOption>, - ], - }, -}; - -export const UncontrolledComboBox = { - render: Template, - - args: { - defaultValue: 'Lencia', - label: 'An uncontrolled ComboBox', - children: [ - <ComboBoxOption value="Caligari" key="1"> - Caligari - </ComboBoxOption>, - <ComboBoxOption value="Houdini" key="2"> - Houdini - </ComboBoxOption>, - <ComboBoxOption value="Lencia" key="3"></ComboBoxOption>, - ], - }, -}; - -export const WithLabel = { - render: Template, - - args: { - label: 'ComboBox', - placeholder: '', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const WithLabelAndPlaceholder = { - render: Template, - - args: { - label: 'ComboBox', - placeholder: 'Type or select an Option…', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const Required = { - render: Template, - - args: { - label: 'Required ComboBox', - required: true, - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const Valid = { - render: Template, - - args: { - label: 'Valid ComboBox', - valid: true, - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const Invalid = { - render: Template, - - args: { - label: 'invalid ComboBox', - invalid: true, - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const Disabled = { - render: Template, - - args: { - label: 'Disabled ComboBox', - disabled: true, - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const DisabledOption = { - render: Template, - - args: { - label: 'ComboBox with a Disabled Option', - helptext: 'Option Carrots should be disabled', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2" disabled> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - ], - }, -}; - -export const WithHelpText = { - render: Template, - - args: { - label: 'ComboBox', - helptext: 'Helptext to describe meaning and significance of the ComboBox', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const WithHelpTextAsNode = { - render: Template, - - args: { - label: 'ComboBox', - helptext: ( - <> - This is a helptext with a <a href="#">Link</a> - </> - ), - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const WithErrorText = { - render: Template, - - args: { - label: 'ComboBox', - errortext: 'Invalidated by passing an errortext', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const WithSuccessText = { - render: Template, - - args: { - label: 'ComboBox', - successtext: 'Validated by passing a successtext', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - <ComboBoxOption value="Eggplant" key="7"> - Eggplant - </ComboBoxOption>, - <ComboBoxOption value="Zucchini" key="8"> - Zucchini - </ComboBoxOption>, - <ComboBoxOption value="Brussels sprouts" key="9"> - Brussels Sprouts - </ComboBoxOption>, - <ComboBoxOption value="Horseradish" key="10"> - Horseradish - </ComboBoxOption>, - <ComboBoxOption value="Green beans" key="11"> - Green Beans - </ComboBoxOption>, - <ComboBoxOption value="Mushrooms" key="12"> - Mushrooms - </ComboBoxOption>, - <ComboBoxOption value="Leek" key="13"> - Leek - </ComboBoxOption>, - <ComboBoxOption value="Artichokes" key="14"> - Artichokes - </ComboBoxOption>, - <ComboBoxOption value="Peas" key="15"> - Peas - </ComboBoxOption>, - <ComboBoxOption value="Potatoes" key="16"> - Potatoes - </ComboBoxOption>, - ], - }, -}; - -export const NonNullable = { - render: Template, - - args: { - nullable: false, - label: 'Non-Nullable ComboBox', - helptext: - 'This Select can not be reset to having no value selected. The last selected value will remian selected when emptying the input field.', - children: [ - <ComboBoxOption value="Rhubarb" key="1"> - Rhubarb - </ComboBoxOption>, - <ComboBoxOption value="Carrots" key="2"> - Carrots - </ComboBoxOption>, - <ComboBoxOption value="Spinach" key="3"> - Spinach - </ComboBoxOption>, - <ComboBoxOption value="Tomatoes" key="4"> - Tomatoes - </ComboBoxOption>, - <ComboBoxOption value="Cucumbers" key="5"> - Cucumbers - </ComboBoxOption>, - <ComboBoxOption value="Cauliflower" key="6"> - Cauliflower - </ComboBoxOption>, - ], - }, -}; - -export const NonTruncatedOptions = { - render: ConstrainedWidthTemplate, - - args: { - children: [ - <ComboBoxOption - value="Option with a very long title that is so long it will most likely not fit into the menu width, not at all really." - key="1" - ></ComboBoxOption>, - <ComboBoxOption - value="Yet another option with a very long title that is so long it will most likely not fit into the menu width, not at all really." - key="2" - ></ComboBoxOption>, - ], - }, -}; - -export const TruncatedOptions = { - render: ConstrainedWidthTemplate, - - args: { - truncateOptions: true, - children: [ - <ComboBoxOption - value="Option with a very long title that is so long it will most likely not fit into the menu width, not at all really." - key="1" - ></ComboBoxOption>, - <ComboBoxOption - value="Yet another option with a very long title that is so long it will most likely not fit into the menu width, not at all really." - key="2" - ></ComboBoxOption>, - ], - }, -}; - -export const OptionsWithLabels = { - render: Template, - - parameters: { - docs: { - description: { - story: - 'If an option has both a label and a child, then the child is displayed instead of the label', - }, - }, - }, - - args: { - children: [ - <ComboBoxOption value="option1_value" label="Option 1 Label" key="1" />, - <ComboBoxOption value="option2_value" label="Option 2 Label" key="2"> - Option 2 child is displayed instead of label - </ComboBoxOption>, - ], - }, -}; - -export const Loading = { - render: Template, - - args: { - loading: true, - helptext: 'ComboBox busy loading options', - }, -}; - -export const Error = { - render: Template, - - args: { - error: true, - errortext: 'ComboBox having trouble loading options', - }, -}; - -export const ValueAndDefaultValue = { - render: Template, - - args: { - value: 'Option 1', - defaultValue: 'Option 2', - children: [ - <ComboBoxOption value="Option 1" key="1" />, - <ComboBoxOption value="Option 2" key="2" />, - <ComboBoxOption value="Option 3" key="3" />, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/ComboBox/ComboBox.test.js b/libs/juno-ui-components/src/components/ComboBox/ComboBox.test.js deleted file mode 100644 index 25958bdb4..000000000 --- a/libs/juno-ui-components/src/components/ComboBox/ComboBox.test.js +++ /dev/null @@ -1,401 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { cleanup, render, screen, fireEvent } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { ComboBox } from "./index" -import { ComboBoxOption } from "../ComboBoxOption/index" - -const mockOnBlur = jest.fn() -const mockOnChange = jest.fn() -const mockOnFocus = jest.fn() -const mockOnInputChange = jest.fn() - -describe("ComboBox", () => { - afterEach(() => { - cleanup() - jest.clearAllMocks() - }) - - test("renders a ComboBox", async () => { - render(<ComboBox />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute("type", "text") - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-input") - }) - - test("renders a ComboBox with a name as passed", async () => { - render( - <ComboBox name="my-wonderful-combobox"> - <ComboBoxOption value="Option 1">Option 1</ComboBoxOption> - </ComboBox> - ) - expect(screen.getByRole("combobox")).toBeInTheDocument() - /* Here we need to directly select the input, since headless - a) does not add the name to the visible input element but to another, hidden input element it keeps in sync, and - b) react-testing fails when trying to access hidden elements by role: */ - expect( - document.querySelector("input[name='my-wonderful-combobox']") - ).toBeInTheDocument() - }) - - test("renders a ComboBox with a label as passed", async () => { - render(<ComboBox label="My Label" />) - expect(document.querySelector(".juno-label")).toBeInTheDocument() - expect(document.querySelector(".juno-label")).toHaveTextContent("My Label") - }) - - test("renders options as passed", async () => { - render( - <ComboBox> - <ComboBoxOption value="Option 1">Option 1</ComboBoxOption> - </ComboBox> - ) - const cbox = screen.getByRole("combobox") - const cbutton = screen.getByRole("button") - expect(cbox).toBeInTheDocument() - expect(cbutton).toBeInTheDocument() - await userEvent.click(cbutton) - expect(screen.getByRole("listbox")).toBeInTheDocument() - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveTextContent("Option 1") - }) - - test("renders an id as passed", async () => { - render(<ComboBox id="My Id" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute("id", "My Id") - }) - - test("renders the id of the ComboBox input as the for attribute of the label", async () => { - render(<ComboBox label="the label" />) - const cbox = screen.getByRole("combobox") - const label = document.querySelector(".juno-label") - expect(cbox).toBeInTheDocument() - expect(label).toBeInTheDocument() - expect(label.getAttribute("for")).toMatch(cbox.getAttribute("id")) - expect(screen.getByLabelText("the label")).toBeInTheDocument() - }) - - test("renders an aria-label as passed", async () => { - render(<ComboBox ariaLabel="my aria-label" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute( - "aria-label", - "my aria-label" - ) - }) - - test("renders the label as an aria-label if no aria-label was passed", async () => { - render(<ComboBox label="My Label" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute( - "aria-label", - "My Label" - ) - }) - - test("renders a ComboBox with a placeholder as passed", async () => { - render(<ComboBox placeholder="My Placeholder" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute( - "placeholder", - "My Placeholder" - ) - }) - - test("renders a disabled ComboBox as passed", async () => { - render(<ComboBox disabled />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toBeDisabled() - }) - - test("renders a required ComboBox as passed", async () => { - render(<ComboBox label="My Required ComboBox" required />) - expect(document.querySelector(".juno-label")).toBeInTheDocument() - expect(document.querySelector(".juno-required")).toBeInTheDocument() - }) - - test("renders a validated ComboBox as passed", async () => { - render(<ComboBox valid />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-valid") - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - }) - - test("renders a validated ComboBox when a successtext was passed", async () => { - render(<ComboBox successtext="Great Success!" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-valid") - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - }) - - test("renders an invalidated ComboBox as passed", async () => { - render(<ComboBox invalid />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-invalid") - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - }) - - test("renders an invalidated ComboBox when an errortext was passed", async () => { - render(<ComboBox errortext="Oh Snap!" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-invalid") - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - }) - - test("renders a helptext as passed", async () => { - render(<ComboBox helptext="A helptext goes here" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass( - "juno-form-hint-help" - ) - expect(document.querySelector(".juno-form-hint")).toHaveTextContent( - "A helptext goes here" - ) - }) - - test("renders an errortext as passed", async () => { - render(<ComboBox errortext="An errortext goes here" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass( - "juno-form-hint-error" - ) - expect(document.querySelector(".juno-form-hint")).toHaveTextContent( - "An errortext goes here" - ) - }) - - test("renders a successtext as passed", async () => { - render(<ComboBox successtext="A successtext goes here" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass( - "juno-form-hint-success" - ) - expect(document.querySelector(".juno-form-hint")).toHaveTextContent( - "A successtext goes here" - ) - }) - - test("renders a loading ComboBox with a Spinner as passed", async () => { - render(<ComboBox loading />) - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-loading") - expect(document.querySelector(".juno-spinner")).toBeInTheDocument() - }) - - test("renders a ComboBox in error state with an Error icon as passed", async () => { - render(<ComboBox error />) - expect(screen.getByRole("combobox")).toHaveClass("juno-combobox-error") - expect(screen.getByTitle("Error")).toBeInTheDocument() - }) - - test("fires an onBlur handler as passed when the ComboBox looses focus", async () => { - render(<ComboBox onBlur={mockOnBlur} />) - const user = userEvent.setup() - const cbox = screen.getByRole("combobox") - await user.click(cbox) // focus the element - await user.tab() // blur the element - expect(mockOnBlur).toHaveBeenCalled() - }) - - test("fires an onChange handler as passed when the user selects an option", async () => { - render( - <ComboBox onChange={mockOnChange}> - <ComboBoxOption value="option 1">Option 1</ComboBoxOption> - <ComboBoxOption value="option 2">Option 2</ComboBoxOption> - </ComboBox> - ) - const cbox = screen.getByRole("combobox") - const cbutton = screen.getByRole("button") - expect(cbox).toBeInTheDocument() - expect(cbutton).toBeInTheDocument() - await userEvent.click(cbutton) - expect(screen.getByRole("listbox")).toBeInTheDocument() - await userEvent.click(screen.getByRole("option", { name: "Option 2" })) - expect(mockOnChange).toHaveBeenCalled() - }) - - test("fires an onFocus handler as passed when the ComboBox receives focus", async () => { - render(<ComboBox onFocus={mockOnFocus} />) - const cbox = screen.getByRole("combobox") - await userEvent.click(cbox) - expect(mockOnFocus).toHaveBeenCalled() - }) - - test("fires an onInputChange handler when the user types into the ComboBox", async () => { - render( - <ComboBox onInputChange={mockOnInputChange}> - <ComboBoxOption value="something">Something</ComboBoxOption> - <ComboBoxOption value="something else">Something else</ComboBoxOption> - </ComboBox> - ) - const user = userEvent.setup() - const cbox = screen.getByRole("combobox") - await user.type(cbox, "a") - expect(mockOnInputChange).toHaveBeenCalled() - }) - - test("filters options as the user types", async () => { - render( - <ComboBox> - <ComboBoxOption value="aaa" name="aaa"> - aaa - </ComboBoxOption> - <ComboBoxOption value="aab" name="aab"> - aab - </ComboBoxOption> - <ComboBoxOption value="abc" name="abc"> - abc - </ComboBoxOption> - <ComboBoxOption value="123" name="123"> - 123 - </ComboBoxOption> - </ComboBox> - ) - const user = userEvent.setup() - const cbox = screen.getByRole("combobox") - expect(cbox).toBeInTheDocument() - await user.type(cbox, "a") - expect(screen.getByRole("listbox")).toBeInTheDocument() - expect(screen.getByRole("option", { name: "aaa" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "aab" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "abc" })).toBeInTheDocument() - expect( - screen.queryByRole("option", { name: "123" }) - ).not.toBeInTheDocument() - await user.type(cbox, "b") - expect( - screen.queryByRole("option", { name: "aaa" }) - ).not.toBeInTheDocument() - expect(screen.getByRole("option", { name: "aab" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "abc" })).toBeInTheDocument() - expect( - screen.queryByRole("option", { name: "123" }) - ).not.toBeInTheDocument() - await userEvent.clear(cbox) - expect(screen.getByRole("option", { name: "aaa" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "aab" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "abc" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "123" })).toBeInTheDocument() - await user.type(cbox, "1") - expect( - screen.queryByRole("option", { name: "aaa" }) - ).not.toBeInTheDocument() - expect( - screen.queryByRole("option", { name: "aab" }) - ).not.toBeInTheDocument() - expect( - screen.queryByRole("option", { name: "abc" }) - ).not.toBeInTheDocument() - expect(screen.getByRole("option", { name: "123" })).toBeInTheDocument() - }) - - test("selects an option when the user clicks it and closes the menu", async () => { - render( - <ComboBox> - <ComboBoxOption value="aaa" name="aaa"> - aaa - </ComboBoxOption> - <ComboBoxOption value="aab" name="aab"> - aab - </ComboBoxOption> - <ComboBoxOption value="abc" name="abc"> - abc - </ComboBoxOption> - <ComboBoxOption value="123" name="123"> - 123 - </ComboBoxOption> - </ComboBox> - ) - const cbox = screen.getByRole("combobox") - const cbutton = screen.getByRole("button") - expect(cbox).toBeInTheDocument() - expect(cbutton).toBeInTheDocument() - await userEvent.click(cbutton) - expect(screen.getByRole("listbox")).toBeInTheDocument() - await userEvent.click(screen.getByRole("option", { name: "abc" })) - expect(screen.queryByRole("listbox")).not.toBeInTheDocument() - expect(cbox).toHaveValue("abc") - }) - - test("works as a controlled component with a value as passed", async () => { - render( - <ComboBox value="aab"> - <ComboBoxOption value="aaa" name="aaa"> - aaa - </ComboBoxOption> - <ComboBoxOption value="aab" name="aab"> - aab - </ComboBoxOption> - <ComboBoxOption value="abc" name="abc"> - abc - </ComboBoxOption> - <ComboBoxOption value="123" name="123"> - 123 - </ComboBoxOption> - </ComboBox> - ) - const cbox = screen.getByRole("combobox") - const toggle = screen.getByRole("button") - expect(cbox).toBeInTheDocument() - expect(toggle).toBeInTheDocument() - expect(cbox).toHaveValue("aab") - await userEvent.click(toggle) - expect(screen.getByRole("listbox")).toBeInTheDocument() - const option123 = screen.getAllByRole("option")[3] - expect(option123).toHaveTextContent("123") - await userEvent.click(option123) - expect(cbox).toHaveValue("123") - }) - - test("works as an uncontrolled component with a defaultValue as passed", async () => { - render( - <ComboBox defaultValue="abc"> - <ComboBoxOption>aaa</ComboBoxOption> - <ComboBoxOption>aab</ComboBoxOption> - <ComboBoxOption>abc</ComboBoxOption> - <ComboBoxOption>123</ComboBoxOption> - </ComboBox> - ) - const cbox = screen.getByRole("combobox") - const toggle = screen.getByRole("button") - expect(cbox).toBeInTheDocument() - expect(toggle).toBeInTheDocument() - expect(cbox).toHaveValue("abc") - await userEvent.click(toggle) - expect(screen.getByRole("listbox")).toBeInTheDocument() - const option123 = screen.getAllByRole("option")[3] - expect(option123).toHaveTextContent("123") - await userEvent.click(option123) - expect(cbox).toHaveValue("123") - }) - - // Caution: The below test basically tests headless-ui behaviour, not our logic. This is here only for testing consistency and so that we know should headless ever change their behaviour: - test("works as a controlled component using value when both value and defaultValue have been passed", async () => { - render( - <ComboBox defaultValue="option 1" value="option 2"> - <ComboBoxOption value="option 1" /> - <ComboBoxOption value="option 2" /> - </ComboBox> - ) - const cbox = screen.getByRole("combobox") - expect(cbox).toBeInTheDocument() - expect(cbox).toHaveValue("option 2") - }) - - test("renders a ComboBox with a custom className as passed", async () => { - render(<ComboBox className="my-combobox" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveClass("my-combobox") - }) - - // Skipping because if we pass generic props to the ComboBox component it will be passed to the abstract headless Combobox component, but will not end up in the DOM: - test.skip("renders all props as passed", async () => { - render(<ComboBox data-lolo="1234" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute("data-lolo", "1234") - }) -}) diff --git a/libs/juno-ui-components/src/components/ComboBox/index.js b/libs/juno-ui-components/src/components/ComboBox/index.js deleted file mode 100644 index 1f4828da1..000000000 --- a/libs/juno-ui-components/src/components/ComboBox/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ComboBox } from "./ComboBox.component.js" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.component.js b/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.component.js deleted file mode 100644 index 4e39ccc55..000000000 --- a/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.component.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { Fragment, useState, useEffect, useContext } from "react" -import PropTypes from "prop-types" -import { Combobox } from "@headlessui/react" -import { ComboBoxContext } from "../ComboBox/ComboBox.component" -import { Icon } from "../Icon/Icon.component" - - -const optionStyles = ` - jn-flex - jn-pt-[0.6875rem] - jn-pb-[0.5rem] - jn-pr-[0.875rem] - jn-select-none - data-[headlessui-state=active]:jn-outline-none - data-[headlessui-state=active]:jn-ring-2 - data-[headlessui-state=active]:jn-ring-inset - data-[headlessui-state=active]:jn-ring-theme-focus - data-[headlessui-state=active]:jn-bg-theme-background-lvl-3 -` - -const unselectedOptionStyles = ` - jn-text-theme-default - jn-pl-[2.375rem] -` - -const selectedOptionStyles = ` - jn-text-theme-accent - jn-pl-3.5 -` - -const selectedIconStyles = ` - jn-inline-block - jn-mr-1.5 -` - -const disabledOptionLabelStyles = ` - jn-opacity-50 - jn-cursor-not-allowed -` - -const truncateOptionStyles = ` - jn-block - jn-h-6 - jn-overflow-hidden - jn-text-ellipsis - jn-whitespace-nowrap -` - -export const ComboBoxOption = ({ - children, - disabled, - value, - label, - className, - ...props -}) => { - - const comboBoxContext = useContext(ComboBoxContext) - const { - selectedValue: selectedValue, - truncateOptions: truncateOptions, - addOptionValueAndLabel: addOptionValueAndLabel - } = comboBoxContext || {} - - // send option metadata to the ComboBox parent component via Context - useEffect(() => { - addOptionValueAndLabel(value, label, children) - }, [value, label, children]) - - const theValue = value || children - - return ( - <Combobox.Option - value={theValue} - disabled={disabled} - as={Fragment} - > - <li - className={` - juno-combobox-option - ${ optionStyles} - ${ selectedValue === value ? selectedOptionStyles : unselectedOptionStyles } - ${ disabled ? "jn-cursor-not-allowed" : "" } - ${ className } - `} - {...props} - > - { selectedValue === theValue ? <Icon icon="check" size="18" className={`${selectedIconStyles}`} /> : "" } - <span - className={` - ${ disabled ? disabledOptionLabelStyles : "" } - ${ truncateOptions ? truncateOptionStyles : "" } - `} - > - { children || label || value } - </span> - </li> - - </Combobox.Option> - ) -} - - -ComboBoxOption.propTypes = { - children: PropTypes.string, - disabled: PropTypes.bool, - value: PropTypes.string, - label: PropTypes.string, - className: PropTypes.string, -} - -ComboBoxOption.defaultProps = { - children: undefined, - disabled: false, - value: "", - label: undefined, - className: "", -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.stories.js b/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.stories.js deleted file mode 100644 index 19111cdce..000000000 --- a/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.stories.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { ComboBox } from '../ComboBox/ComboBox.component'; -import { ComboBoxOption } from '../ComboBoxOption/ComboBoxOption.component'; - -export default { - title: 'Forms/ComboBox/ComboBoxOption', - component: ComboBoxOption, - argTypes: {}, -}; - -const Template = (args) => { - return ( - <ComboBox> - <ComboBoxOption {...args} /> - </ComboBox> - ); -}; - -export const Default = { - render: Template, - - args: { - value: 'Option 1', - }, -}; - -export const Disabled = { - render: Template, - - args: { - disabled: true, - value: 'Disabled Option', - }, -}; - -export const ChildrenOnly = { - render: Template, - - args: { - children: 'Option 1', - }, -}; diff --git a/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.test.js b/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.test.js deleted file mode 100644 index 9be5e7c25..000000000 --- a/libs/juno-ui-components/src/components/ComboBoxOption/ComboBoxOption.test.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { cleanup, render, screen } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { ComboBox } from "../ComboBox/ComboBox.component" -import { ComboBoxOption } from "../ComboBoxOption/ComboBoxOption.component" - - -describe("ComboBoxOption", () => { - - afterEach(() => { - cleanup(); - jest.clearAllMocks(); - }); - - test("renders a ComboBoxOption", async () => { - render( - <ComboBox> - <ComboBoxOption value="Option 1" /> - </ComboBox> - ) - const toggle = screen.getByRole("button") - expect(toggle).toBeInTheDocument() - await userEvent.click(toggle) - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveTextContent("Option 1") - }) - - test("renders a ComboBoxOption with label as passed", async () => { - render( - <ComboBox> - <ComboBoxOption value="option 1 value" label="Option 1 Label" /> - </ComboBox> - ) - const toggle = screen.getByRole("button") - expect(toggle).toBeInTheDocument() - await userEvent.click(toggle) - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveTextContent("Option 1 Label") - }) - - test("renders a ComboBoxOption with children as passed", async () => { - render( - <ComboBox> - <ComboBoxOption value="option 1 value">Option 1 child</ComboBoxOption> - </ComboBox> - ) - const toggle = screen.getByRole("button") - expect(toggle).toBeInTheDocument() - await userEvent.click(toggle) - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveTextContent("Option 1 child") - }) - - test("renders a ComboBoxOption with children if both label and children are passed", async () => { - render( - <ComboBox> - <ComboBoxOption value="option 1 value" label="Option 1 Label">Option 1 child</ComboBoxOption> - </ComboBox> - ) - const toggle = screen.getByRole("button") - expect(toggle).toBeInTheDocument() - await userEvent.click(toggle) - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveTextContent("Option 1 child") - }) - - test("renders a className as passed", async () => { - render( - <ComboBox> - <ComboBoxOption className="my-fancy-class"/> - </ComboBox> - ) - const toggle = screen.getByRole("button") - expect(toggle).toBeInTheDocument() - await userEvent.click(toggle) - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveClass("my-fancy-class") - }) - - test("renders all props as passed", async () => { - render( - <ComboBox> - <ComboBoxOption data-lolol="123"/> - </ComboBox> - ) - const toggle = screen.getByRole("button") - expect(toggle).toBeInTheDocument() - await userEvent.click(toggle) - expect(screen.getByRole("option")).toBeInTheDocument() - expect(screen.getByRole("option")).toHaveAttribute("data-lolol", "123") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/ComboBoxOption/index.js b/libs/juno-ui-components/src/components/ComboBoxOption/index.js deleted file mode 100644 index d24e1f852..000000000 --- a/libs/juno-ui-components/src/components/ComboBoxOption/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ComboBoxOption } from "./ComboBoxOption.component.js" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Container/Container.component.js b/libs/juno-ui-components/src/components/Container/Container.component.js deleted file mode 100644 index 356519ea3..000000000 --- a/libs/juno-ui-components/src/components/Container/Container.component.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const containerStyles = (px, py) => { - return ` - ${ px ? "jn-px-6 " : " " } - ${ py ? " jn-py-6" : "" } - ` -} - -/** - * A very basic layout container with padding. - */ -export const Container = ({ - px, - py, - className, - children, - ...props -}) => { - return ( - <div - className={`juno-container ${containerStyles(px, py)} ${className}`} - {...props} - > - {children} - </div> - ) -} - -Container.propTypes = { - /** Choose false if you don't want horizontal padding to be added. */ - px: PropTypes.bool, - /** Set to true to add vertical padding. */ - py: PropTypes.bool, - /** Add custom class name */ - className: PropTypes.string, - children: PropTypes.node, -} - -Container.defaultProps = { - px: true, - py: false, - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/Container/Container.stories.js b/libs/juno-ui-components/src/components/Container/Container.stories.js deleted file mode 100644 index 6751085d0..000000000 --- a/libs/juno-ui-components/src/components/Container/Container.stories.js +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { Container } from './index.js'; - -export default { - title: 'Layout/Container', - component: Container, - argTypes: { - children: { - control: false, - }, - }, - parameters: { - docs: { - description: { - component: - 'A very basic layout element with padding. By default has padding all around. Can be set to have only vertical padding.', - }, - }, - }, -}; - -const Template = (args) => <Container {...args}>Content goes here</Container>; - -export const Basic = { - render: Template, - - parameters: { - docs: { - description: { - story: - "Section for content displayed in the main content area. Has padding. Typically you will want to use one of these sections to wrap your main content inside as the content area itself doesn't have padding to allow for full-width content or content to be placed at the very top or bottom.", - }, - }, - }, - - args: {}, -}; - -export const WithVerticalPadding = { - render: Template, - - parameters: { - docs: { - description: { - story: - 'A content container with vertical padding added. This will add padding to both the top and the bottom of the container.', - }, - }, - }, - - args: { - py: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/Container/Container.test.js b/libs/juno-ui-components/src/components/Container/Container.test.js deleted file mode 100644 index 8a40eef40..000000000 --- a/libs/juno-ui-components/src/components/Container/Container.test.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Container } from "./index" - -describe("Container", () => { - - test("renders children as passed", async () => { - render( - <Container data-testid="container"> - <button></button> - </Container> - ) - expect(screen.getByTestId("container")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a container with horizontal padding by default", async () => { - render(<Container data-testid="container" />) - expect(screen.getByTestId("container")).toBeInTheDocument() - expect(screen.getByTestId("container")).toHaveClass("jn-px-6") - expect(screen.getByTestId("container")).not.toHaveClass("jn-py-6") - }) - - test("renders a container without horizontal padding as passed", async () => { - render(<Container data-testid="container" px={false} />) - expect(screen.getByTestId("container")).toBeInTheDocument() - expect(screen.getByTestId("container")).not.toHaveClass("jn-px-6") - expect(screen.getByTestId("container")).not.toHaveClass("jn-py-6") - }) - - test("renders a container with vertical padding as passed", async () => { - render(<Container data-testid="container" py={true} />) - expect(screen.getByTestId("container")).toBeInTheDocument() - expect(screen.getByTestId("container")).toHaveClass("jn-px-6") - expect(screen.getByTestId("container")).toHaveClass("jn-py-6") - }) - - test("renders a custom className", async () => { - render( - <Container - data-testid="container" - className="my-custom-classname" - /> - ) - expect(screen.getByTestId("container")).toBeInTheDocument() - expect(screen.getByTestId("container")).toHaveClass( - "my-custom-classname" - ) - }) - - test("renders all props", async () => { - render(<Container data-testid="container" data-lolol="some-prop" />) - expect(screen.getByTestId("container")).toBeInTheDocument() - expect(screen.getByTestId("container")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/Container/index.js b/libs/juno-ui-components/src/components/Container/index.js deleted file mode 100644 index ae48fba60..000000000 --- a/libs/juno-ui-components/src/components/Container/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Container } from "./Container.component" diff --git a/libs/juno-ui-components/src/components/ContentArea/ContentArea.component.js b/libs/juno-ui-components/src/components/ContentArea/ContentArea.component.js deleted file mode 100644 index 39b47c33a..000000000 --- a/libs/juno-ui-components/src/components/ContentArea/ContentArea.component.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { withDeprecationWarning } from '../withDeprecationWarning/index.js' - -const containerStyles = ` - jn-bg-theme-content-area-bg - jn-relative - jn-grow -` - - - -/** - * Deprecated: This component used to be used internally by AppShell but has been removed there since. It was only needed to manually scaffold an app. Use AppShell to scaffold an app layout.. - */ -export const ContentArea = ({ className, children, ...props }) => { - - return ( - <div - className={`juno-content-area ${containerStyles} ${className}`} - {...props} - > - {children} - </div> - ) -} - -ContentArea.propTypes = { - /** Add custom class name */ - className: PropTypes.string, - children: PropTypes.node, -} - -ContentArea.defaultProps = { - className: "", - children: null, -} - -export default withDeprecationWarning(ContentArea, "ContentArea is deprecated and will be removed in future versions. To be future-proof, use AppShell to scaffold an app layout.") diff --git a/libs/juno-ui-components/src/components/ContentArea/ContentArea.stories.js b/libs/juno-ui-components/src/components/ContentArea/ContentArea.stories.js deleted file mode 100644 index 4bfb82b4a..000000000 --- a/libs/juno-ui-components/src/components/ContentArea/ContentArea.stories.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -import { ContentArea } from "./index.js" - -export default { - title: "Deprecated/ContentArea", - component: ContentArea, - argTypes: { - children: { - control: false - }, - }, -} - -const Template = (args) => ( - <ContentArea {...args}>Content goes here</ContentArea> -) - -export const Basic = Template.bind({}) -Basic.parameters = { - docs: { - description: { - story: - "Deprecated: This component used to be used internally by AppShell but has been removed there since. It was only needed to manually scaffold an app. Use AppShell to scaffold an app layout.", - }, - }, -} -Basic.args = {} diff --git a/libs/juno-ui-components/src/components/ContentArea/ContentArea.test.js b/libs/juno-ui-components/src/components/ContentArea/ContentArea.test.js deleted file mode 100644 index 062f5a9d9..000000000 --- a/libs/juno-ui-components/src/components/ContentArea/ContentArea.test.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { ContentArea } from "./index" - -describe("ContentArea", () => { - test("renders a content area", async () => { - render(<ContentArea data-testid="content-area" />) - expect(screen.getByTestId("content-area")).toBeInTheDocument() - expect(screen.getByTestId("content-area")).toHaveClass( - "juno-content-area" - ) - }) - - test("renders a deprecation warning to the console", async () => { - const consoleWarnSpy = jest.spyOn(console, 'warn') - render(<ContentArea/>) - expect(consoleWarnSpy).toHaveBeenCalled() - expect(consoleWarnSpy).toHaveBeenCalledWith( - "ContentArea is deprecated and will be removed in future versions. To be future-proof, use AppShell to scaffold an app layout." - ) - consoleWarnSpy.mockRestore() - }) - - test("renders a content area with content area background color", async () => { - render(<ContentArea data-testid="content-area" />) - expect(screen.getByTestId("content-area")).toBeInTheDocument() - expect(screen.getByTestId("content-area")).toHaveClass("jn-bg-theme-content-area-bg") - }) - - test("renders a content area with flex grow", async () => { - render(<ContentArea data-testid="content-area" />) - expect(screen.getByTestId("content-area")).toBeInTheDocument() - expect(screen.getByTestId("content-area")).toHaveClass("jn-grow") - }) - - test("renders children as passed", async () => { - render( - <ContentArea data-testid="content-area"> - <button></button> - </ContentArea> - ) - expect(screen.getByTestId("content-area")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render( - <ContentArea - data-testid="content-area" - className="my-custom-classname" - /> - ) - expect(screen.getByTestId("content-area")).toBeInTheDocument() - expect(screen.getByTestId("content-area")).toHaveClass( - "my-custom-classname" - ) - }) - - test("renders all props", async () => { - render( - <ContentArea data-testid="content-area" data-lolol="some-prop" /> - ) - expect(screen.getByTestId("content-area")).toBeInTheDocument() - expect(screen.getByTestId("content-area")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/ContentArea/index.js b/libs/juno-ui-components/src/components/ContentArea/index.js deleted file mode 100644 index fc03983c3..000000000 --- a/libs/juno-ui-components/src/components/ContentArea/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { default as ContentArea } from "./ContentArea.component" diff --git a/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.component.js b/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.component.js deleted file mode 100644 index af3e0c15e..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.component.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - - -const toolbarStyles = ` - jn-bg-theme-background-lvl-1 - jn-py-3 - jn-px-6 - jn-flex - jn-items-center - jn-justify-end -` - -/** - * This is the main toolbar of the content area. Add main actions for the current page here. - */ -export const ContentAreaToolbar = ({ - className, - children, - ...props -}) => { - return ( - <div - className={`juno-content-area-toolbar ${toolbarStyles} ${className}`} - {...props} - > - {children} - </div> - ) -} - -ContentAreaToolbar.propTypes = { - /** Add custom class name */ - className: PropTypes.string, - children: PropTypes.node, -} - -ContentAreaToolbar.defaultProps = { - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.stories.js b/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.stories.js deleted file mode 100644 index 019c9f166..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.stories.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { ContentAreaToolbar } from './index.js'; -import { Button } from '../Button/index.js'; - -export default { - title: 'Layout/ContentAreaToolbar', - component: ContentAreaToolbar, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = (args) => ( - <ContentAreaToolbar {...args}> - <Button>Main Action</Button> - </ContentAreaToolbar> -); - -export const Basic = { - render: Template, - - parameters: { - docs: { - description: { - story: - 'This is the main toolbar of the content area. Add main actions, search bar, filters for the current page here.', - }, - }, - }, - - args: {}, -}; diff --git a/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.test.js b/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.test.js deleted file mode 100644 index 62b7c8985..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaToolbar/ContentAreaToolbar.test.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { ContentAreaToolbar } from "./index" - -describe("ContentAreaToolbar", () => { - test("renders a content area toolbar", async () => { - render(<ContentAreaToolbar data-testid="content-area-toolbar" />) - expect(screen.getByTestId("content-area-toolbar")).toBeInTheDocument() - expect(screen.getByTestId("content-area-toolbar")).toHaveClass("juno-content-area-toolbar") - }) - - test("renders children as passed", async () => { - render( - <ContentAreaToolbar data-testid="content-area-toolbar"> - <button></button> - </ContentAreaToolbar> - ) - expect(screen.getByTestId("content-area-toolbar")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render( - <ContentAreaToolbar - data-testid="content-area-toolbar" - className="my-custom-classname" - /> - ) - expect(screen.getByTestId("content-area-toolbar")).toBeInTheDocument() - expect(screen.getByTestId("content-area-toolbar")).toHaveClass( - "my-custom-classname" - ) - }) - - test("renders all props", async () => { - render( - <ContentAreaToolbar data-testid="content-area-toolbar" data-lolol="some-prop" /> - ) - expect(screen.getByTestId("content-area-toolbar")).toBeInTheDocument() - expect(screen.getByTestId("content-area-toolbar")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/ContentAreaToolbar/index.js b/libs/juno-ui-components/src/components/ContentAreaToolbar/index.js deleted file mode 100644 index 397f1281c..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaToolbar/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ContentAreaToolbar } from "./ContentAreaToolbar.component" diff --git a/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.component.js b/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.component.js deleted file mode 100644 index 6d6223c81..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.component.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const containerStyles = ` - jn-relative - jn-grow - jn-flex - jn-flex-col - jn-overflow-hidden -` - -/** - * OBSOLETE: Will be deleted! - */ -export const ContentAreaWrapper = ({ className, children, ...props }) => { - return ( - <div - className={`juno-content-area-wrapper ${containerStyles} ${className}`} - {...props} - > - {children} - </div> - ) -} - -ContentAreaWrapper.propTypes = { - /** Add custom class name */ - className: PropTypes.string, - children: PropTypes.node, -} - -ContentAreaWrapper.defaultProps = { - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.stories.js b/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.stories.js deleted file mode 100644 index 991253549..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.stories.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { ContentAreaWrapper } from './index.js'; -import { ContentArea } from '../ContentArea/index.js'; -import { ContentAreaToolbar } from '../ContentAreaToolbar/index.js'; -import { Button } from '../Button/index.js'; - -export default { - title: 'Internal/ContentAreaWrapper', - component: ContentAreaWrapper, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = (args) => ( - <ContentAreaWrapper {...args}> - <ContentAreaToolbar> - <Button>Example</Button> - </ContentAreaToolbar> - <ContentArea>Content goes here</ContentArea> - </ContentAreaWrapper> -); - -export const Basic = { - render: Template, - - parameters: { - docs: { - description: { - story: 'OBSOLETE: Will be deleted!', - }, - }, - }, - - args: {}, -}; diff --git a/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.test.js b/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.test.js deleted file mode 100644 index 135829aef..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaWrapper/ContentAreaWrapper.test.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { ContentAreaWrapper } from "./index" - -describe("ContentAreaWrapper", () => { - test("renders a content area wrapper", async () => { - render(<ContentAreaWrapper data-testid="content-area-wrapper" />) - expect(screen.getByTestId("content-area-wrapper")).toBeInTheDocument() - expect(screen.getByTestId("content-area-wrapper")).toHaveClass("juno-content-area-wrapper") - }) - - test("renders a content area with flex grow", async () => { - render(<ContentAreaWrapper data-testid="content-area-wrapper" />) - expect(screen.getByTestId("content-area-wrapper")).toBeInTheDocument() - expect(screen.getByTestId("content-area-wrapper")).toHaveClass("jn-grow") - }) - - test("renders a content area with flex col layout", async () => { - render(<ContentAreaWrapper data-testid="content-area-wrapper" />) - expect(screen.getByTestId("content-area-wrapper")).toBeInTheDocument() - expect(screen.getByTestId("content-area-wrapper")).toHaveClass("jn-flex-col") - }) - - test("renders children as passed", async () => { - render( - <ContentAreaWrapper data-testid="content-area-wrapper"> - <button></button> - </ContentAreaWrapper> - ) - expect(screen.getByTestId("content-area-wrapper")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render( - <ContentAreaWrapper - data-testid="content-area-wrapper" - className="my-custom-classname" - /> - ) - expect(screen.getByTestId("content-area-wrapper")).toBeInTheDocument() - expect(screen.getByTestId("content-area-wrapper")).toHaveClass( - "my-custom-classname" - ) - }) - - test("renders all props", async () => { - render( - <ContentAreaWrapper data-testid="content-area-wrapper" data-lolol="some-prop" /> - ) - expect(screen.getByTestId("content-area-wrapper")).toBeInTheDocument() - expect(screen.getByTestId("content-area-wrapper")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/ContentAreaWrapper/index.js b/libs/juno-ui-components/src/components/ContentAreaWrapper/index.js deleted file mode 100644 index 2e4f46d4d..000000000 --- a/libs/juno-ui-components/src/components/ContentAreaWrapper/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ContentAreaWrapper } from "./ContentAreaWrapper.component" diff --git a/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.component.js b/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.component.js deleted file mode 100644 index 09f1ffbb6..000000000 --- a/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.component.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - - -const containerStyles = ` - jn-flex-col - jn-grow - jn-bg-[right_top_1rem] - jn-bg-no-repeat - jn-bg-theme-content-area-bg - jn-relative -` - -/** - * Only needed if you want to build your app's scaffold manually. In most cases it is better to use the AppShell component instead. - * A container for app content. Will be centered on the screen when browser window is wider than the max breakpoint width. - */ -export const ContentContainer = ({ className, children, ...props }) => { - return ( - <div className={`juno-content-container ${containerStyles} ${className}`} {...props}> - {children} - </div> - ) -} - -ContentContainer.propTypes = { - /** Add custom class name */ - className: PropTypes.string, - children: PropTypes.node, -} - -ContentContainer.defaultProps = { - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.stories.js b/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.stories.js deleted file mode 100644 index 339c1c501..000000000 --- a/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.stories.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -import { ContentContainer } from './index.js'; - -export default { - title: 'Internal/ContentContainer', - component: ContentContainer, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = (args) => <ContentContainer {...args}>content</ContentContainer>; - -export const Centered = { - render: Template, - - parameters: { - docs: { - description: { - story: - "Only needed if you want to build your app's scaffold manually. In most cases it is better to use the AppShell component instead. A wrapper for content components. Parent of ContentArea. Width will grow to the maximum breakpoint width and then be centered on the page if the browser is wider.", - }, - }, - }, - - args: {}, -}; diff --git a/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.test.js b/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.test.js deleted file mode 100644 index 70464ae7e..000000000 --- a/libs/juno-ui-components/src/components/ContentContainer/ContentContainer.test.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { ContentContainer } from "./index" - -describe("ContentContainer", () => { - test("renders a content container", async () => { - render(<ContentContainer data-testid="content-container" />) - expect(screen.getByTestId("content-container")).toBeInTheDocument() - expect(screen.getByTestId("content-container")).toHaveClass("juno-content-container") - }) - - test("renders a content container with flex col layout", async () => { - render(<ContentContainer data-testid="content-container" />) - expect(screen.getByTestId("content-container")).toBeInTheDocument() - expect(screen.getByTestId("content-container")).toHaveClass("jn-flex-col") - }) - - test("renders a content container with flex grow", async () => { - render(<ContentContainer data-testid="content-container" />) - expect(screen.getByTestId("content-container")).toBeInTheDocument() - expect(screen.getByTestId("content-container")).toHaveClass("jn-grow") - }) - - test("renders children as passed", async () => { - render( - <ContentContainer data-testid="content-container" > - <button></button> - </ContentContainer> - ) - expect(screen.getByTestId("content-container")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<ContentContainer data-testid="content-container" className="my-custom-classname" />) - expect(screen.getByTestId("content-container")).toBeInTheDocument() - expect(screen.getByTestId("content-container")).toHaveClass("my-custom-classname") - }) - - test("renders all props", async () => { - render(<ContentContainer data-testid="content-container" data-lolol="some-prop" />) - expect(screen.getByTestId("content-container")).toBeInTheDocument() - expect(screen.getByTestId("content-container")).toHaveAttribute("data-lolol", "some-prop") - }) - -}) diff --git a/libs/juno-ui-components/src/components/ContentContainer/index.js b/libs/juno-ui-components/src/components/ContentContainer/index.js deleted file mode 100644 index e77f3a250..000000000 --- a/libs/juno-ui-components/src/components/ContentContainer/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ContentContainer } from "./ContentContainer.component" diff --git a/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.component.js b/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.component.js deleted file mode 100644 index cac169d32..000000000 --- a/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.component.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const headingStyles = ` - jn-font-bold - jn-text-lg - jn-text-theme-high - jn-pb-2 -` - -/** - - *The main heading of a page/View. Pass as a child into `<AppShell>` or, when scaffolding manually, into `<ContentContainer>`. - */ -export const ContentHeading = ({ heading, className, children, ...props }) => { - return ( - <h1 - className={`juno-content-heading ${headingStyles} ${className}`} - {...props} - > - {children || heading} - </h1> - ) -} - -ContentHeading.propTypes = { - /** Optionally render children. If children are present, heading will be ignored */ - children: PropTypes.node, - /** Text to use as a title */ - heading: PropTypes.string, - /** Add custom class name */ - className: PropTypes.string, -} - -ContentHeading.defaultProps = { - heading: "", - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.stories.js b/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.stories.js deleted file mode 100644 index aed32bf77..000000000 --- a/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.stories.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { ContentHeading } from "./index.js" -import { Button } from "../Button/index.js" - -export default { - title: "Internal/ContentHeading", - component: ContentHeading, - argTypes: { - children: { - control: false - }, - }, -} - -const Template = (args) => <ContentHeading {...args} /> - -export const Default = Template.bind({}) -Default.parameters = { - docs: { - description: { - story: - "The the main heading of the content area of a page/view.", - }, - }, -} -Default.args = { - heading: "My Page Heading", -} diff --git a/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.test.js b/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.test.js deleted file mode 100644 index 63b77c3ef..000000000 --- a/libs/juno-ui-components/src/components/ContentHeading/ContentHeading.test.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { ContentHeading } from "./index" - -describe("ContentHeading", () => { - test("renders a content heading", async () => { - render(<ContentHeading heading="My Heading" />) - expect(screen.getByRole("heading")).toBeInTheDocument() - expect(screen.getByRole("heading")).toHaveClass( - "juno-content-heading" - ) - }) - - test("renders a content heading with the given text", async () => { - render(<ContentHeading heading="My Heading" />) - expect(screen.getByRole("heading")).toHaveTextContent("My Heading") - }) - - test("renders children as passed", async () => { - render( - <ContentHeading > - <button></button> - </ContentHeading> - ) - expect(screen.getByRole("heading")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render( - <ContentHeading - className="my-custom-classname" - /> - ) - expect(screen.getByRole("heading")).toBeInTheDocument() - expect(screen.getByRole("heading")).toHaveClass( - "my-custom-classname" - ) - }) - - test("renders all props", async () => { - render( - <ContentHeading - data-lolol="some-prop" - /> - ) - expect(screen.getByRole("heading")).toBeInTheDocument() - expect(screen.getByRole("heading")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/ContentHeading/index.js b/libs/juno-ui-components/src/components/ContentHeading/index.js deleted file mode 100644 index ded12626d..000000000 --- a/libs/juno-ui-components/src/components/ContentHeading/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ContentHeading } from "./ContentHeading.component" diff --git a/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.component.js b/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.component.js deleted file mode 100644 index 24c514429..000000000 --- a/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.component.js +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from "react" -import PropTypes from "prop-types" -import { Icon } from "../Icon/index.js" -import { Menu } from "@headlessui/react" -import { Float } from "@headlessui-float/react" - -/* -TODO: - -* close on [ESC] (prop?) -* close on click outside (prop?) -* keyboard navigation: arrow up/down moves focus -* for toggle styles (hover, active, etc.) -> expand icon (interactive) component or handle here (aka are these styles generically useful or specific to this component?) -* a11y -* docstrings -* fix stories -* don't ALWAYS render button!?! -*/ - -const menuStyles = ` - jn-overflow-hidden - jn-flex - jn-flex-col - jn-rounded - jn-bg-theme-background-lvl-1 -` - -const toggleStyles = ` - hover:jn-text-theme-accent - active:jn-text-theme-accent -` - -const toggleOpenStyle = ` - jn-text-theme-accent -` - -/** A context menu with a toggle. */ - -export const ContextMenu = ({ - icon, - className, - children, - open, - ...props -}) => { - const [isOpen, setIsOpen] = useState(false) - - const handleClick = (event) => { - setIsOpen(!isOpen) - } - - useEffect(() => { - setIsOpen(open) - }, [open]) - - return ( - <Menu> - <Float> - <Menu.Button - onClick={handleClick} - className={` - juno-contextmenu-toggle - ${toggleStyles} - ${ isOpen ? toggleOpenStyle : "" } - `}> - <Icon icon="moreVert"/> - </Menu.Button> - <Menu.Items - className={`${menuStyles}`} - > - {children} - </Menu.Items> - </Float> - </Menu> - ) -} - - -ContextMenu.propTypes = { - className: PropTypes.string, - children: PropTypes.node, - open: PropTypes.bool, -} - -ContextMenu.defaultProps = { - className: "", - children: null, - open: false, -} diff --git a/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.stories.js b/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.stories.js deleted file mode 100644 index de8c3e6aa..000000000 --- a/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.stories.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { ContextMenu } from "./index.js" -import { MenuItem } from "../MenuItem/MenuItem.component" -import { Button } from "../Button/index" -import { PortalProvider } from "../PortalProvider/PortalProvider.component" - -export default { - title: "WiP/ContextMenu/ContextMenu", - component: ContextMenu, - argTypes: { - children: { - control: false, - }, - }, -} - -const Template = ({ children, ...args }) => ( - <ContextMenu {...args}>{children}</ContextMenu> -) - -const PortalTemplate = ({ children, ...args }) => ( - <PortalProvider> - <PortalProvider.Portal> - <ContextMenu {...args}>{children}</ContextMenu> - </PortalProvider.Portal> - </PortalProvider> -) - -export const Default = { - render: Template, - - args: { - children: [ - <MenuItem - key="1" - label="Juno on Github" - href="https://github.com/sapcc/juno" - />, - <MenuItem key="2" label="This item does nothing" icon="help" />, - <MenuItem - key="3" - label="Disabled Item" - href="https://github.com/sapcc/juno" - disabled - />, - <MenuItem key="4"> - <Button - key={0} - label="Button as Child of MenuItem" - variant="subdued" - size="small" - className="jn-w-full" - /> - </MenuItem>, - <MenuItem - key="5" - onClick={() => {}} - label="Button as Item with OnClick" - icon="help" - />, - ], - }, -} - -export const InsidePortal = { - render: PortalTemplate, - - args: { - children: [ - <MenuItem - key="1" - label="Juno on Github" - href="https://github.com/sapcc/juno" - />, - <MenuItem key="2" label="This item does nothing" />, - <MenuItem - key="3" - label="Disabled Item" - href="https://github.com/sapcc/juno" - disabled - />, - <MenuItem key="4"> - <Button - key={0} - label="Button as Child of MenuItem" - variant="subdued" - size="small" - className="jn-w-full" - /> - </MenuItem>, - ], - }, -} diff --git a/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.test.js b/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.test.js deleted file mode 100644 index 9748c2719..000000000 --- a/libs/juno-ui-components/src/components/ContextMenu/ContextMenu.test.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { ContextMenu } from "./index.js" - -describe("ContextMenu", () => { - test("renders a ContextMenu Toggle", async () => { - render(<ContextMenu />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveClass("juno-contextmenu-toggle") - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("title", "More") - }) - - test("toggles Context Menu on click", async () => { - render(<ContextMenu />) - expect(screen.queryByRole("menu")).not.toBeInTheDocument() - await userEvent.click(screen.getByRole("button")) - expect(screen.getByRole("menu")).toBeInTheDocument() - await userEvent.click(screen.getByRole("button")) - expect(screen.queryByRole("menu")).not.toBeInTheDocument() - }) -}) diff --git a/libs/juno-ui-components/src/components/ContextMenu/index.js b/libs/juno-ui-components/src/components/ContextMenu/index.js deleted file mode 100644 index 61bc91401..000000000 --- a/libs/juno-ui-components/src/components/ContextMenu/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ContextMenu } from "./ContextMenu.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGrid/DataGrid.component.js b/libs/juno-ui-components/src/components/DataGrid/DataGrid.component.js deleted file mode 100644 index d3f5f8936..000000000 --- a/libs/juno-ui-components/src/components/DataGrid/DataGrid.component.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from "react" -import PropTypes from "prop-types" - -const dataGridStyles = ` - jn-grid - jn-items-stretch -` - -const gridTemplate = (columns, columnMaxSize, columnMinSize, minContentColumns, gridColumnTemplate) => { - let styles - - // gridColumnTemplate was passed. Return it and ignore all other settings - if (gridColumnTemplate && gridColumnTemplate.length > 0) { - styles = { gridTemplateColumns: gridColumnTemplate } - return styles - } - - let generatedTemplate = "" - // if a configuration for min-content columns has been passed iteratively generate the gridTemplateColumn sizes, - // else generate a simpler statement using the repeat function - if ( minContentColumns && Array.isArray(minContentColumns) && minContentColumns.length > 0 ) { - // for each configured column check if it should have normal or min-content sizing and add the respective string to the template string - [...Array(columns)].map((_, i) => { - generatedTemplate += minContentColumns.includes(i) ? 'min-content ' : `minmax(${columnMinSize}, ${columnMaxSize}) ` - }) - } else { - generatedTemplate = `repeat(${columns}, minmax(${columnMinSize}, ${columnMaxSize}))` - } - - styles = { gridTemplateColumns: generatedTemplate } - return styles -} - -const DataGridContext = React.createContext() - -export const useDataGridContext = () => React.useContext(DataGridContext) - -// TODO: allow for passing in props addItems, addItemsLabel, search, etc.: -/** The DataGrid component is the main way to display lists of items that have a bunch of metadata that you want to display. - */ -export const DataGrid = ({ - columns, - columnMaxSize, - columnMinSize, - minContentColumns, - gridColumnTemplate, - cellVerticalAlignment, - className, - children, - ...props -}) => { - const dataGridConf = { - cellVerticalAlignment: cellVerticalAlignment - // selectable: selectable - } - return ( - <DataGridContext.Provider value={dataGridConf}> - <div - className={`juno-datagrid ${dataGridStyles} ${className}`} - style={gridTemplate(columns, columnMaxSize, columnMinSize, minContentColumns, gridColumnTemplate)} - role="grid" - {...props} > - {children} - </div> - </DataGridContext.Provider> - ) -} - -DataGrid.propTypes = { - /** Set number of columns */ - columns: PropTypes.number, - /** Set column max sizing. Default: auto. For equally sized columns use "1fr" */ - columnMaxSize: PropTypes.string, - /** Set column minimum size. Default: 0px */ - columnMinSize: PropTypes.string, - /** Specify which columns should be sized by minimum content size (i.e. as small as possible). Pass an array of column numbers (first column is 0) */ - minContentColumns: PropTypes.arrayOf(PropTypes.number), - /** Set the grid column template in CSS grid 'grid-template-columns' notation. If this prop is passed, all other template props (columns, columnMaxSize, - * columnMinSize, minContentColumns) are ignored. The easiest case where you might need this is e.g. if you want to set specific column widths for some - * or all columns, e.g. "20% auto auto 10%" (The first column is set to 20%, the next two to auto size, the last to 10%). */ - gridColumnTemplate: PropTypes.string, - /** Set the vertical alignment for all GridCells. Default: center. PLEASE NOTE: the center alignment is achieved by using a flexbox column layout, - * which means that all child elements of the cell will be stacked vertically. To avoid this, wrap the elements in their own div */ - cellVerticalAlignment: PropTypes.oneOf(["center", "top"]), - /** Children to render in the DataGrid */ - children: PropTypes.node, - /** Add a class name */ - className: PropTypes.string, -} - -DataGrid.defaultProps = { - columns: 1, - columnMaxSize: "auto", - columnMinSize: "0px", - minContentColumns: undefined, - gridColumnTemplate: undefined, - cellVerticalAlignment: "center", - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGrid/DataGrid.stories.js b/libs/juno-ui-components/src/components/DataGrid/DataGrid.stories.js deleted file mode 100644 index 17d7dd1e2..000000000 --- a/libs/juno-ui-components/src/components/DataGrid/DataGrid.stories.js +++ /dev/null @@ -1,242 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataGrid } from './index.js'; -import { DataGridRow } from '../DataGridRow/index.js'; -import { DataGridCell } from '../DataGridCell/index.js'; -// import { DataGridCheckboxCell } from "../DataGridCheckboxCell/index.js" -import { DataGridHeadCell } from '../DataGridHeadCell/index.js'; -import { ContentArea } from '../ContentArea/index.js'; -import { Container } from '../Container/index.js'; -import { PreseletedWithSearch as FiltersStory } from '../Filters/Filters.stories'; -import { Filters } from '../Filters/index.js'; -import { DataGridToolbar } from '../DataGridToolbar/index.js'; -import { Default as DataGridToolbarStory } from '../DataGridToolbar/DataGridToolbar.stories'; -import { Button } from '../Button/index.js'; - -export default { - title: 'Components/DataGrid/DataGrid', - component: DataGrid, - argTypes: { - children: { - control: false, - }, - }, -}; - -const defaultColumns = 3; - -const Template = ({ hideHead, includeColSpanRow, withToolbar, withFilters, ...args }) => ( - <> - {withFilters && <Filters {...FiltersStory.args}></Filters>} - {withToolbar && ( - <DataGridToolbar {...DataGridToolbarStory.args}> - <Button variant="primary">Add new</Button> - </DataGridToolbar> - )} - <DataGrid {...args}> - {!hideHead && ( - <DataGridRow> - {[...Array(args.columns || defaultColumns)].map((_, c) => ( - <DataGridHeadCell key={`h_${c}`}>{`Head cell ${c}`}</DataGridHeadCell> - ))} - </DataGridRow> - )} - {!includeColSpanRow && - [...Array(4)].map((_, r) => ( - <DataGridRow key={`b_${r}`}> - {[...Array(args.columns || defaultColumns)].map((_, c) => ( - <DataGridCell key={`b_${r}_${c}`}> - {c === args.columns - 2 - ? `Cell ${r}-${c} has more content than others` - : `Cell ${r}-${c}`} - </DataGridCell> - ))} - </DataGridRow> - ))} - {includeColSpanRow && ( - <DataGridRow> - <DataGridCell colSpan={args.columns}> - This is a cell with colspan spanning all available columns - </DataGridCell> - </DataGridRow> - )} - </DataGrid> - </> -); - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGrid for displaying data. Example with 5 columns.', - }, - }, - }, - - args: { - columns: 5, - }, -}; - -export const EqualColumnSize = { - render: Template, - - parameters: { - docs: { - description: { - story: - "Example: change column max size to '1fr'. This ensures that all columns get the same width, even if some columns have more content than others", - }, - }, - }, - - args: { - columns: 5, - columnMaxSize: '1fr', - }, -}; - -export const ColumnMinSize = { - render: Template, - - parameters: { - docs: { - description: { - story: - "Example: set a minimum width for columns. Columns will always be at least this wide, even if they have very little content. This may cause horizontal scrollbars if the DataGrid doesn't fit into the container anymore", - }, - }, - }, - - args: { - columns: 5, - columnMinSize: '300px', - }, -}; - -export const MinimumSizedColumns = { - render: Template, - - parameters: { - docs: { - description: { - story: - 'Example: specify some columns that should be as small as possible (typically used for when you have a cell that contains only a button and you want to ensure the cell is only exactly as wide as the button', - }, - }, - }, - - args: { - columns: 5, - minContentColumns: [0, 4], - }, -}; - -export const CustomGridTemplate = { - render: Template, - - parameters: { - docs: { - description: { - story: - "Example: specify a completely custom css grid column template. The value passed is used for the css 'grid-template-columns' property. All other settings are ignored", - }, - }, - }, - - args: { - gridColumnTemplate: `20% repeat(${defaultColumns - 1}, auto)`, - }, -}; - -export const NoHead = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Without head cells', - }, - }, - }, - - args: { - columns: 5, - hideHead: true, - }, -}; - -export const ColSpanCell = { - render: Template, - - parameters: { - docs: { - description: { - story: 'With a col span cell', - }, - }, - }, - - args: { - columns: 5, - includeColSpanRow: true, - }, -}; - -export const WithToolbar = { - render: Template, - - parameters: { - docs: { - description: { - story: 'With toolbar', - }, - }, - }, - - args: { - columns: 5, - withToolbar: true, - }, -}; - -export const WithFilters = { - render: Template, - - parameters: { - docs: { - description: { - story: 'With filters', - }, - }, - }, - - args: { - columns: 5, - withFilters: true, - }, -}; - -export const WithToolbarAndFilters = { - render: Template, - - parameters: { - docs: { - description: { - story: 'With toolbar and filters', - }, - }, - }, - - args: { - columns: 5, - withFilters: true, - withToolbar: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/DataGrid/DataGrid.test.js b/libs/juno-ui-components/src/components/DataGrid/DataGrid.test.js deleted file mode 100644 index acb42f929..000000000 --- a/libs/juno-ui-components/src/components/DataGrid/DataGrid.test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGrid } from "./index" - -describe("DataGrid", () => { - - test("renders a DataGrid", async () => { - render(<DataGrid />) - expect(screen.getByRole("grid")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataGrid className="my-custom-class"/>) - expect(screen.getByRole("grid")).toBeInTheDocument() - expect(screen.getByRole("grid")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGrid/index.js b/libs/juno-ui-components/src/components/DataGrid/index.js deleted file mode 100644 index f4cdec996..000000000 --- a/libs/juno-ui-components/src/components/DataGrid/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGrid } from "./DataGrid.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.component.js b/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.component.js deleted file mode 100644 index 8152cd3a7..000000000 --- a/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.component.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { forwardRef } from "react" -import PropTypes from "prop-types" - -import { useDataGridContext } from "../DataGrid/DataGrid.component.js" - -const cellBaseStyles = (nowrap, cellVerticalAlignment) => { - return ` - ${nowrap ? "jn-whitespace-nowrap" : ""} - ${ - cellVerticalAlignment === "center" - ? ` - jn-justify-center - jn-flex - jn-flex-col - ` - : "" - } - jn-px-5 - jn-py-3 - jn-border-b - jn-border-theme-background-lvl-2 - jn-h-full - ` -} - -const cellCustomStyles = (colSpan) => { - let styles - if (colSpan) { - styles = { gridColumn: `span ${colSpan} / span ${colSpan}` } - } - return styles -} - -export const DataGridCell = forwardRef( - ({ colSpan, nowrap, className, children, ...props }, ref) => { - const dataGridContext = useDataGridContext() || {} - const cellVerticalAlignment = dataGridContext.cellVerticalAlignment - - return ( - <div - className={`juno-datagrid-cell ${cellBaseStyles( - nowrap, - cellVerticalAlignment - )} ${className}`} - style={cellCustomStyles(colSpan)} - role="gridcell" - ref={ref} - {...props} - > - {children} - </div> - ) - } -) - -DataGridCell.propTypes = { - /** Add a col span to the cell. This works like a colspan in a normal html table, so you have to take care not to place too many cells in a row if some of them have a colspan. */ - colSpan: PropTypes.number, - /** Set nowrap to true if the cell content shouldn't wrap (this is achieved by adding white-space: nowrap;) */ - nowrap: PropTypes.bool, - /** Children to render in the DataGridCell */ - children: PropTypes.node, - /** Add a classname */ - className: PropTypes.string, -} - -DataGridCell.defaultProps = { - colSpan: undefined, - nowrap: false, - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.stories.js b/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.stories.js deleted file mode 100644 index a7702edbe..000000000 --- a/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.stories.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataGrid } from '../DataGrid/index.js'; -import { DataGridRow } from '../DataGridRow/index.js'; -import { DataGridCell } from './index.js'; - -export default { - title: 'Components/DataGrid/DataGridCell', - component: DataGridCell, - argTypes: { - children: { - control: false, - }, - }, - decorators: [ - (story) => ( - <DataGrid columns={3}> - <DataGridRow>{story()}</DataGridRow> - </DataGrid> - ), - ], - parameters: { - docs: { - source: { - excludeDecorators: false, - }, - }, - }, -}; - -const Template = (args) => <DataGridCell {...args}></DataGridCell>; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridCell for use in DataGrid', - }, - }, - }, - - args: { - children: ['DataGridCell'], - }, -}; - -export const NoWrap = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridCell with nowrap option (content has white-space: nowrap;)', - }, - }, - }, - - args: { - nowrap: true, - children: ['DataGridCell does not wrap'], - }, -}; - -export const ColSpan = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridCell with colspan', - }, - }, - }, - - args: { - colSpan: 3, - children: ['DataGridCell with colspan'], - }, -}; diff --git a/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.test.js b/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.test.js deleted file mode 100644 index 026a62b3e..000000000 --- a/libs/juno-ui-components/src/components/DataGridCell/DataGridCell.test.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGridCell } from "./index" - -describe("DataGridCell", () => { - - test("renders a DataGridCell", async () => { - render(<DataGridCell />) - expect(screen.getByRole("gridcell")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataGridCell className="my-custom-class"/>) - expect(screen.getByRole("gridcell")).toBeInTheDocument() - expect(screen.getByRole("gridcell")).toHaveClass("my-custom-class") - }) - - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridCell/index.js b/libs/juno-ui-components/src/components/DataGridCell/index.js deleted file mode 100644 index 5ffb934c2..000000000 --- a/libs/juno-ui-components/src/components/DataGridCell/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGridCell } from "./DataGridCell.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.component.js b/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.component.js deleted file mode 100644 index 099e8c1fa..000000000 --- a/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.component.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { Checkbox } from "../Checkbox/Checkbox.component.js" -import { DataGridCell } from "../DataGridCell/DataGridCell.component.js" - -export const DataGridCheckboxCell = ({ - selected, - disabled, - className, - onChange, - ...props -}) => { - return ( - <DataGridCell className={`juno-datagrid-checkbox-cell ${className}`} {...props}> - <Checkbox disabled={disabled} checked={selected} onChange={onChange} /> - </DataGridCell> - ) -} - -DataGridCheckboxCell.propTypes = { - /** Whether the row this cell belongs to is selected */ - selected: PropTypes.bool, - /** Whether the item is disabled */ - disabled: PropTypes.bool, - /** Add a classname to the cell */ - className: PropTypes.string, - /** Handler to change the selected state of the row */ - onChange: PropTypes.func, -} - -DataGridCheckboxCell.defaultProps = { - selected: false, - disabled: false, - className: "", - onChange: undefined, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.stories.js b/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.stories.js deleted file mode 100644 index aadeab1db..000000000 --- a/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.stories.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataGrid } from '../DataGrid/index.js'; -import { DataGridRow } from '../DataGridRow/index.js'; -import { DataGridCheckboxCell } from './index.js'; - -export default { - title: 'WiP/DataGrid/DataGridCheckboxCell', - component: DataGridCheckboxCell, - argTypes: { - children: { - control: false, - }, - }, - decorators: [ - (story) => ( - <DataGrid columns={3}> - <DataGridRow>{story()}</DataGridRow> - </DataGrid> - ), - ], - parameters: { - docs: { - source: { - excludeDecorators: false, - }, - }, - }, -}; - -const Template = (args) => <DataGridCheckboxCell {...args}></DataGridCheckboxCell>; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridCheckboxCell for use in DataGrid', - }, - }, - }, - - args: {}, -}; - -export const Disabled = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Disabled Juno DataGridCheckboxCell for use in DataGrid', - }, - }, - }, - - args: { - disabled: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.test.js b/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.test.js deleted file mode 100644 index 88b33bc60..000000000 --- a/libs/juno-ui-components/src/components/DataGridCheckboxCell/DataGridCheckboxCell.test.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGridCheckboxCell } from "./index" - -describe("DataGridCheckboxCell", () => { - - // test("renders a DataGridCheckboxCell containing a checkbox", async () => { - // const tablerow = document.createElement('tr') - // const {container} = render(<DataGridCheckboxCell data-testid="my-datagridcell" />, - // { container: document.body.appendChild(tablerow)}) - // expect(screen.getByTestId("my-datagridcell")).toBeInTheDocument() - // expect(screen.getByRole('checkbox')).toBeInTheDocument() - // }) - - // test("renders a DataGridCheckboxCell containing a checked checkbox if passed", async () => { - // const tablerow = document.createElement('tr') - // const {container} = render(<DataGridCheckboxCell data-testid="my-datagridcell" selected />, - // { container: document.body.appendChild(tablerow)}) - // expect(screen.getByRole('checkbox')).toBeInTheDocument() - // expect(screen.getByRole('checkbox')).toBeChecked() - // }) - - test("renders a DataGridCheckboxCell", async () => { - render(<DataGridCheckboxCell />) - expect(screen.getByRole("gridcell")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataGridCheckboxCell className="my-custom-class"/>) - expect(screen.getByRole("gridcell")).toBeInTheDocument() - expect(screen.getByRole("gridcell")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridCheckboxCell/index.js b/libs/juno-ui-components/src/components/DataGridCheckboxCell/index.js deleted file mode 100644 index b1339882a..000000000 --- a/libs/juno-ui-components/src/components/DataGridCheckboxCell/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGridCheckboxCell } from "./DataGridCheckboxCell.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.component.js b/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.component.js deleted file mode 100644 index c48f1e3f6..000000000 --- a/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.component.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -export const DataGridFoot = ({ - className, - children, - ...props -}) => { - return ( - <tfoot className={`juno-datagrid-foot ${className}`} {...props}> - {children} - </tfoot> - ) -} - -DataGridFoot.propTypes = { - /** Children to render in the DataGridFoot */ - children: PropTypes.node, - /** Add a classname */ - className: PropTypes.string, -} - -DataGridFoot.defaultProps = { - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.stories.js b/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.stories.js deleted file mode 100644 index 3f736a59a..000000000 --- a/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.stories.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataGridFoot } from './index.js'; -import { DataGridCell } from '../DataGridCell/index.js'; -import { Default as DataGridCellStory } from '../DataGridCell/DataGridCell.stories.js'; - -export default { - title: 'WiP/DataGrid/DataGridFoot', - component: DataGridFoot, - argTypes: { - children: { - control: false, - }, - }, - decorators: [(story) => <table>{story()}</table>], - parameters: { - docs: { - source: { - excludeDecorators: false, - }, - }, - }, -}; - -const Template = ({ items, ...args }) => ( - <DataGridFoot {...args}> - {/* {items.map((item, i) => ( - <DataGridFootRow key={`f_${i}`}> - {item.items.map((cell, c) => ( - <DataGridCell {...cell} key={`f_${i}_${c}`} /> - ))} - </DataGridFootRow> - ))} */} - </DataGridFoot> -); - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridFoot for use in DataGrid', - }, - }, - }, - - args: {}, -}; diff --git a/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.test.js b/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.test.js deleted file mode 100644 index 7b706b27f..000000000 --- a/libs/juno-ui-components/src/components/DataGridFoot/DataGridFoot.test.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGridFoot } from "./index" - -describe("DataGridFoot", () => { - - test("renders a DataGridFoot", async () => { - const table = document.createElement('table') - const {container} = render(<DataGridFoot data-testid="my-datagridfoot"/>, - { container: document.body.appendChild(table)}) - expect(screen.getByTestId("my-datagridfoot")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - const table = document.createElement('table') - const {container} = render(<DataGridFoot data-testid="my-datagridfoot" className="my-custom-class"/>, - { container: document.body.appendChild(table)}) - expect(screen.getByTestId("my-datagridfoot")).toBeInTheDocument() - expect(screen.getByTestId("my-datagridfoot")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridFoot/index.js b/libs/juno-ui-components/src/components/DataGridFoot/index.js deleted file mode 100644 index afad71a5f..000000000 --- a/libs/juno-ui-components/src/components/DataGridFoot/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGridFoot } from "./DataGridFoot.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.component.js b/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.component.js deleted file mode 100644 index dcc6ea3ca..000000000 --- a/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.component.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { forwardRef } from "react" -import PropTypes from "prop-types" -import { DataGridCell } from "../DataGridCell/index.js" - -const headCellBaseStyles = ` - jn-font-bold - jn-text-theme-high - jn-bg-theme-background-lvl-1 - jn-border-theme-background-lvl-0 -` - -const sortIconStyles = ` - jn-ml-2 -` - -export const DataGridHeadCell = forwardRef( - ( - { - // sortable, - colSpan, - nowrap, - className, - children, - ...props - }, - ref - ) => { - return ( - <DataGridCell - colSpan={colSpan} - nowrap={nowrap} - className={`juno-datagrid-head-cell ${headCellBaseStyles} ${className}`} - role="columnheader" - ref={ref} - {...props} - > - {children} - </DataGridCell> - // <div - // className={`juno-datagrid-head-cell ${headCellBaseStyles} ${className}`} - // role="columnheader" - // {...props}> - // {children} - // {/* { sortable ? <Icon size={'1rem'} className={`${sortIconStyles}`}/> : ''} */} - // </div> - ) - } -) - -DataGridHeadCell.propTypes = { - /** Whether the DataGrid should be sortable by this column */ - // sortable: PropTypes.bool, - /** Add a col span to the cell. This works like a colspan in a normal html table, so you have to take care not to place too many cells in a row if some of them have a colspan. */ - colSpan: PropTypes.number, - /** Set nowrap to true if the cell content shouldn't wrap (this is achieved by adding white-space: nowrap;) */ - nowrap: PropTypes.bool, - /** Children to render in the DataGridHeadCell */ - children: PropTypes.node, - /** Add a classname */ - className: PropTypes.string, -} - -DataGridHeadCell.defaultProps = { - // sortable: false, - colSpan: undefined, - nowrap: false, - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.stories.js b/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.stories.js deleted file mode 100644 index 1ccc0ca81..000000000 --- a/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.stories.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataGrid } from '../DataGrid/index.js'; -import { DataGridRow } from '../DataGridRow/index.js'; -import { DataGridHeadCell } from './index.js'; - -export default { - title: 'Components/DataGrid/DataGridHeadCell', - component: DataGridHeadCell, - argTypes: { - children: { - control: false, - }, - }, - decorators: [ - (story) => ( - <DataGrid columns={3}> - <DataGridRow>{story()}</DataGridRow> - </DataGrid> - ), - ], - parameters: { - docs: { - source: { - excludeDecorators: false, - }, - }, - }, -}; - -const Template = (args) => <DataGridHeadCell {...args}></DataGridHeadCell>; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridHeadCell for use in DataGrid', - }, - }, - }, - - args: { - children: ['DataGridHeadCell'], - }, -}; - -export const NoWrap = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridHeadCell with nowrap option (content has white-space: nowrap;)', - }, - }, - }, - - args: { - nowrap: true, - children: ['DataGridHeadCell does not wrap'], - }, -}; - -export const ColSpan = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridHeadCell with colspan', - }, - }, - }, - - args: { - colSpan: 3, - children: ['DataGridHeadCell with colspan'], - }, -}; diff --git a/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.test.js b/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.test.js deleted file mode 100644 index fb641d661..000000000 --- a/libs/juno-ui-components/src/components/DataGridHeadCell/DataGridHeadCell.test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGridHeadCell } from "./index" - -describe("DataGridHeadCell", () => { - - test("renders a DataGridHeadCell", async () => { - render(<DataGridHeadCell />) - expect(screen.getByRole("columnheader")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataGridHeadCell className="my-custom-class"/>) - expect(screen.getByRole("columnheader")).toBeInTheDocument() - expect(screen.getByRole("columnheader")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridHeadCell/index.js b/libs/juno-ui-components/src/components/DataGridHeadCell/index.js deleted file mode 100644 index 9bea4b235..000000000 --- a/libs/juno-ui-components/src/components/DataGridHeadCell/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGridHeadCell } from "./DataGridHeadCell.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.component.js b/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.component.js deleted file mode 100644 index 4950314c4..000000000 --- a/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.component.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { forwardRef } from "react" -import PropTypes from "prop-types" - -const rowBaseStyle = ` - jn-contents -` -// const rowSelectedStyle = ` -// jn-bg-theme-datagridrow-selected -// ` - -export const DataGridRow = forwardRef( - ({ selected, disabled, className, children, onChange, ...props }, ref) => { - // const dataGridContext = useDataGridContext() || {} - // const selectable = dataGridContext.selectable - - // const [isSelected, setIsSelected] = useState(false) - // useEffect( () => { - // setIsSelected(selected) - // }, [selected]) - - // const toggleSelected = (event) => { - // setIsSelected(!isSelected) - // onChange(event) - // } - - // ${ selectable && isSelected ? rowSelectedStyle : '' } - return ( - <div - className={`juno-datagrid-row ${rowBaseStyle} ${className}`} - role="row" - ref={ref} - {...props} - > - {/* { selectable ? <DataGridCheckboxCell selected={selected} disabled={disabled} onChange={toggleSelected} /> : null } */} - {children} - </div> - ) - } -) - -DataGridRow.propTypes = { - // /** Whether the row / item is selected (only relevant in a `selectable` DataGrid */ - // selected: PropTypes.bool, - // /** Whether the row/item is disabled (only relevant in a `selectable` DataGrid */ - // disabled: PropTypes.bool, - /** Children to render in the DataGridRow */ - children: PropTypes.node, - /** Add a classname */ - className: PropTypes.string, - // /** Pass a handler to be executed when selected state changes */ - // onChange: PropTypes.func, -} - -DataGridRow.defaultProps = { - // selected: false, - // disabled: false, - className: "", - children: null, - // onChange: undefined, -} diff --git a/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.stories.js b/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.stories.js deleted file mode 100644 index a2084677d..000000000 --- a/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.stories.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataGridRow } from './index.js'; -import { DataGridCell } from '../DataGridCell/index.js'; -import { Default as DataGridCellStory } from '../DataGridCell/DataGridCell.stories.js'; -import { DataGrid } from '../DataGrid/index.js'; - -const columns = 5; - -export default { - title: 'Components/DataGrid/DataGridRow', - component: DataGridRow, - argTypes: { - items: { - table: { - disable: true, - }, - }, - children: { - control: false, - }, - }, - decorators: [(story) => <DataGrid columns={columns}>{story()}</DataGrid>], - parameters: { - docs: { - source: { - excludeDecorators: false, - }, - }, - }, -}; - -const Template = ({ items, ...args }) => ( - <DataGridRow {...args}> - {items.map((item, i) => ( - <DataGridCell {...item} key={`${i}`} /> - ))} - </DataGridRow> -); - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataGridRow for use in DataGrid', - }, - }, - }, - - args: { - items: Array(columns).fill({ ...DataGridCellStory.args }), - }, -}; diff --git a/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.test.js b/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.test.js deleted file mode 100644 index 719f93755..000000000 --- a/libs/juno-ui-components/src/components/DataGridRow/DataGridRow.test.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGridRow } from "./index" - -describe("DataGridRow", () => { - - test("renders a DataGridRow", async () => { - render(<DataGridRow />) - expect(screen.getByRole("row")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataGridRow className="my-custom-class"/>) - expect(screen.getByRole("row")).toBeInTheDocument() - expect(screen.getByRole("row")).toHaveClass("my-custom-class") - }) - - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridRow/index.js b/libs/juno-ui-components/src/components/DataGridRow/index.js deleted file mode 100644 index 59cccabe6..000000000 --- a/libs/juno-ui-components/src/components/DataGridRow/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGridRow } from "./DataGridRow.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.component.js b/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.component.js deleted file mode 100644 index b7ce287e7..000000000 --- a/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.component.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const datagridtoolbarstyles = ` - jn-flex - jn-items-center - jn-bg-theme-background-lvl-1 - jn-py-3 - jn-px-6 - jn-mb-px -` - -const childrenWrapperStyles = ` - jn-ml-auto -` - -/** This is the toolbar for use with a DataGrid. This is the place where you would put buttons and other controls that affect the items in the DataGrid (e.g. triggering batch actions). Optionally a search input can be added. */ -export const DataGridToolbar= ({ - search, - className, - children, - ...props -}) => { - return ( - <div className={`juno-datagrid-toolbar ${datagridtoolbarstyles} ${className}`} {...props} > - { search && - <div> - {search} - </div> - } - <div className={childrenWrapperStyles}> - {children} - </div> - </div> - ) -} - -DataGridToolbar.propTypes = { - /** Pass an optional SearchInput component */ - search: PropTypes.node, - /** Children to render in the DataGridToolbar */ - children: PropTypes.node, - /** Add a classname */ - className: PropTypes.string, -} - -DataGridToolbar.defaultProps = { - search: undefined, - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.stories.js b/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.stories.js deleted file mode 100644 index 1153a26c6..000000000 --- a/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.stories.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Button } from '../Button/index.js'; -import { ButtonRow } from '../ButtonRow/index.js'; -import { DataGridToolbar } from './index.js'; -import { SearchInput } from '../SearchInput/SearchInput.component'; - -export default { - title: 'Components/DataGrid/DataGridToolbar', - component: DataGridToolbar, - argTypes: { - children: { - control: false, - }, - search: { - control: false, - }, - }, -}; - -const Template = (args) => ( - <DataGridToolbar {...args}> - <ButtonRow> - <Button variant="subdued">Add other</Button> - <Button>Add new</Button> - </ButtonRow> - </DataGridToolbar> -); - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Optional toolbar for use in DataGrid. Use ButtonRow for multiple buttons', - }, - }, - }, - - args: {}, -}; - -export const WithSearch = { - render: Template, - - parameters: { - docs: { - description: { - story: 'DataGridToolbar with optional search input', - }, - }, - }, - - args: { - search: ( - <SearchInput - onSearch={() => { - console.log('Searching…'); - }} - /> - ), - }, -}; diff --git a/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.test.js b/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.test.js deleted file mode 100644 index 36a473d8f..000000000 --- a/libs/juno-ui-components/src/components/DataGridToolbar/DataGridToolbar.test.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataGridToolbar } from "./index" -import { SearchInput } from "../SearchInput/index" - -describe("DataGridToolbar", () => { - - test("renders a DataGridToolbar", async () => { - render(<DataGridToolbar data-testid="my-datagridtoolbar" />) - expect(screen.getByTestId("my-datagridtoolbar")).toBeInTheDocument() - }) - - test("renders a SearchInput as passed", async () => { - render(<DataGridToolbar search={<SearchInput/>}></DataGridToolbar>) - expect(screen.getByRole("searchbox")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataGridToolbar data-testid="my-datagridtoolbar" className="my-custom-class" />) - expect(screen.getByTestId("my-datagridtoolbar")).toBeInTheDocument() - expect(screen.getByTestId("my-datagridtoolbar")).toHaveClass("my-custom-class") - }) - - test("renders all props as passed", async () => { - render(<DataGridToolbar data-testid="23" data-lolol={true}/>) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute('data-lolol') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataGridToolbar/index.js b/libs/juno-ui-components/src/components/DataGridToolbar/index.js deleted file mode 100644 index 6ac06c21b..000000000 --- a/libs/juno-ui-components/src/components/DataGridToolbar/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataGridToolbar } from "./DataGridToolbar.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataList/DataList.component.js b/libs/juno-ui-components/src/components/DataList/DataList.component.js deleted file mode 100644 index 246d974ad..000000000 --- a/libs/juno-ui-components/src/components/DataList/DataList.component.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const DataListContext = React.createContext() - -export const useDataListContext = () => React.useContext(DataListContext) - -export const DataList = ({ - selectable, - className, - children, - ...props -}) => { - const dataListConf = { - selectable: selectable - } - return ( - <DataListContext.Provider value={dataListConf}> - <div className={`juno-datalist-container`}> - <ul className={`juno-datalist ${className}`} {...props} > - {children} - </ul> - </div> - </DataListContext.Provider> - ) -} - -DataList.propTypes = { - /** Whether the items of a DataList should be selectable */ - selectable: PropTypes.bool, - /** Custom classname */ - className: PropTypes.string, - /** Children to render in the DataList */ - children: PropTypes.node, -} - -DataList.defaultProps = { - selectable: false, - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataList/DataList.stories.js b/libs/juno-ui-components/src/components/DataList/DataList.stories.js deleted file mode 100644 index 3f30c8447..000000000 --- a/libs/juno-ui-components/src/components/DataList/DataList.stories.js +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataList } from './index.js'; -import { DataListRow } from '../DataListRow/index.js'; -import { DataListCell } from '../DataListCell/index.js'; -import { Default as DataListRowStory } from '../DataListRow/DataListRow.stories.js'; -import { Default as DataListCellStory } from '../DataListCell/DataListCell.stories.js'; -import { Selectable as SelectableDataListRowStory } from '../DataListRow/DataListRow.stories.js'; -import { AutoWidth as AutoWidthDataListRowStory } from '../DataListRow/DataListRow.stories.js'; -import { PercentageWidths as PercentageWidthsDataListRowStory } from '../DataListRow/DataListRow.stories.js'; -import { GridFitted as GridFittedDataListRowStory } from '../DataListRow/DataListRow.stories.js'; - -export default { - title: 'Deprecated/DataList/DataList', - component: DataList, - argTypes: { - items: { - table: { - disable: true, - }, - }, - children: { - control: false, - }, - }, - parameters: { - docs: { - description: { - component: 'DataList is deprecated and will be removed. Please use DataGrid instead.', - }, - }, - }, -}; - -const Template = ({ items, ...args }) => ( - <DataList {...args}> - {items.map((item, i) => ( - <DataListRow key={`${i}`}> - {item.items.map((cell, c) => ( - <DataListCell {...cell} key={`${i}_${c}`} /> - ))} - </DataListRow> - ))} - </DataList> -); - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Default Juno DataList for displaying data', - }, - }, - }, - - args: { - items: [ - { ...DataListRowStory.args }, - { ...DataListRowStory.args }, - { ...DataListRowStory.args }, - { ...DataListRowStory.args }, - { ...DataListRowStory.args }, - ], - }, -}; - -export const Selectable = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Selectable Juno DataList for displaying and selecting data', - }, - }, - }, - - args: { - selectable: true, - items: [ - { ...SelectableDataListRowStory.args }, - { ...SelectableDataListRowStory.args }, - { ...SelectableDataListRowStory.args }, - { ...SelectableDataListRowStory.args }, - { ...SelectableDataListRowStory.args }, - ], - }, -}; - -export const Auto = { - render: Template, - - parameters: { - docs: { - description: { - story: "Juno DataList with one column set to 'auto' to maximize its width", - }, - }, - }, - - args: { - items: [ - { ...AutoWidthDataListRowStory.args }, - { ...AutoWidthDataListRowStory.args }, - { ...AutoWidthDataListRowStory.args }, - { ...AutoWidthDataListRowStory.args }, - { ...AutoWidthDataListRowStory.args }, - ], - }, -}; - -export const Percentage = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataList with percentage-based column widths', - }, - }, - }, - - args: { - items: [ - { ...PercentageWidthsDataListRowStory.args }, - { ...PercentageWidthsDataListRowStory.args }, - { ...PercentageWidthsDataListRowStory.args }, - { ...PercentageWidthsDataListRowStory.args }, - { ...PercentageWidthsDataListRowStory.args }, - ], - }, -}; - -export const GridFitted = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataList with grid column-based column widths', - }, - }, - }, - - args: { - items: [ - { ...GridFittedDataListRowStory.args }, - { ...GridFittedDataListRowStory.args }, - { ...GridFittedDataListRowStory.args }, - { ...GridFittedDataListRowStory.args }, - { ...GridFittedDataListRowStory.args }, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/DataList/DataList.test.js b/libs/juno-ui-components/src/components/DataList/DataList.test.js deleted file mode 100644 index ca69f7727..000000000 --- a/libs/juno-ui-components/src/components/DataList/DataList.test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataList } from "./index" - -describe("DataList", () => { - - test("renders a DataList", async () => { - render(<DataList data-testid="my-datalist" />) - expect(screen.getByTestId("my-datalist")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataList data-testid="my-datalist" className="my-custom-class" />) - expect(screen.getByTestId("my-datalist")).toBeInTheDocument() - expect(screen.getByTestId("my-datalist")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataList/index.js b/libs/juno-ui-components/src/components/DataList/index.js deleted file mode 100644 index 0d373d23d..000000000 --- a/libs/juno-ui-components/src/components/DataList/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataList } from "./DataList.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListCell/DataListCell.component.js b/libs/juno-ui-components/src/components/DataListCell/DataListCell.component.js deleted file mode 100644 index 316743589..000000000 --- a/libs/juno-ui-components/src/components/DataListCell/DataListCell.component.js +++ /dev/null @@ -1,151 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const datalistcellbasestyles = ` - jn-flex - jn-p-2 - jn-overflow-hidden - jn-overflow-ellipsis - jn-grow-0 - jn-shrink-0 - jn-flex-basis-auto -` - -const datalistcellautostyles = ` - jn-grow - jn-shrink-0 - jn-flex-basis-0 -` - -const datalistcellgridstyles = ` - jn-p-grid-column -` - -const cols_1 = ` - jn-w-grid-col-1 -` - -const cols_2 = ` - jn-w-grid-col-2 -` - -const cols_3 = ` - jn-w-grid-col-3 -` - -const cols_4 = ` - jn-w-grid-col-4 -` - -const cols_5 = ` - jn-w-grid-col-6 -` - -const cols_6 = ` - jn-w-grid-col-6 -` - -const cols_7 = ` - jn-w-grid-col-7 -` - -const cols_8 = ` - jn-w-grid-col-8 -` - -const cols_9 = ` - jn-w-grid-col-9 -` - -const cols_10 = ` - jn-w-grid-col-10 -` - -const cols_11 = ` - jn-w-grid-col-11 -` - -const cols_12 = ` - jn-w-grid-col-12 -` - -const colsClass = (cols) => { -switch (cols) { - case 1: - return cols_1 - case 2: - return cols_2 - case 3: - return cols_3 - case 4: - return cols_4 - case 5: - return cols_5 - case 6: - return cols_6 - case 7: - return cols_7 - case 8: - return cols_8 - case 9: - return cols_9 - case 10: - return cols_10 - case 11: - return cols_11 - case 12: - return cols_12 - default: null -} -} - -export const DataListCell = ({ - cols, - width, - auto, - className, - children, - ...props -}) => { - // auto cell: - const autoStyles = { - flexGrow: "1", - flexShrink: "0", - flexBasis: "0" - } - // width cell: - const widthStyles = width ? { width: width + '%', flexGrow: "0", flexShrink: "0", flexBasis: width + '%' } : {} - // width overrides auto: - const cellStyles = width ? widthStyles : ( auto ? autoStyles : {} ) - return ( - <div className={`juno-datalist-cell ${datalistcellbasestyles} ${cols ? colsClass(cols) : '' } ${className}`} style={cellStyles} {...props} > - {children} - </div> - ) -} - -DataListCell.propTypes = { - /** The number of columns to span the column over when fitting to the grid. */ - cols: PropTypes.number, - /** The width in percent as a number without "%" for auto-layout grids TODO: or "auto". If a width is given, it will override the "cols" prop. */ - width: PropTypes.number, - /** Whether the colum should set an auto width */ - auto: PropTypes.bool, - /** Custom classname */ - className: PropTypes.string, - /** Children to render in the DataListCell */ - children: PropTypes.node, -} - -DataListCell.defaultProps = { - cols: null, - width: null, - auto: false, - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListCell/DataListCell.stories.js b/libs/juno-ui-components/src/components/DataListCell/DataListCell.stories.js deleted file mode 100644 index c7d3b9e48..000000000 --- a/libs/juno-ui-components/src/components/DataListCell/DataListCell.stories.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataListCell } from './index.js'; - -export default { - title: 'Deprecated/DataList/DataListCell', - component: DataListCell, - argTypes: { - children: { - control: false, - }, - }, - parameters: { - docs: { - description: { - component: 'DataList is deprecated and will be removed. Please use DataGrid instead.', - }, - }, - }, -}; - -const Template = (args) => <DataListCell {...args}></DataListCell>; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataListCell for displaying data', - }, - }, - }, - - args: { - children: ['DataListCell'], - }, -}; diff --git a/libs/juno-ui-components/src/components/DataListCell/DataListCell.test.js b/libs/juno-ui-components/src/components/DataListCell/DataListCell.test.js deleted file mode 100644 index 6c96b3f2c..000000000 --- a/libs/juno-ui-components/src/components/DataListCell/DataListCell.test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataListCell } from "./index" - -describe("DataListCell", () => { - - test("renders a DataListCell", async () => { - render(<DataListCell data-testid="my-datalistcell" />) - expect(screen.getByTestId("my-datalistcell")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataListCell data-testid="my-datalistcell" className="my-custom-class" />) - expect(screen.getByTestId("my-datalistcell")).toBeInTheDocument() - expect(screen.getByTestId("my-datalistcell")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListCell/index.js b/libs/juno-ui-components/src/components/DataListCell/index.js deleted file mode 100644 index 6e7a95108..000000000 --- a/libs/juno-ui-components/src/components/DataListCell/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataListCell } from "./DataListCell.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.component.js b/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.component.js deleted file mode 100644 index 8a3638862..000000000 --- a/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.component.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { Checkbox } from "../Checkbox/Checkbox.component.js" -import { DataListCell } from "../DataListCell/DataListCell.component.js" - -const datalistcheckboxcellbasestyles = ` - jn-flex - jn-flex-col - jn-justify-center -` - -export const DataListCheckboxCell = ({ - selected, - disabled, - onChange, - className, - children, - ...props -}) => { - return ( - <DataListCell className={`juno-datalist-checkbox-cell ${datalistcheckboxcellbasestyles} ${className}`} {...props} > - <Checkbox disabled={disabled} checked={selected} onChange={onChange} /> - </DataListCell> - ) -} - -DataListCheckboxCell.propTypes = { - /** Whether the item this cell belongs to is selected */ - selected: PropTypes.bool, - /** Whether the item is disabled */ - disabled: PropTypes.bool, - /** Custom classname */ - className: PropTypes.string, - /** Children to render in the DataListCell */ - children: PropTypes.node, - /** Handler to execute when selected state changes */ - onChange: PropTypes.func, -} - -DataListCell.defaultProps = { - selected: false, - disabled: false, - className: "", - children: null, - onChange: undefined, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.stories.js b/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.stories.js deleted file mode 100644 index 6d8f6c3f5..000000000 --- a/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.stories.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataListCheckboxCell } from './index.js'; - -export default { - title: 'Deprecated/DataList/DataListCheckboxCell', - component: DataListCheckboxCell, - argTypes: { - children: { - control: false, - }, - }, - parameters: { - docs: { - description: { - component: 'DataList is deprecated and will be removed. Please use DataGrid instead.', - }, - }, - }, -}; - -const Template = (args) => <DataListCheckboxCell {...args}></DataListCheckboxCell>; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataListCheckboxCell for use in DataList', - }, - }, - }, - - args: {}, -}; - -export const Disabled = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Disabled Juno DataListCheckboxCell for use in DataList', - }, - }, - }, - - args: { - disabled: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.test.js b/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.test.js deleted file mode 100644 index acd41d292..000000000 --- a/libs/juno-ui-components/src/components/DataListCheckboxCell/DataListCheckboxCell.test.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataListCheckboxCell } from "./index" - -describe("DataListCheckboxCell", () => { - - test("renders a DataListCheckboxCell containing a checkbox", async () => { - render(<DataListCheckboxCell data-testid="my-datalistcell" />) - expect(screen.getByTestId("my-datalistcell")).toBeInTheDocument() - expect(screen.getByRole('checkbox')).toBeInTheDocument() - }) - - test("renders a DataListCheckboxCell containing a checked checkbox if passed", async () => { - render(<DataListCheckboxCell data-testid="my-datalistcell" selected />) - expect(screen.getByRole('checkbox')).toBeInTheDocument() - expect(screen.getByRole('checkbox')).toBeChecked() - }) - - test("renders a custom className", async () => { - render(<DataListCheckboxCell data-testid="my-datalistcell" className="my-custom-class"/>) - expect(screen.getByTestId("my-datalistcell")).toBeInTheDocument() - expect(screen.getByTestId("my-datalistcell")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListCheckboxCell/index.js b/libs/juno-ui-components/src/components/DataListCheckboxCell/index.js deleted file mode 100644 index 7f7c2ac34..000000000 --- a/libs/juno-ui-components/src/components/DataListCheckboxCell/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataListCheckboxCell } from "./DataListCheckboxCell.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListRow/DataListRow.component.js b/libs/juno-ui-components/src/components/DataListRow/DataListRow.component.js deleted file mode 100644 index 896ad5aff..000000000 --- a/libs/juno-ui-components/src/components/DataListRow/DataListRow.component.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from "react" -import PropTypes from "prop-types" -import { useDataListContext } from "../DataList/DataList.component.js" -import { DataListCheckboxCell } from "../DataListCheckboxCell/DataListCheckboxCell.component.js" - -const datalistrowbasestyles = ` - jn-flex - jn-rounded-[3px] - jn-border - jn-border-theme-datalist-row - jn-mb-2 -` - -const rowselectedstyle = ` - jn-bg-theme-datalistrow-selected -` - -export const DataListRow = ({ - selected, - disabled, - onChange, - className, - children, - ...props -}) => { - const dataListContext = useDataListContext() || {} - const selectable = dataListContext.selectable - - const [isSelected, setIsSelected] = useState(false) - useEffect( () => { - setIsSelected(selected) - }, [selected]) - - const toggleSelected = (event) => { - setIsSelected(!isSelected) - onChange(event) - } - - return ( - <li className={`juno-datalist-row ${datalistrowbasestyles} ${ selectable && isSelected ? rowselectedstyle : '' }${className}`} {...props} > - { selectable ? <DataListCheckboxCell selected={selected} disabled={disabled} onChange={toggleSelected} /> : null } - {children} - </li> - ) -} - -DataListRow.propTypes = { - /** Custom classname */ - className: PropTypes.string, - /** Children to render in the DataListRow */ - children: PropTypes.node, -} - -DataListRow.defaultProps = { - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListRow/DataListRow.stories.js b/libs/juno-ui-components/src/components/DataListRow/DataListRow.stories.js deleted file mode 100644 index 8ba320c2e..000000000 --- a/libs/juno-ui-components/src/components/DataListRow/DataListRow.stories.js +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { DataListRow } from './index.js'; -import { DataListCell } from '../DataListCell/index.js'; -import { DataListCheckboxCell } from '../DataListCheckboxCell/index.js'; -import { Default as DataListCellStory } from '../DataListCell/DataListCell.stories.js'; -import { Default as DataListCheckboxCellStory } from '../DataListCheckboxCell/DataListCheckboxCell.stories.js'; - -export default { - title: 'Deprecated/DataList/DataListRow', - component: DataListRow, - argTypes: { - items: { - table: { - disable: true, - }, - }, - children: { - control: false, - }, - }, - parameters: { - docs: { - description: { - component: 'DataList is deprecated and will be removed. Please use DataGrid instead.', - }, - }, - }, -}; - -const Template = ({ items, ...args }) => ( - <DataListRow {...args}> - {items.map((item, i) => ( - <DataListCell {...item} key={`${i}`} /> - ))} - </DataListRow> -); - -const SelectableTemplate = ({ items, ...args }) => ( - <DataListRow {...args}> - <DataListCheckboxCell /> - {items.map((item, i) => ( - <DataListCell {...item} key={`${i}`} /> - ))} - </DataListRow> -); - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Juno DataListRow for displaying data', - }, - }, - }, - - args: { - items: [ - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - ], - }, -}; - -export const Selectable = { - render: SelectableTemplate, - - parameters: { - docs: { - description: { - story: - 'Selectable DataListRow for displaying and selecting data. Note that highlighting the row will not work when rendered outside a DataList. ', - }, - }, - }, - - args: { - items: [ - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - ], - }, -}; - -export const AutoWidth = { - render: Template, - - parameters: { - docs: { - description: { - story: "Row with one cell set to 'auto' in oder to maximize its width", - }, - }, - }, - - args: { - items: [ - { ...DataListCellStory.args }, - { ...DataListCellStory.args, auto: true, children: 'Auto DataListCell' }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - { ...DataListCellStory.args }, - ], - }, -}; - -export const PercentageWidths = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Row with Cells set to individual percentage widths', - }, - }, - }, - - args: { - items: [ - { ...DataListCellStory.args, width: 10 }, - { ...DataListCellStory.args, width: 45 }, - { ...DataListCellStory.args, width: 25 }, - { ...DataListCellStory.args, width: 10 }, - { ...DataListCellStory.args, width: 10 }, - ], - }, -}; - -export const GridFitted = { - render: Template, - - parameters: { - docs: { - description: { - story: 'Row with cells fitted to the Grid', - }, - }, - }, - - args: { - items: [ - { ...DataListCellStory.args, cols: 1, children: 'cols 1' }, - { ...DataListCellStory.args, cols: 6, children: 'cols 6' }, - { ...DataListCellStory.args, cols: 3, children: 'cols 3' }, - { ...DataListCellStory.args, cols: 2, children: 'cols 2' }, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/DataListRow/DataListRow.test.js b/libs/juno-ui-components/src/components/DataListRow/DataListRow.test.js deleted file mode 100644 index ce0ae96bc..000000000 --- a/libs/juno-ui-components/src/components/DataListRow/DataListRow.test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { DataListRow } from "./index" - -describe("DataListRow", () => { - - test("renders a DataListRow", async () => { - render(<DataListRow data-testid="my-datalistrow" />) - expect(screen.getByTestId("my-datalistrow")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<DataListRow data-testid="my-datalistrow" className="my-custom-class" />) - expect(screen.getByTestId("my-datalistrow")).toBeInTheDocument() - expect(screen.getByTestId("my-datalistrow")).toHaveClass("my-custom-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DataListRow/index.js b/libs/juno-ui-components/src/components/DataListRow/index.js deleted file mode 100644 index 7203e011c..000000000 --- a/libs/juno-ui-components/src/components/DataListRow/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DataListRow } from "./DataListRow.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.component.js b/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.component.js deleted file mode 100644 index cd9c41afe..000000000 --- a/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.component.js +++ /dev/null @@ -1,711 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useRef, useId, useMemo, useState } from "react" -import PropTypes from "prop-types" -import flatpickr from "flatpickr" -import { FormHint } from "../FormHint/" -import { Icon } from "../Icon/" -import { Label } from "../Label/" -import "./datetimepicker.scss" - -/* -TODO: -* add enable prop (or leave out if no success) -* add position prop (if possible, otherwise leave out) -* Allow to use the expected date format as a placeholder in the input element (placeholder="dateFormat" or smth similar?) when direct input is enabled? -*/ - -const inputWrapperStyles = ` - jn-relative -` - -const inputStyles = ` - jn-bg-theme-textinput - jn-bg-no-repeat - jn-bg-[top_0.375rem_right_1rem] - jn-text-theme-textinput - jn-fill-theme-textinput-default - jn-border - jn-text-base - jn-leading-4 - jn-px-4 - jn-h-textinput - jn-rounded-3px - focus:jn-outline-none - focus:jn-ring-2 - focus:jn-ring-theme-focus - disabled:jn-opacity-50 - disabled:jn-cursor-not-allowed - autofill:jn-bg-theme-textinput-autofill - autofill:jn-text-theme-textinput-autofill -` - -const inputWithLabelStyles = ` - jn-pt-[1.125rem] - jn-pb-1 -` - -const inputWithoutLabelStyles = ` - jn-py-4 -` - -const inputDefaultBorderStyles = ` - jn-border-theme-textinput-default -` - -const inputInvalidStyles = ` - jn-border-theme-error -` - -const inputValidStyles = ` - jn-border-theme-success -` - -const labelStyles = ` - peer-autofill:jn-text-theme-textinput-autofill-label - jn-pointer-events-none - jn-top-2 - jn-left-[0.9375rem] -` - -const iconContainerStyles = ` - jn-absolute - jn-inline-flex - jn-top-2 - jn-right-[2.75rem] - jn-gap-1.5 -` - -/** A all-purpose date and time picker component. Highly configurable, based on Flatpickr. */ - -export const DateTimePicker = ({ - allowInput, - allowInvalidPreload, - ariaDateFormat, - className, - conjunction, - dateFormat, - defaultHour, - defaultMinute, - defaultDate, - defaultValue, - disable, - disabled, - enableSeconds, - enableTime, - errortext, - helptext, - hourIncrement, - id, - invalid, - label, - locale, - maxDate, - minDate, - minuteIncrement, - mode, - monthSelectorType, - name, - noCalendar, - onBlur, - onChange, - onClear, - onClose, - onFocus, - onMonthChange, - onOpen, - onReady, - onYearChange, - placeholder, - required, - shorthandCurrentMonth, - showMonths, - successtext, - time_24hr, - valid, - value, - weekNumbers, - width, - ...props -}) => { - // always generate auto-id string using the useId hook to avoid "more hooks than in previous render" error when removing custom id: - const autoId = "juno-datetimepicker-" + useId() - const theId = id && id.length ? id : autoId - - const fpRef = useRef(null) // the dom node flatpickr instance will be bound to - let flatpickrInstanceRef = useRef({}) // The actual flatpickr instance - const calendarTargetRef = useRef(null) // The DOM node the flatpickr calendar should be rendered to - - const [theDate, setTheDate] = useState({}) - const [hasFocus, setHasFocus] = useState(false) - const [isOpen, setIsOpen] = useState(false) - const [isInvalid, setIsInvalid] = useState(false) - const [isValid, setIsValid] = useState(false) - - const updateFlatpickrInstance = (newKeys) => - (flatpickrInstanceRef.current = { - ...flatpickrInstanceRef.current, - ...Object.keys(newKeys).reduce((a, key) => { - a[key] = newKeys[key] - return a - }, {}), - }) - - const invalidated = useMemo( - () => (invalid || (errortext && errortext.length) ? true : false), - [invalid, errortext] - ) - const validated = useMemo( - () => (valid || (successtext && successtext.length) ? true : false), - [valid, successtext] - ) - - useEffect(() => { - setIsInvalid(invalidated) - }, [invalidated]) - - useEffect(() => { - setIsValid(validated) - }, [validated]) - - const handleBlur = () => { - setHasFocus(false) - onBlur && onBlur(theDate.selectedDate, theDate.selectedDateStr) - } - - const handleChange = (selectedDate, dateStr, instance) => { - setTheDate({ selectedDate: selectedDate, selectedDateStr: dateStr }) - onChange && onChange(selectedDate, dateStr) - } - - const handleClose = (selectedDate, dateStr, instance) => { - setIsOpen(false) - onClose && onClose(selectedDate, dateStr) - } - - const handleMonthChange = (selectedDate, dateStr, instance) => { - setTheDate({ selectedDate: selectedDate, selectedDateStr: dateStr }) - onMonthChange && onMonthChange(selectedDate, dateStr) - } - - const handleOpen = (selectedDate, dateStr, instance) => { - setIsOpen(true) - onOpen && onOpen(selectedDate, dateStr) - } - - const handleReady = (selectedDate, dateStr, instance) => { - onReady && onReady(selectedDate, dateStr) - } - - const handleYearChange = (selectedDate, dateStr, instance) => { - setTheDate({ selectedDate: selectedDate, selectedDateStr: dateStr }) - onYearChange && onYearChange(selectedDate, dateStr) - } - - const handleInputFocus = () => { - setHasFocus(true) - onFocus && onFocus(theDate.selectedDate, theDate.selectedDateStr) - } - - const handleClearIconClick = () => { - setTheDate({}) - flatpickrInstanceRef.current?.clear() - onClear && onClear([], "") - } - - // Create stringified versions of the value prop and its aliases in order to use them in a useEffect dependency array later. - const stringifiedValue = JSON.stringify(value) - const stringifiedDefaultDate = JSON.stringify(defaultDate) - const stringifiedDefaultValue = JSON.stringify(defaultValue) - - // Function to determine the date format. Will return the dateFormat if passed as a prop, or a useful defaultFormat depending on whether the DateTimePicker is set to show the time, seconds, or no calendar at all (time picker only). - const getDateFormat = () => { - const defaultDateFormat = enableTime - ? noCalendar - ? enableSeconds - ? "H:i:S" - : "H:i" - : enableSeconds - ? "Y-m-d H:i:S" - : "Y-m-d H:i" - : "Y-m-d" - - const theDateFormat = - dateFormat === undefined ? defaultDateFormat : dateFormat - - return theDateFormat - } - - const theDateFormat = getDateFormat() - - const createFlatpickrInstance = () => { - const options = { - allowInput: allowInput, - allowInvalidPreload: allowInvalidPreload, - ariaDateFormat: ariaDateFormat, - appendTo: calendarTargetRef.current, - conjunction: conjunction, - dateFormat: theDateFormat, - defaultDate: defaultDate || defaultValue, - defaultHour: defaultHour, - defaultMinute: defaultMinute, - disable: disable, - enableSeconds: enableSeconds, - enableTime: enableTime, - hourIncrement: hourIncrement, - locale: locale, - maxDate: maxDate, - minDate: minDate, - minuteIncrement: minuteIncrement, - mode: mode, - monthSelectorType, - noCalendar: noCalendar, - onChange: handleChange, - onClose: handleClose, - onMonthChange: handleMonthChange, - onOpen: handleOpen, - onReady: handleReady, - onYearChange: handleYearChange, - positionElement: calendarTargetRef.current, - shorthandCurrentMonth: shorthandCurrentMonth, - showMonths: showMonths, - time_24hr: time_24hr, - weekNumbers: weekNumbers, - } - const FP = - calendarTargetRef && fpRef.current && flatpickr(fpRef.current, options) - updateFlatpickrInstance(FP) - } - - const destroyFlatpickrInstance = () => { - flatpickrInstanceRef.current.destroy() - setTheDate({}) - flatpickrInstanceRef = null // Not sure if this is actually necessary? - } - - useEffect(() => { - createFlatpickrInstance() - return () => { - destroyFlatpickrInstance() - } - }, []) - - /* - Some config options on the flatpickr instance can not be set with immediate effect, a new instance needs to be created. - For the corresponding props we have some logic that makes sure we destroy the current instance and create a new one only when absolutely necessary. Also, we need to reduce doing that to only once, even if multiple of the props were updated at the same time for the sake of efficiency, and to make sure we do not call event handlers more often than needed and expected by the user. - */ - - // Store current props that will require creating a new instance when their value changes: - const prevRerenderingProps = useRef({ - allowInput: allowInput, - defaultHour: defaultHour, - defaultMinute: defaultMinute, - enableTime: enableTime, - enableSeconds: enableSeconds, - hourIncrement: hourIncrement, - minuteIncrement: minuteIncrement, - mode: mode, - noCalendar: noCalendar, - weekNumbers: weekNumbers, - }) - - // Apply a use effect to handle the logic bound to the props that require creating a new faltpickr instance: - useEffect(() => { - // set a variable to be set to true once we know we need to destroy the current instance and create a new one: - let hasChanged = false - - // For each of the props… - Object.keys(prevRerenderingProps.current).forEach((propKey) => { - const prevValue = prevRerenderingProps.current[propKey] - const currentValue = { - allowInput, - defaultHour, - defaultMinute, - enableTime, - enableSeconds, - hourIncrement, - minuteIncrement, - mode, - monthSelectorType, - noCalendar, - showMonths, - weekNumbers, - }[propKey] - - // … we need to check whether their value has actually changed - if (prevValue !== currentValue) { - hasChanged = true - } - }) - - // After we have checked if any one or multiple of the relevant props have changed, we actually destroy the curent instance and create a new one: - if (hasChanged) { - flatpickrInstanceRef?.current?.destroy() - createFlatpickrInstance() - } - - // Also make sure we update our stored props in order to be ready for the next update: - prevRerenderingProps.current = { - allowInput: allowInput, - defaultHour: defaultHour, - defaultMinute: defaultMinute, - enableTime: enableTime, - enableSeconds: enableSeconds, - hourIncrement: hourIncrement, - minuteIncrement: minuteIncrement, - mode: mode, - monthSelectorType: monthSelectorType, - noCalendar: noCalendar, - showMonths: showMonths, - weekNumbers: weekNumbers, - } - }, [ - allowInput, - defaultHour, - defaultMinute, - enableTime, - enableSeconds, - hourIncrement, - minuteIncrement, - mode, - monthSelectorType, - noCalendar, - showMonths, - weekNumbers, - ]) - - // useEffects for props that represent config options that can be set on an existing flatpickr instance with immediate effect: - useEffect(() => { - flatpickrInstanceRef.current?.set( - "allowInvalidPreload", - allowInvalidPreload - ) - }, [allowInvalidPreload]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("ariaDateFormat", ariaDateFormat) - }, [ariaDateFormat]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("conjunction", conjunction) - }, [conjunction]) - - useEffect(() => { - const newDateFormat = getDateFormat() - flatpickrInstanceRef.current?.set("dateFormat", newDateFormat) - }, [dateFormat]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("disable", disable) - }, [disable]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("hourIncrement", hourIncrement) - }, [hourIncrement]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("locale", locale) - }, [locale]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("maxDate", maxDate) - }, [maxDate]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("minDate", minDate) - }, [minDate]) - - useEffect(() => { - flatpickrInstanceRef.current?.set( - "shorthandCurrentMonth", - shorthandCurrentMonth - ) - }, [shorthandCurrentMonth]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("time_24hr", time_24hr) - }, [time_24hr]) - - // Update the flatpickr instance whenever the value prop (or any of its aliases) changes, and force the flatpickr instance to fire onChange event. These props may contain an array of one or multiple objects. These will never pass React's identity comparison, and will be regarded as a new object with any render regardless of their contents, thus creating an endless loop by updating the flatpickr instance updating the parent state (via onChange above) updating the flatpickr instance (…). We prevent this by checking on the stringified versions of the props in the dependency array. - useEffect(() => { - flatpickrInstanceRef.current?.setDate( - value || defaultDate || defaultValue, - true // enforce firing change event that in turn will update our state via handleChange. - ) - }, [stringifiedValue, stringifiedDefaultDate, stringifiedDefaultValue]) - - useEffect(() => { - flatpickrInstanceRef.current?.set("weekNumbers", weekNumbers) - }, [weekNumbers]) - - return ( - <div - className={` - juno-datetimepicker-wrapper - ${width == "auto" ? "jn-inline-block" : "jn-block"} - ${width == "auto" ? "jn-w-auto" : "jn-w-full"} - `} - > - <div - className={`juno-datetimepicker-input-wrapper ${inputWrapperStyles}`} - > - <input - className={` - juno-datetimepicker-input - ${inputStyles} - ${label ? inputWithLabelStyles : inputWithoutLabelStyles} - ${ - isInvalid - ? "juno-datetimepicker-input-invalid " + inputInvalidStyles - : "" - } - ${ - isValid - ? "juno-datetimepicker-input-valid" + inputValidStyles - : "" - } - ${isValid || isInvalid ? "" : inputDefaultBorderStyles} - ${width == "auto" ? "jn-w-auto" : "jn-w-full"} - ${ - enableTime && noCalendar - ? "juno-datetimepicker-input-timepicker" - : "juno-datetimepicker-input-default" - } - ${className} - `} - data-mode={mode} - disabled={disabled} - id={theId} - name={name && name.length ? name : null} - onBlur={handleBlur} - onChange={handleChange} - onFocus={handleInputFocus} - placeholder={placeholder} - ref={fpRef} - type="text" - {...props} - /> - - {label && label.length ? ( - <Label - text={label} - htmlFor={theId} - className={`${labelStyles}`} - disabled={disabled} - required={required} - floating - minimized={ - placeholder || - isOpen || - theDate.selectedDate?.length || - theDate.selectedDateStr?.length - ? true - : false - } - /> - ) : ( - "" - )} - - <div - className={`juno-datetimepicker-icon-container ${iconContainerStyles}`} - > - {theDate.selectedDate?.length || theDate.selectedDateStr?.length ? ( - <Icon - icon="close" - onClick={handleClearIconClick} - disabled={disabled} - title="Clear" - /> - ) : ( - "" - )} - {isInvalid ? ( - <Icon icon="dangerous" color="jn-text-theme-error" /> - ) : ( - "" - )} - {isValid ? ( - <Icon icon="checkCircle" color="jn-text-theme-success" /> - ) : ( - "" - )} - </div> - </div> - <div ref={calendarTargetRef}></div> - - {errortext && errortext.length ? ( - <FormHint text={errortext} variant="error" className="jn-mt-0" /> - ) : ( - "" - )} - {successtext && successtext.length ? ( - <FormHint text={successtext} variant="success" className="jn-mt-0" /> - ) : ( - "" - )} - {helptext && helptext.length ? ( - <FormHint text={helptext} className="jn-mt-0" /> - ) : ( - "" - )} - </div> - ) -} - -const datePropType = PropTypes.oneOfType([ - PropTypes.string, - PropTypes.array, - PropTypes.object, - PropTypes.number, -]) - -DateTimePicker.propTypes = { - /** Whether the DateTimePicker input element allows direct user keyboard input. Default is `false`. */ - allowInput: PropTypes.bool, - /** Allows the preloading of an invalid date (e.g. a date that hass been disable by passing `disable`). When disabled, the field will be cleared if the provided date is invalid */ - allowInvalidPreload: PropTypes.bool, - /** How the `aria-label` date for each day in the calendar will be formed. Uses the same rules/tokens as `dateFormat´ as described here: https://flatpickr.js.org/formatting/. When changing this, make sure the outcome makes sense when using a screenreader.*/ - ariaDateFormat: PropTypes.string, - /** Pass custom classNames. These will be appended to the input element of the DateTimePicker. */ - className: PropTypes.string, - /** A custom string to separate individual dates in `multiple` mode. */ - conjunction: PropTypes.string, - /** A string of characters to customize how a date will be formatted in the input field. Available options: https://flatpickr.js.org/formatting/ */ - dateFormat: PropTypes.string, - /** Sets the default date of the DateTimePicker. Same as `value`, only here for compatibility with the original Flatpickr library. If both `value` and `defaultDate` are being passed, `value` will win. Date Objects, timestamps, ISO date strings, chronological date strings `YYYY-MM-DD HH:MM` (must be compatible to current `dateFormat`), and the shortcut `today` are all accepted. */ - defaultDate: datePropType, - /** The initial value of the hour input element. Only effective if time is enabled. Note this will only set the hour input element to the value specified. Setting this options will not set a selected value on the DateTimePicker. */ - defaultHour: PropTypes.number, - /** The initial value of the minute input element. Only effective if time is enabled. Note this will only set the minute input element to the value specified. Setting this options will not set a selected value on the DateTimePicker. */ - defaultMinute: PropTypes.number, - /** Same as value, defaultDate */ - defaultValue: datePropType, - /** Pass an array of dates, date strings, date ranges or functions to disable dates. More on disabling dates: https://flatpickr.js.org/examples/#disabling-specific-dates */ - disable: PropTypes.array, - /** Whether the DateTimePicker is disabled */ - disabled: PropTypes.bool, - /** Whether to show seconds when showing a time picker. */ - enableSeconds: PropTypes.bool, - /** Whether to show a time picker. */ - enableTime: PropTypes.bool, - /** A text to render when the DateTimePicker has an error or could not be validated. */ - errortext: PropTypes.node, - /** A helptext to render to explain meaning and significance of the DateTimePicker. */ - helptext: PropTypes.node, - /** The step for the hour input. Only has an effect when a time picker is enabled via `enableTime`. */ - hourIncrement: PropTypes.number, - /** The id of the DateTimePicker input element. If none is passed, an automatically generated id will be used. */ - id: PropTypes.string, - /** Whether the DateTimePicker selected date was negatively validated. */ - invalid: PropTypes.bool, - /** The label of the DateTimePicker input element. */ - label: PropTypes.string, - /** Localization string or object. Can be used to set starting day of the week, e.g. Mondays instead of Sundays. More on localization: https://flatpickr.js.org/localization/ */ - locale: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), - /** The maximum / latest date a user can select (inclusive). */ - maxDate: datePropType, - /** The minimum / earliest date a user can select (inclusive). */ - minDate: datePropType, - /** The step for the minute input. Only has an effect when a time picker is enabled via `enableTime`. */ - minuteIncrement: PropTypes.number, - /** The mode of the Datepicker. */ - mode: PropTypes.oneOf(["single", "multiple", "range"]), - /** Whether to show a dropdown to select the current month. Default is "static". If `showMonths` is set to be greater than 1, it will always be displayed as static. Arrows to scroll through the months as well as through years will still be displayed and working. */ - monthSelectorType: PropTypes.oneOf(["static", "dropdown"]), - /** The name of the DateTimePicker input element */ - name: PropTypes.string, - /** Set to `true` to not display a calendar at all. To create a time picker, set `enableTime` to true, too. */ - noCalendar: PropTypes.bool, - /** A handler to be executed when the DateTimePicker input element looses focus. */ - onBlur: PropTypes.func, - /** A handler to be executed when the selected date(s), date range or time changes */ - onChange: PropTypes.func, - /** A handler to be executed when the DateTimePicker value is reset by clicking the clear icon. The onChnage handler will be fired in this event too, onClear is more specific. */ - onClear: PropTypes.func, - /** A handler to be executed when the DateTimePicker calendar closes */ - onClose: PropTypes.func, - /** A handler to be executed when the DateTimePicker input element receives focus. */ - onFocus: PropTypes.func, - /** A handler to be executed when the selected month changes */ - onMonthChange: PropTypes.func, - /** A handler to be executed when the DateTimePicker calendar opens */ - onOpen: PropTypes.func, - /** A handler to be executed when the DateTimePicker component is ready */ - onReady: PropTypes.func, - /** A handler to be executed when the selected year changes */ - onYearChange: PropTypes.func, - /** The placeholder of the DateTimePicker input element */ - placeholder: PropTypes.string, - /** Whether the DateTimePicker should be marked as required. Requires a `Label` to be set. */ - required: PropTypes.bool, - /** Whether the current month in the date picker should be displayed as shorthand, e.g. "Jan" instead of "January" */ - shorthandCurrentMonth: PropTypes.bool, - /** The number of months to show in the date picker */ - showMonths: PropTypes.number, - /** A text to render when the DateTimePicker was successfully validated */ - successtext: PropTypes.node, - /** Displays time picker in 24 hour mode without AM/PM selection when enabled. Requires `enableTime` to be set, too. Default is `false`. */ - time_24hr: PropTypes.bool, - /** Whether the DateTimePicker has been successfully validated */ - valid: PropTypes.bool, - /** The value of the datepicker. Date Objects, timestamps, ISO date strings, chronological date strings `YYYY-MM-DD HH:MM` (must be compatible to current `dateFormat`), and the shortcut `today` are all accepted. */ - value: datePropType, - /** Whether to render week numbers. Default is `false`. */ - weekNumbers: PropTypes.bool, - /** The width of the datepicker input. Either 'full' (default) or 'auto'. */ - width: PropTypes.oneOf(["full", "auto"]), -} - -DateTimePicker.defaultProps = { - allowInput: false, - allowInvalidPreload: false, - ariaDateFormat: "F j, Y", - className: "", - conjunction: ", ", - dateFormat: undefined, - defaultHour: 12, - defaultMinute: 0, - defaultDate: null, - defaultValue: "", - disable: [], - disabled: false, - enableSeconds: false, - enableTime: false, - errortext: "", - helptext: "", - hourIncrement: 1, - id: "", - invalid: false, - label: "", - locale: null, - maxDate: null, - minDate: null, - minuteIncrement: 1, - mode: "single", - monthSelectorType: "static", - name: "", - noCalendar: false, - onBlur: undefined, - onChange: undefined, - onClear: undefined, - onClose: undefined, - onFocus: undefined, - onMonthChange: undefined, - onOpen: undefined, - onReady: undefined, - onYearChange: undefined, - placeholder: "", - required: false, - shorthandCurrentMonth: false, - showMonths: 1, - successtext: "", - time_24hr: false, - valid: false, - value: "", - weekNumbers: false, - width: "full", -} diff --git a/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.stories.js b/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.stories.js deleted file mode 100644 index 947e6174b..000000000 --- a/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.stories.js +++ /dev/null @@ -1,500 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState } from "react" -import { DateTimePicker } from "./index.js" -import { PortalProvider } from "../PortalProvider/PortalProvider.component" -import { Form } from "../Form/" - -export default { - title: "WIP/DateTimePicker/DateTimePicker", - component: DateTimePicker, - argTypes: { - mode: { - options: ["single", "multiple", "range", "time"], - control: { type: "select" }, - }, - value: { - control: false, - }, - errortext: { - control: false, - }, - helptext: { - control: false, - }, - successtext: { - control: false, - }, - monthSelectorType: { - options: ["dropdown", "static"], - control: { type: "radio" }, - }, - width: { - options: ["auto", "full"], - control: { type: "radio" }, - }, - disable: { - control: false, - }, - }, -} - -// Not in use yet, useful for "enable" story once we have it, pls leave here: -const daysFromToday = (n) => { - const today = new Date() - return new Date(today.setDate(today.getDate() + n)) -} - -const Template = ({ ...args }) => <DateTimePicker {...args} /> - -export const Default = Template.bind({}) -Default.args = {} - -export const WithLabel = Template.bind({}) -WithLabel.args = { - label: "Select a date", -} - -export const Required = Template.bind({}) -Required.args = { - label: "Select a date", - required: true, -} - -export const Disabled = Template.bind({}) -Disabled.args = { - label: "Select a date", - disabled: true, -} - -export const WithPlaceholder = Template.bind({}) -WithPlaceholder.args = { - placeholder: "Select a date…", -} - -export const WithValue = Template.bind({}) -WithValue.parameters = { - docs: { - description: { - story: - "Set the selected date of the datePicker. `value`, `defaultValue`, and `defaultDate` do the exact same thing and can be used interchangeably.", - }, - }, -} -WithValue.args = { - value: new Date(), -} - -export const WithDefaultDate = Template.bind({}) -WithDefaultDate.parameters = { - docs: { - description: { - story: - "Set the selected date of the datePicker. `value`, `defaultValue`, and `defaultDate` do the exact same thing and can be used interchangeably.", - }, - }, -} -WithDefaultDate.args = { - defaultDate: new Date(), -} - -export const WithDefaultHourAndMinute = Template.bind({}) -WithDefaultHourAndMinute.parameters = { - docs: { - description: { - story: - "Pass `defaultHour` and `defaultMinute` to set default values for the date and time input elements. Note: this will not set a selected date with these values in the DateTimePicker input element, the user still has to make a selection.", - }, - }, -} -WithDefaultHourAndMinute.args = { - defaultHour: 9, - defaultMinute: 13, - enableTime: true, - helptext: - "The hour and minute input elements in the dropdown calendar have been set to default values (09:13 AM).", -} - -export const WithDefaultValue = Template.bind({}) -WithDefaultValue.parameters = { - docs: { - description: { - story: - "Set the selected date of the datePicker. `value`, `defaultValue`, and `defaultDate` do the exact same thing and can be used interchangeably.", - }, - }, -} -WithDefaultValue.args = { - defaultValue: new Date(), -} - -export const WithValueAsDateString = Template.bind({}) -WithValueAsDateString.parameters = { - docs: { - description: { - story: - 'Pass a string as a `value`, `defaultValue`, or `defaultDate` that is compatible with the current `dateFormat` prop, e.g. `"2024-01-24"` if the current `dateFormat` is `"Y-m-d"` (as is the default). The DateTimePicker component will not convert these.', - }, - }, -} -WithValueAsDateString.args = { - value: "2024-01-24", -} - -export const WithValueAsIsoDateString = Template.bind({}) -WithValueAsIsoDateString.parameters = { - docs: { - description: { - story: - "Pass an ISO-compatible date string to display the corresponding date in the Datepicker.", - }, - }, -} -WithValueAsIsoDateString.args = { - value: "2034-02-26T19:40:03.243Z", -} - -export const WithValueAsTimestamp = Template.bind({}) -WithValueAsTimestamp.parameters = { - docs: { - description: { - story: - "Pass a timestamp with milliseconds as `value` to display the corresponding date in the Datepicker.", - }, - }, -} -WithValueAsTimestamp.args = { - value: 1706273787000, -} - -export const WithValueAsTodayShortcut = Template.bind({}) -WithValueAsTodayShortcut.parameters = { - docs: { - description: { - story: - 'Pass `"today"` as `value` as a shortcut to display the current Date in the Datepicker.', - }, - }, -} -WithValueAsTodayShortcut.args = { - value: "today", -} - -export const WithCustomDateFormat = Template.bind() -WithCustomDateFormat.parameters = {} -WithCustomDateFormat.args = { - value: "today", - dateFormat: "F d, Y", -} - -export const WithTime = Template.bind({}) -WithTime.parameters = { - docs: { - description: { - story: - "To also show a time picker to allow users to select a date and a time, set `enableTime` to `true`. Set the `dateFormat` accordingly to have the selected time reflected in the DateTimePicker input element. More about formatting dates here: https://flatpickr.js.org/formatting/.", - }, - }, -} -WithTime.args = { - enableTime: true, -} - -export const WithTimeAndSeconds = Template.bind({}) -WithTimeAndSeconds.parameters = { - docs: { - description: { - story: - "To allow selecting seconds when showing a time picker, set `enableSeconds` to `true`. To reflect seconds in the selected date in the DateTimePicker, adjust the `dateFormat` accordingly: https://flatpickr.js.org/formatting/.", - }, - }, -} -WithTimeAndSeconds.args = { - enableTime: true, - enableSeconds: true, -} - -export const WithTimeWithCustomHourIncrement = Template.bind({}) -WithTimeWithCustomHourIncrement.parameters = { - docs: { - description: { - story: - "Set a custom hour increment by which to change the hour in the respective element.", - }, - }, -} -WithTimeWithCustomHourIncrement.args = { - enableTime: true, - hourIncrement: 6, - helptext: "The hour input of this DateTimePicker has a 6 hour increment.", -} - -export const WithTimeWithCustomMinuteIncrement = Template.bind({}) -WithTimeWithCustomMinuteIncrement.parameters = { - docs: { - description: { - story: - "Set a custom minute increment by which to change the minute in the respective element.", - }, - }, -} -WithTimeWithCustomMinuteIncrement.args = { - enableTime: true, - minuteIncrement: 5, - helptext: "The minute input of this DateTimePicker has a 5 minute increment.", -} - -export const With24hTime = Template.bind({}) -With24hTime.parameters = { - docs: { - description: { - story: - "Set the time picker to use 24h time mode without AM/PM selection.", - }, - }, -} -With24hTime.args = { - enableTime: true, - time_24hr: true, -} - -export const ShowTwoMonths = Template.bind({}) -ShowTwoMonths.parameters = { - docs: { - description: { - story: - "Set the number of months to be displayed side by side in the calendar.", - }, - }, -} -ShowTwoMonths.args = { - showMonths: 2, -} - -export const WithWeekNumbers = Template.bind({}) -WithWeekNumbers.parameters = { - docs: { - description: { - story: - "Set `weekNumbers` to `true` to display week numbers in the calendar.", - }, - }, -} -WithWeekNumbers.args = { - weekNumbers: true, -} - -export const WithShorthandCurrentMonth = Template.bind({}) -WithShorthandCurrentMonth.parameters = { - docs: { - description: { - story: - "Set `shorthandCurrentMonth` to `true` to show shorthand month names, e.g. 'Jan' instead of 'January'.", - }, - }, -} -WithShorthandCurrentMonth.args = { - shorthandCurrentMonth: true, -} - -export const WithMonthSelectorDropdown = Template.bind({}) -WithMonthSelectorDropdown.parameters = { - docs: { - description: { - story: - 'Set `monthSelectorType` to "dropdown" in order to show a select element to switch months in the calndar.', - }, - }, -} -WithMonthSelectorDropdown.args = { - monthSelectorType: "dropdown", -} - -export const AllowInput = Template.bind({}) -AllowInput.parameters = { - docs: { - description: { - story: - "Set `allowInput` to `true` to allow direct user input by typing into the DateTimePicker input element.", - }, - }, -} -AllowInput.args = { - allowInput: true, -} - -export const Multiple = Template.bind({}) -Multiple.parameters = { - docs: { - description: { - story: 'To select multiple dates, set `mode` to "multiple".', - }, - }, -} -Multiple.args = { - mode: "multiple", -} - -export const Range = Template.bind({}) -Range.parameters = { - docs: { - description: { - story: - 'To select a date range instead of individual date(s), set `mode` to "range".', - }, - }, -} -Range.args = { - mode: "range", -} - -export const TimePicker = Template.bind({}) -TimePicker.parameters = { - docs: { - description: { - story: - "In order to create a pure timepicker, set the `dateFormat` accordingly, and set `noCalendar` and `enableTime` to `true`. If seconds are required, set `enableSeconds` to `true`.", - }, - }, -} -TimePicker.args = { - enableTime: true, - noCalendar: true, - enableSeconds: true, -} - -export const WithMinDate = Template.bind({}) -WithMinDate.parameters = { - docs: { - description: { - story: "Set a `minDate` to allow selecting only later dates.", - }, - }, -} -WithMinDate.args = { - minDate: new Date(), - helptext: "Only dates in the future including today can be selected.", -} - -export const WithMaxDate = Template.bind({}) -WithMaxDate.parameters = { - docs: { - description: { - story: "Set a `maxDate` to allow selecting only earlier dates.", - }, - }, -} -WithMaxDate.args = { - maxDate: new Date(), - helptext: "Only dates in the past including today can be selected.", -} - -export const DisableDate = Template.bind({}) -;(DisableDate.parameters = { - docs: { - description: { - story: - "Pass an array of dates to be disabled, making it impossible for the user to select these dates.", - }, - }, -}), - (DisableDate.args = { - disable: [new Date()], - helptext: "The current date (today) can not be selected.", - }) - -export const DisableByFunction = Template.bind({}) -DisableByFunction.parameters = { - docs: { - description: { - story: - "Pass an array of functions such as `function(date) {// return true to disable date}` as `disable` to be run for each date in the calendar in order to disable dates that match custom criteria. Pass a locale string or object to modify the sequence of week days rendered in the calendar.", - }, - }, -} -DisableByFunction.args = { - disable: [ - function (date) { - return date.getDay() === 0 || date.getDay() === 6 - }, - ], - locale: { - firstDayOfWeek: 1, // set week to start on Monday - }, - helptext: - "Only work days can be selected, week in calendar starts with Monday.", -} - -export const Valid = Template.bind({}) -Valid.args = { - valid: true, -} - -export const Invalid = Template.bind({}) -Invalid.args = { - invalid: true, -} - -export const WithErrortext = Template.bind({}) -WithErrortext.args = { - errortext: "This DateTimePicker has an error or is invalid.", -} - -export const WithSuccesstext = Template.bind({}) -WithSuccesstext.args = { - successtext: "This DateTimePicker was susccessfully validated.", -} - -export const WithHelptext = Template.bind({}) -WithHelptext.args = { - helptext: "Some useful information goes here.", -} - -export const InvalidPreload = Template.bind({}) -InvalidPreload.parameters = { - docs: { - description: { - story: - "Normally, the text input element oif the datepicker would be cleared when passing a date as `value` or `defaultDate` that is disabled from selection. By setting `allowInvalidPreload` such dates can be initially displayed in the datepicker, even though they are not available for user selection in the calendar.", - }, - }, -} -InvalidPreload.args = { - allowInvalidPreload: true, - value: "2024-01-30", - disable: ["2024-01-30"], - helptext: - "The datpicker initially shows Jan 30, 2024 as value even though this date has been set as disabled and thus can not be selected by a user.", -} - -const ControlledTemplate = ({ ...args }) => { - const [testState, setTestState] = useState({ date: { end: null } }) - - const handleChange = (dObj, dStr) => { - setTestState({ date: { end: dObj } }) - } - - return ( - <DateTimePicker - {...args} - onChange={handleChange} - value={testState?.date?.end} - /> - ) -} - -export const ControlledDateTimePicker = { - render: ControlledTemplate, - parameters: { - docs: { - description: { - story: - "Example of controlled usage, using the date object array as returned by the onChange handler in the parent story state. This used to create an endless loop and should be fixed now.", - }, - }, - }, - args: {}, -} diff --git a/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.test.js b/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.test.js deleted file mode 100644 index ae0d466d4..000000000 --- a/libs/juno-ui-components/src/components/DateTimePicker/DateTimePicker.test.js +++ /dev/null @@ -1,684 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { cleanup, render, screen, fireEvent } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { DateTimePicker } from "./index" - -const mockOnOpen = jest.fn() -const mockOnClear = jest.fn() -const mockOnClose = jest.fn() -const mockOnChange = jest.fn() -const mockOnMonthChange = jest.fn() -const mockOnYearChange = jest.fn() -const mockOnValueUpdate = jest.fn() - -describe("DateTimePicker", () => { - afterEach(() => { - cleanup() - jest.clearAllMocks() - }) - - test("renders a DateTimePicker", async () => { - render(<DateTimePicker />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("type", "text") - expect(screen.getByRole("textbox")).toHaveClass("juno-datetimepicker-input") - }) - - test("renders a label as passed", async () => { - render( - <DateTimePicker label="The DateTimePicker Label" id="my-textinput" /> - ) - expect(document.querySelector(".juno-label")).toBeInTheDocument() - expect(document.querySelector(".juno-label")).toHaveTextContent( - "The DateTimePicker Label" - ) - }) - - test("renders an id as passed", async () => { - render(<DateTimePicker id="my-datetimepicker" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute( - "id", - "my-datetimepicker" - ) - }) - - test("renders a name as passed", async () => { - render(<DateTimePicker name="my-name" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("name", "my-name") - }) - - test("renders a DateTimePicker with an auto-generated id if no id is passed", async () => { - render(<DateTimePicker />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("id") - expect(screen.getByRole("textbox").getAttribute("id")).toMatch( - "juno-datetimepicker" - ) - }) - - test("renders a DateTimePicker with a label associated by an id as passed", async () => { - render(<DateTimePicker label="The DateTimePicker Label" id="dp-1" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("id") - expect(screen.getByRole("textbox").getAttribute("id")).toMatch("dp-1") - expect( - screen.getByLabelText("The DateTimePicker Label") - ).toBeInTheDocument() - }) - - test("renders a DateTimePicker with a label associated by an auto-generated id if no id was passed ", async () => { - render(<DateTimePicker label="This is a DateTimePicker" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect( - screen.getByLabelText("This is a DateTimePicker") - ).toBeInTheDocument() - }) - - test("renders a DateTimePicker with a placholder as passed", async () => { - render(<DateTimePicker placeholder="This is a placeholder" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute( - "placeholder", - "This is a placeholder" - ) - }) - - test("renders a disabled DateTimePicker as passed", async () => { - render(<DateTimePicker disabled />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toBeDisabled() - }) - - test("renders a Clear button if passed and when a date is set", async () => { - render(<DateTimePicker value="2027-01-12" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByTitle("Clear")).toBeInTheDocument() - }) - - test("does not render a Clear button when no date is set", async () => { - render(<DateTimePicker />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.queryByTitle("Clear")).not.toBeInTheDocument() - }) - - test("renders a DateTimePicker marked as required", async () => { - // DateTimePicker needs a label passed since the Label subcomponent is responsible for rendering the Required marker: - render(<DateTimePicker label="Required DateTimePicker" required />) - expect(document.querySelector(".juno-required")).toBeInTheDocument() - }) - - test("renders a helptext as passed", async () => { - render(<DateTimePicker helptext="this is a helptext" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass( - "juno-form-hint-help" - ) - expect(document.querySelector(".juno-form-hint")).toHaveTextContent( - "this is a helptext" - ) - }) - - test("renders a valid DateTimePicker as passed", async () => { - render(<DateTimePicker valid />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveClass( - "juno-datetimepicker-input-valid" - ) - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - }) - - test("renders an invalid DateTimePicker as passed", async () => { - render(<DateTimePicker invalid />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveClass( - "juno-datetimepicker-input-invalid" - ) - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - }) - - test("renders a successtext as passed and validates the element", async () => { - render(<DateTimePicker successtext="great success!" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass( - "juno-form-hint-success" - ) - expect(document.querySelector(".juno-form-hint")).toHaveTextContent( - "great success!" - ) - expect(screen.getByRole("textbox")).toHaveClass( - "juno-datetimepicker-input-valid" - ) - expect(screen.getByTitle("CheckCircle")).toBeInTheDocument() - }) - - test("renders an errortext as passed and invalidates the element", async () => { - render(<DateTimePicker errortext="this is an error!" />) - expect(document.querySelector(".juno-form-hint")).toBeInTheDocument() - expect(document.querySelector(".juno-form-hint")).toHaveClass( - "juno-form-hint-error" - ) - expect(document.querySelector(".juno-form-hint")).toHaveTextContent( - "this is an error!" - ) - expect(screen.getByRole("textbox")).toHaveClass( - "juno-datetimepicker-input-invalid" - ) - expect(screen.getByTitle("Dangerous")).toBeInTheDocument() - }) - - test("renders a DateTimePicker with a time picker as passed", async () => { - render(<DateTimePicker enableTime={true} dateFormat="Y-m-d H:i:S" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(document.querySelector(".flatpickr-time")).toBeInTheDocument() - expect(screen.getByLabelText("Hour")).toBeInTheDocument() - expect(screen.getByLabelText("Minute")).toBeInTheDocument() - }) - - test("renders a DateTimePicker with a time picker with seconds as passed", async () => { - render(<DateTimePicker enableTime={true} enableSeconds={true} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(document.querySelector(".flatpickr-time")).toBeInTheDocument() - expect(screen.getByLabelText("Hour")).toBeInTheDocument() - expect(screen.getByLabelText("Minute")).toBeInTheDocument() - // We need to check for the flatpickr className as flatpickr does not assign an aria-label to the seconds input: - expect(document.querySelector(".flatpickr-second")).toBeInTheDocument() - }) - - test("displays the date as passed as a date object", async () => { - render(<DateTimePicker value={new Date(2099, 0, 1)} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2099-01-01") - }) - - test("displays the date as passed as a date string", async () => { - render(<DateTimePicker value="2024-01-26" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2024-01-26") - }) - - test("diplays the date as passed as an ISO date string", async () => { - render(<DateTimePicker value="2034-02-26T19:40:03.243Z" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2034-02-26") - }) - - test("displays the date as passed as a timestamp", async () => { - render(<DateTimePicker value={1706273787000} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2024-01-26") - }) - - test("displays the date as passed by shortcut 'today'", async () => { - render(<DateTimePicker value="today" />) - const today = new Date() - const year = today.getFullYear() - const month = (today.getMonth() + 1).toString().padStart(2, "0") - const day = today.getDate().toString().padStart(2, "0") - const todayAsString = `${year}-${month}-${day}` - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue(todayAsString) - }) - - test("displays the date in a custom format as passed", async () => { - render(<DateTimePicker dateFormat="F d Y" value={1706273787000} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("January 26 2024") - }) - - test("uses the default dateFormat (Y-m-d) in default (non-time picker) mode)", async () => { - const today = new Date() - const fullYear = today.getFullYear() - const month = (today.getMonth() + 1).toString().padStart(2, "0") - const day = today.getDate().toString().padStart(2, "0") - const todayAsString = `${fullYear}-${month}-${day}` - render(<DateTimePicker value={today} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue(todayAsString) - }) - - test("uses the correct default dateFormat (Y-m-d H:i) in date-time-picker mode without seconds", async () => { - const now = new Date() - const fullYear = now.getFullYear() - const month = (now.getMonth() + 1).toString().padStart(2, "0") - const day = now.getDate().toString().padStart(2, "0") - const hours = now.getHours().toString().padStart(2, "0") - const minutes = now.getMinutes().toString().padStart(2, "0") - const nowAsString = `${fullYear}-${month}-${day} ${hours}:${minutes}` - render(<DateTimePicker enableTime value={now} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue(nowAsString) - }) - - test("uses the correct default dateFormat (Y-m-d H:i:S) in date-time-picker mode with seconds enabled", async () => { - const now = new Date() - const fullYear = now.getFullYear() - const month = (now.getMonth() + 1).toString().padStart(2, "0") - const day = now.getDate().toString().padStart(2, "0") - const hours = now.getHours().toString().padStart(2, "0") - const minutes = now.getMinutes().toString().padStart(2, "0") - const seconds = now.getSeconds().toString().padStart(2, "0") - const nowAsStringWithSeconds = `${fullYear}-${month}-${day} ${hours}:${minutes}:${seconds}` - render(<DateTimePicker enableTime enableSeconds value={now} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue(nowAsStringWithSeconds) - }) - - test("uses the correct default dateFormat (H:i) in time-picker-only mode without seconds", async () => { - const now = new Date() - const hours = now.getHours().toString().padStart(2, "0") - const minutes = now.getMinutes().toString().padStart(2, "0") - const nowAsStringWithOnlyHoursAndMinutes = `${hours}:${minutes}` - render(<DateTimePicker enableTime noCalendar value={now} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue( - nowAsStringWithOnlyHoursAndMinutes - ) - }) - - test("uses the correct defaultDateFormat (H:i:S) in time-picker-only mode with seconds enabled", async () => { - const now = new Date() - const hours = now.getHours().toString().padStart(2, "0") - const minutes = now.getMinutes().toString().padStart(2, "0") - const seconds = now.getSeconds().toString().padStart(2, "0") - const nowAsStringWithOnlyHoursMinutesAndSeconds = `${hours}:${minutes}:${seconds}` - render(<DateTimePicker enableTime enableSeconds noCalendar value={now} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue( - nowAsStringWithOnlyHoursMinutesAndSeconds - ) - }) - - test("displays the date as passed as defaultDate instead of value or defaultDate", async () => { - render(<DateTimePicker defaultDate={new Date(2099, 0, 1)} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2099-01-01") - }) - - test("displays the date as passed as defaultValue instead of value or defaultDate", async () => { - render(<DateTimePicker defaultValue={new Date(2099, 0, 1)} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2099-01-01") - }) - - test("updates the date accordingly when value changes", async () => { - const { rerender } = render( - <DateTimePicker value={new Date(2024, 0, 12)} /> - ) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2024-01-12") - rerender(<DateTimePicker value={new Date(2025, 7, 18)} />) - expect(screen.getByRole("textbox")).toHaveValue("2025-08-18") - }) - - test("updates the date accordingly when defaultValue changes", async () => { - const { rerender } = render( - <DateTimePicker defaultValue={new Date(2024, 0, 12)} /> - ) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2024-01-12") - rerender(<DateTimePicker defaultValue={new Date(2025, 7, 18)} />) - expect(screen.getByRole("textbox")).toHaveValue("2025-08-18") - }) - - test("updates the date accordingly when defaultDate changes", async () => { - const { rerender } = render( - <DateTimePicker defaultDate={new Date(2024, 0, 12)} /> - ) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2024-01-12") - rerender(<DateTimePicker defaultDate={new Date(2025, 7, 18)} />) - expect(screen.getByRole("textbox")).toHaveValue("2025-08-18") - }) - - test("allows typing in the field when configured to do so", async () => { - render(<DateTimePicker allowInput />) - const input = screen.getByRole("textbox") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - expect(input).toHaveValue("") - await userEvent.click(input) - await user.type(input, "12") - expect(input).toHaveValue("12") - }) - - test("updates accordingly when the allowInput prop changes", async () => { - const { rerender } = render(<DateTimePicker />) - const input = screen.getByRole("textbox") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - expect(input).toHaveValue("") - expect(input).toHaveAttribute("readonly", "readonly") - rerender(<DateTimePicker allowInput />) - expect(input).toBeInTheDocument() - expect(input).toHaveValue("") - expect(input).not.toHaveAttribute("readonly") - await userEvent.click(input) - await user.type(input, "123") - expect(input).toHaveValue("123") - }) - - test("renders a DateTimePicker with week numbers as passed", async () => { - render(<DateTimePicker weekNumbers />) - const input = screen.getByRole("textbox") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - // click to open the calendar: - await user.click(input) - expect(document.querySelector(".flatpickr-weekwrapper")).toBeInTheDocument() - expect(document.querySelector(".flatpickr-weekday")).toBeInTheDocument() - expect(document.querySelector(".flatpickr-weekday")).toHaveTextContent("Wk") - expect(document.querySelector(".flatpickr-weeks")).toBeInTheDocument() - expect(document.querySelector(".flatpickr-weeks").childElementCount).toBe(6) - }) - - test("renders a DateTimePicker in single mode per default", async () => { - render(<DateTimePicker />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("data-mode", "single") - }) - - test("renders a DateTimePicker in multiple mode as passed", async () => { - render(<DateTimePicker mode="multiple" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("data-mode", "multiple") - }) - - test("renders a DateTimePicker in range mode as passed", async () => { - render(<DateTimePicker mode="range" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("data-mode", "range") - }) - - test("Updates the mode accordingly when the mode prop changes", async () => { - const { rerender } = render(<DateTimePicker />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("data-mode", "single") - rerender(<DateTimePicker mode="range" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("data-mode", "range") - }) - - test("allows setting an otherwise invalid value on first load as configured ", async () => { - render( - <DateTimePicker - value="2024-01-30" - disable={["2024-01-30"]} - allowInvalidPreload - /> - ) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("2024-01-30") - }) - - test("clicking the clear button clears the input", async () => { - render(<DateTimePicker value="2024-01-31" />) - const input = screen.getByRole("textbox") - const clearButton = screen.getByTitle("Clear") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - expect(input).toHaveValue("2024-01-31") - expect(clearButton).toBeInTheDocument() - await user.click(clearButton) - expect(input).toHaveValue("") - }) - - test("sets a custom aria-label format for calendar dates as passed", async () => { - render(<DateTimePicker ariaDateFormat="l, F j, Y" />) - const input = screen.getByRole("textbox") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - // click to open the calendar: - await user.click(input) - //Match something like "Monday, January 31, 2024" to pattern like [word, comma, space, word, space, one or two-digit number, comma, space, four-digit number] assuming this is precise enough: - expect( - document.querySelectorAll(".flatpickr-day")[0].getAttribute("aria-label") - ).toMatch(new RegExp(/^\b\w+\b, \b\w+\b \d{1,2}, \d{4}$/)) - }) - - test("uses a custom conjunction between dates in multiple mode as passed", async () => { - render( - <DateTimePicker - mode="multiple" - conjunction=" || " - value={["2024-02-01", "2099-03-12"]} - /> - ) - const input = screen.getByRole("textbox") - expect(input).toBeInTheDocument() - expect(input).toHaveValue("2024-02-01 || 2099-03-12") - }) - - test("updates the displayed value accordingly when the conjunction prop changes", async () => { - const { rerender } = render( - <DateTimePicker mode="multiple" value={["2024-02-01", "2099-03-12"]} /> - ) - const input = screen.getByRole("textbox") - expect(input).toBeInTheDocument() - expect(input).toHaveValue("2024-02-01, 2099-03-12") - rerender( - <DateTimePicker - mode="multiple" - value={["2024-02-01", "2099-03-12"]} - conjunction=" --- " - /> - ) - expect(input).toHaveValue("2024-02-01 --- 2099-03-12") - }) - - test("sets a default hour as passed", async () => { - render( - <DateTimePicker - enableTime={true} - dateFormat="Y-m-d H:i" - defaultHour={5} - /> - ) - const input = screen.getByRole("textbox") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - await user.click(input) - const hourInput = document.querySelector("input.flatpickr-hour") - expect(hourInput).toHaveValue(5) - }) - - test("sets a default minute as passed", async () => { - render( - <DateTimePicker enableTime dateFormat="Y-m-d H:i" defaultMinute={13} /> - ) - const input = screen.getByRole("textbox") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - await user.click(input) - const minuteInput = document.querySelector("input.flatpickr-minute") - expect(minuteInput).toHaveValue(13) - }) - - test("opens a calendar when clicking in the datepicker field", async () => { - render(<DateTimePicker />) - const input = screen.getByRole("textbox") - const calendar = document.querySelector(".flatpickr-calendar") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - expect(calendar).toBeInTheDocument() - expect(calendar).not.toHaveClass("open") - await user.click(input) - expect(calendar).toHaveClass("open") - }) - - test("uses a custom hour increment as passed", async () => { - render( - <DateTimePicker enableTime dateFormat="Y-m-d H:i" hourIncrement={6} /> - ) - const hourInput = document.querySelector("input.flatpickr-hour") - expect(hourInput).toHaveAttribute("step", "6") - }) - - test("uses a custom minute increment as passed", async () => { - render( - <DateTimePicker enableTime dateFormat="Y-m-d H:i" minuteIncrement={7} /> - ) - const hourInput = document.querySelector("input.flatpickr-minute") - expect(hourInput).toHaveAttribute("step", "7") - }) - - test("does not allow selection of dates before a minDate as passed", async () => { - // Select yesterday element in calendar by label (formed like "January 31, 2024"), and test if disabled. - const user = userEvent.setup() - const today = new Date() - const yesterday = new Date() - yesterday.setDate(yesterday.getDate() - 1) - const fullMonth = yesterday.toLocaleString("default", { month: "long" }) - const day = yesterday.getDate() - const fullYear = yesterday.getFullYear() - const yesterdayLabel = `${fullMonth} ${day}, ${fullYear}` - render(<DateTimePicker minDate={today} />) - const input = screen.getByRole("textbox") - await user.click(input) - const yesterdayEl = screen.getByLabelText(yesterdayLabel) - expect(yesterdayEl).toHaveClass("flatpickr-disabled") - }) - - test("allows selection of dates after a minDate as passed", async () => { - const user = userEvent.setup() - const today = new Date() - const tomorrow = new Date() - tomorrow.setDate(tomorrow.getDate() + 1) - const fullMonth = tomorrow.toLocaleString("default", { month: "long" }) - const day = tomorrow.getDate() - const fullYear = tomorrow.getFullYear() - const tomorrowLabel = `${fullMonth} ${day}, ${fullYear}` - render(<DateTimePicker minDate={today} />) - const input = screen.getByRole("textbox") - await user.click(input) - const yesterdayEl = screen.getByLabelText(tomorrowLabel) - expect(yesterdayEl).not.toHaveClass("flatpickr-disabled") - }) - - test("does not allow selection of dates after a maxDate as passed", async () => { - const user = userEvent.setup() - const today = new Date() - const tomorrow = new Date() - tomorrow.setDate(tomorrow.getDate() + 1) - const tomorrowFullMonth = tomorrow.toLocaleString("default", { - month: "long", - }) - const tomorrowDay = tomorrow.getDate() - const tomorrowFullYear = tomorrow.getFullYear() - const tomorrowLabel = `${tomorrowFullMonth} ${tomorrowDay}, ${tomorrowFullYear}` - render(<DateTimePicker maxDate={today} />) - const input = screen.getByRole("textbox") - await user.click(input) - const tomorrowEl = screen.getByLabelText(tomorrowLabel) - expect(tomorrowEl).toHaveClass("flatpickr-disabled") - }) - - test("allows selection of dates before a maxDate as passed", async () => { - const user = userEvent.setup() - const today = new Date() - const tomorrow = new Date() - tomorrow.setDate(tomorrow.getDate() + 1) - const todayFullMonth = today.toLocaleString("default", { month: "long" }) - const todayDay = today.getDate() - const todayFullYear = today.getFullYear() - const todayLabel = `${todayFullMonth} ${todayDay}, ${todayFullYear}` - render(<DateTimePicker maxDate={tomorrow} />) - const input = screen.getByRole("textbox") - await user.click(input) - const todayEl = screen.getByLabelText(todayLabel) - expect(todayEl).not.toHaveClass("flatpickr-disabled") - }) - - test("renders a time picker only if configured to do so", async () => { - render(<DateTimePicker enableTime noCalendar />) - expect(document.querySelector(".flatpickr-days")).not.toBeInTheDocument() - expect(document.querySelector("input.flatpickr-hour")).toBeInTheDocument() - expect(document.querySelector("input.flatpickr-minute")).toBeInTheDocument() - }) - - test("executes an onOpen handler when the user clicks the Datepicker and the calendar opens", async () => { - const user = userEvent.setup() - render(<DateTimePicker onOpen={mockOnOpen} />) - const input = screen.getByRole("textbox") - await user.click(input) - expect(mockOnOpen).toHaveBeenCalled() - }) - - test("closes the calendar and executes an onClose handler when the user clicks outside the calendar", async () => { - const user = userEvent.setup() - render(<DateTimePicker onClose={mockOnClose} />) - const input = screen.getByRole("textbox") - await user.click(input) - await user.click(document.body) - expect(mockOnClose).toHaveBeenCalled() - }) - - test("executes an onClear handler when the user clears the DateTimePicker by clicking the clear icon", async () => { - render(<DateTimePicker value="2024-01-31" onClear={mockOnClear} />) - const input = screen.getByRole("textbox") - const clearButton = screen.getByTitle("Clear") - const user = userEvent.setup() - expect(input).toBeInTheDocument() - expect(input).toHaveValue("2024-01-31") - expect(clearButton).toBeInTheDocument() - await user.click(clearButton) - expect(mockOnClear).toHaveBeenCalled() - }) - - test("executes an onChange handler when the user changes the selected date", async () => { - const user = userEvent.setup() - const today = new Date() - const tomorrow = new Date() - tomorrow.setDate(tomorrow.getDate() + 1) - const tomorrowFullMonth = tomorrow.toLocaleString("default", { - month: "long", - }) - const tomorrowDay = tomorrow.getDate() - const tomorrowFullYear = tomorrow.getFullYear() - const tomorrowLabel = `${tomorrowFullMonth} ${tomorrowDay}, ${tomorrowFullYear}` - render(<DateTimePicker value={today} onChange={mockOnChange} />) - const input = screen.getByRole("textbox") - await user.click(input) - const tomorrowEl = screen.getByLabelText(tomorrowLabel) - await user.click(tomorrowEl) - expect(mockOnChange).toHaveBeenCalled() - }) - - test("executes an onYearChange handler when the user changes the year", async () => { - const user = userEvent.setup() - render(<DateTimePicker onYearChange={mockOnYearChange} />) - const input = screen.getByRole("textbox") - await user.click(input) - const yearInputUp = document.querySelector(".numInputWrapper > .arrowUp") - await user.click(yearInputUp) - expect(mockOnYearChange).toHaveBeenCalled() - }) - - test("executes an onMonthChange handler when the user changes the month by clicking an arrow", async () => { - const user = userEvent.setup() - render(<DateTimePicker onMonthChange={mockOnMonthChange} />) - const input = screen.getByRole("textbox") - await user.click(input) - const nextMonthButton = document.querySelector(".flatpickr-next-month") - await user.click(nextMonthButton) - expect(mockOnMonthChange).toHaveBeenCalled() - }) - - test("renders a className as passed", async () => { - render(<DateTimePicker className="my-custom-class" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveClass("my-custom-class") - }) - - test("renders other props as passed", async () => { - render(<DateTimePicker data-lolol="527" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute("data-lolol", "527") - }) -}) diff --git a/libs/juno-ui-components/src/components/DateTimePicker/datetimepicker.scss b/libs/juno-ui-components/src/components/DateTimePicker/datetimepicker.scss deleted file mode 100644 index 089f71a3c..000000000 --- a/libs/juno-ui-components/src/components/DateTimePicker/datetimepicker.scss +++ /dev/null @@ -1,831 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -.theme-dark { - .juno-datetimepicker-input-default { - background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20width%3D'24'%20height%3D'24'%20viewBox%3D'0%200%2024%2024'%20fill%3D'rgb(222%2C%20223%2C%20224)'%3E%3Cpath%20d%3D'M20%203h-1V1h-2v2H7V1H5v2H4c-1.1%200-2%20.9-2%202v16c0%201.1.9%202%202%202h16c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm0%2018H4V8h16v13z'%2F%3E%3C%2Fsvg%3E"); - } - .juno-datetimepicker-input-timepicker { - background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20width%3D'24'%20height%3D'24'%20viewBox%3D'0%200%2024%2024'%20fill%3D'rgb(222%2C%20223%2C%20224)'%3E%3Cpath%20d%3D'M11.99%202C6.47%202%202%206.48%202%2012s4.47%2010%209.99%2010C17.52%2022%2022%2017.52%2022%2012S17.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208z'%2F%3E%3Cpath%20d%3D'M12.5%207H11v6l5.25%203.15.75-1.23-4.5-2.67z'%2F%3E%3C%2Fsvg%3E"); - } -} - -.theme-light { - .juno-datetimepicker-input-default { - background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20width%3D'24'%20height%3D'24'%20viewBox%3D'0%200%2024%2024'%20fill%3D'rgb(64%2C%2064%2C%2064)'%3E%3Cpath%20d%3D'M20%203h-1V1h-2v2H7V1H5v2H4c-1.1%200-2%20.9-2%202v16c0%201.1.9%202%202%202h16c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm0%2018H4V8h16v13z'%2F%3E%3C%2Fsvg%3E"); - } - .juno-datetimepicker-input-timepicker { - background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20width%3D'24'%20height%3D'24'%20viewBox%3D'0%200%2024%2024'%20fill%3D'rgb(64%2C%2064%2C%2064)'%3E%3Cpath%20d%3D'M11.99%202C6.47%202%202%206.48%202%2012s4.47%2010%209.99%2010C17.52%2022%2022%2017.52%2022%2012S17.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208z'%2F%3E%3Cpath%20d%3D'M12.5%207H11v6l5.25%203.15.75-1.23-4.5-2.67z'%2F%3E%3C%2Fsvg%3E"); - } -} - -.flatpickr-calendar { - background: transparent; - color: var(--color-text-default); - opacity: 0; - display: none; - text-align: center; - visibility: hidden; - padding: 0; - -webkit-animation: none; - animation: none; - direction: ltr; - border: 0; - font-size: 0.875rem; - line-height: 1.5rem; - border-radius: 5px; - position: absolute; - width: 307.875px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -ms-touch-action: manipulation; - touch-action: manipulation; - background: var(--color-datepicker-calendar-bg); - // -webkit-box-shadow: 1px 0 0 #20222c, -1px 0 0 #20222c, 0 1px 0 #20222c, 0 -1px 0 #20222c, 0 3px 13px rgba(0,0,0,0.08); - // box-shadow: 1px 0 0 #20222c, -1px 0 0 #20222c, 0 1px 0 #20222c, 0 -1px 0 #20222c, 0 3px 13px rgba(0,0,0,0.08); -} -.flatpickr-calendar.open, -.flatpickr-calendar.inline { - opacity: 1; - max-height: 640px; - visibility: visible; -} -.flatpickr-calendar.open { - display: inline-block; - z-index: 99999; - margin-top: 2px; -} -.flatpickr-calendar.open:not(.inline) { - &[style]:not(.inline) { - top: auto !important; - left: auto !important; - } -} -.flatpickr-calendar.animate.open { - -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); - animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); -} -.flatpickr-calendar.inline { - display: block; - position: relative; - top: 2px; -} -.flatpickr-calendar.static { - position: absolute; - top: calc(100% + 2px); -} -.flatpickr-calendar.static.open { - z-index: 999; - display: block; -} -.flatpickr-calendar.multiMonth - .flatpickr-days - .dayContainer:nth-child(n + 1) - .flatpickr-day.inRange:nth-child(7n + 7) { - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -.flatpickr-calendar.multiMonth - .flatpickr-days - .dayContainer:nth-child(n + 2) - .flatpickr-day.inRange:nth-child(7n + 1) { - -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; - box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; -} -.flatpickr-calendar .hasWeeks .dayContainer, -.flatpickr-calendar .hasTime .dayContainer { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.flatpickr-calendar .hasWeeks .dayContainer { - border-left: 0; -} -.flatpickr-calendar.hasTime .flatpickr-time { - height: 40px; - // border-top: 1px solid #20222c; -} -.flatpickr-calendar.noCalendar.hasTime .flatpickr-time { - height: auto; -} -// .flatpickr-calendar:before, -// .flatpickr-calendar:after { -// position: absolute; -// display: block; -// pointer-events: none; -// border: solid transparent; -// content: ''; -// height: 0; -// width: 0; -// left: 22px; -// } -// .flatpickr-calendar.rightMost:before, -// .flatpickr-calendar.arrowRight:before, -// .flatpickr-calendar.rightMost:after, -// .flatpickr-calendar.arrowRight:after { -// left: auto; -// right: 22px; -// } -// .flatpickr-calendar.arrowCenter:before, -// .flatpickr-calendar.arrowCenter:after { -// left: 50%; -// right: 50%; -// } -// .flatpickr-calendar:before { -// border-width: 5px; -// margin: 0 -5px; -// } -// .flatpickr-calendar:after { -// border-width: 4px; -// margin: 0 -4px; -// } -// .flatpickr-calendar.arrowTop:before, -// .flatpickr-calendar.arrowTop:after { -// bottom: 100%; -// } -// .flatpickr-calendar.arrowTop:before { -// border-bottom-color: #20222c; -// } -// .flatpickr-calendar.arrowTop:after { -// border-bottom-color: #3f4458; -// } -// .flatpickr-calendar.arrowBottom:before, -// .flatpickr-calendar.arrowBottom:after { -// top: 100%; -// } -// .flatpickr-calendar.arrowBottom:before { -// border-top-color: #20222c; -// } -// .flatpickr-calendar.arrowBottom:after { -// border-top-color: #3f4458; -//} -.flatpickr-calendar:focus { - outline: 0; -} -.flatpickr-wrapper { - position: relative; - display: inline-block; -} -.flatpickr-months { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} -.flatpickr-months .flatpickr-month { - background: var(--color-datepicker-calendar-bg); - color: #fff; - fill: #fff; - height: 34px; - line-height: 1; - text-align: center; - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - overflow: hidden; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} -.flatpickr-months .flatpickr-prev-month, -.flatpickr-months .flatpickr-next-month { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - text-decoration: none; - cursor: pointer; - position: absolute; - top: 0; - height: 34px; - padding: 10px; - z-index: 3; - color: #fff; - fill: #fff; -} -.flatpickr-months .flatpickr-prev-month.flatpickr-disabled, -.flatpickr-months .flatpickr-next-month.flatpickr-disabled { - display: none; -} -.flatpickr-months .flatpickr-prev-month i, -.flatpickr-months .flatpickr-next-month i { - position: relative; -} -.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month, -.flatpickr-months .flatpickr-next-month.flatpickr-prev-month { - /* - /*rtl:begin:ignore*/ - /* - */ - left: 0; - /* - /*rtl:end:ignore*/ - /* - */ -} -/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month.flatpickr-next-month, -.flatpickr-months .flatpickr-next-month.flatpickr-next-month { - /* - /*rtl:begin:ignore*/ - /* - */ - right: 0; - /* - /*rtl:end:ignore*/ - /* - */ -} -/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month:hover, -.flatpickr-months .flatpickr-next-month:hover { - color: #eee; -} -.flatpickr-months .flatpickr-prev-month:hover svg, -.flatpickr-months .flatpickr-next-month:hover svg { - fill: #f64747; -} -.flatpickr-months .flatpickr-prev-month svg, -.flatpickr-months .flatpickr-next-month svg { - width: 14px; - height: 14px; -} -.flatpickr-months .flatpickr-prev-month svg path, -.flatpickr-months .flatpickr-next-month svg path { - -webkit-transition: fill 0.1s; - transition: fill 0.1s; - fill: inherit; -} -.numInputWrapper { - position: relative; - height: auto; -} -.numInputWrapper input, -.numInputWrapper span { - display: inline-block; -} -.numInputWrapper input { - width: 100%; -} -.numInputWrapper input::-ms-clear { - display: none; -} -.numInputWrapper input::-webkit-outer-spin-button, -.numInputWrapper input::-webkit-inner-spin-button { - margin: 0; - -webkit-appearance: none; -} -.numInputWrapper span { - position: absolute; - right: 0; - width: 14px; - padding: 0 4px 0 2px; - height: 50%; - line-height: 50%; - opacity: 0; - cursor: pointer; - border: 1px solid rgba(255, 255, 255, 0.15); - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.numInputWrapper span:hover { - background: rgba(192, 187, 167, 0.1); -} -.numInputWrapper span:active { - background: rgba(192, 187, 167, 0.2); -} -.numInputWrapper span:after { - display: block; - content: ""; - position: absolute; -} -.numInputWrapper span.arrowUp { - top: 0; - border-bottom: 0; -} -.numInputWrapper span.arrowUp:after { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-bottom: 4px solid rgba(255, 255, 255, 0.6); - top: 26%; -} -.numInputWrapper span.arrowDown { - top: 50%; -} -.numInputWrapper span.arrowDown:after { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid rgba(255, 255, 255, 0.6); - top: 40%; -} -.numInputWrapper span svg { - width: inherit; - height: auto; -} -.numInputWrapper span svg path { - fill: rgba(255, 255, 255, 0.5); -} -.numInputWrapper:hover { - background: rgba(192, 187, 167, 0.05); -} -.numInputWrapper:hover span { - opacity: 1; -} -.flatpickr-current-month { - font-size: 135%; - line-height: inherit; - font-weight: 300; - color: inherit; - position: absolute; - width: 75%; - left: 12.5%; - padding: 7.48px 0 0 0; - line-height: 1; - height: 34px; - display: inline-block; - text-align: center; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); -} -.flatpickr-current-month span.cur-month { - font-family: inherit; - font-weight: 700; - color: inherit; - display: inline-block; - margin-left: 0.5ch; - padding: 0; -} -.flatpickr-current-month span.cur-month:hover { - background: rgba(192, 187, 167, 0.05); -} -.flatpickr-current-month .numInputWrapper { - width: 6ch; - width: 7ch\0; - display: inline-block; -} -.flatpickr-current-month .numInputWrapper span.arrowUp:after { - border-bottom-color: #fff; -} -.flatpickr-current-month .numInputWrapper span.arrowDown:after { - border-top-color: #fff; -} -.flatpickr-current-month input.cur-year { - background: transparent; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: inherit; - cursor: text; - padding: 0 0 0 0.5ch; - margin: 0; - display: inline-block; - font-size: inherit; - font-family: inherit; - font-weight: 300; - line-height: inherit; - height: auto; - border: 0; - border-radius: 0; - vertical-align: initial; - -webkit-appearance: textfield; - -moz-appearance: textfield; - appearance: textfield; -} -.flatpickr-current-month input.cur-year:focus { - outline: 0; -} -.flatpickr-current-month input.cur-year[disabled], -.flatpickr-current-month input.cur-year[disabled]:hover { - font-size: 100%; - color: rgba(255, 255, 255, 0.5); - background: transparent; - pointer-events: none; -} -.flatpickr-current-month .flatpickr-monthDropdown-months { - appearance: menulist; - background: var(--color-datepicker-calendar-bg); - border: none; - border-radius: 0; - box-sizing: border-box; - cursor: pointer; - font-size: inherit; - font-family: inherit; - font-weight: 300; - height: auto; - line-height: inherit; - margin: -1px 0 0 0; - outline: none; - padding: 0 0 0 0.5ch; - position: relative; - vertical-align: initial; - -webkit-box-sizing: border-box; - -webkit-appearance: menulist; - -moz-appearance: menulist; - width: auto; -} -.flatpickr-current-month .flatpickr-monthDropdown-months:focus, -.flatpickr-current-month .flatpickr-monthDropdown-months:active { - outline: none; -} -.flatpickr-current-month .flatpickr-monthDropdown-months:hover { - background: rgba(192, 187, 167, 0.05); -} -.flatpickr-current-month - .flatpickr-monthDropdown-months - .flatpickr-monthDropdown-month { - background-color: #3f4458; - outline: none; - padding: 0; -} -.flatpickr-weekdays { - background: transparent; - text-align: center; - overflow: hidden; - width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - height: 28px; -} -.flatpickr-weekdays .flatpickr-weekdaycontainer { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} -span.flatpickr-weekday { - cursor: default; - font-size: 90%; - // background: #3f4458; - color: var(--color-text-default); - line-height: 1; - margin: 0; - text-align: center; - display: block; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - font-weight: bolder; -} -.dayContainer, -.flatpickr-weeks { - padding: 1px 0 0 0; -} -.flatpickr-days { - position: relative; - overflow: hidden; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - width: 307.875px; -} -.flatpickr-days:focus { - outline: 0; -} -.dayContainer { - padding: 0; - outline: 0; - text-align: left; - width: 307.875px; - min-width: 307.875px; - max-width: 307.875px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - display: -ms-flexbox; - display: -webkit-box; - display: -webkit-flex; - display: flex; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-wrap: wrap; - -ms-flex-pack: justify; - -webkit-justify-content: space-around; - justify-content: space-around; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); - opacity: 1; -} -.dayContainer + .dayContainer { - -webkit-box-shadow: -1px 0 0 #20222c; - box-shadow: -1px 0 0 #20222c; -} -.flatpickr-day { - background: none; - border: 1px solid transparent; - border-radius: 150px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: var(--color-text-default); - cursor: pointer; - font-weight: 400; - width: 14.2857143%; - -webkit-flex-basis: 14.2857143%; - -ms-flex-preferred-size: 14.2857143%; - flex-basis: 14.2857143%; - max-width: 39px; - height: 39px; - line-height: 39px; - margin: 0; - display: inline-block; - position: relative; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; -} -.flatpickr-day.inRange, -.flatpickr-day.prevMonthDay.inRange, -.flatpickr-day.nextMonthDay.inRange, -.flatpickr-day.today.inRange, -.flatpickr-day.prevMonthDay.today.inRange, -.flatpickr-day.nextMonthDay.today.inRange, -.flatpickr-day:hover, -.flatpickr-day.prevMonthDay:hover, -.flatpickr-day.nextMonthDay:hover, -.flatpickr-day:focus, -.flatpickr-day.prevMonthDay:focus, -.flatpickr-day.nextMonthDay:focus { - cursor: pointer; - outline: 0; - background: #646c8c; - border-color: #646c8c; -} -.flatpickr-day.today { - border-color: var(--color-text-default); -} -.flatpickr-day.today:hover, -.flatpickr-day.today:focus { - border-color: var(--color-text-default); - background: #eee; - color: var(--color-text-default); -} -.flatpickr-day.selected, -.flatpickr-day.startRange, -.flatpickr-day.endRange, -.flatpickr-day.selected.inRange, -.flatpickr-day.startRange.inRange, -.flatpickr-day.endRange.inRange, -.flatpickr-day.selected:focus, -.flatpickr-day.startRange:focus, -.flatpickr-day.endRange:focus, -.flatpickr-day.selected:hover, -.flatpickr-day.startRange:hover, -.flatpickr-day.endRange:hover, -.flatpickr-day.selected.prevMonthDay, -.flatpickr-day.startRange.prevMonthDay, -.flatpickr-day.endRange.prevMonthDay, -.flatpickr-day.selected.nextMonthDay, -.flatpickr-day.startRange.nextMonthDay, -.flatpickr-day.endRange.nextMonthDay { - background: var(--color-accent); - -webkit-box-shadow: none; - box-shadow: none; - color: #fff; - border-color: var(--color-accent); -} -.flatpickr-day.selected.startRange, -.flatpickr-day.startRange.startRange, -.flatpickr-day.endRange.startRange { - border-radius: 50px 0 0 50px; -} -.flatpickr-day.selected.endRange, -.flatpickr-day.startRange.endRange, -.flatpickr-day.endRange.endRange { - border-radius: 0 50px 50px 0; -} -.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n + 1)), -.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n + 1)), -.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n + 1)) { - -webkit-box-shadow: -10px 0 0 #80cbc4; - box-shadow: -10px 0 0 #80cbc4; -} -.flatpickr-day.selected.startRange.endRange, -.flatpickr-day.startRange.startRange.endRange, -.flatpickr-day.endRange.startRange.endRange { - border-radius: 50px; -} -.flatpickr-day.inRange { - border-radius: 0; - -webkit-box-shadow: -5px 0 0 #646c8c, 5px 0 0 #646c8c; - box-shadow: -5px 0 0 #646c8c, 5px 0 0 #646c8c; -} -.flatpickr-day.flatpickr-disabled, -.flatpickr-day.flatpickr-disabled:hover, -.flatpickr-day.prevMonthDay, -.flatpickr-day.nextMonthDay, -.flatpickr-day.notAllowed, -.flatpickr-day.notAllowed.prevMonthDay, -.flatpickr-day.notAllowed.nextMonthDay { - color: rgba(255, 255, 255, 0.3); - background: transparent; - border-color: transparent; - cursor: default; -} -.flatpickr-day.flatpickr-disabled, -.flatpickr-day.flatpickr-disabled:hover { - cursor: not-allowed; - color: rgba(255, 255, 255, 0.1); -} -.flatpickr-day.week.selected { - border-radius: 0; - -webkit-box-shadow: -5px 0 0 #80cbc4, 5px 0 0 #80cbc4; - box-shadow: -5px 0 0 #80cbc4, 5px 0 0 #80cbc4; -} -.flatpickr-day.hidden { - visibility: hidden; -} -.rangeMode .flatpickr-day { - margin-top: 1px; -} -.flatpickr-weekwrapper { - float: left; -} -.flatpickr-weekwrapper .flatpickr-weeks { - padding: 0 12px; - -webkit-box-shadow: 1px 0 0 #20222c; - box-shadow: 1px 0 0 #20222c; -} -.flatpickr-weekwrapper .flatpickr-weekday { - float: none; - width: 100%; - line-height: 28px; -} -.flatpickr-weekwrapper span.flatpickr-day, -.flatpickr-weekwrapper span.flatpickr-day:hover { - display: block; - width: 100%; - max-width: none; - color: rgba(255, 255, 255, 0.3); - background: transparent; - cursor: default; - border: none; -} -.flatpickr-innerContainer { - display: block; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; -} -.flatpickr-rContainer { - display: inline-block; - padding: 0; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.flatpickr-time { - text-align: center; - outline: 0; - display: block; - height: 0; - line-height: 40px; - max-height: 40px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} -.flatpickr-time:after { - content: ""; - display: table; - clear: both; -} -.flatpickr-time .numInputWrapper { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - width: 40%; - height: 40px; - float: left; -} -.flatpickr-time .numInputWrapper span.arrowUp:after { - border-bottom-color: rgba(255, 255, 255, 0.95); -} -.flatpickr-time .numInputWrapper span.arrowDown:after { - border-top-color: rgba(255, 255, 255, 0.95); -} -.flatpickr-time.hasSeconds .numInputWrapper { - width: 26%; -} -.flatpickr-time.time24hr .numInputWrapper { - width: 49%; -} -.flatpickr-time input { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - border: 0; - border-radius: 0; - text-align: center; - margin: 0; - padding: 0; - height: inherit; - line-height: inherit; - color: var(--color-text-default); - font-size: 14px; - position: relative; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: textfield; - -moz-appearance: textfield; - appearance: textfield; -} -.flatpickr-time input.flatpickr-hour { - font-weight: bold; -} -.flatpickr-time input.flatpickr-minute, -.flatpickr-time input.flatpickr-second { - font-weight: 400; -} -.flatpickr-time input:focus { - outline: 0; - border: 0; -} -.flatpickr-time .flatpickr-time-separator, -.flatpickr-time .flatpickr-am-pm { - height: inherit; - float: left; - line-height: inherit; - color: rgba(255, 255, 255, 0.95); - font-weight: bold; - width: 2%; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; -} -.flatpickr-time .flatpickr-am-pm { - outline: 0; - width: 18%; - cursor: pointer; - text-align: center; - font-weight: 400; -} -.flatpickr-time input:hover, -.flatpickr-time .flatpickr-am-pm:hover, -.flatpickr-time input:focus, -.flatpickr-time .flatpickr-am-pm:focus { - background: #6a7395; -} -.flatpickr-input[readonly] { - cursor: pointer; -} -@-webkit-keyframes fpFadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -@keyframes fpFadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} diff --git a/libs/juno-ui-components/src/components/DateTimePicker/index.js b/libs/juno-ui-components/src/components/DateTimePicker/index.js deleted file mode 100644 index 8b93e8fd1..000000000 --- a/libs/juno-ui-components/src/components/DateTimePicker/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { DateTimePicker } from "./DateTimePicker.component.js" diff --git a/libs/juno-ui-components/src/components/FilterInput/FilterInput.component.js b/libs/juno-ui-components/src/components/FilterInput/FilterInput.component.js deleted file mode 100644 index b451b6d2f..000000000 --- a/libs/juno-ui-components/src/components/FilterInput/FilterInput.component.js +++ /dev/null @@ -1,232 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from "react" -import PropTypes from "prop-types" -import { NativeSelect } from "../NativeSelect/NativeSelect.component" -import { NativeSelectOption } from "../NativeSelectOption/NativeSelectOption.component" -import { TextInput } from "../TextInput/TextInput.component" -import { Icon } from "../Icon/Icon.component" - -const wrapperStyles = ` - jn-flex - jn-relative - jn-p-px - jn-border - jn-rounded - jn-bg-theme-filter-input -` - -const defaultWrapperStyles = ` - jn-border-theme-filter-input -` - -const errorWrapperStyles = ` - jn-border-theme-error -` - -const selectStyles = ` - jn-rounded-r-none -` - -const textInputStyles = ` - jn-grow - jn-rounded-l-none - jn-pr-16 - !jn-bg-theme-filter-input-textinput - focus:jn-z-40 -` - -const iconWrapperStyles = ` - jn-absolute - jn-flex - jn-right-2 - jn-top-1.5 - jn-z-50 -` - -/** --- Deprectated. For new implementations, use InputGroup and combine/compose input components as you need them. -- -A special Input to select key and value of a filter. -*/ -export const FilterInput = ({ - keyLabel, - options, - valueLabel, - className, - selectedFilterKey, - onSelectedFilterKeyChange, - filterValue, - valuePlaceholder, - onFilterValueChange, - onClear, - onKeyPress, - onFilter, - loading, - error, - ...props -}) => { - const [selectedFilter, setSelectedFilter] = useState(selectedFilterKey) - const [value, setValue] = useState(filterValue) - const [isLoading, setIsLoading] = useState(options.length < 1 || loading) - const [hasError, setHasError] = useState(error) - - useEffect(() => { - setValue(filterValue) - }, [filterValue]) - - useEffect(() => { - setSelectedFilter(selectedFilterKey) - }, [selectedFilterKey]) - - // Reset the (text input) value whenever the component is loading: - useEffect(() => { - if (options.length < 1 || loading) { - setIsLoading(true) - setValue("") - } else { - setIsLoading(false) - } - }, [options, loading]) - - useEffect(() => { - setHasError(error) - }, [error]) - - // Reset the (text input) value whenever the selected Filter key changes: - const handleSelectedFilterChange = (event) => { - setSelectedFilter(event.target.value) - setValue("") - onSelectedFilterKeyChange && onSelectedFilterKeyChange(event) - } - - const handleFilterValueChange = (event) => { - setValue(event.target.value) - onFilterValueChange && onFilterValueChange(event) - } - - const handleClearClick = (event) => { - setValue("") - onClear && onClear(event) - } - - const handleFilterClick = () => { - onFilter && onFilter(value) - } - - const handleKeyPress = (event) => { - if (event.key === "Enter" && onFilter) { - onFilter && onFilter(value) - } - onKeyPress && onKeyPress(event) - } - - return ( - <div - className={`juno-filter-input ${wrapperStyles} ${ - isLoading ? "juno-filter-input-loading " : "" - } ${hasError ? "juno-filter-input-error " : ""} ${ - hasError ? errorWrapperStyles : defaultWrapperStyles - } ${className}`} - {...props} - > - <div> - <NativeSelect - className={`juno-filter-input-select ${selectStyles}`} - aria-label={keyLabel} - value={selectedFilter} - onChange={handleSelectedFilterChange} - loading={isLoading} - error={hasError} - > - // First "Placeholder" option: - <NativeSelectOption label={keyLabel || "Select Filter"} value="" /> - // Options representing actual filter key values: - {options.map((option, i) => ( - <NativeSelectOption - label={option.label} - value={option.key} - key={`${i}`} - {...option} - /> - ))} - </NativeSelect> - </div> - <TextInput - value={value} - className={`${textInputStyles}`} - aria-label={valueLabel} - onChange={handleFilterValueChange} - onKeyPress={handleKeyPress} - disabled={isLoading || hasError} - placeholder={isLoading ? "Loading Filter Options…" : valuePlaceholder} - /> - <div className={`${iconWrapperStyles}`}> - {value && value.length ? ( - <Icon - icon="close" - title="Clear" - size="18" - className={`jn-mr-2`} - onClick={handleClearClick} - /> - ) : null} - <Icon - icon="filterAlt" - title="Filter" - disabled={isLoading || hasError} - onClick={handleFilterClick} - /> - </div> - </div> - ) -} - -FilterInput.propTypes = { - /** The label to display on the Filter Key Select */ - keyLabel: PropTypes.string, - /** The options for the Filter Select: `[{Label: "Filter 1", key: "filter-1"}, {...}]` - The array MUST have a length in order for the component to render. - */ - options: PropTypes.arrayOf(PropTypes.object), - /** The key of the current filter */ - selectedFilterKey: PropTypes.string, - /** Pass a handler to be executed when the filter key changes */ - onSelectedFilterKeyChange: PropTypes.func, - /** The aria-label of the Filter Value Text Input */ - valueLabel: PropTypes.string, // TODO -> valueLabel - /** The current value of the Filter Input */ - filterValue: PropTypes.string, - /** Optional: pass a placeholder for the filter value text input */ - valuePlaceholder: PropTypes.string, - /** Pass a handler to be executed when the filter value changes */ - onFilterValueChange: PropTypes.func, - /** Pass a handler to execute when the Filter Value Clear button is clicked */ - onClear: PropTypes.func, - /** Whether the filter is currently loading */ - loading: PropTypes.bool, - /** Pass a className to the wrapping element */ - className: PropTypes.string, - /** Pass a handler to execute when the Filter Value Filter button is clicked */ - onFilter: PropTypes.func, - /** Whether the FilterInput has an error */ - error: PropTypes.bool, -} - -FilterInput.defaultProps = { - keyLabel: "Select Filter", - options: [], - selectedFilterKey: "", - onSelectedFilterKeyChange: undefined, - valueLabel: "Filter by Value", - filterValue: "", - valuePlaceholder: "", - onFilterValueChange: undefined, - onClear: undefined, - onFilter: undefined, - loading: false, - className: "", - error: false, -} diff --git a/libs/juno-ui-components/src/components/FilterInput/FilterInput.stories.js b/libs/juno-ui-components/src/components/FilterInput/FilterInput.stories.js deleted file mode 100644 index 462de25f3..000000000 --- a/libs/juno-ui-components/src/components/FilterInput/FilterInput.stories.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { FilterInput } from './index.js'; - -export default { - title: 'Deprecated/Filter/FilterInput', - component: FilterInput, - argTypes: {}, -}; - -export const Default = { - args: { - valuePlaceholder: 'Enter a value', - options: [ - { label: 'Filter 1', key: 'filter-1' }, - { label: 'Filter 2', key: 'filter-2', disabled: true }, - { label: 'Filter 3', key: 'filter-3' }, - ], - }, -}; - -export const Preselected = { - args: { - keyLabel: 'Select a fancy Filter', - selectedFilterKey: 'filter-2', - options: [ - { label: 'Filter 1', key: 'filter-1' }, - { label: 'Filter 2', key: 'filter-2' }, - { label: 'Filter 3', key: 'filter-3' }, - ], - }, -}; - -export const Loading = { - args: { - options: [], - loading: true, - }, -}; - -export const WithError = { - args: { - options: [], - error: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/FilterInput/FilterInput.test.js b/libs/juno-ui-components/src/components/FilterInput/FilterInput.test.js deleted file mode 100644 index 68cca4ea4..000000000 --- a/libs/juno-ui-components/src/components/FilterInput/FilterInput.test.js +++ /dev/null @@ -1,281 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen, fireEvent } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { FilterInput } from "./index" - -describe("FilterInput", () => { - test("renders a FilterInput", async () => { - render(<FilterInput data-testid="filter-input" />) - expect(screen.getByTestId("filter-input")).toBeInTheDocument() - expect(screen.getByTestId("filter-input")).toHaveClass("juno-filter-input") - }) - - test("renders a FilterInput with a Select and a TextInput", async () => { - render(<FilterInput />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toBeInTheDocument() - }) - - test("renders a Select with an aria-label as passed", async () => { - render(<FilterInput keyLabel={"my select"} />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveAttribute( - "aria-label", - "my select" - ) - }) - - test("renders a Select with a default option selected if no selectedFilterKey is passed", async () => { - render(<FilterInput />) - expect( - screen.getByRole("option", { name: "Select Filter" }) - ).toBeInTheDocument() - expect(screen.getByRole("option", { name: "Select Filter" }).selected).toBe( - true - ) - }) - - test("renders a Select with a default option as passed", async () => { - render(<FilterInput keyLabel="My Custom Key Label" />) - expect( - screen.getByRole("option", { name: "My Custom Key Label" }) - ).toBeInTheDocument() - expect( - screen.getByRole("option", { name: "My Custom Key Label" }).selected - ).toBe(true) - }) - - test("renders a select with options and values as passed", async () => { - render( - <FilterInput - options={[ - { label: "option 1", value: "option-1" }, - { label: "option 2", value: "option-2" }, - ]} - /> - ) - expect(screen.getByRole("option", { name: "option 1" })).toHaveValue( - "option-1" - ) - expect(screen.getByRole("option", { name: "option 2" })).toHaveValue( - "option-2" - ) - }) - - test("renders a select with arbitrary props for options", async () => { - render( - <FilterInput - options={[ - { label: "option 1", value: "option-1", disabled: true }, - { label: "option 2", value: "option-2" }, - ]} - /> - ) - expect(screen.getByRole("option", { name: "option 1" })).toHaveValue( - "option-1" - ) - expect(screen.getByRole("option", { name: "option 1" })).toBeDisabled() - }) - - test("renders a text input with an aria-label as passed", async () => { - render(<FilterInput valueLabel={"my value input"} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute( - "aria-label", - "my value input" - ) - }) - - test("renders a text input with a placeholder as passed", async () => { - render( - <FilterInput - options={[ - { label: "option 1", value: "option-1", disabled: true }, - { label: "option 2", value: "option-2" }, - ]} - valuePlaceholder={"my value placeholder"} - /> - ) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute( - "placeholder", - "my value placeholder" - ) - }) - - test("renders a selected filter as passed", async () => { - const filterOptions = [ - { label: "OS", value: "byOs" }, - { label: "Region", value: "byRegion" }, - ] - render(<FilterInput options={filterOptions} selectedFilterKey="byRegion" />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("option", { name: "Region" }).selected).toBe(true) - }) - - test("allows users to change the filter key", async () => { - const filters = [ - { label: "OS", value: "byOs" }, - { label: "Region", value: "byRegion" }, - { label: "Time Zone", value: "byTimezone" }, - ] - render(<FilterInput options={filters} />) - await userEvent.selectOptions( - screen.getByRole("combobox"), - screen.getByRole("option", { name: "Time Zone" }) - ) - expect(screen.getByRole("option", { name: "Time Zone" }).selected).toBe( - true - ) - }) - - test("should reset the filter value when the selected filter key changes", async () => { - const filters = [ - { label: "OS", value: "byOs" }, - { label: "Region", value: "byRegion" }, - { label: "Time Zone", value: "byTimezone" }, - ] - render(<FilterInput options={filters} filterValue="MacOS" />) - expect(screen.getByRole("textbox")).toHaveValue("MacOS") - await userEvent.selectOptions( - screen.getByRole("combobox"), - screen.getByRole("option", { name: "Region" }) - ) - expect(screen.getByRole("textbox")).toHaveValue("") - }) - - test("executes a handler as passed when selected filter key changes", async () => { - const handleSelectedFilterChange = jest.fn() - const filters = [ - { label: "OS", key: "byOs" }, - { label: "Region", key: "byRegion" }, - { label: "Time Zone", key: "byTimezone" }, - ] - render( - <FilterInput - options={filters} - selectedFilterKey="byRegion" - onSelectedFilterKeyChange={handleSelectedFilterChange} - /> - ) - expect(screen.getByRole("option", { name: "Region" }).selected).toBe(true) - await userEvent.selectOptions( - screen.getByRole("combobox"), - screen.getByRole("option", { name: "OS" }) - ) - expect(screen.getByRole("option", { name: "OS" }).selected).toBe(true) - expect(handleSelectedFilterChange).toHaveBeenCalledTimes(1) - }) - - test("renders a FilterInput with a value as passed", async () => { - const opts = [{ label: "something", key: "something" }] - render(<FilterInput options={opts} filterValue="123abc" />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("123abc") - }) - - test("renders a Close button when the Input has a value", async () => { - const opts = [{ label: "something", key: "something" }] - render(<FilterInput options={opts} filterValue="123" />) - expect(screen.getByTitle("Clear")).toBeInTheDocument() - }) - - test("executes a handler as passed when the input value changes", async () => { - const opts = [{ label: "A Filter", key: "a-filter" }] - const handleFilterValueChange = jest.fn() - render( - <FilterInput - options={opts} - onFilterValueChange={handleFilterValueChange} - /> - ) - await userEvent.type(screen.getByRole("textbox"), "987") - expect(handleFilterValueChange).toHaveBeenCalledTimes(3) - }) - - test("empties the field when Clear button is clicked", async () => { - const opts = [{ label: "something", key: "something" }] - render(<FilterInput options={opts} filterValue="abc" />) - expect(screen.getByTitle("Clear")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("abc") - await userEvent.click(screen.getByTitle("Clear")) - expect(screen.getByRole("textbox")).toHaveValue("") - }) - - test("executes onFilter handler as passed when Filter icon is clicked and return the text input value", async () => { - const handleFilter = jest.fn() - const opts = [{ label: "A Filter", key: "a-filter" }] - render( - <FilterInput options={opts} filterValue="abc" onFilter={handleFilter} /> - ) - await userEvent.click(screen.getByTitle("Filter")) - expect(handleFilter).toHaveBeenCalledTimes(1) - expect(handleFilter).toHaveBeenCalledWith("abc") - }) - - test("executes onFilter handler as passed when the input has focus and the user presses enter and return the text input value", async () => { - const handleFilter = jest.fn() - const opts = [{ label: "A Filter", key: "a-filter" }] - render( - <FilterInput options={opts} filterValue="abc" onFilter={handleFilter} /> - ) - await userEvent.type(screen.getByRole("textbox"), "{enter}") - expect(handleFilter).toHaveBeenCalledTimes(1) - expect(handleFilter).toHaveBeenCalledWith("abc") - }) - - test("renders loading filter input as passed", async () => { - render(<FilterInput loading />) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByRole("textbox")).toBeDisabled() - expect(screen.getByRole("progressbar")).toBeInTheDocument() - }) - - test("renders a loading filter if passed options are present but empty", async () => { - const filters = [] - render(<FilterInput options={filters} />) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByRole("textbox")).toBeDisabled() - expect(screen.getByRole("progressbar")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeDisabled() - }) - - test("renders loading filter as passed even if options are present and not empty", async () => { - const opts = [{ label: "A Filter", key: "a-filter" }] - render(<FilterInput options={opts} loading />) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByRole("textbox")).toBeDisabled() - expect(screen.getByRole("progressbar")).toBeInTheDocument() - }) - - test("renders a filter input with an error as passed", async () => { - const opts = [{ label: "A Filter", key: "a-filter" }] - render(<FilterInput options={opts} error />) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByRole("textbox")).toBeDisabled() - expect(screen.getByTitle("Error")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeDisabled() - }) - - test("renders a custom class to the row as passed", async () => { - render( - <FilterInput data-testid="filter-input" className="my-custom-class" /> - ) - expect(screen.getByTestId("filter-input")).toBeInTheDocument() - expect(screen.getByTestId("filter-input")).toHaveClass("my-custom-class") - }) - - test("renders all props as passed", async () => { - render(<FilterInput data-testid="filter-input" data-lolol="some-prop" />) - expect(screen.getByTestId("filter-input")).toBeInTheDocument() - expect(screen.getByTestId("filter-input")).toHaveAttribute( - "data-lolol", - "some-prop" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/FilterInput/index.js b/libs/juno-ui-components/src/components/FilterInput/index.js deleted file mode 100644 index bcf866f65..000000000 --- a/libs/juno-ui-components/src/components/FilterInput/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { FilterInput } from "./FilterInput.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FilterPill/FilterPill.component.js b/libs/juno-ui-components/src/components/FilterPill/FilterPill.component.js deleted file mode 100644 index 3fbb74e5f..000000000 --- a/libs/juno-ui-components/src/components/FilterPill/FilterPill.component.js +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" -import { Icon } from "../Icon/Icon.component.js" - -const filterpillStyles = ` - jn-inline-flex - jn-basis-auto - jn-shrink - jn-items-center - jn-flex-nowrap - jn-text-xs - jn-p-px - jn-border - jn-rounded - jn-mr-2 - jn-border-theme-filter-pill - last:jn-mr-0 -` - -const filterkeyStyles = ` - jn-bg-theme-filter-pill-key - jn-px-1 - jn-py-0.5 - jn-rounded-sm - jn-text-theme-high - jn-inline-block -` - -const filtervalueStyles = ` - jn-px-1 - jn-py-0.5 - jn-text-theme-high - jn-inline-block -` - -/** --- Deprecated. For new implementations, use Pill instead.--\n -A Pill to represent Key and Value of a filter. Can be closed to un-apply the filter represented. -Mostly to be used inside a Filters component in conjunction with FilterInput. */ -export const FilterPill = ({ - uid, - filterKey, - filterKeyLabel, - filterValue, - filterValueLabel, - onClose, - className, - ...props -}) => { - const handleCloseClick = () => { - onClose && onClose(uid || filterKey) - } - - return ( - <div - className={`juno-filterpill ${filterpillStyles} ${className}`} - {...props} - > - <span className={`${filterkeyStyles}`}> - {filterKeyLabel || filterKey} - </span> - <span className={`${filtervalueStyles}`}> - {filterValueLabel || filterValue} - </span> - <Icon icon="close" size="18" onClick={handleCloseClick} /> - </div> - ) -} - -FilterPill.propTypes = { - /** The unique identifier of the pill. Returned by the onClose callback */ - uid: PropTypes.string, - /** The key of the filter the pill represents. Returned by the onClose callback if uid undefined */ - filterKey: PropTypes.string.isRequired, - /** The visible label to describe the filter key. If not set filterKey is used */ - filterKeyLabel: PropTypes.string, - /** The value of filter the pill represents */ - filterValue: PropTypes.string.isRequired, - /** The visible label to describe the filter value. If not set filterValue is used */ - filterValueLabel: PropTypes.string, - /** add custom classNames */ - className: PropTypes.string, - /** Pass a handler to be executed when closing the FilterPill */ - onClose: PropTypes.func, -} - -FilterPill.defaultProps = { - uid: "", - filterKey: "", - filterKeyLabel: "", - filterValue: "", - filterValueLabel: "", - onClose: undefined, - className: "", -} diff --git a/libs/juno-ui-components/src/components/FilterPill/FilterPill.stories.js b/libs/juno-ui-components/src/components/FilterPill/FilterPill.stories.js deleted file mode 100644 index 32c91be24..000000000 --- a/libs/juno-ui-components/src/components/FilterPill/FilterPill.stories.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { FilterPill } from './index.js'; - -export default { - title: 'Deprecated/Filter/FilterPill', - component: FilterPill, - argTypes: {}, -}; - -export const Default = { - args: { - filterKey: 'os', - filterKeyLabel: 'OS', - filterValue: 'mac_os', - filterValueLabel: 'Mac OS', - }, -}; diff --git a/libs/juno-ui-components/src/components/FilterPill/FilterPill.test.js b/libs/juno-ui-components/src/components/FilterPill/FilterPill.test.js deleted file mode 100644 index d33543200..000000000 --- a/libs/juno-ui-components/src/components/FilterPill/FilterPill.test.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { FilterPill } from "./index" - -describe("FilterPill", () => { - test("renders a FilterPill", async () => { - render( - <FilterPill - data-testid="my-filterpill" - filterKey="TheRequiredKey" - filterValue="TheRequiredValue" - /> - ) - expect(screen.getByTestId("my-filterpill")).toBeInTheDocument() - expect(screen.getByTestId("my-filterpill")).toHaveClass("juno-filterpill") - }) - - test("renders a filter key label as passed", async () => { - render( - <FilterPill - filterKeyLabel="My FilterPill Key" - filterKey="TheRequiredKey" - filterValue="TheRequiredValue" - /> - ) - expect(screen.getByText("My FilterPill Key")).toBeInTheDocument() - }) - - test("renders a filter key if filter key label missing", async () => { - render( - <FilterPill - filterKey="my_filterPill_key" - filterValue="TheRequiredValue" - /> - ) - expect(screen.getByText("my_filterPill_key")).toBeInTheDocument() - }) - - test("renders nothing if filter key label not set", async () => { - // the attribute filterKey and filterValue are required keep them empty to test render nothing - render(<FilterPill data-testid="23" filterKey="" filterValue="" />) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveTextContent("") - }) - - test("renders a filter value label as passed", async () => { - render( - <FilterPill - filterValue="TheRequiredValue" - filterValueLabel="My FilterPill Value" - filterKey="TheRequiredKey" - /> - ) - expect(screen.getByText("My FilterPill Value")).toBeInTheDocument() - }) - - test("renders a filter value if value label missing", async () => { - render( - <FilterPill - filterKey="TheRequiredKey" - filterValue="my_filterPill_value" - /> - ) - expect(screen.getByText("my_filterPill_value")).toBeInTheDocument() - }) - - test("renders nothing if filter value or value label not given", async () => { - // the attribute filterKey and filterValue are required keep them empty to test render nothing - render(<FilterPill data-testid="23" filterKey="" filterValue="" />) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveTextContent("") - }) - - test("an onClose handler is called as passed and returns the uid", () => { - const handleClose = jest.fn() - render( - <FilterPill - uid="uidAbc" - filterKey="TheRequiredKey" - filterValue="TheRequiredValue" - onClose={handleClose} - /> - ) - screen.getByRole("button").click() - expect(handleClose).toHaveBeenCalledTimes(1) - expect(handleClose).toHaveBeenCalledWith("uidAbc") - }) - - test("an onClose handler is called as passed and returns the filterKey if uid missing", () => { - const handleClose = jest.fn() - render( - <FilterPill - filterKey="abc" - filterValue="TheRequiredValue" - onClose={handleClose} - /> - ) - screen.getByRole("button").click() - expect(handleClose).toHaveBeenCalledTimes(1) - expect(handleClose).toHaveBeenCalledWith("abc") - }) - - test("renders a custom className", async () => { - render( - <FilterPill - data-testid="my-filterpill" - filterKey="TheRequiredKey" - filterValue="TheRequiredValue" - className="my-custom-class" - /> - ) - expect(screen.getByTestId("my-filterpill")).toBeInTheDocument() - expect(screen.getByTestId("my-filterpill")).toHaveClass("my-custom-class") - }) - - test("renders all props as passed", async () => { - render( - <FilterPill - data-testid="23" - filterKey="TheRequiredKey" - filterValue="TheRequiredValue" - data-lolol={true} - /> - ) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute("data-lolol") - }) -}) diff --git a/libs/juno-ui-components/src/components/FilterPill/index.js b/libs/juno-ui-components/src/components/FilterPill/index.js deleted file mode 100644 index fbe4060a0..000000000 --- a/libs/juno-ui-components/src/components/FilterPill/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { FilterPill } from "./FilterPill.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Filters/Filters.component.js b/libs/juno-ui-components/src/components/Filters/Filters.component.js deleted file mode 100644 index c7d35d204..000000000 --- a/libs/juno-ui-components/src/components/Filters/Filters.component.js +++ /dev/null @@ -1,167 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from "react" -import PropTypes from "prop-types" -import { FilterInput } from "../FilterInput/FilterInput.component" - -const filterStyles = ` - jn-mb-px - jn-bg-theme-filters - jn-rounded-t - jn-pt-4 - jn-px-4 - jn-pb-2 -` - -const inputWrapperStyles = ` - jn-w-full - jn-flex - jn-mb-2 -` - -const searchWrapperStyles = ` - jn-ml-auto -` - -const filterPillWrapperStyles = ` - jn-flex - jn-flex-wrap -` - -const errortextStyles = ` - jn-text-theme-error - jn-text-sm - jn-mt-[-0.25rem] - jn-mb-1.5 -` -/** --- Deprecated. For new implementations, combine and compose Input Group, Inputs and Pills as needed. -- -A component to hold a FilterInput, resulting FilterPills, and optional SearchBar for any filter-able content. -*/ - -export const Filters = ({ - search, - filters, - selectedFilterKey, - onSelectedFilterKeyChange, - filterValue, - valuePlaceholder, - onFilterValueChange, - onFilter, - onFilterClear, - children, - className, - loading, - error, - errortext, - ...props -}) => { - const [isLoading, setIsLoading] = useState(false) - const [hasError, setHasError] = useState(false) - - useEffect(() => { - // AP: empty string and boolean results in empty string - // "" && true => "" - // This causes hasError to become a string. Further down, hasError is - // passed on to the TextInput, whose type check logs a warning - // To prevet that check the type of errortext instead! - setHasError( - error || (typeof errortext === "string" && errortext.length > 0) - ) - }, [error, errortext]) - - useEffect(() => { - setIsLoading(loading) - }, [loading]) - - return ( - <div - className={`juno-filters ${ - hasError ? "juno-filters-error " : "" - } ${filterStyles} ${className}`} - {...props} - > - <div className={`juno-filters-input-wrapper ${inputWrapperStyles}`}> - {filters && filters.options ? ( - <FilterInput - keyLabel={filters.keyLabel} - valueLabel={filters.valueLabel} - options={filters.options} - selectedFilterKey={selectedFilterKey} - onSelectedFilterKeyChange={onSelectedFilterKeyChange} - filterValue={filterValue} - valuePlaceholder={valuePlaceholder} - onFilterValueChange={onFilterValueChange} - onFilter={onFilter} - onClear={onFilterClear} - loading={isLoading} - error={hasError} - /> - ) : null} - {search ? ( - <div className={`${searchWrapperStyles}`}>{search}</div> - ) : null} - </div> - {hasError && errortext ? ( - <div className={`juno-filters-errortext ${errortextStyles}`}> - {errortext} - </div> - ) : ( - "" - )} - <div className={`${filterPillWrapperStyles}`}>{children}</div> - </div> - ) -} - -Filters.propTypes = { - /** Pass a SearchInput component */ - search: PropTypes.node, - /** Pass an object describing the filter keyLabel, valueLabel, and the available filter options: - `{ keyLabel: "Select a Filter",` - `valueLabel: "Enter a Value",` - `options: [{label: "Filter 1", key: "filter-1"}, {...}] }` - */ - filters: PropTypes.object, - /** The key of the currently selected filter */ - selectedFilterKey: PropTypes.string, - /** Pass a handler to be executed when the filter key changes */ - onSelectedFilterKeyChange: PropTypes.func, - /** The value of the FilterInput */ - filterValue: PropTypes.string, - /** Optional: Pass a placeholder for the filter value text input */ - valuePlaceholder: PropTypes.string, - /** Pass a handler to be executed whenever the value of the filter value input changes */ - onFilterValueChange: PropTypes.func, - /** Pass a handler to be executed once the user clicks the filter button */ - onFilter: PropTypes.func, - /** Pas a handler to be executed once the Filter input is cleared */ - onFilterClear: PropTypes.func, - /** add custom classNames */ - className: PropTypes.string, - /** Whether the filters are currently loading */ - loading: PropTypes.bool, - /** Whether the filters have an error */ - error: PropTypes.bool, - /** The error message to display. When passed, error is set to true automatically */ - errortext: PropTypes.string, -} - -Filters.defaultProps = { - search: null, - filters: null, - selectedFilterKey: "", - onSelectedFilterKeyChange: undefined, - filterValue: "", - valuePlaceholder: "", - onFilter: undefined, - onFilterValueChange: undefined, - onFilterClear: undefined, - className: "", - loading: false, - error: false, - errortext: "", -} diff --git a/libs/juno-ui-components/src/components/Filters/Filters.stories.js b/libs/juno-ui-components/src/components/Filters/Filters.stories.js deleted file mode 100644 index db544f9d5..000000000 --- a/libs/juno-ui-components/src/components/Filters/Filters.stories.js +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Filters } from './index.js'; -import { FilterPill } from '../FilterPill/FilterPill.component'; -import { SearchInput } from '../SearchInput/SearchInput.component'; - -export default { - title: 'Deprecated/Filter/Filters', - component: Filters, - argTypes: {}, -}; - -const PillsTemplate = (args) => ( - <Filters {...args}> - {args.filters && args.filters.options && args.filters.options.length - ? args.filters.options.map((filter, i) => ( - <FilterPill - filterKey={filter.key} - filterKeyLabel={filter.label} - filterValue={`value_${i}`} - filterValueLabel={`Value ${i}`} - key={`filter-${i}`} - onClose={() => console.log(filter.key, 'closing')} - /> - )) - : null} - </Filters> -); - -export const Default = { - args: { - valuePlaceholder: 'Enter a value', - filters: { - keyLabel: 'Select a Filter', - options: [{ key: 'filter-1', label: 'Filter 1' }], - }, - }, -}; - -export const Loading = { - args: { - filters: { - keyLabel: 'Select a Filter', - options: [], - }, - loading: true, - }, -}; - -export const WithPills = { - render: PillsTemplate, - - args: { - filters: { - keyLabel: 'Select a Filter', - options: [ - { key: 'filter-01', label: 'Filter 1' }, - { key: 'filter-02', label: 'Filter 2' }, - { key: 'filter-03', label: 'Filter 3' }, - ], - }, - }, -}; - -export const ErrorWithPills = { - render: PillsTemplate, - - args: { - filters: { - options: [ - { key: 'filter-01', label: 'Filter 1' }, - { key: 'filter-02', label: 'Filter 2' }, - { key: 'filter-03', label: 'Filter 3' }, - ], - }, - error: true, - }, -}; - -export const PreseletedWithSearch = { - args: { - selectedFilterKey: 'filter-2', - search: ( - <SearchInput - onSearch={() => { - console.log('Searching…'); - }} - /> - ), - filters: { - keyLabel: 'Select a Filter', - options: [ - { key: 'filter-01', label: 'Filter 1' }, - { key: 'filter-02', label: 'Filter 2' }, - { key: 'filter-03', label: 'Filter 3' }, - ], - }, - }, -}; - -export const SearchOnly = { - args: { - search: ( - <SearchInput - onSearch={() => { - console.log('Searching…'); - }} - /> - ), - }, -}; - -const searchProps = { - onSearch: () => { - console.log('Searching…'); - }, -}; diff --git a/libs/juno-ui-components/src/components/Filters/Filters.test.js b/libs/juno-ui-components/src/components/Filters/Filters.test.js deleted file mode 100644 index a988c07f3..000000000 --- a/libs/juno-ui-components/src/components/Filters/Filters.test.js +++ /dev/null @@ -1,204 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { Filters } from "./index" -import { SearchInput } from "../SearchInput/index" - -describe("Filters", () => { - test("renders Filters", async () => { - render(<Filters data-testid="my-filters" />) - expect(screen.getByTestId("my-filters")).toBeInTheDocument() - expect(screen.getByTestId("my-filters")).toHaveClass("juno-filters") - }) - - test("renders a FilterInput when filter prop is passed", async () => { - const filters = { options: [{ label: "option 1", value: "option-1" }] } - render(<Filters filters={filters} />) - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toHaveClass("juno-filter-input-select") - }) - - test("renders Select with options as passed", async () => { - const filters = { - keyLabel: "Filter", - options: [ - { label: "option 1", value: "option-1" }, - { label: "option 2", value: "option-2" }, - ], - } - render(<Filters filters={filters} />) - expect(screen.getByRole("option", { name: "Filter" })).toBeInTheDocument() - expect(screen.getByRole("option", { name: "option 1" })).toHaveValue( - "option-1" - ) - expect(screen.getByRole("option", { name: "option 2" })).toHaveValue( - "option-2" - ) - }) - - test("renders a Select with selected filter key as passed", async () => { - const filters = { - options: [ - { label: "option 1", value: "option-1" }, - { label: "option 2", value: "option-2" }, - ], - } - render(<Filters filters={filters} selectedFilterKey="option-2" />) - expect(screen.getByRole("option", { name: "option 2" }).selected).toBe(true) - }) - - test("renders a Filter value text input with an aria-label as passed", async () => { - const filters = { valueLabel: "Enter a filter value", options: [] } - render(<Filters filters={filters} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute( - "aria-label", - "Enter a filter value" - ) - }) - - test("renders a Filter vlaue text input witn a placeholder as passed", async () => { - const filters = { - valueLabel: "Enter a filter value", - options: [ - { label: "option 1", value: "option-1" }, - { label: "option 2", value: "option-2" }, - ], - } - render(<Filters valuePlaceholder="my placeholder" filters={filters} />) - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveAttribute( - "placeholder", - "my placeholder" - ) - }) - - test("renders a Filter value as passed", async () => { - const filters = { options: [{ label: "option 1", value: "option-1" }] } - render(<Filters filters={filters} filterValue="abc" />) - expect(screen.getByRole("textbox")).toHaveValue("abc") - }) - - test("executes a handler as passed when the filter input value changes", async () => { - const handleFilterValueChange = jest.fn() - const filters = { options: [{ label: "option 1", value: "option-1" }] } - render( - <Filters - filters={filters} - onFilterValueChange={handleFilterValueChange} - /> - ) - await userEvent.type(screen.getByRole("textbox"), "123") - expect(handleFilterValueChange).toHaveBeenCalledTimes(3) - }) - - test("executes a handler as passed when the filter icon is clicked", async () => { - const handleFilter = jest.fn() - const filters = { - label: "Filter", - options: [{ label: "option 1", value: "option-1" }], - } - render(<Filters filters={filters} onFilter={handleFilter} />) - await userEvent.click(screen.getByTitle("Filter")) - expect(handleFilter).toHaveBeenCalledTimes(1) - }) - - test("executes a handler as passed when the input has focus and the user presses enter", async () => { - const handleFilter = jest.fn() - const filters = { - label: "Filter", - options: [{ label: "option 1", value: "option-1" }], - } - render(<Filters filters={filters} onFilter={handleFilter} />) - await userEvent.type(screen.getByRole("textbox"), "{enter}") - expect(handleFilter).toHaveBeenCalledTimes(1) - expect(handleFilter).toHaveBeenCalledTimes(1) - }) - - test("clears the filter input and executes a handler as passed when the filter input clear icon is clicked", async () => { - const handleClear = jest.fn() - const filters = { - label: "Filter", - options: [{ label: "option 1", value: "option-1" }], - } - render( - <Filters - filters={filters} - filterValue="some option" - onFilterClear={handleClear} - /> - ) - expect(screen.getByRole("textbox")).toHaveValue("some option") - await userEvent.click(screen.getByTitle("Clear")) - expect(screen.getByRole("textbox")).toHaveValue("") - expect(handleClear).toHaveBeenCalledTimes(1) - }) - - test("renders a SearchInput as passed", async () => { - render(<Filters search={<SearchInput />}></Filters>) - expect(screen.getByRole("searchbox")).toBeInTheDocument() - }) - - test("renders loading Filters as passed", async () => { - const filters = { - label: "Filter", - options: [{ label: "option 1", value: "option-1" }], - } - render(<Filters filters={filters} loading />) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByRole("progressbar")).toBeInTheDocument() - }) - - test("renders Filters with an error as passed", async () => { - const filters = { - label: "Filter", - options: [{ label: "option 1", value: "option-1" }], - } - render(<Filters data-testid="my-filters" filters={filters} error />) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByTestId("my-filters")).toBeInTheDocument() - expect(screen.getByTestId("my-filters")).toHaveClass("juno-filters-error") - expect(screen.getByRole("button")).toBeDisabled() - }) - - test("renders Filters with error and an errortext as passed", async () => { - const filters = { - label: "Filter", - options: [{ label: "option 1", value: "option-1" }], - } - render( - <Filters - data-testid="my-filters" - filters={filters} - errortext="These Filters have an error" - /> - ) - expect(screen.getByRole("combobox")).toBeDisabled() - expect(screen.getByTestId("my-filters")).toBeInTheDocument() - expect(screen.getByTestId("my-filters")).toHaveClass("juno-filters-error") - expect( - document.querySelector(".juno-filters-errortext") - ).toBeInTheDocument() - expect(document.querySelector(".juno-filters-errortext")).toHaveTextContent( - "These Filters have an error" - ) - expect(screen.getByRole("button")).toBeDisabled() - }) - - test("renders a custom className", async () => { - render(<Filters data-testid="my-filters" className="my-custom-class" />) - expect(screen.getByTestId("my-filters")).toBeInTheDocument() - expect(screen.getByTestId("my-filters")).toHaveClass("my-custom-class") - }) - - test("renders all props as passed", async () => { - render(<Filters data-testid="23" data-lolol={true} />) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute("data-lolol") - }) -}) diff --git a/libs/juno-ui-components/src/components/Filters/index.js b/libs/juno-ui-components/src/components/Filters/index.js deleted file mode 100644 index 727d1239c..000000000 --- a/libs/juno-ui-components/src/components/Filters/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Filters } from "./Filters.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Form/Form.component.js b/libs/juno-ui-components/src/components/Form/Form.component.js deleted file mode 100644 index 6a99a0acc..000000000 --- a/libs/juno-ui-components/src/components/Form/Form.component.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const formStyles = ` - jn-mb-8 -` - -const formHeading = ` - jn-text-2xl - jn-font-bold - jn-mb-4 -` - -/** A Form to hold FormSections and/or FormGroups with an optional title. */ -export const Form = ({ - title, - className, - children, - ...props -}) => { - return ( - <form - className={`juno-form ${formStyles} ${className}`} - {...props} - > - {title ? <h1 className={`juno-form-heading ${formHeading}`}>{title}</h1> : ""} - {children} - </form> - ) -} - -Form.propTypes = { - /** Title to be rendered in the Form`. */ - title: PropTypes.string, - /** Custom className */ - className: PropTypes.string, - /** Children to render in the form */ - children: PropTypes.node, -} - -Form.defaultProps = { - title: null, - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Form/Form.stories.js b/libs/juno-ui-components/src/components/Form/Form.stories.js deleted file mode 100644 index 16f09003f..000000000 --- a/libs/juno-ui-components/src/components/Form/Form.stories.js +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Form } from './index.js'; -import { FormRow } from '../FormRow/index.js'; -import { FormSection } from '../FormSection/index.js'; -import { FormHint } from '../FormHint/index.js'; -import { TextInput } from '../TextInput/index.js'; -import { Select } from '../Select/index.js'; -import { SelectOption } from '../SelectOption/index.js'; -import { Switch } from '../Switch/index.js'; -import { Textarea } from '../Textarea/index.js'; -import { RadioGroup } from '../RadioGroup/index.js'; -import { Radio } from '../Radio/index.js'; -import { CheckboxGroup } from '../CheckboxGroup/index.js'; -import { Checkbox } from '../Checkbox/index.js'; -import { Button } from '../Button/index.js'; -import { ButtonRow } from '../ButtonRow/index.js'; -import { IntroBox } from '../IntroBox/index.js'; - -export default { - title: 'Forms/Form', - component: Form, - argTypes: { - items: { - table: { - disable: true, - }, - }, - children: { - control: false, - }, - }, -}; - -const Template = ({ children, ...args }) => <Form {...args}>{children}</Form>; - -export const Default = { - render: Template, - - args: { - title: 'A Simple Form', - children: [ - <FormRow key="f-1"> - <TextInput label="First Name" id="first-name" /> - </FormRow>, - <FormRow key="f-2"> - <TextInput label="Last Name" id="last-name" /> - </FormRow>, - <FormRow key="f-3"> - <TextInput label="Email" id="email" type="email" required /> - </FormRow>, - <ButtonRow key="f-4"> - <Button>Cancel</Button> - <Button variant="primary">Submit</Button> - </ButtonRow>, - ], - }, -}; - -export const ComplexForm = { - render: Template, - - args: { - title: 'A Complex Form', - children: [ - <IntroBox text="In order to get to know you, we need to talk about colors." key="ib-1" />, - <FormSection title="First Section of the Form" key="fs-1"> - <FormRow key="fr-1"> - <Select label="Your Favorite Color" placeholder="Select your favorite color…" id="color"> - <SelectOption value="red" key="so-1"> - Red - </SelectOption> - <SelectOption value="blue" key="so-2"> - Blue - </SelectOption> - <SelectOption value="other" key="so-3"> - Other - </SelectOption> - </Select> - <FormHint text="Your favorite color to the best of your knowledge" /> - </FormRow> - <FormRow key="fr-2"> - <TextInput label="First Name" id="first-name" /> - </FormRow> - <FormRow key="fr-3"> - <TextInput label="Last Name" id="last-name" /> - </FormRow> - </FormSection>, - <FormSection title="Second Section of the Form" key="fs-2"> - <RadioGroup - name="color-radios" - label="In case you are not sure, select your true favorite color:" - > - <Radio key="r-1" id="color-red" label="Red" value="red" /> - <Radio key="r-2" id="color-blue" label="Blue" value="blue" /> - <Radio key="r-3" id="color-green" label="Green" value="green" /> - <Radio key="r-4" id="color-yellow" label="Yellow" value="yellow" /> - </RadioGroup> - <CheckboxGroup name="all-about-red" label="What is your opinion towards the color Red?"> - <Checkbox key="c-1" id="overrated" label="Red is vastly overrated" value="overrated" /> - <Checkbox key="c-2" id="blackisred" label="Black is better" value="blackisbetter" /> - </CheckboxGroup> - <FormRow key="fr-4"> - <Textarea - label="Your Message" - id="message" - placeholder="If there is something else we should know about you – now is the time!" - /> - </FormRow> - <FormRow> - <TextInput invalid value="Error!" /> - <FormHint variant="error" text="A textInput with an error for no reason whatsoever." /> - </FormRow> - <FormRow key="fr-5"> - <Switch label="Wake me up at 4.30am" id="wakey" /> - </FormRow> - <FormRow key="fr-6"> - <Switch label="Send me an email, too" id="email-too" /> - </FormRow> - </FormSection>, - <ButtonRow key="br-1"> - <Button>Cancel</Button> - <Button variant="primary-danger">Clear</Button> - <Button variant="primary">Submit</Button> - </ButtonRow>, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/Form/Form.test.js b/libs/juno-ui-components/src/components/Form/Form.test.js deleted file mode 100644 index 1e40d00ac..000000000 --- a/libs/juno-ui-components/src/components/Form/Form.test.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { Form } from "./index" - -describe("Form", () => { - - test("renders a Form", async () => { - render(<Form data-testid="my-form" />) - expect(screen.getByTestId("my-form")).toBeInTheDocument() - }) - - test("renders a title", async () => { - render(<Form data-testid="my-form" title="My Form" />) - expect(screen.getByTestId("my-form")).toBeInTheDocument() - expect(screen.getByRole("heading")).toHaveClass("juno-form-heading") - expect(screen.getByRole("heading")).toHaveTextContent("My Form") - }) - - test("renders a custom className", async () => { - render(<Form data-testid="my-form" className="my-custom-class" />) - expect(screen.getByTestId("my-form")).toBeInTheDocument() - expect(screen.getByTestId("my-form")).toHaveClass("my-custom-class") - }) - - test("renders children as passed", async () => { - render(<Form data-testid="my-form"><button></button></Form>) - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders all props as passed", async () => { - render(<Form data-testid="23" data-lolol={true}/>) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute('data-lolol') - }) - -}) diff --git a/libs/juno-ui-components/src/components/Form/index.js b/libs/juno-ui-components/src/components/Form/index.js deleted file mode 100644 index 81b06a027..000000000 --- a/libs/juno-ui-components/src/components/Form/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Form } from "./Form.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormHint/FormHint.component.js b/libs/juno-ui-components/src/components/FormHint/FormHint.component.js deleted file mode 100644 index 37bcf2c95..000000000 --- a/libs/juno-ui-components/src/components/FormHint/FormHint.component.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const baseStyles = ` - jn-text-xs - jn-mt-1 -` - -const variantStyles = (variant) => { - switch (variant) { - case "success": - return "jn-text-theme-success" - case "error": - return "jn-text-theme-error" - default: - return "jn-text-theme-light" - } -} - -export const FormHint = ({ - children, - text, - variant, - className, - ...props -}) => { - return ( - <div - className={` - juno-form-hint - juno-form-hint-${variant} - ${ baseStyles } - ${ variantStyles(variant) } - ${ className } - `} - {...props} - > - { children || text } - </div> - ) -} - - -FormHint.propTypes = { - /** The children to render as a hint associated with a form element */ - children: PropTypes.node, - /** The text to render. If both children and text are passed, children will rendered */ - text: PropTypes.node, - /** The variant of the the hint. Defaults to 'help'. */ - variant: PropTypes.oneOf(["help", "error", "success"]), - /** Pass a custom className */ - className: PropTypes.string, -} - - -FormHint.defaultProps = { - children: null, - text: "", - variant: "help", - className: undefined, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormHint/FormHint.stories.js b/libs/juno-ui-components/src/components/FormHint/FormHint.stories.js deleted file mode 100644 index 1caa83d97..000000000 --- a/libs/juno-ui-components/src/components/FormHint/FormHint.stories.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { FormHint } from './index.js'; - -export default { - title: 'Forms/FormHint', - component: FormHint, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = ({ children, ...args }) => <FormHint {...args}>{children}</FormHint>; - -export const Default = { - render: Template, - - args: { - text: 'A simple hint to be associated with a form input', - }, -}; - -export const WithChildren = { - render: Template, - - args: { - children: ( - <> - A FormHint with a <a href="#">Link</a>. - </> - ), - }, -}; - -export const WithTextAsChildren = { - render: Template, - - args: { - text: ( - <> - A FormHint with a <a href="#">Link</a>. - </> - ), - }, -}; - -export const ErrorVariant = { - render: Template, - - args: { - variant: 'error', - text: 'A FormHint containing an error or invalidation message', - }, -}; - -export const SuccessVariant = { - render: Template, - - args: { - variant: 'success', - text: 'A FormHint containg a success or validation message', - }, -}; diff --git a/libs/juno-ui-components/src/components/FormHint/FormHint.test.js b/libs/juno-ui-components/src/components/FormHint/FormHint.test.js deleted file mode 100644 index 3e1bbb25f..000000000 --- a/libs/juno-ui-components/src/components/FormHint/FormHint.test.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { FormHint } from "./index" - -describe("FormHint", () => { - - test("renders a FormHint", async () => { - render(<FormHint data-testid="my-form-hint" />) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - }) - - test("renders children as passed", async () => { - render(<FormHint data-testid="my-form-hint"><button></button></FormHint>) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a text as passed", async () => { - render(<FormHint data-testid="my-form-hint" text="My form-related message"/>) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByTestId("my-form-hint")).toHaveTextContent("My form-related message") - }) - - test("renders children if both children and text have been passed", async () => { - render( - <FormHint data-testid="my-form-hint" text="123"> - <>abc</> - </FormHint> - ) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByTestId("my-form-hint")).toHaveTextContent("abc") - expect(screen.getByTestId("my-form-hint")).not.toHaveTextContent("123") - }) - - test("renders a help message by default", async () => { - render(<FormHint data-testid="my-form-hint" />) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByTestId("my-form-hint")).toHaveClass("juno-form-hint-help") - }) - - test("renders an error message as passed", async () => { - render(<FormHint data-testid="my-form-hint" variant="error" />) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByTestId("my-form-hint")).toHaveClass("juno-form-hint-error") - }) - - test("renders a success message as passed", async () => { - render(<FormHint data-testid="my-form-hint" variant="success" />) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByTestId("my-form-hint")).toHaveClass("juno-form-hint-success") - }) - - test("renders a custom className", async () => { - render(<FormHint data-testid="my-form-hint" className="my-custom-class" />) - expect(screen.getByTestId("my-form-hint")).toBeInTheDocument() - expect(screen.getByTestId("my-form-hint")).toHaveClass("my-custom-class") - }) - - test("renders all props as passed", async () => { - render(<FormHint data-testid="23" data-lolol={true}/>) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute('data-lolol') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormHint/index.js b/libs/juno-ui-components/src/components/FormHint/index.js deleted file mode 100644 index d62338c7d..000000000 --- a/libs/juno-ui-components/src/components/FormHint/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { FormHint } from "./FormHint.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormRow/FormRow.component.js b/libs/juno-ui-components/src/components/FormRow/FormRow.component.js deleted file mode 100644 index 0353732ed..000000000 --- a/libs/juno-ui-components/src/components/FormRow/FormRow.component.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react' -import PropTypes from 'prop-types' - -const formRowStyles = ` - jn-mb-2 -` - -/** -A generic FormRow component. -Used to layout and structure forms. Pass Form elements such as TextInput, Textarea, Select, or Radio and CheckboxGroups as children. -*/ -export const FormRow = ({ - children, - className, - ...props -}) => { - return ( - <div className={`juno-form-row ${formRowStyles} ${className}`} {...props}> - {children} - </div> -)} - -FormRow.propTypes = { - /** The children to render in the formRow. Typically, these will be Input components such as TextInput, Textarea, Select, or Radio and CheckboxGroups*/ - children: PropTypes.node, - /** Add a custom className to a FormRow */ - className: PropTypes.string, -} - - -FormRow.defaultProps = { - children: null, - className: "", -} - diff --git a/libs/juno-ui-components/src/components/FormRow/FormRow.stories.js b/libs/juno-ui-components/src/components/FormRow/FormRow.stories.js deleted file mode 100644 index 42c254e03..000000000 --- a/libs/juno-ui-components/src/components/FormRow/FormRow.stories.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { FormRow } from './index.js'; -import { TextInput } from '../TextInput/index.js'; - -export default { - title: 'Forms/FormRow', - component: FormRow, - argTypes: { - children: { - control: false, - }, - }, -}; - -const Template = ({ children, ...args }) => <FormRow {...args}>{children}</FormRow>; - -export const Default = { - render: Template, - - args: { - children: [<TextInput label="TextInput in a FormRow" placeholder="Your input here…" key="1" />], - }, -}; diff --git a/libs/juno-ui-components/src/components/FormRow/FormRow.test.js b/libs/juno-ui-components/src/components/FormRow/FormRow.test.js deleted file mode 100644 index c9b5fceb0..000000000 --- a/libs/juno-ui-components/src/components/FormRow/FormRow.test.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { FormRow } from "./index" - -describe("FormSection", () => { - - test("renders a FormRow", async () => { - render(<FormRow data-testid="my-form-row" />) - expect(screen.getByTestId("my-form-row")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<FormRow data-testid="my-form-row" className="my-custom-class" />) - expect(screen.getByTestId("my-form-row")).toBeInTheDocument() - expect(screen.getByTestId("my-form-row")).toHaveClass("my-custom-class") - }) - - test("renders children as passed", async () => { - render(<FormRow><button></button></FormRow>) - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders all props as passed", async () => { - render(<FormRow data-testid="23" data-lolol={true}/>) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute('data-lolol') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormRow/index.js b/libs/juno-ui-components/src/components/FormRow/index.js deleted file mode 100644 index 580a65a38..000000000 --- a/libs/juno-ui-components/src/components/FormRow/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { FormRow } from "./FormRow.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormSection/FormSection.component.js b/libs/juno-ui-components/src/components/FormSection/FormSection.component.js deleted file mode 100644 index 756d92ed0..000000000 --- a/libs/juno-ui-components/src/components/FormSection/FormSection.component.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - - -const formSection = ` - jn-mb-8 - jn-last:mb-0 -` - -const formSectionHeading = ` - jn-text-lg - jn-font-bold - jn-mb-4 -` - -/** A Form section to group form elements inside complex forms with an optional title. */ -export const FormSection = ({ - - title, - children, - className, - ...props -}) => { - return ( - <section - className={`juno-form-section ${formSection} ${className}`} - {...props} - > - {title ? <h1 className={`juno-formsection-heading ${formSectionHeading}`}>{title}</h1> : ""} - {children} - </section> - ) -} - -FormSection.propTypes = { - /** Title, will be rendering as an `<h1>`. */ - title: PropTypes.string, - /** Pass a custpm className */ - className: PropTypes.string, - /** Children to render in the form section */ - children: PropTypes.node, -} - -FormSection.defaultProps = { - title: null, - className: "", - children: null, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormSection/FormSection.stories.js b/libs/juno-ui-components/src/components/FormSection/FormSection.stories.js deleted file mode 100644 index c90639b94..000000000 --- a/libs/juno-ui-components/src/components/FormSection/FormSection.stories.js +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { FormSection } from '../FormSection/FormSection.component'; -import { FormRow } from '../FormRow/FormRow.component'; -import { TextInput } from '../TextInput/TextInput.component'; - -export default { - title: 'Forms/FormSection', - component: FormSection, - argTypes: { - items: { - table: { - disable: true, - }, - }, - children: { - control: false, - }, - }, -}; - -const Template = ({ children, ...args }) => <FormSection {...args}>{children}</FormSection>; - -export const Default = { - render: Template, - - args: { - children: [ - <FormRow key="1"> - <TextInput label="Address Line 1" /> - </FormRow>, - <FormRow key="2"> - <TextInput label="Address Line 2" /> - </FormRow>, - ], - }, -}; - -export const WithTitle = { - render: Template, - - args: { - title: 'Form Section With Title', - children: [ - <FormRow key="1"> - <TextInput label="Address Line 1" /> - </FormRow>, - <FormRow key="2"> - <TextInput label="Address Line 2" /> - </FormRow>, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/FormSection/FormSection.test.js b/libs/juno-ui-components/src/components/FormSection/FormSection.test.js deleted file mode 100644 index 92448c6f4..000000000 --- a/libs/juno-ui-components/src/components/FormSection/FormSection.test.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { FormSection } from "./index" - -describe("FormSection", () => { - - test("renders a FormSection", async () => { - render(<FormSection data-testid="my-formsection" />) - expect(screen.getByTestId("my-formsection")).toBeInTheDocument() - }) - - test("renders a title", async () => { - render(<FormSection data-testid="my-form-section" title="My Form Section" />) - expect(screen.getByTestId("my-form-section")).toBeInTheDocument() - expect(screen.getByRole("heading")).toHaveClass("juno-formsection-heading") - expect(screen.getByRole("heading")).toHaveTextContent("My Form Section") - }) - - test("renders a custom className", async () => { - render(<FormSection data-testid="my-formsection" className="my-custom-class" />) - expect(screen.getByTestId("my-formsection")).toBeInTheDocument() - expect(screen.getByTestId("my-formsection")).toHaveClass("my-custom-class") - }) - - test("renders children as passed", async () => { - render(<FormSection><button></button></FormSection>) - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders all props as passed", async () => { - render(<FormSection data-testid="23" data-lolol={true}/>) - expect(screen.getByTestId("23")).toBeInTheDocument() - expect(screen.getByTestId("23")).toHaveAttribute('data-lolol') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/FormSection/index.js b/libs/juno-ui-components/src/components/FormSection/index.js deleted file mode 100644 index 0e9fd4dda..000000000 --- a/libs/juno-ui-components/src/components/FormSection/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { FormSection } from "./FormSection.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Grid/Grid.component.js b/libs/juno-ui-components/src/components/Grid/Grid.component.js deleted file mode 100644 index e2a0ecf40..000000000 --- a/libs/juno-ui-components/src/components/Grid/Grid.component.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -/** -A general-use grid. Use in conjunction with GridColumn and GridRow. -*/ - -export const Grid = ({ - auto, - children, - className, - ...props -}) => { - // auto grid overrides for columns: - const autoStyles = { - "--grid-column-flex-grow": "1", - "--grid-column-flex-shrink": "0", - "--grid-column-flex-basis": "0", - "--grid-column-default-width": "auto", - } - // Override column vars in case 'auto' was passed: - const gridStyles = auto ? autoStyles : {} - return ( - <div className={`juno-grid ${className}`} style={gridStyles} {...props} > - {children} - </div> - ) -} - - -Grid.propTypes = { - /** Whether columns should auto-size or not, default is false. This effectively overrides the 12-columns default grid */ - auto: PropTypes.bool, - /** The children to render in the grid */ - children: PropTypes.node, - /** Add a class to the grid container */ - className: PropTypes.string, -} - -Grid.defaultProps = { - auto: false, - className: "", - children: null, -} diff --git a/libs/juno-ui-components/src/components/Grid/Grid.stories.js b/libs/juno-ui-components/src/components/Grid/Grid.stories.js deleted file mode 100644 index c573acf1c..000000000 --- a/libs/juno-ui-components/src/components/Grid/Grid.stories.js +++ /dev/null @@ -1,159 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Grid } from './index.js'; -import { GridRow } from '../GridRow/GridRow.component.js'; -import { GridColumn } from '../GridColumn/GridColumn.component.js'; - -export default { - title: 'Layout/Grid/Grid', - component: Grid, - argTypes: { - children: { - control: false, - }, - }, - decorators: [(Story) => <Story className="jn-bg-juno-blue-3 jn-text-juno-grey-blue" />], -}; - -// for the decorator to work like this (passing props to the story) we have to access the passed props from the decorator -// from the context. This might be storybook 6.x-specific. Double check when we upgrade to storybook 7.x -const Template = (args, context) => <Grid {...args} className={context.className}></Grid>; - -export const Default = { - render: Template, - - parameters: { - docs: { - description: { - story: - 'By default, Juno uses a 12-column fluid grid. Columns can be made to span multiple columns by passing `cols={n}`.', - }, - }, - }, - - args: { - children: [ - <GridRow key="1"> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - </GridRow>, - <GridRow key="2"> - <GridColumn>Column</GridColumn> - <GridColumn cols={3}>Column cols-3</GridColumn> - <GridColumn cols={5}>Column cols-6</GridColumn> - <GridColumn cols={2}>Column cols-2</GridColumn> - </GridRow>, - ], - }, -}; - -export const Auto = { - render: Template, - - parameters: { - docs: { - description: { - story: - 'By passing `auto` to the grid, all of its contained columns will automatically size to share available space equally. Columns with `cols={n}` will switch their behaviour to auto-size.', - }, - }, - }, - - args: { - auto: true, - children: [ - <GridRow key="1"> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - </GridRow>, - <GridRow key="2"> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - </GridRow>, - <GridRow key="3"> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - <GridColumn>Column</GridColumn> - </GridRow>, - ], - }, -}; - -export const MixedGrid = { - render: Template, - - args: { - children: ( - <GridRow> - <GridColumn>Column</GridColumn> - <GridColumn auto>Auto Column</GridColumn> - <GridColumn width={10}>Column 10%</GridColumn> - <GridColumn cols={3}>Column cols-3</GridColumn> - </GridRow> - ), - }, -}; - -export const MixedAutoGrid = { - render: Template, - - args: { - auto: true, - children: ( - <GridRow> - <GridColumn>Column</GridColumn> - <GridColumn auto>Auto Column</GridColumn> - <GridColumn width={10}>Column 10%</GridColumn> - <GridColumn cols={3}>Column cols-3</GridColumn> - </GridRow> - ), - }, -}; - -export const NestedGrid = { - render: Template, - - args: { - children: ( - <GridRow> - <GridColumn cols={3}>Column cols-3</GridColumn> - <GridColumn cols={9}> - <Grid> - <GridRow> - <GridColumn width={33.333333} className="bg-juno-blue-2"> - Nested Column 33.333333% - </GridColumn> - <GridColumn width={66.666666} className="bg-juno-blue-2"> - Nested Column 66.666666% - </GridColumn> - </GridRow> - </Grid> - </GridColumn> - </GridRow> - ), - }, -}; diff --git a/libs/juno-ui-components/src/components/Grid/Grid.test.js b/libs/juno-ui-components/src/components/Grid/Grid.test.js deleted file mode 100644 index fd9f5f341..000000000 --- a/libs/juno-ui-components/src/components/Grid/Grid.test.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { Grid} from "./index" - -describe("Grid", () => { - - test("renders a Grid container", async () => { - render(<Grid data-testid="my-grid" />) - expect(screen.getByTestId("my-grid")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<Grid data-testid="my-grid" className="my-grid-class" />) - expect(screen.getByTestId("my-grid")).toHaveClass("my-grid-class") - }) - - test("has modified CSS variables in a style tag for auto grids", async () => { - render(<Grid data-testid="my-auto-grid" auto />) - expect(screen.getByTestId("my-auto-grid")).toHaveAttribute("style") - expect(document.querySelector('.juno-grid').style.getPropertyValue('--grid-column-flex-grow')).toBe('1') - expect(document.querySelector('.juno-grid').style.getPropertyValue('--grid-column-flex-shrink')).toBe('0') - expect(document.querySelector('.juno-grid').style.getPropertyValue('--grid-column-flex-basis')).toBe('0') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Grid/index.js b/libs/juno-ui-components/src/components/Grid/index.js deleted file mode 100644 index 2527a3fb9..000000000 --- a/libs/juno-ui-components/src/components/Grid/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Grid } from "./Grid.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/GridColumn/GridColumn.component.js b/libs/juno-ui-components/src/components/GridColumn/GridColumn.component.js deleted file mode 100644 index 3b79913b2..000000000 --- a/libs/juno-ui-components/src/components/GridColumn/GridColumn.component.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const autoColumnStyles = ` - jn-grow - jn-shrink-0 - jn-flex-basis-0 -` -const widthColumnStyles = ` - jn-grow-0 - jn-shrink-1 - jn-flex-basis-auto -` - -const columnBaseStyles = ` - jn-flex-grid-column - jn-p-grid-column -` - -const cols_1 = ` - jn-w-grid-col-1 -` - -const cols_2 = ` - jn-w-grid-col-2 -` - -const cols_3 = ` - jn-w-grid-col-3 -` - -const cols_4 = ` - jn-w-grid-col-4 -` - -const cols_5 = ` - jn-w-grid-col-6 -` - -const cols_6 = ` - jn-w-grid-col-6 -` - -const cols_7 = ` - jn-w-grid-col-7 -` - -const cols_8 = ` - jn-w-grid-col-8 -` - -const cols_9 = ` - jn-w-grid-col-9 -` - -const cols_10 = ` - jn-w-grid-col-10 -` - -const cols_11 = ` - jn-w-grid-col-11 -` - -const cols_12 = ` - jn-w-grid-col-12 -` - -const colsClass = (cols) => { - switch (cols) { - case 1: - return cols_1 - case 2: - return cols_2 - case 3: - return cols_3 - case 4: - return cols_4 - case 5: - return cols_5 - case 6: - return cols_6 - case 7: - return cols_7 - case 8: - return cols_8 - case 9: - return cols_9 - case 10: - return cols_10 - case 11: - return cols_11 - case 12: - return cols_12 - default: - return "jn-w-grid-column-default" - } -} - -/** -A grid column to be used inside a Grid. -*/ - -export const GridColumn = ({ - width, - cols, - auto, - className, - children, - ...props -}) => { - // auto column: - const autoStyles = { - flexGrow: "1", - flexShrink: "0", - flexBasis: "0" - } - // width column: - const widthStyles = width ? { width: width + '%', flexGrow: "0", flexShrink: "0", flexBasis: width + '%' } : {} - // width overrides auto: - const columnStyles = width ? widthStyles : ( auto ? autoStyles : {} ) - return ( - <div className={`juno-grid-column ${columnBaseStyles} ${colsClass(cols)} ${className}`} style={columnStyles} {...props} > - {children} - </div> - ) -} - - -GridColumn.propTypes = { - /** The number of columns to span the column over. */ - cols: PropTypes.number, - /** The width in percent as a number without "%" for auto-layout grids TODO: or "auto". If a width is given, it will override the "cols" prop. */ - width: PropTypes.number, - /** Whether the colum should set an auto width */ - auto: PropTypes.bool, - /** Add a class to a grid column */ - className: PropTypes.string, - /** Children to be rendered in the column element */ - children: PropTypes.node -} - -GridColumn.defaultProps = { - width: null, - cols: null, - auto: false, - className: "", -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/GridColumn/GridColumn.stories.js b/libs/juno-ui-components/src/components/GridColumn/GridColumn.stories.js deleted file mode 100644 index ecc5a080c..000000000 --- a/libs/juno-ui-components/src/components/GridColumn/GridColumn.stories.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { GridColumn } from './index.js'; - -export default { - title: 'Layout/Grid/GridColumn', - component: GridColumn, - argTypes: { - children: { - control: false, - }, - }, - decorators: [(Story) => <Story className="jn-bg-juno-blue-3 jn-text-juno-grey-blue" />], -}; - -// for the decorator to work like this (passing props to the story) we have to access the passed props from the decorator -// from the context. This might be storybook 6.x-specific. Double check when we upgrade to storybook 7.x -const Template = (args, context) => ( - <GridColumn {...args} className={context.className}></GridColumn> -); - -export const Default = { - render: Template, - - args: { - children: 'Column', - }, -}; - -export const AutoColumn = { - render: Template, - - args: { - auto: true, - children: 'Auto Column', - }, -}; - -export const WidthColumn = { - render: Template, - - args: { - width: 50, - children: 'Column 50%', - }, -}; diff --git a/libs/juno-ui-components/src/components/GridColumn/GridColumn.test.js b/libs/juno-ui-components/src/components/GridColumn/GridColumn.test.js deleted file mode 100644 index df89c9bb1..000000000 --- a/libs/juno-ui-components/src/components/GridColumn/GridColumn.test.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { GridColumn} from "./index" - -describe("GridColumn", () => { - - test("renders a Grid row", async () => { - render(<GridColumn data-testid="my-grid-column" />) - expect(screen.getByTestId("my-grid-column")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<GridColumn data-testid="my-grid-column" className="my-grid-column-class" />) - expect(screen.getByTestId("my-grid-column")).toHaveClass("my-grid-column-class") - }) - - test("renders modified 'auto' styles when passed", async () => { - render(<GridColumn data-testid="my-auto-column" auto />) - expect(screen.getByTestId("my-auto-column")).toHaveAttribute("style") - expect(document.querySelector('.juno-grid-column').style.getPropertyValue('flex-grow')).toBe('1') - expect(document.querySelector('.juno-grid-column').style.getPropertyValue('flex-shrink')).toBe('0') - expect(document.querySelector('.juno-grid-column').style.getPropertyValue('flex-basis')).toBe('0px') - }) - - test("renders width-related styles in a style tag when passed", async () => { - render(<GridColumn data-testid="my-width-column" width={73} />) - expect(screen.getByTestId("my-width-column")).toHaveAttribute("style") - expect(document.querySelector('.juno-grid-column').style.getPropertyValue('width')).toBe('73%') - expect(document.querySelector('.juno-grid-column').style.getPropertyValue('flex-shrink')).toBe('0') - expect(document.querySelector('.juno-grid-column').style.getPropertyValue('flex-basis')).toBe('73%') - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/GridColumn/index.js b/libs/juno-ui-components/src/components/GridColumn/index.js deleted file mode 100644 index 09e5a13c4..000000000 --- a/libs/juno-ui-components/src/components/GridColumn/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { GridColumn } from "./GridColumn.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/GridRow/GridRow.component.js b/libs/juno-ui-components/src/components/GridRow/GridRow.component.js deleted file mode 100644 index 73660a3db..000000000 --- a/libs/juno-ui-components/src/components/GridRow/GridRow.component.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const gridRowBaseStyles = ` - jn-flex - jn-flex-wrap - jn-m-grid-row -` -/** -A grid row to hold GridColumn elements inside a Grid. -*/ -export const GridRow = ({ - children, - className, - ...props -}) => { - return ( - <div className={`juno-grid-row ${gridRowBaseStyles} ${className}`} {...props} > - {children} - </div> - ) -} - - -GridRow.propTypes = { - /** The children to render in the grid row */ - children: PropTypes.node, - /** Add a class to the grid row */ - className: PropTypes.string, -} - -GridRow.defaultProps = { - children: null, - className: "" -} diff --git a/libs/juno-ui-components/src/components/GridRow/GridRow.stories.js b/libs/juno-ui-components/src/components/GridRow/GridRow.stories.js deleted file mode 100644 index 434714855..000000000 --- a/libs/juno-ui-components/src/components/GridRow/GridRow.stories.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { GridRow } from './index.js'; -import { GridColumn } from '../GridColumn/GridColumn.component.js'; - -export default { - title: 'Layout/Grid/GridRow', - component: GridRow, - argTypes: { - children: { - control: false, - }, - }, - decorators: [(Story) => <Story className="jn-bg-juno-blue-3 jn-text-juno-grey-blue" />], -}; - -// for the decorator to work like this (passing props to the story) we have to access the passed props from the decorator -// from the context. This might be storybook 6.x-specific. Double check when we upgrade to storybook 7.x -const Template = ({ columns, ...args }, context) => ( - <GridRow {...args} className={context.className}></GridRow> -); - -export const Default = { - render: Template, - - args: { - children: [ - <GridColumn key="1">Column</GridColumn>, - <GridColumn key="2">Column</GridColumn>, - <GridColumn key="3">Column</GridColumn>, - <GridColumn key="4">Column</GridColumn>, - <GridColumn key="5">Column</GridColumn>, - <GridColumn key="6">Column</GridColumn>, - <GridColumn key="7">Column</GridColumn>, - <GridColumn key="8">Column</GridColumn>, - <GridColumn key="9">Column</GridColumn>, - <GridColumn key="10">Column</GridColumn>, - <GridColumn key="11">Column</GridColumn>, - <GridColumn key="12">Column</GridColumn>, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/GridRow/GridRow.test.js b/libs/juno-ui-components/src/components/GridRow/GridRow.test.js deleted file mode 100644 index ca3bc0a4a..000000000 --- a/libs/juno-ui-components/src/components/GridRow/GridRow.test.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { GridRow} from "./index" - -describe("GridRow", () => { - - test("renders a Grid row", async () => { - render(<GridRow data-testid="my-grid-row" />) - expect(screen.getByTestId("my-grid-row")).toBeInTheDocument() - }) - - test("renders a custom className", async () => { - render(<GridRow data-testid="my-grid-row" className="my-grid-row-class" />) - expect(screen.getByTestId("my-grid-row")).toHaveClass("my-grid-row-class") - }) - -}) \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/GridRow/index.js b/libs/juno-ui-components/src/components/GridRow/index.js deleted file mode 100644 index 9a43e32f6..000000000 --- a/libs/juno-ui-components/src/components/GridRow/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { GridRow } from "./GridRow.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Icon/Icon.component.js b/libs/juno-ui-components/src/components/Icon/Icon.component.js deleted file mode 100644 index a82e1f991..000000000 --- a/libs/juno-ui-components/src/components/Icon/Icon.component.js +++ /dev/null @@ -1,826 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { forwardRef } from "react" -import PropTypes from "prop-types" - -/* Import Icons here. The icon svgs in the icons folder correspond to the respective "xyz_24px.svg" from material-ui icons. - */ -import AccessTime from "@material-design-icons/svg/filled/access_time.svg" -import AccountCircle from "@material-design-icons/svg/filled/account_circle.svg" -import AddCircle from "@material-design-icons/svg/filled/add_circle.svg" -import AutoAwesomeMosaic from "@material-design-icons/svg/filled/auto_awesome_mosaic.svg" -import AutoAwesomeMotion from "@material-design-icons/svg/filled/auto_awesome_motion.svg" -import Bolt from "@material-design-icons/svg/filled/bolt.svg" -import CalendarToday from "@material-design-icons/svg/filled/calendar_today.svg" -import Cancel from "@material-design-icons/svg/filled/cancel.svg" -import Check from "@material-design-icons/svg/filled/check.svg" -import CheckCircle from "@material-design-icons/svg/filled/check_circle.svg" -import ChevronLeft from "@material-design-icons/svg/outlined/chevron_left.svg" -import ChevronRight from "@material-design-icons/svg/outlined/chevron_right.svg" -import Close from "@material-design-icons/svg/filled/close.svg" -import ContentCopy from "@material-design-icons/svg/outlined/content_copy.svg" -import Danger from "./icons/juno-danger.svg" -import Dangerous from "@material-design-icons/svg/filled/dangerous.svg" -import Download from "@material-design-icons/svg/filled/download.svg" -import DeleteForever from "@material-design-icons/svg/filled/delete_forever.svg" -import Description from "@material-design-icons/svg/filled/description.svg" -import DNS from "@material-design-icons/svg/filled/dns.svg" -import Edit from "@material-design-icons/svg/filled/edit.svg" -import Error from "@material-design-icons/svg/filled/dangerous.svg" -import ErrorOutline from "@material-design-icons/svg/outlined/error_outline.svg" -import ExitToApp from "@material-design-icons/svg/outlined/exit_to_app.svg" -import ExpandLess from "@material-design-icons/svg/outlined/expand_less.svg" -import ExpandMore from "@material-design-icons/svg/outlined/expand_more.svg" -import FilterAlt from "@material-design-icons/svg/filled/filter_alt.svg" -import Forum from "@material-design-icons/svg/filled/forum.svg" -import Help from "@material-design-icons/svg/filled/help.svg" -import Home from "./icons/home_sharp.svg" -import Info from "@material-design-icons/svg/filled/info.svg" -import Comment from "@material-design-icons/svg/filled/comment.svg" -import ManageAccounts from "@material-design-icons/svg/filled/manage_accounts.svg" -import MonitorHeart from "@material-design-icons/svg/outlined/monitor_heart.svg" -import MoreVert from "@material-design-icons/svg/outlined/more_vert.svg" -import NotificationsOff from "@material-design-icons/svg/outlined/notifications_off.svg" -import OpenInBrowser from "@material-design-icons/svg/outlined/open_in_browser.svg" -import OpenInNew from "@material-design-icons/svg/outlined/open_in_new.svg" -import Place from "./icons/place.svg" -import Success from "@material-design-icons/svg/filled/check_box.svg" -import Search from "@material-design-icons/svg/outlined/search.svg" -import SeverityLow from "./icons/juno_severity_low.svg" -import SeverityMedium from "./icons/juno_severity_medium.svg" -import SeverityHigh from "./icons/juno_severity_high.svg" -import SeverityCritical from "./icons/juno_severity_critical.svg" -import Warning from "@material-design-icons/svg/filled/warning.svg" -import Widgets from "@material-design-icons/svg/filled/widgets.svg" - -/** -Generic Icon component. -*/ -// hover style needs to be revisited. only works if no icon color was passed -const anchorIconStyles = ` - jn-text-current - hover:jn-text-theme-high - focus:jn-outline-none - focus-visible:jn-ring-2 - focus-visible:jn-ring-theme-focus - focus-visible:jn-ring-offset-1 - focus-visible:jn-ring-offset-theme-focus - disabled:jn-opacity-50 - disabled:jn-cursor-not-allowed -` - -// hover style needs to be revisited. only works if no icon color was passed -const buttonIconStyles = ` - hover:jn-text-theme-high - focus:jn-outline-none - focus-visible:jn-ring-2 - focus-visible:jn-ring-theme-focus - focus-visible:jn-ring-offset-1 - focus-visible:jn-ring-offset-theme-focus - disabled:jn-opacity-50 - disabled:jn-cursor-not-allowed -` - -const wrapperStyles = ` - jn-leading-none -` -// export all known icons as an array of their names to be used with PropTypes here and from other components: -export const knownIcons = [ - "accessTime", - "accountCircle", - "addCircle", - "autoAwesomeMosaic", - "autoAwesomeMotion", - "bolt", - "calendarToday", - "cancel", - "check", - "checkCircle", - "chevronLeft", - "chevronRight", - "close", - "comment", - "contentCopy", - "danger", - "dangerous", - "default", - "deleteForever", - "description", - "dns", - "download", - "edit", - "error", - "errorOutline", - "exitToApp", - "expandLess", - "expandMore", - "filterAlt", - "forum", - "help", - "home", - "info", - "manageAccounts", - "monitorHeart", - "moreVert", - "notificationsOff", - "openInBrowser", - "openInNew", - "place", - "search", - "severityLow", - "severityMedium", - "severityHigh", - "severityCritical", - "success", - "warning", - "widgets", -] - -const getColoredSizedIcon = ({ - icon, - color, - size, - title, - iconClassName, - ...iconProps -}) => { - const iconClass = `juno-icon juno-icon-${icon} jn-fill-current ${color} ${iconClassName}` - - switch (icon) { - case "accessTime": - return ( - <AccessTime - width={size} - height={size} - className={iconClass} - alt="time" - title={title ? title : "Time"} - role="img" - {...iconProps} - /> - ) - case "accountCircle": - return ( - <AccountCircle - width={size} - height={size} - className={iconClass} - alt="account" - title={title ? title : "Account"} - role="img" - {...iconProps} - /> - ) - case "addCircle": - return ( - <AddCircle - width={size} - height={size} - className={iconClass} - alt="add" - title={title ? title : "Add"} - role="img" - {...iconProps} - /> - ) - case "autoAwesomeMosaic": - return ( - <AutoAwesomeMosaic - width={size} - height={size} - className={iconClass} - alt="mosaic" - title={title ? title : "Mosaic"} - role="img" - {...iconProps} - /> - ) - case "autoAwesomeMotion": - return ( - <AutoAwesomeMotion - width={size} - height={size} - className={iconClass} - alt="items stacked behind each other" - title={title ? title : "Items stacked behind each other"} - role="img" - {...iconProps} - /> - ) - case "bolt": - return ( - <Bolt - width={size} - height={size} - className={iconClass} - alt="bolt" - title={title ? title : "Bolt"} - role="img" - {...iconProps} - /> - ) - case "calendarToday": - return ( - <CalendarToday - width={size} - height={size} - className={iconClass} - alt="calendar" - title={title ? title : "Calendar"} - role="img" - {...iconProps} - /> - ) - case "cancel": - return ( - <Cancel - width={size} - height={size} - className={iconClass} - alt="cancel" - title={title ? title : "Cancel"} - role="img" - {...iconProps} - /> - ) - case "check": - return ( - <Check - width={size} - height={size} - className={iconClass} - alt="check" - title={title ? title : "Check"} - role="img" - {...iconProps} - /> - ) - case "checkCircle": - return ( - <CheckCircle - width={size} - height={size} - className={iconClass} - alt="checkCircle" - title={title ? title : "CheckCircle"} - role="img" - {...iconProps} - /> - ) - case "chevronLeft": - return ( - <ChevronLeft - width={size} - height={size} - className={iconClass} - alt="chevronLeft" - title={title ? title : "ChevronLeft"} - role="img" - {...iconProps} - /> - ) - case "chevronRight": - return ( - <ChevronRight - width={size} - height={size} - className={iconClass} - alt="chevronRight" - title={title ? title : "ChevronRight"} - role="img" - {...iconProps} - /> - ) - case "close": - return ( - <Close - width={size} - height={size} - className={iconClass} - alt="close" - title={title ? title : "Close"} - role="img" - {...iconProps} - /> - ) - case "comment": - return ( - <Comment - width={size} - height={size} - className={iconClass} - alt="comment" - title={title ? title : "Comment"} - role="img" - {...iconProps} - /> - ) - case "contentCopy": - return ( - <ContentCopy - width={size} - height={size} - className={iconClass} - alt="copy" - title={title ? title : "Copy"} - role="img" - {...iconProps} - /> - ) - case "danger": - return ( - <Danger - width={size} - height={size} - className={iconClass} - alt="danger" - title={title ? title : "Danger"} - role="img" - {...iconProps} - /> - ) - case "dangerous": - return ( - <Dangerous - width={size} - height={size} - className={iconClass} - alt="dangerous" - title={title ? title : "Dangerous"} - role="img" - {...iconProps} - /> - ) - case "deleteForever": - return ( - <DeleteForever - width={size} - height={size} - className={iconClass} - alt="delete forever" - title={title ? title : "Delete Forever"} - role="img" - {...iconProps} - /> - ) - case "description": - return ( - <Description - width={size} - height={size} - className={iconClass} - alt="description" - title={title ? title : "Description"} - role="img" - {...iconProps} - /> - ) - case "dns": - return ( - <DNS - width={size} - height={size} - className={iconClass} - alt="service" - title={title ? title : "Service"} - role="img" - {...iconProps} - /> - ) - case "download": - return ( - <Download - width={size} - height={size} - className={iconClass} - alt="download" - title={title ? title : "download"} - role="img" - {...iconProps} - /> - ) - case "edit": - return ( - <Edit - width={size} - height={size} - className={iconClass} - alt="edit" - title={title ? title : "Edit"} - role="img" - {...iconProps} - /> - ) - case "error": - return ( - <Error - width={size} - height={size} - className={iconClass} - alt="error" - title={title ? title : "Error"} - role="img" - {...iconProps} - /> - ) - case "errorOutline": - return ( - <ErrorOutline - width={size} - height={size} - className={iconClass} - alt="error outline" - title={title ? title : "Error"} - role="img" - {...iconProps} - /> - ) - case "exitToApp": - return ( - <ExitToApp - width={size} - height={size} - className={iconClass} - alt="exit to other app" - title={title ? title : "Exit to app"} - role="img" - {...iconProps} - /> - ) - case "expandLess": - return ( - <ExpandLess - width={size} - height={size} - className={iconClass} - alt="expand less" - title={title ? title : "Expand Less"} - role="img" - {...iconProps} - /> - ) - case "expandMore": - return ( - <ExpandMore - width={size} - height={size} - className={iconClass} - alt="expand more" - title={title ? title : "Expand More"} - role="img" - {...iconProps} - /> - ) - case "filterAlt": - return ( - <FilterAlt - width={size} - height={size} - className={iconClass} - alt="filter" - title={title ? title : "Filter"} - role="img" - {...iconProps} - /> - ) - case "forum": - return ( - <Forum - width={size} - height={size} - className={iconClass} - alt="forum" - title={title ? title : "Forum"} - role="img" - {...iconProps} - /> - ) - case "help": - return ( - <Help - width={size} - height={size} - className={iconClass} - alt="help" - title={title ? title : "Help"} - role="img" - {...iconProps} - /> - ) - case "home": - return ( - <Home - width={size} - height={size} - className={iconClass} - alt="home" - title={title ? title : "Home"} - role="img" - {...iconProps} - /> - ) - case "info": - return ( - <Info - width={size} - height={size} - className={iconClass} - alt="info" - title={title ? title : "Info"} - role="img" - {...iconProps} - /> - ) - case "manageAccounts": - return ( - <ManageAccounts - width={size} - height={size} - className={iconClass} - alt="user account configuration" - title={title ? title : "User account configuration"} - role="img" - {...iconProps} - /> - ) - case "monitorHeart": - return ( - <MonitorHeart - width={size} - height={size} - className={iconClass} - alt="heart monitor" - title={title ? title : "Heart monitor"} - role="img" - {...iconProps} - /> - ) - case "moreVert": - return ( - <MoreVert - width={size} - height={size} - className={iconClass} - alt="more" - title={title ? title : "More"} - role="img" - {...iconProps} - /> - ) - case "notificationsOff": - return ( - <NotificationsOff - width={size} - height={size} - className={iconClass} - alt="notifications off" - title={title ? title : "Notifications off"} - role="img" - {...iconProps} - /> - ) - case "openInBrowser": - return ( - <OpenInBrowser - width={size} - height={size} - className={iconClass} - alt="open in browser" - title={title ? title : "Open in browser"} - role="img" - {...iconProps} - /> - ) - case "openInNew": - return ( - <OpenInNew - width={size} - height={size} - className={iconClass} - alt="open in new tab" - title={title ? title : "Open in new tab"} - role="img" - {...iconProps} - /> - ) - case "place": - return ( - <Place - width={size} - height={size} - className={iconClass} - alt="location" - title={title ? title : "Location"} - role="img" - {...iconProps} - /> - ) - case "search": - return ( - <Search - width={size} - height={size} - className={iconClass} - alt="search" - title={title ? title : "Search"} - role="img" - {...iconProps} - /> - ) - case "severityLow": - return ( - <SeverityLow - width={size} - height={size} - className={iconClass} - alt="Severity low" - title={title ? title : "Severity Low"} - role="img" - {...iconProps} - /> - ) - case "severityMedium": - return ( - <SeverityMedium - width={size} - height={size} - className={iconClass} - alt="Severity medium" - title={title ? title : "Severity Medium"} - role="img" - {...iconProps} - /> - ) - case "severityHigh": - return ( - <SeverityHigh - width={size} - height={size} - className={iconClass} - alt="Severity high" - title={title ? title : "Severity High"} - role="img" - {...iconProps} - /> - ) - case "severityCritical": - return ( - <SeverityCritical - width={size} - height={size} - className={iconClass} - alt="Severity critical" - title={title ? title : "Severity Critical"} - role="img" - {...iconProps} - /> - ) - case "success": - return ( - <Success - width={size} - height={size} - className={iconClass} - alt="success" - title={title ? title : "Success"} - role="img" - {...iconProps} - /> - ) - case "widgets": - return ( - <Widgets - width={size} - height={size} - className={iconClass} - alt="widgets" - title={title ? title : "Widgets"} - role="img" - {...iconProps} - /> - ) - case "warning": - return ( - <Warning - width={size} - height={size} - className={iconClass} - alt="warning" - title={title ? title : "Warning"} - role="img" - {...iconProps} - /> - ) - case "default": // keep explicit default case to allow consuming components to use 'default' w/o throwing warnings - return ( - <Help - width={size} - height={size} - className={iconClass} - alt="help" - title={title ? title : "Help"} - role="img" - {...iconProps} - /> - ) - default: - return ( - <Help - width={size} - height={size} - className={iconClass} - alt="help" - title={title ? title : "Help"} - role="img" - {...iconProps} - /> - ) - } -} - -export const Icon = forwardRef( - ( - { icon, color, size, title, className, href, disabled, onClick, ...props }, - ref - ) => { - // if href or onClick was passed, then we want to add the passed classes and passed arbitrary props to the button or anchor - // otherwise add the passed classes/props to the icon itself - const iconClassName = href || onClick ? "" : className - const iconProps = href || onClick ? {} : props - - const icn = getColoredSizedIcon({ - icon, - color, - size, - title, - iconClassName, - ...iconProps, - }) - - const handleClick = (event) => { - onClick && onClick(event) - } - - const button = ( - <button - onClick={handleClick} - className={`juno-icon-button ${buttonIconStyles} ${className}`} - aria-label={title || icon} - disabled={disabled} - ref={ref} - {...props} - > - {icn} - </button> - ) - - const anchor = ( - <a - href={href} - className={`juno-icon-link ${anchorIconStyles} ${className}`} - aria-label={title || icon} - ref={ref} - {...props} - > - {icn} - </a> - ) - - /* render an <a> if href was passed, otherwise render button if onClick was passes, otherwise render plain icon: */ - /* if plain icon, add ref to the icon. In the other cases the ref goes on the anchor or button */ - return href ? anchor : onClick ? button : <span ref={ref}>{icn}</span> - } -) - -Icon.propTypes = { - /** The icon to display */ - icon: PropTypes.oneOf(knownIcons), - /** By default, Icons will use the `color` of the current context. In order to use a different color just for the icon, a text color class can be passed. These begin with "jn-text-". */ - color: PropTypes.string, - /** The size of the icon as a number of pixels (without "px": "16" will render an icon of 16px x 16px)*/ - size: PropTypes.string, - /** The title of the icon. Important for accessibility, will also show as a tooltip: */ - title: PropTypes.string, - /** A custom className */ - className: PropTypes.string, - /** Optionally specify an href. This will render the Icon inside an <code><a></code> element with the given url. */ - href: PropTypes.string, - /** Disable the Icon. Only applicable when rendering as a button by passing an onClick handler, too. */ - disabled: PropTypes.bool, - /** Optionally specify a click handler. This will render the icon inside a <code><button></code> with the given handler. */ - onClick: PropTypes.func, -} - -Icon.defaultProps = { - icon: null, - color: "", - size: "24", - title: "", - className: "", - href: "", - disabled: false, - onClick: undefined, -} diff --git a/libs/juno-ui-components/src/components/Icon/Icon.stories.js b/libs/juno-ui-components/src/components/Icon/Icon.stories.js deleted file mode 100644 index c32c7df70..000000000 --- a/libs/juno-ui-components/src/components/Icon/Icon.stories.js +++ /dev/null @@ -1,403 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Icon } from './index.js'; - -export default { - title: 'Components/Icon', - component: Icon, - argTypes: {}, - parameters: { - docs: { - description: { - component: - "A generic icon component. Accepts text color classes for color. Please note that the 'jn-' prefix for tailwind classes is only necessary within the juno ui design system itself. When using icons in your own applications use the normal tailwing-generated text color classes starting with 'text-'", - }, - }, - }, -}; - -export const Default = { - args: { - icon: 'help', - color: 'jn-global-text', - }, -}; - -export const Info_Colored = { - args: { - icon: 'info', - color: 'jn-text-theme-info', - }, -}; - -export const Danger_Colored = { - args: { - icon: 'danger', - color: 'jn-text-theme-danger', - }, -}; - -export const Success_Colored = { - args: { - icon: 'success', - color: 'jn-text-theme-success', - }, -}; - -export const Warning_Colored = { - args: { - icon: 'warning', - color: 'jn-text-theme-warning', - }, -}; - -export const ThemeColor = { - args: { - icon: 'help', - color: 'jn-global-text', - }, -}; - -export const Smaller = { - args: { - ...Default.args, - icon: 'help', - size: '18', - }, -}; - -export const Larger = { - args: { - ...Default.args, - icon: 'help', - size: '64', - }, -}; - -export const IconAsLink = { - args: { - ...Default.args, - href: '#', - title: 'The Icon is a link', - }, -}; - -export const IconAsButton = { - args: { - ...Default.args, - title: 'The Icon is a button', - onClick: () => { - console.log('click'); - }, - }, -}; - -export const Account_Circle = { - args: { - ...Default.args, - icon: 'accountCircle', - }, -}; - -export const Add_Circle = { - args: { - ...Default.args, - icon: 'addCircle', - }, -}; - -export const Auto_Awesome_Mosaic = { - args: { - ...Default.args, - icon: 'autoAwesomeMosaic', - }, -}; - -export const Auto_Awesome_Motion = { - args: { - ...Default.args, - icon: 'autoAwesomeMotion', - }, -}; - -export const Bolt = { - args: { - ...Default.args, - icon: 'bolt', - }, -}; - -export const Cancel = { - args: { - ...Default.args, - icon: 'cancel', - }, -}; - -export const Check = { - args: { - icon: 'check', - }, -}; - -export const CheckCircle = { - args: { - icon: 'checkCircle', - }, -}; - -export const ChevronLeft = { - args: { - icon: 'chevronLeft', - }, -}; - -export const ChevronRight = { - args: { - icon: 'chevronRight', - }, -}; - -export const Close = { - args: { - icon: 'close', - }, -}; - -export const Comment = { - args: { - ...Default.args, - icon: 'comment', - }, -}; - -export const ContentCopy = { - args: { - icon: 'contentCopy', - }, -}; - -export const Danger = { - args: { - ...Default.args, - icon: 'danger', - }, -}; - -export const Dangerous = { - args: { - icon: 'dangerous', - }, -}; - -export const DeleteForever = { - args: { - icon: 'deleteForever', - }, -}; - -export const Description = { - args: { - ...Default.args, - icon: 'description', - }, -}; - -export const DNS = { - args: { - ...Default.args, - icon: 'dns', - }, -}; - -export const Download = { - args: { - icon: 'download', - }, -}; - -export const Edit = { - args: { - ...Default.args, - icon: 'edit', - }, -}; - -export const Error = { - args: { - ...Default.args, - icon: 'dangerous', - }, -}; - -export const Error_Outline = { - args: { - ...Default.args, - icon: 'errorOutline', - }, -}; - -export const Exit_To_App = { - args: { - ...Default.args, - icon: 'exitToApp', - }, -}; - -export const Expand_Less = { - args: { - ...Default.args, - icon: 'expandLess', - }, -}; - -export const Expand_More = { - args: { - ...Default.args, - icon: 'expandMore', - }, -}; - -export const Filter_Alt = { - args: { - ...Default.args, - icon: 'filterAlt', - }, -}; - -export const Forum = { - args: { - ...Default.args, - icon: 'forum', - }, -}; - -export const Help = { - args: { - ...Default.args, - icon: 'help', - }, -}; - -export const Home = { - args: { - ...Default.args, - icon: 'home', - }, -}; - -export const Info = { - args: { - ...Default.args, - icon: 'info', - }, -}; - -export const Manage_Accounts = { - args: { - ...Default.args, - icon: 'manageAccounts', - }, -}; - -export const Monitor_Heart = { - args: { - ...Default.args, - icon: 'monitorHeart', - }, -}; - -export const More_Vert = { - args: { - ...Default.args, - icon: 'moreVert', - }, -}; - -export const Notifications_Off = { - args: { - ...Default.args, - icon: 'notificationsOff', - }, -}; - -export const Open_In_Browser = { - args: { - ...Default.args, - icon: 'openInBrowser', - }, -}; - -export const Open_In_New = { - args: { - ...Default.args, - icon: 'openInNew', - }, -}; - -export const Place = { - args: { - ...Default.args, - icon: 'place', - }, -}; - -export const Search = { - args: { - ...Default.args, - icon: 'search', - }, -}; - -export const SeverityLow = { - args: { - ...Default.args, - icon: 'severityLow', - }, -}; - -export const SeverityMedium = { - args: { - ...Default.args, - icon: 'severityMedium', - }, -}; - -export const SeverityHigh = { - args: { - ...Default.args, - icon: 'severityHigh', - }, -}; - -export const SeverityCritical = { - args: { - ...Default.args, - icon: 'severityCritical', - }, -}; - -export const Success = { - args: { - ...Default.args, - icon: 'success', - }, -}; - -export const Warning = { - args: { - ...Default.args, - icon: 'warning', - }, -}; - -export const Widgets = { - args: { - ...Default.args, - icon: 'widgets', - }, -}; diff --git a/libs/juno-ui-components/src/components/Icon/Icon.test.js b/libs/juno-ui-components/src/components/Icon/Icon.test.js deleted file mode 100644 index c68e4faac..000000000 --- a/libs/juno-ui-components/src/components/Icon/Icon.test.js +++ /dev/null @@ -1,381 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { Icon } from "./index" - -describe("Icon", () => { - test("renders an Icon as passed", async () => { - render(<Icon icon="warning" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "warning") - }) - - test("renders a custom className as passed", async () => { - render(<Icon className="my-custom-class" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveClass("my-custom-class") - }) - - test("renders a default icon when none was passed", async () => { - render(<Icon />) - expect(screen.getByRole("img")).toBeInTheDocument() - // note: currently the default icon is the help icon - expect(screen.getByRole("img")).toHaveAttribute("alt", "help") - }) - - test("renders an Icon with no text class by default so that text color is inherited from context", async () => { - render(<Icon />) - expect(screen.getByRole("img")).toBeInTheDocument() - // check that there is no class that contains 'text-' - expect(screen.getByRole("img")).not.toHaveAttribute( - "class", - expect.stringContaining("text-") - ) - }) - - test("renders an Icon with color as passed", async () => { - render(<Icon color="text-juno-blue" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveClass("text-juno-blue") - }) - - test("renders an Icon with default size", async () => { - render(<Icon />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("width", "24") - expect(screen.getByRole("img")).toHaveAttribute("height", "24") - }) - - test("renders an Icon with size as passed", async () => { - render(<Icon size="48" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("width", "48") - expect(screen.getByRole("img")).toHaveAttribute("height", "48") - }) - - test("renders a custom alt text instead of default when passed", async () => { - render(<Icon alt="my super custom icon alt text" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute( - "alt", - "my super custom icon alt text" - ) - }) - - // Test individual icons: - - test("renders an accessTime icon", async () => { - render(<Icon icon="accessTime" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "time") - }) - - test("renders an accountCircle icon", async () => { - render(<Icon icon="accountCircle" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "account") - }) - - test("renders an addCircle icon", async () => { - render(<Icon icon="addCircle" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "add") - }) - - test("renders a autoAwesomeMosaic icon", async () => { - render(<Icon icon="autoAwesomeMosaic" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "mosaic") - }) - - test("renders a autoAwesomeMotion icon", async () => { - render(<Icon icon="autoAwesomeMotion" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute( - "alt", - "items stacked behind each other" - ) - }) - - test("renders a bolt icon", async () => { - render(<Icon icon="bolt" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "bolt") - }) - - test("renders a cancel icon", async () => { - render(<Icon icon="cancel" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "cancel") - }) - - test("renders a check icon", async () => { - render(<Icon icon="check" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "check") - }) - - test("renders a checkCircle icon", async () => { - render(<Icon icon="checkCircle" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "checkCircle") - }) - - test("renders a chevronLeft icon", async () => { - render(<Icon icon="chevronLeft" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "chevronLeft") - }) - - test("renders a chevronRight icon", async () => { - render(<Icon icon="chevronRight" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "chevronRight") - }) - - test("renders a close icon", async () => { - render(<Icon icon="close" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "close") - }) - - test("renders a copy icon", async () => { - render(<Icon icon="contentCopy" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "copy") - }) - - test("renders a danger icon", async () => { - render(<Icon icon="danger" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "danger") - }) - - test("renders a dangerous icon", async () => { - render(<Icon icon="dangerous" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "dangerous") - }) - - test("renders a deleteForever icon", async () => { - render(<Icon icon="deleteForever" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "delete forever") - }) - - test("renders a description icon", async () => { - render(<Icon icon="description" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "description") - }) - - test("renders a dns icon", async () => { - render(<Icon icon="dns" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "service") - }) - - test("renders an edit icon", async () => { - render(<Icon icon="edit" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "edit") - }) - - test("renders an error icon", async () => { - render(<Icon icon="error" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "error") - }) - - test("renders an outlined error icon", async () => { - render(<Icon icon="errorOutline" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "error outline") - }) - - test("renders an exitToApp icon", async () => { - render(<Icon icon="exitToApp" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "exit to other app") - }) - - test("renders an expandLess icon", async () => { - render(<Icon icon="expandLess" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "expand less") - }) - - test("renders an expandMore icon", async () => { - render(<Icon icon="expandMore" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "expand more") - }) - - test("renders an filterAlt icon", async () => { - render(<Icon icon="filterAlt" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "filter") - }) - - test("renders an forum icon", async () => { - render(<Icon icon="forum" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "forum") - }) - - test("renders a forum help icon", async () => { - render(<Icon icon="help" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "help") - }) - - test("renders a Home icon", async () => { - render(<Icon icon="home" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "home") - }) - - test("renders an info icon", async () => { - render(<Icon icon="info" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "info") - }) - - test("renders a comment icon", async () => { - render(<Icon icon="comment" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "comment") - }) - - test("renders a manageAccounts icon", async () => { - render(<Icon icon="manageAccounts" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute( - "alt", - "user account configuration" - ) - }) - - test("renders an openInBrowser icon", async () => { - render(<Icon icon="openInBrowser" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "open in browser") - }) - - test("renders a place icon", async () => { - render(<Icon icon="place" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "location") - }) - - test("renders a search icon", async () => { - render(<Icon icon="search" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "search") - }) - - test("renders a success icon", async () => { - render(<Icon icon="success" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "success") - }) - - test("renders a warning icon", async () => { - render(<Icon icon="warning" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("alt", "warning") - }) - - test("renders a custom title", async () => { - render(<Icon title="My custom title" />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("title", "My custom title") - }) - - test("renders an <a> element if href is passed as prop", async () => { - render(<Icon href="#" />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute("href", "#") - }) - - test("renders an <a> element with correct aria-label-attribute as passed", async () => { - render(<Icon href="#" title="my link title" />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute( - "aria-label", - "my link title" - ) - }) - - test("renders an <a> element with correct aria-label-attribute fallback if not passed", async () => { - render(<Icon href="#" icon="warning" />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute("aria-label", "warning") - }) - - test("renders a <button> element if a click handler is passed", async () => { - const handleClick = jest.fn() - render(<Icon onClick={handleClick} />) - expect(screen.getByRole("button")).toBeInTheDocument() - }) - - test("renders a <button> element with correct aria-label-attribute as passed", async () => { - const handleClick = jest.fn() - render(<Icon onClick={handleClick} title="my-button-title" />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute( - "aria-label", - "my-button-title" - ) - }) - - test("renders a <button> element with correct aria-label-attribute fallback if not passed", async () => { - const handleClick = jest.fn() - render(<Icon onClick={handleClick} icon="warning" />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveAttribute("aria-label", "warning") - }) - - test("renders a disabled button element as passed", async () => { - const handleClick = jest.fn() - render(<Icon onClick={handleClick} disabled />) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeDisabled() - }) - - test("an onClick handler is called as passed", () => { - const handleClick = jest.fn() - render(<Icon onClick={handleClick} />) - screen.getByRole("button").click() - expect(handleClick).toHaveBeenCalled() - }) - - test("does not execute onClick handler when disabled", async () => { - const handleClick = jest.fn() - render(<Icon onClick={handleClick} disabled />) - screen.getByRole("button").click() - expect(handleClick).not.toHaveBeenCalled() - }) - - test("renders an <a> element and ignore onClick handler if both href and onClick handler are passed", async () => { - const handleClick = jest.fn() - render(<Icon href="#" onClick={handleClick} />) - expect(screen.getByRole("link")).toBeInTheDocument() - expect(screen.getByRole("link")).toHaveAttribute("href", "#") - screen.getByRole("link").click() - expect(handleClick).not.toHaveBeenCalled() - }) - - // Test all props: - - test("renders all props as passed", async () => { - render(<Icon id="icon-1" data-lolol={true} />) - expect(screen.getByRole("img")).toBeInTheDocument() - expect(screen.getByRole("img")).toHaveAttribute("id", "icon-1") - expect(screen.getByRole("img")).toHaveAttribute("data-lolol") - }) -}) diff --git a/libs/juno-ui-components/src/components/Icon/icons/home_sharp.svg b/libs/juno-ui-components/src/components/Icon/icons/home_sharp.svg deleted file mode 100644 index add764f0b..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/home_sharp.svg +++ /dev/null @@ -1,6 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8h5z"/></svg> \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Icon/icons/juno-danger.svg b/libs/juno-ui-components/src/components/Icon/icons/juno-danger.svg deleted file mode 100644 index cb8cfcd53..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/juno-danger.svg +++ /dev/null @@ -1,8 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <path d="M22,17.9999996 L22,19.9999996 L2,19.9999996 L2,17.9999996 L22,17.9999996 Z M12,6.428571 C14.7642857,6.428571 17.0146825,8.23991359 17.1375716,10.5179164 L17.1428571,10.7142853 L17.1428571,16.7142853 L6.85714286,16.7142853 L6.85714286,10.7142853 L6.86242835,10.5179164 C6.98531746,8.23991359 9.23571429,6.428571 12,6.428571 Z M12,7.71428529 L12,15.428571 L15.8571429,15.428571 L15.8571429,11.1428567 L15.851803,10.960591 C15.745448,9.15003461 14.0636603,7.71428529 12,7.71428529 Z M19.075912,3.96838198 L20.490712,5.38218198 L18.370012,7.50438202 L16.955212,6.09058202 L19.075912,3.96838198 Z M4.956739,3.939208 L7.078039,6.060508 L5.663839,7.474708 L3.542539,5.353408 L4.956739,3.939208 Z M13,1.428571 L13,4.428571 L11,4.428571 L11,1.428571 L13,1.428571 Z"></path> -</svg> \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_critical.svg b/libs/juno-ui-components/src/components/Icon/icons/juno_severity_critical.svg deleted file mode 100644 index 7bd6316f8..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_critical.svg +++ /dev/null @@ -1,10 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.7956 22H14.5955L15.7956 14.2222H11.5955C10.8994 14.2222 10.9114 13.8667 11.1395 13.4889C11.3675 13.1111 11.1995 13.4 11.2235 13.3556C12.7715 10.8222 15.0995 7.04445 18.1956 2H19.3956L18.1956 9.77778H22.3957C22.9837 9.77778 23.0677 10.1444 22.9597 10.3444L22.8757 10.5111C18.1476 18.1667 15.7956 22 15.7956 22Z"/> -<path d="M2 17H8V23H2V17Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M2 1L2 15H8V1H2Z"/> -</svg> diff --git a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_high.svg b/libs/juno-ui-components/src/components/Icon/icons/juno_severity_high.svg deleted file mode 100644 index 5cc08d58b..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_high.svg +++ /dev/null @@ -1,11 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.7956 22H14.5955L15.7956 14.2222H11.5955C10.8994 14.2222 10.9114 13.8667 11.1395 13.4889C11.3675 13.1111 11.1995 13.4 11.2235 13.3556C12.7715 10.8222 15.0995 7.04444 18.1956 2L19.3956 2L18.1956 9.77778H22.3957C22.9837 9.77778 23.0677 10.1444 22.9597 10.3444L22.8757 10.5111C18.1476 18.1667 15.7956 22 15.7956 22Z"/> -<path d="M2 17H8V23H2V17Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M2 9V15H8V9H2Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M2 1V7H8V1H2Z"/> -</svg> diff --git a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_low.svg b/libs/juno-ui-components/src/components/Icon/icons/juno_severity_low.svg deleted file mode 100644 index 9ce2c516c..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_low.svg +++ /dev/null @@ -1,11 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.7956 22H14.5955L15.7956 14.2222H11.5955C10.8994 14.2222 10.9114 13.8667 11.1395 13.4889C11.3675 13.1111 11.1995 13.4 11.2235 13.3556C12.7715 10.8222 15.0995 7.04444 18.1956 2L19.3956 2L18.1956 9.77778H22.3957C22.9837 9.77778 23.0677 10.1444 22.9597 10.3444L22.8757 10.5111C18.1476 18.1667 15.7956 22 15.7956 22Z"/> -<path d="M2 17H8V23H2V17Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M7 10H3V14H7V10ZM2 9V15H8V9H2Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2H3V6H7V2ZM2 1V7H8V1H2Z"/> -</svg> diff --git a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_medium.svg b/libs/juno-ui-components/src/components/Icon/icons/juno_severity_medium.svg deleted file mode 100644 index 15473d1a0..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/juno_severity_medium.svg +++ /dev/null @@ -1,11 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.7956 22H14.5955L15.7956 14.2222H11.5955C10.8994 14.2222 10.9114 13.8667 11.1395 13.4889C11.3675 13.1111 11.1995 13.4 11.2235 13.3556C12.7715 10.8222 15.0995 7.04444 18.1956 2L19.3956 2L18.1956 9.77778H22.3957C22.9837 9.77778 23.0677 10.1444 22.9597 10.3444L22.8757 10.5111C18.1476 18.1667 15.7956 22 15.7956 22Z"/> -<path d="M2 17H8V23H2V17Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M2 9V15H8V9H2Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2H3V6H7V2ZM2 1V7H8V1H2Z"/> -</svg> diff --git a/libs/juno-ui-components/src/components/Icon/icons/place.svg b/libs/juno-ui-components/src/components/Icon/icons/place.svg deleted file mode 100644 index f65fb8ae4..000000000 --- a/libs/juno-ui-components/src/components/Icon/icons/place.svg +++ /dev/null @@ -1,6 +0,0 @@ -<!-- - ~ SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - ~ SPDX-License-Identifier: Apache-2.0 ---> - -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg> \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Icon/index.js b/libs/juno-ui-components/src/components/Icon/index.js deleted file mode 100644 index fe9173ac6..000000000 --- a/libs/juno-ui-components/src/components/Icon/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Icon } from "./Icon.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/InputGroup/InputGroup.component.js b/libs/juno-ui-components/src/components/InputGroup/InputGroup.component.js deleted file mode 100644 index e063a7262..000000000 --- a/libs/juno-ui-components/src/components/InputGroup/InputGroup.component.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack } from "../Stack/index" -import "./input-group.scss" -import PropTypes from "prop-types" - - - -/** A component to visually group Buttons, TextInput, and Select elements. */ -export const InputGroup = ({ - children, - className, - variant, - disabled, - ...props -}) => { - - const modifiedChildren = () => { - return React.Children.map(children, (child) => { - const ownVariant = child.props.variant || variant - const ownDisabled = child.props.disabled || disabled - return React.cloneElement(child, { - variant: ownVariant, - disabled: ownDisabled - }) - }) - } - - return ( - <Stack className={`juno-input-group juno-input-group-${variant} ${ disabled ? "juno-input-group-disabled" : "" } ${className}`} {...props}> - { modifiedChildren() } - </Stack> - ) -} - -InputGroup.propTypes = { - /** The children to render */ - children: PropTypes.node, - /** Pass a className to the group */ - className: PropTypes.string, - /** Passing a variant prop to the group will set all child Buttons and Select elements to use that variant, unless specified otherwise on the individual child component */ - variant: PropTypes.oneOf(["default", "primary", "primary-danger", "subdued"]), - /** Disable all elements in the InputGroup */ - disabled: PropTypes.bool, -} - -InputGroup.defaultProps = { - children: null, - className: undefined, - variant: "default", - disabled: false, -} diff --git a/libs/juno-ui-components/src/components/InputGroup/InputGroup.stories.js b/libs/juno-ui-components/src/components/InputGroup/InputGroup.stories.js deleted file mode 100644 index 0b024c4a1..000000000 --- a/libs/juno-ui-components/src/components/InputGroup/InputGroup.stories.js +++ /dev/null @@ -1,141 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { InputGroup } from './index.js'; -import { Button } from '../Button/index'; -import { NativeSelect } from '../NativeSelect/index'; -import { NativeSelectOption } from '../NativeSelectOption/index'; -import { TextInput } from '../TextInput/index'; - -export default { - title: 'WiP/InputGroup', - component: InputGroup, - argTypes: { - children: { - control: false, - }, - }, -}; - -export const Default = { - args: { - children: [<Button label="Button 1" />, <Button>Button 2</Button>, <Button label="Button 3" />], - }, -}; - -export const PrimaryInputGroup = { - args: { - variant: 'primary', - children: [ - <Button label="Primary Button" />, - <Button label="Primary Button" />, - <Button label="Primary Button" />, - ], - }, -}; - -export const PrimaryDangerInputGroup = { - args: { - variant: 'primary-danger', - children: [ - <Button label="Primary Danger Button" />, - <Button label="Primary Danger Button" variant="primary" />, - <Button label="Primary Danger Button" />, - ], - }, -}; - -export const SubduedInputGroup = { - args: { - variant: 'subdued', - children: [ - <Button label="Subdued Button" />, - <Button label="Subdued Button" />, - <Button label="Subdued Button" />, - ], - }, -}; - -export const Disabled = { - args: { - disabled: true, - children: [<Button label="Button" />, <Button label="Button" />, <Button label="Button" />], - }, -}; - -export const IconButtons = { - args: { - children: [<Button icon="home" />, <Button icon="help" />, <Button icon="forum" />], - }, -}; - -export const TextInputWithButton = { - args: { - children: [<TextInput placeholder="Enter a value…" />, <Button label="Submit" />], - }, -}; - -export const MultipleTextInputsWithButton = { - args: { - children: [ - <TextInput placeholder="First Name" />, - <TextInput placeholder="Last Name" />, - <Button label="Submit" />, - ], - }, -}; - -export const ButtonWithOptions = { - args: { - children: [ - <Button label="Button with Options" />, - <NativeSelect> - <NativeSelectOption value="1" label="Action 1" /> - <NativeSelectOption value="2" label="Action 2" /> - </NativeSelect>, - ], - }, -}; - -export const SelectWithTextInput = { - args: { - children: [ - <NativeSelect> - <NativeSelectOption value="1" label="Action 1" /> - <NativeSelectOption value="2" label="Action 2" /> - </NativeSelect>, - <TextInput placeholder="Value…" />, - ], - }, -}; - -export const TextInputWithButtonAndOptions = { - args: { - children: [ - <TextInput placeholder="Enter Value…" />, - <Button label="Submit" />, - <NativeSelect placeholder="Other Actions…"> - <NativeSelectOption value="1" label="Save" /> - <NativeSelectOption value="2" label="Delete" /> - </NativeSelect>, - ], - }, -}; - -export const SelectWithSelect = { - args: { - children: [ - <NativeSelect> - <NativeSelectOption value="1" label="Action 1" /> - <NativeSelectOption value="2" label="Action 2" /> - </NativeSelect>, - <NativeSelect> - <NativeSelectOption value="2-1" label="Action 1" /> - <NativeSelectOption value="2-2" label="Action 2" /> - </NativeSelect>, - ], - }, -}; diff --git a/libs/juno-ui-components/src/components/InputGroup/InputGroup.test.js b/libs/juno-ui-components/src/components/InputGroup/InputGroup.test.js deleted file mode 100644 index a31890bfc..000000000 --- a/libs/juno-ui-components/src/components/InputGroup/InputGroup.test.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { InputGroup } from "./index" -import { Button } from "../Button/index" -import { TextInput } from "../TextInput/index" -import { NativeSelect } from "../NativeSelect/index" -import { NativeSelectOption } from "../NativeSelectOption/index" - -describe("InputGroup", () => { - - test("renders an InputGroup", async () => { - render(<InputGroup />) - expect(document.querySelector(".juno-input-group")).toBeInTheDocument() - }) - - test("renders children as passed", async () => { - render( - <InputGroup> - <Button label="A Button" /> - <TextInput value="some value"/> - <NativeSelect> - <NativeSelectOption label="A Select Option" value="sel-opt-1" /> - <NativeSelectOption label="Another Select Option" value="sel-opt-2" /> - </NativeSelect> - </InputGroup> - ) - expect(document.querySelector(".juno-input-group")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toHaveTextContent("A Button") - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toHaveValue("some value") - expect(screen.getByRole("combobox")).toBeInTheDocument() // use listbox for radix-based select - }) - - test("renders child button variants as passed to parent", async () => { - render( - <InputGroup variant="primary-danger"> - <Button label="first" /> - <Button label="second" /> - <Button label="third" /> - </InputGroup> - ) - expect(screen.getByRole("button", { name: "first" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "first" })).toHaveClass("juno-button-primary-danger") - expect(screen.getByRole("button", { name: "second" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "second" })).toHaveClass("juno-button-primary-danger") - expect(screen.getByRole("button", { name: "third" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "third" })).toHaveClass("juno-button-primary-danger") - }) - - test("allows child button variant to override variant passed to parent", async () => { - render( - <InputGroup variant="primary-danger"> - <Button label="first" /> - <Button label="second" variant="primary"/> - <Button label="third" /> - </InputGroup> - ) - expect(screen.getByRole("button", { name: "first" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "first" })).toHaveClass("juno-button-primary-danger") - expect(screen.getByRole("button", { name: "second" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "second" })).not.toHaveClass("juno-button-primary-danger") - expect(screen.getByRole("button", { name: "second" })).toHaveClass("juno-button-primary") - expect(screen.getByRole("button", { name: "third" })).toBeInTheDocument() - expect(screen.getByRole("button", { name: "third" })).toHaveClass("juno-button-primary-danger") - }) - - test("disables all child elements as passed to parent", async () => { - render( - <InputGroup disabled> - <Button /> - <TextInput /> - <NativeSelect> - <NativeSelectOption label="A Select Option" value="sel-opt-1" /> - <NativeSelectOption label="Another Select Option" value="sel-opt-2" /> - </NativeSelect> - </InputGroup> - ) - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeDisabled() - expect(screen.getByRole("textbox")).toBeInTheDocument() - expect(screen.getByRole("textbox")).toBeDisabled() - expect(screen.getByRole("combobox")).toBeInTheDocument() - expect(screen.getByRole("combobox")).toBeDisabled() - }) - - test("renders a className a spassed", async () => { - render(<InputGroup className="my-class" />) - expect(document.querySelector(".juno-input-group")).toBeInTheDocument() - expect(document.querySelector(".juno-input-group")).toHaveClass("my-class") - }) - - test("renders all props as passed", async () => { - render(<InputGroup data-test="my-prop" />) - expect(document.querySelector(".juno-input-group")).toBeInTheDocument() - expect(document.querySelector(".juno-input-group")).toHaveAttribute("data-test", "my-prop") - }) - -}) - \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/InputGroup/index.js b/libs/juno-ui-components/src/components/InputGroup/index.js deleted file mode 100644 index fb7cb5f96..000000000 --- a/libs/juno-ui-components/src/components/InputGroup/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { InputGroup} from "./InputGroup.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/InputGroup/input-group.scss b/libs/juno-ui-components/src/components/InputGroup/input-group.scss deleted file mode 100644 index d62f2f93a..000000000 --- a/libs/juno-ui-components/src/components/InputGroup/input-group.scss +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -.juno-input-group { - - // remove border-radius where necessary - .juno-button, - .juno-textinput, - // this is weird for selects as is since these are inside a wrapper each and thus all qualify as first child, and potentially harder for radix-ui based selects, as we would need to select the Select button child?: - .juno-select { - &:not(:first-child, :last-child) { - border-radius: 0; - } - &:first-child { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - &:last-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - } - - // prevent double-borders for identical buttons next to each other: - .juno-button-default + .juno-button-default, - .juno-button-primary + .juno-button-primary, - .juno-button-default-primary-danger + .juno-button-primary-danger, - .juno-button-subdued + .juno-button-subdued { - border-left: 0; - } - -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/IntroBox/IntroBox.component.js b/libs/juno-ui-components/src/components/IntroBox/IntroBox.component.js deleted file mode 100644 index fbf44d02c..000000000 --- a/libs/juno-ui-components/src/components/IntroBox/IntroBox.component.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PropTypes from "prop-types" - -const introbox = (variant, heroImage) => { - return ` - jn-bg-theme-introbox - jn-text-theme-default - jn-flex - jn-rounded-l - jn-overflow-hidden - jn-mb-8 - - ${ - variant === "hero" && heroImage - ? ` - jn-bg-right-top - jn-bg-no-repeat - ` - : "" - } - ` -} - -const introboxBorder = ` - jn-border-l-4 - jn-border-theme-introbox -` - -const introboxContent = (variant, heroImage) => { - return ` - ${heroImage ? `jn-pl-4 jn-pr-56` : `jn-px-4`} - - ${ - variant === "hero" - ? ` - jn-text-xl - jn-min-h-[8rem] - jn-py-4 - jn-flex - jn-flex-col - jn-justify-center - ` - : ` - jn-py-3 - ` - } - ` -} - -const introboxHeading = ` - jn-font-bold -` - -/** -* An Introbox holds generally important information to help understand the contents, purpose, or state of a whole page or view, or individual sections on longer pages. -Use sparingly, there should never be any two or more subsequent instances of Introbox as direct siblings/neighbors on an individual view. -*/ -export const IntroBox = ({ - title, - text, - variant, - heroImage, - className, - children, - ...props -}) => { - - - const isHeroWithImage = React.useMemo(() => { - return heroImage && variant === "hero" - }, [variant, heroImage]) - - return ( - <div - className={`juno-introbox ${introbox(variant, heroImage)} ${className}`} - style={isHeroWithImage ? {backgroundImage: `${heroImage}`} : {}} - {...props} - > - <div className={`${introboxBorder}`}></div> - <div className={`${introboxContent(variant, heroImage)}`}> - {title ? <h1 className={`${introboxHeading}`}>{title}</h1> : ""} - {children ? children : <p>{text}</p>} - </div> - </div> - ) -} - -IntroBox.propTypes = { - /** Pass an optional title */ - title: PropTypes.string, - /** Pass a string of text to be rendered as contents. Alternatively, contents can be passed as children (see below) */ - text: PropTypes.string, - /** Pass a custom class */ - variant: PropTypes.oneOf(["default", "hero"]), - /** optional "hero" flavor image for hero variant. Specify as css bg image string pointing to an image in your app (see template app for an example). Will always be positioned top and right */ - heroImage: PropTypes.string, - /** Pass a custom class */ - className: PropTypes.string, - /** Pass child nodes to be rendered as contents */ - children: PropTypes.node, -} - -IntroBox.defaultProps = { - title: null, - text: null, - variant: "default", - heroImage: null, - className: "", -} diff --git a/libs/juno-ui-components/src/components/IntroBox/IntroBox.stories.js b/libs/juno-ui-components/src/components/IntroBox/IntroBox.stories.js deleted file mode 100644 index 969a00ee8..000000000 --- a/libs/juno-ui-components/src/components/IntroBox/IntroBox.stories.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { IntroBox } from './index.js'; -import heroImage from '../../img/app_bg_example.svg?url'; - -export default { - title: 'Components/IntroBox', - component: IntroBox, - argTypes: { - children: { - control: false, - }, - }, -}; - -export const Default = { - args: { - text: 'Default IntroBox.', - }, -}; - -export const WithTitle = { - args: { - title: 'IntroBox', - text: 'IntroBox with title.', - }, -}; - -export const Hero = { - args: { - title: 'IntroBox', - text: 'Hero IntroBox has a larger font size and more padding', - variant: 'hero', - }, -}; - -export const HeroWithBGImage = { - args: { - title: 'IntroBox', - text: 'Hero IntroBox with background image. Background image must be referenced as a css bg image string. Import svg images with query param ?url.', - variant: 'hero', - heroImage: `url(${heroImage})`, - }, -}; diff --git a/libs/juno-ui-components/src/components/IntroBox/IntroBox.test.js b/libs/juno-ui-components/src/components/IntroBox/IntroBox.test.js deleted file mode 100644 index 6ad0547c4..000000000 --- a/libs/juno-ui-components/src/components/IntroBox/IntroBox.test.js +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { IntroBox } from "./index" - -describe("IntroBox", () => { - test("renders an IntroBox", async () => { - render(<IntroBox data-testid="my-introbox" />) - expect(screen.getByTestId("my-introbox")).toBeInTheDocument() - }) - - test("renders an IntroBox with background image as passed if variant hero", async () => { - render( - <IntroBox - data-testid="my-introbox" - variant="hero" - heroImage="url('bg-fake-img')" - /> - ) - expect(screen.getByTestId("my-introbox")).toHaveStyle({backgroundImage: "url('bg-fake-img')"}) - }) - - test("renders an IntroBox without background image as passed if variant is not hero", async () => { - render( - <IntroBox - data-testid="my-introbox" - heroImage="url('bg-fake-img')" - /> - ) - expect(screen.getByTestId("my-introbox")).not.toHaveStyle({backgroundImage: "url('bg-fake-img')"}) - }) - - test("renders a title as passed", async () => { - render(<IntroBox data-testid="my-introbox" title="My IntroBox Heading" />) - expect(screen.getByTestId("my-introbox")).toHaveTextContent( - "My IntroBox Heading" - ) - }) - - test("renders a text as passed", async () => { - render( - <IntroBox data-testid="my-introbox" text="My IntroBox text goes here." /> - ) - expect( - screen.getByText((content, element) => { - return ( - element.tagName.toLowerCase() === "p" && - content.startsWith("My IntroBox text goes here.") - ) - }) - ).toBeTruthy() - }) - - test("renders a custom class as passed", async () => { - render(<IntroBox data-testid="my-introbox" className="my-custom-class" />) - expect(screen.getByTestId("my-introbox")).toHaveClass("my-custom-class") - }) - - test("renders children passed as children", async () => { - render( - <IntroBox data-testid="my-introbox"> - <div>My Introbox text in a div goes here!</div> - </IntroBox> - ) - expect( - screen.getByText((content, element) => { - return ( - element.tagName.toLowerCase() === "div" && - content.startsWith("My Introbox text in a div goes here!") - ) - }) - ).toBeTruthy() - }) - - test("renders text as passed as children if both children and 'text' prop were passed", async () => { - render( - <IntroBox data-testid="my-introbox" text="I should not be here."> - {"My Introbox children text goes here!"} - </IntroBox> - ) - expect(screen.getByTestId("my-introbox")).toHaveTextContent( - "My Introbox children text goes here!" - ) - }) - - test("renders other props as passed", async () => { - render( - <IntroBox data-testid="my-introbox" name="My shiny little IntroBox" /> - ) - expect(screen.getByTestId("my-introbox")).toHaveAttribute( - "name", - "My shiny little IntroBox" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/IntroBox/index.js b/libs/juno-ui-components/src/components/IntroBox/index.js deleted file mode 100644 index 1c94008d4..000000000 --- a/libs/juno-ui-components/src/components/IntroBox/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { IntroBox } from "./IntroBox.component" \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.component.js b/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.component.js deleted file mode 100644 index b4bdb7e30..000000000 --- a/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.component.js +++ /dev/null @@ -1,543 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import PropTypes, { exact } from "prop-types" -import React, { useContext, useLayoutEffect } from "react" -import * as themes from "./themes" -import { SearchInput } from "../SearchInput/SearchInput.component" - -// DEFAULT THEME (DARK) -const DEFAULT_THEME = { - base00: "var(--color-syntax-highlight-base00)", // background - base01: "var(--color-syntax-highlight-base01)", // toolbar: border, background - base02: "var(--color-syntax-highlight-base02)", // border, type background, border - base03: "var(--color-syntax-highlight-base03)", // - - base04: "var(--color-syntax-highlight-base04)", // size - base05: "var(--color-syntax-highlight-base05)", // types: "undefined" - base06: "var(--color-syntax-highlight-base06)", // - - base07: "var(--color-syntax-highlight-base07)", // key, brace - base08: "var(--color-syntax-highlight-base08)", // types: "NaN" - base09: "var(--color-syntax-highlight-base09)", // ..., types: "string" - base0A: "var(--color-syntax-highlight-base0A)", // types: "null", "regex" - base0B: "var(--color-syntax-highlight-base0B)", // types: "float" - base0C: "var(--color-syntax-highlight-base0C)", // array index - base0D: "var(--color-syntax-highlight-base0D)", // expanded icon, types: "date", "function" - base0E: "var(--color-syntax-highlight-base0E)", // collapsed icon, types: "boolean" - base0F: "var(--color-syntax-highlight-base0F)", // copy icon, types: "integer" -} - -// indent size in pixel -const INDENTATION_SIZE = 5 -// default truncate size -const DEFAULT_TRUNCATE_LENGTH = 100 - -// map of color keys to theme -const colorMap = (theme) => ({ - background: theme.base00, - ellipsis: theme.base09, - brace: theme.base07, - key: theme.base07, - index: theme.base0C, - size: theme.base04, - border: theme.base02, - highlight: { - foreground: theme.base06, - background: theme.base02, - }, - toolbar: { - border: theme.base01, - background: theme.base01, - foreground: theme.base07, - }, - icon: { - expanded: theme.base0D, - collapsed: theme.base0E, - expandAll: theme.base0E, - }, - dataType: { - boolean: theme.base0E, - date: theme.base0D, - float: theme.base0B, - function: theme.base0D, - integer: theme.base0F, - string: theme.base09, - nan: theme.base08, - null: theme.base0A, - undefined: theme.base05, - regexp: theme.base0A, - background: theme.base02, - }, -}) - -// get type of value -const type = (value) => { - if (value === null) return "null" - if (Array.isArray(value)) return "array" - if (value instanceof RegExp) return "regex" - if (value instanceof Date) return "date" - const t = (typeof value).toLowerCase() - if (t === "number") { - if (Number.isNaN(value)) return "nan" - return Number.isInteger(value) ? "integer" : "float" - } else return t -} - -// Theme context to provide colors, ident size ect. in component tree -const ThemeContext = React.createContext(DEFAULT_THEME) - -// this component renders the expand icon depends on the expanded prop -// per entry -const ExpandIcon = ({ expanded }) => { - const { colors } = useContext(ThemeContext) - return ( - <svg - fill={expanded ? colors.icon.expanded : colors.icon.collapsed} - width="1em" - height="1em" - viewBox="0 0 1792 1792" - style={{ - verticalAlign: "middle", - color: "var(--color-syntax-highlight-base0E)", - height: "1em", - width: "1em", - }} - > - <title>Expand/Collapse - {expanded ? ( - - ) : ( - - )} - - ) -} - -// Toolbar Icon -const ExpandAllIcon = () => { - const { colors } = useContext(ThemeContext) - return ( - - Expand All - - - ) -} - -// Toolbar Icon -const CollapseAllIcon = () => { - const { colors } = useContext(ThemeContext) - return ( - - Collapse All - - - ) -} - -const StringWithHighlight = ({ value }) => { - const { colors, searchTerm } = useContext(ThemeContext) - - const highlight = React.useMemo(() => { - if ( - value === undefined || - value === null || - !searchTerm || - searchTerm === "" - ) - return null - - try { - const startIndex = value - .toString() - .toLowerCase() - .indexOf(searchTerm.toLowerCase()) - - if (startIndex < 0) return null - - return { start: startIndex, end: startIndex + searchTerm.length } - } catch (e) { - console.debug("JsonViewer:", e) - return null - } - }, [searchTerm]) - - return highlight ? ( - <> - {value.slice(0, highlight.start)} - - {value.slice(highlight.start, highlight.end)} - - {value.slice(highlight.end)} - - ) : ( - value - ) -} - -// Key label (left side) with highlight functionality -const NameLabel = ({ name }) => { - const { colors } = useContext(ThemeContext) - const isIndex = typeof name === "number" - const color = isIndex ? colors.index : colors.key - const label = isIndex ? name : `"${name}"` - - return ( - - {" "} - - - - {" : "} - - ) -} - -// this component show the right side of the json, type + value -// for null, NaN and undefined values a background is shown -// value label (left side) with highlight functionality -const TypeValueLabel = ({ type, value }) => { - const { colors, truncate } = useContext(ThemeContext) - let undefinedValue = ["nan", "null", "undefined"].includes(type) - let label = type === "string" ? `"${value}"` : `${value}` - if (truncate) { - const length = truncate === true ? DEFAULT_TRUNCATE_LENGTH : truncate - if (label.length > length) label = label.slice(0, length - 3) + "..." - } - - return ( - - {!undefinedValue && ( - - {type} - - )} - - - - - ) -} - -const Toolbar = () => { - const { colors, searchTerm, onExpandAll, onSearch } = useContext(ThemeContext) - - return ( -
    - - onExpandAll(true)}> - - - onExpandAll(false)}> - - - - - onSearch(e.target.value)} - clear - onClear={() => onSearch(null)} - /> -
    - ) -} - -// This component renders a row of json entry -const JsonData = ({ name, value, nestedLevel = 0 }) => { - const { colors, expanded, searchTerm, indentWidth, expandAll } = - useContext(ThemeContext) - const [isExpanded, setIsExpanded] = React.useState( - expanded === true || (expanded !== false && expanded > nestedLevel) - ) - - useLayoutEffect(() => { - if (!expandAll) return - setIsExpanded(expandAll.expanded) - }, [expandAll]) - - useLayoutEffect(() => { - if (value && searchTerm) { - try { - if (JSON.stringify(value).indexOf(searchTerm) > 0) setIsExpanded(true) - } catch (e) {} - } - }, [searchTerm]) - - const dataType = React.useMemo(() => type(value), [value]) - - const children = React.useMemo(() => { - if (dataType === "array") - return value.map((v, i) => ({ name: i, value: v })) - if (dataType === "object") - return Object.keys(value).map((key, i) => ({ - name: key, - value: value[key], - })) - return null - }, [dataType, value]) - - const ExpandButton = React.useCallback( - ({ children }) => ( - { - setIsExpanded(!isExpanded) - }} - > - {children} - - ), - [isExpanded, setIsExpanded] - ) - - return ( -
    -
    - {/* Expand Button */} - {children && ( - <> - - - {" "} - - )} - {/* NAME */} - {(name || name === 0) && } - - {/* show type and value if no children */} - {!children ? ( - // atomic value, not an array nor an object - - ) : ( - <> - - {dataType === "array" ? "[" : "{"} - - {!isExpanded && ( - <> - {/* Expand Icon */} - - ... - - - {dataType === "array" ? "]" : "}"} - - - )} - - {" "} - {children?.length} {children?.length === 1 ? "item" : "items"} - - - {isExpanded && ( - <> - {/* sub items */} -
    - {children?.map((entry, i) => ( - - ))} -
    - - {dataType === "array" ? "]" : "}"} - - - )} - - )} -
    -
    - ) -} - -/** A component to render json data in a nice way. */ -export const JsonViewer = ({ - data, - showRoot, - toolbar, - theme, - expanded, - indentWidth, - style, - truncate, - className, - ...props -}) => { - const currentTheme = (typeof theme === "string" && themes[theme]) || { - ...DEFAULT_THEME, - ...theme, - } - const colors = colorMap(currentTheme) - const [searchTerm, setSearchTerm] = React.useState("") - const [expandAll, setExpandAll] = React.useState(null) - - return ( - - setExpandAll({ expanded: v, timestamp: Date.now() }), - onSearch: (v) => setSearchTerm(v), - }} - > -
    - {toolbar && } - -
    -
    - ) -} - -JsonViewer.propTypes = { - /** Pass a valid json. Required. */ - // data: PropTypes.object.isRequired, - data: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired, - /** pass a styles object */ - style: PropTypes.object, - /** show toolbar */ - toolbar: PropTypes.bool, - /** show root key */ - showRoot: PropTypes.bool, - /** dark, light or map of colors - * - * @param base00 background - * @param base01 NOT used - * @param base02 border, NaN,null, undefined background - * @param base03 NOT used - * @param base04 size (x items) - * @param base05 type "undefined" - * @param base06 NOT used - * @param base07 key, brace - * @param base08 type "NaN" - * @param base09 ellipsis (...), type "string" - * @param base0A types: "null", "regex" - * @param base0B type "float" - * @param base0C index - * @param base0D expanded icon, types: "date", "function" - * @param base0E collapsed icon, types: "boolean" - * @param base0F copy icon, type "integer" - */ - theme: PropTypes.oneOfType([ - PropTypes.shape({ - base00: PropTypes.string, - base01: PropTypes.string, - base02: PropTypes.string, - base03: PropTypes.string, - base04: PropTypes.string, - base05: PropTypes.string, - base06: PropTypes.string, - base07: PropTypes.string, - base08: PropTypes.string, - base09: PropTypes.string, - base0A: PropTypes.string, - base0B: PropTypes.string, - base0C: PropTypes.string, - base0D: PropTypes.string, - base0E: PropTypes.string, - base0F: PropTypes.string, - }), - PropTypes.oneOf(["dark", "light"]), - ]), - /** expanded can be true|false or a number. The number denotes the hierarchy level to which the object is expanded. */ - expanded: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]), - // cut strings after max length is reached, default length is 100 characters, if set to true. Or specifcy a different character length. */ - truncate: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]), - /* indent width */ - indentWidth: PropTypes.number, - /* add custom classes */ - className: PropTypes.string, -} - -JsonViewer.defaultProps = { - showRoot: false, - indentWidth: 4, - toolbar: false, - expanded: 1, - truncate: false, - style: undefined, - data: {}, - theme: null, -} diff --git a/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.stories.js b/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.stories.js deleted file mode 100644 index f516fbf97..000000000 --- a/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.stories.js +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { JsonViewer } from './index.js'; - -export default { - title: 'Components/JsonViewer', - component: JsonViewer, - description: 'TEST', - argTypes: {}, - parameters: { - controls: { sort: 'alpha' }, - }, -}; - -const data = { - id: 9, - date: new Date(), - getPrice: () => `$12`, - regex: /^(.+)$/, - nan: NaN, - null: null, - title: 'Infinix INBOOK', - description: 'Infinix Inbook X1 Ci3 10th 8GB...', - price: 1099, - discountPercentage: 11.83, - rating: 4.54, - stock: 96, - available: true, - array: [], - brand: 'Infinix', - category: 'laptops', - thumbnail: 'https://i.dummyjson.com/data/products/9/thumbnail.jpg', - test: 'https://i.dummyjson.com/data/products/9/thumbnail.jpg?xxxxxxxxxxxxxxxxnnnnnnnnnnnnnnnnnnnnnnnndddddddddddddddddddddddddddddddd', - test2: - 'LoremipsumdolorsitametconsectetueradipiscingelitAeneancommodoligulaegetdolorAeneanmassaCumsociisnatoquepenatibusetmagnisdisparturientmontesnasceturridiculus', - images: [ - 'https://i.dummyjson.com/data/products/9/1.jpg', - 'https://i.dummyjson.com/data/products/9/2.png', - 'https://i.dummyjson.com/data/products/9/3.png', - 'https://i.dummyjson.com/data/products/9/4.jpg', - 'https://i.dummyjson.com/data/products/9/thumbnail.jpg', - ], -}; - -const dataAsArray = [{hello: ["word", "world", "wod"], foo: "bar"}, {arrays: "are", fun: "to", work: "with, too"}]; - -export const Default = { - args: { - data, - }, -}; - -export const ArrayData = { - args: { - data: dataAsArray, - }, -}; - -export const Light = { - args: { - theme: 'light', - toolbar: true, - data, - }, -}; - -export const Expanded = { - args: { - expanded: true, - data, - }, -}; - -export const WithToolbar = { - args: { - expanded: 1, - toolbar: true, - data, - }, -}; - -export const CustomTheme = { - args: { - theme: { - base00: 'rgb(39, 40, 34)', - base01: 'rgba(73, 72, 62,0.8)', - base02: 'rgb(73, 72, 62)', - base03: '#93a1a1', - base04: 'rgb(165, 159, 133)', - base05: 'rgb(248, 248, 242)', - base06: '#073642', - base07: 'rgb(249, 248, 245)', - base08: 'rgb(249, 38, 114)', - base09: 'rgb(253, 151, 31)', - base0A: 'rgb(244, 191, 117)', - base0B: 'rgb(166, 226, 46)', - base0C: 'rgb(161, 239, 228)', - base0D: 'rgb(102, 217, 239)', - base0E: 'rgb(174, 129, 255)', - base0F: 'rgb(204, 102, 51)', - }, - data: { ...data, test2: undefined }, - toolbar: true, - truncate: false, - }, -}; diff --git a/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.test.js b/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.test.js deleted file mode 100644 index d484e818c..000000000 --- a/libs/juno-ui-components/src/components/JsonViewer/JsonViewer.test.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen } from "@testing-library/react" -import { JsonViewer } from "./index" - -describe("JsonViewer", () => { - test("renders json data", async () => { - await render() - expect(screen.getByTestId("my-json-viewer")).toBeInTheDocument() - }) - - - test("renders a custom class as passed", async () => { - await render() - expect(screen.getByTestId("my-json-viewer")).toHaveClass("my-custom-class") - }) - - test("renders other props as passed", async () => { - await render() - expect(screen.getByTestId("my-json-viewer")).toHaveAttribute( - "name", - "My shiny JsonViewer" - ) - }) -}) diff --git a/libs/juno-ui-components/src/components/JsonViewer/index.js b/libs/juno-ui-components/src/components/JsonViewer/index.js deleted file mode 100644 index 17a79c07f..000000000 --- a/libs/juno-ui-components/src/components/JsonViewer/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { JsonViewer } from "./JsonViewer.component" diff --git a/libs/juno-ui-components/src/components/JsonViewer/themes.js b/libs/juno-ui-components/src/components/JsonViewer/themes.js deleted file mode 100644 index 112163045..000000000 --- a/libs/juno-ui-components/src/components/JsonViewer/themes.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const dark = { - base00: "rgb(39, 40, 34)", - base01: "rgb(245, 245, 245)", - base02: "rgb(73, 72, 62)", - base03: "#93a1a1", - base04: "rgb(165, 159, 133)", - base05: "rgb(248, 248, 242)", - base06: "#073642", - base07: "rgb(249, 248, 245)", - base08: "rgb(249, 38, 114)", - base09: "rgb(253, 151, 31)", - base0A: "rgb(244, 191, 117)", - base0B: "rgb(166, 226, 46)", - base0C: "rgb(161, 239, 228)", - base0D: "rgb(102, 217, 239)", - base0E: "rgb(174, 129, 255)", - base0F: "rgb(204, 102, 51)", -} - -export const light = { - base00: "#fff", - base01: "rgb(245, 245, 245)", - base02: "rgb(235, 235, 235)", - base03: "#93a1a1", - base04: "rgba(0, 0, 0, 0.3)", - base05: "#586e75", - base06: "#073642", - base07: "#002b36", - base08: "#d33682", - base09: "#cb4b16", - base0A: "#dc322f", - base0B: "#859900", - base0C: "#6c71c4", - base0D: "#586e75", - base0E: "#2aa198", - base0F: "#268bd2", -} diff --git a/libs/juno-ui-components/src/components/Label/Label.component.js b/libs/juno-ui-components/src/components/Label/Label.component.js deleted file mode 100644 index 41c532c80..000000000 --- a/libs/juno-ui-components/src/components/Label/Label.component.js +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useRef } from "react" -import PropTypes from "prop-types" - -const labelstyles = ` - jn-text-theme-high - jn-text-base - jn-transform - jn-origin-top-left - jn-transition-all - jn-duration-100 - jn-ease-in-out - jn-z-10 -` - -const floatingStyles = ` - jn-absolute -` - -const minimizedStyles = ` - jn-scale-75 - -jn-translate-y-[0.4375rem] -` - -const requiredstyles = ` - jn-inline-block - jn-w-1 - jn-h-1 - jn-rounded-full - jn-align-top - jn-ml-1 - jn-mt-2 - jn-bg-theme-required -` - -const disabledstyles = ` - jn-opacity-50 - jn-cursor-not-allowed -` - -/** -* A re-usable Label component -*/ - -export const Label = React.forwardRef( - ( - { - text, - htmlFor, - required, - disabled, - floating, - minimized, - className, - ...props - }, forwardedRef ) => { - return ( - - ) -}) - -Label.propTypes = { - /** Pass a string of text to be rendered as contents. Required. */ - text: PropTypes.string, - /** An Id of an input element to associate the label with */ - htmlFor: PropTypes.string, - /** Required */ - required: PropTypes.bool, - /** Pass a className */ - className: PropTypes.string, - /** Label for a disabled input */ - disabled: PropTypes.bool, - /** Whether the label is floating */ - floating: PropTypes.bool, - /** Whether the label is minimized. Requires `floating` set to TRUE, otherwise it will have no effect. */ - minimized: PropTypes.bool, -} - -Label.defaultProps = { - text: "", - htmlFor: undefined, - required: false, - className: "", - disabled: false, - floating: false, - minimized: false, -} \ No newline at end of file diff --git a/libs/juno-ui-components/src/components/Label/Label.stories.js b/libs/juno-ui-components/src/components/Label/Label.stories.js deleted file mode 100644 index 68a1dad7b..000000000 --- a/libs/juno-ui-components/src/components/Label/Label.stories.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { Label } from './index.js'; - -export default { - title: 'Forms/Label', - component: Label, - argTypes: {}, -}; - -export const Default = { - args: { - text: 'My Label', - }, -}; - -export const Disabled = { - args: { - text: 'My disabled label', - disabled: true, - }, -}; - -export const Required = { - args: { - text: 'My required label', - required: true, - }, -}; diff --git a/libs/juno-ui-components/src/components/Label/Label.test.js b/libs/juno-ui-components/src/components/Label/Label.test.js deleted file mode 100644 index 7efd0a072..000000000 --- a/libs/juno-ui-components/src/components/Label/Label.test.js +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { render, screen} from "@testing-library/react" -import { Label } from "./index" - -describe("Label", () => { - - test("renders a label with a text as passed", async () => { - render(
  3. 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�D2ly)t<}Hm(A#yFU|nx2+~Bgt67@U9jn}O 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
    #q~p`Cl%nH+R4mt|$p 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 z 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 eH-{; { - useUrlState() - useCommunication() - return null -} - -export default AsyncWorker diff --git a/apps/greenhouse-management/src/components/Auth.jsx b/apps/greenhouse-management/src/components/Auth.jsx deleted file mode 100644 index 3c730ffaa..000000000 --- a/apps/greenhouse-management/src/components/Auth.jsx +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { useIsLoggedIn } from "./StoreProvider" -import HintLoading from "./shared/HintLoading" - -// Adds a loading screen while during auth -// Shows children when auth is complete -const Auth = ({ children }) => { - const authLoggedIn = useIsLoggedIn() - - return ( - <> - {!!authLoggedIn ? ( - children - ) : ( - - )} - - ) -} - -export default Auth diff --git a/apps/greenhouse-management/src/components/OrgInfo.jsx b/apps/greenhouse-management/src/components/OrgInfo.jsx deleted file mode 100644 index 01e0206af..000000000 --- a/apps/greenhouse-management/src/components/OrgInfo.jsx +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo, useEffect, useState } from "react" -import { createClient } from "sapcc-k8sclient" -import { useApiEndpoint, useAuthData } from "./StoreProvider" -import { useActions } from "messages-provider" - -// Shows organization info - -const OrgInfo = () => { - const apiEndpoint = useApiEndpoint() - const [org, setOrg] = useState(null) - const { addMessage } = useActions() - - const authData = useAuthData() - - const orgName = useMemo(() => { - if (!authData?.raw?.groups) return null - const orgString = authData?.raw?.groups.find( - (g) => g.indexOf("organization:") === 0 - ) - if (!orgString) return null - return orgString.split(":")[1] - }, [authData?.raw?.groups]) - - const client = useMemo(() => { - if (!apiEndpoint || !authData?.JWT) return null - return createClient({ apiEndpoint, token: authData?.JWT }) - }, [apiEndpoint, authData?.JWT]) - - useEffect(() => { - if (!client || !orgName) return - // plugin configs - client - .get(`/apis/greenhouse.sap/v1alpha1/organizations/${orgName}`) - .then((res) => { - setOrg({ - name: res?.spec?.displayName, - description: res?.spec?.description, - }) - }) - .catch((err) => { - addMessage({ - variant: "error", - text: `Failed to fetch organization info. ${err.message}`, - }) - }) - }, [client, orgName]) - - return ( -

    -
    -

    Organization

    - {org?.name &&

    {org?.name}

    } - {!org?.name &&

    Loading...

    } -
    - {org?.description && ( -

    {org?.description}

    - )} - {!org?.name &&

    } - {/*
    - -

    Thing 1

    -
    - 23 -
    -
    - - -

    Thing 2

    -
    - 42 -
    -
    - - -

    Thing 3

    -
    - 4711 -
    -
    -
    */} -
    - ) -} - -export default OrgInfo diff --git a/apps/greenhouse-management/src/components/Plugin.jsx b/apps/greenhouse-management/src/components/Plugin.jsx deleted file mode 100644 index 1f1e06d1d..000000000 --- a/apps/greenhouse-management/src/components/Plugin.jsx +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useMemo, useRef, useState } from "react" -import { useAppLoader } from "utils" -import { useAssetsUrl, usePluginActive } from "./StoreProvider" -import { Messages, useActions } from "messages-provider" -import { parseError } from "../lib/helpers" -import { Stack, Button } from "juno-ui-components" -import HintLoading from "./shared/HintLoading" - -const Plugin = ({ config }) => { - const { addMessage } = useActions() - const assetsUrl = useAssetsUrl() - const { mount } = useAppLoader(assetsUrl) - const holder = useRef() - const activePlugin = usePluginActive() - - // local state - const [displayReload, setDisplayReload] = useState(false) - const [reload, setReload] = useState(0) - const [isMountedApp, setIsMountedApp] = useState(false) - - // element to mount the app - const el = document.createElement("div") - el.classList.add("inline") - const app = useRef(el) - - // mount the app each time the component is reloaded losing the state - useEffect(() => { - if (!mount || !assetsUrl || !config) return - // mount the app - mount(app.current, config) - .then((loaded) => { - if (!loaded) return - setIsMountedApp(true) - }) - .catch((error) => { - setDisplayReload(true) - addMessage({ - variant: "error", - text: `${config?.name}: ` + parseError(error), - }) - }) - }, [mount, reload, config, assetsUrl]) - - const displayPluging = useMemo( - () => activePlugin === config?.name, - [activePlugin, config] - ) - - useEffect(() => { - // if assetsUrl still null when rendering for first time the component then mountApp also return null and we skip here - if (!isMountedApp) return - - if (displayPluging) { - // append to holder - holder.current.appendChild(app.current) - } else { - // remove from holder - if (holder.current.contains(app.current)) - holder.current.removeChild(app.current) - } - }, [isMountedApp, displayPluging]) - - return ( -
    - {displayPluging && ( - <> - - {!isMountedApp && !displayReload && } - {displayReload && ( - -

    - Uh-oh! Our plugin {config?.label} encountered a hiccup.{" "} -

    -

    - No worries, just give it a little nudge by clicking the{" "} - Reload button below. -

    -
    - ) -} - -export default Plugin diff --git a/apps/greenhouse-management/src/components/PluginContainer.jsx b/apps/greenhouse-management/src/components/PluginContainer.jsx deleted file mode 100644 index 45d7f8b04..000000000 --- a/apps/greenhouse-management/src/components/PluginContainer.jsx +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState } from "react" -import { Container } from "juno-ui-components" -import { usePluginConfig } from "./StoreProvider" -import Plugin from "./Plugin" -import { MessagesProvider } from "messages-provider" - -const PluginContainer = () => { - const pluginConfig = usePluginConfig() - - return ( - <> - {Object.keys(pluginConfig).map((key, index) => ( - - - - ))} - - ) -} - -export default PluginContainer diff --git a/apps/greenhouse-management/src/components/SideNav.js b/apps/greenhouse-management/src/components/SideNav.js deleted file mode 100644 index 26a9b14c5..000000000 --- a/apps/greenhouse-management/src/components/SideNav.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { SideNavigation, SideNavigationItem } from "juno-ui-components" -import { usePluginConfig, usePluginActive, useActions } from "./StoreProvider" - -const SideNav = () => { - const pluginConfig = usePluginConfig() - const pluginActive = usePluginActive() - const { setPluginActive } = useActions() - - return ( - - {Object.keys(pluginConfig).map((key, index) => ( - setPluginActive(pluginConfig[key]?.name)} - /> - ))} - - ) -} - -export default SideNav diff --git a/apps/greenhouse-management/src/components/StoreProvider.js b/apps/greenhouse-management/src/components/StoreProvider.js deleted file mode 100644 index 58596117a..000000000 --- a/apps/greenhouse-management/src/components/StoreProvider.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { createContext, useContext } from "react" -import { useStore as create } from "zustand" -import createStore from "../lib/store" - -const StoreContext = createContext() -const StoreProvider = ({ options, children }) => ( - - {children} - -) - -const useAppStore = (selector) => create(useContext(StoreContext), selector) - -export const useIsUrlStateSetup = () => - useAppStore((state) => state.isUrlStateSetup) -export const useAssetsUrl = () => useAppStore((state) => state.assetsUrl) -export const usePluginConfig = () => useAppStore((state) => state.pluginConfig) -export const usePluginActive = () => useAppStore((state) => state.pluginActive) -export const useApiEndpoint = () => useAppStore((state) => state.apiEndpoint) -export const useAuthData = () => useAppStore((state) => state.authData.data) -export const useAuthAppLoaded = () => - useAppStore((state) => state.authAppLoaded) -export const useIsLoggedIn = () => - useAppStore((state) => state.authData.loggedIn) - -export const useActions = () => useAppStore((state) => state.actions) - -export default StoreProvider diff --git a/apps/greenhouse-management/src/components/UrlState.jsx b/apps/greenhouse-management/src/components/UrlState.jsx deleted file mode 100644 index ba0316bdd..000000000 --- a/apps/greenhouse-management/src/components/UrlState.jsx +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import HintLoading from "./shared/HintLoading" -import { useIsUrlStateSetup } from "./StoreProvider" - -const UrlState = ({ children }) => { - const isUrlStateSetup = useIsUrlStateSetup() - - return ( - <> - {isUrlStateSetup ? children : } - - ) -} - -export default UrlState diff --git a/apps/greenhouse-management/src/components/shared/HintLoading.js b/apps/greenhouse-management/src/components/shared/HintLoading.js deleted file mode 100644 index b4091b753..000000000 --- a/apps/greenhouse-management/src/components/shared/HintLoading.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { Stack, Spinner } from "juno-ui-components" - -const centeredProps = { - alignment: "center", - distribution: "center", - direction: "vertical", - className: "h-full", -} - -const HintLoading = ({ text, centered }) => { - const stackProps = useMemo(() => { - return centered ? centeredProps : {} - }, [centered]) - - return ( - - - - {text ? {text} : Loading...} - - - ) -} - -export default HintLoading diff --git a/apps/greenhouse-management/src/hooks/.gitkeep b/apps/greenhouse-management/src/hooks/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/greenhouse-management/src/hooks/useCommunication.js b/apps/greenhouse-management/src/hooks/useCommunication.js deleted file mode 100644 index 7e1e7390b..000000000 --- a/apps/greenhouse-management/src/hooks/useCommunication.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect } from "react" -import { get, watch } from "communicator" -import { useActions } from "../components/StoreProvider" - -const useCommunication = () => { - const { setAuthData: setAuthData } = useActions() - const { setAuthAppLoaded: setAuthAppLoaded } = useActions() - - useEffect(() => { - if (!setAuthData || !setAuthAppLoaded) return - get("AUTH_APP_LOADED", setAuthAppLoaded, { - consumerID: "greenhouse-management", - debug: true, - }) - const unwatchLoaded = watch("AUTH_APP_LOADED", setAuthAppLoaded, { - debug: true, - consumerID: "greenhouse-management", - }) - - get("AUTH_GET_DATA", setAuthData, { - consumerID: "greenhouse-management", - debug: true, - }) - const unwatchUpdate = watch("AUTH_UPDATE_DATA", setAuthData, { - debug: true, - consumerID: "greenhouse-management", - }) - - return () => { - if (unwatchLoaded) unwatchLoaded() - if (unwatchUpdate) unwatchUpdate() - } - }, [setAuthData, setAuthAppLoaded]) -} - -export default useCommunication diff --git a/apps/greenhouse-management/src/hooks/useUrlState.js b/apps/greenhouse-management/src/hooks/useUrlState.js deleted file mode 100644 index 22377a222..000000000 --- a/apps/greenhouse-management/src/hooks/useUrlState.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect, useLayoutEffect } from "react" -import { registerConsumer } from "url-state-provider" -import { - useActions, - useIsUrlStateSetup, - usePluginActive, - useIsLoggedIn, -} from "../components/StoreProvider" - -// url state manager -const URL_APP_STATE_KEY = "greenhouse-management" -const ACTIVE_APP_KEY = "a" -const urlStateManager = registerConsumer(URL_APP_STATE_KEY) - -const useUrlState = () => { - const { setPluginActive, setIsUrlStateSetup } = useActions() - const isUrlStateSetup = useIsUrlStateSetup() - const pluginActive = usePluginActive() - const isLoggedIn = useIsLoggedIn() - - // Initial state from URL AFTER - // WARNING. To get the right state from the URL do following: - // If this app is embbeded in another app with authentication - // - Mount this app after the login is success in the parent app - // or - // - Wait here until you get logged in - useLayoutEffect(() => { - if (!isLoggedIn || isUrlStateSetup) return - - let active = urlStateManager.currentState()?.[ACTIVE_APP_KEY] - if (active) setPluginActive(active) - setIsUrlStateSetup(true) - }, [isUrlStateSetup, isLoggedIn]) - - // sync URL state - useEffect(() => { - if (!isUrlStateSetup) return - - // if the current state is the same as the new state, don't push - // this prevents the history from being filled with the same state - // and therefore prevents the forward button from being disabled - // This small optimization allows the user to go back and forth! - if (urlStateManager.currentState()?.[ACTIVE_APP_KEY] === pluginActive) - return - - urlStateManager.push({ [ACTIVE_APP_KEY]: pluginActive }) - }, [isUrlStateSetup, pluginActive]) -} - -export default useUrlState diff --git a/apps/greenhouse-management/src/index.js b/apps/greenhouse-management/src/index.js deleted file mode 100644 index f6f988315..000000000 --- a/apps/greenhouse-management/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createRoot } from "react-dom/client" -import React from "react" - -// export mount and unmount functions -export const mount = (container, options = {}) => { - import("./App").then((App) => { - mount.root = createRoot(container) - mount.root.render(React.createElement(App.default, options?.props)) - }) -} - -export const unmount = () => mount.root && mount.root.unmount() diff --git a/apps/greenhouse-management/src/lib/helpers.js b/apps/greenhouse-management/src/lib/helpers.js deleted file mode 100644 index 531d03702..000000000 --- a/apps/greenhouse-management/src/lib/helpers.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const parseError = (error) => { - let errMsg = JSON.stringify(error) - if (error?.message) { - errMsg = error?.message - try { - errMsg = JSON.parse(error?.message).msg - } catch (error) {} - } - return errMsg -} diff --git a/apps/greenhouse-management/src/lib/store.js b/apps/greenhouse-management/src/lib/store.js deleted file mode 100644 index cd1a3c95b..000000000 --- a/apps/greenhouse-management/src/lib/store.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createStore } from "zustand" -import { devtools } from "zustand/middleware" -import { managementPluginConfig } from "../../package.json" -import { useActions as messageActions } from "messages-provider" - -export default (options) => { - // check the managementPluginConfig is an object and not array or string - const { addMessage } = messageActions() - let configs = managementPluginConfig - - // check if the managementPluginConfig is an object with key values - if ( - typeof configs !== "object" || - Array.isArray(configs) || - Object.keys(configs).length === 0 - ) { - configs = {} - addMessage({ - variant: "error", - text: "managementPluginConfig is not an object with key values in the package.json", - }) - } - - // set the endpoint and embedded props for the management plugin coming from the package.json - Object.keys(configs).forEach((key) => { - // pull latest version in dev and qa - configs[key].version = options.environment =='qa' || options.environment == 'development' ? 'latest' : configs[key].version - configs[key].props = { - endpoint: options.apiEndpoint, - embedded: true, - } - }) - - return createStore( - devtools((set, get) => ({ - isUrlStateSetup: false, - assetsUrl: options.assetsUrl, - apiEndpoint: options.apiEndpoint, - pluginConfig: configs, - authData: { - loggedIn: false, - error: null, - data: null, - }, - authAppLoaded: false, - pluginActive: "greenhouse-cluster-admin", // name of the active plugin default - - actions: { - setPluginActive: (pluginId) => { - // find the pluginConfig which plugin name matches the plugin id - const plugin = Object.values(get().pluginConfig).find( - (plugin) => plugin.name === pluginId - ) - if (!plugin) return - - set( - (state) => { - state.pluginActive = plugin.name - }, - false, - "setPluginActive" - ) - }, - setIsUrlStateSetup: (isSetup) => - set( - (state) => { - state.isUrlStateSetup = isSetup - }, - false, - "setIsUrlStateSetup" - ), - setAuthData: (data) => - set( - (state) => ({ - authData: { - ...state.auth, - loggedIn: data ? data.loggedIn : false, - error: data ? data.error : null, - data: data ? data.auth : null, - }, - }), - false, - "setAuthData" - ), - setAuthAppLoaded: (loaded) => - set( - (state) => { - state.authAppLoaded = loaded - }, - false, - "setAuthAppLoaded" - ), - }, - })) - ) -} diff --git a/apps/greenhouse-management/src/styles.scss b/apps/greenhouse-management/src/styles.scss deleted file mode 100644 index 8e3a75e65..000000000 --- a/apps/greenhouse-management/src/styles.scss +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -/* Do not remove these tailwind directives. Without them styles won't work as expected */ -@tailwind base; -@tailwind components; -@tailwind utilities; - - -/* If necessary, app styles can be added below */ - -.svg-bg-test { - background: url('assets/juno-danger.svg') -} - -// .svg-bg-test-big-file { -// background: left 80px no-repeat url('assets/map.svg') -// } - - diff --git a/apps/greenhouse-management/tailwind.config.js b/apps/greenhouse-management/tailwind.config.js deleted file mode 100644 index 81b1f8fef..000000000 --- a/apps/greenhouse-management/tailwind.config.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// opacity helper to make custom colors work with opacity -function withOpacity(variableName) { - return ({ opacityVariable, opacityValue }) => { - if (opacityValue !== undefined) { - return `rgba(var(${variableName}), ${opacityValue})` - } - if (opacityVariable !== undefined) { - return `rgba(var(${variableName}), var(${opacityVariable}, 1))` - } - return `rgb(var(${variableName}))` - } -} - -module.exports = { - presets: [ - require("juno-ui-components/build/lib/tailwind.config"), // important, do not change - ], - prefix: "", // important, do not change - content: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"], - corePlugins: { - preflight: false, // important, do not change - }, - theme: {}, - plugins: [], -} diff --git a/apps/greenhouse/.gitignore b/apps/greenhouse/.gitignore deleted file mode 100644 index dbaccf123..000000000 --- a/apps/greenhouse/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.plugin.config.yaml diff --git a/apps/greenhouse/LICENSE b/apps/greenhouse/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/apps/greenhouse/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apps/greenhouse/README.md b/apps/greenhouse/README.md deleted file mode 100644 index 055d183d9..000000000 --- a/apps/greenhouse/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Greenhouse App - -This is the shell app for Project Greenhouse. It is the host for all apps that are part of Greenhouse. diff --git a/apps/greenhouse/__mocks__/client.js b/apps/greenhouse/__mocks__/client.js deleted file mode 100644 index 84531d3c2..000000000 --- a/apps/greenhouse/__mocks__/client.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { JSDOM } from "jsdom" -const dom = new JSDOM() -global.document = dom.window.document -global.window = dom.window diff --git a/apps/greenhouse/__mocks__/fileMock.js b/apps/greenhouse/__mocks__/fileMock.js deleted file mode 100644 index 27ce65aca..000000000 --- a/apps/greenhouse/__mocks__/fileMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = "test-file-stub" diff --git a/apps/greenhouse/__mocks__/styleMock.js b/apps/greenhouse/__mocks__/styleMock.js deleted file mode 100644 index d74516001..000000000 --- a/apps/greenhouse/__mocks__/styleMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = {} diff --git a/apps/greenhouse/babel.config.js b/apps/greenhouse/babel.config.js deleted file mode 100644 index 0719e2fec..000000000 --- a/apps/greenhouse/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - env: { - test: { - presets: ["@babel/preset-env", "@babel/preset-react"], - plugins: [["babel-plugin-transform-import-meta", { module: "ES6" }]], - }, - }, -} diff --git a/apps/greenhouse/esbuild.config.js b/apps/greenhouse/esbuild.config.js deleted file mode 100644 index 2394388b8..000000000 --- a/apps/greenhouse/esbuild.config.js +++ /dev/null @@ -1,206 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const esbuild = require("esbuild") -const fs = require("node:fs/promises") -const pkg = require("./package.json") -const postcss = require("postcss") -const sass = require("sass") -const { transform } = require("@svgr/core") -const url = require("postcss-url") -// this function generates app props based on package.json and propSecrets.json -const appProps = require("../../helpers/appProps") - -if (!/.+\/.+\.js/.test(pkg.module)) - throw new Error( - "module value is incorrect, use DIR/FILE.js like build/index.js" - ) - -const isProduction = process.env.NODE_ENV === "production" -// If the jspm server fails and we cannot use external packages -// in our import map then IGNORE_EXTERNALS (global env variable) -// should be set to true -const IGNORE_EXTERNALS = process.env.IGNORE_EXTERNALS === "true" -// in dev environment we prefix output file with public -let outfile = `${isProduction ? "" : "public/"}${pkg.main || pkg.module}` -// get output from outputfile -let outdir = outfile.slice(0, outfile.lastIndexOf("/")) -const args = process.argv.slice(2) -const watch = args.indexOf("--watch") >= 0 -const serve = args.indexOf("--serve") >= 0 - -// helpers for console log -const green = "\x1b[32m%s\x1b[0m" -const yellow = "\x1b[33m%s\x1b[0m" -const clear = "\033c" - -const build = async () => { - // delete build folder and re-create it as an empty folder - await fs.rm(outdir, { recursive: true, force: true }) - await fs.mkdir(outdir, { recursive: true }) - - // build app - let ctx = await esbuild.context({ - bundle: true, - minify: isProduction, - // target: ["es2020"], - target: ["es2020"], //["chrome64", "firefox67", "safari11.1", "edge79"], - format: "esm", - platform: "browser", - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - loader: { ".js": "jsx" }, - sourcemap: !isProduction, - // here we exclude package from bundle which are defined in peerDependencies - // our importmap generator uses also the peerDependencies to create the importmap - // it means all packages defined in peerDependencies are in browser available via the importmap - external: - isProduction && !IGNORE_EXTERNALS - ? Object.keys(pkg.peerDependencies || {}) - : [], - entryPoints: [pkg.source], - outdir, - // this step is important for performance reason. - // the main file (index.js) contains minimal code needed to - // load the app via dynamic import (splitting: true) - splitting: true, - // we suport only esm! - format: "esm", - plugins: [ - // minimal plugin to log the recompiling process. - { - name: "start/end", - setup(build) { - build.onStart(() => { - console.log(clear) - console.log(yellow, "Compiling...") - }) - build.onEnd(() => console.log(green, "Done!")) - }, - }, - - // this custom plugin rewrites SVG imports to - // dataurls, paths or react components based on the - // search param and size - { - name: "svg-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(svg)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - let loader = "text" - if (args.suffix === "?url") { - // as URL - const maxSize = 10240 // 10Kb - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - } else { - // as react component - // use react component loader (jsx) - loader = "jsx" - contents = await transform(contents, { - plugins: ["@svgr/plugin-jsx"], - }) - } - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin rewrites image imports to - // dataurls or urls based on the size - { - name: "image-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(png|jpg|jpeg|gif)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - const maxSize = 10240 // 10Kb - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin parses the style files - { - name: "parse-styles", - setup(build) { - build.onLoad( - // consider only .scss and .css files - { filter: /.\.(css|scss)$/, namespace: "file" }, - async (args) => { - let content - // handle scss, convert to css - if (args.path.endsWith(".scss")) { - const result = sass.renderSync({ file: args.path }) - content = result.css - } else { - // read file content - content = await fs.readFile(args.path) - } - - // postcss plugins - const plugins = [ - require("tailwindcss"), - require("autoprefixer"), - // rewrite urls inside css - url({ - url: "inline", - // maxSize: 10, // use dataurls if files are smaller than 10k - // fallback: "copy", // if files are bigger use copy method - // assetsPath: "./build/assets", - // useHash: true, - // optimizeSvgEncode: true, - }), - ] - - const { css } = await postcss(plugins).process(content, { - from: args.path, - to: outdir, - }) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - return { contents: css, loader: "text" } - } - ) - }, - }, - ], - }) - - // watch and serve - if (watch || serve) { - if (watch) await ctx.watch() - if (serve) { - // generate app props based on package.json and secretProps.json - await fs.writeFile( - `./${outdir}/appProps.js`, - `export default ${JSON.stringify(appProps())}` - ) - - let { host, port } = await ctx.serve({ - host: "0.0.0.0", - port: parseInt(process.env.APP_PORT || process.env.PORT || 3000), - servedir: "public", - }) - console.log("serve on", `${host}:${port}`) - } - } else { - await ctx.rebuild() - await ctx.dispose() - } -} - -build() diff --git a/apps/greenhouse/jest.config.js b/apps/greenhouse/jest.config.js deleted file mode 100644 index 0cb80394c..000000000 --- a/apps/greenhouse/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - transform: { "\\.[jt]sx?$": "babel-jest" }, - testEnvironment: "jsdom", - setupFilesAfterEnv: ["/setupTests.js"], - transformIgnorePatterns: [ - "node_modules/(?!(juno-ui-components|communicator)/)", - ], - moduleNameMapper: { - // Jest currently doesn't support resources with query parameters. - // Therefore we add the optional query parameter matcher at the end - // https://github.com/facebook/jest/issues/4181 - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)(\\?.+)?$": - require.resolve("./__mocks__/fileMock"), - "\\.(css|less|scss)$": require.resolve("./__mocks__/styleMock"), - }, -} diff --git a/apps/greenhouse/package.json b/apps/greenhouse/package.json deleted file mode 100644 index df0c1778c..000000000 --- a/apps/greenhouse/package.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "name": "greenhouse", - "version": "0.1.20", - "managementVersion": "1.1.13", - "author": "UI-Team", - "contributors": [ - "Andreas Pfau", - "Arturo Reuschenbach Puncernau", - "Esther Schmitz" - ], - "repository": "https://github.com/sapcc/juno/tree/main/apps/greenhouse", - "license": "Apache-2.0", - "source": "src/index.js", - "module": "build/index.js", - "private": true, - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tailwindui/react": "^0.1.1", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "messages-provider": "*", - "immer": "^9.0.21", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sapcc-k8sclient": "^1.0.2", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "utils": "*", - "zustand": "4.3.7" - }, - "scripts": { - "test": "jest", - "start": "NODE_ENV=development node esbuild.config.js --serve --watch", - "build": "NODE_ENV=production node esbuild.config.js" - }, - "peerDependencies": { - "juno-ui-components": "*", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", - "zustand": "4.3.7" - }, - "importmapExtras": { - "zustand/middleware": "4.3.7" - }, - "appProps": { - "authIssuerUrl": { - "value": "https://endpoint_url_of_the_openid_provider.com", - "type": "required", - "description": "Endpoint URL of the OpenID provider" - }, - "authClientId": { - "value": "tbd", - "type": "required", - "description": "OIDC client id. " - }, - "theme": { - "value": "theme-dark", - "description": "Override the default theme. Possible values are theme-light or theme-dark (default)" - }, - "embedded": { - "value": "false", - "description": "Set to true if app is to be embedded in another existing app or page, like e.g. Elektra. If set to true the app won't render a page header/footer and instead render only the content" - }, - "currentHost": { - "value": "URL TO ASSETS SERVER", - "type": "required", - "description": "This value is usually set by the Widget Loader. However, if this app is loaded via import or importShim, then this props parameter should be set." - }, - "apiEndpoint": { - "value": "URL TO K8S API", - "type": "required", - "description": "This value is necessary to communicate with the Kubernetes API. All the information you need comes from this API." - }, - "mockAuth": { - "value": false, - "type": "optional", - "description": "mock the OIDC data, allowed values are 'true', 'false' (default), or json (pure or base64 encoded)" - }, - "demoOrg": { - "value": "demo", - "type": "optional", - "description": "if organization name is equal to this value, then the app will be in demo mode. That means that the authentication will be mocked and plugins are loaded from demo org." - }, - "demoUserToken": { - "value": "token for demo user", - "type": "optional", - "description": "if both demoOrg and demoUserToken are set and organization name is equal to demoOrg, then this token will be used for authentication." - }, - "environment": { - "value": "production", - "type": "optional", - "description": "environment name, e.g. production, qa, development, etc. This property can be used to load different plugins for different environments." - } - }, - "appPreview": true -} \ No newline at end of file diff --git a/apps/greenhouse/public/android-chrome-192x192.png b/apps/greenhouse/public/android-chrome-192x192.png deleted file mode 100644 index 5459a8dedae4ac70a61dab1ea3d6b6dc9cf6a272..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3392 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 diff --git a/apps/greenhouse/public/apple-touch-icon.png b/apps/greenhouse/public/apple-touch-icon.png deleted file mode 100644 index c76354909ca47c255a636c82e7de1d6ef2f903e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2821 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 diff --git a/apps/greenhouse/public/favicon.ico b/apps/greenhouse/public/favicon.ico deleted file mode 100644 index 7e28ca34871c34d985338c997b9ebb3319ff10b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 zcmeHN32aqG6nzL9b_*>~DbTXEl*N`EWGS*KR75rxP)cHrZ2|&iDGE|WDG17@Xw+0d z>H->+ogkYiB1BP$Aczzt5ooCtK?w=;I%mrL&Y!;j-ur$3w^ez`bl#ioo^$8Uy))Bq z7!{0)Mo5Su@+jlUN`}$NFpQ|EqVJemhLI)8;^J=9w=j&obqpg$v=LoIkD_vsnLZ(v zjlu?XY7{n!2s2G}YTR0gHfpL>r9xpuXmwd8>gj{*m9%sFwqj}jzP*$*Y9xuiUa4i% z2DBpUEm>ACq%!UQ`YVbEtM1hX<1Sh-mtM%2L1EP^dDX?oHlsbecY5~^{ilDo_N^&< zm^v5LjNU$*{ zxG?Xl-_NG@t(zBXKV{-L!gJ`mgO1V1mXIK933u3uQWS{FteKQf1@ajr_)U)TU)i7SgGl96EjaSDN?Yb9CaT<8=JkQChZi z5#^pcN5_6VO0z_4)MGZ|a3jC>T^*&aGiIbygRmMDSuezE{u|d1rPl?HoRdG(v7<+% zK3X?#)hxc@w`W;IJtkz&p%J!esh2d zE?l78+;j3BWeewLQpdJ2#rB1a$Bq0!eS1lHYd**(_^)`u7rMoM4f8uRvA>MVXV07w ze*6>a)4gLceYla2y`pN*@DnVb`5}i4VER2jU+QXL-=0)Iv|2#tA98%jM;)+2N7$$Q zdHFJZB=)L|4Nl(5|J(ULj01g-d1M6T<>g8rjPYO}sMFJsf&C~&tj9pf$J&PN!R~RE zz~1m;K>=;qv|ie$E?@n2GyjO$h<9hto{@6zzF}XX)hg1+Ap_~lJ-el@fvKn1OQ2kp z?UsL=7Lk;mHo@omf{nq}ppSC`t(48@jy)d}puXFMBt?J`^ULGxe`6cQcA1n1y z8uA$z^f5GX03F!BkItU?P3mLPxD?y{Pp>ZR9Pj5?mQ{{*fwLZB#r5mgeacTx8b#Nx zU87%4<jq~`tG=ooLm#}}IEGpEnQJLEtl_&~RM!kPLtamQdcR*%kcavu}OKe$W5-HICy*k|FvSXSc< z66Y0ua8`4Za3pn_F5QmB_T!KK-O9{-A%o3_ zMvWL^Iqz0Bfx6Pfk8}8`oRc2xc)_~EU6b=>ef zsZS(P;(*=^pL%wQr_9+I^6Y^^e|ZEGKkFO5HnD$i&;Q!Y)-QZkYVugWc?1*xsF4qN z;bwa_!_Rfh1Dw_QNKGDNy3T`%pE2pV6@G3D9+)$g2iCsMqpa~WUSGKx55Aj6pR&NO z`hTZ>Q{|C4dzQzRN)tc(BWc(-{`l)}z(bv@(!kHS*&pGah97?Smj`nQCVm|^`%zUU z^jQ+W8EpJGSFpZuKd$0JDKRm zeiK|^WAK}i;UQkO4;gl2F{YB>=e~OGSf<7Ud!@Nz@2c`}JeG3)a=U+aDwBEZ^MSeH zI;Ud=QvdkhJwHzUKk$ObhIMNRzuPDa{P0KYFBv~_=(D7AS{nM-af3sOSdWOKy#EIe z_$hyR1QWlG8+rzAo_pk2i*9%X3qSlnKfn#!RdMU@W<2oQ64lq}eefMD{1_XU?QrXu zbRK3tQ|%K>{Hh#(-<|R(ulSj-9gp&kpLxJ9Wv^V$OG^4J#A5ypA1b)5SsuvvWj4Ok zGM$HqkRSL<;-{VBbJ`9(^jK)s7wy$p1KwrDLys%Kg5Mch;YXdmme3Cmc;Np7cKzMf zo8fj6TXea;cwj7l_G9|EzP - - - - - - - - - - - diff --git a/apps/greenhouse/public/index.html b/apps/greenhouse/public/index.html deleted file mode 100644 index 02fcbdbba..000000000 --- a/apps/greenhouse/public/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - Greenhouse Dev - - - - - -
    - - diff --git a/apps/greenhouse/secretProps.template.json b/apps/greenhouse/secretProps.template.json deleted file mode 100644 index 825e7f86c..000000000 --- a/apps/greenhouse/secretProps.template.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "authIssuerUrl": "https://auth.backend.com/", - "authClientId": "client-id", - "currentHost": "https://assets.server.com/", - "apiEndpoint": "https://api.greenhouse.com/", - "environment": "dev" -} diff --git a/apps/greenhouse/setupTests.js b/apps/greenhouse/setupTests.js deleted file mode 100644 index db44c9038..000000000 --- a/apps/greenhouse/setupTests.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom" diff --git a/apps/greenhouse/src/Shell.js b/apps/greenhouse/src/Shell.js deleted file mode 100644 index 05102e02f..000000000 --- a/apps/greenhouse/src/Shell.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useLayoutEffect } from "react" - -import ShellLayout from "./components/layout/ShellLayout" -import Auth from "./components/Auth" -import styles from "./styles.scss" -import { AppShellProvider } from "juno-ui-components" -import PluginContainer from "./components/PluginContainer" -import AsyncWorker from "./components/AsyncWorker" -import StoreProvider, { useGlobalsActions } from "./components/StoreProvider" -import { MessagesProvider } from "messages-provider" - -const Shell = (props = {}) => { - const { setApiEndpoint, setAssetsHost, setDemoUserToken, setEnvironment } = - useGlobalsActions() - - // INIT - // on app initial load save Endpoint and URL_STATE_KEY so it can be - // used from overall in the application - useLayoutEffect(() => { - if (!setApiEndpoint || !setAssetsHost || !setDemoUserToken) return - // set to empty string to fetch local test data in dev mode - setEnvironment(props.environment) - setApiEndpoint(props.apiEndpoint) - setAssetsHost(props.currentHost) - setDemoUserToken(props.demoUserToken) - }, [setApiEndpoint, setAssetsHost, setDemoUserToken]) - - return ( - - - - - - ) -} - -const StyledShell = (props) => { - return ( - - {/* load styles inside the shadow dom */} - - - - - - - - - ) -} - -export default StyledShell diff --git a/apps/greenhouse/src/Shell.test.js b/apps/greenhouse/src/Shell.test.js deleted file mode 100644 index e8b0e3ed5..000000000 --- a/apps/greenhouse/src/Shell.test.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { render, act } from "@testing-library/react" -// support shadow dom queries -// https://reactjsexample.com/an-extension-of-dom-testing-library-to-provide-hooks-into-the-shadow-dom/ -import { screen } from "shadow-dom-testing-library" -import Shell from "./Shell" -import Auth from "./components/Auth" -import StoreProvider from "./components/StoreProvider" - -jest.mock("communicator") -jest.mock("./components/Auth") - -test("renders app", async () => { - await act(() => - render( - - - - ) - ) - - expect(Auth).toHaveBeenCalled() -}) diff --git a/apps/greenhouse/src/actions.js b/apps/greenhouse/src/actions.js deleted file mode 100644 index 4c818af6b..000000000 --- a/apps/greenhouse/src/actions.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const ENDPOINT = "https://endpoint-url-here.com" - -class HTTPError extends Error { - constructor(code, message) { - super(message || code) - this.name = "HTTPError" - this.statusCode = code - } -} - -const encodeUrlParamsFromObject = (options) => { - if (!options) return "" - let encodedOptions = Object.keys(options) - .map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(options[k])}`) - .join("&") - return `&${encodedOptions}` -} - -// Check response status -const checkStatus = (response) => { - if (response.status < 400) { - return response - } else { - return response.text().then((message) => { - var error = new HTTPError(response.status, message || response.statusText) - error.statusCode = response.status - return Promise.reject(error) - }) - } -} - -// Example fetch call. Adjust as needed for your API -export const exampleFetch = ({ queryKey }) => { - const [_key, endpoint, options] = queryKey - const query = encodeUrlParamsFromObject(options) - return fetch(`${endpoint}/colors.json?${query}`, { - method: "GET", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - }, - }) - .then(checkStatus) - .then((response) => { - return response.json() - }) -} diff --git a/apps/greenhouse/src/assets/ccloud_shape.svg b/apps/greenhouse/src/assets/ccloud_shape.svg deleted file mode 100644 index 04216ebd0..000000000 --- a/apps/greenhouse/src/assets/ccloud_shape.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/apps/greenhouse/src/assets/greenhouse_logo.svg b/apps/greenhouse/src/assets/greenhouse_logo.svg deleted file mode 100644 index 785a0527a..000000000 --- a/apps/greenhouse/src/assets/greenhouse_logo.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/apps/greenhouse/src/assets/juno_default_app.svg b/apps/greenhouse/src/assets/juno_default_app.svg deleted file mode 100644 index cc350ee28..000000000 --- a/apps/greenhouse/src/assets/juno_default_app.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/greenhouse/src/assets/juno_doop.svg b/apps/greenhouse/src/assets/juno_doop.svg deleted file mode 100644 index ddf2c0308..000000000 --- a/apps/greenhouse/src/assets/juno_doop.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/greenhouse/src/assets/juno_heureka.svg b/apps/greenhouse/src/assets/juno_heureka.svg deleted file mode 100644 index 9ee687510..000000000 --- a/apps/greenhouse/src/assets/juno_heureka.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/greenhouse/src/assets/juno_supernova.svg b/apps/greenhouse/src/assets/juno_supernova.svg deleted file mode 100644 index 16781ca3e..000000000 --- a/apps/greenhouse/src/assets/juno_supernova.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - diff --git a/apps/greenhouse/src/components/AsyncWorker.jsx b/apps/greenhouse/src/components/AsyncWorker.jsx deleted file mode 100644 index de26545c4..000000000 --- a/apps/greenhouse/src/components/AsyncWorker.jsx +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect } from "react" -import useUrlState from "../hooks/useUrlState" -import useCommunication from "../hooks/useCommunication" -import { useAuthData, useAuthLoggedIn } from "../components/StoreProvider" - -const currentUrl = new URL(window.location.href) -let match = currentUrl.host.match(/^(.+)\.dashboard\..+/) -let orgName = match ? match[1] : currentUrl.searchParams.get("org") - -const AsyncWorker = () => { - const authData = useAuthData() - const authLoggedIn = useAuthLoggedIn() - - useCommunication() - useUrlState() - - // read org name from token and adjust url to contain the org name - useEffect(() => { - if (!authLoggedIn) return - - if (!orgName) { - const orgString = authData?.raw?.groups?.find( - (g) => g.indexOf("organization:") === 0 - ) - - if (orgString) { - const name = orgString.split(":")[1] - let url = new URL(window.location.href) - url.searchParams.set("org", name) - window.history.replaceState(null, null, url.href) - } - } - }, [authLoggedIn, authData]) - - return null -} - -export default AsyncWorker diff --git a/apps/greenhouse/src/components/Auth.jsx b/apps/greenhouse/src/components/Auth.jsx deleted file mode 100644 index 2405a930d..000000000 --- a/apps/greenhouse/src/components/Auth.jsx +++ /dev/null @@ -1,176 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState, createRef } from "react" -import { Button, LoadingIndicator, Spinner, Stack } from "juno-ui-components" -import { - useAuthAppLoaded, - useAuthLoggedIn, - useAuthIsProcessing, - useAuthError, - useAuthActions, - useGlobalsActions, - useGlobalsAssetsHost, -} from "../components/StoreProvider" -import { useAppLoader } from "utils" -import { useActions } from "messages-provider" - -const currentUrl = new URL(window.location.href) -let match = currentUrl.host.match(/^(.+)\.dashboard\..+/) -let orgName = match ? match[1] : currentUrl.searchParams.get("org") - -/** - * Auth Component: - * - * This component is responsible for managing user authentication and loading the authentication app dynamically. - * It receives the following props: - * - clientId: The client ID for authentication. - * - issuerUrl: The URL of the authentication issuer. - * - mock: A flag indicating whether to use mock authentication. - * - children: The content to be displayed when the user is logged in. - * - * The component uses custom hooks to handle authentication states and data. It dynamically loads the authentication - * app via the use of the useAppLoader hook. When mounted, the component connects to the authentication events, - * allowing seamless authentication experiences. - * - * The Auth component renders three main sections: - * 1. A div element with a data-app attribute set to "greenhouse-auth" and a ref for loading the authentication app. - * 2. If the user is logged in, the children are rendered. - * 3. If the user is not logged in, a stack containing loading indicators, messages, and a "Sign in" button is rendered. - * The component handles various loading states, shows a long loading indicator after 5 seconds, and displays specific - * messages based on the authentication status. - * - * Note: The component reads organization information from the token and adjusts the URL accordingly after the user is logged in. - */ -const Auth = ({ - clientId, - issuerUrl, - mock, - children, - demoOrg, - demoUserToken, -}) => { - const assetsHost = useGlobalsAssetsHost() - const authAppLoaded = useAuthAppLoaded() - const authLoggedIn = useAuthLoggedIn() - const authIsProcessing = useAuthIsProcessing() - const authError = useAuthError() - const { login } = useAuthActions() - const { setDemoMode } = useGlobalsActions() - const { addMessage } = useActions() - - const ref = createRef() - const { mount } = useAppLoader(assetsHost) - const [loading, setLoading] = useState(!authAppLoaded) - const [longLoading, setLongLoading] = useState(false) - - // in this useEffect we load the auth app via import (see mount) - // It should happen just once! - // The connection to the auth events happens in the useCommunication hook! - // wait until assetsHost is set to avoid a warning on mount - useEffect(() => { - if (!assetsHost || !clientId || !issuerUrl) return - - // if current orgName is the demo org, we mock the auth app - if (demoOrg === orgName) { - // we mock the auth app with default groups - mock = JSON.stringify({ - groups: ["organization:demo", "role:ccloud:admin"], - }) - // set demo mode - // see in useCommunication hook, there we redefine the authData.JWT wit demoUserToken if demo mode is set - setDemoMode(true) - } - - mount(ref.current, { - id: "auth", - name: "auth", - version: "latest", - props: { - issuerUrl: issuerUrl, - clientId: clientId, - mock: mock, - debug: true, - initialLogin: true, - requestParams: JSON.stringify({ - connector_id: !orgName ? undefined : orgName, - }), - }, - }) - // add mount to the dependencies since it changes depending on the assetsHost - }, [mount, clientId, issuerUrl, assetsHost]) - - // timeout for waiting for auth - useEffect(() => { - setLoading(!authAppLoaded) - if (authAppLoaded) return - // set timeout for waiting for auth app - let loadingTimer - if (!authAppLoaded) { - loadingTimer = setTimeout(() => { - if (!authAppLoaded) setLoading(false) - }, 30000) // 30 seconds - } - - return () => loadingTimer && clearTimeout(loadingTimer) - }, [authAppLoaded, setLoading]) - - // set long loading - useEffect(() => { - let longLoadingTimer = setTimeout(() => setLongLoading(true), 5000) // long loading if longer than 5 seconds - return () => longLoadingTimer && clearTimeout(longLoadingTimer) - }, []) - - return ( - <> -
    - - {!!authLoggedIn && children} - - {!authLoggedIn && ( - - {loading || authIsProcessing ? ( - <> - {longLoading ? ( - - ) : ( - - )} - {loading ? "Loading..." : "Signing on..."} - - ) : ( - <> - {authAppLoaded ? ( - <> - - {authError - ? "You have been logged out. Please sign in again." - : "Please sign in before you can use Greenhouse."} - - - - ) : ( - "Looks like the auth app is missing!" - )} - - )} - - )} - - ) -} - -export default Auth diff --git a/apps/greenhouse/src/components/Avatar.jsx b/apps/greenhouse/src/components/Avatar.jsx deleted file mode 100644 index 6e41eb812..000000000 --- a/apps/greenhouse/src/components/Avatar.jsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack } from "juno-ui-components" - -const avatarCss = ` -h-8 -w-8 -bg-theme-background-lvl-2 -rounded-full -bg-cover -` - -const Avatar = ({ userName, url }) => { - return ( - - {url && ( -
    - )} - {userName && {userName}} - - ) -} - -export default Avatar diff --git a/apps/greenhouse/src/components/NotificationsContainer.jsx b/apps/greenhouse/src/components/NotificationsContainer.jsx deleted file mode 100644 index 61afdffc8..000000000 --- a/apps/greenhouse/src/components/NotificationsContainer.jsx +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Messages } from "messages-provider" -import { useDemoMode } from "./StoreProvider" - -const NotificationsContainer = () => { - const demoMode = useDemoMode() - - return ( - <> - {demoMode && ( -
    - Welcome to the Greenhouse demo system! We're glad you're here! Just a - quick heads up: you won't find any live data here. Enjoy exploring! -
    - )} - {/* do not use a container here to align the messages to the ones coming from each plugin */} - - - ) -} - -export default NotificationsContainer diff --git a/apps/greenhouse/src/components/Plugin.jsx b/apps/greenhouse/src/components/Plugin.jsx deleted file mode 100644 index 45ac97e77..000000000 --- a/apps/greenhouse/src/components/Plugin.jsx +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState, useMemo, useRef } from "react" -import { useAppLoader } from "utils" -import { usePlugin, useGlobalsAssetsHost } from "../components/StoreProvider" -import { Messages, useActions } from "messages-provider" -import { parseError } from "../lib/helpers" -import { Stack, Button } from "juno-ui-components" - -const Plugin = ({ id }) => { - const assetsHost = useGlobalsAssetsHost() - const { mount } = useAppLoader(assetsHost) - const holder = useRef() - const config = usePlugin().config() - const activeApps = usePlugin().active() - const { addMessage } = useActions() - - const [displayReload, setDisplayReload] = useState(false) - const [reload, setReload] = useState(0) - const [isMounted, setIsMounted] = useState(false) - - // element to mount the app - const el = document.createElement("div") - el.classList.add("inline") - const app = useRef(el) - - // mount the app each time the component is reloaded losing the state - useEffect(() => { - if (!mount || !assetsHost || !config) return - // mount the app - mount(app.current, { - ...config[id], - props: { ...config[id]?.props, embedded: true }, - }) - .then((loaded) => { - if (!loaded) return - setIsMounted(true) - }) - .catch((error) => { - setDisplayReload(true) - addMessage({ - variant: "error", - text: `${config?.name}: ` + parseError(error), - }) - }) - }, [mount, reload, config, assetsHost]) - - const displayPluging = useMemo( - () => activeApps.indexOf(id) >= 0, - [activeApps, config] - ) - - useEffect(() => { - if (!config[id] || !isMounted) return - - if (displayPluging) { - // add to holder - holder.current.appendChild(app.current) - } else { - // remove from holder - if (holder.current.contains(app.current)) - holder.current.removeChild(app.current) - } - }, [isMounted, displayPluging]) - - return ( -
    - {displayPluging && ( - <> - - {displayReload && ( - -

    - Uh-oh! Our plugin {config?.label} encountered a hiccup.{" "} -

    -

    - No worries, just give it a little nudge by clicking the{" "} - Reload button below. -

    -
    - ) -} - -export default Plugin diff --git a/apps/greenhouse/src/components/PluginContainer.jsx b/apps/greenhouse/src/components/PluginContainer.jsx deleted file mode 100644 index 70fe7e8d4..000000000 --- a/apps/greenhouse/src/components/PluginContainer.jsx +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import Plugin from "./Plugin" -import { usePlugin, useGlobalsEnvironment } from "../components/StoreProvider" -import useApi from "../hooks/useApi" -import { useLayoutEffect } from "react" -import HintLoading from "./shared/HintLoading" -import { parseError } from "../lib/helpers" -import { useActions, MessagesProvider } from "messages-provider" - -const PluginContainer = () => { - const { getPluginConfigs } = useApi() - const environment = useGlobalsEnvironment() - const config = usePlugin().config() - const isFetching = usePlugin().isFetching() - const { addMessage } = useActions() - - // prevent to load a plugin before the config is fetched to avoid rerendering do tue the default plugin greenhouse-mng - const [displayPlugin, setDisplayPlugin] = React.useState(false) - - const requestConfig = usePlugin().requestConfig - const receiveConfig = usePlugin().receiveConfig - const receiveError = usePlugin().receiveError - - const availableAppIds = React.useMemo(() => Object.keys(config), [config]) - - useLayoutEffect(() => { - if (!getPluginConfigs) return - requestConfig() - - // fetch configs from kubernetes - getPluginConfigs() - .then((kubernetesConfig) => { - receiveConfig(kubernetesConfig) - }) - .catch((error) => { - // error fetching configs - receiveError(error.message) - addMessage({ - variant: "error", - text: parseError(error), - }) - }) - .finally(() => { - setDisplayPlugin(true) - }) - }, [getPluginConfigs, environment]) - - return ( - <> - {displayPlugin && - availableAppIds.length > 0 && - availableAppIds.map((id, i) => ( - - - - ))} - {!isFetching && - !displayPlugin && - availableAppIds.length <= 0 && - "No plugins available."} - - ) -} - -export default PluginContainer diff --git a/apps/greenhouse/src/components/StoreProvider.jsx b/apps/greenhouse/src/components/StoreProvider.jsx deleted file mode 100644 index 15d54f269..000000000 --- a/apps/greenhouse/src/components/StoreProvider.jsx +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { createContext, useContext } from "react" -import { useStore as create } from "zustand" -import createStore from "../lib/store" - -const StoreContext = createContext() -const StoreProvider = ({ options, children }) => ( - - {children} - -) - -// build a hook from the store -const useStore = (selector) => create(useContext(StoreContext).store, selector) - -// AUTH -export const useAuthData = () => useStore((s) => s.auth.data) -export const useAuthIsProcessing = () => useStore((s) => s.auth.isProcessing) -export const useAuthLoggedIn = () => useStore((s) => s.auth.loggedIn) -export const useAuthError = () => useStore((s) => s.auth.error) -export const useAuthLastAction = () => useStore((s) => s.auth.lastAction) -export const useAuthAppLoaded = () => useStore((s) => s.auth.appLoaded) -export const useAuthAppIsLoading = () => useStore((s) => s.auth.appIsLoading) -export const useAuthActions = () => useStore((s) => s.auth.actions) - -// APPS -export const usePlugin = () => useContext(StoreContext).plugin - -// GLOBAL -export const useGlobalsApiEndpoint = () => - useStore((s) => s.globals.apiEndpoint) -export const useGlobalsAssetsHost = () => useStore((s) => s.globals.assetsHost) -export const useGlobalsIsUrlStateSetup = () => - useStore((state) => state.globals.isUrlStateSetup) -export const useGlobalsActions = () => useStore((s) => s.globals.actions) -export const useGlobalsEnvironment = () => - useStore((s) => s.globals.environment) -export const useDemoMode = () => useStore((s) => s.globals.demoMode) -export const useDemoUserToken = () => useStore((s) => s.globals.demoUserToken) - -export default StoreProvider diff --git a/apps/greenhouse/src/components/layout/ShellLayout.js b/apps/greenhouse/src/components/layout/ShellLayout.js deleted file mode 100644 index b4a7bb88b..000000000 --- a/apps/greenhouse/src/components/layout/ShellLayout.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import PluginNav from "../nav/PluginNav" -import NotificationsContainer from "../NotificationsContainer" - -const shellStyles = ` - grid - grid-cols-[max-content_auto] - grid-rows-[minmax(100vh,100%)] -` - -const mainStyles = ` - py-4 - pl-4 - bg-theme-global-bg - h-full -` - -const ShellLayout = ({ children }) => { - return ( -
    - -
    - -
    {children}
    -
    -
    - ) -} - -export default ShellLayout diff --git a/apps/greenhouse/src/components/layout/ShellLayout.test.js b/apps/greenhouse/src/components/layout/ShellLayout.test.js deleted file mode 100644 index b5d252a44..000000000 --- a/apps/greenhouse/src/components/layout/ShellLayout.test.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { render, act, renderHook } from "@testing-library/react" -// support shadow dom queries -// https://reactjsexample.com/an-extension-of-dom-testing-library-to-provide-hooks-into-the-shadow-dom/ -import { screen } from "shadow-dom-testing-library" -import ShellLayout from "./ShellLayout" -import StoreProvider from "../StoreProvider" -import { MessagesProvider } from "messages-provider" - -jest.mock("communicator") - -test("renders app", async () => { - await act(() => - render( - - - - - - ) - ) - - let logoTitle = await screen.queryAllByShadowTitle(/Greenhouse/i) - expect(logoTitle.length > 0).toBe(true) -}) diff --git a/apps/greenhouse/src/components/nav/PluginNav.js b/apps/greenhouse/src/components/nav/PluginNav.js deleted file mode 100644 index f76ff38f8..000000000 --- a/apps/greenhouse/src/components/nav/PluginNav.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import CCloudShape from "../../assets/ccloud_shape.svg" -import GreenhouseLogo from "../../assets/greenhouse_logo.svg" -import SupernovaIcon from "../../assets/juno_supernova.svg" -import DoopIcon from "../../assets/juno_doop.svg" -import HeurekaIcon from "../../assets/juno_heureka.svg" -import { Icon, Stack, Button } from "juno-ui-components" -import { - useAuthData, - useAuthLoggedIn, - useAuthActions, - usePlugin, -} from "../../components/StoreProvider" -import Avatar from "../Avatar" - -const AppIcon = ({ name }) => { - switch (name) { - case "supernova": - return - case "doop": - return - case "heureka": - return - default: - return - } -} - -const navStyles = ` -bg-juno-grey-blue-11 -py-4 -` - -const navItem = (active) => { - return ` - px-2 - py-3 - w-full - hover:text-theme-high - - ${ - active && - ` - bg-theme-global-bg - border-text-theme-light - border-l-4 - text-white - hover:text-white - ` - } -` -} - -const logoStyles = ` -pb-1 -` - -const logoText = ` -py-2 -font-bold -text-sm -leading-4 -` - -const appIconStyles = ` - -` - -const appNameStyles = ` -text-xs -break-all -` - -const PluginNav = () => { - const authData = useAuthData() - const loggedIn = useAuthLoggedIn() - const { login, logout } = useAuthActions() - const setActiveApps = usePlugin().setActive - const activeApps = usePlugin().active() - const appConfig = usePlugin().appConfig() - const mngConfig = usePlugin().mngConfig() - - return ( - - - - {appConfig.map((appConf, i) => ( - = 0 - )}`} - role="button" - tabIndex="0" - onClick={() => setActiveApps([appConf.id])} - > - - {appConf.displayName} - - ))} - - - {mngConfig.map((appConf, i) => ( - = 0 - )}`} - role="button" - tabIndex="0" - onClick={() => setActiveApps([appConf.id])} - > - - {appConf.displayName} - - ))} - - - {loggedIn ? ( - <> - - - - ) : ( - - )} - - - - ) -} - -export default PluginNav diff --git a/apps/greenhouse/src/components/shared/HintLoading.js b/apps/greenhouse/src/components/shared/HintLoading.js deleted file mode 100644 index 65a2f8eec..000000000 --- a/apps/greenhouse/src/components/shared/HintLoading.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack, Spinner } from "juno-ui-components" - -const HintLoading = ({ text }) => { - return ( - - - {text ? {text} : Loading...} - - ) -} - -export default HintLoading diff --git a/apps/greenhouse/src/hooks/useApi.js b/apps/greenhouse/src/hooks/useApi.js deleted file mode 100644 index 35226e05e..000000000 --- a/apps/greenhouse/src/hooks/useApi.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useCallback, useMemo } from "react" -import { createClient } from "sapcc-k8sclient" -import { - useAuthData, - useGlobalsApiEndpoint, - useGlobalsAssetsHost, -} from "../components/StoreProvider" -import { createPluginConfig } from "../lib/plugin" - -// get plugin configs from k8s api -const useApi = () => { - const authData = useAuthData() - // const token = useStoreByKey("auth.data?.JWT") - // const groups = useStoreByKey("auth.data?.raw?.groups") - const apiEndpoint = useGlobalsApiEndpoint() - const assetsHost = useGlobalsAssetsHost() - - const namespace = useMemo(() => { - if (!authData?.raw?.groups) return null - const orgString = authData?.raw?.groups.find( - (g) => g.indexOf("organization:") === 0 - ) - if (!orgString) return null - return orgString.split(":")[1] - }, [authData?.raw?.groups]) - - const client = useMemo(() => { - if (!apiEndpoint || !authData?.JWT) return null - return createClient({ apiEndpoint, token: authData?.JWT }) - }, [apiEndpoint, authData?.JWT]) - - const getPluginConfigs = useCallback(() => { - if (!client || !assetsHost || !namespace) return Promise.resolve({}) - - const manifestUrl = new URL("/manifest.json", assetsHost) - return Promise.all([ - // manifest - fetch(manifestUrl).then((r) => r.json()), - // plugin configs - client.get( - `/apis/greenhouse.sap/v1alpha1/namespaces/${namespace}/plugins`, - { - limit: 500, - } - ), - ]).then(([manifest, configs]) => { - // console.log("::::::::::::::::::::::::manifest", manifest) - // console.log("::::::::::::::::::::::::configs", configs.items) - - // create config map - const config = {} - configs.items.forEach((conf) => { - const id = conf.metadata?.name - const name = conf.status?.uiApplication?.name - const displayName = conf.spec?.displayName - const weight = conf.status?.weight - const version = conf.status?.uiApplication?.version - const url = conf.status?.uiApplication?.url - - // only add plugin if the url is from another host or the name with the given version is in the manifest! - if ((url && url.indexOf(assetsHost) < 0) || manifest[name]?.[version]) { - const newConf = createPluginConfig({ - id, - name, - displayName, - weight, - version, - url, - props: conf.spec?.optionValues?.reduce((map, item) => { - map[item.name] = item.value - return map - }, {}), - }) - if (newConf) config[id] = newConf - } - }) - - return config - }) - }, [client, assetsHost, namespace]) - - return { client, getPluginConfigs } -} - -export default useApi diff --git a/apps/greenhouse/src/hooks/useCommunication.js b/apps/greenhouse/src/hooks/useCommunication.js deleted file mode 100644 index 2826e4131..000000000 --- a/apps/greenhouse/src/hooks/useCommunication.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect, useCallback } from "react" -import { broadcast, get, watch } from "communicator" -import { - useAuthAppLoaded, - useAuthIsProcessing, - useAuthError, - useAuthLoggedIn, - useAuthLastAction, - useAuthActions, - useDemoMode, - useDemoUserToken, -} from "../components/StoreProvider" - -const useCommunication = () => { - const authAppLoaded = useAuthAppLoaded() - const authIsProcessing = useAuthIsProcessing() - const authLastAction = useAuthLastAction() - const { setData: authSetData, setAppLoaded: authSetAppLoaded } = - useAuthActions() - const demoMode = useDemoMode() - const demoUserToken = useDemoUserToken() - - const setAuthData = useCallback( - (data) => { - // If we're in demo mode, we need to make sure the JWT is set to the demo user's JWT - if (data?.auth && demoMode && demoUserToken) { - data.auth.JWT = demoUserToken - } - if (data?.auth?.error) - console.warn("Greenhouse: Auth error: ", data?.auth?.error) - authSetData(data) - }, - [authSetData, demoMode, demoUserToken] - ) - - useEffect(() => { - if (!authAppLoaded || authIsProcessing) return - if (authLastAction?.name === "signOn") { - broadcast("AUTH_LOGIN", "greenhouse", { - debug: true, - consumerID: "greenhouse", - }) - } else if (authLastAction?.name === "signOut") { - broadcast("AUTH_LOGOUT", "greenhouse", { - debug: true, - consumerID: "greenhouse", - }) - } - }, [authAppLoaded, authIsProcessing, authLastAction]) - - useEffect(() => { - if (!authSetData || !authSetAppLoaded) return - get("AUTH_APP_LOADED", authSetAppLoaded, { - consumerID: "greenhouse", - debug: true, - }) - const unwatchLoaded = watch("AUTH_APP_LOADED", authSetAppLoaded, { - debug: true, - consumerID: "greenhouse", - }) - - get("AUTH_GET_DATA", setAuthData, { consumerID: "greenhouse", debug: true }) - const unwatchUpdate = watch("AUTH_UPDATE_DATA", setAuthData, { - debug: true, - consumerID: "greenhouse", - }) - - return () => { - if (unwatchLoaded) unwatchLoaded() - if (unwatchUpdate) unwatchUpdate() - } - }, [setAuthData, authSetAppLoaded]) -} - -export default useCommunication diff --git a/apps/greenhouse/src/hooks/useUrlState.js b/apps/greenhouse/src/hooks/useUrlState.js deleted file mode 100644 index 24f34a29d..000000000 --- a/apps/greenhouse/src/hooks/useUrlState.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect, useLayoutEffect } from "react" -import { registerConsumer } from "url-state-provider" -import { - useAuthLoggedIn, - useGlobalsIsUrlStateSetup, - useGlobalsActions, - usePlugin, -} from "../components/StoreProvider" - -// url state manager -const GREENHOUSE_STATE_KEY = "greenhouse" -const ACTIVE_APPS_KEY = "a" -const urlStateManager = registerConsumer(GREENHOUSE_STATE_KEY) - -const useUrlState = () => { - // const { setActive: setActiveApps } = usePlugin.actions() - const setActiveApps = usePlugin().setActive - const activeApps = usePlugin().active() - const appsConfig = usePlugin().config() - const loggedIn = useAuthLoggedIn() - const isUrlStateSetup = useGlobalsIsUrlStateSetup() - const { setIsUrlStateSetup } = useGlobalsActions() - - // Initial state from URL (on login) - useLayoutEffect(() => { - if (!loggedIn || !appsConfig || isUrlStateSetup) return - - let active = urlStateManager.currentState()?.[ACTIVE_APPS_KEY] - if (active) setActiveApps(active.split(",")) - setIsUrlStateSetup(true) - }, [loggedIn, appsConfig, setActiveApps]) - - // sync URL state - useEffect(() => { - if (!loggedIn || !isUrlStateSetup) return - - const newActiveApps = activeApps?.join(",") - // if the current state is the same as the new state, don't push - // this prevents the history from being filled with the same state - // and therefore prevents the forward button from being disabled - // This small optimization allows the user to go back and forth! - if (urlStateManager.currentState()?.[ACTIVE_APPS_KEY] === newActiveApps) - return - - urlStateManager.push({ [ACTIVE_APPS_KEY]: activeApps.join(",") }) - }, [loggedIn, activeApps]) - - useEffect(() => { - const unregisterStateListener = urlStateManager.onChange((state) => { - const newActiveApps = state?.[ACTIVE_APPS_KEY]?.split(",") - setActiveApps(newActiveApps || []) - }) - - // disable this for now, it's annoying! - // This code sets the title of the page if URL changes. - // It was introduced to see different titles in the browser history. - // const unregisterGlobalChangeListener = urlStateManager.onGlobalChange( - // (state) => { - // const url = new URL(window.location) - // document.title = `Greenhouse - ${url.searchParams.get("__s")}` - // } - // ) - - return () => { - unregisterStateListener() - //unregisterGlobalChangeListener() - } - }, []) -} - -export default useUrlState diff --git a/apps/greenhouse/src/index.js b/apps/greenhouse/src/index.js deleted file mode 100644 index b16f8a89d..000000000 --- a/apps/greenhouse/src/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createRoot } from "react-dom/client" -import React from "react" -import { version } from "../package.json" - -const logAppName = (version) => { - const appName = `%c - ____ ____ _____ _____ _ _ _ _ ___ _ _ ____ _____ - / ___| _ \\| ____| ____| \\ | | | | |/ _ \\| | | / ___|| ____| -| | _| |_) | _| | _| | \\| | |_| | | | | | | \\___ \\| _| -| |_| | _ <| |___| |___| |\\ | _ | |_| | |_| |___) | |___ - \\____|_| \\_\\_____|_____|_| \\_|_| |_|\\___/ \\___/|____/|_____| v${version} -` - console.log(appName, "color:green") -} - -logAppName(version) - -// export mount and unmount functions -export const mount = (container, options = {}) => { - import("./Shell").then((App) => { - mount.root = createRoot(container) - mount.root.render(React.createElement(App.default, options?.props)) - }) -} - -export const unmount = () => mount.root && mount.root.unmount() diff --git a/apps/greenhouse/src/lib/helpers.js b/apps/greenhouse/src/lib/helpers.js deleted file mode 100644 index 531d03702..000000000 --- a/apps/greenhouse/src/lib/helpers.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const parseError = (error) => { - let errMsg = JSON.stringify(error) - if (error?.message) { - errMsg = error?.message - try { - errMsg = JSON.parse(error?.message).msg - } catch (error) {} - } - return errMsg -} diff --git a/apps/greenhouse/src/lib/plugin.js b/apps/greenhouse/src/lib/plugin.js deleted file mode 100644 index 4d3fc40a6..000000000 --- a/apps/greenhouse/src/lib/plugin.js +++ /dev/null @@ -1,242 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useStore, createStore } from "zustand" -import { devtools } from "zustand/middleware" -import produce from "immer" -import { managementVersion } from "../../package.json" - -export const NAV_TYPES = { - APP: "app", - MNG: "management", -} - -const pluginConfig = { - id: "", - name: "", - displayName: "", - version: "latest", - url: null, - weight: 0, - navType: NAV_TYPES.APP, - navigable: true, - props: { - id: "", - }, -} - -export const createPluginConfig = (config) => { - // check required attrs - if (!config?.id || !config?.name) { - console.warn( - `[greenhouse]::createPluginConfig: id and name are required. Skipping config: ${config}` - ) - return null - } - - // clone default pluginConfig - const newConfig = { ...pluginConfig } - // update just known attrs - Object.keys(newConfig).forEach((key) => { - // check agains type to update falsy booleans - if (typeof config?.[key] !== "undefined") newConfig[key] = config?.[key] - }) - // check displayName - if (!newConfig?.displayName) newConfig.displayName = newConfig.name - // update id to the props attr - newConfig.props = { ...newConfig.props, id: newConfig.id } - - return newConfig -} - -const filterAndSortConfigByType = (config, navtype) => { - if (typeof config !== "object" || config === null) return [] - return Object.values(config) - .filter((a) => a.navigable) - .filter((a) => a.navType === navtype) - .sort((a, b) => { - // sort by weight, then by name - // if weight is not defined, app is sorted to the end - const w1 = a.weight === undefined ? Infinity : a.weight - const w2 = b.weight === undefined ? Infinity : b.weight - let weightSort = w1 - w2 - weightSort = weightSort > 0 ? 1 : weightSort < 0 ? -1 : 0 - return weightSort || a.displayName.localeCompare(b.displayName) - }) -} - -// if no active app already set will set the app (no mng apps) with the lowest weight -const findActiveAppId = (appConfig) => { - if (!appConfig || appConfig.length === 0) return null - - // if there is no active app, then from appsConfig, get the app id of the app with the lowest weight and set it as active - const minWeightApp = appConfig.reduce((previous, current) => { - return current.weight < previous.weight ? current : previous - }) - - return [minWeightApp.id] -} - -const Plugin = ({ environment, apiEndpoint, currentHost }) => { - const store = createStore( - devtools((set, get) => ({ - active: [], - config: { - [`greenhouse-management`]: createPluginConfig({ - id: "greenhouse-management", - name: "greenhouse-management", - displayName: "Organization", - version: environment =='qa' || environment == 'development' ? 'latest' : managementVersion, // pull latest version in dev and qa - navType: NAV_TYPES.MNG, - props: { - assetsUrl: currentHost, - apiEndpoint: apiEndpoint, - environment: environment, - }, - }), - }, - appConfig: [], // kube app configs - mngConfig: [], // management app configs - isFetching: false, - error: null, - updatedAt: null, - })) - ) - const { getState, setState } = store - - const setIsFetching = (newState) => { - setState( - produce((state) => { - state.isFetching = newState - }), - false, - "plugin/setIsFetching" - ) - } - - const setError = (error) => - setState( - produce((state) => { - state.error = error - }), - false, - "plugin/setError" - ) - - const setActive = (active) => - setState( - produce((state) => { - if (!Array.isArray(active)) active = [active] - // if the current state is the same as the new state, don't update - if (JSON.stringify(state.active) === JSON.stringify(active)) return - state.active = active - }), - false, - "plugin/setActive" - ) - - // const addActive = (appName) => - // setState( - // produce((state) => { - // const index = getState().active.findIndex((i) => i === appName) - // if (index >= 0) return - // const newActive = getState().active.slice() - // newActive.push(appName) - // state.active = newActive - // }), - // false, - // "plugin/addActive" - // ) - - // const removeActive = (appName) => - // setState( - // produce((state) => { - // const index = getState().active.findIndex((i) => i === appName) - // if (index < 0) return - // let newActive = getState().active.slice() - // newActive.splice(index, 1) - // state.active = newActive - // }), - // false, - // "plugin/removeActive" - // ) - - const addConfig = (config) => - setState( - produce((state) => { - state.config = { ...getState().config, ...config } - }), - false, - "plugin/addConfig" - ) - - const splitApps = () => { - const allConfig = getState().config - const appConfig = filterAndSortConfigByType(allConfig, NAV_TYPES.APP) - setAppConfig(appConfig) - const mngConfig = filterAndSortConfigByType(allConfig, NAV_TYPES.MNG) - setMngConfig(mngConfig) - } - - const setAppConfig = (appConfig) => - setState( - produce((state) => { - state.appConfig = appConfig - }), - false, - "plugin/setAppConfig" - ) - - const setMngConfig = (mngConfig) => - setState( - produce((state) => { - state.mngConfig = mngConfig - }), - false, - "plugin/setMngConfig" - ) - - return { - active: () => useStore(store, (s) => s.active), - config: () => useStore(store, (s) => s.config), - appConfig: () => useStore(store, (s) => s.appConfig), - mngConfig: () => useStore(store, (s) => s.mngConfig), - isFetching: () => useStore(store, (s) => s.isFetching), - error: () => useStore(store, (s) => s.error), - updatedAt: () => useStore(store, (s) => s.updatedAt), - setActive: setActive, - requestConfig: () => { - setIsFetching(true) - setError(null) - }, - receiveError: (error) => { - setIsFetching(false) - setError(error) - // on api error split then the preconfigured - splitApps() - }, - receiveConfig: (kubeConfig) => { - // add config and other states - addConfig(kubeConfig) - setIsFetching(false) - setError(null) - - // split apps in mng and apps - splitApps() - - // if no config found in the active apps set a new one but from the apps and not mng - if ( - Object.keys(getState().config).filter((key) => - getState().active.includes(key) - ).length === 0 - ) { - const newActiveApp = findActiveAppId(getState().appConfig) - setActive(newActiveApp) - } - }, - } -} - -export default Plugin diff --git a/apps/greenhouse/src/lib/plugin.test.js b/apps/greenhouse/src/lib/plugin.test.js deleted file mode 100644 index 7a26ddd01..000000000 --- a/apps/greenhouse/src/lib/plugin.test.js +++ /dev/null @@ -1,173 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { createPluginConfig, NAV_TYPES } from "./plugin" -import StoreProvider, { usePlugin } from "../components/StoreProvider" -import { renderHook, act } from "@testing-library/react" - -describe("Plugin", () => { - describe("createPluginConfig", () => { - it("requires at least an id and name", () => { - const spy = jest.spyOn(console, "warn").mockImplementation(() => {}) - - createPluginConfig() - createPluginConfig({ id: "test" }) - createPluginConfig({ name: "test" }) - - expect(spy).toHaveBeenCalledTimes(3) - expect(spy).toHaveBeenCalledWith( - expect.stringContaining( - "[greenhouse]::createPluginConfig: id and name are required." - ) - ) - spy.mockRestore() - }) - - it("maps name to displayName if missing", () => { - expect(createPluginConfig({ id: "id_test", name: "name_test" })).toEqual( - expect.objectContaining({ displayName: "name_test" }) - ) - }) - - it("sets weight to default 0 if missing", () => { - expect(createPluginConfig({ id: "id_test", name: "name_test" })).toEqual( - expect.objectContaining({ weight: 0 }) - ) - }) - - it("sets version to latest if missing", () => { - expect(createPluginConfig({ id: "id_test", name: "name_test" })).toEqual( - expect.objectContaining({ version: "latest" }) - ) - }) - - it("sets navigable to true if missing", () => { - expect(createPluginConfig({ id: "id_test", name: "name_test" })).toEqual( - expect.objectContaining({ navigable: true }) - ) - }) - - it("sets navigation type to app", () => { - expect(createPluginConfig({ id: "id_test", name: "name_test" })).toEqual( - expect.objectContaining({ navType: NAV_TYPES.APP }) - ) - }) - - it("adds id to the props", () => { - expect(createPluginConfig({ id: "id_test", name: "name_test" })).toEqual( - expect.objectContaining({ - props: expect.objectContaining({ id: "id_test" }), - }) - ) - }) - - it("does not save not known keys", () => { - expect( - createPluginConfig({ - id: "id_test", - name: "name_test", - miau: "bup", - }) - ).not.toEqual( - expect.objectContaining({ - miau: "bup", - }) - ) - }) - - it("creates a plugin", () => { - const config = { - id: "id_test", - name: "name_test", - displayName: "displayName_Test", - version: "1.2.3", - url: "http://miau.bup", - weight: 9, - navigable: false, - navType: NAV_TYPES.MNG, - props: { - test1: "test1", - test2: "test2", - }, - } - expect(createPluginConfig(config)).toEqual({ - ...config, - props: { ...config.props, id: config.id }, - }) - }) - }) - - describe("savePlugin", () => { - describe("set active plugin", () => { - it("keeps active plugin if existing in the config", () => { - const wrapper = ({ children }) => ( - {children} - ) - - const store = renderHook( - () => ({ - setActive: usePlugin().setActive, - receiveConfig: usePlugin().receiveConfig, - active: usePlugin().active(), - }), - { wrapper } - ) - - const configs = { - plugin1: createPluginConfig({ - id: "plugin1", - name: "plugin1", - weight: 9, - }), - plugin2: createPluginConfig({ - id: "plugin2", - name: "plugin2", - weight: 0, - }), - } - - act(() => store.result.current.setActive(["plugin1"])) - act(() => store.result.current.receiveConfig(configs)) - expect(store.result.current.active).toEqual(["plugin1"]) - }) - it("sets a new active plugin (from apps and not from mng) with the lowest weight", () => { - const wrapper = ({ children }) => ( - {children} - ) - - const store = renderHook( - () => ({ - receiveConfig: usePlugin().receiveConfig, - active: usePlugin().active(), - }), - { wrapper } - ) - - const configs = { - plugin0: createPluginConfig({ - id: "plugin0", - name: "plugin0", - weight: 0, - navType: NAV_TYPES.MNG, - }), - plugin1: createPluginConfig({ - id: "plugin1", - name: "plugin1", - weight: 9, - }), - plugin2: createPluginConfig({ - id: "plugin2", - name: "plugin2", - weight: 1, - }), - } - - act(() => store.result.current.receiveConfig(configs)) - expect(store.result.current.active).toEqual(["plugin2"]) - }) - }) - }) -}) diff --git a/apps/greenhouse/src/lib/store/createAuthDataSlice.js b/apps/greenhouse/src/lib/store/createAuthDataSlice.js deleted file mode 100644 index 671517788..000000000 --- a/apps/greenhouse/src/lib/store/createAuthDataSlice.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const ACTIONS = { - SIGN_ON: "signOn", - SIGN_OUT: "signOut", -} - -const createAuthDataSlice = (set, get) => ({ - auth: { - data: null, - isProcessing: false, - loggedIn: false, - error: null, - lastAction: {}, - appLoaded: false, - appIsLoading: false, - - actions: { - setAppLoaded: (appLoaded) => { - set( - (state) => ({ auth: { ...state.auth, appLoaded } }), - false, - "auth/setAppLoaded" - ) - }, - setData: (data = {}) => { - set( - (state) => ({ - auth: { - ...state.auth, - isProcessing: data ? data.isProcessing : false, - loggedIn: data ? data.loggedIn : false, - error: data ? data.error : null, - data: data ? data.auth : null, - }, - }), - false, - "auth/setData" - ) - if (!data) get().auth.actions.setAction(ACTIONS.SIGN_OUT) - }, - setAction: (name) => - set( - (state) => ({ - auth: { - ...state.auth, - lastAction: { name: name, updatedAt: Date.now() }, - }, - }), - false, - "auth/setAction" - ), - login: () => { - // logout - get().auth.actions.setAction(ACTIONS.SIGN_OUT) - get().auth.actions.setAction(ACTIONS.SIGN_ON) - }, - logout: () => get().auth.actions.setAction(ACTIONS.SIGN_OUT), - }, - }, -}) - -export default createAuthDataSlice diff --git a/apps/greenhouse/src/lib/store/createGlobalsSlice.js b/apps/greenhouse/src/lib/store/createGlobalsSlice.js deleted file mode 100644 index 66e33fdbc..000000000 --- a/apps/greenhouse/src/lib/store/createGlobalsSlice.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const createGlobalsSlice = (set, get) => ({ - globals: { - apiEndpoint: "", - assetsHost: "", - environment: "", - isUrlStateSetup: false, - demoMode: false, - demoUserToken: null, - - actions: { - setDemoMode: (demoMode) => - set((state) => ({ globals: { ...state.globals, demoMode } })), - setDemoUserToken: (demoUserToken) => - set((state) => ({ globals: { ...state.globals, demoUserToken } })), - - setApiEndpoint: (value) => - set( - (state) => ({ globals: { ...state.globals, apiEndpoint: value } }), - false, - "globals/setApiEndpoint" - ), - - setEnvironment: (value) => - set( - (state) => ({ globals: { ...state.globals, environment: value } }), - false, - "globals/setEnvironment" - ), - setAssetsHost: (value) => - set( - (state) => ({ globals: { ...state.globals, assetsHost: value } }), - false, - "globals/setAssetsHost" - ), - setIsUrlStateSetup: (setup) => - set( - (state) => ({ - globals: { ...state.globals, isUrlStateSetup: setup }, - }), - false, - "globals/setIsUrlStateSetup" - ), - }, - }, -}) - -export default createGlobalsSlice diff --git a/apps/greenhouse/src/lib/store/index.js b/apps/greenhouse/src/lib/store/index.js deleted file mode 100644 index 75e693236..000000000 --- a/apps/greenhouse/src/lib/store/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createStore } from "zustand" -import { devtools } from "zustand/middleware" -import createAuthDataSlice from "./createAuthDataSlice" -import createGlobalsSlice from "./createGlobalsSlice" -import Plugin from "../plugin" - -export default (options) => { - const store = createStore( - devtools((set, get) => ({ - ...createAuthDataSlice(set, get), - ...createGlobalsSlice(set, get), - })) - ) - - const plugin = Plugin(options) - - return { store, plugin } -} diff --git a/apps/greenhouse/src/styles.scss b/apps/greenhouse/src/styles.scss deleted file mode 100644 index f3b5dd36d..000000000 --- a/apps/greenhouse/src/styles.scss +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -/* Do not remove these tailwind directives. Without them styles won't work as expected */ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* If necessary, app styles can be added below */ - - diff --git a/apps/greenhouse/tailwind.config.js b/apps/greenhouse/tailwind.config.js deleted file mode 100644 index 81b1f8fef..000000000 --- a/apps/greenhouse/tailwind.config.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// opacity helper to make custom colors work with opacity -function withOpacity(variableName) { - return ({ opacityVariable, opacityValue }) => { - if (opacityValue !== undefined) { - return `rgba(var(${variableName}), ${opacityValue})` - } - if (opacityVariable !== undefined) { - return `rgba(var(${variableName}), var(${opacityVariable}, 1))` - } - return `rgb(var(${variableName}))` - } -} - -module.exports = { - presets: [ - require("juno-ui-components/build/lib/tailwind.config"), // important, do not change - ], - prefix: "", // important, do not change - content: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"], - corePlugins: { - preflight: false, // important, do not change - }, - theme: {}, - plugins: [], -} diff --git a/apps/heureka/LICENSE b/apps/heureka/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/apps/heureka/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apps/heureka/README.md b/apps/heureka/README.md deleted file mode 100644 index 9fd4ac161..000000000 --- a/apps/heureka/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Heureka - -This mircro frontent uses the Heureka POC API which aims to: - -- Track the overall state of our technology landscape -- Establish a unified & complete Patch Management Process: - - Maintain & track vulnerabilities and affected components - - Document the remediation, classification, and impact of vulnerabilities - - Document the changes corresponding with patching of vulnerabilities, as well as updating components diff --git a/apps/heureka/__mocks__/client.js b/apps/heureka/__mocks__/client.js deleted file mode 100644 index 84531d3c2..000000000 --- a/apps/heureka/__mocks__/client.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { JSDOM } from "jsdom" -const dom = new JSDOM() -global.document = dom.window.document -global.window = dom.window diff --git a/apps/heureka/__mocks__/fileMock.js b/apps/heureka/__mocks__/fileMock.js deleted file mode 100644 index 27ce65aca..000000000 --- a/apps/heureka/__mocks__/fileMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = "test-file-stub" diff --git a/apps/heureka/__mocks__/styleMock.js b/apps/heureka/__mocks__/styleMock.js deleted file mode 100644 index d74516001..000000000 --- a/apps/heureka/__mocks__/styleMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = {} diff --git a/apps/heureka/babel.config.js b/apps/heureka/babel.config.js deleted file mode 100644 index 0719e2fec..000000000 --- a/apps/heureka/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - env: { - test: { - presets: ["@babel/preset-env", "@babel/preset-react"], - plugins: [["babel-plugin-transform-import-meta", { module: "ES6" }]], - }, - }, -} diff --git a/apps/heureka/esbuild.config.js b/apps/heureka/esbuild.config.js deleted file mode 100644 index 2394388b8..000000000 --- a/apps/heureka/esbuild.config.js +++ /dev/null @@ -1,206 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const esbuild = require("esbuild") -const fs = require("node:fs/promises") -const pkg = require("./package.json") -const postcss = require("postcss") -const sass = require("sass") -const { transform } = require("@svgr/core") -const url = require("postcss-url") -// this function generates app props based on package.json and propSecrets.json -const appProps = require("../../helpers/appProps") - -if (!/.+\/.+\.js/.test(pkg.module)) - throw new Error( - "module value is incorrect, use DIR/FILE.js like build/index.js" - ) - -const isProduction = process.env.NODE_ENV === "production" -// If the jspm server fails and we cannot use external packages -// in our import map then IGNORE_EXTERNALS (global env variable) -// should be set to true -const IGNORE_EXTERNALS = process.env.IGNORE_EXTERNALS === "true" -// in dev environment we prefix output file with public -let outfile = `${isProduction ? "" : "public/"}${pkg.main || pkg.module}` -// get output from outputfile -let outdir = outfile.slice(0, outfile.lastIndexOf("/")) -const args = process.argv.slice(2) -const watch = args.indexOf("--watch") >= 0 -const serve = args.indexOf("--serve") >= 0 - -// helpers for console log -const green = "\x1b[32m%s\x1b[0m" -const yellow = "\x1b[33m%s\x1b[0m" -const clear = "\033c" - -const build = async () => { - // delete build folder and re-create it as an empty folder - await fs.rm(outdir, { recursive: true, force: true }) - await fs.mkdir(outdir, { recursive: true }) - - // build app - let ctx = await esbuild.context({ - bundle: true, - minify: isProduction, - // target: ["es2020"], - target: ["es2020"], //["chrome64", "firefox67", "safari11.1", "edge79"], - format: "esm", - platform: "browser", - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - loader: { ".js": "jsx" }, - sourcemap: !isProduction, - // here we exclude package from bundle which are defined in peerDependencies - // our importmap generator uses also the peerDependencies to create the importmap - // it means all packages defined in peerDependencies are in browser available via the importmap - external: - isProduction && !IGNORE_EXTERNALS - ? Object.keys(pkg.peerDependencies || {}) - : [], - entryPoints: [pkg.source], - outdir, - // this step is important for performance reason. - // the main file (index.js) contains minimal code needed to - // load the app via dynamic import (splitting: true) - splitting: true, - // we suport only esm! - format: "esm", - plugins: [ - // minimal plugin to log the recompiling process. - { - name: "start/end", - setup(build) { - build.onStart(() => { - console.log(clear) - console.log(yellow, "Compiling...") - }) - build.onEnd(() => console.log(green, "Done!")) - }, - }, - - // this custom plugin rewrites SVG imports to - // dataurls, paths or react components based on the - // search param and size - { - name: "svg-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(svg)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - let loader = "text" - if (args.suffix === "?url") { - // as URL - const maxSize = 10240 // 10Kb - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - } else { - // as react component - // use react component loader (jsx) - loader = "jsx" - contents = await transform(contents, { - plugins: ["@svgr/plugin-jsx"], - }) - } - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin rewrites image imports to - // dataurls or urls based on the size - { - name: "image-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(png|jpg|jpeg|gif)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - const maxSize = 10240 // 10Kb - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin parses the style files - { - name: "parse-styles", - setup(build) { - build.onLoad( - // consider only .scss and .css files - { filter: /.\.(css|scss)$/, namespace: "file" }, - async (args) => { - let content - // handle scss, convert to css - if (args.path.endsWith(".scss")) { - const result = sass.renderSync({ file: args.path }) - content = result.css - } else { - // read file content - content = await fs.readFile(args.path) - } - - // postcss plugins - const plugins = [ - require("tailwindcss"), - require("autoprefixer"), - // rewrite urls inside css - url({ - url: "inline", - // maxSize: 10, // use dataurls if files are smaller than 10k - // fallback: "copy", // if files are bigger use copy method - // assetsPath: "./build/assets", - // useHash: true, - // optimizeSvgEncode: true, - }), - ] - - const { css } = await postcss(plugins).process(content, { - from: args.path, - to: outdir, - }) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - return { contents: css, loader: "text" } - } - ) - }, - }, - ], - }) - - // watch and serve - if (watch || serve) { - if (watch) await ctx.watch() - if (serve) { - // generate app props based on package.json and secretProps.json - await fs.writeFile( - `./${outdir}/appProps.js`, - `export default ${JSON.stringify(appProps())}` - ) - - let { host, port } = await ctx.serve({ - host: "0.0.0.0", - port: parseInt(process.env.APP_PORT || process.env.PORT || 3000), - servedir: "public", - }) - console.log("serve on", `${host}:${port}`) - } - } else { - await ctx.rebuild() - await ctx.dispose() - } -} - -build() diff --git a/apps/heureka/jest.config.js b/apps/heureka/jest.config.js deleted file mode 100644 index 58feee149..000000000 --- a/apps/heureka/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - transform: { "\\.[jt]sx?$": "babel-jest" }, - testEnvironment: "jsdom", - setupFilesAfterEnv: ["/setupTests.js"], - transformIgnorePatterns: [ - "node_modules/(?!(juno-ui-components|url-state-router|communicator|oauth)/)", - ], - moduleNameMapper: { - // Jest currently doesn't support resources with query parameters. - // Therefore we add the optional query parameter matcher at the end - // https://github.com/facebook/jest/issues/4181 - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)(\\?.+)?$": - require.resolve("./__mocks__/fileMock"), - "\\.(css|less|scss)$": require.resolve("./__mocks__/styleMock"), - }, -} diff --git a/apps/heureka/package.json b/apps/heureka/package.json deleted file mode 100644 index 2bdc2cf80..000000000 --- a/apps/heureka/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "heureka", - "version": "2.0.4", - "author": "UI-Team", - "contributors": [ - "Arturo Reuschenbach Pucernau" - ], - "repository": "https://github.com/sapcc/juno/tree/main/apps/heureka", - "license": "Apache-2.0", - "module": "build/index.js", - "source": "src/index.js", - "private": true, - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", - "graphql-request": "^6.0.0", - "graphql": "*", - "immer": "^9.0.21", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "messages-provider": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "zustand": "4.3.7" - }, - "scripts": { - "test": "jest", - "start": "NODE_ENV=development node esbuild.config.js --serve --watch", - "build": "NODE_ENV=production node esbuild.config.js" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "juno-ui-components": "*", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "zustand": "4.3.7" - }, - "importmapExtras": { - "zustand/middleware": "4.3.7" - }, - "appProps": { - "theme": { - "value": "theme-dark", - "type": "optional", - "description": "Override the default theme. Possible values are theme-light or theme-dark (default)" - }, - "apiEndpoint": { - "value": "", - "type": "required", - "description": "Endpoint URL of the API" - }, - "embedded": { - "value": "false", - "type": "optional", - "description": "Set to true if app is to be embedded in another existing app or page, like e.g. Elektra. If set to true the app won't render a page header/footer and instead render only the content. The default value is false." - } - }, - "appPreview": true -} diff --git a/apps/heureka/public/favicon.ico b/apps/heureka/public/favicon.ico deleted file mode 100644 index 9ebc4bb2e04736789f9fcfe03121b296c693079a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHOc~DkW6h8=vpa^PaX3JM9iaLr~+M@BPg-&UinG_1xqN9VFP8qhyVv3gI5)y)q zTINC;R?|K;#Z=Q?rdcjEfL2psi+^QPO{eqwE|2&4e8Bs@_ib;6J9D_-d+*+Je)rsS zw{s6fQ4~#SX(YLes`?X+A|jWo@j02OR^BB`j_>ngh)SfuKq(_tXtogEds07@wedGr zzRwh@rmJplpzU=``%W`${FrIleN26aGbMIs`5p@TOXSoGJtveUB&};Tx#jC|A*LG_ zG41`GX~z#t*Uo0@5FHArF33-gz4hJZSf5CcVNu%YJgjw z6?WGUracWzyMAW6WN4_dS(OK@>5XlGO&t+Zbqiipx}UPZDz9*rJ0_ShR%bO~A9#hr zzU3%WY^QMH@_-h3_=2)hvD5l*q zW--@al459QQcid2PTLeyU!zA+Owd_+jT$7c2behY2~(YeQ@t)2cUB8>)U~ zns~SK+R*Jhri!oieptGbsdqnTwWE7)rblb^HsCDt$m>kg?`KNCjcN20rt#TKBPT^} zyW--RW-McR=10997#Bv$d?0f1YwK3hxlGs3V=8<}=BE?Q@#n0JeEeEFw7g>{rX|}| zI~Hwm9)9CIyY~I?;m0`Cbn0t9{5qxoy?=y$zl#0k!~2zdUvX>Yu})}f_0%Q)>p|mZ z%!iI+TK^GKZiyOq*JLu?FrNwM!pA?=#~*ZOtmo_RIqMZK__z|f+T*3k#yP6^RUM;o zt~36I{`-xzC$pDJKeNr`XO&KQ*tkB7~p4`p09jR^AB`CxdkYr24s`lfsIc~$F=9p9_|!Ttl|aO-z^J5griCrm@ep4~=`Z>V#e z<8E21<_@h5-Z{n!e68>mM22tPTz@!6r%e!_{OxKjLOys5Q+yZm@}bssyS(;(Xt#lI z+JNqZc3wXK`^k{6)q&GfonU|7!T75Md$xn|BTfK!kl#A64aXa?OGe{`)ctkfY%`d1 z60o|3jA^z!{38@hxq;vf?72c_3H=bswgj7Tn*lex!+5}$#=Z7Qp>VDb+WZbIh!X&| zX6au%r4yY-o}_|pD2}KG&(TCh$fNWekL{^t4HV&%L0>g^7CqJ@7rknF*7S}zEtim6 zs3}fMV!2vLUFBN=^-ViYWe5JFbswsDp&otA&$+(O2WN!;L80YBi9*ISNFM4u@c~bt zRQ|Z&p4||iklF}9tW#vibYw!DMdd?A3*TF?)qQ9(HtB{EG68+u>oS zZpNLe4@ON6j}9>YH+{jht(K`zN_a3JCKGX`xHlMcYj}Kyh_ig+pz4c?Z=|n@Vn3I^V6D872ktS}eZaJI7ZdKqu)b<{ZLl+A+17p|J^_6&BExze@Poe? z_ldv&|2AYJZUc9$R`m})SR={~sIl2+fHe$=p+L;Cub5lX1Lh^n4QNkm^CbFfavoFF zDWHQw}8`_-?><8mC^-78D9Hji$h~+Q+T*(gBdX9d>n8Y5{+y9SsbYX?e z;THSIyM4Ys!;g>n=wahke5Efo<*Tgr@`1HwrBAj043BQH|2%AY4h%d-?7xe`D8E2t z`$(L?&dzPXV`tOQ^|DVgBD(2^8P8oEB7`k^di)d(uQRy?VcE5Voa4@j_)Z zvyiF(W!`11JcCCA6}@bwtXY``PpkmW*mi6TXEem1`pX0R$Q7?i47d1n{N;hThmyC{ zSrKcnzkINlnO|nDzF90PVnJ5F&4hSXGYp6qS@{OjWA8G}DmE`O)U9G{jQT)K2mZ$o z`zJHL-tQ0(1iL`oBjQ^SdoXUMwYo-L@cY>5TO%*?-xv$N<5G1{x6DTUO;R_Zk;f?? P_&~0wZjp_d33dMme?Bb{ diff --git a/apps/heureka/public/index.html b/apps/heureka/public/index.html deleted file mode 100644 index 3717575f0..000000000 --- a/apps/heureka/public/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - Heureka Dev - - - - - -
    - - diff --git a/apps/heureka/setupTests.js b/apps/heureka/setupTests.js deleted file mode 100644 index db44c9038..000000000 --- a/apps/heureka/setupTests.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom" diff --git a/apps/heureka/src/App.js b/apps/heureka/src/App.js deleted file mode 100644 index 72feb1488..000000000 --- a/apps/heureka/src/App.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect } from "react" -import styles from "./styles.scss" -import { AppShell, AppShellProvider } from "juno-ui-components" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import { MessagesProvider } from "messages-provider" -import AsyncWorker from "./components/AsyncWorker" -import StoreProvider, { useActions } from "./components/StoreProvider" -import TabContext from "./components/tabs/TabContext" - -const App = (props) => { - // Create a client - const queryClient = new QueryClient({ - defaultOptions: { - // global default options that apply to all queries - queries: { - // staleTime: Infinity, // if you wish to keep data from the keys until reload - keepPreviousData: true, // nice when paginating - refetchOnWindowFocus: false, // default: true - }, - }, - }) - - return ( - - - - - - - ) -} - -const StyledApp = (props) => { - return ( - - {/* load styles inside the shadow dom */} - - - - - - - - ) -} - -export default StyledApp diff --git a/apps/heureka/src/App.test.js b/apps/heureka/src/App.test.js deleted file mode 100644 index df4eb46ea..000000000 --- a/apps/heureka/src/App.test.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { render } from "@testing-library/react" -// support shadow dom queries -// https://reactjsexample.com/an-extension-of-dom-testing-library-to-provide-hooks-into-the-shadow-dom/ -import { screen } from "shadow-dom-testing-library" -import App from "./App" - -jest.mock("communicator") - -describe("logged in", () => { - test("renders app", async () => { - render() - const loginTitle = await screen.queryAllByShadowText(/Converged Cloud/i) - expect(loginTitle.length > 0).toBe(true) - }) -}) diff --git a/apps/heureka/src/actions.js b/apps/heureka/src/actions.js deleted file mode 100644 index 06410e52a..000000000 --- a/apps/heureka/src/actions.js +++ /dev/null @@ -1,157 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -class HTTPError extends Error { - constructor(code, message) { - super(message || code) - this.name = "HTTPError" - this.statusCode = code - } -} - -export const encodeUrlParamsFromObject = (options) => { - if (!options) return "" - let encodedOptions = Object.keys(options) - .map((k) => { - if (typeof options[k] === "object") { - const childOption = options[k] - return Object.keys(childOption).map( - (childKey) => - `${encodeURIComponent(childKey)}=${encodeURIComponent( - childOption[childKey] - )}` - ) - } - return `${encodeURIComponent(k)}=${encodeURIComponent(options[k])}` - }) - .join("&") - return `&${encodedOptions}` -} - -const checkStatus = (response) => { - if (response.status < 400) { - return response - } else { - return response.text().then((message) => { - var error = new HTTPError(response.status, message || response.statusText) - error.statusCode = response.status - return Promise.reject(error) - }) - } -} - -// -// SERVICES -// - -export const services = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/services", options) -} - -export const service = ({ queryKey }) => { - const [_key, bearerToken, endpoint, serviceId] = queryKey - return fetchFromAPI(bearerToken, endpoint, `/services/${serviceId}`) -} - -export const serviceFilters = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/services/filters", options) -} - -// -// COMPONENTS -// - -export const components = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/components", options) -} - -export const component = ({ queryKey }) => { - const [_key, bearerToken, endpoint, componentId] = queryKey - return fetchFromAPI(bearerToken, endpoint, `/components/${componentId}`) -} - -export const componentFilters = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/components/filters", options) -} - -// -// VULNERABILITIES -// - -export const vulnerabilities = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/vulnerabilities", options) -} - -export const vulnerability = ({ queryKey }) => { - const [_key, bearerToken, endpoint, vulnerabilityId] = queryKey - return fetchFromAPI( - bearerToken, - endpoint, - `/vulnerabilities/${vulnerabilityId}` - ) -} - -export const vulnerabilityFilters = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI( - bearerToken, - endpoint, - "/vulnerabilities/filters", - options - ) -} - -// -// USERS -// - -export const users = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/users", options) -} - -export const user = ({ queryKey }) => { - const [_key, bearerToken, endpoint, userId] = queryKey - return fetchFromAPI(bearerToken, endpoint, `/users/${userId}`) -} - -export const userFilters = ({ queryKey }) => { - const [_key, bearerToken, endpoint, options] = queryKey - return fetchFromAPI(bearerToken, endpoint, "/users/filters", options) -} - -// -// COMMONS -// - -const fetchFromAPI = (bearerToken, endpoint, path, options) => { - const query = encodeUrlParamsFromObject(options) - return fetch(`${endpoint}${path}?${query}`, { - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${bearerToken}`, - }, - }) - .then(checkStatus) - .then((response) => { - let isJSON = response.headers - .get("content-type") - .includes("application/json") - if (!isJSON) { - var error = new HTTPError( - 400, - "The response is not a valid JSON response" - ) - return Promise.reject(error) - } - return response.json() - }) -} diff --git a/apps/heureka/src/components/AsyncWorker.jsx b/apps/heureka/src/components/AsyncWorker.jsx deleted file mode 100644 index d9728e5e9..000000000 --- a/apps/heureka/src/components/AsyncWorker.jsx +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import useUrlState from "../hooks/useUrlState" -import useQueryClientFn from "../hooks/useQueryClientFn" - -const AsyncWorker = () => { - useUrlState() - useQueryClientFn() - return null -} - -export default AsyncWorker diff --git a/apps/heureka/src/components/StoreProvider.jsx b/apps/heureka/src/components/StoreProvider.jsx deleted file mode 100644 index d601f3d69..000000000 --- a/apps/heureka/src/components/StoreProvider.jsx +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { createContext, useContext } from "react" -import { useStore as create } from "zustand" -import createStore from "../lib/store" - -const StoreContext = createContext() -const StoreProvider = ({ options, children }) => ( - - {children} - -) - -const useStore = (selector) => create(useContext(StoreContext), selector) - -export const useEndpoint = () => useStore((s) => s.endpoint) -export const useQueryClientFnReady = () => useStore((s) => s.queryClientFnReady) -export const useActiveTab = () => useStore((s) => s.activeTab) -export const useQueryOptions = (tab) => - useStore((s) => s.tabs[tab].queryOptions) -export const useActions = () => useStore((s) => s.actions) - -export default StoreProvider diff --git a/apps/heureka/src/components/backup/AppContainer.js b/apps/heureka/src/components/backup/AppContainer.js deleted file mode 100644 index 776ed1371..000000000 --- a/apps/heureka/src/components/backup/AppContainer.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - MainTabs, - TabList, - Tab, - TabPanel, - Icon, - Container, -} from "juno-ui-components" -import { useRouter } from "url-state-router" -import Breadcrumb from "./Breadcrumb" -import { Messages } from "messages-provider" - -const AppContainer = ({ tabsConfig, component, children }) => { - const { navigateTo, currentPath } = useRouter() - - const tabIndex = useMemo(() => { - if (!currentPath) return 0 - return tabsConfig.findIndex((tab) => currentPath.startsWith(tab.path)) - }, [currentPath]) - - return ( - <> - - - {tabsConfig.map((tab, index) => ( - navigateTo(tab.path)}> - - {tab.label} - - ))} - - {tabsConfig.map((tab, index) => ( - - ))} - - - - {component || children} - - - - ) -} - -export default AppContainer diff --git a/apps/heureka/src/components/backup/AppRouter.js b/apps/heureka/src/components/backup/AppRouter.js deleted file mode 100644 index 716a4a65f..000000000 --- a/apps/heureka/src/components/backup/AppRouter.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect } from "react" -import { Router, Route, Redirect, Switch } from "url-state-router" -import { useActions, Messages } from "messages-provider" - -import AppContainer from "./AppContainer" -import Services from "./Services" -import ServiceDetail from "./ServiceDetail" -import ChangesLogDetail from "./ChangesLogDetail" -import PatchLogNew from "./PatchLogNew" -import PatchLogDetail from "./PatchLogDetail" -import Components from "./Components" -import ComponentDetail from "./ComponentDetail" -import Vulnerabilities from "./Vulnerabilities" -import VulnerabilitiyDetails from "./VulnerabilitiyDetails" -import Users from "./Users" -import UserDetail from "./UserDetail" -import SupportGroups from "./SupportGroups" -import Home from "./Home" -import useStore from "../hooks/useStore" -import WelcomeView from "./WelcomeView" - -export const HOME_PATH = "/home" -export const SUPPORT_GROUP_PATH = "/support_group" -export const SERVICES_PATH = "/services" -export const COMPONENTS_PATH = "/components" -export const VULNERABILITIES_PATH = "/vulnerabilities" -export const USERS_PATH = "/users" -export const TABS_CONFIG = [ - { path: HOME_PATH, label: "Home", icon: "autoAwesomeMosaic" }, - { path: SERVICES_PATH, label: "Services", icon: "dns" }, - { path: COMPONENTS_PATH, label: "Components", icon: "widgets" }, - { - path: VULNERABILITIES_PATH, - label: "Vulnerabilities", - icon: "autoAwesomeMotion", - }, - { path: SUPPORT_GROUP_PATH, label: "Support group", icon: "manageAccounts" }, - { - path: USERS_PATH, - label: "Users", - icon: "accountCircle", - }, -] - -const AppRouter = (props) => { - const urlStateKey = useStore((state) => state.urlStateKey) - const auth = useStore((state) => state.auth) - const loggedIn = useStore((state) => state.loggedIn) - const login = useStore((state) => state.login) - const { addMessage } = useActions() - const embedded = useStore((state) => state.embedded) - - useEffect(() => { - if (auth?.error) { - addMessage({ - variant: "error", - text: parseError(auth?.error), - }) - } - }, [auth?.error]) - - return ( - <> - {/* wait util the user is logged in to avoid that url-state-router processes the wrong URL do tue Redirects in the login process*/} - {loggedIn && !auth?.error ? ( - <> - {/* wait util the urlStateKey is stored and retrieved to avoid to initialized the Router with nil stateID*/} - {urlStateKey && ( - - - - - - - - - - - - - - - - - - - - - - - - )} - - ) : embedded ? ( - "Authentication required!" - ) : ( - <> - - - - )} - - ) -} - -export default AppRouter diff --git a/apps/heureka/src/components/backup/Avatar.js b/apps/heureka/src/components/backup/Avatar.js deleted file mode 100644 index 6e41eb812..000000000 --- a/apps/heureka/src/components/backup/Avatar.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack } from "juno-ui-components" - -const avatarCss = ` -h-8 -w-8 -bg-theme-background-lvl-2 -rounded-full -bg-cover -` - -const Avatar = ({ userName, url }) => { - return ( - - {url && ( -
    - )} - {userName && {userName}} - - ) -} - -export default Avatar diff --git a/apps/heureka/src/components/backup/Breadcrumb.js b/apps/heureka/src/components/backup/Breadcrumb.js deleted file mode 100644 index 0a12d4708..000000000 --- a/apps/heureka/src/components/backup/Breadcrumb.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -const Breadcrumb = ({}) => { - return "Breadcrumb" -} - -export default Breadcrumb diff --git a/apps/heureka/src/components/backup/ChangesLogDetail.js b/apps/heureka/src/components/backup/ChangesLogDetail.js deleted file mode 100644 index 19844211a..000000000 --- a/apps/heureka/src/components/backup/ChangesLogDetail.js +++ /dev/null @@ -1,143 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - Button, - Panel, - PanelBody, - PanelFooter, - DataGrid, - DataGridRow, - DataGridCell, - Stack, - TextareaRow, -} from "juno-ui-components" -import { - DetailSection, - DetailSectionBox, - DetailContentHeading, - DetailSectionHeader, -} from "../styles" -import { changeLogExample1, changeLogExample2 } from "../helpers" -import { useRouter } from "url-state-router" -import { DateTime } from "luxon" -import ComponentsList from "./ComponentsList" -import { SERVICES_PATH } from "./AppRouter" - -const ChangesLogDetail = ({}) => { - const { options, routeParams, navigateTo } = useRouter() - const changeLogId = routeParams?.changeLogId - const serviceId = routeParams?.serviceId - - const change = useMemo(() => { - if (changeLogId === "4323") { - return changeLogExample1 - } - if (changeLogId === "1234") { - return changeLogExample2 - } - return {} - }, [changeLogId]) - - const createdAt = useMemo(() => { - if (change?.CreatedAt) { - return DateTime.fromSQL(change.CreatedAt).toLocaleString( - DateTime.DATETIME_SHORT - ) - } - }, [change?.CreatedAt]) - - const onPanelClose = () => { - navigateTo(`${SERVICES_PATH}/${serviceId}`) - } - - return ( - - -
    -
    - - - - ID: - - {change.ID} - - - - Date: - - {createdAt} - - -
    -
    - {change.Type === "manually" && ( - <> -
    -

    Components

    -
    - -
    -
    - -
    - -
    - - )} - {change.Type === "automatic" && ( - <> -
    -

    State before

    -
    - -
    -
    -
    -

    State after

    -
    - -
    -
    - - )} -
    -
    - ) -} - -export default ChangesLogDetail diff --git a/apps/heureka/src/components/backup/ChangesLogList.js b/apps/heureka/src/components/backup/ChangesLogList.js deleted file mode 100644 index e72dd39c4..000000000 --- a/apps/heureka/src/components/backup/ChangesLogList.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import ChangesLogListItem from "./ChangesLogListItem" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import HintNotFound from "./HintNotFound" - -const ChangesLogList = ({ changes, selectable }) => { - changes = useMemo(() => { - if (!changes) return [] - return changes - }, [changes]) - - const columnsLength = useMemo(() => { - const configurableCols = 4 - return selectable ? configurableCols + 1 : configurableCols - }, [selectable]) - - return ( - <> - - - {selectable && } - ID - Type - Date - Changed components - - {changes.length > 0 ? ( - <> - {changes.map((item, i) => ( - - ))} - - ) : ( - - - - - - )} - - - ) -} - -export default ChangesLogList diff --git a/apps/heureka/src/components/backup/ChangesLogListItem.js b/apps/heureka/src/components/backup/ChangesLogListItem.js deleted file mode 100644 index 8c304fbf4..000000000 --- a/apps/heureka/src/components/backup/ChangesLogListItem.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell, CheckboxRow } from "juno-ui-components" -import { DateTime } from "luxon" -import { Link } from "url-state-router" -import { useRouter } from "url-state-router" -import { SERVICES_PATH } from "./AppRouter" - -const ChangesLogListItem = ({ item, selectable }) => { - const { options, routeParams } = useRouter() - const serviceId = routeParams?.serviceId - - const createdAt = useMemo(() => { - if (item.CreatedAt) { - return DateTime.fromSQL(item.CreatedAt).toLocaleString( - DateTime.DATETIME_SHORT - ) - } - }, [item.CreatedAt]) - - return ( - - {selectable && ( - - - - )} - - - {item.ID} - - - {item.Type} - {createdAt} - - {item.Components.map((component) => component.Name).join(", ")} - - - ) -} - -export default ChangesLogListItem diff --git a/apps/heureka/src/components/backup/ComponentDetail.js b/apps/heureka/src/components/backup/ComponentDetail.js deleted file mode 100644 index ec843e4d9..000000000 --- a/apps/heureka/src/components/backup/ComponentDetail.js +++ /dev/null @@ -1,170 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useMemo } from "react" -import { - Icon, - DataGrid, - DataGridRow, - DataGridCell, - Container, -} from "juno-ui-components" -import { useRouter } from "url-state-router" -import { getComponent } from "../queries" -import { useActions } from "messages-provider" -import useStore from "../hooks/useStore" -import { - usersListToString, - componentDetailsByType, - parseError, -} from "../helpers" -import VulnerabilitiesList from "./VulnerabilitiesList" -import PackagesList from "./PackagesList" -import { - DetailSection, - DetailContentHeading, - DetailSectionHeader, -} from "../styles" -import HintLoading from "./HintLoading" -import HintNotFound from "./HintNotFound" -import ServicesList from "./ServicesList" - -const DetailSectionTop = ` -bg-theme-code-block -rounded-t -mb-0.5 -` - -const DetailSectionBottom = ` -bg-theme-code-block -rounded-b -pb-0.5 -` - -const ComponentDetail = () => { - const { options, routeParams } = useRouter() - - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const componentId = routeParams?.componentId - const { isLoading, isError, isFetching, data, error } = getComponent( - auth?.id_token, - endpoint, - componentId - ) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (error) { - addMessage({ - variant: "error", - text: parseError(error), - }) - } - }, [error]) - - const owners = useMemo(() => { - if (!data?.Owners) return [] - return usersListToString(data.Owners) - }, [data?.Owners]) - - const operators = useMemo(() => { - if (!data?.Operators) return [] - return usersListToString(data.Operators) - }, [data?.Operators]) - - return ( - - {isLoading && !data ? ( - - ) : ( - <> - {data ? ( - <> -

    - {data.Name} -

    - -
    -
    - - - - ID: - - {data.ID} - - - - Owners: - - {owners} - - - - Operators: - - {operators} - - - - Type: - - {data.Type} - - -
    -
    - - {componentDetailsByType(data).map((item, index) => ( - - - {`${item.label}: `} - - {item.value} - - ))} - -
    -
    - -
    -

    Belongs to

    -
    - -
    -
    - -
    -

    Vulnerabilities

    -
    - -
    -
    - -
    -

    Packages

    -
    - -
    -
    - - ) : ( - - )} - - )} -
    - ) -} - -export default ComponentDetail diff --git a/apps/heureka/src/components/backup/Components.js b/apps/heureka/src/components/backup/Components.js deleted file mode 100644 index cf8e9ecb1..000000000 --- a/apps/heureka/src/components/backup/Components.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useCallback, useState } from "react" -import { getComponents, getComponentFilters } from "../queries" -import useStore from "../hooks/useStore" -import { useActions } from "messages-provider" -import { parseError } from "../helpers" -import { Container } from "juno-ui-components" -import Pagination from "./Pagination" -import ComponentsList from "./ComponentsList" -import FilterToolbar from "./FilterToolbar" -import HintLoading from "./HintLoading" - -const ITEMS_PER_PAGE = 10 - -const Components = () => { - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const [paginationOptions, setPaginationOptions] = useState({ - limit: ITEMS_PER_PAGE, - offset: 0, - }) - const [searchOptions, setSearchOptions] = useState({}) - const components = getComponents(auth?.id_token, endpoint, { - ...paginationOptions, - ...searchOptions, - }) - - const filters = getComponentFilters(auth?.id_token, endpoint) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (components.error) { - addMessage({ - variant: "error", - text: parseError(components.error), - }) - } - }, [components.error]) - - useEffect(() => { - if (filters.error) { - addMessage({ - variant: "error", - text: parseError(filters.error), - }) - } - }, [filters.error]) - - const onPaginationChanged = (offset) => { - setPaginationOptions({ ...paginationOptions, offset: offset }) - } - - const onSearchTerm = (options) => { - setSearchOptions(options) - } - - return ( - - {components.isLoading && !components.data ? ( - - ) : ( - <> - - - - - )} - - ) -} - -export default Components diff --git a/apps/heureka/src/components/backup/ComponentsList.js b/apps/heureka/src/components/backup/ComponentsList.js deleted file mode 100644 index a6bd54ccb..000000000 --- a/apps/heureka/src/components/backup/ComponentsList.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import ComponentsListItem from "./ComponentsListItem" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import HintNotFound from "./HintNotFound" -import { classifyVulnerabilities } from "../helpers" - -const ComponentsList = ({ - components, - columns, - sorted, - unlink, - selectable, -}) => { - components = useMemo(() => { - if (!components) return [] - // inforce input as array - if (!Array.isArray(components)) components = [components] - // sort components by threat level - if (sorted) { - return components - .sort((a, b) => { - const vulA = classifyVulnerabilities(a) - const vulB = classifyVulnerabilities(b) - return ( - vulA.critical - vulB.critical || - vulA.high - vulB.high || - vulA.medium - vulB.medium || - vulA.low - vulB.low - ) - }) - .reverse() - } - return components - }, [components]) - - columns = useMemo(() => { - if (!columns) { - return { - name: {}, - type: {}, - version: {}, - vulnerabilities: {}, - belongsTo: {}, - owners: {}, - operators: {}, - } - } - return columns - }, [columns]) - - const columnsLength = useMemo(() => { - const configurableCols = columns ? Object.keys(columns).length : 7 - return selectable ? configurableCols + 1 : configurableCols - }, [columns, selectable]) - - return ( - - - {selectable && } - {columns?.name && Name} - {columns?.type && Type} - {columns?.version && Version} - {columns?.vulnerabilities && ( - Vulnerabilities - )} - {columns?.belongsTo && Belongs to} - {columns?.owners && Owners} - {columns?.operators && Operators} - - {components.length > 0 ? ( - <> - {components.map((item, i) => ( - - ))} - - ) : ( - - - - - - )} - - ) -} - -export default ComponentsList diff --git a/apps/heureka/src/components/backup/ComponentsListItem.js b/apps/heureka/src/components/backup/ComponentsListItem.js deleted file mode 100644 index ef4c7bdec..000000000 --- a/apps/heureka/src/components/backup/ComponentsListItem.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell, CheckboxRow } from "juno-ui-components" -import { Link } from "url-state-router" -import VulnerabilitiesOverview from "./VulnerabilitiesOverview" -import { - classifyVulnerabilities, - usersListToString, - componentVersionByType, -} from "../helpers" -import { COMPONENTS_PATH } from "./AppRouter" -import CustomBadge from "./CustomBadge" - -const ComponentsListItem = ({ item, columns, unlink, selectable }) => { - const services = useMemo(() => { - if (!item.Services) return [] - return item.Services - }, [item.Services]) - - const vulnerabilities = useMemo(() => { - return classifyVulnerabilities(item) - }, [item]) - - const owners = useMemo(() => { - return usersListToString(item.Owners) - }, [item.Owners]) - - const operators = useMemo(() => { - return usersListToString(item.Operators) - }, [item.Operators]) - - return ( - - {selectable && ( - - - - )} - {columns?.name && ( - - {unlink ? ( - <>{item.Name} - ) : ( - - {item.Name} - - )} - - )} - {columns?.type && {item.Type}} - {columns?.version && ( - {componentVersionByType(item)} - )} - {columns?.vulnerabilities && ( - - - - )} - {columns?.belongsTo && ( - - - - )} - {columns?.owners && {owners}} - {columns?.operators && {operators}} - - ) -} - -export default ComponentsListItem diff --git a/apps/heureka/src/components/backup/CustomBadge.js b/apps/heureka/src/components/backup/CustomBadge.js deleted file mode 100644 index 1f6ff2620..000000000 --- a/apps/heureka/src/components/backup/CustomBadge.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Badge, Icon } from "juno-ui-components" - -const CustomBadge = ({ badgeVariant, icon, label, className }) => { - return ( - - - {label} - - ) -} - -export default CustomBadge diff --git a/apps/heureka/src/components/backup/CustomPageHeader.js b/apps/heureka/src/components/backup/CustomPageHeader.js deleted file mode 100644 index 5ca68b106..000000000 --- a/apps/heureka/src/components/backup/CustomPageHeader.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect } from "react" -import useStore from "../hooks/useStore" -import { PageHeader } from "juno-ui-components" -import HeaderUser from "./HeaderUser" - -const CustomPageHeader = () => { - const auth = useStore((state) => state.auth) - const logout = useStore((state) => state.logout) - const loggedIn = useStore((state) => state.loggedIn) - return ( - - {loggedIn && } - - ) -} - -export default CustomPageHeader diff --git a/apps/heureka/src/components/backup/EvidenceNew.js b/apps/heureka/src/components/backup/EvidenceNew.js deleted file mode 100644 index 070920ca0..000000000 --- a/apps/heureka/src/components/backup/EvidenceNew.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { Button, Panel, PanelBody, PanelFooter } from "juno-ui-components" - -const EvidenceNew = ({}) => { - return ( - - Panel Body - - ) -} - -export default EvidenceNew diff --git a/apps/heureka/src/components/backup/EvidencesList.js b/apps/heureka/src/components/backup/EvidencesList.js deleted file mode 100644 index 393e41bdd..000000000 --- a/apps/heureka/src/components/backup/EvidencesList.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import EvidencesListItem from "./EvidencesListItem" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import HintNotFound from "./HintNotFound" - -const EvidencesList = ({ evidences }) => { - evidences = useMemo(() => { - if (!evidences) return [] - return evidences - }, [evidences]) - - return ( - <> - - - ID - Date - - {evidences.length > 0 ? ( - <> - {evidences.map((item, i) => ( - - ))} - - ) : ( - - - - - - )} - - - ) -} - -export default EvidencesList diff --git a/apps/heureka/src/components/backup/EvidencesListItem.js b/apps/heureka/src/components/backup/EvidencesListItem.js deleted file mode 100644 index 1fcaa6a4b..000000000 --- a/apps/heureka/src/components/backup/EvidencesListItem.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell, Button } from "juno-ui-components" -import { DateTime } from "luxon" -import { Link } from "url-state-router" -import { useRouter } from "url-state-router" -import { SERVICES_PATH } from "./AppRouter" - -const EvidencesListItem = ({ item }) => { - const { options, routeParams } = useRouter() - const evidenceId = routeParams?.evidenceId - - const createdAt = useMemo(() => { - if (item.CreatedAt) { - return DateTime.fromSQL(item.CreatedAt).toLocaleString( - DateTime.DATETIME_SHORT - ) - } - }, [item.CreatedAt]) - - return ( - - {item.ID} - {createdAt} - - ) -} - -export default EvidencesListItem diff --git a/apps/heureka/src/components/backup/FilterToolbar.js b/apps/heureka/src/components/backup/FilterToolbar.js deleted file mode 100644 index a550f23d3..000000000 --- a/apps/heureka/src/components/backup/FilterToolbar.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { FilterToolbarStateProvider } from "./FilterToolbarStore" -import FilterToolbarCore from "./FilterToolbarCore" - -const FilterToolbar = ({ - filterTypes, - onSearchTerm, - isLoading, - filterLabels, - placeholders, -}) => { - return ( - - - - ) -} - -export default FilterToolbar diff --git a/apps/heureka/src/components/backup/FilterToolbarCore.js b/apps/heureka/src/components/backup/FilterToolbarCore.js deleted file mode 100644 index c1cdd4027..000000000 --- a/apps/heureka/src/components/backup/FilterToolbarCore.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo, useState, useEffect, useCallback } from "react" -import { Filters, FilterPill } from "juno-ui-components" -import { useStore } from "./FilterToolbarStore" - -const toURLOptions = (items) => { - let options = [] - items.forEach((item) => { - options.push({ [item.key]: item.value }) - }) - return options -} - -// onSearchTerm (callback): returns key:value selected filters, ex: {name: "Elektra"} -// isLoading (boolean): sets the tool in loading state -// filterLabels (object): labels matching the filter key to be displayed in the dropdown. Ex: {name: "service name"} -// placeholders (object): placeholders matching the selected key -const FilterToolbarCore = ({ - onSearchTerm, - isLoading, - filterLabels, - placeholders, -}) => { - const selectedFilters = useStore(useCallback((state) => state.filters)) - const filterTypes = useStore(useCallback((state) => state.filterTypes)) - const addFilter = useStore((state) => state.addFilter) - const removeFilter = useStore((state) => state.removeFilter) - - const [placeholder, setPlaceholder] = useState("") - const [filterKey, setFilterKey] = useState("") - const [error, setError] = useState(null) - - const filterOptions = useMemo(() => { - if (typeof filterTypes !== "object") return [] - let result = [] - Object.keys(filterTypes).forEach((key) => { - // check if there is a label for the key - const label = - filterLabels && typeof filterLabels === "object" && filterLabels[key] - result.push({ label: label || key, key: key }) - }) - return result - }, [filterTypes, filterLabels]) - - useEffect(() => { - onSearchTerm(toURLOptions(selectedFilters)) - }, [selectedFilters]) - - const onSelectChange = (event) => { - const selectedValue = event.target.value - let label = `Please enter ${selectedValue}` - if (placeholders && placeholders[selectedValue]) { - label = placeholders[selectedValue] - } - // save the selected key - setFilterKey(selectedValue) - // set the new placeholder - setPlaceholder(label) - } - - const onPillClosed = (uid) => { - removeFilter(uid) - } - - const onFilter = (value) => { - setError(null) - if (filterKey === "") { - return setError("Please select a filter type") - } - if (value === "") { - return setError("Filter value can't be blank") - } - addFilter(filterKey, value) - } - - return ( - - {selectedFilters.map((item, index) => ( - - ))} - {error && ( -
    - {error} -
    - )} -
    - ) -} - -export default FilterToolbarCore diff --git a/apps/heureka/src/components/backup/FilterToolbarStore.js b/apps/heureka/src/components/backup/FilterToolbarStore.js deleted file mode 100644 index 5b762bbeb..000000000 --- a/apps/heureka/src/components/backup/FilterToolbarStore.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import uniqueId from "lodash.uniqueid" -import { createStore, useStore as useZustandStore } from "zustand" -import React, { createContext, useContext, useRef } from "react" - -const StoreContext = createContext() - -export const SEARCH_STRING_TYPE = "string" -export const SEARCH_BOOL_TYPE = "bool" -export const SEARCH_ARRAY_TYPE = "[string]" - -// custom store for the selected filters -const initialStore = (filterTypes) => { - return createStore((set) => ({ - filterTypes: filterTypes || {}, - filters: [], // this is the initial state - addFilter: (key, value) => addFilter(set, key, value), - removeFilter: (key, value) => removeFilter(set, key, value), - })) -} - -const addFilter = (set, key, value) => - set((state) => { - // prevent to add duplicates - const index = state.filters.findIndex( - (item) => item.key === key && item.value === value - ) - if (index >= 0) return state - - // if key type is string or boolean do not add more than 1 filter, overwrite existing - if ( - state.filterTypes[key] === SEARCH_STRING_TYPE || - state.filterTypes[key] === SEARCH_BOOL_TYPE - ) { - const newFilters = state.filters.slice() - const foundItem = newFilters.find((element) => element.key === key) - if (foundItem) { - foundItem.value = value - return { ...state, filters: newFilters } - } - } - // add entry - let newFilters = state.filters - .slice() - .concat({ uid: uniqueId("filter-"), key: key, value: value }) - // sort entries - newFilters.sort((a, b) => a.key.localeCompare(b.key)) - return { ...state, filters: newFilters } - }) - -const removeFilter = (set, uid) => - set((state) => { - let newItems = state.filters.slice() - const index = newItems.findIndex((item) => item.uid === uid) - // if NOT found return - if (index < 0) return state - - newItems.splice(index, 1) - return { ...state, filters: newItems } - }) - -export const FilterToolbarStateProvider = ({ filterTypes, children }) => { - const store = useRef(initialStore(filterTypes)).current - return {children} -} - -const useStore = (selector) => { - const store = useContext(StoreContext) - return useZustandStore(store, selector) -} -export { useStore } diff --git a/apps/heureka/src/components/backup/HeaderUser.js b/apps/heureka/src/components/backup/HeaderUser.js deleted file mode 100644 index 8cdff6776..000000000 --- a/apps/heureka/src/components/backup/HeaderUser.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack, Button } from "juno-ui-components" -import Avatar from "./Avatar" - -const HeaderUser = ({ auth, logout }) => { - return ( - -
    - -
    - -
    - -
    - -

    Evidences

    -
    - - - ) -} - -export default PatchLogDetail diff --git a/apps/heureka/src/components/backup/PatchLogNew.js b/apps/heureka/src/components/backup/PatchLogNew.js deleted file mode 100644 index 84929f36f..000000000 --- a/apps/heureka/src/components/backup/PatchLogNew.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useMemo } from "react" -import { - Button, - Panel, - PanelBody, - PanelFooter, - Form, - TextInputRow, -} from "juno-ui-components" -import { useRouter } from "url-state-router" -import { getService } from "../queries" -import useStore from "../hooks/useStore" -import ChangesLogList from "./ChangesLogList" -import { SERVICES_PATH } from "./AppRouter" -import { changeLogExample1, changeLogExample2 } from "../helpers" - -const PatchLogNew = ({}) => { - const { options, routeParams, navigateTo } = useRouter() - const serviceId = routeParams?.serviceId - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - - const changes = useMemo(() => { - return [changeLogExample1, changeLogExample2] - }, []) - - const onPanelClose = () => { - navigateTo(`${SERVICES_PATH}/${serviceId}`) - } - - const formPanelFooter = useMemo( - () => ( - - - - - ), - [] - ) - - return ( - - -
    e.preventDefault()}> -

    Components

    - - - - - - -
    -
    - ) -} - -export default PatchLogNew diff --git a/apps/heureka/src/components/backup/PatchLogsList.js b/apps/heureka/src/components/backup/PatchLogsList.js deleted file mode 100644 index e1680c5f4..000000000 --- a/apps/heureka/src/components/backup/PatchLogsList.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import PatchLogsListItem from "./PatchLogsListItem" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import HintNotFound from "./HintNotFound" - -const PatchLogsList = ({ patches }) => { - patches = useMemo(() => { - if (!patches) return [] - return patches - }, [patches]) - - return ( - <> - - - ID - Date - Changes - Evidences - - {patches.length > 0 ? ( - <> - {patches.map((item, i) => ( - - ))} - - ) : ( - - - - - - )} - - - ) -} - -export default PatchLogsList diff --git a/apps/heureka/src/components/backup/PatchLogsListItem.js b/apps/heureka/src/components/backup/PatchLogsListItem.js deleted file mode 100644 index 4293a6cb3..000000000 --- a/apps/heureka/src/components/backup/PatchLogsListItem.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell, Button } from "juno-ui-components" -import { DateTime } from "luxon" -import CustomBadge from "./CustomBadge" -import { Link } from "url-state-router" -import { useRouter } from "url-state-router" -import { SERVICES_PATH } from "./AppRouter" - -const PatchLogsListItem = ({ item }) => { - const { options, routeParams } = useRouter() - const serviceId = routeParams?.serviceId - - const createdAt = useMemo(() => { - if (item.CreatedAt) { - return DateTime.fromSQL(item.CreatedAt).toLocaleString( - DateTime.DATETIME_SHORT - ) - } - }, [item.CreatedAt]) - - return ( - - - - {item.ID} - - - {createdAt} - - - - - - - - ) -} - -export default PatchLogsListItem diff --git a/apps/heureka/src/components/backup/ServiceDetail.js b/apps/heureka/src/components/backup/ServiceDetail.js deleted file mode 100644 index ff8b4f567..000000000 --- a/apps/heureka/src/components/backup/ServiceDetail.js +++ /dev/null @@ -1,202 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useMemo } from "react" -import { getService } from "../queries" -import useStore from "../hooks/useStore" -import { useActions } from "messages-provider" -import { useRouter } from "url-state-router" -import { - parseError, - patchExampl1, - patchExampl2, - changeLogExample1, - changeLogExample2, -} from "../helpers" -import { - Icon, - DataGrid, - DataGridRow, - DataGridCell, - Container, - Stack, - Button, -} from "juno-ui-components" -import { - DetailSection, - DetailSectionBox, - DetailContentHeading, - DetailSectionHeader, -} from "../styles" -import HintLoading from "./HintLoading" -import HintNotFound from "./HintNotFound" -import PatchLogsList from "./PatchLogsList" -import ComponentsList from "./ComponentsList" -import { SERVICES_PATH } from "./AppRouter" -import ChangesLogList from "./ChangesLogList" - -const listOfUsers = (users) => { - users = users || [] - return users.map((user, index) => ( - - {index ? ", " : ""} - {`${user.Name} `} - - ({user.SapID}) - - - )) -} -const ServiceDetail = () => { - const { options, routeParams, navigateTo } = useRouter() - - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const serviceId = routeParams?.serviceId - const { isLoading, isError, isFetching, data, error } = getService( - auth?.id_token, - endpoint, - serviceId - ) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (error) { - addMessage({ - variant: "error", - text: parseError(error), - }) - } - }, [error]) - - const owners = useMemo(() => { - if (!data?.Owners) return [] - return listOfUsers(data.Owners) - }, [data?.Owners]) - - const operators = useMemo(() => { - if (!data?.Operators) return [] - return listOfUsers(data.Operators) - }, [data?.Operators]) - - const components = useMemo(() => { - if (!data?.Components) return [] - return data.Components - }, [data]) - - const patches = useMemo(() => { - if (data?.Name && data?.Name === "Elektra") { - return [patchExampl2, patchExampl1] - } - return [] - }, [data]) - - const changes = useMemo(() => { - if (data?.Name && data?.Name === "Elektra") { - return [changeLogExample1, changeLogExample2] - } - return [] - }, [data]) - - return ( - - {isLoading && !data ? ( - - ) : ( - <> - {data ? ( - <> -

    - {data.Name} -

    - -
    -
    - - - - ID: - - {data.ID} - - - - Owners: - - {owners} - - - - Operators: - - {operators} - - -
    -
    - -
    -

    - Vulnerabilities in this service -

    -
    - -
    -
    - -
    - -

    Patches log

    -
    - -
    - -

    Changes log

    -
    - - ) : ( - - )} - - )} -
    - ) -} - -export default ServiceDetail diff --git a/apps/heureka/src/components/backup/Services.js b/apps/heureka/src/components/backup/Services.js deleted file mode 100644 index f1863d3b4..000000000 --- a/apps/heureka/src/components/backup/Services.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useState, useMemo } from "react" -import useStore from "../hooks/useStore" -import { useActions } from "messages-provider" -import { Container } from "juno-ui-components" -import { getServices, getServiceFilters } from "../queries" -import { parseError } from "../helpers" -import Pagination from "./Pagination" -import ServicesList from "./ServicesList" -import FilterToolbar from "./FilterToolbar" -import HintLoading from "./HintLoading" - -const ITEMS_PER_PAGE = 10 - -const Services = ({}) => { - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const addMessage = useActions() - const [paginationOptions, setPaginationOptions] = useState({ - limit: ITEMS_PER_PAGE, - offset: 0, - }) - const [searchOptions, setSearchOptions] = useState({}) - const services = getServices(auth?.id_token, endpoint, { - ...paginationOptions, - ...searchOptions, - }) - const filters = getServiceFilters(auth?.id_token, endpoint) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (services.error) { - addMessage({ - variant: "error", - text: parseError(services.error), - }) - } - }, [services.error]) - - useEffect(() => { - if (filters.error) { - addMessage({ - variant: "error", - text: parseError(filters.error), - }) - } - }, [filters.error]) - - const onPaginationChanged = (offset) => { - setPaginationOptions({ ...paginationOptions, offset: offset }) - } - - const onSearchTerm = (options) => { - setSearchOptions(options) - } - - return useMemo(() => { - return ( - - {services.isLoading && !services.data ? ( - - ) : ( - <> - - - - - )} - - ) - }, [services, filters]) -} - -export default Services diff --git a/apps/heureka/src/components/backup/ServicesList.js b/apps/heureka/src/components/backup/ServicesList.js deleted file mode 100644 index 397c780dd..000000000 --- a/apps/heureka/src/components/backup/ServicesList.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - Stack, - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import ServicesListItem from "./ServicesListItem" -import HintNotFound from "./HintNotFound" - -const ServicesList = ({ services, minimized }) => { - services = useMemo(() => { - if (!services) return [] - return services - }, [services]) - - return ( - <> - - - Name - {!minimized && ( - <> - Support group - Operators - Vulnerabilities - Components - - )} - - {services.length > 0 ? ( - <> - {services.map((item, i) => ( - - ))} - - ) : ( - - - - - - )} - - - ) -} - -export default ServicesList diff --git a/apps/heureka/src/components/backup/ServicesListItem.js b/apps/heureka/src/components/backup/ServicesListItem.js deleted file mode 100644 index ce73e5215..000000000 --- a/apps/heureka/src/components/backup/ServicesListItem.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell } from "juno-ui-components" -import { Link } from "url-state-router" -import { classifyVulnerabilities } from "../helpers" -import VulnerabilitiesOverview from "./VulnerabilitiesOverview" -import { SERVICES_PATH } from "./AppRouter" -import CustomBadge from "./CustomBadge" - -const cellClasses = ` -justify-start -` - -const listOfUsers = (users) => { - users = users || [] - return users.map((user, index) => ( - - {index ? ", " : ""} - {`${user.Name} `} - - ({user.SapID}) - - - )) -} - -const ServicesListItem = ({ item, minimized }) => { - const owners = useMemo(() => { - return listOfUsers(item.Owners) - }, [item.Owners]) - - const operators = useMemo(() => { - return listOfUsers(item.Operators) - }, [item.Operators]) - - const components = useMemo(() => { - if (!item?.Components) return [] - return item.Components - }, [item.Components]) - - const vulnerabilities = useMemo(() => { - return classifyVulnerabilities(components) - }, [components]) - - return ( - - - {item.Name} - - {!minimized && ( - <> - {owners} - {operators} - - - - -
    - -
    -
    - - )} -
    - ) -} - -export default ServicesListItem diff --git a/apps/heureka/src/components/backup/SupportGroups.js b/apps/heureka/src/components/backup/SupportGroups.js deleted file mode 100644 index 393a170f9..000000000 --- a/apps/heureka/src/components/backup/SupportGroups.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback } from "react" -import { Container } from "juno-ui-components" -import useStore from "../hooks/useStore" -import ServerGroupsList from "./SupportGroupsList" - -const ITEMS_PER_PAGE = 10 - -const SupportGroups = () => { - const endpoint = useStore(useCallback((state) => state.endpoint)) - - return ( - - - - ) -} - -export default SupportGroups diff --git a/apps/heureka/src/components/backup/SupportGroupsList.js b/apps/heureka/src/components/backup/SupportGroupsList.js deleted file mode 100644 index 437ad9404..000000000 --- a/apps/heureka/src/components/backup/SupportGroupsList.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import HintNotFound from "./HintNotFound" - -const ServerGroupsList = ({ supportGroups }) => { - supportGroups = useMemo(() => { - if (!supportGroups) return [] - return supportGroups - }, [supportGroups]) - - return ( - - - Name - Members - - {supportGroups.length > 0 ? ( - <> - No yet implemented - - ) : ( - - - - - - )} - - ) -} - -export default ServerGroupsList diff --git a/apps/heureka/src/components/backup/UserDetail.js b/apps/heureka/src/components/backup/UserDetail.js deleted file mode 100644 index 10c15893e..000000000 --- a/apps/heureka/src/components/backup/UserDetail.js +++ /dev/null @@ -1,116 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useMemo } from "react" -import { - Icon, - DataGrid, - DataGridRow, - DataGridCell, - Stack, - Spinner, - Container, -} from "juno-ui-components" -import { useRouter } from "url-state-router" -import { getUser } from "../queries" -import { useActions } from "messages-provider" -import useStore from "../hooks/useStore" -import { - DetailSection, - DetailSectionBox, - DetailContentHeading, - DetailSectionHeader, -} from "../styles" -import HintLoading from "./HintLoading" -import ServicesList from "./ServicesList" -import { parseError } from "../helpers" -import HintNotFound from "./HintNotFound" - -const UserDetail = ({}) => { - const { routeParams } = useRouter() - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const userId = routeParams?.userId - const { isLoading, isError, isFetching, data, error } = getUser( - auth?.id_token, - endpoint, - userId - ) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (error) { - addMessage({ - variant: "error", - text: parseError(error), - }) - } - }, [error]) - - return ( - - {isLoading && !data ? ( - - ) : ( - <> - {data ? ( - <> -

    - {data.Name} -

    - -
    -
    - - - - ID: - - {data.ID} - - - - Email: - - {data.Email} - - - - SAP ID: - - {data.SapID} - - - - Support team: - - Services team - - -
    -
    -
    -

    Owned services

    -
    - -
    -
    - -
    -

    Evidences

    -
    -
    - - ) : ( - - )} - - )} -
    - ) -} - -export default UserDetail diff --git a/apps/heureka/src/components/backup/Users.js b/apps/heureka/src/components/backup/Users.js deleted file mode 100644 index 5b33aa64d..000000000 --- a/apps/heureka/src/components/backup/Users.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useState } from "react" -import useStore from "../hooks/useStore" -import { useActions } from "messages-provider" -import { Container } from "juno-ui-components" -import { getUsers, getUserFilters } from "../queries" -import UsersList from "./UsersList" -import HintLoading from "./HintLoading" -import FilterToolbar from "./FilterToolbar" -import { parseError } from "../helpers" -import Pagination from "./Pagination" - -const ITEMS_PER_PAGE = 10 - -const Users = ({}) => { - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const [paginationOptions, setPaginationOptions] = useState({ - limit: ITEMS_PER_PAGE, - offset: 0, - }) - const [searchOptions, setSearchOptions] = useState({}) - const users = getUsers(auth?.id_token, endpoint, { - ...paginationOptions, - ...searchOptions, - }) - - const filters = getUserFilters(auth?.id_token, endpoint) - - useEffect(() => { - if (users.error) { - addMessage({ - variant: "error", - text: parseError(users.error), - }) - } - }, [users.error]) - - useEffect(() => { - if (filters.error) { - addMessage({ - variant: "error", - text: parseError(filters.error), - }) - } - }, [filters.error]) - - const onPaginationChanged = (offset) => { - setPaginationOptions({ ...paginationOptions, offset: offset }) - } - - const onSearchTerm = (options) => { - setSearchOptions(options) - } - - return ( - - {users.isLoading && !users.data ? ( - - ) : ( - <> - - - - - )} - - ) -} - -export default Users diff --git a/apps/heureka/src/components/backup/UsersList.js b/apps/heureka/src/components/backup/UsersList.js deleted file mode 100644 index e5bf4fdfe..000000000 --- a/apps/heureka/src/components/backup/UsersList.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - Stack, - DataGrid, - DataGridRow, - DataGridCell, - DataGridHeadCell, -} from "juno-ui-components" -import UserListItem from "./UsersListItem" -import HintNotFound from "./HintNotFound" - -const UsersList = ({ users }) => { - users = useMemo(() => { - if (!users) return [] - return users - }, [users]) - - return ( - <> - - - Name - SAP ID - Support group - Owned services - - {users.length > 0 ? ( - <> - {users.map((user, index) => ( - - ))} - - ) : ( - - - - - - )} - - - ) -} - -export default UsersList diff --git a/apps/heureka/src/components/backup/UsersListItem.js b/apps/heureka/src/components/backup/UsersListItem.js deleted file mode 100644 index b038b3581..000000000 --- a/apps/heureka/src/components/backup/UsersListItem.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell } from "juno-ui-components" -import { USERS_PATH } from "./AppRouter" -import { Link } from "url-state-router" -import Avatar from "./Avatar" -import CustomBadge from "./CustomBadge" - -const UserListItem = ({ item }) => { - const ownServices = useMemo(() => { - if (!item.OwnServices) return [] - return item.OwnServices - }, [item.OwnServices]) - - const evidences = useMemo(() => { - if (!item.Evidences) return [] - return item.Evidences - }, [item.Evidences]) - - return ( - - - - - - - {item.SapID} - Services team - - - - - ) -} - -export default UserListItem diff --git a/apps/heureka/src/components/backup/Vulnerabilities.js b/apps/heureka/src/components/backup/Vulnerabilities.js deleted file mode 100644 index 6fe1554ab..000000000 --- a/apps/heureka/src/components/backup/Vulnerabilities.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useState } from "react" -import useStore from "../hooks/useStore" -import { useActions } from "messages-provider" -import { Stack, Spinner, Container } from "juno-ui-components" -import { getVulnerabilities, getVulnerabilityFilters } from "../queries" -import { parseError } from "../helpers" -import Pagination from "./Pagination" -import VulnerabilitiesList from "./VulnerabilitiesList" -import FilterToolbar from "./FilterToolbar" -import HintLoading from "./HintLoading" - -const ITEMS_PER_PAGE = 10 - -const Vulnerabilities = ({}) => { - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const [paginationOptions, setPaginationOptions] = useState({ - limit: ITEMS_PER_PAGE, - offset: 0, - }) - const [searchOptions, setSearchOptions] = useState({}) - const vulnerabilities = getVulnerabilities(auth?.id_token, endpoint, { - ...paginationOptions, - ...searchOptions, - }) - const filters = getVulnerabilityFilters(auth?.id_token, endpoint) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (vulnerabilities.error) { - addMessage({ - variant: "error", - text: parseError(vulnerabilities.error), - }) - } - }, [vulnerabilities.error]) - - useEffect(() => { - if (filters.error) { - addMessage({ - variant: "error", - text: parseError(filters.error), - }) - } - }, [filters.error]) - - const onPaginationChanged = (offset) => { - setPaginationOptions({ ...paginationOptions, offset: offset }) - } - - const onSearchTerm = (options) => { - setSearchOptions(options) - } - - return ( - - {vulnerabilities.isLoading && !vulnerabilities.data ? ( - - ) : ( - <> - - - - - )} - - ) -} - -export default Vulnerabilities diff --git a/apps/heureka/src/components/backup/VulnerabilitiesList.js b/apps/heureka/src/components/backup/VulnerabilitiesList.js deleted file mode 100644 index d6bae33cf..000000000 --- a/apps/heureka/src/components/backup/VulnerabilitiesList.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, - Stack, -} from "juno-ui-components" -import VulnerabilitiesListItem from "./VulnerabilitiesListItem" -import { threadLevelToWeight } from "../helpers" -import HintNotFound from "./HintNotFound" - -const VulnerabilitiesList = ({ vulnerabilities, sortBy, minimized }) => { - vulnerabilities = useMemo(() => { - if (!vulnerabilities) return [] - if (!Array.isArray(vulnerabilities)) vulnerabilities = [vulnerabilities] - if (sortBy === "ThreatLevelOverall") { - return vulnerabilities - .sort( - (a, b) => - threadLevelToWeight(a[sortBy]) - threadLevelToWeight(b[sortBy]) - ) - .reverse() - } - return vulnerabilities - }, [vulnerabilities]) - - return ( - - - SCN/CVE - Threat level - {!minimized && Component} - Last modified - State - - {vulnerabilities.length > 0 ? ( - <> - {" "} - {vulnerabilities.map((item, index) => ( - - ))} - - ) : ( - - - - - - )} - - ) -} - -export default VulnerabilitiesList diff --git a/apps/heureka/src/components/backup/VulnerabilitiesListItem.js b/apps/heureka/src/components/backup/VulnerabilitiesListItem.js deleted file mode 100644 index 7e2403d0b..000000000 --- a/apps/heureka/src/components/backup/VulnerabilitiesListItem.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DataGridRow, DataGridCell } from "juno-ui-components" -import { DateTime } from "luxon" -import VulnerabilityBadge from "./VulnerabilityBadge" -import { Link } from "url-state-router" -import { VULNERABILITIES_PATH } from "./AppRouter" - -const IdClasses = ` -text-sm -pt-1 -whitespace-nowrap -text-theme-disabled -` -const VulnerabilityCss = ` -flex -` - -const VulnerabilitiesListItem = ({ item, minimized }) => { - const lastModifiedtString = useMemo(() => { - if (!item?.Scn?.ScnLastModified) return "No date available" - return DateTime.fromSQL(item.Scn.ScnLastModified).toLocaleString( - DateTime.DATETIME_SHORT - ) - }, [item?.Scn?.ScnLastModified]) - - return ( - - - - {item?.Scn?.Name} -
    {item?.Scn?.CveID}
    - -
    - -
    - -
    -
    - {!minimized && {item?.Component?.Name}} - {lastModifiedtString} - {item?.State} -
    - ) -} - -export default VulnerabilitiesListItem diff --git a/apps/heureka/src/components/backup/VulnerabilitiesOverview.js b/apps/heureka/src/components/backup/VulnerabilitiesOverview.js deleted file mode 100644 index 99519c8cd..000000000 --- a/apps/heureka/src/components/backup/VulnerabilitiesOverview.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Icon, Badge } from "juno-ui-components" -import VulnerabilityBadge from "./VulnerabilityBadge" -import { - THREAD_LEVEL_LOW, - THREAD_LEVEL_MEDIUM, - THREAD_LEVEL_HIGH, - THREAD_LEVEL_CRITICAL, -} from "../helpers" - -const VulnerabilitiesOverview = ({ vulnerabilities }) => { - return ( -
    - {vulnerabilities.low > 0 && ( - - )} - {vulnerabilities.medium > 0 && ( - - )} - {vulnerabilities.high > 0 && ( - - )} - {vulnerabilities.critical > 0 && ( - - )} -
    - ) -} - -export default VulnerabilitiesOverview diff --git a/apps/heureka/src/components/backup/VulnerabilitiyDetails.js b/apps/heureka/src/components/backup/VulnerabilitiyDetails.js deleted file mode 100644 index c74a989bf..000000000 --- a/apps/heureka/src/components/backup/VulnerabilitiyDetails.js +++ /dev/null @@ -1,224 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useCallback, useEffect, useMemo } from "react" -import { - Icon, - DataGrid, - DataGridRow, - DataGridCell, - Container, -} from "juno-ui-components" -import { getVulnerability } from "../queries" -import useStore from "../hooks/useStore" -import { useActions } from "messages-provider" -import { useRouter } from "url-state-router" -import { parseError } from "../helpers" -import { - DetailSection, - DetailSectionBox, - DetailContentHeading, - DetailSectionHeader, -} from "../styles" -import HintLoading from "./HintLoading" -import HintNotFound from "./HintNotFound" -import { DateTime } from "luxon" - -const VulnerabilitiyDetails = () => { - const { options, routeParams } = useRouter() - - const endpoint = useStore(useCallback((state) => state.endpoint)) - const auth = useStore(useCallback((state) => state.auth)) - const { addMessage } = useActions() - const vulnerabilityId = routeParams?.vulnerabilityId - const { isLoading, isError, isFetching, data, error } = getVulnerability( - auth?.id_token, - endpoint, - vulnerabilityId - ) - - // dispatch error with useEffect because error variable will first set once all retries did not succeed - useEffect(() => { - if (error) { - addMessage({ - variant: "error", - text: parseError(error), - }) - } - }, [error]) - - const scnLastModified = useMemo(() => { - if (data?.Scn?.ScnLastModified) { - return DateTime.fromSQL(data?.Scn?.ScnLastModified).toLocaleString( - DateTime.DATETIME_SHORT - ) - } - }, [data?.Scn?.ScnLastModified]) - - const cveLastModified = useMemo(() => { - if (data?.Scn?.CveLastModified) { - return DateTime.fromSQL(data?.Scn?.CveLastModified).toLocaleString( - DateTime.DATETIME_SHORT - ) - } - }, [data?.Scn?.CveLastModified]) - - return ( - - {isLoading && !data ? ( - - ) : ( - <> - {data ? ( - <> -

    - {" "} - {data?.Scn?.Name} -

    -
    -
    - - - - ID: - - {data?.ID} - - - - CCScore: - - {data?.CCScore} - - - - CCScoreReason: - - {data?.CCScoreReason} - - - - State: - - {data?.State} - - -
    -
    - -
    - -
    -

    - Common Vulnerabilities and Exposures (CVE) information -

    -
    -
    - - - - Name: - - {data?.Scn?.CveID} - - - - Last modified: - - {cveLastModified} - - - - URL: - - - {data?.Scn?.CveURL && ( - - {data?.Scn?.CveURL} - - )} - - - - - CVSS score: - - {data?.Scn?.CvssBase} - - -
    -
    -
    - - ) : ( - - )} - - )} - - ) -} - -export default VulnerabilitiyDetails diff --git a/apps/heureka/src/components/backup/VulnerabilityBadge.js b/apps/heureka/src/components/backup/VulnerabilityBadge.js deleted file mode 100644 index 1de5f4b99..000000000 --- a/apps/heureka/src/components/backup/VulnerabilityBadge.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { - THREAD_LEVEL_LOW, - THREAD_LEVEL_MEDIUM, - THREAD_LEVEL_HIGH, - THREAD_LEVEL_CRITICAL, -} from "../helpers" -import CustomBadge from "./CustomBadge" - -const badgeCss = ` - mr-2 -` - -const VulnerabilityBadge = ({ level, label }) => { - const icon = useMemo(() => { - const threadLevel = level || "" - switch (threadLevel.toLowerCase()) { - case THREAD_LEVEL_LOW: - return "severityLow" - case THREAD_LEVEL_MEDIUM: - return "severityMedium" - case THREAD_LEVEL_HIGH: - return "severityHigh" - case THREAD_LEVEL_CRITICAL: - return "severityCritical" - } - }, [level]) - - const badgeVariant = useMemo(() => { - const threadLevel = level || "" - switch (threadLevel.toLowerCase()) { - case THREAD_LEVEL_LOW: - return "default" - case THREAD_LEVEL_MEDIUM: - return "warning" - case THREAD_LEVEL_HIGH: - return "danger" - case THREAD_LEVEL_CRITICAL: - return "critical" - } - }, [level]) - - return ( - - ) -} - -export default VulnerabilityBadge diff --git a/apps/heureka/src/components/backup/WelcomeView.js b/apps/heureka/src/components/backup/WelcomeView.js deleted file mode 100644 index 40cbc73b0..000000000 --- a/apps/heureka/src/components/backup/WelcomeView.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack, Button } from "juno-ui-components" - -const WelcomeView = ({ loginCallback }) => { - return ( - -

    - Welcome to the Converged Cloud Patch Management System -

    -

    Login to maintain & track vulnerabilities

    -
    - - ) -} - -export default PaginationV2 diff --git a/apps/heureka/src/components/tabs/TabContext.jsx b/apps/heureka/src/components/tabs/TabContext.jsx deleted file mode 100644 index 034ba6abf..000000000 --- a/apps/heureka/src/components/tabs/TabContext.jsx +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { Container, TabNavigation, TabNavigationItem } from "juno-ui-components" -import TabPanel from "./TabPanel" -import { useActions, useActiveTab } from "../StoreProvider" - -import ServicesTab from "../services/ServicesTab" -import VulnerabilitiesTab from "../vulnerabilities/VulnerabilitiesTab" - -const TAB_CONFIG = [ - { - label: "Services", - value: "services", - icon: "dns", - component: ServicesTab, - }, - { - label: "Vulnerabilities", - value: "vulnerabilities", - icon: "autoAwesomeMotion", - component: VulnerabilitiesTab, - }, -] - -const TabContext = () => { - const { setActiveTab } = useActions() - const activeTab = useActiveTab() - - return ( - <> - setActiveTab(value)} - > - {TAB_CONFIG.map((tab) => ( - - ))} - - - {TAB_CONFIG.map((tab) => ( - - - - ))} - - - ) -} - -export default TabContext diff --git a/apps/heureka/src/components/tabs/TabPanel.jsx b/apps/heureka/src/components/tabs/TabPanel.jsx deleted file mode 100644 index 0c6655821..000000000 --- a/apps/heureka/src/components/tabs/TabPanel.jsx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo, useRef, useEffect } from "react" -import { useActiveTab } from "../StoreProvider" - -const TabPanel = ({ value, children }) => { - const activeTab = useActiveTab() - - // ATENTION!! compare with == since tabindex is int and value is string - const displayChildren = useMemo(() => activeTab == value, [activeTab, value]) - - return ( -
    - {children} -
    - ) -} - -export default TabPanel diff --git a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesList.jsx b/apps/heureka/src/components/vulnerabilities/VulnerabilitiesList.jsx deleted file mode 100644 index 08f9503d0..000000000 --- a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesList.jsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { - DataGrid, - DataGridRow, - DataGridHeadCell, - DataGridCell, -} from "juno-ui-components" -import HintNotFound from "../shared/HintNotFound" -import HintLoading from "../shared/HintLoading" -import VulnerabilitiesListItem from "./VulnerabilitiesListItem" - -const VulnerabilitiesList = ({ vulnerabilities, isLoading }) => { - return ( - - - SCN/CVE - Threat level - Component - Last modified - State - - {isLoading && !vulnerabilities ? ( - - ) : ( - <> - {vulnerabilities?.length > 0 ? ( - <> - {vulnerabilities.map((item, index) => ( - - ))} - - ) : ( - - - - - - )} - - )} - - ) -} - -export default VulnerabilitiesList diff --git a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesListController.jsx b/apps/heureka/src/components/vulnerabilities/VulnerabilitiesListController.jsx deleted file mode 100644 index 67e676cdf..000000000 --- a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesListController.jsx +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { useQuery } from "@tanstack/react-query" -import { - useQueryClientFnReady, - useQueryOptions, - useActions, -} from "../StoreProvider" -import VulnerabilitiesList from "./VulnerabilitiesList" -import PaginationV2 from "../shared/PaginationV2" - -// targetRemediationDate -// discoveryDate -// severity -// remediationDate (detailview) - -const VulnerabilitiesListController = () => { - const queryClientFnReady = useQueryClientFnReady() - const queryOptions = useQueryOptions("vulnerabilities") - const { setQueryOptions } = useActions() - - const { isLoading, isFetching, isError, data, error } = useQuery({ - queryKey: [`vulnerabilities`, queryOptions], - enabled: !!queryClientFnReady, - }) - - const vulnerabilities = useMemo(() => { - if (!data) return null - return data?.VulnerabilityMatches?.edges - }, [data]) - - const pageInfo = useMemo(() => { - if (!data) return null - return data?.VulnerabilityMatches?.pageInfo - }, [data]) - - const { currentPage, totalPages } = useMemo(() => { - if (!data?.VulnerabilityMatches?.pageInfo?.pages) return {} - const pages = data?.VulnerabilityMatches?.pageInfo?.pages - let currentPage = null - const currentPageIndex = pages?.findIndex((page) => page?.isCurrent) - if (currentPageIndex > -1) { - currentPage = pages[currentPageIndex]?.pageNumber - } - const totalPages = pages?.length - return { currentPage, totalPages } - }, [data?.VulnerabilityMatches?.pageInfo]) - - const onPaginationChanged = (newPage) => { - if (!data?.VulnerabilityMatches?.pageInfo?.pages) return - const pages = data?.VulnerabilityMatches?.pageInfo?.pages - const currentPageIndex = pages?.findIndex( - (page) => page?.pageNumber === newPage - ) - if (currentPageIndex > -1) { - const after = pages[currentPageIndex]?.after - setQueryOptions("vulnerabilities", { - ...queryOptions, - after: `${after}`, - }) - } - } - - return ( - <> - - - - ) -} - -export default VulnerabilitiesListController diff --git a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesListItem.jsx b/apps/heureka/src/components/vulnerabilities/VulnerabilitiesListItem.jsx deleted file mode 100644 index 42e29eda9..000000000 --- a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesListItem.jsx +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { DataGridRow, DataGridCell } from "juno-ui-components" - -const IdClasses = ` -text-sm -pt-1 -whitespace-nowrap -text-theme-disabled -` -const VulnerabilityCss = ` -flex -` - -const VulnerabilitiesListItem = ({ item }) => { - return ( - - - {item?.node?.id} - - -
    - {/* */} -
    -
    - {item?.Component?.Name} - - {item?.State} -
    - ) -} - -export default VulnerabilitiesListItem diff --git a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesTab.jsx b/apps/heureka/src/components/vulnerabilities/VulnerabilitiesTab.jsx deleted file mode 100644 index f48d1cab5..000000000 --- a/apps/heureka/src/components/vulnerabilities/VulnerabilitiesTab.jsx +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import VulnerabilitiesListController from "./VulnerabilitiesListController" -import Filters from "../filters/Filters" - -const VulnerabilitiesTab = () => { - return ( - <> - - - - ) -} - -export default VulnerabilitiesTab diff --git a/apps/heureka/src/helpers.js b/apps/heureka/src/helpers.js deleted file mode 100644 index 37a89b7d6..000000000 --- a/apps/heureka/src/helpers.js +++ /dev/null @@ -1,201 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { DateTime } from "luxon" - -export const parseError = (error) => { - if (!error || (typeof error === "object" && Object.keys(error).length === 0)) - return "An error occurred. There is no further information" - let errMsg = JSON.stringify(error) - if (error?.message) { - errMsg = error?.message - try { - const msgJson = JSON.parse(error?.message) - if (msgJson.error) errMsg = msgJson.error - if (msgJson.msg) errMsg = msgJson.msg - } catch (error) {} - } - return errMsg -} - -export const usersListToString = (users) => { - if (!users) users = [] - if (!Array.isArray(users)) users = [users] - - return users.map((user) => `${user.Name} (${user.SapID})`).join(", ") -} - -export const THREAD_LEVEL_LOW = "low" -export const THREAD_LEVEL_MEDIUM = "medium" -export const THREAD_LEVEL_HIGH = "high" -export const THREAD_LEVEL_CRITICAL = "critical" - -export const threadLevelToWeight = (level) => { - switch (level?.toLowerCase()) { - case THREAD_LEVEL_LOW: - return 3 - case THREAD_LEVEL_MEDIUM: - return 5 - case THREAD_LEVEL_HIGH: - return 8 - case THREAD_LEVEL_CRITICAL: - return 10 - } -} - -export const classifyVulnerabilitiesV2 = (vulnerabilites = []) => { - if (!vulnerabilites) vulnerabilites = [] - if (!Array.isArray(vulnerabilites)) vulnerabilites = [vulnerabilites] - let severities = { low: 0, medium: 0, high: 0, critical: 0 } - vulnerabilites.forEach((vulnerability) => { - // use of ThreatLevelOverall to get the index - switch (vulnerability?.ThreatLevelOverall?.toLowerCase()) { - case THREAD_LEVEL_LOW: - return (severities.low += 1) - case THREAD_LEVEL_MEDIUM: - return (severities.medium += 1) - case THREAD_LEVEL_HIGH: - return (severities.high += 1) - case THREAD_LEVEL_CRITICAL: - return (severities.critical += 1) - } - }) - return severities -} - -export const classifyVulnerabilities = (components = []) => { - if (!components) components = [] - if (!Array.isArray(components)) components = [components] - - let severities = { low: 0, medium: 0, high: 0, critical: 0 } - components.forEach((component) => { - // collect vulnerabilities from one component - if (component?.Vulnerabilities) { - const vulnerabilites = component?.Vulnerabilities - vulnerabilites.forEach((vulnerability) => { - // use of ThreatLevelOverall to get the index - switch (vulnerability?.ThreatLevelOverall?.toLowerCase()) { - case THREAD_LEVEL_LOW: - return (severities.low += 1) - case THREAD_LEVEL_MEDIUM: - return (severities.medium += 1) - case THREAD_LEVEL_HIGH: - return (severities.high += 1) - case THREAD_LEVEL_CRITICAL: - return (severities.critical += 1) - } - }) - } - }) - return severities -} - -export const COMPONENT_TYPE_KEPPEL = "KeppelImage" - -export const componentTypes = () => { - return [COMPONENT_TYPE_KEPPEL] -} - -export const componentDetailsByType = (component) => { - let detailKeys = [] - switch (component.Type) { - case COMPONENT_TYPE_KEPPEL: - detailKeys = [ - { - label: "Version", - value: componentVersionByType(component), - }, - { - label: "Maintainer", - value: component?.Details?.Maintainer, - }, - { - label: "Region", - value: component?.Details?.Region, - }, - { - label: "Source Repository", - value: component?.Details?.SourceRepository, - }, - ] - default: - } - return detailKeys -} - -export const componentVersionByType = (component) => { - let version = "" - switch (component.Type) { - case COMPONENT_TYPE_KEPPEL: - if (component?.Details?.PushedAt) { - version = DateTime.fromSeconds( - component?.Details?.PushedAt - ).toLocaleString(DateTime.DATETIME_SHORT) - } - default: - } - return version -} - -export const changeLogExample1 = { - ID: "4323", - Type: "automatic", - Components: [{ Name: "ubuntu" }, { Name: "alpine" }], - BeforeState: [ - { - ID: "333", - Name: "ubuntu", - Type: "KeppelImage", - Details: { PushedAt: 1543974164 }, - Vulnerabilities: [ - { - ID: 666, - ThreatLevelOverall: "Critical", - }, - ], - }, - ], - AfterState: [ - { - ID: "334", - Name: "alpine", - Type: "KeppelImage", - Details: { PushedAt: 1608021867 }, - Vulnerabilities: [], - }, - ], - CreatedAt: "2022-05-04 19:15:00.000", -} - -export const changeLogExample2 = { - ID: "1234", - Type: "manually", - Components: [ - { - Name: "absent-metrics-operator", - Type: "KeppelImage", - Details: { PushedAt: 1608021867 }, - }, - ], - BeforeState: [], - AfterState: [], - CreatedAt: "2022-04-29 14:15:00.000", -} - -export const patchExampl1 = { - ID: "123", - Type: "automatic", - Changes: [changeLogExample1], - CreatedAt: "2022-07-06 18:15:00.000", - Evidences: [], -} - -export const patchExampl2 = { - ID: "456", - Type: "automatic", - Changes: [changeLogExample2], - CreatedAt: "2022-05-04 19:15:00.000", - Evidences: [], -} diff --git a/apps/heureka/src/helpers.test.js b/apps/heureka/src/helpers.test.js deleted file mode 100644 index 691a20feb..000000000 --- a/apps/heureka/src/helpers.test.js +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { parseError, classifyVulnerabilities } from "./helpers" - -describe("Helpers", () => { - describe("parseError", () => { - test("return error as string if no object with message", () => { - expect(parseError({ error: "This is an error text" })).toEqual( - '{"error":"This is an error text"}' - ) - }) - test("return error message if object with message attr exists", () => { - expect(parseError({ message: "This is an error text" })).toEqual( - "This is an error text" - ) - }) - test("return error message if object message has attr msg", () => { - expect( - parseError({ message: '{ "msg": "This is an error text" }' }) - ).toEqual("This is an error text") - }) - test("return error message if object message has attr error", () => { - expect( - parseError({ message: '{ "error": "This is an error text" }' }) - ).toEqual("This is an error text") - }) - test("return standard error message if no object message available", () => { - expect(parseError({})).toEqual( - "An error occurred. There is no further information" - ) - }) - test("return standard error message if no object message available", () => { - expect(parseError()).toEqual( - "An error occurred. There is no further information" - ) - }) - test("return error text if just a string is available", () => { - expect(parseError("This is a mega error")).toEqual( - '"This is a mega error"' - ) - }) - }) - - describe("classifyVulnerabilities", () => { - test("return empty results if no components provided", () => { - expect(classifyVulnerabilities(classifyVulnerabilities)).toEqual({ - low: 0, - medium: 0, - high: 0, - critical: 0, - }) - }) - test("return empty results if null provided", () => { - expect(classifyVulnerabilities(null)).toEqual({ - low: 0, - medium: 0, - high: 0, - critical: 0, - }) - }) - test("map to array if object instead of array provided", () => { - expect( - classifyVulnerabilities({ - Vulnerabilities: [{ ThreatLevelOverall: "Medium" }], - }) - ).toEqual({ - low: 0, - medium: 1, - high: 0, - critical: 0, - }) - }) - test("classify all possibilities with and without capital letter", () => { - const component1 = { - Vulnerabilities: [ - { ThreatLevelOverall: "High" }, - { ThreatLevelOverall: "Low" }, - ], - } - const component2 = { - Vulnerabilities: [ - { ThreatLevelOverall: "Critical" }, - { ThreatLevelOverall: "Medium" }, - ], - } - const component3 = { - Vulnerabilities: [{ ThreatLevelOverall: "medium" }], - } - expect( - classifyVulnerabilities([component1, component2, component3]) - ).toEqual({ - low: 1, - medium: 2, - high: 1, - critical: 1, - }) - }) - }) -}) diff --git a/apps/heureka/src/hooks/useCommunication.js b/apps/heureka/src/hooks/useCommunication.js deleted file mode 100644 index a22ef054e..000000000 --- a/apps/heureka/src/hooks/useCommunication.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useReducer, useEffect, useCallback } from "react" -import { broadcast, get, watch } from "communicator" -import useStore from "./useStore" - -const useCommunication = () => { - console.log("[heureka] useCommunication setup") - - const setAuth = useStore((state) => state.setAuth) - const setLoggedIn = useStore((state) => state.setLoggedIn) - const setLoggedOut = useStore((state) => state.setLoggedOut) - const setLogin = useStore((state) => state.setLogin) - - useEffect(() => { - // get manually the current auth object in case the this app mist the first auth update message - // this is the case this app is loaded after the Auth app. - get( - "AUTH_GET_DATA", - (data) => { - setAuth(data.auth) - setLoggedIn(data.loggedIn) - }, - { debug: true } - ) - // watch for auth updates messages - // with the watcher we get the auth object when this app is loaded before the Auth app - const unwatch = watch( - "AUTH_UPDATE_DATA", - (data) => { - setAuth(data.auth) - setLoggedIn(data.loggedIn) - }, - { debug: true } - ) - return unwatch - }, [setAuth, setLoggedIn]) - - setLogin(() => { - broadcast("AUTH_LOGIN", "heureka", { debug: true }) - }) - - setLoggedOut(() => { - broadcast("AUTH_LOGOUT", "heureka") - }) -} - -export default useCommunication diff --git a/apps/heureka/src/hooks/useQueryClientFn.js b/apps/heureka/src/hooks/useQueryClientFn.js deleted file mode 100644 index 756353278..000000000 --- a/apps/heureka/src/hooks/useQueryClientFn.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect, useMemo } from "react" -import { useQueryClient } from "@tanstack/react-query" -import { useEndpoint, useActions } from "../components/StoreProvider" -import { request } from "graphql-request" -import sevicesQuery from "../lib/queries/services" -import vulnerabilityMatchesQuery from "../lib/queries/vulnerabilityMatches" -import ServiceFilterQuery from "../lib/queries/serviceFilters" - -// hook to register query defaults that depends on the queryClient and options -const useQueryClientFn = () => { - const queryClient = useQueryClient() - const endpoint = useEndpoint() - const { setQueryClientFnReady } = useActions() - - /* - As stated in getQueryDefaults, the order of registration of query defaults does matter. Since the first matching defaults are returned by getQueryDefaults, the registration should be made in the following order: from the least generic key to the most generic one. This way, in case of specific key, the first matching one would be the expected one. - */ - useEffect(() => { - if (!queryClient || !endpoint) return - console.log("useQueryClientFn::: setting defaults") - - queryClient.setQueryDefaults(["services"], { - queryFn: async ({ queryKey }) => { - const [_key, options] = queryKey - console.log("useQueryClientFn::: queryKey: ", queryKey, options) - return await request(endpoint, sevicesQuery(), options) - }, - }) - - queryClient.setQueryDefaults(["vulnerabilities"], { - queryFn: async ({ queryKey }) => { - const [_key, options] = queryKey - console.log("useQueryClientFn::: queryKey: ", queryKey) - return await request(endpoint, vulnerabilityMatchesQuery(), options) - }, - }) - - queryClient.setQueryDefaults(["serviceFilters"], { - queryFn: async ({ queryKey }) => { - console.log("useQueryClientFn::: queryKey: ", queryKey) - return await request(endpoint, ServiceFilterQuery()) - }, - staleTime: Infinity, // this do not change often keep it until reload - }) - - // set queryClientFnReady to true once - setQueryClientFnReady(true) - }, [queryClient, endpoint]) -} - -export default useQueryClientFn diff --git a/apps/heureka/src/hooks/useUrlState.js b/apps/heureka/src/hooks/useUrlState.js deleted file mode 100644 index af5835d23..000000000 --- a/apps/heureka/src/hooks/useUrlState.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useState, useEffect } from "react" -import { registerConsumer } from "url-state-provider" -import { useActions, useActiveTab } from "../components/StoreProvider" - -const DEFAULT_KEY = "heureka" -const ACTIVE_TAB = "t" - -const useUrlState = (key) => { - const [isURLRead, setIsURLRead] = useState(false) - // it is possible to have two apps instances on the same page - // int his case the key should be different per app - const urlStateManager = registerConsumer(key || DEFAULT_KEY) - - const { setActiveTab } = useActions() - const activeTab = useActiveTab() - - // Set initial state from URL (on login) - useEffect(() => { - if (isURLRead) return - console.log( - `HEUREKA: (${key || DEFAULT_KEY}) setting up state from url:`, - urlStateManager.currentState() - ) - - // READ the url state and set the state - const newTabIndex = urlStateManager.currentState()?.[ACTIVE_TAB] - // SAVE the state - if (newTabIndex) setActiveTab(newTabIndex) - setIsURLRead(true) - }, [isURLRead]) - - // SYNC states to URL state - useEffect(() => { - if (!isURLRead) return - urlStateManager.push({ - [ACTIVE_TAB]: activeTab, - }) - }, [isURLRead, activeTab]) -} - -export default useUrlState diff --git a/apps/heureka/src/img/app_bg_example.svg b/apps/heureka/src/img/app_bg_example.svg deleted file mode 100644 index b28325349..000000000 --- a/apps/heureka/src/img/app_bg_example.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/apps/heureka/src/index.js b/apps/heureka/src/index.js deleted file mode 100644 index f6f988315..000000000 --- a/apps/heureka/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createRoot } from "react-dom/client" -import React from "react" - -// export mount and unmount functions -export const mount = (container, options = {}) => { - import("./App").then((App) => { - mount.root = createRoot(container) - mount.root.render(React.createElement(App.default, options?.props)) - }) -} - -export const unmount = () => mount.root && mount.root.unmount() diff --git a/apps/heureka/src/lib/queries/serviceFilters.js b/apps/heureka/src/lib/queries/serviceFilters.js deleted file mode 100644 index 5ba6c2080..000000000 --- a/apps/heureka/src/lib/queries/serviceFilters.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { gql } from "graphql-request" - -// gql -// It is there for convenience so that you can get the tooling support -// like prettier formatting and IDE syntax highlighting. -// You can use gql from graphql-tag if you need it for some reason too. -export default () => gql` - { - __type(name: "ServiceFilter") { - name - inputFields { - name - type { - name - kind - ofType { - name - kind - enumValues { - name - } - } - } - } - } - } -` diff --git a/apps/heureka/src/lib/queries/services.js b/apps/heureka/src/lib/queries/services.js deleted file mode 100644 index ab294fb75..000000000 --- a/apps/heureka/src/lib/queries/services.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { gql } from "graphql-request" - -// gql -// It is there for convenience so that you can get the tooling support -// like prettier formatting and IDE syntax highlighting. -// You can use gql from graphql-tag if you need it for some reason too. -export default () => gql` - query ($filter: ServiceFilter, $first: Int, $after: String) { - Services(filter: $filter, first: $first, after: $after) { - __typename - totalCount - edges { - node { - id - name - owners { - totalCount - edges { - node { - id - sapID - name - } - cursor - } - pageInfo { - hasNextPage - nextPageAfter - } - } - supportGroups { - totalCount - edges { - node { - id - name - } - cursor - } - pageInfo { - hasNextPage - nextPageAfter - } - } - activities { - totalCount - edges { - node { - id - } - cursor - } - pageInfo { - hasNextPage - nextPageAfter - } - } - advisoryRepositories { - totalCount - edges { - node { - id - name - url - created_at - updated_at - } - cursor - priority - created_at - updated_at - } - pageInfo { - hasNextPage - nextPageAfter - } - } - } - cursor - } - pageInfo { - hasNextPage - nextPageAfter - } - } - } -` diff --git a/apps/heureka/src/lib/queries/vulnerabilityMatches.js b/apps/heureka/src/lib/queries/vulnerabilityMatches.js deleted file mode 100644 index 0c3b3d806..000000000 --- a/apps/heureka/src/lib/queries/vulnerabilityMatches.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { gql } from "graphql-request" - -// gql -// It is there for convenience so that you can get the tooling support -// like prettier formatting and IDE syntax highlighting. -// You can use gql from graphql-tag if you need it for some reason too. -export default () => gql` - query ($filter: VulnerabilityMatchFilter, $first: Int, $after: String) { - VulnerabilityMatches(filter: $filter, first: $first, after: $after) { - __typename - totalCount - edges { - node { - id - status - remediationDate - discoveryDate - targetRemediationDate - severity { - value - score - } - evidences { - totalCount - edges { - node { - id - description - } - cursor - } - pageInfo { - hasNextPage - nextPageAfter - } - } - vulnerabilityDisclosureId - vulnerabilityDisclosure { - id - lastModified - } - componentInstanceId - componentInstance { - id - ccrn - count - } - vulnerabilityMatchChanges { - totalCount - edges { - node { - id - action - vulnerabilityMatchId - activityId - } - cursor - } - pageInfo { - hasNextPage - nextPageAfter - } - } - } - cursor - } - pageInfo { - hasNextPage - hasPreviousPage - isValidPage - pageNumber - nextPageAfter - pages { - after - isCurrent - pageNumber - pageCount - } - } - } - } -` diff --git a/apps/heureka/src/lib/store.js b/apps/heureka/src/lib/store.js deleted file mode 100644 index b35ad2071..000000000 --- a/apps/heureka/src/lib/store.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createStore } from "zustand" -import { devtools } from "zustand/middleware" -import produce from "immer" - -export default (options) => - createStore( - devtools((set, get) => ({ - isUrlStateSetup: false, - queryClientFnReady: false, - endpoint: options?.apiEndpoint, - - activeTab: "services", - tabs: { - services: { - queryOptions: { - first: 20, - }, - }, - vulnerabilities: { - queryOptions: { - first: 20, - }, - }, - }, - - actions: { - setQueryClientFnReady: (readiness) => - set( - (state) => { - state.queryClientFnReady = readiness - }, - false, - "setQueryClientFnReady" - ), - setActiveTab: (index) => - set( - (state) => { - state.activeTab = index - }, - false, - "setActiveTab" - ), - setQueryOptions: (tab, options) => - set( - produce((state) => { - state.tabs[tab].queryOptions = options - }), - false, - "setQueryOptions" - ), - }, - })) - ) diff --git a/apps/heureka/src/queries.js b/apps/heureka/src/queries.js deleted file mode 100644 index 210c7fcf0..000000000 --- a/apps/heureka/src/queries.js +++ /dev/null @@ -1,205 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useQuery } from "@tanstack/react-query" -import { - services, - serviceFilters, - service, - components, - componentFilters, - component, - vulnerabilities, - vulnerability, - vulnerabilityFilters, - users, - user, - userFilters, -} from "./actions" - -// get all services -export const getServices = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["services", bearerToken, endpoint, options], - queryFn: services, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - }) -} - -export const getServiceFilters = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["serviceFilters", bearerToken, endpoint, options], - queryFn: serviceFilters, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - // If a user leaves your application and returns to stale data, React Query automatically requests fresh data for you in the background. - // You can disable this globally or per-query using the refetchOnWindowFocus option - refetchOnWindowFocus: false, - }) -} - -export const getService = ( - bearerToken, - endpoint, - serviceId, - placeholderData -) => { - return useQuery({ - queryKey: ["service", bearerToken, endpoint, serviceId], - queryFn: service, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // Placeholder data allows a query to behave as if it already has data, similar to the initialData option, - // but the data is not persisted to the cache. This comes in handy for situations where you have enough partial (or fake) - // data to render the query successfully while the actual data is fetched in the background. - placeholderData: placeholderData, - }) -} - -// get all components -export const getComponents = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["components", bearerToken, endpoint, options], - queryFn: components, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - }) -} - -export const getComponentFilters = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["componentFilters", bearerToken, endpoint, options], - queryFn: componentFilters, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - // If a user leaves your application and returns to stale data, React Query automatically requests fresh data for you in the background. - // You can disable this globally or per-query using the refetchOnWindowFocus option - refetchOnWindowFocus: false, - }) -} - -export const getComponent = ( - bearerToken, - endpoint, - componentId, - placeholderData -) => { - return useQuery({ - queryKey: ["component", bearerToken, endpoint, componentId], - queryFn: component, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // Placeholder data allows a query to behave as if it already has data, similar to the initialData option, - // but the data is not persisted to the cache. This comes in handy for situations where you have enough partial (or fake) - // data to render the query successfully while the actual data is fetched in the background. - placeholderData: placeholderData, - }) -} - -export const getVulnerabilities = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["vulnerabilities", bearerToken, endpoint, options], - queryFn: vulnerabilities, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - }) -} - -export const getVulnerability = ( - bearerToken, - endpoint, - vulnerabilityId, - placeholderData -) => { - return useQuery({ - queryKey: ["user", bearerToken, endpoint, vulnerabilityId], - queryFn: vulnerability, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // Placeholder data allows a query to behave as if it already has data, similar to the initialData option, - // but the data is not persisted to the cache. This comes in handy for situations where you have enough partial (or fake) - // data to render the query successfully while the actual data is fetched in the background. - placeholderData: placeholderData, - }) -} - -export const getVulnerabilityFilters = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["vulnerabilityFilters", bearerToken, endpoint, options], - queryFn: vulnerabilityFilters, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - // If a user leaves your application and returns to stale data, React Query automatically requests fresh data for you in the background. - // You can disable this globally or per-query using the refetchOnWindowFocus option - refetchOnWindowFocus: false, - }) -} - -export const getUsers = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["users", bearerToken, endpoint, options], - queryFn: users, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - }) -} - -export const getUser = (bearerToken, endpoint, userId, placeholderData) => { - return useQuery({ - queryKey: ["user", bearerToken, endpoint, userId], - queryFn: user, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // Placeholder data allows a query to behave as if it already has data, similar to the initialData option, - // but the data is not persisted to the cache. This comes in handy for situations where you have enough partial (or fake) - // data to render the query successfully while the actual data is fetched in the background. - placeholderData: placeholderData, - }) -} - -export const getUserFilters = (bearerToken, endpoint, options) => { - return useQuery({ - queryKey: ["userFilters", endpoint, options], - queryFn: userFilters, - // The query will not execute until the bearerToken exists - enabled: !!bearerToken, - // The data from the last successful fetch available while new data is being requested, even though the query key has changed. - // When the new data arrives, the previous data is seamlessly swapped to show the new data. - // isPreviousData is made available to know what data the query is currently providing you - keepPreviousData: true, - // If a user leaves your application and returns to stale data, React Query automatically requests fresh data for you in the background. - // You can disable this globally or per-query using the refetchOnWindowFocus option - refetchOnWindowFocus: false, - }) -} diff --git a/apps/heureka/src/styles.js b/apps/heureka/src/styles.js deleted file mode 100644 index d18e47105..000000000 --- a/apps/heureka/src/styles.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const DetailContentHeading = ` -jn-font-bold -jn-text-lg -jn-text-theme-high -jn-pb-2 - ` - -export const DetailSection = ` -mt-6 -` - -export const DetailSectionHeader = ` -font-bold -mt-4 -text-lg -` - -export const DetailSectionBox = ` -bg-theme-background-lvl-1 -rounded -pb-0.5 -` diff --git a/apps/heureka/src/styles.scss b/apps/heureka/src/styles.scss deleted file mode 100644 index 8c927175f..000000000 --- a/apps/heureka/src/styles.scss +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -/* Do not remove these tailwind directives. Without them styles won't work as expected */ -@tailwind base; -@tailwind components; -@tailwind utilities; - - -/* If necessary, app styles can be added below */ - - diff --git a/apps/heureka/tailwind.config.js b/apps/heureka/tailwind.config.js deleted file mode 100644 index 4ee65e3b0..000000000 --- a/apps/heureka/tailwind.config.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// opacity helper to make custom colors work with opacity -function withOpacity(variableName) { - return ({ opacityVariable, opacityValue }) => { - if (opacityValue !== undefined) { - return `rgba(var(${variableName}), ${opacityValue})` - } - if (opacityVariable !== undefined) { - return `rgba(var(${variableName}), var(${opacityVariable}, 1))` - } - return `rgb(var(${variableName}))` - } -} - -module.exports = { - presets: [require("juno-ui-components/build/lib/tailwind.config")], - prefix: "", // important, do not change - content: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"], - corePlugins: { - preflight: false, - }, - theme: {}, - plugins: [], -} diff --git a/apps/supernova/LICENSE b/apps/supernova/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/apps/supernova/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apps/supernova/README.md b/apps/supernova/README.md deleted file mode 100644 index b6c41b801..000000000 --- a/apps/supernova/README.md +++ /dev/null @@ -1,134 +0,0 @@ -Supernova is an alternative UI for Prometheus Alertmanager with some quality of life improvements: - -- Micro frontend design based on [Juno UI components](https://ui.juno.global.cloud.sap) -- Predefined filter categories -- Easy filtering -- Autodiscover of the support group and added automatically as filter -- Aggregation and counting of alerts by region and severity -- Automatic URL linking for URLs in descriptions -- Parsing of alert labels for included external links -- Display of active and expired silences for a given alert -- Warning of an existing silence displaying the exact expiration time when creating new silences - -## Concepts - -### Alerts - -Alerting rules offer the capability to define alert conditions using expressions in the Prometheus expression language. These rules enable you to specify conditions that trigger alerts, and subsequently send notifications regarding the firing alerts to an external service. Whenever the alert expression results in one or more vector elements at a given point in time, the alert counts as active for these elements `label sets`. - -#### Labels - -The labels clause allows specifying a set of additional labels to be attached to the alert. Following is a live example of a set of labels from an alert of the `support group:containers` with `severity:info` in the `region:eu-de-2`. - -```js -{ - ... - "labels": { - "alertname": "PodOOMKilled", - "cluster": "eu-de-2", - "cluster_type": "metal", - "context": "memory", - "label_ccloud_support_group": "containers", - "meta": "Pod kube-system/kube-system-metal-owner-label-injector-28150200-2vgk5 OOMKilled", - "namespace": "kube-system", - "no_alert_on_absence": "true", - "playbook": "docs/support/playbook/kubernetes/k8s_pod_oomkilled", - "pod_name": "kube-system-metal-owner-label-injector-28150200-2vgk5", - "prometheus": "kube-monitoring/kubernetes", - "region": "eu-de-2", - "service": "resources", - "severity": "info", - "support_group": "containers", - "tier": "k8s", - "status": "active" - } - ... -} -``` - -### Silences - -Silences are a straightforward way to simply mute alerts for a given time. A silence is configured based on matchers. Incoming alerts are checked whether they match all the equality matchers of an active silence. If they do, no notifications will be sent out for that alert. - -#### Matchers - -A matcher is a string with a syntax inspired by PromQL and OpenMetrics. Matchers are ANDed together, meaning that all matchers must evaluate to "true" when tested against the labels on a given alert. - -When utilizing Supernova to add a silence, the matchers will be preselected based on the alert you selected. Moreover, through the advanced section, you have the option to include additional labels that are excluded by default. These exclusions are dependent on the configured excluded labels, which will be explained in detail in the section below. - -Given an alert with following labels: - -```js -{ - ... - fingerprint: "alert123", - labels: { - severity: "critical", - support_group: "containers", - service: "automation", - } - ... -} -``` - -In order to prevent the alert from continuing to trigger, we require a silence that includes the following matchers: - -```js -{ - ... - id: "silence123", - matchers: [ - { name: "severity", value: "critical" }, - { name: "support_group", value: "containers" }, - { name: "service", value: "automation" }, - ], - ... -} -``` - -## Configuration - -### Filter labels - -Filter labels are a set of labels that are utilized to define the criteria by which alerts will be filtered, if those labels exist within the fetched alerts. These filter labels enable you to selectively narrow down the alerts based on specific label values, resulting in a more targeted and refined alert filtering process. - -To set the filter labels: - -1. Utilize the app prop `filterLabels`, which is used during the setup of the script tag. For further information, please consult the [Get Started]() section. - -### Silence excluded alert labels - -Excluded labels are a collection of labels that are automatically excluded by default when configuring silence matchers. These labels, such as `pod`, `pod_name` or `instance`, often undergo frequent value changes, causing new alerts to be triggered that are not covered by the existing silence. - -Consider the following example: an alert is triggered when a pod runs out of memory and gets killed `Out Of Memory killed`. When this pod is recreated, it receives a different name. If the pod runs again out of memory because of the same issue, a new alarm will be triggered, but it won't be covered if we had used the `pod_name` as a matcher in the silence configuration. - -PodOOMKilled alarm labels example: - -```js -{ - "alertname": "PodOOMKilled", - "cluster": "eu-de-1", - "cluster_type": "metal", - "context": "memory", - "label_ccloud_service": "keppel", - "label_ccloud_support_group": "containers", - "meta": "Pod keppel/keppel-janitor-6dc777bcbf-5xrns OOMKilled", - "namespace": "keppel", - "no_alert_on_absence": "true", - "playbook": "docs/support/playbook/kubernetes/k8s_pod_oomkilled", - "pod_name": "keppel-janitor-6dc777bcbf-5xrns", - "prometheus": "kube-monitoring/kubernetes", - "region": "eu-de-1", - "service": "resources", - "severity": "info", - "support_group": "containers", - "tier": "k8s", - "status": "active" -} -``` - -If the end user wishes to include any excluded labels as matchers, they can easily do so by expanding the advanced section during the silence creation process. This allows for greater flexibility and customization when configuring the silence matchers. - -To set the excluded alert labels: - -1. Utilize the app prop `silenceExcludedLabels`, which is used during the setup of the script tag. For further information, please consult the [Get Started]() section. diff --git a/apps/supernova/__mocks__/client.js b/apps/supernova/__mocks__/client.js deleted file mode 100644 index 84531d3c2..000000000 --- a/apps/supernova/__mocks__/client.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { JSDOM } from "jsdom" -const dom = new JSDOM() -global.document = dom.window.document -global.window = dom.window diff --git a/apps/supernova/__mocks__/fileMock.js b/apps/supernova/__mocks__/fileMock.js deleted file mode 100644 index 27ce65aca..000000000 --- a/apps/supernova/__mocks__/fileMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = "test-file-stub" diff --git a/apps/supernova/__mocks__/styleMock.js b/apps/supernova/__mocks__/styleMock.js deleted file mode 100644 index d74516001..000000000 --- a/apps/supernova/__mocks__/styleMock.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = {} diff --git a/apps/supernova/babel.config.js b/apps/supernova/babel.config.js deleted file mode 100644 index abc1af7d1..000000000 --- a/apps/supernova/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - presets: ["@babel/preset-env", "@babel/preset-react"], - env: { - test: { - plugins: [["babel-plugin-transform-import-meta", { module: "ES6" }]], - }, - }, -} diff --git a/apps/supernova/esbuild.config.js b/apps/supernova/esbuild.config.js deleted file mode 100644 index 70ff2bed5..000000000 --- a/apps/supernova/esbuild.config.js +++ /dev/null @@ -1,211 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const esbuild = require("esbuild") -const fs = require("node:fs/promises") -const pkg = require("./package.json") -const postcss = require("postcss") -const sass = require("sass") -const { transform } = require("@svgr/core") -const url = require("postcss-url") -// this function generates app props based on package.json and propSecrets.json -const appProps = require("../../helpers/appProps") - -if (!/.+\/.+\.js/.test(pkg.module)) - throw new Error( - "module value is incorrect, use DIR/FILE.js like build/index.js" - ) - -const isProduction = process.env.NODE_ENV === "production" -const IGNORE_EXTERNALS = process.env.IGNORE_EXTERNALS === "true" -// in dev environment we prefix output file with public -let outfile = `${isProduction ? "" : "public/"}${pkg.main || pkg.module}` -// get output from outputfile -let outdir = outfile.slice(0, outfile.lastIndexOf("/")) -const args = process.argv.slice(2) -const watch = args.indexOf("--watch") >= 0 -const serve = args.indexOf("--serve") >= 0 - -const green = "\x1b[32m%s\x1b[0m" -const yellow = "\x1b[33m%s\x1b[0m" -const clear = "\033c" - -// shared config -const config = { - bundle: true, - minify: isProduction, - // target: ["es2020"], - target: ["es2020"], //["chrome64", "firefox67", "safari11.1", "edge79"], - format: "esm", - platform: "browser", - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - loader: { ".js": "jsx" }, - sourcemap: isProduction ? false : "both", - external: - isProduction && !IGNORE_EXTERNALS - ? Object.keys(pkg.peerDependencies || {}) - : [], -} - -const build = async () => { - // delete build folder - await fs.rm(outdir, { recursive: true, force: true }) - await fs.mkdir(outdir, { recursive: true }) - - // build web workers - try { - const workerFiles = await fs.readdir("src/workers") - for (let f of workerFiles) { - await esbuild.build({ - ...config, - entryPoints: [`src/workers/${f}`], - outfile: `${outdir}/workers/${f}`, - }) - } - } catch (e) { - console.log("WARNING: BUILD WEB WORKERS", e.message) - } - - // build app - let ctx = await esbuild.context({ - ...config, - entryPoints: [pkg.source], - outdir, - splitting: true, - format: "esm", - plugins: [ - { - name: "start/end", - setup(build) { - build.onStart(() => { - // console.log(clear) - console.log(yellow, "Compiling...") - }) - build.onEnd((result) => console.log(green, "Done!")) - }, - }, - // this custom plugin rewrites SVG imports to - // dataurls, paths or react components based on the - // search param and size - { - name: "svg-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(svg)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - let loader = "text" - if (args.suffix === "?url") { - // as URL - const maxSize = 10240 // 10Kb - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - } else { - // as react component - // use react component loader (jsx) - loader = "jsx" - contents = await transform(contents, { - plugins: ["@svgr/plugin-jsx"], - }) - } - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin rewrites image imports to - // dataurls or urls based on the size - { - name: "image-loader", - setup(build) { - build.onLoad( - // consider only .svg files - { filter: /.\.(png|jpg|jpeg|gif)$/, namespace: "file" }, - async (args) => { - let contents = await fs.readFile(args.path) - const maxSize = 10240 // 10Kb - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - // use dataurl loader for small files and file loader for big files! - loader = contents.length <= maxSize ? "dataurl" : "file" - - return { contents, loader } - } - ) - }, - }, - - // this custom plugin parses the style files - { - name: "parse-styles", - setup(build) { - build.onLoad( - // consider only .scss and .css files - { filter: /.\.(css|scss)$/, namespace: "file" }, - async (args) => { - let content - // handle scss, convert to css - if (args.path.endsWith(".scss")) { - const result = sass.renderSync({ file: args.path }) - content = result.css - } else { - // read file content - content = await fs.readFile(args.path) - } - - // postcss plugins - const plugins = [ - require("tailwindcss"), - require("autoprefixer"), - // rewrite urls inside css - url({ - url: "inline", - // maxSize: 10, // use dataurls if files are smaller than 10k - // fallback: "copy", // if files are bigger use copy method - // assetsPath: "./build/assets", - // useHash: true, - // optimizeSvgEncode: true, - }), - ] - - const { css } = await postcss(plugins).process(content, { - from: args.path, - to: outdir, - }) - // built-in loaders: js, jsx, ts, tsx, css, json, text, base64, dataurl, file, binary - return { contents: css, loader: "text" } - } - ) - }, - }, - ], - }) - - if (watch || serve) { - if (watch) await ctx.watch() - if (serve) { - // generate app props based on package.json and secretProps.json - await fs.writeFile( - `./${outdir}/appProps.js`, - `export default ${JSON.stringify(appProps())}` - ) - - let { host, port } = await ctx.serve({ - host: "0.0.0.0", - port: parseInt(process.env.APP_PORT || process.env.PORT || 3000), - servedir: "public", - }) - console.log("serve on", `${host}:${port}`) - } - } else { - await ctx.rebuild() - await ctx.dispose() - } -} - -build() diff --git a/apps/supernova/jest.config.js b/apps/supernova/jest.config.js deleted file mode 100644 index 0cb80394c..000000000 --- a/apps/supernova/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - transform: { "\\.[jt]sx?$": "babel-jest" }, - testEnvironment: "jsdom", - setupFilesAfterEnv: ["/setupTests.js"], - transformIgnorePatterns: [ - "node_modules/(?!(juno-ui-components|communicator)/)", - ], - moduleNameMapper: { - // Jest currently doesn't support resources with query parameters. - // Therefore we add the optional query parameter matcher at the end - // https://github.com/facebook/jest/issues/4181 - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)(\\?.+)?$": - require.resolve("./__mocks__/fileMock"), - "\\.(css|less|scss)$": require.resolve("./__mocks__/styleMock"), - }, -} diff --git a/apps/supernova/package.json b/apps/supernova/package.json deleted file mode 100644 index a17f9842a..000000000 --- a/apps/supernova/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "supernova", - "version": "0.9.11", - "author": "UI-Team", - "contributors": [ - "Esther Schmitz", - "Arturo Reuschenbach Puncernau" - ], - "repository": "https://github.com/sapcc/juno/tree/main/apps/supernova", - "license": "Apache-2.0", - "source": "src/index.js", - "module": "build/index.js", - "private": true, - "devDependencies": { - "@babel/core": "^7.20.2", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", - "esbuild": "^0.17.11", - "esbuild-sass-plugin": "^2.6.0", - "immer": "^9.0.21", - "interweave": "^13.0.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "zustand": "4.3.7" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "zustand": "4.3.7" - }, - "importmapExtras": { - "zustand/middleware": "4.3.7" - }, - "scripts": { - "start": "NODE_ENV=development node esbuild.config.js --port=$APP_PORT --serve --watch", - "test": "jest", - "build": "NODE_ENV=production node esbuild.config.js" - }, - "appProps": { - "theme": { - "value": "theme-dark", - "type": "optional", - "description": "Override the default theme. Possible values are theme-light or theme-dark (default)" - }, - "embedded": { - "value": "false", - "type": "optional", - "description": "Set to true if app is to be embedded in another existing app or page, like e.g. Elektra. If set to true the app won't render a page header/footer and instead render only the content. The default value is false." - }, - "endpoint": { - "value": "", - "type": "required", - "description": "Alertmanager API Endpoint URL" - }, - "filterLabels": { - "value": null, - "type": "optional", - "description": "FilterLabels are the labels shown in the filter dropdown, enabling users to filter alerts based on specific criteria. The 'Status' label serves as a default filter, automatically computed from the alert status attribute and will be not overwritten. The labels must be an array of strings. Example: [\"app\", \"cluster\", \"cluster_type\"]" - }, - "silenceExcludedLabels": { - "value": null, - "type": "optional", - "description": "SilenceExcludedLabels are labels that are initially excluded by default when creating a silence. However, they can be added if necessary when utilizing the advanced options in the silence form. The labels must be an array of strings. Example: [\"pod\", \"pod_name\", \"instance\"]" - }, - "silenceTemplates": { - "value": null, - "type": "optional", - "description": "SilenceTemplates are pre-defined silence templates that can be used to scheduled Maintenance Windows. The format consists of a list of objects including description, editable_labels (array of strings specifying the labels that users can modify), fixed_labels (map containing fixed labels and their corresponding values), status, and title." - } - }, - "appDependencies": { - "auth": "latest" - }, - "appPreview": true -} diff --git a/apps/supernova/public/favicon.ico b/apps/supernova/public/favicon.ico deleted file mode 100644 index 9ebc4bb2e04736789f9fcfe03121b296c693079a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHOc~DkW6h8=vpa^PaX3JM9iaLr~+M@BPg-&UinG_1xqN9VFP8qhyVv3gI5)y)q zTINC;R?|K;#Z=Q?rdcjEfL2psi+^QPO{eqwE|2&4e8Bs@_ib;6J9D_-d+*+Je)rsS zw{s6fQ4~#SX(YLes`?X+A|jWo@j02OR^BB`j_>ngh)SfuKq(_tXtogEds07@wedGr zzRwh@rmJplpzU=``%W`${FrIleN26aGbMIs`5p@TOXSoGJtveUB&};Tx#jC|A*LG_ zG41`GX~z#t*Uo0@5FHArF33-gz4hJZSf5CcVNu%YJgjw z6?WGUracWzyMAW6WN4_dS(OK@>5XlGO&t+Zbqiipx}UPZDz9*rJ0_ShR%bO~A9#hr zzU3%WY^QMH@_-h3_=2)hvD5l*q zW--@al459QQcid2PTLeyU!zA+Owd_+jT$7c2behY2~(YeQ@t)2cUB8>)U~ zns~SK+R*Jhri!oieptGbsdqnTwWE7)rblb^HsCDt$m>kg?`KNCjcN20rt#TKBPT^} zyW--RW-McR=10997#Bv$d?0f1YwK3hxlGs3V=8<}=BE?Q@#n0JeEeEFw7g>{rX|}| zI~Hwm9)9CIyY~I?;m0`Cbn0t9{5qxoy?=y$zl#0k!~2zdUvX>Yu})}f_0%Q)>p|mZ z%!iI+TK^GKZiyOq*JLu?FrNwM!pA?=#~*ZOtmo_RIqMZK__z|f+T*3k#yP6^RUM;o zt~36I{`-xzC$pDJKeNr`XO&KQ*tkB7~p4`p09jR^AB`CxdkYr24s`lfsIc~$F=9p9_|!Ttl|aO-z^J5griCrm@ep4~=`Z>V#e z<8E21<_@h5-Z{n!e68>mM22tPTz@!6r%e!_{OxKjLOys5Q+yZm@}bssyS(;(Xt#lI z+JNqZc3wXK`^k{6)q&GfonU|7!T75Md$xn|BTfK!kl#A64aXa?OGe{`)ctkfY%`d1 z60o|3jA^z!{38@hxq;vf?72c_3H=bswgj7Tn*lex!+5}$#=Z7Qp>VDb+WZbIh!X&| zX6au%r4yY-o}_|pD2}KG&(TCh$fNWekL{^t4HV&%L0>g^7CqJ@7rknF*7S}zEtim6 zs3}fMV!2vLUFBN=^-ViYWe5JFbswsDp&otA&$+(O2WN!;L80YBi9*ISNFM4u@c~bt zRQ|Z&p4||iklF}9tW#vibYw!DMdd?A3*TF?)qQ9(HtB{EG68+u>oS zZpNLe4@ON6j}9>YH+{jht(K`zN_a3JCKGX`xHlMcYj}Kyh_ig+pz4c?Z=|n@Vn3I^V6D872ktS}eZaJI7ZdKqu)b<{ZLl+A+17p|J^_6&BExze@Poe? z_ldv&|2AYJZUc9$R`m})SR={~sIl2+fHe$=p+L;Cub5lX1Lh^n4QNkm^CbFfavoFF zDWHQw}8`_-?><8mC^-78D9Hji$h~+Q+T*(gBdX9d>n8Y5{+y9SsbYX?e z;THSIyM4Ys!;g>n=wahke5Efo<*Tgr@`1HwrBAj043BQH|2%AY4h%d-?7xe`D8E2t z`$(L?&dzPXV`tOQ^|DVgBD(2^8P8oEB7`k^di)d(uQRy?VcE5Voa4@j_)Z zvyiF(W!`11JcCCA6}@bwtXY``PpkmW*mi6TXEem1`pX0R$Q7?i47d1n{N;hThmyC{ zSrKcnzkINlnO|nDzF90PVnJ5F&4hSXGYp6qS@{OjWA8G}DmE`O)U9G{jQT)K2mZ$o z`zJHL-tQ0(1iL`oBjQ^SdoXUMwYo-L@cY>5TO%*?-xv$N<5G1{x6DTUO;R_Zk;f?? P_&~0wZjp_d33dMme?Bb{ diff --git a/apps/supernova/public/index.html b/apps/supernova/public/index.html deleted file mode 100644 index 13beb9f20..000000000 --- a/apps/supernova/public/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - Supernova Dev - - - - - - -
    - - diff --git a/apps/supernova/public/index_test.html b/apps/supernova/public/index_test.html deleted file mode 100644 index aa41d46a8..000000000 --- a/apps/supernova/public/index_test.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - Supernova Dev - - - - - - - -
    - - diff --git a/apps/supernova/setupTests.js b/apps/supernova/setupTests.js deleted file mode 100644 index db44c9038..000000000 --- a/apps/supernova/setupTests.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom" diff --git a/apps/supernova/src/App.jsx b/apps/supernova/src/App.jsx deleted file mode 100644 index 1663c5e2d..000000000 --- a/apps/supernova/src/App.jsx +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useLayoutEffect } from "react" - -import { AppShellProvider } from "juno-ui-components" -import AppContent from "./AppContent" -import styles from "./styles.scss" -import { - useGlobalsActions, - useFilterActions, - useSilencesActions, - useAlertsActions, - StoreProvider, -} from "./hooks/useAppStore" -import AsyncWorker from "./components/AsyncWorker" -import { MessagesProvider } from "messages-provider" -import CustomAppShell from "./components/CustomAppShell" - -function App(props = {}) { - const { setLabels, setPredefinedFilters, setActivePredefinedFilter } = - useFilterActions() - const { setEmbedded, setApiEndpoint } = useGlobalsActions() - const { setExcludedLabels } = useSilencesActions() - - useLayoutEffect(() => { - // filterLabels are the labels shown in the filter dropdown, enabling users to filter alerts based on specific criteria. Default is status. - if (props.filterLabels) setLabels(props.filterLabels) - - // silenceExcludedLabels are labels that are initially excluded by default when creating a silence. However, they can be added if necessary when utilizing the advanced options in the silence form. - if (props.silenceExcludedLabels) - setExcludedLabels(props.silenceExcludedLabels) - - // predefined filters config - const predefinedFilters = [ - { - name: "prod", - displayName: "Prod", - matchers: { - // regex that matches anything except regions that start with qa-de- - region: "^(?!qa-de-).*", - }, - }, - { - name: "prod-qa", - displayName: "Prod + QA", - matchers: { - // regex that matches anything except regions that start with qa-de- and end with a number that is not 1 - // regex is used in RegExp constructor, so we need to escape the backslashes for flags - region: "^(?!qa-de-(?!1$)\\d+).*", - }, - }, - { - name: "labs", - displayName: "Labs", - matchers: { - // regex that matches all regions that start with qa-de- and end with a number that is not 1 - // regex is used in RegExp constructor, so we need to escape the backslashes for flags - region: "^qa-de-(?!1$)\\d+", - }, - }, - { - name: "all", - displayName: "All", - matchers: { - region: ".*", - }, - }, - ] - setPredefinedFilters(predefinedFilters) - - // initially active predefined filter - const initialPredefinedFilter = "prod" - setActivePredefinedFilter(initialPredefinedFilter) - - // save the apiEndpoint. It is also used outside the alertManager hook - setApiEndpoint(props.endpoint) - }, []) - - useLayoutEffect(() => { - if (props.embedded === "true" || props.embedded === true) setEmbedded(true) - }, []) - - return ( - - - - - - - ) -} - -const StyledApp = (props) => { - return ( - - {/* load appstyles inside the shadow dom */} - - - - - - ) -} - -export default StyledApp diff --git a/apps/supernova/src/App.test.js b/apps/supernova/src/App.test.js deleted file mode 100644 index cb360db19..000000000 --- a/apps/supernova/src/App.test.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { render, act } from "@testing-library/react" - -// support shadow dom queries -// https://reactjsexample.com/an-extension-of-dom-testing-library-to-provide-hooks-into-the-shadow-dom/ -import { screen } from "shadow-dom-testing-library" - -jest.mock("./hooks/useCommunication", () => { - return jest.fn(() => ({})) -}) -jest.mock("./hooks/useAlertmanagerAPI", () => { - return jest.fn(() => ({})) -}) - -import App from "./App" - -test("renders app", async () => { - render() - - let loginTitle = await screen.queryAllByShadowText(/Supernova/i) - expect(loginTitle.length > 0).toBe(true) -}) diff --git a/apps/supernova/src/AppContent.jsx b/apps/supernova/src/AppContent.jsx deleted file mode 100644 index 0e365d145..000000000 --- a/apps/supernova/src/AppContent.jsx +++ /dev/null @@ -1,125 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect } from "react" -import { useActions, Messages } from "messages-provider" -import { Container, Spinner, Stack } from "juno-ui-components" -import { - useAlertsError, - useAlertsIsLoading, - useAlertsIsUpdating, - useAlertsUpdatedAt, - useAlertsTotalCounts, - useAuthLoggedIn, - useAuthError, - useSilencesError, -} from "./hooks/useAppStore" -import AlertsList from "./components/alerts/AlertsList" -import RegionsList from "./components/regions/RegionsList" -import StatusBar from "./components/status/StatusBar" -import Filters from "./components/filters/Filters" -import WelcomeView from "./components/WelcomeView" -import { parseError } from "./helpers" -import AlertDetail from "./components/alerts/AlertDetail" -import PredefinedFilters from "./components/filters/PredefinedFilters" - -const AppContent = () => { - const { addMessage } = useActions() - const loggedIn = useAuthLoggedIn() - const authError = useAuthError() - - // alerts - const alertsError = useAlertsError() - const isAlertsLoading = useAlertsIsLoading() - const totalCounts = useAlertsTotalCounts() - const isAlertsUpdating = useAlertsIsUpdating() - const updatedAt = useAlertsUpdatedAt() - - // silences - const silencesError = useSilencesError() - - useEffect(() => { - if (!authError) return - addMessage({ - variant: "error", - text: parseError(authError), - }) - }, [authError]) - - useEffect(() => { - // since the API call is done in a web worker and not logging aware, we need to show the error just in case the user is logged in - if (!alertsError || !loggedIn) return - - // if user uses firefox warn to activate `allow_client_cert`. Should be enough to do it just here since the API call is done in a web worker and nothing else will be loaded until the alerts are loaded - const isFirefox = navigator.userAgent.toLowerCase().includes("firefox") - if (isFirefox) { - addMessage({ - variant: "warning", - text: ( -

    - Firefox detected. Please ensure that you have activated{" "} - allow_client_cert to enable the retrieval of alerts and - silences from the API. -

      -
    • 1. Go to about:config (via address bar)
    • -
    • - 2. Change network.cors_preflight.allow_client_cert to{" "} - true -
    • -
    • 3. Reload Greenhouse
    • -
    -

    - ), - }) - } - - addMessage({ - variant: "error", - text: parseError(alertsError), - }) - }, [alertsError, loggedIn]) - - useEffect(() => { - // since the API call is done in a web worker and not logging aware, we need to show the error just in case the user is logged in - if (!silencesError || !loggedIn) return - addMessage({ - variant: "error", - text: parseError(silencesError), - }) - }, [silencesError, loggedIn]) - - return ( - - - {loggedIn && !authError ? ( - <> - - - {isAlertsLoading ? ( - - Loading - - - ) : ( - <> - - - - - - )} - - ) : ( - - )} - - ) -} - -export default AppContent diff --git a/apps/supernova/src/api/apiService.js b/apps/supernova/src/api/apiService.js deleted file mode 100644 index b81b93bc5..000000000 --- a/apps/supernova/src/api/apiService.js +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * This module implements a service to retrieve information from an API - * @module apiService - */ - -// default value for watch interval -const DEFAULT_INTERVAL = 300000 - -/** - * This function implements the actual service. - * @param {object} initialConfig - */ -function ApiService(initialConfig) { - // default config - let config = { - serviceName: null, - initialFetch: true, // Set this to false to disable this service from automatically running. - fetchFn: null, // The promise function that the service will use to request data - watch: true, // if true runs the fetchFn periodically with an interval defined in watchInterval - watchInterval: DEFAULT_INTERVAL, // 5 min - onFetchStart: null, - onFetchEnd: null, - onFetchError: null, - debug: false, - } - - let initialFetchPerformed = false - - // get the allowed config keys from default config - const allowedOptions = Object.keys(config) - // variable to hold the watch timer created by setInterval - let watchTimer - - // This function performs the request to get the target data - const update = () => { - if (config.fetchFn) { - // call onFetchStart if defined - // This is useful to inform the listener that a new fetch is starting - if (config.onFetchStart) config.onFetchStart() - if (config?.debug) - console.info(`ApiService::${config.serviceName || ""}: start fetch`) - initialFetchPerformed = true - return config - .fetchFn() - .then(() => { - if (config.onFetchEnd) config.onFetchEnd() - }) - .catch((error) => { - if (error?.httperror) { - error.message = "API: " + error.message - } - if (error.message == "Failed to fetch") { - error.message = - "Could not reach endpoint. Possible causes could include network issues, incorrect URL, or server outages." - } - - console.warn(`ApiService::${config.serviceName || ""}:`, error) - if (config.onFetchError) config.onFetchError(error) - }) - } else { - if (config?.debug) - console.warn( - `ApiService::${config.serviceName || ""}: missing fetch function` - ) - return - } - } - - // update watcher if config has changed - const updateWatcher = (oldConfig) => { - // do nothing if watch and watchInterval are the same - if ( - initialFetchPerformed && - oldConfig.watch === config.watch && - oldConfig.watchInterval === config.watchInterval - ) - return - - // delete last watcher - clearInterval(watchTimer) - - // create a new watcher which calls the update method - if (config.watch) { - watchTimer = setInterval(update, config.watchInterval || DEFAULT_INTERVAL) - } - } - - // this function is public and used to update the config - this.configure = (newOptions) => { - const oldConfig = { ...config } - // update apiService config - config = { ...config, ...newOptions } - - // check for allowed keys - Object.keys(config).forEach( - (key) => allowedOptions.indexOf(key) < 0 && delete config[key] - ) - - if (config?.debug) - console.log( - `ApiService::${config.serviceName || ""}: new config: `, - config - ) - - // update watcher will check the config relevant attribute changed to update the watcher - updateWatcher(oldConfig) - if (config.initialFetch && !initialFetchPerformed) update() - } - - // make it possible to update explicitly, not by a watcher! - this.fetch = update - - // set the config initially - this.configure(initialConfig) -} - -export default ApiService diff --git a/apps/supernova/src/api/client.js b/apps/supernova/src/api/client.js deleted file mode 100644 index bfbcc8f49..000000000 --- a/apps/supernova/src/api/client.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -class HTTPError extends Error { - constructor(code, message) { - super(message || code) - this.name = "HTTPError" - this.statusCode = code - } -} - -// Check response status -const checkStatus = (response) => { - if (response.status < 400) { - return response - } else { - return response.text().then((message) => { - var error = new HTTPError(response.status, message || response.statusText) - error.statusCode = response.status - error.httperror = true - return Promise.reject(error) - }) - } -} - -const DEFAULT_HEADERS = { - "Content-Type": "application/json", - Accept: "application/json", -} - -const request = (url, options = {}) => { - const requestOptions = { headers: DEFAULT_HEADERS, ...options } - - return fetch(url, requestOptions) - .then(checkStatus) - .then((response) => response.json()) -} - -export const head = (url, options = {}) => - request(url, { method: "HEAD", ...options }) -export const get = (url, options = {}) => - request(url, { method: "GET", ...options }) -export const post = (url, options = {}) => - request(url, { method: "POST", ...options }) -export const put = (url, options = {}) => - request(url, { method: "PUT", ...options }) -export const patch = (url, options = {}) => - request(url, { method: "PATCH", ...options }) -export const del = (url, options = {}) => - request(url, { method: "DELETE", ...options }) -export const copy = (url, options = {}) => - request(url, { method: "COPY", ...options }) diff --git a/apps/supernova/src/components/AsyncWorker.jsx b/apps/supernova/src/components/AsyncWorker.jsx deleted file mode 100644 index 98cc4cc8e..000000000 --- a/apps/supernova/src/components/AsyncWorker.jsx +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import useCommunication from "../hooks/useCommunication" -import useAlertmanagerAPI from "../hooks/useAlertmanagerAPI" -import useUrlState from "../hooks/useUrlState" - -const AsyncWorker = ({ endpoint }) => { - useCommunication() - useAlertmanagerAPI(endpoint) - useUrlState() - return null -} - -export default AsyncWorker diff --git a/apps/supernova/src/components/Avatar.jsx b/apps/supernova/src/components/Avatar.jsx deleted file mode 100644 index 6e41eb812..000000000 --- a/apps/supernova/src/components/Avatar.jsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack } from "juno-ui-components" - -const avatarCss = ` -h-8 -w-8 -bg-theme-background-lvl-2 -rounded-full -bg-cover -` - -const Avatar = ({ userName, url }) => { - return ( - - {url && ( -
    - )} - {userName && {userName}} - - ) -} - -export default Avatar diff --git a/apps/supernova/src/components/CustomAppShell.jsx b/apps/supernova/src/components/CustomAppShell.jsx deleted file mode 100644 index b35fceb8b..000000000 --- a/apps/supernova/src/components/CustomAppShell.jsx +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { AppShell, PageHeader } from "juno-ui-components" -import { - useAuthData, - useAuthLoggedIn, - useGlobalsEmbedded, - useAuthActions, -} from "../hooks/useAppStore" -import HeaderUser from "./HeaderUser" - -const CustomAppShell = ({ children }) => { - const embedded = useGlobalsEmbedded() - const authData = useAuthData() - const loggedIn = useAuthLoggedIn() - const { logout } = useAuthActions() - - const pageHeader = useMemo(() => { - return ( - - {loggedIn && } - - ) - }, [loggedIn, authData, logout]) - - return ( - - {children} - - ) -} - -export default CustomAppShell diff --git a/apps/supernova/src/components/HeaderUser.jsx b/apps/supernova/src/components/HeaderUser.jsx deleted file mode 100644 index 8cdff6776..000000000 --- a/apps/supernova/src/components/HeaderUser.jsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Stack, Button } from "juno-ui-components" -import Avatar from "./Avatar" - -const HeaderUser = ({ auth, logout }) => { - return ( - -
    - -
    - - - - - ))} - - - )} - - ) -} - -export default AlertSilences diff --git a/apps/supernova/src/components/alerts/AlertStatus.jsx b/apps/supernova/src/components/alerts/AlertStatus.jsx deleted file mode 100644 index dd7bb3d0e..000000000 --- a/apps/supernova/src/components/alerts/AlertStatus.jsx +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { Stack } from "juno-ui-components" -import { - useSilencesItemsHash, - useSilencesLocalItems, - useSilencesActions, -} from "../../hooks/useAppStore" - -const AlertStatus = ({ alert }) => { - const allSilences = useSilencesItemsHash() - const localSilences = useSilencesLocalItems() - const { getMappingSilences, getMappedState } = useSilencesActions() - - const silences = useMemo(() => { - if (!alert) return [] - return getMappingSilences(alert) - }, [alert, allSilences, localSilences]) - - const state = useMemo(() => { - if (!alert) return {} - return getMappedState(alert) - }, [alert, allSilences, localSilences]) - - return ( -
    - {state && ( - <> - {state?.isProcessing ? ( - - {state.type} - processing - - ) : ( - {state.type} - )} - - )} - {alert?.status?.inhibitedBy?.length > 0 && ( -
    - - Inhibited by: - {alert?.status?.inhibitedBy} - -
    - )} - {silences && silences.length > 0 && ( -
    - - Silenced by: - {silences.map((data) => ( - {data?.createdBy || data.id} - ))} - -
    - )} -
    - ) -} - -export default AlertStatus diff --git a/apps/supernova/src/components/alerts/AlertsList.jsx b/apps/supernova/src/components/alerts/AlertsList.jsx deleted file mode 100644 index 0fc750155..000000000 --- a/apps/supernova/src/components/alerts/AlertsList.jsx +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo, useState, useRef, useCallback } from "react" -import { - DataGrid, - DataGridHeadCell, - DataGridRow, - DataGridCell, - Icon, - Stack, -} from "juno-ui-components" -import Alert from "./Alert" -import { - useAlertsItemsFiltered, - useAlertsIsLoading, -} from "../../hooks/useAppStore" - -const AlertsList = () => { - const [visibleAmount, setVisibleAmount] = useState(20) - const [isAddingItems, setIsAddingItems] = useState(false) - const timeoutRef = React.useRef(null) - - const itemsFiltered = useAlertsItemsFiltered() - const alertsIsLoading = useAlertsIsLoading() - - const alertsSorted = useMemo(() => { - if (itemsFiltered) { - return itemsFiltered.slice(0, visibleAmount) - } - }, [itemsFiltered, visibleAmount]) - - React.useEffect(() => { - return () => clearTimeout(timeoutRef.current) // clear when component is unmounted - }, []) - - // endless scroll observer - const observer = useRef() - const lastListElementRef = useCallback( - (node) => { - // no fetch if loading original data - if (alertsIsLoading || isAddingItems) return - if (observer.current) observer.current.disconnect() - observer.current = new IntersectionObserver((entries) => { - console.log("IntersectionObserver: callback") - if (entries[0].isIntersecting && visibleAmount <= alertsSorted.length) { - // setVisibleAmount((prev) => prev + 10) - clearTimeout(timeoutRef.current) - setIsAddingItems(true) - timeoutRef.current = setTimeout(() => { - setIsAddingItems(false) - setVisibleAmount((prev) => prev + 10) - }, 500) - } - }) - if (node) observer.current.observe(node) - }, - [alertsIsLoading, isAddingItems] - ) - - return ( - - {!alertsIsLoading && ( - - - - - Region - Service - Description - Firing Since - Status - - - )} - {alertsSorted?.length > 0 ? ( - alertsSorted?.map((alert, index) => { - if (alertsSorted.length === index + 1) { - // DataRow in alerts muss implement forwardRef - return ( - - ) - } - return - }) - ) : ( - - - - -
    - We couldn't find anything. It's possible that the matching - alerts are not active at the moment, or the chosen filters could - be overly limiting. -
    -
    -
    -
    - )} - {isAddingItems && ( - - Loading ... - - )} -
    - ) -} - -export default AlertsList diff --git a/apps/supernova/src/components/alerts/shared/AlertDescription.jsx b/apps/supernova/src/components/alerts/shared/AlertDescription.jsx deleted file mode 100644 index e9ffbd49f..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertDescription.jsx +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { Markup } from "interweave" - -import { descriptionParsed } from "../../../lib/utils" - - -const AlertDescription = ({description, subdued}) => { - - return ( - $1" - ) - )} - tagName="div" - className={subdued ? "text-theme-light" : ""} - /> - ) -} - -export default AlertDescription \ No newline at end of file diff --git a/apps/supernova/src/components/alerts/shared/AlertIcon.jsx b/apps/supernova/src/components/alerts/shared/AlertIcon.jsx deleted file mode 100644 index e85826895..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertIcon.jsx +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { forwardRef } from "react" - -import { Icon } from "juno-ui-components" - - -const AlertIcon = ({severity}, ref) => { - - const iconColor = () => { - - switch (severity) { - case "critical": - return "text-theme-danger" - case "warning": - return "text-theme-warning" - case "info": - return "text-theme-info" - } - - } - - return ( - <> - {severity === "critical" ? ( - - ) : severity?.match(/^(warning|info)$/) ? ( - - ) : ( - - )} - - ) -} - -export default forwardRef(AlertIcon) \ No newline at end of file diff --git a/apps/supernova/src/components/alerts/shared/AlertLabels.jsx b/apps/supernova/src/components/alerts/shared/AlertLabels.jsx deleted file mode 100644 index cf172256d..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertLabels.jsx +++ /dev/null @@ -1,63 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -import { Pill, Stack } from "juno-ui-components" - -import { - useActiveFilters, - useFilterLabels, - useFilterActions, -} from "../../../hooks/useAppStore" - -/** - * For each of the given alert's labels which is included in the configured filterLabels render a Pill showing filterLabel and filterValue - */ -const AlertLabels = ({ alert, showAll}) => { - const filterLabels = showAll ? Object.keys(alert?.labels) : useFilterLabels() - const activeFilters = useActiveFilters() - const { addActiveFilter, removeActiveFilter } = useFilterActions() - - const handleLabelClick = (e, filterLabel, filterValue) => { - // if filter isn't already active, add it - if (!activeFilters?.[filterLabel]?.includes(filterValue)) { - e.stopPropagation() - addActiveFilter(filterLabel, filterValue) - } else { - // otherwise remove it - handleRemoveFilter(e, filterLabel, filterValue) - } - } - - const handleRemoveFilter = (e, filterLabel, filterValue) => { - e.stopPropagation() - removeActiveFilter(filterLabel, filterValue) - } - - return ( - - {filterLabels.map((filterLabel) => { - let value = alert?.labels?.[filterLabel] - let isActive = activeFilters?.[filterLabel]?.includes(value) - - return ( - value && ( - handleLabelClick(e, filterLabel, value)} - closeable={isActive} - onClose={(e, _) => handleRemoveFilter(e, filterLabel, value)} - /> - ) - ) - })} - - ) -} - -export default AlertLabels diff --git a/apps/supernova/src/components/alerts/shared/AlertLinks.jsx b/apps/supernova/src/components/alerts/shared/AlertLinks.jsx deleted file mode 100644 index 0ba9a37e7..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertLinks.jsx +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -import { Stack } from "juno-ui-components" - -const AlertLinks = ({ alert, className }) => { - - return ( - - {alert?.generatorURL && ( - e.stopPropagation()} - > - Prometheus - - )} - {alert?.labels?.playbook && ( - e.stopPropagation()} - > - Playbook - - )} - {alert?.labels?.kibana && ( - e.stopPropagation()} - > - Logs - - )} - {alert?.labels?.dashboard && ( - e.stopPropagation()} - > - Grafana - - )} - {alert?.labels?.spc && ( - e.stopPropagation()} - > - SPC Ticket - - )} - {alert?.labels?.sentry && ( - e.stopPropagation()} - > - Sentry - - )} - {alert?.labels?.cloudops && ( - e.stopPropagation()} - > - CloudOps - - )} - {alert?.labels?.report && ( - e.stopPropagation()} - > - Report - - )} - {alert?.annotations?.mail_subject && ( - e.stopPropagation()} - > - Email Owner - - )} - - ) -} - -export default AlertLinks diff --git a/apps/supernova/src/components/alerts/shared/AlertRegion.jsx b/apps/supernova/src/components/alerts/shared/AlertRegion.jsx deleted file mode 100644 index 04e4e2d14..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertRegion.jsx +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - - -const AlertRegion = ({ region, cluster }) => { - - return ( - <> - {region} - {region !== cluster && ( - <> -
    - {cluster} - - )} - - ) -} - -export default AlertRegion \ No newline at end of file diff --git a/apps/supernova/src/components/alerts/shared/AlertSilencesList.jsx b/apps/supernova/src/components/alerts/shared/AlertSilencesList.jsx deleted file mode 100644 index 1f3601cf8..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertSilencesList.jsx +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useMemo } from "react" -import { DateTime } from "luxon" - -import { - Badge, - DataGrid, - DataGridCell, - DataGridHeadCell, - DataGridRow, -} from "juno-ui-components" - -import { useSilencesActions } from "../../../hooks/useAppStore" - -const badgeVariant = (state) => { - switch (state) { - case "active": - return "info" - case "processing": - return "warning" - default: - return "default" - } -} - -const AlertSilencesList = ({ alert }) => { - const dateFormat = { ...DateTime.DATETIME_SHORT } - const timeFormat = { ...DateTime.TIME_24_WITH_SHORT_OFFSET } - - const formatDateTime = (timestamp) => { - const time = DateTime.fromISO(timestamp) - return time.toLocaleString(dateFormat) - } - - const { getMappingSilences, getExpiredSilences } = useSilencesActions() - - const activeSilences = getMappingSilences(alert) - const expiredSilences = getExpiredSilences(alert) - console.log("expiredSilences", expiredSilences) - const silenceList = activeSilences.concat(expiredSilences) - - return ( - <> - {silenceList.length > 0 && ( - <> -

    Silences

    - - - Status - Silence start - Silence end - Created by - Comment - - {silenceList.map((silence) => ( - - -
    - - {silence.status?.state} - -
    -
    - {formatDateTime(silence.startsAt)} - {formatDateTime(silence.endsAt)} - {silence.createdBy} - - {silence.comment} - -
    - ))} -
    - - )} - - ) -} - -export default AlertSilencesList diff --git a/apps/supernova/src/components/alerts/shared/AlertTimestamp.jsx b/apps/supernova/src/components/alerts/shared/AlertTimestamp.jsx deleted file mode 100644 index dbb80c4f4..000000000 --- a/apps/supernova/src/components/alerts/shared/AlertTimestamp.jsx +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { DateTime } from "luxon" - -import { Icon, Stack, Tooltip, TooltipContent, TooltipTrigger } from "juno-ui-components" - - -const AlertTimestamp = ({startTimestamp}) => { - const dateFormat = { ...DateTime.DATE_MED } - const timeFormat = { ...DateTime.TIME_24_WITH_SHORT_OFFSET } - const startTime = DateTime.fromISO(startTimestamp) - const daysFiring = DateTime.now().diff(startTime, "days") - - return ( - -
    {startTime.toLocaleString(dateFormat)}
    -
    {startTime.toLocaleString(timeFormat)}
    - {daysFiring.days > 7 && ( - - - - - - {`Alert has been firing for ${Math.round( - daysFiring.days - )} days`} - - - )} -
    - ) - -} -export default AlertTimestamp \ No newline at end of file diff --git a/apps/supernova/src/components/filters/FilterPills.jsx b/apps/supernova/src/components/filters/FilterPills.jsx deleted file mode 100644 index 160fdbdd2..000000000 --- a/apps/supernova/src/components/filters/FilterPills.jsx +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" - -import { Pill, Stack } from "juno-ui-components" -import { useActiveFilters, useFilterActions } from "../../hooks/useAppStore" - -const FilterPills = () => { - const activeFilters = useActiveFilters() - const { removeActiveFilter } = useFilterActions() - - return ( - - {Object.entries(activeFilters).map(([key, values]) => { - return values.map((value) => ( - removeActiveFilter(key, value)} - key={`${key}:${value}`} - /> - )) - })} - - ) -} - -export default FilterPills diff --git a/apps/supernova/src/components/filters/FilterSelect.jsx b/apps/supernova/src/components/filters/FilterSelect.jsx deleted file mode 100644 index 4feb52a90..000000000 --- a/apps/supernova/src/components/filters/FilterSelect.jsx +++ /dev/null @@ -1,144 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState } from "react" - -import { - Button, - InputGroup, - SelectOption, - Select, - Stack, - SearchInput, -} from "juno-ui-components" -import { - useFilterLabels, - useFilterLabelValues, - useFilterActions, - useActiveFilters, - useSearchTerm, -} from "../../hooks/useAppStore" -import { humanizeString } from "../../lib/utils" - -const FilterSelect = () => { - const [filterLabel, setFilterLabel] = useState("") - const [filterValue, setFilterValue] = useState("") - const [resetKey, setResetKey] = useState(Date.now()) - - const { - addActiveFilter, - loadFilterLabelValues, - clearActiveFilters, - setSearchTerm, - } = useFilterActions() - const filterLabels = useFilterLabels() - const filterLabelValues = useFilterLabelValues() - const activeFilters = useActiveFilters() - const searchTerm = useSearchTerm() - - const handleFilterAdd = (value) => { - if (filterLabel && (filterValue || value)) { - // add active filter to store - addActiveFilter(filterLabel, filterValue || value) - - // reset filterValue - setFilterValue("") - } else { - // TODO: show error -> please select filter/value - } - } - - const handleFilterLabelChange = (value) => { - setFilterLabel(value) - // lazy loading of all possible values for this label (only load them if we haven't already) - if (!filterLabelValues[value]?.values) { - loadFilterLabelValues(value) - } - } - - const handleFilterValueChange = (value) => { - setFilterValue(value) - handleFilterAdd(value) - } - - const handleSearchChange = (value) => { - // debounce setSearchTerm to avoid unnecessary re-renders - const debouncedSearchTerm = setTimeout(() => { - setSearchTerm(value.target.value) - }, 500) - - // clear timeout if we have a new value - return () => clearTimeout(debouncedSearchTerm) - } - - // const handleKeyDown = (event) => { - // if (event.key === "Enter") { - // handleFilterValueChange() - // } - // } - - return ( - - - - - - {displayNewSilence && ( - setDisplayNewSilence(false)} - onConfirm={success ? null : onSubmitForm} - > - {error && } - - {success && ( - - A silence object with id {success?.silenceID} was created - successfully. Please note that it may take up to 5 minutes for the - alert to show up as silenced. - - )} - - {expirationDate && !success && ( - - There is already a silence for this alert that expires at{" "} - - {DateTime.fromISO(expirationDate).toLocaleString( - DateTime.DATETIME_SHORT - )} - - - )} - - {alert?.labels?.alertname} - - - - - - {!success && ( - <> - - -
    - - - - - - - - - {formState?.editable_labels && - Object.keys(formState?.editable_labels).length > 0 && ( - - -

    - Editable Labels are labels that are editable. You can - use regular expressions. -

    -
    - - -
    - {Object.keys(formState.editable_labels).map( - (editable_label, index) => ( - - ) - )} -
    -
    -
    - )} - - {Object.keys(formState?.fixed_labels).length > 0 && ( - - -

    Fixed Labels are labels that are not editable.

    -
    - - - - {Object.keys(formState.fixed_labels).map( - (label, index) => ( - - ) - )} - - -
    - )} -
    - )} - - )} -
    - ) -} - -export default SilenceScheduled diff --git a/apps/supernova/src/components/silences/SilenceScheduledWrapper.jsx b/apps/supernova/src/components/silences/SilenceScheduledWrapper.jsx deleted file mode 100644 index eacd31880..000000000 --- a/apps/supernova/src/components/silences/SilenceScheduledWrapper.jsx +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState, useEffect } from "react" -import SilenceScheduled from "./SilenceScheduled" - -import { MessagesProvider } from "messages-provider" -import { Button, Icon } from "juno-ui-components" -import { useSilenceTemplates } from "../../hooks/useAppStore.js" - -const SilenceScheduledWrapper = () => { - const templates = useSilenceTemplates() - const [displayNewScheduledSilence, setDisplayNewScheduledSilence] = - useState(false) - - // function which sets displayNewScheduledSilence to false - const callbackOnClose = () => { - setDisplayNewScheduledSilence(false) - } - - return ( - <> - {templates && templates?.length > 0 && ( - - - {displayNewScheduledSilence && ( - - )} - - )} - - ) -} - -export default SilenceScheduledWrapper diff --git a/apps/supernova/src/components/silences/silenceHelpers.js b/apps/supernova/src/components/silences/silenceHelpers.js deleted file mode 100644 index 525ca9fe1..000000000 --- a/apps/supernova/src/components/silences/silenceHelpers.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const DEFAULT_DURATION_OPTIONS = [ - { label: "2 hours", value: "2" }, - { label: "12 hours", value: "12" }, - { label: "1 day", value: "24" }, - { label: "3 days", value: "72" }, - { label: "7 days", value: "168" }, -] - -// get the "latest" expiration date from the given silences -export const latestExpirationDate = (silences) => { - if (silences?.length > 0) { - const sortedSilences = silences.sort((a, b) => { - return new Date(b.endsAt) - new Date(a.endsAt) - }) - return sortedSilences[0].endsAt - } -} - -// returns options for duration select dropdown. Options with which exceeds the expiration date are marked as "covered" -// return also the first option which is not covered by the expiration date -export const getSelectOptions = (expirationDate) => { - if (!expirationDate) return { items: DEFAULT_DURATION_OPTIONS } - const now = new Date() - const expiration = new Date(expirationDate) - const diff = expiration - now - const diffInHours = diff / (1000 * 60 * 60) - const options = DEFAULT_DURATION_OPTIONS.map((o) => { - if (o.value <= diffInHours) { - return { - ...o, - label: o.label + " (covered with the existing silence)", - covered: true, - } - } - return o - }) - // find the first option which is not covered by the expiration date - const firstNotCovered = options.find((o) => !o?.covered) - - return { items: options, firstNotCovered } -} - -// Setup the matchers for the silence removing the excluded labels -// These excluded labels are those that not included by default when generating a silence configuration. -// The enrichedLabels are those that are added by the worker just for UI purposes when the alert is received. -export const setupMatchers = ( - alertLabels, - excludedLabels = [], - enrichedLabels = [] -) => { - if (!alertLabels || !excludedLabels) return - let items = [] - - Object.keys(alertLabels).forEach((label) => { - const value = alertLabels?.[label] - if (value) { - const matcher = { - name: label, - value: value, - isRegex: false, // for now hardcode isRegex to false since we take the exact value - excluded: false, - configurable: false, - } - if (enrichedLabels.includes(label)) { - // do not add enriched labels, skip - } else if (excludedLabels.includes(label)) { - // mark excluded label - items.push({ ...matcher, excluded: true, configurable: true }) - } else { - items.push(matcher) - } - } - }) - return items -} diff --git a/apps/supernova/src/components/silences/silenceHelpers.test.js b/apps/supernova/src/components/silences/silenceHelpers.test.js deleted file mode 100644 index 98ce288c7..000000000 --- a/apps/supernova/src/components/silences/silenceHelpers.test.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { setupMatchers } from "./silenceHelpers" - -describe("helpers", () => { - describe("setupMatchers", () => { - test("mark excluded labels and ignore enriched labels", () => { - const alertLables = { - region: "na-us-1", - service: "compute", - severity: "critical", - pod: "node014-bb164.cc.na-us-1.cloud.sap", - status: "active", - } - const matchers = setupMatchers(alertLables, ["pod"], ["status"]) - expect(matchers).toEqual([ - { - name: "region", - value: "na-us-1", - isRegex: false, - excluded: false, - configurable: false, - }, - { - name: "service", - value: "compute", - isRegex: false, - excluded: false, - configurable: false, - }, - { - name: "severity", - value: "critical", - isRegex: false, - excluded: false, - configurable: false, - }, - { - name: "pod", - value: "node014-bb164.cc.na-us-1.cloud.sap", - isRegex: false, - excluded: true, - configurable: true, - }, - ]) - }) - }) -}) diff --git a/apps/supernova/src/components/silences/silenceScheduledHelpers.js b/apps/supernova/src/components/silences/silenceScheduledHelpers.js deleted file mode 100644 index a8cd12a63..000000000 --- a/apps/supernova/src/components/silences/silenceScheduledHelpers.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const DEFAULT_FORM_VALUES = { - fixed_labels: {}, - editable_labels: {}, - comment: { - value: "", - error: null, - }, - createdBy: "", - date: { - start: null, - end: null, - error: null, - }, -} - -////// Form Validation - -export const validateForm = (state) => { - let formState = state - let errorexist = false - - // validate if comment is at least 3 characters long - if (formState.comment.value.length < 3) { - errorexist = true - formState = { - ...formState, - comment: { - ...formState.comment, // Only create the comment object if it exists - error: "Please enter at least 3 characters", - }, - } - } - - // checks if start date is before end date - if (new Date(formState.date.start) >= new Date(formState.date.end)) { - errorexist = true - formState = { - ...formState, - date: { - ...formState.date, // Only create the comment object if it exists - error: "The start date need to be before the end date", - }, - } - } - - // All editable labels are valid regular expressions - Object.keys(formState.editable_labels).map((editable_label) => { - if (!validateLabelValue(formState.editable_labels[editable_label].value)) { - errorexist = true - formState = { - ...formState, - editable_labels: { - ...formState.editable_labels, - [editable_label]: { - ...formState.editable_labels[editable_label], - error: `Value for ${editable_label} is not a valid regular expression`, - }, - }, - } - } - - if (!formState.editable_labels[editable_label]?.value) { - errorexist = true - formState = { - ...formState, - editable_labels: { - ...formState.editable_labels, - [editable_label]: { - ...formState.editable_labels[editable_label], - error: `Value for ${editable_label} is empty`, - }, - }, - } - } - }) - - if (!errorexist) { - return null - } - - return formState -} - -const validateLabelValue = (value) => { - try { - return !!new RegExp(value) - } catch (e) { - return false - } -} diff --git a/apps/supernova/src/components/status/StatusBar.jsx b/apps/supernova/src/components/status/StatusBar.jsx deleted file mode 100644 index 425273aa5..000000000 --- a/apps/supernova/src/components/status/StatusBar.jsx +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react" -import { DateTime } from "luxon" - -import { Spinner, Stack } from "juno-ui-components" - -const statusBarStyles = ` - bg-theme-background-lvl-1 - py-1.5 - px-4 - my-px - text-theme-light -` - -const StatusBar = ({totalCounts, isUpdating, updatedAt}) => { - - return ( - -
    - {`${totalCounts.total} alerts`} - {`(${totalCounts.critical || 0} critical, ${totalCounts.warning || 0} warning, ${totalCounts.info || 0} info)`} -
    - - {isUpdating && - - } - {updatedAt && - `updated ${DateTime.fromMillis(updatedAt).toLocaleString({...DateTime.TIME_24_WITH_SHORT_OFFSET})}` - } - -
    - ) -} - -export default StatusBar \ No newline at end of file diff --git a/apps/supernova/src/helpers.js b/apps/supernova/src/helpers.js deleted file mode 100644 index 9d8953d9b..000000000 --- a/apps/supernova/src/helpers.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const parseError = (error) => { - let errMsg = error - - // check if error is JSON containing message or just string - if (typeof error === "string") { - errMsg = parseMessage(error) - } - - // check if the error is a object containing message - if (typeof error === "object") { - console.log("Error parsing error message::object") - if (error?.message) { - errMsg = parseMessage(error?.message) - } - } - return errMsg -} - -const parseMessage = (message) => { - let newMsg = message - try { - newMsg = JSON.parse(message) - if (newMsg?.message) { - newMsg = (newMsg?.code ? `${newMsg.code}, ` : "") + newMsg?.message - } - } catch (error) {} - - if (newMsg === "Failed to fetch") { - newMsg = - "Sorry, there was an issue fetching the data. Possible causes could include network issues, incorrect URL, or server outages. " - } - - return newMsg -} diff --git a/apps/supernova/src/hooks/useAlertmanagerAPI.js b/apps/supernova/src/hooks/useAlertmanagerAPI.js deleted file mode 100644 index e4b478cc6..000000000 --- a/apps/supernova/src/hooks/useAlertmanagerAPI.js +++ /dev/null @@ -1,201 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect } from "react" -import { - useAlertsActions, - useUserIsActive, - useSilencesActions, - useSilencesLocalItems, -} from "./useAppStore" - -const createWorker = (path) => { - return fetch(new URL(path, import.meta.url)) - .then((r) => r.blob()) - .then((blob) => { - var blobUrl = window.URL.createObjectURL(blob) - let worker - - const createWorker = () => { - if (!worker) worker = new Worker(blobUrl, { type: "module" }) - return worker - } - - const stopWorker = () => { - if (!worker) return - worker.terminate() - worker = null - } - - return { createWorker, stopWorker } - }) -} - -// create workers -const alertsWorker = createWorker("workers/alerts.js") -const silencesWorker = createWorker("workers/silences.js") - -const useAlertmanagerAPI = (apiEndpoint) => { - const { - setAlertsData, - setIsLoading: setAlertsIsLoading, - setIsUpdating: setAlertsIsUpdating, - setError: setAlertsError, - } = useAlertsActions() - const isUserActive = useUserIsActive() - const { - setSilences, - setIsUpdating: setSilencesIsUpdating, - setIsLoading: setSilencesIsLoading, - setError: setSilencesError, - } = useSilencesActions() - - //Setup web workers - useEffect(() => { - let cleanupAlertsWorker - let cleanupSilencesWorker - - alertsWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - console.log("Worker::Setting up ALERTS worker", worker) - - // receive messages from worker - worker.onmessage = (e) => { - const action = e.data.action - switch (action) { - case "ALERTS_UPDATE": - console.log("Worker::ALERT_UPDATE::", e.data) - setAlertsData({ items: e.data.alerts, counts: e.data.counts }) - break - case "ALERTS_FETCH_START": - console.log("Worker::ALERTS_FETCH_START::") - setAlertsIsUpdating(true) - break - case "ALERTS_FETCH_END": - console.log("Worker::ALERTS_FETCH_END::") - setAlertsIsUpdating(false) - break - case "ALERTS_FETCH_ERROR": - console.log("Worker::ALERTS_FETCH_ERROR::", e.data.error) - setAlertsIsUpdating(false) - // error comes as object string and have to be parsed - setAlertsError(e.data.error) - break - } - } - - cleanupAlertsWorker = () => { - console.log("Worker::Terminating Alerts Worker") - return stopWorker() - } - }) - - silencesWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - console.log("Worker::Setting up SILENCES worker") - - // receive messages from worker - worker.onmessage = (e) => { - const action = e.data.action - switch (action) { - case "SILENCES_UPDATE": - console.log("Worker::SILENCES_UPDATE::", e.data) - setSilences({ - items: e.data?.silences, - itemsHash: e.data?.silencesHash, - itemsByState: e.data?.silencesBySate, - }) - break - case "SILENCES_FETCH_START": - console.log("Worker::SILENCES_FETCH_START::") - setSilencesIsUpdating(true) - break - case "SILENCES_FETCH_END": - console.log("Worker::SILENCES_FETCH_END::") - setSilencesIsUpdating(false) - break - case "SILENCES_FETCH_ERROR": - console.log("Worker::SILENCES_FETCH_ERROR::", e.data.error) - setSilencesIsUpdating(false) - // error comes as object string and have to be parsed - setSilencesError(e.data.error) - break - } - } - - cleanupSilencesWorker = () => { - console.log("Worker::Terminating Silences Worker") - return stopWorker() - } - }) - - return () => { - cleanupAlertsWorker && cleanupAlertsWorker() - cleanupSilencesWorker && cleanupSilencesWorker() - } - }, []) - - // Reconfigure the workers each time we get a new endpoint - useEffect(() => { - if (!apiEndpoint) return - - // set alerts state to loading - setAlertsIsLoading(true) - alertsWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - // initial config - worker.postMessage({ - action: "ALERTS_CONFIGURE", - fetchVars: { - apiEndpoint, - options: {}, - }, - debug: true, - }) - }) - - setSilencesIsLoading(true) - silencesWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - // initial config - worker.postMessage({ - action: "SILENCES_CONFIGURE", - apiEndpoint: apiEndpoint, - }) - }) - }, [apiEndpoint]) - - // enable/disable watching in the workers - useEffect(() => { - if (isUserActive === undefined) return - alertsWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - worker.postMessage({ - action: "ALERTS_CONFIGURE", - watch: isUserActive, - }) - }) - silencesWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - worker.postMessage({ - action: "SILENCES_CONFIGURE", - watch: isUserActive, - }) - }) - }, [isUserActive]) - - // as soon as we have locally some silences we refetch the them - useEffect(() => { - if (!useSilencesLocalItems || useSilencesLocalItems?.length <= 0) return - silencesWorker.then(({ createWorker, stopWorker }) => { - const worker = createWorker() - worker.postMessage({ - action: "SILENCES_FETCH", - }) - }) - }, [useSilencesLocalItems]) -} - -export default useAlertmanagerAPI diff --git a/apps/supernova/src/hooks/useAppStore.js b/apps/supernova/src/hooks/useAppStore.js deleted file mode 100644 index a84448c9e..000000000 --- a/apps/supernova/src/hooks/useAppStore.js +++ /dev/null @@ -1,147 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { createContext, useContext } from "react" -import { createStore, useStore } from "zustand" -import { devtools } from "zustand/middleware" - -import createSilencesSlice from "../lib/createSilencesSlice" -import createAlertsSlice from "../lib/createAlertsSlice" -import createFiltersSlice from "../lib/createFiltersSlice" -import createAuthDataSlice from "../lib/createAuthDataSlice" -import createGlobalsSlice from "../lib/createGlobalsSlice" -import createUserActivitySlice from "../lib/createUserActivitySlice" - -const createAppStore = devtools((set, get) => ({ - ...createGlobalsSlice(set, get), - ...createAuthDataSlice(set, get), - ...createUserActivitySlice(set, get), - ...createAlertsSlice(set, get), - ...createFiltersSlice(set, get), - ...createSilencesSlice(set, get), -})) - -const StoreContext = createContext() - -export const StoreProvider = ({ options, children }) => { - return ( - ({ - ...createGlobalsSlice(set, get), - ...createAuthDataSlice(set, get), - ...createUserActivitySlice(set, get), - ...createAlertsSlice(set, get), - ...createFiltersSlice(set, get), - ...createSilencesSlice(set, get, options), - })) - )} - > - {children} - - ) -} - -const useAppStore = (selector) => useStore(useContext(StoreContext), selector) - -// atomic exports only instead of exporting whole store -// See reasoning here: https://tkdodo.eu/blog/working-with-zustand - -// Globals exports -export const useGlobalsEmbedded = () => - useAppStore((state) => state.globals.embedded) -export const useShowDetailsFor = () => - useAppStore((state) => state.globals.showDetailsFor) -export const useGlobalsApiEndpoint = () => - useAppStore((state) => state.globals.apiEndpoint) -export const useGlobalsActions = () => - useAppStore((state) => state.globals.actions) - -// AUTH -export const useAuthData = () => useAppStore((state) => state.auth.data) -export const useAuthIsProcessing = () => - useAppStore((state) => state.auth.isProcessing) -export const useAuthLoggedIn = () => useAppStore((state) => state.auth.loggedIn) -export const useAuthError = () => useAppStore((state) => state.auth.error) -export const useAuthLastAction = () => - useAppStore((state) => state.auth.lastAction) -export const useAuthAppLoaded = () => - useAppStore((state) => state.auth.appLoaded) -export const useAuthAppIsLoading = () => - useAppStore((state) => state.auth.appIsLoading) -export const useAuthActions = () => useAppStore((state) => state.auth.actions) - -// UserActivity exports -export const useUserIsActive = () => - useAppStore((state) => state.userActivity.isActive) - -export const useUserActivityActions = () => - useAppStore((state) => state.userActivity.actions) - -// Alert exports -export const useAlertsItems = () => useAppStore((state) => state.alerts.items) -export const useAlertsItemsFiltered = () => - useAppStore((state) => state.alerts.itemsFiltered) -export const useAlertsTotalCounts = () => - useAppStore((state) => state.alerts.totalCounts) -export const useAlertsSeverityCountsPerRegion = () => - useAppStore((state) => state.alerts.severityCountsPerRegion) -export const useAlertsRegions = () => - useAppStore((state) => state.alerts.regions) -export const useAlertsRegionsFiltered = () => - useAppStore((state) => state.alerts.regionsFiltered) -export const useAlertsIsLoading = () => - useAppStore((state) => state.alerts.isLoading) -export const useAlertsIsUpdating = () => - useAppStore((state) => state.alerts.isUpdating) -export const useAlertsUpdatedAt = () => - useAppStore((state) => state.alerts.updatedAt) -export const useAlertsError = () => useAppStore((state) => state.alerts.error) -export const useAlertEnrichedLabels = () => - useAppStore((state) => state.alerts.enrichedLabels) - -export const useAlertsActions = () => - useAppStore((state) => state.alerts.actions) - -// Filter exports -export const useFilterLabels = () => - useAppStore((state) => state.filters.labels) -export const useActiveFilters = () => - useAppStore((state) => state.filters.activeFilters) -export const useSearchTerm = () => - useAppStore((state) => state.filters.searchTerm) -export const useFilterLabelValues = () => - useAppStore((state) => state.filters.filterLabelValues) -export const usePredefinedFilters = () => - useAppStore((state) => state.filters.predefinedFilters) -export const useActivePredefinedFilter = () => - useAppStore((state) => state.filters.activePredefinedFilter) - -export const useFilterActions = () => - useAppStore((state) => state.filters.actions) - -// Silences exports -export const useSilencesItems = () => - useAppStore((state) => state.silences.items) -export const useSilencesItemsHash = () => - useAppStore((state) => state.silences.itemsHash) -export const useSilencesExcludedLabels = () => - useAppStore((state) => state.silences.excludedLabels) -export const useSilencesIsLoading = () => - useAppStore((state) => state.silences.isLoading) -export const useSilencesIsUpdating = () => - useAppStore((state) => state.silences.isUpdating) -export const useSilencesUpdatedAt = () => - useAppStore((state) => state.silences.updatedAt) -export const useSilencesError = () => - useAppStore((state) => state.silences.error) -export const useSilencesLocalItems = () => - useAppStore((state) => state.silences.localItems) - -export const useSilenceTemplates = () => - useAppStore((state) => state.silences.templates) - -export const useSilencesActions = () => - useAppStore((state) => state.silences.actions) diff --git a/apps/supernova/src/hooks/useCommunication.js b/apps/supernova/src/hooks/useCommunication.js deleted file mode 100644 index be3964e20..000000000 --- a/apps/supernova/src/hooks/useCommunication.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useEffect } from "react" -import { broadcast, get, watch } from "communicator" -import { - useUserActivityActions, - useAuthAppLoaded, - useAuthIsProcessing, - useAuthError, - useAuthLoggedIn, - useAuthLastAction, - useAuthActions, -} from "./useAppStore" -import { AUTH_ACTIONS } from "../lib/createAuthDataSlice" - -const useCommunication = () => { - console.log("[supernova] useCommunication setup") - const { setIsActive } = useUserActivityActions() - const authAppLoaded = useAuthAppLoaded() - const authIsProcessing = useAuthIsProcessing() - const authError = useAuthError() - const authLoggedIn = useAuthLoggedIn() - const authLastAction = useAuthLastAction() - const { setData: authSetData, setAppLoaded: authSetAppLoaded } = - useAuthActions() - - useEffect(() => { - // watch for user activity updates messages - // with the watcher we get the user activity object when this app is loaded before the Auth app - const unwatch = watch( - "USER_ACTIVITY_UPDATE_DATA", - (data) => { - console.log("got message USER_ACTIVITY_UPDATE_DATA: ", data) - setIsActive(data?.isActive) - }, - { debug: true } - ) - return unwatch - }, [setIsActive]) - - // allow supernova to login/logout the user. Visible when app is not in embedded mode - useEffect(() => { - if (!authAppLoaded || authIsProcessing || authError) return - if (authLastAction?.name === AUTH_ACTIONS.SIGN_ON && !authLoggedIn) { - broadcast("AUTH_LOGIN", "supernova", { debug: false }) - } else if (authLastAction?.name === AUTH_ACTIONS.SIGN_OUT && authLoggedIn) { - broadcast("AUTH_LOGOUT", "supernova") - } - }, [authAppLoaded, authIsProcessing, authError, authLoggedIn, authLastAction]) - - useEffect(() => { - if (!authSetData || !authSetAppLoaded) return - - get("AUTH_APP_LOADED", authSetAppLoaded) - const unwatchLoaded = watch("AUTH_APP_LOADED", authSetAppLoaded) - - get("AUTH_GET_DATA", authSetData) - const unwatchUpdate = watch("AUTH_UPDATE_DATA", authSetData) - - return () => { - if (unwatchLoaded) unwatchLoaded() - if (unwatchUpdate) unwatchUpdate() - } - }, [authSetData, authSetAppLoaded]) -} - -export default useCommunication diff --git a/apps/supernova/src/hooks/useUrlState.js b/apps/supernova/src/hooks/useUrlState.js deleted file mode 100644 index 7e20b6d1d..000000000 --- a/apps/supernova/src/hooks/useUrlState.js +++ /dev/null @@ -1,134 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { useLayoutEffect, useEffect, useState } from "react" -import { registerConsumer } from "url-state-provider" -import { - useAuthLoggedIn, - useAuthData, - useFilterLabels, - useFilterActions, - useActiveFilters, - useActivePredefinedFilter, - useSearchTerm, - useShowDetailsFor, - useGlobalsActions, -} from "./useAppStore" - -const urlStateManager = registerConsumer("supernova") -const ACTIVE_FILTERS = "f" -const ACTIVE_PREDEFINED_FILTER = "p" -const DETAILS_FOR = "d" -const SEARCH_TERM = "s" - -const useUrlState = () => { - const [isURLRead, setIsURLRead] = useState(false) - const loggedIn = useAuthLoggedIn() - const authData = useAuthData() - const { setActiveFilters, setActivePredefinedFilter, setSearchTerm } = - useFilterActions() - const filterLabels = useFilterLabels() - const activeFilters = useActiveFilters() - const searchTerm = useSearchTerm() - const activePredefinedFilter = useActivePredefinedFilter() - const { setShowDetailsFor } = useGlobalsActions() - const detailsFor = useShowDetailsFor() - - // Set initial state from URL (on login) - // useLayoutEffect so this is done before rendering anything - useLayoutEffect(() => { - // do not read the url state until the user is logged in and do it just once - if (!loggedIn || isURLRead) return - - console.log( - "SUPERNOVA:: setting up state from url with state::", - urlStateManager.currentState() - ) - - // get active filters from url state - const activeFiltersFromURL = - urlStateManager.currentState()?.[ACTIVE_FILTERS] - - // check if there are active filters in the url state - if (activeFiltersFromURL && Object.keys(activeFiltersFromURL).length > 0) { - setActiveFilters(activeFiltersFromURL) - } else { - // otherwise set the support group filter - // we just add this default filter when no other filters are set via URL - const label = "support_group" - if ( - authData?.parsed?.supportGroups?.length > 0 && - filterLabels?.length > 0 && - filterLabels.includes(label) - ) { - // this will also trigger a filterItems() call from the store self - setActiveFilters({ [label]: authData.parsed.supportGroups }) - } - } - - const searchTermFromURL = urlStateManager.currentState()?.[SEARCH_TERM] - if (searchTermFromURL) { - // decode the search term from the url. It is base64 encoded to avoid issues with special characters - setSearchTerm(atob(searchTermFromURL)) - } - - // get active predefined filters from url state - const activePredefinedFilterFromURL = - urlStateManager.currentState()?.[ACTIVE_PREDEFINED_FILTER] - if (activePredefinedFilterFromURL) { - setActivePredefinedFilter(activePredefinedFilterFromURL) - } - - // get detail view target from url state - const detailsForFromURL = urlStateManager.currentState()?.[DETAILS_FOR] - if (detailsForFromURL) { - setShowDetailsFor(detailsForFromURL) - } - setIsURLRead(true) - }, [loggedIn, isURLRead, authData, filterLabels]) - - // sync URL with the desired states - useEffect(() => { - // do not synchronize the states until the url state is read and user logged in - if (!loggedIn || !isURLRead) return - - // encode searchTerm before pushing it to the URL to avoid missinterpretation of special characters - const encodedSearchTerm = btoa(searchTerm) - - const newState = { - ...urlStateManager.currentState(), - [ACTIVE_FILTERS]: activeFilters, - [SEARCH_TERM]: encodedSearchTerm, - [ACTIVE_PREDEFINED_FILTER]: activePredefinedFilter, - [DETAILS_FOR]: detailsFor, - } - - // do not push the state if it is the same as the current one - // otherwise it will reset the browser history and the forward button will not work - if ( - JSON.stringify(newState) === - JSON.stringify(urlStateManager.currentState()) - ) - return - - urlStateManager.push(newState) - }, [loggedIn, activeFilters, searchTerm, activePredefinedFilter, detailsFor]) - - // Support for back button - useEffect(() => { - const unregisterStateListener = urlStateManager.onChange((state) => { - setActiveFilters(state?.[ACTIVE_FILTERS]) - setSearchTerm(state?.[SEARCH_TERM]) - setActivePredefinedFilter(state?.[ACTIVE_PREDEFINED_FILTER]) - setShowDetailsFor(state?.[DETAILS_FOR]) - }) - - return () => { - unregisterStateListener() - } - }, []) -} - -export default useUrlState diff --git a/apps/supernova/src/index.js b/apps/supernova/src/index.js deleted file mode 100644 index f6f988315..000000000 --- a/apps/supernova/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { createRoot } from "react-dom/client" -import React from "react" - -// export mount and unmount functions -export const mount = (container, options = {}) => { - import("./App").then((App) => { - mount.root = createRoot(container) - mount.root.render(React.createElement(App.default, options?.props)) - }) -} - -export const unmount = () => mount.root && mount.root.unmount() diff --git a/apps/supernova/src/lib/createAlertsSlice.js b/apps/supernova/src/lib/createAlertsSlice.js deleted file mode 100644 index ae3add14b..000000000 --- a/apps/supernova/src/lib/createAlertsSlice.js +++ /dev/null @@ -1,218 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import produce from "immer" -import { countAlerts } from "./utils" - -const initialAlertsState = { - items: [], - itemsFiltered: [], - totalCounts: {}, // { total: number, critical: number, ...}, - severityCountsPerRegion: {}, // {"eu-de-1": { total: number, critical: {total: number, suppressed: number}, warning: {...}, ...} - regions: [], // save all available regions from initial list here - regionsFiltered: [], // regions list filtered by active predefined filters - enrichedLabels: ["status"], // labels that are enriched by the alert worker - isLoading: false, - isUpdating: false, - updatedAt: null, - error: null, -} - -const createAlertsSlice = (set, get) => ({ - alerts: { - ...initialAlertsState, - actions: { - setAlertsData: ({ items, counts }) => { - set( - produce((state) => { - state.alerts.items = items - state.alerts.totalCounts = counts?.global - state.alerts.severityCountsPerRegion = counts?.regions - state.alerts.regions = Object.keys(counts?.regions).sort() - state.alerts.isLoading = false - state.alerts.isUpdating = false - state.alerts.updatedAt = Date.now() - state.alerts.error = null - - // on the initial fetch copy all items to the filtered items list once since - // most views operate on the filtered items list - if (state.alerts.itemsFiltered.length === 0) { - state.alerts.itemsFiltered = items - } - - // same with the filtered regions list - if (state.alerts.regionsFiltered.length === 0) { - state.alerts.regionsFiltered = state.alerts.regions - } - - // TODO: - // reload previously loaded filter label values (they might have changed since last load) - // state.filters.filterLabelValues = {} // -> do NOT just reset them, reload instead - }), - false, - "alerts.setAlertsData" - ) - // if there are already active filters or active predefined filters, filter the new list - if ( - Object.keys(get().filters.activeFilters)?.length > 0 || - get().filters.activePredefinedFilter - ) { - get().alerts.actions.filterItems() - } - }, - - filterItems: () => { - const activePredefinedFilter = get().filters.predefinedFilters.find( - (filter) => filter.name === get().filters.activePredefinedFilter - ) - - const filteredRegions = new Set() - - set( - produce((state) => { - state.alerts.itemsFiltered = state.alerts.items.filter((item) => { - let visible = true - - // test if the item has a label "visibility" with value "hidden" - // if it does, immediately return false, no further processing needed, these items are always filtered out - if (item.labels.visibility === "hidden") { - return false - } - - // if the item is still visible test if item labels match the regex matchers of the active predefined filter - // for each key and value pair in the filter matchers check if the key's value regex matches the item's label value for this key - // if it doesn't match, set visible to false and break out of the loop - activePredefinedFilter && - Object.entries(activePredefinedFilter.matchers).forEach( - ([key, value]) => { - if (!new RegExp(value, "i").test(item.labels[key])) { - visible = false - return - } else { - // if the item is visible, add the item's region to the filtered regions set - // this way the filtered Regions set will contain all regions that have at least one visible item - filteredRegions.add(item.labels.region) - } - } - ) - - // if the item is still visible after the predefined filters, check if it gets filtered out by the active filters - // active filters is an object where the keys correspond to labels and the value is an array of all selected values to be filtered by - // iterate over all active filter keys and then check if one of the selected values matches the item's value for this key - if (visible) { - Object.keys(state.filters.activeFilters).forEach((key) => { - // if the item's label value for the current label isn't included in the selected filters set visible to false, i.e. filter out item - // this automatically leads to different values for the same label to be OR concatenated, while different labels are AND concatenated - // so an item must have at least one of the selected values for each filtered label - if ( - state.filters.activeFilters[key].indexOf(item.labels[key]) < - 0 - ) { - // we can break out of the loop here since we already know the item is not visible - visible = false - return - } - }) - } - - // if the item is still visible check if it gets filtered out by a search term - // the search term is matched against the stringified item object via regex - // if the item object does not contain the search term, it is not visible - if ( - visible && - state.filters.searchTerm && - state.filters.searchTerm.length > 0 - ) { - const itemString = JSON.stringify(item) - const re = new RegExp(state.filters.searchTerm, "i") - if (!itemString.match(re)) { - visible = false - } - } - - return visible - }) - }), - false, - "alerts.filterItems" - ) - get().alerts.actions.updateFilteredCounts() - if (filteredRegions.size > 0) { - get().alerts.actions.setRegionsFiltered( - Array.from(filteredRegions).sort() - ) - } else { - // if nothing was filtered out, set the filtered regions to all available regions - get().alerts.actions.setRegionsFiltered(get().alerts.regions) - } - }, - - setFilteredItems: (items) => { - set( - produce((state) => { - state.alerts.itemsFiltered = items - }), - false, - "alerts.setFilteredItems" - ) - get().alerts.actions.updateFilteredCounts() - }, - - setRegionsFiltered: (regions) => { - set( - produce((state) => { - state.alerts.regionsFiltered = regions - }), - false, - "alerts.setRegionsFiltered" - ) - }, - - updateFilteredCounts: () => { - const counts = countAlerts(get().alerts.itemsFiltered) - set( - produce((state) => { - state.alerts.totalCounts = counts.global - state.alerts.severityCountsPerRegion = counts.regions - }), - false, - "alerts.updateFilteredCounts" - ) - }, - - setIsLoading: (value) => { - set( - (state) => ({ alerts: { ...state.alerts, isLoading: value } }), - false, - "alerts.setIsLoading" - ) - }, - - setIsUpdating: (value) => { - set( - (state) => ({ alerts: { ...state.alerts, isUpdating: value } }), - false, - "alerts.setIsUpdating" - ) - }, - - setError: (error) => { - set( - (state) => ({ alerts: { ...state.alerts, error, isLoading: false } }), - false, - "alerts.setError" - ) - }, - - getAlertByFingerprint: (fingerprint) => { - return get().alerts.items.find( - (alert) => alert.fingerprint === fingerprint - ) - }, - }, - }, -}) - -export default createAlertsSlice diff --git a/apps/supernova/src/lib/createAlertsSlice.test.js b/apps/supernova/src/lib/createAlertsSlice.test.js deleted file mode 100644 index a3197bb99..000000000 --- a/apps/supernova/src/lib/createAlertsSlice.test.js +++ /dev/null @@ -1,440 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { renderHook, act } from "@testing-library/react" -import { - useAlertsActions, - useAlertEnrichedLabels, - StoreProvider, - useAlertsItemsFiltered, -} from "../hooks/useAppStore" - -describe("createAlertsSlice", () => { - describe("setEnrichedLabels", () => { - it("return status as default", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useAlertsActions(), - enrichedLabels: useAlertEnrichedLabels(), - }), - { wrapper } - ) - expect(store.result.current.enrichedLabels).toEqual(["status"]) - }) - }) - - describe("setFilteredItems", () => { - it("return empty array as default", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useAlertsActions(), - itemsFiltered: useAlertsItemsFiltered(), - }), - { wrapper } - ) - expect(store.result.current.itemsFiltered).toEqual([]) - }) - - it("accepts and transforms to array of strings coma separated strings containing the labels to use", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useAlertsActions(), - itemsFiltered: useAlertsItemsFiltered(), - }), - { wrapper } - ) - - let mock - - act(() => { - store.result.current.actions.setFilteredItems(mock) - }) - - expect(store.result.current.enrichedLabels).toEqual(mock) - }) - }) -}) - -/** - * { - "action": "ALERTS_UPDATE", - "alerts": [ - { - "annotations": { - "description": "storage paths for `node003-bb322.cc.eu-de-1.cloud.sap` is less than other hosts in the `productionbb322`. (vc-d-4.cc.eu-de-1.cloud.sap)", - "summary": "storage paths for `node003-bb322.cc.eu-de-1.cloud.sap` is less than other hosts in the `productionbb322`. (vc-d-4.cc.eu-de-1.cloud.sap)" - }, - "endsAt": "2023-11-01T08:29:10.787Z", - "fingerprint": "662491f9dd5bc5eb", - "receivers": [ - { - "name": "elastic" - }, - { - "name": "awx" - }, - { - "name": "octobus" - }, - { - "name": "slack_vmware_info" - } - ], - "startsAt": "2023-10-23T09:29:40.787Z", - "status": { - "inhibitedBy": [], - "silencedBy": [ - "ed08c9ff-898a-49c9-9621-35f38191462e" - ], - "state": "suppressed" - }, - "updatedAt": "2023-11-01T08:25:11.606Z", - "generatorURL": "https://prometheus-vmware-vc-d-4.eu-de-1.cloud.sap/graph?g0.expr=vrops_hostsystem_storage_number_of_path+%3C+on+%28vccluster%29+group_left+%28%29+%28max+by+%28vccluster%29+%28vrops_hostsystem_storage_number_of_path%29%29&g0.tab=1", - "labels": { - "alertname": "HostStoragePathCheck", - "cluster": "s-eu-de-1", - "cluster_type": "scaleout", - "collector": "vrops-vc-d-4-host", - "context": "node003-bb322.cc.eu-de-1.cloud.sap storage paths", - "datacenter": "eu-de-1d", - "hostsystem": "node003-bb322.cc.eu-de-1.cloud.sap", - "internal_name": "host-120240", - "job": "vrops-exporter", - "meta": "storage paths for `node003-bb322.cc.eu-de-1.cloud.sap` is less than other hosts in the `productionbb322`. (vc-d-4.cc.eu-de-1.cloud.sap)", - "no_alert_on_absence": "true", - "prometheus": "vmware-monitoring/vmware-vc-d-4", - "region": "eu-de-1", - "service": "compute", - "severity": "info", - "support_group": "compute", - "tier": "vmware", - "vccluster": "productionbb322", - "vcenter": "vc-d-4.cc.eu-de-1.cloud.sap", - "status": "suppressed" - } - }, - { - "annotations": { - "description": "The certificate for kubevirt-operator-webhook,kubevirt-operator-webhook.kubevirt,kubevirt-operator-webhook.kubevirt.svc,kubevirt-operator-webhook.kubevirt.svc.cluster.local expires in 417ms. See secret kubevirt/kubevirt-operator-certs, key tls.crt.", - "summary": "Certificate expires" - }, - "endsAt": "2023-11-01T08:29:52.979Z", - "fingerprint": "dcff442a4c5301b6", - "receivers": [ - { - "name": "elastic" - } - ], - "startsAt": "2023-10-04T09:49:52.979Z", - "status": { - "inhibitedBy": [ - "82b6187e7c363b9a" - ], - "silencedBy": [], - "state": "suppressed" - }, - "updatedAt": "2023-11-01T08:25:52.998Z", - "generatorURL": "https://prometheus-kubernetes.qa-de-6.cloud.sap/graph?g0.expr=%28secrets_exporter_certificate_not_after+-+time%28%29%29+%2F+60+%2F+60+%2F+24+%3C%3D+30&g0.tab=1", - "labels": { - "alertname": "CertificateExpiresIn30Days", - "app": "k8s-secrets-certificate-exporter", - "ccloud_support_group": "observability", - "cluster": "qa-de-6", - "cluster_type": "metal", - "context": "availability", - "host": "kubevirt-operator-webhook,kubevirt-operator-webhook.kubevirt,kubevirt-operator-webhook.kubevirt.svc,kubevirt-operator-webhook.kubevirt.svc.cluster.local", - "instance": "100.90.11.32:9091", - "job": "pods", - "key": "tls.crt", - "kubernetes_namespace": "kube-monitoring", - "kubernetes_pod_name": "k8s-secrets-certificate-exporter-664b7d4d68-p28hp", - "metrics_path": "/metrics", - "pod_template_hash": "664b7d4d68", - "prometheus": "kube-monitoring/collector-kubernetes", - "region": "qa-de-6", - "secret": "kubevirt/kubevirt-operator-certs", - "service": "certificates", - "severity": "info", - "support_group": "containers", - "tier": "k8s", - "status": "suppressed" - } - } - ], - "counts": { - "global": { - "total": 3469, - "critical": 84, - "warning": 281, - "info": 3088, - "none": 16 - }, - "regions": { - "eu-de-2": { - "total": 640, - "critical": { - "total": 7, - "suppressed": 3 - }, - "warning": { - "total": 51, - "suppressed": 6 - }, - "info": { - "total": 578, - "suppressed": 5 - }, - "none": { - "total": 4 - } - }, - "qa-de-1": { - "total": 393, - "critical": { - "total": 46 - }, - "warning": { - "total": 28, - "suppressed": 12 - }, - "info": { - "total": 319, - "suppressed": 38 - } - }, - "ap-au-1": { - "total": 169, - "critical": { - "total": 11, - "suppressed": 2 - }, - "warning": { - "total": 34, - "suppressed": 8 - }, - "info": { - "total": 124, - "suppressed": 3 - } - }, - "qa-de-3": { - "total": 65, - "critical": { - "total": 1 - }, - "warning": { - "total": 6 - }, - "info": { - "total": 58 - } - }, - "ap-cn-1": { - "total": 173, - "critical": { - "total": 9, - "suppressed": 9 - }, - "warning": { - "total": 35, - "suppressed": 6 - }, - "info": { - "total": 126, - "suppressed": 1 - }, - "none": { - "total": 3 - } - }, - "eu-de-1": { - "total": 415, - "critical": { - "total": 3, - "suppressed": 3 - }, - "warning": { - "total": 29, - "suppressed": 1 - }, - "info": { - "total": 383, - "suppressed": 45 - } - }, - "na-us-1": { - "total": 273, - "critical": { - "total": 3, - "suppressed": 3 - }, - "warning": { - "total": 18 - }, - "info": { - "total": 252, - "suppressed": 16 - } - }, - "eu-nl-1": { - "total": 185, - "critical": { - "total": 1, - "suppressed": 1 - }, - "warning": { - "total": 6 - }, - "info": { - "total": 178, - "suppressed": 2 - } - }, - "na-us-2": { - "total": 148, - "critical": { - "total": 1, - "suppressed": 1 - }, - "warning": { - "total": 4 - }, - "info": { - "total": 143, - "suppressed": 1 - } - }, - "ap-sa-1": { - "total": 114, - "critical": { - "total": 2, - "suppressed": 2 - }, - "warning": { - "total": 2, - "suppressed": 2 - }, - "info": { - "total": 110, - "suppressed": 1 - } - }, - "qa-de-2": { - "total": 48, - "warning": { - "total": 4 - }, - "info": { - "total": 44 - } - }, - "qa-de-6": { - "total": 58, - "warning": { - "total": 12 - }, - "info": { - "total": 46, - "suppressed": 10 - } - }, - "ap-sa-2": { - "total": 115, - "warning": { - "total": 22 - }, - "info": { - "total": 93, - "suppressed": 1 - } - }, - "ap-ae-1": { - "total": 124, - "warning": { - "total": 10, - "suppressed": 6 - }, - "info": { - "total": 111, - "suppressed": 1 - }, - "none": { - "total": 3 - } - }, - "na-us-3": { - "total": 144, - "warning": { - "total": 1 - }, - "info": { - "total": 143, - "suppressed": 1 - } - }, - "ap-jp-1": { - "total": 133, - "warning": { - "total": 11, - "suppressed": 6 - }, - "info": { - "total": 119, - "suppressed": 1 - }, - "none": { - "total": 3 - } - }, - "la-br-1": { - "total": 85, - "warning": { - "total": 1 - }, - "info": { - "total": 84, - "suppressed": 1 - } - }, - "na-ca-1": { - "total": 94, - "warning": { - "total": 1, - "suppressed": 1 - }, - "info": { - "total": 93, - "suppressed": 1 - } - }, - "ap-jp-2": { - "total": 93, - "warning": { - "total": 6, - "suppressed": 6 - }, - "info": { - "total": 84, - "suppressed": 1 - }, - "none": { - "total": 3 - } - } - } - } -} - * - */ diff --git a/apps/supernova/src/lib/createAuthDataSlice.js b/apps/supernova/src/lib/createAuthDataSlice.js deleted file mode 100644 index e4b347e38..000000000 --- a/apps/supernova/src/lib/createAuthDataSlice.js +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const AUTH_ACTIONS = { - SIGN_ON: "signOn", - SIGN_OUT: "signOut", -} - -const createAuthDataSlice = (set, get) => ({ - auth: { - data: null, - isProcessing: false, - loggedIn: false, - error: null, - lastAction: {}, - appLoaded: false, - appIsLoading: false, - - actions: { - setAppLoaded: (appLoaded) => { - set( - (state) => ({ auth: { ...state.auth, appLoaded } }), - false, - "auth/setAppLoaded" - ) - }, - setData: (data) => { - if (!data) return - // check if data has changed before updating the state - if ( - data?.isProcessing === get().auth.isProcessing && - data?.loggedIn === get().auth.loggedIn && - data?.error === get().auth.error && - data?.auth === get().auth.data - ) - return - - set( - (state) => ({ - auth: { - ...state.auth, - isProcessing: data?.isProcessing, - loggedIn: data?.loggedIn, - error: data?.error, - data: data?.auth, - }, - }), - false, - "auth/setData" - ) - }, - setAction: (name) => - set( - (state) => ({ - auth: { - ...state.auth, - lastAction: { name: name, updatedAt: Date.now() }, - }, - }), - false, - "auth/setAction" - ), - login: () => get().auth.actions.setAction(AUTH_ACTIONS.SIGN_ON), - logout: () => get().auth.actions.setAction(AUTH_ACTIONS.SIGN_OUT), - }, - }, -}) - -export default createAuthDataSlice diff --git a/apps/supernova/src/lib/createFiltersSlice.js b/apps/supernova/src/lib/createFiltersSlice.js deleted file mode 100644 index 1b4822fab..000000000 --- a/apps/supernova/src/lib/createFiltersSlice.js +++ /dev/null @@ -1,255 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import produce from "immer" - -const initialFiltersState = { - labels: ["status"], // labels to be used for filtering: [ "label1", "label2", "label3"]. Default is status which is enriched by the worker - activeFilters: {}, // for each active filter key list the selected values: {key1: [value1], key2: [value2_1, value2_2], ...} - filterLabelValues: {}, // contains all possible values for filter labels: {label1: ["val1", "val2", "val3", ...], label2: [...]}, lazy loaded when a label is selected for filtering - predefinedFilters: [], // predefined complex filters that filter using regex: [{name: "filter1", displayName: "Filter 1", matchers: {"label1": "regex1", "label2": "regex2", ...}}, ...] - activePredefinedFilter: null, // the currently active predefined filter - searchTerm: "", // the search term used for full-text filtering -} - -const createFiltersSlice = (set, get) => ({ - filters: { - ...initialFiltersState, - actions: { - setLabels: (labels) => - set( - (state) => { - if (!labels) return state - - // check if labels is an array - if (!Array.isArray(labels)) { - console.warn( - "[supernova]::setLabels: labels object is not an array" - ) - return state - } - - // check if all elements in the array are strings delete the ones that are not - if (!labels.every((element) => typeof element === "string")) { - console.warn( - "[supernova]::setLabels: Some elements of the array are not strings." - ) - labels = labels.filter((element) => typeof element === "string") - } - - // merge given labels with the initial, make it unique and sort it alphabetically - const uniqueLabels = Array.from( - new Set(initialFiltersState.labels.concat(labels)) - ).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) - - return { - filters: { - ...state.filters, - labels: uniqueLabels, - }, - } - }, - false, - "filters.setLabels" - ), - - setActiveFilters: (activeFilters) => { - set( - (state) => { - return { - filters: { - ...state.filters, - activeFilters, - }, - } - }, - false, - "filters.setActiveFilters" - ) - get().alerts.actions.filterItems() - }, - - clearActiveFilters: () => { - set( - produce((state) => { - state.filters.activeFilters = {} - }), - false, - "filters.clearActiveFilters" - ) - get().alerts.actions.filterItems() - }, - - addActiveFilter: (filterLabel, filterValue) => { - set( - produce((state) => { - // use Set to prevent duplicate values - state.filters.activeFilters[filterLabel] = [ - ...new Set([ - ...(state.filters.activeFilters[filterLabel] || []), - filterValue, - ]), - ] - }), - false, - "filters.addActiveFilter" - ) - // after adding a new filter key and value: filter items - get().alerts.actions.filterItems() - }, - - // add multiple values for a filter label - addActiveFilters: (filterLabel, filterValues) => { - set( - produce((state) => { - // use Set to prevent duplicate values - state.filters.activeFilters[filterLabel] = [ - ...new Set([ - ...(state.filters.activeFilters[filterLabel] || []), - ...filterValues, - ]), - ] - }), - false, - "filters.addActiveFilters" - ) - // after adding a new filter key and value: filter items - get().alerts.actions.filterItems() - }, - - removeActiveFilter: (filterLabel, filterValue) => { - set( - produce((state) => { - state.filters.activeFilters[filterLabel] = - state.filters.activeFilters[filterLabel].filter( - (value) => value !== filterValue - ) - // if this was the last selected value delete the whole label key - if (state.filters.activeFilters[filterLabel].length === 0) { - delete state.filters.activeFilters[filterLabel] - } - }), - false, - "filters.removeActiveFilter" - ) - // after removing a filter: filter items - get().alerts.actions.filterItems() - }, - - setPredefinedFilters: (predefinedFilters) => { - set( - produce((state) => { - state.filters.predefinedFilters = predefinedFilters - }), - false, - "filters.setPredefinedFilters" - ) - }, - - setActivePredefinedFilter: (filterName) => { - set( - produce((state) => { - state.filters.activePredefinedFilter = filterName - }), - false, - "filters.setActivePredefinedFilter" - ) - // after activating predefined filter: filter items - get().alerts.actions.filterItems() - }, - - clearActivePredefinedFilter: () => { - set( - produce((state) => { - state.filters.activePredefinedFilter = null - }), - false, - "filters.clearActivePredefinedFilter" - ) - // after clearing predefined filter: filter items - get().alerts.actions.filterItems() - }, - - togglePredefinedFilter: (filterName) => { - set( - produce((state) => { - // if active predefined filter is already set and equal to the one that was clicked, clear it - if (state.filters.activePredefinedFilter === filterName) { - state.filters.activePredefinedFilter = null - } else { - state.filters.activePredefinedFilter = filterName - } // otherwise set the clicked filter as active - }), - false, - "filters.togglePredefinedFilter" - ) - // after activating predefined filter: filter items - get().alerts.actions.filterItems() - }, - - // retieve all possible values for the given filter label from the list of items and add them to the list - loadFilterLabelValues: (filterLabel) => { - set( - produce((state) => { - state.filters.filterLabelValues[filterLabel] = { isLoading: true } - }), - false, - "filters.loadFilterLabelValues.isLoading" - ) - set( - produce((state) => { - // use Set to ensure unique values - const values = [ - ...new Set( - state.alerts.items.map((item) => item.labels[filterLabel]) - ), - ] - // remove any "blank" values from the list, then sort - state.filters.filterLabelValues[filterLabel].values = values - .filter((value) => (value ? true : false)) - .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) - - state.filters.filterLabelValues[filterLabel].isLoading = false - }), - false, - "filters.loadFilterLabelValues" - ) - }, - - // for each filter label where we already loaded the values, reload them - reloadFilterLabelValues: () => { - Object.keys(get().filters.filterLabelValues).map((label) => { - get().filters.actions.loadFilterLabelValues(label) - }) - }, - - setSearchTerm: (searchTerm) => { - set( - produce((state) => { - state.filters.searchTerm = searchTerm - }), - false, - "filters.setSearchTerm" - ) - // after setting the search term: filter items - get().alerts.actions.filterItems() - }, - - // TODO: - // update previously loaded filter label values (e.g. after new items were fetched, the possible values might have changed) - // updateFilterLabelValues: () => { - // set( - // produce((state) => { - // Object.keys(state.filters.filterLabelValues).map((label) => - - // ) - // }) - // ) - // } - }, - }, -}) - -export default createFiltersSlice diff --git a/apps/supernova/src/lib/createFiltersSlice.test.js b/apps/supernova/src/lib/createFiltersSlice.test.js deleted file mode 100644 index dede36679..000000000 --- a/apps/supernova/src/lib/createFiltersSlice.test.js +++ /dev/null @@ -1,192 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { renderHook, act } from "@testing-library/react" -import { - useFilterLabels, - useFilterActions, - useSearchTerm, - StoreProvider, -} from "../hooks/useAppStore" - -const originalConsoleError = global.console.warn - -describe("createFiltersSlice", () => { - describe("setLabels", () => { - it("return default status label", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - filterLabels: useFilterLabels(), - }), - { wrapper } - ) - expect(store.result.current.filterLabels).toEqual(["status"]) - }) - - it("Adds array with strings to select", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - filterLabels: useFilterLabels(), - }), - { wrapper } - ) - - act(() => { - store.result.current.actions.setLabels([ - "app", - "cluster", - "cluster_type", - "context", - "job", - "region", - "service", - "severity", - "support_group", - "tier", - "type", - ]) - }) - - expect(store.result.current.filterLabels).toEqual( - expect.arrayContaining([ - "app", - "status", - "cluster", - "cluster_type", - "context", - "job", - "region", - "service", - "severity", - "support_group", - "tier", - "type", - ]) - ) - }) - - it("Adds empty array to select", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - filterLabels: useFilterLabels(), - }), - { wrapper } - ) - - act(() => { - store.result.current.actions.setLabels([]) - }) - - expect(store.result.current.filterLabels).toEqual( - expect.arrayContaining(["status"]) - ) - }) - - it("warns the user if labels are not an array", () => { - const spy = jest.spyOn(console, "warn").mockImplementation(() => {}) - - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - filterLabels: useFilterLabels(), - }), - { wrapper } - ) - - act(() => - store.result.current.actions.setLabels( - "app,cluster,cluster_type,context,job,region,service,severity,status,support_group,tier,type" - ) - ) - - expect(spy).toHaveBeenCalledTimes(1) - expect(spy).toHaveBeenCalledWith( - "[supernova]::setLabels: labels object is not an array" - ) - spy.mockRestore() - }) - - it("warns the user if labels array also includes non-strings and adds the valid labels", () => { - const spy = jest.spyOn(console, "warn").mockImplementation(() => {}) - - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - filterLabels: useFilterLabels(), - }), - { wrapper } - ) - - act(() => store.result.current.actions.setLabels(["app", 1, 9])) - - // Is the warning called? - expect(spy).toHaveBeenCalledTimes(1) - expect(spy).toHaveBeenCalledWith( - "[supernova]::setLabels: Some elements of the array are not strings." - ) - spy.mockRestore() - - // Are valid labels still set? - expect(store.result.current.filterLabels).toEqual( - expect.arrayContaining(["app", "status"]) - ) - }) - }) - - describe("setSearchTerm", () => { - it("empty search term", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - searchTerm: useSearchTerm(), - }), - { wrapper } - ) - - expect(store.result.current.searchTerm).toEqual("") - }) - - it("Set a search term", () => { - const wrapper = ({ children }) => ( - {children} - ) - const store = renderHook( - () => ({ - actions: useFilterActions(), - searchTerm: useSearchTerm(), - }), - { wrapper } - ) - - act(() => { - store.result.current.actions.setSearchTerm("k8s") - }) - - expect(store.result.current.searchTerm).toEqual("k8s") - }) - }) -}) diff --git a/apps/supernova/src/lib/createGlobalsSlice.js b/apps/supernova/src/lib/createGlobalsSlice.js deleted file mode 100644 index f6a5cf667..000000000 --- a/apps/supernova/src/lib/createGlobalsSlice.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import produce from "immer" - -const createGlobalsSlice = (set, get) => ({ - globals: { - embedded: false, - showDetailsFor: null, - apiEndpoint: null, - - actions: { - setEmbedded: (embedded) => - set( - (state) => ({ globals: { ...state.globals, embedded: embedded } }), - false, - "globals/setEmbedded" - ), - setShowDetailsFor: (alertID) => - set( - (state) => ({ - // if the alertID is the same as the current one, we want to close the details panel again, - // otherwise set the new alertID to replace the details in the panel - globals: { - ...state.globals, - showDetailsFor: - get().globals.showDetailsFor === alertID ? null : alertID, - }, - }), - false, - "globals/setShowDetailsFor" - ), - setApiEndpoint: (endpoint) => - set( - (state) => ({ - globals: { ...state.globals, apiEndpoint: endpoint }, - }), - false, - "globals/setShowDetailsFor" - ), - }, - }, -}) - -export default createGlobalsSlice diff --git a/apps/supernova/src/lib/createSilencesSlice.js b/apps/supernova/src/lib/createSilencesSlice.js deleted file mode 100644 index e4ebe603f..000000000 --- a/apps/supernova/src/lib/createSilencesSlice.js +++ /dev/null @@ -1,334 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import produce from "immer" - -const initialSilencesState = { - items: [], - itemsHash: {}, - itemsByState: {}, - excludedLabels: [], - isLoading: false, - isUpdating: false, - updatedAt: null, - error: null, - localItems: {}, - - // silence templates for maintanance - templates: [], -} - -const validateTemplates = (templates) => { - // check if the templates are an array - if (!Array.isArray(templates)) { - console.warn( - "[supernova]::validateTemplates: templates object is not an array" - ) - return [ - { - id: "1", - title: "Invalid template object", - invalid: "Templates object is not an array", - }, - ] - } - - // check if every element in the array is an object - if (!templates.every((element) => typeof element === "object")) { - console.warn( - "[supernova]::validateTemplates: templates object is not an array of objects" - ) - return [ - { - id: "1", - title: "Invalid template object", - invalid: "Templates object is not an array of objects", - }, - ] - } - - // check if every object - return templates - ?.map((template, index) => { - // check if status is active - if (template?.status === "active") { - // check if title and discription is a string, fixed_labels is an object and editable_labels is an array of strings - if ( - typeof template?.title !== "string" || - typeof template?.description !== "string" || - typeof template?.fixed_labels !== "object" || - !Array.isArray(template?.editable_labels) || - !template?.editable_labels.every( - (element) => typeof element === "string" - ) - ) { - let brokenElement = "Following elements are not well formed: " - - ;(brokenElement += - typeof template?.title !== "string" ? "title " : ""), - (brokenElement += - typeof template?.description !== "string" ? "description " : ""), - (brokenElement += - typeof template?.fixed_labels !== "object" - ? "fixed_labels " - : ""), - (brokenElement += !Array.isArray(template?.editable_labels) - ? "editable_labels " - : "") - return { - id: "elem" + index, - title: - typeof template?.title === "string" - ? template?.title - : "Invalid template", - invalid: brokenElement, - } - } - // if all ok, return the template - return { - id: "elem" + index, - title: template?.title, - description: template?.description, - fixed_labels: template?.fixed_labels || {}, - editable_labels: template?.editable_labels || [], - invalid: false, - } - } - // if status is not active, return null to filter it out - return null - }) - .filter((template) => template !== null) -} - -const createSilencesSlice = (set, get, options) => ({ - silences: { - ...initialSilencesState, - - // silence templates for maintanance - templates: options?.silenceTemplates - ? validateTemplates(options?.silenceTemplates) - : [], - actions: { - setSilences: ({ items, itemsHash, itemsByState }) => { - if (!items) return - - set( - produce((state) => { - state.silences.items = items - state.silences.itemsHash = itemsHash - state.silences.itemsByState = itemsByState - state.silences.isLoading = false - state.silences.isUpdating = false - state.silences.updatedAt = Date.now() - state.silences.error = null - }), - false, - "silences.setSilencesData" - ) - - // check if any local item can be removed - get().silences.actions.updateLocalItems() - }, - /* - Save temporary created silences to be able to display which alert is silenced - and who silenced it until the next alert fetch contains the silencedBy reference - */ - addLocalItem: ({ silence, id, alertFingerprint }) => { - // enforce silences with id and alertFingerprint - if (!silence || !id || !alertFingerprint) return - return set( - produce((state) => { - state.silences.localItems = { - ...get().silences.localItems, - [id]: { - ...silence, - id, - alertFingerprint, - type: "local", - }, - } - }), - false, - "silences.addLocalItem" - ) - }, - /* - Remove local silences which are already referenced by an alert - */ - updateLocalItems: () => { - const allSilences = get().silences.itemsHash - let newLocalSilences = { ...get().silences.localItems } - Object.keys(newLocalSilences).forEach((key) => { - const alert = get().alerts.actions.getAlertByFingerprint( - newLocalSilences[key]?.alertFingerprint - ) - - // check if the alert has already the silence reference and if the extern silence already exists - const silencedBy = alert?.status?.silencedBy - if ( - silencedBy?.length > 0 && - silencedBy?.includes(newLocalSilences[key]?.id) && - allSilences[key] - ) { - // mark to remove silence - newLocalSilences[key] = { ...newLocalSilences[key], remove: true } - } - }) - - // remove silences marked to remove - const reducedLocalSilences = Object.keys(newLocalSilences) - .filter((key) => !newLocalSilences[key]?.remove) - .reduce((obj, key) => { - obj[key] = newLocalSilences[key] - return obj - }, {}) - - return set( - produce((state) => { - state.silences.localItems = reducedLocalSilences - }), - false, - "silences.updateLocalItems" - ) - }, - /* - Given an alert fingerprint, this function returns all silences referenced by silencingBy. It also - check if there are local silences with the same alert fingerprint and return them as well. - */ - getMappingSilences: (alert) => { - if (!alert) return - const externalSilences = get().silences.itemsHash - let silencedBy = alert?.status?.silencedBy || [] - - // ensure silencedBy is an array - if (!Array.isArray(silencedBy)) silencedBy = [silencedBy] - let mappingSilences = [] - silencedBy.forEach((id) => { - if (externalSilences[id]) { - mappingSilences.push(externalSilences[id]) - } - }) - - // add local silences - let localSilences = get().silences.localItems - Object.keys(localSilences).forEach((silenceID) => { - // if there is already a silence with the same id, skip it and exists as external silence - if (silencedBy.includes(silenceID) && externalSilences[silenceID]) - return - // if the local silence has the same alert fingerprint, add it to the mapping silences - if ( - localSilences[silenceID]?.alertFingerprint === alert?.fingerprint - ) { - mappingSilences.push(localSilences[silenceID]) - } - }) - return mappingSilences - }, - /* - Return the state of an alert. If the alert is silenced by a local silence, the state is suppressed (processing) - */ - getMappedState: (alert) => { - if (!alert) return - // get all silences (local and external) - const silences = get().silences.actions.getMappingSilences(alert) - // if there is a silence with type local, return suppressed (processing) - if (silences?.find((silence) => silence?.type === "local")) { - return { type: "suppressed", isProcessing: true } - } - return { type: alert?.status?.state, isProcessing: false } - }, - setExcludedLabels: (labels) => { - return set( - (state) => { - // check if labels is an array and if every element in the array is a string - if ( - !Array.isArray(labels) || - !labels.some((element) => typeof element === "string") - ) { - console.warn( - "[supernova]::setExcludedLabels: labels object is not an array of strings" - ) - return state - } - - return { - silences: { - ...state.silences, - excludedLabels: labels, - }, - } - }, - false, - "silences.setExcludedLabels" - ) - }, - /* - Find all silences in itemsByState with key expired that matches all labels (key&value) from the alert but omit the labels that are excluded (excludedLabels) - */ - getExpiredSilences: (alert) => { - if (!alert) return - const alertLabels = alert?.labels || {} - const silences = get().silences.itemsByState?.expired || [] - const excludedLabels = get().silences.excludedLabels || [] - const enrichedLabels = get().alerts.enrichedLabels || [] - // combine the arrays containing the labels that shouldn't be used for matching into one for easier checking - const labelsExcludedForMatching = [...excludedLabels, ...enrichedLabels] - - // find all expired silences that matches all labels from the alert excluding the excluded excludedLabels - return silences.filter((silence) => { - const silenceMatchers = silence?.matchers || [] - // check if all labels from the alert are included in the silence - return Object.keys(alertLabels).every((label) => { - // check if the label is excluded - if (labelsExcludedForMatching.includes(label)) return true - // check if the label is included in the silence - return silenceMatchers.some( - (silenceLabel) => - silenceLabel?.name === label && - silenceLabel?.value === alertLabels?.[label] - ) - }) - }) - }, - /* - Returns the silence (including the local ones) with the latest expiration time for an alert. Useful to display when the alert will be active again. - */ - getLatestMappingSilence: (alert) => { - if (!alert) return - const silences = get().silences.actions.getMappingSilences(alert) - if (!silences?.length) return - // return the latest expired silence - return silences.reduce((prev, current) => - prev.endsAt > current.endsAt ? prev : current - ) - }, - setIsLoading: (value) => - set( - (state) => ({ silences: { ...state.silences, isLoading: value } }), - false, - "silences.setIsLoading" - ), - setIsUpdating: (value) => - set( - (state) => ({ - silences: { ...state.silences, isUpdating: value }, - }), - false, - "silences.setIsUpdating" - ), - setError: (error) => { - set( - (state) => ({ - silences: { ...state.silences, error, isLoading: false }, - }), - false, - "silences.setError" - ) - }, - }, - }, -}) - -export default createSilencesSlice diff --git a/apps/supernova/src/lib/createSilencesSlice.test.js b/apps/supernova/src/lib/createSilencesSlice.test.js deleted file mode 100644 index cea24fca9..000000000 --- a/apps/supernova/src/lib/createSilencesSlice.test.js +++ /dev/null @@ -1,778 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from "react" -import { renderHook, act } from "@testing-library/react" -import { - useSilencesActions, - useSilencesLocalItems, - useAlertsActions, - useAlertsItems, - useSilencesExcludedLabels, - StoreProvider, -} from "../hooks/useAppStore" -import { - createFakeAlertStatustWith, - createFakeAlertWith, - createFakeSilenceWith, -} from "./fakeObjects" -import { countAlerts } from "../lib/utils" - -describe("addLocalItem", () => { - it("should append the object with key silence id and value the silence itself", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - actions: useSilencesActions(), - localSilences: useSilencesLocalItems(), - }), - { wrapper } - ) - - const silence = createFakeSilenceWith() - act(() => - store.result.current.actions.addLocalItem({ - silence, - id: "test", - alertFingerprint: "123", - }) - ) - - expect(Object.keys(store.result.current.localSilences).length).toEqual(1) - expect(store.result.current.localSilences["test"]["id"]).toEqual("test") - expect( - store.result.current.localSilences["test"]["alertFingerprint"] - ).toEqual("123") - }) - it("should avoid to add any silences without id or alertFingerprint", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - actions: useSilencesActions(), - localSilences: useSilencesLocalItems(), - }), - { wrapper } - ) - - const silence = createFakeSilenceWith() - act(() => store.result.current.actions.addLocalItem({ silence, id: "" })) - act(() => store.result.current.actions.addLocalItem({ silence, id: null })) - act(() => - store.result.current.actions.addLocalItem({ - silence, - id: "test", - alertFingerprint: "", - }) - ) - act(() => - store.result.current.actions.addLocalItem({ - silence, - id: "test", - alertFingerprint: null, - }) - ) - expect(Object.keys(store.result.current.localSilences).length).toEqual(0) - }) -}) - -describe("getMappingSilences", () => { - it("return all external silences referenced by silencedBy and all local silences with the same fingerprint which are not yet included", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create extern silences adding an id to the object - const silence = createFakeSilenceWith({ id: "external" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence], - itemsHash: { external: silence }, - itemsByState: { active: [silence] }, - }) - ) - // create local silence adding per attribute the id and the alert fingerprint - const silence2 = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence2, - id: "local", - alertFingerprint: "123", - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getMappingSilences(alert)) - ) - expect(mappingResult.length).toEqual(2) - expect(mappingResult.map((item) => item.id)).toContainEqual("external") - expect(mappingResult.map((item) => item.id)).toContainEqual("local") - expect(mappingResult.find((item) => item.id === "local").type).toEqual( - "local" - ) - }) - - it("return silences also when alert silencedBy is just a string", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert - const status = createFakeAlertStatustWith({ silencedBy: "external" }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create local silence - const silence = createFakeSilenceWith({ id: "external" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence], - itemsHash: { external: silence }, - itemsByState: { active: [silence] }, - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getMappingSilences(alert)) - ) - expect(mappingResult.length).toEqual(1) - expect(mappingResult.map((item) => item.id)).toContainEqual("external") - }) - - it("ignores 'local silences' which are already included in silencedBy and exist as external silence", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external", "externalAndLocal"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create external silences adding an id to the object - const silence = createFakeSilenceWith({ id: "external" }) - const silence2 = createFakeSilenceWith({ id: "externalAndLocal" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence, silence2], - itemsHash: { external: silence, externalAndLocal: silence2 }, - itemsByState: { active: [silence, silence2] }, - }) - ) - // create local silence which already exists as external silence - const silence3 = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence3, - id: "externalAndLocal", - alertFingerprint: "123", - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getMappingSilences(alert)) - ) - expect(mappingResult.length).toEqual(2) - // checking type to be undefined means that the silence is not local - expect(mappingResult[0].type).toEqual(undefined) - expect(mappingResult[1].type).toEqual(undefined) - }) - - it("returns local silences when the id exists in silencedBy but it does not exist as external silence", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external", "local"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create external silences adding an id to the object - const silence = createFakeSilenceWith({ id: "external" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence], - itemsHash: { external: silence }, - itemsByState: { active: [silence] }, - }) - ) - // create local silence which already exists as external silence - const silence2 = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence2, - id: "local", - alertFingerprint: "123", - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getMappingSilences(alert)) - ) - expect(mappingResult.length).toEqual(2) - // checking type to be undefined means that the silence is not local - expect(mappingResult[0].type).toEqual(undefined) - expect(mappingResult[1].type).toEqual("local") - }) -}) - -describe("updateLocalItems", () => { - it("removes local silences whose alert reference (defined by alertFingerprint) has in silencedBy the silence itself and a silence with same id exist also as external silences", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - savedLocalSilences: useSilencesLocalItems(), - savedAlerts: useAlertsItems(), - }), - { wrapper } - ) - - // create local silences - const silence = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence, - id: "test1local", - alertFingerprint: "12345", - }) - ) - const silence2 = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence2, - id: "test2local", - alertFingerprint: "non_existing_alert", - }) - ) - // check if the local silence are saved - expect(Object.keys(store.result.current.savedLocalSilences).length).toEqual( - 2 - ) - // create an alert without any silencedBy so we just have the local silences - const status = createFakeAlertStatustWith({ - silencedBy: ["test1local"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "12345" }) - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // check if the alert is saved - expect(store.result.current.savedAlerts.length).toEqual(1) - // trigger update local items by setting new external silences - const externalSilence = createFakeSilenceWith({ id: "test1local" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [externalSilence], - itemsHash: { [externalSilence.id]: externalSilence }, - itemsByState: { active: [externalSilence] }, - }) - ) - // check local items - expect(Object.keys(store.result.current.savedLocalSilences).length).toEqual( - 1 - ) - expect(store.result.current.savedLocalSilences["test2local"].id).toEqual( - "test2local" - ) - }) - - it("keeps local silences if silence with same id does not exist yet in external silences", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - savedLocalSilences: useSilencesLocalItems(), - savedAlerts: useAlertsItems(), - }), - { wrapper } - ) - - // create local silences - const silence = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence, - id: "test1local", - alertFingerprint: "12345", - }) - ) - const silence2 = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence2, - id: "test2local", - alertFingerprint: "non_existing_alert", - }) - ) - // check if the local silence are saved - expect(Object.keys(store.result.current.savedLocalSilences).length).toEqual( - 2 - ) - // create an alert without any silencedBy so we just have the local silences - const status = createFakeAlertStatustWith({ - silencedBy: ["test1local"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "12345" }) - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // check if the alert is saved - expect(store.result.current.savedAlerts.length).toEqual(1) - // trigger update local items by setting new external silences - const externalSilence = createFakeSilenceWith({ - id: "different_id_then_test1local", - }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [externalSilence], - itemsHash: { [externalSilence.id]: externalSilence }, - itemsByState: { active: [externalSilence] }, - }) - ) - // check local items - expect(Object.keys(store.result.current.savedLocalSilences).length).toEqual( - 2 - ) - expect(store.result.current.savedLocalSilences["test1local"].id).toEqual( - "test1local" - ) - expect(store.result.current.savedLocalSilences["test2local"].id).toEqual( - "test2local" - ) - }) -}) - -describe("getMappedState", () => { - it("retuns supressed (processing) if a local silence is found", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create extern silences adding an id to the object - const silence = createFakeSilenceWith({ id: "external" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence], - itemsHash: { external: silence }, - itemsByState: { active: [silence] }, - }) - ) - // create local silence adding per attribute the id and the alert fingerprint - const silence2 = createFakeSilenceWith() - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence2, - id: "local", - alertFingerprint: "123", - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getMappedState(alert)) - ) - expect(mappingResult["type"]).toEqual("suppressed") - expect(mappingResult["isProcessing"]).toEqual(true) - }) - - it("retuns just the alert.status.state if no local silences found", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create extern silences adding an id to the object - const silence = createFakeSilenceWith({ id: "external" }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence], - itemsHash: { external: silence }, - itemsByState: { active: [silence] }, - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getMappedState(alert)) - ) - expect(mappingResult["type"]).toEqual(alert?.status?.state) - expect(mappingResult["isProcessing"]).toEqual(false) - }) -}) - -describe("getExpiredSilences", () => { - it("returns all silences which are expired matching the alert labels but omitting the excludeLabels", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // set the excluded labels - act(() => store.result.current.silenceActions.setExcludedLabels(["pod"])) - // create an alert with custom status - const alert = createFakeAlertWith({ - fingerprint: "123", - labels: { - severity: "critical", - support_group: "containers", - service: "automation", - pod: "test", - }, - }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create external silences with different labels (service compute) - const silence = createFakeSilenceWith({ - id: "test1", - status: { - state: "expired", - }, - matchers: [ - { name: "severity", value: "critical", isRegex: false }, - { name: "support_group", value: "compute", isRegex: false }, - { name: "service", value: "compute", isRegex: false }, - ], - }) - // create an external silences with matching labels - const silence2 = createFakeSilenceWith({ - id: "test2", - status: { - state: "expired", - }, - matchers: [ - { name: "severity", value: "critical", isRegex: false }, - { name: "support_group", value: "containers", isRegex: false }, - { name: "service", value: "automation", isRegex: false }, - ], - }) - // create an external silences with less labels but matching - const silence3 = createFakeSilenceWith({ - id: "test3", - status: { - state: "expired", - }, - matchers: [ - { name: "severity", value: "info", isRegex: false }, - { name: "support_group", value: "containers", isRegex: false }, - ], - }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence, silence2, silence3], - itemsHash: { test1: silence, test2: silence2, test3: silence3 }, - itemsByState: { expired: [silence, silence2, silence3] }, - }) - ) - // get mapping silences - let expResult = null - act( - () => - (expResult = - store.result.current.silenceActions.getExpiredSilences(alert)) - ) - expect(expResult.length).toEqual(1) - expect(expResult[0].id).toEqual("test2") - }) -}) - -describe("getLatestMappingSilence", () => { - it("returns the silence with the latest endsAt timestamp when local", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create extern silences adding an id to the object - const silence = createFakeSilenceWith({ - id: "external", - endsAt: "2023-06-21T15:17:28.327Z", - }) - const silence2 = createFakeSilenceWith({ - id: "external2", - endsAt: "2023-06-21T16:18:28.327Z", - }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence, silence2], - itemsHash: { external: silence, external2: silence2 }, - itemsByState: { active: [silence, silence2] }, - }) - ) - // create local silence adding per attribute the id and the alert fingerprint - const silence3 = createFakeSilenceWith({ - endsAt: "2023-06-21T19:17:28.327Z", - }) - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence3, - id: "local", - alertFingerprint: "123", - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getLatestMappingSilence(alert)) - ) - expect(mappingResult.id).toEqual("local") - }) - - it("returns the silence with the latest endsAt timestamp when external", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - alertActions: useAlertsActions(), - silenceActions: useSilencesActions(), - }), - { wrapper } - ) - - // create an alert with custom status - const status = createFakeAlertStatustWith({ - silencedBy: ["external", "external2"], - }) - const alert = createFakeAlertWith({ status: status, fingerprint: "123" }) - // set the alert - act(() => - store.result.current.alertActions.setAlertsData({ - items: [alert], - counts: countAlerts([alert]), - }) - ) - // create extern silences adding an id to the object - const silence = createFakeSilenceWith({ - id: "external", - endsAt: "2023-06-21T15:17:28.327Z", - }) - const silence2 = createFakeSilenceWith({ - id: "external2", - endsAt: "2023-06-21T20:18:28.327Z", - }) - act(() => - store.result.current.silenceActions.setSilences({ - items: [silence, silence2], - itemsHash: { external: silence, external2: silence2 }, - itemsByState: { active: [silence, silence2] }, - }) - ) - // create local silence adding per attribute the id and the alert fingerprint - const silence3 = createFakeSilenceWith({ - endsAt: "2023-06-21T19:17:28.327Z", - }) - act(() => - store.result.current.silenceActions.addLocalItem({ - silence: silence3, - id: "local", - alertFingerprint: "123", - }) - ) - // get mapping silences - let mappingResult = null - act( - () => - (mappingResult = - store.result.current.silenceActions.getLatestMappingSilence(alert)) - ) - expect(mappingResult.id).toEqual("external2") - }) -}) - -describe("setExcludedLabels", () => { - it("return empty array as default", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - actions: useSilencesActions(), - excludedLabels: useSilencesExcludedLabels(), - }), - { wrapper } - ) - expect(store.result.current.excludedLabels).toEqual([]) - }) - - it("accepts array of strings containing the labels to use", () => { - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - actions: useSilencesActions(), - excludedLabels: useSilencesExcludedLabels(), - }), - { wrapper } - ) - - act(() => { - store.result.current.actions.setExcludedLabels([ - "pod", - "pod_name", - "instance", - ]) - }) - - expect(store.result.current.excludedLabels).toEqual([ - "pod", - "pod_name", - "instance", - ]) - }) - - it("warn the user if labels are different then an array of strings", () => { - const spy = jest.spyOn(console, "warn").mockImplementation(() => {}) - - const wrapper = ({ children }) => {children} - const store = renderHook( - () => ({ - actions: useSilencesActions(), - excludedLabels: useSilencesExcludedLabels(), - }), - { wrapper } - ) - - act(() => - store.result.current.actions.setExcludedLabels("pod,pod_name,instance") - ) - - expect(spy).toHaveBeenCalledTimes(1) - expect(spy).toHaveBeenCalledWith( - "[supernova]::setExcludedLabels: labels object is not an array of strings" - ) - spy.mockRestore() - }) -}) diff --git a/apps/supernova/src/lib/createUserActivitySlice.js b/apps/supernova/src/lib/createUserActivitySlice.js deleted file mode 100644 index 903996ac7..000000000 --- a/apps/supernova/src/lib/createUserActivitySlice.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import produce from "immer" - -const createUserActivitySlice = (set, get) => ({ - userActivity: { - isActive: true, - - actions: { - setIsActive: (activity) => { - set( - (state) => ({ - userActivity: { ...state.userActivity, isActive: activity }, - }), - false, - "userActivity.setIsActive" - ) - }, - }, - }, -}) - -export default createUserActivitySlice diff --git a/apps/supernova/src/lib/fakeObjects.js b/apps/supernova/src/lib/fakeObjects.js deleted file mode 100644 index b8030d1d0..000000000 --- a/apps/supernova/src/lib/fakeObjects.js +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const refAlert = { - annotations: { - description: - "vSphere High Availability (HA) has detected a possible host failure for `node014-bb164.cc.na-us-1.cloud.sap`. (vc-a-0.cc.na-us-1.cloud.sap).", - summary: - "vSphere High Availability (HA) has detected a possible host failure for `node014-bb164.cc.na-us-1.cloud.sap`. (vc-a-0.cc.na-us-1.cloud.sap).", - }, - endsAt: "2023-06-21T13:04:01.855Z", - fingerprint: "62cab9a4fd5732ee", - receivers: [ - { name: "elastic" }, - { name: "awx" }, - { name: "pagerduty_compute" }, - { name: "octobus" }, - { name: "support_group_alerts_critical_compute" }, - { name: "pagerduty_vmware" }, - { name: "slack_vmware_critical" }, - ], - startsAt: "2023-06-21T12:13:31.855Z", - status: { - inhibitedBy: [], - silencedBy: [], - state: "active", - }, - updatedAt: "2023-06-21T13:00:01.969Z", - generatorURL: - "https://prometheus-vmware-vc-a-0.na-us-1.cloud.sap/graph?g0.expr=vrops_hostsystem_alert_info%7Balert_name%3D%22vSphere+High+Availability+%28HA%29+has+detected+a+possible+host+failure%22%7D+and+on+%28hostsystem%29+vrops_hostsystem_runtime_maintenancestate%7Bstate%21~%22inMaintenance%22%2Cvccluster%21~%22.%2Acontrolplane-swift%22%7D&g0.tab=1", - labels: { - alert_impact: "HEALTH", - alert_level: "CRITICAL", - alert_name: - "vSphere High Availability (HA) has detected a possible host failure", - alertname: "HADetectedAPossibleHostFailure", - cluster: "s-na-us-1", - cluster_type: "scaleout", - collector: "vrops-vc-a-0-host", - context: "node014-bb164.cc.na-us-1.cloud.sap failure", - datacenter: "na-us-1a", - description: - "A vSphere HA master agent considers a host to have failed if it loses contact with the vSphere HA agent on the host, the host does not respond to pings on any of the management interfaces, and the master does not observe any datastore heartbeats. This problem can occur when a computer on the network is configured to have the same IP address as one of the ESX/ESXi hosts in a HA cluster. In this situation, the HA agent receives invalid data and generates errors. The HA agent does not function properly until it is reconfigured. The frequency of this problem depends on how often the IP address conflict occurs.", - hostsystem: "node014-bb164.cc.na-us-1.cloud.sap", - job: "vrops-exporter", - meta: "vSphere High Availability (HA) has detected a possible host failure for `node014-bb164.cc.na-us-1.cloud.sap`. (vc-a-0.cc.na-us-1.cloud.sap).", - no_alert_on_absence: "true", - playbook: "docs/devops/alert/vcenter/#hadetectedapossiblehostfailure", - prometheus: "vmware-monitoring/vmware-vc-a-0", - recommendation_1: - "Find the computer that has the duplicate IP address and reconfigure it to have a different IP address. This fault will be cleared and the alert canceled when the underlying problem is resolved and the vSphere HA master agent is able to connect to the HA agent on the host. NOTE: You can use the Duplicate IP warning in the /var/log/vmkernel log file on an ESX host or the /var/log/messages log file on an ESXi host to identify the computer that has the duplicate IP address.", - region: "na-us-1", - service: "compute", - severity: "critical", - status: "active", - support_group: "compute", - symptom_1_data: - "{'condition': {'faultEvents': ['com.vmware.vc.HA.DasHostFailedEvent'], 'faultKey': 'fault|host|ha', 'type': 'CONDITION_FAULT'}, 'severity': 'CRITICAL'}", - symptom_1_name: "vSphere HA detected a host failure", - tier: "vmware", - vccluster: "productionbb164", - vcenter: "vc-a-0.cc.na-us-1.cloud.sap", - }, -} - -const refAlertStatus = { - inhibitedBy: [], - silencedBy: [], - state: "active", -} - -const refSilence = { - duration: "2", - comment: "Test description", - createdBy: "Jane Doe", - status: { - state: "active", - }, - matchers: [ - { name: "cluster", value: "s-na-us-1", isRegex: false }, - { name: "cluster_type", value: "scaleout", isRegex: false }, - { - name: "context", - value: "node014-bb164.cc.na-us-1.cloud.sap failure", - isRegex: false, - }, - { name: "job", value: "vrops-exporter", isRegex: false }, - { name: "region", value: "na-us-1", isRegex: false }, - { name: "service", value: "compute", isRegex: false }, - { name: "severity", value: "critical", isRegex: false }, - { name: "support_group", value: "compute", isRegex: false }, - { name: "tier", value: "vmware", isRegex: false }, - ], - startsAt: "2023-06-21T13:17:28.327Z", - endsAt: "2023-06-21T15:17:28.327Z", -} - -export const createFakeSilenceWith = (props = {}) => { - return { ...refSilence, ...props } -} - -export const createFakeAlertStatustWith = (props = {}) => { - return { ...refAlertStatus, ...props } -} - -export const createFakeAlertWith = (props = {}) => { - return { ...refAlert, ...props } -} diff --git a/apps/supernova/src/lib/utils.js b/apps/supernova/src/lib/utils.js deleted file mode 100644 index df609af76..000000000 --- a/apps/supernova/src/lib/utils.js +++ /dev/null @@ -1,155 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const severityToSemanticName = (severity) => { - switch (severity) { - case "critical": - return "danger" - case "warning": - return "warning" - case "info": - return "info" - default: - return severity - } -} - -export const descriptionParsed = (text) => { - if (!text) return "" - // urls in descriptions follow the schema: - // Parse description and replace urls with a-tags - const regexUrl = /<(http[^>|]+)\|([^>]+)>/g - const urlParsed = text.replace(regexUrl, `$2`) - - // replace text wrapped in *..* by strong tags - const regexBold = /\*(.*)\*/g - const boldParsed = urlParsed.replace(regexBold, `$1`) - - const regexCode = /`(.*)`/g - return boldParsed.replace(regexCode, `$1`) -} - -// Capitalize first char, underscores to spaces, camel case to spaces, all words except the first to lower case -export const humanizeString = (value) => { - if (!value) { - return value - } - - const camelCaseMatch = /([A-Z])/g - const underscoreMatch = /_/g - - const camelCaseToSpaces = value.replace(camelCaseMatch, " $1") - const underscoresToSpaces = camelCaseToSpaces.replace(underscoreMatch, " ") - - // all together now (also capitalize first word and lowercase all other words) - const humanized = - underscoresToSpaces.charAt(0).toUpperCase() + - underscoresToSpaces.slice(1).toLowerCase() - - return humanized -} - -// sort silences by state -// { -// active: [...], pending: [...], expired:[...], ... -// } -export const sortSilencesByState = (silences) => { - const sortedSilences = {} - - if (!silences || silences.length === 0) return {} - - silences.forEach((silences) => { - const state = silences.status?.state - if (!sortedSilences[state]) sortedSilences[state] = [] // init - sortedSilences[state].push(silences) - }) - return sortedSilences -} - -// count alerts and create a map -// { -// global: { total: number, critical: number, ...}, -// regions: { -// "eu-de-1": { total: number, critical: {total: number, suppressed: number}, warning: {...}, ...} -// }, ... -// } -export const countAlerts = (alerts) => { - const counts = { global: { total: 0 }, regions: {} } - - if (!alerts || alerts.length === 0) return counts - - // run through each alert once and adjust different types of counts as necessary - alerts.forEach((alert) => { - // total number of alerts - counts.global.total += 1 - - const region = alert.labels?.region - const severity = alert.labels?.severity - const state = alert.status?.state - - // global count per severity - counts.global[severity] = counts.global[severity] || 0 // init - counts.global[severity] += 1 - - // count per region and severity - counts.regions[region] = counts.regions[region] || {} // init - counts.regions[region].total = counts.regions[region].total || 0 // init - counts.regions[region].total += 1 - - // total count per region and severity - counts.regions[region][severity] = counts.regions[region][severity] || {} // init - counts.regions[region][severity]["total"] = - counts.regions[region][severity]?.total || 0 // init - counts.regions[region][severity]["total"] += 1 - // suppressed per region and severity - if (state === "suppressed") { - counts.regions[region][severity].suppressed = - counts.regions[region][severity]?.suppressed || 0 // init - counts.regions[region][severity].suppressed += 1 - } - }) - - return counts -} - -/** - * This method sorts the alerts first by severity (critical -> warning -> others), then by status, then by startsAt timestamp and finally by region - * @param {array} items, a list of alerts - * @returns {array} sorted alerts - */ -export const sortAlerts = (items) => { - const importantSeverities = ["critical", "warning"] - - return items.sort((a, b) => { - if ( - (a.labels?.severity === "critical" && - b.labels?.severity !== "critical") || - (a.labels?.severity === "warning" && - importantSeverities.indexOf(b.labels?.severity) < 0) - ) - return -1 - else if ( - a.labels?.severity === b.labels?.severity && - a.status?.state !== b.status?.state && - a.status?.state - ) - return a.status?.state.localeCompare(b.status?.state) - else if ( - a.labels?.severity === b.labels?.severity && - a.status?.state === b.status?.state && - a.startsAt !== b.startsAt && - b.startsAt - ) - return b.startsAt?.localeCompare(a.startsAt) - else if ( - a.labels?.severity === b.labels?.severity && - a.status?.state === b.status?.state && - a.startsAt === b.startsAt && - a.labels?.region - ) - return a.labels?.region?.localeCompare(b.labels?.region) - else return 1 - }) -} diff --git a/apps/supernova/src/styles.scss b/apps/supernova/src/styles.scss deleted file mode 100644 index 77cc678a9..000000000 --- a/apps/supernova/src/styles.scss +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors -// SPDX-License-Identifier: Apache-2.0 - -/* Do not remove these tailwind directives. Without them styles won't work as expected */ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* If necessary, app styles can be added below */ - -.inline-code { - @apply bg-theme-badge-default; - @apply text-theme-default; - @apply text-sm; - @apply rounded; - @apply px-1; - @apply py-0.5; -} - -// datagrid row hover style -// REMOVE THIS ONCE DATAGRID COMPONENT SUPPORTS HOVER -.alerts { - .juno-datagrid-row:hover { - .juno-datagrid-cell { - @apply bg-theme-background-lvl-1; - } - } - - .juno-datagrid-row.active { - .juno-datagrid-cell { - @apply bg-theme-background-lvl-2; - } - } -} diff --git a/apps/supernova/src/workers/alerts.js b/apps/supernova/src/workers/alerts.js deleted file mode 100644 index 817149618..000000000 --- a/apps/supernova/src/workers/alerts.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import ApiService from "../api/apiService" -import { get } from "../api/client" -import { sortAlerts, countAlerts } from "../lib/utils" - -let compareAlertString - -/** - * @param {string} endpoint - * @param {object} options - * @returns {function} fetch function - */ -const fetchAction = (endpoint, options = {}) => { - return get(`${endpoint}/alerts`, { params: options.params }).then((items) => { - // sort alerts - let alerts = sortAlerts(items) - - // copy additional filter options to labels for easier filter selection - // because the alert object is nested this makes it a lot easier to filter, since we only use what is present in alert.labels - alerts.forEach((alert) => { - if (alert.labels) { - alert.labels.status = alert.status?.state - } - }) - - // slice if limit provided - if (options?.limit) { - if (options?.debug) - console.info("Alerts service: limit set: ", options?.limit) - alerts = alerts.slice(0, options?.limit) - } - - // check if new loaded alerts are different from the last response - const newCompareString = JSON.stringify(alerts) - if (options?.debug) - console.info( - "Alerts service: any changes?", - compareAlertString !== newCompareString - ) - if (compareAlertString !== newCompareString) { - compareAlertString = newCompareString - - if (options?.debug) console.info("Alerts service: inform listener") - // inform listener to receive new alerts - self.postMessage({ - action: "ALERTS_UPDATE", - alerts, - counts: countAlerts(alerts), - }) - } else { - if (options?.debug) console.info("Alerts service: no change found") - } - }) -} - -const alertsService = new ApiService({ - serviceName: "alerts", - debug: true, - onFetchStart: () => self.postMessage({ action: "ALERTS_FETCH_START" }), - onFetchEnd: () => self.postMessage({ action: "ALERTS_FETCH_END" }), - onFetchError: (error) => { - self.postMessage({ action: "ALERTS_FETCH_ERROR", error: error.message }) - }, -}) - -self.onmessage = (e) => { - const action = e.data.action - - switch (action) { - case "ALERTS_CONFIGURE": - // require at least apiEndpoint to update the fetch method - if (e.data?.fetchVars?.apiEndpoint) { - // update the fetch function - e.data["fetchFn"] = () => - fetchAction( - e.data?.fetchVars.apiEndpoint, - e.data?.fetchVars.options || {} - ) - } - alertsService.configure(e.data) - break - case "ALERTS_FETCH": - alertService.fetch() - break - } -} diff --git a/apps/supernova/src/workers/silences.js b/apps/supernova/src/workers/silences.js deleted file mode 100644 index f6661150f..000000000 --- a/apps/supernova/src/workers/silences.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import ApiService from "../api/apiService" -import { get } from "../api/client" -import { sortSilencesByState } from "../lib/utils" - -const fetchAction = (endpoint) => { - return get(`${endpoint}/silences`, {}).then((items) => { - // convert items to hash to easear access - const itemsHash = items.reduce((itemsHash, silence) => { - itemsHash[silence.id] = silence - return itemsHash - }, {}) - - // split items by state (active, pending and expired) - // https://github.com/prometheus/alertmanager/blob/main/types/types.go#L434 - const itemsByState = sortSilencesByState(items) - - self.postMessage({ - action: "SILENCES_UPDATE", - silences: items, - silencesHash: itemsHash, - silencesBySate: itemsByState, - }) - }) -} - -const silenceService = new ApiService({ - serviceName: "silences", - debug: true, - onFetchStart: () => self.postMessage({ action: "SILENCES_FETCH_START" }), - onFetchEnd: () => self.postMessage({ action: "SILENCES_FETCH_END" }), - onFetchError: (error) => { - self.postMessage({ action: "SILENCES_FETCH_ERROR", error: error.message }) - }, -}) - -self.onmessage = (e) => { - const action = e.data.action - - switch (action) { - case "SILENCES_CONFIGURE": - if (e.data?.apiEndpoint) { - e.data["fetchFn"] = () => fetchAction(e.data?.apiEndpoint) - } - silenceService.configure(e.data) - break - case "SILENCES_FETCH": - silenceService.fetch() - break - } -} diff --git a/apps/supernova/tailwind.config.js b/apps/supernova/tailwind.config.js deleted file mode 100644 index 81b1f8fef..000000000 --- a/apps/supernova/tailwind.config.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// opacity helper to make custom colors work with opacity -function withOpacity(variableName) { - return ({ opacityVariable, opacityValue }) => { - if (opacityValue !== undefined) { - return `rgba(var(${variableName}), ${opacityValue})` - } - if (opacityVariable !== undefined) { - return `rgba(var(${variableName}), var(${opacityVariable}, 1))` - } - return `rgb(var(${variableName}))` - } -} - -module.exports = { - presets: [ - require("juno-ui-components/build/lib/tailwind.config"), // important, do not change - ], - prefix: "", // important, do not change - content: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"], - corePlugins: { - preflight: false, // important, do not change - }, - theme: {}, - plugins: [], -} diff --git a/package-lock.json b/package-lock.json index b9a1ea49e..8e970739d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -184,620 +184,8 @@ "node": ">=12" } }, - "apps/doop": { - "version": "1.0.1", - "extraneous": true, - "license": "MIT", - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "^4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "zustand": "^4.1.1" - }, - "peerDependencies": { - "@tanstack/react-query": "^4.28.0", - "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "zustand": "^4.1.1" - } - }, - "apps/exampleapp": { - "version": "1.0.4", - "license": "Apache-2.0", - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "body-parser": "^1.20.1", - "esbuild": "^0.17.19", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "utils": "*", - "zustand": "4.3.7" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", - "zustand": "4.3.7" - } - }, - "apps/exampleapp/node_modules/luxon": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", - "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse": { - "version": "0.1.20", - "license": "Apache-2.0", - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tailwindui/react": "^0.1.1", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", - "immer": "^9.0.21", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "messages-provider": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sapcc-k8sclient": "^1.0.2", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "utils": "*", - "zustand": "4.3.7" - }, - "peerDependencies": { - "juno-ui-components": "*", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", - "zustand": "4.3.7" - } - }, - "apps/greenhouse-management": { - "version": "1.1.13", - "license": "MIT", - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "esbuild": "^0.19.5", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sapcc-k8sclient": "^1.0.2", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "utils": "*", - "zustand": "4.3.7" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", - "zustand": "4.3.7" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/android-arm": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", - "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/android-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", - "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/android-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", - "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", - "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/darwin-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", - "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", - "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", - "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-arm": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", - "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", - "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-ia32": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", - "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-loong64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", - "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", - "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", - "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", - "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-s390x": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", - "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/linux-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", - "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", - "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", - "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/sunos-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", - "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/win32-arm64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", - "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/win32-ia32": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", - "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/@esbuild/win32-x64": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", - "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "apps/greenhouse-management/node_modules/esbuild": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", - "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.5", - "@esbuild/android-arm64": "0.19.5", - "@esbuild/android-x64": "0.19.5", - "@esbuild/darwin-arm64": "0.19.5", - "@esbuild/darwin-x64": "0.19.5", - "@esbuild/freebsd-arm64": "0.19.5", - "@esbuild/freebsd-x64": "0.19.5", - "@esbuild/linux-arm": "0.19.5", - "@esbuild/linux-arm64": "0.19.5", - "@esbuild/linux-ia32": "0.19.5", - "@esbuild/linux-loong64": "0.19.5", - "@esbuild/linux-mips64el": "0.19.5", - "@esbuild/linux-ppc64": "0.19.5", - "@esbuild/linux-riscv64": "0.19.5", - "@esbuild/linux-s390x": "0.19.5", - "@esbuild/linux-x64": "0.19.5", - "@esbuild/netbsd-x64": "0.19.5", - "@esbuild/openbsd-x64": "0.19.5", - "@esbuild/sunos-x64": "0.19.5", - "@esbuild/win32-arm64": "0.19.5", - "@esbuild/win32-ia32": "0.19.5", - "@esbuild/win32-x64": "0.19.5" - } - }, - "apps/greenhouse-management/node_modules/luxon": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", - "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "apps/heureka": { - "version": "2.0.4", + "apps/exampleapp": { + "version": "1.0.4", "license": "Apache-2.0", "devDependencies": { "@babel/core": "^7.20.2", @@ -814,14 +202,14 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", - "graphql": "*", - "graphql-request": "^6.0.0", - "immer": "^9.0.21", + "body-parser": "^1.20.1", + "esbuild": "^0.17.19", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", "juno-ui-components": "*", + "luxon": "^2.3.0", "messages-provider": "*", + "oauth": "*", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -833,19 +221,33 @@ "tailwindcss": "^3.3.1", "url-state-provider": "*", "util": "^0.12.4", + "utils": "*", "zustand": "4.3.7" }, "peerDependencies": { "@tanstack/react-query": "4.28.0", + "custom-event-polyfill": "^1.0.7", "juno-ui-components": "*", + "luxon": "^2.3.0", "messages-provider": "*", + "oauth": "*", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", "url-state-provider": "*", + "utils": "*", "zustand": "4.3.7" } }, + "apps/exampleapp/node_modules/luxon": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", + "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "apps/playground": { "version": "1.0.5", "license": "Apache-2.0", @@ -1282,67 +684,6 @@ "@esbuild/win32-x64": "0.19.12" } }, - "apps/supernova": { - "version": "0.9.11", - "license": "Apache-2.0", - "devDependencies": { - "@babel/core": "^7.20.2", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", - "esbuild": "^0.17.11", - "esbuild-sass-plugin": "^2.6.0", - "immer": "^9.0.21", - "interweave": "^13.0.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "zustand": "4.3.7" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "messages-provider": "*", - "prop-types": "^15.8.1", - "react": "18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "zustand": "4.3.7" - } - }, - "apps/supernova/node_modules/luxon": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", - "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "apps/template": { "version": "1.0.3", "license": "Apache-2.0", @@ -1817,56 +1158,6 @@ } } }, - "apps/test1": { - "version": "1.0.1", - "extraneous": true, - "license": "MIT", - "dependencies": { - "postcss-url": "^10.1.3" - }, - "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0", - "@tanstack/react-query": "4.28.0", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "assert": "^2.0.0", - "autoprefixer": "^10.4.2", - "babel-jest": "^29.3.1", - "babel-plugin-transform-import-meta": "^2.2.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "postcss": "^8.4.21", - "postcss-url": "^10.1.3", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-test-renderer": "^18.2.0", - "sass": "^1.60.0", - "shadow-dom-testing-library": "^1.7.1", - "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "util": "^0.12.4", - "zustand": "4.3.7" - }, - "peerDependencies": { - "@tanstack/react-query": "4.28.0", - "juno-ui-components": "*", - "luxon": "^2.3.0", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "url-state-provider": "*", - "zustand": "4.3.7" - } - }, "apps/user-activity": { "version": "1.0.2", "license": "Apache-2.0", @@ -5066,15 +4357,6 @@ "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==", "dev": true }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "dev": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@headlessui-float/react": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/@headlessui-float/react/-/react-0.11.3.tgz", @@ -13460,18 +12742,6 @@ "integrity": "sha512-8QvcEur44BgwBJiCilZ5oVHwFts4ysA29GXCxGRLmCduofeZXWEVIsMjzWzAYXiB35jpsBdKm0NtQnG4YQ+kmA==", "dev": true }, - "node_modules/@tailwindui/react": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@tailwindui/react/-/react-0.1.1.tgz", - "integrity": "sha512-2VoUokHT/EYHaWQjH49gwKqYtwii7snb1SIp93ewfuI9fSy4x6DYocs4v4WNfyiE971ixc/PT+cs6tCi+zabSA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16" - } - }, "node_modules/@tanstack/query-core": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.27.0.tgz", @@ -16534,15 +15804,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -17670,19 +16931,6 @@ "esbuild": ">=0.12 <1" } }, - "node_modules/esbuild-sass-plugin": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.8.0.tgz", - "integrity": "sha512-PYDw/r+0lAOBjP4CDjkRRrYDtSta4kO0+p2Ofm4n15hbyhAsxa7hQpY8fY6Ja6VAzzC//VA9F1ki5L99apjLCA==", - "dev": true, - "dependencies": { - "resolve": "^1.22.1", - "sass": "^1.59.3" - }, - "peerDependencies": { - "esbuild": "^0.17.12" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -18819,36 +18067,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", - "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", - "dev": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.2.0", - "cross-fetch": "^3.1.5" - }, - "peerDependencies": { - "graphql": "14 - 16" - } - }, - "node_modules/greenhouse": { - "resolved": "apps/greenhouse", - "link": true - }, - "node_modules/greenhouse-management": { - "resolved": "apps/greenhouse-management", - "link": true - }, "node_modules/gunzip-maybe": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", @@ -19318,10 +18536,6 @@ "he": "bin/he" } }, - "node_modules/heureka": { - "resolved": "apps/heureka", - "link": true - }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -19583,16 +18797,6 @@ "node": ">= 4" } }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/immutable": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", @@ -31362,16 +30566,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/sapcc-k8sclient": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sapcc-k8sclient/-/sapcc-k8sclient-1.0.2.tgz", - "integrity": "sha512-IFmZL0YxT9mP4IEI0p8Z/AUnG0D/NQRne1yo5BdgGrqOYniiUjXVcgxkx19hhJkWKIz2bVB3WJuM+3vPmPxKFA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.7", - "text-encoding": "^0.7.0" - } - }, "node_modules/sass": { "version": "1.60.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.60.0.tgz", @@ -32083,10 +31277,6 @@ "node": "*" } }, - "node_modules/supernova": { - "resolved": "apps/supernova", - "link": true - }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -32620,13 +31810,6 @@ "node": "*" } }, - "node_modules/text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained", - "dev": true - }, "node_modules/theming": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/theming/-/theming-3.3.0.tgz", From 31b08750aaaa1d701ce8bbf1ccde50e44794922f Mon Sep 17 00:00:00 2001 From: Andreas Pfau Date: Fri, 10 May 2024 14:28:58 +0200 Subject: [PATCH 02/26] replace all * dependencies with URLs (assets-server) (#601) * replace all * dependencies with URLs (assets-server) * ci: do not run build-libs, from now on we build every assets individually --- apps/assets-overview/package.json | 20 +- apps/auth/package.json | 8 +- apps/dashboard/package.json | 4 +- apps/exampleapp/package.json | 20 +- apps/playground/package.json | 8 +- apps/template/package.json | 8 +- apps/user-activity/package.json | 2 +- apps/volta/package.json | 22 +- apps/whois/package.json | 10 +- ci/scripts/asset_build.sh | 2 +- docs/build_and_host_app.md | 8 +- libs/messages-provider/package.json | 4 +- libs/url-state-router/package.json | 4 +- libs/utils/README.md | 2 +- package-lock.json | 386 ++++++++++++++++++++++++---- 15 files changed, 392 insertions(+), 116 deletions(-) diff --git a/apps/assets-overview/package.json b/apps/assets-overview/package.json index 25b94a563..0316dd4c7 100644 --- a/apps/assets-overview/package.json +++ b/apps/assets-overview/package.json @@ -31,9 +31,9 @@ "github-markdown-css": "^5.1.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "3.3.0", - "messages-provider": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "15.8.1", @@ -45,10 +45,10 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "url-state-router": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "url-state-router": "https://assets.juno.global.cloud.sap/libs/url-state-router@1.0.3/package.tgz", "util": "^0.12.4", - "utils": "*", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "scripts": { @@ -60,15 +60,15 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "3.3.0", - "messages-provider": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "prop-types": "15.8.1", "react": "18.2.0", "react-dom": "18.2.0", - "url-state-provider": "*", - "url-state-router": "*", - "utils": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "url-state-router": "https://assets.juno.global.cloud.sap/libs/url-state-router@1.0.3/package.tgz", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "appProps": { diff --git a/apps/auth/package.json b/apps/auth/package.json index b2d1c80fa..0c3c4ac2a 100644 --- a/apps/auth/package.json +++ b/apps/auth/package.json @@ -25,14 +25,14 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "custom-event-polyfill": "^1.0.7", "esbuild": "^0.17.12", "interweave": "^13.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "oauth": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -52,7 +52,7 @@ "peerDependencies": { "custom-event-polyfill": "^1.0.7", "juno-ui-components": "latest", - "oauth": "*", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0" diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 258a3d5e0..8b6a12424 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -26,7 +26,7 @@ "babel-plugin-transform-import-meta": "^2.2.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -47,7 +47,7 @@ }, "peerDependencies": { "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", diff --git a/apps/exampleapp/package.json b/apps/exampleapp/package.json index 1a1e48134..0fe86bbff 100644 --- a/apps/exampleapp/package.json +++ b/apps/exampleapp/package.json @@ -29,10 +29,10 @@ "esbuild": "^0.17.19", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -42,9 +42,9 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", - "utils": "*", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "scripts": { @@ -55,15 +55,15 @@ "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "importmapExtras": { diff --git a/apps/playground/package.json b/apps/playground/package.json index 1b2b95459..1b2255011 100644 --- a/apps/playground/package.json +++ b/apps/playground/package.json @@ -29,7 +29,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -40,7 +40,7 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", "zustand": "4.3.7" }, @@ -50,11 +50,11 @@ "build": "NODE_ENV=production node esbuild.config.js" }, "peerDependencies": { - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "18.2.0", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "zustand": "4.3.7" }, "importmapExtras": { diff --git a/apps/template/package.json b/apps/template/package.json index 4756b4db5..4f59f17c5 100644 --- a/apps/template/package.json +++ b/apps/template/package.json @@ -28,7 +28,7 @@ "babel-plugin-transform-import-meta": "^2.2.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -40,7 +40,7 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", "zustand": "4.5.2", "esbuild": "^0.19.5" @@ -52,12 +52,12 @@ }, "peerDependencies": { "@tanstack/react-query": "4.28.0", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "zustand": "4.5.2" }, "importmapExtras": { diff --git a/apps/user-activity/package.json b/apps/user-activity/package.json index dca41ced2..1da877bb1 100644 --- a/apps/user-activity/package.json +++ b/apps/user-activity/package.json @@ -24,7 +24,7 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", "postcss": "^8.4.21", diff --git a/apps/volta/package.json b/apps/volta/package.json index c57b058e8..1d3088461 100644 --- a/apps/volta/package.json +++ b/apps/volta/package.json @@ -27,14 +27,14 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "lodash.uniqueid": "^4.0.1", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -45,23 +45,23 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", - "utils": "*", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "importmapExtras": { diff --git a/apps/whois/package.json b/apps/whois/package.json index 0160a7b69..1c223b74d 100644 --- a/apps/whois/package.json +++ b/apps/whois/package.json @@ -26,11 +26,11 @@ "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", "cidr-regex": "^3.1.1", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "ip-regex": "^5.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -41,7 +41,7 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.8.0", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4" }, "scripts": { @@ -50,12 +50,12 @@ "build": "NODE_ENV=production node esbuild.config.js" }, "peerDependencies": { - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*" + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz" }, "appProps": { "theme": { diff --git a/ci/scripts/asset_build.sh b/ci/scripts/asset_build.sh index 832f32ae3..b65ef05ea 100755 --- a/ci/scripts/asset_build.sh +++ b/ci/scripts/asset_build.sh @@ -137,7 +137,7 @@ echo "generate COMMUNICATOR.md in $ASSET_PATH" node ci/scripts/generate_communication_readme.mjs --path="$ASSET_PATH" # install and build libs -npm run build-libs +# npm run build-libs # TEST AND BUILD ASSET # IGNORE_EXTERNALS=true will results in a bundle which includes all dependencies. diff --git a/docs/build_and_host_app.md b/docs/build_and_host_app.md index cc5c684aa..615ae0605 100644 --- a/docs/build_and_host_app.md +++ b/docs/build_and_host_app.md @@ -33,12 +33,12 @@ npm -v ```json "peerDependencies": { "@tanstack/react-query": "^4.28.0", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "zustand": "^4.1.1" }, ``` @@ -53,8 +53,8 @@ npm -v ```yaml "devDependencies": { ... - "juno-ui-components": "*", - "url-state-provider": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", ... }, ``` diff --git a/libs/messages-provider/package.json b/libs/messages-provider/package.json index 1d1649fd5..53d0557b1 100644 --- a/libs/messages-provider/package.json +++ b/libs/messages-provider/package.json @@ -12,7 +12,7 @@ "module": "build/index.js", "license": "Apache-2.0", "peerDependencies": { - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "react": "18.2.0", "zustand": "4.5.2" }, @@ -28,7 +28,7 @@ "@testing-library/user-event": "^14.4.3", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "prop-types": "15.8.1", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/libs/url-state-router/package.json b/libs/url-state-router/package.json index 7363cb44e..941fac89f 100644 --- a/libs/url-state-router/package.json +++ b/libs/url-state-router/package.json @@ -14,7 +14,7 @@ "peerDependencies": { "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "prop-types": "^15.8.1" }, "devDependencies": { @@ -39,7 +39,7 @@ "rollup": "^3.4.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-delete": "^2.0.0", - "url-state-provider": "*" + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz" }, "scripts": { "test": "jest", diff --git a/libs/utils/README.md b/libs/utils/README.md index 67dfb03f2..6bb18dd2c 100644 --- a/libs/utils/README.md +++ b/libs/utils/README.md @@ -19,7 +19,7 @@ Within juno monorepo ```json "dependencies": { - "utils": "*" + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz" }, ``` diff --git a/package-lock.json b/package-lock.json index 8e970739d..7555df944 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,9 +52,9 @@ "github-markdown-css": "^5.1.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "3.3.0", - "messages-provider": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "15.8.1", @@ -66,27 +66,79 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", - "url-state-router": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "url-state-router": "https://assets.juno.global.cloud.sap/libs/url-state-router@1.0.3/package.tgz", "util": "^0.12.4", - "utils": "*", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "3.3.0", - "messages-provider": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", "prop-types": "15.8.1", "react": "18.2.0", "react-dom": "18.2.0", - "url-state-provider": "*", - "url-state-router": "*", - "utils": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "url-state-router": "https://assets.juno.global.cloud.sap/libs/url-state-router@1.0.3/package.tgz", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" } }, + "apps/assets-overview/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, + "apps/assets-overview/node_modules/messages-provider": { + "version": "0.1.12", + "resolved": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "integrity": "sha512-8XVowXV8wxBJ10FBEAO2AGMpdaf6C6UKQCAjJELJnJHYwPDBYOnMa4nOwHCwzurH6rh0QTmbAeFz4HpD8Yglrw==", + "dev": true, + "peerDependencies": { + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "react": "18.2.0", + "zustand": "4.5.2" + } + }, + "apps/assets-overview/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, + "apps/assets-overview/node_modules/url-state-router": { + "version": "1.0.3", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-router@1.0.3/package.tgz", + "integrity": "sha512-U5UZakLojwqPIPu8WCuNclSuRfWG+UNDz/9zTdm3matet6tmnVOBnhwpIlLg2Wt0QZcZ6A4Z0MckHAjdgjgumA==", + "dev": true, + "peerDependencies": { + "prop-types": "^15.8.1", + "react": "18.2.0", + "react-dom": "^18.2.0", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz" + } + }, + "apps/assets-overview/node_modules/utils": { + "version": "1.1.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", + "integrity": "sha512-EJY8lT7jRzwlOmHA4YLKdSA8caLVoR4m8giN0+A6wQ2tUFYkBKRbF+pC6On5557tZyi4M2/IHanY0gpwydH3MA==", + "dev": true, + "peerDependencies": { + "react": "^18.2.0" + } + }, "apps/auth": { "version": "1.0.7", "license": "Apache-2.0", @@ -104,14 +156,14 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "custom-event-polyfill": "^1.0.7", "esbuild": "^0.17.12", "interweave": "^13.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", - "oauth": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -126,12 +178,35 @@ "peerDependencies": { "custom-event-polyfill": "^1.0.7", "juno-ui-components": "latest", - "oauth": "*", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0" } }, + "apps/auth/node_modules/communicator": { + "version": "2.2.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", + "integrity": "sha512-DGjFFgbAr8gXGJlnfvxEYegqtY+ZflKj+4i3uLqDv6J58gIAavOQenfps+Db1m3vM570+h9ZG8do/SNMPIbnWQ==", + "dev": true + }, + "apps/auth/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, + "apps/auth/node_modules/oauth": { + "version": "1.2.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", + "integrity": "sha512-UekxB4dCX+TdKA+/EUAVRfWyQWSY2MVbKZri/tQSfmhHHFJHFUKoBDKCv+1mIMNhtQKYFxKqDSIQ0m8sYS/Flw==", + "dev": true + }, "apps/dashboard": { "version": "1.0.2", "license": "Apache-2.0", @@ -151,7 +226,7 @@ "babel-plugin-transform-import-meta": "^2.2.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -167,7 +242,7 @@ }, "peerDependencies": { "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", @@ -175,6 +250,17 @@ "zustand": "^4.1.1" } }, + "apps/dashboard/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, "apps/dashboard/node_modules/luxon": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", @@ -206,10 +292,10 @@ "esbuild": "^0.17.19", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -219,26 +305,37 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", - "utils": "*", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" } }, + "apps/exampleapp/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, "apps/exampleapp/node_modules/luxon": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", @@ -248,6 +345,41 @@ "node": ">=12" } }, + "apps/exampleapp/node_modules/messages-provider": { + "version": "0.1.12", + "resolved": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "integrity": "sha512-8XVowXV8wxBJ10FBEAO2AGMpdaf6C6UKQCAjJELJnJHYwPDBYOnMa4nOwHCwzurH6rh0QTmbAeFz4HpD8Yglrw==", + "dev": true, + "peerDependencies": { + "juno-ui-components": "*", + "react": "18.2.0", + "zustand": "4.5.2" + } + }, + "apps/exampleapp/node_modules/oauth": { + "version": "1.2.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", + "integrity": "sha512-UekxB4dCX+TdKA+/EUAVRfWyQWSY2MVbKZri/tQSfmhHHFJHFUKoBDKCv+1mIMNhtQKYFxKqDSIQ0m8sYS/Flw==", + "dev": true + }, + "apps/exampleapp/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, + "apps/exampleapp/node_modules/utils": { + "version": "1.1.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", + "integrity": "sha512-EJY8lT7jRzwlOmHA4YLKdSA8caLVoR4m8giN0+A6wQ2tUFYkBKRbF+pC6On5557tZyi4M2/IHanY0gpwydH3MA==", + "dev": true, + "peerDependencies": { + "react": "^18.2.0" + } + }, "apps/playground": { "version": "1.0.5", "license": "Apache-2.0", @@ -270,7 +402,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -281,16 +413,16 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", "zustand": "4.3.7" }, "peerDependencies": { - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "18.2.0", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "zustand": "4.3.7" } }, @@ -684,6 +816,26 @@ "@esbuild/win32-x64": "0.19.12" } }, + "apps/playground/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, + "apps/playground/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, "apps/template": { "version": "1.0.3", "license": "Apache-2.0", @@ -705,7 +857,7 @@ "esbuild": "^0.19.5", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -717,18 +869,18 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", "zustand": "4.5.2" }, "peerDependencies": { "@tanstack/react-query": "4.28.0", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "zustand": "4.5.2" } }, @@ -1121,6 +1273,17 @@ "@esbuild/win32-x64": "0.19.5" } }, + "apps/template/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, "apps/template/node_modules/luxon": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", @@ -1130,6 +1293,15 @@ "node": ">=12" } }, + "apps/template/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, "apps/template/node_modules/zustand": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", @@ -1175,7 +1347,7 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", "postcss": "^8.4.21", @@ -1196,6 +1368,12 @@ "react-dom": "^18.2.0" } }, + "apps/user-activity/node_modules/communicator": { + "version": "2.2.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", + "integrity": "sha512-DGjFFgbAr8gXGJlnfvxEYegqtY+ZflKj+4i3uLqDv6J58gIAavOQenfps+Db1m3vM570+h9ZG8do/SNMPIbnWQ==", + "dev": true + }, "apps/volta": { "version": "1.0.4", "license": "Apache-2.0", @@ -1215,14 +1393,14 @@ "autoprefixer": "^10.4.2", "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "lodash.uniqueid": "^4.0.1", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "postcss": "^8.4.21", "postcss-url": "^10.1.3", "prop-types": "^15.8.1", @@ -1233,26 +1411,43 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.7.1", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4", - "utils": "*", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" }, "peerDependencies": { "@tanstack/react-query": "4.28.0", "custom-event-polyfill": "^1.0.7", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", - "messages-provider": "*", - "oauth": "*", + "messages-provider": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "oauth": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*", - "utils": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "utils": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", "zustand": "4.3.7" } }, + "apps/volta/node_modules/communicator": { + "version": "2.2.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", + "integrity": "sha512-DGjFFgbAr8gXGJlnfvxEYegqtY+ZflKj+4i3uLqDv6J58gIAavOQenfps+Db1m3vM570+h9ZG8do/SNMPIbnWQ==", + "dev": true + }, + "apps/volta/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, "apps/volta/node_modules/luxon": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", @@ -1262,6 +1457,41 @@ "node": ">=12" } }, + "apps/volta/node_modules/messages-provider": { + "version": "0.1.12", + "resolved": "https://assets.juno.global.cloud.sap/libs/messages-provider@0.1.12/package.tgz", + "integrity": "sha512-8XVowXV8wxBJ10FBEAO2AGMpdaf6C6UKQCAjJELJnJHYwPDBYOnMa4nOwHCwzurH6rh0QTmbAeFz4HpD8Yglrw==", + "dev": true, + "peerDependencies": { + "juno-ui-components": "*", + "react": "18.2.0", + "zustand": "4.5.2" + } + }, + "apps/volta/node_modules/oauth": { + "version": "1.2.1", + "resolved": "https://assets.juno.global.cloud.sap/libs/oauth@1.2.1/package.tgz", + "integrity": "sha512-UekxB4dCX+TdKA+/EUAVRfWyQWSY2MVbKZri/tQSfmhHHFJHFUKoBDKCv+1mIMNhtQKYFxKqDSIQ0m8sYS/Flw==", + "dev": true + }, + "apps/volta/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, + "apps/volta/node_modules/utils": { + "version": "1.1.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/utils@1.1.6/package.tgz", + "integrity": "sha512-EJY8lT7jRzwlOmHA4YLKdSA8caLVoR4m8giN0+A6wQ2tUFYkBKRbF+pC6On5557tZyi4M2/IHanY0gpwydH3MA==", + "dev": true, + "peerDependencies": { + "react": "^18.2.0" + } + }, "apps/whois": { "version": "3.0.5", "license": "Apache-2.0", @@ -1280,11 +1510,11 @@ "babel-jest": "^29.3.1", "babel-plugin-transform-import-meta": "^2.2.0", "cidr-regex": "^3.1.1", - "communicator": "*", + "communicator": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", "ip-regex": "^5.0.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "postcss": "^8.4.21", "postcss-url": "^10.1.3", @@ -1295,16 +1525,33 @@ "sass": "^1.60.0", "shadow-dom-testing-library": "^1.8.0", "tailwindcss": "^3.3.1", - "url-state-provider": "*", + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", "util": "^0.12.4" }, "peerDependencies": { - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "luxon": "^2.3.0", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*" + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz" + } + }, + "apps/whois/node_modules/communicator": { + "version": "2.2.6", + "resolved": "https://assets.juno.global.cloud.sap/libs/communicator@2.2.6/package.tgz", + "integrity": "sha512-DGjFFgbAr8gXGJlnfvxEYegqtY+ZflKj+4i3uLqDv6J58gIAavOQenfps+Db1m3vM570+h9ZG8do/SNMPIbnWQ==", + "dev": true + }, + "apps/whois/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" } }, "apps/whois/node_modules/luxon": { @@ -1316,6 +1563,15 @@ "node": ">=12" } }, + "apps/whois/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, "apps/widget-loader": { "version": "1.3.3", "license": "Apache-2.0", @@ -1477,7 +1733,7 @@ "@testing-library/user-event": "^14.4.3", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "prop-types": "15.8.1", "react": "18.2.0", "react-dom": "18.2.0", @@ -1488,11 +1744,22 @@ "zustand": "4.5.2" }, "peerDependencies": { - "juno-ui-components": "*", + "juno-ui-components": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", "react": "18.2.0", "zustand": "4.5.2" } }, + "libs/messages-provider/node_modules/juno-ui-components": { + "version": "2.13.8", + "resolved": "https://assets.juno.global.cloud.sap/libs/juno-ui-components@2.13.8/package.tgz", + "integrity": "sha512-ygnXfEt77rshIkpbgvZORO2TCA2ZY//xmkY9NQtA0iazr6M0RbRnKpXycn1RQ6YVjXFfH0xhRcOImKeomrfIjw==", + "dev": true, + "peerDependencies": { + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0" + } + }, "libs/messages-provider/node_modules/rollup": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.4.0.tgz", @@ -1619,13 +1886,13 @@ "rollup": "^3.4.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-delete": "^2.0.0", - "url-state-provider": "*" + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz" }, "peerDependencies": { "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "^18.2.0", - "url-state-provider": "*" + "url-state-provider": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz" } }, "libs/url-state-router/node_modules/@rollup/plugin-node-resolve": { @@ -1784,6 +2051,15 @@ "node": ">=8" } }, + "libs/url-state-router/node_modules/url-state-provider": { + "version": "1.3.2", + "resolved": "https://assets.juno.global.cloud.sap/libs/url-state-provider@1.3.2/package.tgz", + "integrity": "sha512-+6ID9hl4YIFiRd4EWy7oZlvFmevBNsIXa8KTZ0+HCj/f48s4NNZKXWooSakXeCmeFCzkcnP/Wv4jYD3RyWFAjg==", + "dev": true, + "dependencies": { + "juri": "^1.0.3" + } + }, "libs/utils": { "version": "1.1.6", "license": "Apache-2.0", From 292634418efe9bab722dc2e853c9b1c1373244cd Mon Sep 17 00:00:00 2001 From: Andreas Pfau Date: Fri, 10 May 2024 14:39:31 +0200 Subject: [PATCH 03/26] fix unit tests (#602) --- apps/assets-overview/jest.config.js | 2 +- apps/exampleapp/jest.config.js | 4 +++- apps/volta/jest.config.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/assets-overview/jest.config.js b/apps/assets-overview/jest.config.js index d16f3da9d..fd60a61f4 100644 --- a/apps/assets-overview/jest.config.js +++ b/apps/assets-overview/jest.config.js @@ -8,7 +8,7 @@ module.exports = { testEnvironment: "jsdom", setupFilesAfterEnv: ["/setupTests.js"], transformIgnorePatterns: [ - "node_modules/(?!(juno-ui-components|messages-provider)/)", + "node_modules/(?!(juno-ui-components|messages-provider|url-state-router|utils)/)", ], moduleNameMapper: { // Jest currently doesn't support resources with query parameters. diff --git a/apps/exampleapp/jest.config.js b/apps/exampleapp/jest.config.js index 5f65d6a46..33ea7ddfe 100644 --- a/apps/exampleapp/jest.config.js +++ b/apps/exampleapp/jest.config.js @@ -7,7 +7,9 @@ module.exports = { transform: { "\\.[jt]sx?$": "babel-jest" }, testEnvironment: "jsdom", setupFilesAfterEnv: ["/setupTests.js"], - transformIgnorePatterns: ["node_modules/(?!(juno-ui-components)/)"], + transformIgnorePatterns: [ + "node_modules/(?!(juno-ui-components|oauth|messages-provider|utils)/)", + ], moduleNameMapper: { // Jest currently doesn't support resources with query parameters. // Therefore we add the optional query parameter matcher at the end diff --git a/apps/volta/jest.config.js b/apps/volta/jest.config.js index d16f3da9d..cd58e0648 100644 --- a/apps/volta/jest.config.js +++ b/apps/volta/jest.config.js @@ -8,7 +8,7 @@ module.exports = { testEnvironment: "jsdom", setupFilesAfterEnv: ["/setupTests.js"], transformIgnorePatterns: [ - "node_modules/(?!(juno-ui-components|messages-provider)/)", + "node_modules/(?!(juno-ui-components|messages-provider|utils)/)", ], moduleNameMapper: { // Jest currently doesn't support resources with query parameters. From 31d6365dd90508762a77bb9f4cc6a5bd03525c0b Mon Sep 17 00:00:00 2001 From: d064310 Date: Fri, 10 May 2024 15:01:38 +0200 Subject: [PATCH 04/26] ci: enable build-libs task again, to meet the star depenedncies from 'old' asstest deployed to prod --- ci/scripts/asset_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/asset_build.sh b/ci/scripts/asset_build.sh index b65ef05ea..832f32ae3 100755 --- a/ci/scripts/asset_build.sh +++ b/ci/scripts/asset_build.sh @@ -137,7 +137,7 @@ echo "generate COMMUNICATOR.md in $ASSET_PATH" node ci/scripts/generate_communication_readme.mjs --path="$ASSET_PATH" # install and build libs -# npm run build-libs +npm run build-libs # TEST AND BUILD ASSET # IGNORE_EXTERNALS=true will results in a bundle which includes all dependencies. From 30c08df635abad1dc5b1839eccaf80f9d586433d Mon Sep 17 00:00:00 2001 From: d064310 Date: Sat, 11 May 2024 06:26:10 +0200 Subject: [PATCH 05/26] ci: fix importmap generator, support URLs in dependencies --- ci/scripts/esm_build/generate_importmap.mjs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ci/scripts/esm_build/generate_importmap.mjs b/ci/scripts/esm_build/generate_importmap.mjs index 4156290c6..13caae029 100644 --- a/ci/scripts/esm_build/generate_importmap.mjs +++ b/ci/scripts/esm_build/generate_importmap.mjs @@ -162,10 +162,17 @@ for (let name in packageRegistry) { // if the package has peer dependencies, we need to add them to the importmap's scopes section for (let depName in pkg.peerDependencies) { - const depVersion = pkg.peerDependencies[depName] - const ownPackage = - packageRegistry[depName]?.[depVersion === "*" ? "latest" : depVersion] + let depVersion = pkg.peerDependencies[depName] + depVersion = depVersion === "*" ? "latest" : depVersion + // support URL as version + if (depVersion.startsWith("http")) { + // extract version from url. The version start directly after @ and is a sem version + depVersion = depVersion.match(/@([0-9]+\.[0-9]+\.[0-9]+)/)[1] + } + + const ownPackage = packageRegistry[depName]?.[depVersion] + //console.log("====", depName, depVersion, ownPackage) if (ownPackage) { log( yellow( From e758cfda56665b94f8015b09b63db578400b431f Mon Sep 17 00:00:00 2001 From: d064310 Date: Sat, 11 May 2024 06:47:01 +0200 Subject: [PATCH 06/26] ci: do not change depVersion while generating importmap --- ci/scripts/esm_build/generate_importmap.mjs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/ci/scripts/esm_build/generate_importmap.mjs b/ci/scripts/esm_build/generate_importmap.mjs index 13caae029..084e5a714 100644 --- a/ci/scripts/esm_build/generate_importmap.mjs +++ b/ci/scripts/esm_build/generate_importmap.mjs @@ -163,14 +163,18 @@ for (let name in packageRegistry) { // if the package has peer dependencies, we need to add them to the importmap's scopes section for (let depName in pkg.peerDependencies) { let depVersion = pkg.peerDependencies[depName] - depVersion = depVersion === "*" ? "latest" : depVersion - // support URL as version - if (depVersion.startsWith("http")) { - // extract version from url. The version start directly after @ and is a sem version - depVersion = depVersion.match(/@([0-9]+\.[0-9]+\.[0-9]+)/)[1] - } - const ownPackage = packageRegistry[depName]?.[depVersion] + let ownPackage = null + if (packageRegistry[depName]) { + depVersion = depVersion === "*" ? "latest" : depVersion + // support URL as version + if (depVersion.startsWith("http")) { + // extract version from url. The version start directly after @ and is a sem version + depVersion = depVersion.match(/@([0-9]+\.[0-9]+\.[0-9]+)/)[1] + } + + ownPackage = packageRegistry[depName]?.[depVersion] + } //console.log("====", depName, depVersion, ownPackage) if (ownPackage) { From a1a88fbb41d53a0e24e4f0cab5a3ea93d955017c Mon Sep 17 00:00:00 2001 From: d064310 Date: Mon, 13 May 2024 12:01:15 +0200 Subject: [PATCH 07/26] ci: do not run task 'build-libs' --- ci/scripts/asset_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/asset_build.sh b/ci/scripts/asset_build.sh index 832f32ae3..b65ef05ea 100755 --- a/ci/scripts/asset_build.sh +++ b/ci/scripts/asset_build.sh @@ -137,7 +137,7 @@ echo "generate COMMUNICATOR.md in $ASSET_PATH" node ci/scripts/generate_communication_readme.mjs --path="$ASSET_PATH" # install and build libs -npm run build-libs +# npm run build-libs # TEST AND BUILD ASSET # IGNORE_EXTERNALS=true will results in a bundle which includes all dependencies. From f265c7381fa6d9fc02e1ce39ec2a0cfd11573e32 Mon Sep 17 00:00:00 2001 From: Franz Heidl Date: Wed, 15 May 2024 14:24:06 +0200 Subject: [PATCH 08/26] Navigation rework (#598) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [ui] add internal Navigation, NavigtaionItem components WIP * [ui] NavigationIem: add stories * [ui] Navigation: add first test * [ui] Navigation: remove unnecessary wrapper div * [ui] NavigationItem: render button or link * [ui] NavigationItem: add wrapperClassName prop, aria-disabled and aria-selected attrs * [ui] Navigation: add aria-disabled attribute * [ui] Navigation: add more tests * [ui] NavigationItem: properly disable link items, too * [ui] Navigation: add className, arbitrary props test * [ui] Navigation: render arbitrary props * [ui] Navigation, -Item: add link stories * [ui] Navigation: add WIP stories * [ui] fix storybook build for now use proper comment syntax for copyright and license information in .mdx files * [ui] Navigation: WIP: determine selected item by key or any relevant item value * [ui] Navigation: stories: add missing keys * [ui] Navigation: add more tests * [ui] Navigation: add more tests for setting the activeItem * [ui] Navigation: add re-rendering tests for activeItem prop * Automatic application of license header * [ui] Navigation: add remaining tests for settign the active item initially uncomment and skip not working event handler test * [ui] Navigation: add skipped test * [ui] Navigation: actually skip test as per prev commit message * [ui] NavigationItem: make sure component renders ok outside of parent context, too * [ui] Navigation, -Item: add navigationItem tests properly use setup() and waitFor for navigation tests, still skipping * Automatic application of license header * [ui] Navigation: add another (skipped) test * [ui] Navigation: fix typo in test description * [ui] Navigation: re-work tests so they work with cross-ontext/-component callbacks * [ui] NavigationItem: Tests. add comment * [ui] NavigationItem: render icon * [ui] NavigationItem: center items (icon etc.) * [ui] Navigation: rename prop for clarity `role` -> `navigationRole` to differentiate from aria role * [ui] NavigationItem: Test: reflect changed prop name in test * [ui] Navigation: don’t use default navigationRole prop * [ui] NavigationItem: accept activeItemStyles prop make sure the wrapping component can supply specific active styles, too. * [ui] SideNavigation, -Item: rework to thin wrappers around Navigation, -Item * [ui] SideNavigationItem: remove obsolete imports * [ui] SideNavigation: pass navigationRole prop to Navigation * [ui] NavigationItem: render combined `[navigationRole]-item-active` class * [ui] TopNavigation, -Item: re-work to wrap Navigation, -Item components * [ui] NavigationItem: allow passing inactive Styles that would otherwise be overwirtten by defaultStyles * [ui] TabNavigation, -Item: re-work to wrap Navigation, -Item * [ui] TabNavigation, -Item: render a class to represent tabStyle * [ui] TabNavigation, -Item: make tests work * [ui] Navigation: add docs * [ui] NavigationItem: remove activeStyles, add docs, fix ariaLabel prop name only supply the most basic common styles with this component, rely on the wrapping role-specific components to prove the rest * [ui] Side-, Tab-, TopNavigationItem: add bold styles for active state * [ui] Navigation: remove `navigationRole` prop Make Navigation agnostic of the various types of navigations, update tests accordingly. * [ui] bump version to 2.14.0 * [ui] TabNavigation. TopNavigation: Update story descriptions --------- Co-authored-by: License Bot --- libs/juno-ui-components/package.json | 2 +- .../Navigation/Navigation.component.js | 134 ++ .../Navigation/Navigation.stories.js | 155 ++ .../components/Navigation/Navigation.test.js | 1524 +++++++++++++++++ .../src/components/Navigation/index.js | 6 + .../NavigationItem.component.js | 216 +++ .../NavigationItem/NavigationItem.stories.js | 75 + .../NavigationItem/NavigationItem.test.js | 150 ++ .../src/components/NavigationItem/index.js | 6 + .../SideNavigation.component.js | 58 +- .../SideNavigation/SideNavigation.stories.js | 93 +- .../SideNavigation/SideNavigation.test.js | 59 +- .../SideNavigationItem.component.js | 137 +- .../SideNavigationItem.test.js | 8 +- .../TabNavigation/TabNavigation.component.js | 58 +- .../TabNavigation/TabNavigation.stories.js | 132 +- .../TabNavigation/TabNavigation.test.js | 47 +- .../TabNavigationItem.component.js | 159 +- .../TabNavigationItem.stories.js | 28 +- .../TabNavigationItem.test.js | 10 +- .../TopNavigation/TopNavigation.component.js | 60 +- .../TopNavigation/TopNavigation.stories.js | 86 +- .../TopNavigation/TopNavigation.test.js | 195 ++- .../TopNavigationItem.component.js | 132 +- .../TopNavigationItem.test.js | 153 +- 25 files changed, 2852 insertions(+), 831 deletions(-) create mode 100644 libs/juno-ui-components/src/components/Navigation/Navigation.component.js create mode 100644 libs/juno-ui-components/src/components/Navigation/Navigation.stories.js create mode 100644 libs/juno-ui-components/src/components/Navigation/Navigation.test.js create mode 100644 libs/juno-ui-components/src/components/Navigation/index.js create mode 100644 libs/juno-ui-components/src/components/NavigationItem/NavigationItem.component.js create mode 100644 libs/juno-ui-components/src/components/NavigationItem/NavigationItem.stories.js create mode 100644 libs/juno-ui-components/src/components/NavigationItem/NavigationItem.test.js create mode 100644 libs/juno-ui-components/src/components/NavigationItem/index.js diff --git a/libs/juno-ui-components/package.json b/libs/juno-ui-components/package.json index 9d95639a3..c77e16232 100644 --- a/libs/juno-ui-components/package.json +++ b/libs/juno-ui-components/package.json @@ -5,7 +5,7 @@ "module": "build/index.js", "source": "src/index.js", "style": "build/lib/variables.css", - "version": "2.13.8", + "version": "2.14.0", "files": [ "src/colors.css", "tailwind.config.js" diff --git a/libs/juno-ui-components/src/components/Navigation/Navigation.component.js b/libs/juno-ui-components/src/components/Navigation/Navigation.component.js new file mode 100644 index 000000000..32c276c6e --- /dev/null +++ b/libs/juno-ui-components/src/components/Navigation/Navigation.component.js @@ -0,0 +1,134 @@ +/* + * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import React, { createContext, useEffect, useState } from "react" +import PropTypes from "prop-types" +import { NavigationItem } from "../NavigationItem/" + +export const NavigationContext = createContext() + +/** A generic Navigation component providing all the necessary functionality for a navigation. For internal use only. Not to be used directly, but to be wrapped by more role-specific / semantic navigation components such as `TabNavigation`, `TopNavigation`, `SideNavigation`. */ +export const Navigation = ({ + activeItem, + ariaLabel, + children, + className, + disabled, + onActiveItemChange, + onChange, + ...props +}) => { + const [activeItm, setActiveItm] = useState("") + const [items, setItems] = useState(new Map()) + + const findItemIdByKeyValue = (valueToFind) => { + // The prioritized sequence of individual item keys to check for a value: + const prioritizedKeys = ["value", "children", "label"] + const itemsKeys = Array.from(items.keys()) + if (itemsKeys.includes(valueToFind)) { + // return the value if it is found in the keys of the items map + return valueToFind + } else { + // If the value is not found in the keys of the items map, search for the value in the individual items according to the sequence in prioritizedKeys. If a matching item is found, return its id or null: + let foundItemId + for (let [key, obj] of items.entries()) { + prioritizedKeys.forEach((pKey) => { + if (obj[pKey] === valueToFind) { + foundItemId = obj.id + } + }) + } + return foundItemId + } + } + + useEffect(() => { + if (activeItem) { + const activeItemId = findItemIdByKeyValue(activeItem) + setActiveItm(activeItemId) + } + }, [activeItem]) + + // Re-evaluate active item when items map changes (essential to set the active item properly on first render!): + useEffect(() => { + if (activeItem) { + const activeItemId = findItemIdByKeyValue(activeItem) + setActiveItm(activeItemId) + } + }, [items]) + + // Key is set as established by the child item according to priority: value || children || label + const addItem = (key, children, label, value) => { + setItems((oldMap) => + new Map(oldMap).set(key, { + id: key, // store the associated key of the item in the map inside the object, so we can easily get the key later if we have to find an object by any of its keys + value: value, + label: label, + children: children, + displayName: children || label || value, // priority of what to actually render in each item + }) + ) + } + + const handleActiveItemChange = (key) => { + setActiveItm(key) + onActiveItemChange && onActiveItemChange(key) + } + + return ( + +
      + {children} +
    +
    + ) +} + +// TODO: validate whether children are instances of NavigationItem + +Navigation.propTypes = { + /** The currently active item. Pass the `value`, `label` prop, or the child string of the respective NavigationItem. */ + activeItem: PropTypes.string, + /** The aria label of the navigation */ + arialLabel: PropTypes.string, + /** The child navigation items of the navigation */ + children: PropTypes.oneOfType([ + PropTypes.node, + PropTypes.arrayOf(PropTypes.node), + ]), + /** Pass a custom className to the navigation parent element */ + className: PropTypes.string, + /** Whether the navigation is disabled. Will disable all children. */ + disabled: PropTypes.bool, + /** Handler to execute when the active item changes. Alias to `onChange`. */ + onActiveItemChange: PropTypes.func, + /** Handler to execute when the active item changes. Alias to `onActiveItemChange`. */ + onChange: PropTypes.func, +} + +Navigation.defaultProps = { + activeItem: "", + ariaLabel: "", + children: null, + className: "", + disabled: false, + onActiveItemChange: undefined, + onChange: undefined, +} diff --git a/libs/juno-ui-components/src/components/Navigation/Navigation.stories.js b/libs/juno-ui-components/src/components/Navigation/Navigation.stories.js new file mode 100644 index 000000000..513e88236 --- /dev/null +++ b/libs/juno-ui-components/src/components/Navigation/Navigation.stories.js @@ -0,0 +1,155 @@ +/* + * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import React from "react" +import { Navigation } from "./index.js" +import { NavigationItem } from "../NavigationItem/" + +export default { + title: "Internal/Navigation", + component: Navigation, + argTypes: { + children: { + control: false, + }, + role: { + options: ["TabNavigation", "TopNavigation", "SideNavigation"], + control: { type: "select" }, + }, + }, +} + +const Template = ({ children, ...props }) => ( + {children} +) + +export const DefaultWithChildren = { + render: Template, + args: { + activeItem: "Item 1", + children: [ + Item 1, + Item 2, + Item 3, + + Item 4 + , + ], + }, +} + +export const WithValuesAndLabels = { + render: Template, + args: { + children: [ + , + , + , + ], + }, +} + +export const WithValuesLabelsAndChildren = { + render: Template, + args: { + children: [ + + Item 1 + , + + Item 2 + , + + Item 3 + , + ], + }, +} + +export const ValuesOnly = { + render: Template, + args: { + children: [ + , + , + , + ], + }, +} + +export const WithActiveItemByValue = { + render: Template, + args: { + activeItem: "item-2", + children: [ + , + , + , + ], + }, +} + +// TODO: +export const WithActiveItemByLabel = { + render: Template, + args: { + activeItem: "Item 2", + children: [ + , + , + , + ], + }, +} + +// TODO: +export const WithActiveItemByChild = { + render: Template, + args: { + activeItem: "Item 2", + children: [ + + Item 1 + , + + Item 2 + , + + Item 3 + , + ], + }, +} + +export const Disabled = { + render: Template, + args: { + disabled: true, + children: [ + Item 1, + + Item 2 + , + Item 3, + ], + }, +} + +export const ItemsAsLinks = { + render: Template, + args: { + children: [ + + Link 1 + , + + Link 2 + , + + Link 3 + , + ], + }, +} diff --git a/libs/juno-ui-components/src/components/Navigation/Navigation.test.js b/libs/juno-ui-components/src/components/Navigation/Navigation.test.js new file mode 100644 index 000000000..757038ee9 --- /dev/null +++ b/libs/juno-ui-components/src/components/Navigation/Navigation.test.js @@ -0,0 +1,1524 @@ +/* + * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as React from "react" +import { render, screen, waitFor, cleanup, act } from "@testing-library/react" +import userEvent from "@testing-library/user-event" +import { Navigation } from "./index" +import { NavigationItem } from "../NavigationItem/index" + +const mockOnChange = jest.fn() +const mockOnActiveItemChange = jest.fn() + +describe("Navigation", () => { + afterEach(() => { + cleanup() + jest.clearAllMocks() + }) + + test("renders a Navigation", async () => { + render() + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.getByRole("navigation")).toHaveClass("juno-navigation") + }) + + test("renders children as passed", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + }) + + test("renders an aria-label as passed", async () => { + render() + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.getByRole("navigation")).toHaveAttribute( + "aria-label", + "describe the navigation" + ) + }) + + test("renders a disabled navigation as passed", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.getByRole("navigation")).toHaveAttribute( + "aria-disabled", + "true" + ) + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).toBeDisabled() + expect(screen.getByRole("button", { name: "Item 1" })).toHaveAttribute( + "aria-disabled", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toBeDisabled() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-disabled", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toBeDisabled() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-disabled", + "true" + ) + }) + + // Test setting the activeItem initially: + + test("renders an active item as passed to the parent by child content when only content is given", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child content when content and label are given", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child content when content and value are given", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child content when content, label, and value are given", async () => { + render( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child value when only value is given", async () => { + render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "item-1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child value when value and label are given", async () => { + render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child value when value and child content are given", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child value when value, label, and child content are given", async () => { + render( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child label when only label is given", async () => { + render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child label when value and label are given", async () => { + render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child label when label and child content are given", async () => { + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("renders an active item as passed to the parent by child label when value, label, and child content are given", async () => { + render( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + }) + + // Test re-rendering / updating the activeItem: + + test("re-renders the activeItem when passed by child content when only child content is given", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child content when child content and value are given", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child content when child content and child label are given", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child content when child content, value, and label are given", async () => { + const { rerender } = render( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child value when only child value is given", async () => { + const { rerender } = render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "item-1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "item-1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child value when child value and label are given", async () => { + const { rerender } = render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "item-1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "item-1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "item-3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "item-3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "item-3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child value when child value and child content are given", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child value when child value, label, and child content are given", async () => { + const { rerender } = render( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child label when only child label is given", async () => { + const { rerender } = render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).toHaveAttribute("aria-selected", "true") + expect(screen.getByRole("button", { name: "Item 2 Label" })).toHaveClass( + "juno-navigation-item-active" + ) + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + rerender( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).toHaveAttribute("aria-selected", "true") + expect(screen.getByRole("button", { name: "Item 3 Label" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child label when child label and child content are given", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("re-renders the activeItem when passed by child label when child label and child value are given", async () => { + const { rerender } = render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).toHaveAttribute("aria-selected", "true") + expect(screen.getByRole("button", { name: "Item 2 Label" })).toHaveClass( + "juno-navigation-item-active" + ) + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + rerender( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 1 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).not.toHaveAttribute("aria-selected", "true") + expect( + screen.getByRole("button", { name: "Item 2 Label" }) + ).not.toHaveClass("juno-navigation-item-active") + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).toBeInTheDocument() + expect( + screen.getByRole("button", { name: "Item 3 Label" }) + ).toHaveAttribute("aria-selected", "true") + expect(screen.getByRole("button", { name: "Item 3 Label" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + // + test("re-renders the activeItem when passed by child label when child label, child value, and child content are given", async () => { + const { rerender } = render( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).not.toHaveClass( + "juno-navigation-item-active" + ) + rerender( + + + Item 1 + + + Item 2 + + + Item 3 + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + expect(screen.queryAllByRole("button")).toHaveLength(3) + expect(screen.getByRole("button", { name: "Item 1" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 1" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 2" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 2" })).not.toHaveClass( + "juno-navigation-item-active" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Item 3" })).toHaveAttribute( + "aria-selected", + "true" + ) + expect(screen.getByRole("button", { name: "Item 3" })).toHaveClass( + "juno-navigation-item-active" + ) + }) + + test("executes an onActiveItemChange handler when the user clicks an item and the active item changes", async () => { + // Use a callback to change a variable so we can double-check whether this was executed across context-/component borders: + let callbackWasExecuted = 0 + const onActiveItemChangeCallback = () => { + callbackWasExecuted = 1 + } + render( + + + + + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + const user = userEvent.setup() + const itemToClick = screen.getByRole("button", { name: "Item 2" }) + waitFor(() => { + user.click(itemToClick) + expect(onActiveItemChangeCallback).toHaveBeenCalled() + expect(callbackWasExecuted).toBe(1) + }) + }) + + test("executes an onChange handler when the user clicks an item", async () => { + // Use a callback to change a variable so we can double-check whether this was executed across context-/component borders: + let clickCallbackWasExecuted = 0 + const onChangeCallback = () => { + clickCallbackWasExecuted = 1 + } + render( + + Item 1 + Item 2 + Item 3 + + ) + expect(screen.getByRole("navigation")).toBeInTheDocument() + const user = userEvent.setup() + const itemToClick = screen.getByRole("button", { name: "Item 2" }) + waitFor(() => { + user.click(itemToClick) + expect(onChangeCallback).toHaveBeenCalled() + expect(clickCallbackWasExecuted).toBe(1) + }) + }) + + test("executes an onChange handler when the active item was changed programmatically", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(mockOnChange).not.toHaveBeenCalled() + waitFor(() => { + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(mockOnChange).toHaveBeenCalled() + }) + }) + + test("executes an onActiveItemChange handler when the active item was changed programmatically", async () => { + const { rerender } = render( + + Item 1 + Item 2 + Item 3 + + ) + expect(mockOnChange).not.toHaveBeenCalled() + waitFor(() => { + rerender( + + Item 1 + Item 2 + Item 3 + + ) + expect(mockOnActiveItemChange).toHaveBeenCalled() + }) + }) + + test("renders custom classNames as passed", async () => { + render() + expect(screen.getByRole("navigation")).toHaveClass("my-custom-class") + }) + + test("renders all props as passed", async () => { + render() + expect(screen.getByRole("navigation")).toHaveAttribute( + "data-lol", + "Prop goes here" + ) + }) +}) diff --git a/libs/juno-ui-components/src/components/Navigation/index.js b/libs/juno-ui-components/src/components/Navigation/index.js new file mode 100644 index 000000000..0ed30bd3f --- /dev/null +++ b/libs/juno-ui-components/src/components/Navigation/index.js @@ -0,0 +1,6 @@ +/* + * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { Navigation } from "./Navigation.component" diff --git a/libs/juno-ui-components/src/components/NavigationItem/NavigationItem.component.js b/libs/juno-ui-components/src/components/NavigationItem/NavigationItem.component.js new file mode 100644 index 000000000..8b40794cc --- /dev/null +++ b/libs/juno-ui-components/src/components/NavigationItem/NavigationItem.component.js @@ -0,0 +1,216 @@ +/* + * SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import React, { useContext, useEffect, useState } from "react" +import PropTypes from "prop-types" +import { NavigationContext } from "../Navigation/Navigation.component" +import { Icon } from "../Icon/index.js" +import { knownIcons } from "../Icon/Icon.component.js" + +const itemStyles = ` + jn-flex + jn-items-center +` + +const disabledStyles = ` + jn-opacity-50 + jn-cursor-not-allowed +` + +/** A generic Navigation Item component. For internal use only. Use to wrap more semantic, role-specific navigation item components such as `SidenavigationItem`, `TabNavigationItem` , `TopNavigationItem` around. */ +export const NavigationItem = ({ + active, + activeItemStyles, + ariaLabel, + children, + className, + disabled, + icon, + inactiveItemStyles, + label, + href, + onClick, + value, + wrapperClassName, + ...props +}) => { + const navigationContext = useContext(NavigationContext) + + // Create a unique Identifier to a) identify the active item with the parent, b) as a key in the map of items with the parent, and c) to be returned by interested event handlers. + const theKey = value || children || label + + const { + activeItem: activeItem, + addItem: addItem, + handleActiveItemChange: handleActiveItemChange, + navigationDisabled: navigationDisabled, + navigationRole: navigationRole, + } = navigationContext || {} + + // Determine whether the item is initially set to active via the parent navigation component or by its own devices: + const initialActive = () => { + if (navigationContext?.activeItem?.length > 0) { + return activeItem === theKey + } else { + return active + } + } + + const [isActive, setIsActive] = useState(() => initialActive()) + + useEffect(() => { + // only add the item to the parent if we are in a context and addItem method exists: + addItem ? addItem(theKey, children, label, value) : undefined + }, [children, label, value]) + + useEffect(() => { + if (activeItem) { + activeItem === theKey ? setIsActive(true) : setIsActive(false) + return + } + setIsActive(active) + }, [activeItem, active]) + + const handleClick = (event) => { + if (disabled) { + event.preventDefault() + } else { + if ( + !isActive && + handleActiveItemChange && + typeof handleActiveItemChange === "function" + ) { + handleActiveItemChange(theKey) + } + onClick && onClick(event) + } + } + + return ( +
  4. + {href && href.length ? ( + + {icon ? : ""} + {children || label || value} + + ) : ( + + )} +
  5. + ) +} + +NavigationItem.propTypes = { + /** Whether the navigation item is the currently active item. If an acitve item is set on the parent, the one on the parent will win. */ + active: PropTypes.bool, + /** Styles to apply to the active item*/ + activeItemStyles: PropTypes.string, + /** The aria-label of the item */ + ariaLabel: PropTypes.string, + /** Pass custom classNames to the item itself. */ + className: PropTypes.string, + /** The child string of the item. Will override `label` when passed. */ + children: PropTypes.string, + /** Whether the item is disabled */ + disabled: PropTypes.bool, + /** An icon to render in the item */ + icon: PropTypes.oneOf(knownIcons), + /* Pass styles that apply to IN-active items only, in the event activeStyles are overwritten by defaultStyles affecting the same CSS property*/ + inactiveItemStyles: PropTypes.string, + /** The label of the item. Will be rendered if no children are passed */ + label: PropTypes.string, + /** The href of the item. The item will be rendered as an `` element when passed, instead of a ` - )} -