├── .browserslistrc ├── .editorconfig ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ ├── documentation.yml │ └── feature-request.yml ├── PULL_REQUEST_TEMPLATE.md ├── createIssueCommentsForRelease.mjs ├── dependabot.yml ├── in-solidarity.yml ├── renovate.json └── workflows │ ├── chromatic.yml │ ├── codeql-analysis.yml │ ├── docs-stable.yml │ ├── examples.yml │ ├── main.yml │ ├── open-source-security.yml │ ├── release-comments.yml │ ├── release-custom-tag.yml │ ├── release-snapshot.yml │ ├── release.yml │ ├── stale.yml │ └── test.yml ├── .gitignore ├── .husky └── pre-commit ├── .nvmrc ├── .pipeline └── config.yml ├── .prettierignore ├── .storybook ├── addons │ └── version-switch │ │ └── manager.ts ├── components │ ├── ArgTypesWithNote.module.css │ ├── ArgTypesWithNote.tsx │ ├── CommandsAndQueries.tsx │ ├── ControlsWithNote.module.css │ ├── ControlsWithNote.tsx │ ├── DocsHeader.module.css │ ├── DocsHeader.tsx │ ├── DomRefTable.module.css │ ├── DomRefTable.tsx │ ├── FilterBarExample.module.css │ ├── FilterBarExample.tsx │ ├── Footer.module.css │ ├── Footer.tsx │ ├── GitHub-Mark.tsx │ ├── Import.tsx │ ├── LabelWithWrapping.tsx │ ├── ProductsTable.tsx │ ├── ProjectTemplate.module.css │ ├── ProjectTemplate.tsx │ ├── SplitterElementContent.tsx │ ├── StoryCarousel.tsx │ ├── TableOfContent.tsx │ ├── ToC.module.css │ ├── VersionSwitch.tsx │ ├── VersionTable.tsx │ ├── index.ts │ ├── languageCodes.json │ └── products.json ├── custom-element-manifests │ ├── ai.json │ ├── fiori.json │ └── main.json ├── demoImages │ ├── Laptop1.jpg │ ├── Laptop2.jpg │ ├── PC1.jpg │ ├── PC2.jpg │ └── Person.png ├── docs │ ├── DesignCompliantExampleSection.md │ └── SubcomponentsSection.md ├── images-dev │ └── favicon.ico ├── images │ ├── .nojekyll │ ├── favicon.ico │ ├── googleda3b81df2a761821.html │ ├── logo-cra.svg │ ├── logo-nextjs.svg │ ├── logo-react-router.svg │ ├── logo-ts.png │ ├── logo-vitejs.svg │ └── master │ │ └── index.html ├── main.ts ├── manager-head.html ├── manager.js ├── mockData │ ├── Friends50.json │ ├── Friends500.json │ ├── FriendsManualSelect25.json │ ├── FriendsTree.json │ ├── NameAge50.json │ └── generateMessageItems.tsx ├── preview-head.html ├── preview.tsx ├── theme.js ├── tsconfig.json └── utils.ts ├── .yarn └── releases │ └── yarn-4.9.1.cjs ├── .yarnrc.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── LICENSES ├── Apache-2.0.txt └── MIT.txt ├── README.md ├── REUSE.toml ├── assets ├── Logo-Sticker.png ├── Logo.png ├── SAP_Best_R_grad_blk_scrn.png └── ui5-logo.svg ├── config ├── .gitmessage ├── layers-plugin.js ├── merge-css-modules.js ├── paths.js ├── postcss-config-factory.js └── version-info.json ├── cypress.config.ts ├── cypress └── support │ ├── commands.tsx │ ├── component-index.html │ ├── component.tsx │ └── utils.tsx ├── docs ├── Changelog.mdx ├── EmbeddedStackBlitz.tsx ├── Formhandling.mdx.outdated ├── Guidelines.md ├── MigrationGuide.archive.md ├── MigrationGuide.css ├── MigrationGuide.mdx ├── Patterns.mdx ├── ProjectTemplates.mdx ├── ReadMeAI.mdx ├── ReadMeCharts.mdx ├── ReadMeCompat.mdx ├── UXCIntegration.tsx ├── Welcome.mdx ├── knowledge-base │ ├── BringYourOwnWebComponents.mdx │ ├── ChangeEvents.mdx │ ├── CommonCSS.mdx │ ├── CustomComponentsSlots.mdx │ ├── FAQ.mdx │ ├── Internationalization.mdx │ ├── Public-Utils.mdx │ ├── ServerSideRendering.mdx │ ├── SsrLimitations.tsx │ └── Styling.mdx ├── knowledgeBaseExamples │ ├── ThemeableThemingParameters.tsx │ ├── formExamples.tsx │ └── slotExamples.tsx └── styling │ ├── CssPartsExample.css │ ├── CssPartsExample.tsx │ ├── MyCustomElement.css │ └── MyCustomElement.tsx ├── eslint.config.mjs ├── examples ├── nextjs-app │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── components │ │ │ ├── AppShell.tsx │ │ │ ├── AppShellBar.module.css │ │ │ ├── AppShellBar.tsx │ │ │ └── TodoList.tsx │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── loading.module.css │ │ ├── loading.tsx │ │ ├── mockData │ │ │ └── todos.ts │ │ ├── page.tsx │ │ └── todos │ │ │ └── [id] │ │ │ └── page.tsx │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ │ └── next.svg │ └── tsconfig.json ├── nextjs-pages │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── components │ │ └── AppShell │ │ │ ├── AppShell.module.css │ │ │ └── index.tsx │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── pages │ │ ├── _app.tsx │ │ ├── api │ │ │ ├── todos.ts │ │ │ └── todos │ │ │ │ └── [id].ts │ │ ├── index.module.css │ │ ├── index.tsx │ │ └── todos │ │ │ └── [id].tsx │ ├── public │ │ └── next.svg │ ├── styles │ │ └── globals.css │ └── tsconfig.json ├── react-router-ts │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── components │ │ │ ├── AppShell.tsx │ │ │ ├── AppShellBar.module.css │ │ │ ├── AppShellBar.tsx │ │ │ └── TodoList.tsx │ │ ├── globals.css │ │ ├── mockData │ │ │ └── todos.ts │ │ ├── root.tsx │ │ ├── routes.ts │ │ └── routes │ │ │ ├── index.tsx │ │ │ └── todo.tsx │ ├── eslint.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── public │ │ └── favicon.ico │ ├── react-router.config.ts │ ├── tsconfig.json │ └── vite.config.ts ├── remix-ts │ └── README.md └── vite-ts │ ├── .gitignore │ ├── README.md │ ├── cypress.config.ts │ ├── cypress │ ├── e2e │ │ └── App.cy.tsx │ ├── fixtures │ │ └── example.json │ └── support │ │ ├── commands.ts │ │ ├── component-index.html │ │ ├── component.tsx │ │ └── e2e.ts │ ├── eslint.config.mjs │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── person.png │ └── vite.svg │ ├── src │ ├── App.cy.tsx │ ├── AppShell.module.css │ ├── AppShell.tsx │ ├── ToDos.module.css │ ├── ToDos.tsx │ ├── TodoDetails.module.css │ ├── TodoDetails.tsx │ ├── index.css │ ├── main.tsx │ ├── mockImplementations │ │ ├── mockAPIs.ts │ │ └── mockData.ts │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── lerna.json ├── makefile ├── nx.json ├── package.json ├── packages ├── ai │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── Button │ │ │ │ ├── Button.mdx │ │ │ │ ├── Button.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── ButtonState │ │ │ │ └── index.tsx │ │ │ └── PromptInput │ │ │ │ ├── PromptInput.mdx │ │ │ │ ├── PromptInput.stories.tsx │ │ │ │ └── index.tsx │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── base │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── Device │ │ │ ├── EventProvider.ts │ │ │ ├── Media.cy.tsx │ │ │ ├── Media.ts │ │ │ ├── index.cy.tsx │ │ │ └── index.ts │ │ ├── hooks │ │ │ ├── index.ts │ │ │ ├── useCurrentTheme.ts │ │ │ ├── useI18nBundle.ts │ │ │ ├── useIsRTL.ts │ │ │ ├── useIsomorphicLayoutEffect.ts │ │ │ ├── useStylesheet.cy.tsx │ │ │ ├── useStylesheet.ts │ │ │ ├── useSyncRef.ts │ │ │ └── useViewportRange.ts │ │ ├── index.ts │ │ ├── stores │ │ │ ├── I18nStore.ts │ │ │ └── StyleStore.ts │ │ ├── styling │ │ │ ├── CssSizeVariables.ts │ │ │ └── ThemingParameters.ts │ │ ├── types │ │ │ ├── CommonProps.ts │ │ │ ├── Ui5CustomEvent.ts │ │ │ ├── Ui5DomRef.ts │ │ │ └── index.ts │ │ ├── utils │ │ │ ├── addCustomCSSWithScoping.ts │ │ │ ├── debounce.cy.ts │ │ │ ├── debounce.ts │ │ │ ├── index.ts │ │ │ ├── throttle.cy.ts │ │ │ └── throttle.ts │ │ └── wrapper │ │ │ ├── withWebComponent.cy.tsx │ │ │ └── withWebComponent.tsx │ ├── tsconfig.build.json │ └── tsconfig.json ├── charts │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── postcss.config.mjs │ ├── src │ │ ├── components │ │ │ ├── BarChart │ │ │ │ ├── BarChart.cy.tsx │ │ │ │ ├── BarChart.mdx │ │ │ │ ├── BarChart.stories.tsx │ │ │ │ ├── BarChart.tsx │ │ │ │ └── Placeholder.tsx │ │ │ ├── BulletChart │ │ │ │ ├── BulletChart.cy.tsx │ │ │ │ ├── BulletChart.mdx │ │ │ │ ├── BulletChart.stories.tsx │ │ │ │ ├── BulletChart.tsx │ │ │ │ ├── ComparisonLine.tsx │ │ │ │ └── Placeholder.tsx │ │ │ ├── ColumnChart │ │ │ │ ├── ColumnChart.cy.tsx │ │ │ │ ├── ColumnChart.mdx │ │ │ │ ├── ColumnChart.stories.tsx │ │ │ │ ├── ColumnChart.tsx │ │ │ │ └── Placeholder.tsx │ │ │ ├── ColumnChartWithTrend │ │ │ │ ├── ColumnChartWithTrend.cy.tsx │ │ │ │ ├── ColumnChartWithTrend.mdx │ │ │ │ ├── ColumnChartWithTrend.module.css │ │ │ │ ├── ColumnChartWithTrend.stories.tsx │ │ │ │ ├── ColumnChartWithTrend.tsx │ │ │ │ └── Placeholder.tsx │ │ │ ├── ComposedChart │ │ │ │ ├── ComposedChart.cy.tsx │ │ │ │ ├── ComposedChart.mdx │ │ │ │ ├── ComposedChart.stories.tsx │ │ │ │ ├── Placeholder.tsx │ │ │ │ └── index.tsx │ │ │ ├── DonutChart │ │ │ │ ├── DonutChart.cy.tsx │ │ │ │ ├── DonutChart.mdx │ │ │ │ ├── DonutChart.stories.tsx │ │ │ │ └── DonutChart.tsx │ │ │ ├── LineChart │ │ │ │ ├── LineChart.cy.tsx │ │ │ │ ├── LineChart.mdx │ │ │ │ ├── LineChart.stories.tsx │ │ │ │ ├── LineChart.tsx │ │ │ │ └── Placeholder.tsx │ │ │ ├── PieChart │ │ │ │ ├── PieChart.cy.tsx │ │ │ │ ├── PieChart.mdx │ │ │ │ ├── PieChart.module.css │ │ │ │ ├── PieChart.stories.tsx │ │ │ │ ├── PieChart.tsx │ │ │ │ └── Placeholder.tsx │ │ │ ├── RadarChart │ │ │ │ ├── RadarChart.cy.tsx │ │ │ │ ├── RadarChart.mdx │ │ │ │ ├── RadarChart.stories.tsx │ │ │ │ └── RadarChart.tsx │ │ │ ├── RadialChart │ │ │ │ ├── RadialChart.cy.tsx │ │ │ │ ├── RadialChart.mdx │ │ │ │ ├── RadialChart.stories.tsx │ │ │ │ └── RadialChart.tsx │ │ │ ├── ScatterChart │ │ │ │ ├── Placeholder.tsx │ │ │ │ ├── ScatterChart.cy.tsx │ │ │ │ ├── ScatterChart.mdx │ │ │ │ ├── ScatterChart.stories.tsx │ │ │ │ └── ScatterChart.tsx │ │ │ └── TimelineChart │ │ │ │ ├── Placeholder.tsx │ │ │ │ ├── TimeLineChart.cy.tsx │ │ │ │ ├── TimeLineChart.mdx │ │ │ │ ├── TimeLineChart.stories.tsx │ │ │ │ ├── TimelineChart.tsx │ │ │ │ ├── TimelineChartAnnotation.tsx │ │ │ │ ├── TimelineChartHeaders.tsx │ │ │ │ ├── chartbody │ │ │ │ ├── TimelineChartBody.tsx │ │ │ │ ├── TimelineChartGrid.tsx │ │ │ │ ├── TimelineChartLayer.tsx │ │ │ │ ├── TimelineChartRow.tsx │ │ │ │ └── TimelineConnections.tsx │ │ │ │ ├── examples │ │ │ │ ├── Annotations.tsx │ │ │ │ └── Dataset.ts │ │ │ │ ├── types │ │ │ │ └── TimelineChartTypes.ts │ │ │ │ └── util │ │ │ │ ├── TimelineChart.module.css │ │ │ │ ├── constants.ts │ │ │ │ ├── context.ts │ │ │ │ └── error.ts │ │ ├── hooks │ │ │ ├── useCancelAnimationFallback.ts │ │ │ ├── useChartMargin.ts │ │ │ ├── useLabelFormatter.cy.tsx │ │ │ ├── useLabelFormatter.ts │ │ │ ├── useLegendItemClick.ts │ │ │ ├── useLongestYAxisLabel.ts │ │ │ ├── useLongestYAxisLabelBar.ts │ │ │ ├── useObserveXAxisHeights.ts │ │ │ ├── useOnClickInternal.ts │ │ │ ├── usePrepareDimensionsAndMeasures.cy.tsx │ │ │ ├── usePrepareDimensionsAndMeasures.ts │ │ │ ├── usePrepareTrendMeasures.ts │ │ │ ├── useTooltipFormatter.cy.tsx │ │ │ └── useTooltipFormatter.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── ICartesianChartConfig.ts │ │ │ ├── IChartBaseProps.ts │ │ │ ├── IChartDimension.ts │ │ │ ├── IChartMeasure.ts │ │ │ └── IPolarChartConfig.ts │ │ ├── internal │ │ │ ├── ChartContainer.module.css │ │ │ ├── ChartContainer.tsx │ │ │ ├── ChartDataLabel.tsx │ │ │ ├── Utils.ts │ │ │ ├── XAxisTicks.tsx │ │ │ ├── YAxisTicks.tsx │ │ │ ├── defaults.ts │ │ │ └── staticProps.ts │ │ └── resources │ │ │ ├── DemoProps.tsx │ │ │ ├── LegendConfig.mdx │ │ │ ├── NormalizedStackedChart.mdx │ │ │ └── TooltipConfig.mdx │ ├── tsconfig.build.json │ └── tsconfig.json ├── cli │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── patches │ │ ├── @ui5+webcomponents-compat+2.11.0.patch │ │ └── @ui5+webcomponents-react-compat+2.10.1.patch │ ├── src │ │ ├── bin │ │ │ └── index.ts │ │ ├── scripts │ │ │ ├── codemod │ │ │ │ ├── main.ts │ │ │ │ └── transforms │ │ │ │ │ └── v2 │ │ │ │ │ ├── codemodConfig.json │ │ │ │ │ └── main.cts │ │ │ ├── create-wrappers │ │ │ │ ├── AbstractRenderer.ts │ │ │ │ ├── AttributesRenderer.ts │ │ │ │ ├── ComponentRenderer.ts │ │ │ │ ├── DomRefRenderer.ts │ │ │ │ ├── ExportsRenderer.ts │ │ │ │ ├── ImportsRenderer.ts │ │ │ │ ├── PropTypesRenderer.ts │ │ │ │ ├── WebComponentWrapper.ts │ │ │ │ └── main.ts │ │ │ └── resolve-cem │ │ │ │ └── main.ts │ │ └── util │ │ │ ├── cem-reader.ts │ │ │ ├── formatters.ts │ │ │ ├── recursiveManifestResolver.ts │ │ │ └── referenceResolver.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── compat │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── postcss.config.mjs │ ├── src │ │ ├── components │ │ │ ├── Loader │ │ │ │ ├── Loader.cy.tsx │ │ │ │ ├── Loader.mdx │ │ │ │ ├── Loader.module.css │ │ │ │ ├── Loader.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── OverflowToolbarButton │ │ │ │ └── index.tsx │ │ │ ├── OverflowToolbarToggleButton │ │ │ │ └── index.tsx │ │ │ ├── Table │ │ │ │ ├── Table.mdx │ │ │ │ ├── Table.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── TableCell │ │ │ │ └── index.tsx │ │ │ ├── TableColumn │ │ │ │ └── index.tsx │ │ │ ├── TableGroupRow │ │ │ │ └── index.tsx │ │ │ ├── TableRow │ │ │ │ └── index.tsx │ │ │ ├── Toolbar │ │ │ │ ├── OverflowPopover.tsx │ │ │ │ ├── Toolbar.cy.tsx │ │ │ │ ├── Toolbar.mdx │ │ │ │ ├── Toolbar.module.css │ │ │ │ ├── Toolbar.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── ToolbarSeparator │ │ │ │ ├── ToolbarSeparator.module.css │ │ │ │ └── index.tsx │ │ │ └── ToolbarSpacer │ │ │ │ └── index.tsx │ │ ├── enums │ │ │ ├── LoaderType.ts │ │ │ ├── ToolbarDesign.ts │ │ │ └── ToolbarStyle.ts │ │ ├── index.ts │ │ └── internal │ │ │ └── OverflowPopoverContext.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── cypress-commands │ ├── .gitignore │ ├── CHANGELOG.md │ ├── Commands.mdx │ ├── Queries.mdx │ ├── README.md │ ├── TestSetup.mdx │ ├── package.json │ ├── src │ │ ├── commands.ts │ │ ├── index.ts │ │ └── queries.ts │ ├── test │ │ └── UI5WebComponentsChild.cy.tsx │ ├── tsconfig.build.json │ └── tsconfig.json └── main │ ├── .babelrc.json │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── babel-plugin-ssr.mjs │ ├── package.json │ ├── postcss.config.mjs │ ├── scripts │ ├── create-enum-export.mjs │ └── generateI18n.mjs │ ├── src │ ├── components │ │ ├── ActionSheet │ │ │ ├── ActionSheet.cy.tsx │ │ │ ├── ActionSheet.mdx │ │ │ ├── ActionSheet.module.css │ │ │ ├── ActionSheet.stories.tsx │ │ │ └── index.tsx │ │ ├── AnalyticalCardHeader │ │ │ ├── AnalyticalCardHeader.cy.tsx │ │ │ ├── AnalyticalCardHeader.mdx │ │ │ ├── AnalyticalCardHeader.module.css │ │ │ ├── AnalyticalCardHeader.stories.tsx │ │ │ └── index.tsx │ │ ├── AnalyticalTable │ │ │ ├── AnalyticalTable.cy.tsx │ │ │ ├── AnalyticalTable.mdx │ │ │ ├── AnalyticalTable.module.css │ │ │ ├── AnalyticalTable.stories.tsx │ │ │ ├── AnalyticalTableHooks.mdx │ │ │ ├── AnalyticalTableHooks.stories.tsx │ │ │ ├── ColumnHeader │ │ │ │ ├── ColumnHeaderContainer.tsx │ │ │ │ └── index.tsx │ │ │ ├── PluginAnnounceEmptyCells.mdx │ │ │ ├── PluginDisableRowSelection.mdx │ │ │ ├── PluginIndeterminateRowSelection.mdx │ │ │ ├── PluginManualRowSelect.mdx │ │ │ ├── PluginOnColumnResize.mdx │ │ │ ├── PluginOrderedMultiSort.mdx │ │ │ ├── Recipes.mdx │ │ │ ├── TableBody │ │ │ │ ├── EmptyRow.tsx │ │ │ │ ├── RowSubComponent.tsx │ │ │ │ ├── VirtualTableBody.tsx │ │ │ │ └── VirtualTableBodyContainer.tsx │ │ │ ├── TitleBar │ │ │ │ └── index.tsx │ │ │ ├── VerticalResizer.tsx │ │ │ ├── defaults │ │ │ │ ├── Column │ │ │ │ │ ├── Cell.tsx │ │ │ │ │ ├── ColumnHeaderModal.tsx │ │ │ │ │ ├── Expandable.tsx │ │ │ │ │ ├── Grouped.tsx │ │ │ │ │ ├── PopIn.tsx │ │ │ │ │ ├── RepeatedValue.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── FilterComponent │ │ │ │ │ └── index.tsx │ │ │ │ ├── LoadingComponent │ │ │ │ │ ├── TablePlaceholder.module.css │ │ │ │ │ └── TablePlaceholder.tsx │ │ │ │ └── NoDataComponent │ │ │ │ │ └── index.tsx │ │ │ ├── hooks │ │ │ │ ├── useA11y.ts │ │ │ │ ├── useAutoResize.tsx │ │ │ │ ├── useDragAndDrop.ts │ │ │ │ ├── useDynamicColumnWidths.ts │ │ │ │ ├── useKeyboardNavigation.ts │ │ │ │ ├── usePopIn.ts │ │ │ │ ├── useResizeColumnsConfig.ts │ │ │ │ ├── useRowHighlight.tsx │ │ │ │ ├── useRowNavigationIndicator.tsx │ │ │ │ ├── useRowSelectionColumn.tsx │ │ │ │ ├── useSelectionChangeCallback.ts │ │ │ │ ├── useSingleRowStateSelection.ts │ │ │ │ ├── useStyling.ts │ │ │ │ ├── useTableScrollHandles.ts │ │ │ │ ├── useToggleRowExpand.ts │ │ │ │ └── useVisibleColumnsWidth.ts │ │ │ ├── index.tsx │ │ │ ├── pluginHooks │ │ │ │ ├── AnalyticalTableHooks.ts │ │ │ │ ├── useAnnounceEmptyCells.ts │ │ │ │ ├── useIndeterminateRowSelection.tsx │ │ │ │ ├── useManualRowSelect.ts │ │ │ │ ├── useOnColumnResize.ts │ │ │ │ ├── useOrderedMultiSort.ts │ │ │ │ └── useRowDisableSelection.tsx │ │ │ ├── scrollbars │ │ │ │ └── VerticalScrollbar.tsx │ │ │ ├── tableReducer │ │ │ │ └── stateReducer.ts │ │ │ ├── types │ │ │ │ └── index.ts │ │ │ └── util │ │ │ │ └── index.ts │ │ ├── FilterBar │ │ │ ├── FilterBar.cy.tsx │ │ │ ├── FilterBar.mdx │ │ │ ├── FilterBar.module.css │ │ │ ├── FilterBar.stories.tsx │ │ │ ├── FilterBarDialog.module.css │ │ │ ├── FilterDialog.tsx │ │ │ ├── index.tsx │ │ │ └── types.ts │ │ ├── FilterGroupItem │ │ │ ├── FilterGroupItem.module.css │ │ │ ├── index.tsx │ │ │ └── types.ts │ │ ├── FlexBox │ │ │ ├── FlexBox.cy.tsx │ │ │ ├── FlexBox.mdx │ │ │ ├── FlexBox.module.css │ │ │ ├── FlexBox.stories.tsx │ │ │ └── index.tsx │ │ ├── Grid │ │ │ ├── Grid.cy.tsx │ │ │ ├── Grid.mdx │ │ │ ├── Grid.module.css │ │ │ ├── Grid.stories.tsx │ │ │ └── index.tsx │ │ ├── MessageBox │ │ │ ├── MessageBox.cy.tsx │ │ │ ├── MessageBox.mdx │ │ │ ├── MessageBox.module.css │ │ │ ├── MessageBox.stories.tsx │ │ │ └── index.tsx │ │ ├── MessageView │ │ │ ├── MessageItem.module.css │ │ │ ├── MessageItem.tsx │ │ │ ├── MessageView.cy.tsx │ │ │ ├── MessageView.mdx │ │ │ ├── MessageView.module.css │ │ │ ├── MessageView.stories.tsx │ │ │ ├── index.tsx │ │ │ └── utils.ts │ │ ├── MessageViewButton │ │ │ ├── MessageViewButton.cy.tsx │ │ │ ├── MessageViewButton.mdx │ │ │ ├── MessageViewButton.module.css │ │ │ ├── MessageViewButton.stories.tsx │ │ │ └── index.tsx │ │ ├── Modals │ │ │ ├── Modals.cy.tsx │ │ │ ├── Modals.mdx │ │ │ ├── Modals.stories.tsx │ │ │ └── index.tsx │ │ ├── NumericSideIndicator │ │ │ ├── NumericSideIndicator.module.css │ │ │ └── index.tsx │ │ ├── ObjectPage │ │ │ ├── CollapsedAvatar.module.css │ │ │ ├── CollapsedAvatar.tsx │ │ │ ├── ObjectPage.cy.tsx │ │ │ ├── ObjectPage.mdx │ │ │ ├── ObjectPage.module.css │ │ │ ├── ObjectPage.stories.tsx │ │ │ ├── ObjectPageUtils.ts │ │ │ ├── index.tsx │ │ │ ├── types │ │ │ │ └── index.ts │ │ │ ├── useHandleTabSelect.ts │ │ │ └── useOnScrollEnd.ts │ │ ├── ObjectPageAnchorBar │ │ │ ├── ObjectPageAnchorBar.module.css │ │ │ └── index.tsx │ │ ├── ObjectPageHeader │ │ │ ├── ObjectPageHeader.module.css │ │ │ └── index.tsx │ │ ├── ObjectPageSection │ │ │ ├── ObjectPageSection.module.css │ │ │ └── index.tsx │ │ ├── ObjectPageSubSection │ │ │ ├── ObjectPageSubSection.module.css │ │ │ └── index.tsx │ │ ├── ObjectPageTitle │ │ │ ├── ActionsSpacer.tsx │ │ │ ├── ObjectPageTitle.cy.tsx │ │ │ ├── ObjectPageTitle.module.css │ │ │ ├── index.tsx │ │ │ └── types │ │ │ │ └── index.ts │ │ ├── ObjectStatus │ │ │ ├── ObjectStatus.cy.tsx │ │ │ ├── ObjectStatus.mdx │ │ │ ├── ObjectStatus.module.css │ │ │ ├── ObjectStatus.stories.tsx │ │ │ └── index.tsx │ │ ├── ResponsiveGridLayout │ │ │ ├── ResponsiveGridLayout.cy.tsx │ │ │ ├── ResponsiveGridLayout.mdx │ │ │ ├── ResponsiveGridLayout.module.css │ │ │ ├── ResponsiveGridLayout.stories.tsx │ │ │ └── index.tsx │ │ ├── SelectDialog │ │ │ ├── SelectDialog.cy.tsx │ │ │ ├── SelectDialog.mdx │ │ │ ├── SelectDialog.module.css │ │ │ ├── SelectDialog.stories.tsx │ │ │ └── index.tsx │ │ ├── Splitter │ │ │ ├── Splitter.module.css │ │ │ └── index.tsx │ │ ├── SplitterElement │ │ │ ├── SplitterElement.module.css │ │ │ └── index.tsx │ │ ├── SplitterLayout │ │ │ ├── SplitterLayout.cy.tsx │ │ │ ├── SplitterLayout.mdx │ │ │ ├── SplitterLayout.module.css │ │ │ ├── SplitterLayout.stories.tsx │ │ │ ├── index.tsx │ │ │ └── useConcatSplitterElements.tsx │ │ ├── ThemeProvider │ │ │ ├── I18n.cy.tsx │ │ │ ├── Sizes.css │ │ │ ├── ThemeProvider.css │ │ │ ├── ThemeProvider.cy.tsx │ │ │ └── index.tsx │ │ └── VariantManagement │ │ │ ├── ManageViewsDialog.module.css │ │ │ ├── ManageViewsDialog.tsx │ │ │ ├── ManageViewsTableRows.tsx │ │ │ ├── SaveViewDialog.module.css │ │ │ ├── SaveViewDialog.tsx │ │ │ ├── VariantItem.module.css │ │ │ ├── VariantItem.tsx │ │ │ ├── VariantManagement.cy.tsx │ │ │ ├── VariantManagement.mdx │ │ │ ├── VariantManagement.module.css │ │ │ ├── VariantManagement.stories.tsx │ │ │ ├── index.tsx │ │ │ └── types.ts │ ├── enums │ │ ├── AnalyticalTablePopinDisplay.ts │ │ ├── AnalyticalTableScaleWidthMode.ts │ │ ├── AnalyticalTableScrollMode.ts │ │ ├── AnalyticalTableSelectionBehavior.ts │ │ ├── AnalyticalTableSelectionMode.ts │ │ ├── AnalyticalTableSubComponentsBehavior.ts │ │ ├── AnalyticalTableVisibleRowCountMode.ts │ │ ├── ContentDensity.ts │ │ ├── DeviationIndicator.ts │ │ ├── FlexBoxAlignItems.ts │ │ ├── FlexBoxDirection.ts │ │ ├── FlexBoxJustifyContent.ts │ │ ├── FlexBoxWrap.ts │ │ ├── GridPosition.ts │ │ ├── IndicationColor.ts │ │ ├── MessageBoxAction.ts │ │ ├── MessageBoxType.ts │ │ ├── ObjectPageMode.ts │ │ ├── Size.ts │ │ ├── TextAlign.ts │ │ ├── Theme.ts │ │ ├── ValueColor.ts │ │ ├── VerticalAlign.ts │ │ └── index.ts │ ├── i18n │ │ ├── messagebundle.properties │ │ ├── messagebundle_ar.properties │ │ ├── messagebundle_bg.properties │ │ ├── messagebundle_ca.properties │ │ ├── messagebundle_cnr.properties │ │ ├── messagebundle_cs.properties │ │ ├── messagebundle_cy.properties │ │ ├── messagebundle_da.properties │ │ ├── messagebundle_de.properties │ │ ├── messagebundle_el.properties │ │ ├── messagebundle_en.properties │ │ ├── messagebundle_en_GB.properties │ │ ├── messagebundle_en_US_sappsd.properties │ │ ├── messagebundle_en_US_saprigi.properties │ │ ├── messagebundle_en_US_saptrc.properties │ │ ├── messagebundle_es.properties │ │ ├── messagebundle_es_MX.properties │ │ ├── messagebundle_et.properties │ │ ├── messagebundle_fi.properties │ │ ├── messagebundle_fr.properties │ │ ├── messagebundle_fr_CA.properties │ │ ├── messagebundle_hi.properties │ │ ├── messagebundle_hr.properties │ │ ├── messagebundle_hu.properties │ │ ├── messagebundle_id.properties │ │ ├── messagebundle_it.properties │ │ ├── messagebundle_iw.properties │ │ ├── messagebundle_ja.properties │ │ ├── messagebundle_kk.properties │ │ ├── messagebundle_ko.properties │ │ ├── messagebundle_lt.properties │ │ ├── messagebundle_lv.properties │ │ ├── messagebundle_mk.properties │ │ ├── messagebundle_ms.properties │ │ ├── messagebundle_nl.properties │ │ ├── messagebundle_no.properties │ │ ├── messagebundle_pl.properties │ │ ├── messagebundle_pt.properties │ │ ├── messagebundle_pt_PT.properties │ │ ├── messagebundle_ro.properties │ │ ├── messagebundle_ru.properties │ │ ├── messagebundle_sh.properties │ │ ├── messagebundle_sk.properties │ │ ├── messagebundle_sl.properties │ │ ├── messagebundle_sr.properties │ │ ├── messagebundle_sv.properties │ │ ├── messagebundle_th.properties │ │ ├── messagebundle_tr.properties │ │ ├── messagebundle_uk.properties │ │ ├── messagebundle_vi.properties │ │ ├── messagebundle_zh_CN.properties │ │ └── messagebundle_zh_TW.properties │ ├── index.ts │ ├── internal │ │ ├── ContainerQueries.ts │ │ ├── DynamicPageStickyHeader.css │ │ ├── FilterBarDialogContext.ts │ │ ├── MessageViewContext.ts │ │ ├── ModalStore.ts │ │ ├── OverflowPopoverContext.ts │ │ ├── SplitterLayoutContext.ts │ │ ├── VariantManagementContext.ts │ │ ├── getRandomId.ts │ │ ├── safeGetChildrenArray.ts │ │ ├── stopPropagation.ts │ │ ├── useObserveHeights.ts │ │ ├── utils.cy.tsx │ │ ├── utils.ts │ │ └── withWebComponent.tsx │ ├── themes │ │ ├── CustomVariables.ts │ │ ├── base.css │ │ ├── sap_belize.css │ │ ├── sap_belize_hcb.css │ │ ├── sap_belize_hcw.css │ │ ├── sap_fiori_3.css │ │ ├── sap_fiori_3_dark.css │ │ ├── sap_fiori_3_hcb.css │ │ ├── sap_fiori_3_hcw.css │ │ ├── sap_horizon.css │ │ ├── sap_horizon_dark.css │ │ ├── sap_horizon_hcb.css │ │ └── sap_horizon_hcw.css │ ├── types │ │ ├── CommonProps.ts │ │ ├── Ui5CustomEvent.ts │ │ ├── Ui5DomRef.ts │ │ └── index.ts │ └── webComponents │ │ ├── Avatar │ │ ├── Avatar.mdx │ │ ├── Avatar.stories.tsx │ │ └── index.tsx │ │ ├── AvatarGroup │ │ ├── AvatarGroup.mdx │ │ ├── AvatarGroup.stories.tsx │ │ └── index.tsx │ │ ├── Bar │ │ ├── Bar.mdx │ │ ├── Bar.stories.tsx │ │ └── index.tsx │ │ ├── BarcodeScannerDialog │ │ ├── BarcodeScannerDialog.mdx │ │ ├── BarcodeScannerDialog.stories.tsx │ │ └── index.tsx │ │ ├── Breadcrumbs │ │ ├── Breadcrumbs.mdx │ │ ├── Breadcrumbs.stories.tsx │ │ └── index.tsx │ │ ├── BreadcrumbsItem │ │ └── index.tsx │ │ ├── BusyIndicator │ │ ├── BusyIndicator.mdx │ │ ├── BusyIndicator.stories.tsx │ │ └── index.tsx │ │ ├── Button │ │ ├── Button.mdx │ │ ├── Button.stories.tsx │ │ └── index.tsx │ │ ├── ButtonBadge │ │ └── index.tsx │ │ ├── Calendar │ │ ├── Calendar.mdx │ │ ├── Calendar.stories.tsx │ │ └── index.tsx │ │ ├── CalendarDate │ │ └── index.tsx │ │ ├── CalendarDateRange │ │ └── index.tsx │ │ ├── CalendarLegend │ │ └── index.tsx │ │ ├── CalendarLegendItem │ │ └── index.tsx │ │ ├── Card │ │ ├── Card.mdx │ │ ├── Card.stories.tsx │ │ └── index.tsx │ │ ├── CardHeader │ │ └── index.tsx │ │ ├── Carousel │ │ ├── Carousel.mdx │ │ ├── Carousel.stories.tsx │ │ └── index.tsx │ │ ├── CheckBox │ │ ├── CheckBox.mdx │ │ ├── CheckBox.stories.tsx │ │ └── index.tsx │ │ ├── ColorPalette │ │ ├── ColorPalette.mdx │ │ ├── ColorPalette.stories.tsx │ │ └── index.tsx │ │ ├── ColorPaletteItem │ │ └── index.tsx │ │ ├── ColorPalettePopover │ │ ├── ColorPalettePopover.mdx │ │ ├── ColorPalettePopover.stories.tsx │ │ └── index.tsx │ │ ├── ColorPicker │ │ ├── ColorPicker.mdx │ │ ├── ColorPicker.stories.tsx │ │ └── index.tsx │ │ ├── ComboBox │ │ ├── ComboBox.mdx │ │ ├── ComboBox.stories.tsx │ │ └── index.tsx │ │ ├── ComboBoxItem │ │ └── index.tsx │ │ ├── ComboBoxItemGroup │ │ └── index.tsx │ │ ├── DatePicker │ │ ├── DatePicker.mdx │ │ ├── DatePicker.stories.tsx │ │ └── index.tsx │ │ ├── DateRangePicker │ │ ├── DateRangePicker.mdx │ │ ├── DateRangePicker.stories.tsx │ │ └── index.tsx │ │ ├── DateTimePicker │ │ ├── DateTimePicker.mdx │ │ ├── DateTimePicker.stories.tsx │ │ └── index.tsx │ │ ├── Dialog │ │ ├── Dialog.mdx │ │ ├── Dialog.stories.tsx │ │ └── index.tsx │ │ ├── DynamicDateRange │ │ ├── DynamicDateRange.mdx │ │ ├── DynamicDateRange.stories.tsx │ │ └── index.tsx │ │ ├── DynamicPage │ │ ├── DynamicPage.mdx │ │ ├── DynamicPage.stories.tsx │ │ ├── helpers.ts │ │ └── index.tsx │ │ ├── DynamicPageHeader │ │ └── index.tsx │ │ ├── DynamicPageTitle │ │ └── index.tsx │ │ ├── DynamicSideContent │ │ ├── DynamicSideContent.mdx │ │ ├── DynamicSideContent.stories.tsx │ │ └── index.tsx │ │ ├── ExpandableText │ │ ├── ExpandableText.cy.tsx │ │ ├── ExpandableText.mdx │ │ ├── ExpandableText.stories.tsx │ │ └── index.tsx │ │ ├── FileUploader │ │ ├── FileUploader.mdx │ │ ├── FileUploader.stories.tsx │ │ └── index.tsx │ │ ├── FilterItem │ │ └── index.tsx │ │ ├── FilterItemOption │ │ └── index.tsx │ │ ├── FlexibleColumnLayout │ │ ├── FlexibleColumnLayout.mdx │ │ ├── FlexibleColumnLayout.stories.tsx │ │ └── index.tsx │ │ ├── Form │ │ ├── Form.mdx │ │ ├── Form.stories.tsx │ │ └── index.tsx │ │ ├── FormGroup │ │ └── index.tsx │ │ ├── FormItem │ │ └── index.tsx │ │ ├── Icon │ │ ├── Icon.mdx │ │ ├── Icon.stories.tsx │ │ └── index.tsx │ │ ├── IllustratedMessage │ │ ├── IllustratedMessage.mdx │ │ ├── IllustratedMessage.stories.tsx │ │ └── index.tsx │ │ ├── Input │ │ ├── Input.mdx │ │ ├── Input.stories.tsx │ │ └── index.tsx │ │ ├── Label │ │ ├── Label.mdx │ │ ├── Label.stories.tsx │ │ └── index.tsx │ │ ├── Link │ │ ├── Link.mdx │ │ ├── Link.stories.tsx │ │ └── index.tsx │ │ ├── List │ │ ├── List.mdx │ │ ├── List.stories.tsx │ │ └── index.tsx │ │ ├── ListItemCustom │ │ └── index.tsx │ │ ├── ListItemGroup │ │ └── index.tsx │ │ ├── ListItemStandard │ │ └── index.tsx │ │ ├── MediaGallery │ │ ├── MediaGallery.mdx │ │ ├── MediaGallery.stories.tsx │ │ └── index.tsx │ │ ├── MediaGalleryItem │ │ └── index.tsx │ │ ├── Menu │ │ ├── Menu.mdx │ │ ├── Menu.stories.tsx │ │ └── index.tsx │ │ ├── MenuItem │ │ └── index.tsx │ │ ├── MenuSeparator │ │ └── index.tsx │ │ ├── MessageStrip │ │ ├── MessageStrip.mdx │ │ ├── MessageStrip.stories.tsx │ │ └── index.tsx │ │ ├── MultiComboBox │ │ ├── MultiComboBox.mdx │ │ ├── MultiComboBox.stories.tsx │ │ └── index.tsx │ │ ├── MultiComboBoxItem │ │ └── index.tsx │ │ ├── MultiComboBoxItemGroup │ │ └── index.tsx │ │ ├── MultiInput │ │ ├── MultiInput.mdx │ │ ├── MultiInput.stories.tsx │ │ └── index.tsx │ │ ├── NavigationLayout │ │ ├── NavigationLayout.mdx │ │ ├── NavigationLayout.stories.tsx │ │ └── index.tsx │ │ ├── NotificationList │ │ ├── NotificationList.mdx │ │ ├── NotificationList.stories.tsx │ │ └── index.tsx │ │ ├── NotificationListGroupItem │ │ └── index.tsx │ │ ├── NotificationListItem │ │ └── index.tsx │ │ ├── Option │ │ └── index.tsx │ │ ├── OptionCustom │ │ └── index.tsx │ │ ├── Page │ │ ├── Page.mdx │ │ ├── Page.stories.tsx │ │ └── index.tsx │ │ ├── Panel │ │ ├── Panel.mdx │ │ ├── Panel.stories.tsx │ │ └── index.tsx │ │ ├── Popover │ │ ├── Popover.mdx │ │ ├── Popover.stories.tsx │ │ └── index.tsx │ │ ├── ProductSwitch │ │ ├── ProductSwitch.mdx │ │ ├── ProductSwitch.stories.tsx │ │ └── index.tsx │ │ ├── ProductSwitchItem │ │ └── index.tsx │ │ ├── ProgressIndicator │ │ ├── ProgressIndicator.mdx │ │ ├── ProgressIndicator.stories.tsx │ │ └── index.tsx │ │ ├── RadioButton │ │ ├── RadioButton.mdx │ │ ├── RadioButton.stories.tsx │ │ └── index.tsx │ │ ├── RangeSlider │ │ ├── RangeSlider.mdx │ │ ├── RangeSlider.stories.tsx │ │ └── index.tsx │ │ ├── RatingIndicator │ │ ├── RatingIndicator.mdx │ │ ├── RatingIndicator.stories.tsx │ │ └── index.tsx │ │ ├── ResponsivePopover │ │ ├── ResponsivePopover.mdx │ │ ├── ResponsivePopover.stories.tsx │ │ └── index.tsx │ │ ├── Search │ │ ├── Search.mdx │ │ ├── Search.stories.tsx │ │ └── index.tsx │ │ ├── SearchItem │ │ └── index.tsx │ │ ├── SearchItemGroup │ │ └── index.tsx │ │ ├── SearchMessageArea │ │ └── index.tsx │ │ ├── SearchScope │ │ └── index.tsx │ │ ├── SegmentedButton │ │ ├── SegmentedButton.mdx │ │ ├── SegmentedButton.stories.tsx │ │ └── index.tsx │ │ ├── SegmentedButtonItem │ │ └── index.tsx │ │ ├── Select │ │ ├── Select.mdx │ │ ├── Select.stories.tsx │ │ └── index.tsx │ │ ├── ShellBar │ │ ├── ShellBar.mdx │ │ ├── ShellBar.stories.tsx │ │ └── index.tsx │ │ ├── ShellBarItem │ │ └── index.tsx │ │ ├── ShellBarSearch │ │ └── index.tsx │ │ ├── ShellBarSpacer │ │ └── index.tsx │ │ ├── SideNavigation │ │ ├── SideNavigation.mdx │ │ ├── SideNavigation.stories.tsx │ │ └── index.tsx │ │ ├── SideNavigationGroup │ │ └── index.tsx │ │ ├── SideNavigationItem │ │ └── index.tsx │ │ ├── SideNavigationSubItem │ │ └── index.tsx │ │ ├── Slider │ │ ├── Slider.mdx │ │ ├── Slider.stories.tsx │ │ └── index.tsx │ │ ├── SortItem │ │ └── index.tsx │ │ ├── SpecialCalendarDate │ │ └── index.tsx │ │ ├── SplitButton │ │ ├── SplitButton.mdx │ │ ├── SplitButton.stories.tsx │ │ └── index.tsx │ │ ├── StepInput │ │ ├── StepInput.mdx │ │ ├── StepInput.stories.tsx │ │ └── index.tsx │ │ ├── SuggestionItem │ │ └── index.tsx │ │ ├── SuggestionItemCustom │ │ └── index.tsx │ │ ├── SuggestionItemGroup │ │ └── index.tsx │ │ ├── Switch │ │ ├── Switch.mdx │ │ ├── Switch.stories.tsx │ │ └── index.tsx │ │ ├── Tab │ │ └── index.tsx │ │ ├── TabContainer │ │ ├── TabContainer.mdx │ │ ├── TabContainer.stories.tsx │ │ └── index.tsx │ │ ├── TabSeparator │ │ └── index.tsx │ │ ├── Table │ │ ├── Table.mdx │ │ ├── Table.stories.tsx │ │ └── index.tsx │ │ ├── TableCell │ │ └── index.tsx │ │ ├── TableGrowing │ │ └── index.tsx │ │ ├── TableHeaderCell │ │ └── index.tsx │ │ ├── TableHeaderCellActionAI │ │ └── index.tsx │ │ ├── TableHeaderRow │ │ └── index.tsx │ │ ├── TableRow │ │ └── index.tsx │ │ ├── TableRowAction │ │ └── index.tsx │ │ ├── TableRowActionNavigation │ │ └── index.tsx │ │ ├── TableSelection │ │ └── index.tsx │ │ ├── TableSelectionMulti │ │ └── index.tsx │ │ ├── TableSelectionSingle │ │ └── index.tsx │ │ ├── TableVirtualizer │ │ └── index.tsx │ │ ├── Tag │ │ ├── Tag.mdx │ │ ├── Tag.stories.tsx │ │ └── index.tsx │ │ ├── Text │ │ ├── Text.mdx │ │ ├── Text.stories.tsx │ │ └── index.tsx │ │ ├── TextArea │ │ ├── TextArea.mdx │ │ ├── TextArea.stories.tsx │ │ └── index.tsx │ │ ├── TimePicker │ │ ├── TimePicker.mdx │ │ ├── TimePicker.stories.tsx │ │ └── index.tsx │ │ ├── Timeline │ │ ├── Timeline.mdx │ │ ├── Timeline.stories.tsx │ │ └── index.tsx │ │ ├── TimelineGroupItem │ │ └── index.tsx │ │ ├── TimelineItem │ │ └── index.tsx │ │ ├── Title │ │ ├── Title.mdx │ │ ├── Title.stories.tsx │ │ └── index.tsx │ │ ├── Toast │ │ ├── Toast.mdx │ │ ├── Toast.stories.tsx │ │ └── index.tsx │ │ ├── ToggleButton │ │ ├── ToggleButton.mdx │ │ ├── ToggleButton.stories.tsx │ │ └── index.tsx │ │ ├── Token │ │ └── index.tsx │ │ ├── Tokenizer │ │ ├── Tokenizer.mdx │ │ ├── Tokenizer.stories.tsx │ │ └── index.tsx │ │ ├── Toolbar │ │ ├── Toolbar.mdx │ │ ├── Toolbar.stories.tsx │ │ └── index.tsx │ │ ├── ToolbarButton │ │ └── index.tsx │ │ ├── ToolbarSelect │ │ └── index.tsx │ │ ├── ToolbarSelectOption │ │ └── index.tsx │ │ ├── ToolbarSeparator │ │ └── index.tsx │ │ ├── ToolbarSpacer │ │ └── index.tsx │ │ ├── Tree │ │ ├── Tree.mdx │ │ ├── Tree.stories.tsx │ │ └── index.tsx │ │ ├── TreeItem │ │ └── index.tsx │ │ ├── TreeItemCustom │ │ └── index.tsx │ │ ├── UploadCollection │ │ ├── UploadCollection.mdx │ │ ├── UploadCollection.stories.tsx │ │ └── index.tsx │ │ ├── UploadCollectionItem │ │ └── index.tsx │ │ ├── UserMenu │ │ ├── UserMenu.mdx │ │ ├── UserMenu.stories.tsx │ │ └── index.tsx │ │ ├── UserMenuAccount │ │ └── index.tsx │ │ ├── UserMenuItem │ │ └── index.tsx │ │ ├── UserSettingsDialog │ │ ├── UserSettingsDialog.mdx │ │ ├── UserSettingsDialog.stories.tsx │ │ └── index.tsx │ │ ├── UserSettingsItem │ │ └── index.tsx │ │ ├── UserSettingsView │ │ └── index.tsx │ │ ├── ViewSettingsDialog │ │ ├── ViewSettingsDialog.mdx │ │ ├── ViewSettingsDialog.stories.tsx │ │ └── index.tsx │ │ ├── Wizard │ │ ├── Wizard.mdx │ │ ├── Wizard.stories.tsx │ │ └── index.tsx │ │ ├── WizardStep │ │ └── index.tsx │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── patterns ├── Docs.mdx ├── navigation-layout │ ├── .gitignore │ ├── README.md │ ├── eslint.config.mjs │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── App.tsx │ │ ├── ClearAllMessageBox.tsx │ │ ├── NLShellBar.tsx │ │ ├── NLSideNavigation.tsx │ │ ├── NLUserMenu.tsx │ │ ├── NotificationsPopover.tsx │ │ ├── UserSettingsDialog │ │ │ ├── AppearanceItem.tsx │ │ │ ├── LanguageRegionItem.tsx │ │ │ ├── MobileItem.tsx │ │ │ ├── NLUserSettingsDialog.tsx │ │ │ ├── ResetItem.tsx │ │ │ └── UserAccountItem.tsx │ │ ├── assets │ │ │ ├── avatar.png │ │ │ └── sap-logo.svg │ │ ├── index.css │ │ ├── main.tsx │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── selection-assistant │ ├── InputSelectionAssistant.tsx │ ├── SelectionAssistant.mdx │ ├── SelectionAssistantContainer.tsx │ └── TextAreaSelectionAssistant.tsx ├── prettier.config.js ├── scripts ├── create-storybook-sitemap.js ├── generate-theming-parameters.js ├── generate-version-info.js └── postcss-css-to-esm.mjs ├── templates ├── nextjs-app │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── clientAssetsImport.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ └── tsconfig.json ├── nextjs-pages │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── pages │ │ ├── _app.tsx │ │ └── index.tsx │ ├── styles │ │ └── globals.css │ └── tsconfig.json └── vite-ts │ ├── .gitignore │ ├── README.md │ ├── cypress.config.ts │ ├── cypress │ ├── fixtures │ │ └── example.json │ └── support │ │ ├── commands.ts │ │ ├── component-index.html │ │ └── component.tsx │ ├── eslint.config.mjs │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── App.cy.tsx │ ├── App.tsx │ ├── index.css │ ├── main.tsx │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── translation_v2.json ├── tsconfig.base.json ├── tsconfig.build.json ├── tsconfig.json ├── tsconfig.node.json ├── tsconfig.spec.json ├── types.d.ts ├── vite.config.ts └── yarn.lock /.browserslistrc: -------------------------------------------------------------------------------- 1 | [production] 2 | last 2 Safari versions 3 | last 2 Chrome versions 4 | last 2 Edge versions 5 | last 2 Firefox versions 6 | last 2 iOS versions 7 | last 2 ChromeAndroid versions 8 | last 2 FirefoxAndroid versions 9 | 10 | [development] 11 | last 1 chrome version 12 | last 1 edge version 13 | last 1 safari version 14 | last 1 firefox version 15 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | charset = utf-8 11 | 12 | # Indentation override for all JS under lib directory 13 | [*.{js,jsx,ts,tsx}] 14 | indent_style = space 15 | indent_size = 2 16 | quote_type = single 17 | 18 | [makefile] 19 | indent_style = tab 20 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # general code owners 2 | * @MarcusNotheis @Lukas742 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Questions 4 | url: https://github.com/SAP/ui5-webcomponents-react/discussions 5 | about: Please ask and answer questions here. 6 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **Thank you for your contribution!** 👏 2 | 3 | To get it merged faster, kindly review the checklist below: 4 | 5 | ## Pull Request Checklist 6 | 7 | - [ ] Reviewed the [Contributing Guidelines](https://github.com/SAP/ui5-webcomponents-react/blob/main/CONTRIBUTING.md) 8 | - Especially the [How to Contribute](https://github.com/SAP/ui5-webcomponents-react/blob/main/CONTRIBUTING.md#contribute-code) section 9 | - [ ] [Correct commit message style](https://github.com/SAP/ui5-webcomponents-react/blob/main/docs/Guidelines.md#commit-message-style) 10 | -------------------------------------------------------------------------------- /.github/workflows/open-source-security.yml: -------------------------------------------------------------------------------- 1 | name: Open Source Security 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | schedule: 8 | - cron: '12 3 * * *' 9 | workflow_dispatch: 10 | 11 | jobs: 12 | piper-oss: 13 | name: 'Security' 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | 18 | - name: artifactPrepareVersion 19 | uses: SAP/project-piper-action@v1.20.0 20 | with: 21 | step-name: artifactPrepareVersion 22 | flags: --versioningType cloud_noTag 23 | 24 | - name: detectExecuteScan 25 | uses: SAP/project-piper-action@v1.20.0 26 | with: 27 | step-name: detectExecuteScan 28 | flags: '--token ${{ secrets.DETECT_TOKEN }}' 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | node_modules 3 | *.iml 4 | yarn-error.log 5 | .idea 6 | /.env 7 | @types 8 | .cache 9 | .out 10 | lerna-debug.log 11 | /temp 12 | *.tsbuildinfo 13 | 14 | .pnp.* 15 | .yarn/* 16 | !.yarn/patches 17 | !.yarn/plugins 18 | !.yarn/releases 19 | !.yarn/sdks 20 | !.yarn/versions 21 | 22 | packages/cypress-commands/api-commands.json 23 | packages/cypress-commands/api-queries.json 24 | 25 | packages/main/scripts/wrapperGeneration/json 26 | packages/main/tmp 27 | packages/*/src/generated/ 28 | 29 | .nx 30 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | yarn run lint-staged 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22.16.0 2 | -------------------------------------------------------------------------------- /.pipeline/config.yml: -------------------------------------------------------------------------------- 1 | general: 2 | owner: SAP 3 | repository: ui5-webcomponents-react 4 | buildTool: yarn 5 | steps: 6 | artifactPrepareVersion: 7 | filePath: 'lerna.json' 8 | versioningType: 'library' 9 | customVersionField: 'version' 10 | 11 | detectExecuteScan: 12 | serverUrl: 'https://sap.blackducksoftware.com' 13 | projectName: 'ui5-webcomponents-react' 14 | groups: 15 | - 'ui5-webcomponents-react' 16 | npmDependencyTypesExcluded: ['DEV'] 17 | useDetect9: true 18 | excludedPackageManagers: 19 | - 'LERNA' 20 | customEnvironmentVariables: 21 | - 'DETECT_YARN_DEPENDENCY_TYPES_EXCLUDED=NON_PRODUCTION' 22 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.module.css.ts 2 | *.css.ts 3 | 4 | yarn.lock 5 | .next 6 | dist 7 | temp 8 | .out 9 | 10 | .nx -------------------------------------------------------------------------------- /.storybook/addons/version-switch/manager.ts: -------------------------------------------------------------------------------- 1 | import '../../components/VersionSwitch.js'; 2 | -------------------------------------------------------------------------------- /.storybook/components/ArgTypesWithNote.module.css: -------------------------------------------------------------------------------- 1 | .tableContainer { 2 | margin-top: 25px; 3 | 4 | table { 5 | margin-top: 0 !important; 6 | } 7 | } 8 | 9 | .strip { 10 | margin-bottom: 10px; 11 | } 12 | -------------------------------------------------------------------------------- /.storybook/components/ControlsWithNote.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | margin-block-start: 25px !important; 3 | } 4 | 5 | .container:has(> .strip) table { 6 | margin-top: 0px; 7 | } 8 | 9 | .strip { 10 | margin-block-end: 10px; 11 | } 12 | -------------------------------------------------------------------------------- /.storybook/components/DocsHeader.module.css: -------------------------------------------------------------------------------- 1 | .infoTable { 2 | margin: 1rem 0; 3 | border-spacing: 0; 4 | width: unset; 5 | } 6 | 7 | .infoTable th, 8 | .infoTable td { 9 | margin-top: 0; 10 | margin-bottom: 0.75rem; 11 | text-align: start; 12 | height: 1.5rem; 13 | } 14 | 15 | .infoTable th { 16 | padding-inline-end: 1.25rem; 17 | vertical-align: baseline; 18 | } 19 | 20 | .copyBtn { 21 | position: absolute; 22 | top: 4px; 23 | right: 8px; 24 | display: none; 25 | } 26 | 27 | .hoverTr { 28 | position: relative; 29 | } 30 | 31 | .hoverTr:hover .copyBtn { 32 | display: inline-block; 33 | } 34 | 35 | .infoTable td[data-import-cell='true'] { 36 | padding-inline-end: 2.5rem; 37 | } 38 | 39 | .titleRow { 40 | padding-block-end: 0.5rem; 41 | } 42 | 43 | .titleRow :global(.sbdocs-title) { 44 | margin-bottom: 0; 45 | } 46 | 47 | .experimentalLabel { 48 | font-size: var(--sapObjectHeader_Title_SnappedFontSize); 49 | margin-inline-start: 0.25rem; 50 | align-self: flex-end; 51 | } 52 | -------------------------------------------------------------------------------- /.storybook/components/DomRefTable.module.css: -------------------------------------------------------------------------------- 1 | .parameters:not(:last-child) { 2 | margin-block-end: 1rem; 3 | } 4 | 5 | .parameterName { 6 | font-weight: bold; 7 | } 8 | 9 | .parameterDetails { 10 | padding-inline: 1rem; 11 | } 12 | 13 | .domRefCodeBlock { 14 | display: contents; 15 | overflow-x: auto; 16 | padding: 0; 17 | background: white; 18 | color: black; 19 | white-space: pre-wrap; 20 | font-size: 14px; 21 | margin: 0; 22 | } 23 | 24 | .domRefCode { 25 | white-space: pre; 26 | 27 | > span { 28 | font-size: 14px; 29 | } 30 | } 31 | 32 | .deprecationInfoBadge { 33 | margin-top: 0.5rem !important; 34 | } 35 | 36 | .deprecationInfoPopover { 37 | max-width: 15rem; 38 | } 39 | 40 | .deprecationInfoPopover::part(content) { 41 | padding: 0.5rem; 42 | } 43 | -------------------------------------------------------------------------------- /.storybook/components/FilterBarExample.module.css: -------------------------------------------------------------------------------- 1 | .filterBarDemo { 2 | padding: 1rem; 3 | border: var(--sapElement_BorderWidth) solid var(--sapNeutralBorderColor); 4 | border-radius: var(--sapElement_BorderCornerRadius); 5 | } 6 | 7 | .filterBarDemo [ui5-dialog] { 8 | max-height: 80vh; 9 | } 10 | -------------------------------------------------------------------------------- /.storybook/components/Footer.module.css: -------------------------------------------------------------------------------- 1 | .footer { 2 | container: footer / inline-size; 3 | width: 100%; 4 | position: fixed; 5 | bottom: 0; 6 | z-index: 2; 7 | } 8 | 9 | .content { 10 | min-height: 2.75rem; 11 | padding-inline: 1rem; 12 | display: flex; 13 | align-items: center; 14 | background-color: var(--sapPageFooter_Background); 15 | border-top: 0.0625rem solid var(--sapPageFooter_BorderColor); 16 | overflow: hidden; 17 | } 18 | 19 | @container (max-width: 599px) { 20 | .footer { 21 | padding-inline: 1rem; 22 | } 23 | } 24 | 25 | @container (min-width: 600px) and (max-width: 1023px) { 26 | .footer { 27 | padding-inline: 2rem; 28 | } 29 | } 30 | 31 | @container (min-width: 1024px) and (max-width: 1439px) { 32 | .footer { 33 | padding-inline: 2rem; 34 | } 35 | } 36 | 37 | @container (min-width: 1440px) { 38 | .footer { 39 | padding-inline: 3rem; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /.storybook/components/GitHub-Mark.tsx: -------------------------------------------------------------------------------- 1 | export const GitHubLogo = () => ( 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | ); 14 | -------------------------------------------------------------------------------- /.storybook/components/LabelWithWrapping.tsx: -------------------------------------------------------------------------------- 1 | import WrappingType from '@ui5/webcomponents/dist/types/WrappingType.js'; 2 | import { Label } from '@ui5/webcomponents-react'; 3 | 4 | //mdx adds a paragraph to children if added inline, this component prevents that. 5 | export const LabelWithWrapping = ({ children }: { children: string }) => { 6 | return ; 7 | }; 8 | -------------------------------------------------------------------------------- /.storybook/components/ProjectTemplate.module.css: -------------------------------------------------------------------------------- 1 | .cardContainer { 2 | position: relative; 3 | width: 500px; 4 | margin-block-end: 2rem; 5 | flex-shrink: 0; 6 | } 7 | 8 | .cardContent { 9 | padding: 1rem; 10 | } 11 | 12 | .deprecationNotice { 13 | margin-block-end: 0.5rem; 14 | } 15 | 16 | .template { 17 | width: 300px; 18 | height: unset; 19 | .unssupportedMessage { 20 | inset-block-end: 70px; 21 | } 22 | } 23 | 24 | .overlay { 25 | opacity: 0.5; 26 | pointer-events: none; 27 | } 28 | 29 | .unssupportedMessage { 30 | position: absolute; 31 | z-index: 1; 32 | inset-block-end: 180px; 33 | inset-inline-start: 5%; 34 | width: 90%; 35 | } 36 | 37 | .popover::part(content) { 38 | padding: 0.5rem; 39 | } 40 | 41 | .verticalLine { 42 | padding-inline: 0.1rem; 43 | } 44 | -------------------------------------------------------------------------------- /.storybook/components/SplitterElementContent.tsx: -------------------------------------------------------------------------------- 1 | import { FlexBox, Text } from '@ui5/webcomponents-react'; 2 | import type { CSSProperties } from 'react'; 3 | 4 | export const SplitterElementContent = ({ 5 | text, 6 | background = 'transparent', 7 | }: { 8 | text: string; 9 | background: CSSProperties['background']; 10 | }) => ( 11 | 12 | {text} 13 | 14 | ); 15 | -------------------------------------------------------------------------------- /.storybook/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArgTypesWithNote.js'; 2 | export * from './ControlsWithNote.js'; 3 | export * from './DocsHeader.js'; 4 | export * from './Footer.js'; 5 | export * from './ProductsTable.js'; 6 | export * from './ProjectTemplate.js'; 7 | export * from './TableOfContent.js'; 8 | export * from './LabelWithWrapping.js'; 9 | export * from './CommandsAndQueries.js'; 10 | export * from './FilterBarExample.js'; 11 | -------------------------------------------------------------------------------- /.storybook/demoImages/Laptop1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/demoImages/Laptop1.jpg -------------------------------------------------------------------------------- /.storybook/demoImages/Laptop2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/demoImages/Laptop2.jpg -------------------------------------------------------------------------------- /.storybook/demoImages/PC1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/demoImages/PC1.jpg -------------------------------------------------------------------------------- /.storybook/demoImages/PC2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/demoImages/PC2.jpg -------------------------------------------------------------------------------- /.storybook/demoImages/Person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/demoImages/Person.png -------------------------------------------------------------------------------- /.storybook/docs/DesignCompliantExampleSection.md: -------------------------------------------------------------------------------- 1 | ## Design-Compliant Examples 2 | 3 | These examples demonstrate the implementation of design specifications. They primarily illustrate design concepts and mostly do not provide additional functionality. You can reference them to select the appropriate design patterns. 4 | -------------------------------------------------------------------------------- /.storybook/docs/SubcomponentsSection.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | # Subcomponents 5 | -------------------------------------------------------------------------------- /.storybook/images-dev/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/images-dev/favicon.ico -------------------------------------------------------------------------------- /.storybook/images/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/images/.nojekyll -------------------------------------------------------------------------------- /.storybook/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/images/favicon.ico -------------------------------------------------------------------------------- /.storybook/images/googleda3b81df2a761821.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googleda3b81df2a761821.html 2 | -------------------------------------------------------------------------------- /.storybook/images/logo-ts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/.storybook/images/logo-ts.png -------------------------------------------------------------------------------- /.storybook/images/master/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.storybook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true 5 | }, 6 | "include": ["./**/*.js", "./**/*.tsx", "./**/*.ts", "../patterns/selection-assistant"] 7 | } 8 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-4.9.1.cjs 4 | -------------------------------------------------------------------------------- /assets/Logo-Sticker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/assets/Logo-Sticker.png -------------------------------------------------------------------------------- /assets/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/assets/Logo.png -------------------------------------------------------------------------------- /assets/SAP_Best_R_grad_blk_scrn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/ui5-webcomponents-react/86664332772a527af88f6accfcf95d3dd0a6c465/assets/SAP_Best_R_grad_blk_scrn.png -------------------------------------------------------------------------------- /config/.gitmessage: -------------------------------------------------------------------------------- 1 | # type is one of fix, feat, chore, docs, style, refactor, perf, test 2 | [optional scope]: 3 | 4 | # [Optional] Body, Indicate a Breaking Change here by starting with BREAKING CHANGE 5 | 6 | # [Optional] Footer, you can reference issues here 7 | -------------------------------------------------------------------------------- /config/layers-plugin.js: -------------------------------------------------------------------------------- 1 | function cssLayersPlugin() { 2 | return { 3 | postcssPlugin: 'css-layers-plugin', 4 | Once(root, { AtRule }) { 5 | const layer = new AtRule({ 6 | name: 'layer', 7 | params: 'ui5-webcomponents-react', 8 | nodes: root.nodes, 9 | }); 10 | root.removeAll(); 11 | root.append(layer); 12 | }, 13 | }; 14 | } 15 | 16 | cssLayersPlugin.postcss = true; 17 | 18 | export default cssLayersPlugin; 19 | -------------------------------------------------------------------------------- /config/merge-css-modules.js: -------------------------------------------------------------------------------- 1 | import { existsSync, readFileSync, writeFileSync } from 'node:fs'; 2 | import { basename, resolve } from 'node:path'; 3 | import { glob } from 'glob'; 4 | 5 | const cssDir = resolve(process.cwd(), 'dist', 'css'); 6 | const cssIndexFile = resolve(cssDir, 'index.css'); 7 | 8 | const cssModules = await glob(`${cssDir}/**/*.module.css`); 9 | 10 | // manually add ThemeProvider 11 | const themeProviderCssPath = resolve(cssDir, 'components', 'ThemeProvider', 'ThemeProvider.css'); 12 | if (existsSync(themeProviderCssPath)) { 13 | cssModules.unshift(themeProviderCssPath); 14 | } 15 | 16 | const fileContent = []; 17 | 18 | for (const cssModule of cssModules) { 19 | const cssContent = readFileSync(cssModule, 'utf-8'); 20 | const componentName = basename(cssModule, '.module.css'); 21 | 22 | fileContent.push(`/* ${componentName} */`); 23 | fileContent.push(cssContent.replace('@layer ui5-webcomponents-react{', '').replace(/}$/, '')); 24 | fileContent.push(''); 25 | } 26 | 27 | writeFileSync(cssIndexFile, fileContent.join('\n')); 28 | -------------------------------------------------------------------------------- /config/paths.js: -------------------------------------------------------------------------------- 1 | import path, { dirname } from 'node:path'; 2 | import { fileURLToPath } from 'node:url'; 3 | 4 | const __filename = fileURLToPath(import.meta.url); 5 | const __dirname = dirname(__filename); 6 | 7 | const root = path.resolve(__dirname, '..'); 8 | const PATHS = { 9 | root, 10 | build: path.join(root, 'build'), 11 | shared: path.join(root, 'shared'), 12 | temp: path.join(root, 'temp'), 13 | nodeModules: path.join(root, 'node_modules'), 14 | packages: path.join(root, 'packages'), 15 | }; 16 | 17 | export default PATHS; 18 | -------------------------------------------------------------------------------- /cypress/support/component-index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Components App 8 | 13 | 14 | 15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /cypress/support/component.tsx: -------------------------------------------------------------------------------- 1 | import 'cypress-real-events'; 2 | import '@cypress/code-coverage/support'; 3 | import '@testing-library/cypress/add-commands'; 4 | import './commands'; 5 | import '../../packages/cypress-commands/src/index.js'; 6 | import '../../packages/main/dist/Assets.js'; 7 | -------------------------------------------------------------------------------- /docs/Changelog.mdx: -------------------------------------------------------------------------------- 1 | import { Meta, Markdown } from '@storybook/blocks'; 2 | import Changelog from '../CHANGELOG.md?raw'; 3 | import { Footer, TableOfContent } from '@sb/components'; 4 | 5 | 6 | 7 | 8 | 9 | {Changelog} 10 | 11 |